decocms 4.138.9 → 4.139.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-5dZO0VsC.js → AlertCircle-wJihDiQ-.js} +1 -1
- package/dist/client/assets/{AreaChart-CKUICmds.js → AreaChart-C0IfoRsV.js} +1 -1
- package/dist/client/assets/{ArrowUp-mUAoF_Um.js → ArrowUp-DbsXVPbo.js} +1 -1
- package/dist/client/assets/{ArrowUpRight-umvnbcf1.js → ArrowUpRight-iKW3XqUm.js} +1 -1
- package/dist/client/assets/{Check-CjZ2YvcO.js → Check-NlM2QpZS.js} +1 -1
- package/dist/client/assets/{CheckCircle-BV1cC1-m.js → CheckCircle-DrCuVPNT.js} +1 -1
- package/dist/client/assets/{ChevronDown-DQIwwY_i.js → ChevronDown-CP73Srts.js} +1 -1
- package/dist/client/assets/{ChevronRight-Bu8pellm.js → ChevronRight-CL9mKjpb.js} +1 -1
- package/dist/client/assets/{ChevronUp-C_YT2J9B.js → ChevronUp-nlgWra-u.js} +1 -1
- package/dist/client/assets/{Copy01-X8PNHEVS.js → Copy01-CZpYC4rj.js} +1 -1
- package/dist/client/assets/{DotsVertical-0QOEQW2z.js → DotsVertical-EC-HzRi9.js} +1 -1
- package/dist/client/assets/{Eye-BxYWt6ZW.js → Eye-CCMU4DfL.js} +1 -1
- package/dist/client/assets/{FilterLines-csZUfNiZ.js → FilterLines-819mv4ZD.js} +1 -1
- package/dist/client/assets/{HardDrive-BaNVeWcU.js → HardDrive-DPBy9fSj.js} +1 -1
- package/dist/client/assets/{Key01-DEPW9gc9.js → Key01-GiXw9ciR.js} +1 -1
- package/dist/client/assets/{LayoutLeft-ZV4gDMvx.js → LayoutLeft-BafROyFH.js} +1 -1
- package/dist/client/assets/{LinkExternal01-gT4UtIHJ.js → LinkExternal01-CzKeoORs.js} +1 -1
- package/dist/client/assets/{LogOut01-BVHQgZnf.js → LogOut01-CCvKK4sS.js} +1 -1
- package/dist/client/assets/{Monitor01-BSbZzgzc.js → Monitor01-BgXl1jZP.js} +1 -1
- package/dist/client/assets/{Palette-Dqy0vo-r.js → Palette-BzNnRHKX.js} +1 -1
- package/dist/client/assets/{Play-Ca4rnNLC.js → Play-BygD8NDy.js} +1 -1
- package/dist/client/assets/{Plus-CMY6WqTt.js → Plus-j3_2Fr9l.js} +1 -1
- package/dist/client/assets/{SearchLg-BAV-JbH2.js → SearchLg-6xa38-P6.js} +1 -1
- package/dist/client/assets/{SearchMd-BgwZPQnc.js → SearchMd-CLShWpaC.js} +1 -1
- package/dist/client/assets/{Settings02-2tduvP6s.js → Settings02-CUa5YIXE.js} +1 -1
- package/dist/client/assets/{Shield01-B9nvaexi.js → Shield01-BOVzbntf.js} +1 -1
- package/dist/client/assets/{Star01-BUCi8L18.js → Star01-BUpnIQn0.js} +1 -1
- package/dist/client/assets/{Stars01-DZxCyBm1.js → Stars01-cFurk4uR.js} +1 -1
- package/dist/client/assets/{Stars02-BuDaVkLi.js → Stars02-CZPKsCO1.js} +1 -1
- package/dist/client/assets/{Sun-CIh1Zd2-.js → Sun-CopkJ_rp.js} +1 -1
- package/dist/client/assets/{SwitchHorizontal01-CDJGlgy0.js → SwitchHorizontal01-C-gbN_bA.js} +1 -1
- package/dist/client/assets/{Tool01-BCIMb6oj.js → Tool01-sdZXH-UT.js} +1 -1
- package/dist/client/assets/{Tool02-BHEBfH06.js → Tool02-DPqCjnUM.js} +1 -1
- package/dist/client/assets/{Trash01-CDqZvSL2.js → Trash01-BFPovH26.js} +1 -1
- package/dist/client/assets/{TrendUp01-C7H5-W-q.js → TrendUp01-DDzT_ROf.js} +1 -1
- package/dist/client/assets/{Upload01-LgJCD5zt.js → Upload01-Cesb4Oqb.js} +1 -1
- package/dist/client/assets/{User01-BQvcBnBV.js → User01-JWPpcnWs.js} +1 -1
- package/dist/client/assets/{Users01-BxmwwREM.js → Users01-BFT6MGlM.js} +1 -1
- package/dist/client/assets/{Users03-BM9rxxkX.js → Users03-IobUP3FT.js} +1 -1
- package/dist/client/assets/{X-DNX-19j7.js → X-BaNoPqAp.js} +1 -1
- package/dist/client/assets/{XCircle-DQ8Fi2Kb.js → XCircle-togmps0R.js} +1 -1
- package/dist/client/assets/{XClose-59zLY4xu.js → XClose-CySUEbCc.js} +1 -1
- package/dist/client/assets/{Zap-q_wTQSIf.js → Zap-CyDGYeE3.js} +1 -1
- package/dist/client/assets/{ZapSquare-CH7shi4R.js → ZapSquare-DvQj-Iph.js} +1 -1
- package/dist/client/assets/{access-gate-z604n1sq.js → access-gate-DT_NT3E-.js} +1 -1
- package/dist/client/assets/{add-section-modal-DWvaYeFu.js → add-section-modal-DKUyGkQT.js} +1 -1
- package/dist/client/assets/{agent-icon-D1je81CZ.js → agent-icon-CGtTqy_h.js} +1 -1
- package/dist/client/assets/{agents-list-DcijbMld.js → agents-list-DwNOnOcE.js} +1 -1
- package/dist/client/assets/{ai-providers-BpPjrvI2.js → ai-providers-Dm_tLy-q.js} +1 -1
- package/dist/client/assets/{alert-dialog-MgEKVWKl.js → alert-dialog-BJzkX89k.js} +1 -1
- package/dist/client/assets/{alert-C7L0sVBV.js → alert-xxI4oh9R.js} +1 -1
- package/dist/client/assets/{app-editor-7cos_VPu.js → app-editor-OJFGteov.js} +1 -1
- package/dist/client/assets/{auth-BKaTpxZw.js → auth-BDUikPOU.js} +1 -1
- package/dist/client/assets/{auth-catchall-B26xr6Ny.js → auth-catchall-B6kg1aiL.js} +1 -1
- package/dist/client/assets/{auth-entry-DURpPK3w.js → auth-entry-BcSuhiLb.js} +1 -1
- package/dist/client/assets/{auth-split-layout-B6wVgnRd.js → auth-split-layout-CZKbu-nu.js} +1 -1
- package/dist/client/assets/{authenticate-and-persist-oauth-C2GUeFbY.js → authenticate-and-persist-oauth-CGZkVJSw.js} +1 -1
- package/dist/client/assets/{automation-list-row-DXlpz4N9.js → automation-list-row-iPiAVdwC.js} +1 -1
- package/dist/client/assets/{automation-runs-K_2C7hcx.js → automation-runs-DEmRZfUm.js} +1 -1
- package/dist/client/assets/{automations-DuLIvmnj.js → automations-CY6W35Qk.js} +1 -1
- package/dist/client/assets/{avatar-WvmlbIw_.js → avatar-COzg407D.js} +1 -1
- package/dist/client/assets/{badge-EieIiNUW.js → badge-BA63g33a.js} +1 -1
- package/dist/client/assets/{block-document-BoWidw9m.js → block-document-DjBvEQcA.js} +1 -1
- package/dist/client/assets/{brand-context-Na-Diaml.js → brand-context-DjeLDWjR.js} +1 -1
- package/dist/client/assets/{buckets-F9_eMkzE.js → buckets-C8tqdMcr.js} +1 -1
- package/dist/client/assets/{bulk-category-panel-BB2vy6Mo.js → bulk-category-panel-C0ZvL3dQ.js} +1 -1
- package/dist/client/assets/{calendar-BxUcC6fi.js → calendar-CnjwUB1f.js} +1 -1
- package/dist/client/assets/{capability-load-error-BkHDz1Z7.js → capability-load-error-mSnWIh5J.js} +1 -1
- package/dist/client/assets/{card-Bnga6Rnb.js → card-Dj_RC-zh.js} +1 -1
- package/dist/client/assets/{category-editor-nn9oijrG.js → category-editor-Clw3X_11.js} +1 -1
- package/dist/client/assets/{chat-context-Co0T8k2S.js → chat-context-B11lspxM.js} +1 -1
- package/dist/client/assets/{checkbox-C8MNnjS1.js → checkbox-Zc220VwK.js} +1 -1
- package/dist/client/assets/{cli-auth-success-DTmCJKa3.js → cli-auth-success-Yd35KQOu.js} +1 -1
- package/dist/client/assets/{collection-detail-D2i5_Ehy.js → collection-detail-Dw4K-ij6.js} +1 -1
- package/dist/client/assets/{collection-display-button-DtVBISHY.js → collection-display-button-D7ZAeHlC.js} +1 -1
- package/dist/client/assets/{collection-search-DZxH5pcH.js → collection-search-DW0Y9i3h.js} +1 -1
- package/dist/client/assets/{collection-table-wrapper-CeWfYdYJ.js → collection-table-wrapper-BKzEE-It.js} +1 -1
- package/dist/client/assets/{collection-tabs-DQ05a0SD.js → collection-tabs-CiWZPc6Z.js} +1 -1
- package/dist/client/assets/{command-D1n3BjOC.js → command-DJTnLUYL.js} +1 -1
- package/dist/client/assets/{commerce-onboarding-DqHGnFQw.js → commerce-onboarding-CYpUTTkq.js} +1 -1
- package/dist/client/assets/{companions-core-DWyHGoMs.js → companions-core-BxDhfn-Z.js} +1 -1
- package/dist/client/assets/{connect-OOyEMQ7n.js → connect-DtJ84qa1.js} +1 -1
- package/dist/client/assets/{connect-desktop-dialog-CQAwz1q7.js → connect-desktop-dialog-D3s3CJ2n.js} +1 -1
- package/dist/client/assets/{connection-Bfj6yjW5.js → connection-KgbStR8u.js} +1 -1
- package/dist/client/assets/{connection-card-DpcxUwIn.js → connection-card-DMkFFeRs.js} +1 -1
- package/dist/client/assets/{connection-detail--MWcCyTp.js → connection-detail-DsLKoccz.js} +1 -1
- package/dist/client/assets/{connection-form-helpers-C0kP97-J.js → connection-form-helpers-C0Pyu9te.js} +1 -1
- package/dist/client/assets/{connections-DVeB9LLo.js → connections-iDKGi5LB.js} +1 -1
- package/dist/client/assets/{decopilot-sse-pool-BfcPcID3.js → decopilot-sse-pool-DKXqv6_u.js} +1 -1
- package/dist/client/assets/{dialog-DULWawPh.js → dialog-D8ubC_J6.js} +1 -1
- package/dist/client/assets/{domain-settings-D6GvlmoJ.js → domain-settings-DUix0B5O.js} +1 -1
- package/dist/client/assets/{drawer-dlckSCHg.js → drawer-BjkEfZL1.js} +1 -1
- package/dist/client/assets/{dropdown-menu-CfqyRLsU.js → dropdown-menu-CfzQ4QaP.js} +1 -1
- package/dist/client/assets/{empty-state-C_MHBMZb.js → empty-state-B6AdMZLs.js} +1 -1
- package/dist/client/assets/{extract-connection-data-Cf27A7vT.js → extract-connection-data-eRYepVNB.js} +1 -1
- package/dist/client/assets/{file-explorer-D1THYBVf.js → file-explorer-DF_U65LM.js} +1 -1
- package/dist/client/assets/{form-CsBrFFqy.js → form-Qmb6axmU.js} +1 -1
- package/dist/client/assets/{general-CmbE87LW.js → general-Dg4eGTDr.js} +1 -1
- package/dist/client/assets/{github-repo-picker-BvCfUK3X.js → github-repo-picker-azB1aGjN.js} +1 -1
- package/dist/client/assets/{hooks-DO9Ds9ls.js → hooks-Cu2lac0F.js} +1 -1
- package/dist/client/assets/{index-Fjv09edY.js → index-BkDTaZ60.js} +1 -1
- package/dist/client/assets/{index-CVMEOnPq.js → index-BuapAEOY.js} +1 -1
- package/dist/client/assets/{index-mekBrtxV.js → index-CIiwhuuJ.js} +5 -5
- package/dist/client/assets/{index-BzjgAZiU.js → index-CrwUv7ry.js} +1 -1
- package/dist/client/assets/{index-DRwXb8sH.js → index-D1qyV-Mv.js} +3 -3
- package/dist/client/assets/{index-BMkpyx5D.js → index-D8NSnmpB.js} +1 -1
- package/dist/client/assets/{index-Dy5QDA5S.js → index-DUAc1A4P.js} +3 -3
- package/dist/client/assets/{index-CjTv1voN.js → index-DfEM59tY.js} +1 -1
- package/dist/client/assets/{index-BFpR5Bog.js → index-jrcSmmnE.js} +1 -1
- package/dist/client/assets/{index-ChDqqDir.js → index-oxu0Us6u.js} +1 -1
- package/dist/client/assets/{index-HyL0pVBb.js → index-pDSqLGY1.js} +1 -1
- package/dist/client/assets/{index-redirect-COewwOTO.js → index-redirect-Q5RF6-rv.js} +1 -1
- package/dist/client/assets/{input-DveLDNob.js → input-5LOImwfZ.js} +1 -1
- package/dist/client/assets/{integration-icon-BIcv0kzN.js → integration-icon-C5VG-GDV.js} +1 -1
- package/dist/client/assets/{invite-member-dialog-D0kltWuz.js → invite-member-dialog-D3ANgD5u.js} +1 -1
- package/dist/client/assets/{label-CVVaONXK.js → label-hjwbPJRK.js} +1 -1
- package/dist/client/assets/{layout-D58fXXJ1.js → layout-kShdHC6A.js} +1 -1
- package/dist/client/assets/{login-Cj_uEinG.js → login-CmPlqKHp.js} +1 -1
- package/dist/client/assets/{mcp-oauth-DXw4PP8J.js → mcp-oauth-C7Fdb5DR.js} +1 -1
- package/dist/client/assets/{members-qHP1LgJx.js → members-Bp-Kh2mL.js} +1 -1
- package/dist/client/assets/{monaco-editor-_ebJsdhe.js → monaco-editor-rjNct0Vj.js} +1 -1
- package/dist/client/assets/{monitoring-stats-row-D7yBGTPe.js → monitoring-stats-row-C12w5_bg.js} +1 -1
- package/dist/client/assets/{multi-select-BUtPAw92.js → multi-select-BTKRwOm1.js} +1 -1
- package/dist/client/assets/{oauth-callback-CVbsKc8Q.js → oauth-callback-BN66uvYb.js} +1 -1
- package/dist/client/assets/{oauth-callback-ai-provider-D4Io3VQe.js → oauth-callback-ai-provider-B4qPweiu.js} +1 -1
- package/dist/client/assets/{onboarding-BszyGn56.js → onboarding-CtvY48UD.js} +1 -1
- package/dist/client/assets/{org-install-BzRWAuIe.js → org-install-2_NS1Fru.js} +1 -1
- package/dist/client/assets/{org-layout-DmO1GYBz.js → org-layout-cLYC52kV.js} +1 -1
- package/dist/client/assets/{organization-choice-VUoTntyI.js → organization-choice-Bg6lzqvA.js} +1 -1
- package/dist/client/assets/{orgs-C2ylBk4d.js → orgs-CwO5JvZp.js} +1 -1
- package/dist/client/assets/{page-seo-form-mssN34iL.js → page-seo-form-DX7JykBy.js} +1 -1
- package/dist/client/assets/{popover-DflT1PWi.js → popover-gebIcQln.js} +1 -1
- package/dist/client/assets/{post-editor-CL1lPARV.js → post-editor-CNqbCG1m.js} +1 -1
- package/dist/client/assets/{primitives-DNdFvgZT.js → primitives-BSBH1rbA.js} +1 -1
- package/dist/client/assets/{profile-B3Rp74xJ.js → profile-C3aoWhNQ.js} +1 -1
- package/dist/client/assets/project-app-view-B9FF5pDd.js +1 -0
- package/dist/client/assets/record-editor-CPrahcnf.js +1 -0
- package/dist/client/assets/{redirect-editor-Z_ajB4GB.js → redirect-editor-yQx8Y9VN.js} +1 -1
- package/dist/client/assets/registry-CphRod7q.js +2 -0
- package/dist/client/assets/{registry-layout-BB6nj7SJ.js → registry-layout-DwMhQWqY.js} +1 -1
- package/dist/client/assets/{reports-eRbh1Kr4.js → reports-ZBCu7Tve.js} +1 -1
- package/dist/client/assets/{require-capability-Bx_sx6OH.js → require-capability-BhH-occ_.js} +1 -1
- package/dist/client/assets/{required-auth-layout-Bj20XGyN.js → required-auth-layout-Bpjxl1C9.js} +1 -1
- package/dist/client/assets/{reset-password-lfgBi5Jw.js → reset-password-DJOfaJCq.js} +1 -1
- package/dist/client/assets/{roles-TgMj4QKv.js → roles-DvFrFe6G.js} +1 -1
- package/dist/client/assets/{search-input-D5tsTyPx.js → search-input-DZVSSshO.js} +1 -1
- package/dist/client/assets/{secrets-6lhpxiFC.js → secrets-BZAQT-B6.js} +1 -1
- package/dist/client/assets/{sections-editor-CR7_jg5w.js → sections-editor-DZtEOkTQ.js} +1 -1
- package/dist/client/assets/{select-C1VpFdd_.js → select-BmEsNaO7.js} +1 -1
- package/dist/client/assets/{select-model-C9KGOr1b.js → select-model-BLowHrVa.js} +1 -1
- package/dist/client/assets/{self-tool-result-Bq5cTL0r.js → self-tool-result-BSCACJUv.js} +1 -1
- package/dist/client/assets/{seo-editor-Bkh8TFmD.js → seo-editor-BKwT8ki9.js} +1 -1
- package/dist/client/assets/{settings-layout-B4Cuaykz.js → settings-layout-BZ6kLGag.js} +1 -1
- package/dist/client/assets/{settings-section-UaQaDMHa.js → settings-section-BSvL5Sy5.js} +1 -1
- package/dist/client/assets/{shell-controls-Jm4NMHuC.js → shell-controls-j4jKRyFB.js} +1 -1
- package/dist/client/assets/{shell-layout-ZRMUfHxO.js → shell-layout-CQLtw57j.js} +1 -1
- package/dist/client/assets/{sidebar-efvbbQAA.js → sidebar-rJy4qRMx.js} +1 -1
- package/dist/client/assets/{skeleton-BnxfR8Zf.js → skeleton-DdrBen6D.js} +1 -1
- package/dist/client/assets/{sso-DNlwYGPm.js → sso-BMELrzP0.js} +1 -1
- package/dist/client/assets/{store-ikncJ6Lj.js → store-Ca4cIPDZ.js} +1 -1
- package/dist/client/assets/store-registry-D-BWzU4C.js +2 -0
- package/dist/client/assets/{studio-tools-DZuOp4Vx.js → studio-tools-C9jLu8nt.js} +1 -1
- package/dist/client/assets/{switch-Dq7fkcgW.js → switch-wYS8Vw3i.js} +1 -1
- package/dist/client/assets/{tab-id-Ck59Xu_k.js → tab-id-DDNMjq6I.js} +1 -1
- package/dist/client/assets/{table-DJuui-zO.js → table-DGHfEi61.js} +1 -1
- package/dist/client/assets/{tabs-nIRFtnT3.js → tabs-DXAil1M4.js} +1 -1
- package/dist/client/assets/{textarea-CS8987pI.js → textarea-Dc1ZAp3N.js} +1 -1
- package/dist/client/assets/{toggle-group-By6-T534.js → toggle-group-Bf-_5G2t.js} +1 -1
- package/dist/client/assets/{toolbar-ahp2cKbL.js → toolbar-CtBj4xjU.js} +1 -1
- package/dist/client/assets/{tooltip-CWg4_yU2.js → tooltip-DLplkM5m.js} +1 -1
- package/dist/client/assets/{use-ai-providers-CCac1T_D.js → use-ai-providers-BqC7azYy.js} +1 -1
- package/dist/client/assets/{use-api-keys-D5Sz7RSz.js → use-api-keys-dBYMiP2Q.js} +1 -1
- package/dist/client/assets/{use-automations-B3jf4DzO.js → use-automations-q3PdBVlj.js} +1 -1
- package/dist/client/assets/{use-autosave-RCfjdJkG.js → use-autosave-36H9kc73.js} +1 -1
- package/dist/client/assets/{use-capability-CGLGHeWs.js → use-capability-B-FI8_tC.js} +1 -1
- package/dist/client/assets/{use-clock-tick-ZSXExXxb.js → use-clock-tick-BnW0emMm.js} +1 -1
- package/dist/client/assets/{use-connection-DT_WRqpg.js → use-connection-DvUvN5kS.js} +1 -1
- package/dist/client/assets/{use-copy-C67F5NIg.js → use-copy-CEBPM0ws.js} +1 -1
- package/dist/client/assets/{use-create-virtual-mcp-BdkqTuwS.js → use-create-virtual-mcp-D8D7N8SH.js} +1 -1
- package/dist/client/assets/{use-debounced-autosave-DPGjDXys.js → use-debounced-autosave-CJL_FdUb.js} +1 -1
- package/dist/client/assets/{use-debounced-value-B695j2av.js → use-debounced-value-CBW_4Mi9.js} +1 -1
- package/dist/client/assets/{use-deco-credits-BWJIyFUv.js → use-deco-credits-CI5IcFAW.js} +1 -1
- package/dist/client/assets/{use-decopilot-events-BpdGqTBO.js → use-decopilot-events-CbW6U1NT.js} +1 -1
- package/dist/client/assets/{use-delete-connection-QD7sIVl8.js → use-delete-connection-DJJTdSNm.js} +1 -1
- package/dist/client/assets/{use-deployment-admin-81oHaNZW.js → use-deployment-admin-DA3SVtyk.js} +1 -1
- package/dist/client/assets/{use-file-configs-Cd3LcqNP.js → use-file-configs-fgUREMw2.js} +1 -1
- package/dist/client/assets/{use-infinite-scroll-CUhwx6QV.js → use-infinite-scroll-0rFNEOWM.js} +1 -1
- package/dist/client/assets/{use-join-requests-BW0gL3kN.js → use-join-requests-BiCj6moW.js} +1 -1
- package/dist/client/assets/{use-mcp-auth-status-CuVGHmap.js → use-mcp-auth-status-DP--OQCT.js} +1 -1
- package/dist/client/assets/{use-mcp-client-JNZaZZzb.js → use-mcp-client-BKDaWysp.js} +1 -1
- package/dist/client/assets/{use-mcp-tools-DazhC8JQ.js → use-mcp-tools-Cs0UtXlI.js} +1 -1
- package/dist/client/assets/{use-members-z5ELc_cr.js → use-members-BagaNwQL.js} +1 -1
- package/dist/client/assets/{use-mobile-DsOzZ7zR.js → use-mobile-DGjDYb4W.js} +1 -1
- package/dist/client/assets/{use-navigate-to-agent-UaaSGHr1.js → use-navigate-to-agent-kEBfDkph.js} +1 -1
- package/dist/client/assets/{use-org-auth-client-BkojDLXe.js → use-org-auth-client-emZ0kvWL.js} +1 -1
- package/dist/client/assets/{use-org-sso-0K2C7bZX.js → use-org-sso-f1ufeOJy.js} +1 -1
- package/dist/client/assets/{use-organization-roles-C25BpFyl.js → use-organization-roles-DAj7pJvj.js} +1 -1
- package/dist/client/assets/{use-organization-settings-0dTJxNYS.js → use-organization-settings-B-V_MdHN.js} +1 -1
- package/dist/client/assets/{use-registry-app-CJy8-t-E.js → use-registry-app-DCMskgc2.js} +1 -1
- package/dist/client/assets/{use-registry-connections-XRf_85dg.js → use-registry-connections-J6mZocDs.js} +1 -1
- package/dist/client/assets/{use-secrets-CeV4lfBK.js → use-secrets-NW0zRNdn.js} +1 -1
- package/dist/client/assets/{use-status-sounds-BV12xFuF.js → use-status-sounds-BTS6QZc4.js} +1 -1
- package/dist/client/assets/{use-view-mode-BZ_NA5ss.js → use-view-mode-COwBDxOM.js} +1 -1
- package/dist/client/assets/{use-virtual-mcp-Cze6E7f2.js → use-virtual-mcp-DWiAcctv.js} +1 -1
- package/dist/client/assets/useInfiniteQuery-BivnAaQ0.js +1 -0
- package/dist/client/assets/{useQueries-PpUiT87K.js → useQueries-CEBfECj7.js} +1 -1
- package/dist/client/assets/{useRouterState-KimW94eL.js → useRouterState-C1q6Zq7j.js} +1 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-DpZ0-EVf.js +1 -0
- package/dist/client/assets/{users-Dxf79oXk.js → users-By0unkuB.js} +1 -1
- package/dist/client/assets/{variant-calendar-4sJuK0Q5.js → variant-calendar-Dix-9CHu.js} +1 -1
- package/dist/client/assets/{view-mode-toggle-CAhXtS1R.js → view-mode-toggle-CPsTPyq7.js} +1 -1
- package/dist/client/index.html +1 -1
- package/dist/server/cli.js +3 -3
- package/dist/server/server.js +3 -3
- package/package.json +3 -2
- package/dist/client/assets/project-app-view-C63ietuI.js +0 -1
- package/dist/client/assets/record-editor-D0RF4wZ1.js +0 -1
- package/dist/client/assets/registry-Cm46vyOz.js +0 -2
- package/dist/client/assets/store-registry-CiCf0FP5.js +0 -2
- package/dist/client/assets/useInfiniteQuery-CjHtOTtV.js +0 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-pUp3c4G6.js +0 -1
package/dist/server/cli.js
CHANGED
|
@@ -83087,7 +83087,7 @@ ${w}`;v(B);return}if(c(null,F),t.strategy==="count"){if($--,$===0)v()}if(t.strat
|
|
|
83087
83087
|
`);function v(d){if(t===void 0)return!0;let D=Bq(d),_=D&&Bq(t)?Aau(t):t,N=D?Aau(d):yau(d),Z=PVt(_,N);return Z===""||!Z.startsWith("..")&&!AVt(Z)}return{upsert(d){f.run({$handle:d.handle,$status:d.status,$sandboxPath:d.sandboxPath,$port:d.port??null,$previewUrl:d.previewUrl??null,$repoCloneUrl:d.repoCloneUrl??null,$branch:d.branch??null,$projectName:d.projectName??null,$error:d.error??null,$now:Date.now()})},list(){return l.all().map(sli)},reconcile(){let d=Date.now();for(let D of l.all().map(sli)){if(!v(D.sandboxPath)){E.run({$handle:D.handle,$now:d});continue}if(!Bq(D.sandboxPath)){c.run({$handle:D.handle,$now:d});continue}if(D.status==="spawning"||D.status==="ready"||D.status==="failed"||D.status==="missing")w.run({$handle:D.handle,$now:d})}return l.all().map(sli)},prune(d){let D=[],_=[],N=this.reconcile();for(let Z of N){if(!v(Z.sandboxPath)){_.push({handle:Z.handle,sandboxPath:Z.sandboxPath,reason:"outside_root",deletedFiles:!1});continue}if(d.missing&&Z.status==="missing"){$.run({$handle:Z.handle}),D.push({handle:Z.handle,sandboxPath:Z.sandboxPath,reason:"missing",deletedFiles:!1});continue}if(!d.merged||!Bq(Z.sandboxPath))continue;if(Z.branch===null||Z.branch.trim()===""){_.push({handle:Z.handle,sandboxPath:Z.sandboxPath,reason:"no_branch",deletedFiles:!1});continue}if(!j_(Z.sandboxPath,["rev-parse","--is-inside-work-tree"]).ok){_.push({handle:Z.handle,sandboxPath:Z.sandboxPath,reason:"git_unavailable",deletedFiles:!1});continue}let B=j_(Z.sandboxPath,["status","--porcelain"]);if(!B.ok){_.push({handle:Z.handle,sandboxPath:Z.sandboxPath,reason:"git_unavailable",deletedFiles:!1});continue}if(B.stdout.trim()!==""){_.push({handle:Z.handle,sandboxPath:Z.sandboxPath,reason:"dirty_worktree",deletedFiles:!1});continue}let F=Gau(Z.sandboxPath,Z.branch);if(F===null){_.push({handle:Z.handle,sandboxPath:Z.sandboxPath,reason:"git_unavailable",deletedFiles:!1});continue}if(!F){_.push({handle:Z.handle,sandboxPath:Z.sandboxPath,reason:"branch_not_merged",deletedFiles:!1});continue}TVt(Z.sandboxPath,{recursive:!0,force:!0}),$.run({$handle:Z.handle}),D.push({handle:Z.handle,sandboxPath:Z.sandboxPath,reason:"merged",deletedFiles:!0})}return{removed:D,skipped:_}},delete(d){$.run({$handle:d})},inspect(d){let D=h.get({$handle:d});if(D===null)return null;let _=sli(D),N=0,Z=null;if(Bq(_.sandboxPath)&&j_(_.sandboxPath,["rev-parse","--is-inside-work-tree"]).ok){let B=j_(_.sandboxPath,["status","--porcelain"]);if(B.ok){let F=B.stdout.trim();N=F===""?0:F.split(`
|
|
83088
83088
|
`).length}if(_.branch!==null&&_.branch.trim()!=="")Z=Gau(_.sandboxPath,_.branch)}return{handle:_.handle,branch:_.branch,sandboxPath:_.sandboxPath,dirtyCount:N,merged:Z}},close(){u.close()}}}var Abi=()=>{};function kVt(i,u){return u?[["umount","-f",i]]:[["fusermount","-uz",i],["umount","-l",i]]}function xau(i,u){if(process.platform==="win32")return;for(let t of kVt(i,u))if(Bun.spawnSync(t,{stdout:"ignore",stderr:"ignore",timeout:5000}).exitCode===0)break}var kau=()=>{};import{existsSync as jVt,readdirSync as XVt}from"fs";import{rm as JVt}from"fs/promises";import{join as jau}from"path";async function Xau(i,u={}){let t=u.detach??KVt,f=u.exists??jVt,l=u.readdir??((w)=>XVt(w)),E=u.rm??((w)=>JVt(w,{recursive:!0,force:!0})),c=jau(i,"org");if(f(c))for(let w of l(c))t(jau(c,w));await E(i)}var KVt=(i)=>xau(i,process.platform==="darwin");var Jau=O(()=>{kau()});import{join as YVt}from"path";function Kau(i){let u=i.purge??Xau;return{stopSandbox(t){return i.provider.deleteSandbox(t)},inspectSandbox(t){return i.registry.inspect(t)},async removeSandbox(t){try{return await B1(async()=>{if(await i.provider.deleteSandbox(t),i.provider.hasHandle(t))throw Error("Can't delete \u2014 run in progress");let l=i.registry.inspect(t)?.sandboxPath??YVt(i.dataDir,"sandboxes",t);await u(l)},{maxAttempts:2,minTimeout:250,jitter:0}),i.registry.delete(t),{ok:!0}}catch(f){let l=f instanceof H6?f.cause:f;return{ok:!1,error:l instanceof Error?l.message:String(l)}}}}}var Yau=O(()=>{Z4();Jau()});import{randomBytes as WVt}from"crypto";import{mkdir as SVt}from"fs/promises";import{createServer as LVt}from"net";import{join as QVt}from"path";function Wau(i,u){return Error(`sandbox failed to start: ${i}`,{cause:u})}function Sau(i){if(!(i instanceof Error))return!1;return i.name==="TimeoutError"||/timed out|timeout|operation was aborted|aborted/i.test(i.message)}function Lau(i){if(i instanceof Error){let u=i.cause;if(u instanceof Error&&u.message)return u.message;return i.message}return String(i)}function HVt(i){if(!i)return null;let u=i.trim().replace(/\/+$/,"");if(!u)return null;let t=u.split(/[/:]/).filter(Boolean).at(-1);if(!t)return null;return t.replace(/\.git$/i,"")||null}function zVt(i){return{repoCloneUrl:i.repo?.cloneUrl??null,branch:i.repo?.branch??null,projectName:HVt(i.repo?.cloneUrl)}}function Qau(i){let u=i.maxSandboxes??20,t=new Map,f=i.pickPort??RVt,l=i.fetchImpl??fetch,E=i.resolvePreviewUrl??((N,Z)=>`http://127.0.0.1:${Z}`),c=(N)=>QVt(i.dataDir,"sandboxes",N),w=(N)=>{try{i.registry?.upsert(N)}catch(Z){console.warn(`[user-desktop] failed to persist sandbox lifecycle handle=${N.handle} status=${N.status}:`,Z)}},$=(N)=>{try{i.onEvent?.(N)}catch{}},h=async(N)=>{let Z=new AbortController,B=setTimeout(()=>Z.abort(),1500);try{let F=await l(`${N}/health`,{signal:Z.signal});if(!F.ok)console.warn(`[user-desktop] probe ${N}/health \u2192 ${F.status} (treating as dead)`);return F.ok}catch(F){return console.warn(`[user-desktop] probe ${N}/health failed: ${F instanceof Error?F.message:String(F)} (treating as dead)`),!1}finally{clearTimeout(B)}},v=(N)=>{console.warn(`[user-desktop] evicting dead daemon handle=${N.handle} port=${N.port}`);try{N.process.kill("SIGTERM")}catch{}if(t.get(N.handle)===N)t.delete(N.handle),w({handle:N.handle,status:"stopped",sandboxPath:c(N.handle),port:null,previewUrl:null,...N.registryMetadata,error:null}),$({handle:N.handle,phase:"evicted"})},d=new Map;function D(){if(t.size<u)return;let N=[...t.values()].filter((B)=>B.activeDispatchCount===0).sort((B,F)=>B.lastUsedAt-F.lastUsedAt);if(N.length===0){console.warn(`[user-desktop] at cap ${t.size}/${u} but every sandbox is pinned (active dispatch) \u2014 exceeding cap temporarily`);return}let Z=N[0];console.log(`[user-desktop] evicting LRU victim handle=${Z.handle} port=${Z.port} (cap ${u} reached, size=${t.size})`);try{Z.process.kill("SIGTERM")}catch{}t.delete(Z.handle),w({handle:Z.handle,status:"stopped",sandboxPath:c(Z.handle),port:null,previewUrl:null,...Z.registryMetadata,error:null}),$({handle:Z.handle,phase:"evicted"})}let _=async(N)=>{let Z=zVt(N),B=c(N.handle);w({handle:N.handle,status:"spawning",sandboxPath:B,port:null,previewUrl:null,...Z,error:null}),$({handle:N.handle,phase:"spawning",sandboxPath:B,projectName:Z.projectName,branch:Z.branch}),D();let F,g=null,T;try{await SVt(B,{recursive:!0}),console.log(`[user-desktop] ensure handle=${N.handle} repo=${N.repo?.cloneUrl??"(none)"} branch=${N.repo?.branch??"(none)"} runtime=${N.workload?.runtime??"(autodetect)"} pm=${N.workload?.packageManager??"(autodetect)"}`),T=WVt(24).toString("hex");let[k,I]=await Promise.all([f(),f()]);F=k,console.log(`[user-desktop] spawn handle=${N.handle} port=${F} devPort=${I} workdir=${B}`),g=await Promise.resolve(i.spawnDaemon({workdir:B,handle:N.handle,port:F,daemonToken:T,offloadAllowedHosts:N.offloadAllowedHosts??[],offloadAllowSameHostDev:N.offloadAllowSameHostDev??!1,orgFsConfigJson:N.orgFsConfigJson}));try{await i.waitForHealth(F)}catch(j){throw Wau("the sandbox didn't come online in time",j)}console.log(`[user-desktop] healthy handle=${N.handle} port=${F} \u2014 posting config`);try{await i.postConfig(F,I,{repo:N.repo,workload:N.workload,operator:N.operator},T)}catch(j){throw Wau(Sau(j)?"configuration timed out":"the sandbox rejected its configuration",j)}}catch(k){if((Sau(k)?console.warn:console.error)(`[user-desktop] sandbox bring-up failed handle=${N.handle} port=${F??"(none)"}${g?" (killing daemon)":""}:`,k),g)try{g.kill("SIGKILL")}catch{}throw $({handle:N.handle,phase:"failed",error:Lau(k),sandboxPath:B,projectName:Z.projectName,branch:Z.branch}),w({handle:N.handle,status:"failed",sandboxPath:B,port:null,previewUrl:null,...Z,error:Lau(k)}),k}if(!g||F===void 0)throw Error("sandbox bring-up invariant violated");let U=`http://127.0.0.1:${F}`,A=E(N.handle,F);console.log(`[user-desktop] ready handle=${N.handle} port=${F} sandboxApiUrl=${U} previewUrl=${A}`);let G={handle:N.handle,port:F,process:g,sandboxApiUrl:U,previewUrl:A,lastUsedAt:Date.now(),activeDispatchCount:0,daemonToken:T,registryMetadata:Z};if(t.set(N.handle,G),w({handle:N.handle,status:"ready",sandboxPath:B,port:F,previewUrl:A,...Z,error:null}),$({handle:N.handle,phase:"ready",port:F,previewUrl:A,sandboxPath:B,projectName:Z.projectName,branch:Z.branch}),g.exited)g.exited.then(()=>{if(t.get(N.handle)===G)console.warn(`[user-desktop] daemon process exited unexpectedly handle=${N.handle} port=${F} \u2014 removing from cache`),t.delete(N.handle),w({handle:N.handle,status:"stopped",sandboxPath:B,port:null,previewUrl:null,...Z,error:null}),$({handle:N.handle,phase:"evicted"});else console.log(`[user-desktop] daemon process exited handle=${N.handle} port=${F} (already replaced/removed)`)});return{sandboxApiUrl:U,previewUrl:A,port:F}};return{async ensureSandbox(N){let Z=t.get(N.handle);if(Z){if(await h(Z.sandboxApiUrl))return console.log(`[user-desktop] cache hit handle=${N.handle} port=${Z.port} (alive)`),Z.lastUsedAt=Date.now(),{sandboxApiUrl:Z.sandboxApiUrl,previewUrl:Z.previewUrl,port:Z.port};console.warn(`[user-desktop] cache stale handle=${N.handle} port=${Z.port} \u2014 respawning`),v(Z)}let B=d.get(N.handle);if(B)return console.log(`[user-desktop] joining in-flight ensure handle=${N.handle}`),B;let F=_(N).finally(()=>{d.delete(N.handle)});return d.set(N.handle,F),F},proxyPort(N){let Z=t.get(N);if(Z)Z.lastUsedAt=Date.now();return Z?.port??null},getDaemonToken(N){return t.get(N)?.daemonToken??null},hasHandle(N){return t.has(N)||d.has(N)},recordHit(N){let Z=t.get(N);if(Z)Z.lastUsedAt=Date.now()},acquireDispatch(N){let Z=t.get(N);if(!Z)return()=>{};Z.activeDispatchCount+=1;let B=!1;return()=>{if(B)return;B=!0;let F=t.get(N);if(F)F.activeDispatchCount=Math.max(0,F.activeDispatchCount-1)}},listSandboxes(){return[...t.values()]},async deleteSandbox(N){let Z=t.get(N);if(!Z){console.log(`[user-desktop] delete handle=${N} (not found, no-op)`);return}if(Z.activeDispatchCount>0){console.warn(`[user-desktop] delete handle=${N} port=${Z.port} REFUSED \u2014 ${Z.activeDispatchCount} active dispatch(es) in flight`);return}console.log(`[user-desktop] delete handle=${N} port=${Z.port}`);try{Z.process.kill("SIGTERM")}catch{}t.delete(N),w({handle:N,status:"stopped",sandboxPath:c(N),port:null,previewUrl:null,repoCloneUrl:null,branch:null,projectName:null,error:null}),$({handle:N,phase:"deleted"})},async shutdown(){console.log(`[user-desktop] shutdown \u2014 killing ${t.size} sandbox(es)`);for(let N of t.values())try{N.process.kill("SIGTERM")}catch{}t.clear()}}}function RVt(){return new Promise((i,u)=>{let t=LVt();t.unref(),t.on("error",u),t.listen(0,"127.0.0.1",()=>{let f=t.address();if(f&&typeof f==="object"){let l=f.port;t.close(()=>i(l))}else t.close(()=>u(Error("could not allocate port")))})})}var Hau=()=>{};import{randomUUID as nVt}from"crypto";import{hostname as bVt}from"os";async function zau(i){let u=bVt()||void 0;i.monitor?.onMachine?.(u??"this machine");let t=FMu(i.dataDir,{outFd:i.logFd,perSandboxLog:i.perSandboxLogs,hotReload:i.hotReload}),f=i6i({path:pli(i.dataDir),managedSandboxRoot:`${i.dataDir}/sandboxes`}),l=!1,E=()=>{if(l)return;l=!0;try{f.close()}catch{}};try{let c=0,w=Qau({dataDir:i.dataDir,registry:f,resolvePreviewUrl:(j,C)=>c>0?`http://${j}.localhost:${c}`:`http://127.0.0.1:${C}`,spawnDaemon:async(j)=>{let C={DAEMON_BOOT_ID:nVt(),APP_ROOT:j.workdir,PROXY_PORT:String(j.port),DAEMON_TOKEN:j.daemonToken,OFFLOAD_ALLOWED_HOSTS:j.offloadAllowedHosts.join(","),...j.offloadAllowSameHostDev?{OFFLOAD_ALLOW_SAME_HOST_DEV:"1"}:{}};if(j.orgFsConfigJson){let L=await AMu(i.dataDir);if(L)C.ORGFS_CONFIG=j.orgFsConfigJson,C.ORGFS_RCLONE_PATH=L}let K=await t({workdir:j.workdir,env:C,daemonPort:j.port});return{port:j.port,kill:(L)=>K.kill(L),exited:K.exited.then(()=>{return})}},postConfig:async(j,C,K,L)=>{let r={port:C};if(K.workload)r.runtime=K.workload.runtime,r.packageManager={name:K.workload.packageManager,...K.workload.packageManagerPath?{path:K.workload.packageManagerPath}:{}};let Q={application:r},fi=Fh(K.operator??null);if(fi)Q.operator=fi;if(K.repo)Q.git={repository:{cloneUrl:K.repo.cloneUrl,branch:K.repo.branch,...K.repo.submoduleCredentials&&K.repo.submoduleCredentials.length>0?{submoduleCredentials:K.repo.submoduleCredentials}:{}},...K.repo.userName&&K.repo.userEmail?{identity:{userName:K.repo.userName,userEmail:K.repo.userEmail}}:{}};await F_(`http://127.0.0.1:${j}`,L,Q)},waitForHealth:async(j)=>{await p1i(`http://127.0.0.1:${j}`)},maxSandboxes:20,onEvent:i.monitor?.onEvent}),$=await vau({port:i.port,lookupSandboxPort:(j)=>w.proxyPort(j)});c=$.port,console.log(`Local ingress listening on http://127.0.0.1:${$.port} (use http://<handle>.localhost:${$.port}/)`),i.monitor?.onIngress?.($.port);let h=PMu({provider:w}),v=async()=>{let j=await B_({dataDir:i.dataDir,target:i.clusterBaseUrl});if(!j)throw Object.assign(Error(`Session for ${i.clusterBaseUrl} is no longer valid \u2014 run \`deco auth login --target ${i.clusterBaseUrl}\` and restart \`deco link\`.`),{fatal:!0});return j.accessToken},d=await Tau(i.dataDir),D=process.env.npm_package_version??"0.0.0",_=await Ubi(),N=Fau(_,{onChange:(j)=>{console.log(`[link-daemon] capabilities detected: +${j.join(",")} (now: ${_.join(",")})`)}}),Z=hRi({path:`${i.dataDir}/link/outbox.sqlite`});Z.clear();let B=()=>{},F=new AbortController,g={clusterBaseUrl:i.clusterBaseUrl,getAccessToken:v,provider:w,outbox:Z,controlHandler:h,capabilities:_,machineId:d,cliVersion:D,previewPort:$.port,onConnected:()=>{i.monitor?.onCluster?.("linked"),console.log(`Linked to ${i.clusterBaseUrl}`)},onShutdown:()=>B(),runLifetimeSignal:F.signal};console.log(`[link-daemon] transport=tunnel cluster=${i.clusterBaseUrl}`);let T=await seu(g);console.log("[link-daemon] active transport=tunnel");let U,A=new Promise((j)=>{U=j}),G=!1,k=async()=>{if(G)return;G=!0,F.abort(),console.log(`
|
|
83089
83089
|
Shutting down\u2026`),N();try{await T.close()}catch{}try{await $.stop()}catch{}try{await w.shutdown()}catch{}try{Z.close()}catch{}E(),U(0)};process.on("SIGINT",()=>void k()),process.on("SIGTERM",()=>void k()),B=()=>{console.log("Disconnect requested from the Studio web UI \u2014 shutting down. Run `bunx decocms@latest link` to reconnect."),k()},T.closed.then(()=>{if(i.monitor?.onCluster?.("closed"),!G)console.error("Cluster connection closed permanently; exiting."),k()});let I=Kau({provider:w,registry:f,dataDir:i.dataDir});return{stopped:A,stop:k,stopSandbox:I.stopSandbox,removeSandbox:I.removeSandbox,inspectSandbox:I.inspectSandbox}}catch(c){throw E(),c}}var Rau=O(()=>{tRi();RM();gMu();yMu();GMu();vRi();peu();dau();gau();Uau();zM();Abi();Yau();Hau()});function ybi(i){return i.map((u)=>typeof u==="string"?u:String(u)).join(" ")}import{createServer as CVt}from"net";async function qVt(i){for(let u of MVt)if(await Pbi(i,u))return u;return null}async function nau(i,{intervalMs:u=1000,sleepFn:t=P0}={}){for(;;){let f=await qVt(i);if(f)return f;await t(u)}}function Pbi(i,u){return new Promise((t)=>{let f=CVt();f.once("error",(l)=>{t(l.code==="EADDRINUSE")}),f.listen(i,u,()=>{f.close(()=>t(!1))})})}var MVt;var Gbi=O(()=>{Z4();MVt=["localhost","127.0.0.1","0.0.0.0"]});function bau(i){return typeof i==="object"&&i!==null&&"code"in i&&i.code==="EADDRINUSE"}function VVt(i,u=process.platform){if(u==="win32")return`for /f "tokens=5" %P in ('netstat -ano ^| findstr /R /C:":${i} .*LISTENING"') do taskkill /F /PID %P`;return`kill -9 $(lsof -ti tcp:${i})`}function Cau(i,u=process.platform){return[`Port ${i} is already in use.`,"Run this command to stop the process listening on it, then retry `decocms link`:","",` ${VVt(i,u)}`].join(`
|
|
83090
|
-
`)}var Ibi;var Mau=O(()=>{Ibi=class Ibi extends Error{port;code="EADDRINUSE";constructor(i){super(`Port ${i} is already in use.`);this.port=i;this.name="PortInUseError"}}});var gL;var u6i=O(()=>{gL={name:"decocms",version:"4.138.9",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts","smoke:link":"bun run scripts/smoke-link.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@anthropic-ai/claude-agent-sdk":"^0.3.181","@duckdb/node-api":"^1.5.0-r.1","@openai/codex":"0.144.3","@openai/codex-darwin-arm64":"npm:@openai/codex@0.144.3-darwin-arm64","@openai/codex-darwin-x64":"npm:@openai/codex@0.144.3-darwin-x64","@openai/codex-linux-arm64":"npm:@openai/codex@0.144.3-linux-arm64","@openai/codex-linux-x64":"npm:@openai/codex@0.144.3-linux-x64","@openai/codex-win32-arm64":"npm:@openai/codex@0.144.3-win32-arm64","@openai/codex-win32-x64":"npm:@openai/codex@0.144.3-win32-x64"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@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","@resvg/resvg-js":"^2.6.2","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","node-pty":"^1.0.0","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6",satori:"^0.28.2"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/harness":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@decocms/tunnel":"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:"^5.9.3",vite:"^7.2.1",zod:"^4.0.0"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});var Fq={};Gi(Fq,{printBanner:()=>eVt,bannerLines:()=>qau,BANNER_LINES:()=>t6i,BANNER_GRADIENT:()=>f6i});function mVt(i){let u=Number.parseInt(i.slice(1),16);return[u>>16&255,u>>8&255,u&255]}function qau(i){let u=t6i.map((t,f)=>{let[l,E,c]=mVt(f6i[f]);return`\x1B[38;2;${l};${E};${c}m${t}\x1B[39m`});if(i!==void 0)u.push(`\x1B[2m v${i}\x1B[22m`);return u}function eVt(i){console.log("");for(let u of qau(i))console.log(u);console.log("")}var t6i,f6i;var TL=O(()=>{t6i=[" \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588 ","\u2591\u2591\u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588 \u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588\u2588\u2588 "," \u2591\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2588 \u2591 \u2588\u2588\u2588 \u2591\u2591\u2591 \u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588\u2591\u2591\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591 \u2588\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588 "," \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2591\u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2591 ","\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591 "],f6i=["#00ff64","#00ee5e","#00dc56","#00c84e","#00b444","#00a03c","#008832","#006e28"]});import{Box as aVt,Text as Vau}from"ink";import{jsx as oVt,jsxs as rau}from"react/jsx-runtime";function l6i({version:i}){return rau(aVt,{flexDirection:"column",marginTop:1,children:[t6i.map((u,t)=>oVt(Vau,{color:f6i[t],children:u},t)),rau(Vau,{dimColor:!0,children:[" v",i]})]})}var xbi=O(()=>{TL()});function mau(i){let u=i.branch??i.handle,t=[];if(i.dirtyCount>0)t.push(`${i.dirtyCount} uncommitted file${i.dirtyCount===1?"":"s"}`);if(i.merged===!1)t.push("branch not merged");return t.length>0?`\u26A0 ${t.join(", ")} \u2014 delete ${u}? (y/n)`:`Delete ${u}? (y/n)`}function UL(i){return[...i.values()].map((u)=>u.handle).sort((u,t)=>u.localeCompare(t))}function eau(i,u,t){if(i.length===0)return null;let f=u===null?-1:i.indexOf(u);if(f===-1)return t>0?i[0]:i[i.length-1];let l=Math.max(0,Math.min(i.length-1,f+t));return i[l]}function aau(i,u,t){if(t!==u)return t;let f=i.indexOf(u);if(f===-1)return t;return i[f+1]??i[f-1]??null}var Jbi={};Gi(Jbi,{subscribeLinkState:()=>kbi,setSelectedHandle:()=>jbi,setRemoving:()=>w6i,setPersistedSandboxes:()=>wrt,setPendingConfirm:()=>Tq,setMachine:()=>frt,setLogPath:()=>Ert,setLinkActions:()=>crt,setIngress:()=>trt,setDaemonError:()=>lrt,setClusterUrl:()=>urt,setCluster:()=>irt,setActionError:()=>c6i,resetLinkStateForTests:()=>hrt,removeSandboxRow:()=>Xbi,pushSandboxEvent:()=>$rt,getLinkState:()=>gq,applySandboxEvent:()=>oau});function pVt(i){return i==="spawning"||i==="ready"||i==="failed"}function oau(i,u){let t=new Map(i),f=t.get(u.handle);if(u.phase==="evicted"||u.phase==="deleted"){if(f)t.set(u.handle,{...f,port:null,previewUrl:null,status:"stopped",error:null});return t}return t.set(u.handle,{handle:u.handle,port:u.port??f?.port??null,previewUrl:u.previewUrl??f?.previewUrl??null,status:u.phase,error:u.phase==="failed"?u.error??"failed":null,projectName:u.projectName??f?.projectName??null,branch:u.branch??f?.branch??null,sandboxPath:u.sandboxPath??f?.sandboxPath??null}),t}function sau(){return{cluster:"connecting",clusterUrl:null,ingressUrl:null,ingressPort:null,machine:null,cap:sVt,sandboxes:new Map,daemonError:null,logPath:null,selectedHandle:null,pendingConfirm:null,removingHandles:new Set,actionError:null,actions:null}}function b3(){for(let i of E6i)i()}function gq(){return lf}function kbi(i){return E6i.add(i),()=>E6i.delete(i)}function irt(i){lf={...lf,cluster:i},b3()}function urt(i){lf={...lf,clusterUrl:i},b3()}function trt(i,u){lf={...lf,ingressPort:i,ingressUrl:u},b3()}function frt(i){lf={...lf,machine:i},b3()}function lrt(i){lf={...lf,daemonError:i},b3()}function Ert(i){lf={...lf,logPath:i},b3()}function jbi(i){lf={...lf,selectedHandle:i},b3()}function Tq(i){lf={...lf,pendingConfirm:i},b3()}function c6i(i){lf={...lf,actionError:i},b3()}function w6i(i,u){if(lf.removingHandles.has(i)===u)return;let t=new Set(lf.removingHandles);if(u)t.add(i);else t.delete(i);lf={...lf,removingHandles:t},b3()}function crt(i){lf={...lf,actions:i},b3()}function Xbi(i){let u=UL(lf.sandboxes),t=aau(u,i,lf.selectedHandle),f=new Map(lf.sandboxes);f.delete(i);let l=new Set(lf.removingHandles);l.delete(i),lf={...lf,sandboxes:f,selectedHandle:t,pendingConfirm:null,removingHandles:l},b3()}function wrt(i){let u=new Map;for(let t of i)u.set(t.handle,{handle:t.handle,port:t.port,previewUrl:t.previewUrl,status:t.status,error:t.error,projectName:t.projectName,branch:t.branch,sandboxPath:t.sandboxPath});for(let[t,f]of lf.sandboxes)if(pVt(f.status))u.set(t,f);lf={...lf,sandboxes:u},b3()}function $rt(i){lf={...lf,sandboxes:oau(lf.sandboxes,i)},b3()}function hrt(){lf=sau(),E6i.clear()}var sVt=20,lf,E6i;var Uq=O(()=>{lf=sau(),E6i=new Set});import{spawn as vrt}from"child_process";function drt(i){if(i==="darwin")return"open";if(i==="win32")return"start";return"xdg-open"}function pau(i,u=process.platform){let t=drt(u);try{vrt(t,[i],{stdio:"ignore",detached:!0}).unref()}catch{}}var iou=()=>{};function uou(i,u={}){let t=u.openUrl??pau,f=gq(),l=UL(f.sandboxes),E=f.selectedHandle!==null&&l.includes(f.selectedHandle)?f.selectedHandle:l[0]??null,c=f.actions;switch(i.type){case"move":jbi(eau(l,f.selectedHandle,i.delta));return;case"open":{if(E===null)return;let w=f.sandboxes.get(E);if(w?.status==="ready"&&w.previewUrl)t(w.previewUrl);return}case"stop":if(E!==null&&c)c.stopSandbox(E);return;case"delete":{if(E===null||!c)return;let w=c.inspectSandbox(E),$=f.sandboxes.get(E);c6i(null),Tq({handle:E,branch:w?.branch??$?.branch??null,dirtyCount:w?.dirtyCount??0,merged:w?.merged??null});return}case"confirmYes":{let w=f.pendingConfirm;if(Tq(null),w===null||!c)return;w6i(w.handle,!0),c.removeSandbox(w.handle).then(($)=>{if($.ok)Xbi(w.handle);else w6i(w.handle,!1),c6i($.error)});return}case"confirmNo":Tq(null);return;case"quit":if(c)c.quit();return}}var tou=O(()=>{Uq();iou()});function fou(i,u,t){if(t)return i==="y"||i==="Y"?{type:"confirmYes"}:{type:"confirmNo"};if(u.upArrow||i==="k")return{type:"move",delta:-1};if(u.downArrow||i==="j")return{type:"move",delta:1};if(i==="s")return{type:"stop"};if(i==="d")return{type:"delete"};if(i==="o")return{type:"open"};if(i==="q"||u.ctrl===!0&&i==="c")return{type:"quit"};return null}var lou={};Gi(lou,{LinkApp:()=>Ort});import{Box as b1,Text as vl,useInput as Drt}from"ink";import{useSyncExternalStore as _rt}from"react";import{jsx as jf,jsxs as jh}from"react/jsx-runtime";function Nrt(i,u){if(u)return{color:"yellow",text:"\u25CC Removing\u2026"};if(i.status==="ready")return{color:"green",text:"\u25CF Live"};if(i.status==="spawning")return{color:"yellow",text:"\u25CC Starting\u2026"};if(i.status==="stopped")return{color:"gray",text:"\u25A0 Stopped"};if(i.status==="missing")return{color:"yellow",text:"\u25A1 Missing"};if(i.status==="merged")return{color:"cyan",text:"\u2713 Merged"};if(i.status==="invalid")return{color:"red",text:"\u2717 Invalid"};if(i.status==="failed")return{color:"red",text:`\u2717 Failed: ${i.error??"failed"}`};return{color:"red",text:`\u2717 Error: ${i.error??""}`}}function Ort(){let i=_rt(kbi,gq),u=[...i.sandboxes.values()].sort((l,E)=>l.handle.localeCompare(E.handle)),t=UL(i.sandboxes),f=i.selectedHandle!==null&&t.includes(i.selectedHandle)?i.selectedHandle:t[0]??null;return Drt((l,E)=>{let c=fou(l,E,i.pendingConfirm!==null);if(c!==null)uou(c)}),jh(b1,{flexDirection:"column",children:[jf(l6i,{version:gL.version}),jf(b1,{marginBottom:1,children:jf(vl,{dimColor:!0,children:"\u2500".repeat(80)})}),jf(b1,{children:i.cluster==="linked"?jh(vl,{color:"green",children:["\u2713 Connected to ",i.clusterUrl??"deco"]}):i.cluster==="connecting"?jh(vl,{color:"yellow",children:["\u25CC Connecting to ",i.clusterUrl??"deco","\u2026"]}):jh(vl,{color:"red",children:["\u2717 Disconnected from ",i.clusterUrl??"deco"]})}),jf(b1,{children:i.ingressUrl?jh(vl,{color:"green",children:["\u2713 Serving at ",i.ingressUrl]}):jf(vl,{dimColor:!0,children:"\u25CC Starting local server\u2026"})}),jf(b1,{marginBottom:1,children:jf(vl,{dimColor:!0,children:`${"Computer".padEnd(16)}${i.machine??"this computer"} \xB7 ${u.length} of ${i.cap} previews`})}),u.length===0?jf(vl,{dimColor:!0,children:"No previews running yet."}):jh(b1,{flexDirection:"column",children:[jh(b1,{children:[jf(b1,{width:2,flexShrink:0}),jf(b1,{width:AL.project,flexShrink:0,marginRight:1,children:jf(vl,{dimColor:!0,wrap:"truncate-end",children:"PROJECT"})}),jf(b1,{width:AL.branch,flexShrink:0,marginRight:1,children:jf(vl,{dimColor:!0,wrap:"truncate-end",children:"BRANCH"})}),jf(b1,{width:AL.status,flexShrink:0,marginRight:1,children:jf(vl,{dimColor:!0,wrap:"truncate-end",children:"STATUS"})}),jf(b1,{flexGrow:1,children:jf(vl,{dimColor:!0,wrap:"truncate-end",children:"PREVIEW URL"})})]}),u.map((l)=>{let E=Nrt(l,i.removingHandles.has(l.handle)),c=l.handle===f;return jh(b1,{children:[jf(b1,{width:2,flexShrink:0,children:jf(vl,{color:"cyan",children:c?"\u203A":" "})}),jf(b1,{width:AL.project,flexShrink:0,marginRight:1,children:jf(vl,{bold:c,wrap:"truncate-end",children:l.projectName??l.handle})}),jf(b1,{width:AL.branch,flexShrink:0,marginRight:1,children:jf(vl,{bold:c,wrap:"truncate-end",children:l.branch??"\u2014"})}),jf(b1,{width:AL.status,flexShrink:0,marginRight:1,children:jf(vl,{color:E.color,bold:c,wrap:"truncate-end",children:E.text})}),jf(b1,{flexGrow:1,children:jf(vl,{dimColor:!0,wrap:"truncate-end",children:l.previewUrl??"\u2014"})})]},l.handle)})]}),i.daemonError?jf(b1,{marginTop:1,children:jh(vl,{color:"red",children:["\u26A0 ",i.daemonError]})}):null,i.logPath?jf(b1,{marginTop:1,children:jh(vl,{dimColor:!0,children:["Logs: ",i.logPath]})}):null,i.pendingConfirm?jf(b1,{marginTop:1,children:jf(vl,{color:"yellow",children:mau(i.pendingConfirm)})}):null,i.actionError?jf(b1,{marginTop:1,children:jh(vl,{color:"red",children:["\u2717 ",i.actionError]})}):null,jf(b1,{marginTop:1,children:jf(vl,{dimColor:!0,children:"\u2191\u2193 move \xB7 s stop \xB7 d delete \xB7 o open \xB7 q quit"})})]})}var AL;var Eou=O(()=>{u6i();xbi();tou();Uq();AL={project:18,branch:22,status:14}});var cou={};Gi(cou,{runLinkCommand:()=>yrt});import{closeSync as Zrt,mkdirSync as Brt,openSync as Frt,writeSync as grt}from"fs";import{homedir as Trt}from"os";import{join as Kbi}from"path";function Urt(i,u){let t={log:console.log,warn:console.warn,error:console.error},f=(l)=>{if(u===void 0)return;try{grt(u,`${ybi(l)}
|
|
83090
|
+
`)}var Ibi;var Mau=O(()=>{Ibi=class Ibi extends Error{port;code="EADDRINUSE";constructor(i){super(`Port ${i} is already in use.`);this.port=i;this.name="PortInUseError"}}});var gL;var u6i=O(()=>{gL={name:"decocms",version:"4.139.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",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts","smoke:link":"bun run scripts/smoke-link.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@anthropic-ai/claude-agent-sdk":"^0.3.181","@duckdb/node-api":"^1.5.0-r.1","@openai/codex":"0.144.3","@openai/codex-darwin-arm64":"npm:@openai/codex@0.144.3-darwin-arm64","@openai/codex-darwin-x64":"npm:@openai/codex@0.144.3-darwin-x64","@openai/codex-linux-arm64":"npm:@openai/codex@0.144.3-linux-arm64","@openai/codex-linux-x64":"npm:@openai/codex@0.144.3-linux-x64","@openai/codex-win32-arm64":"npm:@openai/codex@0.144.3-win32-arm64","@openai/codex-win32-x64":"npm:@openai/codex@0.144.3-win32-x64"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@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","@resvg/resvg-js":"^2.6.2","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","node-pty":"^1.0.0","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6",satori:"^0.28.2"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/harness":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@decocms/tunnel":"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",vite:"^7.2.1",zod:"^4.0.0"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});var Fq={};Gi(Fq,{printBanner:()=>eVt,bannerLines:()=>qau,BANNER_LINES:()=>t6i,BANNER_GRADIENT:()=>f6i});function mVt(i){let u=Number.parseInt(i.slice(1),16);return[u>>16&255,u>>8&255,u&255]}function qau(i){let u=t6i.map((t,f)=>{let[l,E,c]=mVt(f6i[f]);return`\x1B[38;2;${l};${E};${c}m${t}\x1B[39m`});if(i!==void 0)u.push(`\x1B[2m v${i}\x1B[22m`);return u}function eVt(i){console.log("");for(let u of qau(i))console.log(u);console.log("")}var t6i,f6i;var TL=O(()=>{t6i=[" \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588 ","\u2591\u2591\u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588 \u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588\u2588\u2588 "," \u2591\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2588 \u2591 \u2588\u2588\u2588 \u2591\u2591\u2591 \u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588\u2591\u2591\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591 \u2588\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588 "," \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2591\u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2591 ","\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591 "],f6i=["#00ff64","#00ee5e","#00dc56","#00c84e","#00b444","#00a03c","#008832","#006e28"]});import{Box as aVt,Text as Vau}from"ink";import{jsx as oVt,jsxs as rau}from"react/jsx-runtime";function l6i({version:i}){return rau(aVt,{flexDirection:"column",marginTop:1,children:[t6i.map((u,t)=>oVt(Vau,{color:f6i[t],children:u},t)),rau(Vau,{dimColor:!0,children:[" v",i]})]})}var xbi=O(()=>{TL()});function mau(i){let u=i.branch??i.handle,t=[];if(i.dirtyCount>0)t.push(`${i.dirtyCount} uncommitted file${i.dirtyCount===1?"":"s"}`);if(i.merged===!1)t.push("branch not merged");return t.length>0?`\u26A0 ${t.join(", ")} \u2014 delete ${u}? (y/n)`:`Delete ${u}? (y/n)`}function UL(i){return[...i.values()].map((u)=>u.handle).sort((u,t)=>u.localeCompare(t))}function eau(i,u,t){if(i.length===0)return null;let f=u===null?-1:i.indexOf(u);if(f===-1)return t>0?i[0]:i[i.length-1];let l=Math.max(0,Math.min(i.length-1,f+t));return i[l]}function aau(i,u,t){if(t!==u)return t;let f=i.indexOf(u);if(f===-1)return t;return i[f+1]??i[f-1]??null}var Jbi={};Gi(Jbi,{subscribeLinkState:()=>kbi,setSelectedHandle:()=>jbi,setRemoving:()=>w6i,setPersistedSandboxes:()=>wrt,setPendingConfirm:()=>Tq,setMachine:()=>frt,setLogPath:()=>Ert,setLinkActions:()=>crt,setIngress:()=>trt,setDaemonError:()=>lrt,setClusterUrl:()=>urt,setCluster:()=>irt,setActionError:()=>c6i,resetLinkStateForTests:()=>hrt,removeSandboxRow:()=>Xbi,pushSandboxEvent:()=>$rt,getLinkState:()=>gq,applySandboxEvent:()=>oau});function pVt(i){return i==="spawning"||i==="ready"||i==="failed"}function oau(i,u){let t=new Map(i),f=t.get(u.handle);if(u.phase==="evicted"||u.phase==="deleted"){if(f)t.set(u.handle,{...f,port:null,previewUrl:null,status:"stopped",error:null});return t}return t.set(u.handle,{handle:u.handle,port:u.port??f?.port??null,previewUrl:u.previewUrl??f?.previewUrl??null,status:u.phase,error:u.phase==="failed"?u.error??"failed":null,projectName:u.projectName??f?.projectName??null,branch:u.branch??f?.branch??null,sandboxPath:u.sandboxPath??f?.sandboxPath??null}),t}function sau(){return{cluster:"connecting",clusterUrl:null,ingressUrl:null,ingressPort:null,machine:null,cap:sVt,sandboxes:new Map,daemonError:null,logPath:null,selectedHandle:null,pendingConfirm:null,removingHandles:new Set,actionError:null,actions:null}}function b3(){for(let i of E6i)i()}function gq(){return lf}function kbi(i){return E6i.add(i),()=>E6i.delete(i)}function irt(i){lf={...lf,cluster:i},b3()}function urt(i){lf={...lf,clusterUrl:i},b3()}function trt(i,u){lf={...lf,ingressPort:i,ingressUrl:u},b3()}function frt(i){lf={...lf,machine:i},b3()}function lrt(i){lf={...lf,daemonError:i},b3()}function Ert(i){lf={...lf,logPath:i},b3()}function jbi(i){lf={...lf,selectedHandle:i},b3()}function Tq(i){lf={...lf,pendingConfirm:i},b3()}function c6i(i){lf={...lf,actionError:i},b3()}function w6i(i,u){if(lf.removingHandles.has(i)===u)return;let t=new Set(lf.removingHandles);if(u)t.add(i);else t.delete(i);lf={...lf,removingHandles:t},b3()}function crt(i){lf={...lf,actions:i},b3()}function Xbi(i){let u=UL(lf.sandboxes),t=aau(u,i,lf.selectedHandle),f=new Map(lf.sandboxes);f.delete(i);let l=new Set(lf.removingHandles);l.delete(i),lf={...lf,sandboxes:f,selectedHandle:t,pendingConfirm:null,removingHandles:l},b3()}function wrt(i){let u=new Map;for(let t of i)u.set(t.handle,{handle:t.handle,port:t.port,previewUrl:t.previewUrl,status:t.status,error:t.error,projectName:t.projectName,branch:t.branch,sandboxPath:t.sandboxPath});for(let[t,f]of lf.sandboxes)if(pVt(f.status))u.set(t,f);lf={...lf,sandboxes:u},b3()}function $rt(i){lf={...lf,sandboxes:oau(lf.sandboxes,i)},b3()}function hrt(){lf=sau(),E6i.clear()}var sVt=20,lf,E6i;var Uq=O(()=>{lf=sau(),E6i=new Set});import{spawn as vrt}from"child_process";function drt(i){if(i==="darwin")return"open";if(i==="win32")return"start";return"xdg-open"}function pau(i,u=process.platform){let t=drt(u);try{vrt(t,[i],{stdio:"ignore",detached:!0}).unref()}catch{}}var iou=()=>{};function uou(i,u={}){let t=u.openUrl??pau,f=gq(),l=UL(f.sandboxes),E=f.selectedHandle!==null&&l.includes(f.selectedHandle)?f.selectedHandle:l[0]??null,c=f.actions;switch(i.type){case"move":jbi(eau(l,f.selectedHandle,i.delta));return;case"open":{if(E===null)return;let w=f.sandboxes.get(E);if(w?.status==="ready"&&w.previewUrl)t(w.previewUrl);return}case"stop":if(E!==null&&c)c.stopSandbox(E);return;case"delete":{if(E===null||!c)return;let w=c.inspectSandbox(E),$=f.sandboxes.get(E);c6i(null),Tq({handle:E,branch:w?.branch??$?.branch??null,dirtyCount:w?.dirtyCount??0,merged:w?.merged??null});return}case"confirmYes":{let w=f.pendingConfirm;if(Tq(null),w===null||!c)return;w6i(w.handle,!0),c.removeSandbox(w.handle).then(($)=>{if($.ok)Xbi(w.handle);else w6i(w.handle,!1),c6i($.error)});return}case"confirmNo":Tq(null);return;case"quit":if(c)c.quit();return}}var tou=O(()=>{Uq();iou()});function fou(i,u,t){if(t)return i==="y"||i==="Y"?{type:"confirmYes"}:{type:"confirmNo"};if(u.upArrow||i==="k")return{type:"move",delta:-1};if(u.downArrow||i==="j")return{type:"move",delta:1};if(i==="s")return{type:"stop"};if(i==="d")return{type:"delete"};if(i==="o")return{type:"open"};if(i==="q"||u.ctrl===!0&&i==="c")return{type:"quit"};return null}var lou={};Gi(lou,{LinkApp:()=>Ort});import{Box as b1,Text as vl,useInput as Drt}from"ink";import{useSyncExternalStore as _rt}from"react";import{jsx as jf,jsxs as jh}from"react/jsx-runtime";function Nrt(i,u){if(u)return{color:"yellow",text:"\u25CC Removing\u2026"};if(i.status==="ready")return{color:"green",text:"\u25CF Live"};if(i.status==="spawning")return{color:"yellow",text:"\u25CC Starting\u2026"};if(i.status==="stopped")return{color:"gray",text:"\u25A0 Stopped"};if(i.status==="missing")return{color:"yellow",text:"\u25A1 Missing"};if(i.status==="merged")return{color:"cyan",text:"\u2713 Merged"};if(i.status==="invalid")return{color:"red",text:"\u2717 Invalid"};if(i.status==="failed")return{color:"red",text:`\u2717 Failed: ${i.error??"failed"}`};return{color:"red",text:`\u2717 Error: ${i.error??""}`}}function Ort(){let i=_rt(kbi,gq),u=[...i.sandboxes.values()].sort((l,E)=>l.handle.localeCompare(E.handle)),t=UL(i.sandboxes),f=i.selectedHandle!==null&&t.includes(i.selectedHandle)?i.selectedHandle:t[0]??null;return Drt((l,E)=>{let c=fou(l,E,i.pendingConfirm!==null);if(c!==null)uou(c)}),jh(b1,{flexDirection:"column",children:[jf(l6i,{version:gL.version}),jf(b1,{marginBottom:1,children:jf(vl,{dimColor:!0,children:"\u2500".repeat(80)})}),jf(b1,{children:i.cluster==="linked"?jh(vl,{color:"green",children:["\u2713 Connected to ",i.clusterUrl??"deco"]}):i.cluster==="connecting"?jh(vl,{color:"yellow",children:["\u25CC Connecting to ",i.clusterUrl??"deco","\u2026"]}):jh(vl,{color:"red",children:["\u2717 Disconnected from ",i.clusterUrl??"deco"]})}),jf(b1,{children:i.ingressUrl?jh(vl,{color:"green",children:["\u2713 Serving at ",i.ingressUrl]}):jf(vl,{dimColor:!0,children:"\u25CC Starting local server\u2026"})}),jf(b1,{marginBottom:1,children:jf(vl,{dimColor:!0,children:`${"Computer".padEnd(16)}${i.machine??"this computer"} \xB7 ${u.length} of ${i.cap} previews`})}),u.length===0?jf(vl,{dimColor:!0,children:"No previews running yet."}):jh(b1,{flexDirection:"column",children:[jh(b1,{children:[jf(b1,{width:2,flexShrink:0}),jf(b1,{width:AL.project,flexShrink:0,marginRight:1,children:jf(vl,{dimColor:!0,wrap:"truncate-end",children:"PROJECT"})}),jf(b1,{width:AL.branch,flexShrink:0,marginRight:1,children:jf(vl,{dimColor:!0,wrap:"truncate-end",children:"BRANCH"})}),jf(b1,{width:AL.status,flexShrink:0,marginRight:1,children:jf(vl,{dimColor:!0,wrap:"truncate-end",children:"STATUS"})}),jf(b1,{flexGrow:1,children:jf(vl,{dimColor:!0,wrap:"truncate-end",children:"PREVIEW URL"})})]}),u.map((l)=>{let E=Nrt(l,i.removingHandles.has(l.handle)),c=l.handle===f;return jh(b1,{children:[jf(b1,{width:2,flexShrink:0,children:jf(vl,{color:"cyan",children:c?"\u203A":" "})}),jf(b1,{width:AL.project,flexShrink:0,marginRight:1,children:jf(vl,{bold:c,wrap:"truncate-end",children:l.projectName??l.handle})}),jf(b1,{width:AL.branch,flexShrink:0,marginRight:1,children:jf(vl,{bold:c,wrap:"truncate-end",children:l.branch??"\u2014"})}),jf(b1,{width:AL.status,flexShrink:0,marginRight:1,children:jf(vl,{color:E.color,bold:c,wrap:"truncate-end",children:E.text})}),jf(b1,{flexGrow:1,children:jf(vl,{dimColor:!0,wrap:"truncate-end",children:l.previewUrl??"\u2014"})})]},l.handle)})]}),i.daemonError?jf(b1,{marginTop:1,children:jh(vl,{color:"red",children:["\u26A0 ",i.daemonError]})}):null,i.logPath?jf(b1,{marginTop:1,children:jh(vl,{dimColor:!0,children:["Logs: ",i.logPath]})}):null,i.pendingConfirm?jf(b1,{marginTop:1,children:jf(vl,{color:"yellow",children:mau(i.pendingConfirm)})}):null,i.actionError?jf(b1,{marginTop:1,children:jh(vl,{color:"red",children:["\u2717 ",i.actionError]})}):null,jf(b1,{marginTop:1,children:jf(vl,{dimColor:!0,children:"\u2191\u2193 move \xB7 s stop \xB7 d delete \xB7 o open \xB7 q quit"})})]})}var AL;var Eou=O(()=>{u6i();xbi();tou();Uq();AL={project:18,branch:22,status:14}});var cou={};Gi(cou,{runLinkCommand:()=>yrt});import{closeSync as Zrt,mkdirSync as Brt,openSync as Frt,writeSync as grt}from"fs";import{homedir as Trt}from"os";import{join as Kbi}from"path";function Urt(i,u){let t={log:console.log,warn:console.warn,error:console.error},f=(l)=>{if(u===void 0)return;try{grt(u,`${ybi(l)}
|
|
83091
83091
|
`)}catch{}};return console.log=(...l)=>f(l),console.warn=(...l)=>f(l),console.error=(...l)=>{f(l),i(ybi(l))},()=>{console.log=t.log,console.warn=t.warn,console.error=t.error}}async function Art(i,u){let t;try{t=await fetch(`${i}/api/links/me`,{headers:{authorization:`Bearer ${u}`},signal:AbortSignal.timeout(1e4)})}catch{return}if(t.status===401||t.status===403)throw Error(`Authentication rejected by ${i} \u2014 the session token was not accepted. `+`Run \`deco auth login --target ${i}\` and try again.`)}async function yrt(i={}){let u=i.port??5174,t=i.dataDir??process.env.DATA_DIR??process.env.DECOCMS_HOME??Kbi(Trt(),"deco"),f=i.clusterBaseUrl??process.env.STUDIO_CLUSTER_URL??process.env.MESH_CLUSTER_URL??"https://studio.decocms.com",l,E,c,w=()=>{if(c===void 0)return;try{c.close()}catch{}finally{c=void 0}};try{if(await Pbi(u,"127.0.0.1"))throw new Ibi(u);let $=Kbi(t,"sandboxes");c=i6i({path:pli(t),managedSandboxRoot:$});let h=await e1i({dataDir:t,intent:"Link",target:f});if(process.env.DECOCMS_LINK_MANAGED!=="1")await Art(f,h.accessToken);let v=c.reconcile();if(i.prune){let N=c.prune({missing:!0,merged:!0});if(!i.tui)console.log(`Pruned local sandboxes: removed ${N.removed.length}, skipped ${N.skipped.length}.`);v=c.reconcile()}let d;if(i.tui){let{render:N}=await import("ink"),{createElement:Z}=await import("react"),{LinkApp:B}=await Promise.resolve().then(() => (Eou(),lou)),{pushSandboxEvent:F,setCluster:g,setClusterUrl:T,setDaemonError:U,setIngress:A,setLogPath:G,setMachine:k,setPersistedSandboxes:I}=await Promise.resolve().then(() => (Uq(),Jbi));Brt(t,{recursive:!0});let j=Kbi(t,"link.log");E=Frt(j,"w"),G(j),I(v),T(f),g("connecting"),d={onEvent:(C)=>F(C),onIngress:(C)=>A(C,`http://127.0.0.1:${C}`),onCluster:(C)=>g(C),onMachine:(C)=>k(C)},l=Urt(U,E),N(Z(B),{patchConsole:!1})}else if(i.banner!==!1){let{printBanner:N}=await Promise.resolve().then(() => (TL(),Fq));N(i.version??"0.0.0")}w();let D=process.env.DECOCMS_LINK_MANAGED!=="1",_=await zau({port:u,clusterBaseUrl:f,dataDir:t,session:h,monitor:d,logFd:E,perSandboxLogs:D,hotReload:i.hotReload});if(i.tui){let{setLinkActions:N}=await Promise.resolve().then(() => (Uq(),Jbi));N({stopSandbox:_.stopSandbox,removeSandbox:_.removeSandbox,inspectSandbox:_.inspectSandbox,quit:_.stop})}return await _.stopped}catch($){return l?.(),console.error(bau($)?Cau(u):$ instanceof Error?$.message:String($)),1}finally{if(l?.(),E!==void 0)try{Zrt(E)}catch{}w()}}var wou=O(()=>{uRi();Rau();Gbi();Mau();Abi()});var Hbi={};Gi(Hbi,{resolveDevLinkClusterUrl:()=>xrt,populateDevLinkToxiProxy:()=>_ou,isDevLinkToxiProxyEnabled:()=>Irt,ensureDevLinkToxiProxy:()=>Krt,buildDevLinkToxiProxyConfig:()=>dou,DEV_LINK_TOXIPROXY_SERVICE_NAME:()=>hou,DEV_LINK_TOXIPROXY_PROXY_NAME:()=>vou});function Irt(i=process.env){return i.DECO_DEV_LINK_TOXIPROXY==="1"}function Ybi(i,u){if(!Number.isInteger(i)||i<1||i>65535)throw Error(`${u} must be an integer port in 1..65535`);return i}function dou(i){let u=new URL(i.serverUrl);if(u.protocol!=="http:")throw Error("DECO_DEV_LINK_TOXIPROXY only supports http local Studio URLs");let t=Ybi(i.apiPort,"apiPort"),f=Ybi(i.listenPort,"listenPort");if(u.port.length===0)throw Error("serverUrl must include an explicit valid port");let l=Ybi(Number.parseInt(u.port,10),"upstreamPort"),E=`http://127.0.0.1:${l}`,c=`http://127.0.0.1:${f}`;return{serviceName:hou,proxyName:vou,apiUrl:`http://127.0.0.1:${t}`,listen:`0.0.0.0:${f}`,upstream:`host.docker.internal:${l}`,publicTargetUrl:E,clusterUrl:c,logLine:`[dev-link-toxiproxy] ready: ${c} -> ${E}`}}function xrt(i){return i.toxiproxy?.clusterUrl??i.serverUrl}async function Wbi(i,u,t){if(i.ok)return;let f=await i.text();throw Error(`ToxiProxy ${u} failed for ${t}: status=${i.status} statusText=${i.statusText} body=${f}`)}function Qbi(i){if(i instanceof Error)return i.name==="Error"?i.message:`${i.name}: ${i.message}`;return String(i)}function Dou(i){if(!(i instanceof Error))return!1;if(i.name==="TimeoutError")return!0;return Dou(i.cause)}async function Sbi(i,u,t,f){try{return await i(t,f)}catch(l){throw Error(`ToxiProxy ${u} failed for ${t}: ${Qbi(l)}`,{cause:l})}}async function _ou(i,u=fetch){let t=`${i.apiUrl}/reset`,f=await Sbi(u,"reset",t,{method:"POST"});await Wbi(f,"reset",t);let l=`${i.apiUrl}/populate`,E=await Sbi(u,"populate",l,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify([{name:i.proxyName,listen:i.listen,upstream:i.upstream,enabled:!0}])});await Wbi(E,"populate",l)}async function krt(i,u){let t=`${i.apiUrl}/version`;try{await B1(async()=>{let f=await Sbi(u,"readiness check",t,{method:"GET",signal:AbortSignal.timeout(Grt)});await Wbi(f,"readiness check",t)},{maxAttempts:Prt,minTimeout:$ou,maxTimeout:$ou,multiplier:1,jitter:0,isRetriable:(f)=>!Dou(f)})}catch(f){let l=f instanceof H6?f.cause:f;throw Error(`ToxiProxy API did not become ready at ${t}: ${Qbi(l)}`,{cause:l})}}async function jrt(i){if(i===null)return"";return await new Response(i).text()}async function Lbi(i,u={}){let t=["docker",...i].join(" "),f=(()=>{try{return Bun.spawn(["docker",...i],{stdout:"ignore",stderr:"pipe"})}catch(w){throw Error(`Docker command failed to start (${t}): ${Qbi(w)}`,{cause:w})}})(),[l,E]=await Promise.all([f.exited,jrt(f.stderr)]);if(l===0||u.ignoreFailure===!0)return;let c=E.trim().length>0?`: ${E.trim()}`:"";throw Error(`Docker command failed (${t}) with exit ${l}${c}`)}async function Xrt(i,u){let t=`deco-dev-link-toxiproxy-${i}`;await Lbi(["rm","-f",t],{ignoreFailure:!0}),await Lbi(["run","--rm","-d","--name",t,"-p",`127.0.0.1:${i}:8474`,"-p",`127.0.0.1:${u}:${u}`,"ghcr.io/shopify/toxiproxy:2.12.0","-host=0.0.0.0"])}async function Jrt(i,u){let t=`deco-dev-link-toxiproxy-${i}`;await Lbi(["rm","-f",t],{ignoreFailure:!0})}async function Krt(i){let u=dou(i),t=i.startDaemon??Xrt,f=i.stopDaemon??(i.startDaemon===void 0?Jrt:void 0);await t(i.apiPort,i.listenPort);let l=i.fetchImpl??fetch;try{await krt(u,l),await _ou(u,l)}catch(E){if(f!==void 0)try{await f(i.apiPort,i.listenPort)}catch{}throw E}return{config:u,stop:async()=>{if(f!==void 0)await f(i.apiPort,i.listenPort)}}}var hou="ToxiProxy",vou="dev_link_studio",Prt=20,$ou=100,Grt=100;var zbi=O(()=>{Z4()});var Nou={};Gi(Nou,{migrateBetterAuth:()=>Rbi});import{getMigrations as Yrt}from"better-auth/db";import{sso as Wrt}from"@better-auth/sso";import{organization as Srt}from"@decocms/better-auth/plugins";import{admin as Lrt,apiKey as Qrt,jwt as Hrt,magicLink as zrt,mcp as Rrt,openAPI as nrt}from"better-auth/plugins";import{emailOTP as brt}from"better-auth/plugins/email-otp";async function Rbi(i){let t={database:YM(i||__()),plugins:[Srt({dynamicAccessControl:{enabled:!0,enableCustomResources:!0}}),Lrt(),Qrt(),Hrt(),nrt(),Rrt({loginPage:"/login"}),Wrt(),zrt({sendMagicLink:async()=>{}}),brt({sendVerificationOTP:async()=>{}})]},{toBeAdded:f,toBeCreated:l,runMigrations:E}=await Yrt(t);if(!f.length&&!l.length)return"up to date";return await E(),`${l.length+f.length} table(s) migrated`}var nbi=O(()=>{b6()});var bbi={};Gi(bbi,{up:()=>Crt,down:()=>Mrt});import{sql as Od}from"kysely";async function Crt(i){await i.schema.createTable("connections").addColumn("id","text",(u)=>u.primaryKey()).addColumn("organizationId","text",(u)=>u.notNull().references("organization.id").onDelete("cascade")).addColumn("createdById","text",(u)=>u.notNull().references("user.id").onDelete("cascade")).addColumn("name","text",(u)=>u.notNull()).addColumn("description","text").addColumn("icon","text").addColumn("appName","text").addColumn("appId","text").addColumn("connectionType","text",(u)=>u.notNull()).addColumn("connectionUrl","text",(u)=>u.notNull()).addColumn("connectionToken","text").addColumn("connectionHeaders","text").addColumn("oauthConfig","text").addColumn("metadata","text").addColumn("tools","text").addColumn("bindings","text").addColumn("status","text",(u)=>u.notNull().defaultTo("active")).addColumn("createdAt","text",(u)=>u.notNull().defaultTo(Od`CURRENT_TIMESTAMP`)).addColumn("updatedAt","text",(u)=>u.notNull().defaultTo(Od`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("api_keys").addColumn("id","text",(u)=>u.primaryKey()).addColumn("userId","text",(u)=>u.notNull().references("user.id").onDelete("cascade")).addColumn("name","text",(u)=>u.notNull()).addColumn("hashedKey","text",(u)=>u.notNull().unique()).addColumn("permissions","text",(u)=>u.notNull()).addColumn("expiresAt","text").addColumn("remaining","integer").addColumn("metadata","text").addColumn("createdAt","text",(u)=>u.notNull().defaultTo(Od`CURRENT_TIMESTAMP`)).addColumn("updatedAt","text",(u)=>u.notNull().defaultTo(Od`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("audit_logs").addColumn("id","text",(u)=>u.primaryKey()).addColumn("organizationId","text").addColumn("userId","text",(u)=>u.references("user.id").onDelete("set null")).addColumn("connectionId","text",(u)=>u.references("connections.id").onDelete("set null")).addColumn("toolName","text",(u)=>u.notNull()).addColumn("allowed","integer",(u)=>u.notNull()).addColumn("duration","integer").addColumn("timestamp","text",(u)=>u.notNull().defaultTo(Od`CURRENT_TIMESTAMP`)).addColumn("requestMetadata","text").execute(),await i.schema.createTable("oauth_clients").addColumn("id","text",(u)=>u.primaryKey()).addColumn("clientId","text",(u)=>u.notNull().unique()).addColumn("clientSecret","text").addColumn("clientName","text",(u)=>u.notNull()).addColumn("redirectUris","text",(u)=>u.notNull()).addColumn("grantTypes","text",(u)=>u.notNull()).addColumn("scope","text").addColumn("clientUri","text").addColumn("logoUri","text").addColumn("createdAt","text",(u)=>u.notNull().defaultTo(Od`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("oauth_authorization_codes").addColumn("code","text",(u)=>u.primaryKey()).addColumn("clientId","text",(u)=>u.notNull().references("oauth_clients.clientId").onDelete("cascade")).addColumn("userId","text",(u)=>u.notNull().references("user.id").onDelete("cascade")).addColumn("redirectUri","text",(u)=>u.notNull()).addColumn("scope","text").addColumn("codeChallenge","text").addColumn("codeChallengeMethod","text").addColumn("expiresAt","text",(u)=>u.notNull()).addColumn("createdAt","text",(u)=>u.notNull().defaultTo(Od`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("oauth_refresh_tokens").addColumn("token","text",(u)=>u.primaryKey()).addColumn("clientId","text",(u)=>u.notNull().references("oauth_clients.clientId").onDelete("cascade")).addColumn("userId","text",(u)=>u.notNull().references("user.id").onDelete("cascade")).addColumn("scope","text").addColumn("expiresAt","text").addColumn("createdAt","text",(u)=>u.notNull().defaultTo(Od`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("downstream_tokens").addColumn("id","text",(u)=>u.primaryKey()).addColumn("connectionId","text",(u)=>u.notNull().references("connections.id").onDelete("cascade")).addColumn("userId","text",(u)=>u.references("user.id").onDelete("cascade")).addColumn("accessToken","text",(u)=>u.notNull()).addColumn("refreshToken","text").addColumn("scope","text").addColumn("expiresAt","text").addColumn("createdAt","text",(u)=>u.notNull().defaultTo(Od`CURRENT_TIMESTAMP`)).addColumn("updatedAt","text",(u)=>u.notNull().defaultTo(Od`CURRENT_TIMESTAMP`)).execute(),await i.schema.createIndex("idx_connections_organizationId").on("connections").column("organizationId").execute(),await i.schema.createIndex("idx_audit_logs_organizationId").on("audit_logs").column("organizationId").execute(),await i.schema.createIndex("idx_audit_logs_userId").on("audit_logs").column("userId").execute(),await i.schema.createIndex("idx_audit_logs_timestamp").on("audit_logs").column("timestamp").execute()}async function Mrt(i){await i.schema.dropTable("downstream_tokens").execute(),await i.schema.dropTable("oauth_refresh_tokens").execute(),await i.schema.dropTable("oauth_authorization_codes").execute(),await i.schema.dropTable("oauth_clients").execute(),await i.schema.dropTable("audit_logs").execute(),await i.schema.dropTable("api_keys").execute(),await i.schema.dropTable("connections").execute()}var Oou=()=>{};var Cbi={};Gi(Cbi,{up:()=>qrt,down:()=>Vrt});import{sql as Zou}from"kysely";async function qrt(i){await i.schema.createTable("organization_settings").addColumn("organizationId","text",(u)=>u.primaryKey().references("organization.id").onDelete("cascade")).addColumn("modelsBindingConnectionId","text",(u)=>u.references("connections.id").onDelete("set null")).addColumn("createdAt","text",(u)=>u.notNull().defaultTo(Zou`CURRENT_TIMESTAMP`)).addColumn("updatedAt","text",(u)=>u.notNull().defaultTo(Zou`CURRENT_TIMESTAMP`)).execute()}async function Vrt(i){await i.schema.dropTable("organization_settings").execute()}var Bou=()=>{};var Mbi={};Gi(Mbi,{up:()=>rrt,down:()=>mrt});async function rrt(i){await i.schema.alterTable("connections").renameColumn("name","title").execute(),await i.schema.alterTable("connections").renameColumn("createdById","created_by").execute(),await i.schema.alterTable("connections").renameColumn("createdAt","created_at").execute(),await i.schema.alterTable("connections").renameColumn("updatedAt","updated_at").execute(),await i.schema.alterTable("connections").renameColumn("organizationId","organization_id").execute(),await i.schema.alterTable("connections").renameColumn("connectionType","connection_type").execute(),await i.schema.alterTable("connections").renameColumn("connectionUrl","connection_url").execute(),await i.schema.alterTable("connections").renameColumn("connectionToken","connection_token").execute(),await i.schema.alterTable("connections").renameColumn("connectionHeaders","connection_headers").execute(),await i.schema.alterTable("connections").renameColumn("oauthConfig","oauth_config").execute(),await i.schema.alterTable("connections").renameColumn("appName","app_name").execute(),await i.schema.alterTable("connections").renameColumn("appId","app_id").execute()}async function mrt(i){await i.schema.alterTable("connections").renameColumn("title","name").execute(),await i.schema.alterTable("connections").renameColumn("created_by","createdById").execute(),await i.schema.alterTable("connections").renameColumn("created_at","createdAt").execute(),await i.schema.alterTable("connections").renameColumn("updated_at","updatedAt").execute(),await i.schema.alterTable("connections").renameColumn("organization_id","organizationId").execute(),await i.schema.alterTable("connections").renameColumn("connection_type","connectionType").execute(),await i.schema.alterTable("connections").renameColumn("connection_url","connectionUrl").execute(),await i.schema.alterTable("connections").renameColumn("connection_token","connectionToken").execute(),await i.schema.alterTable("connections").renameColumn("connection_headers","connectionHeaders").execute(),await i.schema.alterTable("connections").renameColumn("oauth_config","oauthConfig").execute(),await i.schema.alterTable("connections").renameColumn("app_name","appName").execute(),await i.schema.alterTable("connections").renameColumn("app_id","appId").execute()}var qbi={};Gi(qbi,{up:()=>ert,down:()=>art});async function ert(i){await i.schema.createTable("organization_settings_new").addColumn("organizationId","text",(u)=>u.primaryKey().references("organization.id").onDelete("cascade")).addColumn("createdAt","text",(u)=>u.notNull()).addColumn("updatedAt","text",(u)=>u.notNull()).execute(),await i.insertInto("organization_settings_new").columns(["organizationId","createdAt","updatedAt"]).expression((u)=>u.selectFrom("organization_settings").select(["organizationId","createdAt","updatedAt"])).execute(),await i.schema.dropTable("organization_settings").execute(),await i.schema.alterTable("organization_settings_new").renameTo("organization_settings").execute()}async function art(i){await i.schema.createTable("organization_settings_new").addColumn("organizationId","text",(u)=>u.primaryKey().references("organization.id").onDelete("cascade")).addColumn("modelsBindingConnectionId","text",(u)=>u.references("connections.id").onDelete("set null")).addColumn("createdAt","text",(u)=>u.notNull()).addColumn("updatedAt","text",(u)=>u.notNull()).execute(),await i.insertInto("organization_settings_new").columns(["organizationId","modelsBindingConnectionId","createdAt","updatedAt"]).expression((u)=>u.selectFrom("organization_settings").select(["organizationId",u.val(null).as("modelsBindingConnectionId"),"createdAt","updatedAt"])).execute(),await i.schema.dropTable("organization_settings").execute(),await i.schema.alterTable("organization_settings_new").renameTo("organization_settings").execute()}var Vbi={};Gi(Vbi,{up:()=>ort,down:()=>srt});async function ort(i){await i.schema.alterTable("connections").addColumn("configuration_state","text").execute(),await i.schema.alterTable("connections").addColumn("configuration_scopes","text").execute()}async function srt(i){await i.schema.alterTable("connections").dropColumn("configuration_state").execute(),await i.schema.alterTable("connections").dropColumn("configuration_scopes").execute()}var rbi={};Gi(rbi,{up:()=>imt,down:()=>umt});import{sql as prt}from"kysely";async function imt(i){await i.schema.alterTable("organization_settings").addColumn("sidebar_items",prt`text`).execute()}async function umt(i){await i.schema.alterTable("organization_settings").dropColumn("sidebar_items").execute()}var Fou=()=>{};var mbi={};Gi(mbi,{up:()=>tmt,down:()=>fmt});async function tmt(i){await i.schema.createTable("monitoring_logs").addColumn("id","text",(u)=>u.primaryKey()).addColumn("organization_id","text",(u)=>u.notNull().references("organization.id").onDelete("cascade")).addColumn("connection_id","text",(u)=>u.notNull().references("connections.id").onDelete("cascade")).addColumn("connection_title","text",(u)=>u.notNull()).addColumn("tool_name","text",(u)=>u.notNull()).addColumn("input","text",(u)=>u.notNull()).addColumn("output","text",(u)=>u.notNull()).addColumn("is_error","integer",(u)=>u.notNull()).addColumn("error_message","text").addColumn("duration_ms","integer",(u)=>u.notNull()).addColumn("timestamp","text",(u)=>u.notNull()).addColumn("user_id","text").addColumn("request_id","text",(u)=>u.notNull()).execute(),await i.schema.createIndex("monitoring_logs_org_timestamp").on("monitoring_logs").columns(["organization_id","timestamp"]).execute(),await i.schema.createIndex("monitoring_logs_connection_timestamp").on("monitoring_logs").columns(["connection_id","timestamp"]).execute(),await i.schema.createIndex("monitoring_logs_is_error").on("monitoring_logs").columns(["organization_id","is_error","timestamp"]).execute()}async function fmt(i){await i.schema.dropIndex("monitoring_logs_is_error").execute(),await i.schema.dropIndex("monitoring_logs_connection_timestamp").execute(),await i.schema.dropIndex("monitoring_logs_org_timestamp").execute(),await i.schema.dropTable("monitoring_logs").execute()}var ebi={};Gi(ebi,{up:()=>lmt,down:()=>Emt});import{sql as Aq}from"kysely";async function lmt(i){await i.schema.createTable("events").addColumn("id","text",(u)=>u.primaryKey()).addColumn("organization_id","text",(u)=>u.notNull().references("organization.id").onDelete("cascade")).addColumn("type","text",(u)=>u.notNull()).addColumn("source","text",(u)=>u.notNull()).addColumn("specversion","text",(u)=>u.notNull().defaultTo("1.0")).addColumn("subject","text").addColumn("time","text",(u)=>u.notNull()).addColumn("datacontenttype","text",(u)=>u.notNull().defaultTo("application/json")).addColumn("dataschema","text").addColumn("data","text").addColumn("cron","varchar(255)").addColumn("status","text",(u)=>u.notNull().defaultTo("pending")).addColumn("attempts","integer",(u)=>u.notNull().defaultTo(0)).addColumn("last_error","text").addColumn("next_retry_at","text").addColumn("created_at","text",(u)=>u.notNull().defaultTo(Aq`CURRENT_TIMESTAMP`)).addColumn("updated_at","text",(u)=>u.notNull().defaultTo(Aq`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("event_subscriptions").addColumn("id","text",(u)=>u.primaryKey()).addColumn("organization_id","text",(u)=>u.notNull().references("organization.id").onDelete("cascade")).addColumn("connection_id","text",(u)=>u.notNull().references("connections.id").onDelete("cascade")).addColumn("publisher","text").addColumn("event_type","text",(u)=>u.notNull()).addColumn("filter","text").addColumn("enabled","integer",(u)=>u.notNull().defaultTo(1)).addColumn("created_at","text",(u)=>u.notNull().defaultTo(Aq`CURRENT_TIMESTAMP`)).addColumn("updated_at","text",(u)=>u.notNull().defaultTo(Aq`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("event_deliveries").addColumn("id","text",(u)=>u.primaryKey()).addColumn("event_id","text",(u)=>u.notNull()).addColumn("subscription_id","text",(u)=>u.notNull().references("event_subscriptions.id").onDelete("cascade")).addColumn("status","text",(u)=>u.notNull().defaultTo("pending")).addColumn("attempts","integer",(u)=>u.notNull().defaultTo(0)).addColumn("last_error","text").addColumn("delivered_at","text").addColumn("next_retry_at","text").addColumn("created_at","text",(u)=>u.notNull().defaultTo(Aq`CURRENT_TIMESTAMP`)).execute(),await i.schema.createIndex("idx_events_org_status").on("events").columns(["organization_id","status"]).execute(),await i.schema.createIndex("idx_events_source").on("events").columns(["source"]).execute(),await i.schema.createIndex("idx_events_type").on("events").columns(["type"]).execute(),await i.schema.createIndex("idx_events_retry").on("events").columns(["status","next_retry_at"]).execute(),await i.schema.createIndex("idx_subscriptions_connection").on("event_subscriptions").columns(["connection_id"]).execute(),await i.schema.createIndex("idx_subscriptions_type").on("event_subscriptions").columns(["event_type"]).execute(),await i.schema.createIndex("idx_subscriptions_org_enabled").on("event_subscriptions").columns(["organization_id","enabled"]).execute(),await i.schema.createIndex("idx_subscriptions_unique").on("event_subscriptions").columns(["connection_id","event_type","publisher","filter"]).unique().execute(),await i.schema.createIndex("idx_deliveries_event").on("event_deliveries").columns(["event_id"]).execute(),await i.schema.createIndex("idx_deliveries_subscription_status").on("event_deliveries").columns(["subscription_id","status"]).execute(),await i.schema.createIndex("idx_deliveries_retry").on("event_deliveries").columns(["status","next_retry_at"]).execute()}async function Emt(i){await i.schema.dropIndex("idx_deliveries_retry").execute(),await i.schema.dropIndex("idx_deliveries_subscription_status").execute(),await i.schema.dropIndex("idx_deliveries_event").execute(),await i.schema.dropIndex("idx_subscriptions_unique").execute(),await i.schema.dropIndex("idx_subscriptions_org_enabled").execute(),await i.schema.dropIndex("idx_subscriptions_type").execute(),await i.schema.dropIndex("idx_subscriptions_connection").execute(),await i.schema.dropIndex("idx_events_retry").execute(),await i.schema.dropIndex("idx_events_type").execute(),await i.schema.dropIndex("idx_events_source").execute(),await i.schema.dropIndex("idx_events_org_status").execute(),await i.schema.dropTable("event_deliveries").execute(),await i.schema.dropTable("event_subscriptions").execute(),await i.schema.dropTable("events").execute()}var gou=()=>{};var abi={};Gi(abi,{up:()=>wmt,down:()=>$mt});import{sql as cmt}from"kysely";async function wmt(i){await i.schema.dropTable("audit_logs").ifExists().execute()}async function $mt(i){await i.schema.createTable("audit_logs").ifNotExists().addColumn("id","text",(u)=>u.primaryKey()).addColumn("organizationId","text").addColumn("userId","text",(u)=>u.references("user.id").onDelete("set null")).addColumn("connectionId","text",(u)=>u.references("connections.id").onDelete("set null")).addColumn("toolName","text",(u)=>u.notNull()).addColumn("allowed","integer",(u)=>u.notNull()).addColumn("duration","integer").addColumn("timestamp","text",(u)=>u.notNull().defaultTo(cmt`CURRENT_TIMESTAMP`)).addColumn("requestMetadata","text").execute(),await i.schema.createIndex("idx_audit_logs_organizationId").on("audit_logs").column("organizationId").execute(),await i.schema.createIndex("idx_audit_logs_userId").on("audit_logs").column("userId").execute(),await i.schema.createIndex("idx_audit_logs_timestamp").on("audit_logs").column("timestamp").execute()}var Tou=()=>{};var obi={};Gi(obi,{up:()=>hmt,down:()=>vmt});import{sql as $6i}from"kysely";async function hmt(i){await i.schema.createTable("gateways").addColumn("id","text",(u)=>u.primaryKey()).addColumn("organization_id","text",(u)=>u.notNull().references("organization.id").onDelete("cascade")).addColumn("title","text",(u)=>u.notNull()).addColumn("description","text").addColumn("tool_selection_strategy","text").addColumn("status","text",(u)=>u.notNull().defaultTo("active")).addColumn("is_default","integer",(u)=>u.notNull().defaultTo(0)).addColumn("created_at","text",(u)=>u.notNull().defaultTo($6i`CURRENT_TIMESTAMP`)).addColumn("updated_at","text",(u)=>u.notNull().defaultTo($6i`CURRENT_TIMESTAMP`)).addColumn("created_by","text",(u)=>u.notNull().references("user.id").onDelete("cascade")).addColumn("updated_by","text").execute(),await i.schema.createTable("gateway_connections").addColumn("id","text",(u)=>u.primaryKey()).addColumn("gateway_id","text",(u)=>u.notNull().references("gateways.id").onDelete("cascade")).addColumn("connection_id","text",(u)=>u.notNull().references("connections.id").onDelete("cascade")).addColumn("selected_tools","text").addColumn("created_at","text",(u)=>u.notNull().defaultTo($6i`CURRENT_TIMESTAMP`)).execute(),await i.schema.createIndex("idx_gateways_org").on("gateways").columns(["organization_id"]).execute(),await i.schema.createIndex("idx_gateways_org_status").on("gateways").columns(["organization_id","status"]).execute(),await $6i`CREATE UNIQUE INDEX idx_gateways_default_per_org ON gateways (organization_id) WHERE is_default = 1`.execute(i),await i.schema.createIndex("idx_gateway_connections_gateway").on("gateway_connections").columns(["gateway_id"]).execute(),await i.schema.createIndex("idx_gateway_connections_connection").on("gateway_connections").columns(["connection_id"]).execute(),await i.schema.createIndex("idx_gateway_connections_unique").on("gateway_connections").columns(["gateway_id","connection_id"]).unique().execute()}async function vmt(i){await i.schema.dropIndex("idx_gateway_connections_unique").execute(),await i.schema.dropIndex("idx_gateway_connections_connection").execute(),await i.schema.dropIndex("idx_gateway_connections_gateway").execute(),await i.schema.dropIndex("idx_gateways_default_per_org").execute(),await i.schema.dropIndex("idx_gateways_org_status").execute(),await i.schema.dropIndex("idx_gateways_org").execute(),await i.schema.dropTable("gateway_connections").execute(),await i.schema.dropTable("gateways").execute()}var Uou=()=>{};var sbi={};Gi(sbi,{up:()=>dmt,down:()=>Dmt});async function dmt(i){await i.schema.alterTable("gateways").addColumn("icon","text").execute()}async function Dmt(i){await i.schema.alterTable("gateways").dropColumn("icon").execute()}var pbi={};Gi(pbi,{up:()=>_mt,down:()=>Nmt});import{sql as h6i}from"kysely";async function _mt(i){await i.schema.alterTable("gateways").addColumn("tool_selection_mode","text",(u)=>u.notNull().defaultTo("inclusion")).execute(),await h6i`
|
|
83092
83092
|
UPDATE gateways
|
|
83093
83093
|
SET tool_selection_mode = CASE
|
|
@@ -85223,7 +85223,7 @@ conversation.
|
|
|
85223
85223
|
</skills-usage>`;var PB0=()=>{};function Dkf(i){let u={};for(let t of i.split(`
|
|
85224
85224
|
`)){let f=t.match(/^([A-Za-z][\w-]*):\s*(.*)$/);if(f?.[1]&&f[2]!==void 0)u[f[1].toLowerCase()]=f[2].trim()}return u}function GB0(i){for(let u of i.split(/\n\s*\n/)){let t=u.trim();if(!t||t.startsWith("#"))continue;return t.replace(/\n/g," ")}return null}function IB0(i){let u=i.match(/^---\n([\s\S]*?)\n---\n?/);if(!u||u[1]===void 0)return{name:null,description:GB0(i),body:i};let t=Dkf(u[1]),f=i.slice(u[0].length);return{name:t.name||null,description:t.description||GB0(f),body:f}}function Okf(i){let u=i.lastIndexOf("/");return u===-1?i:i.slice(u+1)}async function Ftu(i,u,t,f){try{let l=(await i.listDir(u,t)).filter((w)=>w.kind==="dir");if(l.length===0)return[];let E=await i.filesExist(u,l.map((w)=>`${w.path}/SKILL.md`)),c=[];for(let w of l){if(f.remaining<=0)break;if(!E.has(`${w.path}/SKILL.md`))continue;f.remaining-=1;try{let $=await i.read(u,`${w.path}/SKILL.md`),h=IB0(new TextDecoder().decode($));c.push({dirPath:w.path,name:h.name??Okf(w.path),description:h.description})}catch{}}return c}catch(l){return console.warn(`[skill-catalog] scan failed (${u}:${t||"/"})`,l),[]}}async function Zkf(i,u){if(q5i&&q5i.expires>Date.now())return q5i.entries;let t=Rq(i),f=[];for(let{set:l}of h5()){let E=S_(l),c=await Ftu(t,E,"",u);for(let w of c)f.push({id:`${l}/${w.dirPath}`,name:w.name,description:w.description,source:`public:${l}`,sandboxPath:tg(E,w.dirPath),volume:E,path:w.dirPath})}if(f.length>0)q5i={entries:f,expires:Date.now()+Nkf};return f}function Bkf(i,u){let t=ec(),f=t?Vw(t,u):new Ud(u,i.baseUrl);return new yd(f,i.storage.orgFsEntries,u)}async function Fkf(i,u,t){let f=Bkf(i,u),[l,E]=await Promise.all([Ftu(f,M5i,"",t),Ftu(f,M5i,"skills",t)]);return[...l,...E].map((c)=>({id:`home/${c.dirPath}`,name:c.name,description:c.description,source:"home",sandboxPath:tg(M5i,c.dirPath),volume:M5i,path:c.dirPath}))}async function V5i(i,u){let t={remaining:_kf},[f,l]=await Promise.all([Zkf(i,t),Fkf(i,u,t)]);return[...f,...l].sort((E,c)=>E.source.localeCompare(c.source)||E.id.localeCompare(c.id))}var _kf=200,Nkf=300000,M5i="home",q5i=null;var gtu=O(()=>{Lq();Z_();JL();Sz();KL()});async function xB0(i,u){let t=i.organization?.id;if(!t)return null;try{let f=await V5i(i,t);if(f.length===0)return null;let l=new Set((u.metadata?.knowledge??[]).filter((c)=>c.kind==="skill").map((c)=>tg(c.volume,c.path))),E=f.filter((c)=>l.has(c.sandboxPath)).map((c)=>c.id);return yB0(f.map((c)=>({id:c.id,description:c.description,source:c.source})),E)}catch(f){return console.warn("[skill-catalog] failed to render skills block",f),null}}var kB0=O(()=>{PB0();gtu();Sz()});import{SpanStatusCode as jB0}from"@opentelemetry/api";function gkf(i,u){if(i.connection_type!=="VIRTUAL")return!1;if(!u||xd(u))return!1;return i.id===u}async function XB0(i,u,t=!1){let f=i.id,l=await u.storage.virtualMcps.findById(f);if(!l)throw Error(`Virtual MCP not found: ${f}`);return K2(l,u,"passthrough",t)}async function K2(i,u,t,f=!1,l){let E=i.connections.map((v)=>v.connection_id),w=(await u.tracer.startActiveSpan("studio.virtual_mcp.load_connections",{attributes:{"virtual_mcp.id":i.id??"decopilot","virtual_mcp.connection_count":E.length}},async(v)=>{try{let d=await Promise.all(E.map((D)=>u.storage.connections.findById(D)));return v.setStatus({code:jB0.OK}),d}catch(d){throw v.setStatus({code:jB0.ERROR,message:d.message}),v.recordException(d),d}finally{v.end()}})).filter((v)=>v!==null&&v.status==="active"&&!gkf(v,i.id));if(l?.additionalConnections?.length)w.unshift(...l.additionalConnections);if(i.organization_id){let v=new Set(w.map((D)=>D.id)),{items:d}=await u.storage.connections.list(i.organization_id,{slug:"mcp-github"});for(let D of d)if(D.status==="active"&&!v.has(D.id)&&oZ0(D))w.push(D)}let $=l?.includeSkillsCatalog?await xB0(u,i)??void 0:void 0,h={connections:w,virtualMcp:i,superUser:f,mcpListCache:Dl()??void 0,listTimeoutMs:l?.listTimeoutMs,skillsBlock:$};return new C5i(h,u)}function JB0(i,u,t=!1,f){if(i.connection_type==="VIRTUAL")throw Error(`Concrete MCP connection required, received Virtual MCP: ${i.id}`);let l=i.description?.trim(),E=[`You are an ephemeral specialist for the "${i.title}" MCP connection (ID: ${i.id}).`,l||void 0].filter((c)=>c!==void 0).join(`
|
|
85225
85225
|
|
|
85226
|
-
`);return new C5i({connections:[i],superUser:t,mcpListCache:Dl()??void 0,listTimeoutMs:f?.listTimeoutMs,instructions:E},u)}var Lz=O(()=>{Rt();E$();ZN();UB0();kB0()});var sZ0={};Gi(sZ0,{clientFromConnection:()=>F6});async function F6(i,u,t=!1){if(i.connection_type==="VIRTUAL")return XB0(i,u,t);return _B0(i,u,t)}var Mm=O(()=>{NB0();Lz()});async function Ttu(i,u,t){let f=new AbortController,l,E=new Promise((w,$)=>{l=setTimeout(()=>{f.abort(),$(new KB0(i.id,t))},t)}),c=(async()=>{let w=await F6(i,u,!0);try{return(await w.listTools(void 0,{timeout:t,signal:f.signal})).tools}finally{await w.close().catch(()=>{})}})();c.catch(()=>{});try{return await Promise.race([c,E])}finally{if(l)clearTimeout(l)}}var KB0;var YB0=O(()=>{Mm();KB0=class KB0 extends Error{constructor(i,u){super(`listTools timed out after ${u}ms for connection ${i}`);this.name="ListToolsTimeoutError"}}});function r5i(i){return(u)=>{if(u instanceof Ku&&u.code===Ru.MethodNotFound)return i;throw u}}var WB0=O(()=>{dl()});function m5i(i,u,t){let f=q9(i,u,t,Dl()??void 0),l=MB(f,{name:"studio-mcp-server",version:"1.0.0"},{capabilities:Tkf,toolCallTimeoutMs:cQ});l.server.setRequestHandler(z_,async()=>{return await f.listResources().catch(r5i({resources:[]}))}),l.server.setRequestHandler(R_,async()=>{return await f.listResourceTemplates().catch(r5i({resourceTemplates:[]}))}),l.server.setRequestHandler(n_,async()=>{return await f.listPrompts().catch(r5i({prompts:[]}))});let E=l.close.bind(l);return l.close=async()=>{await E(),await f.close().catch(()=>{})},l}var Tkf;var SB0=O(()=>{h3();dl();Cm();E$();WB0();Tkf={tools:{},resources:{},prompts:{}}});var BN=O(()=>{Mm();YB0();SB0()});function ja(i,u,t){if(u.some((f)=>f!=="*"&&f.startsWith("SELF::"))&&i.SELF===void 0)i.SELF={value:`${t}_self`}}function Xa(i,u){let t=new Map;for(let f of u){if(f==="*")continue;let[l,E]=b3i(f);if(!Ukf.has(E))continue;let c=Ar(l,i);if(typeof c!=="object"||c===null||!("value"in c))continue;let w=c.value;if(typeof w!=="string")continue;t.set(`${w}:${E}`,{targetConnectionId:w,scope:E})}return[...t.values()]}async function Ja(i,u,t,f){for(let E of u){if(E==="*")continue;let[c]=b3i(E),w=Ar(c,i);if(w===void 0||w===null)throw Error(`Scope references key "${c}" but it's not present in state`)}let l=C50(i,u);for(let E of l){if(E.endsWith("_self"))continue;let c=await f.storage.connections.findById(E);if(!c||c.organization_id!==t)throw Error(`Referenced connection not found: ${E}`);try{await f.access.check(E)}catch(w){throw Error(`Access denied to referenced connection: ${E}. ${w.message}`)}}}var Ukf;var Utu=O(()=>{Xoi();q3i();Ukf=new Set([C3i,M3i])});import{z as LB0}from"zod";var Akf,ykf,Atu;var QB0=O(()=>{H4();fu();R0();E$();BN();Utu();Or();Jd();Akf=LB0.object({data:a6i.describe("Data for the new connection (id is auto-generated if not provided)")}),ykf=LB0.object({item:$c.describe("The created connection entity")}),Atu=p({name:"COLLECTION_CONNECTIONS_CREATE",description:"Create a new MCP connection. Auto-fetches and caches the server's tool list.",annotations:{title:"Create Connection",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!1},inputSchema:Akf,outputSchema:ykf,handler:async(i,u)=>{gi(u);let t=Oi(u);await u.access.check();let f=Qu(u);if(!f)throw Error("User ID required to create connection");let l={...i.data,organization_id:t.id,created_by:f};if(l.id){if((await u.storage.connections.findById(l.id))?.organization_id===t.id)throw Error("Connection already exists in organization")}if(l.connection_type==="VIRTUAL"){let d=nL(l.connection_url);if(!d)throw Error("VIRTUAL connection requires connection_url in format: virtual://$virtual_mcp_id");let D=await u.storage.virtualMcps.findById(d);if(!D)throw Error(`Virtual MCP not found: ${d}`);if(D.organization_id!==t.id)throw Error("Virtual MCP does not belong to the current organization");l.connection_url=bL(d)}if(l.connection_type==="STDIO"&&!vu().localMode)throw Error("STDIO connections are only available in local mode (--local-mode).");let E=await D9({id:`pending-${Date.now()}`,title:l.title,connection_type:l.connection_type,connection_url:l.connection_url,connection_token:l.connection_token,connection_headers:l.connection_headers}).catch(()=>null),c=E?.tools?.length?E.tools:null,w=E?.scopes?.length?E.scopes:l.configuration_scopes??null,$=l.configuration_state??null;if($&&w?.length)ja($,w,t.id),await Ja($,w,t.id,u);let h=await u.storage.connections.createNew({...l,tools:null,configuration_state:$,configuration_scopes:w}),v=$&&w?.length?Xa($,w):[];if(v.length>0){let d;try{await u.storage.connectionCredentialVault.replaceGrantsForSubject({organizationId:t.id,subjectConnectionId:h.id,createdBy:f,grants:v});let{plaintextToken:D,record:_}=await u.storage.connectionCredentialVault.createOrRotateWorkloadToken({organizationId:t.id,subjectConnectionId:h.id});d=_.id,await(await F6(h,u,!1)).callTool({name:"ON_MCP_CONFIGURATION",arguments:{state:$,scopes:w,firstRun:!0,vault:{baseUrl:u.baseUrl,org:t.slug??t.id,subjectConnectionId:h.id,token:D}}})}catch(D){if(d)await u.storage.connectionCredentialVault.revokeWorkloadToken({organizationId:t.id,subjectConnectionId:h.id,tokenId:d});throw await u.storage.connections.delete(h.id),D}}if(c)Dl()?.set("tools",h.id,c).catch(()=>{});return mu.capture({distinctId:f,event:"connection_created",groups:{organization:t.id},properties:{connection_id:h.id,connection_type:h.connection_type,app_name:h.app_name??null,organization_id:t.id,tools_count:c?.length??0}}),{item:h}}})});import{z as S5}from"zod/v4";import{z as HB0}from"zod/v4";import{z as e5i}from"zod/v4";import{z as h8}from"zod/v4";import{z as xkf}from"zod/v4";import{z as fg}from"zod/v4";import{z as v8}from"zod/v4";import{z as iE}from"zod/v4";import{z as zB0}from"zod/v4";import{z as s5i}from"zod/v4";import{z as akf}from"zod/v4";import{z as RB0}from"zod/v4";import{z as a5i}from"zod/v4";import{z as Ejf}from"zod/v4";function Ka(i,u){if(i===u)return!0;if(i==null||u==null)return i===u;if(typeof i!==typeof u)return!1;if(Array.isArray(i)&&Array.isArray(u)){if(i.length!==u.length)return!1;return i.every((t,f)=>Ka(t,u[f]))}if(typeof i==="object"&&typeof u==="object"){let t=Object.keys(i),f=Object.keys(u);if(t.length!==f.length)return!1;return t.every((l)=>f.includes(l)&&Ka(i[l],u[l]))}return!1}function rkf(){return(i)=>{if(!Array.isArray(i))return!0;let u=[];return i.every((t)=>{if(u.some((l)=>Ka(t,l)))return!1;return u.push(t),!0})}}function o5i(i,u){return i.safeParse(u).success}function WE(i){if(typeof i==="boolean")return i?S5.any():S5.never();let u={};for(let l of hjf)l.apply(u,i);let t=[];if(u.string!==!1)t.push(u.string||S5.string());if(u.number!==!1)t.push(u.number||S5.number());if(u.boolean!==!1)t.push(u.boolean||S5.boolean());if(u.null!==!1)t.push(u.null||S5.null());if(u.array!==!1)t.push(u.array||S5.array(S5.any()));if(u.tuple!==!1&&u.tuple!==void 0)t.push(u.tuple);if(u.object!==!1)if(u.object)t.push(u.object);else{let l=S5.custom((E)=>{return typeof E==="object"&&E!==null&&!Array.isArray(E)},"Must be an object, not an array");t.push(l)}if(u.file!==!1&&u.file!==void 0)t.push(u.file);let f;if(t.length===0)f=S5.never();else if(t.length===1)f=t[0];else if(!Object.keys(i).some((E)=>E!=="$schema"&&E!=="title"&&E!=="description"))f=S5.any();else f=S5.union(t);for(let l of vjf)f=l.apply(f,i);return f}var Pkf=class{apply(i,u){if(!u.type)return;let t=Array.isArray(u.type)?u.type:[u.type],f=new Set(t);if(!f.has("string"))i.string=!1;if(!f.has("number")&&!f.has("integer"))i.number=!1;if(!f.has("boolean"))i.boolean=!1;if(!f.has("null"))i.null=!1;if(!f.has("array"))i.array=!1;if(!f.has("object"))i.object=!1;if(f.has("integer")&&i.number!==!1){let l=i.number||HB0.number();if(l instanceof HB0.ZodNumber)i.number=l.int()}}},Gkf=class{apply(i,u){if(u.const===void 0)return;let t=u.const;if(i.string=!1,i.number=!1,i.boolean=!1,i.null=!1,i.array=!1,i.object=!1,typeof t==="string")i.string=e5i.literal(t);else if(typeof t==="number")i.number=e5i.literal(t);else if(typeof t==="boolean")i.boolean=e5i.literal(t);else if(t===null)i.null=e5i.null();else if(Array.isArray(t))i.array=void 0;else if(typeof t==="object")i.object=void 0}},Ikf=class{apply(i,u){if(!u.enum)return;if(u.enum.length===0){if(!u.type)i.string=!1,i.number=!1,i.boolean=!1,i.null=!1,i.array=!1,i.object=!1;return}let t={string:u.enum.filter((f)=>typeof f==="string"),number:u.enum.filter((f)=>typeof f==="number"),boolean:u.enum.filter((f)=>typeof f==="boolean"),null:u.enum.filter((f)=>f===null),array:u.enum.filter((f)=>Array.isArray(f)),object:u.enum.filter((f)=>typeof f==="object"&&f!==null&&!Array.isArray(f))};i.string=this.createTypeSchema(t.string,"string"),i.number=this.createTypeSchema(t.number,"number"),i.boolean=this.createTypeSchema(t.boolean,"boolean"),i.null=t.null.length>0?h8.null():!1,i.array=t.array.length>0?void 0:!1,i.object=t.object.length>0?void 0:!1}createTypeSchema(i,u){if(i.length===0)return!1;if(i.length===1)return h8.literal(i[0]);if(u==="string")return h8.enum(i);if(u==="number"){let[t,f,...l]=i;return h8.union([h8.literal(t),h8.literal(f),...l.map((E)=>h8.literal(E))])}if(u==="boolean")return h8.union([h8.literal(!0),h8.literal(!1)]);return!1}},kkf=class{apply(i,u){let t=u;if(t.type==="string"&&t.format==="binary"&&t.contentEncoding==="binary"){let f=xkf.file();if(t.minLength!==void 0)f=f.min(t.minLength);if(t.maxLength!==void 0)f=f.max(t.maxLength);if(t.contentMediaType!==void 0)f=f.mime(t.contentMediaType);i.file=f,i.string=!1}}},jkf=class{apply(i,u){let t=u;if(u.type===void 0&&(t.minLength!==void 0||t.maxLength!==void 0||t.pattern!==void 0)){if(i.string===void 0)i.string=fg.string()}}},Xkf=class{apply(i,u){let t=u;if(t.minLength===void 0)return;if(i.string!==!1){let f=i.string||fg.string();if(f instanceof fg.ZodString)i.string=f.refine((l)=>{return Array.from(l).length>=t.minLength},{message:`String must be at least ${t.minLength} characters long`})}}},Jkf=class{apply(i,u){let t=u;if(t.maxLength===void 0)return;if(i.string!==!1){let f=i.string||fg.string();if(f instanceof fg.ZodString)i.string=f.refine((l)=>{return Array.from(l).length<=t.maxLength},{message:`String must be at most ${t.maxLength} characters long`})}}},Kkf=class{apply(i,u){let t=u;if(!t.pattern)return;if(i.string!==!1){let f=i.string||fg.string();if(f instanceof fg.ZodString){let l=new RegExp(t.pattern);i.string=f.regex(l)}}}},Ykf=class{apply(i,u){let t=u;if(t.minimum===void 0)return;if(i.number!==!1){let f=i.number||v8.number();if(f instanceof v8.ZodNumber)i.number=f.min(t.minimum)}}},Wkf=class{apply(i,u){let t=u;if(t.maximum===void 0)return;if(i.number!==!1){let f=i.number||v8.number();if(f instanceof v8.ZodNumber)i.number=f.max(t.maximum)}}},Skf=class{apply(i,u){let t=u;if(t.exclusiveMinimum===void 0)return;if(i.number!==!1){let f=i.number||v8.number();if(f instanceof v8.ZodNumber)if(typeof t.exclusiveMinimum==="number")i.number=f.gt(t.exclusiveMinimum);else i.number=!1}}},Lkf=class{apply(i,u){let t=u;if(t.exclusiveMaximum===void 0)return;if(i.number!==!1){let f=i.number||v8.number();if(f instanceof v8.ZodNumber)if(typeof t.exclusiveMaximum==="number")i.number=f.lt(t.exclusiveMaximum);else i.number=!1}}},Qkf=class{apply(i,u){let t=u;if(t.multipleOf===void 0)return;if(i.number!==!1){let f=i.number||v8.number();if(f instanceof v8.ZodNumber)i.number=f.refine((l)=>{if(t.multipleOf===0)return!1;let E=l/t.multipleOf,c=Math.round(E),w=Math.min(Math.abs(l)*Number.EPSILON*10,Math.abs(t.multipleOf)*Number.EPSILON*10);return Math.abs(E-c)<=w/Math.abs(t.multipleOf)},{message:`Must be a multiple of ${t.multipleOf}`})}}},Hkf=class{apply(i,u){let t=u;if(u.type===void 0&&(t.minItems!==void 0||t.maxItems!==void 0||t.items!==void 0||t.prefixItems!==void 0)){if(i.array===void 0)i.array=iE.array(iE.any())}}},zkf=class{apply(i,u){let t=u;if(t.minItems===void 0)return;if(i.array!==!1)i.array=(i.array||iE.array(iE.any())).min(t.minItems)}},Rkf=class{apply(i,u){let t=u;if(t.maxItems===void 0)return;if(i.array!==!1)i.array=(i.array||iE.array(iE.any())).max(t.maxItems)}},nkf=class{apply(i,u){let t=u;if(i.array===!1)return;if(Array.isArray(t.items))i.array=i.array||iE.array(iE.any());else if(t.items&&typeof t.items!=="boolean"&&!t.prefixItems){let f=WE(t.items),l=iE.array(f);if(i.array&&i.array instanceof iE.ZodArray){let E=i.array._def;if(E.checks)E.checks.forEach((c)=>{if(c._zod&&c._zod.def){let w=c._zod.def;if(w.check==="min_length"&&w.minimum!==void 0)l=l.min(w.minimum);else if(w.check==="max_length"&&w.maximum!==void 0)l=l.max(w.maximum)}})}i.array=l}else if(typeof t.items==="boolean"&&t.items===!1)if(!t.prefixItems)i.array=iE.array(iE.any()).max(0);else i.array=i.array||iE.array(iE.any());else if(typeof t.items==="boolean"&&t.items===!0)i.array=i.array||iE.array(iE.any());else if(t.prefixItems)i.array=i.array||iE.array(iE.any())}},bkf=class{apply(i,u){if(u.type!=="array")return;let t=u;if(!Array.isArray(t.items))return;if(i.array===!1)return;let f=t.items.map((E)=>WE(E)),l;if(f.length===0)l=zB0.tuple([]);else l=zB0.tuple(f);if(t.minItems!==void 0&&t.minItems>f.length)l=!1;if(t.maxItems!==void 0&&t.maxItems<f.length)l=!1;i.tuple=l,i.array=!1}},Ckf=class{apply(i,u){let t=u;if(i.object===!1)return;if(t.properties||t.required||t.additionalProperties!==void 0)i.object=i.object||s5i.object({}).passthrough()}},Mkf=class{apply(i,u){let t=u;if(u.type===void 0&&(t.maxProperties!==void 0||t.minProperties!==void 0)){if(i.object===void 0)i.object=s5i.object({}).passthrough()}}},qkf=class{apply(i,u){let t=u;if(t.maxProperties===void 0)return;if(i.object!==!1){let f=i.object||s5i.object({}).passthrough();i.object=f.refine((l)=>Object.keys(l).length<=t.maxProperties,{message:`Object must have at most ${t.maxProperties} properties`})}}},Vkf=class{apply(i,u){let t=u;if(t.minProperties===void 0)return;if(i.object!==!1){let f=i.object||s5i.object({}).passthrough();i.object=f.refine((l)=>Object.keys(l).length>=t.minProperties,{message:`Object must have at least ${t.minProperties} properties`})}}},mkf=class{apply(i,u){if(!u.not)return i;let t=WE(u.not);return i.refine((f)=>!o5i(t,f),{message:"Value must not match the 'not' schema"})}},ekf=class{apply(i,u){if(u.uniqueItems!==!0)return i;return i.refine(rkf(),{message:"Array items must be unique"})}},okf=class{apply(i,u){if(!u.allOf||u.allOf.length===0)return i;return u.allOf.map((f)=>WE(f)).reduce((f,l)=>akf.intersection(f,l),i)}},skf=class{apply(i,u){if(!u.anyOf||u.anyOf.length===0)return i;let t=u.anyOf.length===1?WE(u.anyOf[0]):RB0.union([WE(u.anyOf[0]),WE(u.anyOf[1]),...u.anyOf.slice(2).map((f)=>WE(f))]);return RB0.intersection(i,t)}},pkf=class{apply(i,u){if(!u.oneOf||u.oneOf.length===0)return i;let t=u.oneOf.map((f)=>WE(f));return i.refine((f)=>{let l=0;for(let E of t)if(E.safeParse(f).success){if(l++,l>1)return!1}return l===1},{message:"Value must match exactly one of the oneOf schemas"})}},ijf=class{apply(i,u){let t=u;if(t.prefixItems&&Array.isArray(t.prefixItems)){let l=t.prefixItems.map((E)=>WE(E));return i.refine((E)=>{if(!Array.isArray(E))return!0;for(let c=0;c<Math.min(E.length,l.length);c++)if(!o5i(l[c],E[c]))return!1;if(E.length>l.length){if(typeof t.items==="boolean"&&t.items===!1)return!1;else if(t.items&&typeof t.items==="object"&&!Array.isArray(t.items)){let c=WE(t.items);for(let w=l.length;w<E.length;w++)if(!o5i(c,E[w]))return!1}}return!0},{message:"Array does not match prefixItems schema"})}return i}},ujf=class{apply(i,u){let t=u;if(!t.properties&&!t.required&&t.additionalProperties!==!1)return i;if(i instanceof a5i.ZodObject||i instanceof a5i.ZodRecord){let f={};if(t.properties){for(let[l,E]of Object.entries(t.properties))if(E!==void 0)f[l]=WE(E)}if(t.required&&Array.isArray(t.required)){let l=new Set(t.required);for(let E of Object.keys(f))if(!l.has(E))f[E]=f[E].optional()}else for(let l of Object.keys(f))f[l]=f[l].optional();if(t.additionalProperties===!1)return a5i.object(f);else return a5i.object(f).passthrough()}return i.refine((f)=>{if(typeof f!=="object"||f===null||Array.isArray(f))return!0;if(t.properties){for(let[l,E]of Object.entries(t.properties))if(E!==void 0){if(Object.getOwnPropertyDescriptor(f,l)!==void 0){if(!WE(E).safeParse(f[l]).success)return!1}}}if(t.required&&Array.isArray(t.required)){for(let l of t.required)if(Object.getOwnPropertyDescriptor(f,l)===void 0)return!1}if(t.additionalProperties===!1&&t.properties){let l=new Set(Object.keys(t.properties));for(let E in f)if(!l.has(E))return!1}return!0},{message:"Object constraints validation failed"})}},tjf=class{apply(i,u){if(!u.enum||u.enum.length===0)return i;let t=u.enum.filter((f)=>Array.isArray(f)||typeof f==="object"&&f!==null);if(t.length===0)return i;return i.refine((f)=>{if(typeof f!=="object"||f===null)return!0;return t.some((l)=>Ka(f,l))},{message:"Value must match one of the enum values"})}},fjf=class{apply(i,u){if(u.const===void 0)return i;let t=u.const;if(typeof t!=="object"||t===null)return i;return i.refine((f)=>Ka(f,t),{message:"Value must equal the const value"})}},ljf=class{apply(i,u){if(u.description)i=i.describe(u.description);return i}},cjf=class{apply(i,u){var t;let f=u;if(!((t=f.required)==null?void 0:t.includes("__proto__"))||u.type!==void 0)return i;return Ejf.any().refine((l)=>this.validateRequired(l,f.required),{message:"Missing required properties"})}validateRequired(i,u){if(typeof i!=="object"||i===null||Array.isArray(i))return!0;return u.every((t)=>Object.prototype.hasOwnProperty.call(i,t))}},wjf=class{apply(i,u){var t;let f=u;if(f.contains===void 0)return i;let l=WE(f.contains),E=(t=f.minContains)!=null?t:1,c=f.maxContains;return i.refine((w)=>{if(!Array.isArray(w))return!0;let $=0;for(let h of w)if(o5i(l,h))$++;if($<E)return!1;if(c!==void 0&&$>c)return!1;return!0},{message:"Array must contain required items matching the schema"})}},$jf=class{apply(i,u){let{default:t}=u;if(t===void 0)return i;if(!i.safeParse(t).success)return i;return i.default(t)}},hjf,vjf;var nB0=O(()=>{hjf=[new Gkf,new Ikf,new Pkf,new kkf,new jkf,new Hkf,new Mkf,new Xkf,new Jkf,new Kkf,new Ykf,new Wkf,new Skf,new Lkf,new Qkf,new bkf,new zkf,new Rkf,new nkf,new qkf,new Vkf,new Ckf],vjf=[new cjf,new tjf,new fjf,new okf,new skf,new pkf,new ijf,new ujf,new wjf,new mkf,new ekf,new $jf,new ljf]});class ytu{constructor(i){this._url=i}start(){if(this._socket)throw Error("WebSocketClientTransport already started! If using Client class, note that connect() calls start() automatically.");return new Promise((i,u)=>{this._socket=new WebSocket(this._url,djf),this._socket.onerror=(t)=>{let f="error"in t?t.error:Error(`WebSocket error: ${JSON.stringify(t)}`);u(f),this.onerror?.(f)},this._socket.onopen=()=>{i()},this._socket.onclose=()=>{this.onclose?.()},this._socket.onmessage=(t)=>{let f;try{f=i$.parse(JSON.parse(t.data))}catch(l){this.onerror?.(l);return}this.onmessage?.(f)}})}async close(){this._socket?.close()}send(i){return new Promise((u,t)=>{if(!this._socket){t(Error("Not connected"));return}this._socket?.send(JSON.stringify(i)),u()})}}var djf="mcp";var bB0=O(()=>{dl()});function Djf(i){let u=i;if(!u||typeof u!=="object"||!("method"in u))return null;switch(u.method){case"initialize":{let t=u?.params?.protocolVersion;if(!t)return null;return{type:"emit",message:{result:{protocolVersion:t,capabilities:{tools:{}},serverInfo:{name:"deco-chat-server",version:"1.0.0"}},jsonrpc:u.jsonrpc??"2.0",id:u.id}}}case"notifications/roots/list_changed":case"notifications/initialized":case"notifications/cancelled":case"notifications/progress":return{type:"suppress"};default:return null}}var p5i;var Ptu=O(()=>{HQ();p5i=class p5i extends Qd{constructor(i,u){super(i,u)}send(i,u){let t=Djf(i);if(t?.type==="emit")return this.onmessage?.(t.message),Promise.resolve();if(t?.type==="suppress")return Promise.resolve();return super.send(i,u)}}});var CB0,MB0=async(i,u,t)=>{let f=_jf(i.connection,u,t);if(!f)throw Error("Unknown MCP connection type");let l=new CB0({name:i?.name??"MCP Client",version:"1.0.0"});return await l.connect(f),{client:l}},_jf=(i,u,t)=>{if(i.type==="Websocket")return new ytu(new URL(i.url));if(i.type!=="SSE"&&i.type!=="HTTP")return null;let l={...i.token?{authorization:`Bearer ${i.token}`}:{},...t??{},..."headers"in i?i.headers||{}:{}};if(i.type==="SSE"){let E={requestInit:{headers:l,signal:u}};if(i.token)E.eventSourceInit={fetch:(c,w)=>{return fetch(c,{...w,headers:{...l,Accept:"text/event-stream"},signal:u})}};return new N2(new URL(i.url),E)}return new p5i(new URL(i.url),{requestInit:{headers:l,signal:u,credentials:"include"}})};var qB0=O(()=>{Ld();Dr();bB0();dl();h3();Ptu();CB0=class CB0 extends rl{constructor(i,u){super(i,{jsonSchemaValidator:K1,...u})}async listTools(i,u){return await this.request({method:"tools/list",params:i},aq,u)}}});function mB0(i){let u=(t)=>{if("connection"in i)return MB0({connection:i.connection},void 0,t);return i.client};return new Proxy({},{get(t,f){if(f==="toJSON")return null;if(typeof f!=="string")throw Error("Name must be a string");if(f==="listTools")return w;async function l($,h=f){let v=i?.debugId?.(),d=v?{"x-trace-debug-id":v}:void 0,{client:D}=await u(d),{structuredContent:_,isError:N,content:Z}=await D.callTool({name:String(h),arguments:$});if(N){let F=Z?.[0]?.text,g=typeof F==="string"?VB0(F):null,T=g?.code&&typeof i?.getErrorByStatusCode==="function"?i.getErrorByStatusCode(g.code,g.message,g.traceId):null;if(T)throw T;throw Error(`Tool ${String(h)} returned an error: ${JSON.stringify(_??Z)}`)}if(_!==void 0)return _;let B=Z?.[0]?.text;return typeof B==="string"?VB0(B):void 0}async function E(){let{client:$}=await u(),{tools:h}=await $.listTools();return h}async function c(){if(!("connection"in i))return E();let $=i.connection,h=JSON.stringify($);try{if(!ihi.has(h))ihi.set(h,E());return await ihi.get(h)}catch(v){console.error("Failed to list tools",v),ihi.delete(h);return}}async function w(){return(await c()??[]).map((h)=>rB0(h,l))}return l.asTool=async()=>{let h=(await c()??[]).find((v)=>v.name===f);if(!h)throw Error(`Tool ${f} not found`);return rB0(h,l)},l}})}var VB0=(i)=>{try{return JSON.parse(i)}catch{return i}},ihi,rB0=(i,u)=>{return{...i,id:i.name,inputSchema:i.inputSchema?WE(i.inputSchema):void 0,outputSchema:i.outputSchema?WE(i.outputSchema):void 0,execute:(t)=>{return u(t.context,i.name)}}};var eB0=O(()=>{nB0();qB0();ihi=new Map});function lg(i){return mB0(i)}var Qz;var Gtu=O(()=>{eB0();Qz=new Proxy({},{get(i,u){if(u==="toJSON")return null;if(u==="forConnection")return(t)=>lg({connection:t});return global[u]}})});function uhi(i){return{isImplementedBy:(u)=>{for(let t of i){let f=typeof t.name==="string"?new RegExp(`^${t.name}$`):t.name,l=u.find((E)=>f.test(E.name));if(!l&&t.opt)continue;if(!l)return!1}return!0}}}var d8=(i)=>{return{...uhi(i),forClient:(u)=>{return lg({client:u})},forConnection:(u)=>{return lg({connection:u})}}};var Eg=O(()=>{Gtu()});import{z as m1}from"zod";var aB0,thi,oB0,fhi,sB0,Njf;var pB0=O(()=>{Eg();aB0=m1.object({specversion:m1.literal("1.0").describe("CloudEvents specification version"),id:m1.string().describe("Unique identifier for this event (UUID recommended)"),source:m1.string().describe("Connection ID of the event publisher"),type:m1.string().describe("Event type (e.g., 'order.created', 'user.signup')"),time:m1.string().datetime().optional().describe("Timestamp of when the event occurred (ISO 8601)"),subject:m1.string().optional().describe("Subject/resource identifier (e.g., order ID, user ID)"),datacontenttype:m1.string().optional().default("application/json").describe("Content type of the data attribute"),dataschema:m1.string().url().optional().describe("URI to the schema for the data attribute"),data:m1.unknown().optional().describe("Event payload (any JSON value)")}),thi=m1.object({events:m1.array(aB0).min(1).describe("Batch of CloudEvents to process")}),oB0=m1.object({success:m1.boolean().optional().describe("Whether this event was processed successfully"),error:m1.string().optional().describe("Error message for this event"),retryAfter:m1.number().int().positive().optional().describe("Re-deliver this event after this many ms")}),fhi=m1.object({success:m1.boolean().optional().describe("Batch success - applies to events not in results"),error:m1.string().optional().describe("Batch error message - applies to events not in results"),processedCount:m1.number().int().min(0).optional().describe("Number of events successfully processed"),retryAfter:m1.number().int().positive().optional().describe("Batch retryAfter - applies to events not in results"),results:m1.record(m1.string(),oB0).optional().describe("Per-event results keyed by event ID")}),sB0=[{name:"ON_EVENTS",inputSchema:thi,outputSchema:fhi}],Njf=d8(sB0)});import{z as e1}from"zod";var iF0,uF0,tF0,fF0,lF0,EF0,lhi,Itu;var xtu=O(()=>{Eg();iF0=e1.object({type:e1.literal("string"),enum:e1.array(e1.string()).optional(),description:e1.string().optional()}),uF0=e1.object({type:e1.string(),description:e1.string(),paramsSchema:e1.record(e1.string(),iF0)}),tF0=e1.object({}),fF0=e1.object({triggers:e1.array(uF0)}),lF0=e1.object({type:e1.string(),params:e1.record(e1.string(),e1.string()),enabled:e1.boolean(),callbackUrl:e1.url().optional(),callbackToken:e1.string().min(1).optional()}),EF0=e1.object({success:e1.boolean()}),lhi=[{name:"TRIGGER_LIST",inputSchema:tF0,outputSchema:fF0},{name:"TRIGGER_CONFIGURE",inputSchema:lF0,outputSchema:EF0}],Itu=d8(lhi)});import{z as J4}from"zod";var cF0,wF0,$F0,Ya,Ehi,chi,whi,$hi,Ojf;var ktu=O(()=>{Eg();cF0=J4.object({primary:J4.string().optional().describe("Primary brand color (hex)"),secondary:J4.string().optional().describe("Secondary brand color (hex)"),accent:J4.string().optional().describe("Accent / highlight color (hex)"),background:J4.string().optional().describe("Background color (hex)"),foreground:J4.string().optional().describe("Foreground / text color (hex)")}),wF0=J4.object({heading:J4.string().optional().describe("Font family for headings"),body:J4.string().optional().describe("Font family for body text"),code:J4.string().optional().describe("Font family for code / monospace")}),$F0=J4.object({logo:J4.string().optional().describe("Logo URL"),favicon:J4.string().optional().describe("Favicon URL"),ogImage:J4.string().optional().describe("Open Graph image URL")}),Ya=J4.object({id:J4.string(),name:J4.string().describe("Brand / company name"),domain:J4.string().optional().describe("Company domain (e.g. example.com)"),colors:cF0.optional().describe("Semantic color palette"),fonts:wF0.optional().describe("Font families by role"),assets:$F0.optional().describe("Visual identity assets"),overview:J4.string().optional().describe("Company overview / description"),tagline:J4.string().optional().describe("Brand tagline"),tone:J4.string().optional().describe("Tone of voice description"),metadata:J4.record(J4.string(),J4.unknown()).optional().describe("Extra design tokens and metadata")}),Ehi=J4.object({id:J4.string().optional().describe("Brand ID. Omit to get the default brand.")}),chi=J4.object({}),whi=J4.object({items:J4.array(Ya)}),$hi=[{name:"BRAND_GET",inputSchema:Ehi,outputSchema:Ya},{name:"BRAND_LIST",inputSchema:chi,outputSchema:whi,opt:!0}],Ojf=d8($hi)});var jtu=O(()=>{Eg();pB0();xtu();tV();ktu()});import{z as It}from"zod";function Y2(i){return It.object({items:It.array(i).describe("Array of collection items"),totalCount:It.number().int().min(0).optional().describe("Total number of matching items (if available)"),hasMore:It.boolean().optional().describe("Whether there are more items available")})}function Sa(i){return It.object({item:i.nullable().describe("The retrieved item, or null if not found")})}function Fjf(i){return It.object({data:i.partial().describe("Data for the new entity (id may be auto-generated)")})}function gjf(i){return It.object({item:i.describe("The created entity with generated id")})}function Tjf(i){return It.object({id:It.string().describe("ID of the entity to update"),data:i.partial().describe("Partial entity data to update")})}function Ujf(i){return It.object({item:i.describe("The updated entity")})}function Qa(i){return It.object({item:i.describe("The deleted entity")})}function vhi(i,u,t){let f=i.toUpperCase(),l=t?.readOnly??!1,E=[{name:`COLLECTION_${f}_LIST`,inputSchema:gv,outputSchema:Y2(u)},{name:`COLLECTION_${f}_GET`,inputSchema:Wa,outputSchema:Sa(u)}];if(!l)E.push({name:`COLLECTION_${f}_CREATE`,inputSchema:Fjf(u),outputSchema:gjf(u),opt:!0},{name:`COLLECTION_${f}_UPDATE`,inputSchema:Tjf(u),outputSchema:Ujf(u),opt:!0},{name:`COLLECTION_${f}_DELETE`,inputSchema:La,outputSchema:Qa(u),opt:!0});return E}var hhi,Zjf,hF0,Bjf,gv,Wa,La;var L5=O(()=>{hhi=It.object({id:It.string().describe("Unique identifier for the entity"),title:It.string().describe("Human-readable title for the entity"),description:It.string().nullish().describe("Description of the entity"),created_at:It.string().datetime(),updated_at:It.string().datetime(),created_by:It.string().optional(),updated_by:It.string().optional()}),Zjf=It.object({field:It.array(It.string()),operator:It.enum(["eq","gt","gte","lt","lte","in","like","contains"]),value:It.unknown()}),hF0=It.lazy(()=>It.union([Zjf,It.object({operator:It.enum(["and","or","not"]),conditions:It.array(hF0)})])),Bjf=It.object({field:It.array(It.string()),direction:It.enum(["asc","desc"]),nulls:It.enum(["first","last"]).optional()}),gv=It.object({where:hF0.optional().describe("Filter expression"),orderBy:It.array(Bjf).optional().describe("Sort expressions"),limit:It.number().int().min(1).max(1000).optional().describe("Maximum number of items to return"),offset:It.number().int().min(0).optional().describe("Number of items to skip")});Wa=It.object({id:It.string().describe("ID of the entity to retrieve")});La=It.object({id:It.string().describe("ID of the entity to delete")})});import{z as Hz}from"zod";var Ajf,yjf,vF0;var dF0=O(()=>{L5();Ajf=hhi.extend({avatar:Hz.string().describe("URL or data URI to the assistant's avatar image"),system_prompt:Hz.string().describe("System prompt that defines the assistant's behavior"),virtual_mcp_id:Hz.string().describe("Virtual MCP ID to use for this assistant"),model:Hz.object({id:Hz.string().describe("Model ID"),connectionId:Hz.string().describe("Connection ID that provides the model")}).describe("Selected model reference for this assistant")}),yjf=vhi("assistant",Ajf),vF0=[...yjf]});import{z as xi}from"zod";var Ha,W2,_F0,Pjf,Gjf,NF0,Ijf,xjf,kjf,jjf,Xjf,Jjf,OF0,Kjf,Yjf,Wjf,Sjf,Ljf,Qjf,Hjf,zjf,Rjf,njf,Pa1,bjf,Ga1,DF0,Cjf,Mjf,dhi,Ia1;var ZF0=O(()=>{Eg();L5();Ha=xi.lazy(()=>xi.union([xi.null(),xi.string(),xi.number(),xi.boolean(),xi.record(xi.string(),Ha),xi.array(Ha)])),W2=xi.record(xi.string(),xi.record(xi.string(),Ha)).optional().describe("Additional provider-specific options. Outer record keyed by provider name, inner by option key"),_F0=xi.object({type:xi.literal("text"),text:xi.string().describe("The text content"),providerOptions:W2}),Pjf=xi.object({type:xi.literal("text"),text:xi.string().describe("The text content"),providerMetadata:xi.any().optional().describe("Additional provider-specific metadata")}),Gjf=xi.string().describe("File data as URL string"),NF0=xi.object({type:xi.literal("file"),filename:xi.string().optional().describe("Optional filename of the file"),data:Gjf,mediaType:xi.string().describe("IANA media type of the file (e.g., image/png, audio/mp3)"),providerOptions:W2}),Ijf=xi.object({type:xi.literal("file"),mediaType:xi.string().describe("IANA media type of the file (e.g., image/png, audio/mp3)"),data:xi.string().describe("Generated file data as base64 encoded string")}),xjf=xi.object({type:xi.literal("reasoning"),text:xi.string().describe("The reasoning text"),providerOptions:W2}),kjf=xi.object({type:xi.literal("reasoning"),text:xi.string().describe("The reasoning text"),providerMetadata:xi.any().optional().describe("Additional provider-specific metadata")}),jjf=xi.object({type:xi.literal("tool-call"),toolCallId:xi.string().describe("ID of the tool call, used to match with tool result"),toolName:xi.string().describe("Name of the tool being called"),input:xi.string().describe("Arguments of the tool call (JSON-serializable object matching tool input schema)"),providerExecuted:xi.boolean().optional().describe("Whether the tool call will be executed by the provider"),providerOptions:W2}),Xjf=xi.object({type:xi.literal("tool-call"),toolCallId:xi.string().describe("ID of the tool call"),toolName:xi.string().describe("Name of the tool being called"),input:xi.string().describe("Stringified JSON object with the tool call arguments"),providerExecuted:xi.boolean().optional().describe("Whether the tool call will be executed by the provider"),providerMetadata:xi.any().optional().describe("Additional provider-specific metadata")}),Jjf=xi.union([xi.object({type:xi.literal("text"),value:xi.string()}),xi.object({type:xi.literal("json"),value:Ha}),xi.object({type:xi.literal("error-text"),value:xi.string()}),xi.object({type:xi.literal("error-json"),value:Ha}),xi.object({type:xi.literal("content"),value:xi.array(xi.union([xi.object({type:xi.literal("text"),text:xi.string().describe("Text content")}),xi.object({type:xi.literal("media"),data:xi.string().describe("Base-64 encoded media data"),mediaType:xi.string().describe("IANA media type")})]))}),xi.object({type:xi.literal("execution-denied"),reason:xi.string().optional()}),xi.string().describe("Raw or JSON-serialized output (e.g. from AI SDK mapToolResultOutput)")]),OF0=xi.object({type:xi.literal("tool-result"),toolCallId:xi.string().describe("ID of the tool call that this result is associated with"),toolName:xi.string().describe("Name of the tool that generated this result"),output:Jjf.describe("Result of the tool call"),result:xi.unknown().describe("Unknown result of the tool call"),providerOptions:W2}),Kjf=xi.object({type:xi.literal("tool-result"),toolCallId:xi.string().describe("ID of the tool call that this result is associated with"),toolName:xi.string().describe("Name of the tool that generated this result"),result:xi.any().describe("Result of the tool call (JSON-serializable)"),isError:xi.boolean().optional().describe("Whether the result is an error or error message"),providerExecuted:xi.boolean().optional().describe("Whether the tool result was generated by the provider"),providerMetadata:xi.any().optional().describe("Additional provider-specific metadata")}),Yjf=xi.union([xi.object({type:xi.literal("source"),sourceType:xi.literal("url"),id:xi.string().describe("The ID of the source"),url:xi.string().describe("The URL of the source"),title:xi.string().optional().describe("The title of the source"),providerMetadata:xi.any().optional().describe("Additional provider-specific metadata")}),xi.object({type:xi.literal("source"),sourceType:xi.literal("document"),id:xi.string().describe("The ID of the source"),mediaType:xi.string().describe("IANA media type of the document (e.g., application/pdf)"),title:xi.string().describe("The title of the document"),filename:xi.string().optional().describe("Optional filename of the document"),providerMetadata:xi.any().optional().describe("Additional provider-specific metadata")})]),Wjf=xi.object({role:xi.literal("system"),content:xi.string().describe("System message content"),providerOptions:W2}),Sjf=xi.object({role:xi.literal("user"),content:xi.array(xi.union([_F0,NF0])).describe("User message content parts (text or file)"),providerOptions:W2}),Ljf=xi.object({role:xi.literal("assistant"),content:xi.array(xi.union([_F0,NF0,xjf,jjf,OF0])).describe("Assistant message content parts (text, file, reasoning, tool-call, or tool-result)"),providerOptions:W2}),Qjf=xi.object({role:xi.literal("tool"),content:xi.array(OF0).describe("Tool message content (tool results)"),providerOptions:W2}),Hjf=xi.union([Wjf,Sjf,Ljf,Qjf]),zjf=xi.array(Hjf).describe("A list of messages forming the prompt"),Rjf=xi.object({prompt:zjf.describe("A language model prompt is a standardized prompt type (array of messages with roles: system, user, assistant, tool)"),maxOutputTokens:xi.number().optional().describe("Maximum number of tokens to generate"),temperature:xi.number().optional().describe("Temperature setting. The range depends on the provider and model"),topP:xi.number().optional().describe("Nucleus sampling parameter"),topK:xi.number().optional().describe("Only sample from the top K options for each subsequent token. Used to remove long tail low probability responses"),presencePenalty:xi.number().optional().describe("Presence penalty setting. It affects the likelihood of the model to repeat information that is already in the prompt"),frequencyPenalty:xi.number().optional().describe("Frequency penalty setting. It affects the likelihood of the model to repeatedly use the same words or phrases"),seed:xi.number().optional().describe("The seed (integer) to use for random sampling. If set and supported by the model, calls will generate deterministic results"),stopSequences:xi.array(xi.string()).optional().describe("Stop sequences. If set, the model will stop generating text when one of the stop sequences is generated"),responseFormat:xi.union([xi.object({type:xi.literal("text")}),xi.object({type:xi.literal("json"),schema:xi.any().optional().describe("JSON schema that the generated output should conform to"),name:xi.string().optional().describe("Name of output that should be generated"),description:xi.string().optional().describe("Description of the output that should be generated")})]).optional().describe("Response format. The output can either be text or JSON. Default is text"),tools:xi.array(xi.any()).optional().describe("The tools that are available for the model"),toolChoice:xi.any().optional().describe("Specifies how the tool should be selected. Defaults to 'auto'"),includeRawChunks:xi.boolean().optional().describe("Include raw chunks in the stream. Only applicable for streaming calls"),abortSignal:xi.any().optional().describe("Abort signal for cancelling the operation"),providerOptions:xi.any().optional().describe("Additional provider-specific options")}),njf=xi.object({content:xi.array(xi.union([Pjf,Ijf,kjf,Xjf,Kjf,Yjf])).describe("Ordered content that the model has generated (text, tool-calls, reasoning, files, sources)"),finishReason:xi.enum(["stop","length","content-filter","tool-calls","error","other","unknown"]).describe("Reason why generation stopped"),usage:xi.looseObject({inputTokens:xi.number().optional(),outputTokens:xi.number().optional(),totalTokens:xi.number().optional(),reasoningTokens:xi.number().optional()}).describe("Usage information for the language model call"),providerMetadata:xi.any().optional().describe("Additional provider-specific metadata"),request:xi.object({body:xi.any().optional().describe("Request HTTP body sent to the provider API")}).optional().describe("Optional request information for telemetry and debugging"),response:xi.object({id:xi.string().optional().describe("ID for the generated response"),timestamp:xi.iso.datetime().optional().describe("Timestamp for the start of the generated response"),modelId:xi.string().optional().describe("The ID of the response model that was used"),headers:xi.record(xi.string(),xi.string()).optional().describe("Response headers"),body:xi.any().optional().describe("Response HTTP body")}).optional().describe("Optional response information for telemetry and debugging"),warnings:xi.array(xi.any()).describe("Warnings for the call, e.g. unsupported settings")}),Pa1=xi.object({stream:xi.any().describe("ReadableStream of LanguageModelV2StreamPart"),request:xi.object({body:xi.any().optional().describe("Request HTTP body sent to the provider API")}).optional().describe("Optional request information for telemetry and debugging"),response:xi.object({headers:xi.record(xi.string(),xi.string()).optional().describe("Response headers")}).optional().describe("Optional response data")}),bjf=xi.object({supportedUrls:xi.record(xi.string(),xi.array(xi.string())).describe("Supported URL patterns by media type for the provider")}),Ga1=xi.object({modelId:xi.string().describe("The ID of the model"),logo:xi.string().nullable(),description:xi.string().nullable(),capabilities:xi.array(xi.string()),limits:xi.object({contextWindow:xi.number(),maxOutputTokens:xi.number()}).nullable(),costs:xi.object({input:xi.number(),output:xi.number()}).nullable(),provider:xi.enum(["openai","anthropic","google","x-ai","deepseek","openai-compatible","openrouter"]).nullable()}),DF0=xi.object({modelId:xi.string().describe("The ID of the model"),callOptions:Rjf}),Cjf=hhi.extend({logo:xi.string().nullable(),description:xi.string().nullable(),capabilities:xi.array(xi.string()),limits:xi.object({contextWindow:xi.number(),maxOutputTokens:xi.number()}).nullable(),costs:xi.object({input:xi.number(),output:xi.number()}).nullable(),provider:xi.enum(["openai","anthropic","google","xai","deepseek","openai-compatible","openrouter"]).nullable()}),Mjf=vhi("llm",Cjf,{readOnly:!0}),dhi=[{name:"LLM_METADATA",inputSchema:xi.object({modelId:xi.string().describe("The ID of the model")}),outputSchema:bjf},{name:"LLM_DO_STREAM",inputSchema:DF0},{name:"LLM_DO_GENERATE",inputSchema:DF0,outputSchema:njf},...Mjf],Ia1=d8(dhi)});import{z as cg}from"zod";var qjf,BF0;var FF0=O(()=>{qjf=cg.object({scopes:cg.array(cg.string()).describe("List of scopes available"),stateSchema:cg.record(cg.string(),cg.unknown()).describe("JSON Schema (draft-07) defining the state structure")}),BF0=[{name:"MCP_CONFIGURATION",inputSchema:cg.object({}),outputSchema:qjf}]});import{z as a1}from"zod";var Vjf,rjf,gF0;var TF0=O(()=>{Vjf=a1.object({}).strict(),rjf=a1.object({billing:a1.object({mode:a1.enum(["prepaid","postpaid"]),limitPeriod:a1.enum(["daily","weekly","monthly"]).nullable()}),limit:a1.object({total:a1.number().nullable(),remaining:a1.number().nullable(),reset:a1.string().nullable()}),usage:a1.object({total:a1.number(),daily:a1.number(),weekly:a1.number(),monthly:a1.number()}),alert:a1.object({enabled:a1.boolean(),threshold_usd:a1.number(),email:a1.string().nullable()}),connectionId:a1.string()}),gF0=[{name:"GATEWAY_USAGE",inputSchema:Vjf,outputSchema:rjf},{name:"GATEWAY_SET_LIMIT",inputSchema:a1.object({}),outputSchema:a1.object({}),opt:!0},{name:"GATEWAY_SET_ALERT",inputSchema:a1.object({}),outputSchema:a1.object({}),opt:!0}]});function UF0(i,u){return i||u===0}function AF0(i,u,t,f,l){let E=u?l+1:l,c=u?i.slice(0,t):i,w=f+t<E;return{items:c,totalCount:E,hasMore:w}}function mjf(i,u){if(u.length===0)return;let[t,...f]=u,l=t==="slug"?i9(i):i[t];for(let E of f){if(l===null||typeof l!=="object")return;l=l[E]}return l}function ejf(i){let t=i.replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/%/g,".*").replace(/_/g,".");return new RegExp(`^${t}$`,"i")}function ajf(i,u,t){if(i===void 0)return!0;switch(u){case"eq":return t===null?i===null:i===t;case"gt":return i>t;case"gte":return i>=t;case"lt":return i<t;case"lte":return i<=t;case"in":return Array.isArray(t)&&t.includes(i);case"like":return typeof i==="string"&&ejf(String(t)).test(i);case"contains":return String(i).toLowerCase().includes(String(t).toLowerCase());default:return!0}}function za(i,u){if(!u)return!0;if("conditions"in u){let{operator:f,conditions:l}=u;if(l.length===0)return!0;switch(f){case"and":return l.every((E)=>za(i,E));case"or":return l.some((E)=>za(i,E));case"not":return!l.every((E)=>za(i,E));default:return!0}}let t=mjf(i,u.field);return ajf(t,u.operator,u.value)}var yF0=O(()=>{vci()});async function PF0(i,u,t){if(i.length===0)return;let f=0;async function l(){while(f<i.length){let E=f++;await t(i[E])}}await Promise.all(Array.from({length:Math.min(u,i.length)},()=>l()))}import{z as FN}from"zod";var ojf=8,sjf,pjf,iXf,uXf,Xtu;var GF0=O(()=>{jtu();dF0();L5();ZF0();FF0();tV();TF0();Rt();fu();Ml();E$();BN();rL();Jd();vci();yF0();sjf=[{name:/^(COLLECTION_REGISTRY_APP_LIST|REGISTRY_ITEM_LIST)$/,inputSchema:FN.object({})}],pjf={LLM:dhi,LLMS:dhi,ASSISTANTS:vF0,MCP:BF0,OBJECT_STORAGE:AB,AI_GATEWAY_BILLING:gF0,TRIGGER:lhi,REGISTRY:sjf,BRAND:$hi},iXf=gv.extend({binding:FN.union([FN.array(FN.object({}).passthrough()),FN.object({}).passthrough(),FN.string()]).optional(),include_virtual:FN.boolean().optional().describe("Whether to include VIRTUAL connections in the results. Defaults to false."),slug:FN.string().optional().describe("Filter by connection slug. Matches against app_name, or a slug derived from connection_url or title.")}),uXf=Y2($c),Xtu=p({name:"COLLECTION_CONNECTIONS_LIST",description:"List all connections in the organization with filtering, sorting, and pagination",annotations:{title:"List Connections",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:iXf,outputSchema:uXf,handler:async(i,u)=>{await u.access.check();let t=Oi(u),f=i.binding?typeof i.binding==="string"?(()=>{let d=pjf[i.binding.toUpperCase()];if(!d)throw Error(`Unknown binding: ${i.binding}`);return d})():i.binding:void 0,l=f?uhi(f):void 0,E=!!l,c=i.limit??100,w=i.offset??0,{items:$,totalCount:h}=await u.storage.connections.list(t.id,{includeVirtual:i.include_virtual??!1,slug:i.slug,where:i.where,orderBy:i.orderBy,limit:E?void 0:c,offset:E?void 0:w});if(l){let d=Dl(),D=t4.SELF(t.id);await PF0($,ojf,async(_)=>{if(_.tools!==null)return;let N=_.id===D?async()=>{let{listManagementTools:B}=await Promise.resolve().then(() => (wg(),Dhi));return B(u)}:()=>Ttu(_,u,x10),Z=await B9("tools",_.id,N,d,(B)=>u.pendingRevalidations.push(B),Z9);if(Z!==null)_.tools=Z})}let v=!1;if(Rh()&&UF0(E,w)){let d=wl(),D=t4.DEV_ASSETS(t.id);if(!$.some((_)=>_.id===D)){let _=VL(t.id,d),N=!i.slug||i9(_)===i.slug,Z=za(_,i.where);if(N&&Z)$.unshift(_),v=!0}}if(E){let d=(await Promise.all($.map(async(Z)=>{if(!Z.tools||Z.tools.length===0)return null;return l.isImplementedBy(Z.tools.map((F)=>({name:F.name,inputSchema:F.inputSchema,outputSchema:F.outputSchema})))?Z:null}))).filter((Z)=>Z!==null),D=d.length,_=d.slice(w,w+c),N=w+c<D;return{items:_,totalCount:D,hasMore:N}}return AF0($,v,c,w,h)}})});var tXf,Jtu;var IF0=O(()=>{L5();Rt();fu();Ml();E$();BN();rL();Jd();tXf=Sa($c),Jtu=p({name:"COLLECTION_CONNECTIONS_GET",description:"Get a connection's configuration, tools list, and status by ID.",annotations:{title:"Get Connection",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},_meta:{ui:{visibility:["app"]}},inputSchema:Wa,outputSchema:tXf,handler:async(i,u)=>{let t=Oi(u);if(await u.access.check(),Rh()&&DEi(i.id,t.id))return{item:VL(t.id,wl())};let f=await u.storage.connections.findById(i.id);if(!f||f.organization_id!==t.id)return{item:null};if(f.tools===null){let l=t4.SELF(t.id),E=f.id===l?async()=>{let{listManagementTools:w}=await Promise.resolve().then(() => (wg(),Dhi));return w(u)}:async()=>{let w=await F6(f,u,!0);try{return(await w.listTools()).tools}finally{await w.close().catch(()=>{})}},c=await B9("tools",f.id,E,Dl(),(w)=>u.pendingRevalidations.push(w),Z9);if(c!==null)f.tools=c}return{item:f}}})});import{z as Ktu}from"zod";function EXf(i,u){return i.length===u.length&&i.every((t,f)=>t===u[f])}var fXf,lXf,Ytu;var xF0=O(()=>{BN();Fv();fu();R0();E$();bm();Utu();Or();Jd();fXf=Ktu.object({id:Ktu.string().describe("ID of the connection to update"),data:o6i.describe("Partial connection data to update")}),lXf=Ktu.object({item:$c.describe("The updated connection entity")});Ytu=p({name:"COLLECTION_CONNECTIONS_UPDATE",description:"Update a connection's configuration. Re-fetches tools from the server on URL change.",annotations:{title:"Update Connection",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:fXf,outputSchema:lXf,handler:async(i,u)=>{gi(u);let t=Oi(u);await u.access.check();let f=Qu(u);if(!f)throw Error("User ID required to update connection");let{id:l,data:E}=i,c=E.configuration_state!==void 0||E.configuration_scopes!==void 0,w=await u.storage.connections.findById(l);if(!w||w.organization_id!==t.id)throw Error("Connection not found in organization");let $=E.connection_type??w.connection_type,h=E.connection_url??w.connection_url;if($==="VIRTUAL"){let K=nL(h);if(!K)throw Error("VIRTUAL connection requires connection_url in format: virtual://$virtual_mcp_id");let L=await u.storage.virtualMcps.findById(K);if(!L)throw Error(`Virtual MCP not found: ${K}`);if(L.organization_id!==t.id)throw Error("Virtual MCP does not belong to the current organization");h=bL(K)}let v=E.configuration_state??w.configuration_state??{},d=E.configuration_scopes??w.configuration_scopes??[];if(c){if(E.configuration_state!==void 0)v=E.configuration_state??{};else if(v===null||v===void 0)v={};if(E.configuration_scopes!==void 0)d=E.configuration_scopes??[];if(d.length>0){let K=v;ja(K,d,t.id),await Ja(K,d,t.id,u)}}if($==="STDIO"&&!vu().localMode)throw Error("STDIO connections are only available in local mode (--local-mode).");let D=E.connection_token??w.connection_token;if(!D)try{let L=await new r1(u.db,u.vault).get(l);if(L?.accessToken)D=L.accessToken}catch{}let _=await D9({id:w.id,title:E.title??w.title,connection_type:$,connection_url:h,connection_token:D,connection_headers:E.connection_headers??w.connection_headers}).catch(()=>null),N=_?.tools?.length?_.tools:null,Z=!1;if(E.configuration_scopes===void 0&&_?.scopes?.length)Z=!EXf(d,_.scopes),d=_.scopes;if(ja(v,d,t.id),Z&&d.length>0)await Ja(v,d,t.id,u);let B=c||Z,F=B?Xa(v,d):[],g=B?Xa(w.configuration_state??{},w.configuration_scopes??[]):[],T=w.configuration_state,U=T==null||Object.keys(T).length===0,A,G,k=async()=>{try{await u.storage.connectionCredentialVault.replaceGrantsForSubject({organizationId:t.id,subjectConnectionId:l,createdBy:f,grants:g})}catch(K){console.error("Failed to restore credential grants after credential vault mutation failed",K)}},I={...E,connection_url:h,tools:null,configuration_state:v,configuration_scopes:d,updated_by:f},j={...w,...I};if(B)try{if(await u.storage.connectionCredentialVault.replaceGrantsForSubject({organizationId:t.id,subjectConnectionId:l,createdBy:f,grants:F}),F.length>0){if(!await u.storage.connectionCredentialVault.findActiveWorkloadToken({organizationId:t.id,subjectConnectionId:l})){let{plaintextToken:L,record:r}=await u.storage.connectionCredentialVault.createOrRotateWorkloadToken({organizationId:t.id,subjectConnectionId:l});G=r.id,A={baseUrl:u.baseUrl,org:t.slug??t.id,subjectConnectionId:l,token:L}}}}catch(K){if(G)await u.storage.connectionCredentialVault.revokeWorkloadToken({organizationId:t.id,subjectConnectionId:l,tokenId:G});throw await k(),K}if(B&&v&&d)try{await(await F6(j,u,!1)).callTool({name:"ON_MCP_CONFIGURATION",arguments:{state:v,scopes:d,firstRun:U,...A?{vault:A}:{}}})}catch(K){if(console.error("Failed to invoke ON_MCP_CONFIGURATION callback",K),G)throw await u.storage.connectionCredentialVault.revokeWorkloadToken({organizationId:t.id,subjectConnectionId:l,tokenId:G}),await k(),K}let C;try{C=await u.storage.connections.update(l,I)}catch(K){if(B){if(G)await u.storage.connectionCredentialVault.revokeWorkloadToken({organizationId:t.id,subjectConnectionId:l,tokenId:G});await k()}throw K}if(N)Dl()?.set("tools",l,N).catch(()=>{});return rH(l),{item:C}}})});import{z as cXf}from"zod";var wXf,Wtu;var kF0=O(()=>{L5();H4();fu();E$();bm();Jd();wXf=La.extend({force:cXf.boolean().optional().describe("If true, removes this connection from all agents that reference it before deleting")}),Wtu=p({name:"COLLECTION_CONNECTIONS_DELETE",description:"Permanently delete a connection. Set force=true to auto-remove from referencing Virtual MCPs.",annotations:{title:"Delete Connection",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:wXf,outputSchema:Qa($c),handler:async(i,u)=>{gi(u);let t=Oi(u);await u.access.check();let f=await u.storage.connections.findById(i.id);if(!f)throw Error(`Connection not found: ${i.id}`);if(f.organization_id!==t.id)throw Error("Connection not found in organization");if(f.metadata?.isFixed===!0)throw Error("This connection is a fixed system connection and cannot be deleted");let E=await u.storage.virtualMcps.listByConnectionId(t.id,i.id);if(E.length>0)if(i.force)await u.storage.virtualMcps.removeConnectionReferences(i.id);else throw Error(JSON.stringify({code:"CONNECTION_IN_USE",agentNames:E.map(($)=>$.title)}));await u.storage.connections.delete(i.id);let c=await u.storage.organizationSettings.get(t.id);if(c?.registry_config){let{registries:$,blockedMcps:h}=c.registry_config;if(i.id in $){let{[i.id]:v,...d}=$;await u.storage.organizationSettings.upsert(t.id,{registry_config:{registries:d,blockedMcps:h}})}}Dl()?.invalidate(i.id).catch(()=>{}),rH(i.id);let w=Qu(u);if(w)mu.capture({distinctId:w,event:"connection_deleted",groups:{organization:t.id},properties:{connection_id:f.id,connection_type:f.connection_type,app_name:f.app_name??null,organization_id:t.id,forced:i.force??!1}});return{item:f}}})});import{z as zz}from"zod";var Stu;var jF0=O(()=>{fu();Stu=p({name:"CONNECTION_TEST",description:"Test connection health and latency",annotations:{title:"Test Connection",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},inputSchema:zz.object({id:zz.string()}),outputSchema:zz.object({id:zz.string(),healthy:zz.boolean(),latencyMs:zz.number()}),handler:async(i,u)=>{let t=Oi(u);await u.access.check();let f=await u.storage.connections.findById(i.id);if(!f||f.organization_id!==t.id)throw Error("Connection not found");let l=await u.storage.connections.testConnection(i.id);return{id:i.id,...l}}})});var XF0=O(()=>{QB0();GF0();IF0();xF0();kF0();jF0()});import{sql as rf}from"kysely";import{z as D8}from"zod";function JF0(i){if(i===null||i===void 0)return"NULL";if(typeof i==="number")return String(i);if(typeof i==="boolean")return i?"TRUE":"FALSE";if(typeof i==="string")return`'${i.replace(/'/g,"''")}'`;if(i instanceof Date)return`'${i.toISOString()}'`;return`'${JSON.stringify(i).replace(/'/g,"''")}'`}function vXf(i,u){let t=i;for(let l=u.length;l>=1;l--){let E=`$${l}`;if(t.includes(E))t=t.replaceAll(E,JF0(u[l-1]))}let f=[];for(let l=0;l<t.length;l++)if(t[l]==="?")f.push(l);for(let l=Math.min(f.length,u.length)-1;l>=0;l--){let E=f[l],c=JF0(u[l]);t=t.slice(0,E)+c+t.slice(E+1)}return t}function KF0(i){return i.replace(/-/g,"_")}function DXf(i){return`app_${KF0(i)}`}function _Xf(i){return`app_role_${KF0(i)}`}function NXf(i){if(i instanceof Error){let u=i.message.toLowerCase(),t=i.code;return t==="3F000"||t==="42704"||t==="22023"||u.includes("schema")&&u.includes("does not exist")||u.includes("role")&&u.includes("does not exist")}return!1}async function OXf(i,u,t){if(await rf`CREATE SCHEMA IF NOT EXISTS ${rf.id(u)}`.execute(i),!(await rf`
|
|
85226
|
+
`);return new C5i({connections:[i],superUser:t,mcpListCache:Dl()??void 0,listTimeoutMs:f?.listTimeoutMs,instructions:E},u)}var Lz=O(()=>{Rt();E$();ZN();UB0();kB0()});var sZ0={};Gi(sZ0,{clientFromConnection:()=>F6});async function F6(i,u,t=!1){if(i.connection_type==="VIRTUAL")return XB0(i,u,t);return _B0(i,u,t)}var Mm=O(()=>{NB0();Lz()});async function Ttu(i,u,t){let f=new AbortController,l,E=new Promise((w,$)=>{l=setTimeout(()=>{f.abort(),$(new KB0(i.id,t))},t)}),c=(async()=>{let w=await F6(i,u,!0);try{return(await w.listTools(void 0,{timeout:t,signal:f.signal})).tools}finally{await w.close().catch(()=>{})}})();c.catch(()=>{});try{return await Promise.race([c,E])}finally{if(l)clearTimeout(l)}}var KB0;var YB0=O(()=>{Mm();KB0=class KB0 extends Error{constructor(i,u){super(`listTools timed out after ${u}ms for connection ${i}`);this.name="ListToolsTimeoutError"}}});function r5i(i){return(u)=>{if(u instanceof Ku&&u.code===Ru.MethodNotFound)return i;throw u}}var WB0=O(()=>{dl()});function m5i(i,u,t){let f=q9(i,u,t,Dl()??void 0),l=MB(f,{name:"studio-mcp-server",version:"1.0.0"},{capabilities:Tkf,toolCallTimeoutMs:cQ});l.server.setRequestHandler(z_,async()=>{return await f.listResources().catch(r5i({resources:[]}))}),l.server.setRequestHandler(R_,async()=>{return await f.listResourceTemplates().catch(r5i({resourceTemplates:[]}))}),l.server.setRequestHandler(n_,async()=>{return await f.listPrompts().catch(r5i({prompts:[]}))});let E=l.close.bind(l);return l.close=async()=>{await E(),await f.close().catch(()=>{})},l}var Tkf;var SB0=O(()=>{h3();dl();Cm();E$();WB0();Tkf={tools:{},resources:{},prompts:{}}});var BN=O(()=>{Mm();YB0();SB0()});function ja(i,u,t){if(u.some((f)=>f!=="*"&&f.startsWith("SELF::"))&&i.SELF===void 0)i.SELF={value:`${t}_self`}}function Xa(i,u){let t=new Map;for(let f of u){if(f==="*")continue;let[l,E]=b3i(f);if(!Ukf.has(E))continue;let c=Ar(l,i);if(typeof c!=="object"||c===null||!("value"in c))continue;let w=c.value;if(typeof w!=="string")continue;t.set(`${w}:${E}`,{targetConnectionId:w,scope:E})}return[...t.values()]}async function Ja(i,u,t,f){for(let E of u){if(E==="*")continue;let[c]=b3i(E),w=Ar(c,i);if(w===void 0||w===null)throw Error(`Scope references key "${c}" but it's not present in state`)}let l=C50(i,u);for(let E of l){if(E.endsWith("_self"))continue;let c=await f.storage.connections.findById(E);if(!c||c.organization_id!==t)throw Error(`Referenced connection not found: ${E}`);try{await f.access.check(E)}catch(w){throw Error(`Access denied to referenced connection: ${E}. ${w.message}`)}}}var Ukf;var Utu=O(()=>{Xoi();q3i();Ukf=new Set([C3i,M3i])});import{z as LB0}from"zod";var Akf,ykf,Atu;var QB0=O(()=>{H4();fu();R0();E$();BN();Utu();Or();Jd();Akf=LB0.object({data:a6i.describe("Data for the new connection (id is auto-generated if not provided)")}),ykf=LB0.object({item:$c.describe("The created connection entity")}),Atu=p({name:"COLLECTION_CONNECTIONS_CREATE",description:"Create a new MCP connection. Auto-fetches and caches the server's tool list.",annotations:{title:"Create Connection",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!1},inputSchema:Akf,outputSchema:ykf,handler:async(i,u)=>{gi(u);let t=Oi(u);await u.access.check();let f=Qu(u);if(!f)throw Error("User ID required to create connection");let l={...i.data,organization_id:t.id,created_by:f};if(l.id){if((await u.storage.connections.findById(l.id))?.organization_id===t.id)throw Error("Connection already exists in organization")}if(l.connection_type==="VIRTUAL"){let d=nL(l.connection_url);if(!d)throw Error("VIRTUAL connection requires connection_url in format: virtual://$virtual_mcp_id");let D=await u.storage.virtualMcps.findById(d);if(!D)throw Error(`Virtual MCP not found: ${d}`);if(D.organization_id!==t.id)throw Error("Virtual MCP does not belong to the current organization");l.connection_url=bL(d)}if(l.connection_type==="STDIO"&&!vu().localMode)throw Error("STDIO connections are only available in local mode (--local-mode).");let E=await D9({id:`pending-${Date.now()}`,title:l.title,connection_type:l.connection_type,connection_url:l.connection_url,connection_token:l.connection_token,connection_headers:l.connection_headers}).catch(()=>null),c=E?.tools?.length?E.tools:null,w=E?.scopes?.length?E.scopes:l.configuration_scopes??null,$=l.configuration_state??null;if($&&w?.length)ja($,w,t.id),await Ja($,w,t.id,u);let h=await u.storage.connections.createNew({...l,tools:null,configuration_state:$,configuration_scopes:w}),v=$&&w?.length?Xa($,w):[];if(v.length>0){let d;try{await u.storage.connectionCredentialVault.replaceGrantsForSubject({organizationId:t.id,subjectConnectionId:h.id,createdBy:f,grants:v});let{plaintextToken:D,record:_}=await u.storage.connectionCredentialVault.createOrRotateWorkloadToken({organizationId:t.id,subjectConnectionId:h.id});d=_.id,await(await F6(h,u,!1)).callTool({name:"ON_MCP_CONFIGURATION",arguments:{state:$,scopes:w,firstRun:!0,vault:{baseUrl:u.baseUrl,org:t.slug??t.id,subjectConnectionId:h.id,token:D}}})}catch(D){if(d)await u.storage.connectionCredentialVault.revokeWorkloadToken({organizationId:t.id,subjectConnectionId:h.id,tokenId:d});throw await u.storage.connections.delete(h.id),D}}if(c)Dl()?.set("tools",h.id,c).catch(()=>{});return mu.capture({distinctId:f,event:"connection_created",groups:{organization:t.id},properties:{connection_id:h.id,connection_type:h.connection_type,app_name:h.app_name??null,organization_id:t.id,tools_count:c?.length??0}}),{item:h}}})});import{z as S5}from"zod/v4";import{z as HB0}from"zod/v4";import{z as e5i}from"zod/v4";import{z as h8}from"zod/v4";import{z as xkf}from"zod/v4";import{z as fg}from"zod/v4";import{z as v8}from"zod/v4";import{z as iE}from"zod/v4";import{z as zB0}from"zod/v4";import{z as s5i}from"zod/v4";import{z as akf}from"zod/v4";import{z as RB0}from"zod/v4";import{z as a5i}from"zod/v4";import{z as Ejf}from"zod/v4";function Ka(i,u){if(i===u)return!0;if(i==null||u==null)return i===u;if(typeof i!==typeof u)return!1;if(Array.isArray(i)&&Array.isArray(u)){if(i.length!==u.length)return!1;return i.every((t,f)=>Ka(t,u[f]))}if(typeof i==="object"&&typeof u==="object"){let t=Object.keys(i),f=Object.keys(u);if(t.length!==f.length)return!1;return t.every((l)=>f.includes(l)&&Ka(i[l],u[l]))}return!1}function rkf(){return(i)=>{if(!Array.isArray(i))return!0;let u=[];return i.every((t)=>{if(u.some((l)=>Ka(t,l)))return!1;return u.push(t),!0})}}function o5i(i,u){return i.safeParse(u).success}function WE(i){if(typeof i==="boolean")return i?S5.any():S5.never();let u={};for(let l of hjf)l.apply(u,i);let t=[];if(u.string!==!1)t.push(u.string||S5.string());if(u.number!==!1)t.push(u.number||S5.number());if(u.boolean!==!1)t.push(u.boolean||S5.boolean());if(u.null!==!1)t.push(u.null||S5.null());if(u.array!==!1)t.push(u.array||S5.array(S5.any()));if(u.tuple!==!1&&u.tuple!==void 0)t.push(u.tuple);if(u.object!==!1)if(u.object)t.push(u.object);else{let l=S5.custom((E)=>{return typeof E==="object"&&E!==null&&!Array.isArray(E)},"Must be an object, not an array");t.push(l)}if(u.file!==!1&&u.file!==void 0)t.push(u.file);let f;if(t.length===0)f=S5.never();else if(t.length===1)f=t[0];else if(!Object.keys(i).some((E)=>E!=="$schema"&&E!=="title"&&E!=="description"))f=S5.any();else f=S5.union(t);for(let l of vjf)f=l.apply(f,i);return f}var Pkf=class{apply(i,u){if(!u.type)return;let t=Array.isArray(u.type)?u.type:[u.type],f=new Set(t);if(!f.has("string"))i.string=!1;if(!f.has("number")&&!f.has("integer"))i.number=!1;if(!f.has("boolean"))i.boolean=!1;if(!f.has("null"))i.null=!1;if(!f.has("array"))i.array=!1;if(!f.has("object"))i.object=!1;if(f.has("integer")&&i.number!==!1){let l=i.number||HB0.number();if(l instanceof HB0.ZodNumber)i.number=l.int()}}},Gkf=class{apply(i,u){if(u.const===void 0)return;let t=u.const;if(i.string=!1,i.number=!1,i.boolean=!1,i.null=!1,i.array=!1,i.object=!1,typeof t==="string")i.string=e5i.literal(t);else if(typeof t==="number")i.number=e5i.literal(t);else if(typeof t==="boolean")i.boolean=e5i.literal(t);else if(t===null)i.null=e5i.null();else if(Array.isArray(t))i.array=void 0;else if(typeof t==="object")i.object=void 0}},Ikf=class{apply(i,u){if(!u.enum)return;if(u.enum.length===0){if(!u.type)i.string=!1,i.number=!1,i.boolean=!1,i.null=!1,i.array=!1,i.object=!1;return}let t={string:u.enum.filter((f)=>typeof f==="string"),number:u.enum.filter((f)=>typeof f==="number"),boolean:u.enum.filter((f)=>typeof f==="boolean"),null:u.enum.filter((f)=>f===null),array:u.enum.filter((f)=>Array.isArray(f)),object:u.enum.filter((f)=>typeof f==="object"&&f!==null&&!Array.isArray(f))};i.string=this.createTypeSchema(t.string,"string"),i.number=this.createTypeSchema(t.number,"number"),i.boolean=this.createTypeSchema(t.boolean,"boolean"),i.null=t.null.length>0?h8.null():!1,i.array=t.array.length>0?void 0:!1,i.object=t.object.length>0?void 0:!1}createTypeSchema(i,u){if(i.length===0)return!1;if(i.length===1)return h8.literal(i[0]);if(u==="string")return h8.enum(i);if(u==="number"){let[t,f,...l]=i;return h8.union([h8.literal(t),h8.literal(f),...l.map((E)=>h8.literal(E))])}if(u==="boolean")return h8.union([h8.literal(!0),h8.literal(!1)]);return!1}},kkf=class{apply(i,u){let t=u;if(t.type==="string"&&t.format==="binary"&&t.contentEncoding==="binary"){let f=xkf.file();if(t.minLength!==void 0)f=f.min(t.minLength);if(t.maxLength!==void 0)f=f.max(t.maxLength);if(t.contentMediaType!==void 0)f=f.mime(t.contentMediaType);i.file=f,i.string=!1}}},jkf=class{apply(i,u){let t=u;if(u.type===void 0&&(t.minLength!==void 0||t.maxLength!==void 0||t.pattern!==void 0)){if(i.string===void 0)i.string=fg.string()}}},Xkf=class{apply(i,u){let t=u;if(t.minLength===void 0)return;if(i.string!==!1){let f=i.string||fg.string();if(f instanceof fg.ZodString)i.string=f.refine((l)=>{return Array.from(l).length>=t.minLength},{message:`String must be at least ${t.minLength} characters long`})}}},Jkf=class{apply(i,u){let t=u;if(t.maxLength===void 0)return;if(i.string!==!1){let f=i.string||fg.string();if(f instanceof fg.ZodString)i.string=f.refine((l)=>{return Array.from(l).length<=t.maxLength},{message:`String must be at most ${t.maxLength} characters long`})}}},Kkf=class{apply(i,u){let t=u;if(!t.pattern)return;if(i.string!==!1){let f=i.string||fg.string();if(f instanceof fg.ZodString){let l=new RegExp(t.pattern);i.string=f.regex(l)}}}},Ykf=class{apply(i,u){let t=u;if(t.minimum===void 0)return;if(i.number!==!1){let f=i.number||v8.number();if(f instanceof v8.ZodNumber)i.number=f.min(t.minimum)}}},Wkf=class{apply(i,u){let t=u;if(t.maximum===void 0)return;if(i.number!==!1){let f=i.number||v8.number();if(f instanceof v8.ZodNumber)i.number=f.max(t.maximum)}}},Skf=class{apply(i,u){let t=u;if(t.exclusiveMinimum===void 0)return;if(i.number!==!1){let f=i.number||v8.number();if(f instanceof v8.ZodNumber)if(typeof t.exclusiveMinimum==="number")i.number=f.gt(t.exclusiveMinimum);else i.number=!1}}},Lkf=class{apply(i,u){let t=u;if(t.exclusiveMaximum===void 0)return;if(i.number!==!1){let f=i.number||v8.number();if(f instanceof v8.ZodNumber)if(typeof t.exclusiveMaximum==="number")i.number=f.lt(t.exclusiveMaximum);else i.number=!1}}},Qkf=class{apply(i,u){let t=u;if(t.multipleOf===void 0)return;if(i.number!==!1){let f=i.number||v8.number();if(f instanceof v8.ZodNumber)i.number=f.refine((l)=>{if(t.multipleOf===0)return!1;let E=l/t.multipleOf,c=Math.round(E),w=Math.min(Math.abs(l)*Number.EPSILON*10,Math.abs(t.multipleOf)*Number.EPSILON*10);return Math.abs(E-c)<=w/Math.abs(t.multipleOf)},{message:`Must be a multiple of ${t.multipleOf}`})}}},Hkf=class{apply(i,u){let t=u;if(u.type===void 0&&(t.minItems!==void 0||t.maxItems!==void 0||t.items!==void 0||t.prefixItems!==void 0)){if(i.array===void 0)i.array=iE.array(iE.any())}}},zkf=class{apply(i,u){let t=u;if(t.minItems===void 0)return;if(i.array!==!1)i.array=(i.array||iE.array(iE.any())).min(t.minItems)}},Rkf=class{apply(i,u){let t=u;if(t.maxItems===void 0)return;if(i.array!==!1)i.array=(i.array||iE.array(iE.any())).max(t.maxItems)}},nkf=class{apply(i,u){let t=u;if(i.array===!1)return;if(Array.isArray(t.items))i.array=i.array||iE.array(iE.any());else if(t.items&&typeof t.items!=="boolean"&&!t.prefixItems){let f=WE(t.items),l=iE.array(f);if(i.array&&i.array instanceof iE.ZodArray){let E=i.array._def;if(E.checks)E.checks.forEach((c)=>{if(c._zod&&c._zod.def){let w=c._zod.def;if(w.check==="min_length"&&w.minimum!==void 0)l=l.min(w.minimum);else if(w.check==="max_length"&&w.maximum!==void 0)l=l.max(w.maximum)}})}i.array=l}else if(typeof t.items==="boolean"&&t.items===!1)if(!t.prefixItems)i.array=iE.array(iE.any()).max(0);else i.array=i.array||iE.array(iE.any());else if(typeof t.items==="boolean"&&t.items===!0)i.array=i.array||iE.array(iE.any());else if(t.prefixItems)i.array=i.array||iE.array(iE.any())}},bkf=class{apply(i,u){if(u.type!=="array")return;let t=u;if(!Array.isArray(t.items))return;if(i.array===!1)return;let f=t.items.map((E)=>WE(E)),l;if(f.length===0)l=zB0.tuple([]);else l=zB0.tuple(f);if(t.minItems!==void 0&&t.minItems>f.length)l=!1;if(t.maxItems!==void 0&&t.maxItems<f.length)l=!1;i.tuple=l,i.array=!1}},Ckf=class{apply(i,u){let t=u;if(i.object===!1)return;if(t.properties||t.required||t.additionalProperties!==void 0)i.object=i.object||s5i.object({}).passthrough()}},Mkf=class{apply(i,u){let t=u;if(u.type===void 0&&(t.maxProperties!==void 0||t.minProperties!==void 0)){if(i.object===void 0)i.object=s5i.object({}).passthrough()}}},qkf=class{apply(i,u){let t=u;if(t.maxProperties===void 0)return;if(i.object!==!1){let f=i.object||s5i.object({}).passthrough();i.object=f.refine((l)=>Object.keys(l).length<=t.maxProperties,{message:`Object must have at most ${t.maxProperties} properties`})}}},Vkf=class{apply(i,u){let t=u;if(t.minProperties===void 0)return;if(i.object!==!1){let f=i.object||s5i.object({}).passthrough();i.object=f.refine((l)=>Object.keys(l).length>=t.minProperties,{message:`Object must have at least ${t.minProperties} properties`})}}},mkf=class{apply(i,u){if(!u.not)return i;let t=WE(u.not);return i.refine((f)=>!o5i(t,f),{message:"Value must not match the 'not' schema"})}},ekf=class{apply(i,u){if(u.uniqueItems!==!0)return i;return i.refine(rkf(),{message:"Array items must be unique"})}},okf=class{apply(i,u){if(!u.allOf||u.allOf.length===0)return i;return u.allOf.map((f)=>WE(f)).reduce((f,l)=>akf.intersection(f,l),i)}},skf=class{apply(i,u){if(!u.anyOf||u.anyOf.length===0)return i;let t=u.anyOf.length===1?WE(u.anyOf[0]):RB0.union([WE(u.anyOf[0]),WE(u.anyOf[1]),...u.anyOf.slice(2).map((f)=>WE(f))]);return RB0.intersection(i,t)}},pkf=class{apply(i,u){if(!u.oneOf||u.oneOf.length===0)return i;let t=u.oneOf.map((f)=>WE(f));return i.refine((f)=>{let l=0;for(let E of t)if(E.safeParse(f).success){if(l++,l>1)return!1}return l===1},{message:"Value must match exactly one of the oneOf schemas"})}},ijf=class{apply(i,u){let t=u;if(t.prefixItems&&Array.isArray(t.prefixItems)){let l=t.prefixItems.map((E)=>WE(E));return i.refine((E)=>{if(!Array.isArray(E))return!0;for(let c=0;c<Math.min(E.length,l.length);c++)if(!o5i(l[c],E[c]))return!1;if(E.length>l.length){if(typeof t.items==="boolean"&&t.items===!1)return!1;else if(t.items&&typeof t.items==="object"&&!Array.isArray(t.items)){let c=WE(t.items);for(let w=l.length;w<E.length;w++)if(!o5i(c,E[w]))return!1}}return!0},{message:"Array does not match prefixItems schema"})}return i}},ujf=class{apply(i,u){let t=u;if(!t.properties&&!t.required&&t.additionalProperties!==!1)return i;if(i instanceof a5i.ZodObject||i instanceof a5i.ZodRecord){let f={};if(t.properties){for(let[l,E]of Object.entries(t.properties))if(E!==void 0)f[l]=WE(E)}if(t.required&&Array.isArray(t.required)){let l=new Set(t.required);for(let E of Object.keys(f))if(!l.has(E))f[E]=f[E].optional()}else for(let l of Object.keys(f))f[l]=f[l].optional();if(t.additionalProperties===!1)return a5i.object(f);else return a5i.object(f).passthrough()}return i.refine((f)=>{if(typeof f!=="object"||f===null||Array.isArray(f))return!0;if(t.properties){for(let[l,E]of Object.entries(t.properties))if(E!==void 0){if(Object.getOwnPropertyDescriptor(f,l)!==void 0){if(!WE(E).safeParse(f[l]).success)return!1}}}if(t.required&&Array.isArray(t.required)){for(let l of t.required)if(Object.getOwnPropertyDescriptor(f,l)===void 0)return!1}if(t.additionalProperties===!1&&t.properties){let l=new Set(Object.keys(t.properties));for(let E in f)if(!l.has(E))return!1}return!0},{message:"Object constraints validation failed"})}},tjf=class{apply(i,u){if(!u.enum||u.enum.length===0)return i;let t=u.enum.filter((f)=>Array.isArray(f)||typeof f==="object"&&f!==null);if(t.length===0)return i;return i.refine((f)=>{if(typeof f!=="object"||f===null)return!0;return t.some((l)=>Ka(f,l))},{message:"Value must match one of the enum values"})}},fjf=class{apply(i,u){if(u.const===void 0)return i;let t=u.const;if(typeof t!=="object"||t===null)return i;return i.refine((f)=>Ka(f,t),{message:"Value must equal the const value"})}},ljf=class{apply(i,u){if(u.description)i=i.describe(u.description);return i}},cjf=class{apply(i,u){var t;let f=u;if(!((t=f.required)==null?void 0:t.includes("__proto__"))||u.type!==void 0)return i;return Ejf.any().refine((l)=>this.validateRequired(l,f.required),{message:"Missing required properties"})}validateRequired(i,u){if(typeof i!=="object"||i===null||Array.isArray(i))return!0;return u.every((t)=>Object.prototype.hasOwnProperty.call(i,t))}},wjf=class{apply(i,u){var t;let f=u;if(f.contains===void 0)return i;let l=WE(f.contains),E=(t=f.minContains)!=null?t:1,c=f.maxContains;return i.refine((w)=>{if(!Array.isArray(w))return!0;let $=0;for(let h of w)if(o5i(l,h))$++;if($<E)return!1;if(c!==void 0&&$>c)return!1;return!0},{message:"Array must contain required items matching the schema"})}},$jf=class{apply(i,u){let{default:t}=u;if(t===void 0)return i;if(!i.safeParse(t).success)return i;return i.default(t)}},hjf,vjf;var nB0=O(()=>{hjf=[new Gkf,new Ikf,new Pkf,new kkf,new jkf,new Hkf,new Mkf,new Xkf,new Jkf,new Kkf,new Ykf,new Wkf,new Skf,new Lkf,new Qkf,new bkf,new zkf,new Rkf,new nkf,new qkf,new Vkf,new Ckf],vjf=[new cjf,new tjf,new fjf,new okf,new skf,new pkf,new ijf,new ujf,new wjf,new mkf,new ekf,new $jf,new ljf]});class ytu{constructor(i){this._url=i}start(){if(this._socket)throw Error("WebSocketClientTransport already started! If using Client class, note that connect() calls start() automatically.");return new Promise((i,u)=>{this._socket=new WebSocket(this._url,djf),this._socket.onerror=(t)=>{let f="error"in t?t.error:Error(`WebSocket error: ${JSON.stringify(t)}`);u(f),this.onerror?.(f)},this._socket.onopen=()=>{i()},this._socket.onclose=()=>{this.onclose?.()},this._socket.onmessage=(t)=>{let f;try{f=i$.parse(JSON.parse(t.data))}catch(l){this.onerror?.(l);return}this.onmessage?.(f)}})}async close(){this._socket?.close()}send(i){return new Promise((u,t)=>{if(!this._socket){t(Error("Not connected"));return}this._socket?.send(JSON.stringify(i)),u()})}}var djf="mcp";var bB0=O(()=>{dl()});function Djf(i){let u=i;if(!u||typeof u!=="object"||!("method"in u))return null;switch(u.method){case"initialize":{let t=u?.params?.protocolVersion;if(!t)return null;return{type:"emit",message:{result:{protocolVersion:t,capabilities:{tools:{}},serverInfo:{name:"deco-chat-server",version:"1.0.0"}},jsonrpc:u.jsonrpc??"2.0",id:u.id}}}case"notifications/roots/list_changed":case"notifications/initialized":case"notifications/cancelled":case"notifications/progress":return{type:"suppress"};default:return null}}var p5i;var Ptu=O(()=>{HQ();p5i=class p5i extends Qd{constructor(i,u){super(i,u)}send(i,u){let t=Djf(i);if(t?.type==="emit")return this.onmessage?.(t.message),Promise.resolve();if(t?.type==="suppress")return Promise.resolve();return super.send(i,u)}}});var CB0,MB0=async(i,u,t)=>{let f=_jf(i.connection,u,t);if(!f)throw Error("Unknown MCP connection type");let l=new CB0({name:i?.name??"MCP Client",version:"1.0.0"});return await l.connect(f),{client:l}},_jf=(i,u,t)=>{if(i.type==="Websocket")return new ytu(new URL(i.url));if(i.type!=="SSE"&&i.type!=="HTTP")return null;let l={...i.token?{authorization:`Bearer ${i.token}`}:{},...t??{},..."headers"in i?i.headers||{}:{}};if(i.type==="SSE"){let E={requestInit:{headers:l,signal:u}};if(i.token)E.eventSourceInit={fetch:(c,w)=>{return fetch(c,{...w,headers:{...l,Accept:"text/event-stream"},signal:u})}};return new N2(new URL(i.url),E)}return new p5i(new URL(i.url),{requestInit:{headers:l,signal:u,credentials:"include"}})};var qB0=O(()=>{Ld();Dr();bB0();dl();h3();Ptu();CB0=class CB0 extends rl{constructor(i,u){super(i,{jsonSchemaValidator:K1,...u})}async listTools(i,u){return await this.request({method:"tools/list",params:i},aq,u)}}});function mB0(i){let u=(t)=>{if("connection"in i)return MB0({connection:i.connection},void 0,t);return i.client};return new Proxy({},{get(t,f){if(f==="toJSON")return null;if(typeof f!=="string")throw Error("Name must be a string");if(f==="listTools")return w;async function l($,h=f){let v=i?.debugId?.(),d=v?{"x-trace-debug-id":v}:void 0,{client:D}=await u(d),{structuredContent:_,isError:N,content:Z}=await D.callTool({name:String(h),arguments:$});if(N){let F=Z?.[0]?.text,g=typeof F==="string"?VB0(F):null,T=g?.code&&typeof i?.getErrorByStatusCode==="function"?i.getErrorByStatusCode(g.code,g.message,g.traceId):null;if(T)throw T;throw Error(`Tool ${String(h)} returned an error: ${JSON.stringify(_??Z)}`)}if(_!==void 0)return _;let B=Z?.[0]?.text;return typeof B==="string"?VB0(B):void 0}async function E(){let{client:$}=await u(),{tools:h}=await $.listTools();return h}async function c(){if(!("connection"in i))return E();let $=i.connection,h=JSON.stringify($);try{if(!ihi.has(h))ihi.set(h,E());return await ihi.get(h)}catch(v){console.error("Failed to list tools",v),ihi.delete(h);return}}async function w(){return(await c()??[]).map((h)=>rB0(h,l))}return l.asTool=async()=>{let h=(await c()??[]).find((v)=>v.name===f);if(!h)throw Error(`Tool ${f} not found`);return rB0(h,l)},l}})}var VB0=(i)=>{try{return JSON.parse(i)}catch{return i}},ihi,rB0=(i,u)=>{return{...i,id:i.name,inputSchema:i.inputSchema?WE(i.inputSchema):void 0,outputSchema:i.outputSchema?WE(i.outputSchema):void 0,execute:(t)=>{return u(t.context,i.name)}}};var eB0=O(()=>{nB0();qB0();ihi=new Map});function lg(i){return mB0(i)}var Qz;var Gtu=O(()=>{eB0();Qz=new Proxy({},{get(i,u){if(u==="toJSON")return null;if(u==="forConnection")return(t)=>lg({connection:t});return globalThis[u]}})});function uhi(i){return{isImplementedBy:(u)=>{for(let t of i){let f=typeof t.name==="string"?new RegExp(`^${t.name}$`):t.name,l=u.find((E)=>f.test(E.name));if(!l&&t.opt)continue;if(!l)return!1}return!0}}}var d8=(i)=>{return{...uhi(i),forClient:(u)=>{return lg({client:u})},forConnection:(u)=>{return lg({connection:u})}}};var Eg=O(()=>{Gtu()});import{z as m1}from"zod";var aB0,thi,oB0,fhi,sB0,Njf;var pB0=O(()=>{Eg();aB0=m1.object({specversion:m1.literal("1.0").describe("CloudEvents specification version"),id:m1.string().describe("Unique identifier for this event (UUID recommended)"),source:m1.string().describe("Connection ID of the event publisher"),type:m1.string().describe("Event type (e.g., 'order.created', 'user.signup')"),time:m1.string().datetime().optional().describe("Timestamp of when the event occurred (ISO 8601)"),subject:m1.string().optional().describe("Subject/resource identifier (e.g., order ID, user ID)"),datacontenttype:m1.string().optional().default("application/json").describe("Content type of the data attribute"),dataschema:m1.string().url().optional().describe("URI to the schema for the data attribute"),data:m1.unknown().optional().describe("Event payload (any JSON value)")}),thi=m1.object({events:m1.array(aB0).min(1).describe("Batch of CloudEvents to process")}),oB0=m1.object({success:m1.boolean().optional().describe("Whether this event was processed successfully"),error:m1.string().optional().describe("Error message for this event"),retryAfter:m1.number().int().positive().optional().describe("Re-deliver this event after this many ms")}),fhi=m1.object({success:m1.boolean().optional().describe("Batch success - applies to events not in results"),error:m1.string().optional().describe("Batch error message - applies to events not in results"),processedCount:m1.number().int().min(0).optional().describe("Number of events successfully processed"),retryAfter:m1.number().int().positive().optional().describe("Batch retryAfter - applies to events not in results"),results:m1.record(m1.string(),oB0).optional().describe("Per-event results keyed by event ID")}),sB0=[{name:"ON_EVENTS",inputSchema:thi,outputSchema:fhi}],Njf=d8(sB0)});import{z as e1}from"zod";var iF0,uF0,tF0,fF0,lF0,EF0,lhi,Itu;var xtu=O(()=>{Eg();iF0=e1.object({type:e1.literal("string"),enum:e1.array(e1.string()).optional(),description:e1.string().optional()}),uF0=e1.object({type:e1.string(),description:e1.string(),paramsSchema:e1.record(e1.string(),iF0)}),tF0=e1.object({}),fF0=e1.object({triggers:e1.array(uF0)}),lF0=e1.object({type:e1.string(),params:e1.record(e1.string(),e1.string()),enabled:e1.boolean(),callbackUrl:e1.url().optional(),callbackToken:e1.string().min(1).optional()}),EF0=e1.object({success:e1.boolean()}),lhi=[{name:"TRIGGER_LIST",inputSchema:tF0,outputSchema:fF0},{name:"TRIGGER_CONFIGURE",inputSchema:lF0,outputSchema:EF0}],Itu=d8(lhi)});import{z as J4}from"zod";var cF0,wF0,$F0,Ya,Ehi,chi,whi,$hi,Ojf;var ktu=O(()=>{Eg();cF0=J4.object({primary:J4.string().optional().describe("Primary brand color (hex)"),secondary:J4.string().optional().describe("Secondary brand color (hex)"),accent:J4.string().optional().describe("Accent / highlight color (hex)"),background:J4.string().optional().describe("Background color (hex)"),foreground:J4.string().optional().describe("Foreground / text color (hex)")}),wF0=J4.object({heading:J4.string().optional().describe("Font family for headings"),body:J4.string().optional().describe("Font family for body text"),code:J4.string().optional().describe("Font family for code / monospace")}),$F0=J4.object({logo:J4.string().optional().describe("Logo URL"),favicon:J4.string().optional().describe("Favicon URL"),ogImage:J4.string().optional().describe("Open Graph image URL")}),Ya=J4.object({id:J4.string(),name:J4.string().describe("Brand / company name"),domain:J4.string().optional().describe("Company domain (e.g. example.com)"),colors:cF0.optional().describe("Semantic color palette"),fonts:wF0.optional().describe("Font families by role"),assets:$F0.optional().describe("Visual identity assets"),overview:J4.string().optional().describe("Company overview / description"),tagline:J4.string().optional().describe("Brand tagline"),tone:J4.string().optional().describe("Tone of voice description"),metadata:J4.record(J4.string(),J4.unknown()).optional().describe("Extra design tokens and metadata")}),Ehi=J4.object({id:J4.string().optional().describe("Brand ID. Omit to get the default brand.")}),chi=J4.object({}),whi=J4.object({items:J4.array(Ya)}),$hi=[{name:"BRAND_GET",inputSchema:Ehi,outputSchema:Ya},{name:"BRAND_LIST",inputSchema:chi,outputSchema:whi,opt:!0}],Ojf=d8($hi)});var jtu=O(()=>{Eg();pB0();xtu();tV();ktu()});import{z as It}from"zod";function Y2(i){return It.object({items:It.array(i).describe("Array of collection items"),totalCount:It.number().int().min(0).optional().describe("Total number of matching items (if available)"),hasMore:It.boolean().optional().describe("Whether there are more items available")})}function Sa(i){return It.object({item:i.nullable().describe("The retrieved item, or null if not found")})}function Fjf(i){return It.object({data:i.partial().describe("Data for the new entity (id may be auto-generated)")})}function gjf(i){return It.object({item:i.describe("The created entity with generated id")})}function Tjf(i){return It.object({id:It.string().describe("ID of the entity to update"),data:i.partial().describe("Partial entity data to update")})}function Ujf(i){return It.object({item:i.describe("The updated entity")})}function Qa(i){return It.object({item:i.describe("The deleted entity")})}function vhi(i,u,t){let f=i.toUpperCase(),l=t?.readOnly??!1,E=[{name:`COLLECTION_${f}_LIST`,inputSchema:gv,outputSchema:Y2(u)},{name:`COLLECTION_${f}_GET`,inputSchema:Wa,outputSchema:Sa(u)}];if(!l)E.push({name:`COLLECTION_${f}_CREATE`,inputSchema:Fjf(u),outputSchema:gjf(u),opt:!0},{name:`COLLECTION_${f}_UPDATE`,inputSchema:Tjf(u),outputSchema:Ujf(u),opt:!0},{name:`COLLECTION_${f}_DELETE`,inputSchema:La,outputSchema:Qa(u),opt:!0});return E}var hhi,Zjf,hF0,Bjf,gv,Wa,La;var L5=O(()=>{hhi=It.object({id:It.string().describe("Unique identifier for the entity"),title:It.string().describe("Human-readable title for the entity"),description:It.string().nullish().describe("Description of the entity"),created_at:It.string().datetime(),updated_at:It.string().datetime(),created_by:It.string().optional(),updated_by:It.string().optional()}),Zjf=It.object({field:It.array(It.string()),operator:It.enum(["eq","gt","gte","lt","lte","in","like","contains"]),value:It.unknown()}),hF0=It.lazy(()=>It.union([Zjf,It.object({operator:It.enum(["and","or","not"]),conditions:It.array(hF0)})])),Bjf=It.object({field:It.array(It.string()),direction:It.enum(["asc","desc"]),nulls:It.enum(["first","last"]).optional()}),gv=It.object({where:hF0.optional().describe("Filter expression"),orderBy:It.array(Bjf).optional().describe("Sort expressions"),limit:It.number().int().min(1).max(1000).optional().describe("Maximum number of items to return"),offset:It.number().int().min(0).optional().describe("Number of items to skip")});Wa=It.object({id:It.string().describe("ID of the entity to retrieve")});La=It.object({id:It.string().describe("ID of the entity to delete")})});import{z as Hz}from"zod";var Ajf,yjf,vF0;var dF0=O(()=>{L5();Ajf=hhi.extend({avatar:Hz.string().describe("URL or data URI to the assistant's avatar image"),system_prompt:Hz.string().describe("System prompt that defines the assistant's behavior"),virtual_mcp_id:Hz.string().describe("Virtual MCP ID to use for this assistant"),model:Hz.object({id:Hz.string().describe("Model ID"),connectionId:Hz.string().describe("Connection ID that provides the model")}).describe("Selected model reference for this assistant")}),yjf=vhi("assistant",Ajf),vF0=[...yjf]});import{z as xi}from"zod";var Ha,W2,_F0,Pjf,Gjf,NF0,Ijf,xjf,kjf,jjf,Xjf,Jjf,OF0,Kjf,Yjf,Wjf,Sjf,Ljf,Qjf,Hjf,zjf,Rjf,njf,Pa1,bjf,Ga1,DF0,Cjf,Mjf,dhi,Ia1;var ZF0=O(()=>{Eg();L5();Ha=xi.lazy(()=>xi.union([xi.null(),xi.string(),xi.number(),xi.boolean(),xi.record(xi.string(),Ha),xi.array(Ha)])),W2=xi.record(xi.string(),xi.record(xi.string(),Ha)).optional().describe("Additional provider-specific options. Outer record keyed by provider name, inner by option key"),_F0=xi.object({type:xi.literal("text"),text:xi.string().describe("The text content"),providerOptions:W2}),Pjf=xi.object({type:xi.literal("text"),text:xi.string().describe("The text content"),providerMetadata:xi.any().optional().describe("Additional provider-specific metadata")}),Gjf=xi.string().describe("File data as URL string"),NF0=xi.object({type:xi.literal("file"),filename:xi.string().optional().describe("Optional filename of the file"),data:Gjf,mediaType:xi.string().describe("IANA media type of the file (e.g., image/png, audio/mp3)"),providerOptions:W2}),Ijf=xi.object({type:xi.literal("file"),mediaType:xi.string().describe("IANA media type of the file (e.g., image/png, audio/mp3)"),data:xi.string().describe("Generated file data as base64 encoded string")}),xjf=xi.object({type:xi.literal("reasoning"),text:xi.string().describe("The reasoning text"),providerOptions:W2}),kjf=xi.object({type:xi.literal("reasoning"),text:xi.string().describe("The reasoning text"),providerMetadata:xi.any().optional().describe("Additional provider-specific metadata")}),jjf=xi.object({type:xi.literal("tool-call"),toolCallId:xi.string().describe("ID of the tool call, used to match with tool result"),toolName:xi.string().describe("Name of the tool being called"),input:xi.string().describe("Arguments of the tool call (JSON-serializable object matching tool input schema)"),providerExecuted:xi.boolean().optional().describe("Whether the tool call will be executed by the provider"),providerOptions:W2}),Xjf=xi.object({type:xi.literal("tool-call"),toolCallId:xi.string().describe("ID of the tool call"),toolName:xi.string().describe("Name of the tool being called"),input:xi.string().describe("Stringified JSON object with the tool call arguments"),providerExecuted:xi.boolean().optional().describe("Whether the tool call will be executed by the provider"),providerMetadata:xi.any().optional().describe("Additional provider-specific metadata")}),Jjf=xi.union([xi.object({type:xi.literal("text"),value:xi.string()}),xi.object({type:xi.literal("json"),value:Ha}),xi.object({type:xi.literal("error-text"),value:xi.string()}),xi.object({type:xi.literal("error-json"),value:Ha}),xi.object({type:xi.literal("content"),value:xi.array(xi.union([xi.object({type:xi.literal("text"),text:xi.string().describe("Text content")}),xi.object({type:xi.literal("media"),data:xi.string().describe("Base-64 encoded media data"),mediaType:xi.string().describe("IANA media type")})]))}),xi.object({type:xi.literal("execution-denied"),reason:xi.string().optional()}),xi.string().describe("Raw or JSON-serialized output (e.g. from AI SDK mapToolResultOutput)")]),OF0=xi.object({type:xi.literal("tool-result"),toolCallId:xi.string().describe("ID of the tool call that this result is associated with"),toolName:xi.string().describe("Name of the tool that generated this result"),output:Jjf.describe("Result of the tool call"),result:xi.unknown().describe("Unknown result of the tool call"),providerOptions:W2}),Kjf=xi.object({type:xi.literal("tool-result"),toolCallId:xi.string().describe("ID of the tool call that this result is associated with"),toolName:xi.string().describe("Name of the tool that generated this result"),result:xi.any().describe("Result of the tool call (JSON-serializable)"),isError:xi.boolean().optional().describe("Whether the result is an error or error message"),providerExecuted:xi.boolean().optional().describe("Whether the tool result was generated by the provider"),providerMetadata:xi.any().optional().describe("Additional provider-specific metadata")}),Yjf=xi.union([xi.object({type:xi.literal("source"),sourceType:xi.literal("url"),id:xi.string().describe("The ID of the source"),url:xi.string().describe("The URL of the source"),title:xi.string().optional().describe("The title of the source"),providerMetadata:xi.any().optional().describe("Additional provider-specific metadata")}),xi.object({type:xi.literal("source"),sourceType:xi.literal("document"),id:xi.string().describe("The ID of the source"),mediaType:xi.string().describe("IANA media type of the document (e.g., application/pdf)"),title:xi.string().describe("The title of the document"),filename:xi.string().optional().describe("Optional filename of the document"),providerMetadata:xi.any().optional().describe("Additional provider-specific metadata")})]),Wjf=xi.object({role:xi.literal("system"),content:xi.string().describe("System message content"),providerOptions:W2}),Sjf=xi.object({role:xi.literal("user"),content:xi.array(xi.union([_F0,NF0])).describe("User message content parts (text or file)"),providerOptions:W2}),Ljf=xi.object({role:xi.literal("assistant"),content:xi.array(xi.union([_F0,NF0,xjf,jjf,OF0])).describe("Assistant message content parts (text, file, reasoning, tool-call, or tool-result)"),providerOptions:W2}),Qjf=xi.object({role:xi.literal("tool"),content:xi.array(OF0).describe("Tool message content (tool results)"),providerOptions:W2}),Hjf=xi.union([Wjf,Sjf,Ljf,Qjf]),zjf=xi.array(Hjf).describe("A list of messages forming the prompt"),Rjf=xi.object({prompt:zjf.describe("A language model prompt is a standardized prompt type (array of messages with roles: system, user, assistant, tool)"),maxOutputTokens:xi.number().optional().describe("Maximum number of tokens to generate"),temperature:xi.number().optional().describe("Temperature setting. The range depends on the provider and model"),topP:xi.number().optional().describe("Nucleus sampling parameter"),topK:xi.number().optional().describe("Only sample from the top K options for each subsequent token. Used to remove long tail low probability responses"),presencePenalty:xi.number().optional().describe("Presence penalty setting. It affects the likelihood of the model to repeat information that is already in the prompt"),frequencyPenalty:xi.number().optional().describe("Frequency penalty setting. It affects the likelihood of the model to repeatedly use the same words or phrases"),seed:xi.number().optional().describe("The seed (integer) to use for random sampling. If set and supported by the model, calls will generate deterministic results"),stopSequences:xi.array(xi.string()).optional().describe("Stop sequences. If set, the model will stop generating text when one of the stop sequences is generated"),responseFormat:xi.union([xi.object({type:xi.literal("text")}),xi.object({type:xi.literal("json"),schema:xi.any().optional().describe("JSON schema that the generated output should conform to"),name:xi.string().optional().describe("Name of output that should be generated"),description:xi.string().optional().describe("Description of the output that should be generated")})]).optional().describe("Response format. The output can either be text or JSON. Default is text"),tools:xi.array(xi.any()).optional().describe("The tools that are available for the model"),toolChoice:xi.any().optional().describe("Specifies how the tool should be selected. Defaults to 'auto'"),includeRawChunks:xi.boolean().optional().describe("Include raw chunks in the stream. Only applicable for streaming calls"),abortSignal:xi.any().optional().describe("Abort signal for cancelling the operation"),providerOptions:xi.any().optional().describe("Additional provider-specific options")}),njf=xi.object({content:xi.array(xi.union([Pjf,Ijf,kjf,Xjf,Kjf,Yjf])).describe("Ordered content that the model has generated (text, tool-calls, reasoning, files, sources)"),finishReason:xi.enum(["stop","length","content-filter","tool-calls","error","other","unknown"]).describe("Reason why generation stopped"),usage:xi.looseObject({inputTokens:xi.number().optional(),outputTokens:xi.number().optional(),totalTokens:xi.number().optional(),reasoningTokens:xi.number().optional()}).describe("Usage information for the language model call"),providerMetadata:xi.any().optional().describe("Additional provider-specific metadata"),request:xi.object({body:xi.any().optional().describe("Request HTTP body sent to the provider API")}).optional().describe("Optional request information for telemetry and debugging"),response:xi.object({id:xi.string().optional().describe("ID for the generated response"),timestamp:xi.iso.datetime().optional().describe("Timestamp for the start of the generated response"),modelId:xi.string().optional().describe("The ID of the response model that was used"),headers:xi.record(xi.string(),xi.string()).optional().describe("Response headers"),body:xi.any().optional().describe("Response HTTP body")}).optional().describe("Optional response information for telemetry and debugging"),warnings:xi.array(xi.any()).describe("Warnings for the call, e.g. unsupported settings")}),Pa1=xi.object({stream:xi.any().describe("ReadableStream of LanguageModelV2StreamPart"),request:xi.object({body:xi.any().optional().describe("Request HTTP body sent to the provider API")}).optional().describe("Optional request information for telemetry and debugging"),response:xi.object({headers:xi.record(xi.string(),xi.string()).optional().describe("Response headers")}).optional().describe("Optional response data")}),bjf=xi.object({supportedUrls:xi.record(xi.string(),xi.array(xi.string())).describe("Supported URL patterns by media type for the provider")}),Ga1=xi.object({modelId:xi.string().describe("The ID of the model"),logo:xi.string().nullable(),description:xi.string().nullable(),capabilities:xi.array(xi.string()),limits:xi.object({contextWindow:xi.number(),maxOutputTokens:xi.number()}).nullable(),costs:xi.object({input:xi.number(),output:xi.number()}).nullable(),provider:xi.enum(["openai","anthropic","google","x-ai","deepseek","openai-compatible","openrouter"]).nullable()}),DF0=xi.object({modelId:xi.string().describe("The ID of the model"),callOptions:Rjf}),Cjf=hhi.extend({logo:xi.string().nullable(),description:xi.string().nullable(),capabilities:xi.array(xi.string()),limits:xi.object({contextWindow:xi.number(),maxOutputTokens:xi.number()}).nullable(),costs:xi.object({input:xi.number(),output:xi.number()}).nullable(),provider:xi.enum(["openai","anthropic","google","xai","deepseek","openai-compatible","openrouter"]).nullable()}),Mjf=vhi("llm",Cjf,{readOnly:!0}),dhi=[{name:"LLM_METADATA",inputSchema:xi.object({modelId:xi.string().describe("The ID of the model")}),outputSchema:bjf},{name:"LLM_DO_STREAM",inputSchema:DF0},{name:"LLM_DO_GENERATE",inputSchema:DF0,outputSchema:njf},...Mjf],Ia1=d8(dhi)});import{z as cg}from"zod";var qjf,BF0;var FF0=O(()=>{qjf=cg.object({scopes:cg.array(cg.string()).describe("List of scopes available"),stateSchema:cg.record(cg.string(),cg.unknown()).describe("JSON Schema (draft-07) defining the state structure")}),BF0=[{name:"MCP_CONFIGURATION",inputSchema:cg.object({}),outputSchema:qjf}]});import{z as a1}from"zod";var Vjf,rjf,gF0;var TF0=O(()=>{Vjf=a1.object({}).strict(),rjf=a1.object({billing:a1.object({mode:a1.enum(["prepaid","postpaid"]),limitPeriod:a1.enum(["daily","weekly","monthly"]).nullable()}),limit:a1.object({total:a1.number().nullable(),remaining:a1.number().nullable(),reset:a1.string().nullable()}),usage:a1.object({total:a1.number(),daily:a1.number(),weekly:a1.number(),monthly:a1.number()}),alert:a1.object({enabled:a1.boolean(),threshold_usd:a1.number(),email:a1.string().nullable()}),connectionId:a1.string()}),gF0=[{name:"GATEWAY_USAGE",inputSchema:Vjf,outputSchema:rjf},{name:"GATEWAY_SET_LIMIT",inputSchema:a1.object({}),outputSchema:a1.object({}),opt:!0},{name:"GATEWAY_SET_ALERT",inputSchema:a1.object({}),outputSchema:a1.object({}),opt:!0}]});function UF0(i,u){return i||u===0}function AF0(i,u,t,f,l){let E=u?l+1:l,c=u?i.slice(0,t):i,w=f+t<E;return{items:c,totalCount:E,hasMore:w}}function mjf(i,u){if(u.length===0)return;let[t,...f]=u,l=t==="slug"?i9(i):i[t];for(let E of f){if(l===null||typeof l!=="object")return;l=l[E]}return l}function ejf(i){let t=i.replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/%/g,".*").replace(/_/g,".");return new RegExp(`^${t}$`,"i")}function ajf(i,u,t){if(i===void 0)return!0;switch(u){case"eq":return t===null?i===null:i===t;case"gt":return i>t;case"gte":return i>=t;case"lt":return i<t;case"lte":return i<=t;case"in":return Array.isArray(t)&&t.includes(i);case"like":return typeof i==="string"&&ejf(String(t)).test(i);case"contains":return String(i).toLowerCase().includes(String(t).toLowerCase());default:return!0}}function za(i,u){if(!u)return!0;if("conditions"in u){let{operator:f,conditions:l}=u;if(l.length===0)return!0;switch(f){case"and":return l.every((E)=>za(i,E));case"or":return l.some((E)=>za(i,E));case"not":return!l.every((E)=>za(i,E));default:return!0}}let t=mjf(i,u.field);return ajf(t,u.operator,u.value)}var yF0=O(()=>{vci()});async function PF0(i,u,t){if(i.length===0)return;let f=0;async function l(){while(f<i.length){let E=f++;await t(i[E])}}await Promise.all(Array.from({length:Math.min(u,i.length)},()=>l()))}import{z as FN}from"zod";var ojf=8,sjf,pjf,iXf,uXf,Xtu;var GF0=O(()=>{jtu();dF0();L5();ZF0();FF0();tV();TF0();Rt();fu();Ml();E$();BN();rL();Jd();vci();yF0();sjf=[{name:/^(COLLECTION_REGISTRY_APP_LIST|REGISTRY_ITEM_LIST)$/,inputSchema:FN.object({})}],pjf={LLM:dhi,LLMS:dhi,ASSISTANTS:vF0,MCP:BF0,OBJECT_STORAGE:AB,AI_GATEWAY_BILLING:gF0,TRIGGER:lhi,REGISTRY:sjf,BRAND:$hi},iXf=gv.extend({binding:FN.union([FN.array(FN.object({}).passthrough()),FN.object({}).passthrough(),FN.string()]).optional(),include_virtual:FN.boolean().optional().describe("Whether to include VIRTUAL connections in the results. Defaults to false."),slug:FN.string().optional().describe("Filter by connection slug. Matches against app_name, or a slug derived from connection_url or title.")}),uXf=Y2($c),Xtu=p({name:"COLLECTION_CONNECTIONS_LIST",description:"List all connections in the organization with filtering, sorting, and pagination",annotations:{title:"List Connections",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:iXf,outputSchema:uXf,handler:async(i,u)=>{await u.access.check();let t=Oi(u),f=i.binding?typeof i.binding==="string"?(()=>{let d=pjf[i.binding.toUpperCase()];if(!d)throw Error(`Unknown binding: ${i.binding}`);return d})():i.binding:void 0,l=f?uhi(f):void 0,E=!!l,c=i.limit??100,w=i.offset??0,{items:$,totalCount:h}=await u.storage.connections.list(t.id,{includeVirtual:i.include_virtual??!1,slug:i.slug,where:i.where,orderBy:i.orderBy,limit:E?void 0:c,offset:E?void 0:w});if(l){let d=Dl(),D=t4.SELF(t.id);await PF0($,ojf,async(_)=>{if(_.tools!==null)return;let N=_.id===D?async()=>{let{listManagementTools:B}=await Promise.resolve().then(() => (wg(),Dhi));return B(u)}:()=>Ttu(_,u,x10),Z=await B9("tools",_.id,N,d,(B)=>u.pendingRevalidations.push(B),Z9);if(Z!==null)_.tools=Z})}let v=!1;if(Rh()&&UF0(E,w)){let d=wl(),D=t4.DEV_ASSETS(t.id);if(!$.some((_)=>_.id===D)){let _=VL(t.id,d),N=!i.slug||i9(_)===i.slug,Z=za(_,i.where);if(N&&Z)$.unshift(_),v=!0}}if(E){let d=(await Promise.all($.map(async(Z)=>{if(!Z.tools||Z.tools.length===0)return null;return l.isImplementedBy(Z.tools.map((F)=>({name:F.name,inputSchema:F.inputSchema,outputSchema:F.outputSchema})))?Z:null}))).filter((Z)=>Z!==null),D=d.length,_=d.slice(w,w+c),N=w+c<D;return{items:_,totalCount:D,hasMore:N}}return AF0($,v,c,w,h)}})});var tXf,Jtu;var IF0=O(()=>{L5();Rt();fu();Ml();E$();BN();rL();Jd();tXf=Sa($c),Jtu=p({name:"COLLECTION_CONNECTIONS_GET",description:"Get a connection's configuration, tools list, and status by ID.",annotations:{title:"Get Connection",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},_meta:{ui:{visibility:["app"]}},inputSchema:Wa,outputSchema:tXf,handler:async(i,u)=>{let t=Oi(u);if(await u.access.check(),Rh()&&DEi(i.id,t.id))return{item:VL(t.id,wl())};let f=await u.storage.connections.findById(i.id);if(!f||f.organization_id!==t.id)return{item:null};if(f.tools===null){let l=t4.SELF(t.id),E=f.id===l?async()=>{let{listManagementTools:w}=await Promise.resolve().then(() => (wg(),Dhi));return w(u)}:async()=>{let w=await F6(f,u,!0);try{return(await w.listTools()).tools}finally{await w.close().catch(()=>{})}},c=await B9("tools",f.id,E,Dl(),(w)=>u.pendingRevalidations.push(w),Z9);if(c!==null)f.tools=c}return{item:f}}})});import{z as Ktu}from"zod";function EXf(i,u){return i.length===u.length&&i.every((t,f)=>t===u[f])}var fXf,lXf,Ytu;var xF0=O(()=>{BN();Fv();fu();R0();E$();bm();Utu();Or();Jd();fXf=Ktu.object({id:Ktu.string().describe("ID of the connection to update"),data:o6i.describe("Partial connection data to update")}),lXf=Ktu.object({item:$c.describe("The updated connection entity")});Ytu=p({name:"COLLECTION_CONNECTIONS_UPDATE",description:"Update a connection's configuration. Re-fetches tools from the server on URL change.",annotations:{title:"Update Connection",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:fXf,outputSchema:lXf,handler:async(i,u)=>{gi(u);let t=Oi(u);await u.access.check();let f=Qu(u);if(!f)throw Error("User ID required to update connection");let{id:l,data:E}=i,c=E.configuration_state!==void 0||E.configuration_scopes!==void 0,w=await u.storage.connections.findById(l);if(!w||w.organization_id!==t.id)throw Error("Connection not found in organization");let $=E.connection_type??w.connection_type,h=E.connection_url??w.connection_url;if($==="VIRTUAL"){let K=nL(h);if(!K)throw Error("VIRTUAL connection requires connection_url in format: virtual://$virtual_mcp_id");let L=await u.storage.virtualMcps.findById(K);if(!L)throw Error(`Virtual MCP not found: ${K}`);if(L.organization_id!==t.id)throw Error("Virtual MCP does not belong to the current organization");h=bL(K)}let v=E.configuration_state??w.configuration_state??{},d=E.configuration_scopes??w.configuration_scopes??[];if(c){if(E.configuration_state!==void 0)v=E.configuration_state??{};else if(v===null||v===void 0)v={};if(E.configuration_scopes!==void 0)d=E.configuration_scopes??[];if(d.length>0){let K=v;ja(K,d,t.id),await Ja(K,d,t.id,u)}}if($==="STDIO"&&!vu().localMode)throw Error("STDIO connections are only available in local mode (--local-mode).");let D=E.connection_token??w.connection_token;if(!D)try{let L=await new r1(u.db,u.vault).get(l);if(L?.accessToken)D=L.accessToken}catch{}let _=await D9({id:w.id,title:E.title??w.title,connection_type:$,connection_url:h,connection_token:D,connection_headers:E.connection_headers??w.connection_headers}).catch(()=>null),N=_?.tools?.length?_.tools:null,Z=!1;if(E.configuration_scopes===void 0&&_?.scopes?.length)Z=!EXf(d,_.scopes),d=_.scopes;if(ja(v,d,t.id),Z&&d.length>0)await Ja(v,d,t.id,u);let B=c||Z,F=B?Xa(v,d):[],g=B?Xa(w.configuration_state??{},w.configuration_scopes??[]):[],T=w.configuration_state,U=T==null||Object.keys(T).length===0,A,G,k=async()=>{try{await u.storage.connectionCredentialVault.replaceGrantsForSubject({organizationId:t.id,subjectConnectionId:l,createdBy:f,grants:g})}catch(K){console.error("Failed to restore credential grants after credential vault mutation failed",K)}},I={...E,connection_url:h,tools:null,configuration_state:v,configuration_scopes:d,updated_by:f},j={...w,...I};if(B)try{if(await u.storage.connectionCredentialVault.replaceGrantsForSubject({organizationId:t.id,subjectConnectionId:l,createdBy:f,grants:F}),F.length>0){if(!await u.storage.connectionCredentialVault.findActiveWorkloadToken({organizationId:t.id,subjectConnectionId:l})){let{plaintextToken:L,record:r}=await u.storage.connectionCredentialVault.createOrRotateWorkloadToken({organizationId:t.id,subjectConnectionId:l});G=r.id,A={baseUrl:u.baseUrl,org:t.slug??t.id,subjectConnectionId:l,token:L}}}}catch(K){if(G)await u.storage.connectionCredentialVault.revokeWorkloadToken({organizationId:t.id,subjectConnectionId:l,tokenId:G});throw await k(),K}if(B&&v&&d)try{await(await F6(j,u,!1)).callTool({name:"ON_MCP_CONFIGURATION",arguments:{state:v,scopes:d,firstRun:U,...A?{vault:A}:{}}})}catch(K){if(console.error("Failed to invoke ON_MCP_CONFIGURATION callback",K),G)throw await u.storage.connectionCredentialVault.revokeWorkloadToken({organizationId:t.id,subjectConnectionId:l,tokenId:G}),await k(),K}let C;try{C=await u.storage.connections.update(l,I)}catch(K){if(B){if(G)await u.storage.connectionCredentialVault.revokeWorkloadToken({organizationId:t.id,subjectConnectionId:l,tokenId:G});await k()}throw K}if(N)Dl()?.set("tools",l,N).catch(()=>{});return rH(l),{item:C}}})});import{z as cXf}from"zod";var wXf,Wtu;var kF0=O(()=>{L5();H4();fu();E$();bm();Jd();wXf=La.extend({force:cXf.boolean().optional().describe("If true, removes this connection from all agents that reference it before deleting")}),Wtu=p({name:"COLLECTION_CONNECTIONS_DELETE",description:"Permanently delete a connection. Set force=true to auto-remove from referencing Virtual MCPs.",annotations:{title:"Delete Connection",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:wXf,outputSchema:Qa($c),handler:async(i,u)=>{gi(u);let t=Oi(u);await u.access.check();let f=await u.storage.connections.findById(i.id);if(!f)throw Error(`Connection not found: ${i.id}`);if(f.organization_id!==t.id)throw Error("Connection not found in organization");if(f.metadata?.isFixed===!0)throw Error("This connection is a fixed system connection and cannot be deleted");let E=await u.storage.virtualMcps.listByConnectionId(t.id,i.id);if(E.length>0)if(i.force)await u.storage.virtualMcps.removeConnectionReferences(i.id);else throw Error(JSON.stringify({code:"CONNECTION_IN_USE",agentNames:E.map(($)=>$.title)}));await u.storage.connections.delete(i.id);let c=await u.storage.organizationSettings.get(t.id);if(c?.registry_config){let{registries:$,blockedMcps:h}=c.registry_config;if(i.id in $){let{[i.id]:v,...d}=$;await u.storage.organizationSettings.upsert(t.id,{registry_config:{registries:d,blockedMcps:h}})}}Dl()?.invalidate(i.id).catch(()=>{}),rH(i.id);let w=Qu(u);if(w)mu.capture({distinctId:w,event:"connection_deleted",groups:{organization:t.id},properties:{connection_id:f.id,connection_type:f.connection_type,app_name:f.app_name??null,organization_id:t.id,forced:i.force??!1}});return{item:f}}})});import{z as zz}from"zod";var Stu;var jF0=O(()=>{fu();Stu=p({name:"CONNECTION_TEST",description:"Test connection health and latency",annotations:{title:"Test Connection",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},inputSchema:zz.object({id:zz.string()}),outputSchema:zz.object({id:zz.string(),healthy:zz.boolean(),latencyMs:zz.number()}),handler:async(i,u)=>{let t=Oi(u);await u.access.check();let f=await u.storage.connections.findById(i.id);if(!f||f.organization_id!==t.id)throw Error("Connection not found");let l=await u.storage.connections.testConnection(i.id);return{id:i.id,...l}}})});var XF0=O(()=>{QB0();GF0();IF0();xF0();kF0();jF0()});import{sql as rf}from"kysely";import{z as D8}from"zod";function JF0(i){if(i===null||i===void 0)return"NULL";if(typeof i==="number")return String(i);if(typeof i==="boolean")return i?"TRUE":"FALSE";if(typeof i==="string")return`'${i.replace(/'/g,"''")}'`;if(i instanceof Date)return`'${i.toISOString()}'`;return`'${JSON.stringify(i).replace(/'/g,"''")}'`}function vXf(i,u){let t=i;for(let l=u.length;l>=1;l--){let E=`$${l}`;if(t.includes(E))t=t.replaceAll(E,JF0(u[l-1]))}let f=[];for(let l=0;l<t.length;l++)if(t[l]==="?")f.push(l);for(let l=Math.min(f.length,u.length)-1;l>=0;l--){let E=f[l],c=JF0(u[l]);t=t.slice(0,E)+c+t.slice(E+1)}return t}function KF0(i){return i.replace(/-/g,"_")}function DXf(i){return`app_${KF0(i)}`}function _Xf(i){return`app_role_${KF0(i)}`}function NXf(i){if(i instanceof Error){let u=i.message.toLowerCase(),t=i.code;return t==="3F000"||t==="42704"||t==="22023"||u.includes("schema")&&u.includes("does not exist")||u.includes("role")&&u.includes("does not exist")}return!1}async function OXf(i,u,t){if(await rf`CREATE SCHEMA IF NOT EXISTS ${rf.id(u)}`.execute(i),!(await rf`
|
|
85227
85227
|
SELECT EXISTS (SELECT 1 FROM pg_roles WHERE rolname = ${t}) as exists
|
|
85228
85228
|
`.execute(i)).rows[0]?.exists)await rf`CREATE ROLE ${rf.id(t)} NOLOGIN`.execute(i);await rf`GRANT ${rf.id(t)} TO CURRENT_USER`.execute(i),await rf`GRANT USAGE, CREATE ON SCHEMA ${rf.id(u)} TO ${rf.id(t)}`.execute(i),await rf`GRANT ALL ON ALL TABLES IN SCHEMA ${rf.id(u)} TO ${rf.id(t)}`.execute(i),await rf`GRANT ALL ON ALL SEQUENCES IN SCHEMA ${rf.id(u)} TO ${rf.id(t)}`.execute(i),await rf`ALTER DEFAULT PRIVILEGES IN SCHEMA ${rf.id(u)} GRANT ALL ON TABLES TO ${rf.id(t)}`.execute(i),await rf`ALTER DEFAULT PRIVILEGES IN SCHEMA ${rf.id(u)} GRANT ALL ON SEQUENCES TO ${rf.id(t)}`.execute(i),await rf`REVOKE ALL ON SCHEMA public FROM ${rf.id(t)}`.execute(i)}async function ZXf(i,u,t,f){try{return await i.transaction().execute(async(l)=>{return await rf`SET LOCAL ROLE ${rf.id(t)}`.execute(l),await rf`SET LOCAL search_path TO ${rf.id(u)}`.execute(l),await rf.raw(f).execute(l)})}catch(l){if(NXf(l))return await OXf(i,u,t),await i.transaction().execute(async(E)=>{return await rf`SET LOCAL ROLE ${rf.id(t)}`.execute(E),await rf`SET LOCAL search_path TO ${rf.id(u)}`.execute(E),await rf.raw(f).execute(E)});throw l}}var hXf,dXf,YF0;var WF0=O(()=>{fu();hXf=D8.object({results:D8.array(D8.unknown()).optional(),success:D8.boolean().optional()});dXf=D8.object({sql:D8.string().describe("The SQL query to run"),params:D8.array(D8.any()).describe("The parameters to pass to the SQL query").optional()});YF0=p({name:"DATABASES_RUN_SQL",description:"Run a SQL query in a connection-scoped isolated schema. Supports SELECT, DDL, and DML.",annotations:{title:"Run SQL Query",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!1},inputSchema:dXf,outputSchema:D8.object({result:D8.array(hXf)}),handler:async(i,u)=>{gi(u),await u.access.check();let t=vXf(i.sql,i.params||[]);if(!u.connectionId)throw Error("Connection context required for database access");console.warn("DATABASES_RUN_SQL invoked",{"tool.deprecation_probe":"DATABASES_RUN_SQL","connection.id":u.connectionId,"organization.id":u.organization?.id??null,"user.id":u.auth.user?.id??null});let f=DXf(u.connectionId),l=_Xf(u.connectionId);return{result:[{results:(await ZXf(u.db,f,l,t)).rows,success:!0}]}}})});function _hi(i){let u=i.access.getRole();if(!U5(u))throw new md("Only organization owners and admins can change org-wide pin status")}var Ltu=O(()=>{A5();yF()});import{z as QF0}from"zod";function FXf(){let i=SF0[Math.floor(Math.random()*SF0.length)];return`icon://${LF0[Math.floor(Math.random()*LF0.length)]}?color=${i}`}var SF0,LF0,gXf,TXf,Qtu;var HF0=O(()=>{fu();N9();Ltu();ka();SF0=["red","orange","amber","yellow","lime","green","emerald","cyan","sky","blue","indigo","violet","purple","fuchsia","pink","rose"],LF0=["Star01","Zap","Heart","Globe01","Compass03","Lightbulb02","Rocket01","Flag01","BookOpen01","Shield01","Key01","Diamond01","Cube01","Target04","Award01","Briefcase01","Coffee","Feather","Hexagon01","Layers3_01","Map01","Palette","Package","Terminal"];gXf=QF0.object({data:iEi.describe("Data for the new virtual MCP")}),TXf=QF0.object({item:hc.describe("The created virtual MCP entity")}),Qtu=p({name:"COLLECTION_VIRTUAL_MCP_CREATE",description:"Create a Virtual MCP (agent) that aggregates tools from multiple connections into one endpoint. Pass `prompts` to seed the agent with kickstart prompts (conversation starters shown as icebreakers). Author them from the agent's role/instructions and the descriptions of the tools it will have, so the starters are coherent and immediately useful.",annotations:{title:"Create Virtual MCP",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!1},inputSchema:gXf,outputSchema:TXf,handler:async(i,u)=>{gi(u);let t=Oi(u);await u.access.check();let f=Qu(u);if(!f)throw Error("User ID required to create virtual MCP");if(i.data.pinned===!0)_hi(u);let{prompts:l,...E}=i.data,c={...E,icon:E.icon??FXf()},w=await u.storage.virtualMcps.create(t.id,f,c);if(l?.length&&u.orgFs&&w.id)await R5i(u.orgFs,w.id,f,l);return{item:w}}})});function UXf(i){let u=[],t=0;while(t<i.length){let f=i[t];if(f==="%")u.push(".*");else if(f==="_")u.push(".");else if(/[.*+?^${}()|[\]\\]/.test(f))u.push("\\"+f);else u.push(f);t++}return u.join("")}function gN(i){return typeof i==="string"||typeof i==="number"}function Htu(i,u){let t=u.split("."),f=i;for(let l of t){if(f==null||typeof f!=="object")return;f=f[l]}return f}function AXf(i,u){return i.connections.some((t)=>t.connection_id===u)}function Nhi(i,u){if("conditions"in u){let{operator:w,conditions:$}=u;switch(w){case"and":return $.every((h)=>Nhi(i,h));case"or":return $.some((h)=>Nhi(i,h));case"not":return!$.every((h)=>Nhi(i,h));default:return!0}}let{field:t,operator:f,value:l}=u,E=t.join(".");if(E==="connection_id"){if(f!=="eq"||typeof l!=="string")return!1;return AXf(i,l)}let c=Htu(i,E);switch(f){case"eq":return c===l;case"gt":return gN(c)&&gN(l)&&c>l;case"gte":return gN(c)&&gN(l)&&c>=l;case"lt":return gN(c)&&gN(l)&&c<l;case"lte":return gN(c)&&gN(l)&&c<=l;case"in":return Array.isArray(l)&&l.includes(c);case"like":if(typeof c!=="string"||typeof l!=="string")return!1;if(l.length>100)return!1;let w=UXf(l);return new RegExp(`^${w}$`,"i").test(c);case"contains":if(typeof c!=="string"||typeof l!=="string")return!1;return c.toLowerCase().includes(l.toLowerCase());default:return!0}}function yXf(i,u){return[...i].sort((t,f)=>{for(let l of u){let E=l.field.join("."),c=Htu(t,E),w=Htu(f,E),$=0;if(c==null&&w==null)continue;if(c==null)$=l.nulls==="first"?-1:1;else if(w==null)$=l.nulls==="first"?1:-1;else if(typeof c==="string"&&typeof w==="string")$=c.localeCompare(w);else if(typeof c==="number"&&typeof w==="number")$=c-w;else $=String(c).localeCompare(String(w));if($!==0)return l.direction==="desc"?-$:$}return 0})}var PXf,GXf,ztu;var zF0=O(()=>{L5();fu();N9();PXf=gv,GXf=Y2(hc),ztu=p({name:"COLLECTION_VIRTUAL_MCP_LIST",description:"List all MCP virtual MCPs in the organization",annotations:{title:"List Virtual MCPs",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:PXf,outputSchema:GXf,handler:async(i,u)=>{await u.access.check();let t=Oi(u),f=i.where&&!("conditions"in i.where)&&i.where.field.join(".")==="connection_id"&&i.where.operator==="eq"&&typeof i.where.value==="string"?i.where.value:void 0,l=i.where&&!("conditions"in i.where)&&i.where.field.join(".")==="pinned"&&i.where.operator==="eq"&&typeof i.where.value==="boolean"?i.where.value:void 0,c=f?await u.storage.virtualMcps.listByConnectionId(t.id,f):await u.storage.virtualMcps.list(t.id,l!==void 0?{pinnedOnly:l}:void 0);if(i.where)c=c.filter((D)=>Nhi(D,i.where));if(i.orderBy&&i.orderBy.length>0)c=yXf(c,i.orderBy);let w=c.length,$=i.offset??0,h=i.limit??100,v=c.slice($,$+h),d=$+h<w;return{items:v,totalCount:w,hasMore:d}}})});import{z as Rtu}from"zod";var IXf,xXf,ntu;var RF0=O(()=>{fu();N9();IXf=Rtu.object({id:Rtu.string().describe("ID of the virtual MCP to retrieve")}),xXf=Rtu.object({item:hc.nullable().describe("The retrieved virtual MCP, or null if not found")}),ntu=p({name:"COLLECTION_VIRTUAL_MCP_GET",description:"Get a Virtual MCP's configuration, connections, and virtual tools by ID.",annotations:{title:"Get Virtual MCP",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:IXf,outputSchema:xXf,handler:async(i,u)=>{gi(u);let t=Oi(u);await u.access.check();let f=await u.storage.virtualMcps.findById(i.id);if(f&&f.organization_id!==t.id)return{item:null};if(!f)return{item:null};return{item:f}}})});import{z as btu}from"zod";var kXf,jXf,Ctu;var nF0=O(()=>{fu();ka();N9();Ltu();kXf=btu.object({id:btu.string().describe("ID of the virtual MCP to update"),data:uEi.describe("Partial virtual MCP data to update")}),jXf=btu.object({item:hc.describe("The updated virtual MCP entity")}),Ctu=p({name:"COLLECTION_VIRTUAL_MCP_UPDATE",description:"Update a Virtual MCP's name, slug, connection list, or kickstart prompts. Pass `prompts` to replace the agent's conversation starters (full set; empty array clears them).",annotations:{title:"Update Virtual MCP",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:kXf,outputSchema:jXf,handler:async(i,u)=>{gi(u);let t=Oi(u);await u.access.check();let f=Qu(u);if(!f)throw Error("User ID required to update virtual MCP");let l=await u.storage.virtualMcps.findById(i.id);if(!l)throw Error(`Virtual MCP not found: ${i.id}`);if(l.organization_id!==t.id)throw Error(`Virtual MCP not found: ${i.id}`);let{prompts:E,...c}=i.data;if(c.metadata&&l.metadata)c.metadata={...l.metadata,...c.metadata};if(c.pinned!==void 0&&c.pinned!==l.pinned)_hi(u);let w=await u.storage.virtualMcps.update(i.id,f,c);if(E!==void 0&&u.orgFs)await R5i(u.orgFs,i.id,f,E);return{item:w}}})});function bF0(i){return xd(i)!==null||EEi(i)!==null}var CF0=O(()=>{Rt()});import{z as Mtu}from"zod";var XXf,JXf,qtu;var MF0=O(()=>{ZN();Fv();fu();ka();N9();CF0();XXf=Mtu.object({id:Mtu.string().describe("ID of the virtual MCP to delete")}),JXf=Mtu.object({item:hc.describe("The deleted virtual MCP entity")}),qtu=p({name:"COLLECTION_VIRTUAL_MCP_DELETE",description:"Permanently delete a Virtual MCP and its virtual tools.",annotations:{title:"Delete Virtual MCP",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:XXf,outputSchema:JXf,handler:async(i,u)=>{gi(u);let t=Oi(u);if(await u.access.check(),bF0(i.id))throw Error(`Virtual MCP not found: ${i.id}`);let f=await u.storage.virtualMcps.findById(i.id);if(!f)throw Error(`Virtual MCP not found: ${i.id}`);if(f.organization_id!==t.id)throw Error(`Virtual MCP not found: ${i.id}`);await u.storage.virtualMcps.delete(i.id);try{if((await u.storage.organizationSettings.get(t.id))?.main_agent_id===i.id)await u.storage.organizationSettings.upsert(t.id,{main_agent_id:null})}catch(E){console.error("[VIRTUAL_MCP_DELETE] failed to clear main agent pointer",{id:i.id,error:E.message})}if(u.orgFs)await Btu(u.orgFs,i.id,Qu(u)??"system");let l=f.metadata?.githubRepo?.connectionId;if(l)try{let E=await u.storage.connections.findById(l,t.id);if(E&&W5(E)){let w=await new r1(u.db,u.vault).get(l);if(w?.accessToken)try{await fetch("https://api.github.com/installation/token",{method:"DELETE",headers:{Authorization:`Bearer ${w.accessToken}`,Accept:"application/vnd.github+json","X-GitHub-Api-Version":"2022-11-28"},signal:AbortSignal.timeout(5000)})}catch{}await u.storage.connections.delete(l)}}catch(E){console.error("[VIRTUAL_MCP_DELETE] failed to tear down repo-scoped connection",{childConnectionId:l,error:E.message})}return{item:f}}})});import{z as dw}from"zod";var KXf,Vtu;var qF0=O(()=>{fu();KXf=dw.object({id:dw.string(),virtualMcpId:dw.string(),pluginId:dw.string(),connectionId:dw.string().nullable(),settings:dw.record(dw.string(),dw.unknown()).nullable(),createdAt:dw.string(),updatedAt:dw.string()}),Vtu=p({name:"VIRTUAL_MCP_PLUGIN_CONFIG_GET",description:"Get a plugin's current configuration for a specific virtual MCP.",annotations:{title:"Get Virtual MCP Plugin Config",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:dw.object({virtualMcpId:dw.string().describe("Virtual MCP ID"),pluginId:dw.string().describe("Plugin ID")}),outputSchema:dw.object({config:KXf.nullable()}),handler:async(i,u)=>{gi(u);let t=Oi(u);await u.access.check();let{virtualMcpId:f,pluginId:l}=i,E=await u.storage.connections.findById(f);if(!E||E.organization_id!==t.id)return{config:null};if(E.connection_type!=="VIRTUAL")return{config:null};let c=await u.storage.virtualMcpPluginConfigs.get(f,l);if(!c)return{config:null};return{config:{id:c.id,virtualMcpId:c.virtualMcpId,pluginId:c.pluginId,connectionId:c.connectionId,settings:c.settings,createdAt:c.createdAt instanceof Date?c.createdAt.toISOString():c.createdAt,updatedAt:c.updatedAt instanceof Date?c.updatedAt.toISOString():c.updatedAt}}}})});import{z as uE}from"zod";var YXf,rtu;var VF0=O(()=>{fu();rL();Ml();YXf=uE.object({id:uE.string(),virtualMcpId:uE.string(),pluginId:uE.string(),connectionId:uE.string().nullable(),settings:uE.record(uE.string(),uE.unknown()).nullable(),createdAt:uE.string(),updatedAt:uE.string()}),rtu=p({name:"VIRTUAL_MCP_PLUGIN_CONFIG_UPDATE",description:"Set or update a plugin's configuration for a specific virtual MCP.",annotations:{title:"Update Virtual MCP Plugin Config",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:uE.object({virtualMcpId:uE.string().describe("Virtual MCP ID"),pluginId:uE.string().describe("Plugin ID"),connectionId:uE.string().nullable().optional().describe("MCP connection to bind"),settings:uE.record(uE.string(),uE.unknown()).nullable().optional().describe("Plugin-specific settings")}),outputSchema:uE.object({config:YXf}),handler:async(i,u)=>{gi(u);let t=Oi(u);await u.access.check();let{virtualMcpId:f,pluginId:l,connectionId:E,settings:c}=i,w=Qu(u),$=await u.storage.connections.findById(f);if(!$)throw Error(`Connection not found: ${f}`);if($.organization_id!==t.id)throw Error(`Connection not found: ${f}`);if($.connection_type!=="VIRTUAL")throw Error(`Connection not found: ${f}`);let h=E?await u.storage.connections.findById(E):null;if(E&&h&&h.organization_id!==t.id)throw Error(`Connection not found: ${E}`);if(E&&$.organization_id&&!h&&Rh()&&DEi(E,$.organization_id)){if(!w)throw Error("User ID required to create dev-assets connection");let d=VL($.organization_id,wl());await u.storage.connections.create({...d,organization_id:$.organization_id,created_by:w})}else if(E&&!h)throw Error(`Connection not found: ${E}`);let v=await u.storage.virtualMcpPluginConfigs.upsert(f,l,{connectionId:E,settings:c});return{config:{id:v.id,virtualMcpId:v.virtualMcpId,pluginId:v.pluginId,connectionId:v.connectionId,settings:v.settings,createdAt:v.createdAt instanceof Date?v.createdAt.toISOString():v.createdAt,updatedAt:v.updatedAt instanceof Date?v.updatedAt.toISOString():v.updatedAt}}}})});import{z as N3}from"zod";var WXf,mtu;var rF0=O(()=>{fu();N9();WXf=N3.object({connectionId:N3.string(),toolName:N3.string(),label:N3.string(),icon:N3.string().nullable().optional()}),mtu=p({name:"VIRTUAL_MCP_PINNED_VIEWS_UPDATE",description:"Update the pinned sidebar views for a virtual MCP. Replaces all current pins.",annotations:{title:"Update Pinned Views",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:N3.object({virtualMcpId:N3.string().describe("Virtual MCP ID"),pinnedViews:N3.array(WXf).describe("Pinned views to set for the virtual MCP sidebar"),layout:N3.object({defaultMainView:N3.object({type:N3.string(),id:N3.string().optional(),toolName:N3.string().optional()}).nullable().optional(),chatDefaultOpen:N3.boolean().nullable().optional()}).optional()}),outputSchema:N3.object({item:hc.nullable()}),handler:async(i,u)=>{gi(u);let t=Oi(u);await u.access.check();let{virtualMcpId:f,pinnedViews:l,layout:E}=i,c=Qu(u),w=await u.storage.virtualMcps.findById(f);if(!w)throw Error(`Virtual MCP not found: ${f}`);if(w.organization_id!==t.id)throw Error(`Virtual MCP not found: ${f}`);let $=w.metadata?.ui??{},h={...$,pinnedViews:l.length>0?l:null,layout:E??$.layout??null};return{item:await u.storage.virtualMcps.update(f,c??"system",{metadata:{...w.metadata,ui:h}})}}})});import{z as S2}from"zod";var SXf,LXf,etu;var mF0=O(()=>{fu();SXf=S2.object({ids:S2.array(S2.string()).describe("Virtual MCP ids to look up")}),LXf=S2.object({items:S2.array(S2.object({id:S2.string(),last_used_at:S2.string().optional(),last_used_by:S2.string().optional()}))}),etu=p({name:"VIRTUAL_MCP_LAST_USED_LIST",description:"Get last-used info (timestamp + user) for one or more virtual MCPs, derived from the most recent thread per agent.",annotations:{title:"List Virtual MCP Last Used",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:SXf,outputSchema:LXf,handler:async(i,u)=>{gi(u),Oi(u),await u.access.check();let t=await u.storage.threads.findLastUsedByVirtualMcpIds(i.ids);return{items:i.ids.map((f)=>({id:f,last_used_at:t.get(f)?.last_used_at,last_used_by:t.get(f)?.last_used_by}))}}})});var eF0=O(()=>{HF0();zF0();RF0();nF0();MF0();qF0();VF0();rF0();mF0()});import{z as P1}from"zod";var atu;var aF0=O(()=>{X1();fu();atu=p({name:"MONITORING_LOG_GET",description:"Get a single monitoring log by ID with full input and output data.",annotations:{title:"Get Monitoring Log",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:P1.object({id:P1.string().describe("Log ID to fetch")}),outputSchema:P1.object({log:P1.object({id:P1.string().optional(),organizationId:P1.string(),connectionId:P1.string(),toolName:P1.string(),input:P1.record(P1.string(),P1.unknown()),output:P1.record(P1.string(),P1.unknown()),isError:P1.boolean(),errorMessage:P1.string().nullish(),durationMs:P1.number(),timestamp:P1.string(),userId:P1.string().nullish(),requestId:P1.string(),userAgent:P1.string().nullish(),virtualMcpId:P1.string().nullish(),properties:P1.record(P1.string(),P1.string()).nullish()}).nullable().describe("The monitoring log, or null if not found")}),handler:async(i,u)=>{await u.access.check(),await l5();let t=Oi(u),f=await u.storage.monitoring.getById(t.id,i.id);if(!f)return{log:null};return{log:{...f,timestamp:f.timestamp instanceof Date?f.timestamp.toISOString():f.timestamp}}}})});import{z as Ut}from"zod";var HXf,otu;var oF0=O(()=>{X1();fu();HXf=Ut.object({id:Ut.string().optional().describe("Unique log identifier"),organizationId:Ut.string().describe("Organization ID"),connectionId:Ut.string().describe("Connection ID"),toolName:Ut.string().describe("Name of the tool that was called"),isError:Ut.boolean().describe("Whether the call resulted in an error"),errorMessage:Ut.string().nullish().describe("Error message if applicable"),durationMs:Ut.number().describe("Call duration in milliseconds"),timestamp:Ut.string().describe("ISO 8601 timestamp of the call"),userId:Ut.string().nullish().describe("User who triggered the call"),requestId:Ut.string().describe("Unique request identifier"),userAgent:Ut.string().nullish().describe("Client identifier (x-studio-client header)"),virtualMcpId:Ut.string().nullish().describe("Virtual MCP (Agent) ID if routed through an agent"),properties:Ut.record(Ut.string(),Ut.string()).nullish().describe("Custom key-value metadata attached to the log")}),otu=p({name:"MONITORING_LOGS_LIST",description:"List monitoring logs for tool calls with filtering and pagination.",annotations:{title:"List Monitoring Logs",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:Ut.object({connectionId:Ut.string().optional().describe("Filter by connection ID"),excludeConnectionIds:Ut.array(Ut.string()).optional().describe("Exclude logs from these connection IDs (e.g. system connections)"),virtualMcpId:Ut.string().optional().describe("Filter by Virtual MCP (Agent) ID"),toolName:Ut.string().optional().describe("Filter by tool name"),isError:Ut.boolean().optional().describe("Filter by error status"),startDate:Ut.string().datetime().optional().describe("Filter by start date (ISO 8601 datetime string)"),endDate:Ut.string().datetime().optional().describe("Filter by end date (ISO 8601 datetime string)"),limit:Ut.number().default(20).describe("Maximum number of results"),offset:Ut.number().default(0).describe("Offset for pagination"),properties:Ut.record(Ut.string(),Ut.string()).optional().describe("Filter by exact property key=value matches"),propertyKeys:Ut.array(Ut.string()).optional().describe("Filter by logs that have these property keys"),propertyPatterns:Ut.record(Ut.string(),Ut.string()).optional().describe("Filter by property value patterns (SQL LIKE, use % as wildcard)"),propertyInValues:Ut.record(Ut.string(),Ut.string()).optional().describe("Filter by exact match within comma-separated values (e.g., user_tags in 'Engineering')")}),outputSchema:Ut.object({logs:Ut.array(HXf).describe("Array of monitoring logs"),total:Ut.number().describe("Total number of logs matching filters"),offset:Ut.number().describe("Current offset for pagination"),limit:Ut.number().describe("Current limit for pagination")}),handler:async(i,u)=>{await l5();let t=Oi(u),l=i.properties||i.propertyKeys||i.propertyPatterns||i.propertyInValues?{properties:i.properties,propertyKeys:i.propertyKeys,propertyPatterns:i.propertyPatterns,propertyInValues:i.propertyInValues}:void 0,E={organizationId:t.id,connectionId:i.connectionId,excludeConnectionIds:i.excludeConnectionIds,virtualMcpId:i.virtualMcpId,toolName:i.toolName,isError:i.isError,startDate:i.startDate?new Date(i.startDate):void 0,endDate:i.endDate?new Date(i.endDate):void 0,limit:i.limit,offset:i.offset,propertyFilters:l},c=await u.storage.monitoring.query(E);return{logs:c.logs.map(({input:w,output:$,...h})=>({...h,timestamp:h.timestamp instanceof Date?h.timestamp.toISOString():h.timestamp})),total:c.total,offset:i.offset,limit:i.limit}}})});import{z as _0}from"zod";var stu;var sF0=O(()=>{X1();fu();stu=p({name:"MONITORING_STATS",description:"Get aggregated statistics (counts, latency, error rates) for tool call monitoring.",annotations:{title:"Get Monitoring Stats",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:_0.object({startDate:_0.string().datetime().optional().describe("Filter by start date (ISO 8601 datetime string)"),endDate:_0.string().datetime().optional().describe("Filter by end date (ISO 8601 datetime string)"),interval:_0.string().regex(/^\d+[mhd]$/).optional().describe("Bucket interval for timeseries data (e.g. 1m, 5m, 2h, 1d). When provided, returns timeseries array."),connectionIds:_0.array(_0.string()).max(100).optional().describe("Filter by specific connection IDs (max 100)"),excludeConnectionIds:_0.array(_0.string()).max(100).optional().describe("Exclude specific connection IDs (max 100)"),toolNames:_0.array(_0.string()).max(100).optional().describe("Filter by specific tool names (max 100)"),status:_0.enum(["success","error"]).optional().describe("Filter metrics by execution status"),topN:_0.number().int().min(1).max(20).optional().describe("When provided with interval, also return top tools and their timeseries"),userIds:_0.array(_0.string()).max(100).optional().describe("Filter LLM usage by user IDs (only applied when llmUsage is true)"),llmUsage:_0.boolean().optional().describe("Aggregate LLM-call usage (tokens + USD cost) from raw log rows for the given connection. Returns token/cost totals and timeseries. Requires interval.")}),outputSchema:_0.object({totalCalls:_0.number().describe("Total number of tool calls"),errorRate:_0.number().optional().describe("Error rate as a decimal (0 to 1)"),avgDurationMs:_0.number().describe("Average call duration in milliseconds"),errorRatePercent:_0.string().optional().describe("Error rate as a percentage string"),totalErrors:_0.number().optional().describe("Total number of errors"),p50DurationMs:_0.number().optional().describe("50th percentile duration in milliseconds"),p95DurationMs:_0.number().optional().describe("95th percentile duration in milliseconds"),connectionBreakdown:_0.array(_0.object({connectionId:_0.string(),calls:_0.number(),errors:_0.number(),errorRate:_0.number(),avgDurationMs:_0.number()})).optional().describe("Per-connection metric breakdown"),totalInputTokens:_0.number().optional().describe("Total input tokens (LLM usage mode)"),totalOutputTokens:_0.number().optional().describe("Total output tokens (LLM usage mode)"),totalTokens:_0.number().optional().describe("Total tokens (LLM usage mode)"),totalCostUsd:_0.number().optional().describe("Total USD cost (LLM usage mode; only non-zero for providers that report cost)"),topTools:_0.array(_0.object({toolName:_0.string(),connectionId:_0.string().nullable(),calls:_0.number(),inputTokens:_0.number().optional(),outputTokens:_0.number().optional(),costUsd:_0.number().optional()})).optional().describe("Top tools ranked by calls"),topToolsTimeseries:_0.array(_0.object({timestamp:_0.string(),toolName:_0.string(),calls:_0.number(),errors:_0.number(),avg:_0.number(),p95:_0.number()})).optional().describe("Per-tool metric timeseries for the top tools"),timeseries:_0.array(_0.object({timestamp:_0.string(),calls:_0.number(),errors:_0.number(),errorRate:_0.number(),avg:_0.number(),p50:_0.number(),p95:_0.number(),inputTokens:_0.number().optional(),outputTokens:_0.number().optional(),totalTokens:_0.number().optional(),costUsd:_0.number().optional()})).optional().describe("Timeseries data points bucketed by interval")}),handler:async(i,u)=>{let t=Oi(u);if(await u.access.check(),await l5(),i.interval&&i.llmUsage)return u.storage.monitoring.queryLlmUsageStats({organizationId:t.id,interval:i.interval,connectionId:i.connectionIds?.[0]??"decopilot",startDate:i.startDate?new Date(i.startDate):void 0,endDate:i.endDate?new Date(i.endDate):void 0,userIds:i.userIds,topN:i.topN});if(i.interval){let l=await u.storage.monitoring.queryMetricTimeseries({organizationId:t.id,interval:i.interval,startDate:i.startDate?new Date(i.startDate):void 0,endDate:i.endDate?new Date(i.endDate):void 0,filters:{connectionIds:i.connectionIds,excludeConnectionIds:i.excludeConnectionIds,toolNames:i.toolNames,status:i.status}});if(!i.topN)return l;let E=await u.storage.monitoring.queryMetricTopToolsTimeseries({organizationId:t.id,interval:i.interval,startDate:i.startDate?new Date(i.startDate):void 0,endDate:i.endDate?new Date(i.endDate):void 0,topN:i.topN,filters:{connectionIds:i.connectionIds,excludeConnectionIds:i.excludeConnectionIds,toolNames:i.toolNames,status:i.status}});return{...l,topTools:E.topTools,topToolsTimeseries:E.timeseries}}let f=await u.storage.monitoring.getStats({organizationId:t.id,startDate:i.startDate?new Date(i.startDate):void 0,endDate:i.endDate?new Date(i.endDate):void 0});return{...f,errorRatePercent:(f.errorRate*100).toFixed(2)}}})});import{z as O3}from"zod";var ptu;var pF0=O(()=>{X1();fu();ptu=p({name:"MONITORING_THREAD_USAGE",description:"Aggregate LLM token usage and USD cost per thread for the given thread IDs.",annotations:{title:"Get Thread Usage",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:O3.object({threadIds:O3.array(O3.string()).min(1).max(500).describe("Thread IDs to aggregate usage for (max 500)"),connectionId:O3.string().optional().describe("LLM connection ID (defaults to 'decopilot')"),startDate:O3.string().datetime().optional().describe("Filter by start date (ISO 8601 datetime string)"),endDate:O3.string().datetime().optional().describe("Filter by end date (ISO 8601 datetime string)")}),outputSchema:O3.object({items:O3.array(O3.object({threadId:O3.string(),calls:O3.number(),inputTokens:O3.number(),outputTokens:O3.number(),totalTokens:O3.number(),costUsd:O3.number()}))}),handler:async(i,u)=>{let t=Oi(u);return await u.access.check(),await l5(),{items:await u.storage.monitoring.queryThreadUsage({organizationId:t.id,connectionId:i.connectionId??"decopilot",threadIds:i.threadIds,startDate:i.startDate?new Date(i.startDate):void 0,endDate:i.endDate?new Date(i.endDate):void 0})}}})});var ig0=O(()=>{aF0();oF0();sF0();pF0()});function Ohi(i){return typeof i==="string"&&RXf.has(i.trim().toLowerCase())}var RXf;var ifu=O(()=>{RXf=new Set([".well-known","_admin","api","auth","cli","commerce-onboarding","dbos-queue-depth","health","hosted-run-pending","login","mcp","metrics","oauth","oauth-proxy","onboarding","org","report","reset-password"])});import{z as g$}from"zod";var ufu;var ug0=O(()=>{fu();ifu();ufu=p({name:"ORGANIZATION_CREATE",description:"Create a new organization. The caller becomes the owner automatically.",annotations:{title:"Create Organization",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!1},inputSchema:g$.object({slug:g$.string().min(1).max(50).regex(/^[a-z0-9-]+$/,"Slug must be lowercase alphanumeric with hyphens").refine((i)=>!Ohi(i),"Slug is reserved by Studio"),name:g$.string().min(1).max(255),description:g$.string().optional()}),outputSchema:g$.object({id:g$.string(),name:g$.string(),slug:g$.string(),logo:g$.string().nullable().optional(),metadata:g$.any().optional(),createdAt:g$.string().datetime().describe("ISO 8601 timestamp"),members:g$.array(g$.any()).optional()}),handler:async(i,u)=>{gi(u),await u.access.check();let t=Qu(u);if(!t)throw Error("User ID required to create organization");let f=await u.boundAuth.organization.create({name:i.name,slug:i.slug,metadata:i.description?{description:i.description}:void 0,userId:t});if(!f)throw Error("Failed to create organization");return{...f,createdAt:f.createdAt instanceof Date?f.createdAt.toISOString():f.createdAt}}})});import{z as Tv}from"zod";var tfu;var tg0=O(()=>{fu();tfu=p({name:"ORGANIZATION_LIST",description:"List organizations the current user belongs to.",annotations:{title:"List Organizations",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},_meta:{ui:{visibility:"app"}},inputSchema:Tv.object({userId:Tv.string().optional()}),outputSchema:Tv.object({organizations:Tv.array(Tv.object({id:Tv.string(),name:Tv.string(),slug:Tv.string(),logo:Tv.string().nullable().optional(),metadata:Tv.any().optional(),createdAt:Tv.string().datetime().describe("ISO 8601 timestamp")}))}),handler:async(i,u)=>{gi(u),await u.access.check();let t=Qu(u),f=i.userId||t;if(!f)throw Error("User ID required to list organizations");return{organizations:(await u.boundAuth.organization.list(f)).map((E)=>({...E,createdAt:E.createdAt instanceof Date?E.createdAt.toISOString():E.createdAt}))}}})});import{z as Q5}from"zod";var ffu;var fg0=O(()=>{fu();ffu=p({name:"ORGANIZATION_GET",description:"Get an organization's details, members, and settings by slug or ID.",annotations:{title:"Get Organization",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:Q5.object({}),outputSchema:Q5.object({id:Q5.string(),name:Q5.string(),slug:Q5.string(),logo:Q5.string().nullable().optional(),metadata:Q5.any().optional(),createdAt:Q5.string().datetime().describe("ISO 8601 timestamp"),members:Q5.array(Q5.any()).optional(),invitations:Q5.array(Q5.any()).optional()}),handler:async(i,u)=>{gi(u),await u.access.check();let t=u.organization?.id;if(!t)throw Error("Organization ID required (no active organization in context)");let f=await u.boundAuth.organization.get(t);if(!f)throw Error("No active organization found");let l=new Date,E=f.invitations?.filter((c)=>new Date(c.expiresAt)>l);return{...f,invitations:E,createdAt:f.createdAt instanceof Date?f.createdAt.toISOString():f.createdAt}}})});import{z as Uv}from"zod";var lfu;var lg0=O(()=>{fu();lfu=p({name:"ORGANIZATION_UPDATE",description:"Update an organization's name or description.",annotations:{title:"Update Organization",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:Uv.object({id:Uv.string(),name:Uv.string().min(1).max(255).optional(),description:Uv.string().optional()}),outputSchema:Uv.object({id:Uv.string(),name:Uv.string(),slug:Uv.string(),logo:Uv.string().nullable().optional(),metadata:Uv.any().optional(),createdAt:Uv.string().datetime().describe("ISO 8601 timestamp")}),handler:async(i,u)=>{gi(u),await u.access.check();let t={};if(i.name)t.name=i.name;if(i.description)t.metadata={description:i.description};let f=await u.boundAuth.organization.update({organizationId:i.id,data:t});if(!f)throw Error("Failed to update organization");return{...f,createdAt:f.createdAt instanceof Date?f.createdAt.toISOString():f.createdAt}}})});import{z as Ra}from"zod";var Efu;var Eg0=O(()=>{fu();Efu=p({name:"ORGANIZATION_DELETE",description:"Archive an organization (soft delete).",annotations:{title:"Delete Organization",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:Ra.object({id:Ra.string()}),outputSchema:Ra.object({success:Ra.boolean(),id:Ra.string()}),handler:async(i,u)=>{return gi(u),await u.access.check(),await u.boundAuth.organization.update({organizationId:i.id,data:{metadata:{archived:!0,archivedAt:new Date().toISOString()}}}),{success:!0,id:i.id}}})});import{z as Y0}from"zod";var na,ba,L2,cg0,_8,Ca,Ma,qa,Va,TN;var T$=O(()=>{na=Y0.object({title:Y0.string(),url:Y0.string(),icon:Y0.string()}),ba=Y0.object({registries:Y0.record(Y0.string(),Y0.object({enabled:Y0.boolean()})).describe("Per-registry enabled/disabled state. Key is connection ID. Absent registries are treated as enabled."),blockedMcps:Y0.array(Y0.string()).describe("List of MCP app_name or app_id values to hide from the store.")}),L2=Y0.object({keyId:Y0.string(),modelId:Y0.string(),title:Y0.string().optional()}).nullable(),cg0=Y0.enum(["fast","smart","thinking","image","web_search","deep_research"]),_8=Y0.enum(["fast","smart","thinking"]),Ca=Y0.object({tiers:Y0.object({fast:L2,smart:L2,thinking:L2,image:L2,web_search:L2,deep_research:L2})}),Ma=Y0.object({tiers:Y0.object({fast:L2.optional(),smart:L2.optional(),thinking:L2.optional()})}),qa=Y0.object({ids:Y0.array(Y0.string()).describe("Ordered list of custom virtual MCP agent ids to show on the home view.")}),Va=Y0.object({demo_mode:Y0.boolean().optional().describe("Curated demo org: the commerce connect modal proceeds without a configured required data source."),reports_only:Y0.boolean().optional().describe("Curated commerce (reports) look: hides agent navigation, the home Customize button, and the Settings/Automations tabs. Defaulted on for orgs created by commerce onboarding.")}),TN=Y0.object({id:Y0.string().describe("Brand context ID"),name:Y0.string().describe("Company name"),domain:Y0.string().describe("Company domain (e.g. example.com)"),overview:Y0.string().describe("Company overview / description"),logo:Y0.string().nullable().optional().describe("Logo URL"),favicon:Y0.string().nullable().optional().describe("Favicon URL"),ogImage:Y0.string().nullable().optional().describe("OG image URL"),fonts:Y0.object({heading:Y0.string().optional().describe("Font family for headings"),body:Y0.string().optional().describe("Font family for body text"),code:Y0.string().optional().describe("Font family for code / monospace")}).nullable().optional().describe("Font families by semantic role"),colors:Y0.object({primary:Y0.string().optional().describe("Primary brand color (hex)"),secondary:Y0.string().optional().describe("Secondary brand color (hex)"),accent:Y0.string().optional().describe("Accent / highlight color (hex)"),background:Y0.string().optional().describe("Background color (hex)"),foreground:Y0.string().optional().describe("Foreground / text color (hex)")}).nullable().optional().describe("Semantic color palette"),images:Y0.array(Y0.record(Y0.string(),Y0.unknown())).nullable().optional().describe("Brand images"),metadata:Y0.record(Y0.string(),Y0.unknown()).nullable().optional().describe("Extra design tokens (typography, components, spacing, layout, tone, etc.)"),archivedAt:Y0.string().nullable().optional().describe("Archive timestamp (null to unarchive)"),isDefault:Y0.boolean().optional().describe("Whether this is the default brand for the organization")})});import{z as Q2}from"zod";var cfu;var wg0=O(()=>{fu();T$();cfu=p({name:"ORGANIZATION_SETTINGS_GET",description:"Get organization-level settings including sidebar configuration, store registry settings, simple model mode, and default home agents.",annotations:{title:"Get Organization Settings",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:Q2.object({}),outputSchema:Q2.object({organizationId:Q2.string(),sidebar_items:Q2.array(na).nullable().optional(),enabled_plugins:Q2.array(Q2.string()).nullable().optional(),registry_config:ba.nullable().optional(),simple_mode:Ca.nullable().optional(),default_home_agents:qa.nullable().optional(),flags:Va.nullable().optional(),main_agent_id:Q2.string().nullable().optional(),createdAt:Q2.string().datetime().optional().describe("ISO 8601 timestamp"),updatedAt:Q2.string().datetime().optional().describe("ISO 8601 timestamp")}),handler:async(i,u)=>{gi(u),await u.access.check();let t=u.organization?.id;if(!t)throw Error("Organization ID required (no active organization in context)");let f=await u.storage.organizationSettings.get(t);if(!f)return{organizationId:t};return{...f,createdAt:f.createdAt instanceof Date?f.createdAt.toISOString():f.createdAt,updatedAt:f.updatedAt instanceof Date?f.updatedAt.toISOString():f.updatedAt}}})});import{z as Dw}from"zod";var wfu;var $g0=O(()=>{fu();T$();wfu=p({name:"ORGANIZATION_SETTINGS_UPDATE",description:"Update organization-level settings such as sidebar configuration, store registry settings, simple model mode, and default home agents.",annotations:{title:"Update Organization Settings",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:Dw.object({organizationId:Dw.string(),sidebar_items:Dw.array(na).optional(),enabled_plugins:Dw.array(Dw.string()).optional(),registry_config:ba.optional(),simple_mode:Ca.optional(),default_home_agents:qa.optional(),flags:Va.strict().optional().describe("Org boolean toggles. Shallow-merged into the stored flags: keys you pass win (explicit false persists), omitted keys keep their value."),main_agent_id:Dw.string().nullable().optional().describe("Virtual MCP id the org lands on instead of the Super Agent. Pass null to clear.")}),outputSchema:Dw.object({organizationId:Dw.string(),sidebar_items:Dw.array(na).nullable().optional(),enabled_plugins:Dw.array(Dw.string()).nullable().optional(),registry_config:ba.nullable().optional(),simple_mode:Ca.nullable().optional(),default_home_agents:qa.nullable().optional(),flags:Va.nullable().optional(),main_agent_id:Dw.string().nullable().optional(),createdAt:Dw.string().datetime().describe("ISO 8601 timestamp"),updatedAt:Dw.string().datetime().describe("ISO 8601 timestamp")}),handler:async(i,u)=>{if(gi(u),await u.access.check(),Oi(u).id!==i.organizationId)throw Error("Cannot update settings for a different organization");let f=await u.storage.organizationSettings.upsert(i.organizationId,{sidebar_items:i.sidebar_items,enabled_plugins:i.enabled_plugins,registry_config:i.registry_config,simple_mode:i.simple_mode,default_home_agents:i.default_home_agents,flags:i.flags,main_agent_id:i.main_agent_id});return{...f,createdAt:f.createdAt instanceof Date?f.createdAt.toISOString():f.createdAt,updatedAt:f.updatedAt instanceof Date?f.updatedAt.toISOString():f.updatedAt}}})});import{z as Av}from"zod";var hg0,$fu,hfu;var vg0=O(()=>{fu();T$();hg0=TN.extend({organizationId:Av.string(),archivedAt:Av.string().nullable().optional().describe("ISO 8601 timestamp"),createdAt:Av.string().describe("ISO 8601 timestamp"),updatedAt:Av.string().describe("ISO 8601 timestamp")}),$fu=p({name:"BRAND_CONTEXT_LIST",description:"List all brand contexts (company profiles) for the current organization.",annotations:{title:"List Brand Contexts",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:Av.object({includeArchived:Av.boolean().optional().describe("Include archived brands in the list")}),outputSchema:Av.object({items:Av.array(hg0)}),handler:async(i,u)=>{gi(u),await u.access.check();let t=u.organization?.id;if(!t)throw Error("Organization ID required (no active organization in context)");return{items:(await u.storage.brandContext.list(t,{includeArchived:i.includeArchived})).map((l)=>({...l,archivedAt:l.archivedAt instanceof Date?l.archivedAt.toISOString():l.archivedAt,createdAt:l.createdAt instanceof Date?l.createdAt.toISOString():l.createdAt,updatedAt:l.updatedAt instanceof Date?l.updatedAt.toISOString():l.updatedAt}))}}}),hfu=p({name:"BRAND_CONTEXT_GET",description:"Get a specific brand context by ID.",annotations:{title:"Get Brand Context",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:Av.object({id:Av.string().describe("Brand context ID")}),outputSchema:hg0.extend({organizationId:Av.string()}),handler:async(i,u)=>{gi(u),await u.access.check();let t=u.organization?.id;if(!t)throw Error("Organization ID required (no active organization in context)");let f=await u.storage.brandContext.get(i.id,t);if(!f)throw Error("Brand context not found");return{...f,archivedAt:f.archivedAt instanceof Date?f.archivedAt.toISOString():f.archivedAt,createdAt:f.createdAt instanceof Date?f.createdAt.toISOString():f.createdAt,updatedAt:f.updatedAt instanceof Date?f.updatedAt.toISOString():f.updatedAt}}})});import{z as $g}from"zod";var dg0,vfu,dfu,Dfu;var Dg0=O(()=>{fu();T$();dg0=TN.extend({organizationId:$g.string(),createdAt:$g.string().describe("ISO 8601 timestamp"),updatedAt:$g.string().describe("ISO 8601 timestamp")}),vfu=p({name:"BRAND_CONTEXT_CREATE",description:"Create a new brand context (company profile) for the current organization.",annotations:{title:"Create Brand Context",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!1},inputSchema:TN.omit({id:!0}),outputSchema:dg0,handler:async(i,u)=>{gi(u),await u.access.check();let t=u.organization?.id;if(!t)throw Error("Organization ID required (no active organization in context)");let f=await u.storage.brandContext.create(t,{name:i.name,domain:i.domain,overview:i.overview,logo:i.logo??null,favicon:i.favicon??null,ogImage:i.ogImage??null,fonts:i.fonts??null,colors:i.colors??null,images:i.images??null,metadata:i.metadata??null});return{...f,archivedAt:f.archivedAt instanceof Date?f.archivedAt.toISOString():f.archivedAt,createdAt:f.createdAt instanceof Date?f.createdAt.toISOString():f.createdAt,updatedAt:f.updatedAt instanceof Date?f.updatedAt.toISOString():f.updatedAt}}}),dfu=p({name:"BRAND_CONTEXT_UPDATE",description:"Update an existing brand context by ID.",annotations:{title:"Update Brand Context",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:TN.partial().required({id:!0}),outputSchema:dg0,handler:async(i,u)=>{gi(u),await u.access.check();let t=u.organization?.id;if(!t)throw Error("Organization ID required (no active organization in context)");if(!await u.storage.brandContext.get(i.id,t))throw Error("Brand context not found");let{id:l,...E}=i;if(E.isDefault===!0)await u.storage.brandContext.setDefault(l,t);let c=await u.storage.brandContext.update(l,t,{name:E.name,domain:E.domain,overview:E.overview,logo:E.logo!==void 0?E.logo??null:void 0,favicon:E.favicon!==void 0?E.favicon??null:void 0,ogImage:E.ogImage!==void 0?E.ogImage??null:void 0,fonts:E.fonts!==void 0?E.fonts??null:void 0,colors:E.colors!==void 0?E.colors??null:void 0,images:E.images!==void 0?E.images??null:void 0,metadata:E.metadata!==void 0?E.metadata??null:void 0,archivedAt:E.archivedAt!==void 0?E.archivedAt??null:void 0,isDefault:E.isDefault===!1?!1:void 0});return{...c,archivedAt:c.archivedAt instanceof Date?c.archivedAt.toISOString():c.archivedAt,createdAt:c.createdAt instanceof Date?c.createdAt.toISOString():c.createdAt,updatedAt:c.updatedAt instanceof Date?c.updatedAt.toISOString():c.updatedAt}}}),Dfu=p({name:"BRAND_CONTEXT_DELETE",description:"Archive a brand context by ID (soft delete).",annotations:{title:"Archive Brand Context",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:$g.object({id:$g.string().describe("Brand context ID")}),outputSchema:$g.object({success:$g.boolean()}),handler:async(i,u)=>{gi(u),await u.access.check();let t=u.organization?.id;if(!t)throw Error("Organization ID required (no active organization in context)");if(!await u.storage.brandContext.get(i.id,t))throw Error("Brand context not found");return await u.storage.brandContext.update(i.id,t,{archivedAt:new Date().toISOString(),isDefault:!1}),{success:!0}}})});async function Zhi(i,u,t){let f=i.trim();if(!f.startsWith("http"))f=`https://${f}`;let l=await fetch("https://api.firecrawl.dev/v1/scrape",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${u}`},body:JSON.stringify({url:f,formats:["branding"]})});if(!l.ok){let D=await l.text().catch(()=>"");throw Error(`Firecrawl API error: ${l.status} ${D.slice(0,200)}`)}let E=await l.json();if(!E.success||!E.data?.branding)return null;let c=E.data.branding,w=E.data.metadata??{},$=CXf(c,w);return{name:w.title?.split(/[|\u2013\u2014]|\s+-\s+/).map((D)=>D.trim()).filter(Boolean)?.slice().sort((D,_)=>D.length-_.length)[0]??w.ogSiteName??t??i,domain:i,overview:w.description??"",logo:$.logo,favicon:$.favicon,ogImage:$.ogImage,fonts:$.fonts,colors:$.colors,images:null,metadata:Object.keys($.metadata).length>0?$.metadata:null}}function CXf(i,u){let t=i.images??{},f=i.colors??{},l={};for(let[v,d]of Object.entries(f))if(typeof d==="string"&&d&&nXf.has(v))l[v]=d;let E={},w=(i.typography??{}).fontFamilies??{};for(let[v,d]of Object.entries(w))if(typeof d==="string"&&d){let D=bXf[v.toLowerCase()];if(D&&!E[D])E[D]=d}let $=i.fonts;if(Array.isArray($))for(let v of $){let d=v.family;if(typeof d==="string"&&d&&!E.body)E.body=d}let h={};for(let v of["typography","components","spacing","layout","animations","icons","tone","personality","colorScheme"])if(i[v]!==void 0)h[v]=i[v];return{logo:t.logo??null,favicon:t.favicon??null,ogImage:t.ogImage??u.ogImage??null,fonts:Object.keys(E).length>0?E:null,colors:Object.keys(l).length>0?l:null,metadata:h}}var nXf,bXf;var _fu=O(()=>{nXf=new Set(["primary","secondary","accent","background","foreground"]),bXf={heading:"heading",headings:"heading",head:"heading",title:"heading",body:"body",primary:"body",text:"body",code:"code",monospace:"code",mono:"code"}});import{z as Bhi}from"zod";var MXf,Nfu;var _g0=O(()=>{fu();_fu();T$();MXf=TN.pick({id:!0,name:!0,domain:!0,overview:!0,logo:!0,favicon:!0,ogImage:!0,fonts:!0,colors:!0}).extend({success:Bhi.boolean()}),Nfu=p({name:"BRAND_CONTEXT_EXTRACT",description:"Extract brand context (colors, fonts, logos) from a website URL using Firecrawl.",annotations:{title:"Extract Brand Context",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},inputSchema:Bhi.object({domain:Bhi.string().describe("Website domain to extract brand from"),brandId:Bhi.string().optional().describe("Existing brand context ID to update (creates new if omitted)")}),outputSchema:MXf,modelSummary:(i)=>i.success?`Brand saved (id=${i.id}, name=${i.name}, domain=${i.domain}). The UI rendered the logo, colors, fonts, and overview.`:"Brand extraction failed.",handler:async(i,u)=>{gi(u),await u.access.check();let t=u.organization?.id;if(!t)throw Error("Organization ID required (no active organization in context)");let f=u.firecrawlApiKey;if(!f)throw Error("FIRECRAWL_API_KEY is not configured. Set the environment variable to enable brand extraction.");let l=await Zhi(i.domain,f,i.domain);if(!l)throw Error("Firecrawl did not return branding data for this URL");let E={name:l.name,domain:l.domain,overview:l.overview,logo:l.logo,favicon:l.favicon,ogImage:l.ogImage,fonts:l.fonts,colors:l.colors,images:l.images,metadata:l.metadata},c=i.brandId?await(async()=>{if(!await u.storage.brandContext.get(i.brandId,t))throw Error("Brand context not found");return u.storage.brandContext.update(i.brandId,t,E)})():await u.storage.brandContext.create(t,E);return{id:c.id,name:c.name,domain:c.domain,overview:c.overview,logo:c.logo,favicon:c.favicon,ogImage:c.ogImage,fonts:c.fonts,colors:c.colors,success:!0}}})});function Ng0(i){let u=i.metadata??{};return{id:i.id,name:i.name,domain:i.domain||void 0,colors:i.colors??void 0,fonts:i.fonts??void 0,assets:i.logo||i.favicon||i.ogImage?{logo:i.logo??void 0,favicon:i.favicon??void 0,ogImage:i.ogImage??void 0}:void 0,overview:i.overview||void 0,tagline:typeof u.tagline==="string"?u.tagline:void 0,tone:typeof u.tone==="string"?u.tone:void 0,metadata:(()=>{let t=Object.fromEntries(Object.entries(u).filter(([f])=>f!=="tagline"&&f!=="tone"));return Object.keys(t).length>0?t:void 0})()}}var Ofu,Zfu;var Og0=O(()=>{ktu();fu();Ofu=p({name:"BRAND_GET",description:"Get a brand context by ID. Omit the ID to get the default brand for the organization.",annotations:{title:"Get Brand",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:Ehi,outputSchema:Ya,handler:async(i,u)=>{gi(u),await u.access.check();let t=u.organization?.id;if(!t)throw Error("Organization ID required (no active organization in context)");let f=i.id?await u.storage.brandContext.get(i.id,t):await u.storage.brandContext.getDefault(t);if(!f)throw Error(i.id?"Brand not found":"No default brand configured");return Ng0(f)}}),Zfu=p({name:"BRAND_LIST",description:"List all active brands for the current organization.",annotations:{title:"List Brands",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:chi,outputSchema:whi,handler:async(i,u)=>{gi(u),await u.access.check();let t=u.organization?.id;if(!t)throw Error("Organization ID required (no active organization in context)");return{items:(await u.storage.brandContext.list(t)).map(Ng0)}}})});import{resolveTxt as qXf}from"dns/promises";function Bfu(i){return`${VXf}.${i.toLowerCase()}`}function Zg0(){return`deco-verify-${crypto.randomUUID().replace(/-/g,"")}`}async function Bg0(i,u,t=qXf){if(!u)return!1;try{return(await t(Bfu(i))).some((l)=>l.join("").trim()===u)}catch{return!1}}var VXf="_deco-verify";var Fg0=()=>{};import{z as L1}from"zod";function UN(i){let u=i.verificationStatus==="pending"&&Boolean(i.verificationToken);return{id:i.id,domain:i.domain,joinMode:i.joinMode,verificationStatus:i.verificationStatus,verificationMethod:i.verificationMethod,verifiedAt:i.verifiedAt?new Date(i.verifiedAt).toISOString():null,recordName:u?Bfu(i.domain):null,recordValue:u?i.verificationToken:null}}function mXf(i){let u=i.toLowerCase().trim();if(!rXf.test(u))throw Error(`Invalid domain format: "${u}". Must be a valid domain like "acme.com"`);if(yv.has(u))throw Error(`Cannot claim generic email domain "${u}". Only corporate domains are allowed.`);return u}var rXf,Ffu,Fhi,gfu,Tfu,Ufu,Afu,yfu;var gg0=O(()=>{F$();Fg0();fu();rXf=/^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)+$/,Ffu=L1.enum(["off","auto","request"]),Fhi=L1.object({id:L1.string(),domain:L1.string(),joinMode:Ffu,verificationStatus:L1.enum(["pending","verified"]),verificationMethod:L1.enum(["email","dns"]).nullable(),verifiedAt:L1.string().nullable(),recordName:L1.string().nullable(),recordValue:L1.string().nullable()});gfu=p({name:"ORGANIZATION_DOMAIN_LIST",description:"List the email domains claimed by an organization.",annotations:{title:"List Organization Domains",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:L1.object({}),outputSchema:L1.object({domains:L1.array(Fhi)}),handler:async(i,u)=>{gi(u),await u.access.check();let t=Oi(u);return{domains:(await u.storage.organizationDomains.listByOrganizationId(t.id)).map(UN)}}}),Tfu=p({name:"ORGANIZATION_DOMAIN_ADD",description:"Claim an email domain for an organization. If the caller's verified email matches the domain it is trusted immediately; otherwise it requires DNS verification.",annotations:{title:"Add Organization Domain",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:L1.object({domain:L1.string().min(1).max(255).describe("Domain to claim, e.g. acme.com"),joinMode:Ffu.optional().describe("Initial join mode (only applied when the domain is trusted immediately via email match).")}),outputSchema:Fhi,handler:async(i,u)=>{gi(u),await u.access.check();let t=Oi(u),f=mXf(i.domain),E=u.auth.user?.email?.split("@")[1]?.toLowerCase(),c=Boolean(u.auth.user?.emailVerified)&&E===f,w=await u.storage.organizationDomains.getByOrgAndDomain(t.id,f);if(w){if(w.verificationStatus!=="verified"&&c){let h=await u.storage.organizationDomains.markVerified(w.id,"email");return UN(h)}return UN(w)}let $=c?await u.storage.organizationDomains.add(t.id,f,{joinMode:i.joinMode??"off",verificationStatus:"verified",verificationMethod:"email"}):await u.storage.organizationDomains.add(t.id,f,{joinMode:"off",verificationStatus:"pending",verificationToken:Zg0()});return UN($)}}),Ufu=p({name:"ORGANIZATION_DOMAIN_UPDATE",description:"Set the join mode for a claimed domain. Discoverable modes (auto/request) require the domain to be verified.",annotations:{title:"Update Organization Domain",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:L1.object({id:L1.string(),joinMode:Ffu}),outputSchema:Fhi,handler:async(i,u)=>{gi(u),await u.access.check();let t=Oi(u),f=await u.storage.organizationDomains.getById(i.id);if(!f||f.organizationId!==t.id)throw Error("Domain not found");if(i.joinMode!=="off"&&f.verificationStatus!=="verified")throw Error("Verify the domain before enabling auto-join or requests.");let l=await u.storage.organizationDomains.updateJoinMode(i.id,i.joinMode);return UN(l)}}),Afu=p({name:"ORGANIZATION_DOMAIN_VERIFY",description:"Check the DNS TXT record for a pending domain and mark it verified if present.",annotations:{title:"Verify Organization Domain",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},inputSchema:L1.object({id:L1.string()}),outputSchema:L1.object({verified:L1.boolean(),domain:Fhi}),handler:async(i,u)=>{gi(u),await u.access.check();let t=Oi(u),f=await u.storage.organizationDomains.getById(i.id);if(!f||f.organizationId!==t.id)throw Error("Domain not found");if(f.verificationStatus==="verified")return{verified:!0,domain:UN(f)};if(!f.verificationToken)throw Error("Domain has no pending DNS verification.");if(!await Bg0(f.domain,f.verificationToken))return{verified:!1,domain:UN(f)};let E=await u.storage.organizationDomains.markVerified(i.id,"dns");return{verified:!0,domain:UN(E)}}}),yfu=p({name:"ORGANIZATION_DOMAIN_REMOVE",description:"Remove a claimed domain from an organization.",annotations:{title:"Remove Organization Domain",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:L1.object({id:L1.string()}),outputSchema:L1.object({success:L1.boolean()}),handler:async(i,u)=>{gi(u),await u.access.check();let t=Oi(u),f=await u.storage.organizationDomains.getById(i.id);if(!f||f.organizationId!==t.id)throw Error("Domain not found");return await u.storage.organizationDomains.removeById(i.id),{success:!0}}})});function AN(i){return(i instanceof Error?i.message.toLowerCase():"").includes("already a member")}import{z as Sl}from"zod";var eXf,Pfu,Gfu,Ifu;var Tg0=O(()=>{fu();H4();eXf=Sl.object({id:Sl.string(),userId:Sl.string(),status:Sl.enum(["pending","approved","denied"]),createdAt:Sl.string(),user:Sl.object({id:Sl.string(),name:Sl.string(),email:Sl.string(),image:Sl.string().nullable()}).nullable()}),Pfu=p({name:"ORGANIZATION_JOIN_REQUEST_LIST",description:"List pending requests to join the organization.",annotations:{title:"List Join Requests",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:Sl.object({}),outputSchema:Sl.object({requests:Sl.array(eXf)}),handler:async(i,u)=>{gi(u),await u.access.check();let t=Oi(u);return{requests:(await u.storage.organizationJoinRequests.listPendingWithUser(t.id)).map((l)=>({id:l.id,userId:l.userId,status:l.status,createdAt:new Date(l.createdAt).toISOString(),user:l.user}))}}}),Gfu=p({name:"ORGANIZATION_JOIN_REQUEST_APPROVE",description:"Approve a pending join request, adding the user as a member.",annotations:{title:"Approve Join Request",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:Sl.object({requestId:Sl.string()}),outputSchema:Sl.object({success:Sl.boolean()}),handler:async(i,u)=>{gi(u),await u.access.check();let t=Oi(u),f=await u.storage.organizationJoinRequests.getById(i.requestId);if(!f||f.organizationId!==t.id)throw Error("Join request not found");if(f.status!=="pending")throw Error("Join request has already been decided");let l=Qu(u);if(!await u.storage.organizationJoinRequests.decide(f.id,"approved",l??f.userId))return{success:!0};try{await u.boundAuth.organization.addMember({organizationId:t.id,userId:f.userId,role:["user"]})}catch(c){if(!AN(c))throw c}if(l)mu.capture({distinctId:l,event:"organization_join_request_approved",groups:{organization:t.id},properties:{organization_id:t.id,user_id:f.userId}});return{success:!0}}}),Ifu=p({name:"ORGANIZATION_JOIN_REQUEST_DENY",description:"Deny a pending join request.",annotations:{title:"Deny Join Request",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:Sl.object({requestId:Sl.string()}),outputSchema:Sl.object({success:Sl.boolean()}),handler:async(i,u)=>{gi(u),await u.access.check();let t=Oi(u),f=await u.storage.organizationJoinRequests.getById(i.requestId);if(!f||f.organizationId!==t.id)throw Error("Join request not found");if(f.status!=="pending")throw Error("Join request has already been decided");let l=Qu(u);if(await u.storage.organizationJoinRequests.decide(f.id,"denied",l??f.userId)&&l)mu.capture({distinctId:l,event:"organization_join_request_denied",groups:{organization:t.id},properties:{organization_id:t.id,user_id:f.userId}});return{success:!0}}})});import{z as _w}from"zod";var xfu;var Ug0=O(()=>{H4();fu();A5();xfu=p({name:"ORGANIZATION_MEMBER_ADD",description:"Invite a member to the organization by email with an assigned role.",annotations:{title:"Add Organization Member",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:_w.object({organizationId:_w.string().optional(),userId:_w.string(),role:_w.array(_w.string())}),outputSchema:_w.object({id:_w.string(),organizationId:_w.string(),userId:_w.string(),role:_w.union([_w.string(),_w.array(_w.string())]),createdAt:_w.string().datetime().describe("ISO 8601 timestamp")}),handler:async(i,u)=>{gi(u),await u.access.check();let t=i.organizationId||u.organization?.id;if(!t)throw Error("Organization ID required (no active organization in context)");if(t!==u.organization?.id)throw Error("Organization ID does not match authenticated organization");let f=await u.db.selectFrom("member").select(["role"]).where("userId","=",Qu(u)??"").where("organizationId","=",t).executeTakeFirst();if(!t$i(f?.role,i.role))throw Error(`Insufficient privileges to assign role "${i.role.join(",")}"`);let l=await u.boundAuth.organization.addMember({organizationId:t,userId:i.userId,role:i.role});if(!l)throw Error("Failed to add member");let E=Qu(u);if(E)mu.capture({distinctId:E,event:"organization_member_added",groups:{organization:t},properties:{organization_id:t,added_user_id:i.userId,role:i.role}});return{...l,role:l.role,createdAt:l.createdAt instanceof Date?l.createdAt.toISOString():l.createdAt}}})});import{z as Rz}from"zod";var kfu;var Ag0=O(()=>{H4();fu();kfu=p({name:"ORGANIZATION_MEMBER_REMOVE",description:"Remove a member from the organization. Revokes all their access immediately.",annotations:{title:"Remove Organization Member",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:Rz.object({organizationId:Rz.string().optional(),memberIdOrEmail:Rz.string()}),outputSchema:Rz.object({success:Rz.boolean(),memberIdOrEmail:Rz.string()}),handler:async(i,u)=>{gi(u),await u.access.check();let t=i.organizationId||u.organization?.id;if(!t)throw Error("Organization ID required (no active organization in context)");if(t!==u.organization?.id)throw Error("Organization ID does not match authenticated organization");await u.boundAuth.organization.removeMember({organizationId:t,memberIdOrEmail:i.memberIdOrEmail});let f=Qu(u);if(f)mu.capture({distinctId:f,event:"organization_member_removed",groups:{organization:t},properties:{organization_id:t,member_id_or_email:i.memberIdOrEmail}});return{success:!0,memberIdOrEmail:i.memberIdOrEmail}}})});import{z as jc}from"zod";var jfu;var yg0=O(()=>{fu();jfu=p({name:"ORGANIZATION_MEMBER_LIST",description:"List all members in the organization with their roles.",annotations:{title:"List Organization Members",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:jc.object({limit:jc.number().optional(),offset:jc.number().optional()}),outputSchema:jc.object({members:jc.array(jc.object({id:jc.string(),organizationId:jc.string(),userId:jc.string(),role:jc.string(),createdAt:jc.string().datetime().describe("ISO 8601 timestamp"),user:jc.object({id:jc.string(),name:jc.string(),email:jc.string(),image:jc.string().optional()}).optional()}))}),handler:async(i,u)=>{gi(u),await u.access.check();let t=u.organization?.id;if(!t)throw Error("Organization ID required (no active organization in context)");let f=await u.boundAuth.organization.listMembers({organizationId:t,limit:i.limit,offset:i.offset});return{members:(Array.isArray(f)?f:[]).map((E)=>({...E,createdAt:E.createdAt instanceof Date?E.createdAt.toISOString():E.createdAt}))}}})});import{z as tE}from"zod";var Xfu;var Pg0=O(()=>{H4();fu();A5();Xfu=p({name:"ORGANIZATION_MEMBER_UPDATE_ROLE",description:"Change a member's role (e.g., admin, member) within the organization.",annotations:{title:"Update Member Role",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:tE.object({organizationId:tE.string().optional(),memberId:tE.string(),role:tE.array(tE.string())}),outputSchema:tE.object({id:tE.string(),organizationId:tE.string(),userId:tE.string(),role:tE.union([tE.string(),tE.array(tE.string())]),createdAt:tE.string().datetime().describe("ISO 8601 timestamp"),user:tE.object({email:tE.string(),name:tE.string(),image:tE.string().optional()})}),handler:async(i,u)=>{gi(u),await u.access.check();let t=i.organizationId||u.organization?.id;if(!t)throw Error("Organization ID required (no active organization in context)");let f=await u.db.selectFrom("member").select(["role"]).where("userId","=",Qu(u)??"").where("organizationId","=",t).executeTakeFirst();if(!t$i(f?.role,i.role))throw Error(`Insufficient privileges to assign role "${i.role.join(",")}"`);let l=await u.boundAuth.organization.updateMemberRole({organizationId:t,memberId:i.memberId,role:i.role});if(!l)throw Error("Failed to update member role");u.invalidateMemberRole?.(l.userId,t);let E=Qu(u);if(E)mu.capture({distinctId:E,event:"organization_member_role_updated",groups:{organization:t},properties:{organization_id:t,member_id:i.memberId,target_user_id:l.userId,new_role:Array.isArray(i.role)?i.role.join(","):i.role}});return{...l,createdAt:l.createdAt instanceof Date?l.createdAt.toISOString():l.createdAt}}})});async function Gg0(){if(ra&&Date.now()-ra.fetchedAt<600000)return ra.rate;try{let u=await(await fetch("https://economia.awesomeapi.com.br/json/last/USD-BRL",{signal:AbortSignal.timeout(5000)})).json(),t=parseFloat(u.USDBRL?.bid??"");if(Number.isNaN(t)||t<=0)throw Error("Invalid rate");return ra={rate:t,fetchedAt:Date.now()},t}catch{return ra?.rate??5.5}}function Ig0(i,u,t){if(u==="brl")return Math.round(i/t);return i}var ra=null;function Jfu(i,u="",t=new URLSearchParams){for(let[f,l]of Object.entries(i)){if(l===void 0||l===null)continue;let E=u?`${u}[${f}]`:f;if(Array.isArray(l))l.forEach((c,w)=>{if(typeof c==="object"&&c!==null)Jfu(c,`${E}[${w}]`,t);else t.append(`${E}[${w}]`,String(c))});else if(typeof l==="object")Jfu(l,E,t);else t.append(E,String(l))}return t}async function yN(i,u){let t=vu().stripeSecretKey;if(!t)throw new Nw(503,"billing is not configured");let f=u?.params?Jfu(u.params).toString():void 0,l=await fetch(`${aXf}${i}`,{method:u?.method??(f?"POST":"GET"),headers:{Authorization:`Bearer ${t}`,...f&&{"Content-Type":"application/x-www-form-urlencoded"}},body:f,signal:AbortSignal.timeout(oXf)}),E=await l.json().catch(()=>({}));if(!l.ok){let c=E.error?.message??`HTTP ${l.status}`;throw new Nw(l.status,c)}return E}async function xg0(i){let u=vu().stripeSeatPriceId;if(!u)throw new Nw(503,"billing is not configured");let t=await yN("/checkout/sessions",{params:{mode:"subscription",line_items:[{price:u,quantity:i.quantity}],success_url:i.successUrl,cancel_url:i.cancelUrl,metadata:{orgId:i.organizationId},subscription_data:{metadata:{orgId:i.organizationId}}}});if(!t.url)throw new Nw(500,"checkout session lacks url");return{url:t.url}}async function Kfu(i){let t=(await yN(`/subscriptions/${encodeURIComponent(i)}`)).items?.data??[],f=vu().stripeSeatPriceId,l=f?t.find((E)=>E.price?.id===f):t.length===1?t[0]:void 0;if(!l)throw new Nw(500,"subscription has no seat item");return{itemId:l.id,quantity:l.quantity??0}}async function kg0(i){let{itemId:u}=await Kfu(i.subscriptionId),t=await yN("/invoices/create_preview",{params:{subscription:i.subscriptionId,subscription_details:{items:[{id:u,quantity:i.quantity}],proration_behavior:"always_invoice"}}});return{amountDueCents:t.amount_due??0,currency:t.currency??"usd"}}function sXf(i,u){return Math.round(i*(1+u/100))}async function jg0(i){let u=sXf(i.amountCents,i.feePercent),t=Ig0(i.amountCents,i.currency,await Gg0()),f=i.currency==="brl"?`Studio AI credits (R$ ${(i.amountCents/100).toFixed(2)})`:`Studio AI credits ($${(i.amountCents/100).toFixed(2)})`,l=await yN("/checkout/sessions",{params:{mode:"payment",...i.customerId&&{customer:i.customerId},line_items:[{quantity:1,price_data:{currency:i.currency,unit_amount:u,product_data:{name:f}}}],success_url:i.successUrl,cancel_url:i.cancelUrl,metadata:{kind:"topup",orgId:i.organizationId,creditCents:t}}});if(!l.url)throw new Nw(500,"checkout session lacks url");return{url:l.url}}async function Xg0(i){let u=await yN("/billing_portal/sessions",{params:{customer:i.customerId,return_url:i.returnUrl}});if(!u.url)throw new Nw(500,"portal session lacks url");return{url:u.url}}async function Jg0(i){let{itemId:u}=await Kfu(i.subscriptionId);await yN(`/subscriptions/${encodeURIComponent(i.subscriptionId)}`,{params:{items:[{id:u,quantity:i.quantity}],proration_behavior:"always_invoice",payment_behavior:"pending_if_incomplete"}})}async function Kg0(i){await yN(`/subscriptions/${encodeURIComponent(i)}`,{method:"DELETE"})}async function Yg0(i){if(i.targetQuantity<1)return!1;let{itemId:u,quantity:t}=await Kfu(i.subscriptionId);if(t===i.targetQuantity)return!1;return await yN(`/subscriptions/${encodeURIComponent(i.subscriptionId)}`,{params:{items:[{id:u,quantity:i.targetQuantity}],proration_behavior:"always_invoice",payment_behavior:"pending_if_incomplete"}}),!0}var aXf="https://api.stripe.com/v1",Nw,oXf=15000;var nz=O(()=>{R0();Nw=class Nw extends Error{status;constructor(i,u){super(`Stripe API ${i}: ${u}`);this.status=i;this.name="StripeApiError"}}});import{z as Ll}from"zod";var pXf,Yfu,Wfu;var Wg0=O(()=>{nz();qL();fu();YL();pXf=Ll.object({legacy:Ll.boolean(),billingMode:Ll.string(),status:Ll.string(),includedReportUrl:Ll.string().nullable()}),Yfu=p({name:"ORGANIZATION_SEATS_GET",description:"Get the organization's billing identity and which members hold paid seats.",annotations:{title:"Get Organization Seats",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:Ll.object({}),outputSchema:Ll.object({billing:pXf.nullable(),paidSeatUserIds:Ll.array(Ll.string())}),handler:async(i,u)=>{gi(u),await u.access.check();let t=u.organization?.id;if(!t)throw Error("Organization context required");let[f,l]=await Promise.all([u.storage.organizationBilling.getBilling(t),u.storage.organizationBilling.listPaidSeatUserIds(t)]);return{billing:f?{legacy:f.legacy,billingMode:f.billingMode,status:f.status,includedReportUrl:f.includedReportUrl}:null,paidSeatUserIds:l}}}),Wfu=p({name:"ORGANIZATION_SEATS_SET",description:"Set members' seats (paid/free). Invoiced organizations apply directly; self-serve organizations with an active subscription also charge the prorated difference on the saved card (preview it with ORGANIZATION_SEATS_PREVIEW first).",annotations:{title:"Set Organization Seats",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:Ll.object({seats:Ll.array(Ll.object({userId:Ll.string().min(1),seat:Ll.enum(["paid","free"])})).min(1).max(200)}),outputSchema:Ll.object({applied:Ll.array(Ll.object({userId:Ll.string(),seat:Ll.enum(["paid","free"])})),paidSeatCount:Ll.number(),benefitsSyncQueued:Ll.boolean()}),handler:async(i,u)=>{gi(u),await u.access.check();let t=u.organization?.id;if(!t)throw Error("Organization context required");let f=Qu(u);if(!f)throw Error("User ID required");let l=await u.storage.organizationBilling.getBilling(t);if(!l||l.legacy)throw Error("This organization is on the legacy plan \u2014 seats do not apply.");let E=ML(l)?l.stripeSubscriptionId:null,c;try{c=await u.storage.organizationBilling.setSeats(t,i.seats,f,{markBenefitsPending:UB()})}catch($){if($ instanceof K6i)throw Error($.message);throw $}if(E)try{await Jg0({subscriptionId:E,quantity:c.paidSeatCount})}catch($){let h=$ instanceof Nw?$.message:"Stripe update failed";throw Error(`Seats saved, but updating the subscription failed: ${h}. Apply again to retry the charge.`)}let w=!1;if(c.benefitsReferenceId)try{await sD(t,c.benefitsReferenceId,"apply"),w=!0}catch($){console.error("Failed to enqueue benefit sync (sweep covers):",$)}return{applied:c.applied,paidSeatCount:c.paidSeatCount,benefitsSyncQueued:w}}})});import{z as H2}from"zod";var Sfu,Lfu;var Sg0=O(()=>{nz();Ml();fu();Sfu=p({name:"ORGANIZATION_BILLING_CHECKOUT_START",description:"Start the organization's seat subscription: creates a Stripe Checkout session for the current paid-seat count and returns its URL.",annotations:{title:"Start Billing Checkout",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!0},inputSchema:H2.object({}),outputSchema:H2.object({url:H2.string(),quantity:H2.number()}),handler:async(i,u)=>{gi(u),await u.access.check();let t=u.organization?.id,f=u.organization?.slug;if(!t||!f)throw Error("Organization context required");let[l,E]=await Promise.all([u.storage.organizationBilling.getBilling(t),u.storage.organizationBilling.listPaidSeatUserIds(t)]);if(!l||l.legacy)throw Error("This organization is on the legacy plan \u2014 no subscription needed.");if(l.billingMode!=="self_serve")throw Error("Contract-billed organizations do not use checkout.");if(l.status==="active")throw Error("This organization already has an active subscription \u2014 seat changes apply directly.");if(l.stripeSubscriptionId)throw Error("This organization still has a subscription on file \u2014 settle or cancel it before starting a new checkout.");let c=E.length;if(c<1)throw Error("Mark at least one member as a paid seat before subscribing.");let w=`${gE()}/${encodeURIComponent(f)}/members`,{url:$}=await xg0({organizationId:t,quantity:c,successUrl:`${w}?checkout=success`,cancelUrl:`${w}?checkout=canceled`});return{url:$,quantity:c}}}),Lfu=p({name:"ORGANIZATION_SEATS_PREVIEW",description:"Preview what the organization pays now for changing its paid-seat count (Stripe prorated invoice preview). Read-only \u2014 nothing is charged.",annotations:{title:"Preview Seat Change",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},inputSchema:H2.object({quantity:H2.number().int().min(1).max(1000)}),outputSchema:H2.object({amountDueCents:H2.number(),currency:H2.string()}),handler:async(i,u)=>{gi(u),await u.access.check();let t=u.organization?.id;if(!t)throw Error("Organization context required");let f=await u.storage.organizationBilling.getBilling(t);if(!ML(f))throw Error("Seat previews need an active self-serve subscription.");return await kg0({subscriptionId:f.stripeSubscriptionId,quantity:i.quantity})}})});import{z as PN}from"zod";var Qfu,Hfu;var Lg0=O(()=>{nz();qL();Ml();fu();aB();Qfu=p({name:"ORGANIZATION_BILLING_PORTAL",description:"Open the organization's Stripe billing portal (manage card, invoices, cancellation). Returns the portal URL.",annotations:{title:"Open Billing Portal",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!0},inputSchema:PN.object({}),outputSchema:PN.object({url:PN.string()}),handler:async(i,u)=>{gi(u),await u.access.check();let t=Oi(u);if(!t.slug)throw Error("Organization context required");let f=await u.storage.organizationBilling.getBilling(t.id);if(!f?.stripeCustomerId)throw Error("This organization has no billing account yet \u2014 subscribe first.");if(f.legacy||f.billingMode!=="self_serve")throw Error("This organization's billing is managed by deco \u2014 contact support.");try{return await Xg0({customerId:f.stripeCustomerId,returnUrl:`${gE()}/${encodeURIComponent(t.slug)}/members`})}catch(l){if(l instanceof Nw)throw Error(l.message);throw l}}}),Hfu=p({name:"ORGANIZATION_INCLUDED_REPORT_SET",description:"Choose which site's weekly report re-run the organization's subscription includes (null clears it).",annotations:{title:"Set Included Report Site",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:PN.object({url:PN.string().trim().min(1).max(255).nullable()}),outputSchema:PN.object({includedReportUrl:PN.string().nullable(),benefitsSyncQueued:PN.boolean()}),handler:async(i,u)=>{gi(u),await u.access.check();let t=Oi(u),f=await u.storage.organizationBilling.getBilling(t.id);if(!f||f.legacy)throw Error("This organization is on the legacy plan \u2014 included reports do not apply.");let l=i.url===null?null:L3i(i.url);if(i.url!==null&&!l)throw Error(`"${i.url}" is not a valid site URL.`);let{updated:E,benefitsReferenceId:c}=await u.storage.organizationBilling.setIncludedReportUrl(t.id,l,{markBenefitsPending:UB()});if(!E)throw Error("Organization billing row missing.");let w=!1;if(c)try{await sD(t.id,c,"apply"),w=!0}catch($){console.error("Failed to enqueue benefit sync (sweep covers):",$)}return{includedReportUrl:l,benefitsSyncQueued:w}}})});import{z as ma}from"zod";function iJf(i){return`[CREDITS] Paid report runs need at least $${(Qg0/100).toFixed(2)} of AI credit balance \u2014 current balance is $${(i/100).toFixed(2)}. Top up and try again.`}var Qg0=500,zfu;var Hg0=O(()=>{fri();fu();$8();_9();aB();zfu=p({name:"ORGANIZATION_REPORT_RUN_PAID",description:"Trigger a paid report run for one of the organization's sites, billed against its AI credits (requires at least $5 of balance; the run's real cost plus markup is debited at completion).",annotations:{title:"Run Paid Report",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!0},inputSchema:ma.object({url:ma.string().trim().min(1).max(255).optional()}),outputSchema:ma.object({url:ma.string(),started:ma.boolean()}),handler:async(i,u)=>{gi(u),await u.access.check();let t=Oi(u),f=Qu(u);if(!f)throw Error("User ID required");if(!uV())throw Error("Reports are not available on this deployment.");let l;if(i.url)l=L3i(i.url);else l=(await u.storage.organizationBilling.getBilling(t.id))?.includedReportUrl??null;if(!l)throw Error(i.url?`"${i.url}" is not a valid site URL.`:"No site chosen \u2014 pass a url or set the included report site first.");let E=x6().deco;if(!E?.getCreditsBalance)throw Error("AI credit balance is not available on this deployment.");let c=await Hd(f,u.auth.user?.email),{balanceCents:w}=await E.getCreditsBalance(c,t.id);if(!(w>=Qg0))throw Error(iJf(w??0));return await Iu0({host:l,organizationId:t.id}),{url:l,started:!0}}})});var zg0=O(()=>{ug0();tg0();fg0();lg0();Eg0();wg0();$g0();vg0();Dg0();_g0();Og0();gg0();Tg0();Ug0();Ag0();yg0();Pg0();Wg0();Sg0();Lg0();Hg0()});var U$="super-agent",Rg0="task-board.item.updated",ng0="task-board.item.deleted";import{z as Pf}from"zod";var ea,hg,tJf,bg0,bz;var vg=O(()=>{ea=Pf.enum(["triage","todo","in_progress","in_review","done"]),hg=Pf.enum(["none","low","medium","high","urgent"]),tJf=Pf.object({threadId:Pf.string(),virtualMcpId:Pf.string().nullable(),status:Pf.enum(["in_progress","requires_action","failed","completed","expired"]).nullable(),title:Pf.string().nullable(),lastMessage:Pf.string().nullable(),hasPreview:Pf.boolean(),hasMessages:Pf.boolean(),createdAt:Pf.string()}),bg0=Pf.object({url:Pf.string(),number:Pf.number(),repoOwner:Pf.string(),repoName:Pf.string(),createdAt:Pf.string(),title:Pf.string().nullable(),body:Pf.string().nullable(),state:Pf.enum(["open","closed"]).nullable(),draft:Pf.boolean().nullable(),merged:Pf.boolean().nullable()}),bz=Pf.object({id:Pf.string(),organizationId:Pf.string(),title:Pf.string(),description:Pf.string().nullable(),status:ea,priority:hg,assigneeId:Pf.string().nullable(),assignedBy:Pf.string().nullable(),dueDate:Pf.string().datetime().nullable(),sortOrder:Pf.number(),threads:Pf.array(tJf),createdBy:Pf.string(),createdAt:Pf.string().datetime(),updatedBy:Pf.string(),updatedAt:Pf.string().datetime()})});async function ghi(i,u,t){if(t===U$)return;let{members:f}=await i.boundAuth.organization.listMembers({organizationId:u,filterField:"userId",filterValue:t});if(!f.some((l)=>l.userId===t))throw Error("assigneeId is not a member of the organization")}var Rfu=O(()=>{vg()});async function nfu(i,u,t){let f;try{return await Promise.race([i.aiProviders.listModels(u,t),new Promise((E,c)=>{f=setTimeout(()=>c(Error("listModels timeout")),fJf)})])}finally{if(f)clearTimeout(f)}}function lJf(i,u){switch(i){case"fast":return u.chat.fast;case"smart":return u.chat.smart;case"thinking":return u.chat.thinking;case"image":return u.image;case"web_search":return u.webSearch;case"deep_research":return u.deepResearch}}function bfu(i,u,t){let f=i.find((l)=>l.modelId===u);return{title:f?.title??t??u,providerId:f?.providerId,capabilities:f?.capabilities,limits:f?.limits??null}}async function Z3(i,u,t){let f=i.organization?.id;if(!f)throw Error("resolveTier called without an organization");let E=(await i.storage.organizationSettings.get(f))?.simple_mode?.tiers?.[u]??null,c=i.auth?.user?.id,w=_8.safeParse(u),$=t?.applyUserPrefs&&w.success&&c?(await i.storage.userModelPreferences.get(c,f))?.tiers?.[w.data]??null:null,h=await i.storage.aiProviderKeys.list({organizationId:f});for(let N of[$,E])if(N&&h.some((Z)=>Z.id===N.keyId)){let Z=await nfu(i,N.keyId,f).catch(()=>[]);return{credentialId:N.keyId,modelId:N.modelId,modelMeta:bfu(Z,N.modelId,N.title)}}if(h.length===0)throw new Cz(u);let v={};await Promise.all(h.map(async(N)=>{v[N.id]=await nfu(i,N.id,f).catch(()=>[])}));let d=h.map((N)=>({id:N.id,providerId:N.providerId,label:N.label,presetId:N.presetId,createdBy:N.createdBy,createdAt:N.createdAt})),D=Nu0(d,v),_=lJf(u,D);if(!_)throw new Cz(u);return{credentialId:_.keyId,modelId:_.modelId,modelMeta:bfu(v[_.keyId]??[],_.modelId,_.title)}}async function Cg0(i,u,t){let f=i.organization?.id;if(!f)throw Error("resolveSpecificModel called without an organization");let l=await nfu(i,u,f).catch(()=>[]);return{credentialId:u,modelId:t,modelMeta:bfu(l,t)}}async function H5(i,u){try{return await Z3(i,u)}catch(t){if(t instanceof Cz)return null;return console.warn(`[resolveTier] tier "${u}" resolution failed:`,t),null}}var Cz,fJf=5000;var GN=O(()=>{T$();Rt();Cz=class Cz extends Error{tier;constructor(i){super(`No model available for tier "${i}". Connect a provider or configure the tier in organization settings.`);this.tier=i;this.name="TierUnavailableError"}}});function Thi(i){return i.sandboxProviderKind==="agent-sandbox"&&i.harnessId==="decopilot"}function Mg0(i){return i.harnessId==="decopilot"&&(i.sandboxProviderKind==null||i.sandboxProviderKind==="agent-sandbox")}function cJf(i){return{type:"data-run-status",id:"run-status",data:{stage:i}}}function qg0(i){if(!i||typeof i!=="object")return!1;return i.type==="data-run-status"}async function z2(i,u,t){if(!i)return;try{await i.publishRawChunk(u,cJf(t))}catch{}}var EJf,aa,G0l;var oa=O(()=>{EJf=["waiting-runner","starting-run","gathering-context","preparing-tools","starting-assistant","analyzing-scope"],aa=["gathering-context","preparing-tools","starting-assistant","analyzing-scope"],G0l=new Set(EJf)});function Uhi(){return crypto.randomUUID()}var Mfu=Y((k0l,mg0)=>{var{defineProperty:Cfu,getOwnPropertyDescriptor:wJf,getOwnPropertyNames:$Jf}=Object,hJf=Object.prototype.hasOwnProperty,vJf=(i,u)=>{for(var t in u)Cfu(i,t,{get:u[t],enumerable:!0})},dJf=(i,u,t,f)=>{if(u&&typeof u==="object"||typeof u==="function"){for(let l of $Jf(u))if(!hJf.call(i,l)&&l!==t)Cfu(i,l,{get:()=>u[l],enumerable:!(f=wJf(u,l))||f.enumerable})}return i},DJf=(i)=>dJf(Cfu({},"__esModule",{value:!0}),i),Vg0={};vJf(Vg0,{SYMBOL_FOR_REQ_CONTEXT:()=>rg0,getContext:()=>_Jf});mg0.exports=DJf(Vg0);var rg0=Symbol.for("@vercel/request-context");function _Jf(){return globalThis[rg0]?.get?.()??{}}});var sa=Y((j0l,og0)=>{var{defineProperty:qfu,getOwnPropertyDescriptor:NJf,getOwnPropertyNames:OJf}=Object,ZJf=Object.prototype.hasOwnProperty,BJf=(i,u)=>{for(var t in u)qfu(i,t,{get:u[t],enumerable:!0})},FJf=(i,u,t,f)=>{if(u&&typeof u==="object"||typeof u==="function"){for(let l of OJf(u))if(!ZJf.call(i,l)&&l!==t)qfu(i,l,{get:()=>u[l],enumerable:!(f=NJf(u,l))||f.enumerable})}return i},gJf=(i)=>FJf(qfu({},"__esModule",{value:!0}),i),eg0={};BJf(eg0,{VercelOidcTokenError:()=>ag0});og0.exports=gJf(eg0);class ag0 extends Error{constructor(i,u){super(i);this.name="VercelOidcTokenError",this.cause=u}toString(){if(this.cause)return`${this.name}: ${this.message}: ${this.cause}`;return`${this.name}: ${this.message}`}}});var uT0=Y((X0l,iT0)=>{var{create:TJf,defineProperty:Ahi,getOwnPropertyDescriptor:UJf,getOwnPropertyNames:AJf,getPrototypeOf:yJf}=Object,PJf=Object.prototype.hasOwnProperty,GJf=(i,u)=>{for(var t in u)Ahi(i,t,{get:u[t],enumerable:!0})},sg0=(i,u,t,f)=>{if(u&&typeof u==="object"||typeof u==="function"){for(let l of AJf(u))if(!PJf.call(i,l)&&l!==t)Ahi(i,l,{get:()=>u[l],enumerable:!(f=UJf(u,l))||f.enumerable})}return i},rfu=(i,u,t)=>(t=i!=null?TJf(yJf(i)):{},sg0(u||!i||!i.__esModule?Ahi(t,"default",{value:i,enumerable:!0}):t,i)),IJf=(i)=>sg0(Ahi({},"__esModule",{value:!0}),i),pg0={};GJf(pg0,{findRootDir:()=>jJf,getUserDataDir:()=>XJf});iT0.exports=IJf(pg0);var pa=rfu(Fi("path")),xJf=rfu(Fi("fs")),Vfu=rfu(Fi("os")),kJf=sa();function jJf(){try{let i=process.cwd();while(i!==pa.default.dirname(i)){let u=pa.default.join(i,".vercel");if(xJf.default.existsSync(u))return i;i=pa.default.dirname(i)}}catch(i){throw new kJf.VercelOidcTokenError("Token refresh only supported in node server environments")}return null}function XJf(){if(process.env.XDG_DATA_HOME)return process.env.XDG_DATA_HOME;switch(Vfu.default.platform()){case"darwin":return pa.default.join(Vfu.default.homedir(),"Library/Application Support");case"linux":return pa.default.join(Vfu.default.homedir(),".local/share");case"win32":if(process.env.LOCALAPPDATA)return process.env.LOCALAPPDATA;return null;default:return null}}});var $T0=Y((J0l,wT0)=>{var{create:JJf,defineProperty:yhi,getOwnPropertyDescriptor:KJf,getOwnPropertyNames:YJf,getPrototypeOf:WJf}=Object,SJf=Object.prototype.hasOwnProperty,LJf=(i,u)=>{for(var t in u)yhi(i,t,{get:u[t],enumerable:!0})},tT0=(i,u,t,f)=>{if(u&&typeof u==="object"||typeof u==="function"){for(let l of YJf(u))if(!SJf.call(i,l)&&l!==t)yhi(i,l,{get:()=>u[l],enumerable:!(f=KJf(u,l))||f.enumerable})}return i},fT0=(i,u,t)=>(t=i!=null?JJf(WJf(i)):{},tT0(u||!i||!i.__esModule?yhi(t,"default",{value:i,enumerable:!0}):t,i)),QJf=(i)=>tT0(yhi({},"__esModule",{value:!0}),i),lT0={};LJf(lT0,{isValidAccessToken:()=>nJf,readAuthConfig:()=>zJf,writeAuthConfig:()=>RJf});wT0.exports=QJf(lT0);var io=fT0(Fi("fs")),ET0=fT0(Fi("path")),HJf=uo();function cT0(){let i=(0,HJf.getVercelDataDir)();if(!i)throw Error(`Unable to find Vercel CLI data directory. Your platform: ${process.platform}. Supported: darwin, linux, win32.`);return ET0.join(i,"auth.json")}function zJf(){try{let i=cT0();if(!io.existsSync(i))return null;let u=io.readFileSync(i,"utf8");if(!u)return null;return JSON.parse(u)}catch(i){return null}}function RJf(i){let u=cT0(),t=ET0.dirname(u);if(!io.existsSync(t))io.mkdirSync(t,{mode:504,recursive:!0});io.writeFileSync(u,JSON.stringify(i,null,2),{mode:384})}function nJf(i,u=0){if(!i.token)return!1;if(typeof i.expiresAt!=="number")return!0;let t=Math.floor(Date.now()/1000),f=u/1000;return i.expiresAt>=t+f}});var DT0=Y((K0l,dT0)=>{var{defineProperty:afu,getOwnPropertyDescriptor:bJf,getOwnPropertyNames:CJf}=Object,MJf=Object.prototype.hasOwnProperty,qJf=(i,u)=>{for(var t in u)afu(i,t,{get:u[t],enumerable:!0})},VJf=(i,u,t,f)=>{if(u&&typeof u==="object"||typeof u==="function"){for(let l of CJf(u))if(!MJf.call(i,l)&&l!==t)afu(i,l,{get:()=>u[l],enumerable:!(f=bJf(u,l))||f.enumerable})}return i},rJf=(i)=>VJf(afu({},"__esModule",{value:!0}),i),hT0={};qJf(hT0,{processTokenResponse:()=>sJf,refreshTokenRequest:()=>oJf});dT0.exports=rJf(hT0);var mfu=Fi("os"),mJf="https://vercel.com",eJf="cl_HYyOPBNtFMfHhaUn9L4QPfTZz6TP47bp",vT0=`@vercel/oidc node-${process.version} ${(0,mfu.platform)()} (${(0,mfu.arch)()}) ${(0,mfu.hostname)()}`,efu=null;async function aJf(){if(efu)return efu;let i=`${mJf}/.well-known/openid-configuration`,u=await fetch(i,{headers:{"user-agent":vT0}});if(!u.ok)throw Error("Failed to discover OAuth endpoints");let t=await u.json();if(!t||typeof t.token_endpoint!=="string")throw Error("Invalid OAuth discovery response");let f=t.token_endpoint;return efu=f,f}async function oJf(i){let u=await aJf();return await fetch(u,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded","user-agent":vT0},body:new URLSearchParams({client_id:eJf,grant_type:"refresh_token",...i})})}async function sJf(i){let u=await i.json();if(!i.ok){let t=typeof u==="object"&&u&&"error"in u?String(u.error):"Token refresh failed";return[Error(t)]}if(typeof u!=="object"||u===null)return[Error("Invalid token response")];if(typeof u.access_token!=="string")return[Error("Missing access_token in response")];if(u.token_type!=="Bearer")return[Error("Invalid token_type in response")];if(typeof u.expires_in!=="number")return[Error("Missing expires_in in response")];return[null,u]}});var sfu=Y((Y0l,ZT0)=>{var{defineProperty:ofu,getOwnPropertyDescriptor:pJf,getOwnPropertyNames:iKf}=Object,uKf=Object.prototype.hasOwnProperty,tKf=(i,u)=>{for(var t in u)ofu(i,t,{get:u[t],enumerable:!0})},fKf=(i,u,t,f)=>{if(u&&typeof u==="object"||typeof u==="function"){for(let l of iKf(u))if(!uKf.call(i,l)&&l!==t)ofu(i,l,{get:()=>u[l],enumerable:!(f=pJf(u,l))||f.enumerable})}return i},lKf=(i)=>fKf(ofu({},"__esModule",{value:!0}),i),_T0={};tKf(_T0,{AccessTokenMissingError:()=>NT0,RefreshAccessTokenFailedError:()=>OT0});ZT0.exports=lKf(_T0);class NT0 extends Error{constructor(){super("No authentication found. Please log in with the Vercel CLI (vercel login).");this.name="AccessTokenMissingError"}}class OT0 extends Error{constructor(i){super("Failed to refresh authentication token.",{cause:i});this.name="RefreshAccessTokenFailedError"}}});var uo=Y((W0l,UT0)=>{var{create:EKf,defineProperty:Phi,getOwnPropertyDescriptor:cKf,getOwnPropertyNames:wKf,getPrototypeOf:$Kf}=Object,hKf=Object.prototype.hasOwnProperty,vKf=(i,u)=>{for(var t in u)Phi(i,t,{get:u[t],enumerable:!0})},FT0=(i,u,t,f)=>{if(u&&typeof u==="object"||typeof u==="function"){for(let l of wKf(u))if(!hKf.call(i,l)&&l!==t)Phi(i,l,{get:()=>u[l],enumerable:!(f=cKf(u,l))||f.enumerable})}return i},gT0=(i,u,t)=>(t=i!=null?EKf($Kf(i)):{},FT0(u||!i||!i.__esModule?Phi(t,"default",{value:i,enumerable:!0}):t,i)),dKf=(i)=>FT0(Phi({},"__esModule",{value:!0}),i),TT0={};vKf(TT0,{assertVercelOidcTokenResponse:()=>pfu,findProjectInfo:()=>OKf,getTokenPayload:()=>FKf,getVercelDataDir:()=>DKf,getVercelOidcToken:()=>NKf,getVercelToken:()=>_Kf,isExpired:()=>gKf,loadToken:()=>BKf,saveToken:()=>ZKf});UT0.exports=dKf(TT0);var to=gT0(Fi("path")),dg=gT0(Fi("fs")),Vz=sa(),Ghi=uT0(),Mz=$T0(),BT0=DT0(),qz=sfu();function DKf(){let u=(0,Ghi.getUserDataDir)();if(!u)return null;return to.join(u,"com.vercel.cli")}async function _Kf(i){let u=(0,Mz.readAuthConfig)();if(!u?.token)throw new qz.AccessTokenMissingError;if((0,Mz.isValidAccessToken)(u,i?.expirationBufferMs))return u.token;if(!u.refreshToken)throw(0,Mz.writeAuthConfig)({}),new qz.RefreshAccessTokenFailedError("No refresh token available");try{let t=await(0,BT0.refreshTokenRequest)({refresh_token:u.refreshToken}),[f,l]=await(0,BT0.processTokenResponse)(t);if(f||!l)throw(0,Mz.writeAuthConfig)({}),new qz.RefreshAccessTokenFailedError(f);let E={token:l.access_token,expiresAt:Math.floor(Date.now()/1000)+l.expires_in};if(l.refresh_token)E.refreshToken=l.refresh_token;return(0,Mz.writeAuthConfig)(E),E.token}catch(t){if((0,Mz.writeAuthConfig)({}),t instanceof qz.AccessTokenMissingError||t instanceof qz.RefreshAccessTokenFailedError)throw t;throw new qz.RefreshAccessTokenFailedError(t)}}async function NKf(i,u,t){let f=`https://api.vercel.com/v1/projects/${u}/token?source=vercel-oidc-refresh${t?`&teamId=${t}`:""}`,l=await fetch(f,{method:"POST",headers:{Authorization:`Bearer ${i}`}});if(!l.ok)throw new Vz.VercelOidcTokenError(`Failed to refresh OIDC token: ${l.statusText}`);let E=await l.json();return pfu(E),E}function pfu(i){if(!i||typeof i!=="object")throw TypeError("Vercel OIDC token is malformed. Expected an object. Please run `vc env pull` and try again");if(!("token"in i)||typeof i.token!=="string")throw TypeError("Vercel OIDC token is malformed. Expected a string-valued token property. Please run `vc env pull` and try again")}function OKf(){let i=(0,Ghi.findRootDir)();if(!i)throw new Vz.VercelOidcTokenError("Unable to find project root directory. Have you linked your project with `vc link?`");let u=to.join(i,".vercel","project.json");if(!dg.existsSync(u))throw new Vz.VercelOidcTokenError("project.json not found, have you linked your project with `vc link?`");let t=JSON.parse(dg.readFileSync(u,"utf8"));if(typeof t.projectId!=="string"&&typeof t.orgId!=="string")throw TypeError("Expected a string-valued projectId property. Try running `vc link` to re-link your project.");return{projectId:t.projectId,teamId:t.orgId}}function ZKf(i,u){let t=(0,Ghi.getUserDataDir)();if(!t)throw new Vz.VercelOidcTokenError("Unable to find user data directory. Please reach out to Vercel support.");let f=to.join(t,"com.vercel.token",`${u}.json`),l=JSON.stringify(i);dg.mkdirSync(to.dirname(f),{mode:504,recursive:!0}),dg.writeFileSync(f,l),dg.chmodSync(f,432);return}function BKf(i){let u=(0,Ghi.getUserDataDir)();if(!u)throw new Vz.VercelOidcTokenError("Unable to find user data directory. Please reach out to Vercel support.");let t=to.join(u,"com.vercel.token",`${i}.json`);if(!dg.existsSync(t))return null;let f=JSON.parse(dg.readFileSync(t,"utf8"));return pfu(f),f}function FKf(i){let u=i.split(".");if(u.length!==3)throw new Vz.VercelOidcTokenError("Invalid token. Please run `vc env pull` and try again");let t=u[1].replace(/-/g,"+").replace(/_/g,"/"),f=t.padEnd(t.length+(4-t.length%4)%4,"=");return JSON.parse(Buffer.from(f,"base64").toString("utf8"))}function gKf(i,u=0){return i.exp*1000<Date.now()+u}});var GT0=Y((S0l,PT0)=>{var{defineProperty:i4u,getOwnPropertyDescriptor:TKf,getOwnPropertyNames:UKf}=Object,AKf=Object.prototype.hasOwnProperty,yKf=(i,u)=>{for(var t in u)i4u(i,t,{get:u[t],enumerable:!0})},PKf=(i,u,t,f)=>{if(u&&typeof u==="object"||typeof u==="function"){for(let l of UKf(u))if(!AKf.call(i,l)&&l!==t)i4u(i,l,{get:()=>u[l],enumerable:!(f=TKf(u,l))||f.enumerable})}return i},GKf=(i)=>PKf(i4u({},"__esModule",{value:!0}),i),yT0={};yKf(yT0,{refreshToken:()=>IKf});PT0.exports=GKf(yT0);var AT0=sa(),IN=uo();async function IKf(i){let u=i?.project,t=i?.team;if(!u&&!t){let l=(0,IN.findProjectInfo)();u=l.projectId,t=l.teamId}else if(!u||!t){let l=(0,IN.findProjectInfo)();u=u??l.projectId,t=t??l.teamId}if(!u)throw new AT0.VercelOidcTokenError("Failed to refresh OIDC token: No project specified. Try re-linking your project with `vc link`");let f=(0,IN.loadToken)(u);if(!f||(0,IN.isExpired)((0,IN.getTokenPayload)(f.token),i?.expirationBufferMs)){let l=await(0,IN.getVercelToken)({expirationBufferMs:i?.expirationBufferMs});if(f=await(0,IN.getVercelOidcToken)(l,u,t),!f)throw new AT0.VercelOidcTokenError("Failed to refresh OIDC token");(0,IN.saveToken)(f,u)}process.env.VERCEL_OIDC_TOKEN=f.token;return}});var kT0=Y((L0l,xT0)=>{var{defineProperty:t4u,getOwnPropertyDescriptor:xKf,getOwnPropertyNames:kKf}=Object,jKf=Object.prototype.hasOwnProperty,XKf=(i,u)=>{for(var t in u)t4u(i,t,{get:u[t],enumerable:!0})},JKf=(i,u,t,f)=>{if(u&&typeof u==="object"||typeof u==="function"){for(let l of kKf(u))if(!jKf.call(i,l)&&l!==t)t4u(i,l,{get:()=>u[l],enumerable:!(f=xKf(u,l))||f.enumerable})}return i},KKf=(i)=>JKf(t4u({},"__esModule",{value:!0}),i),IT0={};XKf(IT0,{getVercelOidcToken:()=>SKf,getVercelOidcTokenSync:()=>u4u});xT0.exports=KKf(IT0);var YKf=Mfu(),WKf=sa();async function SKf(i){let u="",t;try{u=u4u()}catch(f){t=f}try{let[{getTokenPayload:f,isExpired:l},{refreshToken:E}]=await Promise.all([await Promise.resolve().then(() => X(uo())),await Promise.resolve().then(() => X(GT0()))]);if(!u||l(f(u),i?.expirationBufferMs))await E(i),u=u4u()}catch(f){let l=t instanceof Error?t.message:"";if(f instanceof Error)l=`${l}
|
|
85229
85229
|
${f.message}`;if(l)throw new WKf.VercelOidcTokenError(l);throw f}return u}function u4u(){let i=(0,YKf.getContext)().headers?.["x-vercel-oidc-token"]??process.env.VERCEL_OIDC_TOKEN;if(!i)throw Error("The 'x-vercel-oidc-token' header is missing from the request. Do you have the OIDC option enabled in the Vercel project settings?");return i}});var l4u=Y((Q0l,KT0)=>{var{defineProperty:f4u,getOwnPropertyDescriptor:LKf,getOwnPropertyNames:QKf}=Object,HKf=Object.prototype.hasOwnProperty,zKf=(i,u)=>{for(var t in u)f4u(i,t,{get:u[t],enumerable:!0})},RKf=(i,u,t,f)=>{if(u&&typeof u==="object"||typeof u==="function"){for(let l of QKf(u))if(!HKf.call(i,l)&&l!==t)f4u(i,l,{get:()=>u[l],enumerable:!(f=LKf(u,l))||f.enumerable})}return i},nKf=(i)=>RKf(f4u({},"__esModule",{value:!0}),i),JT0={};zKf(JT0,{AccessTokenMissingError:()=>XT0.AccessTokenMissingError,RefreshAccessTokenFailedError:()=>XT0.RefreshAccessTokenFailedError,getContext:()=>bKf.getContext,getVercelOidcToken:()=>jT0.getVercelOidcToken,getVercelOidcTokenSync:()=>jT0.getVercelOidcTokenSync,getVercelToken:()=>CKf.getVercelToken});KT0.exports=nKf(JT0);var jT0=kT0(),bKf=Mfu(),XT0=sfu(),CKf=uo()});import{z as R2}from"zod/v4";import{z as MT0}from"zod/v4";import{z as c4u}from"zod/v4";import{z as Hl}from"zod/v4";import{z as k6}from"zod/v4";import{z as Ql}from"zod/v4";import{z as Ihi}from"zod/v4";import{z as G1}from"zod/v4";import{z as i1}from"zod/v4";import{z as pt}from"zod/v4";import{z as Q1}from"zod/v4";import{z as d4}from"zod";import{z as w4}from"zod";async function wU0({response:i,statusCode:u,defaultMessage:t="Gateway request failed",cause:f,authMethod:l}){var E;let c=await Nl({value:i,schema:cYf});if(!c.success){let d=typeof i==="object"&&i!==null&&"generationId"in i?i.generationId:void 0;return new EYf({message:`Invalid error response format: ${t}`,statusCode:u,response:i,validationError:c.error,cause:f,generationId:d})}let w=c.value,$=w.error.type,h=w.error.message,v=(E=w.generationId)!=null?E:void 0;switch($){case"authentication_error":return xhi.createContextualError({apiKeyProvided:l==="api-key",oidcTokenProvided:l==="oidc",statusCode:u,cause:f,generationId:v});case"invalid_request_error":return new rKf({message:h,statusCode:u,cause:f,generationId:v});case"rate_limit_exceeded":return new eKf({message:h,statusCode:u,cause:f,generationId:v});case"model_not_found":{let d=await Nl({value:w.error.param,schema:oKf});return new sKf({message:h,statusCode:u,modelId:d.success?d.value.modelId:void 0,cause:f,generationId:v})}case"internal_server_error":return new oT0({message:h,statusCode:u,cause:f,generationId:v});case"failed_dependency":return new uYf({message:h,statusCode:u,cause:f,generationId:v});case"forbidden":return new fYf({message:h,statusCode:u,cause:f,generationId:v});default:return new oT0({message:h,statusCode:u,cause:f,generationId:v})}}function wYf(i){if(i.data!==void 0)return i.data;if(i.responseBody!=null)try{return JSON.parse(i.responseBody)}catch(u){return i.responseBody}return{}}function DU0(i){if(!(i instanceof Error))return!1;let u=i.code;if(typeof u==="string")return["UND_ERR_HEADERS_TIMEOUT","UND_ERR_BODY_TIMEOUT","UND_ERR_CONNECT_TIMEOUT"].includes(u);return!1}async function Ow(i,u){var t;if(zl.isInstance(i))return i;if(DU0(i))return dU0.createTimeoutError({originalMessage:i instanceof Error?i.message:"Unknown error",cause:i});if(Nt.isInstance(i)){if(i.cause&&DU0(i.cause))return dU0.createTimeoutError({originalMessage:i.message,cause:i});return await wU0({response:wYf(i),statusCode:(t=i.statusCode)!=null?t:500,defaultMessage:"Gateway request failed",cause:i,authMethod:u})}return await wU0({response:{},statusCode:500,defaultMessage:i instanceof Error?`Gateway request failed: ${i.message}`:"Unknown Gateway error",cause:i,authMethod:u})}async function N8(i){let u=await Nl({value:i[PU0],schema:hYf});return u.success?u.value:void 0}function NU0(i){if(i.type==="file"&&i.data instanceof Uint8Array)return{...i,data:fw(i.data)};return i}function xYf(i){if(i.type==="file"&&i.data instanceof Uint8Array)return{...i,data:fw(i.data)};return i}async function MYf(){var i;return(i=GU0.getContext().headers)==null?void 0:i["x-vercel-id"]}function w4u(i={}){var u,t;let f=null,l=null,E=(u=i.metadataCacheRefreshMillis)!=null?u:300000,c=0,w=(t=s9(i.baseURL))!=null?t:"https://ai-gateway.vercel.sh/v3/ai",$=async()=>{try{let g=await rYf(i);return c4({Authorization:`Bearer ${g.token}`,"ai-gateway-protocol-version":VYf,[PU0]:g.authMethod,...i.headers},`ai-sdk/gateway/${qYf}`)}catch(g){throw xhi.createContextualError({apiKeyProvided:!1,oidcTokenProvided:!1,statusCode:401,cause:g})}},h=()=>{let g=ad({settingValue:void 0,environmentVariableName:"VERCEL_DEPLOYMENT_ID"}),T=ad({settingValue:void 0,environmentVariableName:"VERCEL_ENV"}),U=ad({settingValue:void 0,environmentVariableName:"VERCEL_REGION"}),A=ad({settingValue:void 0,environmentVariableName:"VERCEL_PROJECT_ID"});return async()=>{let G=await MYf();return{...g&&{"ai-o11y-deployment-id":g},...T&&{"ai-o11y-environment":T},...U&&{"ai-o11y-region":U},...G&&{"ai-o11y-request-id":G},...A&&{"ai-o11y-project-id":A}}}},v=(g)=>{return new BYf(g,{provider:"gateway",baseURL:w,headers:$,fetch:i.fetch,o11yHeaders:h()})},d=async()=>{var g,T,U;let A=(U=(T=(g=i._internal)==null?void 0:g.currentDate)==null?void 0:T.call(g).getTime())!=null?U:Date.now();if(!f||A-c>E)c=A,f=new _U0({baseURL:w,headers:$,fetch:i.fetch}).getAvailableModels().then((G)=>{return l=G,G}).catch(async(G)=>{throw await Ow(G,await N8(await $()))});return l?Promise.resolve(l):f},D=async()=>{return new _U0({baseURL:w,headers:$,fetch:i.fetch}).getCredits().catch(async(g)=>{throw await Ow(g,await N8(await $()))})},_=async(g)=>{return new _Yf({baseURL:w,headers:$,fetch:i.fetch}).getSpendReport(g).catch(async(T)=>{throw await Ow(T,await N8(await $()))})},N=async(g)=>{return new OYf({baseURL:w,headers:$,fetch:i.fetch}).getGenerationInfo(g).catch(async(T)=>{throw await Ow(T,await N8(await $()))})},Z=function(g){if(new.target)throw Error("The Gateway Provider model function cannot be called with the new keyword.");return v(g)};Z.specificationVersion="v3",Z.getAvailableModels=d,Z.getCredits=D,Z.getSpendReport=_,Z.getGenerationInfo=N,Z.imageModel=(g)=>{return new UYf(g,{provider:"gateway",baseURL:w,headers:$,fetch:i.fetch,o11yHeaders:h()})},Z.languageModel=v;let B=(g)=>{return new FYf(g,{provider:"gateway",baseURL:w,headers:$,fetch:i.fetch,o11yHeaders:h()})};Z.embeddingModel=B,Z.textEmbeddingModel=B,Z.videoModel=(g)=>{return new IYf(g,{provider:"gateway",baseURL:w,headers:$,fetch:i.fetch,o11yHeaders:h()})};let F=(g)=>{return new KYf(g,{provider:"gateway",baseURL:w,headers:$,fetch:i.fetch,o11yHeaders:h()})};return Z.rerankingModel=F,Z.reranking=F,Z.chat=Z.languageModel,Z.embedding=Z.embeddingModel,Z.image=Z.imageModel,Z.video=Z.videoModel,Z.tools=CYf,Z}async function rYf(i){let u=ad({settingValue:i.apiKey,environmentVariableName:"AI_GATEWAY_API_KEY"});if(u)return{token:u,authMethod:"api-key"};return{token:await IU0.getVercelOidcToken(),authMethod:"oidc"}}var GU0,IU0,MKf="vercel.ai.gateway.error",E4u,YT0,WT0,zl,OU0="GatewayAuthenticationError",qKf,ST0,LT0,QT0,xhi,ZU0="GatewayInvalidRequestError",VKf,HT0,zT0,RT0,rKf,BU0="GatewayRateLimitError",mKf,nT0,bT0,CT0,eKf,FU0="GatewayModelNotFoundError",aKf,qT0,oKf,VT0,rT0,sKf,gU0="GatewayInternalServerError",pKf,mT0,eT0,aT0,oT0,TU0="GatewayFailedDependencyError",iYf,sT0,pT0,iU0,uYf,UU0="GatewayForbiddenError",tYf,uU0,tU0,fU0,fYf,AU0="GatewayResponseError",lYf,lU0,EU0,cU0,EYf,cYf,yU0="GatewayTimeoutError",$Yf,$U0,hU0,vU0,dU0,PU0="ai-gateway-auth-method",hYf,vYf,_U0=class{constructor(i){this.config=i}async getAvailableModels(){try{let{value:i}=await v$({url:`${this.config.baseURL}/config`,headers:await b0(this.config.headers()),successfulResponseHandler:ht(dYf),failedResponseHandler:S1({errorSchema:Hl.any(),errorToMessage:(u)=>u}),fetch:this.config.fetch});return i}catch(i){throw await Ow(i)}}async getCredits(){try{let i=new URL(this.config.baseURL),{value:u}=await v$({url:`${i.origin}/v1/credits`,headers:await b0(this.config.headers()),successfulResponseHandler:ht(DYf),failedResponseHandler:S1({errorSchema:Hl.any(),errorToMessage:(t)=>t}),fetch:this.config.fetch});return u}catch(i){throw await Ow(i)}}},dYf,DYf,_Yf=class{constructor(i){this.config=i}async getSpendReport(i){try{let u=new URL(this.config.baseURL),t=new URLSearchParams;if(t.set("start_date",i.startDate),t.set("end_date",i.endDate),i.groupBy)t.set("group_by",i.groupBy);if(i.datePart)t.set("date_part",i.datePart);if(i.userId)t.set("user_id",i.userId);if(i.model)t.set("model",i.model);if(i.provider)t.set("provider",i.provider);if(i.credentialType)t.set("credential_type",i.credentialType);if(i.tags&&i.tags.length>0)t.set("tags",i.tags.join(","));let{value:f}=await v$({url:`${u.origin}/v1/report?${t.toString()}`,headers:await b0(this.config.headers()),successfulResponseHandler:ht(NYf),failedResponseHandler:S1({errorSchema:k6.any(),errorToMessage:(l)=>l}),fetch:this.config.fetch});return f}catch(u){throw await Ow(u)}}},NYf,OYf=class{constructor(i){this.config=i}async getGenerationInfo(i){try{let u=new URL(this.config.baseURL),{value:t}=await v$({url:`${u.origin}/v1/generation?id=${encodeURIComponent(i.id)}`,headers:await b0(this.config.headers()),successfulResponseHandler:ht(ZYf),failedResponseHandler:S1({errorSchema:Ql.any(),errorToMessage:(f)=>f}),fetch:this.config.fetch});return t}catch(u){throw await Ow(u)}}},ZYf,BYf=class{constructor(i,u){this.modelId=i,this.config=u,this.specificationVersion="v3",this.supportedUrls={"*/*":[/.*/]}}get provider(){return this.config.provider}async getArgs(i){let{abortSignal:u,...t}=i;return{args:this.maybeEncodeFileParts(t),warnings:[]}}async doGenerate(i){let{args:u,warnings:t}=await this.getArgs(i),{abortSignal:f}=i,l=await b0(this.config.headers());try{let{responseHeaders:E,value:c,rawValue:w}=await Tt({url:this.getUrl(),headers:ut(l,i.headers,this.getModelConfigHeaders(this.modelId,!1),await b0(this.config.o11yHeaders)),body:u,successfulResponseHandler:ht(Ihi.any()),failedResponseHandler:S1({errorSchema:Ihi.any(),errorToMessage:($)=>$}),...f&&{abortSignal:f},fetch:this.config.fetch});return{...c,request:{body:u},response:{headers:E,body:w},warnings:t}}catch(E){throw await Ow(E,await N8(l))}}async doStream(i){let{args:u,warnings:t}=await this.getArgs(i),{abortSignal:f}=i,l=await b0(this.config.headers());try{let{value:E,responseHeaders:c}=await Tt({url:this.getUrl(),headers:ut(l,i.headers,this.getModelConfigHeaders(this.modelId,!0),await b0(this.config.o11yHeaders)),body:u,successfulResponseHandler:gc(Ihi.any()),failedResponseHandler:S1({errorSchema:Ihi.any(),errorToMessage:(w)=>w}),...f&&{abortSignal:f},fetch:this.config.fetch});return{stream:E.pipeThrough(new TransformStream({start(w){if(t.length>0)w.enqueue({type:"stream-start",warnings:t})},transform(w,$){if(w.success){let h=w.value;if(h.type==="raw"&&!i.includeRawChunks)return;if(h.type==="response-metadata"&&h.timestamp&&typeof h.timestamp==="string")h.timestamp=new Date(h.timestamp);$.enqueue(h)}else $.error(w.error)}})),request:{body:u},response:{headers:c}}}catch(E){throw await Ow(E,await N8(l))}}isFilePart(i){return i&&typeof i==="object"&&"type"in i&&i.type==="file"}maybeEncodeFileParts(i){for(let u of i.prompt)for(let t of u.content)if(this.isFilePart(t)){let f=t;if(f.data instanceof Uint8Array){let l=Uint8Array.from(f.data),E=Buffer.from(l).toString("base64");f.data=new URL(`data:${f.mediaType||"application/octet-stream"};base64,${E}`)}}return i}getUrl(){return`${this.config.baseURL}/language-model`}getModelConfigHeaders(i,u){return{"ai-language-model-specification-version":"3","ai-language-model-id":i,"ai-language-model-streaming":String(u)}}},FYf=class{constructor(i,u){this.modelId=i,this.config=u,this.specificationVersion="v3",this.maxEmbeddingsPerCall=2048,this.supportsParallelCalls=!0}get provider(){return this.config.provider}async doEmbed({values:i,headers:u,abortSignal:t,providerOptions:f}){var l,E;let c=await b0(this.config.headers());try{let{responseHeaders:w,value:$,rawValue:h}=await Tt({url:this.getUrl(),headers:ut(c,u!=null?u:{},this.getModelConfigHeaders(),await b0(this.config.o11yHeaders)),body:{values:i,...f?{providerOptions:f}:{}},successfulResponseHandler:ht(TYf),failedResponseHandler:S1({errorSchema:G1.any(),errorToMessage:(v)=>v}),...t&&{abortSignal:t},fetch:this.config.fetch});return{embeddings:$.embeddings,usage:(l=$.usage)!=null?l:void 0,providerMetadata:$.providerMetadata,response:{headers:w,body:h},warnings:(E=$.warnings)!=null?E:[]}}catch(w){throw await Ow(w,await N8(c))}}getUrl(){return`${this.config.baseURL}/embedding-model`}getModelConfigHeaders(){return{"ai-embedding-model-specification-version":"3","ai-model-id":this.modelId}}},gYf,TYf,UYf=class{constructor(i,u){this.modelId=i,this.config=u,this.specificationVersion="v3",this.maxImagesPerCall=Number.MAX_SAFE_INTEGER}get provider(){return this.config.provider}async doGenerate({prompt:i,n:u,size:t,aspectRatio:f,seed:l,files:E,mask:c,providerOptions:w,headers:$,abortSignal:h}){var v,d,D,_;let N=await b0(this.config.headers());try{let{responseHeaders:Z,value:B,rawValue:F}=await Tt({url:this.getUrl(),headers:ut(N,$!=null?$:{},this.getModelConfigHeaders(),await b0(this.config.o11yHeaders)),body:{prompt:i,n:u,...t&&{size:t},...f&&{aspectRatio:f},...l&&{seed:l},...w&&{providerOptions:w},...E&&{files:E.map((g)=>NU0(g))},...c&&{mask:NU0(c)}},successfulResponseHandler:ht(GYf),failedResponseHandler:S1({errorSchema:i1.any(),errorToMessage:(g)=>g}),...h&&{abortSignal:h},fetch:this.config.fetch});return{images:B.images,warnings:(v=B.warnings)!=null?v:[],providerMetadata:B.providerMetadata,response:{timestamp:new Date,modelId:this.modelId,headers:Z},...B.usage!=null&&{usage:{inputTokens:(d=B.usage.inputTokens)!=null?d:void 0,outputTokens:(D=B.usage.outputTokens)!=null?D:void 0,totalTokens:(_=B.usage.totalTokens)!=null?_:void 0}}}}catch(Z){throw await Ow(Z,await N8(N))}}getUrl(){return`${this.config.baseURL}/image-model`}getModelConfigHeaders(){return{"ai-image-model-specification-version":"3","ai-model-id":this.modelId}}},AYf,yYf,PYf,GYf,IYf=class{constructor(i,u){this.modelId=i,this.config=u,this.specificationVersion="v3",this.maxVideosPerCall=Number.MAX_SAFE_INTEGER}get provider(){return this.config.provider}async doGenerate({prompt:i,n:u,aspectRatio:t,resolution:f,duration:l,fps:E,seed:c,image:w,providerOptions:$,headers:h,abortSignal:v}){var d;let D=await b0(this.config.headers());try{let{responseHeaders:_,value:N}=await Tt({url:this.getUrl(),headers:ut(D,h!=null?h:{},this.getModelConfigHeaders(),await b0(this.config.o11yHeaders),{accept:"text/event-stream"}),body:{prompt:i,n:u,...t&&{aspectRatio:t},...f&&{resolution:f},...l&&{duration:l},...E&&{fps:E},...c&&{seed:c},...$&&{providerOptions:$},...w&&{image:xYf(w)}},successfulResponseHandler:async({response:Z,url:B,requestBodyValues:F})=>{if(Z.body==null)throw new Nt({message:"SSE response body is empty",url:B,requestBodyValues:F,statusCode:Z.status});let T=y2({stream:Z.body,schema:JYf}).getReader(),{done:U,value:A}=await T.read();if(T.releaseLock(),U||!A)throw new Nt({message:"SSE stream ended without a data event",url:B,requestBodyValues:F,statusCode:Z.status});if(!A.success)throw new Nt({message:"Failed to parse video SSE event",cause:A.error,url:B,requestBodyValues:F,statusCode:Z.status});let G=A.value;if(G.type==="error")throw new Nt({message:G.message,statusCode:G.statusCode,url:B,requestBodyValues:F,responseHeaders:Object.fromEntries([...Z.headers]),responseBody:JSON.stringify(G),data:{error:{message:G.message,type:G.errorType,param:G.param}}});return{value:{videos:G.videos,warnings:G.warnings,providerMetadata:G.providerMetadata},responseHeaders:Object.fromEntries([...Z.headers])}},failedResponseHandler:S1({errorSchema:pt.any(),errorToMessage:(Z)=>Z}),...v&&{abortSignal:v},fetch:this.config.fetch});return{videos:N.videos,warnings:(d=N.warnings)!=null?d:[],providerMetadata:N.providerMetadata,response:{timestamp:new Date,modelId:this.modelId,headers:_}}}catch(_){throw await Ow(_,await N8(D))}}getUrl(){return`${this.config.baseURL}/video-model`}getModelConfigHeaders(){return{"ai-video-model-specification-version":"3","ai-model-id":this.modelId}}},kYf,jYf,XYf,JYf,KYf=class{constructor(i,u){this.modelId=i,this.config=u,this.specificationVersion="v3"}get provider(){return this.config.provider}async doRerank({documents:i,query:u,topN:t,headers:f,abortSignal:l,providerOptions:E}){var c;let w=await b0(this.config.headers());try{let{responseHeaders:$,value:h,rawValue:v}=await Tt({url:this.getUrl(),headers:ut(w,f!=null?f:{},this.getModelConfigHeaders(),await b0(this.config.o11yHeaders)),body:{documents:i,query:u,...t!=null?{topN:t}:{},...E?{providerOptions:E}:{}},successfulResponseHandler:ht(WYf),failedResponseHandler:S1({errorSchema:Q1.any(),errorToMessage:(d)=>d}),...l&&{abortSignal:l},fetch:this.config.fetch});return{ranking:h.ranking,providerMetadata:h.providerMetadata,response:{headers:$,body:v},warnings:(c=h.warnings)!=null?c:[]}}catch($){throw await Ow($,await N8(w))}}getUrl(){return`${this.config.baseURL}/reranking-model`}getModelConfigHeaders(){return{"ai-reranking-model-specification-version":"3","ai-model-id":this.modelId}}},YYf,WYf,SYf,LYf,QYf,HYf=(i={})=>QYf(i),zYf,RYf,nYf,bYf=(i={})=>nYf(i),CYf,qYf="3.0.133",VYf="0.0.1",khi;var fo=O(()=>{tu();eu();tu();tu();tu();tu();tu();tu();tu();tu();tu();eu();tu();tu();tu();tu();GU0=X(l4u(),1),IU0=X(l4u(),1),E4u=Symbol.for(MKf),zl=class i extends(WT0=Error,YT0=E4u,WT0){constructor({message:u,statusCode:t=500,cause:f,generationId:l,isRetryable:E=t!=null&&(t===408||t===409||t===429||t>=500)}){super(l?`${u} [${l}]`:u);this[YT0]=!0,this.statusCode=t,this.cause=f,this.generationId=l,this.isRetryable=E}static isInstance(u){return i.hasMarker(u)}static hasMarker(u){return typeof u==="object"&&u!==null&&E4u in u&&u[E4u]===!0}},qKf=`vercel.ai.gateway.error.${OU0}`,ST0=Symbol.for(qKf),xhi=class i extends(QT0=zl,LT0=ST0,QT0){constructor({message:u="Authentication failed",statusCode:t=401,cause:f,generationId:l}={}){super({message:u,statusCode:t,cause:f,generationId:l});this[LT0]=!0,this.name=OU0,this.type="authentication_error"}static isInstance(u){return zl.hasMarker(u)&&ST0 in u}static createContextualError({apiKeyProvided:u,oidcTokenProvided:t,message:f="Authentication failed",statusCode:l=401,cause:E,generationId:c}){let w;if(u)w=`AI Gateway authentication failed: Invalid API key.
|
|
@@ -86830,7 +86830,7 @@ Do NOT require review (requiresReview = false) when the changes are low-risk, su
|
|
|
86830
86830
|
|
|
86831
86831
|
When unsure between the two, lean toward NOT requiring review for small frontend-only diffs, and toward requiring it for anything backend or large.
|
|
86832
86832
|
|
|
86833
|
-
Respond with the structured verdict and a short reason.`,p4t;var u1t=O(()=>{Nf();GN();V8u();DS4=r8u.object({requiresReview:r8u.boolean().describe("true if the changes should go through pull-request review"),reason:r8u.string().describe("One short sentence explaining the decision (max ~120 chars)")});p4t={requiresReview:!1,reason:""}});function ZS4(i){if(!i||i.includes(".."))return!1;return OS4.test(i)}function t1t(i){let u=typeof i.__resolveType==="string"?i.__resolveType:null;if(!u||!ZS4(u))return null;let{__resolveType:t,...f}=i;return{resolveType:u,payload:f}}function f1t(i,u){return`${i.replace(/\/+$/,"")}/deco/invoke/${u}`}var OS4;var l1t=O(()=>{OS4=/^[\w./@-]+$/});function m8u(i){let u;try{u=new URL(i)}catch{return null}if(!u.hostname.endsWith(".localhost"))return null;let t=u.host;return u.hostname="127.0.0.1",{url:u.toString(),hostHeader:t}}function E1t(i,u){let t=i?.githubRepo;if(!t?.owner||!t?.name)return null;if(!t.connectionId)return t;if(!u.includes(t.connectionId))return null;return t}async function c1t(i,u,t,f){if(!f.connectionId)throw new $b("Push requires a connected GitHub account. Connect mcp-github for this project and restart the sandbox.");let l=i.organization?.id;if(!l)throw new $b(xc);await ER({ctx:i,connectionId:f.connectionId,organizationId:l,forceRefresh:!0,onLegacyMintError:(v)=>{let d=v instanceof Error?v.message:xc;throw new $b(d)}});let{cloneUrl:E,gitUserName:c,gitUserEmail:w}=await nN(f.connectionId,f.owner,f.name,i.db,i.vault),$=AIi(i),h=await u.proxyDaemonRequest(t,"/_sandbox/config",{method:"PUT",headers:new Headers({"content-type":"application/json"}),body:JSON.stringify({git:{repository:{cloneUrl:E},identity:{userName:c,userEmail:w}},...$?{operator:$}:{}})});if(!h.ok){let v=await h.text().catch(()=>h.statusText);throw Error(`Failed to refresh sandbox git credentials (${h.status}): ${v}`)}}var $b;var w1t=O(()=>{ON();z8u();Ao();$b=class $b extends Error{constructor(i){super(i);this.name="GitPushAuthError"}}});function FS4(i){let u=i.startsWith("thread:")?i.slice(7):i;if(!u||u.length>255||u.includes("..")||u.startsWith("/")||u.endsWith("/")||u.endsWith(".lock")||!BS4.test(u))throw Error(`Invalid branch name: ${i}`)}function EW(i){return AbortSignal.any([i.req.raw.signal,AbortSignal.timeout(US4)])}function cW(i){let{runner:u}=i.get("vmClaim");if(!u)return i.json({error:"No sandbox runner configured"},503);return u}function e8u(i,u){let f=(yIi.get(i)??Promise.resolve()).catch(()=>{}).then(u),l=f.catch(()=>{});return yIi.set(i,l),l.finally(()=>{if(yIi.get(i)===l)yIi.delete(i)}),f}async function hE(i,u,t){let f=cW(i);if(f instanceof Response)return f;let{claimName:l,userId:E,projectRef:c}=i.get("vmClaim"),w=t?.method??"POST",$=null,h=new Headers;if(t?.jsonBody!==void 0)$=t.jsonBody,h.set("content-type","application/json");else if(t?.forwardJsonBody)$=await i.req.text(),h.set("content-type","application/json");let v=t?.signal,d={method:w,headers:h,body:$,...v?{signal:v}:{}},D=async()=>{let _=await f.proxyDaemonRequest(l,u,d);if(t?.map404to410&&_.status===404){try{await _.body?.cancel()}catch{}if(await f.adoptLiveClaim?.({userId:E,projectRef:c},l))_=await f.proxyDaemonRequest(l,u,d);if(_.status===404){try{await _.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",...z$}})}}let N=await _.text(),Z=t?.redactRepoDirUnlessDesktop&&f.kind!=="user-desktop"?yS4(N):N,B=_.headers.get("content-type")??"application/json";return new Response(Z,{status:_.status,headers:{"content-type":B,...z$}})};try{if(v){let _=D();return _.catch(()=>{}),await Promise.race([_,new Promise((Z,B)=>{if(v.aborted)return B(v.reason);v.addEventListener("abort",()=>B(v.reason),{once:!0})})])}return await D()}catch(_){let N=_ instanceof Error?_.message:String(_);return i.json({error:`Daemon unreachable: ${N}`},502)}}function yS4(i){try{let u=JSON.parse(i);if(u&&typeof u==="object"&&!Array.isArray(u)&&"repoDir"in u)return JSON.stringify({...u,repoDir:null})}catch{}return i}async function PIi(i,u,t,f="GET",l){let E=await i.proxyDaemonRequest(u,t,{method:f,headers:new Headers,body:null});if(E.status===404&&l){try{await E.body?.cancel()}catch{}if(await i.adoptLiveClaim?.(l,u))E=await i.proxyDaemonRequest(u,t,{method:f,headers:new Headers,body:null})}if(E.status===404){try{await E.body?.cancel()}catch{}throw Error("SANDBOX_GONE")}let c=await E.text();if(!E.ok)try{let w=JSON.parse(c);throw Error(w.error??`Daemon error (${E.status})`)}catch(w){if(w instanceof Error&&w.message!==c)throw w;throw Error(`Daemon error (${E.status})`)}return JSON.parse(c)}function PS4(i){return v1t.includes(i)}var BS4,$1t=524288,gS4=65536,TS4=10485760,SO,US4=1e4,h1t=2000,AS4,yIi,z$,v1t,d1t=()=>{let i=new Yu;return i.use("/:virtualMcpId/:branch/*",AS4),i.post("/:virtualMcpId/:branch/write",SO,(u)=>hE(u,"/_sandbox/write",{forwardJsonBody:!0,signal:EW(u)})),i.post("/:virtualMcpId/:branch/unlink",SO,(u)=>hE(u,"/_sandbox/unlink",{forwardJsonBody:!0,signal:EW(u)})),i.post("/:virtualMcpId/:branch/mkdir",SO,(u)=>hE(u,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:EW(u)})),i.post("/:virtualMcpId/:branch/rename",SO,(u)=>hE(u,"/_sandbox/rename",{forwardJsonBody:!0,signal:EW(u)})),i.post("/:virtualMcpId/:branch/read",SO,(u)=>hE(u,"/_sandbox/read",{forwardJsonBody:!0,signal:EW(u)})),i.post("/:virtualMcpId/:branch/glob",SO,(u)=>hE(u,"/_sandbox/glob",{forwardJsonBody:!0,signal:EW(u)})),i.post("/:virtualMcpId/:branch/grep",SO,(u)=>hE(u,"/_sandbox/grep",{forwardJsonBody:!0,signal:EW(u)})),i.post("/:virtualMcpId/:branch/exec/:script",(u)=>{let t=u.req.param("script");if(!t)return u.json({error:"missing script name"},400);return hE(u,`/_sandbox/exec/${encodeURIComponent(t)}`)}),i.post("/:virtualMcpId/:branch/exec/:script/kill",(u)=>{let t=u.req.param("script");if(!t)return u.json({error:"missing script name"},400);return hE(u,`/_sandbox/exec/${encodeURIComponent(t)}/kill`)}),i.get("/:virtualMcpId/:branch/config",(u)=>hE(u,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDirUnlessDesktop:!0})),i.put("/:virtualMcpId/:branch/config",SO,(u)=>hE(u,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),i.post("/:virtualMcpId/:branch/setup/:step",async(u)=>{let t=u.req.param("step");if(!t||!PS4(t))return u.json({error:`step must be one of: ${v1t.join(", ")}`},400);if(t==="start"){let f=u.get("vmClaim");if(f.runner){let l=Oi(u.var.studioContext),E=iUi(f.virtualMcpMetadata);try{await tUi({ctx:u.var.studioContext,runner:f.runner,handle:f.claimName,orgId:l.id,userId:f.userId,entries:E})}catch(c){let w=c instanceof Error?c.message:String(c);return u.json({error:`Failed to push env to daemon: ${w}`},502)}}}return hE(u,`/_sandbox/setup/${t}`,{signal:u.req.raw.signal,map404to410:!0})}),i.get("/:virtualMcpId/:branch/events",(u)=>{let t=u.get("vmClaim");if(!t.runner)return A7(u,async(f)=>{await f.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:"No sandbox runner configured on this studio instance."})})});return r4t(u,{ctx:u.var.studioContext,claimName:t.claimName,runner:t.runner,virtualMcpId:t.virtualMcpId,branch:t.branch,userId:t.userId,projectRef:t.projectRef,virtualMcpMetadata:t.virtualMcpMetadata})}),i.get("/:virtualMcpId/:branch/git/status",(u)=>hE(u,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([u.req.raw.signal,AbortSignal.timeout(h1t)])})),i.post("/:virtualMcpId/:branch/git/status",(u)=>hE(u,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([u.req.raw.signal,AbortSignal.timeout(h1t)])})),i.post("/:virtualMcpId/:branch/git/diff",(u)=>hE(u,"/_sandbox/git/diff",{forwardJsonBody:!0,map404to410:!0})),i.post("/:virtualMcpId/:branch/git/publish",async(u)=>{let t=cW(u);if(t instanceof Response)return t;let{claimName:f,virtualMcpMetadata:l,connectionIds:E}=u.get("vmClaim"),c=u.var.studioContext;return e8u(f,async()=>{try{await R8u(c,t,f);let w=E1t(l,E);if(w)await c1t(c,t,f,w)}catch(w){if(w instanceof $b)return u.json({error:w.message},403,z$);let $=w instanceof Error?w.message:String(w);return u.json({error:$},502,z$)}return hE(u,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})})}),i.post("/:virtualMcpId/:branch/git/discard",(u)=>{let{claimName:t}=u.get("vmClaim");return e8u(t,()=>hE(u,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0}))}),i.post("/:virtualMcpId/:branch/git/rebase",async(u)=>{let t=cW(u);if(t instanceof Response)return t;let{claimName:f}=u.get("vmClaim"),l=u.var.studioContext;return e8u(f,async()=>{try{await R8u(l,t,f)}catch(E){let c=E instanceof Error?E.message:String(E);return u.json({error:c},502,z$)}return hE(u,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),i.post("/:virtualMcpId/:branch/git/suggest-commit",$E({maxSize:$1t,onError:(u)=>u.json({error:"Payload too large"},413,z$)}),async(u)=>{let t=cW(u);if(t instanceof Response)return t;let{claimName:f,userId:l,projectRef:E}=u.get("vmClaim"),c=u.var.studioContext;try{let w=await u.req.json().catch(()=>({})),$=w.status,h=w.diff,v=h!=null&&typeof h.diffs==="object"&&h.diffs!==null,[d,D]=C8u($)&&v?[$,h]:await Promise.all([PIi(t,f,"/_sandbox/git/status","GET",{userId:l,projectRef:E}),PIi(t,f,"/_sandbox/git/diff","GET",{userId:l,projectRef:E})]),_=await s4t(c,d,D);return u.json(_,200,z$)}catch(w){let $=w instanceof Error?w.message:String(w);if($==="SANDBOX_GONE")return u.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,z$);return u.json({error:$},502,z$)}}),i.post("/:virtualMcpId/:branch/git/judge-review",$E({maxSize:$1t,onError:(u)=>u.json({error:"Payload too large"},413,z$)}),async(u)=>{let t=cW(u);if(t instanceof Response)return t;let{claimName:f,userId:l,projectRef:E}=u.get("vmClaim"),c=u.var.studioContext;try{let w=await u.req.json().catch(()=>({})),$=w.status,h=w.diff,v=h!=null&&typeof h.diffs==="object"&&h.diffs!==null,[d,D]=C8u($)&&v?[$,h]:await Promise.all([PIi(t,f,"/_sandbox/git/status","GET",{userId:l,projectRef:E}),PIi(t,f,"/_sandbox/git/diff","GET",{userId:l,projectRef:E})]),_=await i1t(c,d,D,typeof w.language==="string"?w.language:void 0);return u.json(_,200,z$)}catch(w){let $=w instanceof Error?w.message:String(w);if($==="SANDBOX_GONE")return u.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,z$);return u.json({error:$},502,z$)}}),i.get("/:virtualMcpId/:branch/preview-fetch",async(u)=>{let t=cW(u);if(t instanceof Response)return t;let{claimName:f}=u.get("vmClaim"),l=u.req.query("path");if(!l||!l.startsWith("/")||l.startsWith("//")||l.includes("..")||l.includes("\\"))return u.json({error:"Path not allowed"},403);let E;try{E=await t.getPreviewUrl(f)}catch{return u.json({error:"Preview not available"},502)}if(!E)return u.json({error:"Preview not available"},502);let c=E.replace(/\/+$/,""),w=m8u(`${c}${l}`),$;try{$=await fetch(w?.url??`${c}${l}`,{...w?{headers:{host:w.hostHeader}}:{}})}catch{return u.json({error:"Preview unreachable"},502)}let h;try{h=await $.text()}catch{return u.json({error:"Preview unreachable"},502)}return new Response(h,{status:$.status,headers:{"content-type":$.headers.get("content-type")??"application/json"}})}),i.post("/:virtualMcpId/:branch/preview-invoke",$E({maxSize:gS4,onError:(u)=>u.json({error:"Payload too large"},413)}),async(u)=>{let t=cW(u);if(t instanceof Response)return t;let{claimName:f}=u.get("vmClaim"),l;try{l=await t.getPreviewUrl(f)}catch{return u.json({error:"Preview not available"},502)}if(!l)return u.json({error:"Preview not available"},502);let E;try{E=await u.req.json()}catch{return u.json({error:"Invalid JSON body"},400)}if(!E||typeof E!=="object"||Array.isArray(E))return u.json({error:"Invalid JSON body"},400);let c=t1t(E);if(!c)return u.json({error:"Invalid or missing __resolveType"},400);let w=f1t(l,c.resolveType),$=m8u(w),h;try{h=await fetch($?.url??w,{method:"POST",headers:{"content-type":"application/json",...$?{host:$.hostHeader}:{}},body:JSON.stringify(c.payload),signal:AbortSignal.timeout(30000)})}catch{return u.json({error:"Preview unreachable"},502)}let v;try{v=await h.text()}catch{return u.json({error:"Preview unreachable"},502)}return new Response(v,{status:h.status,headers:{"content-type":h.headers.get("content-type")??"application/json"}})}),i};var D1t=O(()=>{Ef();aY();wb();q4t();C5();dvu();UR();V4t();m4t();DEu();AR();V8u();u1t();l1t();w1t();BS4=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;SO=$E({maxSize:TS4,onError:(i)=>i.json({error:"Payload too large"},413)});AS4=M4t(async(i,u)=>{let t=i.var.studioContext;try{gi(t)}catch{return i.json({error:"Unauthorized"},401)}let f=Qu(t);if(!f)return i.json({error:"Unauthorized"},401);let l;try{l=Oi(t)}catch{return i.json({error:"Organization scope required"},403)}let E=i.req.param("virtualMcpId"),c=i.req.param("branch");if(!E||!c)return i.json({error:"virtualMcpId and branch are required"},400);try{FS4(c)}catch(D){let _=D instanceof Error?D.message:String(D);return i.json({error:_},400)}let w=await t.storage.virtualMcps.findById(E);if(!w||w.organization_id!==l.id)return i.json({error:"Virtual MCP not found"},404);let $=xg({orgId:l.id,virtualMcpId:E,branch:c}),h=_Gi({userId:f,projectRef:$},c),v=w.metadata??null,d;try{d=(await Kv(t,{userId:f,branch:c,virtualMcpMetadata:v})).provider}catch{d=null}if(!d)return i.json({error:"No sandbox runner found"},404);return i.set("vmClaim",{claimName:h,runner:d,virtualMcpId:E,branch:c,userId:f,projectRef:$,virtualMcpMetadata:v,connectionIds:w.connections?.map((D)=>D.connection_id)??[]}),u()});yIi=new Map;z$={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};v1t=["clone","install","start"]});var _1t=(i)=>{let u=new Yu;if(u.use("*",eY),u.route("/",zGi()),u.route("/",J0t()),u.route("/",J4t()),u.route("/",j4t()),u.route("/",gIi()),u.route("/tools",H4t()),u.route("/",S4t()),u.route("/",_4t({kvStorage:i.kvStorage})),u.route("/",d4t()),u.route("/fs",P4t({getConnection:i.getNatsConnection})),u.route("/sandbox",d1t()),u.route("/",I4t()),u.route("/deco-sites",nGi()),u.route("/sso",hGi()),u.route("/",TIi({tokenStorage:i.tokenStorage,automationEventDispatcher:i.automationEventDispatcher})),u.route("/webhooks",P0t()),i.mountDevAssets)u.route("/dev-assets",bGi({orgFromPath:!0}));return u.use("/mcp/:connectionId?",i.mcpAuth),u.use("/mcp/:connectionId/ui-resource",i.mcpAuth),u.use("/mcp/gateway/:virtualMcpId?",i.mcpAuth),u.use("/mcp/virtual-mcp/:virtualMcpId?",i.mcpAuth),u.use("/mcp/self",i.mcpAuth),u.route("/",MZ0()),u.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",i.betterAuthProtectedResourceHandler),u.get("/mcp/.well-known/oauth-protected-resource",i.betterAuthProtectedResourceHandler),u.route("/mcp",nUi()),u.route("/mcp/self",FIi()),u.route("/mcp",MUi()),u.all("/oauth-proxy/:connectionId/*",i.oauthProxyHandler),u.get("/watch",i.watchHandler),u};var N1t=O(()=>{Ef();cdu();G0t();ddu();CGi();Yp();ldu();D4t();N4t();G4t();ya();Evu();qUi();K8u();x4t();X4t();K4t();L4t();W8u();z4t();S8u();bUi();D1t()});function a8u(i){try{i?.clear?.()}catch{}}async function O1t({accountJwt:i,accountSigningKey:u,expiresAt:t,permissions:f,userId:l,allowedConnectionTypes:E=["WEBSOCKET"]}){let c=G_u(i),w=jki(c.sub),$=Mb(new TextEncoder().encode(u)),h=_ui();try{let v=await Nui(l,h,w,{pub:{allow:f.publish.allow},sub:{allow:f.subscribe.allow},allowed_connection_types:E},{algorithm:sE.v2,exp:Math.floor(t.getTime()/1000),signer:$});return new TextDecoder().decode(Oui(v,h))}finally{a8u(h),a8u($),a8u(w)}}var Z1t=O(()=>{Ski()});function GS4(i){return/^wss?:\/\//i.test(i.trim())?["WEBSOCKET"]:["STANDARD","WEBSOCKET"]}function B1t(){let i=new Yu;return i.post("/links/session",async(u)=>{let f=u.get("studioContext").auth?.user?.id;if(!f)return u.json({error:"Unauthorized"},401);let l=vu();if(!l.natsTunnelPublicEnabled)return u.json(o8u(),503);if(!l.natsPublicUrl)return u.json(o8u(),503);if(!l.natsAccountJwt||!l.natsAccountSigningKey){if(!l.localMode)return u.json(o8u(),503)}let E=Ph(f),c;if(l.natsAccountJwt&&l.natsAccountSigningKey){let w=new Date(Date.now()+l.natsTunnelSessionTtlSeconds*1000);c=await O1t({accountJwt:l.natsAccountJwt,accountSigningKey:l.natsAccountSigningKey,expiresAt:w,permissions:tmu(E),userId:f,allowedConnectionTypes:GS4(l.natsPublicUrl)})}return u.json(fmu({publicUrl:l.natsPublicUrl,userId:f,ttlSeconds:l.natsTunnelSessionTtlSeconds,credentials:c}))}),i}var o8u=()=>({error:"link session unavailable"});var F1t=O(()=>{Ef();R0();Jni();Z1t()});function xS4(i){return i.filter((u)=>u.vendors?.alias).map((u)=>({name:u.name,title:u.title,description:u.description,logo:u.logo,category:u.category,vendor:{alias:u.vendors.alias,url:u.vendors.url}}))}async function kS4(i,u){let t=await fetch(`${i}/rest/v1/apps?select=name,title,description,logo,category,vendors(alias,url)`,{headers:{apikey:u,Authorization:`Bearer ${u}`,Accept:"application/json"},signal:AbortSignal.timeout(IS4)});if(!t.ok){let f=await t.text().catch(()=>t.statusText);throw console.error(`[deco-apps] Supabase error (${t.status}): ${f.slice(0,200)}`),Error(`External service error (${t.status})`)}return await t.json()}var IS4=1e4,jS4=async(i,u)=>{if(!i.get("studioContext").auth.user?.id)return i.json({error:"Unauthorized"},401);return u()},g1t=()=>{let i=new Yu;return i.use("*",jS4),i.get("/",async(u)=>{let t=vu(),f=t.decoSupabaseUrl,l=t.decoSupabaseServiceKey;if(!f||!l)return u.json({apps:[]});try{let E=await kS4(f,l);return u.json({apps:xS4(E)})}catch(E){return console.error("[deco-apps] GET error:",E),u.json({error:"Failed to fetch apps"},502)}}),i};var T1t=O(()=>{Ef();R0()});import{z as bu}from"zod";function s8(i,u="invalid_request_error",t=null,f=null){return{error:{message:i,type:u,param:t,code:f}}}function zS4(i){if(!i)return null;let u=i.indexOf(":");if(u===-1)return{credentialId:null,modelId:i};let t=i.substring(0,u),f=i.substring(u+1);if(!t||!f)return null;return{credentialId:t,modelId:f}}function RS4(i,u,t){try{return JSON.parse(i)}catch{throw new y1t(`Invalid JSON in tool call arguments for function '${t}' (tool_call_id: ${u}): ${i}`)}}function nS4(i){let u={};for(let t of i)if(t.role==="assistant"&&t.tool_calls)for(let f of t.tool_calls)u[f.id]=f.function.name;return i.map((t)=>{switch(t.role){case"system":return{role:"system",content:t.content};case"user":if(typeof t.content==="string")return{role:"user",content:t.content};return{role:"user",content:t.content.map((l)=>{if(l.type==="text")return{type:"text",text:l.text};return{type:"image",image:l.image_url.url}})};case"assistant":if(t.tool_calls&&t.tool_calls.length>0)return{role:"assistant",content:t.tool_calls.map((l)=>({type:"tool-call",toolCallId:l.id,toolName:l.function.name,input:RS4(l.function.arguments,l.id,l.function.name)}))};return{role:"assistant",content:t.content??""};case"tool":let f=u[t.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:t.tool_call_id,toolName:f,output:{type:"text",value:t.content}}]}}})}function bS4(i){let u=i.map((t)=>{let f=t.function.parameters?d$(t.function.parameters):d$({type:"object",properties:{}});return[t.function.name,n0({description:t.function.description,inputSchema:f})]});return Object.fromEntries(u)}function CS4(i){if(!i)return;return{openai:{response_format:i}}}function MS4(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function U1t(i,u,t,f,l,E){let c={model:i,messages:u,tools:t,temperature:f.temperature,maxTokens:f.max_tokens,topP:f.top_p,frequencyPenalty:f.frequency_penalty,presencePenalty:f.presence_penalty,stopSequences:f.stop?Array.isArray(f.stop)?f.stop:[f.stop]:void 0,abortSignal:E};return l?{...c,providerOptions:l}:c}function A1t(i){if(i==="tool-calls")return"tool_calls";if(i==="length")return"length";return"stop"}var XS4=256,JS4,KS4,YS4,WS4,SS4,LS4,QS4,HS4,y1t,P1t,G1t;var I1t=O(()=>{Nf();Ef();wb();JS4=bu.object({type:bu.literal("function"),function:bu.object({name:bu.string(),description:bu.string().optional(),parameters:bu.record(bu.string(),bu.unknown()).optional()})}),KS4=bu.object({id:bu.string(),type:bu.literal("function"),function:bu.object({name:bu.string(),arguments:bu.string()})}),YS4=bu.discriminatedUnion("role",[bu.object({role:bu.literal("system"),content:bu.string(),name:bu.string().optional()}),bu.object({role:bu.literal("user"),content:bu.union([bu.string(),bu.array(bu.union([bu.object({type:bu.literal("text"),text:bu.string()}),bu.object({type:bu.literal("image_url"),image_url:bu.object({url:bu.string(),detail:bu.string().optional()})})]))]),name:bu.string().optional()}),bu.object({role:bu.literal("assistant"),content:bu.string().nullable().optional(),name:bu.string().optional(),tool_calls:bu.array(KS4).optional()}),bu.object({role:bu.literal("tool"),content:bu.string(),tool_call_id:bu.string()})]),WS4=bu.object({type:bu.literal("text")}),SS4=bu.object({type:bu.literal("json_object")}),LS4=bu.object({type:bu.literal("json_schema"),json_schema:bu.object({name:bu.string(),description:bu.string().optional(),schema:bu.record(bu.string(),bu.unknown()),strict:bu.boolean().optional()})}),QS4=bu.union([WS4,SS4,LS4]),HS4=bu.object({model:bu.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:bu.array(YS4),stream:bu.boolean().optional().default(!1),temperature:bu.number().min(0).max(2).optional(),max_tokens:bu.number().positive().optional(),top_p:bu.number().min(0).max(1).optional(),frequency_penalty:bu.number().min(-2).max(2).optional(),presence_penalty:bu.number().min(-2).max(2).optional(),stop:bu.union([bu.string(),bu.array(bu.string())]).optional(),tools:bu.array(JS4).optional(),tool_choice:bu.union([bu.literal("auto"),bu.literal("none"),bu.literal("required"),bu.object({type:bu.literal("function"),function:bu.object({name:bu.string()})})]).optional(),response_format:QS4.optional(),user:bu.string().optional()});y1t=class y1t extends Error{constructor(i){super(i);this.name="MessageConversionError"}};P1t=new Yu;P1t.post("/:org/v1/chat/completions",async(i)=>{let u=i.get("studioContext"),t=i.req.param("org");try{if(!u.auth.apiKey?.id)return i.json(s8("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!u.organization)return i.json(s8("Organization context is required. Ensure your API key has organization metadata.","invalid_request_error","organization"),400);if((u.organization.slug??u.organization.id)!==t)return i.json(s8("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let f=await i.req.json(),l=HS4.safeParse(f);if(!l.success){let B=l.error.issues[0]??{message:"Invalid request",path:[]};return i.json(s8(`Invalid request: ${B.message}`,"invalid_request_error",B.path.length>0?B.path.join("."):null),400)}let E=l.data,c=zS4(E.model);if(!c)return i.json(s8("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}=c,{modelId:$}=c;if(!w){let B=await u.storage.aiProviderKeys.list({organizationId:u.organization.id});if(B.length===0)return i.json(s8("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=B[0].id}let h;try{h=await u.aiProviders.activate(w,u.organization.id)}catch{return i.json(s8(`AI provider credential not found or inaccessible: ${w}`,"invalid_request_error","model"),404)}let v=h.aiSdk.languageModel($),d=nS4(E.messages),D=E.tools?bS4(E.tools):void 0,_=CS4(E.response_format),N=MS4(),Z=Math.floor(Date.now()/1000);if(E.stream)return A7(i,async(B)=>{let F=U1t(v,d,D,E,_,i.req.raw.signal);try{let g=R5(F),T=!1,U=0,A="",G=async()=>{if(A.length===0)return;let k=A;A="",await B.writeSSE({data:JSON.stringify({id:N,object:"chat.completion.chunk",created:Z,model:E.model,choices:[{index:0,delta:{content:k},finish_reason:null}]})})};for await(let k of g.fullStream){if(!T&&(k.type==="text-delta"||k.type==="tool-call"))await B.writeSSE({data:JSON.stringify({id:N,object:"chat.completion.chunk",created:Z,model:E.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),T=!0;if(k.type==="text-delta"){if(A+=k.text,A.length>=XS4)await G()}else if(k.type==="tool-call"){await G();let I=U++;await B.writeSSE({data:JSON.stringify({id:N,object:"chat.completion.chunk",created:Z,model:E.model,choices:[{index:0,delta:{tool_calls:[{index:I,id:k.toolCallId,type:"function",function:{name:k.toolName,arguments:JSON.stringify(k.input)}}]},finish_reason:null}]})})}else if(k.type==="finish")await G(),await B.writeSSE({data:JSON.stringify({id:N,object:"chat.completion.chunk",created:Z,model:E.model,choices:[{index:0,delta:{},finish_reason:A1t(k.finishReason)}],usage:k.totalUsage?{prompt_tokens:k.totalUsage.inputTokens??0,completion_tokens:k.totalUsage.outputTokens??0,total_tokens:k.totalUsage.totalTokens??0}:void 0})})}await G(),await B.writeSSE({data:"[DONE]"})}catch(g){let T=g;console.error("[openai-compat:stream] Error:",T.message),await B.writeSSE({data:JSON.stringify({error:{message:T.message,type:"server_error"}})})}});else{let B=U1t(v,d,D,E,_,i.req.raw.signal),F=await XN(B),g={role:"assistant",content:F.text||null};if(F.toolCalls&&F.toolCalls.length>0)g.tool_calls=F.toolCalls.map((T)=>({id:T.toolCallId,type:"function",function:{name:T.toolName,arguments:JSON.stringify("input"in T?T.input:{})}})),g.content=null;return i.json({id:N,object:"chat.completion",created:Z,model:E.model,choices:[{index:0,message:g,finish_reason:A1t(F.finishReason)}],usage:{prompt_tokens:F.usage?.inputTokens??0,completion_tokens:F.usage?.outputTokens??0,total_tokens:F.usage?.totalTokens??0}})}}catch(f){let l=f;if(l.name==="AbortError")return i.json(s8("Request aborted","invalid_request_error"),400);if(l.name==="MessageConversionError")return i.json(s8(l.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",l.message,l.stack),i.json(s8(l.message,"server_error"),500)}});G1t=P1t});function VS4(){let i=process.env.POSTHOG_KEY;if(!i)return null;return{key:i,host:process.env.POSTHOG_HOST??qS4}}var x1t,qS4="https://ph.studio.decocms.com",k1t;var j1t=O(()=>{Ef();Gri();lO();Ml();R0();ivu();u6i();x1t=new Yu;x1t.get("/",(i)=>{let u={version:gL.version,theme:I00(),...IB().logo&&{logo:IB().logo},...V5()&&{internalUrl:M1i()},...vu().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!vu().firecrawlApiKey,auth:vp0(),posthog:VS4(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!V5()&&vu().sandboxProviderKind==="agent-sandbox"}};return i.header("Cache-Control","no-store"),i.json({success:!0,config:u})});k1t=x1t});function hb(i){let u=(i??"").trim().toLowerCase();return u=u.replace(/^https?:\/\//,""),u=u.replace(/^www\./,""),u=u.split(/[/?#]/)[0]??"",u.replace(/\/+$/,"")}function s8u(i){return(hb(i).split(".")[0]||i).replace(/[-_]/g," ").split(" ").filter(Boolean).map((t)=>t.charAt(0).toUpperCase()+t.slice(1)).join(" ")}function p8u(i,u=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(hb(i))}&sz=${u}`}function X1t(i,u){let t=i.trim();if(t.length<=u)return t;let f=t.slice(0,u-1),l=f.lastIndexOf(" ");return`${(l>u*0.6?f.slice(0,l):f).trimEnd()}\u2026`}function J1t(i){let{brand:u,domain:t,score:f,verdict:l}=i,E=typeof f==="number"?`${u} commerce report \u2014 ${Math.round(f)}/100 \xB7 decocms`:`${u} commerce report \xB7 decocms`,c=`See the full ${u} scorecard \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,w=l?.trim()?X1t(`${l.trim().replace(/\s+/g," ")} \u2014 ${c}`,200):X1t(`How does ${t} really perform? ${c}`,200);return{title:E,description:w}}import{z as wu}from"zod";var wW,rS4,mS4,eS4,aS4,K1t;var Y1t=O(()=>{wW=wu.enum(["good","bad","neutral"]),rS4=wu.preprocess((i)=>{if(Array.isArray(i))return{kind:"text",value:i.find((t)=>t!==null&&typeof t!=="object")??""};return i!==null&&typeof i==="object"?i:{kind:"text",value:i}},wu.object({kind:wu.enum(["text","number","sparkline","badge","score"]).catch("text"),value:wu.coerce.string().optional(),tone:wW.optional(),muted:wu.boolean().optional(),delta:wu.coerce.string().optional(),deltaDir:wu.enum(["up","down","neutral"]).optional(),points:wu.array(wu.coerce.number()).optional(),label:wu.coerce.string().optional()}).transform((i)=>{if(i.kind==="badge"&&i.label==null)i.label=i.value??"";if(i.kind==="score"){let u=Number(i.value);if(Number.isNaN(u))return{...i,kind:"text"}}return i})),mS4=wu.preprocess((i)=>{let u=i;if(u&&typeof u==="object"&&!Array.isArray(u)&&Array.isArray(u.cells))u=u.cells;if(Array.isArray(u)&&u.length===1&&Array.isArray(u[0]))u=u[0];if(Array.isArray(u))return u;if(u&&typeof u==="object")return Object.values(u);return u},wu.array(rS4)),eS4={key:wu.coerce.string(),title:wu.coerce.string(),eyebrow:wu.coerce.string().optional(),headline:wu.coerce.string(),annotation:wu.coerce.string().optional(),methodology:wu.coerce.string().optional(),sources:wu.array(wu.object({name:wu.coerce.string(),logoUrl:wu.coerce.string()})).optional()},aS4=wu.discriminatedUnion("template",[wu.object({template:wu.literal("cover"),score:wu.object({value:wu.coerce.number(),max:wu.coerce.number().optional(),grade:wu.coerce.string().optional(),label:wu.coerce.string().optional()}).optional(),brandImage:wu.coerce.string().optional(),screenshot:wu.coerce.string().optional(),mobileScreenshot:wu.coerce.string().optional()}),wu.object({template:wu.literal("cta"),ctaUrl:wu.coerce.string().optional(),ctaLabel:wu.coerce.string().optional(),bullets:wu.array(wu.coerce.string()).optional()}),wu.object({template:wu.literal("series"),points:wu.array(wu.coerce.number()).min(2),xLabels:wu.array(wu.coerce.string()).min(1),unit:wu.coerce.string().optional(),callout:wu.object({index:wu.coerce.number(),value:wu.coerce.string(),tone:wW.optional()})}),wu.object({template:wu.literal("threshold"),value:wu.coerce.string().default(""),metricLabel:wu.coerce.string().optional(),ratio:wu.coerce.number(),thresholdRatio:wu.coerce.number().optional(),thresholdLabel:wu.coerce.string().default(""),tone:wW.optional()}),wu.object({template:wu.literal("stats"),stats:wu.array(wu.object({value:wu.coerce.string(),label:wu.coerce.string(),tone:wW.optional()})).min(1)}),wu.object({template:wu.literal("bars"),items:wu.array(wu.object({value:wu.coerce.string(),label:wu.coerce.string(),ratio:wu.coerce.number(),tone:wW.optional()})).min(1)}),wu.object({template:wu.literal("gauges"),gauges:wu.array(wu.object({label:wu.coerce.string(),value:wu.coerce.string(),status:wu.enum(["good","warn","bad"]).catch("warn"),caption:wu.coerce.string().optional(),ratio:wu.coerce.number().optional()})).min(1)}),wu.object({template:wu.literal("checklist"),checks:wu.array(wu.object({label:wu.coerce.string(),status:wu.enum(["pass","fail","warn"]).catch("fail"),value:wu.coerce.string().optional()})).min(1)}),wu.object({template:wu.literal("table"),columns:wu.array(wu.object({label:wu.coerce.string(),align:wu.enum(["left","right"]).optional()})).min(1),rows:wu.array(mS4).min(1),highlightRow:wu.coerce.number().optional()}),wu.object({template:wu.literal("products"),products:wu.array(wu.object({name:wu.coerce.string(),price:wu.coerce.string().optional(),image:wu.coerce.string().optional(),url:wu.coerce.string().optional()})).min(1)}),wu.object({template:wu.literal("list"),entries:wu.array(wu.object({label:wu.coerce.string(),severity:wu.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:wu.coerce.number().optional()}),wu.object({template:wu.literal("keywords"),volumeLabel:wu.coerce.string().optional(),keywords:wu.array(wu.object({term:wu.coerce.string(),volume:wu.coerce.string(),position:wu.coerce.number().catch(0)})).min(1)}),wu.object({template:wu.literal("competitor"),metricLabel:wu.coerce.string().optional(),competitors:wu.array(wu.object({name:wu.coerce.string(),value:wu.coerce.string(),tone:wW.optional(),isYou:wu.boolean().optional()})).min(1)}),wu.object({template:wu.literal("scorecard"),rivalLabel:wu.coerce.string().optional(),dimensions:wu.array(wu.object({label:wu.coerce.string(),you:wu.coerce.string(),rival:wu.coerce.string().optional(),rivalName:wu.coerce.string().optional(),tone:wW.optional()})).min(1)})]),K1t=wu.object({...eS4,template:aS4})});function GIi(i){let u=[],t=[...i.sections].sort((f,l)=>f.position-l.position).map((f)=>{let l=K1t.safeParse(f.props);if(l.success)return l.data;let E=l.error.issues[0];return u.push({section_type:f.section_type,position:f.position,reason:E?`${E.path.join(".")||"(root)"}: ${E.message}`:"contract violation"}),null}).filter((f)=>f!==null);return{deck:{meta:{...i.meta,scores:i.summary?.scores},slides:t},drops:u}}var iDu=O(()=>{Y1t()});function uDu(i){return Buffer.from(i,"base64")}var W1t;var S1t=O(()=>{W1t=[{name:"Inter",data:uDu("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"),weight:400,style:"normal"},{name:"Inter",data:uDu("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"),weight:600,style:"normal"},{name:"Inter",data:uDu("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"),weight:700,style:"normal"}]});import oS4 from"satori";import{Resvg as sS4}from"@resvg/resvg-js";async function iL4(i){try{let u=await fetch(i,{signal:AbortSignal.timeout(1500)});if(!u.ok)return null;let t=u.headers.get("content-type")||"image/png";if(!t.startsWith("image/"))return null;let f=Buffer.from(await u.arrayBuffer()).toString("base64");return`data:${t};base64,${f}`}catch{return null}}async function H1t(i){let u=i.faviconUrl?await iL4(i.faviconUrl):null,t=u?mE("div",{width:84,height:84,flexShrink:0,borderRadius:20,backgroundColor:Q1t,display:"flex",alignItems:"center",justifyContent:"center"},mE("img",{},null,{src:u,width:56,height:56})):mE("div",{width:84,height:84,flexShrink:0,borderRadius:20,backgroundColor:IIi,color:fDu,fontSize:44,fontWeight:700,display:"flex",alignItems:"center",justifyContent:"center"},(i.initial||i.domain.charAt(0)||"?").toUpperCase()),f=mE("div",{width:tDu,height:L1t,display:"flex",flexDirection:"column",justifyContent:"space-between",padding:"72px 80px",backgroundColor:fDu,color:Q1t,fontFamily:"Inter"},[mE("div",{display:"flex",alignItems:"center",gap:22},[t,mE("div",{display:"flex",flexDirection:"column"},[mE("div",{fontSize:24,color:IIi,fontWeight:600,marginBottom:4},"Commerce report"),mE("div",{fontSize:46,fontWeight:600,letterSpacing:"-0.02em"},i.domain)])]),mE("div",{display:"flex",alignItems:"flex-end",gap:28},[mE("div",{fontSize:220,fontWeight:700,color:IIi,lineHeight:0.82,letterSpacing:"-0.05em"},String(Math.round(i.score))),mE("div",{fontSize:60,fontWeight:400,color:"rgba(244,251,230,0.55)",paddingBottom:30},"/100"),mE("div",{fontSize:30,fontWeight:400,color:"rgba(244,251,230,0.82)",paddingBottom:40},"Commerce health score")]),mE("div",{display:"flex",alignItems:"center",gap:14},[mE("div",{width:44,height:44,borderRadius:11,backgroundColor:IIi,display:"flex",alignItems:"center",justifyContent:"center"},mE("svg",{},mE("path",{},null,{d:pS4,fill:fDu}),{width:30,height:30,viewBox:"0 0 200 200"})),mE("div",{fontSize:26,fontWeight:700},"decocms")])]),l=await oS4(f,{width:tDu,height:L1t,fonts:W1t}),E=new sS4(l,{fitTo:{mode:"width",value:tDu}}).render().asPng();return Uint8Array.from(E)}var tDu=1200,L1t=630,fDu="#07401a",IIi="#d0ec1a",Q1t="#f4fbe6",pS4="M79.8641 145.438C97.4676 145.438 107.196 137.562 118.777 113.01C125.263 99.5758 130.358 86.1415 136.381 73.1705L143.793 75.4867C145.646 75.95 147.035 75.0235 146.109 73.1705L136.844 55.1037C136.381 53.714 134.528 53.714 133.601 54.1772L111.365 62.5157C109.512 62.979 109.512 64.832 111.365 65.2952L117.851 67.6115C112.292 79.656 105.806 98.186 100.247 109.767C94.2249 122.738 91.4454 131.54 80.7906 131.54C70.1359 131.54 68.7461 123.665 73.3786 112.084C78.4744 98.6493 86.8129 94.9433 96.0779 97.7228C98.8574 94.0168 100.71 88.4578 101.637 83.362C98.8574 82.4355 95.6146 82.4355 92.8351 82.4355C77.5479 82.4355 62.2606 90.3108 55.7751 106.988C48.8263 128.761 56.2383 145.438 79.8641 145.438Z",mE=(i,u,t,f={})=>({type:i,props:{...f,style:u,children:t}});var z1t=O(()=>{S1t()});import{join as R1t}from"path";async function n1t(i){try{let u=await fetch(`${zh({})}/api/v2/public/diagnostics/${encodeURIComponent(i)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(uL4)});if(!u.ok)return null;let t=await u.json(),{deck:f}=GIi(t);if(!f.slides.length)return null;let l=f.slides.find((w)=>w.template.template==="cover"),E=l?.template,c=E&&E.template==="cover"?E:void 0;return{brand:f.meta.brand?.trim()||s8u(i),score:f.meta.scores?.cover??c?.score?.value,verdict:l?.annotation?.trim()||l?.headline?.trim()||void 0}}catch{return null}}function R$(i){return i.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function tL4(i,u){let t=hb(i),f=u?.brand?.trim()||s8u(t),l=p8u(t,128),c=`${(vu().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(t)}`,{title:w,description:$}=J1t({brand:f,domain:t,score:u?.score,verdict:u?.verdict}),h=`${c}/og.png`,v=`${f} commerce report by decocms`;return[`<title>${R$(w)}</title>`,`<meta name="description" content="${R$($)}" />`,'<meta name="robots" content="noindex, follow" />','<meta property="og:type" content="website" />','<meta property="og:site_name" content="decocms" />',`<meta property="og:title" content="${R$(w)}" />`,`<meta property="og:description" content="${R$($)}" />`,`<meta property="og:url" content="${R$(c)}" />`,`<meta property="og:image" content="${R$(h)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${R$(v)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${R$(w)}" />`,`<meta name="twitter:description" content="${R$($)}" />`,`<meta name="twitter:image" content="${R$(h)}" />`,`<meta name="twitter:image:alt" content="${R$(v)}" />`,`<link rel="canonical" href="${R$(c)}" />`,`<link rel="icon" href="${R$(l)}" sizes="any" />`].join(`
|
|
86833
|
+
Respond with the structured verdict and a short reason.`,p4t;var u1t=O(()=>{Nf();GN();V8u();DS4=r8u.object({requiresReview:r8u.boolean().describe("true if the changes should go through pull-request review"),reason:r8u.string().describe("One short sentence explaining the decision (max ~120 chars)")});p4t={requiresReview:!1,reason:""}});function ZS4(i){if(!i||i.includes(".."))return!1;return OS4.test(i)}function t1t(i){let u=typeof i.__resolveType==="string"?i.__resolveType:null;if(!u||!ZS4(u))return null;let{__resolveType:t,...f}=i;return{resolveType:u,payload:f}}function f1t(i,u){return`${i.replace(/\/+$/,"")}/deco/invoke/${u}`}var OS4;var l1t=O(()=>{OS4=/^[\w./@-]+$/});function m8u(i){let u;try{u=new URL(i)}catch{return null}if(!u.hostname.endsWith(".localhost"))return null;let t=u.host;return u.hostname="127.0.0.1",{url:u.toString(),hostHeader:t}}function E1t(i,u){let t=i?.githubRepo;if(!t?.owner||!t?.name)return null;if(!t.connectionId)return t;if(!u.includes(t.connectionId))return null;return t}async function c1t(i,u,t,f){if(!f.connectionId)throw new $b("Push requires a connected GitHub account. Connect mcp-github for this project and restart the sandbox.");let l=i.organization?.id;if(!l)throw new $b(xc);await ER({ctx:i,connectionId:f.connectionId,organizationId:l,forceRefresh:!0,onLegacyMintError:(v)=>{let d=v instanceof Error?v.message:xc;throw new $b(d)}});let{cloneUrl:E,gitUserName:c,gitUserEmail:w}=await nN(f.connectionId,f.owner,f.name,i.db,i.vault),$=AIi(i),h=await u.proxyDaemonRequest(t,"/_sandbox/config",{method:"PUT",headers:new Headers({"content-type":"application/json"}),body:JSON.stringify({git:{repository:{cloneUrl:E},identity:{userName:c,userEmail:w}},...$?{operator:$}:{}})});if(!h.ok){let v=await h.text().catch(()=>h.statusText);throw Error(`Failed to refresh sandbox git credentials (${h.status}): ${v}`)}}var $b;var w1t=O(()=>{ON();z8u();Ao();$b=class $b extends Error{constructor(i){super(i);this.name="GitPushAuthError"}}});function FS4(i){let u=i.startsWith("thread:")?i.slice(7):i;if(!u||u.length>255||u.includes("..")||u.startsWith("/")||u.endsWith("/")||u.endsWith(".lock")||!BS4.test(u))throw Error(`Invalid branch name: ${i}`)}function EW(i){return AbortSignal.any([i.req.raw.signal,AbortSignal.timeout(US4)])}function cW(i){let{runner:u}=i.get("vmClaim");if(!u)return i.json({error:"No sandbox runner configured"},503);return u}function e8u(i,u){let f=(yIi.get(i)??Promise.resolve()).catch(()=>{}).then(u),l=f.catch(()=>{});return yIi.set(i,l),l.finally(()=>{if(yIi.get(i)===l)yIi.delete(i)}),f}async function hE(i,u,t){let f=cW(i);if(f instanceof Response)return f;let{claimName:l,userId:E,projectRef:c}=i.get("vmClaim"),w=t?.method??"POST",$=null,h=new Headers;if(t?.jsonBody!==void 0)$=t.jsonBody,h.set("content-type","application/json");else if(t?.forwardJsonBody)$=await i.req.text(),h.set("content-type","application/json");let v=t?.signal,d={method:w,headers:h,body:$,...v?{signal:v}:{}},D=async()=>{let _=await f.proxyDaemonRequest(l,u,d);if(t?.map404to410&&_.status===404){try{await _.body?.cancel()}catch{}if(await f.adoptLiveClaim?.({userId:E,projectRef:c},l))_=await f.proxyDaemonRequest(l,u,d);if(_.status===404){try{await _.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",...z$}})}}let N=await _.text(),Z=t?.redactRepoDirUnlessDesktop&&f.kind!=="user-desktop"?yS4(N):N,B=_.headers.get("content-type")??"application/json";return new Response(Z,{status:_.status,headers:{"content-type":B,...z$}})};try{if(v){let _=D();return _.catch(()=>{}),await Promise.race([_,new Promise((Z,B)=>{if(v.aborted)return B(v.reason);v.addEventListener("abort",()=>B(v.reason),{once:!0})})])}return await D()}catch(_){let N=_ instanceof Error?_.message:String(_);return i.json({error:`Daemon unreachable: ${N}`},502)}}function yS4(i){try{let u=JSON.parse(i);if(u&&typeof u==="object"&&!Array.isArray(u)&&"repoDir"in u)return JSON.stringify({...u,repoDir:null})}catch{}return i}async function PIi(i,u,t,f="GET",l){let E=await i.proxyDaemonRequest(u,t,{method:f,headers:new Headers,body:null});if(E.status===404&&l){try{await E.body?.cancel()}catch{}if(await i.adoptLiveClaim?.(l,u))E=await i.proxyDaemonRequest(u,t,{method:f,headers:new Headers,body:null})}if(E.status===404){try{await E.body?.cancel()}catch{}throw Error("SANDBOX_GONE")}let c=await E.text();if(!E.ok)try{let w=JSON.parse(c);throw Error(w.error??`Daemon error (${E.status})`)}catch(w){if(w instanceof Error&&w.message!==c)throw w;throw Error(`Daemon error (${E.status})`)}return JSON.parse(c)}function PS4(i){return v1t.includes(i)}var BS4,$1t=524288,gS4=65536,TS4=10485760,SO,US4=1e4,h1t=2000,AS4,yIi,z$,v1t,d1t=()=>{let i=new Yu;return i.use("/:virtualMcpId/:branch/*",AS4),i.post("/:virtualMcpId/:branch/write",SO,(u)=>hE(u,"/_sandbox/write",{forwardJsonBody:!0,signal:EW(u)})),i.post("/:virtualMcpId/:branch/unlink",SO,(u)=>hE(u,"/_sandbox/unlink",{forwardJsonBody:!0,signal:EW(u)})),i.post("/:virtualMcpId/:branch/mkdir",SO,(u)=>hE(u,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:EW(u)})),i.post("/:virtualMcpId/:branch/rename",SO,(u)=>hE(u,"/_sandbox/rename",{forwardJsonBody:!0,signal:EW(u)})),i.post("/:virtualMcpId/:branch/read",SO,(u)=>hE(u,"/_sandbox/read",{forwardJsonBody:!0,signal:EW(u)})),i.post("/:virtualMcpId/:branch/glob",SO,(u)=>hE(u,"/_sandbox/glob",{forwardJsonBody:!0,signal:EW(u)})),i.post("/:virtualMcpId/:branch/grep",SO,(u)=>hE(u,"/_sandbox/grep",{forwardJsonBody:!0,signal:EW(u)})),i.post("/:virtualMcpId/:branch/exec/:script",async(u)=>{let t=u.req.param("script");if(!t)return u.json({error:"missing script name"},400);return hE(u,`/_sandbox/exec/${encodeURIComponent(t)}`)}),i.post("/:virtualMcpId/:branch/exec/:script/kill",async(u)=>{let t=u.req.param("script");if(!t)return u.json({error:"missing script name"},400);return hE(u,`/_sandbox/exec/${encodeURIComponent(t)}/kill`)}),i.get("/:virtualMcpId/:branch/config",(u)=>hE(u,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDirUnlessDesktop:!0})),i.put("/:virtualMcpId/:branch/config",SO,(u)=>hE(u,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),i.post("/:virtualMcpId/:branch/setup/:step",async(u)=>{let t=u.req.param("step");if(!t||!PS4(t))return u.json({error:`step must be one of: ${v1t.join(", ")}`},400);if(t==="start"){let f=u.get("vmClaim");if(f.runner){let l=Oi(u.var.studioContext),E=iUi(f.virtualMcpMetadata);try{await tUi({ctx:u.var.studioContext,runner:f.runner,handle:f.claimName,orgId:l.id,userId:f.userId,entries:E})}catch(c){let w=c instanceof Error?c.message:String(c);return u.json({error:`Failed to push env to daemon: ${w}`},502)}}}return hE(u,`/_sandbox/setup/${t}`,{signal:u.req.raw.signal,map404to410:!0})}),i.get("/:virtualMcpId/:branch/events",(u)=>{let t=u.get("vmClaim");if(!t.runner)return A7(u,async(f)=>{await f.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:"No sandbox runner configured on this studio instance."})})});return r4t(u,{ctx:u.var.studioContext,claimName:t.claimName,runner:t.runner,virtualMcpId:t.virtualMcpId,branch:t.branch,userId:t.userId,projectRef:t.projectRef,virtualMcpMetadata:t.virtualMcpMetadata})}),i.get("/:virtualMcpId/:branch/git/status",(u)=>hE(u,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([u.req.raw.signal,AbortSignal.timeout(h1t)])})),i.post("/:virtualMcpId/:branch/git/status",(u)=>hE(u,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([u.req.raw.signal,AbortSignal.timeout(h1t)])})),i.post("/:virtualMcpId/:branch/git/diff",(u)=>hE(u,"/_sandbox/git/diff",{forwardJsonBody:!0,map404to410:!0})),i.post("/:virtualMcpId/:branch/git/publish",async(u)=>{let t=cW(u);if(t instanceof Response)return t;let{claimName:f,virtualMcpMetadata:l,connectionIds:E}=u.get("vmClaim"),c=u.var.studioContext;return e8u(f,async()=>{try{await R8u(c,t,f);let w=E1t(l,E);if(w)await c1t(c,t,f,w)}catch(w){if(w instanceof $b)return u.json({error:w.message},403,z$);let $=w instanceof Error?w.message:String(w);return u.json({error:$},502,z$)}return hE(u,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})})}),i.post("/:virtualMcpId/:branch/git/discard",(u)=>{let{claimName:t}=u.get("vmClaim");return e8u(t,()=>hE(u,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0}))}),i.post("/:virtualMcpId/:branch/git/rebase",async(u)=>{let t=cW(u);if(t instanceof Response)return t;let{claimName:f}=u.get("vmClaim"),l=u.var.studioContext;return e8u(f,async()=>{try{await R8u(l,t,f)}catch(E){let c=E instanceof Error?E.message:String(E);return u.json({error:c},502,z$)}return hE(u,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),i.post("/:virtualMcpId/:branch/git/suggest-commit",$E({maxSize:$1t,onError:(u)=>u.json({error:"Payload too large"},413,z$)}),async(u)=>{let t=cW(u);if(t instanceof Response)return t;let{claimName:f,userId:l,projectRef:E}=u.get("vmClaim"),c=u.var.studioContext;try{let w=await u.req.json().catch(()=>({})),$=w.status,h=w.diff,v=h!=null&&typeof h.diffs==="object"&&h.diffs!==null,[d,D]=C8u($)&&v?[$,h]:await Promise.all([PIi(t,f,"/_sandbox/git/status","GET",{userId:l,projectRef:E}),PIi(t,f,"/_sandbox/git/diff","GET",{userId:l,projectRef:E})]),_=await s4t(c,d,D);return u.json(_,200,z$)}catch(w){let $=w instanceof Error?w.message:String(w);if($==="SANDBOX_GONE")return u.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,z$);return u.json({error:$},502,z$)}}),i.post("/:virtualMcpId/:branch/git/judge-review",$E({maxSize:$1t,onError:(u)=>u.json({error:"Payload too large"},413,z$)}),async(u)=>{let t=cW(u);if(t instanceof Response)return t;let{claimName:f,userId:l,projectRef:E}=u.get("vmClaim"),c=u.var.studioContext;try{let w=await u.req.json().catch(()=>({})),$=w.status,h=w.diff,v=h!=null&&typeof h.diffs==="object"&&h.diffs!==null,[d,D]=C8u($)&&v?[$,h]:await Promise.all([PIi(t,f,"/_sandbox/git/status","GET",{userId:l,projectRef:E}),PIi(t,f,"/_sandbox/git/diff","GET",{userId:l,projectRef:E})]),_=await i1t(c,d,D,typeof w.language==="string"?w.language:void 0);return u.json(_,200,z$)}catch(w){let $=w instanceof Error?w.message:String(w);if($==="SANDBOX_GONE")return u.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,z$);return u.json({error:$},502,z$)}}),i.get("/:virtualMcpId/:branch/preview-fetch",async(u)=>{let t=cW(u);if(t instanceof Response)return t;let{claimName:f}=u.get("vmClaim"),l=u.req.query("path");if(!l||!l.startsWith("/")||l.startsWith("//")||l.includes("..")||l.includes("\\"))return u.json({error:"Path not allowed"},403);let E;try{E=await t.getPreviewUrl(f)}catch{return u.json({error:"Preview not available"},502)}if(!E)return u.json({error:"Preview not available"},502);let c=E.replace(/\/+$/,""),w=m8u(`${c}${l}`),$;try{$=await fetch(w?.url??`${c}${l}`,{...w?{headers:{host:w.hostHeader}}:{}})}catch{return u.json({error:"Preview unreachable"},502)}let h;try{h=await $.text()}catch{return u.json({error:"Preview unreachable"},502)}return new Response(h,{status:$.status,headers:{"content-type":$.headers.get("content-type")??"application/json"}})}),i.post("/:virtualMcpId/:branch/preview-invoke",$E({maxSize:gS4,onError:(u)=>u.json({error:"Payload too large"},413)}),async(u)=>{let t=cW(u);if(t instanceof Response)return t;let{claimName:f}=u.get("vmClaim"),l;try{l=await t.getPreviewUrl(f)}catch{return u.json({error:"Preview not available"},502)}if(!l)return u.json({error:"Preview not available"},502);let E;try{E=await u.req.json()}catch{return u.json({error:"Invalid JSON body"},400)}if(!E||typeof E!=="object"||Array.isArray(E))return u.json({error:"Invalid JSON body"},400);let c=t1t(E);if(!c)return u.json({error:"Invalid or missing __resolveType"},400);let w=f1t(l,c.resolveType),$=m8u(w),h;try{h=await fetch($?.url??w,{method:"POST",headers:{"content-type":"application/json",...$?{host:$.hostHeader}:{}},body:JSON.stringify(c.payload),signal:AbortSignal.timeout(30000)})}catch{return u.json({error:"Preview unreachable"},502)}let v;try{v=await h.text()}catch{return u.json({error:"Preview unreachable"},502)}return new Response(v,{status:h.status,headers:{"content-type":h.headers.get("content-type")??"application/json"}})}),i};var D1t=O(()=>{Ef();aY();wb();q4t();C5();dvu();UR();V4t();m4t();DEu();AR();V8u();u1t();l1t();w1t();BS4=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;SO=$E({maxSize:TS4,onError:(i)=>i.json({error:"Payload too large"},413)});AS4=M4t(async(i,u)=>{let t=i.var.studioContext;try{gi(t)}catch{return i.json({error:"Unauthorized"},401)}let f=Qu(t);if(!f)return i.json({error:"Unauthorized"},401);let l;try{l=Oi(t)}catch{return i.json({error:"Organization scope required"},403)}let E=i.req.param("virtualMcpId"),c=i.req.param("branch");if(!E||!c)return i.json({error:"virtualMcpId and branch are required"},400);try{FS4(c)}catch(D){let _=D instanceof Error?D.message:String(D);return i.json({error:_},400)}let w=await t.storage.virtualMcps.findById(E);if(!w||w.organization_id!==l.id)return i.json({error:"Virtual MCP not found"},404);let $=xg({orgId:l.id,virtualMcpId:E,branch:c}),h=_Gi({userId:f,projectRef:$},c),v=w.metadata??null,d;try{d=(await Kv(t,{userId:f,branch:c,virtualMcpMetadata:v})).provider}catch{d=null}if(!d)return i.json({error:"No sandbox runner found"},404);return i.set("vmClaim",{claimName:h,runner:d,virtualMcpId:E,branch:c,userId:f,projectRef:$,virtualMcpMetadata:v,connectionIds:w.connections?.map((D)=>D.connection_id)??[]}),u()});yIi=new Map;z$={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};v1t=["clone","install","start"]});var _1t=(i)=>{let u=new Yu;if(u.use("*",eY),u.route("/",zGi()),u.route("/",J0t()),u.route("/",J4t()),u.route("/",j4t()),u.route("/",gIi()),u.route("/tools",H4t()),u.route("/",S4t()),u.route("/",_4t({kvStorage:i.kvStorage})),u.route("/",d4t()),u.route("/fs",P4t({getConnection:i.getNatsConnection})),u.route("/sandbox",d1t()),u.route("/",I4t()),u.route("/deco-sites",nGi()),u.route("/sso",hGi()),u.route("/",TIi({tokenStorage:i.tokenStorage,automationEventDispatcher:i.automationEventDispatcher})),u.route("/webhooks",P0t()),i.mountDevAssets)u.route("/dev-assets",bGi({orgFromPath:!0}));return u.use("/mcp/:connectionId?",i.mcpAuth),u.use("/mcp/:connectionId/ui-resource",i.mcpAuth),u.use("/mcp/gateway/:virtualMcpId?",i.mcpAuth),u.use("/mcp/virtual-mcp/:virtualMcpId?",i.mcpAuth),u.use("/mcp/self",i.mcpAuth),u.route("/",MZ0()),u.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",i.betterAuthProtectedResourceHandler),u.get("/mcp/.well-known/oauth-protected-resource",i.betterAuthProtectedResourceHandler),u.route("/mcp",nUi()),u.route("/mcp/self",FIi()),u.route("/mcp",MUi()),u.all("/oauth-proxy/:connectionId/*",i.oauthProxyHandler),u.get("/watch",i.watchHandler),u};var N1t=O(()=>{Ef();cdu();G0t();ddu();CGi();Yp();ldu();D4t();N4t();G4t();ya();Evu();qUi();K8u();x4t();X4t();K4t();L4t();W8u();z4t();S8u();bUi();D1t()});function a8u(i){try{i?.clear?.()}catch{}}async function O1t({accountJwt:i,accountSigningKey:u,expiresAt:t,permissions:f,userId:l,allowedConnectionTypes:E=["WEBSOCKET"]}){let c=G_u(i),w=jki(c.sub),$=Mb(new TextEncoder().encode(u)),h=_ui();try{let v=await Nui(l,h,w,{pub:{allow:f.publish.allow},sub:{allow:f.subscribe.allow},allowed_connection_types:E},{algorithm:sE.v2,exp:Math.floor(t.getTime()/1000),signer:$});return new TextDecoder().decode(Oui(v,h))}finally{a8u(h),a8u($),a8u(w)}}var Z1t=O(()=>{Ski()});function GS4(i){return/^wss?:\/\//i.test(i.trim())?["WEBSOCKET"]:["STANDARD","WEBSOCKET"]}function B1t(){let i=new Yu;return i.post("/links/session",async(u)=>{let f=u.get("studioContext").auth?.user?.id;if(!f)return u.json({error:"Unauthorized"},401);let l=vu();if(!l.natsTunnelPublicEnabled)return u.json(o8u(),503);if(!l.natsPublicUrl)return u.json(o8u(),503);if(!l.natsAccountJwt||!l.natsAccountSigningKey){if(!l.localMode)return u.json(o8u(),503)}let E=Ph(f),c;if(l.natsAccountJwt&&l.natsAccountSigningKey){let w=new Date(Date.now()+l.natsTunnelSessionTtlSeconds*1000);c=await O1t({accountJwt:l.natsAccountJwt,accountSigningKey:l.natsAccountSigningKey,expiresAt:w,permissions:tmu(E),userId:f,allowedConnectionTypes:GS4(l.natsPublicUrl)})}return u.json(fmu({publicUrl:l.natsPublicUrl,userId:f,ttlSeconds:l.natsTunnelSessionTtlSeconds,credentials:c}))}),i}var o8u=()=>({error:"link session unavailable"});var F1t=O(()=>{Ef();R0();Jni();Z1t()});function xS4(i){return i.filter((u)=>u.vendors?.alias).map((u)=>({name:u.name,title:u.title,description:u.description,logo:u.logo,category:u.category,vendor:{alias:u.vendors.alias,url:u.vendors.url}}))}async function kS4(i,u){let t=await fetch(`${i}/rest/v1/apps?select=name,title,description,logo,category,vendors(alias,url)`,{headers:{apikey:u,Authorization:`Bearer ${u}`,Accept:"application/json"},signal:AbortSignal.timeout(IS4)});if(!t.ok){let f=await t.text().catch(()=>t.statusText);throw console.error(`[deco-apps] Supabase error (${t.status}): ${f.slice(0,200)}`),Error(`External service error (${t.status})`)}return await t.json()}var IS4=1e4,jS4=async(i,u)=>{if(!i.get("studioContext").auth.user?.id)return i.json({error:"Unauthorized"},401);return u()},g1t=()=>{let i=new Yu;return i.use("*",jS4),i.get("/",async(u)=>{let t=vu(),f=t.decoSupabaseUrl,l=t.decoSupabaseServiceKey;if(!f||!l)return u.json({apps:[]});try{let E=await kS4(f,l);return u.json({apps:xS4(E)})}catch(E){return console.error("[deco-apps] GET error:",E),u.json({error:"Failed to fetch apps"},502)}}),i};var T1t=O(()=>{Ef();R0()});import{z as bu}from"zod";function s8(i,u="invalid_request_error",t=null,f=null){return{error:{message:i,type:u,param:t,code:f}}}function zS4(i){if(!i)return null;let u=i.indexOf(":");if(u===-1)return{credentialId:null,modelId:i};let t=i.substring(0,u),f=i.substring(u+1);if(!t||!f)return null;return{credentialId:t,modelId:f}}function RS4(i,u,t){try{return JSON.parse(i)}catch{throw new y1t(`Invalid JSON in tool call arguments for function '${t}' (tool_call_id: ${u}): ${i}`)}}function nS4(i){let u={};for(let t of i)if(t.role==="assistant"&&t.tool_calls)for(let f of t.tool_calls)u[f.id]=f.function.name;return i.map((t)=>{switch(t.role){case"system":return{role:"system",content:t.content};case"user":if(typeof t.content==="string")return{role:"user",content:t.content};return{role:"user",content:t.content.map((l)=>{if(l.type==="text")return{type:"text",text:l.text};return{type:"image",image:l.image_url.url}})};case"assistant":if(t.tool_calls&&t.tool_calls.length>0)return{role:"assistant",content:t.tool_calls.map((l)=>({type:"tool-call",toolCallId:l.id,toolName:l.function.name,input:RS4(l.function.arguments,l.id,l.function.name)}))};return{role:"assistant",content:t.content??""};case"tool":let f=u[t.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:t.tool_call_id,toolName:f,output:{type:"text",value:t.content}}]}}})}function bS4(i){let u=i.map((t)=>{let f=t.function.parameters?d$(t.function.parameters):d$({type:"object",properties:{}});return[t.function.name,n0({description:t.function.description,inputSchema:f})]});return Object.fromEntries(u)}function CS4(i){if(!i)return;return{openai:{response_format:i}}}function MS4(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function U1t(i,u,t,f,l,E){let c={model:i,messages:u,tools:t,temperature:f.temperature,maxTokens:f.max_tokens,topP:f.top_p,frequencyPenalty:f.frequency_penalty,presencePenalty:f.presence_penalty,stopSequences:f.stop?Array.isArray(f.stop)?f.stop:[f.stop]:void 0,abortSignal:E};return l?{...c,providerOptions:l}:c}function A1t(i){if(i==="tool-calls")return"tool_calls";if(i==="length")return"length";return"stop"}var XS4=256,JS4,KS4,YS4,WS4,SS4,LS4,QS4,HS4,y1t,P1t,G1t;var I1t=O(()=>{Nf();Ef();wb();JS4=bu.object({type:bu.literal("function"),function:bu.object({name:bu.string(),description:bu.string().optional(),parameters:bu.record(bu.string(),bu.unknown()).optional()})}),KS4=bu.object({id:bu.string(),type:bu.literal("function"),function:bu.object({name:bu.string(),arguments:bu.string()})}),YS4=bu.discriminatedUnion("role",[bu.object({role:bu.literal("system"),content:bu.string(),name:bu.string().optional()}),bu.object({role:bu.literal("user"),content:bu.union([bu.string(),bu.array(bu.union([bu.object({type:bu.literal("text"),text:bu.string()}),bu.object({type:bu.literal("image_url"),image_url:bu.object({url:bu.string(),detail:bu.string().optional()})})]))]),name:bu.string().optional()}),bu.object({role:bu.literal("assistant"),content:bu.string().nullable().optional(),name:bu.string().optional(),tool_calls:bu.array(KS4).optional()}),bu.object({role:bu.literal("tool"),content:bu.string(),tool_call_id:bu.string()})]),WS4=bu.object({type:bu.literal("text")}),SS4=bu.object({type:bu.literal("json_object")}),LS4=bu.object({type:bu.literal("json_schema"),json_schema:bu.object({name:bu.string(),description:bu.string().optional(),schema:bu.record(bu.string(),bu.unknown()),strict:bu.boolean().optional()})}),QS4=bu.union([WS4,SS4,LS4]),HS4=bu.object({model:bu.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:bu.array(YS4),stream:bu.boolean().optional().default(!1),temperature:bu.number().min(0).max(2).optional(),max_tokens:bu.number().positive().optional(),top_p:bu.number().min(0).max(1).optional(),frequency_penalty:bu.number().min(-2).max(2).optional(),presence_penalty:bu.number().min(-2).max(2).optional(),stop:bu.union([bu.string(),bu.array(bu.string())]).optional(),tools:bu.array(JS4).optional(),tool_choice:bu.union([bu.literal("auto"),bu.literal("none"),bu.literal("required"),bu.object({type:bu.literal("function"),function:bu.object({name:bu.string()})})]).optional(),response_format:QS4.optional(),user:bu.string().optional()});y1t=class y1t extends Error{constructor(i){super(i);this.name="MessageConversionError"}};P1t=new Yu;P1t.post("/:org/v1/chat/completions",async(i)=>{let u=i.get("studioContext"),t=i.req.param("org");try{if(!u.auth.apiKey?.id)return i.json(s8("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!u.organization)return i.json(s8("Organization context is required. Ensure your API key has organization metadata.","invalid_request_error","organization"),400);if((u.organization.slug??u.organization.id)!==t)return i.json(s8("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let f=await i.req.json(),l=HS4.safeParse(f);if(!l.success){let B=l.error.issues[0]??{message:"Invalid request",path:[]};return i.json(s8(`Invalid request: ${B.message}`,"invalid_request_error",B.path.length>0?B.path.join("."):null),400)}let E=l.data,c=zS4(E.model);if(!c)return i.json(s8("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}=c,{modelId:$}=c;if(!w){let B=await u.storage.aiProviderKeys.list({organizationId:u.organization.id});if(B.length===0)return i.json(s8("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=B[0].id}let h;try{h=await u.aiProviders.activate(w,u.organization.id)}catch{return i.json(s8(`AI provider credential not found or inaccessible: ${w}`,"invalid_request_error","model"),404)}let v=h.aiSdk.languageModel($),d=nS4(E.messages),D=E.tools?bS4(E.tools):void 0,_=CS4(E.response_format),N=MS4(),Z=Math.floor(Date.now()/1000);if(E.stream)return A7(i,async(B)=>{let F=U1t(v,d,D,E,_,i.req.raw.signal);try{let g=R5(F),T=!1,U=0,A="",G=async()=>{if(A.length===0)return;let k=A;A="",await B.writeSSE({data:JSON.stringify({id:N,object:"chat.completion.chunk",created:Z,model:E.model,choices:[{index:0,delta:{content:k},finish_reason:null}]})})};for await(let k of g.fullStream){if(!T&&(k.type==="text-delta"||k.type==="tool-call"))await B.writeSSE({data:JSON.stringify({id:N,object:"chat.completion.chunk",created:Z,model:E.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),T=!0;if(k.type==="text-delta"){if(A+=k.text,A.length>=XS4)await G()}else if(k.type==="tool-call"){await G();let I=U++;await B.writeSSE({data:JSON.stringify({id:N,object:"chat.completion.chunk",created:Z,model:E.model,choices:[{index:0,delta:{tool_calls:[{index:I,id:k.toolCallId,type:"function",function:{name:k.toolName,arguments:JSON.stringify(k.input)}}]},finish_reason:null}]})})}else if(k.type==="finish")await G(),await B.writeSSE({data:JSON.stringify({id:N,object:"chat.completion.chunk",created:Z,model:E.model,choices:[{index:0,delta:{},finish_reason:A1t(k.finishReason)}],usage:k.totalUsage?{prompt_tokens:k.totalUsage.inputTokens??0,completion_tokens:k.totalUsage.outputTokens??0,total_tokens:k.totalUsage.totalTokens??0}:void 0})})}await G(),await B.writeSSE({data:"[DONE]"})}catch(g){let T=g;console.error("[openai-compat:stream] Error:",T.message),await B.writeSSE({data:JSON.stringify({error:{message:T.message,type:"server_error"}})})}});else{let B=U1t(v,d,D,E,_,i.req.raw.signal),F=await XN(B),g={role:"assistant",content:F.text||null};if(F.toolCalls&&F.toolCalls.length>0)g.tool_calls=F.toolCalls.map((T)=>({id:T.toolCallId,type:"function",function:{name:T.toolName,arguments:JSON.stringify("input"in T?T.input:{})}})),g.content=null;return i.json({id:N,object:"chat.completion",created:Z,model:E.model,choices:[{index:0,message:g,finish_reason:A1t(F.finishReason)}],usage:{prompt_tokens:F.usage?.inputTokens??0,completion_tokens:F.usage?.outputTokens??0,total_tokens:F.usage?.totalTokens??0}})}}catch(f){let l=f;if(l.name==="AbortError")return i.json(s8("Request aborted","invalid_request_error"),400);if(l.name==="MessageConversionError")return i.json(s8(l.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",l.message,l.stack),i.json(s8(l.message,"server_error"),500)}});G1t=P1t});function VS4(){let i=process.env.POSTHOG_KEY;if(!i)return null;return{key:i,host:process.env.POSTHOG_HOST??qS4}}var x1t,qS4="https://ph.studio.decocms.com",k1t;var j1t=O(()=>{Ef();Gri();lO();Ml();R0();ivu();u6i();x1t=new Yu;x1t.get("/",(i)=>{let u={version:gL.version,theme:I00(),...IB().logo&&{logo:IB().logo},...V5()&&{internalUrl:M1i()},...vu().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!vu().firecrawlApiKey,auth:vp0(),posthog:VS4(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!V5()&&vu().sandboxProviderKind==="agent-sandbox"}};return i.header("Cache-Control","no-store"),i.json({success:!0,config:u})});k1t=x1t});function hb(i){let u=(i??"").trim().toLowerCase();return u=u.replace(/^https?:\/\//,""),u=u.replace(/^www\./,""),u=u.split(/[/?#]/)[0]??"",u.replace(/\/+$/,"")}function s8u(i){return(hb(i).split(".")[0]||i).replace(/[-_]/g," ").split(" ").filter(Boolean).map((t)=>t.charAt(0).toUpperCase()+t.slice(1)).join(" ")}function p8u(i,u=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(hb(i))}&sz=${u}`}function X1t(i,u){let t=i.trim();if(t.length<=u)return t;let f=t.slice(0,u-1),l=f.lastIndexOf(" ");return`${(l>u*0.6?f.slice(0,l):f).trimEnd()}\u2026`}function J1t(i){let{brand:u,domain:t,score:f,verdict:l}=i,E=typeof f==="number"?`${u} commerce report \u2014 ${Math.round(f)}/100 \xB7 decocms`:`${u} commerce report \xB7 decocms`,c=`See the full ${u} scorecard \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,w=l?.trim()?X1t(`${l.trim().replace(/\s+/g," ")} \u2014 ${c}`,200):X1t(`How does ${t} really perform? ${c}`,200);return{title:E,description:w}}import{z as wu}from"zod";var wW,rS4,mS4,eS4,aS4,K1t;var Y1t=O(()=>{wW=wu.enum(["good","bad","neutral"]),rS4=wu.preprocess((i)=>{if(Array.isArray(i))return{kind:"text",value:i.find((t)=>t!==null&&typeof t!=="object")??""};return i!==null&&typeof i==="object"?i:{kind:"text",value:i}},wu.object({kind:wu.enum(["text","number","sparkline","badge","score"]).catch("text"),value:wu.coerce.string().optional(),tone:wW.optional(),muted:wu.boolean().optional(),delta:wu.coerce.string().optional(),deltaDir:wu.enum(["up","down","neutral"]).optional(),points:wu.array(wu.coerce.number()).optional(),label:wu.coerce.string().optional()}).transform((i)=>{if(i.kind==="badge"&&i.label==null)i.label=i.value??"";if(i.kind==="score"){let u=Number(i.value);if(Number.isNaN(u))return{...i,kind:"text"}}return i})),mS4=wu.preprocess((i)=>{let u=i;if(u&&typeof u==="object"&&!Array.isArray(u)&&Array.isArray(u.cells))u=u.cells;if(Array.isArray(u)&&u.length===1&&Array.isArray(u[0]))u=u[0];if(Array.isArray(u))return u;if(u&&typeof u==="object")return Object.values(u);return u},wu.array(rS4)),eS4={key:wu.coerce.string(),title:wu.coerce.string(),eyebrow:wu.coerce.string().optional(),headline:wu.coerce.string(),annotation:wu.coerce.string().optional(),methodology:wu.coerce.string().optional(),sources:wu.array(wu.object({name:wu.coerce.string(),logoUrl:wu.coerce.string()})).optional()},aS4=wu.discriminatedUnion("template",[wu.object({template:wu.literal("cover"),score:wu.object({value:wu.coerce.number(),max:wu.coerce.number().optional(),grade:wu.coerce.string().optional(),label:wu.coerce.string().optional()}).optional(),brandImage:wu.coerce.string().optional(),screenshot:wu.coerce.string().optional(),mobileScreenshot:wu.coerce.string().optional()}),wu.object({template:wu.literal("cta"),ctaUrl:wu.coerce.string().optional(),ctaLabel:wu.coerce.string().optional(),bullets:wu.array(wu.coerce.string()).optional()}),wu.object({template:wu.literal("series"),points:wu.array(wu.coerce.number()).min(2),xLabels:wu.array(wu.coerce.string()).min(1),unit:wu.coerce.string().optional(),callout:wu.object({index:wu.coerce.number(),value:wu.coerce.string(),tone:wW.optional()})}),wu.object({template:wu.literal("threshold"),value:wu.coerce.string().default(""),metricLabel:wu.coerce.string().optional(),ratio:wu.coerce.number(),thresholdRatio:wu.coerce.number().optional(),thresholdLabel:wu.coerce.string().default(""),tone:wW.optional()}),wu.object({template:wu.literal("stats"),stats:wu.array(wu.object({value:wu.coerce.string(),label:wu.coerce.string(),tone:wW.optional()})).min(1)}),wu.object({template:wu.literal("bars"),items:wu.array(wu.object({value:wu.coerce.string(),label:wu.coerce.string(),ratio:wu.coerce.number(),tone:wW.optional()})).min(1)}),wu.object({template:wu.literal("gauges"),gauges:wu.array(wu.object({label:wu.coerce.string(),value:wu.coerce.string(),status:wu.enum(["good","warn","bad"]).catch("warn"),caption:wu.coerce.string().optional(),ratio:wu.coerce.number().optional()})).min(1)}),wu.object({template:wu.literal("checklist"),checks:wu.array(wu.object({label:wu.coerce.string(),status:wu.enum(["pass","fail","warn"]).catch("fail"),value:wu.coerce.string().optional()})).min(1)}),wu.object({template:wu.literal("table"),columns:wu.array(wu.object({label:wu.coerce.string(),align:wu.enum(["left","right"]).optional()})).min(1),rows:wu.array(mS4).min(1),highlightRow:wu.coerce.number().optional()}),wu.object({template:wu.literal("products"),products:wu.array(wu.object({name:wu.coerce.string(),price:wu.coerce.string().optional(),image:wu.coerce.string().optional(),url:wu.coerce.string().optional()})).min(1)}),wu.object({template:wu.literal("list"),entries:wu.array(wu.object({label:wu.coerce.string(),severity:wu.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:wu.coerce.number().optional()}),wu.object({template:wu.literal("keywords"),volumeLabel:wu.coerce.string().optional(),keywords:wu.array(wu.object({term:wu.coerce.string(),volume:wu.coerce.string(),position:wu.coerce.number().catch(0)})).min(1)}),wu.object({template:wu.literal("competitor"),metricLabel:wu.coerce.string().optional(),competitors:wu.array(wu.object({name:wu.coerce.string(),value:wu.coerce.string(),tone:wW.optional(),isYou:wu.boolean().optional()})).min(1)}),wu.object({template:wu.literal("scorecard"),rivalLabel:wu.coerce.string().optional(),dimensions:wu.array(wu.object({label:wu.coerce.string(),you:wu.coerce.string(),rival:wu.coerce.string().optional(),rivalName:wu.coerce.string().optional(),tone:wW.optional()})).min(1)})]),K1t=wu.object({...eS4,template:aS4})});function GIi(i){let u=[],t=[...i.sections].sort((f,l)=>f.position-l.position).map((f)=>{let l=K1t.safeParse(f.props);if(l.success)return l.data;let E=l.error.issues[0];return u.push({section_type:f.section_type,position:f.position,reason:E?`${E.path.join(".")||"(root)"}: ${E.message}`:"contract violation"}),null}).filter((f)=>f!==null);return{deck:{meta:{...i.meta,scores:i.summary?.scores},slides:t},drops:u}}var iDu=O(()=>{Y1t()});function uDu(i){return Buffer.from(i,"base64")}var W1t;var S1t=O(()=>{W1t=[{name:"Inter",data:uDu("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"),weight:400,style:"normal"},{name:"Inter",data:uDu("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"),weight:600,style:"normal"},{name:"Inter",data:uDu("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"),weight:700,style:"normal"}]});import oS4 from"satori";import{Resvg as sS4}from"@resvg/resvg-js";async function iL4(i){try{let u=await fetch(i,{signal:AbortSignal.timeout(1500)});if(!u.ok)return null;let t=u.headers.get("content-type")||"image/png";if(!t.startsWith("image/"))return null;let f=Buffer.from(await u.arrayBuffer()).toString("base64");return`data:${t};base64,${f}`}catch{return null}}async function H1t(i){let u=i.faviconUrl?await iL4(i.faviconUrl):null,t=u?mE("div",{width:84,height:84,flexShrink:0,borderRadius:20,backgroundColor:Q1t,display:"flex",alignItems:"center",justifyContent:"center"},mE("img",{},null,{src:u,width:56,height:56})):mE("div",{width:84,height:84,flexShrink:0,borderRadius:20,backgroundColor:IIi,color:fDu,fontSize:44,fontWeight:700,display:"flex",alignItems:"center",justifyContent:"center"},(i.initial||i.domain.charAt(0)||"?").toUpperCase()),f=mE("div",{width:tDu,height:L1t,display:"flex",flexDirection:"column",justifyContent:"space-between",padding:"72px 80px",backgroundColor:fDu,color:Q1t,fontFamily:"Inter"},[mE("div",{display:"flex",alignItems:"center",gap:22},[t,mE("div",{display:"flex",flexDirection:"column"},[mE("div",{fontSize:24,color:IIi,fontWeight:600,marginBottom:4},"Commerce report"),mE("div",{fontSize:46,fontWeight:600,letterSpacing:"-0.02em"},i.domain)])]),mE("div",{display:"flex",alignItems:"flex-end",gap:28},[mE("div",{fontSize:220,fontWeight:700,color:IIi,lineHeight:0.82,letterSpacing:"-0.05em"},String(Math.round(i.score))),mE("div",{fontSize:60,fontWeight:400,color:"rgba(244,251,230,0.55)",paddingBottom:30},"/100"),mE("div",{fontSize:30,fontWeight:400,color:"rgba(244,251,230,0.82)",paddingBottom:40},"Commerce health score")]),mE("div",{display:"flex",alignItems:"center",gap:14},[mE("div",{width:44,height:44,borderRadius:11,backgroundColor:IIi,display:"flex",alignItems:"center",justifyContent:"center"},mE("svg",{},mE("path",{},null,{d:pS4,fill:fDu}),{width:30,height:30,viewBox:"0 0 200 200"})),mE("div",{fontSize:26,fontWeight:700},"decocms")])]),l=await oS4(f,{width:tDu,height:L1t,fonts:W1t}),E=new sS4(l,{fitTo:{mode:"width",value:tDu}}).render().asPng();return Uint8Array.from(E)}var tDu=1200,L1t=630,fDu="#07401a",IIi="#d0ec1a",Q1t="#f4fbe6",pS4="M79.8641 145.438C97.4676 145.438 107.196 137.562 118.777 113.01C125.263 99.5758 130.358 86.1415 136.381 73.1705L143.793 75.4867C145.646 75.95 147.035 75.0235 146.109 73.1705L136.844 55.1037C136.381 53.714 134.528 53.714 133.601 54.1772L111.365 62.5157C109.512 62.979 109.512 64.832 111.365 65.2952L117.851 67.6115C112.292 79.656 105.806 98.186 100.247 109.767C94.2249 122.738 91.4454 131.54 80.7906 131.54C70.1359 131.54 68.7461 123.665 73.3786 112.084C78.4744 98.6493 86.8129 94.9433 96.0779 97.7228C98.8574 94.0168 100.71 88.4578 101.637 83.362C98.8574 82.4355 95.6146 82.4355 92.8351 82.4355C77.5479 82.4355 62.2606 90.3108 55.7751 106.988C48.8263 128.761 56.2383 145.438 79.8641 145.438Z",mE=(i,u,t,f={})=>({type:i,props:{...f,style:u,children:t}});var z1t=O(()=>{S1t()});import{join as R1t}from"path";async function n1t(i){try{let u=await fetch(`${zh({})}/api/v2/public/diagnostics/${encodeURIComponent(i)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(uL4)});if(!u.ok)return null;let t=await u.json(),{deck:f}=GIi(t);if(!f.slides.length)return null;let l=f.slides.find((w)=>w.template.template==="cover"),E=l?.template,c=E&&E.template==="cover"?E:void 0;return{brand:f.meta.brand?.trim()||s8u(i),score:f.meta.scores?.cover??c?.score?.value,verdict:l?.annotation?.trim()||l?.headline?.trim()||void 0}}catch{return null}}function R$(i){return i.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function tL4(i,u){let t=hb(i),f=u?.brand?.trim()||s8u(t),l=p8u(t,128),c=`${(vu().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(t)}`,{title:w,description:$}=J1t({brand:f,domain:t,score:u?.score,verdict:u?.verdict}),h=`${c}/og.png`,v=`${f} commerce report by decocms`;return[`<title>${R$(w)}</title>`,`<meta name="description" content="${R$($)}" />`,'<meta name="robots" content="noindex, follow" />','<meta property="og:type" content="website" />','<meta property="og:site_name" content="decocms" />',`<meta property="og:title" content="${R$(w)}" />`,`<meta property="og:description" content="${R$($)}" />`,`<meta property="og:url" content="${R$(c)}" />`,`<meta property="og:image" content="${R$(h)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${R$(v)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${R$(w)}" />`,`<meta name="twitter:description" content="${R$($)}" />`,`<meta name="twitter:image" content="${R$(h)}" />`,`<meta name="twitter:image:alt" content="${R$(v)}" />`,`<link rel="canonical" href="${R$(c)}" />`,`<link rel="icon" href="${R$(l)}" sizes="any" />`].join(`
|
|
86834
86834
|
`)}function fL4(i,u){return i.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>",` ${u}
|
|
86835
86835
|
</head>`)}async function EL4(i,u){let t=`${i}|${Math.round(u)}`,f=cii.get(t);if(f)return f;let l=await H1t({domain:i,initial:i.charAt(0),score:u,faviconUrl:p8u(i,128)});if(cii.size>=lL4){let E=cii.keys().next().value;if(E!==void 0)cii.delete(E)}return cii.set(t,l),l}function b1t(i){let u=new Yu;return u.get("/:domain/og.png",async(t)=>{let f=hb(t.req.param("domain")),l=async()=>{let E=i?Bun.file(R1t(i,"report-og-fallback.png")):null;if(!E||!await E.exists())return t.notFound();return t.body(new Uint8Array(await E.arrayBuffer()),200,{"Content-Type":"image/png","Cache-Control":"public, max-age=0, s-maxage=3600"})};try{let E=await n1t(f);if(!E||typeof E.score!=="number")return l();let c=await EL4(f,E.score);return t.body(c,200,{"Content-Type":"image/png","Cache-Control":"public, max-age=0, s-maxage=86400"})}catch{return l()}}),u.get("/:domain",async(t)=>{let f=t.req.param("domain"),l=i?R1t(i,"index.html"):null,E=l?Bun.file(l):null;if(!E||!await E.exists())return t.notFound();let c=await E.text();try{let w=await n1t(hb(f)),$=tL4(f,w);return t.html(fL4(c,$),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return t.html(c)}}),u}var uL4=2500,cii,lL4=256;var C1t=O(()=>{Ef();iDu();z1t();M_();R0();cii=new Map});function wii(i,u){return fetch(`${zh({})}${i}`,u)}async function cL4(i,u,t){let f=new URLSearchParams;if(u)f.set("pw",u);if(t)f.set("lang",t);let l=f.toString()?`?${f.toString()}`:"",E=await wii(`/api/v2/public/diagnostics/${encodeURIComponent(i)}${l}`,{headers:{Accept:"application/json"}});if(E.status===404)return{status:"not_found",deck:null,scanned_at:null,drops:[]};if(!E.ok)throw Error(`report read HTTP ${E.status}`);let c=await E.json(),{deck:w,drops:$}=GIi(c);return{status:w.slides.length?"ready":"empty",deck:w,scanned_at:c.scanned_at,drops:$}}var wL4,$W,M1t;var q1t=O(()=>{Ef();F$();M_();iDu();wL4=new Set(["complete","errored","terminated","unknown"]),$W=new Yu;$W.use("*",async(i,u)=>{let t=await vt.api.getSession({headers:i.req.raw.headers});if(!t?.user?.id)return i.json({error:"Authentication required"},401,{"Cache-Control":"private, no-store",Vary:"Cookie"});i.set("reportUser",{email:t.user.email}),await u(),i.header("Cache-Control","private, no-store"),i.header("Vary","Cookie");return});$W.get("/site/:domain",async(i)=>{let u=i.req.param("domain").trim();if(!u)return i.json({error:"domain is required"},400);let t=i.req.query("key")?.trim()||void 0,f=i.req.query("lang")?.trim()||void 0;try{let l=await cL4(u,t,f);return i.header("Cache-Control","private, no-store"),i.json(l)}catch{return i.json({error:"report read failed"},502)}});$W.post("/run",async(i)=>{let u;try{u=await i.req.json()}catch{return i.json({error:"invalid JSON"},400)}let t=typeof u.domain==="string"?u.domain.trim():"";if(!t)return i.json({error:"domain is required"},400);let f=i.get("reportUser").email,l=typeof u.distinctId==="string"&&u.distinctId.trim()&&u.distinctId.length<=200?u.distinctId.trim():void 0;try{let E=await wii("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${TB({})}`},body:JSON.stringify({url:t,email:f,distinct_id:l})});if(!E.ok)return i.json({error:`run HTTP ${E.status}`},502);let c=await E.json(),w=c.blocked?{state:"blocked"}:c.status==="fresh"?{state:"fresh"}:c.mode==="sync"?{state:"sync"}:{state:"running",id:c.id??null};return i.json(w)}catch{return i.json({error:"run failed"},502)}});$W.get("/status",async(i)=>{let u=i.req.query("id");if(!u)return i.json({error:"id is required"},400);try{let t=await wii(`/api/v2/diagnostics/status?id=${encodeURIComponent(u)}`,{headers:{Authorization:`Bearer ${TB({})}`}});if(!t.ok)return i.json({error:`status HTTP ${t.status}`},502);let l=(await t.json()).status??"unknown",E={done:wL4.has(l),status:l};return i.json(E)}catch{return i.json({error:"status failed"},502)}});$W.get("/link-token/:id",async(i)=>{let u=i.req.param("id");try{let t=await wii(`/api/v2/public/link-tokens/${encodeURIComponent(u)}`,{headers:{Accept:"application/json"}});if(t.status===404)return i.json(null);if(!t.ok)return i.json({error:`link token HTTP ${t.status}`},502);return i.json(await t.json())}catch{return i.json({error:"link token resolve failed"},502)}});$W.get("/suggest",async(i)=>{let u=(i.req.query("q")??"").trim().slice(0,64);if(u.length<2)return i.json({suggestions:[]});try{let t=await wii(`/api/v2/public/suggest?q=${encodeURIComponent(u)}`,{headers:{Accept:"application/json"}});if(!t.ok)return i.json({suggestions:[]});let f=await t.json();return i.json({suggestions:Array.isArray(f.suggestions)?f.suggestions:[]})}catch{return i.json({suggestions:[]})}});M1t=$W});import{createHmac as $L4,timingSafeEqual as hL4}from"crypto";function V1t(i,u,t,f=Date.now()){if(!u||!t)return!1;let l,E=[];for(let h of u.split(",")){let v=h.indexOf("=");if(v<=0)continue;let d=h.slice(0,v).trim(),D=h.slice(v+1).trim();if(d==="t")l=D;else if(d==="v1")E.push(D)}if(!l||E.length===0)return!1;let c=Number(l);if(!Number.isFinite(c)||Math.abs(f/1000-c)>vL4)return!1;let w=$L4("sha256",t).update(`${l}.${i}`).digest("hex"),$=Buffer.from(w,"hex");return E.some((h)=>{let v=Buffer.from(h,"hex");return $.length===v.length&&hL4($,v)})}function r1t(i){let u;try{u=JSON.parse(i)}catch{return null}let t=fh(u),f=fh(fh(t?.data)?.object);if(!t||typeof t.type!=="string"||!f)return null;return{id:th(t.id),type:t.type,created:typeof t.created==="number"?t.created:void 0,livemode:typeof t.livemode==="boolean"?t.livemode:void 0,data:{object:f}}}function dL4(i){switch(i){case"active":case"trialing":return"active";case"past_due":return"past_due";default:return"canceled"}}function th(i){return typeof i==="string"?i:void 0}function fh(i){return typeof i==="object"&&i!==null?i:void 0}function xIi(i){return typeof i==="number"?new Date(i*1000):null}function cDu(i){return th(i)??th(fh(i)?.id)}function DL4(i){return cDu(i.subscription)??th(fh(fh(i.parent)?.subscription_details)?.subscription)}function _L4(i){let u=xIi(i.current_period_end);if(u)return u;let t=fh(i.items)?.data;if(!Array.isArray(t))return null;let f=0;for(let l of t){let E=fh(l)?.current_period_end;if(typeof E==="number"&&E>f)f=E}return f>0?new Date(f*1000):null}function lDu(i,u){let t=xIi(i.created);return!!t&&!!u.lastStripeEventAt&&t<u.lastStripeEventAt}function EDu(i,u){let t=xIi(i.created);if(!t)return;return u.lastStripeEventAt&&u.lastStripeEventAt>t?void 0:t}async function NL4(i,u){let t=u.data.object;switch(u.type){case"checkout.session.completed":case"checkout.session.async_payment_succeeded":{let f=th(fh(t.metadata)?.orgId);if(!f)return{handled:!1,reason:"no orgId"};if(th(fh(t.metadata)?.kind)==="topup"){if(t.mode!=="payment")return{handled:!1,reason:"topup with wrong mode"};if(th(t.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let w=th(t.id);if(!w)return console.error("stripe webhook: topup session without id",{eventId:u.id,organizationId:f}),{handled:!1,reason:"topup session without id"};let $=Number(fh(t.metadata)?.creditCents);if(!Number.isInteger($)||$<=0)return console.error("stripe webhook: paid topup with bad metadata \u2014 credit NOT applied",{eventId:u.id,organizationId:f,creditCents:fh(t.metadata)?.creditCents}),{handled:!1,reason:"bad topup metadata"};return{handled:!0,organizationId:f,topUp:{creditCents:$,referenceId:`stripe-topup:${w}`}}}if(t.mode!=="subscription")return{handled:!1,reason:"not a subscription checkout"};if(th(t.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let l=await i.getBilling(f);if(!l)return{handled:!1,reason:"unknown org"};if(l.legacy||l.billingMode!=="self_serve")return console.error("stripe webhook: refused checkout bind",{organizationId:f,eventId:u.id,legacy:l.legacy,billingMode:l.billingMode}),{handled:!1,reason:"org is not self-serve"};let E=cDu(t.subscription);if(l.stripeSubscriptionId&&E&&l.stripeSubscriptionId!==E)return console.error("stripe webhook: refused checkout rebind",{organizationId:f,eventId:u.id}),{handled:!1,reason:"org already bound to another subscription",orphanSubscriptionId:E};if(lDu(u,l))return{handled:!1,reason:"stale event"};let c=`stripe-checkout:${th(t.id)??crypto.randomUUID()}`;return await i.updateStripeState(f,{stripeCustomerId:cDu(t.customer),stripeSubscriptionId:E,status:"active",benefitsReferenceId:c,lastStripeEventAt:EDu(u,l)}),{handled:!0,organizationId:f,benefitsReferenceId:c}}case"customer.subscription.updated":case"customer.subscription.deleted":{let f=th(t.id);if(!f)return{handled:!1,reason:"no sub id"};let l=await i.getBillingByStripeSubscriptionId(f);if(!l)return{handled:!1,reason:"unknown subscription"};let E=u.type==="customer.subscription.deleted";if(!E&&lDu(u,l))return{handled:!1,reason:"stale event"};let c=E?"canceled":dL4(t.status),w=_L4(t),$=`stripe-sub:${f}:${c}:${w?.getTime()??0}`;return await i.updateStripeState(l.organizationId,{status:c,currentPeriodEnd:w,...E&&{stripeSubscriptionId:null},benefitsReferenceId:$,lastStripeEventAt:EDu(u,l)}),{handled:!0,organizationId:l.organizationId,benefitsReferenceId:$}}case"invoice.paid":{let f=DL4(t);if(!f)return{handled:!1,reason:"no sub id"};let l=await i.getBillingByStripeSubscriptionId(f);if(!l)return{handled:!1,reason:"unknown subscription"};if(lDu(u,l))return{handled:!1,reason:"stale event"};let E=`stripe-invoice:${th(t.id)??crypto.randomUUID()}`;return await i.updateStripeState(l.organizationId,{status:"active",currentPeriodEnd:xIi(t.period_end),benefitsReferenceId:E,lastStripeEventAt:EDu(u,l)}),{handled:!0,organizationId:l.organizationId,benefitsReferenceId:E}}default:return{handled:!1,reason:`unhandled event ${u.type}`}}}async function ZL4(i,u){let[t,f]=await Promise.all([i.getBilling(u),i.listPaidSeatUserIds(u)]);if(!ML(t))return;if(await Yg0({subscriptionId:t.stripeSubscriptionId,targetQuantity:f.length}))console.error("stripe webhook: reconciled diverged seat quantity",{organizationId:u,targetQuantity:f.length})}async function m1t(i){let u=new VD(m0().db),t=await NL4(u,i);if(t.handled&&t.topUp)await Oi0({organizationId:t.organizationId,amountCents:t.topUp.creditCents,referenceId:t.topUp.referenceId});if(t.handled&&t.benefitsReferenceId)try{await sD(t.organizationId,t.benefitsReferenceId,"apply")}catch(f){console.error("Failed to enqueue benefit sync (sweep covers):",f)}if(t.handled&&OL4.has(i.type))try{await ZL4(u,t.organizationId)}catch(f){console.error("Failed to reconcile seat quantity (next cycle):",f)}if(!t.handled&&t.orphanSubscriptionId)try{await Kg0(t.orphanSubscriptionId),console.error("stripe webhook: canceled orphan subscription",{subscriptionId:t.orphanSubscriptionId,eventId:i.id})}catch(f){if(!(f instanceof Nw&&(f.status===400||f.status===404)))throw f}return t}var vL4=300,OL4;var e1t=O(()=>{b6();YL();nz();Y6i();qL();OL4=new Set(["checkout.session.completed","checkout.session.async_payment_succeeded","invoice.paid"])});var BL4=1048576,wDu;var a1t=O(()=>{Ef();aY();R0();e1t();wDu=new Yu;wDu.post("/webhook",$E({maxSize:BL4,onError:(i)=>i.json({error:"payload too large"},413)}),async(i)=>{let u=vu().stripeWebhookSecret;if(!u)return i.json({error:"stripe billing not configured"},503);let t=await i.req.text();if(!V1t(t,i.req.header("stripe-signature"),u))return i.json({error:"invalid signature"},400);let l=r1t(t);if(!l)return i.json({error:"invalid payload"},400);let E=await m1t(l);return console.log("stripe webhook",{eventId:l.id,type:l.type,livemode:l.livemode,...E}),i.json({received:!0})})});function o1t(i,u){if(u.startsWith("text/html")||u.startsWith("image/svg"))i.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var s1t,FL4,gL4,p1t;var ilt=O(()=>{Ef();nh();jR();rL();s1t=new Yu,FL4=["range","if-none-match","if-modified-since"],gL4=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];s1t.get("/:org/files/*",async(i)=>{let u=i.get("studioContext"),t=u.organization?.id;if(!u.auth?.user?.id){if(Mn(i))return i.redirect(`/login?next=${encodeURIComponent(i.req.path)}`,302);throw new G0(401,{message:"Authentication required"})}if(!t)throw new G0(401,{message:"Organization context required"});let f=i.req.path.replace(/^.*\/files\//,"");if(!f)throw new G0(400,{message:"Missing file key"});let l=await is(f,u);if(!l)throw new G0(503,{message:"Object storage not configured"});if(l.startsWith("data:")&&Rh()){let $=l.match(/^data:([^;]+);base64,(.+)$/s);if(!$)throw new G0(500,{message:"Invalid data URL from storage"});let[,h,v]=$,d=Buffer.from(v,"base64"),D=new Headers({"Content-Type":h,"Cache-Control":"private, max-age=86400"});return o1t(D,h),new Response(d,{status:200,headers:D})}let E=new Headers;for(let $ of FL4){let h=i.req.header($);if(h)E.set($,h)}let c=await fetch(l,{headers:E});if(c.status===403||c.status===404)throw new G0(404,{message:"File not found"});if(!c.ok&&c.status!==304&&c.status!==416)throw console.error(`[files] upstream storage error ${c.status} for key:`,f),new G0(502,{message:"Upstream storage error"});let w=new Headers;for(let $ of gL4){let h=c.headers.get($);if(h)w.set($,h)}return w.set("Cache-Control","private, max-age=86400"),o1t(w,w.get("content-type")??""),new Response(c.body,{status:c.status,headers:w})});p1t=s1t});function llt(i){let u=i?.connectFn??yL4,t=null,f=null,l=!1,E=!1,c=!1,w=[];function $(){return t!==null&&!t.isClosed()&&!t.isDraining()&&!c}function h(){console.log(`[NatsProvider] fireReady: ${w.length} callbacks`);for(let D of w)try{D()}catch{}}function v(D){(async()=>{for await(let _ of D.status())if(_.type==="disconnect")console.log("[NatsProvider] Disconnected"),c=!0;else if(_.type==="reconnect")console.log("[NatsProvider] Reconnected, re-firing ready callbacks"),c=!1,f=null,h()})().catch(()=>{})}async function d(D,_){let N=0;while(!E)try{t=await u({servers:D,timeout:AL4,reconnect:!0,maxReconnectAttempts:-1,..._?{authenticator:_}:{}}),console.log(`[NatsProvider] Connected to ${t.getServer()} after ${N} attempt(s)`),f=null,c=!1,v(t),h();return}catch{N++;let Z=vE(UL4,TL4,N-1,2,0.5);await P0(Z)}}return{init(D,_){if(l)return;l=!0,E=!1;let N=_?.creds?ult.credsAuthenticator(new TextEncoder().encode(_.creds)):void 0;d(D,N).catch(()=>{})},isConnected(){return $()},getConnection(){return $()?t:null},getJetStream(){if(!$())return null;if(!f)f=flt.jetstream(t);return f},onReady(D){if(w.push(D),$())try{D()}catch{}},async drain(){if(E=!0,l=!1,f=null,c=!1,t){let D=t;t=null,await D.drain().catch(()=>{})}}}}function yL4(i){return tlt.connect(i)}var ult,tlt,flt,TL4=100,UL4=3000,AL4=3000;var Elt=O(()=>{Z4();ult=X(fB(),1),tlt=X(Xni(),1),flt=X(x_(),1)});function $Du(i,u){return`${i}.${u}`}class hDu{cache;constructor(i){this.cache=Xn({ttlMs:i?.ttlMs??PL4,maxSize:i?.maxSize??GL4})}async get(i,u){return this.cache.get($Du(i,u))??null}async set(i,u,t){this.cache.set($Du(i,u),t)}async invalidate(i,u){this.cache.delete($Du(i,u))}teardown(){this.cache.clear()}}var PL4=600000,GL4=5000;var clt=()=>{};function kIi(i,u){return`${i}:${u}`}function vDu(i){let u=Xn({ttlMs:i?.ttlMs??IL4,maxSize:i?.maxSize??xL4}),t=i?.getConnection,f=crypto.randomUUID(),l=new TextEncoder,E=new TextDecoder,c=null;function w($,h){let v=t?.();if(!v)return;try{v.publish(wlt,l.encode(JSON.stringify({organizationId:$,keyId:h,originId:f})))}catch(d){console.warn("[ProviderKeyCache] Publish failed (non-critical):",d)}}return{get($,h){return u.get(kIi($,h))},set($,h,v){u.set(kIi($,h),v)},invalidate($,h){u.delete(kIi($,h)),w($,h)},start(){if(c)return;let $=t?.();if(!$)return;c=$.subscribe(wlt),(async()=>{for await(let h of c)try{let v=JSON.parse(E.decode(h.data));if(v.originId===f)continue;u.delete(kIi(v.organizationId,v.keyId))}catch{}})().catch(console.error)},teardown(){c?.unsubscribe(),c=null,u.clear()}}}var wlt="studio.ai-provider-keys.invalidate",IL4=30000,xL4=5000;var $lt=()=>{};class dDu{options;subscriptions=[];onCancel=null;encoder=new TextEncoder;originId=crypto.randomUUID();seenMessageIds=new Set;constructor(i){this.options=i}async start(i){if(i)this.onCancel=i;if(this.subscriptions.length>0)return;if(!this.onCancel)return;let u=this.options.getConnection();if(!u)return;let t=new TextDecoder;this.subscriptions=hlt.map((f)=>u.subscribe(f));for(let f of this.subscriptions)(async()=>{for await(let l of f)try{let E=JSON.parse(t.decode(l.data));if(E.originId===this.originId)continue;if(E.messageId&&this.hasSeen(E.messageId))continue;this.onCancel?.(E.taskId)}catch{}})().catch(console.error)}broadcast(i){if(/[.*>\s]/.test(i)){console.warn("[NatsCancelBroadcast] Invalid threadId, skipping broadcast");return}this.onCancel?.(i);try{let u=this.options.getConnection();if(!u)return;let t=this.encoder.encode(JSON.stringify({taskId:i,originId:this.originId,messageId:crypto.randomUUID()}));for(let f of hlt)u.publish(f,t)}catch(u){console.warn("[NatsCancelBroadcast] Publish failed (non-critical):",u)}}publishControlFrame(i,u){}async stop(){for(let i of this.subscriptions)i.unsubscribe();this.subscriptions=[],this.seenMessageIds.clear(),this.onCancel=null}hasSeen(i){if(this.seenMessageIds.has(i))return!0;if(this.seenMessageIds.add(i),this.seenMessageIds.size>1000){let u=this.seenMessageIds.values().next().value;if(u)this.seenMessageIds.delete(u)}return!1}}var hlt;var vlt=O(()=>{hlt=["studio.decopilot.cancel","mesh.decopilot.cancel"]});function WL4(){return{name:b2,subjects:[`${Ebi}.>`],storage:mv.StorageType.File,max_age:XL4,max_bytes:KL4,max_msgs_per_subject:YL4,discard:mv.DiscardPolicy.Old,retention:mv.RetentionPolicy.Limits,duplicate_window:JL4,num_replicas:1}}class _lt{chunks=0;encodeMs=0;maxMs=0;bytes=0;windowStart=performance.now();constructor(){setInterval(()=>this.flush(),1e4).unref?.()}record(i,u){if(this.chunks++,this.encodeMs+=i,i>this.maxMs)this.maxMs=i;this.bytes+=u}flush(){let i=performance.now(),u=i-this.windowStart;if(this.chunks>0&&u>0)console.warn(JSON.stringify({msg:"stream-encode-trace",windowMs:Math.round(u),chunks:this.chunks,encodeMs:Math.round(this.encodeMs),pctOfLoop:+(this.encodeMs/u*100).toFixed(1),maxChunkMs:+this.maxMs.toFixed(2),mbEncoded:+(this.bytes/1048576).toFixed(2)}));this.chunks=0,this.encodeMs=0,this.maxMs=0,this.bytes=0,this.windowStart=i}}function dlt(i){let u=Dlt.headers();for(let[t,f]of Object.entries(i))u.set(t,f);return u}function HL4(i,u){let t=0;return{publish(f,l,E,c){f.publish(l,E,c?{headers:c}:void 0).catch((w)=>{if(t++,jL4().add(1,{"org.id":u??"unknown"}),t===1||t%100===0)console.warn(`[Decopilot] JetStream publish failed for thread ${i} (${t} total):`,w)})},get errorCount(){return t}}}function zL4(i){if(!(i instanceof Error))return!1;if(i.name==="TimeoutError")return!0;return/timeout|no responders|503/i.test(i.message)}class DDu{options;js=null;jsm=null;constructor(i){this.options=i}async init(){let i=this.options.getConnection();if(!i){console.log("[Decopilot] StreamBuffer.init skipped: NATS not connected yet");return}let u=WL4(),t=await B1(async()=>{let f=this.options.getJetStreamManager?await this.options.getJetStreamManager():await mv.jetstreamManager(i);try{await f.streams.info(b2),await f.streams.update(b2,u)}catch(l){if(l instanceof Error&&l.message.includes("stream not found"))await f.streams.add(u);else if(l instanceof Error&&/can ?not change.*storage|storage type/i.test(l.message))await f.streams.delete(b2),await f.streams.add(u);else throw l}return f},{maxAttempts:5,minTimeout:250,maxTimeout:4000,jitter:0.5,isRetriable:zL4});this.js=this.options.getJetStream(),this.jsm=t,console.log(`[Decopilot] StreamBuffer.init ${this.js?"ready":"degraded (js=null)"}`)}pump(i,u,t,f){let l=this.js;if(!l)return console.warn(`[Decopilot] pump: JetStream client unavailable for thread ${u}; chunks NOT published to NATS`),Promise.resolve();let E=HL4(u,f),c=!1,w=()=>{if(c)return;c=!0;let h=Xeu(u);l.publish(h.subject,h.data).catch(()=>{})};t.addEventListener("abort",w,{once:!0});let $=(h)=>{let v=performance.now(),d=BL(h,{runId:u}),D=performance.now()-v;if(Oq().record(D),Zq().add(1,{"org.id":f??"unknown"}),QL4?.record(D,d.reduce((_,N)=>_+N.data.length,0)),d.length===0){console.warn(`[Decopilot] dropping oversized stream chunk for thread ${u}`);return}for(let _ of d)E.publish(l,_.subject,_.data,_.headers?dlt(_.headers):void 0)};return(async()=>{let h=i.getReader(),v=0,d=0,D;try{while(!0){let{done:_,value:N}=await h.read();if(_)break;if($(N),d++,++v>=64)v=0,await new Promise((Z)=>setImmediate(Z))}}catch(_){D=_,console.warn(`[Decopilot] stream pump error for thread ${u}:`,_?.message??_)}finally{if(h.releaseLock(),w(),LL4)console.warn(JSON.stringify({msg:"decopilot-stream-diag",event:"pump-done",taskId:u,publishedChunks:d,publishErrors:E.errorCount}))}if(D!==void 0)throw D})()}async publishRawChunk(i,u,t){let f=this.js;if(!f)return!1;let l=performance.now(),E=BL(u,{runId:i,dedup:t});if(Oq().record(performance.now()-l),Zq().add(1),E.length===0)return console.warn(`[Decopilot] dropping oversized raw chunk for thread ${i} (> MAX_CHUNKED_BYTES)`),!0;for(let c of E)await f.publish(c.subject,c.data,{...c.headers?{headers:dlt(c.headers)}:{},...c.msgId?{msgID:c.msgId}:{}});return!0}async publishDone(i,u,t){let f=this.js;if(!f)return!1;let l=rli({runId:i,fenceToken:u,finalSeq:t});return await f.publish(l.subject,l.data,{msgID:l.msgId}),!0}async createTailStream(i,u,t){let f=this.js;if(!f)return console.warn(`[Decopilot] createTailStream: JetStream client unavailable for thread ${i}; no live tail`),null;let l=t?.deliverPolicy==="new"?mv.DeliverPolicy.New:mv.DeliverPolicy.All,E=t?.closeOnDone??!1,c=k_(i),w;try{w=await(await f.consumers.get(b2,{filter_subjects:c,deliver_policy:l})).consume()}catch(Z){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",Z?.message??Z),null}let v=mhi({messages:async function*(){try{for await(let Z of w)yield{subject:Z.subject,data:Z.data,headers:Z.headers}}finally{w.stop()}}(),onCancel:()=>w.stop()}).pipeThrough(mli()).pipeThrough(eli()).getReader(),d=!1,D=()=>{if(d)return;d=!0;try{v.releaseLock()}catch{}},_=!1,N=()=>{if(_)return;_=!0,w.stop(),v.cancel().catch(()=>{}),D()};return u?.addEventListener("abort",N,{once:!0}),new ReadableStream({async pull(Z){for(;;){let{done:B,value:F}=await v.read();if(B){N(),Z.close();return}let g=F;if(g.kind==="done"){if(E){N(),Z.close();return}continue}Z.enqueue(g.chunk);return}},cancel(){N()}})}purge(i){if(!this.jsm)return;this.jsm.streams.purge(b2,{filter:k_(i)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var mv,Dlt,kL4=(i)=>{let u;return()=>u??=i()},jL4,XL4=86400000000000,JL4=120000000000,KL4=4294967296,YL4=500000,SL4,LL4,QL4;var Nlt=O(()=>{Z4();C4u();ehi();ali();X1();hbi();mv=X(x_(),1),Dlt=X(fB(),1),jL4=kL4(()=>At.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"}));SL4=process.env.STREAM_ENCODE_TRACE==="1",LL4=process.env.DECOPILOT_STREAM_TRACE==="1";QL4=SL4?new _lt:null});function Olt(i){let u=i.createFetch??RL4,t=i.timeoutMs??2000;return async(f)=>{try{let l=i.getConnection();if(!l)return _Du;let E=Ph(f),w=await u(l,t)(`tunnel://${E}/api/links/status`,{method:"GET"});if(!w.ok)return _Du;let $=await w.json();return{online:!0,hostname:$.hostname,capabilities:$.capabilities??[],cliVersion:$.cliVersion}}catch{return _Du}}}var _Du,RL4=(i,u)=>g_({connection:i,firstFrameTimeoutMs:u});var Zlt=O(()=>{qM();Eq();_Du={online:!1,capabilities:[]}});async function*nL4(i){if(!i.body){yield{headers:{status:i.status,headers:Object.fromEntries(i.headers.entries())}};return}let u=i.body.getReader(),t=!1;try{yield{headers:{status:i.status,headers:Object.fromEntries(i.headers.entries())}};while(!0){let{done:f,value:l}=await u.read();if(f){t=!0;return}yield{data:Buffer.from(l).toString("base64")}}}finally{try{if(!t)await u.cancel()}catch{}finally{u.releaseLock()}}}function Blt(i){let u=i.createFetch??((t)=>g_({connection:t,idleTimeoutMs:bL4}));return async function*(f,l,E){let c=i.getConnection();if(!c)throw Error("link_unavailable: NATS unavailable");let w=Ph(f),$=u(c),h={method:l.method,headers:l.headers,signal:E?.signal};if(l.body!=null)h.body=l.body;let v=await $(`tunnel://${w}${l.path}`,h);yield*nL4(v)}}var bL4=45000;var Flt=O(()=>{qM();Eq()});function glt(i){let u=i.createFetch??((t)=>g_({connection:t,idleTimeoutMs:CL4}));return{async publish(t,f,l){let E=i.getConnection();if(!E)throw Error("link_unavailable: NATS unavailable");let c=Ph(t),$=await u(E)(`tunnel://${c}/api/links/work`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(f),signal:l?.signal});if(!$.ok){let h=await $.text().catch(()=>"");throw Error(`tunnel work publish failed (${$.status})${h?`: ${h}`:""}`)}await $.body?.cancel().catch(()=>{})}}}function Tlt(i){let u=i.createFetch??g_;return{async publishControlFrame(t,f,l){let E=i.getConnection();if(!E)throw Error("link_unavailable: NATS unavailable");let c=Ph(t),$=await u(E)(`tunnel://${c}/api/links/control`,{method:"POST",headers:{"content-type":"application/json"},body:Veu(f),signal:l?.signal});if(!$.ok){let h=await $.text().catch(()=>"");throw Error(`tunnel control publish failed (${$.status})${h?`: ${h}`:""}`)}await $.body?.cancel().catch(()=>{})}}}var CL4=45000;var Ult=O(()=>{qM();Obi();Eq()});function jIi(i,u,t,f){if(!f)return!1;return i.emit(u,Id(t,f.status,{title:f.title??void 0,virtualMcpId:f.virtual_mcp_id??void 0,createdBy:f.created_by??void 0,triggerId:f.trigger_id??null,branch:f.branch??null,createdAt:f.created_at,updatedAt:f.updated_at})),!0}var Alt=O(()=>{Rt()});class NDu{storage;options;timer=null;constructor(i,u={}){this.storage=i;this.options=u}start(){if(this.timer)return;let i=this.options.intervalMs??300000;this.timer=setInterval(()=>{this.runOnce()},i)}async runOnce(){let i=this.options.staleAfterMs??3600000;try{let u=await this.storage.sweepAbandoned(i);if(u>0)console.log(`[async-research-sweeper] marked ${u} stale jobs as abandoned`);return u}catch(u){return console.error("[async-research-sweeper] sweep failed",u),0}}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}import{readdir as ML4,rm as XIi}from"fs/promises";import{join as JIi}from"path";async function KIi(i){let u=new Date;u.setUTCDate(u.getUTCDate()-qL4),u.setUTCHours(0,0,0,0);let t=0;try{let f=await hW(i);for(let l of f)if(/^\d{4}$/.test(l))t+=await ylt(i,l,u);else if(!l.startsWith(".")){let E=JIi(i,l),c=await hW(E);for(let $ of c){if(!/^\d{4}$/.test($))continue;t+=await ylt(E,$,u)}if((await hW(E)).length===0)await XIi(E,{recursive:!0,force:!0})}}catch(f){console.warn("monitoring retention cleanup failed:",f)}return t}async function ylt(i,u,t){let f=0,l=JIi(i,u),E=await hW(l);for(let w of E){if(!/^\d{2}$/.test(w))continue;let $=JIi(l,w),h=await hW($);for(let d of h){if(!/^\d{2}$/.test(d))continue;let D=new Date(`${u}-${w}-${d}T00:00:00Z`);if(isNaN(D.getTime()))continue;if(D<t){let _=JIi($,d);await XIi(_,{recursive:!0,force:!0}),f++}}if((await hW($)).length===0)await XIi($,{recursive:!0,force:!0})}if((await hW(l)).length===0)await XIi(l,{recursive:!0,force:!0});return f}async function hW(i){try{return(await ML4(i)).filter((t)=>!t.startsWith("."))}catch{return[]}}var qL4=30;var ODu=()=>{};import{DBOS as ZDu,SchedulerMode as VL4}from"@dbos-inc/dbos-sdk";async function mL4(){let i=[Bh(),eS(),YD()],u=0;for(let t of i)try{u+=await KIi(t)}catch(f){console.error("[monitoring-retention] cleanup failed:",f)}return console.log(`[monitoring-retention] deleted ${u} day-dir(s) across ${i.length} signal dir(s)`),{deleted:u,dirs:i.length}}async function eL4(i,u){await ZDu.runStep(()=>mL4(),{name:"monitoringRetention"})}function Glt(){if(Plt)return;Plt=!0;let i=ZDu.registerWorkflow(eL4,{name:"monitoringRetentionWorkflow"});ZDu.registerScheduled(i,{name:"monitoringRetentionWorkflow",crontab:rL4,mode:VL4.ExactlyOncePerIntervalWhenActive})}var rL4="23 4 * * *",Plt=!1;var Ilt=O(()=>{qw();ODu()});function xlt(i){return async(u,t)=>{let f=await i.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["member.role","organization.id as orgId","organization.slug as orgSlug","organization.name as orgName"]).where("member.userId","=",t).where("member.organizationId","=",u).executeTakeFirst();if(!f)return console.warn(`[automationContextFactory] User ${t} not found in org ${u} \u2014 returning null`),null;let l=await _N.create();l.auth.user={id:t,role:f.role},l.organization={id:f.orgId,slug:f.orgSlug,name:f.orgName};let E=await utu(i.db,u,f.role);return l.boundAuth=itu({auth:l.authInstance,headers:new Headers,role:f.role,permissions:E,userId:t}),l.access=new AF(t,void 0,l.boundAuth,f.role,"self"),X5i(l,{id:f.orgId,slug:f.orgSlug}),l}}var klt=O(()=>{yF();Ta()});import{EventEmitter as aL4}from"events";var BDu;var jlt=O(()=>{DB();BDu=new aL4;BDu.on("request",(i)=>{Td(i)})});function Xlt(){return async(i,u)=>{let t=Date.now(),f=i.req.method,l=i.req.path;if(l==="/api/auth/get-session"||l.includes("favicon")){await u();return}let E="",c=!1;if(l.startsWith("/mcp")&&f==="POST"){c=!0;try{if(i.req.header("Content-Type")?.includes("application/json")){let D=await i.req.raw.clone().json();if(D.method==="tools/call"&&D.params?.name){let _=vb(D.params.name),N=D.params.arguments||{},Z=Object.keys(N).map((F)=>vb(F)),B=Z.length>0?Z.slice(0,3).join(",")+(Z.length>3?"\u2026":""):"";E=`${_1.tool}${_}${_1.dim}(${B})${_1.reset}`}else if(D.method)E=`${_1.dim}${vb(D.method)}${_1.reset}`}}catch{}}let w=vb(l);if(l.startsWith("/mcp/conn_")){let v=l.split("/")[2]??"";w=`/mcp/${_1.mcp}${vb(v.slice(0,12))}\u2026${_1.reset}`}else if(l==="/mcp")w=`${_1.mcp}/mcp${_1.reset}`;else if(l==="/mcp/registry")w=`${_1.mcp}/mcp/registry${_1.reset}`;let $=sL4(f),h=c?"\u25C0":"\u2190";if(!P6i())console.log(`${_1.dim}${h}${_1.reset} ${$}${f}${_1.reset} ${w}${E?` ${E}`:""}`);try{await u()}finally{let v=Date.now()-t,d=i.res.status,D=oL4(d),_=v<1000?`${v}ms`:`${(v/1000).toFixed(1)}s`,N=c?"\u25B6":"\u2192";if(!P6i())console.log(`${_1.dim}${N}${_1.reset} ${$}${f}${_1.reset} ${w}${E?` ${E}`:""} ${D}${d}${_1.reset} ${_1.duration}${_}${_1.reset}`);BDu.emit("request",{method:f,path:vb(l),status:d,duration:v,timestamp:new Date})}}}var _1,oL4=(i)=>{if(i>=500)return _1.serverError;if(i>=400)return _1.clientError;if(i>=300)return _1.redirect;return _1.ok},sL4=(i)=>{return _1[i]||_1.reset},vb=(i)=>{return i.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var Jlt=O(()=>{DB();jlt();_1={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 Slt}from"crypto";import{mkdir as pL4,readdir as iQ4,rm as Klt,stat as Llt}from"fs/promises";import{join as gDu,relative as uQ4}from"path";import{z as k0}from"zod";function Hlt(i){let u=i.replace(/[^a-zA-Z0-9_-]/g,"_");return gDu(tQ4,u)}function zlt(i){return i.replace(/^\/+/,"").replace(/\.\./g,"")}function FDu(i,u){let t=Hlt(i),f=zlt(u);return gDu(t,f)}function fQ4(i,u,t,f){let l=vu().encryptionKey||"dev-secret",E=`${i}:${u}:${t}:${f}`;return Slt("sha256",l).update(E).digest("hex")}function Wlt(i,u,t,f,l){let E=Math.floor(Date.now()/1000)+f,c=fQ4(u,t,E,l),w=new URL(`/api/dev-assets/${u}/${zlt(t)}`,i);return w.searchParams.set("expires",E.toString()),w.searchParams.set("signature",c),w.searchParams.set("method",l),w.toString()}function Rlt(i,u,t){let f=`${i}:${u.getTime()}:${t}`;return`"${Slt("md5","etag").update(f).digest("hex")}"`}async function nlt(i,u,t,f,l){try{let E=await iQ4(i,{withFileTypes:!0});for(let c of E){let w=gDu(i,c.name),h=uQ4(u,w).replace(/\\/g,"/");if(t&&!h.startsWith(t))continue;if(c.isDirectory())if(f){let v=h+"/";if(!t||v.startsWith(t)){if(!(t?h.slice(t.length):h).includes("/"))l.commonPrefixes.add(v)}}else await nlt(w,u,t,f,l);else if(c.isFile()){if(f&&t){let v=h.slice(t.length);if(v.includes(f)){let d=v.indexOf(f),D=t+v.slice(0,d+1);l.commonPrefixes.add(D);continue}}try{let v=await Llt(w);l.objects.push({key:h,size:v.size,lastModified:v.mtime.toISOString(),etag:Rlt(w,v.mtime,v.size)})}catch{}}}}catch{}}function blt(i,u){let f=Oi(i).id;return[{name:"LIST_OBJECTS",description:"List objects in the local assets directory with pagination support",inputSchema:k0.object({prefix:k0.string().optional(),maxKeys:k0.number().optional().default(1000),continuationToken:k0.string().optional(),delimiter:k0.string().optional()}),outputSchema:k0.object({objects:k0.array(k0.object({key:k0.string(),size:k0.number(),lastModified:k0.string(),etag:k0.string()})),nextContinuationToken:k0.string().optional(),isTruncated:k0.boolean(),commonPrefixes:k0.array(k0.string()).optional()}),handler:async(l)=>{let E=l,c=E.prefix||"",w=E.maxKeys??1000,$=E.delimiter,h=E.continuationToken,v=Hlt(f);await pL4(v,{recursive:!0});let d={objects:[],commonPrefixes:new Set};await nlt(v,v,c,$,d),d.objects.sort((B,F)=>B.key.localeCompare(F.key));let D=0;if(h){if(D=d.objects.findIndex((B)=>B.key>h),D===-1)D=d.objects.length}let _=d.objects.slice(D,D+w),N=D+w<d.objects.length,Z=N?_[_.length-1]?.key:void 0;return{objects:_,isTruncated:N,nextContinuationToken:Z,commonPrefixes:Array.from(d.commonPrefixes).sort()}}},{name:"GET_OBJECT_METADATA",description:"Get metadata for a file in the local assets directory",inputSchema:k0.object({key:k0.string()}),outputSchema:k0.object({contentType:k0.string().optional(),contentLength:k0.number(),lastModified:k0.string(),etag:k0.string(),metadata:k0.record(k0.string(),k0.string()).optional()}),handler:async(l)=>{let E=l,c=FDu(f,E.key),w=await Llt(c);return{contentType:_du(E.key),contentLength:w.size,lastModified:w.mtime.toISOString(),etag:Rlt(c,w.mtime,w.size)}}},{name:"GET_PRESIGNED_URL",description:"Generate a presigned URL for downloading a file from local storage",inputSchema:k0.object({key:k0.string(),expiresIn:k0.number().optional()}),outputSchema:k0.object({url:k0.string(),expiresIn:k0.number()}),handler:async(l)=>{let E=l,c=E.expiresIn??Ylt;return{url:Wlt(u,f,E.key,c,"GET"),expiresIn:c}}},{name:"PUT_PRESIGNED_URL",description:"Generate a presigned URL for uploading a file to local storage",inputSchema:k0.object({key:k0.string(),expiresIn:k0.number().optional(),contentType:k0.string().optional()}),outputSchema:k0.object({url:k0.string(),expiresIn:k0.number()}),handler:async(l)=>{let E=l,c=E.expiresIn??Ylt;return{url:Wlt(u,f,E.key,c,"PUT"),expiresIn:c}}},{name:"DELETE_OBJECT",description:"Delete a single file from local storage",inputSchema:k0.object({key:k0.string()}),outputSchema:k0.object({success:k0.boolean(),key:k0.string()}),handler:async(l)=>{let E=l,c=FDu(f,E.key);try{return await Klt(c),{success:!0,key:E.key}}catch{return{success:!1,key:E.key}}}},{name:"DELETE_OBJECTS",description:"Delete multiple files from local storage",inputSchema:k0.object({keys:k0.array(k0.string()).max(1000)}),outputSchema:k0.object({deleted:k0.array(k0.string()),errors:k0.array(k0.object({key:k0.string(),message:k0.string()}))}),handler:async(l)=>{let E=l,c=[],w=[];return await Promise.all(E.keys.map(async($)=>{let h=FDu(f,$);try{await Klt(h),c.push($)}catch(v){w.push({key:$,message:v instanceof Error?v.message:"Unknown error"})}})),{deleted:c,errors:w}}}]}async function TDu(i,u,t){let f=blt(u,t),l=new d2({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:K1});for(let c of f){let w="shape"in c.inputSchema?c.inputSchema.shape:k0.object({}).shape,$=c.outputSchema&&"shape"in c.outputSchema?c.outputSchema.shape:k0.object({}).shape;l.registerTool(c.name,{description:c.description??"",inputSchema:w,outputSchema:$,annotations:c.annotations,_meta:c._meta},async(h)=>{try{let v=await c.handler(h);return{content:[{type:"text",text:JSON.stringify(v)}],structuredContent:v}}catch(v){return{content:[{type:"text",text:`Error: ${v.message}`}],isError:!0}}})}let E=new K$({enableJsonResponse:i.headers.get("Accept")?.includes("application/json")??!1});return await l.connect(E),j8(l,E,i,"mcp:dev-assets")}async function Clt(i,u,t,f){let E=blt(t,f).find((c)=>c.name===i);if(!E)return{content:[{type:"text",text:`Tool not found: ${i}`}],isError:!0};try{let c=await E.handler(u);return{content:[{type:"text",text:JSON.stringify(c)}]}}catch(c){return{content:[{type:"text",text:c instanceof Error?c.message:String(c)}],isError:!0}}}var tQ4="./data/assets",Ylt=3600,Qlt,Mlt;var qlt=O(()=>{R0();ls();Ef();wr();YR();h3();CGi();Qlt=new Yu;Qlt.all("/",async(i)=>{let u=i.get("studioContext"),t=new URL(i.req.url),f=`${t.protocol}//${t.host}`;return TDu(i.req.raw,u,f)});Mlt=Qlt});var Vlt={};Gi(Vlt,{mountDevRoutes:()=>lQ4});function lQ4(i,u){i.all("/mcp/:connectionId{.*_dev-assets$}",u,async(f)=>{let l=f.get("studioContext"),E=new URL(f.req.url),c=`${E.protocol}//${E.host}`;return TDu(f.req.raw,l,c)}),i.all("/mcp/:connectionId{.*_dev-assets$}/call-tool/:toolName",u,async(f)=>{let l=f.get("studioContext"),E=new URL(f.req.url),c=`${E.protocol}//${E.host}`,w=f.req.param("toolName");if(!w)return f.json({error:"Missing tool name"},400);let $=await f.req.json(),h=await Clt(w,$,l,c);if(h.isError)return f.json(h.content,500);return f.json(h.content)}),i.use("/mcp/dev-assets",u),i.route("/mcp/dev-assets",Mlt);let t=new Yu;t.use("*",Vv({mountPath:"/api/dev-assets"})),t.route("/",bGi({orgFromPath:!1})),i.route("/api/dev-assets",t)}var rlt=O(()=>{Ef();Edu();CGi();qlt()});import{sql as EQ4}from"kysely";import{randomUUID as mlt}from"crypto";import{z as cQ4}from"zod";async function $Q4(i){let u=new Date().toISOString(),t=mlt(),f=t4.SELF(i.organizationId),l="registry.publish_request.created",E={requestId:i.request.id,requestedId:i.request.requested_id,title:i.request.title,status:i.request.status,createdAt:i.request.created_at,requester:{name:i.request.requester_name,email:i.request.requester_email}};await i.db.insertInto("events").values({id:t,organization_id:i.organizationId,type:"registry.publish_request.created",source:f,specversion:"1.0",subject:i.request.id,time:u,datacontenttype:"application/json",dataschema:null,data:JSON.stringify(E),cron:null,status:"pending",attempts:0,last_error:null,next_retry_at:null,created_at:u,updated_at:u}).execute();let c=await i.db.selectFrom("event_subscriptions").select(["id"]).where("organization_id","=",i.organizationId).where("enabled","=",1).where("event_type","=","registry.publish_request.created").where((w)=>w.or([w("publisher","is",null),w("publisher","=",f)])).execute();if(c.length>0)await i.db.insertInto("event_deliveries").values(c.map((w)=>({id:mlt(),event_id:t,subscription_id:w.id,status:"pending",attempts:0,last_error:null,delivered_at:null,next_retry_at:null,created_at:u}))).execute();try{await EQ4`SELECT
|
|
86836
86836
|
pg_notify('studio_events', ${t}),
|