decocms 4.204.16 → 4.204.17
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-D1vlyxVP.js → AlertCircle-jo7JUp8J.js} +1 -1
- package/dist/client/assets/{AreaChart-B1N7NT-f.js → AreaChart-mr3NqNIu.js} +1 -1
- package/dist/client/assets/{ArrowLeft-D9iQlUC4.js → ArrowLeft-Culu8gVq.js} +1 -1
- package/dist/client/assets/{ArrowUp-Co3RhqLn.js → ArrowUp-D-4TW5QR.js} +1 -1
- package/dist/client/assets/{ArrowUpRight-CH6iQeT5.js → ArrowUpRight-CjG1ic-Q.js} +1 -1
- package/dist/client/assets/{Check-DB6vbAZm.js → Check-BDhh_h70.js} +1 -1
- package/dist/client/assets/{CheckCircle-Cbp46zMb.js → CheckCircle-RfZTMg53.js} +1 -1
- package/dist/client/assets/{ChevronDown-aOcb5wRM.js → ChevronDown-6Gp-olxR.js} +1 -1
- package/dist/client/assets/{ChevronRight-PV41JKDo.js → ChevronRight-0b_m5LCI.js} +1 -1
- package/dist/client/assets/{ChevronUp-BdT2pFHg.js → ChevronUp-CEPL4tya.js} +1 -1
- package/dist/client/assets/{Copy01-CQxIPksY.js → Copy01-gAI9976i.js} +1 -1
- package/dist/client/assets/{CpuChip01-CbUVfszF.js → CpuChip01-Cn8ozTbc.js} +1 -1
- package/dist/client/assets/{CreditCard01-Bdvp_pbp.js → CreditCard01-COVNzLnF.js} +1 -1
- package/dist/client/assets/{DotsVertical-DMbiy0s4.js → DotsVertical-B351YyvB.js} +1 -1
- package/dist/client/assets/{Eye-BqeBXFlI.js → Eye-CXByfDpx.js} +1 -1
- package/dist/client/assets/{FilterLines-B4-XZmjI.js → FilterLines-BKFtdqR6.js} +1 -1
- package/dist/client/assets/{Globe01-D5pMYgL_.js → Globe01-D8JmsG0H.js} +1 -1
- package/dist/client/assets/{Globe04-BHrQWTPR.js → Globe04-CWz3ZY8K.js} +1 -1
- package/dist/client/assets/{HardDrive-BdfHfWtR.js → HardDrive-BriR7u70.js} +1 -1
- package/dist/client/assets/{Key01-BhCvMePb.js → Key01-BIvS1UMT.js} +1 -1
- package/dist/client/assets/{LayoutLeft-Bv3YQou3.js → LayoutLeft-DUQEBesp.js} +1 -1
- package/dist/client/assets/{LinkExternal01-DsRnJ_7R.js → LinkExternal01-Bh1ZBN79.js} +1 -1
- package/dist/client/assets/{LogOut01-CPLlzIMO.js → LogOut01-CnGEJWnd.js} +1 -1
- package/dist/client/assets/{Monitor01-C9olXxfW.js → Monitor01-BO56MOkt.js} +1 -1
- package/dist/client/assets/{Palette-bVyeeYxf.js → Palette-DsaLFxcV.js} +1 -1
- package/dist/client/assets/{Play-CD0cQdpD.js → Play-BCfliXkR.js} +1 -1
- package/dist/client/assets/{Plus-RbfHJike.js → Plus-Wx3ctj_m.js} +1 -1
- package/dist/client/assets/{SearchLg-ru-L6vTi.js → SearchLg-C5lhh5OI.js} +1 -1
- package/dist/client/assets/{SearchMd-BPv6ozjj.js → SearchMd-DnP0YWds.js} +1 -1
- package/dist/client/assets/{Settings02-DTMCBt4t.js → Settings02-DxDcbhZB.js} +1 -1
- package/dist/client/assets/{Share07-vb5Ngxrm.js → Share07-CBJnjVRw.js} +1 -1
- package/dist/client/assets/{Shield01-C5krvsTw.js → Shield01-BGrjdpZM.js} +1 -1
- package/dist/client/assets/{Star01-CsvLfTii.js → Star01-5EUWqVZl.js} +1 -1
- package/dist/client/assets/{Stars01-CDx627jD.js → Stars01-Dg_58KbX.js} +1 -1
- package/dist/client/assets/{Stars02-CYaaneP9.js → Stars02-Bcd7Ih1-.js} +1 -1
- package/dist/client/assets/{Sun-BgTUFeCZ.js → Sun-D-psniqd.js} +1 -1
- package/dist/client/assets/{SwitchHorizontal01-BpWnJ-AY.js → SwitchHorizontal01-BrrsdOoF.js} +1 -1
- package/dist/client/assets/{Tool01-BeuXox3f.js → Tool01-BtzV_MZd.js} +1 -1
- package/dist/client/assets/{Tool02-DXIdcGsp.js → Tool02-Bdk9qNsX.js} +1 -1
- package/dist/client/assets/{Trash01-CpjEXRDl.js → Trash01-DxqgMwpz.js} +1 -1
- package/dist/client/assets/{TrendUp01-8JU54rUA.js → TrendUp01-D80sIeIu.js} +1 -1
- package/dist/client/assets/{Upload01-B6hL866G.js → Upload01-DTK2lWFi.js} +1 -1
- package/dist/client/assets/{User01-DwFvrTrG.js → User01-Bve-94Cw.js} +1 -1
- package/dist/client/assets/{Users01-zySHcxVr.js → Users01-CNWYs8yj.js} +1 -1
- package/dist/client/assets/{Users03-DQdT1oBk.js → Users03-DEk2TkE4.js} +1 -1
- package/dist/client/assets/{X-Dv5-_ivX.js → X-CUoXmmPw.js} +1 -1
- package/dist/client/assets/{XCircle-BWkQKz8u.js → XCircle-BPYfjSZD.js} +1 -1
- package/dist/client/assets/{XClose-Do-90fAj.js → XClose-Q-idjnvW.js} +1 -1
- package/dist/client/assets/{Zap-D1-oqw9c.js → Zap-CNAz2yMm.js} +1 -1
- package/dist/client/assets/{ZapSquare-nbNDEtKY.js → ZapSquare-DoaYkb_d.js} +1 -1
- package/dist/client/assets/{access-gate-BvZZoelp.js → access-gate-B_icbp9Q.js} +1 -1
- package/dist/client/assets/{agent-icon-DyuykNkS.js → agent-icon-Cg271W1J.js} +1 -1
- package/dist/client/assets/{agents-list-BmNAvxhd.js → agents-list-zA0XI69Z.js} +1 -1
- package/dist/client/assets/{ai-providers-yX2eCNqX.js → ai-providers-C7icIuOY.js} +1 -1
- package/dist/client/assets/{alert-BCz26xAr.js → alert-CJfTV9Kq.js} +1 -1
- package/dist/client/assets/{alert-dialog-D6jbRreE.js → alert-dialog-D5_g0FXx.js} +1 -1
- package/dist/client/assets/{app-editor-W_uAkuE_.js → app-editor-BrZ0yyt9.js} +1 -1
- package/dist/client/assets/{auth-BUcDinRc.js → auth-DaxpKRcZ.js} +1 -1
- package/dist/client/assets/{auth-catchall-DcRVkHUq.js → auth-catchall-BA2WObTk.js} +1 -1
- package/dist/client/assets/{auth-entry-CohLdLW3.js → auth-entry-BatbChKf.js} +1 -1
- package/dist/client/assets/{auth-split-layout-BmQo8Pbg.js → auth-split-layout-C1kA35Zd.js} +1 -1
- package/dist/client/assets/{authenticate-and-persist-oauth-BSY64PTZ.js → authenticate-and-persist-oauth-A5sB7Xt9.js} +1 -1
- package/dist/client/assets/{automation-list-row-BYyHyAd2.js → automation-list-row-CLSKnmPY.js} +1 -1
- package/dist/client/assets/{automation-runs-CyFWkEPX.js → automation-runs-OKfp7twC.js} +1 -1
- package/dist/client/assets/{automations-5V6fBjgT.js → automations-W6fCxjP6.js} +1 -1
- package/dist/client/assets/{avatar-BIU_DPoL.js → avatar-DUXqo1zi.js} +1 -1
- package/dist/client/assets/{badge-DdSicAOT.js → badge-DjszGOfy.js} +1 -1
- package/dist/client/assets/{billing-kUDa3QrU.js → billing-D2ffyiGv.js} +1 -1
- package/dist/client/assets/{block-document-CqmZgWOa.js → block-document-B9rUKbnw.js} +1 -1
- package/dist/client/assets/{brand-context-CFJknKeT.js → brand-context-DQVHlI51.js} +1 -1
- package/dist/client/assets/{buckets-BfyUnBzw.js → buckets-asqkWT8P.js} +1 -1
- package/dist/client/assets/{bulk-category-panel-BKue792q.js → bulk-category-panel-C8UBpRbu.js} +1 -1
- package/dist/client/assets/{capability-load-error-BvJJPvZG.js → capability-load-error-Br0OrB40.js} +1 -1
- package/dist/client/assets/{card-DHgMBCYm.js → card-4MW28o0c.js} +1 -1
- package/dist/client/assets/{cards-VLmmtwC1.js → cards-C8x_vfNk.js} +1 -1
- package/dist/client/assets/{category-editor-DGFGlFmq.js → category-editor-DP_30DWu.js} +1 -1
- package/dist/client/assets/{chat-context-BezBE68q.js → chat-context-BzzuyPxR.js} +1 -1
- package/dist/client/assets/{checkbox-X4FrUEET.js → checkbox-CD8T-nxP.js} +1 -1
- package/dist/client/assets/{cli-auth-success-lQ1n0xqq.js → cli-auth-success-a74PoVWr.js} +1 -1
- package/dist/client/assets/{collection-detail-BAqYz6WT.js → collection-detail-CKgFhURb.js} +1 -1
- package/dist/client/assets/{collection-display-button-J5EfMCQ6.js → collection-display-button-BVe8X1L2.js} +1 -1
- package/dist/client/assets/{collection-search-CHHzGklQ.js → collection-search-yrGsdDnp.js} +1 -1
- package/dist/client/assets/{collection-table-wrapper-CQuNNFwy.js → collection-table-wrapper-BfdYJRwE.js} +1 -1
- package/dist/client/assets/{collection-tabs-BtgS5ywM.js → collection-tabs-Du-1BDVO.js} +1 -1
- package/dist/client/assets/{command-DQlBKWHh.js → command-Dflt6rJr.js} +1 -1
- package/dist/client/assets/{commerce-onboarding-C0SywWrU.js → commerce-onboarding-HbZdMNWV.js} +1 -1
- package/dist/client/assets/connect-BPY5u6HH.js +8 -0
- package/dist/client/assets/{connection-B50eEVFr.js → connection-HKSXw8LQ.js} +1 -1
- package/dist/client/assets/{connection-card-3_JqBh1p.js → connection-card-CHdqxUr5.js} +1 -1
- package/dist/client/assets/{connection-detail-DcrF_GhZ.js → connection-detail-DwHv8mLo.js} +1 -1
- package/dist/client/assets/{connection-form-helpers-ClzcJRYa.js → connection-form-helpers-DVnLa3v-.js} +1 -1
- package/dist/client/assets/{connections-BG86_zwo.js → connections-Dk6VEtEX.js} +1 -1
- package/dist/client/assets/{decopilot-sse-pool-TD3Jwhxm.js → decopilot-sse-pool-D-OY2TxT.js} +1 -1
- package/dist/client/assets/{dialog-C4Nf7yok.js → dialog-CkUPGXcN.js} +1 -1
- package/dist/client/assets/{domain-settings-BGFdxsGx.js → domain-settings-Cg6PIc4V.js} +1 -1
- package/dist/client/assets/{drawer-DlQadt5l.js → drawer-DYooUupi.js} +1 -1
- package/dist/client/assets/{dropdown-menu-Ddv9c-4F.js → dropdown-menu-CTu3Y-nl.js} +1 -1
- package/dist/client/assets/{empty-state-BGvuH3Tj.js → empty-state-BHnLuW6P.js} +1 -1
- package/dist/client/assets/{extract-connection-data-CgYzci07.js → extract-connection-data-I7e9qXhy.js} +1 -1
- package/dist/client/assets/{file-explorer-DABlskyY.js → file-explorer-LAkPhH-_.js} +1 -1
- package/dist/client/assets/{file-type-icon-DsY-aY5P.js → file-type-icon-B-dQORRa.js} +1 -1
- package/dist/client/assets/{form-O_GHW1Tq.js → form-BJrV-CPU.js} +1 -1
- package/dist/client/assets/{general-DLOGDbS2.js → general-zzpdbaHY.js} +1 -1
- package/dist/client/assets/{github-repo-picker-WdBRHwvV.js → github-repo-picker-BpRSBlik.js} +1 -1
- package/dist/client/assets/{hooks-BFy35Ne8.js → hooks-D9-Y9W4K.js} +1 -1
- package/dist/client/assets/{index-DMwnDnJT.js → index-BUlRUamI.js} +1 -1
- package/dist/client/assets/{index-330r0P5w.js → index-BcMkK6ru.js} +1 -1
- package/dist/client/assets/{index-5XI0uzFB.js → index-COXXIv12.js} +1 -1
- package/dist/client/assets/{index-DqzMk5JS.js → index-Cea3ERLu.js} +1 -1
- package/dist/client/assets/{index-BgqCRzDx.js → index-CxQPDLIv.js} +1 -1
- package/dist/client/assets/{index-Tzd1AoS1.js → index-DD21BGel.js} +1 -1
- package/dist/client/assets/{index-CVoxnPo-.js → index-DM4lU7dy.js} +1 -1
- package/dist/client/assets/{index-AutS_y3k.js → index-De-9rr1G.js} +39 -39
- package/dist/client/assets/{index-CsBzz28F.js → index-DfScNr7F.js} +5 -5
- package/dist/client/assets/{index-CS0uthbc.js → index-jFQya368.js} +1 -1
- package/dist/client/assets/{index-redirect-B0z2qNPN.js → index-redirect-Dce5RU6F.js} +1 -1
- package/dist/client/assets/{input-DVMFC8El.js → input-CpdG8Hb0.js} +1 -1
- package/dist/client/assets/{integration-icon-1kV9F9BZ.js → integration-icon-DW2kxlpb.js} +1 -1
- package/dist/client/assets/{invite-member-dialog-CI37bXmW.js → invite-member-dialog-C56IL00X.js} +1 -1
- package/dist/client/assets/{label-DixSK6TG.js → label-rFy6quL5.js} +1 -1
- package/dist/client/assets/{layout-CYCHuD5-.js → layout-BWWfbiJE.js} +1 -1
- package/dist/client/assets/{login-RfyA-ww7.js → login-DzyJ62oj.js} +1 -1
- package/dist/client/assets/{mcp-oauth-DsxF-Hn6.js → mcp-oauth-65_Jed71.js} +1 -1
- package/dist/client/assets/{members-CX0Fd_1K.js → members-Dazdcvh7.js} +1 -1
- package/dist/client/assets/{monaco-editor-C9oH2XT9.js → monaco-editor-CyvxJFKZ.js} +1 -1
- package/dist/client/assets/{monitoring-stats-row-B9L12sS9.js → monitoring-stats-row-CqPrUm2R.js} +1 -1
- package/dist/client/assets/{multi-select-Cn4iUTsP.js → multi-select-DH5mAqo_.js} +1 -1
- package/dist/client/assets/{oauth-callback-B06nlo_d.js → oauth-callback-D_5s5Y08.js} +1 -1
- package/dist/client/assets/{oauth-callback-ai-provider-DFcbOUN8.js → oauth-callback-ai-provider-Ce0Wk2Lk.js} +1 -1
- package/dist/client/assets/{onboarding-1G-z5Fnq.js → onboarding-sirMTHKS.js} +1 -1
- package/dist/client/assets/{org-layout-CzTs14z_.js → org-layout-g_rphFU-.js} +1 -1
- package/dist/client/assets/{organization-choice-BrOIqlde.js → organization-choice-BGFjnYsf.js} +1 -1
- package/dist/client/assets/{orgs-DuKa7rBT.js → orgs-CFOAzas7.js} +1 -1
- package/dist/client/assets/{page-seo-form-C4pRNk6h.js → page-seo-form-BEDjBPsK.js} +1 -1
- package/dist/client/assets/{popover-B7IPQXDa.js → popover-6HLL03U9.js} +1 -1
- package/dist/client/assets/{post-editor-fXFGk2k5.js → post-editor-P_hGk7Rf.js} +1 -1
- package/dist/client/assets/{primitives-Crqpbj2m.js → primitives-D1ZVK8ri.js} +1 -1
- package/dist/client/assets/{profile-CA5Unre3.js → profile-C0r__avs.js} +1 -1
- package/dist/client/assets/{project-app-view-Bl3hj3hM.js → project-app-view-DzDWOsxZ.js} +1 -1
- package/dist/client/assets/record-editor-DrXZUuDf.js +1 -0
- package/dist/client/assets/{redirect-editor-CIlUKNA-.js → redirect-editor-PtepDDGb.js} +1 -1
- package/dist/client/assets/registry-BrFw6yit.js +2 -0
- package/dist/client/assets/{registry-layout-yITHMRzK.js → registry-layout-C3rrPH7N.js} +1 -1
- package/dist/client/assets/{reports-D_099VY-.js → reports-CrTDFI90.js} +1 -1
- package/dist/client/assets/{require-capability-o5lkrLG8.js → require-capability-pAdw6PHN.js} +1 -1
- package/dist/client/assets/{required-auth-layout-DQ-zFo_H.js → required-auth-layout-Gl_zW7Os.js} +1 -1
- package/dist/client/assets/{reset-password-CYsk-Kzw.js → reset-password-Bbsoa7MO.js} +1 -1
- package/dist/client/assets/{roles-CvEXQr7c.js → roles-oeVYO7uL.js} +1 -1
- package/dist/client/assets/{search-input-jYRRKVUz.js → search-input-DC5AdG51.js} +1 -1
- package/dist/client/assets/{secrets-DJQlWmIN.js → secrets-B4LyeIqi.js} +1 -1
- package/dist/client/assets/{sections-editor-B3myeT6s.js → sections-editor-CMxhDpj-.js} +1 -1
- package/dist/client/assets/{select-ChrJU42Z.js → select-BTu2ojwC.js} +1 -1
- package/dist/client/assets/{select-model-D4XRBUqR.js → select-model-D2iJwy8c.js} +1 -1
- package/dist/client/assets/{self-tool-result-97gODZ_w.js → self-tool-result-CDLYkFcq.js} +1 -1
- package/dist/client/assets/{seo-editor-DshZLdv6.js → seo-editor-C9PzQxOY.js} +1 -1
- package/dist/client/assets/{settings-layout-eOKhDawv.js → settings-layout-B8_EBCQG.js} +1 -1
- package/dist/client/assets/{settings-section-BI01lIRe.js → settings-section-BIwtR6xT.js} +1 -1
- package/dist/client/assets/{shell-controls-vo1Oord5.js → shell-controls-C-YwyYTt.js} +1 -1
- package/dist/client/assets/{shell-layout-BkKk4BQJ.js → shell-layout-C1SnhJE1.js} +1 -1
- package/dist/client/assets/{sidebar-hkhcwwUi.js → sidebar-BDKGaApv.js} +1 -1
- package/dist/client/assets/{skeleton-DSnxrRg_.js → skeleton-BBaxUvqd.js} +1 -1
- package/dist/client/assets/{spinner-CZCQ_ekJ.js → spinner-A5fcSvhm.js} +1 -1
- package/dist/client/assets/{sso-BBQXpst7.js → sso-Bg-FduOk.js} +1 -1
- package/dist/client/assets/{store-C-NN1yzp.js → store-BxT-4jmY.js} +1 -1
- package/dist/client/assets/store-registry-DBDEVRKe.js +2 -0
- package/dist/client/assets/{studio-tools-DYhr28h0.js → studio-tools-Cxr0Og6i.js} +1 -1
- package/dist/client/assets/{switch-DhNgTG7O.js → switch-D5UrNSKJ.js} +1 -1
- package/dist/client/assets/{synced-repos-kJ5DWkjy.js → synced-repos-DMQptKkm.js} +1 -1
- package/dist/client/assets/{tab-id-l-0HbjCN.js → tab-id-B7mE7r9a.js} +1 -1
- package/dist/client/assets/{table-DgAYvnF8.js → table-NypMB-TF.js} +1 -1
- package/dist/client/assets/{tabs-CkEKXMMe.js → tabs-DoN7UNkR.js} +1 -1
- package/dist/client/assets/{textarea-CoiT3PUJ.js → textarea-DruIpA1q.js} +1 -1
- package/dist/client/assets/{toggle-group-CufNSu87.js → toggle-group-PsxEObR2.js} +1 -1
- package/dist/client/assets/{toolbar-CExA2qZ5.js → toolbar-BkVx1DBd.js} +1 -1
- package/dist/client/assets/{tooltip-e2bIZwXU.js → tooltip-BJ3Xa_O2.js} +1 -1
- package/dist/client/assets/{use-ai-providers-B3zWtSVB.js → use-ai-providers-B-LGWVU0.js} +1 -1
- package/dist/client/assets/{use-automations-kEDtwrwn.js → use-automations-Ce4iqazK.js} +1 -1
- package/dist/client/assets/{use-autosave-DoJnDJvp.js → use-autosave-DJIjTlWa.js} +1 -1
- package/dist/client/assets/{use-capability-HnnUeuOL.js → use-capability-Vq3aLwN-.js} +1 -1
- package/dist/client/assets/{use-clock-tick-BIAnsyoZ.js → use-clock-tick-eOyMlIqY.js} +1 -1
- package/dist/client/assets/{use-connection-C0AUrrZo.js → use-connection-CJ-0sDgU.js} +1 -1
- package/dist/client/assets/{use-copy-COV_10sy.js → use-copy-BZ87elrc.js} +1 -1
- package/dist/client/assets/{use-create-virtual-mcp-DUiOSNCV.js → use-create-virtual-mcp-CYL96iH_.js} +1 -1
- package/dist/client/assets/{use-debounced-autosave-DY4tfWEL.js → use-debounced-autosave-C9FF0sE3.js} +1 -1
- package/dist/client/assets/{use-debounced-value-Duz93_Wn.js → use-debounced-value-CCHhRfl2.js} +1 -1
- package/dist/client/assets/{use-deco-credits-B5gPNPGX.js → use-deco-credits-B1iXclSj.js} +1 -1
- package/dist/client/assets/{use-decopilot-events-BxWzEJUy.js → use-decopilot-events-Dd0obAxj.js} +1 -1
- package/dist/client/assets/{use-delete-connection-DSW28oCI.js → use-delete-connection-BBFmv7y1.js} +1 -1
- package/dist/client/assets/{use-deployment-admin-Chyl17Nv.js → use-deployment-admin-DJ2tqGJo.js} +1 -1
- package/dist/client/assets/{use-file-configs-C_SzpJsD.js → use-file-configs-b87i8e0W.js} +1 -1
- package/dist/client/assets/{use-infinite-scroll-Cj9z7oOQ.js → use-infinite-scroll-Cbvalof2.js} +1 -1
- package/dist/client/assets/{use-join-requests-D3Z_8TUK.js → use-join-requests-CiBz6ww3.js} +1 -1
- package/dist/client/assets/{use-mcp-client-DERmjaid.js → use-mcp-client-CFPKIPCu.js} +1 -1
- package/dist/client/assets/{use-mcp-tools-DFJqM606.js → use-mcp-tools-wyV_w4m1.js} +1 -1
- package/dist/client/assets/{use-members-LRe_FpvC.js → use-members-B2MTY3QE.js} +1 -1
- package/dist/client/assets/{use-mobile-DC_SXhHp.js → use-mobile-0PWbZ1a9.js} +1 -1
- package/dist/client/assets/{use-navigate-to-agent-BJQQNAbA.js → use-navigate-to-agent-DTW9cyR8.js} +1 -1
- package/dist/client/assets/{use-open-billing-url-CoZnUW-_.js → use-open-billing-url-BmiS4zpt.js} +1 -1
- package/dist/client/assets/{use-org-auth-client-DkegD7bL.js → use-org-auth-client-6TFEPQyx.js} +1 -1
- package/dist/client/assets/{use-org-sso-C5tE426y.js → use-org-sso-DEDvjqPc.js} +1 -1
- package/dist/client/assets/{use-organization-roles-CbUZ4TYQ.js → use-organization-roles-BGL_Mhs8.js} +1 -1
- package/dist/client/assets/{use-organization-settings-Zz7xNpPd.js → use-organization-settings-Xekjfw5H.js} +1 -1
- package/dist/client/assets/{use-registry-connections-DCtbJxsq.js → use-registry-connections-BSmKaCxi.js} +1 -1
- package/dist/client/assets/{use-secrets-BdLyZgzr.js → use-secrets-ERYsYMQY.js} +1 -1
- package/dist/client/assets/{use-section-preview-base-CnwJgTLD.js → use-section-preview-base-BLGo25rz.js} +1 -1
- package/dist/client/assets/{use-status-sounds-C-Iy_B7e.js → use-status-sounds-CVhYXD_E.js} +1 -1
- package/dist/client/assets/{use-tags-Cg72r1qB.js → use-tags-CkIETOk9.js} +1 -1
- package/dist/client/assets/{use-view-mode-DpkGO-0N.js → use-view-mode-BhN8U3a5.js} +1 -1
- package/dist/client/assets/{use-virtual-mcp-h-SPIq8f.js → use-virtual-mcp-TMNNV9Ks.js} +1 -1
- package/dist/client/assets/useInfiniteQuery-DH6-weBo.js +1 -0
- package/dist/client/assets/{useRouterState-B1ueqmdv.js → useRouterState-CiPcrCZv.js} +1 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-DmOWH9Hv.js +1 -0
- package/dist/client/assets/{users-B5_Tf1P9.js → users-D9FX_Xsf.js} +1 -1
- package/dist/client/assets/{variant-calendar-BEWHbRSw.js → variant-calendar-DjT7fn7f.js} +1 -1
- package/dist/client/assets/{view-mode-toggle-BZGfeAHi.js → view-mode-toggle-CJhuJ8YI.js} +1 -1
- package/dist/client/index.html +1 -1
- package/dist/server/cli.js +1 -1
- package/dist/server/server.js +1 -1
- package/package.json +1 -1
- package/dist/client/assets/connect-CP9FgfF7.js +0 -8
- package/dist/client/assets/record-editor-dlMh42kV.js +0 -1
- package/dist/client/assets/registry-Bm0RjlTv.js +0 -2
- package/dist/client/assets/store-registry-C1Y7Wn9O.js +0 -2
- package/dist/client/assets/useInfiniteQuery-DRNEZrrX.js +0 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-CyQv0VAV.js +0 -1
package/dist/server/cli.js
CHANGED
|
@@ -1332,7 +1332,7 @@ Usage: deco services <up|down|status>`),process.exit(1)}}var ic1=O(()=>{Vx()});f
|
|
|
1332
1332
|
`.execute($);if(Number(W.rows[0]?.cnt)===0){console.warn(`Failed to migrate ${J}/${K}, keeping in old table`);continue}}await Qb`
|
|
1333
1333
|
DELETE FROM kysely_migration WHERE name = ${X}
|
|
1334
1334
|
`.execute($)}}async function Hn1($){await dc6($),await mc6($);let Z=new Kn1({db:$,provider:{getMigrations:()=>Promise.resolve(rl0)}}),{error:X,results:Q}=await Z.migrateToLatest(),Y=0;if(Q?.forEach((G)=>{if(G.status==="Success")Y++;else if(G.status==="Error")console.error(`Failed to execute migration "${G.migrationName}"`)}),X)throw console.error("Failed to migrate"),console.error(X),X;return Y}async function ic6($){let{keepOpen:Z=!1,database:X,skipBetterAuth:Q=!1}=$??{},Y="skipped";if(!Q&&!X)Y=await Ph0();let G=X??N6(),J=async()=>{if(!Z&&!X)await Ow(G).catch((K)=>{console.warn("Warning: Error closing database:",K)})};try{let K=await Hn1(G.db);return await J(),{betterAuth:Y,kysely:K}}catch(K){throw await J(),K}}async function nc6(){let $=N6(),Z=new Kn1({db:$.db,provider:{getMigrations:()=>Promise.resolve(rl0)}}),{error:X,results:Q}=await Z.migrateDown();if(Q?.forEach((Y)=>{if(Y.status==="Success")console.log(`\u2705 Migration "${Y.migrationName}" rolled back successfully`);else if(Y.status==="Error")console.error(`\u274C Failed to rollback migration "${Y.migrationName}"`)}),X)throw console.error("Failed to rollback migration"),console.error(X),X}var Un1=O(()=>{Jn1();Ah0();o7()});async function e50($){let Z={...process.env},X=n00($,Z);console.log(IF1(X.settings.encryptionKey));let Q=X.settings.betterAuthSecret||(X.settings.localMode?Ad1(X.settings.dataDir):""),{ensureServices:Y}=await Promise.resolve().then(() => (H50(),W50)),{outputs:G,services:J}=await Y({home:X.settings.dataDir,externalDatabaseUrl:X.externalDatabaseUrl,externalNatsUrl:X.externalNatsUrl});if(!X.skipMigrations){let{migrateBetterAuth:W}=await Promise.resolve().then(() => (Ah0(),Rd1));await W(G.databaseUrl);let{createDatabase:H}=await Promise.resolve().then(() => (o7(),ul1)),{migrateToLatest:N}=await Promise.resolve().then(() => (Un1(),Nn1)),U=H(G.databaseUrl);await N({keepOpen:!0,database:U,skipBetterAuth:!0})}let K={...X.settings,betterAuthSecret:Q,databaseUrl:G.databaseUrl,natsUrls:G.natsUrls,...G.s3?{s3Endpoint:G.s3.endpoint,s3Bucket:G.s3.bucket,s3AccessKeyId:G.s3.accessKeyId,s3SecretAccessKey:G.s3.secretAccessKey,s3ForcePathStyle:G.s3.forcePathStyle}:{},...G.natsTunnel?{natsPublicUrl:G.natsTunnel.publicUrl,natsAccountJwt:G.natsTunnel.accountJwt,natsAccountSigningKey:G.natsTunnel.accountSigningKey,natsOperatorJwt:G.natsTunnel.operatorJwt,natsTunnelPublicEnabled:!0,natsCredsPath:G.natsTunnel.credsPath}:{}};return nc1(K),{settings:K,services:J.map((W)=>({name:W.name==="PostgreSQL"?"Postgres":W.name,port:W.port})),managedServiceNames:J.filter((W)=>W.owner==="managed").map((W)=>W.name)}}var al0=O(()=>{Vx();Td1();b8()});var Bn1={};B0(Bn1,{updateService:()=>oD,subscribeCliState:()=>$d0,setTuiConsoleIntercepted:()=>$90,setServerUrl:()=>Sm,setMigrationsDone:()=>Vm,setDevMode:()=>oc6,resetCliStateForTests:()=>pc6,isTuiConsoleIntercepted:()=>Z90,getCliState:()=>el0,addLogEntry:()=>jw});function Fn1(){return{services:[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}],migrationsStatus:"pending",serverUrl:null,logs:[]}}function pc6(){_Q=Fn1()}function tc6(){return[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}]}function km(){for(let $ of sl0)$()}function el0(){return _Q}function $d0($){return sl0.add($),()=>sl0.delete($)}function oD($){_Q={..._Q,services:_Q.services.map((Z)=>Z.name===$.name?$:Z)},km()}function Vm(){_Q={..._Q,migrationsStatus:"done"},km()}function Sm($){_Q={..._Q,serverUrl:$},km()}function jw($){let Z=[..._Q.logs,$];_Q={..._Q,logs:Z.length>500?Z.slice(-500):Z},km()}function oc6(){_Q={..._Q,services:[...tc6(),{name:"API",status:"pending",port:0},{name:"Vite",status:"pending",port:0}]},km()}function $90($){wn1=$}function Z90(){return wn1}var _Q,sl0,wn1=!1;var rD=O(()=>{_Q=Fn1();sl0=new Set});import{createServer as On1}from"net";function rc6($){return new Promise((Z)=>{let X=On1();X.once("error",()=>Z(!1)),X.listen($,"0.0.0.0",()=>{X.close(()=>Z(!0))})})}async function Cm($){if(await rc6($))return $;let Z=await new Promise((X,Q)=>{let Y=On1();Y.once("error",Q),Y.listen(0,"0.0.0.0",()=>{let G=Y.address(),J=typeof G==="object"&&G?G.port:0;Y.close(()=>X(J))})});return console.warn(`Port ${$} is in use, using port ${Z} instead.`),Z}var Zd0=()=>{};function _m($){return $.replace(/\x1b\[[0-9;]*m/g,"")}var Xd0={};B0(Xd0,{startDevServer:()=>sc6});import{join as ac6}from"path";function Ln1($){let Z=$.getReader(),X=new TextDecoder,Q="";function Y(){let G=Q.split(`
|
|
1335
|
-
`);Q=G.pop()??"";for(let J of G){let K=_m(J).replace(/^\[\d+\]\s*/,"").trim();if(!K)continue;jw({method:"",path:"",status:0,duration:0,timestamp:new Date,rawLine:K})}}(async()=>{for(;;){let{done:G,value:J}=await Z.read();if(G)break;Q+=X.decode(J,{stream:!0}),Y()}if(Q.trim()){let G=_m(Q).replace(/^\[\d+\]\s*/,"").trim();if(G)jw({method:"",path:"",status:0,duration:0,timestamp:new Date,rawLine:G})}})()}async function sc6($){let{baseUrl:Z,noTui:X}=$,Q=process.env.HOST==="0.0.0.0"&&Boolean(process.env.PORT),Y=Q?process.env.PORT:$.vitePort,G=Z||`http://localhost:${Y}`,J=Q?await Cm(Number(Y)+1):await Cm(Number($.port)),{settings:K,services:W,managedServiceNames:H}=await e50({port:String(J),home:$.home,baseUrl:$.baseUrl,localMode:$.localMode,skipMigrations:$.skipMigrations,noTui:$.noTui,vitePort:$.vitePort});for(let L of W)oD({name:L.name,status:"ready",port:L.port});Vm();let N=ac6(import.meta.dir,"..","..","..","..",".."),U=X===!0,F=Bun.spawn(["bun","run","dev:servers"],{cwd:N,env:{...process.env,PORT:String(K.port),VITE_PORT:String(Y),DATABASE_URL:K.databaseUrl,NATS_URL:K.natsUrls.join(","),NODE_ENV:K.nodeEnv,BASE_URL:G,DECOCMS_LOCAL_MODE:String(K.localMode),DECOCMS_HOME:K.dataDir,DATA_DIR:K.dataDir,DECO_CLI:"1",...K.betterAuthSecret?{BETTER_AUTH_SECRET:K.betterAuthSecret}:{},...K.s3Endpoint?{S3_ENDPOINT:K.s3Endpoint,S3_BUCKET:K.s3Bucket??"",S3_ACCESS_KEY_ID:K.s3AccessKeyId??"",S3_SECRET_ACCESS_KEY:K.s3SecretAccessKey??"",S3_FORCE_PATH_STYLE:String(K.s3ForcePathStyle)}:{},...K.natsPublicUrl&&K.natsAccountJwt&&K.natsAccountSigningKey?{NATS_PUBLIC_URL:K.natsPublicUrl,NATS_ACCOUNT_JWT:K.natsAccountJwt,NATS_ACCOUNT_SIGNING_KEY:K.natsAccountSigningKey,NATS_OPERATOR_JWT:K.natsOperatorJwt??"",NATS_TUNNEL_PUBLIC_ENABLED:"true",...K.natsCredsPath?{NATS_CREDS:K.natsCredsPath}:{}}:{}},stdio:["inherit",U?"inherit":"pipe",U?"inherit":"pipe"]});if(!U)Ln1(F.stdout),Ln1(F.stderr);Sm(G),oD({name:"Vite",status:"ready",port:Number(Y)}),oD({name:"API",status:"ready",port:Number(K.port)});let B=async(L)=>{if(F.kill(L),await F.exited,H.length>0){let{stopServices:D}=await Promise.resolve().then(() => (H50(),W50));await D(K.dataDir)}};return process.on("SIGINT",()=>B("SIGINT")),process.on("SIGTERM",()=>B("SIGTERM")),{port:Number(Y),process:F}}var Qd0=O(()=>{al0();rD();Zd0()});var X90;var Yd0=O(()=>{X90={name:"decocms",version:"4.204.16",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@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","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});import{Box as $l6,Text as Dn1}from"ink";import{jsx as Zl6,jsxs as En1}from"react/jsx-runtime";function zn1({version:$}){return En1($l6,{flexDirection:"column",marginTop:1,children:[S50.map((Z,X)=>Zl6(Dn1,{color:C50[X],children:Z},X)),En1(Dn1,{dimColor:!0,children:[" v",$]})]})}var jn1=O(()=>{Dm()});import{Box as aD,Text as Pw}from"ink";import{Spinner as Xl6}from"@inkjs/ui";import{jsx as lY,jsxs as Yb}from"react/jsx-runtime";function Pn1({status:$}){if($==="pending")return lY(Xl6,{label:""});return lY(Pw,{color:"green",children:"\u2713"})}function Ql6($){return`${$.name}: ${$.port||"...."}`}function An1({services:$,migrationsStatus:Z,home:X,serverUrl:Q}){return Yb(aD,{flexDirection:"column",paddingBottom:1,children:[lY(zn1,{version:X90.version}),lY(aD,{marginBottom:1,children:lY(Pw,{dimColor:!0,children:"\u2500".repeat(80)})}),lY(aD,{children:Yb(Pw,{dimColor:!0,children:["Home: ",X]})}),Yb(aD,{gap:2,children:[$.map((Y)=>Yb(aD,{gap:1,children:[lY(Pw,{children:Ql6(Y)}),lY(Pn1,{status:Y.status})]},Y.name)),Yb(aD,{gap:1,children:[lY(Pw,{children:"Migrations"}),lY(Pn1,{status:Z})]})]}),lY(aD,{children:Q?Yb(Pw,{children:["Open in browser: ",lY(Pw,{color:"cyan",children:Q})]}):lY(Pw,{dimColor:!0,children:"Starting..."})})]})}var Tn1=O(()=>{Yd0();jn1()});import{Box as Yl6,Text as vm}from"ink";import{jsx as Gd0,jsxs as Jd0}from"react/jsx-runtime";function Gl6($){if($>=500)return"red";if($>=400)return"yellow";if($>=300)return"cyan";return"green"}function Rn1({logs:$}){return Gd0(Yl6,{flexDirection:"column",children:$.map((Z,X)=>{if(Z.rawLine)return Gd0(vm,{dimColor:!0,children:Z.rawLine},X);let Q=Z.duration<1000?`${Z.duration}ms`:`${(Z.duration/1000).toFixed(1)}s`;return Jd0(vm,{children:[Jd0(vm,{dimColor:!0,children:[Z.method.padEnd(6)," ",Z.path.padEnd(30)," "]}),Gd0(vm,{color:Gl6(Z.status),children:Z.status}),Jd0(vm,{dimColor:!0,children:[" ",Q.padStart(8)]})]},X)})})}var In1=()=>{};var Kd0={};B0(Kd0,{App:()=>Wl6});import{Box as Jl6}from"ink";import{useSyncExternalStore as Kl6}from"react";import{jsx as qn1,jsxs as Hl6}from"react/jsx-runtime";function Wl6({home:$}){let Z=Kl6($d0,el0);return Hl6(Jl6,{flexDirection:"column",children:[qn1(An1,{services:Z.services,migrationsStatus:Z.migrationsStatus,home:$,serverUrl:Z.serverUrl}),qn1(Rn1,{logs:Z.logs})]})}var Wd0=O(()=>{Tn1();In1();rD()});var OJ="thread-gate",fN="decopilot-hosted-harness",tG="automations",Aw="background-tools";var Mn1="7";function kn1($){return{name:"decocms",systemDatabaseUrl:$.systemDatabaseUrl,systemDatabaseSchemaName:"dbos",systemDatabasePoolSize:$.poolSize,runAdminServer:!1,executorID:$.executorID,applicationVersion:Mn1,...$.listenQueues!==void 0?{listenQueues:$.listenQueues}:{}}}var Vn1=()=>{};function Nl6(){let $=(process.env.BUN_OPTIONS??"").split(/\s+/).filter(Boolean);return[...process.argv.slice(1),...$]}function Hd0($,Z){for(let X=0;X<$.length;X++){let Q=$[X];if(Q===void 0)continue;if(Q===Z)return $[X+1];if(Q.startsWith(`${Z}=`))return Q.slice(Z.length+1)}return}function Sn1(){let $=Nl6();if($.includes("--cpu-prof")){console.log(JSON.stringify({msg:"cpu-profiling-active",dir:Hd0($,"--cpu-prof-dir")??process.cwd(),name:Hd0($,"--cpu-prof-name"),markdown:$.includes("--cpu-prof-md"),intervalUs:Number(Hd0($,"--cpu-prof-interval")??1000),note:"profile is written on process exit"}));return}if(process.env.CPU_PROFILE)console.warn(JSON.stringify({msg:"cpu-profiling-requested-but-inactive",hint:'CPU profiling is a Bun launch flag. Set BUN_OPTIONS="--cpu-prof --cpu-prof-md --cpu-prof-dir=/tmp" before starting the process.'}))}function Cn1(){if(process.env.HEAP_WATCH!=="1")return()=>{};let $=Number(process.env.HEAP_WATCH_INTERVAL_MS??60000),Z=async()=>{let X=iD();if(!X)return;let Q={};try{let{heapStats:Y}=await import("bun:jsc"),G=Y(),J=Object.entries(G.objectTypeCounts).sort((K,W)=>W[1]-K[1]).slice(0,20);Q={objectCount:G.objectCount,heapSize:G.heapSize,top:Object.fromEntries(J)}}catch{}console.log(JSON.stringify({msg:"heap-watch",ts:new Date().toISOString(),uptimeS:Math.round(process.uptime()),rss:X.rss,heapUsed:X.heapUsed,heapTotal:X.heapTotal,external:X.external,arrayBuffers:X.arrayBuffers,...Q}))};return Z().catch(()=>{}),Q90=setInterval(()=>void Z().catch(()=>{}),$),Q90.unref?.(),process.on("SIGUSR2",()=>{try{let X=Bun.generateHeapSnapshot("v8"),Q=typeof X==="string"?X:JSON.stringify(X),Y=`/tmp/heap-${process.pid}-${Date.now()}.heapsnapshot`;Bun.write(Y,Q),console.log(JSON.stringify({msg:"heap-snapshot-written",path:Y}))}catch(X){console.error("[heap-watch] snapshot failed:",X)}}),()=>{if(Q90)clearInterval(Q90)}}var Q90;var _n1=()=>{};import*as Ul6 from"bun:jsc";function vn1(){if(process.env.STALL_WATCHDOG!=="1")return()=>{};let $=Number(process.env.STALL_WATCHDOG_MS??100),Z=Number(process.env.STALL_WATCHDOG_TICK_MS??50);try{Fl6()}catch(G){return console.error("[stall-watchdog] failed to start sampling profiler:",G),()=>{}}let X,Q=performance.now()+Z,Y=()=>{let G=performance.now(),J=G-Q;Q=G+Z;let K=[];try{K=wl6()?.traces??[]}catch{}if(J>$&&K.length>0){let W=new Map;for(let N of K){let U=N.frames.find((B)=>B.sourceURL&&!/Unknown Executable/.test(B.category??""))??N.frames[0];if(!U)continue;let F=(U.sourceURL??"?").replace(/^.*\/node_modules\//,"node_modules/"),w=`${U.name??"?"} @ ${F}:${U.line??"?"}`;W.set(w,(W.get(w)??0)+1)}let H=[...W.entries()].sort((N,U)=>U[1]-N[1]).slice(0,8).map(([N,U])=>({frame:N,count:U}));console.warn(JSON.stringify({msg:"stall-stack",ts:new Date().toISOString(),lagMs:Math.round(J),samplesInWindow:K.length,top:H}))}X=setTimeout(Y,Z),X.unref?.()};return X=setTimeout(Y,Z),X.unref?.(),()=>{if(X)clearTimeout(X)}}var Fl6,wl6;var xn1=O(()=>{({startSamplingProfiler:Fl6,samplingProfilerStackTraces:wl6}=Ul6)});function fn1(){Sn1();let $=[Cn1(),_l1(),vn1()];return()=>{for(let Z of $)Z()}}var bn1=O(()=>{Uh0();_n1();xn1()});var sD=_((yn1)=>{Object.defineProperty(yn1,"__esModule",{value:!0});yn1.RepublishHeaders=yn1.DirectMsgHeaders=yn1.JsHeaders=yn1.AdvisoryKind=void 0;yn1.isOrderedPushConsumerOptions=Bl6;yn1.isPullConsumer=Ol6;yn1.isPushConsumer=Ll6;yn1.isBoundPushConsumerOptions=Dl6;function Bl6($){if($&&typeof $==="object")return"name_prefix"in $||"deliver_subject_prefix"in $||"filter_subjects"in $||"filter_subject"in $||"deliver_policy"in $||"opt_start_seq"in $||"opt_start_time"in $||"replay_policy"in $||"inactive_threshold"in $||"headers_only"in $||"deliver_prefix"in $;return!1}function Ol6($){return $.isPullConsumer()}function Ll6($){return $.isPushConsumer()}function Dl6($){if($&&typeof $==="object")return"deliver_subject"in $||"deliver_group"in $||"idle_heartbeat"in $;return!1}yn1.AdvisoryKind={API:"api_audit",StreamAction:"stream_action",ConsumerAction:"consumer_action",SnapshotCreate:"snapshot_create",SnapshotComplete:"snapshot_complete",RestoreCreate:"restore_create",RestoreComplete:"restore_complete",MaxDeliver:"max_deliver",Terminated:"terminated",Ack:"consumer_ack",StreamLeaderElected:"stream_leader_elected",StreamQuorumLost:"stream_quorum_lost",ConsumerLeaderElected:"consumer_leader_elected",ConsumerQuorumLost:"consumer_quorum_lost"};yn1.JsHeaders={StreamSourceHdr:"Nats-Stream-Source",LastConsumerSeqHdr:"Nats-Last-Consumer",LastStreamSeqHdr:"Nats-Last-Stream",ConsumerStalledHdr:"Nats-Consumer-Stalled",MessageSizeHdr:"Nats-Msg-Size",RollupHdr:"Nats-Rollup",RollupValueSubject:"sub",RollupValueAll:"all",PendingMessagesHdr:"Nats-Pending-Messages",PendingBytesHdr:"Nats-Pending-Bytes",RequiredApiLevel:"Nats-Required-Api-Level"};yn1.DirectMsgHeaders={Stream:"Nats-Stream",Sequence:"Nats-Sequence",TimeStamp:"Nats-Time-Stamp",Subject:"Nats-Subject",LastSequence:"Nats-Last-Sequence",NumPending:"Nats-Num-Pending"};yn1.RepublishHeaders={Stream:"Nats-Stream",Subject:"Nats-Subject",Sequence:"Nats-Sequence",LastSequence:"Nats-Last-Sequence",Size:"Nats-Msg-Size"}});var dY=_((hn1)=>{Object.defineProperty(hn1,"__esModule",{value:!0});hn1.TD=hn1.TE=hn1.Empty=void 0;hn1.encode=ql6;hn1.decode=Ml6;hn1.Empty=new Uint8Array(0);hn1.TE=new TextEncoder;hn1.TD=new TextDecoder;function Il6(...$){let Z=0;for(let Y=0;Y<$.length;Y++)Z+=$[Y].length;let X=new Uint8Array(Z),Q=0;for(let Y=0;Y<$.length;Y++)X.set($[Y],Q),Q+=$[Y].length;return X}function ql6(...$){let Z=[];for(let X=0;X<$.length;X++)Z.push(hn1.TE.encode($[X]));if(Z.length===0)return hn1.Empty;if(Z.length===1)return Z[0];return Il6(...Z)}function Ml6($){if(!$||$.length===0)return"";return hn1.TD.decode($)}});var mY=_((ln1)=>{Object.defineProperty(ln1,"__esModule",{value:!0});ln1.errors=ln1.PermissionViolationError=ln1.NoRespondersError=ln1.TimeoutError=ln1.RequestError=ln1.ProtocolError=ln1.ConnectionError=ln1.DrainingConnectionError=ln1.ClosedConnectionError=ln1.AuthorizationError=ln1.UserAuthenticationExpiredError=ln1.InvalidOperationError=ln1.InvalidArgumentError=ln1.InvalidSubjectError=void 0;class Ud0 extends Error{constructor($,Z){super(`illegal subject: '${$}'`,Z);this.name="InvalidSubjectError"}}ln1.InvalidSubjectError=Ud0;class Y90 extends Error{constructor($,Z){super($,Z);this.name="InvalidArgumentError"}static format($,Z,X){if(Array.isArray(Z)&&Z.length>1)Z=Z[0];if(Array.isArray($))$=$.map((Q)=>`'${Q}'`),$=$.join(",");else $=`'${$}'`;return new Y90(`${$} ${Z}`,X)}}ln1.InvalidArgumentError=Y90;class Fd0 extends Error{constructor($,Z){super($,Z);this.name="InvalidOperationError"}}ln1.InvalidOperationError=Fd0;class G90 extends Error{constructor($,Z){super($,Z);this.name="UserAuthenticationExpiredError"}static parse($){if($.toLowerCase().indexOf("user authentication expired")!==-1)return new G90($);return null}}ln1.UserAuthenticationExpiredError=G90;class J90 extends Error{constructor($,Z){super($,Z);this.name="AuthorizationError"}static parse($){let Z=["authorization violation","account authentication expired","authentication timeout"],X=$.toLowerCase();for(let Q=0;Q<Z.length;Q++)if(X.indexOf(Z[Q])!==-1)return new J90($);return null}}ln1.AuthorizationError=J90;class wd0 extends Error{constructor(){super("closed connection");this.name="ClosedConnectionError"}}ln1.ClosedConnectionError=wd0;class Bd0 extends Error{constructor(){super("connection draining");this.name="DrainingConnectionError"}}ln1.DrainingConnectionError=Bd0;class Od0 extends Error{constructor($,Z){super($,Z);this.name="ConnectionError"}}ln1.ConnectionError=Od0;class Ld0 extends Error{constructor($,Z){super($,Z);this.name="ProtocolError"}}ln1.ProtocolError=Ld0;class Dd0 extends Error{constructor($="",Z){super($,Z);this.name="RequestError"}isNoResponders(){return this.cause instanceof K90}}ln1.RequestError=Dd0;class Ed0 extends Error{constructor($){super("timeout",$);this.name="TimeoutError"}}ln1.TimeoutError=Ed0;class K90 extends Error{subject;constructor($,Z){super(`no responders: '${$}'`,Z);this.subject=$,this.name="NoResponders"}}ln1.NoRespondersError=K90;class W90 extends Error{operation;subject;queue;constructor($,Z,X,Q,Y){super($,Y);this.name="PermissionViolationError",this.operation=Z,this.subject=X,this.queue=Q}static parse($){if(($?$.toLowerCase():"").indexOf("permissions violation")===-1)return null;let X="publish",Q="",Y=void 0,G=$.match(/(Publish|Subscription) to "(\S+)"/);if(G){if(X=G[1].toLowerCase(),Q=G[2],X==="subscription"){let J=$.match(/using queue "(\S+)"/);if(J)Y=J[1]}}return new W90($,X,Q,Y)}}ln1.PermissionViolationError=W90;ln1.errors={AuthorizationError:J90,ClosedConnectionError:wd0,ConnectionError:Od0,DrainingConnectionError:Bd0,InvalidArgumentError:Y90,InvalidOperationError:Fd0,InvalidSubjectError:Ud0,NoRespondersError:K90,PermissionViolationError:W90,ProtocolError:Ld0,RequestError:Dd0,TimeoutError:Ed0,UserAuthenticationExpiredError:G90}});var LJ=_((pn1)=>{Object.defineProperty(pn1,"__esModule",{value:!0});pn1.SimpleMutex=pn1.Perf=void 0;pn1.extend=ml6;pn1.render=il6;pn1.timeout=nl6;pn1.delay=pl6;pn1.deadline=tl6;pn1.deferred=jd0;pn1.debugDeferred=ol6;pn1.shuffle=rl6;pn1.collect=al6;pn1.jitter=nn1;pn1.backoff=sl6;pn1.nanos=el6;pn1.millis=$d6;pn1.randomToken=Qd6;var dl6=dY(),zd0=mY();function ml6($,...Z){for(let X=0;X<Z.length;X++){let Q=Z[X];Object.keys(Q).forEach(function(Y){$[Y]=Q[Y]})}return $}function il6($){return dl6.TD.decode($).replace(/\n/g,"\u240A").replace(/\r/g,"\u240D")}function nl6($,Z=!0){let X=Z?new zd0.TimeoutError:null,Q,Y,G=new Promise((J,K)=>{Q={cancel:()=>{if(Y)clearTimeout(Y)}},Y=setTimeout(()=>{if(X===null)K(new zd0.TimeoutError);else K(X)},$)});return Object.assign(G,Q)}function pl6($=0){let Z,X=new Promise((Q)=>{let Y=setTimeout(()=>{Q()},$);Z={cancel:()=>{if(Y)clearTimeout(Y),Q()}}});return Object.assign(X,Z)}async function tl6($,Z=1000){let X=jd0(),Q=setTimeout(()=>{X.reject(new zd0.TimeoutError)},Z);try{return await Promise.race([$,X])}finally{clearTimeout(Q)}}function jd0(){let $={},Z=new Promise((X,Q)=>{$={resolve:X,reject:Q}});return Object.assign(Z,$)}function ol6(){let $={},Z=new Promise((X,Q)=>{$={resolve:(Y)=>{console.trace("resolve",Y),X(Y)},reject:(Y)=>{console.trace("reject"),Q(Y)}}});return Object.assign(Z,$)}function rl6($){for(let Z=$.length-1;Z>0;Z--){let X=Math.floor(Math.random()*(Z+1));[$[Z],$[X]]=[$[X],$[Z]]}return $}async function al6($){let Z=[];for await(let X of $)Z.push(X);return Z}class mn1{timers;measures;constructor(){this.timers=new Map,this.measures=new Map}mark($){this.timers.set($,performance.now())}measure($,Z,X){let Q=this.timers.get(Z);if(Q===void 0)throw Error(`${Z} is not defined`);let Y=this.timers.get(X);if(Y===void 0)throw Error(`${X} is not defined`);this.measures.set($,Y-Q)}getEntries(){let $=[];return this.measures.forEach((Z,X)=>{$.push({name:X,duration:Z})}),$}}pn1.Perf=mn1;class in1{max;current;waiting;constructor($=1){this.max=$,this.current=0,this.waiting=[]}lock(){if(this.current++,this.current<=this.max)return Promise.resolve();let $=jd0();return this.waiting.push($),$}unlock(){this.current--,this.waiting.pop()?.resolve()}}pn1.SimpleMutex=in1;function nn1($){if($===0)return 0;return Math.floor($/2+Math.random()*$)}function sl6($=[0,250,250,500,500,3000,5000]){if(!Array.isArray($))$=[0,250,250,500,500,3000,5000];let Z=$.length-1;return{backoff(X){return nn1(X>Z?$[Z]:$[X])}}}function el6($){return $*1e6}function $d6($){return Math.floor($/1e6)}var Zd6="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",bN=new Uint8Array(62);for(let $=0;$<62;$++)bN[$]=Zd6.charCodeAt($);var Xd6=218340105584896;function Qd6(){let $=Math.floor(Math.random()*Xd6),Z=$%62,X=bN[Z];$=($-Z)/62,Z=$%62;let Q=bN[Z];$=($-Z)/62,Z=$%62;let Y=bN[Z];$=($-Z)/62,Z=$%62;let G=bN[Z];$=($-Z)/62,Z=$%62;let J=bN[Z];$=($-Z)/62,Z=$%62;let K=bN[Z];$=($-Z)/62,Z=$%62;let W=bN[Z];$=($-Z)/62;let H=bN[$];return String.fromCharCode(X,Q,Y,G,J,K,W,H)}});var Zp1=_((en1)=>{Object.defineProperty(en1,"__esModule",{value:!0});en1.nuid=en1.NuidImpl=void 0;var zd6="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",Tw=62,N90=12,an1=10,on1=33,jd6=333,rn1=N90+an1,Ad0=new Uint8Array(Tw);for(let $=0;$<Tw;$++)Ad0[$]=zd6.charCodeAt($);var H90=4294967296,sn1=BigInt(Tw)**BigInt(an1),xm=Number(sn1/(1n<<32n)),Pd0=Number(sn1%(1n<<32n));function Pd6($){for(let Z=0;Z<$.length;Z++)$[Z]=Math.floor(Math.random()*256)}function Ad6($){if(globalThis?.crypto?.getRandomValues)globalThis.crypto.getRandomValues($);else Pd6($)}class Td0{buf;cbuf;seqHi;seqLo;inc;inited;constructor(){this.buf=new Uint8Array(rn1),this.cbuf=new Uint8Array(N90),this.inited=!1}init(){this.inited=!0,this.setPre(),this.initSeqAndInc(),this.fillSeq()}initSeqAndInc(){let $=0;do this.seqHi=Math.floor(Math.random()*(xm+1)),this.seqLo=Math.floor(Math.random()*H90);while($++<8&&this.seqHi===xm&&this.seqLo>=Pd0);if(this.seqHi===xm&&this.seqLo>=Pd0)this.seqLo=0;this.inc=Math.random()*(jd6-on1)+on1|0}setPre(){Ad6(this.cbuf);for(let $=0;$<N90;$++)this.buf[$]=Ad0[this.cbuf[$]%Tw]}fillSeq(){let $=this.seqHi,Z=this.seqLo;for(let X=rn1-1;X>=N90;X--){let Q=Math.floor($/Tw),G=($-Q*Tw)*H90+Z,J=Math.floor(G/Tw),K=G-J*Tw;this.buf[X]=Ad0[K],$=Q,Z=J}}next(){if(!this.inited)this.init();if(this.seqLo+=this.inc,this.seqLo>=H90)this.seqLo-=H90,this.seqHi+=1;if(this.seqHi>xm||this.seqHi===xm&&this.seqLo>=Pd0)this.setPre(),this.initSeqAndInc();this.fillSeq();let $=this.buf;return String.fromCharCode($[0],$[1],$[2],$[3],$[4],$[5],$[6],$[7],$[8],$[9],$[10],$[11],$[12],$[13],$[14],$[15],$[16],$[17],$[18],$[19],$[20],$[21])}reset(){this.init()}}en1.NuidImpl=Td0;en1.nuid=new Td0});var Gp1=_((Qp1)=>{Object.defineProperty(Qp1,"__esModule",{value:!0});Qp1.nuid=Qp1.Nuid=void 0;var Xp1=Zp1();Qp1.Nuid=Xp1.NuidImpl;Qp1.nuid=Xp1.nuid});var F90=_((U90)=>{Object.defineProperty(U90,"__esModule",{value:!0});U90.nuid=U90.Nuid=void 0;var Jp1=Gp1();Object.defineProperty(U90,"Nuid",{enumerable:!0,get:function(){return Jp1.Nuid}});Object.defineProperty(U90,"nuid",{enumerable:!0,get:function(){return Jp1.nuid}})});var Rw=_((Kp1)=>{Object.defineProperty(Kp1,"__esModule",{value:!0});Kp1.DEFAULT_HOST=Kp1.DEFAULT_PORT=Kp1.Match=void 0;Kp1.syncIterator=kd6;Kp1.createInbox=Vd6;var qd6=F90(),Md6=mY();Kp1.Match={Exact:"exact",CanonicalMIME:"canonical",IgnoreCase:"insensitive"};function kd6($){let Z=$[Symbol.asyncIterator]();return{async next(){let X=await Z.next();if(X.done)return Promise.resolve(null);return Promise.resolve(X.value)}}}function Vd6($=""){if($=$||"_INBOX",typeof $!=="string")throw TypeError("prefix must be a string");return $.split(".").forEach((Z)=>{if(Z==="*"||Z===">")throw Md6.InvalidArgumentError.format("prefix",`cannot have wildcards ('${$}')`)}),`${$}.${qd6.nuid.next()}`}Kp1.DEFAULT_PORT=4222;Kp1.DEFAULT_HOST="127.0.0.1"});var fm=_((Up1)=>{Object.defineProperty(Up1,"__esModule",{value:!0});Up1.DataBuffer=void 0;var Hp1=dY();class Np1{buffers;byteLength;constructor(){this.buffers=[],this.byteLength=0}static concat(...$){let Z=0;for(let Y=0;Y<$.length;Y++)Z+=$[Y].length;let X=new Uint8Array(Z),Q=0;for(let Y=0;Y<$.length;Y++)X.set($[Y],Q),Q+=$[Y].length;return X}static fromAscii($){if(!$)$="";return Hp1.TE.encode($)}static toAscii($){return Hp1.TD.decode($)}reset(){this.buffers.length=0,this.byteLength=0}pack(){if(this.buffers.length>1){let $=new Uint8Array(this.byteLength),Z=0;for(let X=0;X<this.buffers.length;X++)$.set(this.buffers[X],Z),Z+=this.buffers[X].length;this.buffers.length=0,this.buffers.push($)}}shift(){if(this.buffers.length){let $=this.buffers.shift();if($)return this.byteLength-=$.length,$}return new Uint8Array(0)}drain($){if(this.buffers.length){this.pack();let Z=this.buffers.pop();if(Z){let X=this.byteLength;if($===void 0||$>X)$=X;let Q=Z.subarray(0,$);if(X>$)this.buffers.push(Z.subarray($));return this.byteLength=X-$,Q}}return new Uint8Array(0)}fill($,...Z){if($)this.buffers.push($),this.byteLength+=$.length;for(let X=0;X<Z.length;X++)if(Z[X]&&Z[X].length)this.buffers.push(Z[X]),this.byteLength+=Z[X].length}peek(){if(this.buffers.length)return this.pack(),this.buffers[0];return new Uint8Array(0)}size(){return this.byteLength}length(){return this.buffers.length}}Up1.DataBuffer=Np1});var eD=_((Bp1)=>{Object.defineProperty(Bp1,"__esModule",{value:!0});Bp1.LF=Bp1.CR=Bp1.CRLF=Bp1.CR_LF_LEN=Bp1.CR_LF=void 0;Bp1.setTransportFactory=yd6;Bp1.defaultPort=gd6;Bp1.getUrlParseFn=hd6;Bp1.newTransport=ud6;Bp1.getResolveFn=cd6;Bp1.protoLen=wp1;Bp1.extractProtocolMessage=ld6;var xd6=dY(),fd6=Rw(),bd6=fm(),iY;function yd6($){iY=$}function gd6(){return iY!==void 0&&iY.defaultPort!==void 0?iY.defaultPort:fd6.DEFAULT_PORT}function hd6(){return iY!==void 0&&iY.urlParseFn?iY.urlParseFn:void 0}function ud6(){if(!iY||typeof iY.factory!=="function")throw Error("transport fn is not set");return iY.factory()}function cd6(){return iY!==void 0&&iY.dnsResolveFn?iY.dnsResolveFn:void 0}Bp1.CR_LF=`\r
|
|
1335
|
+
`);Q=G.pop()??"";for(let J of G){let K=_m(J).replace(/^\[\d+\]\s*/,"").trim();if(!K)continue;jw({method:"",path:"",status:0,duration:0,timestamp:new Date,rawLine:K})}}(async()=>{for(;;){let{done:G,value:J}=await Z.read();if(G)break;Q+=X.decode(J,{stream:!0}),Y()}if(Q.trim()){let G=_m(Q).replace(/^\[\d+\]\s*/,"").trim();if(G)jw({method:"",path:"",status:0,duration:0,timestamp:new Date,rawLine:G})}})()}async function sc6($){let{baseUrl:Z,noTui:X}=$,Q=process.env.HOST==="0.0.0.0"&&Boolean(process.env.PORT),Y=Q?process.env.PORT:$.vitePort,G=Z||`http://localhost:${Y}`,J=Q?await Cm(Number(Y)+1):await Cm(Number($.port)),{settings:K,services:W,managedServiceNames:H}=await e50({port:String(J),home:$.home,baseUrl:$.baseUrl,localMode:$.localMode,skipMigrations:$.skipMigrations,noTui:$.noTui,vitePort:$.vitePort});for(let L of W)oD({name:L.name,status:"ready",port:L.port});Vm();let N=ac6(import.meta.dir,"..","..","..","..",".."),U=X===!0,F=Bun.spawn(["bun","run","dev:servers"],{cwd:N,env:{...process.env,PORT:String(K.port),VITE_PORT:String(Y),DATABASE_URL:K.databaseUrl,NATS_URL:K.natsUrls.join(","),NODE_ENV:K.nodeEnv,BASE_URL:G,DECOCMS_LOCAL_MODE:String(K.localMode),DECOCMS_HOME:K.dataDir,DATA_DIR:K.dataDir,DECO_CLI:"1",...K.betterAuthSecret?{BETTER_AUTH_SECRET:K.betterAuthSecret}:{},...K.s3Endpoint?{S3_ENDPOINT:K.s3Endpoint,S3_BUCKET:K.s3Bucket??"",S3_ACCESS_KEY_ID:K.s3AccessKeyId??"",S3_SECRET_ACCESS_KEY:K.s3SecretAccessKey??"",S3_FORCE_PATH_STYLE:String(K.s3ForcePathStyle)}:{},...K.natsPublicUrl&&K.natsAccountJwt&&K.natsAccountSigningKey?{NATS_PUBLIC_URL:K.natsPublicUrl,NATS_ACCOUNT_JWT:K.natsAccountJwt,NATS_ACCOUNT_SIGNING_KEY:K.natsAccountSigningKey,NATS_OPERATOR_JWT:K.natsOperatorJwt??"",NATS_TUNNEL_PUBLIC_ENABLED:"true",...K.natsCredsPath?{NATS_CREDS:K.natsCredsPath}:{}}:{}},stdio:["inherit",U?"inherit":"pipe",U?"inherit":"pipe"]});if(!U)Ln1(F.stdout),Ln1(F.stderr);Sm(G),oD({name:"Vite",status:"ready",port:Number(Y)}),oD({name:"API",status:"ready",port:Number(K.port)});let B=async(L)=>{if(F.kill(L),await F.exited,H.length>0){let{stopServices:D}=await Promise.resolve().then(() => (H50(),W50));await D(K.dataDir)}};return process.on("SIGINT",()=>B("SIGINT")),process.on("SIGTERM",()=>B("SIGTERM")),{port:Number(Y),process:F}}var Qd0=O(()=>{al0();rD();Zd0()});var X90;var Yd0=O(()=>{X90={name:"decocms",version:"4.204.17",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@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","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});import{Box as $l6,Text as Dn1}from"ink";import{jsx as Zl6,jsxs as En1}from"react/jsx-runtime";function zn1({version:$}){return En1($l6,{flexDirection:"column",marginTop:1,children:[S50.map((Z,X)=>Zl6(Dn1,{color:C50[X],children:Z},X)),En1(Dn1,{dimColor:!0,children:[" v",$]})]})}var jn1=O(()=>{Dm()});import{Box as aD,Text as Pw}from"ink";import{Spinner as Xl6}from"@inkjs/ui";import{jsx as lY,jsxs as Yb}from"react/jsx-runtime";function Pn1({status:$}){if($==="pending")return lY(Xl6,{label:""});return lY(Pw,{color:"green",children:"\u2713"})}function Ql6($){return`${$.name}: ${$.port||"...."}`}function An1({services:$,migrationsStatus:Z,home:X,serverUrl:Q}){return Yb(aD,{flexDirection:"column",paddingBottom:1,children:[lY(zn1,{version:X90.version}),lY(aD,{marginBottom:1,children:lY(Pw,{dimColor:!0,children:"\u2500".repeat(80)})}),lY(aD,{children:Yb(Pw,{dimColor:!0,children:["Home: ",X]})}),Yb(aD,{gap:2,children:[$.map((Y)=>Yb(aD,{gap:1,children:[lY(Pw,{children:Ql6(Y)}),lY(Pn1,{status:Y.status})]},Y.name)),Yb(aD,{gap:1,children:[lY(Pw,{children:"Migrations"}),lY(Pn1,{status:Z})]})]}),lY(aD,{children:Q?Yb(Pw,{children:["Open in browser: ",lY(Pw,{color:"cyan",children:Q})]}):lY(Pw,{dimColor:!0,children:"Starting..."})})]})}var Tn1=O(()=>{Yd0();jn1()});import{Box as Yl6,Text as vm}from"ink";import{jsx as Gd0,jsxs as Jd0}from"react/jsx-runtime";function Gl6($){if($>=500)return"red";if($>=400)return"yellow";if($>=300)return"cyan";return"green"}function Rn1({logs:$}){return Gd0(Yl6,{flexDirection:"column",children:$.map((Z,X)=>{if(Z.rawLine)return Gd0(vm,{dimColor:!0,children:Z.rawLine},X);let Q=Z.duration<1000?`${Z.duration}ms`:`${(Z.duration/1000).toFixed(1)}s`;return Jd0(vm,{children:[Jd0(vm,{dimColor:!0,children:[Z.method.padEnd(6)," ",Z.path.padEnd(30)," "]}),Gd0(vm,{color:Gl6(Z.status),children:Z.status}),Jd0(vm,{dimColor:!0,children:[" ",Q.padStart(8)]})]},X)})})}var In1=()=>{};var Kd0={};B0(Kd0,{App:()=>Wl6});import{Box as Jl6}from"ink";import{useSyncExternalStore as Kl6}from"react";import{jsx as qn1,jsxs as Hl6}from"react/jsx-runtime";function Wl6({home:$}){let Z=Kl6($d0,el0);return Hl6(Jl6,{flexDirection:"column",children:[qn1(An1,{services:Z.services,migrationsStatus:Z.migrationsStatus,home:$,serverUrl:Z.serverUrl}),qn1(Rn1,{logs:Z.logs})]})}var Wd0=O(()=>{Tn1();In1();rD()});var OJ="thread-gate",fN="decopilot-hosted-harness",tG="automations",Aw="background-tools";var Mn1="7";function kn1($){return{name:"decocms",systemDatabaseUrl:$.systemDatabaseUrl,systemDatabaseSchemaName:"dbos",systemDatabasePoolSize:$.poolSize,runAdminServer:!1,executorID:$.executorID,applicationVersion:Mn1,...$.listenQueues!==void 0?{listenQueues:$.listenQueues}:{}}}var Vn1=()=>{};function Nl6(){let $=(process.env.BUN_OPTIONS??"").split(/\s+/).filter(Boolean);return[...process.argv.slice(1),...$]}function Hd0($,Z){for(let X=0;X<$.length;X++){let Q=$[X];if(Q===void 0)continue;if(Q===Z)return $[X+1];if(Q.startsWith(`${Z}=`))return Q.slice(Z.length+1)}return}function Sn1(){let $=Nl6();if($.includes("--cpu-prof")){console.log(JSON.stringify({msg:"cpu-profiling-active",dir:Hd0($,"--cpu-prof-dir")??process.cwd(),name:Hd0($,"--cpu-prof-name"),markdown:$.includes("--cpu-prof-md"),intervalUs:Number(Hd0($,"--cpu-prof-interval")??1000),note:"profile is written on process exit"}));return}if(process.env.CPU_PROFILE)console.warn(JSON.stringify({msg:"cpu-profiling-requested-but-inactive",hint:'CPU profiling is a Bun launch flag. Set BUN_OPTIONS="--cpu-prof --cpu-prof-md --cpu-prof-dir=/tmp" before starting the process.'}))}function Cn1(){if(process.env.HEAP_WATCH!=="1")return()=>{};let $=Number(process.env.HEAP_WATCH_INTERVAL_MS??60000),Z=async()=>{let X=iD();if(!X)return;let Q={};try{let{heapStats:Y}=await import("bun:jsc"),G=Y(),J=Object.entries(G.objectTypeCounts).sort((K,W)=>W[1]-K[1]).slice(0,20);Q={objectCount:G.objectCount,heapSize:G.heapSize,top:Object.fromEntries(J)}}catch{}console.log(JSON.stringify({msg:"heap-watch",ts:new Date().toISOString(),uptimeS:Math.round(process.uptime()),rss:X.rss,heapUsed:X.heapUsed,heapTotal:X.heapTotal,external:X.external,arrayBuffers:X.arrayBuffers,...Q}))};return Z().catch(()=>{}),Q90=setInterval(()=>void Z().catch(()=>{}),$),Q90.unref?.(),process.on("SIGUSR2",()=>{try{let X=Bun.generateHeapSnapshot("v8"),Q=typeof X==="string"?X:JSON.stringify(X),Y=`/tmp/heap-${process.pid}-${Date.now()}.heapsnapshot`;Bun.write(Y,Q),console.log(JSON.stringify({msg:"heap-snapshot-written",path:Y}))}catch(X){console.error("[heap-watch] snapshot failed:",X)}}),()=>{if(Q90)clearInterval(Q90)}}var Q90;var _n1=()=>{};import*as Ul6 from"bun:jsc";function vn1(){if(process.env.STALL_WATCHDOG!=="1")return()=>{};let $=Number(process.env.STALL_WATCHDOG_MS??100),Z=Number(process.env.STALL_WATCHDOG_TICK_MS??50);try{Fl6()}catch(G){return console.error("[stall-watchdog] failed to start sampling profiler:",G),()=>{}}let X,Q=performance.now()+Z,Y=()=>{let G=performance.now(),J=G-Q;Q=G+Z;let K=[];try{K=wl6()?.traces??[]}catch{}if(J>$&&K.length>0){let W=new Map;for(let N of K){let U=N.frames.find((B)=>B.sourceURL&&!/Unknown Executable/.test(B.category??""))??N.frames[0];if(!U)continue;let F=(U.sourceURL??"?").replace(/^.*\/node_modules\//,"node_modules/"),w=`${U.name??"?"} @ ${F}:${U.line??"?"}`;W.set(w,(W.get(w)??0)+1)}let H=[...W.entries()].sort((N,U)=>U[1]-N[1]).slice(0,8).map(([N,U])=>({frame:N,count:U}));console.warn(JSON.stringify({msg:"stall-stack",ts:new Date().toISOString(),lagMs:Math.round(J),samplesInWindow:K.length,top:H}))}X=setTimeout(Y,Z),X.unref?.()};return X=setTimeout(Y,Z),X.unref?.(),()=>{if(X)clearTimeout(X)}}var Fl6,wl6;var xn1=O(()=>{({startSamplingProfiler:Fl6,samplingProfilerStackTraces:wl6}=Ul6)});function fn1(){Sn1();let $=[Cn1(),_l1(),vn1()];return()=>{for(let Z of $)Z()}}var bn1=O(()=>{Uh0();_n1();xn1()});var sD=_((yn1)=>{Object.defineProperty(yn1,"__esModule",{value:!0});yn1.RepublishHeaders=yn1.DirectMsgHeaders=yn1.JsHeaders=yn1.AdvisoryKind=void 0;yn1.isOrderedPushConsumerOptions=Bl6;yn1.isPullConsumer=Ol6;yn1.isPushConsumer=Ll6;yn1.isBoundPushConsumerOptions=Dl6;function Bl6($){if($&&typeof $==="object")return"name_prefix"in $||"deliver_subject_prefix"in $||"filter_subjects"in $||"filter_subject"in $||"deliver_policy"in $||"opt_start_seq"in $||"opt_start_time"in $||"replay_policy"in $||"inactive_threshold"in $||"headers_only"in $||"deliver_prefix"in $;return!1}function Ol6($){return $.isPullConsumer()}function Ll6($){return $.isPushConsumer()}function Dl6($){if($&&typeof $==="object")return"deliver_subject"in $||"deliver_group"in $||"idle_heartbeat"in $;return!1}yn1.AdvisoryKind={API:"api_audit",StreamAction:"stream_action",ConsumerAction:"consumer_action",SnapshotCreate:"snapshot_create",SnapshotComplete:"snapshot_complete",RestoreCreate:"restore_create",RestoreComplete:"restore_complete",MaxDeliver:"max_deliver",Terminated:"terminated",Ack:"consumer_ack",StreamLeaderElected:"stream_leader_elected",StreamQuorumLost:"stream_quorum_lost",ConsumerLeaderElected:"consumer_leader_elected",ConsumerQuorumLost:"consumer_quorum_lost"};yn1.JsHeaders={StreamSourceHdr:"Nats-Stream-Source",LastConsumerSeqHdr:"Nats-Last-Consumer",LastStreamSeqHdr:"Nats-Last-Stream",ConsumerStalledHdr:"Nats-Consumer-Stalled",MessageSizeHdr:"Nats-Msg-Size",RollupHdr:"Nats-Rollup",RollupValueSubject:"sub",RollupValueAll:"all",PendingMessagesHdr:"Nats-Pending-Messages",PendingBytesHdr:"Nats-Pending-Bytes",RequiredApiLevel:"Nats-Required-Api-Level"};yn1.DirectMsgHeaders={Stream:"Nats-Stream",Sequence:"Nats-Sequence",TimeStamp:"Nats-Time-Stamp",Subject:"Nats-Subject",LastSequence:"Nats-Last-Sequence",NumPending:"Nats-Num-Pending"};yn1.RepublishHeaders={Stream:"Nats-Stream",Subject:"Nats-Subject",Sequence:"Nats-Sequence",LastSequence:"Nats-Last-Sequence",Size:"Nats-Msg-Size"}});var dY=_((hn1)=>{Object.defineProperty(hn1,"__esModule",{value:!0});hn1.TD=hn1.TE=hn1.Empty=void 0;hn1.encode=ql6;hn1.decode=Ml6;hn1.Empty=new Uint8Array(0);hn1.TE=new TextEncoder;hn1.TD=new TextDecoder;function Il6(...$){let Z=0;for(let Y=0;Y<$.length;Y++)Z+=$[Y].length;let X=new Uint8Array(Z),Q=0;for(let Y=0;Y<$.length;Y++)X.set($[Y],Q),Q+=$[Y].length;return X}function ql6(...$){let Z=[];for(let X=0;X<$.length;X++)Z.push(hn1.TE.encode($[X]));if(Z.length===0)return hn1.Empty;if(Z.length===1)return Z[0];return Il6(...Z)}function Ml6($){if(!$||$.length===0)return"";return hn1.TD.decode($)}});var mY=_((ln1)=>{Object.defineProperty(ln1,"__esModule",{value:!0});ln1.errors=ln1.PermissionViolationError=ln1.NoRespondersError=ln1.TimeoutError=ln1.RequestError=ln1.ProtocolError=ln1.ConnectionError=ln1.DrainingConnectionError=ln1.ClosedConnectionError=ln1.AuthorizationError=ln1.UserAuthenticationExpiredError=ln1.InvalidOperationError=ln1.InvalidArgumentError=ln1.InvalidSubjectError=void 0;class Ud0 extends Error{constructor($,Z){super(`illegal subject: '${$}'`,Z);this.name="InvalidSubjectError"}}ln1.InvalidSubjectError=Ud0;class Y90 extends Error{constructor($,Z){super($,Z);this.name="InvalidArgumentError"}static format($,Z,X){if(Array.isArray(Z)&&Z.length>1)Z=Z[0];if(Array.isArray($))$=$.map((Q)=>`'${Q}'`),$=$.join(",");else $=`'${$}'`;return new Y90(`${$} ${Z}`,X)}}ln1.InvalidArgumentError=Y90;class Fd0 extends Error{constructor($,Z){super($,Z);this.name="InvalidOperationError"}}ln1.InvalidOperationError=Fd0;class G90 extends Error{constructor($,Z){super($,Z);this.name="UserAuthenticationExpiredError"}static parse($){if($.toLowerCase().indexOf("user authentication expired")!==-1)return new G90($);return null}}ln1.UserAuthenticationExpiredError=G90;class J90 extends Error{constructor($,Z){super($,Z);this.name="AuthorizationError"}static parse($){let Z=["authorization violation","account authentication expired","authentication timeout"],X=$.toLowerCase();for(let Q=0;Q<Z.length;Q++)if(X.indexOf(Z[Q])!==-1)return new J90($);return null}}ln1.AuthorizationError=J90;class wd0 extends Error{constructor(){super("closed connection");this.name="ClosedConnectionError"}}ln1.ClosedConnectionError=wd0;class Bd0 extends Error{constructor(){super("connection draining");this.name="DrainingConnectionError"}}ln1.DrainingConnectionError=Bd0;class Od0 extends Error{constructor($,Z){super($,Z);this.name="ConnectionError"}}ln1.ConnectionError=Od0;class Ld0 extends Error{constructor($,Z){super($,Z);this.name="ProtocolError"}}ln1.ProtocolError=Ld0;class Dd0 extends Error{constructor($="",Z){super($,Z);this.name="RequestError"}isNoResponders(){return this.cause instanceof K90}}ln1.RequestError=Dd0;class Ed0 extends Error{constructor($){super("timeout",$);this.name="TimeoutError"}}ln1.TimeoutError=Ed0;class K90 extends Error{subject;constructor($,Z){super(`no responders: '${$}'`,Z);this.subject=$,this.name="NoResponders"}}ln1.NoRespondersError=K90;class W90 extends Error{operation;subject;queue;constructor($,Z,X,Q,Y){super($,Y);this.name="PermissionViolationError",this.operation=Z,this.subject=X,this.queue=Q}static parse($){if(($?$.toLowerCase():"").indexOf("permissions violation")===-1)return null;let X="publish",Q="",Y=void 0,G=$.match(/(Publish|Subscription) to "(\S+)"/);if(G){if(X=G[1].toLowerCase(),Q=G[2],X==="subscription"){let J=$.match(/using queue "(\S+)"/);if(J)Y=J[1]}}return new W90($,X,Q,Y)}}ln1.PermissionViolationError=W90;ln1.errors={AuthorizationError:J90,ClosedConnectionError:wd0,ConnectionError:Od0,DrainingConnectionError:Bd0,InvalidArgumentError:Y90,InvalidOperationError:Fd0,InvalidSubjectError:Ud0,NoRespondersError:K90,PermissionViolationError:W90,ProtocolError:Ld0,RequestError:Dd0,TimeoutError:Ed0,UserAuthenticationExpiredError:G90}});var LJ=_((pn1)=>{Object.defineProperty(pn1,"__esModule",{value:!0});pn1.SimpleMutex=pn1.Perf=void 0;pn1.extend=ml6;pn1.render=il6;pn1.timeout=nl6;pn1.delay=pl6;pn1.deadline=tl6;pn1.deferred=jd0;pn1.debugDeferred=ol6;pn1.shuffle=rl6;pn1.collect=al6;pn1.jitter=nn1;pn1.backoff=sl6;pn1.nanos=el6;pn1.millis=$d6;pn1.randomToken=Qd6;var dl6=dY(),zd0=mY();function ml6($,...Z){for(let X=0;X<Z.length;X++){let Q=Z[X];Object.keys(Q).forEach(function(Y){$[Y]=Q[Y]})}return $}function il6($){return dl6.TD.decode($).replace(/\n/g,"\u240A").replace(/\r/g,"\u240D")}function nl6($,Z=!0){let X=Z?new zd0.TimeoutError:null,Q,Y,G=new Promise((J,K)=>{Q={cancel:()=>{if(Y)clearTimeout(Y)}},Y=setTimeout(()=>{if(X===null)K(new zd0.TimeoutError);else K(X)},$)});return Object.assign(G,Q)}function pl6($=0){let Z,X=new Promise((Q)=>{let Y=setTimeout(()=>{Q()},$);Z={cancel:()=>{if(Y)clearTimeout(Y),Q()}}});return Object.assign(X,Z)}async function tl6($,Z=1000){let X=jd0(),Q=setTimeout(()=>{X.reject(new zd0.TimeoutError)},Z);try{return await Promise.race([$,X])}finally{clearTimeout(Q)}}function jd0(){let $={},Z=new Promise((X,Q)=>{$={resolve:X,reject:Q}});return Object.assign(Z,$)}function ol6(){let $={},Z=new Promise((X,Q)=>{$={resolve:(Y)=>{console.trace("resolve",Y),X(Y)},reject:(Y)=>{console.trace("reject"),Q(Y)}}});return Object.assign(Z,$)}function rl6($){for(let Z=$.length-1;Z>0;Z--){let X=Math.floor(Math.random()*(Z+1));[$[Z],$[X]]=[$[X],$[Z]]}return $}async function al6($){let Z=[];for await(let X of $)Z.push(X);return Z}class mn1{timers;measures;constructor(){this.timers=new Map,this.measures=new Map}mark($){this.timers.set($,performance.now())}measure($,Z,X){let Q=this.timers.get(Z);if(Q===void 0)throw Error(`${Z} is not defined`);let Y=this.timers.get(X);if(Y===void 0)throw Error(`${X} is not defined`);this.measures.set($,Y-Q)}getEntries(){let $=[];return this.measures.forEach((Z,X)=>{$.push({name:X,duration:Z})}),$}}pn1.Perf=mn1;class in1{max;current;waiting;constructor($=1){this.max=$,this.current=0,this.waiting=[]}lock(){if(this.current++,this.current<=this.max)return Promise.resolve();let $=jd0();return this.waiting.push($),$}unlock(){this.current--,this.waiting.pop()?.resolve()}}pn1.SimpleMutex=in1;function nn1($){if($===0)return 0;return Math.floor($/2+Math.random()*$)}function sl6($=[0,250,250,500,500,3000,5000]){if(!Array.isArray($))$=[0,250,250,500,500,3000,5000];let Z=$.length-1;return{backoff(X){return nn1(X>Z?$[Z]:$[X])}}}function el6($){return $*1e6}function $d6($){return Math.floor($/1e6)}var Zd6="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",bN=new Uint8Array(62);for(let $=0;$<62;$++)bN[$]=Zd6.charCodeAt($);var Xd6=218340105584896;function Qd6(){let $=Math.floor(Math.random()*Xd6),Z=$%62,X=bN[Z];$=($-Z)/62,Z=$%62;let Q=bN[Z];$=($-Z)/62,Z=$%62;let Y=bN[Z];$=($-Z)/62,Z=$%62;let G=bN[Z];$=($-Z)/62,Z=$%62;let J=bN[Z];$=($-Z)/62,Z=$%62;let K=bN[Z];$=($-Z)/62,Z=$%62;let W=bN[Z];$=($-Z)/62;let H=bN[$];return String.fromCharCode(X,Q,Y,G,J,K,W,H)}});var Zp1=_((en1)=>{Object.defineProperty(en1,"__esModule",{value:!0});en1.nuid=en1.NuidImpl=void 0;var zd6="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",Tw=62,N90=12,an1=10,on1=33,jd6=333,rn1=N90+an1,Ad0=new Uint8Array(Tw);for(let $=0;$<Tw;$++)Ad0[$]=zd6.charCodeAt($);var H90=4294967296,sn1=BigInt(Tw)**BigInt(an1),xm=Number(sn1/(1n<<32n)),Pd0=Number(sn1%(1n<<32n));function Pd6($){for(let Z=0;Z<$.length;Z++)$[Z]=Math.floor(Math.random()*256)}function Ad6($){if(globalThis?.crypto?.getRandomValues)globalThis.crypto.getRandomValues($);else Pd6($)}class Td0{buf;cbuf;seqHi;seqLo;inc;inited;constructor(){this.buf=new Uint8Array(rn1),this.cbuf=new Uint8Array(N90),this.inited=!1}init(){this.inited=!0,this.setPre(),this.initSeqAndInc(),this.fillSeq()}initSeqAndInc(){let $=0;do this.seqHi=Math.floor(Math.random()*(xm+1)),this.seqLo=Math.floor(Math.random()*H90);while($++<8&&this.seqHi===xm&&this.seqLo>=Pd0);if(this.seqHi===xm&&this.seqLo>=Pd0)this.seqLo=0;this.inc=Math.random()*(jd6-on1)+on1|0}setPre(){Ad6(this.cbuf);for(let $=0;$<N90;$++)this.buf[$]=Ad0[this.cbuf[$]%Tw]}fillSeq(){let $=this.seqHi,Z=this.seqLo;for(let X=rn1-1;X>=N90;X--){let Q=Math.floor($/Tw),G=($-Q*Tw)*H90+Z,J=Math.floor(G/Tw),K=G-J*Tw;this.buf[X]=Ad0[K],$=Q,Z=J}}next(){if(!this.inited)this.init();if(this.seqLo+=this.inc,this.seqLo>=H90)this.seqLo-=H90,this.seqHi+=1;if(this.seqHi>xm||this.seqHi===xm&&this.seqLo>=Pd0)this.setPre(),this.initSeqAndInc();this.fillSeq();let $=this.buf;return String.fromCharCode($[0],$[1],$[2],$[3],$[4],$[5],$[6],$[7],$[8],$[9],$[10],$[11],$[12],$[13],$[14],$[15],$[16],$[17],$[18],$[19],$[20],$[21])}reset(){this.init()}}en1.NuidImpl=Td0;en1.nuid=new Td0});var Gp1=_((Qp1)=>{Object.defineProperty(Qp1,"__esModule",{value:!0});Qp1.nuid=Qp1.Nuid=void 0;var Xp1=Zp1();Qp1.Nuid=Xp1.NuidImpl;Qp1.nuid=Xp1.nuid});var F90=_((U90)=>{Object.defineProperty(U90,"__esModule",{value:!0});U90.nuid=U90.Nuid=void 0;var Jp1=Gp1();Object.defineProperty(U90,"Nuid",{enumerable:!0,get:function(){return Jp1.Nuid}});Object.defineProperty(U90,"nuid",{enumerable:!0,get:function(){return Jp1.nuid}})});var Rw=_((Kp1)=>{Object.defineProperty(Kp1,"__esModule",{value:!0});Kp1.DEFAULT_HOST=Kp1.DEFAULT_PORT=Kp1.Match=void 0;Kp1.syncIterator=kd6;Kp1.createInbox=Vd6;var qd6=F90(),Md6=mY();Kp1.Match={Exact:"exact",CanonicalMIME:"canonical",IgnoreCase:"insensitive"};function kd6($){let Z=$[Symbol.asyncIterator]();return{async next(){let X=await Z.next();if(X.done)return Promise.resolve(null);return Promise.resolve(X.value)}}}function Vd6($=""){if($=$||"_INBOX",typeof $!=="string")throw TypeError("prefix must be a string");return $.split(".").forEach((Z)=>{if(Z==="*"||Z===">")throw Md6.InvalidArgumentError.format("prefix",`cannot have wildcards ('${$}')`)}),`${$}.${qd6.nuid.next()}`}Kp1.DEFAULT_PORT=4222;Kp1.DEFAULT_HOST="127.0.0.1"});var fm=_((Up1)=>{Object.defineProperty(Up1,"__esModule",{value:!0});Up1.DataBuffer=void 0;var Hp1=dY();class Np1{buffers;byteLength;constructor(){this.buffers=[],this.byteLength=0}static concat(...$){let Z=0;for(let Y=0;Y<$.length;Y++)Z+=$[Y].length;let X=new Uint8Array(Z),Q=0;for(let Y=0;Y<$.length;Y++)X.set($[Y],Q),Q+=$[Y].length;return X}static fromAscii($){if(!$)$="";return Hp1.TE.encode($)}static toAscii($){return Hp1.TD.decode($)}reset(){this.buffers.length=0,this.byteLength=0}pack(){if(this.buffers.length>1){let $=new Uint8Array(this.byteLength),Z=0;for(let X=0;X<this.buffers.length;X++)$.set(this.buffers[X],Z),Z+=this.buffers[X].length;this.buffers.length=0,this.buffers.push($)}}shift(){if(this.buffers.length){let $=this.buffers.shift();if($)return this.byteLength-=$.length,$}return new Uint8Array(0)}drain($){if(this.buffers.length){this.pack();let Z=this.buffers.pop();if(Z){let X=this.byteLength;if($===void 0||$>X)$=X;let Q=Z.subarray(0,$);if(X>$)this.buffers.push(Z.subarray($));return this.byteLength=X-$,Q}}return new Uint8Array(0)}fill($,...Z){if($)this.buffers.push($),this.byteLength+=$.length;for(let X=0;X<Z.length;X++)if(Z[X]&&Z[X].length)this.buffers.push(Z[X]),this.byteLength+=Z[X].length}peek(){if(this.buffers.length)return this.pack(),this.buffers[0];return new Uint8Array(0)}size(){return this.byteLength}length(){return this.buffers.length}}Up1.DataBuffer=Np1});var eD=_((Bp1)=>{Object.defineProperty(Bp1,"__esModule",{value:!0});Bp1.LF=Bp1.CR=Bp1.CRLF=Bp1.CR_LF_LEN=Bp1.CR_LF=void 0;Bp1.setTransportFactory=yd6;Bp1.defaultPort=gd6;Bp1.getUrlParseFn=hd6;Bp1.newTransport=ud6;Bp1.getResolveFn=cd6;Bp1.protoLen=wp1;Bp1.extractProtocolMessage=ld6;var xd6=dY(),fd6=Rw(),bd6=fm(),iY;function yd6($){iY=$}function gd6(){return iY!==void 0&&iY.defaultPort!==void 0?iY.defaultPort:fd6.DEFAULT_PORT}function hd6(){return iY!==void 0&&iY.urlParseFn?iY.urlParseFn:void 0}function ud6(){if(!iY||typeof iY.factory!=="function")throw Error("transport fn is not set");return iY.factory()}function cd6(){return iY!==void 0&&iY.dnsResolveFn?iY.dnsResolveFn:void 0}Bp1.CR_LF=`\r
|
|
1336
1336
|
`;Bp1.CR_LF_LEN=Bp1.CR_LF.length;Bp1.CRLF=bd6.DataBuffer.fromAscii(Bp1.CR_LF);Bp1.CR=new Uint8Array(Bp1.CRLF)[0];Bp1.LF=new Uint8Array(Bp1.CRLF)[1];function wp1($){for(let Z=0;Z<$.length;Z++){let X=Z+1;if($.byteLength>X&&$[Z]===Bp1.CR&&$[X]===Bp1.LF)return X+1}return 0}function ld6($){let Z=wp1($);if(Z>0){let Q=new Uint8Array($).slice(0,Z);return xd6.TD.decode(Q)}return""}});var kd0=_((Ap1)=>{Object.defineProperty(Ap1,"__esModule",{value:!0});Ap1.ipV4=zp1;Ap1.isIP=ed6;Ap1.parseIP=jp1;var bm=4,$E=16,w90=48,Ep1=57,Lp1=65,ad6=70,Dp1=97,sd6=102,Md0=16777215;function zp1($,Z,X,Q){let Y=new Uint8Array($E);return[0,0,0,0,0,0,0,0,0,0,255,255].forEach((J,K)=>{Y[K]=J}),Y[12]=$,Y[13]=Z,Y[14]=X,Y[15]=Q,Y}function ed6($){return jp1($)!==void 0}function jp1($){for(let Z=0;Z<$.length;Z++)switch($[Z]){case".":return Pp1($);case":":return $m6($)}return}function Pp1($){let Z=new Uint8Array(bm);for(let X=0;X<bm;X++){if($.length===0)return;if(X>0){if($[0]!==".")return;$=$.substring(1)}let{n:Q,c:Y,ok:G}=Zm6($);if(!G||Q>255)return;$=$.substring(Y),Z[X]=Q}return zp1(Z[0],Z[1],Z[2],Z[3])}function $m6($){let Z=new Uint8Array($E),X=-1;if($.length>=2&&$[0]===":"&&$[1]===":"){if(X=0,$=$.substring(2),$.length===0)return Z}let Q=0;while(Q<$E){let{n:Y,c:G,ok:J}=Xm6($);if(!J||Y>65535)return;if(G<$.length&&$[G]==="."){if(X<0&&Q!=$E-bm)return;if(Q+bm>$E)return;let K=Pp1($);if(K===void 0)return;Z[Q]=K[12],Z[Q+1]=K[13],Z[Q+2]=K[14],Z[Q+3]=K[15],$="",Q+=bm;break}if(Z[Q]=Y>>8,Z[Q+1]=Y,Q+=2,$=$.substring(G),$.length===0)break;if($[0]!==":"||$.length==1)return;if($=$.substring(1),$[0]===":"){if(X>=0)return;if(X=Q,$=$.substring(1),$.length===0)break}}if($.length!==0)return;if(Q<$E){if(X<0)return;let Y=$E-Q;for(let G=Q-1;G>=X;G--)Z[G+Y]=Z[G];for(let G=X+Y-1;G>=X;G--)Z[G]=0}else if(X>=0)return;return Z}function Zm6($){let Z=0,X=0;for(Z=0;Z<$.length&&w90<=$.charCodeAt(Z)&&$.charCodeAt(Z)<=Ep1;Z++)if(X=X*10+($.charCodeAt(Z)-w90),X>=Md0)return{n:Md0,c:Z,ok:!1};if(Z===0)return{n:0,c:0,ok:!1};return{n:X,c:Z,ok:!0}}function Xm6($){let Z=0,X=0;for(X=0;X<$.length;X++){if(w90<=$.charCodeAt(X)&&$.charCodeAt(X)<=Ep1)Z*=16,Z+=$.charCodeAt(X)-w90;else if(Dp1<=$.charCodeAt(X)&&$.charCodeAt(X)<=sd6)Z*=16,Z+=$.charCodeAt(X)-Dp1+10;else if(Lp1<=$.charCodeAt(X)&&$.charCodeAt(X)<=ad6)Z*=16,Z+=$.charCodeAt(X)-Lp1+10;else break;if(Z>=Md0)return{n:0,c:X,ok:!1}}if(X===0)return{n:0,c:X,ok:!1};return{n:Z,c:X,ok:!0}}});var xd0=_((Rp1)=>{Object.defineProperty(Rp1,"__esModule",{value:!0});Rp1.Servers=Rp1.ServerImpl=void 0;Rp1.isIPV4OrHostname=Tp1;Rp1.hostPort=vd0;var Vd0=eD(),Sd0=LJ(),Cd0=kd0(),Jm6=Rw(),Km6=mY();function Tp1($){if($.indexOf("[")!==-1||$.indexOf("::")!==-1)return!1;if($.indexOf(".")!==-1)return!0;if($.split(":").length<=2)return!0;return!1}function _d0($){return!Tp1($)}function Wm6($){let X=$.toUpperCase().indexOf("::FFFF:");if(X!==-1&&$.indexOf(".")!==-1){let Q=$.substring(X+7);return Q=Q.replace("[",""),Q.replace("]","")}return $}function vd0($){if($=$.trim(),$.match(/^(.*:\/\/)(.*)/m))$=$.replace(/^(.*:\/\/)(.*)/gm,"$2");if($=Wm6($),_d0($)&&$.indexOf("[")===-1)$=`[${$}]`;let Z=_d0($)?$.match(/(]:)(\d+)/):$.match(/(:)(\d+)/),X=Z&&Z.length===3&&Z[1]&&Z[2]?parseInt(Z[2]):Jm6.DEFAULT_PORT,Y=new URL(`${X===80?"https":"http"}://${$}`);Y.port=`${X}`;let G=Y.hostname;if(G.charAt(0)==="[")G=G.substring(1,G.length-1);return{listen:Y.host,hostname:G,port:X}}class Gb{src;listen;hostname;port;didConnect;reconnects;lastConnect;gossiped;tlsName;resolves;constructor($,Z=!1){this.src=$,this.tlsName="";let X=vd0($);this.listen=X.listen,this.hostname=X.hostname,this.port=X.port,this.didConnect=!1,this.reconnects=0,this.lastConnect=0,this.gossiped=Z}toString(){return this.listen}async resolve($){if(!$.fn||$.resolve===!1)return[this];let Z=[];if((0,Cd0.isIP)(this.hostname))return[this];else{let X=await $.fn(this.hostname);if($.debug)console.log(`resolve ${this.hostname} = ${X.join(",")}`);for(let Q of X){let Y=this.port===80?"https":"http",G=new URL(`${Y}://${_d0(Q)?"["+Q+"]":Q}`);G.port=`${this.port}`;let J=new Gb(G.host,!1);J.tlsName=this.hostname,Z.push(J)}}if($.randomize)(0,Sd0.shuffle)(Z);return this.resolves=Z,Z}}Rp1.ServerImpl=Gb;class B90{firstSelect;servers;currentServer;tlsName;randomize;constructor($={}){this.firstSelect=!0,this.servers=[],this.tlsName="",this.randomize=$.randomize||!1}setServers($){if(!Array.isArray($)||$.length===0)throw Km6.InvalidArgumentError.format("servers","cannot be empty");let Z=(0,Vd0.getUrlParseFn)(),X=new Map;for(let Y of this.servers)X.set(Y.listen,Y);let Q=[];for(let Y of $){Y=Z?Z(Y):Y;let{listen:G}=vd0(Y),J=X.get(G);if(J)J.gossiped=!1,Q.push(J);else Q.push(new Gb(Y))}if(this.randomize)(0,Sd0.shuffle)(Q);if(this.servers=Q,this.currentServer===void 0||!Q.includes(this.currentServer))this.currentServer=Q[0],this.firstSelect=!0}clear(){this.servers.length=0}updateTLSName(){let $=this.getCurrentServer();if(!(0,Cd0.isIP)($.hostname))this.tlsName=$.hostname,this.servers.forEach((Z)=>{if(Z.gossiped)Z.tlsName=this.tlsName})}getCurrentServer(){return this.currentServer}addServer($,Z=!1){let X=(0,Vd0.getUrlParseFn)();$=X?X($):$;let Q=new Gb($,Z);if((0,Cd0.isIP)(Q.hostname))Q.tlsName=this.tlsName;this.servers.push(Q)}selectServer(){if(this.firstSelect)return this.firstSelect=!1,this.currentServer;let $=this.servers.shift();if($)this.servers.push($),this.currentServer=$;return $}removeCurrentServer(){this.removeServer(this.currentServer)}removeServer($){if($){let Z=this.servers.indexOf($);this.servers.splice(Z,1)}}snapshot(){return B90.freezeAll(this.servers)}snapshotForHandler(){let $=this.currentServer;if(!$)return this.snapshot();let Z=this.servers.indexOf($);if(Z<=0)return this.snapshot();return B90.freezeAll([$,...this.servers.slice(0,Z),...this.servers.slice(Z+1)])}static freezeAll($){return $.map((Z)=>Object.freeze({hostname:Z.hostname,port:Z.port,listen:Z.listen,src:Z.src,tlsName:Z.tlsName,reconnects:Z.reconnects,lastConnect:Z.lastConnect,gossiped:Z.gossiped,didConnect:Z.didConnect}))}find($){return this.servers.find((Z)=>Z.listen===$.listen)}setCurrent($){this.currentServer=$}length(){return this.servers.length}next(){return this.servers.length?this.servers[0]:void 0}getServers(){return this.servers}update($,Z){let X=[],Q=[],Y=(0,Vd0.getUrlParseFn)(),G=new Map;if($.connect_urls&&$.connect_urls.length>0)$.connect_urls.forEach((K)=>{K=Y?Y(K,Z):K;let W=new Gb(K,!0);G.set(K,W)});let J=[];if(this.servers.forEach((K,W)=>{let H=K.listen;if(K.gossiped&&this.currentServer.listen!==H&&G.get(H)===void 0)J.push(W);G.delete(H)}),J.reverse(),J.forEach((K)=>{let W=this.servers.splice(K,1);Q=Q.concat(W[0].listen)}),G.forEach((K,W)=>{this.servers.push(K),X.push(W)}),this.randomize&&X.length>0){let K=this.currentServer,W=this.servers.filter((H)=>H!==K);(0,Sd0.shuffle)(W),this.servers=K?[K,...W]:W}return{added:X,deleted:Q}}}Rp1.Servers=B90});var O90=_((kp1)=>{Object.defineProperty(kp1,"__esModule",{value:!0});kp1.QueuedIteratorImpl=void 0;var fd0=LJ(),qp1=mY();class Mp1{inflight;processed;received;noIterator;iterClosed;done;signal;yields;filtered;pendingFiltered;ctx;_data;err;time;profile;yielding;didBreak;constructor(){this.inflight=0,this.filtered=0,this.pendingFiltered=0,this.processed=0,this.received=0,this.noIterator=!1,this.done=!1,this.signal=(0,fd0.deferred)(),this.yields=[],this.iterClosed=(0,fd0.deferred)(),this.time=0,this.yielding=!1,this.didBreak=!1,this.profile=!1}[Symbol.asyncIterator](){return this.iterate()}push($){if(this.done)return;if(this.didBreak){if(typeof $==="function"){let Z=$;try{Z()}catch(X){}}return}if(typeof $==="function")this.pendingFiltered++;this.yields.push($),this.signal.resolve()}async*iterate(){if(this.noIterator)throw new qp1.InvalidOperationError("iterator cannot be used when a callback is registered");if(this.yielding)throw new qp1.InvalidOperationError("iterator is already yielding");this.yielding=!0;try{while(!0){if(this.yields.length===0)await this.signal;if(this.err)throw this.err;let $=this.yields;this.inflight=$.length,this.yields=[];for(let Z=0;Z<$.length;Z++){if(typeof $[Z]==="function"){this.pendingFiltered--;let Q=$[Z];try{Q()}catch(Y){throw Y}if(this.err)throw this.err;continue}this.processed++,this.inflight--;let X=this.profile?Date.now():0;yield $[Z],this.time=this.profile?Date.now()-X:0}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,fd0.deferred)()}}finally{this.didBreak=!0,this.stop()}}stop($){if(this.done)return;this.err=$,this.done=!0,this.signal.resolve(),this.iterClosed.resolve($)}getProcessed(){return this.noIterator?this.received:this.processed}getPending(){return this.yields.length+this.inflight-this.pendingFiltered}getReceived(){return this.received-this.filtered}}kp1.QueuedIteratorImpl=Mp1});var bd0=_((_p1)=>{Object.defineProperty(_p1,"__esModule",{value:!0});_p1.MuxSubscription=void 0;var Fm6=Rw(),Sp1=mY();class Cp1{baseInbox;reqs;constructor(){this.reqs=new Map}size(){return this.reqs.size}init($){return this.baseInbox=`${(0,Fm6.createInbox)($)}.`,this.baseInbox}add($){if(!isNaN($.received))$.received=0;this.reqs.set($.token,$)}get($){return this.reqs.get($)}cancel($){this.reqs.delete($.token)}getToken($){let Z=$.subject||"";if(Z.indexOf(this.baseInbox)===0)return Z.substring(this.baseInbox.length);return null}all(){return Array.from(this.reqs.values())}handleError($,Z){if($)return this.all().forEach((X)=>{X.resolver(Z,{})}),!0;if(Z.operation==="publish"){let X=this.all().find((Q)=>{return Q.requestSubject===Z.subject});if(X)return X.resolver(Z,{}),!0}return!1}dispatcher(){return($,Z)=>{let X=this.getToken(Z);if(X){let Q=this.get(X);if(Q){if($===null)$=Z?.data?.length===0&&Z.headers?.code===503?new Sp1.NoRespondersError(Q.requestSubject):null;Q.resolver($,Z)}}}}close(){let $=new Sp1.RequestError("connection closed");this.reqs.forEach((Z)=>{Z.resolver($,{})})}}_p1.MuxSubscription=Cp1});var yd0=_((fp1)=>{Object.defineProperty(fp1,"__esModule",{value:!0});fp1.Heartbeat=void 0;var wm6=LJ();class xp1{ph;interval;maxOut;timer;pendings;constructor($,Z,X){this.ph=$,this.interval=Z,this.maxOut=X,this.pendings=[]}start(){this.cancel(),this._schedule()}cancel($){if(this.timer)clearTimeout(this.timer),this.timer=void 0;if(this._reset(),$)this.ph.disconnect()}_schedule(){this.timer=setTimeout(()=>{if(this.ph.dispatchStatus({type:"ping",pendingPings:this.pendings.length+1}),this.pendings.length===this.maxOut){this.cancel(!0);return}let $=(0,wm6.deferred)();this.ph.flush($).then(()=>{this._reset()}).catch(()=>{this.cancel()}),this.pendings.push($),this._schedule()},this.interval)}_reset(){this.pendings=this.pendings.filter(($)=>{return $.resolve(),!1})}}fp1.Heartbeat=xp1});var ud0=_((up1)=>{Object.defineProperty(up1,"__esModule",{value:!0});up1.DenoBuffer=up1.MAX_SIZE=up1.AssertionError=void 0;up1.assert=gp1;up1.concat=hp1;up1.append=Om6;up1.readAll=Lm6;up1.writeAll=Dm6;var Bm6=dY();class gd0 extends Error{constructor($){super($);this.name="AssertionError"}}up1.AssertionError=gd0;function gp1($,Z="Assertion failed."){if(!$)throw new gd0(Z)}var yp1=32768;up1.MAX_SIZE=4294967294;function L90($,Z,X=0){let Q=Z.byteLength-X;if($.byteLength>Q)$=$.subarray(0,Q);return Z.set($,X),$.byteLength}function hp1($,Z){if($===void 0&&Z===void 0)return new Uint8Array(0);if($===void 0)return Z;if(Z===void 0)return $;let X=new Uint8Array($.length+Z.length);return X.set($,0),X.set(Z,$.length),X}function Om6($,Z){return hp1($,Uint8Array.of(Z))}class hd0{_buf;_off;constructor($){if(this._off=0,$==null){this._buf=new Uint8Array(0);return}this._buf=new Uint8Array($)}bytes($={copy:!0}){if($.copy===!1)return this._buf.subarray(this._off);return this._buf.slice(this._off)}empty(){return this._buf.byteLength<=this._off}get length(){return this._buf.byteLength-this._off}get capacity(){return this._buf.buffer.byteLength}truncate($){if($===0){this.reset();return}if($<0||$>this.length)throw Error("bytes.Buffer: truncation out of range");this._reslice(this._off+$)}reset(){this._reslice(0),this._off=0}_tryGrowByReslice($){let Z=this._buf.byteLength;if($<=this.capacity-Z)return this._reslice(Z+$),Z;return-1}_reslice($){gp1($<=this._buf.buffer.byteLength),this._buf=new Uint8Array(this._buf.buffer,0,$)}readByte(){let $=new Uint8Array(1);if(this.read($))return $[0];return null}read($){if(this.empty()){if(this.reset(),$.byteLength===0)return 0;return null}let Z=L90(this._buf.subarray(this._off),$);return this._off+=Z,Z}writeByte($){return this.write(Uint8Array.of($))}writeString($){return this.write(Bm6.TE.encode($))}write($){let Z=this._grow($.byteLength);return L90($,this._buf,Z)}_grow($){let Z=this.length;if(Z===0&&this._off!==0)this.reset();let X=this._tryGrowByReslice($);if(X>=0)return X;let Q=this.capacity;if($<=Math.floor(Q/2)-Z)L90(this._buf.subarray(this._off),this._buf);else if(Q+$>up1.MAX_SIZE)throw Error("The buffer cannot be grown beyond the maximum size.");else{let Y=new Uint8Array(Math.min(2*Q+$,up1.MAX_SIZE));L90(this._buf.subarray(this._off),Y),this._buf=Y}return this._off=0,this._reslice(Math.min(Z+$,up1.MAX_SIZE)),Z}grow($){if($<0)throw Error("Buffer._grow: negative count");let Z=this._grow($);this._reslice(Z)}readFrom($){let Z=0,X=new Uint8Array(yp1);while(!0){let Q=this.capacity-this.length<yp1,Y=Q?X:new Uint8Array(this._buf.buffer,this.length),G=$.read(Y);if(G===null)return Z;if(Q)this.write(Y.subarray(0,G));else this._reslice(this.length+G);Z+=G}}}up1.DenoBuffer=hd0;function Lm6($){let Z=new hd0;return Z.readFrom($),Z.bytes()}function Dm6($,Z){let X=0;while(X<Z.length)X+=$.write(Z.subarray(X))}});var dd0=_((ip1)=>{Object.defineProperty(ip1,"__esModule",{value:!0});ip1.cc=ip1.State=ip1.Parser=ip1.Kind=void 0;ip1.describe=Rm6;var cd0=ud0(),ld0=dY();ip1.Kind={OK:0,ERR:1,MSG:2,INFO:3,PING:4,PONG:5};function Rm6($){let Z,X="";switch($.kind){case ip1.Kind.MSG:Z="MSG";break;case ip1.Kind.OK:Z="OK";break;case ip1.Kind.ERR:Z="ERR",X=ld0.TD.decode($.data);break;case ip1.Kind.PING:Z="PING";break;case ip1.Kind.PONG:Z="PONG";break;case ip1.Kind.INFO:Z="INFO",X=ld0.TD.decode($.data)}return`${Z}: ${X}`}function lp1(){let $={};return $.sid=-1,$.hdr=-1,$.size=-1,$}var dp1=48,Im6=57,Jb=67108864;class mp1{dispatcher;state;as;drop;hdr;ma;argBuf;msgBuf;constructor($){this.dispatcher=$,this.state=ip1.State.OP_START,this.as=0,this.drop=0,this.hdr=0}parse($){let Z;for(Z=0;Z<$.length;Z++){let X=$[Z];switch(this.state){case ip1.State.OP_START:switch(X){case ip1.cc.M:case ip1.cc.m:this.state=ip1.State.OP_M,this.hdr=-1,this.ma=lp1();break;case ip1.cc.H:case ip1.cc.h:this.state=ip1.State.OP_H,this.hdr=0,this.ma=lp1();break;case ip1.cc.P:case ip1.cc.p:this.state=ip1.State.OP_P;break;case ip1.cc.PLUS:this.state=ip1.State.OP_PLUS;break;case ip1.cc.MINUS:this.state=ip1.State.OP_MINUS;break;case ip1.cc.I:case ip1.cc.i:this.state=ip1.State.OP_I;break;default:throw this.fail($.subarray(Z))}break;case ip1.State.OP_H:switch(X){case ip1.cc.M:case ip1.cc.m:this.state=ip1.State.OP_M;break;default:throw this.fail($.subarray(Z))}break;case ip1.State.OP_M:switch(X){case ip1.cc.S:case ip1.cc.s:this.state=ip1.State.OP_MS;break;default:throw this.fail($.subarray(Z))}break;case ip1.State.OP_MS:switch(X){case ip1.cc.G:case ip1.cc.g:this.state=ip1.State.OP_MSG;break;default:throw this.fail($.subarray(Z))}break;case ip1.State.OP_MSG:switch(X){case ip1.cc.SPACE:case ip1.cc.TAB:this.state=ip1.State.OP_MSG_SPC;break;default:throw this.fail($.subarray(Z))}break;case ip1.State.OP_MSG_SPC:switch(X){case ip1.cc.SPACE:case ip1.cc.TAB:continue;default:this.state=ip1.State.MSG_ARG,this.as=Z}break;case ip1.State.MSG_ARG:switch(X){case ip1.cc.CR:this.drop=1;break;case ip1.cc.NL:{let Q=this.argBuf?this.argBuf.bytes():$.subarray(this.as,Z-this.drop);this.processMsgArgs(Q),this.drop=0,this.as=Z+1,this.state=ip1.State.MSG_PAYLOAD,Z=this.as+this.ma.size-1;break}default:if(this.argBuf)this.argBuf.writeByte(X)}break;case ip1.State.MSG_PAYLOAD:if(this.msgBuf)if(this.msgBuf.length>=this.ma.size){let Q=this.msgBuf.bytes({copy:!1});this.dispatcher.push({kind:ip1.Kind.MSG,msg:this.ma,data:Q}),this.argBuf=void 0,this.msgBuf=void 0,this.state=ip1.State.MSG_END}else{let Q=this.ma.size-this.msgBuf.length,Y=$.length-Z;if(Y<Q)Q=Y;if(Q>0)this.msgBuf.write($.subarray(Z,Z+Q)),Z=Z+Q-1;else this.msgBuf.writeByte(X)}else if(Z-this.as>=this.ma.size)this.dispatcher.push({kind:ip1.Kind.MSG,msg:this.ma,data:$.subarray(this.as,Z)}),this.argBuf=void 0,this.msgBuf=void 0,this.state=ip1.State.MSG_END;break;case ip1.State.MSG_END:switch(X){case ip1.cc.NL:this.drop=0,this.as=Z+1,this.state=ip1.State.OP_START;break;default:continue}break;case ip1.State.OP_PLUS:switch(X){case ip1.cc.O:case ip1.cc.o:this.state=ip1.State.OP_PLUS_O;break;default:throw this.fail($.subarray(Z))}break;case ip1.State.OP_PLUS_O:switch(X){case ip1.cc.K:case ip1.cc.k:this.state=ip1.State.OP_PLUS_OK;break;default:throw this.fail($.subarray(Z))}break;case ip1.State.OP_PLUS_OK:switch(X){case ip1.cc.NL:this.dispatcher.push({kind:ip1.Kind.OK}),this.drop=0,this.state=ip1.State.OP_START;break}break;case ip1.State.OP_MINUS:switch(X){case ip1.cc.E:case ip1.cc.e:this.state=ip1.State.OP_MINUS_E;break;default:throw this.fail($.subarray(Z))}break;case ip1.State.OP_MINUS_E:switch(X){case ip1.cc.R:case ip1.cc.r:this.state=ip1.State.OP_MINUS_ER;break;default:throw this.fail($.subarray(Z))}break;case ip1.State.OP_MINUS_ER:switch(X){case ip1.cc.R:case ip1.cc.r:this.state=ip1.State.OP_MINUS_ERR;break;default:throw this.fail($.subarray(Z))}break;case ip1.State.OP_MINUS_ERR:switch(X){case ip1.cc.SPACE:case ip1.cc.TAB:this.state=ip1.State.OP_MINUS_ERR_SPC;break;default:throw this.fail($.subarray(Z))}break;case ip1.State.OP_MINUS_ERR_SPC:switch(X){case ip1.cc.SPACE:case ip1.cc.TAB:continue;default:this.state=ip1.State.MINUS_ERR_ARG,this.as=Z}break;case ip1.State.MINUS_ERR_ARG:switch(X){case ip1.cc.CR:this.drop=1;break;case ip1.cc.NL:{let Q;if(this.argBuf)Q=this.argBuf.bytes(),this.argBuf=void 0;else Q=$.subarray(this.as,Z-this.drop);this.dispatcher.push({kind:ip1.Kind.ERR,data:Q}),this.drop=0,this.as=Z+1,this.state=ip1.State.OP_START;break}default:if(this.argBuf)this.argBuf.write(Uint8Array.of(X))}break;case ip1.State.OP_P:switch(X){case ip1.cc.I:case ip1.cc.i:this.state=ip1.State.OP_PI;break;case ip1.cc.O:case ip1.cc.o:this.state=ip1.State.OP_PO;break;default:throw this.fail($.subarray(Z))}break;case ip1.State.OP_PO:switch(X){case ip1.cc.N:case ip1.cc.n:this.state=ip1.State.OP_PON;break;default:throw this.fail($.subarray(Z))}break;case ip1.State.OP_PON:switch(X){case ip1.cc.G:case ip1.cc.g:this.state=ip1.State.OP_PONG;break;default:throw this.fail($.subarray(Z))}break;case ip1.State.OP_PONG:switch(X){case ip1.cc.NL:this.dispatcher.push({kind:ip1.Kind.PONG}),this.drop=0,this.state=ip1.State.OP_START;break}break;case ip1.State.OP_PI:switch(X){case ip1.cc.N:case ip1.cc.n:this.state=ip1.State.OP_PIN;break;default:throw this.fail($.subarray(Z))}break;case ip1.State.OP_PIN:switch(X){case ip1.cc.G:case ip1.cc.g:this.state=ip1.State.OP_PING;break;default:throw this.fail($.subarray(Z))}break;case ip1.State.OP_PING:switch(X){case ip1.cc.NL:this.dispatcher.push({kind:ip1.Kind.PING}),this.drop=0,this.state=ip1.State.OP_START;break}break;case ip1.State.OP_I:switch(X){case ip1.cc.N:case ip1.cc.n:this.state=ip1.State.OP_IN;break;default:throw this.fail($.subarray(Z))}break;case ip1.State.OP_IN:switch(X){case ip1.cc.F:case ip1.cc.f:this.state=ip1.State.OP_INF;break;default:throw this.fail($.subarray(Z))}break;case ip1.State.OP_INF:switch(X){case ip1.cc.O:case ip1.cc.o:this.state=ip1.State.OP_INFO;break;default:throw this.fail($.subarray(Z))}break;case ip1.State.OP_INFO:switch(X){case ip1.cc.SPACE:case ip1.cc.TAB:this.state=ip1.State.OP_INFO_SPC;break;default:throw this.fail($.subarray(Z))}break;case ip1.State.OP_INFO_SPC:switch(X){case ip1.cc.SPACE:case ip1.cc.TAB:continue;default:this.state=ip1.State.INFO_ARG,this.as=Z}break;case ip1.State.INFO_ARG:switch(X){case ip1.cc.CR:this.drop=1;break;case ip1.cc.NL:{let Q;if(this.argBuf)Q=this.argBuf.bytes(),this.argBuf=void 0;else Q=$.subarray(this.as,Z-this.drop);this.dispatcher.push({kind:ip1.Kind.INFO,data:Q}),this.drop=0,this.as=Z+1,this.state=ip1.State.OP_START;break}default:if(this.argBuf)this.argBuf.writeByte(X)}break;default:throw this.fail($.subarray(Z))}}if((this.state===ip1.State.MSG_ARG||this.state===ip1.State.MINUS_ERR_ARG||this.state===ip1.State.INFO_ARG)&&!this.argBuf)this.argBuf=new cd0.DenoBuffer($.subarray(this.as,Z-this.drop));if(this.state===ip1.State.MSG_PAYLOAD&&!this.msgBuf){if(!this.argBuf)this.cloneMsgArg();this.msgBuf=new cd0.DenoBuffer($.subarray(this.as))}}cloneMsgArg(){let $=this.ma.subject.length,Z=this.ma.reply?this.ma.reply.length:0,X=new Uint8Array($+Z);if(X.set(this.ma.subject),this.ma.reply)X.set(this.ma.reply,$);if(this.argBuf=new cd0.DenoBuffer(X),this.ma.subject=X.subarray(0,$),this.ma.reply)this.ma.reply=X.subarray($)}processMsgArgs($){if(this.hdr>=0)return this.processHeaderMsgArgs($);let Z=[],X=-1;for(let Q=0;Q<$.length;Q++)switch($[Q]){case ip1.cc.SPACE:case ip1.cc.TAB:case ip1.cc.CR:case ip1.cc.NL:if(X>=0)Z.push($.subarray(X,Q)),X=-1;break;default:if(X<0)X=Q}if(X>=0)Z.push($.subarray(X));switch(Z.length){case 3:this.ma.subject=Z[0],this.ma.sid=this.protoParseInt(Z[1]),this.ma.reply=void 0,this.ma.size=this.protoParseInt(Z[2],Jb);break;case 4:this.ma.subject=Z[0],this.ma.sid=this.protoParseInt(Z[1]),this.ma.reply=Z[2],this.ma.size=this.protoParseInt(Z[3],Jb);break;default:throw this.fail($,"processMsgArgs Parse Error")}if(this.ma.sid<0)throw this.fail($,"processMsgArgs Bad or Missing Sid Error");if(this.ma.size<0)throw this.fail($,"processMsgArgs Bad or Missing Size Error")}fail($,Z=""){if(!Z)Z=`parse error [${this.state}]`;else Z=`${Z} [${this.state}]`;return Error(`${Z}: ${ld0.TD.decode($)}`)}processHeaderMsgArgs($){let Z=[],X=-1;for(let Q=0;Q<$.length;Q++)switch($[Q]){case ip1.cc.SPACE:case ip1.cc.TAB:case ip1.cc.CR:case ip1.cc.NL:if(X>=0)Z.push($.subarray(X,Q)),X=-1;break;default:if(X<0)X=Q}if(X>=0)Z.push($.subarray(X));switch(Z.length){case 4:this.ma.subject=Z[0],this.ma.sid=this.protoParseInt(Z[1]),this.ma.reply=void 0,this.ma.hdr=this.protoParseInt(Z[2],Jb),this.ma.size=this.protoParseInt(Z[3],Jb);break;case 5:this.ma.subject=Z[0],this.ma.sid=this.protoParseInt(Z[1]),this.ma.reply=Z[2],this.ma.hdr=this.protoParseInt(Z[3],Jb),this.ma.size=this.protoParseInt(Z[4],Jb);break;default:throw this.fail($,"processHeaderMsgArgs Parse Error")}if(this.ma.sid<0)throw this.fail($,"processHeaderMsgArgs Bad or Missing Sid Error");if(this.ma.hdr<0||this.ma.hdr>this.ma.size)throw this.fail($,"processHeaderMsgArgs Bad or Missing Header Size Error");if(this.ma.size<0)throw this.fail($,"processHeaderMsgArgs Bad or Missing Size Error")}protoParseInt($,Z){if($.length===0||$.length>15)return-1;let X=0;for(let Q=0;Q<$.length;Q++){if($[Q]<dp1||$[Q]>Im6)return-1;X=X*10+($[Q]-dp1)}return Z!==void 0&&X>Z?-1:X}}ip1.Parser=mp1;ip1.State={OP_START:0,OP_PLUS:1,OP_PLUS_O:2,OP_PLUS_OK:3,OP_MINUS:4,OP_MINUS_E:5,OP_MINUS_ER:6,OP_MINUS_ERR:7,OP_MINUS_ERR_SPC:8,MINUS_ERR_ARG:9,OP_M:10,OP_MS:11,OP_MSG:12,OP_MSG_SPC:13,MSG_ARG:14,MSG_PAYLOAD:15,MSG_END:16,OP_H:17,OP_P:18,OP_PI:19,OP_PIN:20,OP_PING:21,OP_PO:22,OP_PON:23,OP_PONG:24,OP_I:25,OP_IN:26,OP_INF:27,OP_INFO:28,OP_INFO_SPC:29,INFO_ARG:30};ip1.cc={CR:13,E:69,e:101,F:70,f:102,G:71,g:103,H:72,h:104,I:73,i:105,K:75,k:107,M:77,m:109,MINUS:45,N:78,n:110,NL:10,O:79,o:111,P:80,p:112,PLUS:43,R:82,r:114,S:83,s:115,SPACE:32,TAB:9}});var z90=_((pp1)=>{Object.defineProperty(pp1,"__esModule",{value:!0});pp1.MsgHdrsImpl=void 0;pp1.canonicalMIMEHeaderKey=id0;pp1.headers=km6;var np1=dY(),DJ=Rw(),E90=mY();function id0($){let N=!0,U=Array($.length);for(let F=0;F<$.length;F++){let w=$.charCodeAt(F);if(w===58||w<33||w>126)throw E90.InvalidArgumentError.format("header",`'${$[F]}' is not a valid character in a header name`);if(N&&97<=w&&w<=122)w-=32;else if(!N&&65<=w&&w<=90)w+=32;U[F]=w,N=w==45}return String.fromCharCode(...U)}function km6($=0,Z=""){if($===0&&Z!=="")throw E90.InvalidArgumentError.format("code","is required");else if($>0&&Z==="")throw E90.InvalidArgumentError.format("description","is required");return new Kb($,Z)}var md0="NATS/1.0";class Kb{_code;headers;_description;constructor($=0,Z=""){this._code=$,this._description=Z,this.headers=new Map}[Symbol.iterator](){return this.headers.entries()}size(){return this.headers.size}equals($){if($&&this.headers.size===$.headers.size&&this._code===$._code){for(let[Z,X]of this.headers){let Q=$.values(Z);if(X.length!==Q.length)return!1;let Y=[...X].sort(),G=[...Q].sort();for(let J=0;J<Y.length;J++)if(Y[J]!==G[J])return!1}return!0}return!1}static decode($){let Z=new Kb,Q=np1.TD.decode($).split(`\r
|
|
1337
1337
|
`),Y=Q[0];if(Y!==md0){let G=Y.replace(md0,"").trim();if(G.length>0){if(Z._code=parseInt(G,10),isNaN(Z._code))Z._code=0;let J=Z._code.toString();G=G.replace(J,""),Z._description=G.trim()}}if(Q.length>=1)Q.slice(1).map((G)=>{if(G){let J=G.indexOf(":");if(J>-1){let K=G.slice(0,J),W=G.slice(J+1).trim();Z.append(K,W)}}});return Z}toString(){if(this.headers.size===0&&this._code===0)return"";let $=md0;if(this._code>0&&this._description!=="")$+=` ${this._code} ${this._description}`;for(let[Z,X]of this.headers)for(let Q=0;Q<X.length;Q++)$=`${$}\r
|
|
1338
1338
|
${Z}: ${X[Q]}`;return`${$}\r
|
package/dist/server/server.js
CHANGED
|
@@ -2726,7 +2726,7 @@ Do NOT require review (requiresReview = false) when the changes are low-risk, su
|
|
|
2726
2726
|
|
|
2727
2727
|
When unsure between the two, lean toward NOT requiring review for small frontend-only diffs, and toward requiring it for anything backend or large.
|
|
2728
2728
|
|
|
2729
|
-
Respond with the structured verdict and a short reason.`,s_$;var $v$=B(()=>{k4();mw();G41();u86=Y41.object({requiresReview:Y41.boolean().describe("true if the changes should go through pull-request review"),reason:Y41.string().describe("One short sentence explaining the decision (max ~120 chars)")});s_$={requiresReview:!1,reason:""}});function m86($){if(!$||$.includes(".."))return!1;return d86.test($)}function Zv$($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!m86(Z))return null;let{__resolveType:X,...Q}=$;return{resolveType:Z,payload:Q}}function Xv$($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var d86;var Qv$=B(()=>{d86=/^[\w./@-]+$/});function J41($){let Z;try{Z=new URL($)}catch{return null}if(!Z.hostname.endsWith(".localhost"))return null;let X=Z.host;return Z.hostname="127.0.0.1",{url:Z.toString(),hostHeader:X}}function Gv$($,Z){let X=$?.githubRepo;if(!X?.owner||!X?.name)return null;if(!X.connectionId)return X;if(!Z.includes(X.connectionId))return null;return X}async function Yv$($,Z,X,Q){if(!Q.connectionId)throw new ng("Push requires a connected GitHub account. Connect mcp-github for this project and restart the sandbox.");let G=$.organization?.id;if(!G)throw new ng(d7);await Rw({ctx:$,connectionId:Q.connectionId,organizationId:G,forceRefresh:!0,onLegacyMintError:(N)=>{let F=N instanceof Error?N.message:d7;throw new ng(F)}});let{cloneUrl:Y,gitUserName:J,gitUserEmail:W}=await Iw(Q.connectionId,Q.owner,Q.name,$.db,$.vault),K=Pj0($),H=await Z.proxyDaemonRequest(X,"/_sandbox/config",{method:"PUT",headers:new Headers({"content-type":"application/json"}),body:JSON.stringify({git:{repository:{cloneUrl:Y},identity:{userName:J,userEmail:W}},...K?{operator:K}:{}})});if(!H.ok){let N=await lw(H,i86).catch(()=>H.statusText);throw Error(`Failed to refresh sandbox git credentials (${H.status}): ${N}`)}}var i86=10485760,ng;var Jv$=B(()=>{YN();a81();xi();rf();ng=class ng extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function p86($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!n86.test(Z))throw Error(`Invalid branch name: ${$}`)}function lC($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(o86)])}function dC($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}function W41($,Z){let Q=(Aj0.get($)??Promise.resolve()).catch(()=>{}).then(Z),G=Q.catch(()=>{});return Aj0.set($,G),G.finally(()=>{if(Aj0.get($)===G)Aj0.delete($)}),Q}async function fZ($,Z,X){let Q=dC($);if(Q instanceof Response)return Q;let{claimName:G,userId:Y,projectRef:J}=$.get("vmClaim"),W=X?.method??"POST",K=null,H=new Headers;if(X?.jsonBody!==void 0)K=X.jsonBody,H.set("content-type","application/json");else if(X?.forwardJsonBody)K=await $.req.text(),H.set("content-type","application/json");let N=X?.signal,F={method:W,headers:H,body:K,...N?{signal:N}:{}},U=async()=>{let w=await Q.proxyDaemonRequest(G,Z,F);if(X?.map404to410&&w.status===404){try{await w.body?.cancel()}catch{}if(await Q.adoptLiveClaim?.({userId:Y,projectRef:J},G))w=await Q.proxyDaemonRequest(G,Z,F);if(w.status===404){try{await w.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",...cG}})}}let O=await w.text(),D=X?.redactRepoDirUnlessDesktop&&Q.kind!=="user-desktop"?a86(O):O,L=w.headers.get("content-type")??"application/json";return new Response(D,{status:w.status,headers:{"content-type":L,...cG}})};try{if(N){let w=U();return w.catch(()=>{}),await Promise.race([w,new Promise((D,L)=>{if(N.aborted)return L(N.reason);N.addEventListener("abort",()=>L(N.reason),{once:!0})})])}return await U()}catch(w){let O=w instanceof Error?w.message:String(w);return $.json({error:`Daemon unreachable: ${O}`},502)}}function a86($){try{let Z=JSON.parse($);if(Z&&typeof Z==="object"&&!Array.isArray(Z)&&"repoDir"in Z)return JSON.stringify({...Z,repoDir:null})}catch{}return $}async function Tj0($,Z,X,Q="GET",G){let Y=await $.proxyDaemonRequest(Z,X,{method:Q,headers:new Headers,body:null});if(Y.status===404&&G){try{await Y.body?.cancel()}catch{}if(await $.adoptLiveClaim?.(G,Z))Y=await $.proxyDaemonRequest(Z,X,{method:Q,headers:new Headers,body:null})}if(Y.status===404){try{await Y.body?.cancel()}catch{}throw Error("SANDBOX_GONE")}let J=await Y.text();if(!Y.ok){let W=`Daemon error (${Y.status})`;try{W=JSON.parse(J).error??W}catch{}throw Error(W)}return JSON.parse(J)}function s86($){return Hv$.includes($)}var n86,Wv$=524288,t86=65536,o86=1e4,Kv$=2000,r86,Aj0,cG,Hv$,Nv$=()=>{let $=new B1;return $.use("/:virtualMcpId/:branch/*",r86),$.post("/:virtualMcpId/:branch/write",(Z)=>fZ(Z,"/_sandbox/write",{forwardJsonBody:!0,signal:lC(Z)})),$.post("/:virtualMcpId/:branch/unlink",(Z)=>fZ(Z,"/_sandbox/unlink",{forwardJsonBody:!0,signal:lC(Z)})),$.post("/:virtualMcpId/:branch/mkdir",(Z)=>fZ(Z,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:lC(Z)})),$.post("/:virtualMcpId/:branch/rename",(Z)=>fZ(Z,"/_sandbox/rename",{forwardJsonBody:!0,signal:lC(Z)})),$.post("/:virtualMcpId/:branch/read",(Z)=>fZ(Z,"/_sandbox/read",{forwardJsonBody:!0,signal:lC(Z)})),$.post("/:virtualMcpId/:branch/glob",(Z)=>fZ(Z,"/_sandbox/glob",{forwardJsonBody:!0,signal:lC(Z)})),$.post("/:virtualMcpId/:branch/grep",(Z)=>fZ(Z,"/_sandbox/grep",{forwardJsonBody:!0,signal:lC(Z)})),$.post("/:virtualMcpId/:branch/exec/:script",async(Z)=>{let X=Z.req.param("script");if(!X)return Z.json({error:"missing script name"},400);return fZ(Z,`/_sandbox/exec/${encodeURIComponent(X)}`)}),$.post("/:virtualMcpId/:branch/exec/:script/kill",async(Z)=>{let X=Z.req.param("script");if(!X)return Z.json({error:"missing script name"},400);return fZ(Z,`/_sandbox/exec/${encodeURIComponent(X)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(Z)=>fZ(Z,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDirUnlessDesktop:!0})),$.put("/:virtualMcpId/:branch/config",(Z)=>fZ(Z,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(Z)=>{let X=Z.req.param("step");if(!X||!s86(X))return Z.json({error:`step must be one of: ${Hv$.join(", ")}`},400);if(X==="start"){let Q=Z.get("vmClaim");if(Q.runner){let G=r(Z.var.studioContext),Y=wx(Q.virtualMcpMetadata);try{await eF0({ctx:Z.var.studioContext,runner:Q.runner,handle:Q.claimName,orgId:G.id,userId:Q.callerUserId,entries:Y})}catch(J){let W=J instanceof Error?J.message:String(J);return Z.json({error:`Failed to push env to daemon: ${W}`},502)}}}return fZ(Z,`/_sandbox/setup/${X}`,{signal:Z.req.raw.signal,map404to410:!0})}),$.get("/:virtualMcpId/:branch/events",(Z)=>{let X=Z.get("vmClaim");if(!X.runner)return QF(Z,async(Q)=>{await Q.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:"No sandbox runner configured on this studio instance."})})});return n_$(Z,{ctx:Z.var.studioContext,claimName:X.claimName,runner:X.runner,virtualMcpId:X.virtualMcpId,branch:X.branch,userId:X.userId,projectRef:X.projectRef,virtualMcpMetadata:X.virtualMcpMetadata})}),$.get("/:virtualMcpId/:branch/git/status",(Z)=>fZ(Z,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([Z.req.raw.signal,AbortSignal.timeout(Kv$)])})),$.post("/:virtualMcpId/:branch/git/status",(Z)=>fZ(Z,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([Z.req.raw.signal,AbortSignal.timeout(Kv$)])})),$.post("/:virtualMcpId/:branch/git/diff",(Z)=>fZ(Z,"/_sandbox/git/diff",{forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/git/publish",async(Z)=>{let X=dC(Z);if(X instanceof Response)return X;let{claimName:Q,virtualMcpMetadata:G,connectionIds:Y}=Z.get("vmClaim"),J=Z.var.studioContext;return W41(Q,async()=>{try{await s81(J,X,Q);let W=Gv$(G,Y);if(W)await Yv$(J,X,Q,W)}catch(W){if(W instanceof ng)return Z.json({error:W.message},403,cG);let K=W instanceof Error?W.message:String(W);return Z.json({error:K},502,cG)}return fZ(Z,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/discard",(Z)=>{let{claimName:X}=Z.get("vmClaim");return W41(X,()=>fZ(Z,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0}))}),$.post("/:virtualMcpId/:branch/git/rebase",async(Z)=>{let X=dC(Z);if(X instanceof Response)return X;let{claimName:Q}=Z.get("vmClaim"),G=Z.var.studioContext;return W41(Q,async()=>{try{await s81(G,X,Q)}catch(Y){let J=Y instanceof Error?Y.message:String(Y);return Z.json({error:J},502,cG)}return fZ(Z,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",HZ({maxSize:Wv$,onError:(Z)=>Z.json({error:"Payload too large"},413,cG)}),async(Z)=>{let X=dC(Z);if(X instanceof Response)return X;let{claimName:Q,userId:G,projectRef:Y}=Z.get("vmClaim"),J=Z.var.studioContext;try{let W=await Z.req.json().catch(()=>({})),K=W.status,H=W.diff,N=H!=null&&typeof H.diffs==="object"&&H.diffs!==null,[F,U]=Z41(K)&&N?[K,H]:await Promise.all([Tj0(X,Q,"/_sandbox/git/status","GET",{userId:G,projectRef:Y}),Tj0(X,Q,"/_sandbox/git/diff","GET",{userId:G,projectRef:Y})]),w=await a_$(J,F,U);return Z.json(w,200,cG)}catch(W){let K=W instanceof Error?W.message:String(W);if(K==="SANDBOX_GONE")return Z.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,cG);return Z.json({error:K},502,cG)}}),$.post("/:virtualMcpId/:branch/git/judge-review",HZ({maxSize:Wv$,onError:(Z)=>Z.json({error:"Payload too large"},413,cG)}),async(Z)=>{let X=dC(Z);if(X instanceof Response)return X;let{claimName:Q,userId:G,projectRef:Y}=Z.get("vmClaim"),J=Z.var.studioContext;try{let W=await Z.req.json().catch(()=>({})),K=W.status,H=W.diff,N=H!=null&&typeof H.diffs==="object"&&H.diffs!==null,[F,U]=Z41(K)&&N?[K,H]:await Promise.all([Tj0(X,Q,"/_sandbox/git/status","GET",{userId:G,projectRef:Y}),Tj0(X,Q,"/_sandbox/git/diff","GET",{userId:G,projectRef:Y})]),w=await e_$(J,F,U,typeof W.language==="string"?W.language:void 0);return Z.json(w,200,cG)}catch(W){let K=W instanceof Error?W.message:String(W);if(K==="SANDBOX_GONE")return Z.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,cG);return Z.json({error:K},502,cG)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(Z)=>{let X=dC(Z);if(X instanceof Response)return X;let{claimName:Q}=Z.get("vmClaim"),G=Z.req.query("path");if(!G||!G.startsWith("/")||G.startsWith("//")||G.includes("..")||G.includes("\\"))return Z.json({error:"Path not allowed"},403);let Y;try{Y=await X.getPreviewUrl(Q)}catch{return Z.json({error:"Preview not available"},502)}if(!Y)return Z.json({error:"Preview not available"},502);let J=Y.replace(/\/+$/,""),W=J41(`${J}${G}`),K;try{K=await fetch(W?.url??`${J}${G}`,{...W?{headers:{host:W.hostHeader}}:{}})}catch{return Z.json({error:"Preview unreachable"},502)}let H;try{H=await K.text()}catch{return Z.json({error:"Preview unreachable"},502)}return new Response(H,{status:K.status,headers:{"content-type":K.headers.get("content-type")??"application/json"}})}),$.post("/:virtualMcpId/:branch/preview-invoke",HZ({maxSize:t86,onError:(Z)=>Z.json({error:"Payload too large"},413)}),async(Z)=>{let X=dC(Z);if(X instanceof Response)return X;let{claimName:Q}=Z.get("vmClaim"),G;try{G=await X.getPreviewUrl(Q)}catch{return Z.json({error:"Preview not available"},502)}if(!G)return Z.json({error:"Preview not available"},502);let Y;try{Y=await Z.req.json()}catch{return Z.json({error:"Invalid JSON body"},400)}if(!Y||typeof Y!=="object"||Array.isArray(Y))return Z.json({error:"Invalid JSON body"},400);let J=Zv$(Y);if(!J)return Z.json({error:"Invalid or missing __resolveType"},400);let W=Xv$(G,J.resolveType),K=J41(W),H;try{H=await fetch(K?.url??W,{method:"POST",headers:{"content-type":"application/json",...K?{host:K.hostHeader}:{}},body:JSON.stringify(J.payload),signal:AbortSignal.timeout(30000)})}catch{return Z.json({error:"Preview unreachable"},502)}let N;try{N=await H.text()}catch{return Z.json({error:"Preview unreachable"},502)}return new Response(N,{status:H.status,headers:{"content-type":H.headers.get("content-type")??"application/json"}})}),$};var Fv$=B(()=>{y8();mO();ig();l_$();GN();m_$();j3();gw();i_$();p_$();vd0();bi();G41();$v$();Qv$();Jv$();n86=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;r86=c_$(async($,Z)=>{let X=$.var.studioContext;try{Z0(X)}catch{return $.json({error:"Unauthorized"},401)}let Q=W1(X);if(!Q)return $.json({error:"Unauthorized"},401);let G;try{G=r(X)}catch{return $.json({error:"Organization scope required"},403)}let Y=$.req.param("virtualMcpId"),J=$.req.param("branch");if(!Y||!J)return $.json({error:"virtualMcpId and branch are required"},400);try{p86(J)}catch(w){let O=w instanceof Error?w.message:String(w);return $.json({error:O},400)}let W=await X.storage.virtualMcps.findById(Y);if(!W||W.organization_id!==G.id)return $.json({error:"Virtual MCP not found"},404);let K=Zi({orgId:G.id,virtualMcpId:Y,branch:J}),H=await ON(X,J,Q),N=d_$({userId:H,projectRef:K}),F=W.metadata??null,U;try{U=(await uX(X,{userId:H,branch:J,virtualMcpMetadata:F})).provider}catch{U=null}if(!U)return $.json({error:"No sandbox runner found"},404);return $.set("vmClaim",{claimName:N,callerUserId:Q,runner:U,virtualMcpId:Y,branch:J,userId:H,projectRef:K,virtualMcpMetadata:F,connectionIds:W.connections?.map((w)=>w.connection_id)??[]}),Z()});Aj0=new Map;cG={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};Hv$=["clone","install","start"]});var Uv$=($)=>{let Z=new B1;if(Z.use("*",vC),Z.route("/",gE0()),Z.route("/",IS$()),Z.route("/",k_$()),Z.route("/",I_$()),Z.route("/",Ej0()),Z.route("/tools",f_$()),Z.route("/",__$()),Z.route("/",W_$({kvStorage:$.kvStorage})),Z.route("/",Y_$()),Z.route("/fs",E_$({getConnection:$.getNatsConnection})),Z.route("/sandbox",Nv$()),Z.route("/",A_$()),Z.route("/deco-sites",uE0()),Z.route("/sso",_E0()),Z.route("/",jj0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",LS$()),$.mountDevAssets)Z.route("/dev-assets",cE0({orgFromPath:!0}));return Z.use("/mcp/:connectionId?",$.mcpAuth),Z.use("/mcp/:connectionId/ui-resource",$.mcpAuth),Z.use("/mcp/gateway/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/virtual-mcp/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/self",$.mcpAuth),Z.use("/mcp/task-run/:threadId",$.mcpAuth),Z.route("/",BM$()),Z.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",$.betterAuthProtectedResourceHandler),Z.get("/mcp/.well-known/oauth-protected-resource",$.betterAuthProtectedResourceHandler),Z.route("/mcp/task-run",z_$()),Z.route("/mcp",ZO0()),Z.route("/mcp/self",Lj0()),Z.route("/mcp",GO0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var wv$=B(()=>{y8();E$1();ES$();T$1();lE0();Fo();D$1();J_$();K_$();j_$();Tn();K$1();YO0();m81();P_$();T_$();q_$();S_$();v_$();n81();x_$();p81();XO0();Fv$()});function $46($){return $.filter((Z)=>Z.vendors?.alias).map((Z)=>({name:Z.name,title:Z.title,description:Z.description,logo:Z.logo,category:Z.category,vendor:{alias:Z.vendors.alias,url:Z.vendors.url}}))}async function Z46($,Z){let X=await fetch(`${$}/rest/v1/apps?select=name,title,description,logo,category,vendors(alias,url)`,{headers:{apikey:Z,Authorization:`Bearer ${Z}`,Accept:"application/json"},signal:AbortSignal.timeout(e86)});if(!X.ok){let Q=await X.text().catch(()=>X.statusText);throw console.error(`[deco-apps] Supabase error (${X.status}): ${Q.slice(0,200)}`),Error(`External service error (${X.status})`)}return await X.json()}var e86=1e4,X46=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},Ov$=()=>{let $=new B1;return $.use("*",X46),$.get("/",async(Z)=>{let X=c0(),Q=X.decoSupabaseUrl,G=X.decoSupabaseServiceKey;if(!Q||!G)return Z.json({apps:[]});try{let Y=await Z46(Q,G);return Z.json({apps:$46(Y)})}catch(Y){return console.error("[deco-apps] GET error:",Y),Z.json({error:"Failed to fetch apps"},502)}}),$};var Bv$=B(()=>{y8();S$()});import{z as M1}from"zod";function cK($,Z="invalid_request_error",X=null,Q=null){return{error:{message:$,type:Z,param:X,code:Q}}}function U46($){if(!$)return null;let Z=$.indexOf(":");if(Z===-1)return{credentialId:null,modelId:$};let X=$.substring(0,Z),Q=$.substring(Z+1);if(!X||!Q)return null;return{credentialId:X,modelId:Q}}function w46($,Z,X){try{return JSON.parse($)}catch{throw new Ev$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function O46($){let Z={};for(let X of $)if(X.role==="assistant"&&X.tool_calls)for(let Q of X.tool_calls)Z[Q.id]=Q.function.name;return $.map((X)=>{switch(X.role){case"system":return{role:"system",content:X.content};case"user":if(typeof X.content==="string")return{role:"user",content:X.content};return{role:"user",content:X.content.map((G)=>{if(G.type==="text")return{type:"text",text:G.text};return{type:"image",image:G.image_url.url}})};case"assistant":if(X.tool_calls&&X.tool_calls.length>0)return{role:"assistant",content:X.tool_calls.map((G)=>({type:"tool-call",toolCallId:G.id,toolName:G.function.name,input:w46(G.function.arguments,G.id,G.function.name)}))};return{role:"assistant",content:X.content??""};case"tool":let Q=Z[X.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:X.tool_call_id,toolName:Q,output:{type:"text",value:X.content}}]}}})}function B46($){let Z=$.map((X)=>{let Q=X.function.parameters?PG(X.function.parameters):PG({type:"object",properties:{}});return[X.function.name,_$({description:X.function.description,inputSchema:Q})]});return Object.fromEntries(Z)}function D46($){if(!$)return;return{openai:{response_format:$}}}function L46(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function Dv$($,Z,X,Q,G,Y){let J={model:$,messages:Z,tools:X,temperature:Q.temperature,maxTokens:Q.max_tokens,topP:Q.top_p,frequencyPenalty:Q.frequency_penalty,presencePenalty:Q.presence_penalty,stopSequences:Q.stop?Array.isArray(Q.stop)?Q.stop:[Q.stop]:void 0,abortSignal:Y};return G?{...J,providerOptions:G}:J}function Lv$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var Q46=256,G46,Y46,J46,W46,K46,H46,N46,F46,Ev$,jv$,zv$;var Pv$=B(()=>{k4();y8();ig();xN();G46=M1.object({type:M1.literal("function"),function:M1.object({name:M1.string(),description:M1.string().optional(),parameters:M1.record(M1.string(),M1.unknown()).optional()})}),Y46=M1.object({id:M1.string(),type:M1.literal("function"),function:M1.object({name:M1.string(),arguments:M1.string()})}),J46=M1.discriminatedUnion("role",[M1.object({role:M1.literal("system"),content:M1.string(),name:M1.string().optional()}),M1.object({role:M1.literal("user"),content:M1.union([M1.string(),M1.array(M1.union([M1.object({type:M1.literal("text"),text:M1.string()}),M1.object({type:M1.literal("image_url"),image_url:M1.object({url:M1.string(),detail:M1.string().optional()})})]))]),name:M1.string().optional()}),M1.object({role:M1.literal("assistant"),content:M1.string().nullable().optional(),name:M1.string().optional(),tool_calls:M1.array(Y46).optional()}),M1.object({role:M1.literal("tool"),content:M1.string(),tool_call_id:M1.string()})]),W46=M1.object({type:M1.literal("text")}),K46=M1.object({type:M1.literal("json_object")}),H46=M1.object({type:M1.literal("json_schema"),json_schema:M1.object({name:M1.string(),description:M1.string().optional(),schema:M1.record(M1.string(),M1.unknown()),strict:M1.boolean().optional()})}),N46=M1.union([W46,K46,H46]),F46=M1.object({model:M1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:M1.array(J46),stream:M1.boolean().optional().default(!1),temperature:M1.number().min(0).max(2).optional(),max_tokens:M1.number().positive().optional(),top_p:M1.number().min(0).max(1).optional(),frequency_penalty:M1.number().min(-2).max(2).optional(),presence_penalty:M1.number().min(-2).max(2).optional(),stop:M1.union([M1.string(),M1.array(M1.string())]).optional(),tools:M1.array(G46).optional(),tool_choice:M1.union([M1.literal("auto"),M1.literal("none"),M1.literal("required"),M1.object({type:M1.literal("function"),function:M1.object({name:M1.string()})})]).optional(),response_format:N46.optional(),user:M1.string().optional()});Ev$=class Ev$ extends Error{constructor($){super($);this.name="MessageConversionError"}};jv$=new B1;jv$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(cK("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(cK("Organization context is required. Ensure your API key has organization metadata.","invalid_request_error","organization"),400);if((Z.organization.slug??Z.organization.id)!==X)return $.json(cK("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Q=await $.req.json(),G=F46.safeParse(Q);if(!G.success){let L=G.error.issues[0]??{message:"Invalid request",path:[]};return $.json(cK(`Invalid request: ${L.message}`,"invalid_request_error",L.path.length>0?L.path.join("."):null),400)}let Y=G.data,J=U46(Y.model);if(!J)return $.json(cK("Invalid model format. Expected 'model_id' or 'credential_id:model_id' (e.g., 'claude-sonnet-4-6' or 'key_abc123:claude-sonnet-4-6')","invalid_request_error","model"),400);let{credentialId:W}=J,{modelId:K}=J;if(!W){let E=(await Z.storage.aiProviderKeys.list({organizationId:Z.organization.id})).find((j)=>QD(j.providerId));if(!E)return $.json(cK("No AI provider credentials configured for this organization. Add a credential in settings or specify one explicitly via 'credential_id:model_id'.","invalid_request_error","model"),400);W=E.id}let H;try{H=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(cK(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let N=H.aiSdk.languageModel(K),F=O46(Y.messages),U=Y.tools?B46(Y.tools):void 0,w=D46(Y.response_format),O=L46(),D=Math.floor(Date.now()/1000);if(Y.stream)return QF($,async(L)=>{let E=Dv$(N,F,U,Y,w,$.req.raw.signal);try{let j=Aw(E),z=!1,A=0,P="",M=async()=>{if(P.length===0)return;let k=P;P="",await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Y.model,choices:[{index:0,delta:{content:k},finish_reason:null}]})})};for await(let k of j.fullStream){if(!z&&(k.type==="text-delta"||k.type==="tool-call"))await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Y.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(k.type==="text-delta"){if(P+=k.text,P.length>=Q46)await M()}else if(k.type==="tool-call"){await M();let q=A++;await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Y.model,choices:[{index:0,delta:{tool_calls:[{index:q,id:k.toolCallId,type:"function",function:{name:k.toolName,arguments:JSON.stringify(k.input)}}]},finish_reason:null}]})})}else if(k.type==="finish")await M(),await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Y.model,choices:[{index:0,delta:{},finish_reason:Lv$(k.finishReason)}],usage:k.totalUsage?{prompt_tokens:k.totalUsage.inputTokens??0,completion_tokens:k.totalUsage.outputTokens??0,total_tokens:k.totalUsage.totalTokens??0}:void 0})})}await M(),await L.writeSSE({data:"[DONE]"})}catch(j){let z=j;console.error("[openai-compat:stream] Error:",z.message),await L.writeSSE({data:JSON.stringify({error:{message:z.message,type:"server_error"}})})}});else{let L=Dv$(N,F,U,Y,w,$.req.raw.signal),E=await zw(L),j={role:"assistant",content:E.text||null};if(E.toolCalls&&E.toolCalls.length>0)j.tool_calls=E.toolCalls.map((z)=>({id:z.toolCallId,type:"function",function:{name:z.toolName,arguments:JSON.stringify("input"in z?z.input:{})}})),j.content=null;return $.json({id:O,object:"chat.completion",created:D,model:Y.model,choices:[{index:0,message:j,finish_reason:Lv$(E.finishReason)}],usage:{prompt_tokens:E.usage?.inputTokens??0,completion_tokens:E.usage?.outputTokens??0,total_tokens:E.usage?.totalTokens??0}})}}catch(Q){let G=Q;if(G.name==="AbortError")return $.json(cK("Request aborted","invalid_request_error"),400);if(G.name==="MessageConversionError")return $.json(cK(G.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",G.message,G.stack),$.json(cK(G.message,"server_error"),500)}});zv$=jv$});var Tv$;var Av$=B(()=>{Tv$={name:"decocms",version:"4.204.16",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@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","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function z46(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??j46}}var Rv$,j46="https://ph.studio.decocms.com",Iv$;var qv$=B(()=>{y8();ux0();MV();jZ();S$();Q$1();Av$();Rv$=new B1;Rv$.get("/",($)=>{let Z={version:Tv$.version,theme:Yu1(),...pD().logo&&{logo:pD().logo},...UK()&&{internalUrl:bq1()},...c0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!c0().firecrawlApiKey,auth:fk$(),posthog:z46(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!UK()&&c0().sandboxProviderKind==="agent-sandbox"}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});Iv$=Rv$});function pg($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function K41($){return(pg($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function kv$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(pg($))}&sz=${Z}`}function Mv$($,Z){let X=$.trim();if(X.length<=Z)return X;let Q=X.slice(0,Z-1),G=Q.lastIndexOf(" ");return`${(G>Z*0.6?Q.slice(0,G):Q).trimEnd()}\u2026`}function Sv$($){let{brand:Z,domain:X,score:Q,verdict:G}=$,Y=typeof Q==="number"?`${Z} commerce report \u2014 ${Math.round(Q)}/100 \xB7 decocms`:`${Z} commerce report \xB7 decocms`,J=`See the full ${Z} scorecard \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,W=G?.trim()?Mv$(`${G.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):Mv$(`How does ${X} really perform? ${J}`,200);return{title:Y,description:W}}import{z as l0}from"zod";var mC,P46,A46,T46,R46,Vv$;var Cv$=B(()=>{mC=l0.enum(["good","bad","neutral"]),P46=l0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((X)=>X!==null&&typeof X!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},l0.object({kind:l0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:l0.coerce.string().optional(),tone:mC.optional(),muted:l0.boolean().optional(),delta:l0.coerce.string().optional(),deltaDir:l0.enum(["up","down","neutral"]).optional(),points:l0.array(l0.coerce.number()).optional(),label:l0.coerce.string().optional()}).transform(($)=>{if($.kind==="badge"&&$.label==null)$.label=$.value??"";if($.kind==="score"){let Z=Number($.value);if(Number.isNaN(Z))return{...$,kind:"text"}}return $})),A46=l0.preprocess(($)=>{let Z=$;if(Z&&typeof Z==="object"&&!Array.isArray(Z)&&Array.isArray(Z.cells))Z=Z.cells;if(Array.isArray(Z)&&Z.length===1&&Array.isArray(Z[0]))Z=Z[0];if(Array.isArray(Z))return Z;if(Z&&typeof Z==="object")return Object.values(Z);return Z},l0.array(P46)),T46={key:l0.coerce.string(),title:l0.coerce.string(),eyebrow:l0.coerce.string().optional(),headline:l0.coerce.string(),annotation:l0.coerce.string().optional(),methodology:l0.coerce.string().optional(),sources:l0.array(l0.object({name:l0.coerce.string(),logoUrl:l0.coerce.string()})).optional()},R46=l0.discriminatedUnion("template",[l0.object({template:l0.literal("cover"),score:l0.object({value:l0.coerce.number(),max:l0.coerce.number().optional(),grade:l0.coerce.string().optional(),label:l0.coerce.string().optional()}).optional(),brandImage:l0.coerce.string().optional(),screenshot:l0.coerce.string().optional(),mobileScreenshot:l0.coerce.string().optional()}),l0.object({template:l0.literal("cta"),ctaUrl:l0.coerce.string().optional(),ctaLabel:l0.coerce.string().optional(),bullets:l0.array(l0.coerce.string()).optional()}),l0.object({template:l0.literal("series"),points:l0.array(l0.coerce.number()).min(2),xLabels:l0.array(l0.coerce.string()).min(1),unit:l0.coerce.string().optional(),callout:l0.object({index:l0.coerce.number(),value:l0.coerce.string(),tone:mC.optional()})}),l0.object({template:l0.literal("threshold"),value:l0.coerce.string().default(""),metricLabel:l0.coerce.string().optional(),ratio:l0.coerce.number(),thresholdRatio:l0.coerce.number().optional(),thresholdLabel:l0.coerce.string().default(""),tone:mC.optional()}),l0.object({template:l0.literal("stats"),stats:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),tone:mC.optional()})).min(1)}),l0.object({template:l0.literal("bars"),items:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),ratio:l0.coerce.number(),tone:mC.optional()})).min(1)}),l0.object({template:l0.literal("gauges"),gauges:l0.array(l0.object({label:l0.coerce.string(),value:l0.coerce.string(),status:l0.enum(["good","warn","bad"]).catch("warn"),caption:l0.coerce.string().optional(),ratio:l0.coerce.number().optional()})).min(1)}),l0.object({template:l0.literal("checklist"),checks:l0.array(l0.object({label:l0.coerce.string(),status:l0.enum(["pass","fail","warn"]).catch("fail"),value:l0.coerce.string().optional()})).min(1)}),l0.object({template:l0.literal("table"),columns:l0.array(l0.object({label:l0.coerce.string(),align:l0.enum(["left","right"]).optional()})).min(1),rows:l0.array(A46).min(1),highlightRow:l0.coerce.number().optional()}),l0.object({template:l0.literal("products"),products:l0.array(l0.object({name:l0.coerce.string(),price:l0.coerce.string().optional(),image:l0.coerce.string().optional(),url:l0.coerce.string().optional()})).min(1)}),l0.object({template:l0.literal("list"),entries:l0.array(l0.object({label:l0.coerce.string(),severity:l0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:l0.coerce.number().optional()}),l0.object({template:l0.literal("keywords"),volumeLabel:l0.coerce.string().optional(),keywords:l0.array(l0.object({term:l0.coerce.string(),volume:l0.coerce.string(),position:l0.coerce.number().catch(0)})).min(1)}),l0.object({template:l0.literal("competitor"),metricLabel:l0.coerce.string().optional(),competitors:l0.array(l0.object({name:l0.coerce.string(),value:l0.coerce.string(),tone:mC.optional(),isYou:l0.boolean().optional()})).min(1)}),l0.object({template:l0.literal("scorecard"),rivalLabel:l0.coerce.string().optional(),dimensions:l0.array(l0.object({label:l0.coerce.string(),you:l0.coerce.string(),rival:l0.coerce.string().optional(),rivalName:l0.coerce.string().optional(),tone:mC.optional()})).min(1)})]),Vv$=l0.object({...T46,template:R46})});function Rj0($){let Z=[],X=[...$.sections].sort((G,Y)=>G.position-Y.position).map((G)=>{let Y=Vv$.safeParse(G.props);if(Y.success)return Y.data;let J=Y.error.issues[0];return Z.push({section_type:G.section_type,position:G.position,reason:J?`${J.path.join(".")||"(root)"}: ${J.message}`:"contract violation"}),null}).filter((G)=>G!==null),Q=X.filter((G)=>G.template.template!=="cover"&&G.template.template!=="cta").map((G)=>({key:G.key,title:G.title}));return{deck:{meta:{...$.meta,scores:$.summary?.scores,scannedAt:$.scanned_at,toc:Q},slides:X},drops:Z}}var H41=B(()=>{Cv$()});import{join as _v$}from"path";async function q46($){try{let Z=await fetch(`${xW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(I46)});if(!Z.ok)return null;let X=await Z.json(),{deck:Q}=Rj0(X);if(!Q.slides.length)return null;let G=Q.slides.find((W)=>W.template.template==="cover"),Y=G?.template,J=Y&&Y.template==="cover"?Y:void 0;return{brand:Q.meta.brand?.trim()||K41($),score:Q.meta.scores?.cover??J?.score?.value,verdict:G?.annotation?.trim()||G?.headline?.trim()||void 0}}catch{return null}}function lG($){return $.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function M46($,Z){let X=pg($),Q=Z?.brand?.trim()||K41(X),G=kv$(X,128),J=`${(c0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=Sv$({brand:Q,domain:X,score:Z?.score,verdict:Z?.verdict}),H=`${J}/og.png`,N=`${Q} commerce report by decocms`;return[`<title>${lG(W)}</title>`,`<meta name="description" content="${lG(K)}" />`,'<meta name="robots" content="noindex, follow" />','<meta property="og:type" content="website" />','<meta property="og:site_name" content="decocms" />',`<meta property="og:title" content="${lG(W)}" />`,`<meta property="og:description" content="${lG(K)}" />`,`<meta property="og:url" content="${lG(J)}" />`,`<meta property="og:image" content="${lG(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${lG(N)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${lG(W)}" />`,`<meta name="twitter:description" content="${lG(K)}" />`,`<meta name="twitter:image" content="${lG(H)}" />`,`<meta name="twitter:image:alt" content="${lG(N)}" />`,`<link rel="canonical" href="${lG(J)}" />`,`<link rel="icon" href="${lG(G)}" sizes="any" />`].join(`
|
|
2729
|
+
Respond with the structured verdict and a short reason.`,s_$;var $v$=B(()=>{k4();mw();G41();u86=Y41.object({requiresReview:Y41.boolean().describe("true if the changes should go through pull-request review"),reason:Y41.string().describe("One short sentence explaining the decision (max ~120 chars)")});s_$={requiresReview:!1,reason:""}});function m86($){if(!$||$.includes(".."))return!1;return d86.test($)}function Zv$($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!m86(Z))return null;let{__resolveType:X,...Q}=$;return{resolveType:Z,payload:Q}}function Xv$($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var d86;var Qv$=B(()=>{d86=/^[\w./@-]+$/});function J41($){let Z;try{Z=new URL($)}catch{return null}if(!Z.hostname.endsWith(".localhost"))return null;let X=Z.host;return Z.hostname="127.0.0.1",{url:Z.toString(),hostHeader:X}}function Gv$($,Z){let X=$?.githubRepo;if(!X?.owner||!X?.name)return null;if(!X.connectionId)return X;if(!Z.includes(X.connectionId))return null;return X}async function Yv$($,Z,X,Q){if(!Q.connectionId)throw new ng("Push requires a connected GitHub account. Connect mcp-github for this project and restart the sandbox.");let G=$.organization?.id;if(!G)throw new ng(d7);await Rw({ctx:$,connectionId:Q.connectionId,organizationId:G,forceRefresh:!0,onLegacyMintError:(N)=>{let F=N instanceof Error?N.message:d7;throw new ng(F)}});let{cloneUrl:Y,gitUserName:J,gitUserEmail:W}=await Iw(Q.connectionId,Q.owner,Q.name,$.db,$.vault),K=Pj0($),H=await Z.proxyDaemonRequest(X,"/_sandbox/config",{method:"PUT",headers:new Headers({"content-type":"application/json"}),body:JSON.stringify({git:{repository:{cloneUrl:Y},identity:{userName:J,userEmail:W}},...K?{operator:K}:{}})});if(!H.ok){let N=await lw(H,i86).catch(()=>H.statusText);throw Error(`Failed to refresh sandbox git credentials (${H.status}): ${N}`)}}var i86=10485760,ng;var Jv$=B(()=>{YN();a81();xi();rf();ng=class ng extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function p86($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!n86.test(Z))throw Error(`Invalid branch name: ${$}`)}function lC($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(o86)])}function dC($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}function W41($,Z){let Q=(Aj0.get($)??Promise.resolve()).catch(()=>{}).then(Z),G=Q.catch(()=>{});return Aj0.set($,G),G.finally(()=>{if(Aj0.get($)===G)Aj0.delete($)}),Q}async function fZ($,Z,X){let Q=dC($);if(Q instanceof Response)return Q;let{claimName:G,userId:Y,projectRef:J}=$.get("vmClaim"),W=X?.method??"POST",K=null,H=new Headers;if(X?.jsonBody!==void 0)K=X.jsonBody,H.set("content-type","application/json");else if(X?.forwardJsonBody)K=await $.req.text(),H.set("content-type","application/json");let N=X?.signal,F={method:W,headers:H,body:K,...N?{signal:N}:{}},U=async()=>{let w=await Q.proxyDaemonRequest(G,Z,F);if(X?.map404to410&&w.status===404){try{await w.body?.cancel()}catch{}if(await Q.adoptLiveClaim?.({userId:Y,projectRef:J},G))w=await Q.proxyDaemonRequest(G,Z,F);if(w.status===404){try{await w.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",...cG}})}}let O=await w.text(),D=X?.redactRepoDirUnlessDesktop&&Q.kind!=="user-desktop"?a86(O):O,L=w.headers.get("content-type")??"application/json";return new Response(D,{status:w.status,headers:{"content-type":L,...cG}})};try{if(N){let w=U();return w.catch(()=>{}),await Promise.race([w,new Promise((D,L)=>{if(N.aborted)return L(N.reason);N.addEventListener("abort",()=>L(N.reason),{once:!0})})])}return await U()}catch(w){let O=w instanceof Error?w.message:String(w);return $.json({error:`Daemon unreachable: ${O}`},502)}}function a86($){try{let Z=JSON.parse($);if(Z&&typeof Z==="object"&&!Array.isArray(Z)&&"repoDir"in Z)return JSON.stringify({...Z,repoDir:null})}catch{}return $}async function Tj0($,Z,X,Q="GET",G){let Y=await $.proxyDaemonRequest(Z,X,{method:Q,headers:new Headers,body:null});if(Y.status===404&&G){try{await Y.body?.cancel()}catch{}if(await $.adoptLiveClaim?.(G,Z))Y=await $.proxyDaemonRequest(Z,X,{method:Q,headers:new Headers,body:null})}if(Y.status===404){try{await Y.body?.cancel()}catch{}throw Error("SANDBOX_GONE")}let J=await Y.text();if(!Y.ok){let W=`Daemon error (${Y.status})`;try{W=JSON.parse(J).error??W}catch{}throw Error(W)}return JSON.parse(J)}function s86($){return Hv$.includes($)}var n86,Wv$=524288,t86=65536,o86=1e4,Kv$=2000,r86,Aj0,cG,Hv$,Nv$=()=>{let $=new B1;return $.use("/:virtualMcpId/:branch/*",r86),$.post("/:virtualMcpId/:branch/write",(Z)=>fZ(Z,"/_sandbox/write",{forwardJsonBody:!0,signal:lC(Z)})),$.post("/:virtualMcpId/:branch/unlink",(Z)=>fZ(Z,"/_sandbox/unlink",{forwardJsonBody:!0,signal:lC(Z)})),$.post("/:virtualMcpId/:branch/mkdir",(Z)=>fZ(Z,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:lC(Z)})),$.post("/:virtualMcpId/:branch/rename",(Z)=>fZ(Z,"/_sandbox/rename",{forwardJsonBody:!0,signal:lC(Z)})),$.post("/:virtualMcpId/:branch/read",(Z)=>fZ(Z,"/_sandbox/read",{forwardJsonBody:!0,signal:lC(Z)})),$.post("/:virtualMcpId/:branch/glob",(Z)=>fZ(Z,"/_sandbox/glob",{forwardJsonBody:!0,signal:lC(Z)})),$.post("/:virtualMcpId/:branch/grep",(Z)=>fZ(Z,"/_sandbox/grep",{forwardJsonBody:!0,signal:lC(Z)})),$.post("/:virtualMcpId/:branch/exec/:script",async(Z)=>{let X=Z.req.param("script");if(!X)return Z.json({error:"missing script name"},400);return fZ(Z,`/_sandbox/exec/${encodeURIComponent(X)}`)}),$.post("/:virtualMcpId/:branch/exec/:script/kill",async(Z)=>{let X=Z.req.param("script");if(!X)return Z.json({error:"missing script name"},400);return fZ(Z,`/_sandbox/exec/${encodeURIComponent(X)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(Z)=>fZ(Z,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDirUnlessDesktop:!0})),$.put("/:virtualMcpId/:branch/config",(Z)=>fZ(Z,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(Z)=>{let X=Z.req.param("step");if(!X||!s86(X))return Z.json({error:`step must be one of: ${Hv$.join(", ")}`},400);if(X==="start"){let Q=Z.get("vmClaim");if(Q.runner){let G=r(Z.var.studioContext),Y=wx(Q.virtualMcpMetadata);try{await eF0({ctx:Z.var.studioContext,runner:Q.runner,handle:Q.claimName,orgId:G.id,userId:Q.callerUserId,entries:Y})}catch(J){let W=J instanceof Error?J.message:String(J);return Z.json({error:`Failed to push env to daemon: ${W}`},502)}}}return fZ(Z,`/_sandbox/setup/${X}`,{signal:Z.req.raw.signal,map404to410:!0})}),$.get("/:virtualMcpId/:branch/events",(Z)=>{let X=Z.get("vmClaim");if(!X.runner)return QF(Z,async(Q)=>{await Q.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:"No sandbox runner configured on this studio instance."})})});return n_$(Z,{ctx:Z.var.studioContext,claimName:X.claimName,runner:X.runner,virtualMcpId:X.virtualMcpId,branch:X.branch,userId:X.userId,projectRef:X.projectRef,virtualMcpMetadata:X.virtualMcpMetadata})}),$.get("/:virtualMcpId/:branch/git/status",(Z)=>fZ(Z,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([Z.req.raw.signal,AbortSignal.timeout(Kv$)])})),$.post("/:virtualMcpId/:branch/git/status",(Z)=>fZ(Z,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([Z.req.raw.signal,AbortSignal.timeout(Kv$)])})),$.post("/:virtualMcpId/:branch/git/diff",(Z)=>fZ(Z,"/_sandbox/git/diff",{forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/git/publish",async(Z)=>{let X=dC(Z);if(X instanceof Response)return X;let{claimName:Q,virtualMcpMetadata:G,connectionIds:Y}=Z.get("vmClaim"),J=Z.var.studioContext;return W41(Q,async()=>{try{await s81(J,X,Q);let W=Gv$(G,Y);if(W)await Yv$(J,X,Q,W)}catch(W){if(W instanceof ng)return Z.json({error:W.message},403,cG);let K=W instanceof Error?W.message:String(W);return Z.json({error:K},502,cG)}return fZ(Z,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/discard",(Z)=>{let{claimName:X}=Z.get("vmClaim");return W41(X,()=>fZ(Z,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0}))}),$.post("/:virtualMcpId/:branch/git/rebase",async(Z)=>{let X=dC(Z);if(X instanceof Response)return X;let{claimName:Q}=Z.get("vmClaim"),G=Z.var.studioContext;return W41(Q,async()=>{try{await s81(G,X,Q)}catch(Y){let J=Y instanceof Error?Y.message:String(Y);return Z.json({error:J},502,cG)}return fZ(Z,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",HZ({maxSize:Wv$,onError:(Z)=>Z.json({error:"Payload too large"},413,cG)}),async(Z)=>{let X=dC(Z);if(X instanceof Response)return X;let{claimName:Q,userId:G,projectRef:Y}=Z.get("vmClaim"),J=Z.var.studioContext;try{let W=await Z.req.json().catch(()=>({})),K=W.status,H=W.diff,N=H!=null&&typeof H.diffs==="object"&&H.diffs!==null,[F,U]=Z41(K)&&N?[K,H]:await Promise.all([Tj0(X,Q,"/_sandbox/git/status","GET",{userId:G,projectRef:Y}),Tj0(X,Q,"/_sandbox/git/diff","GET",{userId:G,projectRef:Y})]),w=await a_$(J,F,U);return Z.json(w,200,cG)}catch(W){let K=W instanceof Error?W.message:String(W);if(K==="SANDBOX_GONE")return Z.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,cG);return Z.json({error:K},502,cG)}}),$.post("/:virtualMcpId/:branch/git/judge-review",HZ({maxSize:Wv$,onError:(Z)=>Z.json({error:"Payload too large"},413,cG)}),async(Z)=>{let X=dC(Z);if(X instanceof Response)return X;let{claimName:Q,userId:G,projectRef:Y}=Z.get("vmClaim"),J=Z.var.studioContext;try{let W=await Z.req.json().catch(()=>({})),K=W.status,H=W.diff,N=H!=null&&typeof H.diffs==="object"&&H.diffs!==null,[F,U]=Z41(K)&&N?[K,H]:await Promise.all([Tj0(X,Q,"/_sandbox/git/status","GET",{userId:G,projectRef:Y}),Tj0(X,Q,"/_sandbox/git/diff","GET",{userId:G,projectRef:Y})]),w=await e_$(J,F,U,typeof W.language==="string"?W.language:void 0);return Z.json(w,200,cG)}catch(W){let K=W instanceof Error?W.message:String(W);if(K==="SANDBOX_GONE")return Z.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,cG);return Z.json({error:K},502,cG)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(Z)=>{let X=dC(Z);if(X instanceof Response)return X;let{claimName:Q}=Z.get("vmClaim"),G=Z.req.query("path");if(!G||!G.startsWith("/")||G.startsWith("//")||G.includes("..")||G.includes("\\"))return Z.json({error:"Path not allowed"},403);let Y;try{Y=await X.getPreviewUrl(Q)}catch{return Z.json({error:"Preview not available"},502)}if(!Y)return Z.json({error:"Preview not available"},502);let J=Y.replace(/\/+$/,""),W=J41(`${J}${G}`),K;try{K=await fetch(W?.url??`${J}${G}`,{...W?{headers:{host:W.hostHeader}}:{}})}catch{return Z.json({error:"Preview unreachable"},502)}let H;try{H=await K.text()}catch{return Z.json({error:"Preview unreachable"},502)}return new Response(H,{status:K.status,headers:{"content-type":K.headers.get("content-type")??"application/json"}})}),$.post("/:virtualMcpId/:branch/preview-invoke",HZ({maxSize:t86,onError:(Z)=>Z.json({error:"Payload too large"},413)}),async(Z)=>{let X=dC(Z);if(X instanceof Response)return X;let{claimName:Q}=Z.get("vmClaim"),G;try{G=await X.getPreviewUrl(Q)}catch{return Z.json({error:"Preview not available"},502)}if(!G)return Z.json({error:"Preview not available"},502);let Y;try{Y=await Z.req.json()}catch{return Z.json({error:"Invalid JSON body"},400)}if(!Y||typeof Y!=="object"||Array.isArray(Y))return Z.json({error:"Invalid JSON body"},400);let J=Zv$(Y);if(!J)return Z.json({error:"Invalid or missing __resolveType"},400);let W=Xv$(G,J.resolveType),K=J41(W),H;try{H=await fetch(K?.url??W,{method:"POST",headers:{"content-type":"application/json",...K?{host:K.hostHeader}:{}},body:JSON.stringify(J.payload),signal:AbortSignal.timeout(30000)})}catch{return Z.json({error:"Preview unreachable"},502)}let N;try{N=await H.text()}catch{return Z.json({error:"Preview unreachable"},502)}return new Response(N,{status:H.status,headers:{"content-type":H.headers.get("content-type")??"application/json"}})}),$};var Fv$=B(()=>{y8();mO();ig();l_$();GN();m_$();j3();gw();i_$();p_$();vd0();bi();G41();$v$();Qv$();Jv$();n86=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;r86=c_$(async($,Z)=>{let X=$.var.studioContext;try{Z0(X)}catch{return $.json({error:"Unauthorized"},401)}let Q=W1(X);if(!Q)return $.json({error:"Unauthorized"},401);let G;try{G=r(X)}catch{return $.json({error:"Organization scope required"},403)}let Y=$.req.param("virtualMcpId"),J=$.req.param("branch");if(!Y||!J)return $.json({error:"virtualMcpId and branch are required"},400);try{p86(J)}catch(w){let O=w instanceof Error?w.message:String(w);return $.json({error:O},400)}let W=await X.storage.virtualMcps.findById(Y);if(!W||W.organization_id!==G.id)return $.json({error:"Virtual MCP not found"},404);let K=Zi({orgId:G.id,virtualMcpId:Y,branch:J}),H=await ON(X,J,Q),N=d_$({userId:H,projectRef:K}),F=W.metadata??null,U;try{U=(await uX(X,{userId:H,branch:J,virtualMcpMetadata:F})).provider}catch{U=null}if(!U)return $.json({error:"No sandbox runner found"},404);return $.set("vmClaim",{claimName:N,callerUserId:Q,runner:U,virtualMcpId:Y,branch:J,userId:H,projectRef:K,virtualMcpMetadata:F,connectionIds:W.connections?.map((w)=>w.connection_id)??[]}),Z()});Aj0=new Map;cG={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};Hv$=["clone","install","start"]});var Uv$=($)=>{let Z=new B1;if(Z.use("*",vC),Z.route("/",gE0()),Z.route("/",IS$()),Z.route("/",k_$()),Z.route("/",I_$()),Z.route("/",Ej0()),Z.route("/tools",f_$()),Z.route("/",__$()),Z.route("/",W_$({kvStorage:$.kvStorage})),Z.route("/",Y_$()),Z.route("/fs",E_$({getConnection:$.getNatsConnection})),Z.route("/sandbox",Nv$()),Z.route("/",A_$()),Z.route("/deco-sites",uE0()),Z.route("/sso",_E0()),Z.route("/",jj0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",LS$()),$.mountDevAssets)Z.route("/dev-assets",cE0({orgFromPath:!0}));return Z.use("/mcp/:connectionId?",$.mcpAuth),Z.use("/mcp/:connectionId/ui-resource",$.mcpAuth),Z.use("/mcp/gateway/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/virtual-mcp/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/self",$.mcpAuth),Z.use("/mcp/task-run/:threadId",$.mcpAuth),Z.route("/",BM$()),Z.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",$.betterAuthProtectedResourceHandler),Z.get("/mcp/.well-known/oauth-protected-resource",$.betterAuthProtectedResourceHandler),Z.route("/mcp/task-run",z_$()),Z.route("/mcp",ZO0()),Z.route("/mcp/self",Lj0()),Z.route("/mcp",GO0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var wv$=B(()=>{y8();E$1();ES$();T$1();lE0();Fo();D$1();J_$();K_$();j_$();Tn();K$1();YO0();m81();P_$();T_$();q_$();S_$();v_$();n81();x_$();p81();XO0();Fv$()});function $46($){return $.filter((Z)=>Z.vendors?.alias).map((Z)=>({name:Z.name,title:Z.title,description:Z.description,logo:Z.logo,category:Z.category,vendor:{alias:Z.vendors.alias,url:Z.vendors.url}}))}async function Z46($,Z){let X=await fetch(`${$}/rest/v1/apps?select=name,title,description,logo,category,vendors(alias,url)`,{headers:{apikey:Z,Authorization:`Bearer ${Z}`,Accept:"application/json"},signal:AbortSignal.timeout(e86)});if(!X.ok){let Q=await X.text().catch(()=>X.statusText);throw console.error(`[deco-apps] Supabase error (${X.status}): ${Q.slice(0,200)}`),Error(`External service error (${X.status})`)}return await X.json()}var e86=1e4,X46=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},Ov$=()=>{let $=new B1;return $.use("*",X46),$.get("/",async(Z)=>{let X=c0(),Q=X.decoSupabaseUrl,G=X.decoSupabaseServiceKey;if(!Q||!G)return Z.json({apps:[]});try{let Y=await Z46(Q,G);return Z.json({apps:$46(Y)})}catch(Y){return console.error("[deco-apps] GET error:",Y),Z.json({error:"Failed to fetch apps"},502)}}),$};var Bv$=B(()=>{y8();S$()});import{z as M1}from"zod";function cK($,Z="invalid_request_error",X=null,Q=null){return{error:{message:$,type:Z,param:X,code:Q}}}function U46($){if(!$)return null;let Z=$.indexOf(":");if(Z===-1)return{credentialId:null,modelId:$};let X=$.substring(0,Z),Q=$.substring(Z+1);if(!X||!Q)return null;return{credentialId:X,modelId:Q}}function w46($,Z,X){try{return JSON.parse($)}catch{throw new Ev$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function O46($){let Z={};for(let X of $)if(X.role==="assistant"&&X.tool_calls)for(let Q of X.tool_calls)Z[Q.id]=Q.function.name;return $.map((X)=>{switch(X.role){case"system":return{role:"system",content:X.content};case"user":if(typeof X.content==="string")return{role:"user",content:X.content};return{role:"user",content:X.content.map((G)=>{if(G.type==="text")return{type:"text",text:G.text};return{type:"image",image:G.image_url.url}})};case"assistant":if(X.tool_calls&&X.tool_calls.length>0)return{role:"assistant",content:X.tool_calls.map((G)=>({type:"tool-call",toolCallId:G.id,toolName:G.function.name,input:w46(G.function.arguments,G.id,G.function.name)}))};return{role:"assistant",content:X.content??""};case"tool":let Q=Z[X.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:X.tool_call_id,toolName:Q,output:{type:"text",value:X.content}}]}}})}function B46($){let Z=$.map((X)=>{let Q=X.function.parameters?PG(X.function.parameters):PG({type:"object",properties:{}});return[X.function.name,_$({description:X.function.description,inputSchema:Q})]});return Object.fromEntries(Z)}function D46($){if(!$)return;return{openai:{response_format:$}}}function L46(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function Dv$($,Z,X,Q,G,Y){let J={model:$,messages:Z,tools:X,temperature:Q.temperature,maxTokens:Q.max_tokens,topP:Q.top_p,frequencyPenalty:Q.frequency_penalty,presencePenalty:Q.presence_penalty,stopSequences:Q.stop?Array.isArray(Q.stop)?Q.stop:[Q.stop]:void 0,abortSignal:Y};return G?{...J,providerOptions:G}:J}function Lv$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var Q46=256,G46,Y46,J46,W46,K46,H46,N46,F46,Ev$,jv$,zv$;var Pv$=B(()=>{k4();y8();ig();xN();G46=M1.object({type:M1.literal("function"),function:M1.object({name:M1.string(),description:M1.string().optional(),parameters:M1.record(M1.string(),M1.unknown()).optional()})}),Y46=M1.object({id:M1.string(),type:M1.literal("function"),function:M1.object({name:M1.string(),arguments:M1.string()})}),J46=M1.discriminatedUnion("role",[M1.object({role:M1.literal("system"),content:M1.string(),name:M1.string().optional()}),M1.object({role:M1.literal("user"),content:M1.union([M1.string(),M1.array(M1.union([M1.object({type:M1.literal("text"),text:M1.string()}),M1.object({type:M1.literal("image_url"),image_url:M1.object({url:M1.string(),detail:M1.string().optional()})})]))]),name:M1.string().optional()}),M1.object({role:M1.literal("assistant"),content:M1.string().nullable().optional(),name:M1.string().optional(),tool_calls:M1.array(Y46).optional()}),M1.object({role:M1.literal("tool"),content:M1.string(),tool_call_id:M1.string()})]),W46=M1.object({type:M1.literal("text")}),K46=M1.object({type:M1.literal("json_object")}),H46=M1.object({type:M1.literal("json_schema"),json_schema:M1.object({name:M1.string(),description:M1.string().optional(),schema:M1.record(M1.string(),M1.unknown()),strict:M1.boolean().optional()})}),N46=M1.union([W46,K46,H46]),F46=M1.object({model:M1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:M1.array(J46),stream:M1.boolean().optional().default(!1),temperature:M1.number().min(0).max(2).optional(),max_tokens:M1.number().positive().optional(),top_p:M1.number().min(0).max(1).optional(),frequency_penalty:M1.number().min(-2).max(2).optional(),presence_penalty:M1.number().min(-2).max(2).optional(),stop:M1.union([M1.string(),M1.array(M1.string())]).optional(),tools:M1.array(G46).optional(),tool_choice:M1.union([M1.literal("auto"),M1.literal("none"),M1.literal("required"),M1.object({type:M1.literal("function"),function:M1.object({name:M1.string()})})]).optional(),response_format:N46.optional(),user:M1.string().optional()});Ev$=class Ev$ extends Error{constructor($){super($);this.name="MessageConversionError"}};jv$=new B1;jv$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(cK("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(cK("Organization context is required. Ensure your API key has organization metadata.","invalid_request_error","organization"),400);if((Z.organization.slug??Z.organization.id)!==X)return $.json(cK("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Q=await $.req.json(),G=F46.safeParse(Q);if(!G.success){let L=G.error.issues[0]??{message:"Invalid request",path:[]};return $.json(cK(`Invalid request: ${L.message}`,"invalid_request_error",L.path.length>0?L.path.join("."):null),400)}let Y=G.data,J=U46(Y.model);if(!J)return $.json(cK("Invalid model format. Expected 'model_id' or 'credential_id:model_id' (e.g., 'claude-sonnet-4-6' or 'key_abc123:claude-sonnet-4-6')","invalid_request_error","model"),400);let{credentialId:W}=J,{modelId:K}=J;if(!W){let E=(await Z.storage.aiProviderKeys.list({organizationId:Z.organization.id})).find((j)=>QD(j.providerId));if(!E)return $.json(cK("No AI provider credentials configured for this organization. Add a credential in settings or specify one explicitly via 'credential_id:model_id'.","invalid_request_error","model"),400);W=E.id}let H;try{H=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(cK(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let N=H.aiSdk.languageModel(K),F=O46(Y.messages),U=Y.tools?B46(Y.tools):void 0,w=D46(Y.response_format),O=L46(),D=Math.floor(Date.now()/1000);if(Y.stream)return QF($,async(L)=>{let E=Dv$(N,F,U,Y,w,$.req.raw.signal);try{let j=Aw(E),z=!1,A=0,P="",M=async()=>{if(P.length===0)return;let k=P;P="",await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Y.model,choices:[{index:0,delta:{content:k},finish_reason:null}]})})};for await(let k of j.fullStream){if(!z&&(k.type==="text-delta"||k.type==="tool-call"))await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Y.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(k.type==="text-delta"){if(P+=k.text,P.length>=Q46)await M()}else if(k.type==="tool-call"){await M();let q=A++;await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Y.model,choices:[{index:0,delta:{tool_calls:[{index:q,id:k.toolCallId,type:"function",function:{name:k.toolName,arguments:JSON.stringify(k.input)}}]},finish_reason:null}]})})}else if(k.type==="finish")await M(),await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Y.model,choices:[{index:0,delta:{},finish_reason:Lv$(k.finishReason)}],usage:k.totalUsage?{prompt_tokens:k.totalUsage.inputTokens??0,completion_tokens:k.totalUsage.outputTokens??0,total_tokens:k.totalUsage.totalTokens??0}:void 0})})}await M(),await L.writeSSE({data:"[DONE]"})}catch(j){let z=j;console.error("[openai-compat:stream] Error:",z.message),await L.writeSSE({data:JSON.stringify({error:{message:z.message,type:"server_error"}})})}});else{let L=Dv$(N,F,U,Y,w,$.req.raw.signal),E=await zw(L),j={role:"assistant",content:E.text||null};if(E.toolCalls&&E.toolCalls.length>0)j.tool_calls=E.toolCalls.map((z)=>({id:z.toolCallId,type:"function",function:{name:z.toolName,arguments:JSON.stringify("input"in z?z.input:{})}})),j.content=null;return $.json({id:O,object:"chat.completion",created:D,model:Y.model,choices:[{index:0,message:j,finish_reason:Lv$(E.finishReason)}],usage:{prompt_tokens:E.usage?.inputTokens??0,completion_tokens:E.usage?.outputTokens??0,total_tokens:E.usage?.totalTokens??0}})}}catch(Q){let G=Q;if(G.name==="AbortError")return $.json(cK("Request aborted","invalid_request_error"),400);if(G.name==="MessageConversionError")return $.json(cK(G.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",G.message,G.stack),$.json(cK(G.message,"server_error"),500)}});zv$=jv$});var Tv$;var Av$=B(()=>{Tv$={name:"decocms",version:"4.204.17",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@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","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function z46(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??j46}}var Rv$,j46="https://ph.studio.decocms.com",Iv$;var qv$=B(()=>{y8();ux0();MV();jZ();S$();Q$1();Av$();Rv$=new B1;Rv$.get("/",($)=>{let Z={version:Tv$.version,theme:Yu1(),...pD().logo&&{logo:pD().logo},...UK()&&{internalUrl:bq1()},...c0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!c0().firecrawlApiKey,auth:fk$(),posthog:z46(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!UK()&&c0().sandboxProviderKind==="agent-sandbox"}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});Iv$=Rv$});function pg($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function K41($){return(pg($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function kv$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(pg($))}&sz=${Z}`}function Mv$($,Z){let X=$.trim();if(X.length<=Z)return X;let Q=X.slice(0,Z-1),G=Q.lastIndexOf(" ");return`${(G>Z*0.6?Q.slice(0,G):Q).trimEnd()}\u2026`}function Sv$($){let{brand:Z,domain:X,score:Q,verdict:G}=$,Y=typeof Q==="number"?`${Z} commerce report \u2014 ${Math.round(Q)}/100 \xB7 decocms`:`${Z} commerce report \xB7 decocms`,J=`See the full ${Z} scorecard \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,W=G?.trim()?Mv$(`${G.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):Mv$(`How does ${X} really perform? ${J}`,200);return{title:Y,description:W}}import{z as l0}from"zod";var mC,P46,A46,T46,R46,Vv$;var Cv$=B(()=>{mC=l0.enum(["good","bad","neutral"]),P46=l0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((X)=>X!==null&&typeof X!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},l0.object({kind:l0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:l0.coerce.string().optional(),tone:mC.optional(),muted:l0.boolean().optional(),delta:l0.coerce.string().optional(),deltaDir:l0.enum(["up","down","neutral"]).optional(),points:l0.array(l0.coerce.number()).optional(),label:l0.coerce.string().optional()}).transform(($)=>{if($.kind==="badge"&&$.label==null)$.label=$.value??"";if($.kind==="score"){let Z=Number($.value);if(Number.isNaN(Z))return{...$,kind:"text"}}return $})),A46=l0.preprocess(($)=>{let Z=$;if(Z&&typeof Z==="object"&&!Array.isArray(Z)&&Array.isArray(Z.cells))Z=Z.cells;if(Array.isArray(Z)&&Z.length===1&&Array.isArray(Z[0]))Z=Z[0];if(Array.isArray(Z))return Z;if(Z&&typeof Z==="object")return Object.values(Z);return Z},l0.array(P46)),T46={key:l0.coerce.string(),title:l0.coerce.string(),eyebrow:l0.coerce.string().optional(),headline:l0.coerce.string(),annotation:l0.coerce.string().optional(),methodology:l0.coerce.string().optional(),sources:l0.array(l0.object({name:l0.coerce.string(),logoUrl:l0.coerce.string()})).optional()},R46=l0.discriminatedUnion("template",[l0.object({template:l0.literal("cover"),score:l0.object({value:l0.coerce.number(),max:l0.coerce.number().optional(),grade:l0.coerce.string().optional(),label:l0.coerce.string().optional()}).optional(),brandImage:l0.coerce.string().optional(),screenshot:l0.coerce.string().optional(),mobileScreenshot:l0.coerce.string().optional()}),l0.object({template:l0.literal("cta"),ctaUrl:l0.coerce.string().optional(),ctaLabel:l0.coerce.string().optional(),bullets:l0.array(l0.coerce.string()).optional()}),l0.object({template:l0.literal("series"),points:l0.array(l0.coerce.number()).min(2),xLabels:l0.array(l0.coerce.string()).min(1),unit:l0.coerce.string().optional(),callout:l0.object({index:l0.coerce.number(),value:l0.coerce.string(),tone:mC.optional()})}),l0.object({template:l0.literal("threshold"),value:l0.coerce.string().default(""),metricLabel:l0.coerce.string().optional(),ratio:l0.coerce.number(),thresholdRatio:l0.coerce.number().optional(),thresholdLabel:l0.coerce.string().default(""),tone:mC.optional()}),l0.object({template:l0.literal("stats"),stats:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),tone:mC.optional()})).min(1)}),l0.object({template:l0.literal("bars"),items:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),ratio:l0.coerce.number(),tone:mC.optional()})).min(1)}),l0.object({template:l0.literal("gauges"),gauges:l0.array(l0.object({label:l0.coerce.string(),value:l0.coerce.string(),status:l0.enum(["good","warn","bad"]).catch("warn"),caption:l0.coerce.string().optional(),ratio:l0.coerce.number().optional()})).min(1)}),l0.object({template:l0.literal("checklist"),checks:l0.array(l0.object({label:l0.coerce.string(),status:l0.enum(["pass","fail","warn"]).catch("fail"),value:l0.coerce.string().optional()})).min(1)}),l0.object({template:l0.literal("table"),columns:l0.array(l0.object({label:l0.coerce.string(),align:l0.enum(["left","right"]).optional()})).min(1),rows:l0.array(A46).min(1),highlightRow:l0.coerce.number().optional()}),l0.object({template:l0.literal("products"),products:l0.array(l0.object({name:l0.coerce.string(),price:l0.coerce.string().optional(),image:l0.coerce.string().optional(),url:l0.coerce.string().optional()})).min(1)}),l0.object({template:l0.literal("list"),entries:l0.array(l0.object({label:l0.coerce.string(),severity:l0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:l0.coerce.number().optional()}),l0.object({template:l0.literal("keywords"),volumeLabel:l0.coerce.string().optional(),keywords:l0.array(l0.object({term:l0.coerce.string(),volume:l0.coerce.string(),position:l0.coerce.number().catch(0)})).min(1)}),l0.object({template:l0.literal("competitor"),metricLabel:l0.coerce.string().optional(),competitors:l0.array(l0.object({name:l0.coerce.string(),value:l0.coerce.string(),tone:mC.optional(),isYou:l0.boolean().optional()})).min(1)}),l0.object({template:l0.literal("scorecard"),rivalLabel:l0.coerce.string().optional(),dimensions:l0.array(l0.object({label:l0.coerce.string(),you:l0.coerce.string(),rival:l0.coerce.string().optional(),rivalName:l0.coerce.string().optional(),tone:mC.optional()})).min(1)})]),Vv$=l0.object({...T46,template:R46})});function Rj0($){let Z=[],X=[...$.sections].sort((G,Y)=>G.position-Y.position).map((G)=>{let Y=Vv$.safeParse(G.props);if(Y.success)return Y.data;let J=Y.error.issues[0];return Z.push({section_type:G.section_type,position:G.position,reason:J?`${J.path.join(".")||"(root)"}: ${J.message}`:"contract violation"}),null}).filter((G)=>G!==null),Q=X.filter((G)=>G.template.template!=="cover"&&G.template.template!=="cta").map((G)=>({key:G.key,title:G.title}));return{deck:{meta:{...$.meta,scores:$.summary?.scores,scannedAt:$.scanned_at,toc:Q},slides:X},drops:Z}}var H41=B(()=>{Cv$()});import{join as _v$}from"path";async function q46($){try{let Z=await fetch(`${xW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(I46)});if(!Z.ok)return null;let X=await Z.json(),{deck:Q}=Rj0(X);if(!Q.slides.length)return null;let G=Q.slides.find((W)=>W.template.template==="cover"),Y=G?.template,J=Y&&Y.template==="cover"?Y:void 0;return{brand:Q.meta.brand?.trim()||K41($),score:Q.meta.scores?.cover??J?.score?.value,verdict:G?.annotation?.trim()||G?.headline?.trim()||void 0}}catch{return null}}function lG($){return $.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function M46($,Z){let X=pg($),Q=Z?.brand?.trim()||K41(X),G=kv$(X,128),J=`${(c0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=Sv$({brand:Q,domain:X,score:Z?.score,verdict:Z?.verdict}),H=`${J}/og.png`,N=`${Q} commerce report by decocms`;return[`<title>${lG(W)}</title>`,`<meta name="description" content="${lG(K)}" />`,'<meta name="robots" content="noindex, follow" />','<meta property="og:type" content="website" />','<meta property="og:site_name" content="decocms" />',`<meta property="og:title" content="${lG(W)}" />`,`<meta property="og:description" content="${lG(K)}" />`,`<meta property="og:url" content="${lG(J)}" />`,`<meta property="og:image" content="${lG(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${lG(N)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${lG(W)}" />`,`<meta name="twitter:description" content="${lG(K)}" />`,`<meta name="twitter:image" content="${lG(H)}" />`,`<meta name="twitter:image:alt" content="${lG(N)}" />`,`<link rel="canonical" href="${lG(J)}" />`,`<link rel="icon" href="${lG(G)}" sizes="any" />`].join(`
|
|
2730
2730
|
`)}function k46($,Z){return $.replace(/<title>[\s\S]*?<\/title>\s*/i,"").replace(/<meta\s+name="(?:description|twitter:[^"]*)"[^>]*>\s*/gi,"").replace(/<meta\s+property="og:[^"]*"[^>]*>\s*/gi,"").replace(/<link\s+rel="icon"[^>]*>\s*/gi,"").replace("</head>",` ${Z}
|
|
2731
2731
|
</head>`)}function vv$($){let Z=new B1;return Z.get("/:domain/og.png",async(X)=>{let Q=pg(X.req.param("domain")),G=async()=>{let Y=$?Bun.file(_v$($,"report-og-fallback.png")):null;if(!Y||!await Y.exists())return X.notFound();return X.body(new Uint8Array(await Y.arrayBuffer()),200,{"Content-Type":"image/png","Cache-Control":"public, max-age=0, s-maxage=3600"})};try{let Y=await fetch(`${xW({})}/api/v2/public/diagnostics/${encodeURIComponent(Q)}/og.png`,{signal:AbortSignal.timeout(S46)}),J=Y.headers.get("content-type")??"";if(!Y.ok||!J.startsWith("image/")||!Y.body)return G();return X.body(Y.body,200,{"Content-Type":J,"Cache-Control":"public, max-age=0, s-maxage=604800"})}catch{return G()}}),Z.get("/:domain",async(X)=>{let Q=X.req.param("domain"),G=$?_v$($,"index.html"):null,Y=G?Bun.file(G):null;if(!Y||!await Y.exists())return X.notFound();let J=await Y.text();try{let W=await q46(pg(Q)),K=M46(Q,W);return X.html(k46(J,K),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return X.html(J)}}),Z}var I46=2500,S46=1e4;var bv$=B(()=>{y8();H41();WL();S$()});function go($,Z){return fetch(`${xW({})}${$}`,Z)}async function V46($,Z,X){let Q=new URLSearchParams;if(Z)Q.set("pw",Z);if(X)Q.set("lang",X);let G=Q.toString()?`?${Q.toString()}`:"",Y=await go(`/api/v2/public/diagnostics/${encodeURIComponent($)}${G}`,{headers:{Accept:"application/json"}});if(Y.status===404)return{status:"not_found",deck:null,scanned_at:null,drops:[]};if(!Y.ok)throw Error(`report read HTTP ${Y.status}`);let J=await Y.json(),{deck:W,drops:K}=Rj0(J);return{status:W.slides.length?"ready":"empty",deck:W,scanned_at:J.scanned_at,drops:K}}var C46,i3,Ij0=async($,Z)=>{if(!$.get("reportUser"))return $.json({error:"Authentication required"},401);await Z();return},fv$;var xv$=B(()=>{y8();IY();WL();H41();C46=new Set(["complete","errored","terminated","unknown"]),i3=new B1;i3.use("*",async($,Z)=>{let X=await j8.api.getSession({headers:$.req.raw.headers});$.set("reportUser",X?.user?.id?{email:X.user.email}:void 0),await Z(),$.header("Cache-Control","private, no-store"),$.header("Vary","Cookie");return});i3.use("/run",Ij0);i3.use("/status",Ij0);i3.use("/link-token/*",Ij0);i3.use("/suggest",Ij0);i3.get("/site/:domain",async($)=>{let Z=$.req.param("domain").trim();if(!Z)return $.json({error:"domain is required"},400);let X=$.get("reportUser"),Q=$.req.query("key")?.trim()||void 0,G=$.req.query("lang")?.trim()||void 0;try{let Y=await V46(Z,Q,G);if($.header("Cache-Control","private, no-store"),X||!Y.deck)return $.json(Y);return $.json({...Y,deck:{...Y.deck,slides:Y.deck.slides.slice(0,1)},truncated:Y.status==="ready"})}catch{return $.json({error:"report read failed"},502)}});i3.post("/run",async($)=>{let Z=$.get("reportUser"),X;try{X=await $.req.json()}catch{return $.json({error:"invalid JSON"},400)}let Q=typeof X.domain==="string"?X.domain.trim():"";if(!Q)return $.json({error:"domain is required"},400);let G=Z.email,Y=typeof X.distinctId==="string"&&X.distinctId.trim()&&X.distinctId.length<=200?X.distinctId.trim():void 0;try{let J=await go("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${JL({})}`},body:JSON.stringify({url:Q,email:G,distinct_id:Y})});if(!J.ok)return $.json({error:`run HTTP ${J.status}`},502);let W=await J.json(),K=W.blocked?{state:"blocked"}:W.status==="fresh"?{state:"fresh"}:W.mode==="sync"?{state:"sync"}:{state:"running",id:W.id??null};return $.json(K)}catch{return $.json({error:"run failed"},502)}});i3.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let X=await go(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${JL({})}`}});if(!X.ok)return $.json({error:`status HTTP ${X.status}`},502);let G=(await X.json()).status??"unknown",Y={done:C46.has(G),status:G};return $.json(Y)}catch{return $.json({error:"status failed"},502)}});i3.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let X=await go(`/api/v2/public/link-tokens/${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"}});if(X.status===404)return $.json(null);if(!X.ok)return $.json({error:`link token HTTP ${X.status}`},502);return $.json(await X.json())}catch{return $.json({error:"link token resolve failed"},502)}});i3.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let X=await go(`/api/v2/public/suggest?q=${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"}});if(!X.ok)return $.json({suggestions:[]});let Q=await X.json();return $.json({suggestions:Array.isArray(Q.suggestions)?Q.suggestions:[]})}catch{return $.json({suggestions:[]})}});fv$=i3});import{createHmac as _46,timingSafeEqual as v46}from"crypto";function gv$($,Z,X,Q=Date.now()){if(!Z||!X)return!1;let G,Y=[];for(let H of Z.split(",")){let N=H.indexOf("=");if(N<=0)continue;let F=H.slice(0,N).trim(),U=H.slice(N+1).trim();if(F==="t")G=U;else if(F==="v1")Y.push(U)}if(!G||Y.length===0)return!1;let J=Number(G);if(!Number.isFinite(J)||Math.abs(Q/1000-J)>b46)return!1;let W=_46("sha256",X).update(`${G}.${$}`).digest("hex"),K=Buffer.from(W,"hex");return Y.some((H)=>{let N=Buffer.from(H,"hex");return K.length===N.length&&v46(K,N)})}function hv$($){let Z;try{Z=JSON.parse($)}catch{return null}let X=QJ(Z),Q=QJ(QJ(X?.data)?.object);if(!X||typeof X.type!=="string"||!Q)return null;return{id:lK(X.id),type:X.type,created:typeof X.created==="number"?X.created:void 0,livemode:typeof X.livemode==="boolean"?X.livemode:void 0,data:{object:Q}}}function uv$($){switch($){case"active":case"trialing":return"active";case"past_due":return"past_due";default:return"canceled"}}function lK($){return typeof $==="string"?$:void 0}function QJ($){return typeof $==="object"&&$!==null?$:void 0}function qj0($){return typeof $==="number"?new Date($*1000):null}function U41($){return lK($)??lK(QJ($)?.id)}function f46($){return U41($.subscription)??lK(QJ(QJ($.parent)?.subscription_details)?.subscription)}function x46($){let Z=qj0($.current_period_end);if(Z)return Z;let X=QJ($.items)?.data;if(!Array.isArray(X))return null;let Q=0;for(let G of X){let Y=QJ(G)?.current_period_end;if(typeof Y==="number"&&Y>Q)Q=Y}return Q>0?new Date(Q*1000):null}function N41($,Z){let X=qj0($.created);return!!X&&!!Z.lastStripeEventAt&&X<Z.lastStripeEventAt}function F41($,Z){let X=qj0($.created);if(!X)return;return Z.lastStripeEventAt&&Z.lastStripeEventAt>X?void 0:X}async function y46($,Z){let X=Z.data.object;switch(Z.type){case"checkout.session.completed":case"checkout.session.async_payment_succeeded":{let Q=lK(QJ(X.metadata)?.orgId);if(!Q)return{handled:!1,reason:"no orgId"};if(lK(QJ(X.metadata)?.kind)==="topup"){if(X.mode!=="payment")return{handled:!1,reason:"topup with wrong mode"};if(lK(X.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let J=lK(X.id);if(!J)return console.error("stripe webhook: topup session without id",{eventId:Z.id,organizationId:Q}),{handled:!1,reason:"topup session without id"};let W=Number(QJ(X.metadata)?.creditCents);if(!Number.isInteger(W)||W<=0)return console.error("stripe webhook: paid topup with bad metadata \u2014 credit NOT applied",{eventId:Z.id,organizationId:Q,creditCents:QJ(X.metadata)?.creditCents}),{handled:!1,reason:"bad topup metadata"};return{handled:!0,organizationId:Q,topUp:{creditCents:W,referenceId:`stripe-topup:${J}`}}}if(X.mode!=="subscription")return{handled:!1,reason:"not a subscription checkout"};if(lK(X.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let G=await $.getBilling(Q);if(!G)return{handled:!1,reason:"unknown org"};let Y=U41(X.subscription);if(G.stripeSubscriptionId&&Y&&G.stripeSubscriptionId!==Y)return console.error("stripe webhook: refused checkout rebind",{organizationId:Q,eventId:Z.id}),{handled:!1,reason:"org already bound to another subscription",orphanSubscriptionId:Y};if(N41(Z,G))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Q,{stripeCustomerId:U41(X.customer),stripeSubscriptionId:Y,status:"active",lastStripeEventAt:F41(Z,G)}),{handled:!0,organizationId:Q}}case"customer.subscription.updated":case"customer.subscription.deleted":{let Q=lK(X.id);if(!Q)return{handled:!1,reason:"no sub id"};let G=await $.getBillingByStripeSubscriptionId(Q);if(!G)return{handled:!1,reason:"unknown subscription"};let Y=Z.type==="customer.subscription.deleted";if(!Y&&N41(Z,G))return{handled:!1,reason:"stale event"};let J=Y?"canceled":uv$(X.status);return await $.updateStripeState(G.organizationId,{status:J,currentPeriodEnd:x46(X),...Y&&{stripeSubscriptionId:null},lastStripeEventAt:F41(Z,G)}),{handled:!0,organizationId:G.organizationId}}case"invoice.paid":{let Q=f46(X);if(!Q)return{handled:!1,reason:"no sub id"};let G=await $.getBillingByStripeSubscriptionId(Q);if(!G)return{handled:!1,reason:"unknown subscription"};if(N41(Z,G))return{handled:!1,reason:"stale event"};return await $.updateStripeState(G.organizationId,{status:"active",currentPeriodEnd:qj0(X.period_end),lastStripeEventAt:F41(Z,G)}),{handled:!0,organizationId:G.organizationId}}default:return{handled:!1,reason:`unhandled event ${Z.type}`}}}function g46($,Z){if(!Z.handled||$.livemode===!1)return null;let X=$.data.object;if(Z.topUp)return{name:"credits_topup_succeeded",organizationId:Z.organizationId,properties:{credit_cents:Z.topUp.creditCents}};switch($.type){case"checkout.session.completed":case"checkout.session.async_payment_succeeded":return{name:"subscription_started",organizationId:Z.organizationId,properties:{}};case"customer.subscription.deleted":return{name:"subscription_canceled",organizationId:Z.organizationId,properties:{}};case"customer.subscription.updated":return{name:"subscription_updated",organizationId:Z.organizationId,properties:{status:uv$(X.status),...typeof X.cancel_at_period_end==="boolean"?{cancel_at_period_end:X.cancel_at_period_end}:{}}};case"invoice.paid":if(X.billing_reason==="subscription_create")return null;return{name:"subscription_renewed",organizationId:Z.organizationId,properties:{}};default:return null}}function yv$($,Z){let X=g46($,Z);if(!X)return;nJ({event:X.name,organizationId:X.organizationId,...$.id?{uuid:wl1(`stripe:${$.id}:${X.name}`)}:{},...$.created?{timestamp:new Date($.created*1000)}:{},properties:X.properties})}async function cv$($){let Z=new _W(m8().db),X=await y46(Z,$);if(!(X.handled&&X.topUp))yv$($,X);if(X.handled&&X.topUp)await zF$({organizationId:X.organizationId,amountCents:X.topUp.creditCents,referenceId:X.topUp.referenceId}),yv$($,X);if(!X.handled&&X.orphanSubscriptionId)try{await kt1(X.orphanSubscriptionId),console.error("stripe webhook: canceled orphan subscription",{subscriptionId:X.orphanSubscriptionId,eventId:$.id})}catch(Q){if(!(Q instanceof X3&&(Q.status===400||Q.status===404)))throw Q}return X}var b46=300;var lv$=B(()=>{LY();f4();c80();Sm();so0()});var h46=1048576,w41;var dv$=B(()=>{y8();mO();S$();lv$();w41=new B1;w41.post("/webhook",HZ({maxSize:h46,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=c0().stripeWebhookSecret;if(!Z)return $.json({error:"stripe billing not configured"},503);let X=await $.req.text();if(!gv$(X,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let G=hv$(X);if(!G)return $.json({error:"invalid payload"},400);let Y=await cv$(G);return console.log("stripe webhook",{eventId:G.id,type:G.type,livemode:G.livemode,...Y}),$.json({received:!0})})});import{timingSafeEqual as u46}from"crypto";function l46($,Z,X){if(!Z?.startsWith("sha256="))return!1;let Q=new Bun.CryptoHasher("sha256",X).update($).digest("hex"),G=Z.slice(7);if(G.length!==Q.length)return!1;return u46(Buffer.from(G),Buffer.from(Q))}var c46=5242880,O41;var mv$=B(()=>{y8();mO();Ci();O41=new B1;O41.post("/webhook",HZ({maxSize:c46,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=process.env.GITHUB_WEBHOOK_SECRET;if(!Z)return $.json({error:"github webhook not configured"},503);let X=await $.req.text();if(!l46(X,$.req.header("x-hub-signature-256"),Z))return $.json({error:"invalid signature"},400);if($.req.header("x-github-event")!=="push")return $.json({ok:!0,ignored:"event"});let Q;try{Q=JSON.parse(X)}catch{return $.json({error:"invalid payload"},400)}let G=Q.ref,Y=Q.repository?.full_name;if(!G||!Y)return $.json({ok:!0,ignored:"shape"});let W=(await Md0())?.markTenantPoolsDirty(Y,G)??[];return $.json({ok:!0,pools:W})})});function iv$($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var nv$,d46,m46,pv$;var tv$=B(()=>{y8();iJ();Mx();Sf();nv$=new B1,d46=["range","if-none-match","if-modified-since"],m46=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];nv$.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),X=Z.organization?.id;if(!Z.auth?.user?.id){if(qg($))return $.redirect(`/login?next=${encodeURIComponent($.req.path)}`,302);throw new e1(401,{message:"Authentication required"})}if(!X)throw new e1(401,{message:"Organization context required"});let Q=$.req.path.replace(/^.*\/files\//,"");if(!Q)throw new e1(400,{message:"Missing file key"});let G=await Wn(Q,Z);if(!G)throw new e1(503,{message:"Object storage not configured"});if(G.startsWith("data:")&&aJ()){let K=G.match(/^data:([^;]+);base64,(.+)$/s);if(!K)throw new e1(500,{message:"Invalid data URL from storage"});let[,H,N]=K,F=Buffer.from(N,"base64"),U=new Headers({"Content-Type":H,"Cache-Control":"private, max-age=86400"});return iv$(U,H),new Response(F,{status:200,headers:U})}let Y=new Headers;for(let K of d46){let H=$.req.header(K);if(H)Y.set(K,H)}let J=await fetch(G,{headers:Y});if(J.status===403||J.status===404)throw new e1(404,{message:"File not found"});if(!J.ok&&J.status!==304&&J.status!==416)throw console.error(`[files] upstream storage error ${J.status} for key:`,Q),new e1(502,{message:"Upstream storage error"});let W=new Headers;for(let K of m46){let H=J.headers.get(K);if(H)W.set(K,H)}return W.set("Cache-Control","private, max-age=86400"),iv$(W,W.get("content-type")??""),new Response(J.body,{status:J.status,headers:W})});pv$=nv$});var ho=C((iC)=>{var i46=iC&&iC.__createBinding||(Object.create?function($,Z,X,Q){if(Q===void 0)Q=X;var G=Object.getOwnPropertyDescriptor(Z,X);if(!G||("get"in G?!Z.__esModule:G.writable||G.configurable))G={enumerable:!0,get:function(){return Z[X]}};Object.defineProperty($,Q,G)}:function($,Z,X,Q){if(Q===void 0)Q=X;$[Q]=Z[X]}),n46=iC&&iC.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))i46(Z,$,X)};Object.defineProperty(iC,"__esModule",{value:!0});n46($G(),iC)});var av$=C((ov$)=>{Object.defineProperty(ov$,"__esModule",{value:!0});ov$.version=void 0;ov$.version="3.4.0"});var $b$=C((dK)=>{var p46=dK&&dK.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(dK,"__esModule",{value:!0});dK.NodeTransport=dK.VERSION=void 0;dK.nodeResolveHost=e46;var d6=ho(),t46=z0("net"),B41=z0("tls"),o46=z0("path"),sv$=z0("fs"),r46=p46(z0("dns")),a46=av$();dK.VERSION=a46.version;var s46="nats.js";class ev${socket;version;lang;yields=[];signal=(0,d6.deferred)();closedNotification=(0,d6.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=s46,this.version=dK.VERSION}async connect($,Z){this.tlsName=$.tlsName,this.options=Z;let{tls:X}=this.options,{handshakeFirst:Q}=X||{};try{if(Q===!0)this.socket=await this.tlsFirst($);else this.socket=await this.dial($);if(this.done)this.socket?.destroy();let G=await this.peekInfo();(0,d6.checkOptions)(G,Z);let{tls_required:Y,tls_available:J}=G,W=J===!0&&Z.tls!==null;if(!Q&&(Y||W))this.socket=await this.startTLS();if(this.done)this.socket?.destroy();if(Y&&this.socket.encrypted!==!0)throw d6.errors.InvalidArgumentError.format("tls","is not available on this server");return this.connected=!0,this.setupHandlers(),this.signal.resolve(),Promise.resolve()}catch(G){let Y=G;if(!Y)Y=new d6.errors.ConnectionError("error connecting - node provided an undefined error");let{code:J}=Y,W=J==="ECONNREFUSED"?new d6.errors.ConnectionError("connection refused",{cause:Y}):Y;throw this.socket?.destroy(),W}}dial($){let Z=(0,d6.deferred)(),X,Q=(0,t46.createConnection)($.port,$.hostname,()=>{Z.resolve(Q),Q.removeAllListeners()});return Q.on("error",(G)=>{X=G}),Q.on("close",()=>{Q.removeAllListeners(),Z.reject(X)}),Q.setNoDelay(!0),Z}get isClosed(){return this.done}close($){return this._closed($,!1)}peekInfo(){let $=(0,d6.deferred)(),Z;return this.socket.on("data",(X)=>{this.yields.push(X);let Q=d6.DataBuffer.concat(...this.yields),G=(0,d6.extractProtocolMessage)(Q);if(G!=="")try{let Y=d6.INFO.exec(G);if(!Y)throw Error("unexpected response from server");let J=JSON.parse(Y[1]);$.resolve(J)}catch(Y){$.reject(Y)}finally{this.socket.removeAllListeners()}}),this.socket.on("error",(X)=>{Z=X}),this.socket.on("close",()=>{this.socket.removeAllListeners(),$.reject(Z)}),$}loadFile($){if(!$)return Promise.resolve();let Z=(0,d6.deferred)();try{if($=(0,o46.resolve)($),!(0,sv$.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,sv$.readFile)($,(X,Q)=>{if(X)return Z.reject(X);Z.resolve(Q)})}catch(X){Z.reject(X)}return Z}async loadClientCerts(){let $={},{certFile:Z,cert:X,caFile:Q,ca:G,keyFile:Y,key:J}=this.options.tls;try{if(Z){let W=await this.loadFile(Z);if(W)$.cert=W}else if(X)$.cert=X;if(Y){let W=await this.loadFile(Y);if(W)$.key=W}else if(J)$.key=J;if(Q){let W=await this.loadFile(Q);if(W)$.ca=[W]}else if(G)$.ca=G;return Promise.resolve($)}catch(W){return Promise.reject(W)}}async tlsFirst($){let Z,X={servername:this.tlsName,rejectUnauthorized:!0};if(this.socket)X.socket=this.socket;if(typeof this.options.tls==="object")try{let G=await this.loadClientCerts()||{};X=(0,d6.extend)(X,this.options.tls,G)}catch(G){return Promise.reject(new d6.errors.ConnectionError(G.message,{cause:G}))}let Q=(0,d6.deferred)();try{let G=(0,B41.connect)($.port,$.hostname,X,()=>{G.removeAllListeners(),Q.resolve(G)});G.on("error",(Y)=>{Z=Y}),G.on("secureConnect",()=>{if(X.rejectUnauthorized===!1)return;if(!G.authorized)throw G.authorizationError}),G.on("close",()=>{Q.reject(Z),G.removeAllListeners()}),G.setNoDelay(!0)}catch(G){Q.reject(new d6.errors.ConnectionError(G.message,{cause:G}))}return Q}async startTLS(){let $,Z={socket:this.socket,servername:this.tlsName,rejectUnauthorized:!0};if(typeof this.options.tls==="object")try{let Q=await this.loadClientCerts()||{};Z=(0,d6.extend)(Z,this.options.tls,Q)}catch(Q){return Promise.reject(new d6.errors.ConnectionError(Q.message,{cause:Q}))}let X=(0,d6.deferred)();try{let Q=(0,B41.connect)(Z,()=>{Q.removeAllListeners(),X.resolve(Q)});Q.on("error",(G)=>{$=G}),Q.on("secureConnect",()=>{if(Z.rejectUnauthorized===!1)return;if(!Q.authorized)throw Q.authorizationError}),Q.on("close",()=>{X.reject($),Q.removeAllListeners()})}catch(Q){X.reject(new d6.errors.ConnectionError(Q.message,{cause:Q}))}return X}setupHandlers(){let $;this.socket.on("data",(Z)=>{return this.yields.push(Z),this.signal.resolve()}),this.socket.on("error",(Z)=>{$=Z}),this.socket.on("end",()=>{if(this.socket?.destroyed)return;this.socket?.write(new Uint8Array(0),()=>{this.socket?.end()})}),this.socket.on("close",()=>{this._closed($,!1)})}[Symbol.asyncIterator](){return this.iterate()}async*iterate(){while(!0){if(this.yields.length===0)await this.signal;let $=this.yields;this.yields=[];for(let Z=0;Z<$.length;Z++){if(this.options.debug)console.info(`> ${(0,d6.render)($[Z])}`);yield $[Z]}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,d6.deferred)()}}discard(){if(this.done=!0,this.socket)try{this.socket.removeAllListeners(),this.socket.destroy()}catch{}}disconnect(){this._closed(void 0,!0).then().catch()}isEncrypted(){return this.socket instanceof B41.TLSSocket}_send($){if(this.isClosed||this.socket===void 0)return Promise.resolve();if(this.options.debug)console.info(`< ${(0,d6.render)($)}`);let Z=(0,d6.deferred)();try{this.socket.write($,(X)=>{if(X){if(this.options.debug)console.error(`!!! ${(0,d6.render)($)}: ${X}`);return Z.reject(X)}return Z.resolve()})}catch(X){if(this.options.debug)console.error(`!!! ${(0,d6.render)($)}: ${X}`);Z.reject(X)}return Z}send($){this._send($).catch((X)=>{})}async _closed($,Z=!0){if(!this.connected)return;if(this.done){this.socket?.destroy();return}if(this.closeError=$,!$&&this.socket&&Z)try{await this._send(new TextEncoder().encode(""))}catch(X){if(this.options.debug)console.log("transport close terminated with an error",X)}try{if(this.socket)this.socket.removeAllListeners(),this.socket?.destroy(),this.socket=void 0}catch(X){console.log(X)}this.done=!0,this.closedNotification.resolve(this.closeError)}closed(){return this.closedNotification}}dK.NodeTransport=ev$;function e46($){let Z=(0,d6.deferred)();return r46.default.lookup($,{all:!0},(X,Q)=>{if(X){Z.reject(X);return}let G=[];for(let Y of Q)G.push(Y.address);if(G.length===0)G.push($);Z.resolve(G)}),Z}});var Yb$=C((Gb$)=>{Object.defineProperty(Gb$,"__esModule",{value:!0});Gb$.connect=$66;var Zb$=$b$(),Xb$=ho(),Qb$=ho();function $66($={}){if((0,Qb$.hasWsProtocol)($))return Promise.reject(Qb$.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,Xb$.setTransportFactory)({factory:()=>{return new Zb$.NodeTransport},dnsResolveFn:Zb$.nodeResolveHost}),Xb$.NatsConnectionImpl.connect($)}});var Jb$=C((GF)=>{var X66=GF&&GF.__createBinding||(Object.create?function($,Z,X,Q){if(Q===void 0)Q=X;var G=Object.getOwnPropertyDescriptor(Z,X);if(!G||("get"in G?!Z.__esModule:G.writable||G.configurable))G={enumerable:!0,get:function(){return Z[X]}};Object.defineProperty($,Q,G)}:function($,Z,X,Q){if(Q===void 0)Q=X;$[Q]=Z[X]}),Q66=GF&&GF.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))X66(Z,$,X)};Object.defineProperty(GF,"__esModule",{value:!0});GF.connect=void 0;var G66=Yb$();Object.defineProperty(GF,"connect",{enumerable:!0,get:function(){return G66.connect}});Q66(ho(),GF)});function Nb$($){let Z=$?.connectFn??K66,X=null,Q=null,G=!1,Y=!1,J=!1,W=[];function K(){return X!==null&&!X.isClosed()&&!X.isDraining()&&!J}function H(){console.log(`[NatsProvider] fireReady: ${W.length} callbacks`);for(let U of W)try{U()}catch{}}function N(U){(async()=>{for await(let w of U.status())if(w.type==="disconnect")console.log("[NatsProvider] Disconnected"),J=!0;else if(w.type==="reconnect")console.log("[NatsProvider] Reconnected, re-firing ready callbacks"),J=!1,Q=null,H()})().catch(()=>{})}async function F(U,w){let O=0;while(!Y)try{X=await Z({servers:U,timeout:W66,reconnect:!0,maxReconnectAttempts:-1,...w?{authenticator:w}:{}}),console.log(`[NatsProvider] Connected to ${X.getServer()} after ${O} attempt(s)`),Q=null,J=!1,N(X),H();return}catch{O++;let D=HX(J66,Y66,O-1,2,0.5);await y$(D)}}return{init(U,w){if(G)return;G=!0,Y=!1;let O=w?.creds?Wb$.credsAuthenticator(new TextEncoder().encode(w.creds)):void 0;F(U,O).catch(()=>{})},isConnected(){return K()},getConnection(){return K()?X:null},getJetStream(){if(!K())return null;if(!Q)Q=Hb$.jetstream(X);return Q},onReady(U){if(W.push(U),K())try{U()}catch{}},async drain(){if(Y=!0,G=!1,Q=null,J=!1,X){let U=X;X=null,await U.drain().catch(()=>{})}}}}function K66($){return Kb$.connect($)}var Wb$,Kb$,Hb$,Y66=100,J66=3000,W66=3000;var Fb$=B(()=>{E6();Wb$=S(jh(),1),Kb$=S(Jb$(),1),Hb$=S(FB(),1)});function D41($,Z){return`${$}.${Z}`}class L41{cache;constructor($){this.cache=Ug({ttlMs:$?.ttlMs??H66,maxSize:$?.maxSize??N66})}async get($,Z){return this.cache.get(D41($,Z))??null}async set($,Z,X){this.cache.set(D41($,Z),X)}async invalidate($,Z){this.cache.delete(D41($,Z))}teardown(){this.cache.clear()}}var H66=600000,N66=5000;var Ub$=()=>{};function Mj0($,Z){return`${$}:${Z}`}function E41($){let Z=Ug({ttlMs:$?.ttlMs??F66,maxSize:$?.maxSize??U66}),X=$?.getConnection,Q=crypto.randomUUID(),G=new TextEncoder,Y=new TextDecoder,J=null;function W(K,H){let N=X?.();if(!N)return;try{N.publish(wb$,G.encode(JSON.stringify({organizationId:K,keyId:H,originId:Q})))}catch(F){console.warn("[ProviderKeyCache] Publish failed (non-critical):",F)}}return{get(K,H){return Z.get(Mj0(K,H))},set(K,H,N){Z.set(Mj0(K,H),N)},invalidate(K,H){Z.delete(Mj0(K,H)),W(K,H)},start(){if(J)return;let K=X?.();if(!K)return;J=K.subscribe(wb$),(async()=>{for await(let H of J)try{let N=JSON.parse(Y.decode(H.data));if(N.originId===Q)continue;Z.delete(Mj0(N.organizationId,N.keyId))}catch{}})().catch(console.error)},teardown(){J?.unsubscribe(),J=null,Z.clear()}}}var wb$="studio.ai-provider-keys.invalidate",F66=30000,U66=5000;var Ob$=()=>{};class j41{options;subscriptions=[];onCancel=null;encoder=new TextEncoder;originId=crypto.randomUUID();seenMessageIds=new Set;constructor($){this.options=$}async start($){if($)this.onCancel=$;if(this.subscriptions.length>0)return;if(!this.onCancel)return;let Z=this.options.getConnection();if(!Z)return;let X=new TextDecoder;this.subscriptions=Bb$.map((Q)=>Z.subscribe(Q));for(let Q of this.subscriptions)(async()=>{for await(let G of Q)try{let Y=JSON.parse(X.decode(G.data));if(Y.originId===this.originId)continue;if(Y.messageId&&this.hasSeen(Y.messageId))continue;this.onCancel?.(Y.taskId)}catch{}})().catch(console.error)}broadcast($){if(/[.*>\s]/.test($)){console.warn("[NatsCancelBroadcast] Invalid threadId, skipping broadcast");return}this.onCancel?.($);try{let Z=this.options.getConnection();if(!Z)return;let X=this.encoder.encode(JSON.stringify({taskId:$,originId:this.originId,messageId:crypto.randomUUID()}));for(let Q of Bb$)Z.publish(Q,X)}catch(Z){console.warn("[NatsCancelBroadcast] Publish failed (non-critical):",Z)}}publishControlFrame($,Z){}async stop(){for(let $ of this.subscriptions)$.unsubscribe();this.subscriptions=[],this.seenMessageIds.clear(),this.onCancel=null}hasSeen($){if(this.seenMessageIds.has($))return!0;if(this.seenMessageIds.add($),this.seenMessageIds.size>1000){let Z=this.seenMessageIds.values().next().value;if(Z)this.seenMessageIds.delete(Z)}return!1}}var Bb$;var Db$=B(()=>{Bb$=["studio.decopilot.cancel","mesh.decopilot.cancel"]});var Lb$=($)=>{let Z;return()=>Z??=$()},z41,P41;var Eb$=B(()=>{Z5();z41=Lb$(()=>K8.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),P41=Lb$(()=>K8.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function j66(){return{name:IN,subjects:[`${Aw0}.>`],storage:n3.StorageType.File,max_age:B66,max_bytes:L66,max_msgs_per_subject:E66,discard:n3.DiscardPolicy.Old,retention:n3.RetentionPolicy.Limits,duplicate_window:D66,num_replicas:1}}class Pb${chunks=0;encodeMs=0;maxMs=0;bytes=0;windowStart=performance.now();constructor(){setInterval(()=>this.flush(),1e4).unref?.()}record($,Z){if(this.chunks++,this.encodeMs+=$,$>this.maxMs)this.maxMs=$;this.bytes+=Z}flush(){let $=performance.now(),Z=$-this.windowStart;if(this.chunks>0&&Z>0)console.warn(JSON.stringify({msg:"stream-encode-trace",windowMs:Math.round(Z),chunks:this.chunks,encodeMs:Math.round(this.encodeMs),pctOfLoop:+(this.encodeMs/Z*100).toFixed(1),maxChunkMs:+this.maxMs.toFixed(2),mbEncoded:+(this.bytes/1048576).toFixed(2)}));this.chunks=0,this.encodeMs=0,this.maxMs=0,this.bytes=0,this.windowStart=$}}function jb$($){let Z=zb$.headers();for(let[X,Q]of Object.entries($))Z.set(X,Q);return Z}function T66($,Z){let X=0;return{publish(Q,G,Y,J){Q.publish(G,Y,J?{headers:J}:void 0).catch((W)=>{if(X++,O66().add(1,{"org.id":Z??"unknown"}),X===1||X%100===0)console.warn(`[Decopilot] JetStream publish failed for thread ${$} (${X} total):`,W)})},get errorCount(){return X}}}function R66($){if(!($ instanceof Error))return!1;if($.name==="TimeoutError")return!0;return/timeout|no responders|503/i.test($.message)}class A41{options;js=null;jsm=null;constructor($){this.options=$}async init(){let $=this.options.getConnection();if(!$){console.log("[Decopilot] StreamBuffer.init skipped: NATS not connected yet");return}let Z=j66(),X=await gZ(async()=>{let Q=this.options.getJetStreamManager?await this.options.getJetStreamManager():await n3.jetstreamManager($);try{await Q.streams.info(IN),await Q.streams.update(IN,Z)}catch(G){if(G instanceof Error&&G.message.includes("stream not found"))await Q.streams.add(Z);else if(G instanceof Error&&/can ?not change.*storage|storage type/i.test(G.message))await Q.streams.delete(IN),await Q.streams.add(Z);else throw G}return Q},{maxAttempts:5,minTimeout:250,maxTimeout:4000,jitter:0.5,isRetriable:R66});this.js=this.options.getJetStream(),this.jsm=X,console.log(`[Decopilot] StreamBuffer.init ${this.js?"ready":"degraded (js=null)"}`)}pump($,Z,X,Q){let G=this.js;if(!G)return console.warn(`[Decopilot] pump: JetStream client unavailable for thread ${Z}; chunks NOT published to NATS`),Promise.resolve();let Y=T66(Z,Q),J=!1,W=()=>{if(J)return;J=!0;let H=Y3$(Z);G.publish(H.subject,H.data).catch(()=>{})};X.addEventListener("abort",W,{once:!0});let K=(H)=>{let N=performance.now(),F=ri0(H,{runId:Z}),U=performance.now()-N;if(z41().record(U),P41().add(1,{"org.id":Q??"unknown"}),A66?.record(U,F.reduce((w,O)=>w+O.data.length,0)),F.length===0){console.warn(`[Decopilot] dropping oversized stream chunk for thread ${Z}`);return}for(let w of F)Y.publish(G,w.subject,w.data,w.headers?jb$(w.headers):void 0)};return(async()=>{let H=$.getReader(),N=0,F=0,U;try{while(!0){let{done:w,value:O}=await H.read();if(w)break;if(K(O),F++,++N>=64)N=0,await new Promise((D)=>setImmediate(D))}}catch(w){U=w,console.warn(`[Decopilot] stream pump error for thread ${Z}:`,w?.message??w)}finally{if(H.releaseLock(),W(),P66)console.warn(JSON.stringify({msg:"decopilot-stream-diag",event:"pump-done",taskId:Z,publishedChunks:F,publishErrors:Y.errorCount}))}if(U!==void 0)throw U})()}async publishRawChunk($,Z,X){let Q=this.js;if(!Q)return!1;let G=performance.now(),Y=ri0(Z,{runId:$,dedup:X});if(z41().record(performance.now()-G),P41().add(1),Y.length===0)return console.warn(`[Decopilot] dropping oversized raw chunk for thread ${$} (> MAX_CHUNKED_BYTES)`),!0;for(let J of Y)await Q.publish(J.subject,J.data,{...J.headers?{headers:jb$(J.headers)}:{},...J.msgId?{msgID:J.msgId}:{}});return!0}async publishDone($,Z,X){let Q=this.js;if(!Q)return!1;let G=G3$({runId:$,fenceToken:Z,finalSeq:X});return await Q.publish(G.subject,G.data,{msgID:G.msgId}),!0}async createTailStream($,Z,X){let Q=this.js;if(!Q)return console.warn(`[Decopilot] createTailStream: JetStream client unavailable for thread ${$}; no live tail`),null;let G=X?.deliverPolicy==="new"?n3.DeliverPolicy.New:n3.DeliverPolicy.All,Y=X?.closeOnDone??!1,J=GO($),W;try{W=await(await Q.consumers.get(IN,{filter_subjects:J,deliver_policy:G})).consume()}catch(D){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",D?.message??D),null}let N=Mw0({messages:async function*(){try{for await(let D of W)yield{subject:D.subject,data:D.data,headers:D.headers}}finally{W.stop()}}(),onCancel:()=>W.stop()}).pipeThrough(Tw0()).pipeThrough(Rw0()).getReader(),F=!1,U=()=>{if(F)return;F=!0;try{N.releaseLock()}catch{}},w=!1,O=()=>{if(w)return;w=!0,W.stop(),N.cancel().catch(()=>{}),U()};return Z?.addEventListener("abort",O,{once:!0}),new ReadableStream({async pull(D){for(;;){let{done:L,value:E}=await N.read();if(L){O(),D.close();return}let j=E;if(j.kind==="done"){if(Y){O(),D.close();return}continue}D.enqueue(j.chunk);return}},cancel(){O()}})}purge($){if(!this.jsm)return;this.jsm.streams.purge(IN,{filter:GO($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var n3,zb$,w66=($)=>{let Z;return()=>Z??=$()},O66,B66=86400000000000,D66=120000000000,L66=4294967296,E66=500000,z66,P66,A66;var Ab$=B(()=>{E6();ai0();kw0();Iw0();Z5();Eb$();n3=S(FB(),1),zb$=S(jh(),1),O66=w66(()=>K8.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"}));z66=process.env.STREAM_ENCODE_TRACE==="1",P66=process.env.DECOPILOT_STREAM_TRACE==="1";A66=z66?new Pb$:null});function kj0($,Z,X,Q){if(!Q)return!1;return $.emit(Z,BW(X,Q.status,{title:Q.title??void 0,virtualMcpId:Q.virtual_mcp_id??void 0,createdBy:Q.created_by??void 0,triggerId:Q.trigger_id??null,branch:Q.branch??null,harnessId:Q.harness_id??void 0,createdAt:Q.created_at,updatedAt:Q.updated_at})),!0}var Tb$=B(()=>{L8()});class T41{storage;options;timer=null;constructor($,Z={}){this.storage=$;this.options=Z}start(){if(this.timer)return;let $=this.options.intervalMs??300000;this.timer=setInterval(()=>{this.runOnce()},$)}async runOnce(){let $=this.options.staleAfterMs??3600000;try{let Z=await this.storage.sweepAbandoned($);if(Z>0)console.log(`[async-research-sweeper] marked ${Z} stale jobs as abandoned`);return Z}catch(Z){return console.error("[async-research-sweeper] sweep failed",Z),0}}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}function V66($){return $ instanceof LQ}class R41{taskBoard;contextFactory;billing;options;timer=null;running=!1;cursor=null;constructor($,Z,X,Q={}){this.taskBoard=$;this.contextFactory=Z;this.billing=X;this.options=Q}start(){if(this.timer)return;let $=this.options.intervalMs??I66;this.timer=setInterval(()=>{this.runOnce()},$),this.timer.unref()}async runOnce(){if(this.running)return 0;this.running=!0;let $=0;try{let Z=this.options.batchSize??M66,X=this.options.itemIntervalMs??q66,Q=await this.taskBoard.listItemsPendingReview(Z,this.cursor,new Date(Date.now()-X)),G=Q.at(-1);this.cursor=Q.length===Z&&G?{updatedAt:G.updatedAt,id:G.id}:null;for(let{id:Y,organizationId:J}of Q)try{if(await this.reconcileItem(Y,J))$++}catch(W){console.error(`[task-board-review-sweeper] ${Y} failed`,W)}await this.reapNeverStartedThreads(Z),$+=await this.dispatchDueRetries(Z),await this.reactToUnhandledFailures(Z)}catch(Z){console.error("[task-board-review-sweeper] sweep failed",Z)}finally{this.running=!1}return $}async reapNeverStartedThreads($){try{let Z=await this.taskBoard.failNeverStartedLinkedThreads($,new Date(Date.now()-ZY$),Cn0);for(let X of Z)console.warn(`[task-board-review-sweeper] failed never-started thread ${X.threadId} on ${X.itemId}`)}catch(Z){console.error("[task-board-review-sweeper] reaping failed",Z)}}async reactToUnhandledFailures($){let Z=await this.taskBoard.listItemsStuckAfterFailure($,new Date(Date.now()-S66));for(let{id:X,organizationId:Q,threadId:G}of Z)try{console.warn(`[task-board-review-sweeper] reacting to an unhandled failure on ${X}`),await ji0(this.taskBoard,G,Q),await zi0(this.taskBoard,this.billing,G,Q)}catch(Y){console.error(`[task-board-review-sweeper] unhandled-failure reaction for ${X} failed`,Y)}}async dispatchDueRetries($){let Z=0,X=await this.taskBoard.listItemsDueForRetry($,new Date);for(let{id:Q,organizationId:G,attempts:Y}of X)try{if(!await this.taskBoard.claimDueRetry(Q,G,new Date))continue;let J=await this.taskBoard.getById(Q,G);if(!J||J.status!=="in_progress"||J.assigneeId!==d4)continue;let W=await this.contextFactory(G,J.assignedBy??J.createdBy);if(!W)continue;await qN(W,J,{runClass:"retry"}),Z++,console.warn(`[task-board-review-sweeper] re-dispatched ${Q} after a failure (attempt ${Y})`)}catch(J){if(console.error(`[task-board-review-sweeper] retry dispatch for ${Q} failed`,J),V66(J)){await this.returnToTodo(Q,G,J instanceof Error?J.message:String(J));continue}await this.taskBoard.scheduleRunRetry(Q,G,Y,new Date(Date.now()+k66)).catch((W)=>console.error(`[task-board-review-sweeper] re-arming ${Q} failed`,W))}return Z}async returnToTodo($,Z,X){try{let Q=await this.taskBoard.getById($,Z);if(!Q||Q.status!=="in_progress")return;let G=await this.taskBoard.returnToTodoAfterFailure($,Z,Q.updatedBy);if(!G)return;await this.taskBoard.recordActivity({taskBoardItemId:$,action:"status_changed",actorId:null,data:{from:"in_progress",to:"todo",reason:X}}).catch(()=>{}),x4(Z,G)}catch(Q){console.error(`[task-board-review-sweeper] returning ${$} to todo failed`,Q)}}async reconcileItem($,Z){let X=await this.taskBoard.getById($,Z);if(!X)return!1;if(X.status!=="in_review"||X.assigneeId!==d4)return!1;await this.taskBoard.markSwept($,Z);let Q=await this.taskBoard.listPrs($,Z);if(Q.length===0)return!1;let G=await this.contextFactory(Z,X.assignedBy??X.createdBy);if(!G)return!1;if(await UW$(G,X))return!0;let Y=await Promise.all(Q.map(async(J)=>({...J,...await kn0(G,Z,J)})));if(Y.every((J)=>J.state===null))console.warn(`[task-board-review-sweeper] ${$}: no live PR state from GitHub (${Y.length} PR(s)) \u2014 proceeding on unknown`);if(!Mn0(Y))return!1;return await bw0(G,X),!0}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}var I66=60000,q66=300000,M66=50,k66=60000,S66=120000;var Rb$=B(()=>{qZ();zn0();YO();lw0();e9();G3();_n0();gx()});import{readdir as C66,rm as Sj0}from"fs/promises";import{join as Vj0}from"path";async function Cj0($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-_66),Z.setUTCHours(0,0,0,0);let X=0;try{let Q=await nC($);for(let G of Q)if(/^\d{4}$/.test(G))X+=await Ib$($,G,Z);else if(!G.startsWith(".")){let Y=Vj0($,G),J=await nC(Y);for(let K of J){if(!/^\d{4}$/.test(K))continue;X+=await Ib$(Y,K,Z)}if((await nC(Y)).length===0)await Sj0(Y,{recursive:!0,force:!0})}}catch(Q){console.warn("monitoring retention cleanup failed:",Q)}return X}async function Ib$($,Z,X){let Q=0,G=Vj0($,Z),Y=await nC(G);for(let W of Y){if(!/^\d{2}$/.test(W))continue;let K=Vj0(G,W),H=await nC(K);for(let F of H){if(!/^\d{2}$/.test(F))continue;let U=new Date(`${Z}-${W}-${F}T00:00:00Z`);if(isNaN(U.getTime()))continue;if(U<X){let w=Vj0(K,F);await Sj0(w,{recursive:!0,force:!0}),Q++}}if((await nC(K)).length===0)await Sj0(K,{recursive:!0,force:!0})}if((await nC(G)).length===0)await Sj0(G,{recursive:!0,force:!0});return Q}async function nC($){try{return(await C66($)).filter((X)=>!X.startsWith("."))}catch{return[]}}var _66=30;var I41=()=>{};import{DBOS as q41,SchedulerMode as v66}from"@dbos-inc/dbos-sdk";async function f66(){let $=[KJ(),pC(),iK()],Z=0;for(let X of $)try{Z+=await Cj0(X)}catch(Q){console.error("[monitoring-retention] cleanup failed:",Q)}return console.log(`[monitoring-retention] deleted ${Z} day-dir(s) across ${$.length} signal dir(s)`),{deleted:Z,dirs:$.length}}async function x66($,Z){await q41.runStep(()=>f66(),{name:"monitoringRetention"})}function Mb$(){if(qb$)return;qb$=!0;let $=q41.registerWorkflow(x66,{name:"monitoringRetentionWorkflow"});q41.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:b66,mode:v66.ExactlyOncePerIntervalWhenActive})}var b66="23 4 * * *",qb$=!1;var kb$=B(()=>{rQ();I41()});function Sb$($){return async(Z,X)=>{let Q=await $.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["member.role","organization.id as orgId","organization.slug as orgSlug","organization.name as orgName"]).where("member.userId","=",X).where("member.organizationId","=",Z).executeTakeFirst();if(!Q)return console.warn(`[automationContextFactory] User ${X} not found in org ${Z} \u2014 returning null`),null;let G=await xK.create();G.auth.user={id:X,role:Q.role},G.organization={id:Q.orgId,slug:Q.orgSlug,name:Q.orgName};let Y=await m11($.db,Z,Q.role);return G.boundAuth=d11({auth:G.authInstance,headers:new Headers,role:Q.role,permissions:Y,userId:X}),G.access=new dD(X,void 0,G.boundAuth,Q.role,"self"),Rg(G,{id:Q.orgId,slug:Q.orgSlug}),G}}var Vb$=B(()=>{mD();Lg()});function y66(){return{services:[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}],migrationsStatus:"pending",serverUrl:null,logs:[]}}function h66(){for(let $ of g66)$()}function Cb$($){let Z=[...M41.logs,$];M41={...M41,logs:Z.length>500?Z.slice(-500):Z},h66()}function k41(){return u66}var M41,g66,u66=!1;var S41=B(()=>{M41=y66(),g66=new Set});import{EventEmitter as c66}from"events";var V41;var _b$=B(()=>{S41();V41=new c66;V41.on("request",($)=>{Cb$($)})});function vb$(){return async($,Z)=>{let X=Date.now(),Q=$.req.method,G=$.req.path;if(G==="/api/auth/get-session"||G.includes("favicon")){await Z();return}let Y="",J=!1;if(G.startsWith("/mcp")&&Q==="POST"){J=!0;try{if($.req.header("Content-Type")?.includes("application/json")){let U=await $.req.raw.clone().json();if(U.method==="tools/call"&&U.params?.name){let w=tg(U.params.name),O=U.params.arguments||{},D=Object.keys(O).map((E)=>tg(E)),L=D.length>0?D.slice(0,3).join(",")+(D.length>3?"\u2026":""):"";Y=`${e6.tool}${w}${e6.dim}(${L})${e6.reset}`}else if(U.method)Y=`${e6.dim}${tg(U.method)}${e6.reset}`}}catch{}}let W=tg(G);if(G.startsWith("/mcp/conn_")){let N=G.split("/")[2]??"";W=`/mcp/${e6.mcp}${tg(N.slice(0,12))}\u2026${e6.reset}`}else if(G==="/mcp")W=`${e6.mcp}/mcp${e6.reset}`;else if(G==="/mcp/registry")W=`${e6.mcp}/mcp/registry${e6.reset}`;let K=d66(Q),H=J?"\u25C0":"\u2190";if(!k41())console.log(`${e6.dim}${H}${e6.reset} ${K}${Q}${e6.reset} ${W}${Y?` ${Y}`:""}`);try{await Z()}finally{let N=Date.now()-X,F=$.res.status,U=l66(F),w=N<1000?`${N}ms`:`${(N/1000).toFixed(1)}s`,O=J?"\u25B6":"\u2192";if(!k41())console.log(`${e6.dim}${O}${e6.reset} ${K}${Q}${e6.reset} ${W}${Y?` ${Y}`:""} ${U}${F}${e6.reset} ${e6.duration}${w}${e6.reset}`);V41.emit("request",{method:Q,path:tg(G),status:F,duration:N,timestamp:new Date})}}}var e6,l66=($)=>{if($>=500)return e6.serverError;if($>=400)return e6.clientError;if($>=300)return e6.redirect;return e6.ok},d66=($)=>{return e6[$]||e6.reset},tg=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var bb$=B(()=>{S41();_b$();e6={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 gb$}from"crypto";import{mkdir as m66,readdir as i66,rm as fb$,stat as hb$}from"fs/promises";import{join as _41,relative as n66}from"path";import{z as E$}from"zod";function cb$($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return _41(p66,Z)}function lb$($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function C41($,Z){let X=cb$($),Q=lb$(Z);return _41(X,Q)}function t66($,Z,X,Q){let G=c0().encryptionKey||"dev-secret",Y=`${$}:${Z}:${X}:${Q}`;return gb$("sha256",G).update(Y).digest("hex")}function yb$($,Z,X,Q,G){let Y=Math.floor(Date.now()/1000)+Q,J=t66(Z,X,Y,G),W=new URL(`/api/dev-assets/${Z}/${lb$(X)}`,$);return W.searchParams.set("expires",Y.toString()),W.searchParams.set("signature",J),W.searchParams.set("method",G),W.toString()}function db$($,Z,X){let Q=`${$}:${Z.getTime()}:${X}`;return`"${gb$("md5","etag").update(Q).digest("hex")}"`}async function mb$($,Z,X,Q,G){try{let Y=await i66($,{withFileTypes:!0});for(let J of Y){let W=_41($,J.name),H=n66(Z,W).replace(/\\/g,"/");if(X&&!H.startsWith(X))continue;if(J.isDirectory())if(Q){let N=H+"/";if(!X||N.startsWith(X)){if(!(X?H.slice(X.length):H).includes("/"))G.commonPrefixes.add(N)}}else await mb$(W,Z,X,Q,G);else if(J.isFile()){if(Q&&X){let N=H.slice(X.length);if(N.includes(Q)){let F=N.indexOf(Q),U=X+N.slice(0,F+1);G.commonPrefixes.add(U);continue}}try{let N=await hb$(W);G.objects.push({key:H,size:N.size,lastModified:N.mtime.toISOString(),etag:db$(W,N.mtime,N.size)})}catch{}}}}catch{}}function ib$($,Z){let Q=r($).id;return[{name:"LIST_OBJECTS",description:"List objects in the local assets directory with pagination support",inputSchema:E$.object({prefix:E$.string().optional(),maxKeys:E$.number().optional().default(1000),continuationToken:E$.string().optional(),delimiter:E$.string().optional()}),outputSchema:E$.object({objects:E$.array(E$.object({key:E$.string(),size:E$.number(),lastModified:E$.string(),etag:E$.string()})),nextContinuationToken:E$.string().optional(),isTruncated:E$.boolean(),commonPrefixes:E$.array(E$.string()).optional()}),handler:async(G)=>{let Y=G,J=Y.prefix||"",W=Y.maxKeys??1000,K=Y.delimiter,H=Y.continuationToken,N=cb$(Q);await m66(N,{recursive:!0});let F={objects:[],commonPrefixes:new Set};await mb$(N,N,J,K,F),F.objects.sort((L,E)=>L.key.localeCompare(E.key));let U=0;if(H){if(U=F.objects.findIndex((L)=>L.key>H),U===-1)U=F.objects.length}let w=F.objects.slice(U,U+W),O=U+W<F.objects.length,D=O?w[w.length-1]?.key:void 0;return{objects:w,isTruncated:O,nextContinuationToken:D,commonPrefixes:Array.from(F.commonPrefixes).sort()}}},{name:"GET_OBJECT_METADATA",description:"Get metadata for a file in the local assets directory",inputSchema:E$.object({key:E$.string()}),outputSchema:E$.object({contentType:E$.string().optional(),contentLength:E$.number(),lastModified:E$.string(),etag:E$.string(),metadata:E$.record(E$.string(),E$.string()).optional()}),handler:async(G)=>{let Y=G,J=C41(Q,Y.key),W=await hb$(J);return{contentType:I$1(Y.key),contentLength:W.size,lastModified:W.mtime.toISOString(),etag:db$(J,W.mtime,W.size)}}},{name:"GET_PRESIGNED_URL",description:"Generate a presigned URL for downloading a file from local storage",inputSchema:E$.object({key:E$.string(),expiresIn:E$.number().optional()}),outputSchema:E$.object({url:E$.string(),expiresIn:E$.number()}),handler:async(G)=>{let Y=G,J=Y.expiresIn??xb$;return{url:yb$(Z,Q,Y.key,J,"GET"),expiresIn:J}}},{name:"PUT_PRESIGNED_URL",description:"Generate a presigned URL for uploading a file to local storage",inputSchema:E$.object({key:E$.string(),expiresIn:E$.number().optional(),contentType:E$.string().optional()}),outputSchema:E$.object({url:E$.string(),expiresIn:E$.number()}),handler:async(G)=>{let Y=G,J=Y.expiresIn??xb$;return{url:yb$(Z,Q,Y.key,J,"PUT"),expiresIn:J}}},{name:"DELETE_OBJECT",description:"Delete a single file from local storage",inputSchema:E$.object({key:E$.string()}),outputSchema:E$.object({success:E$.boolean(),key:E$.string()}),handler:async(G)=>{let Y=G,J=C41(Q,Y.key);try{return await fb$(J),{success:!0,key:Y.key}}catch{return{success:!1,key:Y.key}}}},{name:"DELETE_OBJECTS",description:"Delete multiple files from local storage",inputSchema:E$.object({keys:E$.array(E$.string()).max(1000)}),outputSchema:E$.object({deleted:E$.array(E$.string()),errors:E$.array(E$.object({key:E$.string(),message:E$.string()}))}),handler:async(G)=>{let Y=G,J=[],W=[];return await Promise.all(Y.keys.map(async(K)=>{let H=C41(Q,K);try{await fb$(H),J.push(K)}catch(N){W.push({key:K,message:N instanceof Error?N.message:"Unknown error"})}})),{deleted:J,errors:W}}}]}async function v41($,Z,X){let Q=ib$(Z,X),G=new AW({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:Y5});for(let J of Q){let W="shape"in J.inputSchema?J.inputSchema.shape:E$.object({}).shape,K=J.outputSchema&&"shape"in J.outputSchema?J.outputSchema.shape:E$.object({}).shape;G.registerTool(J.name,{description:J.description??"",inputSchema:W,outputSchema:K,annotations:J.annotations,_meta:J._meta},async(H)=>{try{let N=await J.handler(H);return{content:[{type:"text",text:JSON.stringify(N)}],structuredContent:N}}catch(N){return{content:[{type:"text",text:`Error: ${N.message}`}],isError:!0}}})}let Y=new lX({enableJsonResponse:$.headers.get("Accept")?.includes("application/json")??!1});return await G.connect(Y),lY(G,Y,$,"mcp:dev-assets")}async function nb$($,Z,X,Q){let Y=ib$(X,Q).find((J)=>J.name===$);if(!Y)return{content:[{type:"text",text:`Tool not found: ${$}`}],isError:!0};try{let J=await Y.handler(Z);return{content:[{type:"text",text:JSON.stringify(J)}]}}catch(J){return{content:[{type:"text",text:J instanceof Error?J.message:String(J)}],isError:!0}}}var p66="./data/assets",xb$=3600,ub$,pb$;var tb$=B(()=>{S$();dx();y8();mc();bV();RX();lE0();ub$=new B1;ub$.all("/",async($)=>{let Z=$.get("studioContext"),X=new URL($.req.url),Q=`${X.protocol}//${X.host}`;return v41($.req.raw,Z,Q)});pb$=ub$});var ob$={};N4(ob$,{mountDevRoutes:()=>o66});function o66($,Z){$.all("/mcp/:connectionId{.*_dev-assets$}",Z,async(Q)=>{let G=Q.get("studioContext"),Y=new URL(Q.req.url),J=`${Y.protocol}//${Y.host}`;return v41(Q.req.raw,G,J)}),$.all("/mcp/:connectionId{.*_dev-assets$}/call-tool/:toolName",Z,async(Q)=>{let G=Q.get("studioContext"),Y=new URL(Q.req.url),J=`${Y.protocol}//${Y.host}`,W=Q.req.param("toolName");if(!W)return Q.json({error:"Missing tool name"},400);let K=await Q.req.json(),H=await nb$(W,K,G,J);if(H.isError)return Q.json(H.content,500);return Q.json(H.content)}),$.use("/mcp/dev-assets",Z),$.route("/mcp/dev-assets",pb$);let X=new B1;X.use("*",d3({mountPath:"/api/dev-assets"})),X.route("/",cE0({orgFromPath:!1})),$.route("/api/dev-assets",X)}var rb$=B(()=>{y8();L$1();lE0();tb$()});import{sql as r66}from"kysely";import{randomUUID as ab$}from"crypto";import{z as a66}from"zod";async function e66($){let Z=new Date().toISOString(),X=ab$(),Q=h4.SELF($.organizationId),G="registry.publish_request.created",Y={requestId:$.request.id,requestedId:$.request.requested_id,title:$.request.title,status:$.request.status,createdAt:$.request.created_at,requester:{name:$.request.requester_name,email:$.request.requester_email}};await $.db.insertInto("events").values({id:X,organization_id:$.organizationId,type:"registry.publish_request.created",source:Q,specversion:"1.0",subject:$.request.id,time:Z,datacontenttype:"application/json",dataschema:null,data:JSON.stringify(Y),cron:null,status:"pending",attempts:0,last_error:null,next_retry_at:null,created_at:Z,updated_at:Z}).execute();let J=await $.db.selectFrom("event_subscriptions").select(["id"]).where("organization_id","=",$.organizationId).where("enabled","=",1).where("event_type","=","registry.publish_request.created").where((W)=>W.or([W("publisher","is",null),W("publisher","=",Q)])).execute();if(J.length>0)await $.db.insertInto("event_deliveries").values(J.map((W)=>({id:ab$(),event_id:X,subscription_id:W.id,status:"pending",attempts:0,last_error:null,delivered_at:null,next_retry_at:null,created_at:Z}))).execute();try{await r66`SELECT
|
|
2732
2732
|
pg_notify('studio_events', ${X}),
|