decocms 4.257.0 → 4.258.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client/assets/{AlertCircle-MgK6rFJy.js → AlertCircle-_30pGBWT.js} +1 -1
- package/dist/client/assets/{AreaChart-CnjRJv5P.js → AreaChart-Cz1wsTF4.js} +1 -1
- package/dist/client/assets/{ArrowLeft-DX7Bn2-l.js → ArrowLeft-BG4Mw2Ae.js} +1 -1
- package/dist/client/assets/{ArrowUp-D4UKzKai.js → ArrowUp-BdapLbfJ.js} +1 -1
- package/dist/client/assets/{Check-Tzx-6NLY.js → Check-J0-xK3ZY.js} +1 -1
- package/dist/client/assets/{CheckCircle-B0Tr0-oe.js → CheckCircle-DMOo3M8i.js} +1 -1
- package/dist/client/assets/{ChevronDown-D9BVHe6J.js → ChevronDown-DvuP5N49.js} +1 -1
- package/dist/client/assets/{ChevronRight-DeO1Dzjs.js → ChevronRight-CFiygif7.js} +1 -1
- package/dist/client/assets/{ChevronSelectorVertical-BbGSpLv4.js → ChevronSelectorVertical-ZtKp5NjO.js} +1 -1
- package/dist/client/assets/{ChevronUp-DAPTroaq.js → ChevronUp-CPKSBK8g.js} +1 -1
- package/dist/client/assets/{Copy01-CMUDSGm7.js → Copy01-Dxgox61I.js} +1 -1
- package/dist/client/assets/{CreditCard01-DV-Ww5Kk.js → CreditCard01-C45zlgVh.js} +1 -1
- package/dist/client/assets/{DotsVertical-C9vFbY1N.js → DotsVertical-BY-SglFi.js} +1 -1
- package/dist/client/assets/{Download01-Xx-xeXwI.js → Download01-DgrQ-HFT.js} +1 -1
- package/dist/client/assets/{Eye-ClVY3BSf.js → Eye-Chpb8Lul.js} +1 -1
- package/dist/client/assets/{FilterLines-BmE4OGHF.js → FilterLines-Dkn_GDRF.js} +1 -1
- package/dist/client/assets/{Globe01-w9txHU-f.js → Globe01--IpOZ3Ga.js} +1 -1
- package/dist/client/assets/{Globe04-B_2EJfhH.js → Globe04-DsGRWpNn.js} +1 -1
- package/dist/client/assets/{HardDrive-x4noqJb7.js → HardDrive-DXWN5SLs.js} +1 -1
- package/dist/client/assets/{Key01-DR9599fL.js → Key01-CVkVY_oy.js} +1 -1
- package/dist/client/assets/{LinkExternal01-qKi4vPVH.js → LinkExternal01-DfJizRE6.js} +1 -1
- package/dist/client/assets/{LockUnlocked01-BjuZUhwO.js → LockUnlocked01-OSew-fXk.js} +1 -1
- package/dist/client/assets/{LogOut01-DHi3PQ4V.js → LogOut01-76V-wAP3.js} +1 -1
- package/dist/client/assets/{Monitor01-D7wLpXee.js → Monitor01-CY4vhdmW.js} +1 -1
- package/dist/client/assets/{Palette-BtAdlf00.js → Palette-DCJlNkup.js} +1 -1
- package/dist/client/assets/{Play-3GrKIKx7.js → Play-DiCptBuz.js} +1 -1
- package/dist/client/assets/{Plus-oFLTKuXy.js → Plus-DXhK7kSG.js} +1 -1
- package/dist/client/assets/{SearchLg-BjQQuwPE.js → SearchLg-DBfKIB2g.js} +1 -1
- package/dist/client/assets/{SearchMd-Df7s_XFz.js → SearchMd-COxhsdmX.js} +1 -1
- package/dist/client/assets/{Settings02-B1Am10h6.js → Settings02-DMEZUn_5.js} +1 -1
- package/dist/client/assets/{Share07-Dhl_59kQ.js → Share07-DSSSwtWw.js} +1 -1
- package/dist/client/assets/{Shield01-DlkAsbHq.js → Shield01-DK4M9lzF.js} +1 -1
- package/dist/client/assets/{Stars01-DL4DGH6P.js → Stars01-5BvbZFnS.js} +1 -1
- package/dist/client/assets/{Stars02-D5Lb7yWx.js → Stars02-Bk-Ua2G4.js} +1 -1
- package/dist/client/assets/{Sun-B5TchUVg.js → Sun-CMA9NwTu.js} +1 -1
- package/dist/client/assets/{SwitchHorizontal01-CmzHShp0.js → SwitchHorizontal01-DOXL_svp.js} +1 -1
- package/dist/client/assets/{Tool01-HH3Va9Ui.js → Tool01-ENeyamfh.js} +1 -1
- package/dist/client/assets/{Tool02-CO2hgW1D.js → Tool02-CumQOiKQ.js} +1 -1
- package/dist/client/assets/{Trash01-D9p76GQy.js → Trash01-CwF3hSvi.js} +1 -1
- package/dist/client/assets/{TrendUp01-BieDtvDG.js → TrendUp01-DgMZ5Nm3.js} +1 -1
- package/dist/client/assets/{Upload01-BxZ_b5jA.js → Upload01-CfUghlWr.js} +1 -1
- package/dist/client/assets/{User01-BfHkMR9V.js → User01-R1LXhLUK.js} +1 -1
- package/dist/client/assets/{UserSquare-TYz_JmB6.js → UserSquare-Cnk9QP34.js} +1 -1
- package/dist/client/assets/{Users01-C7UeqmXQ.js → Users01-DmcXkqyk.js} +1 -1
- package/dist/client/assets/{Users03-Cu4PLaG5.js → Users03-DdrqspVi.js} +1 -1
- package/dist/client/assets/{XCircle-Dzy3DNyB.js → XCircle-D79LCIH8.js} +1 -1
- package/dist/client/assets/{XClose-O6GvTE7T.js → XClose-B7XMR6ej.js} +1 -1
- package/dist/client/assets/{YAxis-CNPh7FVo.js → YAxis-fR4OMDhi.js} +1 -1
- package/dist/client/assets/{Zap-GDWceml_.js → Zap-rMhQB9Wp.js} +1 -1
- package/dist/client/assets/{ZapSquare-BPFOhrFI.js → ZapSquare-CbIBumck.js} +1 -1
- package/dist/client/assets/{access-gate-BPYEM5Y3.js → access-gate-DpF8qD4G.js} +1 -1
- package/dist/client/assets/{agent-icon-CdaB92Bk.js → agent-icon-D84WdiGD.js} +1 -1
- package/dist/client/assets/{agents-list-R2JpKo57.js → agents-list-BX3L3Mt2.js} +1 -1
- package/dist/client/assets/{ai-providers-L5HgpU6b.js → ai-providers-DWe3DAPA.js} +1 -1
- package/dist/client/assets/{alert-B62cOWfi.js → alert-Bl-9k30g.js} +1 -1
- package/dist/client/assets/{alert-dialog-BELt372V.js → alert-dialog-Cg6aS5kf.js} +1 -1
- package/dist/client/assets/{api-keys-Cpy5a49M.js → api-keys-CjQmjg7r.js} +1 -1
- package/dist/client/assets/app-editor-_nhM9myb.js +1 -0
- package/dist/client/assets/{auth-CqRM9Cwv.js → auth-BpqElpeo.js} +1 -1
- package/dist/client/assets/{auth-catchall-Dp6Wcx2X.js → auth-catchall-BdvapW3E.js} +1 -1
- package/dist/client/assets/{auth-entry-e6IPJH0S.js → auth-entry-Dd6Fzb1C.js} +1 -1
- package/dist/client/assets/{auth-split-layout-BdVrHWdV.js → auth-split-layout-BYvpAAgU.js} +1 -1
- package/dist/client/assets/{authenticate-and-persist-oauth-C5wX6I3x.js → authenticate-and-persist-oauth-xNfzsZss.js} +1 -1
- package/dist/client/assets/{automation-list-row-C-9VZssr.js → automation-list-row-CQI6DJha.js} +1 -1
- package/dist/client/assets/{automation-runs-qEug9Ak9.js → automation-runs-BaGgJnft.js} +1 -1
- package/dist/client/assets/{automations-CWqrHAni.js → automations-BQ5SrAMk.js} +1 -1
- package/dist/client/assets/{avatar-0GVyWR3l.js → avatar-DBar1H-6.js} +1 -1
- package/dist/client/assets/{badge-Bl2Sbf7n.js → badge-DTUiUB9r.js} +1 -1
- package/dist/client/assets/{block-document-D5JSD0db.js → block-document-CucEJ43N.js} +1 -1
- package/dist/client/assets/{buckets-or_aQJSi.js → buckets-CcQYpxoN.js} +1 -1
- package/dist/client/assets/bulk-category-panel-DasAa172.js +1 -0
- package/dist/client/assets/{capability-load-error-t8LRA0Hy.js → capability-load-error-37UDVQDS.js} +1 -1
- package/dist/client/assets/{cards-D8G9fB42.js → cards-BAEKCjke.js} +1 -1
- package/dist/client/assets/category-editor-bXjIPMez.js +1 -0
- package/dist/client/assets/{chart-BvmNLOfG.js → chart-DHQZYcEv.js} +1 -1
- package/dist/client/assets/{chat-context-CK1Ne8F9.js → chat-context-DS5lhQ9H.js} +1 -1
- package/dist/client/assets/{checkbox-BEN53_3E.js → checkbox-D-psOHj4.js} +1 -1
- package/dist/client/assets/{choose-editor-BKe79Veo.js → choose-editor-CG48RFp8.js} +1 -1
- package/dist/client/assets/{cli-auth-success-CGc4B5EU.js → cli-auth-success-C0f1LsUi.js} +1 -1
- package/dist/client/assets/{collection-detail-D14uMRoe.js → collection-detail-BP7UK-MK.js} +1 -1
- package/dist/client/assets/{collection-display-button-BTE0zXO2.js → collection-display-button-tBVmXQsq.js} +1 -1
- package/dist/client/assets/{collection-search-C216hrko.js → collection-search-0aLcZYZK.js} +1 -1
- package/dist/client/assets/{collection-table-wrapper-EAzc7U_u.js → collection-table-wrapper-DwqMpSIr.js} +1 -1
- package/dist/client/assets/{collection-tabs-23b63MxX.js → collection-tabs-DDz5Lg-b.js} +1 -1
- package/dist/client/assets/{command-CNPuDGGc.js → command-BUaxyKoC.js} +1 -1
- package/dist/client/assets/commerce-onboarding-3pUkhDH7.js +1 -0
- package/dist/client/assets/{connect-eZBHC2wZ.js → connect-ebtC0VFe.js} +1 -1
- package/dist/client/assets/{connection-CnvnWay9.js → connection-DI4zKMxo.js} +1 -1
- package/dist/client/assets/{connection-card-DeiHmaSm.js → connection-card-bhSdlAVJ.js} +1 -1
- package/dist/client/assets/{connection-detail-DqGXi5pp.js → connection-detail-Co4q2PY9.js} +1 -1
- package/dist/client/assets/{connection-form-helpers-CIsM3RRV.js → connection-form-helpers-C-ofttgT.js} +1 -1
- package/dist/client/assets/{connections-DrL4KJHS.js → connections-FondyEgG.js} +1 -1
- package/dist/client/assets/{decopilot-sse-pool-SbDkw5ER.js → decopilot-sse-pool-ol31y3r3.js} +1 -1
- package/dist/client/assets/{dialog-B7yZX27U.js → dialog-CVINTF9V.js} +1 -1
- package/dist/client/assets/{domain-settings-2fmH_7Cw.js → domain-settings-DTLAz2qf.js} +1 -1
- package/dist/client/assets/{drawer-DImPd-j5.js → drawer-DsvXRGxO.js} +1 -1
- package/dist/client/assets/{dropdown-menu-CBHbaudc.js → dropdown-menu-ChFIeJB-.js} +1 -1
- package/dist/client/assets/{empty-state-DO0JozNI.js → empty-state-pmTb8ZpB.js} +1 -1
- package/dist/client/assets/{extract-connection-data-DUA_A_s7.js → extract-connection-data-DwW8yiTw.js} +1 -1
- package/dist/client/assets/file-explorer-DEX_dKuU.js +2 -0
- package/dist/client/assets/{file-type-icon-DMXiyu5x.js → file-type-icon-CgXPU_u_.js} +1 -1
- package/dist/client/assets/{form-DhkBq5_z.js → form-DvwnBqq2.js} +1 -1
- package/dist/client/assets/{general-BK0moH42.js → general-DvxDSdTC.js} +1 -1
- package/dist/client/assets/{github-repo-picker-hVYpu2Ll.js → github-repo-picker-NBwb0kXn.js} +1 -1
- package/dist/client/assets/{hooks-Cg_8nogy.js → hooks-DqLH5fG8.js} +1 -1
- package/dist/client/assets/{index-CFfOnlsV.js → index-BBtLfsp_.js} +55 -55
- package/dist/client/assets/{index-Btei8YbQ.js → index-BmZnSU7r.js} +1 -1
- package/dist/client/assets/index-Cb6DwMlt.css +1 -0
- package/dist/client/assets/{index-5_-2aq1p.js → index-Ci_YsAOC.js} +1 -1
- package/dist/client/assets/{index-CMWq1ljZ.js → index-Crul6bek.js} +1 -1
- package/dist/client/assets/{index-JocU1Gha.js → index-CtGD2wKh.js} +1 -1
- package/dist/client/assets/{index-DJTztWym.js → index-D2FATMaO.js} +1 -1
- package/dist/client/assets/{index-CEKFbA9_.js → index-DA2U5dum.js} +1 -1
- package/dist/client/assets/{index-BJqGJbkE.js → index-DUPCi1d_.js} +18 -18
- package/dist/client/assets/{index-BsCL_YAd.js → index-Di-QplVi.js} +1 -1
- package/dist/client/assets/{index-CR0LSAfK.js → index-HERR9oJN.js} +1 -1
- package/dist/client/assets/{index-redirect-CBnvtXQ-.js → index-redirect-BVxETr2V.js} +1 -1
- package/dist/client/assets/{infra-billing-6f67bnm7.js → infra-billing-ptI5naQS.js} +1 -1
- package/dist/client/assets/{input-CcN5-EJP.js → input-BFCpZ4aB.js} +1 -1
- package/dist/client/assets/{integration-icon-Wz-0mFjd.js → integration-icon-CGpWdoCk.js} +1 -1
- package/dist/client/assets/{invite-member-dialog-bFE1zECR.js → invite-member-dialog-BiioFzx9.js} +1 -1
- package/dist/client/assets/{label-q3nr5GSV.js → label-O58OnlIY.js} +1 -1
- package/dist/client/assets/{layout-CCrdj8q8.js → layout-D_rd02Si.js} +1 -1
- package/dist/client/assets/{login-CLtGktfR.js → login-DcjOqRVi.js} +1 -1
- package/dist/client/assets/{mcp-oauth-CrKWETeq.js → mcp-oauth-oXON4om2.js} +1 -1
- package/dist/client/assets/{members-ioCwoU0p.js → members-D5W0TMYq.js} +1 -1
- package/dist/client/assets/{monaco-editor-DHKHFR6w.js → monaco-editor-BOCScZXz.js} +1 -1
- package/dist/client/assets/{monitoring-stats-row-BWRWEuoq.js → monitoring-stats-row-bUBwaOBV.js} +1 -1
- package/dist/client/assets/{multi-select-BO4ZEdt6.js → multi-select-BqR8FTOV.js} +1 -1
- package/dist/client/assets/{oauth-callback-Co5e2zWc.js → oauth-callback-Biz8WHWN.js} +1 -1
- package/dist/client/assets/{oauth-callback-ai-provider-NjZoGWKG.js → oauth-callback-ai-provider-DZtjbFyZ.js} +1 -1
- package/dist/client/assets/{onboarding-8Kxtp9Ie.js → onboarding-wdGHZtTo.js} +1 -1
- package/dist/client/assets/{org-layout-Oe213N11.js → org-layout-CZRxOOkI.js} +1 -1
- package/dist/client/assets/{organization-choice-DRFdG1qw.js → organization-choice-huHieUlo.js} +1 -1
- package/dist/client/assets/{orgs-DrT_VFf6.js → orgs-ugwf6C-5.js} +1 -1
- package/dist/client/assets/{page-seo-form-C0hCZXh2.js → page-seo-form-DxwgxGKr.js} +1 -1
- package/dist/client/assets/{popover-DeZPT85K.js → popover-C7KEFAkj.js} +1 -1
- package/dist/client/assets/post-calendar-DAMmNIOE.js +1 -0
- package/dist/client/assets/post-editor-BVQfMnVJ.js +1 -0
- package/dist/client/assets/{primitives-RZS58qGh.js → primitives-S58Qy5_h.js} +1 -1
- package/dist/client/assets/{profile-tn7h0Aas.js → profile-BqqvbXmU.js} +1 -1
- package/dist/client/assets/project-app-view-rFv-47Ck.js +1 -0
- package/dist/client/assets/record-editor-CDKigQBk.js +1 -0
- package/dist/client/assets/redirect-editor-CiMnSVcy.js +1 -0
- package/dist/client/assets/registry-ChGiQF4q.js +2 -0
- package/dist/client/assets/{registry-layout-CbVGf8bP.js → registry-layout-CQck-aVi.js} +1 -1
- package/dist/client/assets/{reports-BPr_xEkT.js → reports-5VOTMrTQ.js} +1 -1
- package/dist/client/assets/{require-capability-C4hdt52k.js → require-capability-BeqbdNy9.js} +1 -1
- package/dist/client/assets/{required-auth-layout-CB_qXYXV.js → required-auth-layout-DlCZSsnq.js} +1 -1
- package/dist/client/assets/{reset-password-DYbPcRnS.js → reset-password-BW1rq6B8.js} +1 -1
- package/dist/client/assets/{roles-hh48S3HL.js → roles-BPlvmDXl.js} +1 -1
- package/dist/client/assets/{search-input-8EKzuXCY.js → search-input-Ur-Zt1oi.js} +1 -1
- package/dist/client/assets/{secrets-Cdh6pPjG.js → secrets-BigDE0-E.js} +1 -1
- package/dist/client/assets/{sections-editor-DzWxqsCH.js → sections-editor-gGjMV-PM.js} +2 -2
- package/dist/client/assets/{select-Dz4rz08k.js → select-DDZjmxDh.js} +1 -1
- package/dist/client/assets/{select-model-CnoxIziS.js → select-model-BRuH2Imw.js} +1 -1
- package/dist/client/assets/{self-tool-result-Cp8mG10v.js → self-tool-result-BGUjVU4o.js} +1 -1
- package/dist/client/assets/seo-editor-WU5L-Cs6.js +1 -0
- package/dist/client/assets/{settings-layout-DBLGxCAb.js → settings-layout-DZENhUwQ.js} +1 -1
- package/dist/client/assets/{shell-controls-Bx480sqd.js → shell-controls-CHOj7WYX.js} +1 -1
- package/dist/client/assets/{shell-layout-Bryvtf9U.js → shell-layout-CHMT0Lmc.js} +1 -1
- package/dist/client/assets/site-error--i37Vnuw.js +1 -0
- package/dist/client/assets/{spinner-Dqzye2Nm.js → spinner-BVfgZFbj.js} +1 -1
- package/dist/client/assets/{sso-ChNIaVYp.js → sso-COX0wZuy.js} +1 -1
- package/dist/client/assets/{store-ArVVIwJ8.js → store-BiFm2VfK.js} +1 -1
- package/dist/client/assets/store-registry-BWLqQT3-.js +2 -0
- package/dist/client/assets/{switch-BKYovs1K.js → switch-BbUlcxHU.js} +1 -1
- package/dist/client/assets/{synced-repos-dsCWST-V.js → synced-repos-DeALQg2i.js} +1 -1
- package/dist/client/assets/{tab-id-CWF_3XW8.js → tab-id-BYgBu85C.js} +1 -1
- package/dist/client/assets/{table-6CGt3QXK.js → table-CMPU5UI2.js} +1 -1
- package/dist/client/assets/{tabs-CiE2Kh9J.js → tabs-BwzEpWOw.js} +1 -1
- package/dist/client/assets/{task-key-IoZJ7EJg.js → task-key-DuzEk8kq.js} +1 -1
- package/dist/client/assets/{tasks-DjxL0fjk.js → tasks-D7nRfSMt.js} +1 -1
- package/dist/client/assets/{textarea-DJBCXAy2.js → textarea-Cd8FaKDD.js} +1 -1
- package/dist/client/assets/{toggle-group-BqEx3xAj.js → toggle-group-m8xUyYLE.js} +1 -1
- package/dist/client/assets/{toolbar-L_2SGJpv.js → toolbar-DYTvJs4C.js} +1 -1
- package/dist/client/assets/{track-DmXnJUnq.js → track-z-rvaCl8.js} +1 -1
- package/dist/client/assets/{types-CaS2ZM9b.js → types-swPRR8Ze.js} +1 -1
- package/dist/client/assets/{use-ai-providers-BgRLK9SA.js → use-ai-providers-CJBMIJR1.js} +1 -1
- package/dist/client/assets/{use-api-keys-DAksWclx.js → use-api-keys-B5TISSrY.js} +1 -1
- package/dist/client/assets/{use-automations-CvuOeOC7.js → use-automations-DxaH92qk.js} +1 -1
- package/dist/client/assets/{use-autosave-CsB4SagC.js → use-autosave-DIsPG7HA.js} +1 -1
- package/dist/client/assets/{use-clock-tick-DgWpAhQ1.js → use-clock-tick-GWcnranK.js} +1 -1
- package/dist/client/assets/{use-commerce-diagnostic-a2fhvqA7.js → use-commerce-diagnostic-Ccm2QUaW.js} +1 -1
- package/dist/client/assets/{use-connection-CfxsRQQb.js → use-connection-Ccuwen3Y.js} +1 -1
- package/dist/client/assets/{use-copy-D2NYP4a7.js → use-copy-D4Yhk_vW.js} +1 -1
- package/dist/client/assets/{use-create-virtual-mcp-ZT456HzX.js → use-create-virtual-mcp-R1kUgsDq.js} +1 -1
- package/dist/client/assets/{use-debounced-autosave-DBIbGh8G.js → use-debounced-autosave-6a2UyasC.js} +1 -1
- package/dist/client/assets/{use-debounced-value-BSt8VwQf.js → use-debounced-value-BrAvelQG.js} +1 -1
- package/dist/client/assets/{use-decopilot-events-BB4u1iYK.js → use-decopilot-events-BEtgSjCu.js} +1 -1
- package/dist/client/assets/{use-delete-connection-CO_Dyhpq.js → use-delete-connection-CuMGEjV5.js} +1 -1
- package/dist/client/assets/{use-deployment-admin-CRd2rzk6.js → use-deployment-admin-BwUdVkBw.js} +1 -1
- package/dist/client/assets/{use-file-configs-D_0tw0ZR.js → use-file-configs-DYEVAw3V.js} +1 -1
- package/dist/client/assets/{use-infinite-scroll-DgHpUElk.js → use-infinite-scroll-DaXYaxMI.js} +1 -1
- package/dist/client/assets/{use-join-requests-DOZm-D0o.js → use-join-requests-BnLZInOv.js} +1 -1
- package/dist/client/assets/{use-mcp-client-CQab8Ryf.js → use-mcp-client-BPBRf03Z.js} +1 -1
- package/dist/client/assets/{use-mcp-tools-DsatbIFN.js → use-mcp-tools-BkHRZVwR.js} +1 -1
- package/dist/client/assets/{use-members-DcrdRi1d.js → use-members-BBZwdgpe.js} +1 -1
- package/dist/client/assets/{use-navigate-to-agent-D3AVnE2u.js → use-navigate-to-agent-BHqEl6PP.js} +1 -1
- package/dist/client/assets/{use-org-auth-client-DhWjlLo0.js → use-org-auth-client-CEJDLND8.js} +1 -1
- package/dist/client/assets/{use-org-repo-syncs-BMEi1pjC.js → use-org-repo-syncs-pdDkZR2z.js} +1 -1
- package/dist/client/assets/{use-org-sso-d2yW_dAP.js → use-org-sso-iCpxnYiO.js} +1 -1
- package/dist/client/assets/{use-organization-roles-BLWMiScx.js → use-organization-roles-DkwXSasa.js} +1 -1
- package/dist/client/assets/{use-organization-settings-BKelzwnO.js → use-organization-settings-BRFklq0z.js} +1 -1
- package/dist/client/assets/{use-registry-connections-CiMvZPoP.js → use-registry-connections-BHIa0L4B.js} +1 -1
- package/dist/client/assets/{use-secrets-B8eqIvzp.js → use-secrets-DN4jjwe2.js} +1 -1
- package/dist/client/assets/{use-section-preview-base-B-_AN01H.js → use-section-preview-base-DQ0ozTsU.js} +1 -1
- package/dist/client/assets/{use-status-sounds-DStvqog6.js → use-status-sounds-CvCsfShW.js} +1 -1
- package/dist/client/assets/{use-tags-DU4RY-Hu.js → use-tags-D3-KrIBG.js} +1 -1
- package/dist/client/assets/{use-view-mode-DDWahC10.js → use-view-mode-BGzj65iU.js} +1 -1
- package/dist/client/assets/{use-virtual-mcp-Czovl-M0.js → use-virtual-mcp-Cy4DE13Z.js} +1 -1
- package/dist/client/assets/useInfiniteQuery-DHG4rNya.js +1 -0
- package/dist/client/assets/useSuspenseInfiniteQuery-Qy2rCyRm.js +1 -0
- package/dist/client/assets/{users-BHkFcFUY.js → users-DBdiI5RM.js} +1 -1
- package/dist/client/assets/variant-calendar-B2n4EkKY.js +1 -0
- package/dist/client/assets/{view-mode-toggle-CDSfZ2e6.js → view-mode-toggle-BqOp7xKw.js} +1 -1
- package/dist/client/index.html +2 -2
- package/dist/server/cli.js +1 -1
- package/dist/server/server.js +1 -1
- package/package.json +1 -1
- package/dist/client/assets/app-editor-Dp8COj5d.js +0 -1
- package/dist/client/assets/bulk-category-panel-CQPuN4iR.js +0 -1
- package/dist/client/assets/category-editor-8484aRPq.js +0 -1
- package/dist/client/assets/commerce-onboarding-DhdeEoRN.js +0 -1
- package/dist/client/assets/file-explorer-xIKpnDvB.js +0 -2
- package/dist/client/assets/index-BUxq6Quv.css +0 -1
- package/dist/client/assets/post-calendar-B8ajyTk1.js +0 -1
- package/dist/client/assets/post-editor-jsVWKMuS.js +0 -1
- package/dist/client/assets/project-app-view-C-kr3zv7.js +0 -1
- package/dist/client/assets/record-editor-B4GeHZrp.js +0 -1
- package/dist/client/assets/redirect-editor-CN8ov1nk.js +0 -1
- package/dist/client/assets/registry-s_m3J1Ro.js +0 -2
- package/dist/client/assets/seo-editor-CZuArcKE.js +0 -1
- package/dist/client/assets/store-registry-DdoWoKD0.js +0 -2
- package/dist/client/assets/useInfiniteQuery-CTjng3sj.js +0 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-Dpso8ly3.js +0 -1
- package/dist/client/assets/variant-calendar-LIwk8t1W.js +0 -1
package/dist/server/cli.js
CHANGED
|
@@ -1396,7 +1396,7 @@ Usage: deco services <up|down|status>`),process.exit(1)}}var Un1=L(()=>{_f()});f
|
|
|
1396
1396
|
`.execute($);if(Number(W.rows[0]?.cnt)===0){console.warn(`Failed to migrate ${J}/${K}, keeping in old table`);continue}}await Jy`
|
|
1397
1397
|
DELETE FROM kysely_migration WHERE name = ${X}
|
|
1398
1398
|
`.execute($)}}async function xr1($){await xo6($),await fo6($);let Z=new _r1({db:$,provider:{getMigrations:()=>Promise.resolve(Un0)}}),{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 bo6($){let{keepOpen:Z=!1,database:X,skipBetterAuth:Q=!1}=$??{},Y="skipped";if(!Q&&!X)Y=await Cl0();let G=X??W6(),J=async()=>{if(!Z&&!X)await mB(G).catch((K)=>{console.warn("Warning: Error closing database:",K)})};try{let K=await xr1(G.db);return await J(),{betterAuth:Y,kysely:K}}catch(K){throw await J(),K}}async function yo6(){let $=W6(),Z=new _r1({db:$.db,provider:{getMigrations:()=>Promise.resolve(Un0)}}),{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 br1=L(()=>{Cr1();_l0();JX()});async function X70($){let Z={...process.env},X=p80($,Z);console.log(nw1(X.settings.encryptionKey));let Q=X.settings.betterAuthSecret||(X.settings.localMode?lp1(X.settings.dataDir):""),{ensureServices:Y}=await Promise.resolve().then(() => (FZ0(),HZ0)),{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(() => (_l0(),mp1));await W(G.databaseUrl);let{createDatabase:H}=await Promise.resolve().then(() => (JX(),Kp1)),{migrateToLatest:F}=await Promise.resolve().then(() => (br1(),fr1)),N=H(G.databaseUrl);await F({keepOpen:!0,database:N,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 Bn1(K),{settings:K,services:J.map((W)=>({name:W.name==="PostgreSQL"?"Postgres":W.name,port:W.port})),managedServiceNames:J.filter((W)=>W.owner==="managed").map((W)=>W.name)}}var Bn0=L(()=>{_f();dp1();_8()});var hr1={};N0(hr1,{updateService:()=>VE,subscribeCliState:()=>wn0,setTuiConsoleIntercepted:()=>Q70,setServerUrl:()=>Xn,setMigrationsDone:()=>Zn,setDevMode:()=>uo6,resetCliStateForTests:()=>go6,isTuiConsoleIntercepted:()=>Y70,getCliState:()=>Ln0,addLogEntry:()=>oB});function yr1(){return{services:[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}],migrationsStatus:"pending",serverUrl:null,logs:[]}}function go6(){nQ=yr1()}function ho6(){return[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}]}function $n(){for(let $ of On0)$()}function Ln0(){return nQ}function wn0($){return On0.add($),()=>On0.delete($)}function VE($){nQ={...nQ,services:nQ.services.map((Z)=>Z.name===$.name?$:Z)},$n()}function Zn(){nQ={...nQ,migrationsStatus:"done"},$n()}function Xn($){nQ={...nQ,serverUrl:$},$n()}function oB($){let Z=[...nQ.logs,$];nQ={...nQ,logs:Z.length>500?Z.slice(-500):Z},$n()}function uo6(){nQ={...nQ,services:[...ho6(),{name:"API",status:"pending",port:0},{name:"Vite",status:"pending",port:0}]},$n()}function Q70($){gr1=$}function Y70(){return gr1}var nQ,On0,gr1=!1;var kE=L(()=>{nQ=yr1();On0=new Set});import{createServer as ur1}from"net";function co6($){return new Promise((Z)=>{let X=ur1();X.once("error",()=>Z(!1)),X.listen($,"0.0.0.0",()=>{X.close(()=>Z(!0))})})}async function Qn($){if(await co6($))return $;let Z=await new Promise((X,Q)=>{let Y=ur1();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 Dn0=()=>{};function Yn($){return $.replace(/\x1b\[[0-9;]*m/g,"")}var En0={};N0(En0,{startDevServer:()=>do6});import{join as lo6}from"path";function cr1($){let Z=$.getReader(),X=new TextDecoder,Q="";function Y(){let G=Q.split(`
|
|
1399
|
-
`);Q=G.pop()??"";for(let J of G){let K=Yn(J).replace(/^\[\d+\]\s*/,"").trim();if(!K)continue;oB({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=Yn(Q).replace(/^\[\d+\]\s*/,"").trim();if(G)oB({method:"",path:"",status:0,duration:0,timestamp:new Date,rawLine:G})}})()}async function do6($){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 Qn(Number(Y)+1):await Qn(Number($.port)),{settings:K,services:W,managedServiceNames:H}=await X70({port:String(J),home:$.home,baseUrl:$.baseUrl,localMode:$.localMode,skipMigrations:$.skipMigrations,noTui:$.noTui,vitePort:$.vitePort});for(let w of W)VE({name:w.name,status:"ready",port:w.port});Zn();let F=lo6(import.meta.dir,"..","..","..","..",".."),N=X===!0,U=Bun.spawn(["bun","run","dev:servers"],{cwd:F,env:{...process.env,PORT:String(K.port),VITE_PORT:String(Y),DATABASE_URL:K.databaseUrl,NATS_URL:K.natsUrls.join(","),NODE_ENV:K.nodeEnv,BASE_URL:G,DECOCMS_LOCAL_MODE:String(K.localMode),DECOCMS_HOME:K.dataDir,DATA_DIR:K.dataDir,DECO_CLI:"1",...K.betterAuthSecret?{BETTER_AUTH_SECRET:K.betterAuthSecret}:{},...K.s3Endpoint?{S3_ENDPOINT:K.s3Endpoint,S3_BUCKET:K.s3Bucket??"",S3_ACCESS_KEY_ID:K.s3AccessKeyId??"",S3_SECRET_ACCESS_KEY:K.s3SecretAccessKey??"",S3_FORCE_PATH_STYLE:String(K.s3ForcePathStyle)}:{},...K.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",N?"inherit":"pipe",N?"inherit":"pipe"]});if(!N)cr1(U.stdout),cr1(U.stderr);Xn(G),VE({name:"Vite",status:"ready",port:Number(Y)}),VE({name:"API",status:"ready",port:Number(K.port)});let O=async(w)=>{if(U.kill(w),await U.exited,H.length>0){let{stopServices:D}=await Promise.resolve().then(() => (FZ0(),HZ0));await D(K.dataDir)}};return process.on("SIGINT",()=>O("SIGINT")),process.on("SIGTERM",()=>O("SIGTERM")),{port:Number(Y),process:U}}var jn0=L(()=>{Bn0();kE();Dn0()});var G70;var zn0=L(()=>{G70={name:"decocms",version:"4.257.0",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@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 io6,Text as lr1}from"ink";import{jsx as no6,jsxs as dr1}from"react/jsx-runtime";function mr1({version:$}){return dr1(io6,{flexDirection:"column",marginTop:1,children:[vZ0.map((Z,X)=>no6(lr1,{color:xZ0[X],children:Z},X)),dr1(lr1,{dimColor:!0,children:[" v",$]})]})}var ir1=L(()=>{di()});import{Box as SE,Text as rB}from"ink";import{Spinner as po6}from"@inkjs/ui";import{jsx as $G,jsxs as Ky}from"react/jsx-runtime";function nr1({status:$}){if($==="pending")return $G(po6,{label:""});return $G(rB,{color:"green",children:"\u2713"})}function to6($){return`${$.name}: ${$.port||"...."}`}function pr1({services:$,migrationsStatus:Z,home:X,serverUrl:Q}){return Ky(SE,{flexDirection:"column",paddingBottom:1,children:[$G(mr1,{version:G70.version}),$G(SE,{marginBottom:1,children:$G(rB,{dimColor:!0,children:"\u2500".repeat(80)})}),$G(SE,{children:Ky(rB,{dimColor:!0,children:["Home: ",X]})}),Ky(SE,{gap:2,children:[$.map((Y)=>Ky(SE,{gap:1,children:[$G(rB,{children:to6(Y)}),$G(nr1,{status:Y.status})]},Y.name)),Ky(SE,{gap:1,children:[$G(rB,{children:"Migrations"}),$G(nr1,{status:Z})]})]}),$G(SE,{children:Q?Ky(rB,{children:["Open in browser: ",$G(rB,{color:"cyan",children:Q})]}):$G(rB,{dimColor:!0,children:"Starting..."})})]})}var tr1=L(()=>{zn0();ir1()});import{Box as oo6,Text as Gn}from"ink";import{jsx as Pn0,jsxs as An0}from"react/jsx-runtime";function ro6($){if($>=500)return"red";if($>=400)return"yellow";if($>=300)return"cyan";return"green"}function or1({logs:$}){return Pn0(oo6,{flexDirection:"column",children:$.map((Z,X)=>{if(Z.rawLine)return Pn0(Gn,{dimColor:!0,children:Z.rawLine},X);let Q=Z.duration<1000?`${Z.duration}ms`:`${(Z.duration/1000).toFixed(1)}s`;return An0(Gn,{children:[An0(Gn,{dimColor:!0,children:[Z.method.padEnd(6)," ",Z.path.padEnd(30)," "]}),Pn0(Gn,{color:ro6(Z.status),children:Z.status}),An0(Gn,{dimColor:!0,children:[" ",Q.padStart(8)]})]},X)})})}var rr1=()=>{};var Tn0={};N0(Tn0,{App:()=>eo6});import{Box as ao6}from"ink";import{useSyncExternalStore as so6}from"react";import{jsx as ar1,jsxs as $r6}from"react/jsx-runtime";function eo6({home:$}){let Z=so6(wn0,Ln0);return $r6(ao6,{flexDirection:"column",children:[ar1(pr1,{services:Z.services,migrationsStatus:Z.migrationsStatus,home:$,serverUrl:Z.serverUrl}),ar1(or1,{logs:Z.logs})]})}var Rn0=L(()=>{tr1();rr1();kE()});var lJ="thread-gate",GN="decopilot-hosted-harness",JN="decopilot-hosted-harness-sandboxed",U3="automations",aB="background-tools",CE="task-board-github-reads",_E="jira-push";var sr1="8";function er1($){return{name:"decocms",systemDatabaseUrl:$.systemDatabaseUrl,systemDatabaseSchemaName:"dbos",systemDatabasePoolSize:$.poolSize,runAdminServer:!1,executorID:$.executorID,applicationVersion:sr1,...$.listenQueues!==void 0?{listenQueues:$.listenQueues}:{}}}var $a1=()=>{};function Zr6(){let $=(process.env.BUN_OPTIONS??"").split(/\s+/).filter(Boolean);return[...process.argv.slice(1),...$]}function In0($,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 Za1(){let $=Zr6();if($.includes("--cpu-prof")){console.log(JSON.stringify({msg:"cpu-profiling-active",dir:In0($,"--cpu-prof-dir")??process.cwd(),name:In0($,"--cpu-prof-name"),markdown:$.includes("--cpu-prof-md"),intervalUs:Number(In0($,"--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 Xa1(){if(process.env.HEAP_WATCH!=="1")return()=>{};let $=Number(process.env.HEAP_WATCH_INTERVAL_MS??60000),Z=async()=>{let X=RE();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(()=>{}),J70=setInterval(()=>void Z().catch(()=>{}),$),J70.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(J70)clearInterval(J70)}}var J70;var Qa1=()=>{};import*as Xr6 from"bun:jsc";function Ya1(){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{Qr6()}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=Yr6()?.traces??[]}catch{}if(J>$&&K.length>0){let W=new Map;for(let F of K){let N=F.frames.find((O)=>O.sourceURL&&!/Unknown Executable/.test(O.category??""))??F.frames[0];if(!N)continue;let U=(N.sourceURL??"?").replace(/^.*\/node_modules\//,"node_modules/"),B=`${N.name??"?"} @ ${U}:${N.line??"?"}`;W.set(B,(W.get(B)??0)+1)}let H=[...W.entries()].sort((F,N)=>N[1]-F[1]).slice(0,8).map(([F,N])=>({frame:F,count:N}));console.warn(JSON.stringify({msg:"stall-stack",ts:new Date().toISOString(),lagMs:Math.round(J),samplesInWindow:K.length,top:H}))}X=setTimeout(Y,Z),X.unref?.()};return X=setTimeout(Y,Z),X.unref?.(),()=>{if(X)clearTimeout(X)}}var Qr6,Yr6;var Ga1=L(()=>{({startSamplingProfiler:Qr6,samplingProfilerStackTraces:Yr6}=Xr6)});function Ja1(){Za1();let $=[Xa1(),en1(),Ya1()];return()=>{for(let Z of $)Z()}}var Ka1=L(()=>{Pl0();Qa1();Ga1()});var vE=v((Wa1)=>{Object.defineProperty(Wa1,"__esModule",{value:!0});Wa1.RepublishHeaders=Wa1.DirectMsgHeaders=Wa1.JsHeaders=Wa1.AdvisoryKind=void 0;Wa1.isOrderedPushConsumerOptions=Gr6;Wa1.isPullConsumer=Jr6;Wa1.isPushConsumer=Kr6;Wa1.isBoundPushConsumerOptions=Wr6;function Gr6($){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 Jr6($){return $.isPullConsumer()}function Kr6($){return $.isPushConsumer()}function Wr6($){if($&&typeof $==="object")return"deliver_subject"in $||"deliver_group"in $||"idle_heartbeat"in $;return!1}Wa1.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"};Wa1.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"};Wa1.DirectMsgHeaders={Stream:"Nats-Stream",Sequence:"Nats-Sequence",TimeStamp:"Nats-Time-Stamp",Subject:"Nats-Subject",LastSequence:"Nats-Last-Sequence",NumPending:"Nats-Num-Pending"};Wa1.RepublishHeaders={Stream:"Nats-Stream",Subject:"Nats-Subject",Sequence:"Nats-Sequence",LastSequence:"Nats-Last-Sequence",Size:"Nats-Msg-Size"}});var ZG=v((Fa1)=>{Object.defineProperty(Fa1,"__esModule",{value:!0});Fa1.TD=Fa1.TE=Fa1.Empty=void 0;Fa1.encode=Dr6;Fa1.decode=Er6;Fa1.Empty=new Uint8Array(0);Fa1.TE=new TextEncoder;Fa1.TD=new TextDecoder;function wr6(...$){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 Dr6(...$){let Z=[];for(let X=0;X<$.length;X++)Z.push(Fa1.TE.encode($[X]));if(Z.length===0)return Fa1.Empty;if(Z.length===1)return Z[0];return wr6(...Z)}function Er6($){if(!$||$.length===0)return"";return Fa1.TD.decode($)}});var XG=v((Ba1)=>{Object.defineProperty(Ba1,"__esModule",{value:!0});Ba1.errors=Ba1.PermissionViolationError=Ba1.NoRespondersError=Ba1.TimeoutError=Ba1.RequestError=Ba1.ProtocolError=Ba1.ConnectionError=Ba1.DrainingConnectionError=Ba1.ClosedConnectionError=Ba1.AuthorizationError=Ba1.UserAuthenticationExpiredError=Ba1.InvalidOperationError=Ba1.InvalidArgumentError=Ba1.InvalidSubjectError=void 0;class Mn0 extends Error{constructor($,Z){super(`illegal subject: '${$}'`,Z);this.name="InvalidSubjectError"}}Ba1.InvalidSubjectError=Mn0;class K70 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 K70(`${$} ${Z}`,X)}}Ba1.InvalidArgumentError=K70;class Vn0 extends Error{constructor($,Z){super($,Z);this.name="InvalidOperationError"}}Ba1.InvalidOperationError=Vn0;class W70 extends Error{constructor($,Z){super($,Z);this.name="UserAuthenticationExpiredError"}static parse($){if($.toLowerCase().indexOf("user authentication expired")!==-1)return new W70($);return null}}Ba1.UserAuthenticationExpiredError=W70;class H70 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 H70($);return null}}Ba1.AuthorizationError=H70;class kn0 extends Error{constructor(){super("closed connection");this.name="ClosedConnectionError"}}Ba1.ClosedConnectionError=kn0;class Sn0 extends Error{constructor(){super("connection draining");this.name="DrainingConnectionError"}}Ba1.DrainingConnectionError=Sn0;class Cn0 extends Error{constructor($,Z){super($,Z);this.name="ConnectionError"}}Ba1.ConnectionError=Cn0;class _n0 extends Error{constructor($,Z){super($,Z);this.name="ProtocolError"}}Ba1.ProtocolError=_n0;class vn0 extends Error{constructor($="",Z){super($,Z);this.name="RequestError"}isNoResponders(){return this.cause instanceof F70}}Ba1.RequestError=vn0;class xn0 extends Error{constructor($){super("timeout",$);this.name="TimeoutError"}}Ba1.TimeoutError=xn0;class F70 extends Error{subject;constructor($,Z){super(`no responders: '${$}'`,Z);this.subject=$,this.name="NoResponders"}}Ba1.NoRespondersError=F70;class N70 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 N70($,X,Q,Y)}}Ba1.PermissionViolationError=N70;Ba1.errors={AuthorizationError:H70,ClosedConnectionError:kn0,ConnectionError:Cn0,DrainingConnectionError:Sn0,InvalidArgumentError:K70,InvalidOperationError:Vn0,InvalidSubjectError:Mn0,NoRespondersError:F70,PermissionViolationError:N70,ProtocolError:_n0,RequestError:vn0,TimeoutError:xn0,UserAuthenticationExpiredError:W70}});var dJ=v((Ea1)=>{Object.defineProperty(Ea1,"__esModule",{value:!0});Ea1.SimpleMutex=Ea1.Perf=void 0;Ea1.extend=fr6;Ea1.render=br6;Ea1.timeout=yr6;Ea1.delay=gr6;Ea1.deadline=hr6;Ea1.deferred=bn0;Ea1.debugDeferred=ur6;Ea1.shuffle=cr6;Ea1.collect=lr6;Ea1.jitter=Da1;Ea1.backoff=dr6;Ea1.nanos=mr6;Ea1.millis=ir6;Ea1.randomToken=tr6;var xr6=ZG(),fn0=XG();function fr6($,...Z){for(let X=0;X<Z.length;X++){let Q=Z[X];Object.keys(Q).forEach(function(Y){$[Y]=Q[Y]})}return $}function br6($){return xr6.TD.decode($).replace(/\n/g,"\u240A").replace(/\r/g,"\u240D")}function yr6($,Z=!0){let X=Z?new fn0.TimeoutError:null,Q,Y,G=new Promise((J,K)=>{Q={cancel:()=>{if(Y)clearTimeout(Y)}},Y=setTimeout(()=>{if(X===null)K(new fn0.TimeoutError);else K(X)},$)});return Object.assign(G,Q)}function gr6($=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 hr6($,Z=1000){let X=bn0(),Q=setTimeout(()=>{X.reject(new fn0.TimeoutError)},Z);try{return await Promise.race([$,X])}finally{clearTimeout(Q)}}function bn0(){let $={},Z=new Promise((X,Q)=>{$={resolve:X,reject:Q}});return Object.assign(Z,$)}function ur6(){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 cr6($){for(let Z=$.length-1;Z>0;Z--){let X=Math.floor(Math.random()*(Z+1));[$[Z],$[X]]=[$[X],$[Z]]}return $}async function lr6($){let Z=[];for await(let X of $)Z.push(X);return Z}class La1{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})}),$}}Ea1.Perf=La1;class wa1{max;current;waiting;constructor($=1){this.max=$,this.current=0,this.waiting=[]}lock(){if(this.current++,this.current<=this.max)return Promise.resolve();let $=bn0();return this.waiting.push($),$}unlock(){this.current--,this.waiting.pop()?.resolve()}}Ea1.SimpleMutex=wa1;function Da1($){if($===0)return 0;return Math.floor($/2+Math.random()*$)}function dr6($=[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 Da1(X>Z?$[Z]:$[X])}}}function mr6($){return $*1e6}function ir6($){return Math.floor($/1e6)}var nr6="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",KN=new Uint8Array(62);for(let $=0;$<62;$++)KN[$]=nr6.charCodeAt($);var pr6=218340105584896;function tr6(){let $=Math.floor(Math.random()*pr6),Z=$%62,X=KN[Z];$=($-Z)/62,Z=$%62;let Q=KN[Z];$=($-Z)/62,Z=$%62;let Y=KN[Z];$=($-Z)/62,Z=$%62;let G=KN[Z];$=($-Z)/62,Z=$%62;let J=KN[Z];$=($-Z)/62,Z=$%62;let K=KN[Z];$=($-Z)/62,Z=$%62;let W=KN[Z];$=($-Z)/62;let H=KN[$];return String.fromCharCode(X,Q,Y,G,J,K,W,H)}});var qa1=v((Ra1)=>{Object.defineProperty(Ra1,"__esModule",{value:!0});Ra1.nuid=Ra1.NuidImpl=void 0;var Fa6="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",sB=62,B70=12,Aa1=10,za1=33,Na6=333,Pa1=B70+Aa1,gn0=new Uint8Array(sB);for(let $=0;$<sB;$++)gn0[$]=Fa6.charCodeAt($);var U70=4294967296,Ta1=BigInt(sB)**BigInt(Aa1),Jn=Number(Ta1/(1n<<32n)),yn0=Number(Ta1%(1n<<32n));function Ua6($){for(let Z=0;Z<$.length;Z++)$[Z]=Math.floor(Math.random()*256)}function Ba6($){if(globalThis?.crypto?.getRandomValues)globalThis.crypto.getRandomValues($);else Ua6($)}class hn0{buf;cbuf;seqHi;seqLo;inc;inited;constructor(){this.buf=new Uint8Array(Pa1),this.cbuf=new Uint8Array(B70),this.inited=!1}init(){this.inited=!0,this.setPre(),this.initSeqAndInc(),this.fillSeq()}initSeqAndInc(){let $=0;do this.seqHi=Math.floor(Math.random()*(Jn+1)),this.seqLo=Math.floor(Math.random()*U70);while($++<8&&this.seqHi===Jn&&this.seqLo>=yn0);if(this.seqHi===Jn&&this.seqLo>=yn0)this.seqLo=0;this.inc=Math.random()*(Na6-za1)+za1|0}setPre(){Ba6(this.cbuf);for(let $=0;$<B70;$++)this.buf[$]=gn0[this.cbuf[$]%sB]}fillSeq(){let $=this.seqHi,Z=this.seqLo;for(let X=Pa1-1;X>=B70;X--){let Q=Math.floor($/sB),G=($-Q*sB)*U70+Z,J=Math.floor(G/sB),K=G-J*sB;this.buf[X]=gn0[K],$=Q,Z=J}}next(){if(!this.inited)this.init();if(this.seqLo+=this.inc,this.seqLo>=U70)this.seqLo-=U70,this.seqHi+=1;if(this.seqHi>Jn||this.seqHi===Jn&&this.seqLo>=yn0)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()}}Ra1.NuidImpl=hn0;Ra1.nuid=new hn0});var Sa1=v((Va1)=>{Object.defineProperty(Va1,"__esModule",{value:!0});Va1.nuid=Va1.Nuid=void 0;var Ma1=qa1();Va1.Nuid=Ma1.NuidImpl;Va1.nuid=Ma1.nuid});var L70=v((O70)=>{Object.defineProperty(O70,"__esModule",{value:!0});O70.nuid=O70.Nuid=void 0;var Ca1=Sa1();Object.defineProperty(O70,"Nuid",{enumerable:!0,get:function(){return Ca1.Nuid}});Object.defineProperty(O70,"nuid",{enumerable:!0,get:function(){return Ca1.nuid}})});var eB=v((_a1)=>{Object.defineProperty(_a1,"__esModule",{value:!0});_a1.DEFAULT_HOST=_a1.DEFAULT_PORT=_a1.Match=void 0;_a1.syncIterator=ja6;_a1.createInbox=za6;var Da6=L70(),Ea6=XG();_a1.Match={Exact:"exact",CanonicalMIME:"canonical",IgnoreCase:"insensitive"};function ja6($){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 za6($=""){if($=$||"_INBOX",typeof $!=="string")throw TypeError("prefix must be a string");return $.split(".").forEach((Z)=>{if(Z==="*"||Z===">")throw Ea6.InvalidArgumentError.format("prefix",`cannot have wildcards ('${$}')`)}),`${$}.${Da6.nuid.next()}`}_a1.DEFAULT_PORT=4222;_a1.DEFAULT_HOST="127.0.0.1"});var Kn=v((ba1)=>{Object.defineProperty(ba1,"__esModule",{value:!0});ba1.DataBuffer=void 0;var xa1=ZG();class fa1{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 xa1.TE.encode($)}static toAscii($){return xa1.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}}ba1.DataBuffer=fa1});var xE=v((ha1)=>{Object.defineProperty(ha1,"__esModule",{value:!0});ha1.LF=ha1.CR=ha1.CRLF=ha1.CR_LF_LEN=ha1.CR_LF=void 0;ha1.setTransportFactory=Va6;ha1.defaultPort=ka6;ha1.getUrlParseFn=Sa6;ha1.newTransport=Ca6;ha1.getResolveFn=_a6;ha1.protoLen=ga1;ha1.extractProtocolMessage=va6;var Ia6=ZG(),qa6=eB(),Ma6=Kn(),QG;function Va6($){QG=$}function ka6(){return QG!==void 0&&QG.defaultPort!==void 0?QG.defaultPort:qa6.DEFAULT_PORT}function Sa6(){return QG!==void 0&&QG.urlParseFn?QG.urlParseFn:void 0}function Ca6(){if(!QG||typeof QG.factory!=="function")throw Error("transport fn is not set");return QG.factory()}function _a6(){return QG!==void 0&&QG.dnsResolveFn?QG.dnsResolveFn:void 0}ha1.CR_LF=`\r
|
|
1399
|
+
`);Q=G.pop()??"";for(let J of G){let K=Yn(J).replace(/^\[\d+\]\s*/,"").trim();if(!K)continue;oB({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=Yn(Q).replace(/^\[\d+\]\s*/,"").trim();if(G)oB({method:"",path:"",status:0,duration:0,timestamp:new Date,rawLine:G})}})()}async function do6($){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 Qn(Number(Y)+1):await Qn(Number($.port)),{settings:K,services:W,managedServiceNames:H}=await X70({port:String(J),home:$.home,baseUrl:$.baseUrl,localMode:$.localMode,skipMigrations:$.skipMigrations,noTui:$.noTui,vitePort:$.vitePort});for(let w of W)VE({name:w.name,status:"ready",port:w.port});Zn();let F=lo6(import.meta.dir,"..","..","..","..",".."),N=X===!0,U=Bun.spawn(["bun","run","dev:servers"],{cwd:F,env:{...process.env,PORT:String(K.port),VITE_PORT:String(Y),DATABASE_URL:K.databaseUrl,NATS_URL:K.natsUrls.join(","),NODE_ENV:K.nodeEnv,BASE_URL:G,DECOCMS_LOCAL_MODE:String(K.localMode),DECOCMS_HOME:K.dataDir,DATA_DIR:K.dataDir,DECO_CLI:"1",...K.betterAuthSecret?{BETTER_AUTH_SECRET:K.betterAuthSecret}:{},...K.s3Endpoint?{S3_ENDPOINT:K.s3Endpoint,S3_BUCKET:K.s3Bucket??"",S3_ACCESS_KEY_ID:K.s3AccessKeyId??"",S3_SECRET_ACCESS_KEY:K.s3SecretAccessKey??"",S3_FORCE_PATH_STYLE:String(K.s3ForcePathStyle)}:{},...K.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",N?"inherit":"pipe",N?"inherit":"pipe"]});if(!N)cr1(U.stdout),cr1(U.stderr);Xn(G),VE({name:"Vite",status:"ready",port:Number(Y)}),VE({name:"API",status:"ready",port:Number(K.port)});let O=async(w)=>{if(U.kill(w),await U.exited,H.length>0){let{stopServices:D}=await Promise.resolve().then(() => (FZ0(),HZ0));await D(K.dataDir)}};return process.on("SIGINT",()=>O("SIGINT")),process.on("SIGTERM",()=>O("SIGTERM")),{port:Number(Y),process:U}}var jn0=L(()=>{Bn0();kE();Dn0()});var G70;var zn0=L(()=>{G70={name:"decocms",version:"4.258.0",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@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 io6,Text as lr1}from"ink";import{jsx as no6,jsxs as dr1}from"react/jsx-runtime";function mr1({version:$}){return dr1(io6,{flexDirection:"column",marginTop:1,children:[vZ0.map((Z,X)=>no6(lr1,{color:xZ0[X],children:Z},X)),dr1(lr1,{dimColor:!0,children:[" v",$]})]})}var ir1=L(()=>{di()});import{Box as SE,Text as rB}from"ink";import{Spinner as po6}from"@inkjs/ui";import{jsx as $G,jsxs as Ky}from"react/jsx-runtime";function nr1({status:$}){if($==="pending")return $G(po6,{label:""});return $G(rB,{color:"green",children:"\u2713"})}function to6($){return`${$.name}: ${$.port||"...."}`}function pr1({services:$,migrationsStatus:Z,home:X,serverUrl:Q}){return Ky(SE,{flexDirection:"column",paddingBottom:1,children:[$G(mr1,{version:G70.version}),$G(SE,{marginBottom:1,children:$G(rB,{dimColor:!0,children:"\u2500".repeat(80)})}),$G(SE,{children:Ky(rB,{dimColor:!0,children:["Home: ",X]})}),Ky(SE,{gap:2,children:[$.map((Y)=>Ky(SE,{gap:1,children:[$G(rB,{children:to6(Y)}),$G(nr1,{status:Y.status})]},Y.name)),Ky(SE,{gap:1,children:[$G(rB,{children:"Migrations"}),$G(nr1,{status:Z})]})]}),$G(SE,{children:Q?Ky(rB,{children:["Open in browser: ",$G(rB,{color:"cyan",children:Q})]}):$G(rB,{dimColor:!0,children:"Starting..."})})]})}var tr1=L(()=>{zn0();ir1()});import{Box as oo6,Text as Gn}from"ink";import{jsx as Pn0,jsxs as An0}from"react/jsx-runtime";function ro6($){if($>=500)return"red";if($>=400)return"yellow";if($>=300)return"cyan";return"green"}function or1({logs:$}){return Pn0(oo6,{flexDirection:"column",children:$.map((Z,X)=>{if(Z.rawLine)return Pn0(Gn,{dimColor:!0,children:Z.rawLine},X);let Q=Z.duration<1000?`${Z.duration}ms`:`${(Z.duration/1000).toFixed(1)}s`;return An0(Gn,{children:[An0(Gn,{dimColor:!0,children:[Z.method.padEnd(6)," ",Z.path.padEnd(30)," "]}),Pn0(Gn,{color:ro6(Z.status),children:Z.status}),An0(Gn,{dimColor:!0,children:[" ",Q.padStart(8)]})]},X)})})}var rr1=()=>{};var Tn0={};N0(Tn0,{App:()=>eo6});import{Box as ao6}from"ink";import{useSyncExternalStore as so6}from"react";import{jsx as ar1,jsxs as $r6}from"react/jsx-runtime";function eo6({home:$}){let Z=so6(wn0,Ln0);return $r6(ao6,{flexDirection:"column",children:[ar1(pr1,{services:Z.services,migrationsStatus:Z.migrationsStatus,home:$,serverUrl:Z.serverUrl}),ar1(or1,{logs:Z.logs})]})}var Rn0=L(()=>{tr1();rr1();kE()});var lJ="thread-gate",GN="decopilot-hosted-harness",JN="decopilot-hosted-harness-sandboxed",U3="automations",aB="background-tools",CE="task-board-github-reads",_E="jira-push";var sr1="8";function er1($){return{name:"decocms",systemDatabaseUrl:$.systemDatabaseUrl,systemDatabaseSchemaName:"dbos",systemDatabasePoolSize:$.poolSize,runAdminServer:!1,executorID:$.executorID,applicationVersion:sr1,...$.listenQueues!==void 0?{listenQueues:$.listenQueues}:{}}}var $a1=()=>{};function Zr6(){let $=(process.env.BUN_OPTIONS??"").split(/\s+/).filter(Boolean);return[...process.argv.slice(1),...$]}function In0($,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 Za1(){let $=Zr6();if($.includes("--cpu-prof")){console.log(JSON.stringify({msg:"cpu-profiling-active",dir:In0($,"--cpu-prof-dir")??process.cwd(),name:In0($,"--cpu-prof-name"),markdown:$.includes("--cpu-prof-md"),intervalUs:Number(In0($,"--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 Xa1(){if(process.env.HEAP_WATCH!=="1")return()=>{};let $=Number(process.env.HEAP_WATCH_INTERVAL_MS??60000),Z=async()=>{let X=RE();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(()=>{}),J70=setInterval(()=>void Z().catch(()=>{}),$),J70.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(J70)clearInterval(J70)}}var J70;var Qa1=()=>{};import*as Xr6 from"bun:jsc";function Ya1(){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{Qr6()}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=Yr6()?.traces??[]}catch{}if(J>$&&K.length>0){let W=new Map;for(let F of K){let N=F.frames.find((O)=>O.sourceURL&&!/Unknown Executable/.test(O.category??""))??F.frames[0];if(!N)continue;let U=(N.sourceURL??"?").replace(/^.*\/node_modules\//,"node_modules/"),B=`${N.name??"?"} @ ${U}:${N.line??"?"}`;W.set(B,(W.get(B)??0)+1)}let H=[...W.entries()].sort((F,N)=>N[1]-F[1]).slice(0,8).map(([F,N])=>({frame:F,count:N}));console.warn(JSON.stringify({msg:"stall-stack",ts:new Date().toISOString(),lagMs:Math.round(J),samplesInWindow:K.length,top:H}))}X=setTimeout(Y,Z),X.unref?.()};return X=setTimeout(Y,Z),X.unref?.(),()=>{if(X)clearTimeout(X)}}var Qr6,Yr6;var Ga1=L(()=>{({startSamplingProfiler:Qr6,samplingProfilerStackTraces:Yr6}=Xr6)});function Ja1(){Za1();let $=[Xa1(),en1(),Ya1()];return()=>{for(let Z of $)Z()}}var Ka1=L(()=>{Pl0();Qa1();Ga1()});var vE=v((Wa1)=>{Object.defineProperty(Wa1,"__esModule",{value:!0});Wa1.RepublishHeaders=Wa1.DirectMsgHeaders=Wa1.JsHeaders=Wa1.AdvisoryKind=void 0;Wa1.isOrderedPushConsumerOptions=Gr6;Wa1.isPullConsumer=Jr6;Wa1.isPushConsumer=Kr6;Wa1.isBoundPushConsumerOptions=Wr6;function Gr6($){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 Jr6($){return $.isPullConsumer()}function Kr6($){return $.isPushConsumer()}function Wr6($){if($&&typeof $==="object")return"deliver_subject"in $||"deliver_group"in $||"idle_heartbeat"in $;return!1}Wa1.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"};Wa1.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"};Wa1.DirectMsgHeaders={Stream:"Nats-Stream",Sequence:"Nats-Sequence",TimeStamp:"Nats-Time-Stamp",Subject:"Nats-Subject",LastSequence:"Nats-Last-Sequence",NumPending:"Nats-Num-Pending"};Wa1.RepublishHeaders={Stream:"Nats-Stream",Subject:"Nats-Subject",Sequence:"Nats-Sequence",LastSequence:"Nats-Last-Sequence",Size:"Nats-Msg-Size"}});var ZG=v((Fa1)=>{Object.defineProperty(Fa1,"__esModule",{value:!0});Fa1.TD=Fa1.TE=Fa1.Empty=void 0;Fa1.encode=Dr6;Fa1.decode=Er6;Fa1.Empty=new Uint8Array(0);Fa1.TE=new TextEncoder;Fa1.TD=new TextDecoder;function wr6(...$){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 Dr6(...$){let Z=[];for(let X=0;X<$.length;X++)Z.push(Fa1.TE.encode($[X]));if(Z.length===0)return Fa1.Empty;if(Z.length===1)return Z[0];return wr6(...Z)}function Er6($){if(!$||$.length===0)return"";return Fa1.TD.decode($)}});var XG=v((Ba1)=>{Object.defineProperty(Ba1,"__esModule",{value:!0});Ba1.errors=Ba1.PermissionViolationError=Ba1.NoRespondersError=Ba1.TimeoutError=Ba1.RequestError=Ba1.ProtocolError=Ba1.ConnectionError=Ba1.DrainingConnectionError=Ba1.ClosedConnectionError=Ba1.AuthorizationError=Ba1.UserAuthenticationExpiredError=Ba1.InvalidOperationError=Ba1.InvalidArgumentError=Ba1.InvalidSubjectError=void 0;class Mn0 extends Error{constructor($,Z){super(`illegal subject: '${$}'`,Z);this.name="InvalidSubjectError"}}Ba1.InvalidSubjectError=Mn0;class K70 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 K70(`${$} ${Z}`,X)}}Ba1.InvalidArgumentError=K70;class Vn0 extends Error{constructor($,Z){super($,Z);this.name="InvalidOperationError"}}Ba1.InvalidOperationError=Vn0;class W70 extends Error{constructor($,Z){super($,Z);this.name="UserAuthenticationExpiredError"}static parse($){if($.toLowerCase().indexOf("user authentication expired")!==-1)return new W70($);return null}}Ba1.UserAuthenticationExpiredError=W70;class H70 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 H70($);return null}}Ba1.AuthorizationError=H70;class kn0 extends Error{constructor(){super("closed connection");this.name="ClosedConnectionError"}}Ba1.ClosedConnectionError=kn0;class Sn0 extends Error{constructor(){super("connection draining");this.name="DrainingConnectionError"}}Ba1.DrainingConnectionError=Sn0;class Cn0 extends Error{constructor($,Z){super($,Z);this.name="ConnectionError"}}Ba1.ConnectionError=Cn0;class _n0 extends Error{constructor($,Z){super($,Z);this.name="ProtocolError"}}Ba1.ProtocolError=_n0;class vn0 extends Error{constructor($="",Z){super($,Z);this.name="RequestError"}isNoResponders(){return this.cause instanceof F70}}Ba1.RequestError=vn0;class xn0 extends Error{constructor($){super("timeout",$);this.name="TimeoutError"}}Ba1.TimeoutError=xn0;class F70 extends Error{subject;constructor($,Z){super(`no responders: '${$}'`,Z);this.subject=$,this.name="NoResponders"}}Ba1.NoRespondersError=F70;class N70 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 N70($,X,Q,Y)}}Ba1.PermissionViolationError=N70;Ba1.errors={AuthorizationError:H70,ClosedConnectionError:kn0,ConnectionError:Cn0,DrainingConnectionError:Sn0,InvalidArgumentError:K70,InvalidOperationError:Vn0,InvalidSubjectError:Mn0,NoRespondersError:F70,PermissionViolationError:N70,ProtocolError:_n0,RequestError:vn0,TimeoutError:xn0,UserAuthenticationExpiredError:W70}});var dJ=v((Ea1)=>{Object.defineProperty(Ea1,"__esModule",{value:!0});Ea1.SimpleMutex=Ea1.Perf=void 0;Ea1.extend=fr6;Ea1.render=br6;Ea1.timeout=yr6;Ea1.delay=gr6;Ea1.deadline=hr6;Ea1.deferred=bn0;Ea1.debugDeferred=ur6;Ea1.shuffle=cr6;Ea1.collect=lr6;Ea1.jitter=Da1;Ea1.backoff=dr6;Ea1.nanos=mr6;Ea1.millis=ir6;Ea1.randomToken=tr6;var xr6=ZG(),fn0=XG();function fr6($,...Z){for(let X=0;X<Z.length;X++){let Q=Z[X];Object.keys(Q).forEach(function(Y){$[Y]=Q[Y]})}return $}function br6($){return xr6.TD.decode($).replace(/\n/g,"\u240A").replace(/\r/g,"\u240D")}function yr6($,Z=!0){let X=Z?new fn0.TimeoutError:null,Q,Y,G=new Promise((J,K)=>{Q={cancel:()=>{if(Y)clearTimeout(Y)}},Y=setTimeout(()=>{if(X===null)K(new fn0.TimeoutError);else K(X)},$)});return Object.assign(G,Q)}function gr6($=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 hr6($,Z=1000){let X=bn0(),Q=setTimeout(()=>{X.reject(new fn0.TimeoutError)},Z);try{return await Promise.race([$,X])}finally{clearTimeout(Q)}}function bn0(){let $={},Z=new Promise((X,Q)=>{$={resolve:X,reject:Q}});return Object.assign(Z,$)}function ur6(){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 cr6($){for(let Z=$.length-1;Z>0;Z--){let X=Math.floor(Math.random()*(Z+1));[$[Z],$[X]]=[$[X],$[Z]]}return $}async function lr6($){let Z=[];for await(let X of $)Z.push(X);return Z}class La1{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})}),$}}Ea1.Perf=La1;class wa1{max;current;waiting;constructor($=1){this.max=$,this.current=0,this.waiting=[]}lock(){if(this.current++,this.current<=this.max)return Promise.resolve();let $=bn0();return this.waiting.push($),$}unlock(){this.current--,this.waiting.pop()?.resolve()}}Ea1.SimpleMutex=wa1;function Da1($){if($===0)return 0;return Math.floor($/2+Math.random()*$)}function dr6($=[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 Da1(X>Z?$[Z]:$[X])}}}function mr6($){return $*1e6}function ir6($){return Math.floor($/1e6)}var nr6="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",KN=new Uint8Array(62);for(let $=0;$<62;$++)KN[$]=nr6.charCodeAt($);var pr6=218340105584896;function tr6(){let $=Math.floor(Math.random()*pr6),Z=$%62,X=KN[Z];$=($-Z)/62,Z=$%62;let Q=KN[Z];$=($-Z)/62,Z=$%62;let Y=KN[Z];$=($-Z)/62,Z=$%62;let G=KN[Z];$=($-Z)/62,Z=$%62;let J=KN[Z];$=($-Z)/62,Z=$%62;let K=KN[Z];$=($-Z)/62,Z=$%62;let W=KN[Z];$=($-Z)/62;let H=KN[$];return String.fromCharCode(X,Q,Y,G,J,K,W,H)}});var qa1=v((Ra1)=>{Object.defineProperty(Ra1,"__esModule",{value:!0});Ra1.nuid=Ra1.NuidImpl=void 0;var Fa6="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",sB=62,B70=12,Aa1=10,za1=33,Na6=333,Pa1=B70+Aa1,gn0=new Uint8Array(sB);for(let $=0;$<sB;$++)gn0[$]=Fa6.charCodeAt($);var U70=4294967296,Ta1=BigInt(sB)**BigInt(Aa1),Jn=Number(Ta1/(1n<<32n)),yn0=Number(Ta1%(1n<<32n));function Ua6($){for(let Z=0;Z<$.length;Z++)$[Z]=Math.floor(Math.random()*256)}function Ba6($){if(globalThis?.crypto?.getRandomValues)globalThis.crypto.getRandomValues($);else Ua6($)}class hn0{buf;cbuf;seqHi;seqLo;inc;inited;constructor(){this.buf=new Uint8Array(Pa1),this.cbuf=new Uint8Array(B70),this.inited=!1}init(){this.inited=!0,this.setPre(),this.initSeqAndInc(),this.fillSeq()}initSeqAndInc(){let $=0;do this.seqHi=Math.floor(Math.random()*(Jn+1)),this.seqLo=Math.floor(Math.random()*U70);while($++<8&&this.seqHi===Jn&&this.seqLo>=yn0);if(this.seqHi===Jn&&this.seqLo>=yn0)this.seqLo=0;this.inc=Math.random()*(Na6-za1)+za1|0}setPre(){Ba6(this.cbuf);for(let $=0;$<B70;$++)this.buf[$]=gn0[this.cbuf[$]%sB]}fillSeq(){let $=this.seqHi,Z=this.seqLo;for(let X=Pa1-1;X>=B70;X--){let Q=Math.floor($/sB),G=($-Q*sB)*U70+Z,J=Math.floor(G/sB),K=G-J*sB;this.buf[X]=gn0[K],$=Q,Z=J}}next(){if(!this.inited)this.init();if(this.seqLo+=this.inc,this.seqLo>=U70)this.seqLo-=U70,this.seqHi+=1;if(this.seqHi>Jn||this.seqHi===Jn&&this.seqLo>=yn0)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()}}Ra1.NuidImpl=hn0;Ra1.nuid=new hn0});var Sa1=v((Va1)=>{Object.defineProperty(Va1,"__esModule",{value:!0});Va1.nuid=Va1.Nuid=void 0;var Ma1=qa1();Va1.Nuid=Ma1.NuidImpl;Va1.nuid=Ma1.nuid});var L70=v((O70)=>{Object.defineProperty(O70,"__esModule",{value:!0});O70.nuid=O70.Nuid=void 0;var Ca1=Sa1();Object.defineProperty(O70,"Nuid",{enumerable:!0,get:function(){return Ca1.Nuid}});Object.defineProperty(O70,"nuid",{enumerable:!0,get:function(){return Ca1.nuid}})});var eB=v((_a1)=>{Object.defineProperty(_a1,"__esModule",{value:!0});_a1.DEFAULT_HOST=_a1.DEFAULT_PORT=_a1.Match=void 0;_a1.syncIterator=ja6;_a1.createInbox=za6;var Da6=L70(),Ea6=XG();_a1.Match={Exact:"exact",CanonicalMIME:"canonical",IgnoreCase:"insensitive"};function ja6($){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 za6($=""){if($=$||"_INBOX",typeof $!=="string")throw TypeError("prefix must be a string");return $.split(".").forEach((Z)=>{if(Z==="*"||Z===">")throw Ea6.InvalidArgumentError.format("prefix",`cannot have wildcards ('${$}')`)}),`${$}.${Da6.nuid.next()}`}_a1.DEFAULT_PORT=4222;_a1.DEFAULT_HOST="127.0.0.1"});var Kn=v((ba1)=>{Object.defineProperty(ba1,"__esModule",{value:!0});ba1.DataBuffer=void 0;var xa1=ZG();class fa1{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 xa1.TE.encode($)}static toAscii($){return xa1.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}}ba1.DataBuffer=fa1});var xE=v((ha1)=>{Object.defineProperty(ha1,"__esModule",{value:!0});ha1.LF=ha1.CR=ha1.CRLF=ha1.CR_LF_LEN=ha1.CR_LF=void 0;ha1.setTransportFactory=Va6;ha1.defaultPort=ka6;ha1.getUrlParseFn=Sa6;ha1.newTransport=Ca6;ha1.getResolveFn=_a6;ha1.protoLen=ga1;ha1.extractProtocolMessage=va6;var Ia6=ZG(),qa6=eB(),Ma6=Kn(),QG;function Va6($){QG=$}function ka6(){return QG!==void 0&&QG.defaultPort!==void 0?QG.defaultPort:qa6.DEFAULT_PORT}function Sa6(){return QG!==void 0&&QG.urlParseFn?QG.urlParseFn:void 0}function Ca6(){if(!QG||typeof QG.factory!=="function")throw Error("transport fn is not set");return QG.factory()}function _a6(){return QG!==void 0&&QG.dnsResolveFn?QG.dnsResolveFn:void 0}ha1.CR_LF=`\r
|
|
1400
1400
|
`;ha1.CR_LF_LEN=ha1.CR_LF.length;ha1.CRLF=Ma6.DataBuffer.fromAscii(ha1.CR_LF);ha1.CR=new Uint8Array(ha1.CRLF)[0];ha1.LF=new Uint8Array(ha1.CRLF)[1];function ga1($){for(let Z=0;Z<$.length;Z++){let X=Z+1;if($.byteLength>X&&$[Z]===ha1.CR&&$[X]===ha1.LF)return X+1}return 0}function va6($){let Z=ga1($);if(Z>0){let Q=new Uint8Array($).slice(0,Z);return Ia6.TD.decode(Q)}return""}});var mn0=v((pa1)=>{Object.defineProperty(pa1,"__esModule",{value:!0});pa1.ipV4=ma1;pa1.isIP=ma6;pa1.parseIP=ia1;var Wn=4,fE=16,w70=48,da1=57,ca1=65,la6=70,la1=97,da6=102,dn0=16777215;function ma1($,Z,X,Q){let Y=new Uint8Array(fE);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 ma6($){return ia1($)!==void 0}function ia1($){for(let Z=0;Z<$.length;Z++)switch($[Z]){case".":return na1($);case":":return ia6($)}return}function na1($){let Z=new Uint8Array(Wn);for(let X=0;X<Wn;X++){if($.length===0)return;if(X>0){if($[0]!==".")return;$=$.substring(1)}let{n:Q,c:Y,ok:G}=na6($);if(!G||Q>255)return;$=$.substring(Y),Z[X]=Q}return ma1(Z[0],Z[1],Z[2],Z[3])}function ia6($){let Z=new Uint8Array(fE),X=-1;if($.length>=2&&$[0]===":"&&$[1]===":"){if(X=0,$=$.substring(2),$.length===0)return Z}let Q=0;while(Q<fE){let{n:Y,c:G,ok:J}=pa6($);if(!J||Y>65535)return;if(G<$.length&&$[G]==="."){if(X<0&&Q!=fE-Wn)return;if(Q+Wn>fE)return;let K=na1($);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+=Wn;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<fE){if(X<0)return;let Y=fE-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 na6($){let Z=0,X=0;for(Z=0;Z<$.length&&w70<=$.charCodeAt(Z)&&$.charCodeAt(Z)<=da1;Z++)if(X=X*10+($.charCodeAt(Z)-w70),X>=dn0)return{n:dn0,c:Z,ok:!1};if(Z===0)return{n:0,c:0,ok:!1};return{n:X,c:Z,ok:!0}}function pa6($){let Z=0,X=0;for(X=0;X<$.length;X++){if(w70<=$.charCodeAt(X)&&$.charCodeAt(X)<=da1)Z*=16,Z+=$.charCodeAt(X)-w70;else if(la1<=$.charCodeAt(X)&&$.charCodeAt(X)<=da6)Z*=16,Z+=$.charCodeAt(X)-la1+10;else if(ca1<=$.charCodeAt(X)&&$.charCodeAt(X)<=la6)Z*=16,Z+=$.charCodeAt(X)-ca1+10;else break;if(Z>=dn0)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 rn0=v((oa1)=>{Object.defineProperty(oa1,"__esModule",{value:!0});oa1.Servers=oa1.ServerImpl=void 0;oa1.isIPV4OrHostname=ta1;oa1.hostPort=on0;var in0=xE(),nn0=dJ(),pn0=mn0(),aa6=eB(),sa6=XG();function ta1($){if($.indexOf("[")!==-1||$.indexOf("::")!==-1)return!1;if($.indexOf(".")!==-1)return!0;if($.split(":").length<=2)return!0;return!1}function tn0($){return!ta1($)}function ea6($){let X=$.toUpperCase().indexOf("::FFFF:");if(X!==-1&&$.indexOf(".")!==-1){let Q=$.substring(X+7);return Q=Q.replace("[",""),Q.replace("]","")}return $}function on0($){if($=$.trim(),$.match(/^(.*:\/\/)(.*)/m))$=$.replace(/^(.*:\/\/)(.*)/gm,"$2");if($=ea6($),tn0($)&&$.indexOf("[")===-1)$=`[${$}]`;let Z=tn0($)?$.match(/(]:)(\d+)/):$.match(/(:)(\d+)/),X=Z&&Z.length===3&&Z[1]&&Z[2]?parseInt(Z[2]):aa6.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 Wy{src;listen;hostname;port;didConnect;reconnects;lastConnect;gossiped;tlsName;resolves;constructor($,Z=!1){this.src=$,this.tlsName="";let X=on0($);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,pn0.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}://${tn0(Q)?"["+Q+"]":Q}`);G.port=`${this.port}`;let J=new Wy(G.host,!1);J.tlsName=this.hostname,Z.push(J)}}if($.randomize)(0,nn0.shuffle)(Z);return this.resolves=Z,Z}}oa1.ServerImpl=Wy;class D70{firstSelect;servers;currentServer;tlsName;randomize;constructor($={}){this.firstSelect=!0,this.servers=[],this.tlsName="",this.randomize=$.randomize||!1}setServers($){if(!Array.isArray($)||$.length===0)throw sa6.InvalidArgumentError.format("servers","cannot be empty");let Z=(0,in0.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}=on0(Y),J=X.get(G);if(J)J.gossiped=!1,Q.push(J);else Q.push(new Wy(Y))}if(this.randomize)(0,nn0.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,pn0.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,in0.getUrlParseFn)();$=X?X($):$;let Q=new Wy($,Z);if((0,pn0.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 D70.freezeAll(this.servers)}snapshotForHandler(){let $=this.currentServer;if(!$)return this.snapshot();let Z=this.servers.indexOf($);if(Z<=0)return this.snapshot();return D70.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,in0.getUrlParseFn)(),G=new Map;if($.connect_urls&&$.connect_urls.length>0)$.connect_urls.forEach((K)=>{K=Y?Y(K,Z):K;let W=new Wy(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,nn0.shuffle)(W),this.servers=K?[K,...W]:W}return{added:X,deleted:Q}}}oa1.Servers=D70});var E70=v((ea1)=>{Object.defineProperty(ea1,"__esModule",{value:!0});ea1.QueuedIteratorImpl=void 0;var an0=dJ(),aa1=XG();class sa1{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,an0.deferred)(),this.yields=[],this.iterClosed=(0,an0.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 aa1.InvalidOperationError("iterator cannot be used when a callback is registered");if(this.yielding)throw new aa1.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,an0.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}}ea1.QueuedIteratorImpl=sa1});var sn0=v((Qs1)=>{Object.defineProperty(Qs1,"__esModule",{value:!0});Qs1.MuxSubscription=void 0;var Qs6=eB(),Zs1=XG();class Xs1{baseInbox;reqs;constructor(){this.reqs=new Map}size(){return this.reqs.size}init($){return this.baseInbox=`${(0,Qs6.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 Zs1.NoRespondersError(Q.requestSubject):null;Q.resolver($,Z)}}}}close(){let $=new Zs1.RequestError("connection closed");this.reqs.forEach((Z)=>{Z.resolver($,{})})}}Qs1.MuxSubscription=Xs1});var en0=v((Js1)=>{Object.defineProperty(Js1,"__esModule",{value:!0});Js1.Heartbeat=void 0;var Ys6=dJ();class Gs1{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,Ys6.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})}}Js1.Heartbeat=Gs1});var Xp0=v((Ns1)=>{Object.defineProperty(Ns1,"__esModule",{value:!0});Ns1.DenoBuffer=Ns1.MAX_SIZE=Ns1.AssertionError=void 0;Ns1.assert=Hs1;Ns1.concat=Fs1;Ns1.append=Js6;Ns1.readAll=Ks6;Ns1.writeAll=Ws6;var Gs6=ZG();class $p0 extends Error{constructor($){super($);this.name="AssertionError"}}Ns1.AssertionError=$p0;function Hs1($,Z="Assertion failed."){if(!$)throw new $p0(Z)}var Ws1=32768;Ns1.MAX_SIZE=4294967294;function j70($,Z,X=0){let Q=Z.byteLength-X;if($.byteLength>Q)$=$.subarray(0,Q);return Z.set($,X),$.byteLength}function Fs1($,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 Js6($,Z){return Fs1($,Uint8Array.of(Z))}class Zp0{_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($){Hs1($<=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=j70(this._buf.subarray(this._off),$);return this._off+=Z,Z}writeByte($){return this.write(Uint8Array.of($))}writeString($){return this.write(Gs6.TE.encode($))}write($){let Z=this._grow($.byteLength);return j70($,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)j70(this._buf.subarray(this._off),this._buf);else if(Q+$>Ns1.MAX_SIZE)throw Error("The buffer cannot be grown beyond the maximum size.");else{let Y=new Uint8Array(Math.min(2*Q+$,Ns1.MAX_SIZE));j70(this._buf.subarray(this._off),Y),this._buf=Y}return this._off=0,this._reslice(Math.min(Z+$,Ns1.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(Ws1);while(!0){let Q=this.capacity-this.length<Ws1,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}}}Ns1.DenoBuffer=Zp0;function Ks6($){let Z=new Zp0;return Z.readFrom($),Z.bytes()}function Ws6($,Z){let X=0;while(X<Z.length)X+=$.write(Z.subarray(X))}});var Gp0=v((ws1)=>{Object.defineProperty(ws1,"__esModule",{value:!0});ws1.cc=ws1.State=ws1.Parser=ws1.Kind=void 0;ws1.describe=Ls6;var Qp0=Xp0(),Yp0=ZG();ws1.Kind={OK:0,ERR:1,MSG:2,INFO:3,PING:4,PONG:5};function Ls6($){let Z,X="";switch($.kind){case ws1.Kind.MSG:Z="MSG";break;case ws1.Kind.OK:Z="OK";break;case ws1.Kind.ERR:Z="ERR",X=Yp0.TD.decode($.data);break;case ws1.Kind.PING:Z="PING";break;case ws1.Kind.PONG:Z="PONG";break;case ws1.Kind.INFO:Z="INFO",X=Yp0.TD.decode($.data)}return`${Z}: ${X}`}function Bs1(){let $={};return $.sid=-1,$.hdr=-1,$.size=-1,$}var Os1=48,ws6=57,Hy=67108864;class Ls1{dispatcher;state;as;drop;hdr;ma;argBuf;msgBuf;constructor($){this.dispatcher=$,this.state=ws1.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 ws1.State.OP_START:switch(X){case ws1.cc.M:case ws1.cc.m:this.state=ws1.State.OP_M,this.hdr=-1,this.ma=Bs1();break;case ws1.cc.H:case ws1.cc.h:this.state=ws1.State.OP_H,this.hdr=0,this.ma=Bs1();break;case ws1.cc.P:case ws1.cc.p:this.state=ws1.State.OP_P;break;case ws1.cc.PLUS:this.state=ws1.State.OP_PLUS;break;case ws1.cc.MINUS:this.state=ws1.State.OP_MINUS;break;case ws1.cc.I:case ws1.cc.i:this.state=ws1.State.OP_I;break;default:throw this.fail($.subarray(Z))}break;case ws1.State.OP_H:switch(X){case ws1.cc.M:case ws1.cc.m:this.state=ws1.State.OP_M;break;default:throw this.fail($.subarray(Z))}break;case ws1.State.OP_M:switch(X){case ws1.cc.S:case ws1.cc.s:this.state=ws1.State.OP_MS;break;default:throw this.fail($.subarray(Z))}break;case ws1.State.OP_MS:switch(X){case ws1.cc.G:case ws1.cc.g:this.state=ws1.State.OP_MSG;break;default:throw this.fail($.subarray(Z))}break;case ws1.State.OP_MSG:switch(X){case ws1.cc.SPACE:case ws1.cc.TAB:this.state=ws1.State.OP_MSG_SPC;break;default:throw this.fail($.subarray(Z))}break;case ws1.State.OP_MSG_SPC:switch(X){case ws1.cc.SPACE:case ws1.cc.TAB:continue;default:this.state=ws1.State.MSG_ARG,this.as=Z}break;case ws1.State.MSG_ARG:switch(X){case ws1.cc.CR:this.drop=1;break;case ws1.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=ws1.State.MSG_PAYLOAD,Z=this.as+this.ma.size-1;break}default:if(this.argBuf)this.argBuf.writeByte(X)}break;case ws1.State.MSG_PAYLOAD:if(this.msgBuf)if(this.msgBuf.length>=this.ma.size){let Q=this.msgBuf.bytes({copy:!1});this.dispatcher.push({kind:ws1.Kind.MSG,msg:this.ma,data:Q}),this.argBuf=void 0,this.msgBuf=void 0,this.state=ws1.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:ws1.Kind.MSG,msg:this.ma,data:$.subarray(this.as,Z)}),this.argBuf=void 0,this.msgBuf=void 0,this.state=ws1.State.MSG_END;break;case ws1.State.MSG_END:switch(X){case ws1.cc.NL:this.drop=0,this.as=Z+1,this.state=ws1.State.OP_START;break;default:continue}break;case ws1.State.OP_PLUS:switch(X){case ws1.cc.O:case ws1.cc.o:this.state=ws1.State.OP_PLUS_O;break;default:throw this.fail($.subarray(Z))}break;case ws1.State.OP_PLUS_O:switch(X){case ws1.cc.K:case ws1.cc.k:this.state=ws1.State.OP_PLUS_OK;break;default:throw this.fail($.subarray(Z))}break;case ws1.State.OP_PLUS_OK:switch(X){case ws1.cc.NL:this.dispatcher.push({kind:ws1.Kind.OK}),this.drop=0,this.state=ws1.State.OP_START;break}break;case ws1.State.OP_MINUS:switch(X){case ws1.cc.E:case ws1.cc.e:this.state=ws1.State.OP_MINUS_E;break;default:throw this.fail($.subarray(Z))}break;case ws1.State.OP_MINUS_E:switch(X){case ws1.cc.R:case ws1.cc.r:this.state=ws1.State.OP_MINUS_ER;break;default:throw this.fail($.subarray(Z))}break;case ws1.State.OP_MINUS_ER:switch(X){case ws1.cc.R:case ws1.cc.r:this.state=ws1.State.OP_MINUS_ERR;break;default:throw this.fail($.subarray(Z))}break;case ws1.State.OP_MINUS_ERR:switch(X){case ws1.cc.SPACE:case ws1.cc.TAB:this.state=ws1.State.OP_MINUS_ERR_SPC;break;default:throw this.fail($.subarray(Z))}break;case ws1.State.OP_MINUS_ERR_SPC:switch(X){case ws1.cc.SPACE:case ws1.cc.TAB:continue;default:this.state=ws1.State.MINUS_ERR_ARG,this.as=Z}break;case ws1.State.MINUS_ERR_ARG:switch(X){case ws1.cc.CR:this.drop=1;break;case ws1.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:ws1.Kind.ERR,data:Q}),this.drop=0,this.as=Z+1,this.state=ws1.State.OP_START;break}default:if(this.argBuf)this.argBuf.write(Uint8Array.of(X))}break;case ws1.State.OP_P:switch(X){case ws1.cc.I:case ws1.cc.i:this.state=ws1.State.OP_PI;break;case ws1.cc.O:case ws1.cc.o:this.state=ws1.State.OP_PO;break;default:throw this.fail($.subarray(Z))}break;case ws1.State.OP_PO:switch(X){case ws1.cc.N:case ws1.cc.n:this.state=ws1.State.OP_PON;break;default:throw this.fail($.subarray(Z))}break;case ws1.State.OP_PON:switch(X){case ws1.cc.G:case ws1.cc.g:this.state=ws1.State.OP_PONG;break;default:throw this.fail($.subarray(Z))}break;case ws1.State.OP_PONG:switch(X){case ws1.cc.NL:this.dispatcher.push({kind:ws1.Kind.PONG}),this.drop=0,this.state=ws1.State.OP_START;break}break;case ws1.State.OP_PI:switch(X){case ws1.cc.N:case ws1.cc.n:this.state=ws1.State.OP_PIN;break;default:throw this.fail($.subarray(Z))}break;case ws1.State.OP_PIN:switch(X){case ws1.cc.G:case ws1.cc.g:this.state=ws1.State.OP_PING;break;default:throw this.fail($.subarray(Z))}break;case ws1.State.OP_PING:switch(X){case ws1.cc.NL:this.dispatcher.push({kind:ws1.Kind.PING}),this.drop=0,this.state=ws1.State.OP_START;break}break;case ws1.State.OP_I:switch(X){case ws1.cc.N:case ws1.cc.n:this.state=ws1.State.OP_IN;break;default:throw this.fail($.subarray(Z))}break;case ws1.State.OP_IN:switch(X){case ws1.cc.F:case ws1.cc.f:this.state=ws1.State.OP_INF;break;default:throw this.fail($.subarray(Z))}break;case ws1.State.OP_INF:switch(X){case ws1.cc.O:case ws1.cc.o:this.state=ws1.State.OP_INFO;break;default:throw this.fail($.subarray(Z))}break;case ws1.State.OP_INFO:switch(X){case ws1.cc.SPACE:case ws1.cc.TAB:this.state=ws1.State.OP_INFO_SPC;break;default:throw this.fail($.subarray(Z))}break;case ws1.State.OP_INFO_SPC:switch(X){case ws1.cc.SPACE:case ws1.cc.TAB:continue;default:this.state=ws1.State.INFO_ARG,this.as=Z}break;case ws1.State.INFO_ARG:switch(X){case ws1.cc.CR:this.drop=1;break;case ws1.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:ws1.Kind.INFO,data:Q}),this.drop=0,this.as=Z+1,this.state=ws1.State.OP_START;break}default:if(this.argBuf)this.argBuf.writeByte(X)}break;default:throw this.fail($.subarray(Z))}}if((this.state===ws1.State.MSG_ARG||this.state===ws1.State.MINUS_ERR_ARG||this.state===ws1.State.INFO_ARG)&&!this.argBuf)this.argBuf=new Qp0.DenoBuffer($.subarray(this.as,Z-this.drop));if(this.state===ws1.State.MSG_PAYLOAD&&!this.msgBuf){if(!this.argBuf)this.cloneMsgArg();this.msgBuf=new Qp0.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 Qp0.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 ws1.cc.SPACE:case ws1.cc.TAB:case ws1.cc.CR:case ws1.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],Hy);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],Hy);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}: ${Yp0.TD.decode($)}`)}processHeaderMsgArgs($){let Z=[],X=-1;for(let Q=0;Q<$.length;Q++)switch($[Q]){case ws1.cc.SPACE:case ws1.cc.TAB:case ws1.cc.CR:case ws1.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],Hy),this.ma.size=this.protoParseInt(Z[3],Hy);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],Hy),this.ma.size=this.protoParseInt(Z[4],Hy);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]<Os1||$[Q]>ws6)return-1;X=X*10+($[Q]-Os1)}return Z!==void 0&&X>Z?-1:X}}ws1.Parser=Ls1;ws1.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};ws1.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 A70=v((Es1)=>{Object.defineProperty(Es1,"__esModule",{value:!0});Es1.MsgHdrsImpl=void 0;Es1.canonicalMIMEHeaderKey=Kp0;Es1.headers=js6;var Ds1=ZG(),mJ=eB(),P70=XG();function Kp0($){let F=!0,N=Array($.length);for(let U=0;U<$.length;U++){let B=$.charCodeAt(U);if(B===58||B<33||B>126)throw P70.InvalidArgumentError.format("header",`'${$[U]}' is not a valid character in a header name`);if(F&&97<=B&&B<=122)B-=32;else if(!F&&65<=B&&B<=90)B+=32;N[U]=B,F=B==45}return String.fromCharCode(...N)}function js6($=0,Z=""){if($===0&&Z!=="")throw P70.InvalidArgumentError.format("code","is required");else if($>0&&Z==="")throw P70.InvalidArgumentError.format("description","is required");return new Fy($,Z)}var Jp0="NATS/1.0";class Fy{_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 Fy,Q=Ds1.TD.decode($).split(`\r
|
|
1401
1401
|
`),Y=Q[0];if(Y!==Jp0){let G=Y.replace(Jp0,"").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 $=Jp0;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
|
|
1402
1402
|
${Z}: ${X[Q]}`;return`${$}\r
|
package/dist/server/server.js
CHANGED
|
@@ -2861,7 +2861,7 @@ Respond with the structured verdict and a short reason.`,Eh$;var zh$=D(()=>{O4()
|
|
|
2861
2861
|
${G.join(`
|
|
2862
2862
|
`)}`:Y}function uW6($){let Z=new Set;for(let X of $)for(let Q of X.split(`
|
|
2863
2863
|
`)){let Y=Q.trim();if(/^Co-authored-by:\s/i.test(Y))Z.add(Y)}return[...Z]}var Yu$=200,CW6=12,vW6,bW6=300,BZ1=3;var DZ1=D(()=>{l_();AA0();vW6={aheadBy:0,behindBy:0,files:[]}});function lW6($){if(!$||$.includes(".."))return!1;return cW6.test($)}function Ju$($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!lW6(Z))return null;let{__resolveType:X,...Q}=$;return{resolveType:Z,payload:Q}}function Wu$($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var cW6;var Ku$=D(()=>{cW6=/^[\w./@-]+$/});function wZ1($){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 xa($,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 Hu$($,Z,X,Q){if(!Q.connectionId)throw new m_("Push requires a connected GitHub account. Connect mcp-github for this project and restart the sandbox.");let Y=$.organization?.id;if(!Y)throw new m_(Y9);await XB({ctx:$,connectionId:Q.connectionId,organizationId:Y,forceRefresh:!0,onLegacyMintError:(F)=>{let N=F instanceof Error?F.message:Y9;throw new m_(N)}});let{cloneUrl:G,gitUserName:J,gitUserEmail:W}=await QB(Q.connectionId,Q.owner,Q.name,$.db,$.vault).catch((F)=>{let{code:N,message:U}=Z6$(F instanceof Error?F.message:String(F));throw N?new m_(U):F}),K=Nu($),H=await Z.proxyDaemonRequest(X,"/_sandbox/config",{method:"PUT",headers:new Headers({"content-type":"application/json"}),body:JSON.stringify({git:{repository:{cloneUrl:G},identity:{userName:J,userEmail:W}},...K?{operator:K}:{}})});if(!H.ok){let F=await jB(H,dW6).catch(()=>H.statusText);throw Error(`Failed to refresh sandbox git credentials (${H.status}): ${F}`)}}var dW6=10485760,m_;var LZ1=D(()=>{tG();FA0();Wn();Mm0();Xy();m_=class m_ extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function iW6($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!mW6.test(Z))throw Error(`Invalid branch name: ${$}`)}function i_($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(nW6)])}async function oW6($,Z){let X=$.var.studioContext,Q=b3(Z.branch),Y=$.req.query("thread")??Q,G=Y&&Y===Q?Z.branchThread:Y?await X.storage.threads.get(Y).catch(()=>null):null,J=G?.virtual_mcp_id===Z.virtualMcpId?G:null,W=oS(J?.metadata?.runtime);if(W)return W;let K=BB0(Z.virtualMcpMetadata),H=K==="cms"?await t91(X,{claimName:Z.claimName,userId:Z.sandboxUserId,branch:Z.branch,virtualMcpMetadata:Z.virtualMcpMetadata}):"alive",F=K==="cms"&&H!=="alive"?"cms":"sandbox",N=!!J&&(H==="gone"||H==="alive"&&K==="cms");if(N&&J)Kn(X,J.id,F);if(K==="cms")console.log("sandbox proxy: no runtime stamp",{route:$.req.path,method:$.req.method,reason:J?"unstamped":"threadless",liveness:H,resolved:F,stamped:N});return F}async function rW6($){let Z=$.get("vmClaim");if(Z.runner)return Z.runner;try{let{provider:X}=await gZ($.var.studioContext,{userId:Z.userId,branch:Z.branch,virtualMcpMetadata:Z.virtualMcpMetadata});return X}catch{return null}}function p_($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}async function Lu($){let{virtualMcpMetadata:Z,connectionIds:X}=$.get("vmClaim"),Q=$.var.studioContext,Y=xa(Z,X);if(!Y)throw new u4(404,"AUTH","repo","Project has no GitHub repository");let G=t(Q);return UA0(Q,G.id,Y)}function EZ1($,Z){if(Z instanceof NA0)return $.json({error:Z.message},429,{...z5,...Z.retryAfterMs===null?{}:{"Retry-After":String(Math.ceil(Z.retryAfterMs/1000))}});if(Z instanceof u4){let Q=Z.status===404?404:Z.status===409||Z.status===422?409:502;return $.json({error:Z.message},Q,z5)}let X=Z instanceof Error?Z.message:String(Z);return $.json({error:X},502,z5)}async function Uu$($,Z,X){let Q;try{Q=await fetch(Z,X)}catch{return $.json({error:"Preview unreachable"},502)}let Y;try{Y=await Q.text()}catch{return $.json({error:"Preview unreachable"},502)}return new Response(Y,{status:Q.status,headers:{"content-type":Q.headers.get("content-type")??"application/json"}})}async function Ou$($){try{let Z=await Lu($),X=await TA0(Z,$.get("vmClaim").branch);return $.json(X,200,z5)}catch(Z){return EZ1($,Z)}}function ya($,Z){let Q=(qA0.get($)??Promise.resolve()).catch(()=>{}).then(Z),Y=Q.catch(()=>{});return qA0.set($,Y),Y.finally(()=>{if(qA0.get($)===Y)qA0.delete($)}),Q}async function pZ($,Z,X){if(!X?.runner&&$.get("vmClaim").runtime==="cms")return $.json({error:"sandbox not found: this session is sandbox-less"},404,z5);let Q=X?.runner??p_($);if(Q instanceof Response)return Q;let{claimName:Y,userId:G,projectRef:J}=$.get("vmClaim"),W=X?.method??"POST",K=null,H=new Headers;if(X?.jsonBody!==void 0)K=X.jsonBody,H.set("content-type","application/json");else if(X?.forwardJsonBody)K=await $.req.text(),H.set("content-type","application/json");let F=X?.signal,N={method:W,headers:H,body:K,...F?{signal:F}:{}},U=async()=>{let O=await Q.proxyDaemonRequest(Y,Z,N);if(X?.map404to410&&O.status===404){try{await O.body?.cancel()}catch{}if(await Q.adoptLiveClaim?.({userId:G,projectRef:J},Y))O=await Q.proxyDaemonRequest(Y,Z,N);if(O.status===404){try{await O.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",...z5}})}}let B=await O.text(),w=X?.redactRepoDirUnlessDesktop&&Q.kind!=="user-desktop"?aW6(B):B,L=O.headers.get("content-type")??"application/json";return new Response(w,{status:O.status,headers:{"content-type":L,...z5}})};try{if(F){let O=U();return O.catch(()=>{}),await Promise.race([O,new Promise((w,L)=>{if(F.aborted)return L(F.reason);F.addEventListener("abort",()=>L(F.reason),{once:!0})})])}return await U()}catch(O){let B=O instanceof Error?O.message:String(O);return $.json({error:`Daemon unreachable: ${B}`},502)}}function aW6($){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 MA0($,Z,X,Q="GET",Y){let G=await $.proxyDaemonRequest(Z,X,{method:Q,headers:new Headers,body:null});if(G.status===404&&Y){try{await G.body?.cancel()}catch{}if(await $.adoptLiveClaim?.(Y,Z))G=await $.proxyDaemonRequest(Z,X,{method:Q,headers:new Headers,body:null})}if(G.status===404){try{await G.body?.cancel()}catch{}throw Error("SANDBOX_GONE")}let J=await G.text();if(!G.ok){let W=`Daemon error (${G.status})`;try{W=JSON.parse(J).error??W}catch{}throw Error(W)}return JSON.parse(J)}function sW6($){return Bu$.includes($)}var mW6,Fu$=524288,pW6=65536,nW6=1e4,Nu$=2000,tW6,qA0,z5,Bu$,Du$=()=>{let $=new F1;$.use("/:virtualMcpId/:branch/*",tW6),$.post("/:virtualMcpId/:branch/write",(X)=>pZ(X,"/_sandbox/write",{forwardJsonBody:!0,signal:i_(X)})),$.post("/:virtualMcpId/:branch/unlink",(X)=>pZ(X,"/_sandbox/unlink",{forwardJsonBody:!0,signal:i_(X)})),$.post("/:virtualMcpId/:branch/mkdir",(X)=>pZ(X,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:i_(X)})),$.post("/:virtualMcpId/:branch/rename",(X)=>pZ(X,"/_sandbox/rename",{forwardJsonBody:!0,signal:i_(X)})),$.post("/:virtualMcpId/:branch/read",(X)=>pZ(X,"/_sandbox/read",{forwardJsonBody:!0,signal:i_(X)})),$.post("/:virtualMcpId/:branch/glob",(X)=>pZ(X,"/_sandbox/glob",{forwardJsonBody:!0,signal:i_(X)})),$.post("/:virtualMcpId/:branch/grep",(X)=>pZ(X,"/_sandbox/grep",{forwardJsonBody:!0,signal:i_(X)})),$.post("/:virtualMcpId/:branch/exec/:script",async(X)=>{let Q=X.req.param("script");if(!Q)return X.json({error:"missing script name"},400);return pZ(X,`/_sandbox/exec/${encodeURIComponent(Q)}`)}),$.post("/:virtualMcpId/:branch/exec/:script/kill",async(X)=>{let Q=X.req.param("script");if(!Q)return X.json({error:"missing script name"},400);return pZ(X,`/_sandbox/exec/${encodeURIComponent(Q)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(X)=>pZ(X,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDirUnlessDesktop:!0})),$.put("/:virtualMcpId/:branch/config",(X)=>pZ(X,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(X)=>{let Q=X.req.param("step");if(!Q||!sW6(Q))return X.json({error:`step must be one of: ${Bu$.join(", ")}`},400);let Y=X.get("vmClaim"),G=await t91(X.var.studioContext,{claimName:Y.claimName,userId:Y.userId,branch:Y.branch,virtualMcpMetadata:Y.virtualMcpMetadata})==="gone"?null:await rW6(X);if(!G)return X.json({error:"sandbox not found: nothing is running at this ref"},404,z5);if(Q==="start"){let J=t(X.var.studioContext),W=zy(Y.virtualMcpMetadata);try{await FB0({ctx:X.var.studioContext,runner:G,handle:Y.claimName,orgId:J.id,userId:Y.callerUserId,entries:W})}catch(K){let H=K instanceof Error?K.message:String(K);return X.json({error:`Failed to push env to daemon: ${H}`},502)}}return pZ(X,`/_sandbox/setup/${Q}`,{signal:X.req.raw.signal,map404to410:!0,runner:G})}),$.get("/:virtualMcpId/:branch/events",(X)=>{let Q=X.get("vmClaim");if(!Q.runner)return kN(X,async(Y)=>{await Y.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:"No sandbox runner configured on this studio instance."})})});return Uh$(X,{ctx:X.var.studioContext,claimName:Q.claimName,runner:Q.runner,virtualMcpId:Q.virtualMcpId,branch:Q.branch,userId:Q.userId,projectRef:Q.projectRef,virtualMcpMetadata:Q.virtualMcpMetadata})}),$.get("/:virtualMcpId/:branch/git/status",(X)=>{if(X.get("vmClaim").runtime==="cms")return Ou$(X);return Z(X)});let Z=(X)=>pZ(X,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([X.req.raw.signal,AbortSignal.timeout(Nu$)])});return $.post("/:virtualMcpId/:branch/git/status",(X)=>{if(X.get("vmClaim").runtime==="cms")return Ou$(X);return pZ(X,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([X.req.raw.signal,AbortSignal.timeout(Nu$)])})}),$.post("/:virtualMcpId/:branch/git/diff",async(X)=>{let Q=X.get("vmClaim");if(Q.runtime==="cms")try{let Y=await X.req.json().catch(()=>({})),G=await Lu(X),J=await RA0(G,Q.branch,Y.base);return X.json(J,200,z5)}catch(Y){return EZ1(X,Y)}return pZ(X,"/_sandbox/git/diff",{forwardJsonBody:!0,map404to410:!0})}),$.post("/:virtualMcpId/:branch/git/publish",async(X)=>{if(X.get("vmClaim").runtime==="cms")return X.json({ok:!0},200,z5);let Q=p_(X);if(Q instanceof Response)return Q;let{claimName:Y,virtualMcpMetadata:G,connectionIds:J}=X.get("vmClaim"),W=X.var.studioContext;return ya(Y,async()=>{try{await o91(W,Q,Y);let K=xa(G,J);if(K)await Hu$(W,Q,Y,K)}catch(K){if(K instanceof m_)return X.json({error:K.message},403,z5);let H=K instanceof Error?K.message:String(K);return X.json({error:H},502,z5)}return pZ(X,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/discard",async(X)=>{let Q=X.get("vmClaim");if(Q.runtime==="cms")return ya(Q.claimName,async()=>{let Y=await X.req.json().catch(()=>({})),G=Array.isArray(Y.filepaths)?Y.filepaths.filter((J)=>typeof J==="string"):[];if(G.length===0)return X.json({error:"filepaths is required"},400,z5);try{let J=await Lu(X);return await Gu$(J,Q.branch,G),X.json({ok:!0},200,z5)}catch(J){let W=J instanceof u4&&J.status===409?409:502,K=J instanceof Error?J.message:String(J);return X.json({error:K},W,z5)}});return ya(Q.claimName,()=>pZ(X,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0}))}),$.post("/:virtualMcpId/:branch/git/rebase",async(X)=>{let Q=X.get("vmClaim");if(Q.runtime==="cms")return ya(Q.claimName,async()=>{try{let W=await X.req.json().catch(()=>({})),K=await Lu(X),H=W.base??await K.getDefaultBranch();return await IA0(K,Q.branch,H),X.json({ok:!0},200,z5)}catch(W){return EZ1(X,W)}});let Y=p_(X);if(Y instanceof Response)return Y;let{claimName:G}=X.get("vmClaim"),J=X.var.studioContext;return ya(G,async()=>{try{await o91(J,Y,G)}catch(W){let K=W instanceof Error?W.message:String(W);return X.json({error:K},502,z5)}return pZ(X,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",k9({maxSize:Fu$,onError:(X)=>X.json({error:"Payload too large"},413,z5)}),async(X)=>{let Q=X.get("vmClaim"),Y=null;if(Q.runtime!=="cms"){let H=p_(X);if(H instanceof Response)return H;Y=H}let{claimName:G,userId:J,projectRef:W}=Q,K=X.var.studioContext;try{let H=await X.req.json().catch(()=>({})),F=H.status,N=H.diff,U=N!=null&&typeof N.diffs==="object"&&N.diffs!==null,[O,B]=s91(F)&&U?[F,N]:Y?await Promise.all([MA0(Y,G,"/_sandbox/git/status","GET",{userId:J,projectRef:W}),MA0(Y,G,"/_sandbox/git/diff","GET",{userId:J,projectRef:W})]):await(async()=>{let L=await Lu(X);return Promise.all([TA0(L,Q.branch),RA0(L,Q.branch)])})(),w=await Lh$(K,O,B);return X.json(w,200,z5)}catch(H){let F=H instanceof Error?H.message:String(H);if(F==="SANDBOX_GONE")return X.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,z5);return X.json({error:F},502,z5)}}),$.post("/:virtualMcpId/:branch/git/judge-review",k9({maxSize:Fu$,onError:(X)=>X.json({error:"Payload too large"},413,z5)}),async(X)=>{let Q=X.get("vmClaim"),Y=null;if(Q.runtime!=="cms"){let H=p_(X);if(H instanceof Response)return H;Y=H}let{claimName:G,userId:J,projectRef:W}=Q,K=X.var.studioContext;try{let H=await X.req.json().catch(()=>({})),F=H.status,N=H.diff,U=N!=null&&typeof N.diffs==="object"&&N.diffs!==null,[O,B]=s91(F)&&U?[F,N]:Y?await Promise.all([MA0(Y,G,"/_sandbox/git/status","GET",{userId:J,projectRef:W}),MA0(Y,G,"/_sandbox/git/diff","GET",{userId:J,projectRef:W})]):await(async()=>{let L=await Lu(X);return Promise.all([TA0(L,Q.branch),RA0(L,Q.branch)])})(),w=await jh$(K,O,B,typeof H.language==="string"?H.language:void 0);return X.json(w,200,z5)}catch(H){let F=H instanceof Error?H.message:String(H);if(F==="SANDBOX_GONE")return X.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,z5);return X.json({error:F},502,z5)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(X)=>{let Q=p_(X);if(Q instanceof Response)return Q;let{claimName:Y}=X.get("vmClaim"),G=X.req.query("path");if(!G||!G.startsWith("/")||G.startsWith("//")||G.includes("..")||G.includes("\\"))return X.json({error:"Path not allowed"},403);let J;try{J=await Q.getPreviewUrl(Y)}catch{return X.json({error:"Preview not available"},502)}if(!J)return X.json({error:"Preview not available"},502);let W=J.replace(/\/+$/,""),K=wZ1(`${W}${G}`);return Uu$(X,K?.url??`${W}${G}`,{...K?{headers:{host:K.hostHeader}}:{}})}),$.post("/:virtualMcpId/:branch/preview-invoke",k9({maxSize:pW6,onError:(X)=>X.json({error:"Payload too large"},413)}),async(X)=>{let Q=p_(X);if(Q instanceof Response)return Q;let{claimName:Y}=X.get("vmClaim"),G;try{G=await Q.getPreviewUrl(Y)}catch{return X.json({error:"Preview not available"},502)}if(!G)return X.json({error:"Preview not available"},502);let J;try{J=await X.req.json()}catch{return X.json({error:"Invalid JSON body"},400)}if(!J||typeof J!=="object"||Array.isArray(J))return X.json({error:"Invalid JSON body"},400);let W=Ju$(J);if(!W)return X.json({error:"Invalid or missing __resolveType"},400);let K=Wu$(G,W.resolveType),H=wZ1(K);return Uu$(X,H?.url??K,{method:"POST",headers:{"content-type":"application/json",...H?{host:H.hostHeader}:{}},body:JSON.stringify(W.payload),signal:AbortSignal.timeout(30000)})}),$};var wu$=D(()=>{D8();jN();Fu();n91();VF();Hh$();x3();Py();Fh$();yF();Nh$();Oh$();ap0();Gn();ZZ1();zh$();JZ1();l_();DZ1();Ku$();LZ1();mW6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;tW6=HA0(async($,Z)=>{let X=$.var.studioContext;try{r(X)}catch{return $.json({error:"Unauthorized"},401)}let Q=Y1(X);if(!Q)return $.json({error:"Unauthorized"},401);let Y;try{Y=t(X)}catch{return $.json({error:"Organization scope required"},403)}let G=$.req.param("virtualMcpId"),J=$.req.param("branch");if(!G||!J)return $.json({error:"virtualMcpId and branch are required"},400);try{iW6(J)}catch(w){let L=w instanceof Error?w.message:String(w);return $.json({error:L},400)}let W=await X.storage.virtualMcps.findById(G);if(!W||W.organization_id!==Y.id)return $.json({error:"Virtual MCP not found"},404);let K=Ap({orgId:Y.id,virtualMcpId:G,branch:J}),H=await pp0(X,J),F=np0(H,Q),N=Kh$({userId:F,projectRef:K}),U=W.metadata??null,O=await oW6($,{claimName:N,branch:J,virtualMcpId:G,sandboxUserId:F,virtualMcpMetadata:U,branchThread:H});if(O==="cms")return $.set("vmClaim",{claimName:N,callerUserId:Q,runner:null,virtualMcpId:G,branch:J,userId:F,projectRef:K,virtualMcpMetadata:U,connectionIds:W.connections?.map((w)=>w.connection_id)??[],runtime:O}),Z();let B;try{B=(await gZ(X,{userId:F,branch:J,virtualMcpMetadata:U})).provider}catch{B=null}if(!B)return $.json({error:"No sandbox runner found"},404);return $.set("vmClaim",{claimName:N,callerUserId:Q,runner:B,virtualMcpId:G,branch:J,userId:F,projectRef:K,virtualMcpMetadata:U,connectionIds:W.connections?.map((w)=>w.connection_id)??[],runtime:O}),Z()});qA0=new Map;z5={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};Bu$=["clone","install","start"]});function Lu$($,Z,X){let Q=jZ1.get($);if(!Q)Q={pending:null,running:!1},jZ1.set($,Q);if(!Q.pending)Q.pending={set:new Map,del:new Set,deps:Z,resolvers:[],rejecters:[]};let Y=Q.pending;Y.deps=Z;for(let[J,W]of Object.entries(X.set??{}))Y.set.set(J,W),Y.del.delete(J);for(let J of X.delete??[])Y.del.add(J),Y.set.delete(J);let G=new Promise((J,W)=>{Y.resolvers.push(J),Y.rejecters.push(W)});if(!Q.running)$K6($,Q);return G}async function $K6($,Z){Z.running=!0;try{while(Z.pending){let X=Z.pending;Z.pending=null;try{let Q=await ZK6(X);for(let Y of X.resolvers)Y(Q)}catch(Q){for(let Y of X.rejecters)Y(Q)}}}finally{if(Z.running=!1,!Z.pending)jZ1.delete($)}}async function ZK6($){let{client:Z,branch:X,packagePath:Q}=$.deps;for(let Y=0;;Y++){let G=await wu(Z,X),J=await Z.getCommitTreeSha(G),W=await Z.getTreeRecursive(J),K=UZ1(W,Q),H=[],F=new Map(K.map((B)=>[B.path,{stem:B.stem,sha:B.sha}]));for(let[B,w]of $.set){let L=OZ1(K,B),E=`${JSON.stringify(w,null,2)}
|
|
2864
|
-
`,j=await Z.createBlob(E);await Zu$(Z.owner,Z.repo,j,E);let z=L[0]??`${PA0(Q)}/${WZ1(B)}.json`;H.push({path:z,mode:"100644",type:"blob",sha:j});let A=z.slice(z.lastIndexOf("/")+1,-5);F.set(z,{stem:A,sha:j,content:E});for(let P of L.slice(1))H.push({path:P,mode:"100644",type:"blob",sha:null}),F.delete(P)}for(let B of $.del)for(let w of OZ1(K,B))H.push({path:w,mode:"100644",type:"blob",sha:null}),F.delete(w);if(H.length===0)return G;let N=Q?`${Q}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((B)=>B.type==="blob"&&B.path===N)){let B=await Promise.all([...F.values()].map(async(j)=>({stem:j.stem,content:j.content??await Z.getBlobText(j.sha)}))),{decofile:w,skipped:L}=_a(B);if(L.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:`${Z.owner}/${Z.repo}`,branch:X,packagePath:Q,blocks:L.map((j)=>j.key)});let E=await Z.createBlob(w);H.push({path:N,mode:"100644",type:"blob",sha:E})}let U=await Z.createTree(J,H),O=await Z.createCommit({message:XK6($),treeSha:U,parentShas:[G]});try{return await Z.updateRef(X,O),O}catch(B){if(!(B instanceof u4&&B.status===422)||Y>=eW6-1)throw B;await R$(oZ(2000,200,Y,2,0.5))}}}function XK6($){let Z=(Y)=>{let G=Y.slice(0,3).join(", ");return Y.length>3?`${G} (+${Y.length-3} more)`:G},X=[];if($.set.size>0)X.push(`update ${Z([...$.set.keys()])}`);if($.del.size>0)X.push(`delete ${Z([...$.del])}`);let Q=`chore(decofile): ${X.join("; ")}`;return Em0(Q,$.deps.coAuthor)}var eW6=3,jZ1;var Eu$=D(()=>{XB0();BA0();q4();l_();AA0();jZ1=new Map});import{createHmac as ju$,randomBytes as QK6,timingSafeEqual as YK6}from"crypto";function zu$(){if(kA0)return kA0;let $;try{let Z=b0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return kA0=$?Buffer.from($):QK6(32),kA0}function zZ1($){let Z=$.nowMs??Date.now(),X={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+GK6)/1000)},Q=Buffer.from(JSON.stringify(X)).toString("base64url"),Y=ju$("sha256",zu$()).update(Q).digest("base64url");return`${Q}.${Y}`}function Pu$($,Z){let X=$.indexOf(".");if(X<0)return!1;let Q=$.slice(0,X),Y=Buffer.from($.slice(X+1)),G=Buffer.from(ju$("sha256",zu$()).update(Q).digest("base64url"));if(Y.length!==G.length||!YK6(Y,G))return!1;let J;try{J=JSON.parse(Buffer.from(Q,"base64url").toString())}catch{return!1}let W=Math.floor((Z.nowMs??Date.now())/1000);return J.o===Z.organizationId&&J.m===Z.virtualMcpId&&J.b===Z.branch&&typeof J.e==="number"&&J.e>=W}var GK6=21600000,kA0=null;var Au$=D(()=>{q$()});import{z as Eu}from"zod";function WK6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&JK6.test($)}function Ru$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function VA0($){let Z=$.get("decofileScope");return UA0($.var.studioContext,Z.organizationId,Z.githubRepo)}function SA0($,Z){if(Z instanceof u4){let Q=Z.status===404?404:Z.status===409?409:Z.status===422?409:502;return $.json({error:Z.message},Q)}let X=Z instanceof Error?Z.message:String(Z);return $.json({error:X},500)}function Iu$(){let $=new F1;return $.use("/:virtualMcpId/:branch",Tu$),$.use("/:virtualMcpId/:branch/*",Tu$),$.get("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await VA0(Z),Y=await Xu$(Q,X.branch,X.packagePath,{createBranchIfMissing:!!X.userId}),G={ETag:`"${Y.sha}"`,"Cache-Control":"no-store","Access-Control-Allow-Origin":"*"};if(Z.req.header("if-none-match")===`"${Y.sha}"`)return Z.body(null,304,G);if(!X.userId)return Z.body(Y.decofile,200,{...G,"content-type":"application/json"});let J=zZ1({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.body(`{"version":${JSON.stringify(Y.sha)},"token":${JSON.stringify(J)},"apiHost":${JSON.stringify(Ru$(Z))},"decofile":${Y.decofile}}`,200,{...G,"content-type":"application/json"})}catch(Q){return SA0(Z,Q)}}),$.patch("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope"),Q=Z.var.studioContext,Y=KK6.safeParse(await Z.req.json().catch(()=>null));if(!Y.success)return Z.json({error:"Invalid body",details:Y.error.issues},400);let G=Y.data;for(let J of[...Object.keys(G.set??{}),...G.delete??[]])try{OA0(J)}catch(W){let K=W instanceof Error?W.message:String(W);return Z.json({error:K},400)}for(let[J,W]of Object.entries(G.set??{}))if(typeof W!=="object"||W===null||Array.isArray(W))return Z.json({error:`Block "${J}" must be a JSON object`},400);try{let J=await VA0(Z),W=await Lu$(`${X.organizationId}/${X.virtualMcpId}/${X.branch}`,{client:J,branch:X.branch,packagePath:X.packagePath,coAuthor:Nu(Q)},G),K=zZ1({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.json({version:W,token:K,apiHost:Ru$(Z)})}catch(J){return SA0(Z,J)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await VA0(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({error:"Branch is already the default branch"},400);let G=`chore(decofile): publish ${X.branch}`;try{let J;try{J=await Q.mergeBranch(Y,X.branch,G)}catch(W){if(!(W instanceof u4&&W.status===409))throw W;await IA0(Q,X.branch,Y),J=await Q.mergeBranch(Y,X.branch,G)}return J?Z.json({result:"merged",sha:J}):Z.json({result:"up-to-date"})}catch(J){if(J instanceof u4&&J.status===409)return Z.json({error:"merge-conflict"},409);if(J instanceof u4&&J.status===405){let K=await Q.findOpenPullRequest(Y,X.branch)??await Q.createPullRequest({base:Y,head:X.branch,title:`Publish ${X.branch}`});return Z.json({result:"pull-request",number:K.number,url:K.html_url})}throw J}}catch(Q){return SA0(Z,Q)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await VA0(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0});try{let{aheadBy:G,behindBy:J}=await Q.compare(Y,X.branch);return Z.json({baseBranch:Y,aheadBy:G,behindBy:J})}catch(G){if(G instanceof u4&&G.status===404)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0});throw G}}catch(Q){return SA0(Z,Q)}}),$}var JK6,KK6,Tu$;var qu$=D(()=>{BA0();D8();n91();FA0();LZ1();JZ1();Eu$();Au$();DZ1();l_();AA0();JK6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;KK6=Eu.object({set:Eu.record(Eu.string(),Eu.unknown()).optional(),delete:Eu.array(Eu.string()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}),Tu$=HA0(async($,Z)=>{let X=$.var.studioContext,Q=X.organization;if(!Q)return $.json({error:"Organization scope required"},500);let Y=$.req.param("virtualMcpId"),G=$.req.param("branch");if(!Y||!G)return $.json({error:"virtualMcpId and branch are required"},400);if(!WK6(G))return $.json({error:`Invalid branch name: ${G}`},400);let J=X.auth?.user?.id??null;if(!J){let O=$.req.query("token");if(!($.req.method==="GET"&&!$.req.path.match(/\/(publish|status)$/)))return $.json({error:"Unauthorized"},401);if(!O||!Pu$(O,{organizationId:Q.id,virtualMcpId:Y,branch:G}))return $.json({error:"Unauthorized"},401)}let W=await X.storage.virtualMcps.findById(Y);if(!W||W.organization_id!==Q.id)return $.json({error:"Virtual MCP not found"},404);let K=W.metadata??null;if(!OB0(K))return $.json({error:"Project has no preview server configured"},404);let F=W.connections?.map((O)=>O.connection_id)??[],N=xa(K,F);if(!N)return $.json({error:"Project has no GitHub repository"},404);let U=K?.runtime;return $.set("decofileScope",{organizationId:Q.id,virtualMcpId:Y,branch:G,packagePath:U?.path?.replace(/^\/+|\/+$/g,"")||null,githubRepo:N,userId:J}),Z()})});var Mu$=($)=>{let Z=new F1;if(Z.use("*",v_),Z.route("/",qP0()),Z.route("/",db$()),Z.route("/",og$()),Z.route("/",pg$()),Z.route("/",JA0()),Z.route("/tools",Xh$()),Z.route("/",eg$()),Z.route("/",Ig$({kvStorage:$.kvStorage})),Z.route("/",Tg$()),Z.route("/fs",hg$({getConnection:$.getNatsConnection})),Z.route("/sandbox",Du$()),Z.route("/decofile",Iu$()),Z.route("/",dg$()),Z.route("/deco-sites",kP0()),Z.route("/sso",zP0()),Z.route("/",WA0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",bb$()),$.mountDevAssets)Z.route("/dev-assets",VP0({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("/",wv$()),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",cg$()),Z.route("/mcp",_w0()),Z.route("/mcp/self",GA0()),Z.route("/mcp",bw0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var ku$=D(()=>{D8();D51();xb$();j51();SP0();Ya();O51();Rg$();qg$();ug$();Nt();G51();xw0();u91();lg$();mg$();ng$();rg$();$h$();l91();Qh$();d91();vw0();wu$();qu$()});function HK6($){return $.filter((Z)=>Z.vendors?.alias).map((Z)=>({name:Z.name,title:Z.title,description:Z.description,logo:Z.logo,category:Z.category,vendor:{alias:Z.vendors.alias,url:Z.vendors.url}}))}var FK6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},Vu$=()=>{let $=new F1;return $.use("*",FK6),$.get("/",async(Z)=>{let X=b0(),Q=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!Q||!Y)return Z.json({apps:[]});try{let G=await iZ(Q,Y,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:HK6(G)})}catch(G){return console.error("[deco-apps] GET error:",G),Z.json({error:"Failed to fetch apps"},502)}}),$};var Su$=D(()=>{D8();q$();qz0()});import{z as M1}from"zod";function FH($,Z="invalid_request_error",X=null,Q=null){return{error:{message:$,type:Z,param:X,code:Q}}}function zK6($){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 PK6($,Z,X){try{return JSON.parse($)}catch{throw new vu$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function AK6($){let Z={};for(let X of $)if(X.role==="assistant"&&X.tool_calls)for(let Q of X.tool_calls)Z[Q.id]=Q.function.name;return $.map((X)=>{switch(X.role){case"system":return{role:"system",content:X.content};case"user":if(typeof X.content==="string")return{role:"user",content:X.content};return{role:"user",content:X.content.map((Y)=>{if(Y.type==="text")return{type:"text",text:Y.text};return{type:"image",image:Y.image_url.url}})};case"assistant":if(X.tool_calls&&X.tool_calls.length>0)return{role:"assistant",content:X.tool_calls.map((Y)=>({type:"tool-call",toolCallId:Y.id,toolName:Y.function.name,input:PK6(Y.function.arguments,Y.id,Y.function.name)}))};return{role:"assistant",content:X.content??""};case"tool":let Q=Z[X.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:X.tool_call_id,toolName:Q,output:{type:"text",value:X.content}}]}}})}function TK6($){let Z=$.map((X)=>{let Q=X.function.parameters?gY(X.function.parameters):gY({type:"object",properties:{}});return[X.function.name,I$({description:X.function.description,inputSchema:Q})]});return Object.fromEntries(Z)}function RK6($){if(!$)return;return{openai:{response_format:$}}}function IK6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function Cu$($,Z,X,Q,Y,G){let J={model:$,messages:Z,tools:X,temperature:Q.temperature,maxTokens:Q.max_tokens,topP:Q.top_p,frequencyPenalty:Q.frequency_penalty,presencePenalty:Q.presence_penalty,stopSequences:Q.stop?Array.isArray(Q.stop)?Q.stop:[Q.stop]:void 0,abortSignal:G};return Y?{...J,providerOptions:Y}:J}function _u$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var NK6=256,UK6,OK6,BK6,DK6,wK6,LK6,EK6,jK6,vu$,fu$,bu$;var xu$=D(()=>{O4();D8();Fu();WN();UK6=M1.object({type:M1.literal("function"),function:M1.object({name:M1.string(),description:M1.string().optional(),parameters:M1.record(M1.string(),M1.unknown()).optional()})}),OK6=M1.object({id:M1.string(),type:M1.literal("function"),function:M1.object({name:M1.string(),arguments:M1.string()})}),BK6=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(OK6).optional()}),M1.object({role:M1.literal("tool"),content:M1.string(),tool_call_id:M1.string()})]),DK6=M1.object({type:M1.literal("text")}),wK6=M1.object({type:M1.literal("json_object")}),LK6=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()})}),EK6=M1.union([DK6,wK6,LK6]),jK6=M1.object({model:M1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:M1.array(BK6),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(UK6).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:EK6.optional(),user:M1.string().optional()});vu$=class vu$ extends Error{constructor($){super($);this.name="MessageConversionError"}};fu$=new F1;fu$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(FH("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(FH("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(FH("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Q=await $.req.json(),Y=jK6.safeParse(Q);if(!Y.success){let L=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(FH(`Invalid request: ${L.message}`,"invalid_request_error",L.path.length>0?L.path.join("."):null),400)}let G=Y.data,J=zK6(G.model);if(!J)return $.json(FH("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)=>gw(j.providerId));if(!E)return $.json(FH("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(FH(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),N=AK6(G.messages),U=G.tools?TK6(G.tools):void 0,O=RK6(G.response_format),B=IK6(),w=Math.floor(Date.now()/1000);if(G.stream)return kN($,async(L)=>{let E=Cu$(F,N,U,G,O,$.req.raw.signal);try{let j=$B(E),z=!1,A=0,P="",I=async()=>{if(P.length===0)return;let q=P;P="",await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:w,model:G.model,choices:[{index:0,delta:{content:q},finish_reason:null}]})})};for await(let q of j.fullStream){if(!z&&(q.type==="text-delta"||q.type==="tool-call"))await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:w,model:G.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(q.type==="text-delta"){if(P+=q.text,P.length>=NK6)await I()}else if(q.type==="tool-call"){await I();let M=A++;await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:w,model:G.model,choices:[{index:0,delta:{tool_calls:[{index:M,id:q.toolCallId,type:"function",function:{name:q.toolName,arguments:JSON.stringify(q.input)}}]},finish_reason:null}]})})}else if(q.type==="finish")await I(),await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:w,model:G.model,choices:[{index:0,delta:{},finish_reason:_u$(q.finishReason)}],usage:q.totalUsage?{prompt_tokens:q.totalUsage.inputTokens??0,completion_tokens:q.totalUsage.outputTokens??0,total_tokens:q.totalUsage.totalTokens??0}:void 0})})}await I(),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=Cu$(F,N,U,G,O,$.req.raw.signal),E=await sO(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:B,object:"chat.completion",created:w,model:G.model,choices:[{index:0,message:j,finish_reason:_u$(E.finishReason)}],usage:{prompt_tokens:E.usage?.inputTokens??0,completion_tokens:E.usage?.outputTokens??0,total_tokens:E.usage?.totalTokens??0}})}}catch(Q){let Y=Q;if(Y.name==="AbortError")return $.json(FH("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(FH(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(FH(Y.message,"server_error"),500)}});bu$=fu$});function qK6($){if(typeof $!=="object"||$===null)return!1;let X=$.githubRepo?.url;return typeof X==="string"&&X.length>0}function yu$(){let $=new F1;return $.use("*",async(Z,X)=>{await X(),Z.header("Cache-Control","private, no-store"),Z.header("Vary","Cookie")}),$.get("/",async(Z)=>{let X=Z.get("studioContext"),Q=Y1(X);if(!Q)return Z.json({error:"Authentication required"},401);let G=(Z.req.query("site")??"").trim().toLowerCase();if(!dG(G))return Z.json({error:"Invalid site slug"},400);let J=await X.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["organization.id as id","organization.slug as slug","organization.name as name","organization.metadata as metadata"]).where("member.userId","=",Q).execute(),W=[];for(let H of J){if(!H.slug||H7(H))continue;let F=await X.storage.virtualMcps.list(H.id);for(let N of F){if(da1(N)!==G)continue;if(!qK6(N.metadata))continue;W.push({orgSlug:H.slug,orgName:H.name??H.slug,project:{id:N.id,title:N.title,icon:N.icon??null}})}}let K={matches:W};return Z.json(K)}),$}var gu$=D(()=>{D8();hO()});var uu$;var hu$=D(()=>{uu$={name:"decocms",version:"4.257.0",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@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 VK6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??kK6}}var cu$,kK6="https://ph.studio.decocms.com",lu$;var du$=D(()=>{D8();th0();IC();f9();q$();$51();hu$();cu$=new F1;cu$.get("/",($)=>{let Z={version:uu$.version,theme:Dm1(),...kL().logo&&{logo:kL().logo},...vK()&&{internalUrl:pS1()},...b0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!b0().firecrawlApiKey,auth:$b$(),posthog:VK6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!vK()&&b0().sandboxProviderKind==="agent-sandbox"}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});lu$=cu$});function ju($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function PZ1($){return(ju($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function iu$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(ju($))}&sz=${Z}`}function mu$($,Z){let X=$.trim();if(X.length<=Z)return X;let Q=X.slice(0,Z-1),Y=Q.lastIndexOf(" ");return`${(Y>Z*0.6?Q.slice(0,Y):Q).trimEnd()}\u2026`}function pu$($){let{brand:Z,domain:X,score:Q,verdict:Y}=$,G=typeof Q==="number"?`${Z} commerce report \u2014 ${Math.round(Q)}/100 \xB7 decocms`:`${Z} commerce report \xB7 decocms`,J=`See the full ${Z} scorecard \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,W=Y?.trim()?mu$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):mu$(`How does ${X} really perform? ${J}`,200);return{title:G,description:W}}import{z as l0}from"zod";var n_,SK6,CK6,_K6,vK6,nu$;var tu$=D(()=>{n_=l0.enum(["good","bad","neutral"]),SK6=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:n_.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 $})),CK6=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(SK6)),_K6={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()},vK6=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:n_.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:n_.optional()}),l0.object({template:l0.literal("stats"),stats:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),tone:n_.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:n_.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(CK6).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:n_.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:n_.optional()})).min(1)})]),nu$=l0.object({..._K6,template:vK6})});function CA0($){let Z=[],X=[...$.sections].sort((Y,G)=>Y.position-G.position).map((Y)=>{let G=nu$.safeParse(Y.props);if(G.success)return G.data;let J=G.error.issues[0];return Z.push({section_type:Y.section_type,position:Y.position,reason:J?`${J.path.join(".")||"(root)"}: ${J.message}`:"contract violation"}),null}).filter((Y)=>Y!==null),Q=X.filter((Y)=>Y.template.template!=="cover"&&Y.template.template!=="cta").map((Y)=>({key:Y.key,title:Y.title}));return{deck:{meta:{...$.meta,scores:$.summary?.scores,scannedAt:$.scanned_at,toc:Q},slides:X},drops:Z}}var AZ1=D(()=>{tu$()});import{join as ou$}from"path";async function bK6($){try{let Z=await fetch(`${XK({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(fK6)});if(!Z.ok)return null;let X=await Z.json(),{deck:Q}=CA0(X);if(!Q.slides.length)return null;let Y=Q.slides.find((W)=>W.template.template==="cover"),G=Y?.template,J=G&&G.template==="cover"?G:void 0;return{brand:Q.meta.brand?.trim()||PZ1($),score:Q.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function WG($){return $.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function xK6($,Z){let X=ju($),Q=Z?.brand?.trim()||PZ1(X),Y=iu$(X,128),J=`${(b0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=pu$({brand:Q,domain:X,score:Z?.score,verdict:Z?.verdict}),H=`${J}/og.png`,F=`${Q} commerce report by decocms`;return[`<title>${WG(W)}</title>`,`<meta name="description" content="${WG(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="${WG(W)}" />`,`<meta property="og:description" content="${WG(K)}" />`,`<meta property="og:url" content="${WG(J)}" />`,`<meta property="og:image" content="${WG(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${WG(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${WG(W)}" />`,`<meta name="twitter:description" content="${WG(K)}" />`,`<meta name="twitter:image" content="${WG(H)}" />`,`<meta name="twitter:image:alt" content="${WG(F)}" />`,`<link rel="canonical" href="${WG(J)}" />`,`<link rel="icon" href="${WG(Y)}" sizes="any" />`].join(`
|
|
2864
|
+
`,j=await Z.createBlob(E);await Zu$(Z.owner,Z.repo,j,E);let z=L[0]??`${PA0(Q)}/${WZ1(B)}.json`;H.push({path:z,mode:"100644",type:"blob",sha:j});let A=z.slice(z.lastIndexOf("/")+1,-5);F.set(z,{stem:A,sha:j,content:E});for(let P of L.slice(1))H.push({path:P,mode:"100644",type:"blob",sha:null}),F.delete(P)}for(let B of $.del)for(let w of OZ1(K,B))H.push({path:w,mode:"100644",type:"blob",sha:null}),F.delete(w);if(H.length===0)return G;let N=Q?`${Q}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((B)=>B.type==="blob"&&B.path===N)){let B=await Promise.all([...F.values()].map(async(j)=>({stem:j.stem,content:j.content??await Z.getBlobText(j.sha)}))),{decofile:w,skipped:L}=_a(B);if(L.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:`${Z.owner}/${Z.repo}`,branch:X,packagePath:Q,blocks:L.map((j)=>j.key)});let E=await Z.createBlob(w);H.push({path:N,mode:"100644",type:"blob",sha:E})}let U=await Z.createTree(J,H),O=await Z.createCommit({message:XK6($),treeSha:U,parentShas:[G]});try{return await Z.updateRef(X,O),O}catch(B){if(!(B instanceof u4&&B.status===422)||Y>=eW6-1)throw B;await R$(oZ(2000,200,Y,2,0.5))}}}function XK6($){let Z=(Y)=>{let G=Y.slice(0,3).join(", ");return Y.length>3?`${G} (+${Y.length-3} more)`:G},X=[];if($.set.size>0)X.push(`update ${Z([...$.set.keys()])}`);if($.del.size>0)X.push(`delete ${Z([...$.del])}`);let Q=`chore(decofile): ${X.join("; ")}`;return Em0(Q,$.deps.coAuthor)}var eW6=3,jZ1;var Eu$=D(()=>{XB0();BA0();q4();l_();AA0();jZ1=new Map});import{createHmac as ju$,randomBytes as QK6,timingSafeEqual as YK6}from"crypto";function zu$(){if(kA0)return kA0;let $;try{let Z=b0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return kA0=$?Buffer.from($):QK6(32),kA0}function zZ1($){let Z=$.nowMs??Date.now(),X={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+GK6)/1000)},Q=Buffer.from(JSON.stringify(X)).toString("base64url"),Y=ju$("sha256",zu$()).update(Q).digest("base64url");return`${Q}.${Y}`}function Pu$($,Z){let X=$.indexOf(".");if(X<0)return!1;let Q=$.slice(0,X),Y=Buffer.from($.slice(X+1)),G=Buffer.from(ju$("sha256",zu$()).update(Q).digest("base64url"));if(Y.length!==G.length||!YK6(Y,G))return!1;let J;try{J=JSON.parse(Buffer.from(Q,"base64url").toString())}catch{return!1}let W=Math.floor((Z.nowMs??Date.now())/1000);return J.o===Z.organizationId&&J.m===Z.virtualMcpId&&J.b===Z.branch&&typeof J.e==="number"&&J.e>=W}var GK6=21600000,kA0=null;var Au$=D(()=>{q$()});import{z as Eu}from"zod";function WK6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&JK6.test($)}function Ru$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function VA0($){let Z=$.get("decofileScope");return UA0($.var.studioContext,Z.organizationId,Z.githubRepo)}function SA0($,Z){if(Z instanceof u4){let Q=Z.status===404?404:Z.status===409?409:Z.status===422?409:502;return $.json({error:Z.message},Q)}let X=Z instanceof Error?Z.message:String(Z);return $.json({error:X},500)}function Iu$(){let $=new F1;return $.use("/:virtualMcpId/:branch",Tu$),$.use("/:virtualMcpId/:branch/*",Tu$),$.get("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await VA0(Z),Y=await Xu$(Q,X.branch,X.packagePath,{createBranchIfMissing:!!X.userId}),G={ETag:`"${Y.sha}"`,"Cache-Control":"no-store","Access-Control-Allow-Origin":"*"};if(Z.req.header("if-none-match")===`"${Y.sha}"`)return Z.body(null,304,G);if(!X.userId)return Z.body(Y.decofile,200,{...G,"content-type":"application/json"});let J=zZ1({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.body(`{"version":${JSON.stringify(Y.sha)},"token":${JSON.stringify(J)},"apiHost":${JSON.stringify(Ru$(Z))},"decofile":${Y.decofile}}`,200,{...G,"content-type":"application/json"})}catch(Q){return SA0(Z,Q)}}),$.patch("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope"),Q=Z.var.studioContext,Y=KK6.safeParse(await Z.req.json().catch(()=>null));if(!Y.success)return Z.json({error:"Invalid body",details:Y.error.issues},400);let G=Y.data;for(let J of[...Object.keys(G.set??{}),...G.delete??[]])try{OA0(J)}catch(W){let K=W instanceof Error?W.message:String(W);return Z.json({error:K},400)}for(let[J,W]of Object.entries(G.set??{}))if(typeof W!=="object"||W===null||Array.isArray(W))return Z.json({error:`Block "${J}" must be a JSON object`},400);try{let J=await VA0(Z),W=await Lu$(`${X.organizationId}/${X.virtualMcpId}/${X.branch}`,{client:J,branch:X.branch,packagePath:X.packagePath,coAuthor:Nu(Q)},G),K=zZ1({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.json({version:W,token:K,apiHost:Ru$(Z)})}catch(J){return SA0(Z,J)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await VA0(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({error:"Branch is already the default branch"},400);let G=`chore(decofile): publish ${X.branch}`;try{let J;try{J=await Q.mergeBranch(Y,X.branch,G)}catch(W){if(!(W instanceof u4&&W.status===409))throw W;await IA0(Q,X.branch,Y),J=await Q.mergeBranch(Y,X.branch,G)}return J?Z.json({result:"merged",sha:J}):Z.json({result:"up-to-date"})}catch(J){if(J instanceof u4&&J.status===409)return Z.json({error:"merge-conflict"},409);if(J instanceof u4&&J.status===405){let K=await Q.findOpenPullRequest(Y,X.branch)??await Q.createPullRequest({base:Y,head:X.branch,title:`Publish ${X.branch}`});return Z.json({result:"pull-request",number:K.number,url:K.html_url})}throw J}}catch(Q){return SA0(Z,Q)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await VA0(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0});try{let{aheadBy:G,behindBy:J}=await Q.compare(Y,X.branch);return Z.json({baseBranch:Y,aheadBy:G,behindBy:J})}catch(G){if(G instanceof u4&&G.status===404)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0});throw G}}catch(Q){return SA0(Z,Q)}}),$}var JK6,KK6,Tu$;var qu$=D(()=>{BA0();D8();n91();FA0();LZ1();JZ1();Eu$();Au$();DZ1();l_();AA0();JK6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;KK6=Eu.object({set:Eu.record(Eu.string(),Eu.unknown()).optional(),delete:Eu.array(Eu.string()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}),Tu$=HA0(async($,Z)=>{let X=$.var.studioContext,Q=X.organization;if(!Q)return $.json({error:"Organization scope required"},500);let Y=$.req.param("virtualMcpId"),G=$.req.param("branch");if(!Y||!G)return $.json({error:"virtualMcpId and branch are required"},400);if(!WK6(G))return $.json({error:`Invalid branch name: ${G}`},400);let J=X.auth?.user?.id??null;if(!J){let O=$.req.query("token");if(!($.req.method==="GET"&&!$.req.path.match(/\/(publish|status)$/)))return $.json({error:"Unauthorized"},401);if(!O||!Pu$(O,{organizationId:Q.id,virtualMcpId:Y,branch:G}))return $.json({error:"Unauthorized"},401)}let W=await X.storage.virtualMcps.findById(Y);if(!W||W.organization_id!==Q.id)return $.json({error:"Virtual MCP not found"},404);let K=W.metadata??null;if(!OB0(K))return $.json({error:"Project has no preview server configured"},404);let F=W.connections?.map((O)=>O.connection_id)??[],N=xa(K,F);if(!N)return $.json({error:"Project has no GitHub repository"},404);let U=K?.runtime;return $.set("decofileScope",{organizationId:Q.id,virtualMcpId:Y,branch:G,packagePath:U?.path?.replace(/^\/+|\/+$/g,"")||null,githubRepo:N,userId:J}),Z()})});var Mu$=($)=>{let Z=new F1;if(Z.use("*",v_),Z.route("/",qP0()),Z.route("/",db$()),Z.route("/",og$()),Z.route("/",pg$()),Z.route("/",JA0()),Z.route("/tools",Xh$()),Z.route("/",eg$()),Z.route("/",Ig$({kvStorage:$.kvStorage})),Z.route("/",Tg$()),Z.route("/fs",hg$({getConnection:$.getNatsConnection})),Z.route("/sandbox",Du$()),Z.route("/decofile",Iu$()),Z.route("/",dg$()),Z.route("/deco-sites",kP0()),Z.route("/sso",zP0()),Z.route("/",WA0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",bb$()),$.mountDevAssets)Z.route("/dev-assets",VP0({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("/",wv$()),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",cg$()),Z.route("/mcp",_w0()),Z.route("/mcp/self",GA0()),Z.route("/mcp",bw0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var ku$=D(()=>{D8();D51();xb$();j51();SP0();Ya();O51();Rg$();qg$();ug$();Nt();G51();xw0();u91();lg$();mg$();ng$();rg$();$h$();l91();Qh$();d91();vw0();wu$();qu$()});function HK6($){return $.filter((Z)=>Z.vendors?.alias).map((Z)=>({name:Z.name,title:Z.title,description:Z.description,logo:Z.logo,category:Z.category,vendor:{alias:Z.vendors.alias,url:Z.vendors.url}}))}var FK6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},Vu$=()=>{let $=new F1;return $.use("*",FK6),$.get("/",async(Z)=>{let X=b0(),Q=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!Q||!Y)return Z.json({apps:[]});try{let G=await iZ(Q,Y,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:HK6(G)})}catch(G){return console.error("[deco-apps] GET error:",G),Z.json({error:"Failed to fetch apps"},502)}}),$};var Su$=D(()=>{D8();q$();qz0()});import{z as M1}from"zod";function FH($,Z="invalid_request_error",X=null,Q=null){return{error:{message:$,type:Z,param:X,code:Q}}}function zK6($){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 PK6($,Z,X){try{return JSON.parse($)}catch{throw new vu$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function AK6($){let Z={};for(let X of $)if(X.role==="assistant"&&X.tool_calls)for(let Q of X.tool_calls)Z[Q.id]=Q.function.name;return $.map((X)=>{switch(X.role){case"system":return{role:"system",content:X.content};case"user":if(typeof X.content==="string")return{role:"user",content:X.content};return{role:"user",content:X.content.map((Y)=>{if(Y.type==="text")return{type:"text",text:Y.text};return{type:"image",image:Y.image_url.url}})};case"assistant":if(X.tool_calls&&X.tool_calls.length>0)return{role:"assistant",content:X.tool_calls.map((Y)=>({type:"tool-call",toolCallId:Y.id,toolName:Y.function.name,input:PK6(Y.function.arguments,Y.id,Y.function.name)}))};return{role:"assistant",content:X.content??""};case"tool":let Q=Z[X.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:X.tool_call_id,toolName:Q,output:{type:"text",value:X.content}}]}}})}function TK6($){let Z=$.map((X)=>{let Q=X.function.parameters?gY(X.function.parameters):gY({type:"object",properties:{}});return[X.function.name,I$({description:X.function.description,inputSchema:Q})]});return Object.fromEntries(Z)}function RK6($){if(!$)return;return{openai:{response_format:$}}}function IK6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function Cu$($,Z,X,Q,Y,G){let J={model:$,messages:Z,tools:X,temperature:Q.temperature,maxTokens:Q.max_tokens,topP:Q.top_p,frequencyPenalty:Q.frequency_penalty,presencePenalty:Q.presence_penalty,stopSequences:Q.stop?Array.isArray(Q.stop)?Q.stop:[Q.stop]:void 0,abortSignal:G};return Y?{...J,providerOptions:Y}:J}function _u$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var NK6=256,UK6,OK6,BK6,DK6,wK6,LK6,EK6,jK6,vu$,fu$,bu$;var xu$=D(()=>{O4();D8();Fu();WN();UK6=M1.object({type:M1.literal("function"),function:M1.object({name:M1.string(),description:M1.string().optional(),parameters:M1.record(M1.string(),M1.unknown()).optional()})}),OK6=M1.object({id:M1.string(),type:M1.literal("function"),function:M1.object({name:M1.string(),arguments:M1.string()})}),BK6=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(OK6).optional()}),M1.object({role:M1.literal("tool"),content:M1.string(),tool_call_id:M1.string()})]),DK6=M1.object({type:M1.literal("text")}),wK6=M1.object({type:M1.literal("json_object")}),LK6=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()})}),EK6=M1.union([DK6,wK6,LK6]),jK6=M1.object({model:M1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:M1.array(BK6),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(UK6).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:EK6.optional(),user:M1.string().optional()});vu$=class vu$ extends Error{constructor($){super($);this.name="MessageConversionError"}};fu$=new F1;fu$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(FH("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(FH("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(FH("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Q=await $.req.json(),Y=jK6.safeParse(Q);if(!Y.success){let L=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(FH(`Invalid request: ${L.message}`,"invalid_request_error",L.path.length>0?L.path.join("."):null),400)}let G=Y.data,J=zK6(G.model);if(!J)return $.json(FH("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)=>gw(j.providerId));if(!E)return $.json(FH("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(FH(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),N=AK6(G.messages),U=G.tools?TK6(G.tools):void 0,O=RK6(G.response_format),B=IK6(),w=Math.floor(Date.now()/1000);if(G.stream)return kN($,async(L)=>{let E=Cu$(F,N,U,G,O,$.req.raw.signal);try{let j=$B(E),z=!1,A=0,P="",I=async()=>{if(P.length===0)return;let q=P;P="",await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:w,model:G.model,choices:[{index:0,delta:{content:q},finish_reason:null}]})})};for await(let q of j.fullStream){if(!z&&(q.type==="text-delta"||q.type==="tool-call"))await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:w,model:G.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(q.type==="text-delta"){if(P+=q.text,P.length>=NK6)await I()}else if(q.type==="tool-call"){await I();let M=A++;await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:w,model:G.model,choices:[{index:0,delta:{tool_calls:[{index:M,id:q.toolCallId,type:"function",function:{name:q.toolName,arguments:JSON.stringify(q.input)}}]},finish_reason:null}]})})}else if(q.type==="finish")await I(),await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:w,model:G.model,choices:[{index:0,delta:{},finish_reason:_u$(q.finishReason)}],usage:q.totalUsage?{prompt_tokens:q.totalUsage.inputTokens??0,completion_tokens:q.totalUsage.outputTokens??0,total_tokens:q.totalUsage.totalTokens??0}:void 0})})}await I(),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=Cu$(F,N,U,G,O,$.req.raw.signal),E=await sO(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:B,object:"chat.completion",created:w,model:G.model,choices:[{index:0,message:j,finish_reason:_u$(E.finishReason)}],usage:{prompt_tokens:E.usage?.inputTokens??0,completion_tokens:E.usage?.outputTokens??0,total_tokens:E.usage?.totalTokens??0}})}}catch(Q){let Y=Q;if(Y.name==="AbortError")return $.json(FH("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(FH(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(FH(Y.message,"server_error"),500)}});bu$=fu$});function qK6($){if(typeof $!=="object"||$===null)return!1;let X=$.githubRepo?.url;return typeof X==="string"&&X.length>0}function yu$(){let $=new F1;return $.use("*",async(Z,X)=>{await X(),Z.header("Cache-Control","private, no-store"),Z.header("Vary","Cookie")}),$.get("/",async(Z)=>{let X=Z.get("studioContext"),Q=Y1(X);if(!Q)return Z.json({error:"Authentication required"},401);let G=(Z.req.query("site")??"").trim().toLowerCase();if(!dG(G))return Z.json({error:"Invalid site slug"},400);let J=await X.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["organization.id as id","organization.slug as slug","organization.name as name","organization.metadata as metadata"]).where("member.userId","=",Q).execute(),W=[];for(let H of J){if(!H.slug||H7(H))continue;let F=await X.storage.virtualMcps.list(H.id);for(let N of F){if(da1(N)!==G)continue;if(!qK6(N.metadata))continue;W.push({orgSlug:H.slug,orgName:H.name??H.slug,project:{id:N.id,title:N.title,icon:N.icon??null}})}}let K={matches:W};return Z.json(K)}),$}var gu$=D(()=>{D8();hO()});var uu$;var hu$=D(()=>{uu$={name:"decocms",version:"4.258.0",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@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 VK6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??kK6}}var cu$,kK6="https://ph.studio.decocms.com",lu$;var du$=D(()=>{D8();th0();IC();f9();q$();$51();hu$();cu$=new F1;cu$.get("/",($)=>{let Z={version:uu$.version,theme:Dm1(),...kL().logo&&{logo:kL().logo},...vK()&&{internalUrl:pS1()},...b0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!b0().firecrawlApiKey,auth:$b$(),posthog:VK6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!vK()&&b0().sandboxProviderKind==="agent-sandbox"}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});lu$=cu$});function ju($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function PZ1($){return(ju($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function iu$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(ju($))}&sz=${Z}`}function mu$($,Z){let X=$.trim();if(X.length<=Z)return X;let Q=X.slice(0,Z-1),Y=Q.lastIndexOf(" ");return`${(Y>Z*0.6?Q.slice(0,Y):Q).trimEnd()}\u2026`}function pu$($){let{brand:Z,domain:X,score:Q,verdict:Y}=$,G=typeof Q==="number"?`${Z} commerce report \u2014 ${Math.round(Q)}/100 \xB7 decocms`:`${Z} commerce report \xB7 decocms`,J=`See the full ${Z} scorecard \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,W=Y?.trim()?mu$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):mu$(`How does ${X} really perform? ${J}`,200);return{title:G,description:W}}import{z as l0}from"zod";var n_,SK6,CK6,_K6,vK6,nu$;var tu$=D(()=>{n_=l0.enum(["good","bad","neutral"]),SK6=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:n_.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 $})),CK6=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(SK6)),_K6={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()},vK6=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:n_.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:n_.optional()}),l0.object({template:l0.literal("stats"),stats:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),tone:n_.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:n_.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(CK6).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:n_.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:n_.optional()})).min(1)})]),nu$=l0.object({..._K6,template:vK6})});function CA0($){let Z=[],X=[...$.sections].sort((Y,G)=>Y.position-G.position).map((Y)=>{let G=nu$.safeParse(Y.props);if(G.success)return G.data;let J=G.error.issues[0];return Z.push({section_type:Y.section_type,position:Y.position,reason:J?`${J.path.join(".")||"(root)"}: ${J.message}`:"contract violation"}),null}).filter((Y)=>Y!==null),Q=X.filter((Y)=>Y.template.template!=="cover"&&Y.template.template!=="cta").map((Y)=>({key:Y.key,title:Y.title}));return{deck:{meta:{...$.meta,scores:$.summary?.scores,scannedAt:$.scanned_at,toc:Q},slides:X},drops:Z}}var AZ1=D(()=>{tu$()});import{join as ou$}from"path";async function bK6($){try{let Z=await fetch(`${XK({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(fK6)});if(!Z.ok)return null;let X=await Z.json(),{deck:Q}=CA0(X);if(!Q.slides.length)return null;let Y=Q.slides.find((W)=>W.template.template==="cover"),G=Y?.template,J=G&&G.template==="cover"?G:void 0;return{brand:Q.meta.brand?.trim()||PZ1($),score:Q.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function WG($){return $.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function xK6($,Z){let X=ju($),Q=Z?.brand?.trim()||PZ1(X),Y=iu$(X,128),J=`${(b0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=pu$({brand:Q,domain:X,score:Z?.score,verdict:Z?.verdict}),H=`${J}/og.png`,F=`${Q} commerce report by decocms`;return[`<title>${WG(W)}</title>`,`<meta name="description" content="${WG(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="${WG(W)}" />`,`<meta property="og:description" content="${WG(K)}" />`,`<meta property="og:url" content="${WG(J)}" />`,`<meta property="og:image" content="${WG(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${WG(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${WG(W)}" />`,`<meta name="twitter:description" content="${WG(K)}" />`,`<meta name="twitter:image" content="${WG(H)}" />`,`<meta name="twitter:image:alt" content="${WG(F)}" />`,`<link rel="canonical" href="${WG(J)}" />`,`<link rel="icon" href="${WG(Y)}" sizes="any" />`].join(`
|
|
2865
2865
|
`)}function yK6($,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}
|
|
2866
2866
|
</head>`)}function ru$($){let Z=new F1;return Z.get("/:domain/og.png",async(X)=>{let Q=ju(X.req.param("domain")),Y=async()=>{let G=$?Bun.file(ou$($,"report-og-fallback.png")):null;if(!G||!await G.exists())return X.notFound();return X.body(new Uint8Array(await G.arrayBuffer()),200,{"Content-Type":"image/png","Cache-Control":"public, max-age=0, s-maxage=3600"})};try{let G=await fetch(`${XK({})}/api/v2/public/diagnostics/${encodeURIComponent(Q)}/og.png`,{signal:AbortSignal.timeout(gK6)}),J=G.headers.get("content-type")??"";if(!G.ok||!J.startsWith("image/")||!G.body)return Y();return X.body(G.body,200,{"Content-Type":J,"Cache-Control":"public, max-age=0, s-maxage=604800"})}catch{return Y()}}),Z.get("/:domain",async(X)=>{let Q=X.req.param("domain"),Y=$?ou$($,"index.html"):null,G=Y?Bun.file(Y):null;if(!G||!await G.exists())return X.notFound();let J=await G.text();try{let W=await bK6(ju(Q)),K=xK6(Q,W);return X.html(yK6(J,K),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return X.html(J)}}),Z}var fK6=2500,gK6=1e4;var au$=D(()=>{D8();AZ1();lL();q$()});function ga($,Z){return fetch(`${XK({})}${$}`,Z)}async function hK6($,Z,X){let Q=new URLSearchParams;if(Z)Q.set("pw",Z);if(X)Q.set("lang",X);let Y=Q.toString()?`?${Q.toString()}`:"",G=await ga(`/api/v2/public/diagnostics/${encodeURIComponent($)}${Y}`,{headers:{Accept:"application/json"}});if(G.status===404)return{status:"not_found",deck:null,scanned_at:null,drops:[]};if(!G.ok)throw Error(`report read HTTP ${G.status}`);let J=await G.json(),{deck:W,drops:K}=CA0(J);return{status:W.slides.length?"ready":"empty",deck:W,scanned_at:J.scanned_at,drops:K}}var uK6,SN,su$=async($,Z)=>{if(!$.get("reportUser"))return $.json({error:"Authentication required"},401);await Z();return},eu$;var $c$=D(()=>{D8();fY();lL();AZ1();uK6=new Set(["complete","errored","terminated","unknown"]),SN=new F1;SN.use("*",async($,Z)=>{let X=await F8.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});SN.use("/link-token/*",su$);SN.use("/suggest",su$);SN.get("/site/:domain",async($)=>{let Z=$.req.param("domain").trim();if(!Z)return $.json({error:"domain is required"},400);let X=$.get("reportUser"),Q=$.req.query("key")?.trim()||void 0,Y=$.req.query("lang")?.trim()||void 0;try{let G=await hK6(Z,Q,Y);if($.header("Cache-Control","private, no-store"),X||!G.deck)return $.json(G);return $.json({...G,deck:{...G.deck,slides:G.deck.slides.slice(0,1)},truncated:G.status==="ready"})}catch{return $.json({error:"report read failed"},502)}});SN.post("/run",async($)=>{let Z=$.get("reportUser"),X;try{X=await $.req.json()}catch{return $.json({error:"invalid JSON"},400)}let Q=typeof X.domain==="string"?X.domain.trim():"";if(!Q)return $.json({error:"domain is required"},400);let Y=Z?.email,G=typeof X.distinctId==="string"&&X.distinctId.trim()&&X.distinctId.length<=200?X.distinctId.trim():void 0;try{let J=await ga("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${cL({})}`},body:JSON.stringify({url:Q,...Y?{email:Y}:{},distinct_id:G})});if(!J.ok)return $.json({error:`run HTTP ${J.status}`},502);let W=await J.json(),K=W.blocked?{state:"blocked"}:W.status==="fresh"?{state:"fresh"}:W.mode==="sync"?{state:"sync"}:{state:"running",id:W.id??null};return $.json(K)}catch{return $.json({error:"run failed"},502)}});SN.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let X=await ga(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${cL({})}`}});if(!X.ok)return $.json({error:`status HTTP ${X.status}`},502);let Y=(await X.json()).status??"unknown",G={done:uK6.has(Y),status:Y};return $.json(G)}catch{return $.json({error:"status failed"},502)}});SN.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let X=await ga(`/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)}});SN.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let X=await ga(`/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:[]})}});eu$=SN});import{createHmac as cK6,timingSafeEqual as lK6}from"crypto";function Xc$($,Z,X,Q=Date.now()){if(!Z||!X)return!1;let Y,G=[];for(let H of Z.split(",")){let F=H.indexOf("=");if(F<=0)continue;let N=H.slice(0,F).trim(),U=H.slice(F+1).trim();if(N==="t")Y=U;else if(N==="v1")G.push(U)}if(!Y||G.length===0)return!1;let J=Number(Y);if(!Number.isFinite(J)||Math.abs(Q/1000-J)>dK6)return!1;let W=cK6("sha256",X).update(`${Y}.${$}`).digest("hex"),K=Buffer.from(W,"hex");return G.some((H)=>{let F=Buffer.from(H,"hex");return K.length===F.length&&lK6(K,F)})}function Qc$($){let Z;try{Z=JSON.parse($)}catch{return null}let X=VJ(Z),Q=VJ(VJ(X?.data)?.object);if(!X||typeof X.type!=="string"||!Q)return null;return{id:NH(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 Yc$($){switch($){case"active":case"trialing":return"active";case"past_due":return"past_due";default:return"canceled"}}function NH($){return typeof $==="string"?$:void 0}function VJ($){return typeof $==="object"&&$!==null?$:void 0}function _A0($){return typeof $==="number"?new Date($*1000):null}function IZ1($){return NH($)??NH(VJ($)?.id)}function mK6($){return IZ1($.subscription)??NH(VJ(VJ($.parent)?.subscription_details)?.subscription)}function iK6($){let Z=_A0($.current_period_end);if(Z)return Z;let X=VJ($.items)?.data;if(!Array.isArray(X))return null;let Q=0;for(let Y of X){let G=VJ(Y)?.current_period_end;if(typeof G==="number"&&G>Q)Q=G}return Q>0?new Date(Q*1000):null}function TZ1($,Z){let X=_A0($.created);return!!X&&!!Z.lastStripeEventAt&&X<Z.lastStripeEventAt}function RZ1($,Z){let X=_A0($.created);if(!X)return;return Z.lastStripeEventAt&&Z.lastStripeEventAt>X?void 0:X}async function pK6($,Z){let X=Z.data.object;switch(Z.type){case"checkout.session.completed":case"checkout.session.async_payment_succeeded":{let Q=NH(VJ(X.metadata)?.orgId);if(!Q)return{handled:!1,reason:"no orgId"};if(NH(VJ(X.metadata)?.kind)==="topup"){if(X.mode!=="payment")return{handled:!1,reason:"topup with wrong mode"};if(NH(X.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let J=NH(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(VJ(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:VJ(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(NH(X.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let Y=await $.getBilling(Q);if(!Y)return{handled:!1,reason:"unknown org"};let G=IZ1(X.subscription);if(Y.stripeSubscriptionId&&G&&Y.stripeSubscriptionId!==G)return console.error("stripe webhook: refused checkout rebind",{organizationId:Q,eventId:Z.id}),{handled:!1,reason:"org already bound to another subscription",orphanSubscriptionId:G};if(TZ1(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Q,{stripeCustomerId:IZ1(X.customer),stripeSubscriptionId:G,status:"active",lastStripeEventAt:RZ1(Z,Y)}),{handled:!0,organizationId:Q}}case"customer.subscription.updated":case"customer.subscription.deleted":{let Q=NH(X.id);if(!Q)return{handled:!1,reason:"no sub id"};let Y=await $.getBillingByStripeSubscriptionId(Q);if(!Y)return{handled:!1,reason:"unknown subscription"};let G=Z.type==="customer.subscription.deleted";if(!G&&TZ1(Z,Y))return{handled:!1,reason:"stale event"};let J=G?"canceled":Yc$(X.status);return await $.updateStripeState(Y.organizationId,{status:J,currentPeriodEnd:iK6(X),...G&&{stripeSubscriptionId:null},lastStripeEventAt:RZ1(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}case"invoice.paid":{let Q=mK6(X);if(!Q)return{handled:!1,reason:"no sub id"};let Y=await $.getBillingByStripeSubscriptionId(Q);if(!Y)return{handled:!1,reason:"unknown subscription"};if(TZ1(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Y.organizationId,{status:"active",currentPeriodEnd:_A0(X.period_end),lastStripeEventAt:RZ1(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}default:return{handled:!1,reason:`unhandled event ${Z.type}`}}}function nK6($,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:Yc$(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 Zc$($,Z){let X=nK6($,Z);if(!X)return;VY({event:X.name,organizationId:X.organizationId,...$.id?{uuid:Tp1(`stripe:${$.id}:${X.name}`)}:{},...$.created?{timestamp:new Date($.created*1000)}:{},properties:X.properties})}async function Gc$($){let Z=new sW(c8().db),X=await pK6(Z,$);if(!(X.handled&&X.topUp))Zc$($,X);if(X.handled&&X.topUp)await gw$({organizationId:X.organizationId,amountCents:X.topUp.creditCents,referenceId:X.topUp.referenceId}),Zc$($,X);if(!X.handled&&X.orphanSubscriptionId)try{await hs1(X.orphanSubscriptionId),console.error("stripe webhook: canceled orphan subscription",{subscriptionId:X.orphanSubscriptionId,eventId:$.id})}catch(Q){if(!(Q instanceof bY&&(Q.status===400||Q.status===404)))throw Q}return X}var dK6=300;var Jc$=D(()=>{yG();C4();u60();aL();ye0()});var tK6=1048576,qZ1;var Wc$=D(()=>{D8();jN();q$();Jc$();qZ1=new F1;qZ1.post("/webhook",k9({maxSize:tK6,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=b0().stripeWebhookSecret;if(!Z)return $.json({error:"stripe billing not configured"},503);let X=await $.req.text();if(!Xc$(X,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let Y=Qc$(X);if(!Y)return $.json({error:"invalid payload"},400);let G=await Gc$(Y);return console.log("stripe webhook",{eventId:Y.id,type:Y.type,livemode:Y.livemode,...G}),$.json({received:!0})})});import{timingSafeEqual as oK6}from"crypto";function aK6($,Z,X){if(!Z?.startsWith("sha256="))return!1;let Q=new Bun.CryptoHasher("sha256",X).update($).digest("hex"),Y=Z.slice(7);if(Y.length!==Q.length)return!1;return oK6(Buffer.from(Y),Buffer.from(Q))}var rK6=5242880,MZ1;var Kc$=D(()=>{D8();jN();Xn();MZ1=new F1;MZ1.post("/webhook",k9({maxSize:rK6,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(!aK6(X,$.req.header("x-hub-signature-256"),Z))return $.json({error:"invalid signature"},400);if($.req.header("x-github-event")!=="push")return $.json({ok:!0,ignored:"event"});let Q;try{Q=JSON.parse(X)}catch{return $.json({error:"invalid payload"},400)}let Y=Q.ref,G=Q.repository?.full_name;if(!Y||!G)return $.json({ok:!0,ignored:"shape"});let W=(await dp0())?.markTenantPoolsDirty(G,Y)??[];return $.json({ok:!0,pools:W})})});function Hc$($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var Fc$,sK6,eK6,Nc$;var Uc$=D(()=>{D8();w3();iy();vx();Fc$=new F1,sK6=["range","if-none-match","if-modified-since"],eK6=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];Fc$.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),X=Z.organization?.id;if(!Z.auth?.user?.id){if(ih($))return $.redirect(`/login?next=${encodeURIComponent($.req.path)}`,302);throw new $$(401,{message:"Authentication required"})}if(!X)throw new $$(401,{message:"Organization context required"});let Q=$.req.path.replace(/^.*\/files\//,"");if(!Q)throw new $$(400,{message:"Missing file key"});let Y=await nn(Q,Z);if(!Y)throw new $$(503,{message:"Object storage not configured"});if(Y.startsWith("data:")&&cG()){let K=Y.match(/^data:([^;]+);base64,(.+)$/s);if(!K)throw new $$(500,{message:"Invalid data URL from storage"});let[,H,F]=K,N=Buffer.from(F,"base64"),U=new Headers({"Content-Type":H,"Cache-Control":"private, max-age=86400"});return Hc$(U,H),new Response(N,{status:200,headers:U})}let G=new Headers;for(let K of sK6){let H=$.req.header(K);if(H)G.set(K,H)}let J=await fetch(Y,{headers:G});if(J.status===403||J.status===404)throw new $$(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 $$(502,{message:"Upstream storage error"});let W=new Headers;for(let K of eK6){let H=J.headers.get(K);if(H)W.set(K,H)}return W.set("Cache-Control","private, max-age=86400"),Hc$(W,W.get("content-type")??""),new Response(J.body,{status:J.status,headers:W})});Nc$=Fc$});var ha=_((t_)=>{var $H6=t_&&t_.__createBinding||(Object.create?function($,Z,X,Q){if(Q===void 0)Q=X;var Y=Object.getOwnPropertyDescriptor(Z,X);if(!Y||("get"in Y?!Z.__esModule:Y.writable||Y.configurable))Y={enumerable:!0,get:function(){return Z[X]}};Object.defineProperty($,Q,Y)}:function($,Z,X,Q){if(Q===void 0)Q=X;$[Q]=Z[X]}),ZH6=t_&&t_.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))$H6(Z,$,X)};Object.defineProperty(t_,"__esModule",{value:!0});ZH6(BY(),t_)});var Dc$=_((Oc$)=>{Object.defineProperty(Oc$,"__esModule",{value:!0});Oc$.version=void 0;Oc$.version="3.4.0"});var Ec$=_((UH)=>{var XH6=UH&&UH.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(UH,"__esModule",{value:!0});UH.NodeTransport=UH.VERSION=void 0;UH.nodeResolveHost=KH6;var r6=ha(),QH6=z0("net"),kZ1=z0("tls"),YH6=z0("path"),wc$=z0("fs"),GH6=XH6(z0("dns")),JH6=Dc$();UH.VERSION=JH6.version;var WH6="nats.js";class Lc${socket;version;lang;yields=[];signal=(0,r6.deferred)();closedNotification=(0,r6.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=WH6,this.version=UH.VERSION}async connect($,Z){this.tlsName=$.tlsName,this.options=Z;let{tls:X}=this.options,{handshakeFirst:Q}=X||{};try{if(Q===!0)this.socket=await this.tlsFirst($);else this.socket=await this.dial($);if(this.done)this.socket?.destroy();let Y=await this.peekInfo();(0,r6.checkOptions)(Y,Z);let{tls_required:G,tls_available:J}=Y,W=J===!0&&Z.tls!==null;if(!Q&&(G||W))this.socket=await this.startTLS();if(this.done)this.socket?.destroy();if(G&&this.socket.encrypted!==!0)throw r6.errors.InvalidArgumentError.format("tls","is not available on this server");return this.connected=!0,this.setupHandlers(),this.signal.resolve(),Promise.resolve()}catch(Y){let G=Y;if(!G)G=new r6.errors.ConnectionError("error connecting - node provided an undefined error");let{code:J}=G,W=J==="ECONNREFUSED"?new r6.errors.ConnectionError("connection refused",{cause:G}):G;throw this.socket?.destroy(),W}}dial($){let Z=(0,r6.deferred)(),X,Q=(0,QH6.createConnection)($.port,$.hostname,()=>{Z.resolve(Q),Q.removeAllListeners()});return Q.on("error",(Y)=>{X=Y}),Q.on("close",()=>{Q.removeAllListeners(),Z.reject(X)}),Q.setNoDelay(!0),Z}get isClosed(){return this.done}close($){return this._closed($,!1)}peekInfo(){let $=(0,r6.deferred)(),Z;return this.socket.on("data",(X)=>{this.yields.push(X);let Q=r6.DataBuffer.concat(...this.yields),Y=(0,r6.extractProtocolMessage)(Q);if(Y!=="")try{let G=r6.INFO.exec(Y);if(!G)throw Error("unexpected response from server");let J=JSON.parse(G[1]);$.resolve(J)}catch(G){$.reject(G)}finally{this.socket.removeAllListeners()}}),this.socket.on("error",(X)=>{Z=X}),this.socket.on("close",()=>{this.socket.removeAllListeners(),$.reject(Z)}),$}loadFile($){if(!$)return Promise.resolve();let Z=(0,r6.deferred)();try{if($=(0,YH6.resolve)($),!(0,wc$.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,wc$.readFile)($,(X,Q)=>{if(X)return Z.reject(X);Z.resolve(Q)})}catch(X){Z.reject(X)}return Z}async loadClientCerts(){let $={},{certFile:Z,cert:X,caFile:Q,ca:Y,keyFile:G,key:J}=this.options.tls;try{if(Z){let W=await this.loadFile(Z);if(W)$.cert=W}else if(X)$.cert=X;if(G){let W=await this.loadFile(G);if(W)$.key=W}else if(J)$.key=J;if(Q){let W=await this.loadFile(Q);if(W)$.ca=[W]}else if(Y)$.ca=Y;return Promise.resolve($)}catch(W){return Promise.reject(W)}}async tlsFirst($){let Z,X={servername:this.tlsName,rejectUnauthorized:!0};if(this.socket)X.socket=this.socket;if(typeof this.options.tls==="object")try{let Y=await this.loadClientCerts()||{};X=(0,r6.extend)(X,this.options.tls,Y)}catch(Y){return Promise.reject(new r6.errors.ConnectionError(Y.message,{cause:Y}))}let Q=(0,r6.deferred)();try{let Y=(0,kZ1.connect)($.port,$.hostname,X,()=>{Y.removeAllListeners(),Q.resolve(Y)});Y.on("error",(G)=>{Z=G}),Y.on("secureConnect",()=>{if(X.rejectUnauthorized===!1)return;if(!Y.authorized)throw Y.authorizationError}),Y.on("close",()=>{Q.reject(Z),Y.removeAllListeners()}),Y.setNoDelay(!0)}catch(Y){Q.reject(new r6.errors.ConnectionError(Y.message,{cause:Y}))}return Q}async startTLS(){let $,Z={socket:this.socket,servername:this.tlsName,rejectUnauthorized:!0};if(typeof this.options.tls==="object")try{let Q=await this.loadClientCerts()||{};Z=(0,r6.extend)(Z,this.options.tls,Q)}catch(Q){return Promise.reject(new r6.errors.ConnectionError(Q.message,{cause:Q}))}let X=(0,r6.deferred)();try{let Q=(0,kZ1.connect)(Z,()=>{Q.removeAllListeners(),X.resolve(Q)});Q.on("error",(Y)=>{$=Y}),Q.on("secureConnect",()=>{if(Z.rejectUnauthorized===!1)return;if(!Q.authorized)throw Q.authorizationError}),Q.on("close",()=>{X.reject($),Q.removeAllListeners()})}catch(Q){X.reject(new r6.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,r6.render)($[Z])}`);yield $[Z]}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,r6.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 kZ1.TLSSocket}_send($){if(this.isClosed||this.socket===void 0)return Promise.resolve();if(this.options.debug)console.info(`< ${(0,r6.render)($)}`);let Z=(0,r6.deferred)();try{this.socket.write($,(X)=>{if(X){if(this.options.debug)console.error(`!!! ${(0,r6.render)($)}: ${X}`);return Z.reject(X)}return Z.resolve()})}catch(X){if(this.options.debug)console.error(`!!! ${(0,r6.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}}UH.NodeTransport=Lc$;function KH6($){let Z=(0,r6.deferred)();return GH6.default.lookup($,{all:!0},(X,Q)=>{if(X){Z.reject(X);return}let Y=[];for(let G of Q)Y.push(G.address);if(Y.length===0)Y.push($);Z.resolve(Y)}),Z}});var Tc$=_((Ac$)=>{Object.defineProperty(Ac$,"__esModule",{value:!0});Ac$.connect=HH6;var jc$=Ec$(),zc$=ha(),Pc$=ha();function HH6($={}){if((0,Pc$.hasWsProtocol)($))return Promise.reject(Pc$.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,zc$.setTransportFactory)({factory:()=>{return new jc$.NodeTransport},dnsResolveFn:jc$.nodeResolveHost}),zc$.NatsConnectionImpl.connect($)}});var Rc$=_((CN)=>{var NH6=CN&&CN.__createBinding||(Object.create?function($,Z,X,Q){if(Q===void 0)Q=X;var Y=Object.getOwnPropertyDescriptor(Z,X);if(!Y||("get"in Y?!Z.__esModule:Y.writable||Y.configurable))Y={enumerable:!0,get:function(){return Z[X]}};Object.defineProperty($,Q,Y)}:function($,Z,X,Q){if(Q===void 0)Q=X;$[Q]=Z[X]}),UH6=CN&&CN.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))NH6(Z,$,X)};Object.defineProperty(CN,"__esModule",{value:!0});CN.connect=void 0;var OH6=Tc$();Object.defineProperty(CN,"connect",{enumerable:!0,get:function(){return OH6.connect}});UH6(ha(),CN)});function kc$($){let Z=$?.connectFn??LH6,X=null,Q=null,Y=!1,G=!1,J=!1,W=[];function K(){return X!==null&&!X.isClosed()&&!X.isDraining()&&!J}function H(){console.log(`[NatsProvider] fireReady: ${W.length} callbacks`);for(let U of W)try{U()}catch{}}function F(U){(async()=>{for await(let O of U.status())if(O.type==="disconnect")console.log("[NatsProvider] Disconnected"),J=!0;else if(O.type==="reconnect")console.log("[NatsProvider] Reconnected, re-firing ready callbacks"),J=!1,Q=null,H()})().catch(()=>{})}async function N(U,O){let B=0;while(!G)try{X=await Z({servers:U,timeout:wH6,reconnect:!0,maxReconnectAttempts:-1,...O?{authenticator:O}:{}}),console.log(`[NatsProvider] Connected to ${X.getServer()} after ${B} attempt(s)`),Q=null,J=!1,F(X),H();return}catch{B++;let w=oZ(DH6,BH6,B-1,2,0.5);await R$(w)}}return{init(U,O){if(Y)return;Y=!0,G=!1;let B=O?.creds?Ic$.credsAuthenticator(new TextEncoder().encode(O.creds)):void 0;N(U,B).catch(()=>{})},isConnected(){return K()},getConnection(){return K()?X:null},getJetStream(){if(!K())return null;if(!Q)Q=Mc$.jetstream(X);return Q},onReady(U){if(W.push(U),K())try{U()}catch{}},async drain(){if(G=!0,Y=!1,Q=null,J=!1,X){let U=X;X=null,await U.drain().catch(()=>{})}}}}function LH6($){return qc$.connect($)}var Ic$,qc$,Mc$,BH6=100,DH6=3000,wH6=3000;var Vc$=D(()=>{q4();Ic$=V(mu(),1),qc$=V(Rc$(),1),Mc$=V(iD(),1)});function VZ1($,Z){return`${$}.${Z}`}class SZ1{cache;constructor($){this.cache=kh({ttlMs:$?.ttlMs??EH6,maxSize:$?.maxSize??jH6})}async get($,Z){return this.cache.get(VZ1($,Z))??null}async set($,Z,X){this.cache.set(VZ1($,Z),X)}async invalidate($,Z){this.cache.delete(VZ1($,Z))}teardown(){this.cache.clear()}}var EH6=600000,jH6=5000;var Sc$=()=>{};function vA0($,Z){return`${$}:${Z}`}function CZ1($){let Z=kh({ttlMs:$?.ttlMs??zH6,maxSize:$?.maxSize??PH6}),X=$?.getConnection,Q=crypto.randomUUID(),Y=new TextEncoder,G=new TextDecoder,J=null;function W(K,H){let F=X?.();if(!F)return;try{F.publish(Cc$,Y.encode(JSON.stringify({organizationId:K,keyId:H,originId:Q})))}catch(N){console.warn("[ProviderKeyCache] Publish failed (non-critical):",N)}}return{get(K,H){return Z.get(vA0(K,H))},set(K,H,F){Z.set(vA0(K,H),F)},invalidate(K,H){Z.delete(vA0(K,H)),W(K,H)},start(){if(J)return;let K=X?.();if(!K)return;J=K.subscribe(Cc$),(async()=>{for await(let H of J)try{let F=JSON.parse(G.decode(H.data));if(F.originId===Q)continue;Z.delete(vA0(F.organizationId,F.keyId))}catch{}})().catch(console.error)},teardown(){J?.unsubscribe(),J=null,Z.clear()}}}var Cc$="studio.ai-provider-keys.invalidate",zH6=30000,PH6=5000;var _c$=()=>{};class _Z1{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=vc$.map((Q)=>Z.subscribe(Q));for(let Q of this.subscriptions)(async()=>{for await(let Y of Q)try{let G=JSON.parse(X.decode(Y.data));if(G.originId===this.originId)continue;if(G.messageId&&this.hasSeen(G.messageId))continue;this.onCancel?.(G.taskId)}catch{}})().catch(console.error)}broadcast($){if(/[.*>\s]/.test($)){console.warn("[NatsCancelBroadcast] Invalid threadId, skipping broadcast");return}this.onCancel?.($);try{let Z=this.options.getConnection();if(!Z)return;let X=this.encoder.encode(JSON.stringify({taskId:$,originId:this.originId,messageId:crypto.randomUUID()}));for(let Q of vc$)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 vc$;var fc$=D(()=>{vc$=["studio.decopilot.cancel","mesh.decopilot.cancel"]});var bc$=($)=>{let Z;return()=>Z??=$()},vZ1,fZ1;var xc$=D(()=>{I6();vZ1=bc$(()=>D$.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),fZ1=bc$(()=>D$.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function kH6(){return{name:aF,subjects:[`${Ww0}.>`],storage:OW.StorageType.File,max_age:RH6,max_bytes:qH6,max_msgs_per_subject:MH6,discard:OW.DiscardPolicy.Old,retention:OW.RetentionPolicy.Limits,duplicate_window:IH6,num_replicas:1}}class hc${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 yc$($){let Z=gc$.headers();for(let[X,Q]of Object.entries($))Z.set(X,Q);return Z}function _H6($,Z){let X=0;return{publish(Q,Y,G,J){Q.publish(Y,G,J?{headers:J}:void 0).catch((W)=>{if(X++,TH6().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 vH6($){if(!($ instanceof Error))return!1;if($.name==="TimeoutError")return!0;return/timeout|no responders|503/i.test($.message)}class bZ1{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=kH6(),X=await v5(async()=>{let Q=this.options.getJetStreamManager?await this.options.getJetStreamManager():await OW.jetstreamManager($);try{await Q.streams.info(aF),await Q.streams.update(aF,Z)}catch(Y){if(Y instanceof Error&&Y.message.includes("stream not found"))await Q.streams.add(Z);else if(Y instanceof Error&&/can ?not change.*storage|storage type/i.test(Y.message))await Q.streams.delete(aF),await Q.streams.add(Z);else throw Y}return Q},{maxAttempts:5,minTimeout:250,maxTimeout:4000,jitter:0.5,isRetriable:vH6});this.js=this.options.getJetStream(),this.jsm=X,console.log(`[Decopilot] StreamBuffer.init ${this.js?"ready":"degraded (js=null)"}`)}pump($,Z,X,Q){let Y=this.js;if(!Y)return console.warn(`[Decopilot] pump: JetStream client unavailable for thread ${Z}; chunks NOT published to NATS`),Promise.resolve();let G=_H6(Z,Q),J=!1,W=()=>{if(J)return;J=!0;let H=cN$(Z);Y.publish(H.subject,H.data).catch(()=>{})};X.addEventListener("abort",W,{once:!0});let K=(H)=>{let F=performance.now(),N=Yr0(H,{runId:Z}),U=performance.now()-F;if(vZ1().record(U),fZ1().add(1,{"org.id":Q??"unknown"}),CH6?.record(U,N.reduce((O,B)=>O+B.data.length,0)),N.length===0){console.warn(`[Decopilot] dropping oversized stream chunk for thread ${Z}`);return}for(let O of N)G.publish(Y,O.subject,O.data,O.headers?yc$(O.headers):void 0)};return(async()=>{let H=$.getReader(),F=0,N=0,U;try{while(!0){let{done:O,value:B}=await H.read();if(O)break;if(K(B),N++,++F>=64)F=0,await new Promise((w)=>setImmediate(w))}}catch(O){U=O,console.warn(`[Decopilot] stream pump error for thread ${Z}:`,O?.message??O)}finally{if(H.releaseLock(),W(),SH6)console.warn(JSON.stringify({msg:"decopilot-stream-diag",event:"pump-done",taskId:Z,publishedChunks:N,publishErrors:G.errorCount}))}if(U!==void 0)throw U})()}async publishRawChunk($,Z,X){let Q=this.js;if(!Q)return!1;let Y=performance.now(),G=Yr0(Z,{runId:$,dedup:X});if(vZ1().record(performance.now()-Y),fZ1().add(1),G.length===0)return console.warn(`[Decopilot] dropping oversized raw chunk for thread ${$} (> MAX_CHUNKED_BYTES)`),!0;for(let J of G)await Q.publish(J.subject,J.data,{...J.headers?{headers:yc$(J.headers)}:{},...J.msgId?{msgID:J.msgId}:{}});return!0}async publishDone($,Z,X){let Q=this.js;if(!Q)return!1;let Y=uN$({runId:$,fenceToken:Z,finalSeq:X});return await Q.publish(Y.subject,Y.data,{msgID:Y.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 Y=X?.deliverPolicy==="new"?OW.DeliverPolicy.New:OW.DeliverPolicy.All,G=X?.closeOnDone??!1,J=yB($),W;try{W=await(await Q.consumers.get(aF,{filter_subjects:J,deliver_policy:Y})).consume()}catch(w){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",w?.message??w),null}let F=Uw0({messages:async function*(){try{for await(let w of W)yield{subject:w.subject,data:w.data,headers:w.headers}}finally{W.stop()}}(),onCancel:()=>W.stop()}).pipeThrough(Kw0()).pipeThrough(Hw0()).getReader(),N=!1,U=()=>{if(N)return;N=!0;try{F.releaseLock()}catch{}},O=!1,B=()=>{if(O)return;O=!0,W.stop(),F.cancel().catch(()=>{}),U()};return Z?.addEventListener("abort",B,{once:!0}),new ReadableStream({async pull(w){for(;;){let{done:L,value:E}=await F.read();if(L){B(),w.close();return}let j=E;if(j.kind==="done"){if(G){B(),w.close();return}continue}w.enqueue(j.chunk);return}},cancel(){B()}})}purge($){if(!this.jsm)return;this.jsm.streams.purge(aF,{filter:yB($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var OW,gc$,AH6=($)=>{let Z;return()=>Z??=$()},TH6,RH6=86400000000000,IH6=120000000000,qH6=4294967296,MH6=500000,VH6,SH6,CH6;var uc$=D(()=>{q4();Gr0();Ow0();Fw0();I6();xc$();OW=V(iD(),1),gc$=V(mu(),1),TH6=AH6(()=>D$.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"}));VH6=process.env.STREAM_ENCODE_TRACE==="1",SH6=process.env.DECOPILOT_STREAM_TRACE==="1";CH6=VH6?new hc$:null});function fA0($,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 cc$=D(()=>{V8()});class xZ1{storage;options;timer=null;constructor($,Z={}){this.storage=$;this.options=Z}start(){if(this.timer)return;let $=this.options.intervalMs??300000;this.timer=setInterval(()=>{this.runOnce()},$)}async runOnce(){let $=this.options.staleAfterMs??3600000;try{let Z=await this.storage.sweepAbandoned($);if(Z>0)console.log(`[async-research-sweeper] marked ${Z} stale jobs as abandoned`);return Z}catch(Z){return console.error("[async-research-sweeper] sweep failed",Z),0}}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}async function lc$($,Z,X){let Q=Z.organizationId;if(Z.status!=="in_review")return!1;if(!ar(X))return!1;if(await $.storage.taskBoard.hasHumanRejectedDone(Z.id,Q))return!1;let Y=await $.storage.taskBoard.update(Z.id,Q,{status:"done"},Z.updatedBy);return await F6($,{taskBoardItemId:Z.id,action:"status_changed",actorId:null,data:{from:Z.status,to:"done",reason:"pr_merged"}}),h$(Q,Y),console.log(`[task-board-review-sweeper] ${Z.id}: linked PR already merged \u2014 moved to done`),!0}var dc$=D(()=>{WX();sr();L5()});function uH6($){return $ instanceof o7}function cH6($,Z){return Z-$>=gH6}class yZ1{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??fH6;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??xH6,X=this.options.itemIntervalMs??bH6,Q=new Date(Date.now()-X),Y=await this.taskBoard.listItemsPendingReview(Z,this.cursor,Q),G=Y.at(-1);this.cursor=Y.length===Z&&G?{updatedAt:G.updatedAt,id:G.id}:null;for(let{id:J,organizationId:W}of Y)try{if(await this.reconcileItem(J,W,Q))$++}catch(K){console.error(`[task-board-review-sweeper] ${J} failed`,K)}await this.reapNeverStartedThreads(Z),$+=await this.dispatchDueRetries(Z),await this.reactToUnhandledFailures(Z)}catch(Z){console.error("[task-board-review-sweeper] sweep failed",Z)}finally{this.running=!1}return $}async reapNeverStartedThreads($){try{let Z=await this.taskBoard.failNeverStartedLinkedThreads($,new Date(Date.now()-zt0),Xo0);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()-hH6));for(let{id:X,organizationId:Q,threadId:Y}of Z)try{console.warn(`[task-board-review-sweeper] reacting to an unhandled failure on ${X}`),await $o0(this.taskBoard,Y,Q),await Zo0(this.taskBoard,this.billing,Y,Q)}catch(G){console.error(`[task-board-review-sweeper] unhandled-failure reaction for ${X} failed`,G)}}async dispatchDueRetries($){let Z=0,X=await this.taskBoard.listItemsDueForRetry($,new Date);for(let{id:Q,organizationId:Y,attempts:G}of X)try{if(!await this.taskBoard.claimDueRetry(Q,Y,new Date))continue;let J=await this.taskBoard.getById(Q,Y);if(!J||J.status!=="in_progress"||J.assigneeId!==A8)continue;let W=await this.contextFactory(Y,J.assignedBy??J.createdBy);if(!W)continue;await n3(W,J,{runClass:"retry"}),Z++,console.warn(`[task-board-review-sweeper] re-dispatched ${Q} after a failure (attempt ${G})`)}catch(J){if(console.error(`[task-board-review-sweeper] retry dispatch for ${Q} failed`,J),uH6(J)){await this.returnToTodo(Q,Y,J instanceof Error?J.message:String(J));continue}await this.taskBoard.scheduleRunRetry(Q,Y,G,new Date(Date.now()+yH6)).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 Y=await this.taskBoard.returnToTodoAfterFailure($,Z,Q.updatedBy);if(!Y)return;await this.taskBoard.recordActivity({taskBoardItemId:$,action:"status_changed",actorId:null,data:{from:"in_progress",to:"todo",reason:X}}).catch(()=>{}),h$(Z,Y)}catch(Q){console.error(`[task-board-review-sweeper] returning ${$} to todo failed`,Q)}}async handOffReviewWithoutPr($,Z){let X=await this.taskBoard.listActivity(Z.id,Z.organizationId);if(!cH6(TF(X),Date.now()))return;await _K($,Z,"no pull request is linked to this task \u2014 there is nothing for a "+"reviewer to review")}async reconcileItem($,Z,X){if(!await this.taskBoard.claimSweep($,Z,X))return!1;let Q=await this.taskBoard.getById($,Z);if(!Q)return!1;if(Q.status!=="in_review")return!1;let Y=Q.assigneeId===A8,G=await this.taskBoard.listPrs($,Z),J=await this.contextFactory(Z,Q.assignedBy??Q.createdBy);if(!J)return!1;if(G.length===0){if(Y)await this.handOffReviewWithoutPr(J,Q);return!1}let W=await Promise.all(G.map(async(K)=>({...K,...await my(Z,K)})));if(W.every((K)=>K.state===null))console.warn(`[task-board-review-sweeper] ${$}: no live PR state from GitHub (${W.length} PR(s)) \u2014 proceeding on unknown`);if(await lc$(J,Q,W.map((K)=>K.merged)))return!0;if(await MU$(J,Q))return!0;if(!Y)return!1;if(!Ao0(W))return!1;return await CD0(J,Q,{previewMatchesHead:To0(W)}),!0}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}var fH6=60000,bH6=300000,xH6=50,yH6=60000,gH6=900000,hH6=120000;var mc$=D(()=>{X9();Oo0();CK();Gt();dc$();L5();iG();Qo0();KJ();ln()});import{readdir as lH6,rm as bA0}from"fs/promises";import{join as xA0}from"path";async function yA0($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-dH6),Z.setUTCHours(0,0,0,0);let X=0;try{let Q=await o_($);for(let Y of Q)if(/^\d{4}$/.test(Y))X+=await ic$($,Y,Z);else if(!Y.startsWith(".")){let G=xA0($,Y),J=await o_(G);for(let K of J){if(!/^\d{4}$/.test(K))continue;X+=await ic$(G,K,Z)}if((await o_(G)).length===0)await bA0(G,{recursive:!0,force:!0})}}catch(Q){console.warn("monitoring retention cleanup failed:",Q)}return X}async function ic$($,Z,X){let Q=0,Y=xA0($,Z),G=await o_(Y);for(let W of G){if(!/^\d{2}$/.test(W))continue;let K=xA0(Y,W),H=await o_(K);for(let N of H){if(!/^\d{2}$/.test(N))continue;let U=new Date(`${Z}-${W}-${N}T00:00:00Z`);if(isNaN(U.getTime()))continue;if(U<X){let O=xA0(K,N);await bA0(O,{recursive:!0,force:!0}),Q++}}if((await o_(K)).length===0)await bA0(K,{recursive:!0,force:!0})}if((await o_(Y)).length===0)await bA0(Y,{recursive:!0,force:!0});return Q}async function o_($){try{return(await lH6($)).filter((X)=>!X.startsWith("."))}catch{return[]}}var dH6=30;var gZ1=()=>{};import{DBOS as hZ1,SchedulerMode as mH6}from"@dbos-inc/dbos-sdk";async function pH6(){let $=[vJ(),r_(),wH()],Z=0;for(let X of $)try{Z+=await yA0(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 nH6($,Z){await hZ1.runStep(()=>pH6(),{name:"monitoringRetention"})}function nc$(){if(pc$)return;pc$=!0;let $=hZ1.registerWorkflow(nH6,{name:"monitoringRetentionWorkflow"});hZ1.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:iH6,mode:mH6.ExactlyOncePerIntervalWhenActive})}var iH6="23 4 * * *",pc$=!1;var tc$=D(()=>{FY();gZ1()});function oc$($){return async(Z,X)=>{let Q=await $.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["member.role","organization.id as orgId","organization.slug as orgSlug","organization.name as orgName"]).where("member.userId","=",X).where("member.organizationId","=",Z).executeTakeFirst();if(!Q)return console.warn(`[automationContextFactory] User ${X} not found in org ${Z} \u2014 returning null`),null;let Y=await JJ.create();Y.auth.user={id:X,role:Q.role},Y.organization={id:Q.orgId,slug:Q.orgSlug,name:Q.orgName};let G=await y61($.db,Z,Q.role);return Y.boundAuth=x61({auth:Y.authInstance,headers:new Headers,role:Q.role,permissions:G,userId:X}),Y.access=new RL(X,void 0,Y.boundAuth,Q.role,"self"),CB(Y,{id:Q.orgId,slug:Q.orgSlug}),Y}}var rc$=D(()=>{IL();DC()});function tH6(){return{services:[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}],migrationsStatus:"pending",serverUrl:null,logs:[]}}function rH6(){for(let $ of oH6)$()}function ac$($){let Z=[...uZ1.logs,$];uZ1={...uZ1,logs:Z.length>500?Z.slice(-500):Z},rH6()}function cZ1(){return aH6}var uZ1,oH6,aH6=!1;var lZ1=D(()=>{uZ1=tH6(),oH6=new Set});import{EventEmitter as sH6}from"events";var dZ1;var sc$=D(()=>{lZ1();dZ1=new sH6;dZ1.on("request",($)=>{ac$($)})});function ec$(){return async($,Z)=>{let X=Date.now(),Q=$.req.method,Y=$.req.path;if(Y==="/api/auth/get-session"||Y.includes("favicon")){await Z();return}let G="",J=!1;if(Y.startsWith("/mcp")&&Q==="POST"){J=!0;try{if($.req.header("Content-Type")?.includes("application/json")){let U=await $.req.raw.clone().json();if(U.method==="tools/call"&&U.params?.name){let O=zu(U.params.name),B=U.params.arguments||{},w=Object.keys(B).map((E)=>zu(E)),L=w.length>0?w.slice(0,3).join(",")+(w.length>3?"\u2026":""):"";G=`${G5.tool}${O}${G5.dim}(${L})${G5.reset}`}else if(U.method)G=`${G5.dim}${zu(U.method)}${G5.reset}`}}catch{}}let W=zu(Y);if(Y.startsWith("/mcp/conn_")){let F=Y.split("/")[2]??"";W=`/mcp/${G5.mcp}${zu(F.slice(0,12))}\u2026${G5.reset}`}else if(Y==="/mcp")W=`${G5.mcp}/mcp${G5.reset}`;else if(Y==="/mcp/registry")W=`${G5.mcp}/mcp/registry${G5.reset}`;let K=$F6(Q),H=J?"\u25C0":"\u2190";if(!cZ1())console.log(`${G5.dim}${H}${G5.reset} ${K}${Q}${G5.reset} ${W}${G?` ${G}`:""}`);try{await Z()}finally{let F=Date.now()-X,N=$.res.status,U=eH6(N),O=F<1000?`${F}ms`:`${(F/1000).toFixed(1)}s`,B=J?"\u25B6":"\u2192";if(!cZ1())console.log(`${G5.dim}${B}${G5.reset} ${K}${Q}${G5.reset} ${W}${G?` ${G}`:""} ${U}${N}${G5.reset} ${G5.duration}${O}${G5.reset}`);dZ1.emit("request",{method:Q,path:zu(Y),status:N,duration:F,timestamp:new Date})}}}var G5,eH6=($)=>{if($>=500)return G5.serverError;if($>=400)return G5.clientError;if($>=300)return G5.redirect;return G5.ok},$F6=($)=>{return G5[$]||G5.reset},zu=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var $l$=D(()=>{lZ1();sc$();G5={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 Yl$}from"crypto";import{mkdir as ZF6,readdir as XF6,rm as Zl$,stat as Gl$}from"fs/promises";import{join as iZ1,relative as QF6}from"path";import{z as P$}from"zod";function Wl$($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return iZ1(YF6,Z)}function Kl$($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function mZ1($,Z){let X=Wl$($),Q=Kl$(Z);return iZ1(X,Q)}function GF6($,Z,X,Q){let Y=b0().encryptionKey||"dev-secret",G=`${$}:${Z}:${X}:${Q}`;return Yl$("sha256",Y).update(G).digest("hex")}function Ql$($,Z,X,Q,Y){let G=Math.floor(Date.now()/1000)+Q,J=GF6(Z,X,G,Y),W=new URL(`/api/dev-assets/${Z}/${Kl$(X)}`,$);return W.searchParams.set("expires",G.toString()),W.searchParams.set("signature",J),W.searchParams.set("method",Y),W.toString()}function Hl$($,Z,X){let Q=`${$}:${Z.getTime()}:${X}`;return`"${Yl$("md5","etag").update(Q).digest("hex")}"`}async function Fl$($,Z,X,Q,Y){try{let G=await XF6($,{withFileTypes:!0});for(let J of G){let W=iZ1($,J.name),H=QF6(Z,W).replace(/\\/g,"/");if(X&&!H.startsWith(X))continue;if(J.isDirectory())if(Q){let F=H+"/";if(!X||F.startsWith(X)){if(!(X?H.slice(X.length):H).includes("/"))Y.commonPrefixes.add(F)}}else await Fl$(W,Z,X,Q,Y);else if(J.isFile()){if(Q&&X){let F=H.slice(X.length);if(F.includes(Q)){let N=F.indexOf(Q),U=X+F.slice(0,N+1);Y.commonPrefixes.add(U);continue}}try{let F=await Gl$(W);Y.objects.push({key:H,size:F.size,lastModified:F.mtime.toISOString(),etag:Hl$(W,F.mtime,F.size)})}catch{}}}}catch{}}function Nl$($,Z){let Q=t($).id;return[{name:"LIST_OBJECTS",description:"List objects in the local assets directory with pagination support",inputSchema:P$.object({prefix:P$.string().optional(),maxKeys:P$.number().optional().default(1000),continuationToken:P$.string().optional(),delimiter:P$.string().optional()}),outputSchema:P$.object({objects:P$.array(P$.object({key:P$.string(),size:P$.number(),lastModified:P$.string(),etag:P$.string()})),nextContinuationToken:P$.string().optional(),isTruncated:P$.boolean(),commonPrefixes:P$.array(P$.string()).optional()}),handler:async(Y)=>{let G=Y,J=G.prefix||"",W=G.maxKeys??1000,K=G.delimiter,H=G.continuationToken,F=Wl$(Q);await ZF6(F,{recursive:!0});let N={objects:[],commonPrefixes:new Set};await Fl$(F,F,J,K,N),N.objects.sort((L,E)=>L.key.localeCompare(E.key));let U=0;if(H){if(U=N.objects.findIndex((L)=>L.key>H),U===-1)U=N.objects.length}let O=N.objects.slice(U,U+W),B=U+W<N.objects.length,w=B?O[O.length-1]?.key:void 0;return{objects:O,isTruncated:B,nextContinuationToken:w,commonPrefixes:Array.from(N.commonPrefixes).sort()}}},{name:"GET_OBJECT_METADATA",description:"Get metadata for a file in the local assets directory",inputSchema:P$.object({key:P$.string()}),outputSchema:P$.object({contentType:P$.string().optional(),contentLength:P$.number(),lastModified:P$.string(),etag:P$.string(),metadata:P$.record(P$.string(),P$.string()).optional()}),handler:async(Y)=>{let G=Y,J=mZ1(Q,G.key),W=await Gl$(J);return{contentType:P51(G.key),contentLength:W.size,lastModified:W.mtime.toISOString(),etag:Hl$(J,W.mtime,W.size)}}},{name:"GET_PRESIGNED_URL",description:"Generate a presigned URL for downloading a file from local storage",inputSchema:P$.object({key:P$.string(),expiresIn:P$.number().optional()}),outputSchema:P$.object({url:P$.string(),expiresIn:P$.number()}),handler:async(Y)=>{let G=Y,J=G.expiresIn??Xl$;return{url:Ql$(Z,Q,G.key,J,"GET"),expiresIn:J}}},{name:"PUT_PRESIGNED_URL",description:"Generate a presigned URL for uploading a file to local storage",inputSchema:P$.object({key:P$.string(),expiresIn:P$.number().optional(),contentType:P$.string().optional()}),outputSchema:P$.object({url:P$.string(),expiresIn:P$.number()}),handler:async(Y)=>{let G=Y,J=G.expiresIn??Xl$;return{url:Ql$(Z,Q,G.key,J,"PUT"),expiresIn:J}}},{name:"DELETE_OBJECT",description:"Delete a single file from local storage",inputSchema:P$.object({key:P$.string()}),outputSchema:P$.object({success:P$.boolean(),key:P$.string()}),handler:async(Y)=>{let G=Y,J=mZ1(Q,G.key);try{return await Zl$(J),{success:!0,key:G.key}}catch{return{success:!1,key:G.key}}}},{name:"DELETE_OBJECTS",description:"Delete multiple files from local storage",inputSchema:P$.object({keys:P$.array(P$.string()).max(1000)}),outputSchema:P$.object({deleted:P$.array(P$.string()),errors:P$.array(P$.object({key:P$.string(),message:P$.string()}))}),handler:async(Y)=>{let G=Y,J=[],W=[];return await Promise.all(G.keys.map(async(K)=>{let H=mZ1(Q,K);try{await Zl$(H),J.push(K)}catch(F){W.push({key:K,message:F instanceof Error?F.message:"Unknown error"})}})),{deleted:J,errors:W}}}]}async function pZ1($,Z,X){let Q=Nl$(Z,X),Y=new lW({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:F5});for(let J of Q){let W="shape"in J.inputSchema?J.inputSchema.shape:P$.object({}).shape,K=J.outputSchema&&"shape"in J.outputSchema?J.outputSchema.shape:P$.object({}).shape;Y.registerTool(J.name,{description:J.description??"",inputSchema:W,outputSchema:K,annotations:J.annotations,_meta:J._meta},async(H)=>{try{let F=await J.handler(H);return{content:[{type:"text",text:JSON.stringify(F)}],structuredContent:F}}catch(F){return{content:[{type:"text",text:`Error: ${F.message}`}],isError:!0}}})}let G=new ZQ({enableJsonResponse:$.headers.get("Accept")?.includes("application/json")??!1});return await Y.connect(G),OJ(Y,G,$,"mcp:dev-assets")}async function Ul$($,Z,X,Q){let G=Nl$(X,Q).find((J)=>J.name===$);if(!G)return{content:[{type:"text",text:`Tool not found: ${$}`}],isError:!0};try{let J=await G.handler(Z);return{content:[{type:"text",text:JSON.stringify(J)}]}}catch(J){return{content:[{type:"text",text:J instanceof Error?J.message:String(J)}],isError:!0}}}var YF6="./data/assets",Xl$=3600,Jl$,Ol$;var Bl$=D(()=>{q$();Yg();D8();Od();_C();bX();SP0();Jl$=new F1;Jl$.all("/",async($)=>{let Z=$.get("studioContext"),X=new URL($.req.url),Q=`${X.protocol}//${X.host}`;return pZ1($.req.raw,Z,Q)});Ol$=Jl$});var Dl$={};G4(Dl$,{mountDevRoutes:()=>JF6});function JF6($,Z){$.all("/mcp/:connectionId{.*_dev-assets$}",Z,async(Q)=>{let Y=Q.get("studioContext"),G=new URL(Q.req.url),J=`${G.protocol}//${G.host}`;return pZ1(Q.req.raw,Y,J)}),$.all("/mcp/:connectionId{.*_dev-assets$}/call-tool/:toolName",Z,async(Q)=>{let Y=Q.get("studioContext"),G=new URL(Q.req.url),J=`${G.protocol}//${G.host}`,W=Q.req.param("toolName");if(!W)return Q.json({error:"Missing tool name"},400);let K=await Q.req.json(),H=await Ul$(W,K,Y,J);if(H.isError)return Q.json(H.content,500);return Q.json(H.content)}),$.use("/mcp/dev-assets",Z),$.route("/mcp/dev-assets",Ol$);let X=new F1;X.use("*",NW({mountPath:"/api/dev-assets"})),X.route("/",VP0({orgFromPath:!1})),$.route("/api/dev-assets",X)}var wl$=D(()=>{D8();B51();SP0();Bl$()});import{sql as WF6}from"kysely";import{randomUUID as Ll$}from"crypto";import{z as KF6}from"zod";async function FF6($){let Z=new Date().toISOString(),X=Ll$(),Q=V4.SELF($.organizationId),Y="registry.publish_request.created",G={requestId:$.request.id,requestedId:$.request.requested_id,title:$.request.title,status:$.request.status,createdAt:$.request.created_at,requester:{name:$.request.requester_name,email:$.request.requester_email}};await $.db.insertInto("events").values({id:X,organization_id:$.organizationId,type:"registry.publish_request.created",source:Q,specversion:"1.0",subject:$.request.id,time:Z,datacontenttype:"application/json",dataschema:null,data:JSON.stringify(G),cron:null,status:"pending",attempts:0,last_error:null,next_retry_at:null,created_at:Z,updated_at:Z}).execute();let J=await $.db.selectFrom("event_subscriptions").select(["id"]).where("organization_id","=",$.organizationId).where("enabled","=",1).where("event_type","=","registry.publish_request.created").where((W)=>W.or([W("publisher","is",null),W("publisher","=",Q)])).execute();if(J.length>0)await $.db.insertInto("event_deliveries").values(J.map((W)=>({id:Ll$(),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 WF6`SELECT
|
|
2867
2867
|
pg_notify('studio_events', ${X}),
|