decocms 4.252.6 → 4.252.7
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-B3N9P8RI.js → AlertCircle-DZsaQFP0.js} +1 -1
- package/dist/client/assets/{AreaChart-Ta2VvE4M.js → AreaChart-Bij1L6CK.js} +1 -1
- package/dist/client/assets/{ArrowLeft-CAoh3O2P.js → ArrowLeft-Dki1TeJa.js} +1 -1
- package/dist/client/assets/{ArrowUp-vACC0fQS.js → ArrowUp-C8oBiEtw.js} +1 -1
- package/dist/client/assets/{Check-CPrH5nll.js → Check-DkIifbiA.js} +1 -1
- package/dist/client/assets/{CheckCircle-DOyeCWqS.js → CheckCircle-BOH1ljhz.js} +1 -1
- package/dist/client/assets/{ChevronDown-G4qHTq-6.js → ChevronDown-0amSAjsV.js} +1 -1
- package/dist/client/assets/{ChevronRight-D4NI4YVM.js → ChevronRight-MavwbD4w.js} +1 -1
- package/dist/client/assets/{ChevronSelectorVertical-2IRHuU6g.js → ChevronSelectorVertical-CRk0cZeJ.js} +1 -1
- package/dist/client/assets/{ChevronUp-BZtKxHh_.js → ChevronUp-C9anA-E6.js} +1 -1
- package/dist/client/assets/{Copy01-ywyDwRaJ.js → Copy01-Bf7136IA.js} +1 -1
- package/dist/client/assets/{CreditCard01-BireWmrY.js → CreditCard01-IWGtGm1W.js} +1 -1
- package/dist/client/assets/{DotsVertical-bOgaeVD2.js → DotsVertical-CR0lYNk-.js} +1 -1
- package/dist/client/assets/{Download01-btlWjl_T.js → Download01-Dg6NesfY.js} +1 -1
- package/dist/client/assets/{Eye-CgK4I-1O.js → Eye-chpz-iD6.js} +1 -1
- package/dist/client/assets/{FilterLines-Db6ba3uS.js → FilterLines-CBlP9vLc.js} +1 -1
- package/dist/client/assets/{Globe01-DT7mR73t.js → Globe01-BlG2bFbG.js} +1 -1
- package/dist/client/assets/{Globe04-BT0IkDUg.js → Globe04-B94HGGMZ.js} +1 -1
- package/dist/client/assets/{HardDrive-CsZex706.js → HardDrive-CiwN6Fy1.js} +1 -1
- package/dist/client/assets/{Key01-RPMiJTSN.js → Key01-DqU-ZZ-c.js} +1 -1
- package/dist/client/assets/{LinkExternal01-B3lJvVTz.js → LinkExternal01-7e4b6esH.js} +1 -1
- package/dist/client/assets/{LockUnlocked01-D_PrgcPj.js → LockUnlocked01-BSziY5OG.js} +1 -1
- package/dist/client/assets/{LogOut01-CG37d2w6.js → LogOut01-kmh1YiOW.js} +1 -1
- package/dist/client/assets/{Monitor01-DA2rKHmj.js → Monitor01-CyppPVOw.js} +1 -1
- package/dist/client/assets/{Palette-12b_09mC.js → Palette-rCAi-zrG.js} +1 -1
- package/dist/client/assets/{Play-7pHX7ELJ.js → Play-CVRgbrLg.js} +1 -1
- package/dist/client/assets/{Plus-BdnisXMO.js → Plus-BcWyxvSW.js} +1 -1
- package/dist/client/assets/{SearchLg-BMCbz4Px.js → SearchLg-CpkLQ15a.js} +1 -1
- package/dist/client/assets/{SearchMd-jvTLA4cM.js → SearchMd-DvwVdzYo.js} +1 -1
- package/dist/client/assets/{Settings02-DRHh6ORT.js → Settings02-CC4b_9Kj.js} +1 -1
- package/dist/client/assets/{Share07-Cs_k4QmG.js → Share07-Bi2eK41m.js} +1 -1
- package/dist/client/assets/{Shield01-6OF6jI53.js → Shield01-3xvIqBi2.js} +1 -1
- package/dist/client/assets/{Stars01-BxjfypIe.js → Stars01-BWP_9TC1.js} +1 -1
- package/dist/client/assets/{Stars02-Cw53MaFa.js → Stars02-Cm3C173h.js} +1 -1
- package/dist/client/assets/{Sun-CWSZDqs-.js → Sun-CTakNFOt.js} +1 -1
- package/dist/client/assets/{SwitchHorizontal01-CvA2czpG.js → SwitchHorizontal01-BeMFka3N.js} +1 -1
- package/dist/client/assets/{Tool01-GJuq_6ah.js → Tool01-DsCX5o1L.js} +1 -1
- package/dist/client/assets/{Tool02-w8nfNJaC.js → Tool02-DMGRYdRe.js} +1 -1
- package/dist/client/assets/{Trash01-C3aqUX7b.js → Trash01-lrkOD3LI.js} +1 -1
- package/dist/client/assets/{TrendUp01-C7MRDxvy.js → TrendUp01-BVn6HyCF.js} +1 -1
- package/dist/client/assets/{Upload01-9v7tS0P9.js → Upload01-CndB6L-1.js} +1 -1
- package/dist/client/assets/{User01-Cn3Cm1ue.js → User01-BnBSlK-N.js} +1 -1
- package/dist/client/assets/{UserSquare-CU6QOPpB.js → UserSquare-zRdDnlzE.js} +1 -1
- package/dist/client/assets/{Users01-DSr_kDdo.js → Users01-BDacA4yM.js} +1 -1
- package/dist/client/assets/{Users03-2jV2m3fy.js → Users03-Bk7jdYrd.js} +1 -1
- package/dist/client/assets/{XCircle-BjopJiXE.js → XCircle-CzWZHxMA.js} +1 -1
- package/dist/client/assets/{XClose-Ca5GifFS.js → XClose-CBr7jhSX.js} +1 -1
- package/dist/client/assets/{YAxis-D1hOwkVr.js → YAxis-DSFmgSMK.js} +1 -1
- package/dist/client/assets/{Zap-OaI_rJnE.js → Zap-DN9d602n.js} +1 -1
- package/dist/client/assets/{ZapSquare-BLW3x7nI.js → ZapSquare-DdnGMpSr.js} +1 -1
- package/dist/client/assets/{access-gate-afdyv645.js → access-gate-DSfyS-1Q.js} +1 -1
- package/dist/client/assets/{agent-icon-C2DlSiws.js → agent-icon-B1RZW5py.js} +1 -1
- package/dist/client/assets/{agents-list-BBeb6okJ.js → agents-list-B2E2xju6.js} +1 -1
- package/dist/client/assets/{ai-providers-DrWWCPeS.js → ai-providers-oM9hLJOA.js} +1 -1
- package/dist/client/assets/{alert-7s0DQWXN.js → alert-CV5SIB4Y.js} +1 -1
- package/dist/client/assets/{alert-dialog-CXRz8XlW.js → alert-dialog-CYOEoGHB.js} +1 -1
- package/dist/client/assets/{api-keys-C06MrE9J.js → api-keys-B10VWDvH.js} +1 -1
- package/dist/client/assets/{app-editor-BsdPp94Z.js → app-editor-BkUM-UA6.js} +1 -1
- package/dist/client/assets/{auth-DfjAwAsp.js → auth-CPSixqc5.js} +1 -1
- package/dist/client/assets/{auth-catchall-Bv5LqT5s.js → auth-catchall-CScBKe5s.js} +1 -1
- package/dist/client/assets/{auth-entry-CQNwP1Bj.js → auth-entry-ClamuEKN.js} +1 -1
- package/dist/client/assets/{auth-split-layout-BTUJ9w6v.js → auth-split-layout-CMAeyVtB.js} +1 -1
- package/dist/client/assets/{authenticate-and-persist-oauth-BvXyw70f.js → authenticate-and-persist-oauth-tneNkKmS.js} +1 -1
- package/dist/client/assets/{automation-list-row-B98oqne5.js → automation-list-row-mIutZcoc.js} +1 -1
- package/dist/client/assets/{automation-runs-S5Yd-_Qy.js → automation-runs-D0K9p7O-.js} +1 -1
- package/dist/client/assets/{automations-C1gfqzlp.js → automations-DWuswrlY.js} +1 -1
- package/dist/client/assets/{avatar-Cu3fpsPL.js → avatar-ClV2R_mb.js} +1 -1
- package/dist/client/assets/{badge-ZjwGfj-P.js → badge-cv9UGLmS.js} +1 -1
- package/dist/client/assets/{block-document-GJuiRBtd.js → block-document-Cq_hH0nw.js} +1 -1
- package/dist/client/assets/{buckets-CdRLV-pX.js → buckets-DvcdebMW.js} +1 -1
- package/dist/client/assets/{bulk-category-panel-w-WopKeo.js → bulk-category-panel-CVlNNWrV.js} +1 -1
- package/dist/client/assets/{capability-load-error-Bm7nPBbX.js → capability-load-error-9GhAvmsJ.js} +1 -1
- package/dist/client/assets/{cards-DKSguKep.js → cards-C7pYARPH.js} +1 -1
- package/dist/client/assets/{category-editor-BavLkWNC.js → category-editor-DcPfB_hV.js} +1 -1
- package/dist/client/assets/{chart-7-KHnUMW.js → chart-DHgYC4B5.js} +1 -1
- package/dist/client/assets/{chat-context-Y2lSUOus.js → chat-context-DXgk36Kq.js} +1 -1
- package/dist/client/assets/{checkbox-DUG-BuIr.js → checkbox-B9Fl0mQa.js} +1 -1
- package/dist/client/assets/{choose-editor-DsbZxu3U.js → choose-editor-Grof5S5p.js} +1 -1
- package/dist/client/assets/{cli-auth-success-PRwUTJDL.js → cli-auth-success-B0hDTE9k.js} +1 -1
- package/dist/client/assets/{collection-detail-Cpntuk8o.js → collection-detail-CShNEjjb.js} +1 -1
- package/dist/client/assets/{collection-display-button-COPFfzqP.js → collection-display-button-DghxFKGL.js} +1 -1
- package/dist/client/assets/{collection-search-COpMPrqG.js → collection-search-C8FmBUby.js} +1 -1
- package/dist/client/assets/{collection-table-wrapper-3M_polj1.js → collection-table-wrapper-CZAyqF3S.js} +1 -1
- package/dist/client/assets/{collection-tabs-BaHERHu8.js → collection-tabs-5rKmzhSy.js} +1 -1
- package/dist/client/assets/{command-Dv7YAzU9.js → command-DBJ46wCN.js} +1 -1
- package/dist/client/assets/{commerce-onboarding-_7sFe_bc.js → commerce-onboarding-DNJrL2l0.js} +1 -1
- package/dist/client/assets/{connect-BX52caNX.js → connect-Dz1h3Wub.js} +1 -1
- package/dist/client/assets/{connection-D6lznZG4.js → connection-CPNeVVl_.js} +1 -1
- package/dist/client/assets/{connection-card-BiFgAsL_.js → connection-card-Ce3u1KIu.js} +1 -1
- package/dist/client/assets/{connection-detail-bs8njCjl.js → connection-detail-Dct2Z3Et.js} +1 -1
- package/dist/client/assets/{connection-form-helpers-_esDDpGt.js → connection-form-helpers-CYJyaLQN.js} +1 -1
- package/dist/client/assets/{connections--TgFR5Dd.js → connections-DzrV_fRy.js} +1 -1
- package/dist/client/assets/{decopilot-sse-pool-DqFA5Z7W.js → decopilot-sse-pool-DqNjHkOv.js} +1 -1
- package/dist/client/assets/{dialog-svMn2p6m.js → dialog-BJqj7y-e.js} +1 -1
- package/dist/client/assets/{domain-settings-kas522uM.js → domain-settings-C0Ue1i-T.js} +1 -1
- package/dist/client/assets/{drawer-p9HIdp3V.js → drawer-C066bWMW.js} +1 -1
- package/dist/client/assets/{dropdown-menu-CZG0wpYc.js → dropdown-menu-CGjT0h5K.js} +1 -1
- package/dist/client/assets/{empty-state-D1Hwt6I3.js → empty-state-ChZmE6vA.js} +1 -1
- package/dist/client/assets/{extract-connection-data-Dvlbl68S.js → extract-connection-data-D6pFj4iN.js} +1 -1
- package/dist/client/assets/{file-explorer-BNHsn9-G.js → file-explorer-BQVK-AaN.js} +1 -1
- package/dist/client/assets/{file-type-icon-CVJ7hQAr.js → file-type-icon-CeMMkuT6.js} +1 -1
- package/dist/client/assets/{form-CRPn-NVm.js → form-ezR2Bgah.js} +1 -1
- package/dist/client/assets/{general-DtfgBiId.js → general-DTao5a0B.js} +1 -1
- package/dist/client/assets/{github-repo-picker-BMOko2tD.js → github-repo-picker-B_8OFv2m.js} +1 -1
- package/dist/client/assets/{hooks-BbuY97xG.js → hooks-7NK0F0cE.js} +1 -1
- package/dist/client/assets/{index-CHoNe3-e.js → index-BDCehBoK.js} +1 -1
- package/dist/client/assets/{index-BYNuDzjP.js → index-BQbxjsmm.js} +1 -1
- package/dist/client/assets/{index-BwjLFZ_0.js → index-Bmhu6LOF.js} +1 -1
- package/dist/client/assets/{index-vgq72HQn.js → index-CEWXZtQh.js} +1 -1
- package/dist/client/assets/{index--aqZk30Z.js → index-CWEOxNZq.js} +1 -1
- package/dist/client/assets/{index-DlyQggKr.js → index-Dj4DiKL1.js} +3 -3
- package/dist/client/assets/{index-BIeXPd0C.js → index-Dt5L7Kba.js} +5 -5
- package/dist/client/assets/{index-CX8yxDZE.js → index-I582kTlj.js} +1 -1
- package/dist/client/assets/{index-TKHi7Tik.js → index-NEfLNGb_.js} +1 -1
- package/dist/client/assets/{index-DKmQVnGC.js → index-mNSVuYa1.js} +1 -1
- package/dist/client/assets/{index-redirect-Cb0qL2DT.js → index-redirect-Bu7s6qY_.js} +1 -1
- package/dist/client/assets/{infra-billing-Dr9VxLgb.js → infra-billing-P2VqSjxb.js} +1 -1
- package/dist/client/assets/{input-DCbgW96W.js → input-WqIRcdd5.js} +1 -1
- package/dist/client/assets/{integration-icon-CZ_brqB-.js → integration-icon-CYx8LMu3.js} +1 -1
- package/dist/client/assets/{invite-member-dialog-DN9y9QoA.js → invite-member-dialog-BZLMwCLw.js} +1 -1
- package/dist/client/assets/{label-BN6eKS5v.js → label-C1zwNBve.js} +1 -1
- package/dist/client/assets/{layout-BkSOdU6I.js → layout-DoccO4xy.js} +1 -1
- package/dist/client/assets/{login-DqhlKX2V.js → login-CgMCJRz9.js} +1 -1
- package/dist/client/assets/{mcp-oauth-BYPWPMuJ.js → mcp-oauth-gW3GWlhB.js} +1 -1
- package/dist/client/assets/{members-xl-kxZPR.js → members-DvoXSP6d.js} +1 -1
- package/dist/client/assets/{monaco-editor-CUuE4xi3.js → monaco-editor-B5VjDROn.js} +1 -1
- package/dist/client/assets/{monitoring-stats-row-DdxZQmuR.js → monitoring-stats-row-BUXcCPEU.js} +1 -1
- package/dist/client/assets/{multi-select-r9SlP0lA.js → multi-select-BAxR1mT4.js} +1 -1
- package/dist/client/assets/{oauth-callback-CkTvtNMN.js → oauth-callback-DtZIWk6c.js} +1 -1
- package/dist/client/assets/{oauth-callback-ai-provider-DOp84Dsx.js → oauth-callback-ai-provider-Cr2NAY8J.js} +1 -1
- package/dist/client/assets/{onboarding-z7in_-Ij.js → onboarding-CMwA-5NC.js} +1 -1
- package/dist/client/assets/{org-layout-Byn2hhGS.js → org-layout-Dlyr90j7.js} +1 -1
- package/dist/client/assets/{organization-choice-DbXhcsww.js → organization-choice-CKclIvQH.js} +1 -1
- package/dist/client/assets/{orgs-DIy_uFQs.js → orgs-Cwg3IKVu.js} +1 -1
- package/dist/client/assets/{page-seo-form-CQ1rbRkh.js → page-seo-form-C0wrGZ4b.js} +1 -1
- package/dist/client/assets/{popover-DwYw3BzS.js → popover-BS7Ijllp.js} +1 -1
- package/dist/client/assets/{post-editor-7ZaXo2IR.js → post-editor-COgI89pK.js} +1 -1
- package/dist/client/assets/{primitives-BYX3ZhTm.js → primitives-RMIXhUht.js} +1 -1
- package/dist/client/assets/{profile-CgiY9el3.js → profile-CQHIXRo4.js} +1 -1
- package/dist/client/assets/{project-app-view-Bm1VvuKf.js → project-app-view-CgEbOrxT.js} +1 -1
- package/dist/client/assets/record-editor-BpbZJ_l8.js +1 -0
- package/dist/client/assets/{redirect-editor-BO4-9jCX.js → redirect-editor-BZ81HMvN.js} +1 -1
- package/dist/client/assets/registry-DONWBYhy.js +2 -0
- package/dist/client/assets/{registry-layout-CHeFNJkE.js → registry-layout-BU7pE6If.js} +1 -1
- package/dist/client/assets/{reports-CfaAR2WX.js → reports-D8s2NwO8.js} +1 -1
- package/dist/client/assets/{require-capability-DcPkp1qb.js → require-capability-Csx6UR3V.js} +1 -1
- package/dist/client/assets/{required-auth-layout-DaWGqBbU.js → required-auth-layout-Dg1XkSB2.js} +1 -1
- package/dist/client/assets/{reset-password-Db0S72Km.js → reset-password-BYh8sP04.js} +1 -1
- package/dist/client/assets/{roles-CpdVPOvR.js → roles-MJaZCCUs.js} +1 -1
- package/dist/client/assets/{search-input-DbEdF-ot.js → search-input-3VFdhX2g.js} +1 -1
- package/dist/client/assets/{secrets-DZQ5j394.js → secrets-jpJYm1hv.js} +1 -1
- package/dist/client/assets/{sections-editor-Gxh6mCa2.js → sections-editor-Ci-kiSEO.js} +1 -1
- package/dist/client/assets/{select-CFClsW2o.js → select-CQbypN2U.js} +1 -1
- package/dist/client/assets/{select-model-4uym7fAl.js → select-model-COyEyVqj.js} +1 -1
- package/dist/client/assets/{self-tool-result-kfIiv_FE.js → self-tool-result-CrYKnQc4.js} +1 -1
- package/dist/client/assets/{seo-editor-BvM423hQ.js → seo-editor-Bv7MPAJC.js} +1 -1
- package/dist/client/assets/{settings-layout-CB472uow.js → settings-layout-DH2-C2_D.js} +1 -1
- package/dist/client/assets/{shell-controls-BPjcPtRp.js → shell-controls-BqdOCCJg.js} +1 -1
- package/dist/client/assets/{shell-layout-DmdmH2nZ.js → shell-layout-BEsFrxoz.js} +1 -1
- package/dist/client/assets/{spinner-BcjyVWR3.js → spinner-B4nE5frW.js} +1 -1
- package/dist/client/assets/{sso-DYZsv6pb.js → sso-DyNp6c5-.js} +1 -1
- package/dist/client/assets/{store-CaCRrkiO.js → store-C3wwrfFg.js} +1 -1
- package/dist/client/assets/store-registry-Ch10qOp2.js +2 -0
- package/dist/client/assets/{switch-DQMBzd7M.js → switch-DRfGGRto.js} +1 -1
- package/dist/client/assets/{synced-repos-BQv8bwPG.js → synced-repos-BR1-aKmZ.js} +1 -1
- package/dist/client/assets/{tab-id-BN1PYOI8.js → tab-id-Cop5yrKB.js} +1 -1
- package/dist/client/assets/{table-nl8G6E7C.js → table-nyIA6VkN.js} +1 -1
- package/dist/client/assets/{tabs-De9A-kf2.js → tabs-sFgcxWPr.js} +1 -1
- package/dist/client/assets/{task-key-CJYc-COa.js → task-key-1e5QcdQ0.js} +1 -1
- package/dist/client/assets/{tasks-BqQsnn6a.js → tasks-dbu_C5Ni.js} +1 -1
- package/dist/client/assets/{textarea-F7rf9ffV.js → textarea-fio1fsB-.js} +1 -1
- package/dist/client/assets/{toggle-group-DH6Elpb9.js → toggle-group-Cr1m6Gp4.js} +1 -1
- package/dist/client/assets/{toolbar-DXkGB1Ul.js → toolbar-DNvH542e.js} +1 -1
- package/dist/client/assets/{track-B_r7o20E.js → track-DsBqmGmP.js} +1 -1
- package/dist/client/assets/{types-zt2OUBsM.js → types-BZmkV3q5.js} +1 -1
- package/dist/client/assets/{use-ai-providers-ClKH0D4T.js → use-ai-providers-CiI6ZWkB.js} +1 -1
- package/dist/client/assets/{use-api-keys-BCRKaD7K.js → use-api-keys-Cpo1MYM1.js} +1 -1
- package/dist/client/assets/{use-automations-BTqVELVQ.js → use-automations-CWAeTnIs.js} +1 -1
- package/dist/client/assets/{use-autosave-Dac44dNK.js → use-autosave-CdaDGr0q.js} +1 -1
- package/dist/client/assets/{use-clock-tick-xAUs0mS7.js → use-clock-tick-FrtuQikY.js} +1 -1
- package/dist/client/assets/{use-commerce-diagnostic-DEUndQyn.js → use-commerce-diagnostic-DODwuMLX.js} +1 -1
- package/dist/client/assets/{use-connection-fRjiD58P.js → use-connection-Cl7B1D7N.js} +1 -1
- package/dist/client/assets/{use-copy-CDrSvHNn.js → use-copy-YdDsFuXw.js} +1 -1
- package/dist/client/assets/{use-create-virtual-mcp-ops7bD7S.js → use-create-virtual-mcp-BqxzzRg2.js} +1 -1
- package/dist/client/assets/{use-debounced-autosave-CMeFp8Xg.js → use-debounced-autosave-DnThKKar.js} +1 -1
- package/dist/client/assets/{use-debounced-value-Ds_MXqVB.js → use-debounced-value-CpC8hNSQ.js} +1 -1
- package/dist/client/assets/{use-decopilot-events-DLqKqrVm.js → use-decopilot-events-CT3DufS7.js} +1 -1
- package/dist/client/assets/{use-delete-connection-Crq8pzcl.js → use-delete-connection-CcsdQhUb.js} +1 -1
- package/dist/client/assets/{use-deployment-admin-DX4Bfylr.js → use-deployment-admin-BCzrIfS8.js} +1 -1
- package/dist/client/assets/{use-file-configs-Ej-42Dac.js → use-file-configs-DIIZBKDz.js} +1 -1
- package/dist/client/assets/{use-infinite-scroll-DNyzzwh5.js → use-infinite-scroll-C8dK5V5a.js} +1 -1
- package/dist/client/assets/{use-join-requests-CQw0wcIA.js → use-join-requests-DKeG-qZs.js} +1 -1
- package/dist/client/assets/{use-mcp-client-KhSygikn.js → use-mcp-client-KykQjryc.js} +1 -1
- package/dist/client/assets/{use-mcp-tools-r-peJDZE.js → use-mcp-tools-Bi5GFC1j.js} +1 -1
- package/dist/client/assets/{use-members-DSPLcyfn.js → use-members-Bq_njsAn.js} +1 -1
- package/dist/client/assets/{use-navigate-to-agent-x70vIThZ.js → use-navigate-to-agent-CGTOFk-y.js} +1 -1
- package/dist/client/assets/{use-org-auth-client-B4TSIzPx.js → use-org-auth-client-DQmA2kdY.js} +1 -1
- package/dist/client/assets/{use-org-repo-syncs-DFfp5psX.js → use-org-repo-syncs-qm0esouY.js} +1 -1
- package/dist/client/assets/{use-org-sso-dw_XzQwV.js → use-org-sso-Bn98t9aS.js} +1 -1
- package/dist/client/assets/{use-organization-roles-DhAaU6Zr.js → use-organization-roles-L64TVPJv.js} +1 -1
- package/dist/client/assets/{use-organization-settings-BTxpAf-D.js → use-organization-settings-DILBdekz.js} +1 -1
- package/dist/client/assets/{use-registry-connections-DnM9cpUz.js → use-registry-connections-CwlB0Yn2.js} +1 -1
- package/dist/client/assets/{use-secrets-DxBDVMAW.js → use-secrets-4lO9QZFW.js} +1 -1
- package/dist/client/assets/{use-section-preview-base-CTepAoVi.js → use-section-preview-base-BDzihOuQ.js} +1 -1
- package/dist/client/assets/{use-status-sounds-bDwu3LXI.js → use-status-sounds-DGR_pA7Q.js} +1 -1
- package/dist/client/assets/{use-tags-yIbbBBjl.js → use-tags-CCL6Gkja.js} +1 -1
- package/dist/client/assets/{use-view-mode-Io5xV2Z4.js → use-view-mode-rtRrBype.js} +1 -1
- package/dist/client/assets/{use-virtual-mcp-BPCbmmAA.js → use-virtual-mcp-CdzcvapQ.js} +1 -1
- package/dist/client/assets/useInfiniteQuery-hqfkn01u.js +1 -0
- package/dist/client/assets/useSuspenseInfiniteQuery-CoKXbJr2.js +1 -0
- package/dist/client/assets/{users-bC-kOjSW.js → users-kLKOnHiL.js} +1 -1
- package/dist/client/assets/{variant-calendar-goTPMBpu.js → variant-calendar-DiFZ-BHH.js} +1 -1
- package/dist/client/assets/{view-mode-toggle-3vjjnMmf.js → view-mode-toggle-1XBV2Qf0.js} +1 -1
- package/dist/client/index.html +1 -1
- package/dist/server/cli.js +2 -2
- package/dist/server/server.js +2 -2
- package/package.json +1 -1
- package/dist/client/assets/record-editor-oC8Ps8Zh.js +0 -1
- package/dist/client/assets/registry-UMO8g3j6.js +0 -2
- package/dist/client/assets/store-registry-Cnwspnzv.js +0 -2
- package/dist/client/assets/useInfiniteQuery-BIzCGlNN.js +0 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-Dkficohd.js +0 -1
package/dist/server/server.js
CHANGED
|
@@ -1578,7 +1578,7 @@ data:
|
|
|
1578
1578
|
</head>`+$.slice(H)}return`<head>
|
|
1579
1579
|
`+Q+`
|
|
1580
1580
|
</head>
|
|
1581
|
-
`+$}function GD0($){if(!$||$.length===0)return[];return $.filter((Z)=>Dj4.test(Z))}function Lj4($){if($.csp)return $.csp;let Z=$.resourceCsp;if(!Z)return OU$;let X=GD0(Z.resourceDomains),Q=GD0(Z.connectDomains),Y=GD0(Z.frameDomains),G=GD0(Z.baseUriDomains),J=X.length>0,W=Q.length>0,K=Y.length>0,F=G.length>0;if(!J&&!W&&!K&&!F)return OU$;let H=X.join(" ");return["default-src 'none'",J?`script-src 'unsafe-inline' 'unsafe-eval' 'wasm-unsafe-eval' ${H}`:"script-src 'unsafe-inline' 'unsafe-eval' 'wasm-unsafe-eval'",J?`style-src 'unsafe-inline' ${H}`:"style-src 'unsafe-inline'",J?`img-src * data: blob: ${H}`:"img-src * data: blob:",J?`media-src * data: blob: ${H}`:"media-src * data: blob:",J?`font-src data: ${H}`:"font-src data:",W?`connect-src ${Q.join(" ")}`:"connect-src 'none'",K?`frame-src ${Y.join(" ")}`:"frame-src 'none'","worker-src blob:","form-action 'none'",F?`base-uri ${G.join(" ")}`:"base-uri 'none'"].join("; ")}var OU$,Dj4;var wU$=w(()=>{OU$=["default-src 'none'","script-src 'unsafe-inline' 'unsafe-eval' 'wasm-unsafe-eval'","style-src 'unsafe-inline'","img-src * data: blob:","media-src * data: blob:","font-src data:","connect-src 'none'","frame-src 'none'","worker-src blob:","form-action 'none'","base-uri 'none'"].join("; ");Dj4=/^https?:\/\/(\*\.)?[a-zA-Z0-9._-]+(:\d+)?\/?$/});function Ej4($){let Z=$.lastFailureAt-$.firstFailureAt;return $.count>=My1&&Z>=ky1}class vr0{options;kv=null;codec=v50();constructor($){this.options=$}async init(){let $=this.options.getJetStream();if(!$)return;this.kv=await new LU$.Kvm($).create(jj4,{storage:DU$.StorageType.Memory,ttl:EU$.nanos(Vy1)})}async recordFailure($){if(!this.kv)return _r0;let Z=Date.now();for(let X=0;X<zj4;X++)try{let Q=await this.kv.get($);if(!(Q&&Q.operation!=="DEL"&&Q.operation!=="PURGE"&&Q.value?.length)){let W={count:1,firstFailureAt:Z,lastFailureAt:Z};return await this.kv.create($,this.codec.encode(W)),{count:W.count,shouldDisable:!1}}let G=this.codec.decode(Q.value),J={count:G.count+1,firstFailureAt:G.firstFailureAt,lastFailureAt:Z};return await this.kv.update($,this.codec.encode(J),Q.revision),{count:J.count,shouldDisable:Ej4(J)}}catch{}return _r0}async recordSuccess($){if(!this.kv)return;try{await this.kv.delete($)}catch{}}teardown(){this.kv=null}}class ln{async recordFailure(){return _r0}async recordSuccess(){}teardown(){}}function fr0($){jU$=$??new ln}function br0(){return jU$}var DU$,LU$,EU$,_r0,jj4="DECOCMS_CONN_CIRCUIT",zj4=5,jU$;var xr0=w(()=>{DU$=V(uw(),1),LU$=V(Qc0(),1),EU$=V(Mu(),1),_r0={count:0,shouldDisable:!1};jU$=new ln});function zU$($){if(!$)return{decision:"skip"};if($.startsWith("notifications/"))return{decision:"skip"};if(Aj4.has($))return{decision:"skip"};let Z=Pj4[$];if(Z)return{decision:"skip-if-list-cached",listType:Z};return{decision:"probe"}}async function PU$($){if($.method!=="POST")return;let Z=$.headers.get("content-length");if(Z&&Number(Z)>Tj4)return;try{let X=await $.clone().json(),Y=(Array.isArray(X)?X[0]:X)?.method;return typeof Y==="string"?Y:void 0}catch{return}}var Pj4,Aj4,Tj4=64000;var AU$=w(()=>{Pj4={"tools/list":"tools","resources/list":"resources","prompts/list":"prompts"},Aj4=new Set(["ping"])});import{SpanStatusCode as JD0}from"@opentelemetry/api";async function WD0($,Z){let X=$.get("studioContext");try{let Q=X.organization?.id??null,Y=Z?Z:Q?tD(Q):null;if(!Y)return $.json({error:"Agent ID or organization ID is required"},400);if(Z&&!Q)return $.json({error:"Organization context is required"},400);let G=await X.tracer.startActiveSpan("studio.virtual_mcp.lookup",{attributes:{"virtual_mcp.id":Y}},async(U)=>{try{let O=await X.storage.virtualMcps.findById(Y,Q??void 0);return U.setStatus({code:JD0.OK}),O}catch(O){throw U.setStatus({code:JD0.ERROR,message:O.message}),U.recordException(O),O}finally{U.end()}});if(!G)return $.json({error:"Agent not found"},404);if(Q&&G.organization_id!==Q)return $.json({error:"Agent not found"},404);if(G.status!=="active")return $.json({error:`Agent is inactive: ${G.id??"Decopilot"}`},503);if(X.organization?.id&&G.organization_id!==X.organization.id)return $.json({error:"Forbidden: Agent does not belong to your organization"},403);X.connectionId=G.id??void 0;let J=G1(X),W=null;if(G.id&&J&&w5(G.metadata)[J])W=await OC(X,G.id,J,$.req.query("branch")??void 0).catch(()=>null);let K=await X.tracer.startActiveSpan("studio.virtual_mcp.create_client",{attributes:{"virtual_mcp.id":G.id??"decopilot"}},async(U)=>{try{let O=await uH(G,X,!1,{includeSkillsCatalog:!0,additionalConnections:W?[W]:[]});return U.setStatus({code:JD0.OK}),O}catch(O){throw U.setStatus({code:JD0.ERROR,message:O.message}),U.recordException(O),O}finally{U.end()}}),F={name:G.id??"Decopilot",version:"1.0.0",title:G.title??void 0,description:G.description??void 0,icons:G.icon?[{src:G.icon}]:void 0},H=dD(K,F,{capabilities:{tools:{},resources:{},prompts:{}},instructions:K.getInstructions(),toolCallTimeoutMs:rf}),N=new XQ({enableJsonResponse:$.req.header("Accept")?.includes("application/json")??!1});return await H.connect(N),await FJ(H,N,$.req.raw,`virtual-mcp:${G.id??"decopilot"}`,{onClose:()=>K.close()})}catch(Q){let Y=Q;return console.error("[virtual-mcp] Error handling virtual MCP request:",Y),$.json({error:"Internal server error",message:Y.message},500)}}var KD0=()=>{let $=new H1;return $.all("/gateway/:virtualMcpId?",async(Z)=>{let X=Z.req.param("virtualMcpId")||Z.req.header("x-virtual-mcp-id");return WD0(Z,X)}),$.all("/virtual-mcp/:virtualMcpId?",async(Z)=>{let X=Z.req.param("virtualMcpId")||Z.req.header("x-virtual-mcp-id");return WD0(Z,X)}),$};var FD0=w(()=>{fX();O8();zC();D8();Ey();Uw0();pX();my()});import{SpanStatusCode as HD0}from"@opentelemetry/api";var TU$=($,Z)=>{if($ instanceof Xx)return Z.header("Retry-After",String(Math.ceil($.cooldownRemainingMs/1000))),Z.json({error:$.message},503);if($.message.includes("not found"))return Z.json({error:$.message},404);if($.message.includes("does not belong to the active organization"))return Z.json({error:"Connection not found"},404);if($.message.includes("inactive"))return Z.json({error:$.message},503);return Z.json({error:"Internal server error",message:$.message},500)},ND0=()=>{let $=new H1;return $.all("/",async(Z)=>{return WD0(Z,void 0)}),$.get("/:connectionId/ui-resource",async(Z)=>{let X=Z.get("studioContext"),Q=Z.req.param("connectionId"),Y=Z.req.query("uri");if(!Y)return Z.json({error:"uri query param is required"},400);if(!X.organization?.id)return Z.json({error:"Organization context is required"},403);let G=px0(Q),J;if(G){let O=G1(X);if(!O)return Z.json({error:"Authentication required"},401);if(J=await OC(X,G,O,Z.req.query("branch")??void 0),!J)return Z.json({error:"Dev server not running"},503)}else if(J=await X.storage.connections.findById(Q,X.organization.id),!J||J.organization_id!==X.organization.id)return Z.json({error:"Connection not found"},404);let W=VO(J,X,!1,Z9()??void 0),K,F;try{let B=(await W.readResource({uri:Y})).contents?.[0];K=B?.text,F=B?._meta?.ui?.csp}catch(O){return Z.json({error:O.message},502)}finally{await W.close().catch(()=>{})}if(typeof K!=="string")return Z.json({error:"Resource has no text content"},404);let H=BU$(K,{resourceCsp:F}),N=`"${Bun.hash(H).toString(36)}"`,U="private, no-cache";if(Z.req.header("if-none-match")===N)return new Response(null,{status:304,headers:{ETag:N,"Cache-Control":U}});return new Response(H,{headers:{"Content-Type":"text/html; charset=utf-8",ETag:N,"Cache-Control":U}})}),$.all("/:connectionId",async(Z)=>{let X=Z.req.param("connectionId"),Q=Z.get("studioContext");if(X.endsWith("_self")){let J=X.slice(0,-5);if(!Q.organization||Q.organization.id!==J)return Z.json({error:"Connection not found"},404);let W=await iy(Q),K=new XQ({enableJsonResponse:Z.req.raw.headers.get("Accept")?.includes("application/json")??!1});return await W.connect(K),aH.run(Q,()=>FJ(W,K,Z.req.raw,`mcp:self:${X}`))}let Y=px0(X);if(Y){if(!Q.organization?.id)return Z.json({error:"Organization context is required"},403);let J=G1(Q);if(!J)return Z.json({error:"Authentication required"},401);let W=await OC(Q,Y,J,Z.req.query("branch")??void 0);if(!W)return Z.json({error:"Dev server not running"},503);let K=y50(W,Q,!1),F=new XQ({enableJsonResponse:Z.req.raw.headers.get("Accept")?.includes("application/json")??!1});return await K.connect(F),FJ(K,F,Z.req.raw,`mcp:dev:${X}`)}let G=null;try{try{if(!Q.organization?.id)return Z.json({error:"Organization context is required"},403);if(G=await Q.tracer.startActiveSpan("studio.connection.lookup",{attributes:{"connection.id":X}},async(D)=>{KJ(Z,"mcp.find_connection");try{let L=await Q.storage.connections.findById(X,Q.organization.id);return D.setStatus({code:HD0.OK}),L}catch(L){throw D.setStatus({code:HD0.ERROR,message:L.message}),D.recordException(L),L}finally{rY(Z,"mcp.find_connection"),D.end()}}),!G)throw Error("Connection not found");let J=G;if(J.organization_id!==Q.organization.id)throw Error("Connection does not belong to the active organization");let W=!1;if(J.status!=="active"){let D=Date.now()-new Date(J.updated_at).getTime();if(J.status==="error"&&!!J.connection_url&&D>=rx0)W=!0;else{if(J.status==="error"&&J.connection_url){let E=rx0-D;Z.header("Retry-After",String(Math.ceil(E/1000)))}throw Error(`Connection inactive: ${J.status}`)}}let K=await PU$(Z.req.raw),{decision:F,listType:H}=zU$(K),N=F==="probe";if(F==="skip-if-list-cached"&&H){let D=Z9();N=D?await D.get(H,X)===null:!0}if(W)N=!0;if(J.connection_url&&N)R60(X),await Q.tracer.startActiveSpan("studio.connection.handshake",{attributes:{"connection.id":X,"connection.url":J.connection_url}},async(D)=>{KJ(Z,"mcp.client_handshake");try{if(await N5(J,Q,!1),I60(X),br0().recordSuccess(X),W)await Q.storage.connections.update(X,{status:"active"}),console.info("[proxy] auto-recovered connection after successful re-probe",{connectionId:X,org:Q.organization?.slug});D.setStatus({code:HD0.OK})}catch(L){throw D.setStatus({code:HD0.ERROR,message:L.message}),D.recordException(L),L}finally{rY(Z,"mcp.client_handshake"),D.end()}});KJ(Z,"mcp.create_server");let U=y50(J,Q,!1);rY(Z,"mcp.create_server");let O=new XQ({enableJsonResponse:Z.req.raw.headers.get("Accept")?.includes("application/json")??!1});KJ(Z,"mcp.server_connect"),await U.connect(O),rY(Z,"mcp.server_connect"),KJ(Z,"mcp.handle_request");let B=await FJ(U,O,Z.req.raw,`mcp:${X}`);return rY(Z,"mcp.handle_request"),B}catch(J){if(J instanceof Xx)throw J;if(G??=await Q.storage.connections.findById(X,Q.organization?.id),G?.connection_url){let W=await yr0({error:J,reqUrl:new URL(Z.req.raw.url),connectionId:X,connectionUrl:G.connection_url,headers:{},orgSlug:Q.organization?.slug});if(W)return W;q60(X);let{shouldDisable:K}=await br0().recordFailure(X);if(K&&G.status==="active")await Q.storage.connections.update(X,{status:"error"}),console.warn("[proxy] auto-disabled connection after sustained failures",{connectionId:X,org:Q.organization?.slug,error:J.message})}throw J}}catch(J){return TU$(J,Z)}}),$.all("/:connectionId/call-tool/:toolName",async(Z)=>{let X=Z.req.param("connectionId"),Q=Z.req.param("toolName"),Y=Z.get("studioContext"),G=null;try{if(G=await Y.storage.connections.findById(X,Y.organization?.id),!G)return Z.json({error:"Connection not found"},404);let W=await(await N5(G,Y,!1)).callTool({name:Q,arguments:await Z.req.json()});if(W.isError)return new Response(JSON.stringify(W.content),{headers:{"Content-Type":"application/json"},status:500});return new Response(JSON.stringify(W.structuredContent??W.content),{headers:{"Content-Type":"application/json"}})}catch(J){if(G??=await Y.storage.connections.findById(X,Y.organization?.id),G?.connection_url){let W=await yr0({error:J,reqUrl:new URL(Z.req.raw.url),connectionId:X,connectionUrl:G.connection_url,headers:{},orgSlug:Y.organization?.slug});if(W)return W}return TU$(J,Z)}}),$};var UD0=w(()=>{UH();zC();D8();Cr0();_O();my();dn();vY();wi();wU$();Kh0();xr0();AU$();FD0();Uw0();O8();hr0()});async function bB($,Z,X,Q){if(Z.type!=="event"||!Z.connection_id)return{success:!0};let Y=await $.storage.connections.findById(Z.connection_id);if(!Y)return{success:!0};let G=$.organization?.id,J=$.organization?.slug;try{let W=await N5(Y,$,!0),K=Oc0.forClient(gr0(W)),F,H,N;if(X&&Q&&G){let E=await Q.generateTokenPair();H=E.plaintext,N=E.hash,F=J?`${$.baseUrl}/api/${J}/trigger-callback`:`${$.baseUrl}/api/trigger-callback`}let U=5000,O=!1,B=new Promise((E,j)=>setTimeout(()=>{O=!0,j(Error("TRIGGER_CONFIGURE timeout"))},U)),D;try{D=await Promise.race([K.TRIGGER_CONFIGURE({type:Z.event_type,params:JSON.parse(Z.params??"{}"),enabled:X,callbackUrl:F,callbackToken:H}),B])}catch(E){if(O&&X&&Q&&G&&N)await Q.persistTokenHash(G,Z.connection_id,N);return console.error(`[configureTriggerOnMcp] TRIGGER_CONFIGURE threw on connection=${Z.connection_id} type=${Z.event_type}:`,E),{success:!1,error:String(E)}}let L=D;if(!L||L.success!==!0)return console.error(`[configureTriggerOnMcp] TRIGGER_CONFIGURE did not return success=true on connection=${Z.connection_id} type=${Z.event_type}. Raw payload:`,JSON.stringify(D)),{success:!1,error:`TRIGGER_CONFIGURE did not return success=true (got ${JSON.stringify(D)})`};try{if(X&&Q&&G&&N)await Q.persistTokenHash(G,Z.connection_id,N);if(!X&&Q&&G)await Q.deleteByConnection(Z.connection_id,G)}catch(E){console.error("[configureTriggerOnMcp] Token persistence failed after successful TRIGGER_CONFIGURE:",E)}return{success:!0}}catch(W){return{success:!1,error:String(W)}}}var mn=w(()=>{UH();UD0();Bc0()});import{z as n6}from"zod";var ur0;var RU$=w(()=>{jC();S0();hX();mn();ur0=c({name:"AUTOMATION_UPDATE",description:"Update an automation's config. Toggling active state reconfigures event triggers on MCPs.",annotations:{title:"Update Automation",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:n6.object({id:n6.string(),name:n6.string().min(1).max(255).optional(),active:n6.boolean().optional(),messages:n6.union([n6.string(),n6.array(n6.looseObject({id:n6.string().optional(),role:n6.enum(["user","assistant","system"]),parts:n6.array(n6.record(n6.string(),n6.unknown())),metadata:n6.unknown().optional()}))]).optional(),models:n6.object({tier:DO,modelId:n6.string().optional(),credentialId:n6.string().optional()}).loose().optional(),tools:n6.array(n6.string()).nullable().optional(),maxAgentSteps:n6.number().int().min(1).max(100).nullable().optional(),temperature:n6.number().optional()}),outputSchema:n6.object({id:n6.string(),name:n6.string(),active:n6.boolean(),updated_at:n6.string()}),handler:async($,Z)=>{r(Z);let X=t(Z);await Z.access.check();let Q=await Z.storage.automations.findById($.id,X.id);if(!Q)throw Error("Automation not found");let Y={};if($.name!==void 0)Y.name=$.name;if($.active!==void 0)Y.active=$.active;if($.messages!==void 0){let J=ew0($.messages);Y.messages=JSON.stringify(J)}if($.models!==void 0)Y.models=JSON.stringify($.models);if($.tools!==void 0)Y.tools=$.tools===null?null:JSON.stringify($.tools);if($.temperature!==void 0)Y.temperature=$.temperature;if($.maxAgentSteps!==void 0)Y.max_agent_steps=$.maxAgentSteps;let G=await Z.storage.automations.update($.id,X.id,Y);if($.active!==void 0&&$.active!==Q.active){let J=await Z.storage.automations.listTriggers(G.id),W=J.filter((K)=>K.type==="event");await Promise.allSettled(W.map(async(K)=>{let F=await bB(Z,K,$.active);if(!F.success)console.warn(`Failed to configure trigger ${K.id}: ${F.error}`)})),await GU$(J,$.active)}return{id:G.id,name:G.name,active:G.active,updated_at:G.updated_at}}})});import{z as OD0}from"zod";var cr0;var IU$=w(()=>{jC();k4();S0();mn();cr0=c({name:"AUTOMATION_DELETE",description:"Permanently delete an automation. Disables all event triggers on connected MCPs first.",annotations:{title:"Delete Automation",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!1},inputSchema:OD0.object({id:OD0.string()}),outputSchema:OD0.object({success:OD0.boolean()}),handler:async($,Z)=>{r(Z);let X=t(Z);if(await Z.access.check(),!await Z.storage.automations.findById($.id,X.id))throw Error("Automation not found");let Y=await Z.storage.automations.listTriggers($.id),G=Y.filter((K)=>K.type==="event");await Promise.allSettled(G.map(async(K)=>{let F=await bB(Z,K,!1);if(!F.success)console.warn(`Failed to disable trigger ${K.id}: ${F.error}`)}));let{success:J}=await Z.storage.automations.delete($.id,X.id);await JU$(Y);let W=G1(Z);if(W)y1.capture({distinctId:W,event:"automation_deleted",groups:{organization:X.id},properties:{organization_id:X.id,automation_id:$.id,trigger_count:Y.length}});return{success:J}}})});function py($){return`webhook_${$}`}function BD0($,Z,X){if(!Z)throw Error("Cannot build webhook URL: organization slug missing from request context");return`${$}/api/${Z}/webhooks/${X}`}import{z as w7}from"zod";var qU$=300000,Rj4=10,lr0;var MU$=w(()=>{zr0();jC();jr0();S0();mn();lr0=c({name:"AUTOMATION_TRIGGER_ADD",description:"Add a cron, event, or webhook trigger to an automation. For webhook triggers the response includes a one-time URL + secret token.",annotations:{title:"Add Trigger",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!1},inputSchema:w7.object({automation_id:w7.string(),type:w7.enum(["cron","event","webhook"]),cron_expression:w7.string().optional(),connection_id:w7.string().optional(),event_type:w7.string().optional(),params:w7.record(w7.string(),w7.string()).optional()}),outputSchema:w7.object({id:w7.string(),automation_id:w7.string(),type:w7.enum(["cron","event","webhook"]),created_at:w7.string(),webhook:w7.object({url:w7.string(),token:w7.string()}).nullable().optional()}),handler:async($,Z)=>{r(Z);let X=t(Z);await Z.access.check();let Q=await Z.storage.automations.findById($.automation_id,X.id);if(!Q)throw Error("Automation not found");if($.type==="cron"){if(!$.cron_expression)throw Error("cron_expression is required for cron triggers");let K=new ZD0($.cron_expression,{timezone:"UTC"}).nextRuns(Rj4);if(K.length===0)throw Error("Cron expression has no future runs");let F=1/0;for(let H=1;H<K.length;H++){let N=K[H].getTime()-K[H-1].getTime();if(N<F)F=N}if(K.length>=2&&Number.isFinite(F)&&F<qU$){let H=qU$/1000;throw Error(`Cron fires too frequently \u2014 minimum interval is ${H}s between runs (observed ${F/1000}s)`)}}if($.type==="event"){if(!$.connection_id)throw Error("connection_id is required for event triggers");if(!$.event_type)throw Error("event_type is required for event triggers");if(!await Z.storage.connections.findById($.connection_id,X.id))throw Error("Connection not found");let K={id:"",automation_id:$.automation_id,type:"event",cron_expression:null,connection_id:$.connection_id,event_type:$.event_type,params:$.params?JSON.stringify($.params):null,last_run_at:null,next_run_at:null,api_key_id:null,created_at:""},F=await bB(Z,K,!0,Z.storage.triggerCallbackTokens);if(!F.success)throw Error(`Failed to configure trigger on connection: ${F.error}`)}let Y=$.type==="cron"&&$.cron_expression?XD0($.cron_expression,new Date):null,G=await Z.storage.automations.addTrigger({automation_id:$.automation_id,type:$.type,cron_expression:$.type==="cron"?$.cron_expression:null,connection_id:$.type==="event"?$.connection_id:null,event_type:$.type==="event"?$.event_type:null,params:$.params?JSON.stringify($.params):null,next_run_at:Y?.toISOString()??null}),J=null;if($.type==="webhook")try{let W=await Z.boundAuth.apiKey.create({name:`webhook:${Q.name}:${G.id.slice(0,8)}`,permissions:{[py(G.id)]:["FIRE"]},metadata:{kind:"webhook_trigger",automation_id:Q.id,trigger_id:G.id}});await Z.storage.automations.setTriggerApiKeyId(G.id,W.id),J={url:BD0(Z.baseUrl,X.slug,G.id),token:W.key}}catch(W){await Z.storage.automations.removeTrigger(G.id,G.automation_id);let K=W instanceof Error?W.message:String(W);throw Error(`Failed to mint webhook token: ${K}`)}return await YD0(G,Q),{id:G.id,automation_id:G.automation_id,type:G.type,created_at:G.created_at,webhook:J}}})});import{z as wD0}from"zod";var dr0;var kU$=w(()=>{jC();S0();mn();dr0=c({name:"AUTOMATION_TRIGGER_REMOVE",description:"Remove a trigger from an automation. Disables associated event listeners on MCPs.",annotations:{title:"Remove Trigger",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!1},inputSchema:wD0.object({trigger_id:wD0.string()}),outputSchema:wD0.object({success:wD0.boolean()}),handler:async($,Z)=>{r(Z);let X=t(Z);await Z.access.check();let Q=await Z.storage.automations.findTriggerById($.trigger_id);if(!Q)throw Error("Trigger not found");if(!await Z.storage.automations.findById(Q.automation_id,X.id))throw Error("Automation not found");if(Q.type==="event"){let J=await bB(Z,Q,!1,Z.storage.triggerCallbackTokens);if(!J.success)console.warn(`Failed to disable trigger ${Q.id}: ${J.error}`)}let{success:G}=await Z.storage.automations.removeTrigger(Q.id,Q.automation_id);if(Q.type==="cron")await kr0(Q.id);if(Q.type==="webhook"&&Q.api_key_id)try{await Z.boundAuth.apiKey.delete(Q.api_key_id)}catch(J){console.warn(`[trigger-remove] failed to delete api key ${Q.api_key_id} for trigger ${Q.id}:`,J instanceof Error?J.message:J)}return{success:G}}})});import{z as ny}from"zod";var mr0;var VU$=w(()=>{S0();mr0=c({name:"AUTOMATION_TRIGGER_ROTATE_TOKEN",description:"Rotate the secret token for a webhook automation trigger. Returns a new token; the old token is revoked.",annotations:{title:"Rotate Webhook Token",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!1},inputSchema:ny.object({trigger_id:ny.string()}),outputSchema:ny.object({trigger_id:ny.string(),url:ny.string(),token:ny.string()}),handler:async($,Z)=>{r(Z);let X=t(Z);await Z.access.check();let Q=await Z.storage.automations.findTriggerById($.trigger_id);if(!Q)throw Error("Trigger not found");if(Q.type!=="webhook")throw Error("Trigger is not a webhook trigger");let Y=await Z.storage.automations.findById(Q.automation_id,X.id);if(!Y)throw Error("Automation not found");let G=Q.api_key_id,J=await Z.boundAuth.apiKey.create({name:`webhook:${Y.name}:${Q.id.slice(0,8)}`,permissions:{[py(Q.id)]:["FIRE"]},metadata:{kind:"webhook_trigger",automation_id:Y.id,trigger_id:Q.id}});if(await Z.storage.automations.setTriggerApiKeyId(Q.id,J.id),G)try{await Z.boundAuth.apiKey.delete(G)}catch(W){console.warn(`[trigger-rotate] failed to delete old key ${G} for trigger ${Q.id}:`,W instanceof Error?W.message:W)}return{trigger_id:Q.id,url:BD0(Z.baseUrl,X.slug,Q.id),token:J.key}}})});import{z as ty}from"zod";var ir0;var SU$=w(()=>{k4();S0();ir0=c({name:"AUTOMATION_RUN",description:"Manually trigger an automation run. Bypasses configured triggers.",annotations:{title:"Run Automation",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!1},inputSchema:ty.object({id:ty.string()}),outputSchema:ty.object({threadId:ty.string().optional(),error:ty.string().optional(),skipped:ty.string().optional()}),handler:async($,Z)=>{r(Z);let X=t(Z);if(await Z.access.check(),!Z.automationRunner)throw Error("Automation runner not available");let Q=G1(Z);if(!Q)throw Error("User ID not available");let Y=await Z.automationRunner($.id,X.id,Q);if(y1.capture({distinctId:Q,event:"automation_run",groups:{organization:X.id},properties:{organization_id:X.id,automation_id:$.id,thread_id:"taskId"in Y?Y.taskId:void 0,status:"skipped"in Y?"skipped":("error"in Y)?"error":"started",skip_reason:"skipped"in Y?Y.skipped:void 0,error_message:"error"in Y?Y.error:void 0}}),"skipped"in Y)return{skipped:Y.skipped};if("error"in Y)return{threadId:Y.taskId,error:Y.error};return{threadId:Y.taskId}}})});import{z as uZ}from"zod";var Ij4=500,pr0;var CU$=w(()=>{R6();S0();pr0=c({name:"AUTOMATION_RUN_STATS",description:"Aggregate run counts (by status) and LLM token/cost totals for a single automation.",annotations:{title:"Automation Run Stats",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:uZ.object({automation_id:uZ.string(),startDate:uZ.string().datetime().optional().describe("Filter runs at or after this ISO timestamp"),endDate:uZ.string().datetime().optional().describe("Filter runs at or before this ISO timestamp")}),outputSchema:uZ.object({runs:uZ.object({total:uZ.number(),completed:uZ.number(),failed:uZ.number(),inProgress:uZ.number()}),usage:uZ.object({calls:uZ.number(),inputTokens:uZ.number(),outputTokens:uZ.number(),totalTokens:uZ.number(),costUsd:uZ.number(),sampledRuns:uZ.number(),truncated:uZ.boolean()})}),handler:async($,Z)=>{r(Z);let X=t(Z);if(await Z.access.check(),await WQ(),!await Z.storage.automations.findById($.automation_id,X.id))throw Error("Automation not found");let Y=await Z.storage.automations.getRunStats($.automation_id,X.id,{startDate:$.startDate,endDate:$.endDate}),G=await Z.storage.automations.listRunThreadIds($.automation_id,X.id,{startDate:$.startDate,endDate:$.endDate,limit:Ij4}),J={calls:0,inputTokens:0,outputTokens:0,totalTokens:0,costUsd:0,sampledRuns:G.length,truncated:Y.total>G.length};if(G.length>0){let W=await Z.storage.monitoring.queryThreadUsage({organizationId:X.id,connectionId:"decopilot",threadIds:G,startDate:$.startDate?new Date($.startDate):void 0,endDate:$.endDate?new Date($.endDate):void 0});for(let K of W)J.calls+=K.calls,J.inputTokens+=K.inputTokens,J.outputTokens+=K.outputTokens,J.totalTokens+=K.totalTokens,J.costUsd+=K.costUsd}return{runs:Y,usage:J}}})});var _U$=w(()=>{pN$();nN$();tN$();RU$();IU$();MU$();kU$();VU$();SU$();CU$()});import{z as xB}from"zod";var Mj4,kj4,nr0;var vU$=w(()=>{S0();Mj4=xB.object({id:xB.string().min(1)}),kj4=xB.object({user:xB.object({id:xB.string(),name:xB.string(),email:xB.string(),image:xB.string().nullable()}).nullable()}),nr0=c({name:"USER_GET",description:"Get a user's profile by ID. Only returns users who share an organization with the caller.",annotations:{title:"Get User",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:Mj4,outputSchema:kj4,handler:async($,Z)=>{await Z.access.check(),r(Z);let X=G1(Z);if(!X)throw Error("Authentication required");let Q=await Z.storage.users.findById($.id,X);if(!Q)return{user:null};return{user:{id:Q.id,name:Q.name,email:Q.email,image:Q.image??null}}}})});import{z as Vj4}from"zod";var Sj4,tr0;var fU$=w(()=>{S0();hX();Sj4={tiers:{}},tr0=c({name:"USER_MODEL_PREFERENCES_GET",description:"Get the calling user's personal chat tier \u2192 model overrides for the current organization. Absent tiers fall back to the org default.",annotations:{title:"Get User Model Preferences",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:Vj4.object({}),outputSchema:rm,handler:async($,Z)=>{r(Z),await Z.access.check();let X=t(Z),Q=Z.auth?.user?.id;if(!Q)throw Error("No authenticated user in context");return await Z.storage.userModelPreferences.get(Q,X.id)??Sj4}})});function Cj4($,Z,X){let Q={};for(let Y of DO.options){let G=$[Y];if(!G||d3(X,G.keyId,G.modelId)){Q[Y]=G;continue}let J=Z?.[Y];if(!(J?.keyId===G.keyId&&J?.modelId===G.modelId))throw Error("Model not allowed for your role");Q[Y]=null}return Q}var or0;var bU$=w(()=>{S0();hX();fy();or0=c({name:"USER_MODEL_PREFERENCES_UPDATE",description:"Set the calling user's personal chat tier \u2192 model overrides for the current organization. Only affects this user's chats; the org default and every non-chat path (automations, background tools) are unchanged. Omit a tier (or set it null) to fall back to the org default. Models the caller's role is not allowed to use are rejected.",annotations:{title:"Update User Model Preferences",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:rm,outputSchema:rm,handler:async($,Z)=>{r(Z),await Z.access.check();let X=t(Z),Q=Z.auth?.user?.id;if(!Q)throw Error("No authenticated user in context");let[Y,G]=await Promise.all([m3(Z.db,X.id,X.role??Z.auth.user?.role),Z.storage.userModelPreferences.get(Q,X.id)]);return await Z.storage.userModelPreferences.upsert(Q,X.id,{tiers:Cj4($.tiers,G?.tiers,Y)})}})});var xU$=w(()=>{vU$();fU$();bU$()});function o0($,Z,X,Q,Y){if(Q==="m")throw TypeError("Private method is not writable");if(Q==="a"&&!Y)throw TypeError("Private accessor was defined without a setter");if(typeof Z==="function"?$!==Z||!Y:!Z.has($))throw TypeError("Cannot write private member to an object whose class did not declare it");return Q==="a"?Y.call($,X):Y?Y.value=X:Z.set($,X),X}function d($,Z,X,Q){if(X==="a"&&!Q)throw TypeError("Private accessor was defined without a getter");if(typeof Z==="function"?$!==Z||!Q:!Z.has($))throw TypeError("Cannot read private member from an object whose class did not declare it");return X==="m"?Q:X==="a"?Q.call($):Q?Q.value:Z.get($)}var tQ=()=>{};var oy=function(){let{crypto:$}=globalThis;if($?.randomUUID)return oy=$.randomUUID.bind($),$.randomUUID();let Z=new Uint8Array(1),X=$?()=>$.getRandomValues(Z)[0]:()=>Math.random()*255&255;return"10000000-1000-4000-8000-100000000000".replace(/[018]/g,(Q)=>(+Q^X()&15>>+Q/4).toString(16))};function HJ($){return typeof $==="object"&&$!==null&&(("name"in $)&&$.name==="AbortError"||("message"in $)&&String($.message).includes("FetchRequestCanceledException"))}var PC=($)=>{if($ instanceof Error)return $;if(typeof $==="object"&&$!==null){try{if(Object.prototype.toString.call($)==="[object Error]"){let Z=Error($.message,$.cause?{cause:$.cause}:{});if($.stack)Z.stack=$.stack;if($.cause&&!Z.cause)Z.cause=$.cause;if($.name)Z.name=$.name;return Z}}catch{}try{return Error(JSON.stringify($))}catch{}}return Error($)};var F1,K9,KX,sH,pn,DD0,nn,tn,on,rn,an,sn,en,$t;var E5=w(()=>{F1=class F1 extends Error{};K9=class K9 extends F1{constructor($,Z,X,Q,Y){super(`${K9.makeMessage($,Z,X)}`);this.status=$,this.headers=Q,this.requestID=Q?.get("request-id"),this.error=Z,this.type=Y??null}static makeMessage($,Z,X){let Q=Z?.message?typeof Z.message==="string"?Z.message:JSON.stringify(Z.message):Z?JSON.stringify(Z):X;if($&&Q)return`${$} ${Q}`;if($)return`${$} status code (no body)`;if(Q)return Q;return"(no status code or body)"}static generate($,Z,X,Q){if(!$||!Q)return new sH({message:X,cause:PC(Z)});let Y=Z,G=Y?.error?.type;if($===400)return new nn($,Y,X,Q,G);if($===401)return new tn($,Y,X,Q,G);if($===403)return new on($,Y,X,Q,G);if($===404)return new rn($,Y,X,Q,G);if($===409)return new an($,Y,X,Q,G);if($===422)return new sn($,Y,X,Q,G);if($===429)return new en($,Y,X,Q,G);if($>=500)return new $t($,Y,X,Q,G);return new K9($,Y,X,Q,G)}};KX=class KX extends K9{constructor({message:$}={}){super(void 0,void 0,$||"Request was aborted.",void 0)}};sH=class sH extends K9{constructor({message:$,cause:Z}){super(void 0,void 0,$||"Connection error.",void 0);if(Z)this.cause=Z}};pn=class pn extends sH{constructor({message:$}={}){super({message:$??"Request timed out."})}};DD0=class DD0 extends F1{constructor($,{cause:Z}={}){super($??"Retryable error.");if(Z!==void 0)this.cause=Z}};nn=class nn extends K9{};tn=class tn extends K9{};on=class on extends K9{};rn=class rn extends K9{};an=class an extends K9{};sn=class sn extends K9{};en=class en extends K9{};$t=class $t extends K9{}});function LD0($){if(typeof $!=="object")return{};return $??{}}function ar0($){if(!$)return!0;for(let Z in $)return!1;return!0}function gU$($,Z){return Object.prototype.hasOwnProperty.call($,Z)}var fj4,yU$=($)=>{return fj4.test($)},FX=($)=>(FX=Array.isArray,FX($)),rr0,hU$=($,Z)=>{if(typeof Z!=="number"||!Number.isInteger(Z))throw new F1(`${$} must be an integer`);if(Z<0)throw new F1(`${$} must be a positive integer`);return Z},Zt=($)=>{try{return JSON.parse($)}catch(Z){return}};var i3=w(()=>{E5();fj4=/^[a-z][a-z0-9+.-]*:/i,rr0=FX});var p3=($,Z)=>new Promise((X)=>{if(Z?.aborted)return X();let Q=()=>{clearTimeout(Y),X()},Y=setTimeout(()=>{Z?.removeEventListener("abort",Q),X()},$);Z?.addEventListener("abort",Q,{once:!0})});var NJ="0.105.0";function bj4(){if(typeof Deno<"u"&&Deno.build!=null)return"deno";if(typeof EdgeRuntime<"u")return"edge";if(Object.prototype.toString.call(typeof globalThis.process<"u"?globalThis.process:0)==="[object process]")return"node";return"unknown"}function yj4(){if(typeof navigator>"u"||!navigator)return null;let $=[{key:"edge",pattern:/Edge(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/MSIE(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/Trident(?:.*rv\:(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"chrome",pattern:/Chrome(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"firefox",pattern:/Firefox(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"safari",pattern:/(?:Version\W+(\d+)\.(\d+)(?:\.(\d+))?)?(?:\W+Mobile\S*)?\W+Safari/}];for(let{key:Z,pattern:X}of $){let Q=X.exec(navigator.userAgent);if(Q){let Y=Q[1]||0,G=Q[2]||0,J=Q[3]||0;return{browser:Z,version:`${Y}.${G}.${J}`}}}return null}var dU$=()=>{return typeof window<"u"&&typeof window.document<"u"&&typeof navigator<"u"},xj4=()=>{let $=bj4();if($==="deno")return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":NJ,"X-Stainless-OS":cU$(Deno.build.os),"X-Stainless-Arch":uU$(Deno.build.arch),"X-Stainless-Runtime":"deno","X-Stainless-Runtime-Version":typeof Deno.version==="string"?Deno.version:Deno.version?.deno??"unknown"};if(typeof EdgeRuntime<"u")return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":NJ,"X-Stainless-OS":"Unknown","X-Stainless-Arch":`other:${EdgeRuntime}`,"X-Stainless-Runtime":"edge","X-Stainless-Runtime-Version":globalThis.process.version};if($==="node")return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":NJ,"X-Stainless-OS":cU$(globalThis.process.platform??"unknown"),"X-Stainless-Arch":uU$(globalThis.process.arch??"unknown"),"X-Stainless-Runtime":"node","X-Stainless-Runtime-Version":globalThis.process.version??"unknown"};let Z=yj4();if(Z)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":NJ,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":`browser:${Z.browser}`,"X-Stainless-Runtime-Version":Z.version};return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":NJ,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":"unknown","X-Stainless-Runtime-Version":"unknown"}},uU$=($)=>{if($==="x32")return"x32";if($==="x86_64"||$==="x64")return"x64";if($==="arm")return"arm";if($==="aarch64"||$==="arm64")return"arm64";if($)return`other:${$}`;return"unknown"},cU$=($)=>{if($=$.toLowerCase(),$.includes("ios"))return"iOS";if($==="android")return"Android";if($==="darwin")return"MacOS";if($==="win32")return"Windows";if($==="freebsd")return"FreeBSD";if($==="openbsd")return"OpenBSD";if($==="linux")return"Linux";if($)return`Other:${$}`;return"Unknown"},lU$,Xt=()=>{return lU$??(lU$=xj4())};var ED0=()=>{};function mU$(){if(typeof fetch<"u")return fetch;throw Error("`fetch` is not defined as a global; Either pass `fetch` to the client, `new Anthropic({ fetch })` or polyfill the global, `globalThis.fetch = fetch`")}function sr0(...$){let Z=globalThis.ReadableStream;if(typeof Z>"u")throw Error("`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`");return new Z(...$)}function jD0($){let Z=Symbol.asyncIterator in $?$[Symbol.asyncIterator]():$[Symbol.iterator]();return sr0({start(){},async pull(X){let{done:Q,value:Y}=await Z.next();if(Q)X.close();else X.enqueue(Y)},async cancel(){await Z.return?.()}})}function Qt($){if($[Symbol.asyncIterator])return $;let Z=$.getReader();return{async next(){try{let X=await Z.read();if(X?.done)Z.releaseLock();return X}catch(X){throw Z.releaseLock(),X}},async return(){let X=Z.cancel();return Z.releaseLock(),await X,{done:!0,value:void 0}},[Symbol.asyncIterator](){return this}}}async function iU$($){if($===null||typeof $!=="object")return;if($[Symbol.asyncIterator]){await $[Symbol.asyncIterator]().return?.();return}let Z=$.getReader(),X=Z.cancel();Z.releaseLock(),await X}var pU$=({headers:$,body:Z})=>{return{bodyHeaders:{"content-type":"application/json"},body:JSON.stringify(Z)}};var er0="RFC3986",$a0=($)=>String($),Za0,nU$="RFC1738";var Xa0=w(()=>{Za0={RFC1738:($)=>String($).replace(/%20/g,"+"),RFC3986:$a0}});function oU$($){if(!$||typeof $!=="object")return!1;return!!($.constructor&&$.constructor.isBuffer&&$.constructor.isBuffer($))}function Ya0($,Z){if(FX($)){let X=[];for(let Q=0;Q<$.length;Q+=1)X.push(Z($[Q]));return X}return Z($)}var zD0=($,Z)=>(zD0=Object.hasOwn??Function.prototype.call.bind(Object.prototype.hasOwnProperty),zD0($,Z)),fK,Qa0=1024,tU$=($,Z,X,Q,Y)=>{if($.length===0)return $;let G=$;if(typeof $==="symbol")G=Symbol.prototype.toString.call($);else if(typeof $!=="string")G=String($);if(X==="iso-8859-1")return escape(G).replace(/%u[0-9a-f]{4}/gi,function(W){return"%26%23"+parseInt(W.slice(2),16)+"%3B"});let J="";for(let W=0;W<G.length;W+=Qa0){let K=G.length>=Qa0?G.slice(W,W+Qa0):G,F=[];for(let H=0;H<K.length;++H){let N=K.charCodeAt(H);if(N===45||N===46||N===95||N===126||N>=48&&N<=57||N>=65&&N<=90||N>=97&&N<=122||Y===nU$&&(N===40||N===41)){F[F.length]=K.charAt(H);continue}if(N<128){F[F.length]=fK[N];continue}if(N<2048){F[F.length]=fK[192|N>>6]+fK[128|N&63];continue}if(N<55296||N>=57344){F[F.length]=fK[224|N>>12]+fK[128|N>>6&63]+fK[128|N&63];continue}H+=1,N=65536+((N&1023)<<10|K.charCodeAt(H)&1023),F[F.length]=fK[240|N>>18]+fK[128|N>>12&63]+fK[128|N>>6&63]+fK[128|N&63]}J+=F.join("")}return J};var rU$=w(()=>{Xa0();i3();fK=(()=>{let $=[];for(let Z=0;Z<256;++Z)$.push("%"+((Z<16?"0":"")+Z.toString(16)).toUpperCase());return $})()});function uj4($){return typeof $==="string"||typeof $==="number"||typeof $==="boolean"||typeof $==="symbol"||typeof $==="bigint"}function $O$($,Z,X,Q,Y,G,J,W,K,F,H,N,U,O,B,D,L,E){let j=$,z=E,A=0,P=!1;while((z=z.get(Ga0))!==void 0&&!P){let l=z.get($);if(A+=1,typeof l<"u")if(l===A)throw RangeError("Cyclic object value");else P=!0;if(typeof z.get(Ga0)>"u")A=0}if(typeof F==="function")j=F(Z,j);else if(j instanceof Date)j=U?.(j);else if(X==="comma"&&FX(j))j=Ya0(j,function(l){if(l instanceof Date)return U?.(l);return l});if(j===null){if(G)return K&&!D?K(Z,NZ.encoder,L,"key",O):Z;j=""}if(uj4(j)||oU$(j)){if(K){let l=D?Z:K(Z,NZ.encoder,L,"key",O);return[B?.(l)+"="+B?.(K(j,NZ.encoder,L,"value",O))]}return[B?.(Z)+"="+B?.(String(j))]}let I=[];if(typeof j>"u")return I;let k;if(X==="comma"&&FX(j)){if(D&&K)j=Ya0(j,K);k=[{value:j.length>0?j.join(",")||null:void 0}]}else if(FX(F))k=F;else{let l=Object.keys(j);k=H?l.sort(H):l}let q=W?String(Z).replace(/\./g,"%2E"):String(Z),C=Q&&FX(j)&&j.length===1?q+"[]":q;if(Y&&FX(j)&&j.length===0)return C+"[]";for(let l=0;l<k.length;++l){let f=k[l],x=typeof f==="object"&&typeof f.value<"u"?f.value:j[f];if(J&&x===null)continue;let n=N&&W?f.replace(/\./g,"%2E"):f,u=FX(j)?typeof X==="function"?X(C,n):C:C+(N?"."+n:"["+n+"]");E.set($,A);let a=new WeakMap;a.set(Ga0,E),eU$(I,$O$(x,u,X,Q,Y,G,J,W,X==="comma"&&D&&FX(j)?null:K,F,H,N,U,O,B,D,L,a))}return I}function cj4($=NZ){if(typeof $.allowEmptyArrays<"u"&&typeof $.allowEmptyArrays!=="boolean")throw TypeError("`allowEmptyArrays` option can only be `true` or `false`, when provided");if(typeof $.encodeDotInKeys<"u"&&typeof $.encodeDotInKeys!=="boolean")throw TypeError("`encodeDotInKeys` option can only be `true` or `false`, when provided");if($.encoder!==null&&typeof $.encoder<"u"&&typeof $.encoder!=="function")throw TypeError("Encoder has to be a function.");let Z=$.charset||NZ.charset;if(typeof $.charset<"u"&&$.charset!=="utf-8"&&$.charset!=="iso-8859-1")throw TypeError("The charset option must be either utf-8, iso-8859-1, or undefined");let X=er0;if(typeof $.format<"u"){if(!zD0(Za0,$.format))throw TypeError("Unknown format option provided.");X=$.format}let Q=Za0[X],Y=NZ.filter;if(typeof $.filter==="function"||FX($.filter))Y=$.filter;let G;if($.arrayFormat&&$.arrayFormat in sU$)G=$.arrayFormat;else if("indices"in $)G=$.indices?"indices":"repeat";else G=NZ.arrayFormat;if("commaRoundTrip"in $&&typeof $.commaRoundTrip!=="boolean")throw TypeError("`commaRoundTrip` must be a boolean, or absent");let J=typeof $.allowDots>"u"?!!$.encodeDotInKeys===!0?!0:NZ.allowDots:!!$.allowDots;return{addQueryPrefix:typeof $.addQueryPrefix==="boolean"?$.addQueryPrefix:NZ.addQueryPrefix,allowDots:J,allowEmptyArrays:typeof $.allowEmptyArrays==="boolean"?!!$.allowEmptyArrays:NZ.allowEmptyArrays,arrayFormat:G,charset:Z,charsetSentinel:typeof $.charsetSentinel==="boolean"?$.charsetSentinel:NZ.charsetSentinel,commaRoundTrip:!!$.commaRoundTrip,delimiter:typeof $.delimiter>"u"?NZ.delimiter:$.delimiter,encode:typeof $.encode==="boolean"?$.encode:NZ.encode,encodeDotInKeys:typeof $.encodeDotInKeys==="boolean"?$.encodeDotInKeys:NZ.encodeDotInKeys,encoder:typeof $.encoder==="function"?$.encoder:NZ.encoder,encodeValuesOnly:typeof $.encodeValuesOnly==="boolean"?$.encodeValuesOnly:NZ.encodeValuesOnly,filter:Y,format:X,formatter:Q,serializeDate:typeof $.serializeDate==="function"?$.serializeDate:NZ.serializeDate,skipNulls:typeof $.skipNulls==="boolean"?$.skipNulls:NZ.skipNulls,sort:typeof $.sort==="function"?$.sort:null,strictNullHandling:typeof $.strictNullHandling==="boolean"?$.strictNullHandling:NZ.strictNullHandling}}function ZO$($,Z={}){let X=$,Q=cj4(Z),Y,G;if(typeof Q.filter==="function")G=Q.filter,X=G("",X);else if(FX(Q.filter))G=Q.filter,Y=G;let J=[];if(typeof X!=="object"||X===null)return"";let W=sU$[Q.arrayFormat],K=W==="comma"&&Q.commaRoundTrip;if(!Y)Y=Object.keys(X);if(Q.sort)Y.sort(Q.sort);let F=new WeakMap;for(let U=0;U<Y.length;++U){let O=Y[U];if(Q.skipNulls&&X[O]===null)continue;eU$(J,$O$(X[O],O,W,K,Q.allowEmptyArrays,Q.strictNullHandling,Q.skipNulls,Q.encodeDotInKeys,Q.encode?Q.encoder:null,Q.filter,Q.sort,Q.allowDots,Q.serializeDate,Q.format,Q.formatter,Q.encodeValuesOnly,Q.charset,F))}let H=J.join(Q.delimiter),N=Q.addQueryPrefix===!0?"?":"";if(Q.charsetSentinel)if(Q.charset==="iso-8859-1")N+="utf8=%26%2310003%3B&";else N+="utf8=%E2%9C%93&";return H.length>0?N+H:""}var sU$,eU$=function($,Z){Array.prototype.push.apply($,FX(Z)?Z:[Z])},aU$,NZ,Ga0;var XO$=w(()=>{rU$();Xa0();i3();sU$={brackets($){return String($)+"[]"},comma:"comma",indices($,Z){return String($)+"["+Z+"]"},repeat($){return String($)}},NZ={addQueryPrefix:!1,allowDots:!1,allowEmptyArrays:!1,arrayFormat:"indices",charset:"utf-8",charsetSentinel:!1,delimiter:"&",encode:!0,encodeDotInKeys:!1,encoder:tU$,encodeValuesOnly:!1,format:er0,formatter:$a0,indices:!1,serializeDate($){return(aU$??(aU$=Function.prototype.call.bind(Date.prototype.toISOString)))($)},skipNulls:!1,strictNullHandling:!1};Ga0={}});function QO$($){return ZO$($,{arrayFormat:"brackets"})}var Ja0=w(()=>{XO$()});function AD0($){if(!$)return;let Z;try{Z=new URL($)}catch(Q){throw new A6(`Invalid token endpoint base URL "${$}": ${Q}`)}if(Z.protocol==="https:")return;let X=Z.hostname.toLowerCase().replace(/^\[|\]$/g,"");if(Z.protocol==="http:"&&(X==="localhost"||X==="127.0.0.1"||X==="::1"))return;throw new A6(`Refusing to send credential over non-https token endpoint "${$}"`)}async function TD0($,Z){let X=await mj4($),Q;try{Q=JSON.parse(X)}catch{throw new A6(`Token endpoint returned non-JSON response (status ${$.status})`,$.status,oQ(X),Z)}if(!Q.access_token)throw new A6(`Token endpoint response missing access_token: ${JSON.stringify(oQ(Q))}`,$.status,oQ(Q),Z);if(Q.token_type&&Q.token_type.toLowerCase()!=="bearer")throw new A6(`Token endpoint response: unsupported token_type "${Q.token_type}" (want Bearer)`,$.status,oQ(Q),Z);return Q}function oQ($){if($==null)return $;if(typeof $==="string"){let Z;try{Z=JSON.parse($)}catch{if($.length<=Wa0)return $;return $.slice(0,Wa0)+`... <${$.length-Wa0} more chars>`}return JSON.stringify(oQ(Z))}if(typeof $==="object"&&!Array.isArray($)){let Z={};for(let[X,Q]of Object.entries($))if(dj4.has(X))Z[X]=Q;return Z}return null}async function RD0($,Z=(X)=>console.warn(`anthropic-sdk: ${X}`)){if(typeof process>"u"||process.platform==="win32")return;let X=await import("fs"),Q=$,Y;try{Q=await X.promises.realpath($),Y=await X.promises.stat(Q)}catch{return}let G=Y.mode&511;if(G&18)throw new A6(`Credentials file at ${Q} is group/world-writable (mode 0o${G.toString(8)}); this allows other local users to plant tokens. Run \`chmod 600 ${Q}\`.`);if(G&36)throw new A6(`Credentials file at ${Q} is group/world-readable (mode 0o${G.toString(8)}); run \`chmod 600 ${Q}\` before retrying.`);if(typeof process.getuid==="function"&&Y.uid!==process.getuid())Z(`credentials file at ${Q} is owned by uid ${Y.uid} (current process uid ${process.getuid()}); verify this is intentional.`)}async function ID0($,Z){let X=await import("fs"),Y=(await import("path")).dirname($);await X.promises.mkdir(Y,{recursive:!0,mode:448});let G=`${$}.${process.pid}.${Math.random().toString(36).slice(2)}.tmp`;try{let J=await X.promises.open(G,"w",384);try{await J.writeFile(JSON.stringify(Z,null,2)),await J.sync()}finally{await J.close()}await X.promises.rename(G,$)}catch(J){throw await X.promises.unlink(G).catch(()=>{}),J}try{let J=await X.promises.open(Y,"r");try{await J.sync()}finally{await J.close()}}catch{}}async function mj4($){if(!$.body)return"";let Z=$.body.getReader(),X=[],Q=0;for(;;){let{done:G,value:J}=await Z.read();if(G)break;if(Q+J.length>YO$){let W=YO$-Q;if(W>0)X.push(J.subarray(0,W));await Z.cancel();break}X.push(J),Q+=J.length}let Y;if(X.length===1)Y=X[0];else{Y=new Uint8Array(X.reduce((J,W)=>J+W.length,0));let G=0;for(let J of X)Y.set(J,G),G+=J.length}return new TextDecoder("utf-8").decode(Y)}var GO$="urn:ietf:params:oauth:grant-type:jwt-bearer",JO$="refresh_token",PD0="/v1/oauth/token",AC="oauth-2025-04-20",WO$="oidc-federation-2026-04-01",KO$=120,ry=30,FO$=5,YO$=1048576,Wa0=2000,dj4,A6;var ay=w(()=>{E5();dj4=new Set(["error","error_description","error_uri"]);A6=class A6 extends F1{constructor($,Z=null,X=null,Q=null){super($);this.statusCode=Z,this.body=X,this.requestId=Q}}});function n3(){return Math.floor(Date.now()/1000)}class Ka0{constructor($,Z){this.cached=null,this.pendingRefresh=null,this.nextForce=!1,this.lastAdvisoryError=0,this.provider=$,this.onAdvisoryRefreshError=Z}async getToken(){let $=this.nextForce;this.nextForce=!1;let Z=this.cached;if($||Z==null)return(await this.refresh($)).token;if(Z.expiresAt==null)return Z.token;let X=Z.expiresAt-n3();if(X>KO$)return Z.token;if(X>ry)return this.backgroundRefresh(),Z.token;return(await this.refresh()).token}invalidate(){this.cached=null,this.nextForce=!0}refresh($=!1){if(this.pendingRefresh&&!$)return this.pendingRefresh;return this.doRefresh($)}backgroundRefresh(){if(this.pendingRefresh)return;if(n3()-this.lastAdvisoryError<FO$)return;this.doRefresh().catch(($)=>{this.lastAdvisoryError=n3(),this.onAdvisoryRefreshError?.($)})}doRefresh($=!1){return this.pendingRefresh=this.provider($?{forceRefresh:!0}:void 0).then((Z)=>{return this.cached=Z,this.pendingRefresh=null,Z},(Z)=>{throw this.pendingRefresh=null,Z}),this.pendingRefresh}}var HO$=w(()=>{ay()});var a8=($)=>{if(typeof globalThis.process<"u")return globalThis.process.env?.[$]?.trim()||void 0;if(typeof globalThis.Deno<"u")return globalThis.Deno.env?.get?.($)?.trim()||void 0;return};function OO$($){let Z=0;for(let Y of $)Z+=Y.length;let X=new Uint8Array(Z),Q=0;for(let Y of $)X.set(Y,Q),Q+=Y.length;return X}function sy($){let Z;return(NO$??(Z=new globalThis.TextEncoder,NO$=Z.encode.bind(Z)))($)}function Fa0($){let Z;return(UO$??(Z=new globalThis.TextDecoder,UO$=Z.decode.bind(Z)))($)}var NO$,UO$;var BO$=w(()=>{E5()});function Yt(){}function qD0($,Z,X){if(!Z||MD0[$]>MD0[X])return Yt;else return Z[$].bind(Z)}function Na0($,Z){let X=wO$.get($);if(X&&X[0]===Z)return X[1];let Q={error:qD0("error",$,Z),warn:qD0("warn",$,Z),info:qD0("info",$,Z),debug:qD0("debug",$,Z)};return wO$.set($,[Z,Q]),Q}function x4($){let Z=$.logger,X=$.logLevel??"off";if(!Z)return ij4;return Na0(Z,X)}function LO$(){let $=a8("ANTHROPIC_LOG");if(!Ha0||$!==DO$)DO$=$,Ha0=Na0(console,kD0($,"process.env['ANTHROPIC_LOG']",Na0(console,Gt))??Gt);return Ha0}var Gt="warn",MD0,kD0=($,Z,X)=>{if(!$)return;if(gU$(MD0,$))return $;X.warn(`${Z} was set to ${JSON.stringify($)}, expected one of ${JSON.stringify(Object.keys(MD0))}`);return},ij4,wO$,DO$,Ha0,bK=($)=>{if($.options)$.options={...$.options},delete $.options.headers;if($.headers)$.headers=Object.fromEntries(($.headers instanceof Headers?[...$.headers]:Object.entries($.headers)).map(([Z,X])=>[Z,Z.toLowerCase()==="authorization"||Z.toLowerCase()==="api-key"||Z.toLowerCase()==="x-api-key"||Z.toLowerCase()==="cookie"||Z.toLowerCase()==="set-cookie"?"***":X]));if("retryOfRequestLogID"in $){if($.retryOfRequestLogID)$.retryOf=$.retryOfRequestLogID;delete $.retryOfRequestLogID}return $};var xK=w(()=>{i3();MD0={off:0,error:200,warn:300,info:400,debug:500};ij4={error:Yt,warn:Yt,info:Yt,debug:Yt},wO$=new WeakMap});var Ua0=w(()=>{i3();BO$();xK();Ja0()});function EO$($){if(!$)throw Error("profile name is empty");if($==="."||$==="..")throw Error(`profile name "${$}" is not allowed`);if($.includes("/")||$.includes("\\"))throw Error(`profile name "${$}" must not contain path separators`);if(!pj4.test($))throw Error(`profile name "${$}" contains disallowed characters (allowed: letters, digits, '_', '.', '-')`)}var VD0="1.0",pj4,jO$=async($)=>{var Z,X;let Q=await Oa0();if(Q===null)return null;let Y=$??await PO$();if(Y===null)return null;EO$(Y);let G=await import("fs"),W=(await import("path")).join(Q,"configs",`${Y}.json`),K;try{K=await G.promises.readFile(W,"utf-8")}catch(N){if(N?.code!=="ENOENT")throw Error(`failed to read config file ${W}: ${N}`);K=null}if(K===null){let N=a8("ANTHROPIC_ORGANIZATION_ID"),U=a8("ANTHROPIC_IDENTITY_TOKEN_FILE"),O=a8("ANTHROPIC_FEDERATION_RULE_ID");if(O&&N)return{fromFile:!1,config:{organization_id:N,workspace_id:a8("ANTHROPIC_WORKSPACE_ID"),base_url:a8("ANTHROPIC_BASE_URL"),authentication:{type:"oidc_federation",federation_rule_id:O,service_account_id:a8("ANTHROPIC_SERVICE_ACCOUNT_ID"),identity_token:U?{source:"file",path:U}:void 0,scope:a8("ANTHROPIC_SCOPE")}}};return null}let F;try{F=JSON.parse(K)}catch(N){throw Error(`failed to parse config file ${W}: ${N}`)}if(!F.authentication)throw Error(`config file ${W} is missing "authentication"`);let H=F.authentication.type;if(H!=="oidc_federation"&&H!=="user_oauth")throw Error(`authentication.type "${H}" is not a known authentication type`);if(F.organization_id??(F.organization_id=a8("ANTHROPIC_ORGANIZATION_ID")),F.workspace_id??(F.workspace_id=a8("ANTHROPIC_WORKSPACE_ID")),F.base_url??(F.base_url=a8("ANTHROPIC_BASE_URL")),(Z=F.authentication).scope??(Z.scope=a8("ANTHROPIC_SCOPE")),F.authentication.type==="oidc_federation"){if(!F.authentication.identity_token){let N=a8("ANTHROPIC_IDENTITY_TOKEN_FILE");if(N)F.authentication.identity_token={source:"file",path:N}}if(!F.authentication.federation_rule_id)F.authentication.federation_rule_id=a8("ANTHROPIC_FEDERATION_RULE_ID")??"";(X=F.authentication).service_account_id??(X.service_account_id=a8("ANTHROPIC_SERVICE_ACCOUNT_ID"))}return{config:F,fromFile:!0}},zO$=async($,Z)=>{if($?.authentication.credentials_path)return $.authentication.credentials_path;let X=await Oa0();if(!X)return null;let Q=Z??await PO$();if(!Q)return null;return EO$(Q),(await import("path")).join(X,"credentials",`${Q}.json`)},Oa0=async()=>{if(!nj4())return null;let $=await import("path"),Z=a8("ANTHROPIC_CONFIG_DIR");if(Z)return Z;if(Xt()["X-Stainless-OS"]==="Windows"){let G=a8("APPDATA");if(G)return $.join(G,"Anthropic");let J=a8("USERPROFILE");if(J)return $.join(J,"AppData","Roaming","Anthropic");return null}let Q=a8("XDG_CONFIG_HOME");if(Q)return $.join(Q,"anthropic");let Y=a8("HOME");if(Y)return $.join(Y,".config","anthropic");return null},nj4=()=>{let $=Xt()["X-Stainless-Runtime"];return $==="node"||$==="deno"},PO$=async()=>{let $=await Oa0();if(!$)return null;let Z=a8("ANTHROPIC_PROFILE");if(Z)return Z;let X=await import("fs"),Y=(await import("path")).join($,"active_config");try{return(await X.promises.readFile(Y,"utf-8")).trim()||"default"}catch(G){if(G?.code!=="ENOENT")throw Error(`failed to read ${Y}: ${G}`);return"default"}};var Ba0=w(()=>{ED0();Ua0();pj4=/^[A-Za-z0-9_.-]+$/});function wa0($){if(!$)throw new F1("Identity token file path is empty");return async()=>{let Z=await import("fs"),X;try{X=await Z.promises.readFile($,"utf-8")}catch(Y){throw new F1(`Failed to read identity token file at ${$}: ${Y}`)}let Q=X.trim();if(!Q)throw new F1(`Identity token file at ${$} is empty`);return Q}}function AO$($){if(!$)throw new F1("Identity token value is empty");return()=>$}var TO$=w(()=>{E5()});function RO$($){return async()=>{AD0($.baseURL);let Z=await $.identityTokenProvider();if(Z.length>16384)throw new A6(`Identity token is ${Math.ceil(Z.length/1024)} KiB, exceeds the 16 KiB assertion limit`);let X={grant_type:GO$,assertion:Z,federation_rule_id:$.federationRuleId,organization_id:$.organizationId};if($.serviceAccountId)X.service_account_id=$.serviceAccountId;if($.workspaceId)X.workspace_id=$.workspaceId;let Q=`${$.baseURL}${PD0}`,Y;try{Y=await $.fetch(Q,{method:"POST",headers:{"Content-Type":"application/json","anthropic-beta":`${AC},${WO$}`,"User-Agent":$.userAgent||`anthropic-sdk-typescript/${NJ} oidcFederationProvider`},body:JSON.stringify(X)})}catch(K){throw new A6(`Failed to reach token endpoint ${Q}: ${K}`)}let G=Y.headers.get("Request-Id");if(!Y.ok){let K=await Y.text().catch(()=>""),F=oQ(K),H="";if(Y.status===401)H=` Ensure your federation rule matches your identity token. ${$.workspaceId?"":"If your federation rule is scoped to multiple workspaces, set the ANTHROPIC_WORKSPACE_ID environment variable, the 'workspace_id' config key, or the `workspaceId` option. "}View your authentication events in the Workload identity page of Claude Console for more details.`;throw new A6(`Token exchange failed with status ${Y.status}${G?` (request-id ${G})`:""}: ${F}${H}`,Y.status,F,G)}let J=await TD0(Y,G),W=Number(J.expires_in);if(!Number.isFinite(W))throw new A6(`Token endpoint response missing required fields: ${JSON.stringify(oQ(J))}`,Y.status,oQ(J),G);return{token:J.access_token,expiresAt:n3()+W}}}var IO$=w(()=>{ay()});function qO$($){return async(Z)=>{let X=await import("fs");await RD0($.credentialsPath,$.onSafetyWarning);let Q;try{Q=await X.promises.readFile($.credentialsPath,"utf-8")}catch(L){throw new A6(`Credentials file not found at ${$.credentialsPath}: ${L}`)}let Y;try{Y=JSON.parse(Q)}catch(L){throw new A6(`Credentials file at ${$.credentialsPath} is not valid JSON: ${L}`)}let G=Y.access_token;if(!G)throw new A6(`Credentials file at ${$.credentialsPath} must include 'access_token'`);let J=Y.expires_at;if(!Z?.forceRefresh&&(J==null||n3()<J-ry))return{token:G,expiresAt:J??null};let W=Y.refresh_token;if(!$.clientId||!W)throw new A6(`Access token at ${$.credentialsPath} has expired and no refresh is available (client_id ${$.clientId?"set":"empty"}, refresh_token ${W?"set":"empty"})`);AD0($.baseURL);let K={grant_type:JO$,refresh_token:W,client_id:$.clientId},F=`${$.baseURL}${PD0}`,H;try{H=await $.fetch(F,{method:"POST",headers:{"Content-Type":"application/json","anthropic-beta":AC,"User-Agent":$.userAgent||`anthropic-sdk-typescript/${NJ} userOAuthProvider`},body:JSON.stringify(K)})}catch(L){throw new A6(`User OAuth refresh failed to reach token endpoint: ${L}`)}let N=H.headers.get("Request-Id");if(!H.ok){let L=await H.text().catch(()=>"");throw new A6(`User OAuth refresh failed (HTTP ${H.status}): ${oQ(L)}`,H.status,oQ(L),N)}let U=await TD0(H,N),O=Number(U.expires_in);if(!Number.isFinite(O))throw new A6(`User OAuth refresh response missing or invalid expires_in: ${JSON.stringify(oQ(U))}`,H.status,oQ(U),N);let B=n3()+O,D=U.refresh_token||W;return await ID0($.credentialsPath,{...Y,version:VD0,type:"oauth_token",access_token:U.access_token,expires_at:B,refresh_token:D}),{token:U.access_token,expiresAt:B}}}var MO$=w(()=>{Ba0();ay()});function Da0($,Z){let X=$.authentication.credentials_path??null,Q=($.base_url||Z.baseURL).replace(/\/+$/,""),Y=tj4($,X,Q,Z),G={};if($.workspace_id&&$.authentication.type==="user_oauth")G["anthropic-workspace-id"]=$.workspace_id;return{provider:Y,extraHeaders:G,baseURL:$.base_url||void 0}}async function kO$($,Z){let X=await jO$(Z);if(!X)return null;let{config:Q,fromFile:Y}=X,G=Q.authentication.credentials_path||!Y?Q:{...Q,authentication:{...Q.authentication,credentials_path:await zO$(Q,Z)??void 0}};return Da0(G,$)}function tj4($,Z,X,Q){switch($.authentication.type){case"oidc_federation":{let Y=$.authentication,G=oj4(Y);if(!G)throw new A6("oidc_federation config requires an identity token (set authentication.identity_token, ANTHROPIC_IDENTITY_TOKEN_FILE, or ANTHROPIC_IDENTITY_TOKEN)");if(!Y.federation_rule_id)throw new A6("oidc_federation config requires 'federation_rule_id'. Set it in authentication.federation_rule_id in your profile, or via ANTHROPIC_FEDERATION_RULE_ID (profile takes precedence).");if(!$.organization_id)throw new A6("oidc_federation config requires organization_id (set ANTHROPIC_ORGANIZATION_ID or config.organization_id)");let J=RO$({identityTokenProvider:G,federationRuleId:Y.federation_rule_id,organizationId:$.organization_id,serviceAccountId:Y.service_account_id,workspaceId:$.workspace_id,baseURL:X,fetch:Q.fetch,userAgent:Q.userAgent});if(Z)return rj4(J,Z,Q.onCacheWriteError,Q.onSafetyWarning);return J}case"user_oauth":{if(!Z)throw new A6("user_oauth config requires authentication.credentials_path (or load via a profile so it defaults to <config_dir>/credentials/<profile>.json)");return qO$({credentialsPath:Z,clientId:$.authentication.client_id,baseURL:X,fetch:Q.fetch,userAgent:Q.userAgent,onSafetyWarning:Q.onSafetyWarning})}default:{let Y=$.authentication.type;throw new A6(`authentication.type "${Y}" is not a known authentication type`)}}}function oj4($){if($.identity_token){let Q=$.identity_token.source;if(Q!=="file")throw new A6(`identity_token.source "${Q}" is not supported by this SDK version (only "file")`);if(!$.identity_token.path)throw new A6('identity_token.source "file" requires a non-empty path');return wa0($.identity_token.path)}let Z=a8("ANTHROPIC_IDENTITY_TOKEN_FILE");if(Z)return wa0(Z);let X=a8("ANTHROPIC_IDENTITY_TOKEN");if(X)return AO$(X);return null}function rj4($,Z,X,Q){return async(Y)=>{let G=await import("fs");await RD0(Z,Q);let J;try{let K=await G.promises.readFile(Z,"utf-8");J=JSON.parse(K);let F=J?.access_token;if(F&&!Y?.forceRefresh){let H=J?.expires_at;if(H==null||n3()<H-ry)return{token:F,expiresAt:H??null}}}catch(K){if(K?.code!=="ENOENT"&&!(K instanceof SyntaxError))X?.(K)}let W=await $(Y);try{await ID0(Z,{...J??{},version:VD0,type:"oauth_token",access_token:W.token,expires_at:W.expiresAt})}catch(K){X?.(K)}return W}}var VO$=w(()=>{Ba0();ay();TO$();IO$();MO$()});class yB{constructor(){aY.set(this,void 0),sY.set(this,void 0),o0(this,aY,new Uint8Array,"f"),o0(this,sY,null,"f")}decode($){if($==null)return[];let Z=$ instanceof ArrayBuffer?new Uint8Array($):typeof $==="string"?sy($):$;o0(this,aY,OO$([d(this,aY,"f"),Z]),"f");let X=[],Q;while((Q=aj4(d(this,aY,"f"),d(this,sY,"f")))!=null){if(Q.carriage&&d(this,sY,"f")==null){o0(this,sY,Q.index,"f");continue}if(d(this,sY,"f")!=null&&(Q.index!==d(this,sY,"f")+1||Q.carriage)){X.push(Fa0(d(this,aY,"f").subarray(0,d(this,sY,"f")-1))),o0(this,aY,d(this,aY,"f").subarray(d(this,sY,"f")),"f"),o0(this,sY,null,"f");continue}let Y=d(this,sY,"f")!==null?Q.preceding-1:Q.preceding,G=Fa0(d(this,aY,"f").subarray(0,Y));X.push(G),o0(this,aY,d(this,aY,"f").subarray(Q.index),"f"),o0(this,sY,null,"f")}return X}flush(){if(!d(this,aY,"f").length)return[];return this.decode(`
|
|
1581
|
+
`+$}function GD0($){if(!$||$.length===0)return[];return $.filter((Z)=>Dj4.test(Z))}function Lj4($){if($.csp)return $.csp;let Z=$.resourceCsp;if(!Z)return OU$;let X=GD0(Z.resourceDomains),Q=GD0(Z.connectDomains),Y=GD0(Z.frameDomains),G=GD0(Z.baseUriDomains),J=X.length>0,W=Q.length>0,K=Y.length>0,F=G.length>0;if(!J&&!W&&!K&&!F)return OU$;let H=X.join(" ");return["default-src 'none'",J?`script-src 'unsafe-inline' 'unsafe-eval' 'wasm-unsafe-eval' ${H}`:"script-src 'unsafe-inline' 'unsafe-eval' 'wasm-unsafe-eval'",J?`style-src 'unsafe-inline' ${H}`:"style-src 'unsafe-inline'",J?`img-src * data: blob: ${H}`:"img-src * data: blob:",J?`media-src * data: blob: ${H}`:"media-src * data: blob:",J?`font-src data: ${H}`:"font-src data:",W?`connect-src ${Q.join(" ")}`:"connect-src 'none'",K?`frame-src ${Y.join(" ")}`:"frame-src 'none'","worker-src blob:","form-action 'none'",F?`base-uri ${G.join(" ")}`:"base-uri 'none'"].join("; ")}var OU$,Dj4;var wU$=w(()=>{OU$=["default-src 'none'","script-src 'unsafe-inline' 'unsafe-eval' 'wasm-unsafe-eval'","style-src 'unsafe-inline'","img-src * data: blob:","media-src * data: blob:","font-src data:","connect-src 'none'","frame-src 'none'","worker-src blob:","form-action 'none'","base-uri 'none'"].join("; ");Dj4=/^https?:\/\/(\*\.)?[a-zA-Z0-9._-]+(:\d+)?\/?$/});function Ej4($){let Z=$.lastFailureAt-$.firstFailureAt;return $.count>=My1&&Z>=ky1}class vr0{options;kv=null;codec=v50();constructor($){this.options=$}async init(){let $=this.options.getJetStream();if(!$)return;this.kv=await new LU$.Kvm($).create(jj4,{storage:DU$.StorageType.Memory,ttl:EU$.nanos(Vy1)})}async recordFailure($){if(!this.kv)return _r0;let Z=Date.now();for(let X=0;X<zj4;X++)try{let Q=await this.kv.get($);if(!(Q&&Q.operation!=="DEL"&&Q.operation!=="PURGE"&&Q.value?.length)){let W={count:1,firstFailureAt:Z,lastFailureAt:Z};return await this.kv.create($,this.codec.encode(W)),{count:W.count,shouldDisable:!1}}let G=this.codec.decode(Q.value),J={count:G.count+1,firstFailureAt:G.firstFailureAt,lastFailureAt:Z};return await this.kv.update($,this.codec.encode(J),Q.revision),{count:J.count,shouldDisable:Ej4(J)}}catch{}return _r0}async recordSuccess($){if(!this.kv)return;try{await this.kv.delete($)}catch{}}teardown(){this.kv=null}}class ln{async recordFailure(){return _r0}async recordSuccess(){}teardown(){}}function fr0($){jU$=$??new ln}function br0(){return jU$}var DU$,LU$,EU$,_r0,jj4="DECOCMS_CONN_CIRCUIT",zj4=5,jU$;var xr0=w(()=>{DU$=V(uw(),1),LU$=V(Qc0(),1),EU$=V(Mu(),1),_r0={count:0,shouldDisable:!1};jU$=new ln});function zU$($){if(!$)return{decision:"skip"};if($.startsWith("notifications/"))return{decision:"skip"};if(Aj4.has($))return{decision:"skip"};let Z=Pj4[$];if(Z)return{decision:"skip-if-list-cached",listType:Z};return{decision:"probe"}}async function PU$($){if($.method!=="POST")return;let Z=$.headers.get("content-length");if(Z&&Number(Z)>Tj4)return;try{let X=await $.clone().json(),Y=(Array.isArray(X)?X[0]:X)?.method;return typeof Y==="string"?Y:void 0}catch{return}}var Pj4,Aj4,Tj4=64000;var AU$=w(()=>{Pj4={"tools/list":"tools","resources/list":"resources","prompts/list":"prompts"},Aj4=new Set(["ping"])});import{SpanStatusCode as JD0}from"@opentelemetry/api";async function WD0($,Z){let X=$.get("studioContext");try{let Q=X.organization?.id??null,Y=Z?Z:Q?tD(Q):null;if(!Y)return $.json({error:"Agent ID or organization ID is required"},400);if(Z&&!Q)return $.json({error:"Organization context is required"},400);let G=await X.tracer.startActiveSpan("studio.virtual_mcp.lookup",{attributes:{"virtual_mcp.id":Y}},async(U)=>{try{let O=await X.storage.virtualMcps.findById(Y,Q??void 0);return U.setStatus({code:JD0.OK}),O}catch(O){throw U.setStatus({code:JD0.ERROR,message:O.message}),U.recordException(O),O}finally{U.end()}});if(!G)return $.json({error:"Agent not found"},404);if(Q&&G.organization_id!==Q)return $.json({error:"Agent not found"},404);if(G.status!=="active")return $.json({error:`Agent is inactive: ${G.id??"Decopilot"}`},503);if(X.organization?.id&&G.organization_id!==X.organization.id)return $.json({error:"Forbidden: Agent does not belong to your organization"},403);X.connectionId=G.id??void 0;let J=G1(X),W=null;if(G.id&&J&&w5(G.metadata)[J])W=await OC(X,G.id,J,$.req.query("branch")??void 0).catch(()=>null);let K=await X.tracer.startActiveSpan("studio.virtual_mcp.create_client",{attributes:{"virtual_mcp.id":G.id??"decopilot"}},async(U)=>{try{let O=await uH(G,X,!1,{includeSkillsCatalog:!0,additionalConnections:W?[W]:[]});return U.setStatus({code:JD0.OK}),O}catch(O){throw U.setStatus({code:JD0.ERROR,message:O.message}),U.recordException(O),O}finally{U.end()}}),F={name:G.id??"Decopilot",version:"1.0.0",title:G.title??void 0,description:G.description??void 0,icons:G.icon?[{src:G.icon}]:void 0},H=dD(K,F,{capabilities:{tools:{},resources:{},prompts:{}},instructions:K.getInstructions(),toolCallTimeoutMs:rf}),N=new XQ({enableJsonResponse:$.req.header("Accept")?.includes("application/json")??!1});return await H.connect(N),await FJ(H,N,$.req.raw,`virtual-mcp:${G.id??"decopilot"}`,{onClose:()=>K.close()})}catch(Q){let Y=Q;return console.error("[virtual-mcp] Error handling virtual MCP request:",Y),$.json({error:"Internal server error",message:Y.message},500)}}var KD0=()=>{let $=new H1;return $.all("/gateway/:virtualMcpId?",async(Z)=>{let X=Z.req.param("virtualMcpId")||Z.req.header("x-virtual-mcp-id");return WD0(Z,X)}),$.all("/virtual-mcp/:virtualMcpId?",async(Z)=>{let X=Z.req.param("virtualMcpId")||Z.req.header("x-virtual-mcp-id");return WD0(Z,X)}),$};var FD0=w(()=>{fX();O8();zC();D8();Ey();Uw0();pX();my()});import{SpanStatusCode as HD0}from"@opentelemetry/api";var TU$=($,Z)=>{if($ instanceof Xx)return Z.header("Retry-After",String(Math.ceil($.cooldownRemainingMs/1000))),Z.json({error:$.message},503);if($.message.includes("not found"))return Z.json({error:$.message},404);if($.message.includes("does not belong to the active organization"))return Z.json({error:"Connection not found"},404);if($.message.includes("inactive"))return Z.json({error:$.message},503);return Z.json({error:"Internal server error",message:$.message},500)},ND0=()=>{let $=new H1;return $.all("/",async(Z)=>{return WD0(Z,void 0)}),$.get("/:connectionId/ui-resource",async(Z)=>{let X=Z.get("studioContext"),Q=Z.req.param("connectionId"),Y=Z.req.query("uri");if(!Y)return Z.json({error:"uri query param is required"},400);if(!X.organization?.id)return Z.json({error:"Organization context is required"},403);let G=px0(Q),J;if(G){let O=G1(X);if(!O)return Z.json({error:"Authentication required"},401);if(J=await OC(X,G,O,Z.req.query("branch")??void 0),!J)return Z.json({error:"Dev server not running"},503)}else if(J=await X.storage.connections.findById(Q,X.organization.id),!J||J.organization_id!==X.organization.id)return Z.json({error:"Connection not found"},404);let W=VO(J,X,!1,Z9()??void 0),K,F;try{let B=(await W.readResource({uri:Y})).contents?.[0];K=B?.text,F=B?._meta?.ui?.csp}catch(O){return Z.json({error:O.message},502)}finally{await W.close().catch(()=>{})}if(typeof K!=="string")return Z.json({error:"Resource has no text content"},404);let H=BU$(K,{resourceCsp:F}),N=`"${Bun.hash(H).toString(36)}"`,U="private, no-cache";if(Z.req.header("if-none-match")===N)return new Response(null,{status:304,headers:{ETag:N,"Cache-Control":U}});return new Response(H,{headers:{"Content-Type":"text/html; charset=utf-8",ETag:N,"Cache-Control":U}})}),$.all("/:connectionId",async(Z)=>{let X=Z.req.param("connectionId"),Q=Z.get("studioContext");if(X.endsWith("_self")){let J=X.slice(0,-5);if(!Q.organization||Q.organization.id!==J)return Z.json({error:"Connection not found"},404);let W=await iy(Q),K=new XQ({enableJsonResponse:Z.req.raw.headers.get("Accept")?.includes("application/json")??!1});return await W.connect(K),aH.run(Q,()=>FJ(W,K,Z.req.raw,`mcp:self:${X}`))}let Y=px0(X);if(Y){if(!Q.organization?.id)return Z.json({error:"Organization context is required"},403);let J=G1(Q);if(!J)return Z.json({error:"Authentication required"},401);let W=await OC(Q,Y,J,Z.req.query("branch")??void 0);if(!W)return Z.json({error:"Dev server not running"},503);let K=y50(W,Q,!1),F=new XQ({enableJsonResponse:Z.req.raw.headers.get("Accept")?.includes("application/json")??!1});return await K.connect(F),FJ(K,F,Z.req.raw,`mcp:dev:${X}`)}let G=null;try{try{if(!Q.organization?.id)return Z.json({error:"Organization context is required"},403);if(G=await Q.tracer.startActiveSpan("studio.connection.lookup",{attributes:{"connection.id":X}},async(D)=>{KJ(Z,"mcp.find_connection");try{let L=await Q.storage.connections.findById(X,Q.organization.id);return D.setStatus({code:HD0.OK}),L}catch(L){throw D.setStatus({code:HD0.ERROR,message:L.message}),D.recordException(L),L}finally{rY(Z,"mcp.find_connection"),D.end()}}),!G)throw Error("Connection not found");let J=G;if(J.organization_id!==Q.organization.id)throw Error("Connection does not belong to the active organization");let W=!1;if(J.status!=="active"){let D=Date.now()-new Date(J.updated_at).getTime();if(J.status==="error"&&!!J.connection_url&&D>=rx0)W=!0;else{if(J.status==="error"&&J.connection_url){let E=rx0-D;Z.header("Retry-After",String(Math.ceil(E/1000)))}throw Error(`Connection inactive: ${J.status}`)}}let K=await PU$(Z.req.raw),{decision:F,listType:H}=zU$(K),N=F==="probe";if(F==="skip-if-list-cached"&&H){let D=Z9();N=D?await D.get(H,X)===null:!0}if(W)N=!0;if(J.connection_url&&N)R60(X),await Q.tracer.startActiveSpan("studio.connection.handshake",{attributes:{"connection.id":X,"connection.url":J.connection_url}},async(D)=>{KJ(Z,"mcp.client_handshake");try{if(await N5(J,Q,!1),I60(X),br0().recordSuccess(X),W)await Q.storage.connections.update(X,{status:"active"}),console.info("[proxy] auto-recovered connection after successful re-probe",{connectionId:X,org:Q.organization?.slug});D.setStatus({code:HD0.OK})}catch(L){throw D.setStatus({code:HD0.ERROR,message:L.message}),D.recordException(L),L}finally{rY(Z,"mcp.client_handshake"),D.end()}});KJ(Z,"mcp.create_server");let U=y50(J,Q,!1);rY(Z,"mcp.create_server");let O=new XQ({enableJsonResponse:Z.req.raw.headers.get("Accept")?.includes("application/json")??!1});KJ(Z,"mcp.server_connect"),await U.connect(O),rY(Z,"mcp.server_connect"),KJ(Z,"mcp.handle_request");let B=await FJ(U,O,Z.req.raw,`mcp:${X}`);return rY(Z,"mcp.handle_request"),B}catch(J){if(J instanceof Xx)throw J;if(G??=await Q.storage.connections.findById(X,Q.organization?.id),G?.connection_url){let W=await yr0({error:J,reqUrl:new URL(Z.req.raw.url),connectionId:X,connectionUrl:G.connection_url,headers:{},orgSlug:Q.organization?.slug});if(W)return W;q60(X);let{shouldDisable:K}=await br0().recordFailure(X);if(K&&G.status==="active")await Q.storage.connections.update(X,{status:"error"}),console.warn("[proxy] auto-disabled connection after sustained failures",{connectionId:X,org:Q.organization?.slug,error:J.message})}throw J}}catch(J){return TU$(J,Z)}}),$.all("/:connectionId/call-tool/:toolName",async(Z)=>{let X=Z.req.param("connectionId"),Q=Z.req.param("toolName"),Y=Z.get("studioContext");if(!Y.organization?.id)return Z.json({error:"Organization context is required"},403);let G=null;try{if(G=await Y.storage.connections.findById(X,Y.organization.id),!G)return Z.json({error:"Connection not found"},404);let W=await(await N5(G,Y,!1)).callTool({name:Q,arguments:await Z.req.json()});if(W.isError)return new Response(JSON.stringify(W.content),{headers:{"Content-Type":"application/json"},status:500});return new Response(JSON.stringify(W.structuredContent??W.content),{headers:{"Content-Type":"application/json"}})}catch(J){if(G??=await Y.storage.connections.findById(X,Y.organization.id),G?.connection_url){let W=await yr0({error:J,reqUrl:new URL(Z.req.raw.url),connectionId:X,connectionUrl:G.connection_url,headers:{},orgSlug:Y.organization?.slug});if(W)return W}return TU$(J,Z)}}),$};var UD0=w(()=>{UH();zC();D8();Cr0();_O();my();dn();vY();wi();wU$();Kh0();xr0();AU$();FD0();Uw0();O8();hr0()});async function bB($,Z,X,Q){if(Z.type!=="event"||!Z.connection_id)return{success:!0};let Y=await $.storage.connections.findById(Z.connection_id);if(!Y)return{success:!0};let G=$.organization?.id,J=$.organization?.slug;try{let W=await N5(Y,$,!0),K=Oc0.forClient(gr0(W)),F,H,N;if(X&&Q&&G){let E=await Q.generateTokenPair();H=E.plaintext,N=E.hash,F=J?`${$.baseUrl}/api/${J}/trigger-callback`:`${$.baseUrl}/api/trigger-callback`}let U=5000,O=!1,B=new Promise((E,j)=>setTimeout(()=>{O=!0,j(Error("TRIGGER_CONFIGURE timeout"))},U)),D;try{D=await Promise.race([K.TRIGGER_CONFIGURE({type:Z.event_type,params:JSON.parse(Z.params??"{}"),enabled:X,callbackUrl:F,callbackToken:H}),B])}catch(E){if(O&&X&&Q&&G&&N)await Q.persistTokenHash(G,Z.connection_id,N);return console.error(`[configureTriggerOnMcp] TRIGGER_CONFIGURE threw on connection=${Z.connection_id} type=${Z.event_type}:`,E),{success:!1,error:String(E)}}let L=D;if(!L||L.success!==!0)return console.error(`[configureTriggerOnMcp] TRIGGER_CONFIGURE did not return success=true on connection=${Z.connection_id} type=${Z.event_type}. Raw payload:`,JSON.stringify(D)),{success:!1,error:`TRIGGER_CONFIGURE did not return success=true (got ${JSON.stringify(D)})`};try{if(X&&Q&&G&&N)await Q.persistTokenHash(G,Z.connection_id,N);if(!X&&Q&&G)await Q.deleteByConnection(Z.connection_id,G)}catch(E){console.error("[configureTriggerOnMcp] Token persistence failed after successful TRIGGER_CONFIGURE:",E)}return{success:!0}}catch(W){return{success:!1,error:String(W)}}}var mn=w(()=>{UH();UD0();Bc0()});import{z as n6}from"zod";var ur0;var RU$=w(()=>{jC();S0();hX();mn();ur0=c({name:"AUTOMATION_UPDATE",description:"Update an automation's config. Toggling active state reconfigures event triggers on MCPs.",annotations:{title:"Update Automation",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:n6.object({id:n6.string(),name:n6.string().min(1).max(255).optional(),active:n6.boolean().optional(),messages:n6.union([n6.string(),n6.array(n6.looseObject({id:n6.string().optional(),role:n6.enum(["user","assistant","system"]),parts:n6.array(n6.record(n6.string(),n6.unknown())),metadata:n6.unknown().optional()}))]).optional(),models:n6.object({tier:DO,modelId:n6.string().optional(),credentialId:n6.string().optional()}).loose().optional(),tools:n6.array(n6.string()).nullable().optional(),maxAgentSteps:n6.number().int().min(1).max(100).nullable().optional(),temperature:n6.number().optional()}),outputSchema:n6.object({id:n6.string(),name:n6.string(),active:n6.boolean(),updated_at:n6.string()}),handler:async($,Z)=>{r(Z);let X=t(Z);await Z.access.check();let Q=await Z.storage.automations.findById($.id,X.id);if(!Q)throw Error("Automation not found");let Y={};if($.name!==void 0)Y.name=$.name;if($.active!==void 0)Y.active=$.active;if($.messages!==void 0){let J=ew0($.messages);Y.messages=JSON.stringify(J)}if($.models!==void 0)Y.models=JSON.stringify($.models);if($.tools!==void 0)Y.tools=$.tools===null?null:JSON.stringify($.tools);if($.temperature!==void 0)Y.temperature=$.temperature;if($.maxAgentSteps!==void 0)Y.max_agent_steps=$.maxAgentSteps;let G=await Z.storage.automations.update($.id,X.id,Y);if($.active!==void 0&&$.active!==Q.active){let J=await Z.storage.automations.listTriggers(G.id),W=J.filter((K)=>K.type==="event");await Promise.allSettled(W.map(async(K)=>{let F=await bB(Z,K,$.active);if(!F.success)console.warn(`Failed to configure trigger ${K.id}: ${F.error}`)})),await GU$(J,$.active)}return{id:G.id,name:G.name,active:G.active,updated_at:G.updated_at}}})});import{z as OD0}from"zod";var cr0;var IU$=w(()=>{jC();k4();S0();mn();cr0=c({name:"AUTOMATION_DELETE",description:"Permanently delete an automation. Disables all event triggers on connected MCPs first.",annotations:{title:"Delete Automation",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!1},inputSchema:OD0.object({id:OD0.string()}),outputSchema:OD0.object({success:OD0.boolean()}),handler:async($,Z)=>{r(Z);let X=t(Z);if(await Z.access.check(),!await Z.storage.automations.findById($.id,X.id))throw Error("Automation not found");let Y=await Z.storage.automations.listTriggers($.id),G=Y.filter((K)=>K.type==="event");await Promise.allSettled(G.map(async(K)=>{let F=await bB(Z,K,!1);if(!F.success)console.warn(`Failed to disable trigger ${K.id}: ${F.error}`)}));let{success:J}=await Z.storage.automations.delete($.id,X.id);await JU$(Y);let W=G1(Z);if(W)y1.capture({distinctId:W,event:"automation_deleted",groups:{organization:X.id},properties:{organization_id:X.id,automation_id:$.id,trigger_count:Y.length}});return{success:J}}})});function py($){return`webhook_${$}`}function BD0($,Z,X){if(!Z)throw Error("Cannot build webhook URL: organization slug missing from request context");return`${$}/api/${Z}/webhooks/${X}`}import{z as w7}from"zod";var qU$=300000,Rj4=10,lr0;var MU$=w(()=>{zr0();jC();jr0();S0();mn();lr0=c({name:"AUTOMATION_TRIGGER_ADD",description:"Add a cron, event, or webhook trigger to an automation. For webhook triggers the response includes a one-time URL + secret token.",annotations:{title:"Add Trigger",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!1},inputSchema:w7.object({automation_id:w7.string(),type:w7.enum(["cron","event","webhook"]),cron_expression:w7.string().optional(),connection_id:w7.string().optional(),event_type:w7.string().optional(),params:w7.record(w7.string(),w7.string()).optional()}),outputSchema:w7.object({id:w7.string(),automation_id:w7.string(),type:w7.enum(["cron","event","webhook"]),created_at:w7.string(),webhook:w7.object({url:w7.string(),token:w7.string()}).nullable().optional()}),handler:async($,Z)=>{r(Z);let X=t(Z);await Z.access.check();let Q=await Z.storage.automations.findById($.automation_id,X.id);if(!Q)throw Error("Automation not found");if($.type==="cron"){if(!$.cron_expression)throw Error("cron_expression is required for cron triggers");let K=new ZD0($.cron_expression,{timezone:"UTC"}).nextRuns(Rj4);if(K.length===0)throw Error("Cron expression has no future runs");let F=1/0;for(let H=1;H<K.length;H++){let N=K[H].getTime()-K[H-1].getTime();if(N<F)F=N}if(K.length>=2&&Number.isFinite(F)&&F<qU$){let H=qU$/1000;throw Error(`Cron fires too frequently \u2014 minimum interval is ${H}s between runs (observed ${F/1000}s)`)}}if($.type==="event"){if(!$.connection_id)throw Error("connection_id is required for event triggers");if(!$.event_type)throw Error("event_type is required for event triggers");if(!await Z.storage.connections.findById($.connection_id,X.id))throw Error("Connection not found");let K={id:"",automation_id:$.automation_id,type:"event",cron_expression:null,connection_id:$.connection_id,event_type:$.event_type,params:$.params?JSON.stringify($.params):null,last_run_at:null,next_run_at:null,api_key_id:null,created_at:""},F=await bB(Z,K,!0,Z.storage.triggerCallbackTokens);if(!F.success)throw Error(`Failed to configure trigger on connection: ${F.error}`)}let Y=$.type==="cron"&&$.cron_expression?XD0($.cron_expression,new Date):null,G=await Z.storage.automations.addTrigger({automation_id:$.automation_id,type:$.type,cron_expression:$.type==="cron"?$.cron_expression:null,connection_id:$.type==="event"?$.connection_id:null,event_type:$.type==="event"?$.event_type:null,params:$.params?JSON.stringify($.params):null,next_run_at:Y?.toISOString()??null}),J=null;if($.type==="webhook")try{let W=await Z.boundAuth.apiKey.create({name:`webhook:${Q.name}:${G.id.slice(0,8)}`,permissions:{[py(G.id)]:["FIRE"]},metadata:{kind:"webhook_trigger",automation_id:Q.id,trigger_id:G.id}});await Z.storage.automations.setTriggerApiKeyId(G.id,W.id),J={url:BD0(Z.baseUrl,X.slug,G.id),token:W.key}}catch(W){await Z.storage.automations.removeTrigger(G.id,G.automation_id);let K=W instanceof Error?W.message:String(W);throw Error(`Failed to mint webhook token: ${K}`)}return await YD0(G,Q),{id:G.id,automation_id:G.automation_id,type:G.type,created_at:G.created_at,webhook:J}}})});import{z as wD0}from"zod";var dr0;var kU$=w(()=>{jC();S0();mn();dr0=c({name:"AUTOMATION_TRIGGER_REMOVE",description:"Remove a trigger from an automation. Disables associated event listeners on MCPs.",annotations:{title:"Remove Trigger",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!1},inputSchema:wD0.object({trigger_id:wD0.string()}),outputSchema:wD0.object({success:wD0.boolean()}),handler:async($,Z)=>{r(Z);let X=t(Z);await Z.access.check();let Q=await Z.storage.automations.findTriggerById($.trigger_id);if(!Q)throw Error("Trigger not found");if(!await Z.storage.automations.findById(Q.automation_id,X.id))throw Error("Automation not found");if(Q.type==="event"){let J=await bB(Z,Q,!1,Z.storage.triggerCallbackTokens);if(!J.success)console.warn(`Failed to disable trigger ${Q.id}: ${J.error}`)}let{success:G}=await Z.storage.automations.removeTrigger(Q.id,Q.automation_id);if(Q.type==="cron")await kr0(Q.id);if(Q.type==="webhook"&&Q.api_key_id)try{await Z.boundAuth.apiKey.delete(Q.api_key_id)}catch(J){console.warn(`[trigger-remove] failed to delete api key ${Q.api_key_id} for trigger ${Q.id}:`,J instanceof Error?J.message:J)}return{success:G}}})});import{z as ny}from"zod";var mr0;var VU$=w(()=>{S0();mr0=c({name:"AUTOMATION_TRIGGER_ROTATE_TOKEN",description:"Rotate the secret token for a webhook automation trigger. Returns a new token; the old token is revoked.",annotations:{title:"Rotate Webhook Token",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!1},inputSchema:ny.object({trigger_id:ny.string()}),outputSchema:ny.object({trigger_id:ny.string(),url:ny.string(),token:ny.string()}),handler:async($,Z)=>{r(Z);let X=t(Z);await Z.access.check();let Q=await Z.storage.automations.findTriggerById($.trigger_id);if(!Q)throw Error("Trigger not found");if(Q.type!=="webhook")throw Error("Trigger is not a webhook trigger");let Y=await Z.storage.automations.findById(Q.automation_id,X.id);if(!Y)throw Error("Automation not found");let G=Q.api_key_id,J=await Z.boundAuth.apiKey.create({name:`webhook:${Y.name}:${Q.id.slice(0,8)}`,permissions:{[py(Q.id)]:["FIRE"]},metadata:{kind:"webhook_trigger",automation_id:Y.id,trigger_id:Q.id}});if(await Z.storage.automations.setTriggerApiKeyId(Q.id,J.id),G)try{await Z.boundAuth.apiKey.delete(G)}catch(W){console.warn(`[trigger-rotate] failed to delete old key ${G} for trigger ${Q.id}:`,W instanceof Error?W.message:W)}return{trigger_id:Q.id,url:BD0(Z.baseUrl,X.slug,Q.id),token:J.key}}})});import{z as ty}from"zod";var ir0;var SU$=w(()=>{k4();S0();ir0=c({name:"AUTOMATION_RUN",description:"Manually trigger an automation run. Bypasses configured triggers.",annotations:{title:"Run Automation",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!1},inputSchema:ty.object({id:ty.string()}),outputSchema:ty.object({threadId:ty.string().optional(),error:ty.string().optional(),skipped:ty.string().optional()}),handler:async($,Z)=>{r(Z);let X=t(Z);if(await Z.access.check(),!Z.automationRunner)throw Error("Automation runner not available");let Q=G1(Z);if(!Q)throw Error("User ID not available");let Y=await Z.automationRunner($.id,X.id,Q);if(y1.capture({distinctId:Q,event:"automation_run",groups:{organization:X.id},properties:{organization_id:X.id,automation_id:$.id,thread_id:"taskId"in Y?Y.taskId:void 0,status:"skipped"in Y?"skipped":("error"in Y)?"error":"started",skip_reason:"skipped"in Y?Y.skipped:void 0,error_message:"error"in Y?Y.error:void 0}}),"skipped"in Y)return{skipped:Y.skipped};if("error"in Y)return{threadId:Y.taskId,error:Y.error};return{threadId:Y.taskId}}})});import{z as uZ}from"zod";var Ij4=500,pr0;var CU$=w(()=>{R6();S0();pr0=c({name:"AUTOMATION_RUN_STATS",description:"Aggregate run counts (by status) and LLM token/cost totals for a single automation.",annotations:{title:"Automation Run Stats",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:uZ.object({automation_id:uZ.string(),startDate:uZ.string().datetime().optional().describe("Filter runs at or after this ISO timestamp"),endDate:uZ.string().datetime().optional().describe("Filter runs at or before this ISO timestamp")}),outputSchema:uZ.object({runs:uZ.object({total:uZ.number(),completed:uZ.number(),failed:uZ.number(),inProgress:uZ.number()}),usage:uZ.object({calls:uZ.number(),inputTokens:uZ.number(),outputTokens:uZ.number(),totalTokens:uZ.number(),costUsd:uZ.number(),sampledRuns:uZ.number(),truncated:uZ.boolean()})}),handler:async($,Z)=>{r(Z);let X=t(Z);if(await Z.access.check(),await WQ(),!await Z.storage.automations.findById($.automation_id,X.id))throw Error("Automation not found");let Y=await Z.storage.automations.getRunStats($.automation_id,X.id,{startDate:$.startDate,endDate:$.endDate}),G=await Z.storage.automations.listRunThreadIds($.automation_id,X.id,{startDate:$.startDate,endDate:$.endDate,limit:Ij4}),J={calls:0,inputTokens:0,outputTokens:0,totalTokens:0,costUsd:0,sampledRuns:G.length,truncated:Y.total>G.length};if(G.length>0){let W=await Z.storage.monitoring.queryThreadUsage({organizationId:X.id,connectionId:"decopilot",threadIds:G,startDate:$.startDate?new Date($.startDate):void 0,endDate:$.endDate?new Date($.endDate):void 0});for(let K of W)J.calls+=K.calls,J.inputTokens+=K.inputTokens,J.outputTokens+=K.outputTokens,J.totalTokens+=K.totalTokens,J.costUsd+=K.costUsd}return{runs:Y,usage:J}}})});var _U$=w(()=>{pN$();nN$();tN$();RU$();IU$();MU$();kU$();VU$();SU$();CU$()});import{z as xB}from"zod";var Mj4,kj4,nr0;var vU$=w(()=>{S0();Mj4=xB.object({id:xB.string().min(1)}),kj4=xB.object({user:xB.object({id:xB.string(),name:xB.string(),email:xB.string(),image:xB.string().nullable()}).nullable()}),nr0=c({name:"USER_GET",description:"Get a user's profile by ID. Only returns users who share an organization with the caller.",annotations:{title:"Get User",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:Mj4,outputSchema:kj4,handler:async($,Z)=>{await Z.access.check(),r(Z);let X=G1(Z);if(!X)throw Error("Authentication required");let Q=await Z.storage.users.findById($.id,X);if(!Q)return{user:null};return{user:{id:Q.id,name:Q.name,email:Q.email,image:Q.image??null}}}})});import{z as Vj4}from"zod";var Sj4,tr0;var fU$=w(()=>{S0();hX();Sj4={tiers:{}},tr0=c({name:"USER_MODEL_PREFERENCES_GET",description:"Get the calling user's personal chat tier \u2192 model overrides for the current organization. Absent tiers fall back to the org default.",annotations:{title:"Get User Model Preferences",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:Vj4.object({}),outputSchema:rm,handler:async($,Z)=>{r(Z),await Z.access.check();let X=t(Z),Q=Z.auth?.user?.id;if(!Q)throw Error("No authenticated user in context");return await Z.storage.userModelPreferences.get(Q,X.id)??Sj4}})});function Cj4($,Z,X){let Q={};for(let Y of DO.options){let G=$[Y];if(!G||d3(X,G.keyId,G.modelId)){Q[Y]=G;continue}let J=Z?.[Y];if(!(J?.keyId===G.keyId&&J?.modelId===G.modelId))throw Error("Model not allowed for your role");Q[Y]=null}return Q}var or0;var bU$=w(()=>{S0();hX();fy();or0=c({name:"USER_MODEL_PREFERENCES_UPDATE",description:"Set the calling user's personal chat tier \u2192 model overrides for the current organization. Only affects this user's chats; the org default and every non-chat path (automations, background tools) are unchanged. Omit a tier (or set it null) to fall back to the org default. Models the caller's role is not allowed to use are rejected.",annotations:{title:"Update User Model Preferences",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:rm,outputSchema:rm,handler:async($,Z)=>{r(Z),await Z.access.check();let X=t(Z),Q=Z.auth?.user?.id;if(!Q)throw Error("No authenticated user in context");let[Y,G]=await Promise.all([m3(Z.db,X.id,X.role??Z.auth.user?.role),Z.storage.userModelPreferences.get(Q,X.id)]);return await Z.storage.userModelPreferences.upsert(Q,X.id,{tiers:Cj4($.tiers,G?.tiers,Y)})}})});var xU$=w(()=>{vU$();fU$();bU$()});function o0($,Z,X,Q,Y){if(Q==="m")throw TypeError("Private method is not writable");if(Q==="a"&&!Y)throw TypeError("Private accessor was defined without a setter");if(typeof Z==="function"?$!==Z||!Y:!Z.has($))throw TypeError("Cannot write private member to an object whose class did not declare it");return Q==="a"?Y.call($,X):Y?Y.value=X:Z.set($,X),X}function d($,Z,X,Q){if(X==="a"&&!Q)throw TypeError("Private accessor was defined without a getter");if(typeof Z==="function"?$!==Z||!Q:!Z.has($))throw TypeError("Cannot read private member from an object whose class did not declare it");return X==="m"?Q:X==="a"?Q.call($):Q?Q.value:Z.get($)}var tQ=()=>{};var oy=function(){let{crypto:$}=globalThis;if($?.randomUUID)return oy=$.randomUUID.bind($),$.randomUUID();let Z=new Uint8Array(1),X=$?()=>$.getRandomValues(Z)[0]:()=>Math.random()*255&255;return"10000000-1000-4000-8000-100000000000".replace(/[018]/g,(Q)=>(+Q^X()&15>>+Q/4).toString(16))};function HJ($){return typeof $==="object"&&$!==null&&(("name"in $)&&$.name==="AbortError"||("message"in $)&&String($.message).includes("FetchRequestCanceledException"))}var PC=($)=>{if($ instanceof Error)return $;if(typeof $==="object"&&$!==null){try{if(Object.prototype.toString.call($)==="[object Error]"){let Z=Error($.message,$.cause?{cause:$.cause}:{});if($.stack)Z.stack=$.stack;if($.cause&&!Z.cause)Z.cause=$.cause;if($.name)Z.name=$.name;return Z}}catch{}try{return Error(JSON.stringify($))}catch{}}return Error($)};var F1,K9,KX,sH,pn,DD0,nn,tn,on,rn,an,sn,en,$t;var E5=w(()=>{F1=class F1 extends Error{};K9=class K9 extends F1{constructor($,Z,X,Q,Y){super(`${K9.makeMessage($,Z,X)}`);this.status=$,this.headers=Q,this.requestID=Q?.get("request-id"),this.error=Z,this.type=Y??null}static makeMessage($,Z,X){let Q=Z?.message?typeof Z.message==="string"?Z.message:JSON.stringify(Z.message):Z?JSON.stringify(Z):X;if($&&Q)return`${$} ${Q}`;if($)return`${$} status code (no body)`;if(Q)return Q;return"(no status code or body)"}static generate($,Z,X,Q){if(!$||!Q)return new sH({message:X,cause:PC(Z)});let Y=Z,G=Y?.error?.type;if($===400)return new nn($,Y,X,Q,G);if($===401)return new tn($,Y,X,Q,G);if($===403)return new on($,Y,X,Q,G);if($===404)return new rn($,Y,X,Q,G);if($===409)return new an($,Y,X,Q,G);if($===422)return new sn($,Y,X,Q,G);if($===429)return new en($,Y,X,Q,G);if($>=500)return new $t($,Y,X,Q,G);return new K9($,Y,X,Q,G)}};KX=class KX extends K9{constructor({message:$}={}){super(void 0,void 0,$||"Request was aborted.",void 0)}};sH=class sH extends K9{constructor({message:$,cause:Z}){super(void 0,void 0,$||"Connection error.",void 0);if(Z)this.cause=Z}};pn=class pn extends sH{constructor({message:$}={}){super({message:$??"Request timed out."})}};DD0=class DD0 extends F1{constructor($,{cause:Z}={}){super($??"Retryable error.");if(Z!==void 0)this.cause=Z}};nn=class nn extends K9{};tn=class tn extends K9{};on=class on extends K9{};rn=class rn extends K9{};an=class an extends K9{};sn=class sn extends K9{};en=class en extends K9{};$t=class $t extends K9{}});function LD0($){if(typeof $!=="object")return{};return $??{}}function ar0($){if(!$)return!0;for(let Z in $)return!1;return!0}function gU$($,Z){return Object.prototype.hasOwnProperty.call($,Z)}var fj4,yU$=($)=>{return fj4.test($)},FX=($)=>(FX=Array.isArray,FX($)),rr0,hU$=($,Z)=>{if(typeof Z!=="number"||!Number.isInteger(Z))throw new F1(`${$} must be an integer`);if(Z<0)throw new F1(`${$} must be a positive integer`);return Z},Zt=($)=>{try{return JSON.parse($)}catch(Z){return}};var i3=w(()=>{E5();fj4=/^[a-z][a-z0-9+.-]*:/i,rr0=FX});var p3=($,Z)=>new Promise((X)=>{if(Z?.aborted)return X();let Q=()=>{clearTimeout(Y),X()},Y=setTimeout(()=>{Z?.removeEventListener("abort",Q),X()},$);Z?.addEventListener("abort",Q,{once:!0})});var NJ="0.105.0";function bj4(){if(typeof Deno<"u"&&Deno.build!=null)return"deno";if(typeof EdgeRuntime<"u")return"edge";if(Object.prototype.toString.call(typeof globalThis.process<"u"?globalThis.process:0)==="[object process]")return"node";return"unknown"}function yj4(){if(typeof navigator>"u"||!navigator)return null;let $=[{key:"edge",pattern:/Edge(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/MSIE(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/Trident(?:.*rv\:(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"chrome",pattern:/Chrome(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"firefox",pattern:/Firefox(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"safari",pattern:/(?:Version\W+(\d+)\.(\d+)(?:\.(\d+))?)?(?:\W+Mobile\S*)?\W+Safari/}];for(let{key:Z,pattern:X}of $){let Q=X.exec(navigator.userAgent);if(Q){let Y=Q[1]||0,G=Q[2]||0,J=Q[3]||0;return{browser:Z,version:`${Y}.${G}.${J}`}}}return null}var dU$=()=>{return typeof window<"u"&&typeof window.document<"u"&&typeof navigator<"u"},xj4=()=>{let $=bj4();if($==="deno")return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":NJ,"X-Stainless-OS":cU$(Deno.build.os),"X-Stainless-Arch":uU$(Deno.build.arch),"X-Stainless-Runtime":"deno","X-Stainless-Runtime-Version":typeof Deno.version==="string"?Deno.version:Deno.version?.deno??"unknown"};if(typeof EdgeRuntime<"u")return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":NJ,"X-Stainless-OS":"Unknown","X-Stainless-Arch":`other:${EdgeRuntime}`,"X-Stainless-Runtime":"edge","X-Stainless-Runtime-Version":globalThis.process.version};if($==="node")return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":NJ,"X-Stainless-OS":cU$(globalThis.process.platform??"unknown"),"X-Stainless-Arch":uU$(globalThis.process.arch??"unknown"),"X-Stainless-Runtime":"node","X-Stainless-Runtime-Version":globalThis.process.version??"unknown"};let Z=yj4();if(Z)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":NJ,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":`browser:${Z.browser}`,"X-Stainless-Runtime-Version":Z.version};return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":NJ,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":"unknown","X-Stainless-Runtime-Version":"unknown"}},uU$=($)=>{if($==="x32")return"x32";if($==="x86_64"||$==="x64")return"x64";if($==="arm")return"arm";if($==="aarch64"||$==="arm64")return"arm64";if($)return`other:${$}`;return"unknown"},cU$=($)=>{if($=$.toLowerCase(),$.includes("ios"))return"iOS";if($==="android")return"Android";if($==="darwin")return"MacOS";if($==="win32")return"Windows";if($==="freebsd")return"FreeBSD";if($==="openbsd")return"OpenBSD";if($==="linux")return"Linux";if($)return`Other:${$}`;return"Unknown"},lU$,Xt=()=>{return lU$??(lU$=xj4())};var ED0=()=>{};function mU$(){if(typeof fetch<"u")return fetch;throw Error("`fetch` is not defined as a global; Either pass `fetch` to the client, `new Anthropic({ fetch })` or polyfill the global, `globalThis.fetch = fetch`")}function sr0(...$){let Z=globalThis.ReadableStream;if(typeof Z>"u")throw Error("`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`");return new Z(...$)}function jD0($){let Z=Symbol.asyncIterator in $?$[Symbol.asyncIterator]():$[Symbol.iterator]();return sr0({start(){},async pull(X){let{done:Q,value:Y}=await Z.next();if(Q)X.close();else X.enqueue(Y)},async cancel(){await Z.return?.()}})}function Qt($){if($[Symbol.asyncIterator])return $;let Z=$.getReader();return{async next(){try{let X=await Z.read();if(X?.done)Z.releaseLock();return X}catch(X){throw Z.releaseLock(),X}},async return(){let X=Z.cancel();return Z.releaseLock(),await X,{done:!0,value:void 0}},[Symbol.asyncIterator](){return this}}}async function iU$($){if($===null||typeof $!=="object")return;if($[Symbol.asyncIterator]){await $[Symbol.asyncIterator]().return?.();return}let Z=$.getReader(),X=Z.cancel();Z.releaseLock(),await X}var pU$=({headers:$,body:Z})=>{return{bodyHeaders:{"content-type":"application/json"},body:JSON.stringify(Z)}};var er0="RFC3986",$a0=($)=>String($),Za0,nU$="RFC1738";var Xa0=w(()=>{Za0={RFC1738:($)=>String($).replace(/%20/g,"+"),RFC3986:$a0}});function oU$($){if(!$||typeof $!=="object")return!1;return!!($.constructor&&$.constructor.isBuffer&&$.constructor.isBuffer($))}function Ya0($,Z){if(FX($)){let X=[];for(let Q=0;Q<$.length;Q+=1)X.push(Z($[Q]));return X}return Z($)}var zD0=($,Z)=>(zD0=Object.hasOwn??Function.prototype.call.bind(Object.prototype.hasOwnProperty),zD0($,Z)),fK,Qa0=1024,tU$=($,Z,X,Q,Y)=>{if($.length===0)return $;let G=$;if(typeof $==="symbol")G=Symbol.prototype.toString.call($);else if(typeof $!=="string")G=String($);if(X==="iso-8859-1")return escape(G).replace(/%u[0-9a-f]{4}/gi,function(W){return"%26%23"+parseInt(W.slice(2),16)+"%3B"});let J="";for(let W=0;W<G.length;W+=Qa0){let K=G.length>=Qa0?G.slice(W,W+Qa0):G,F=[];for(let H=0;H<K.length;++H){let N=K.charCodeAt(H);if(N===45||N===46||N===95||N===126||N>=48&&N<=57||N>=65&&N<=90||N>=97&&N<=122||Y===nU$&&(N===40||N===41)){F[F.length]=K.charAt(H);continue}if(N<128){F[F.length]=fK[N];continue}if(N<2048){F[F.length]=fK[192|N>>6]+fK[128|N&63];continue}if(N<55296||N>=57344){F[F.length]=fK[224|N>>12]+fK[128|N>>6&63]+fK[128|N&63];continue}H+=1,N=65536+((N&1023)<<10|K.charCodeAt(H)&1023),F[F.length]=fK[240|N>>18]+fK[128|N>>12&63]+fK[128|N>>6&63]+fK[128|N&63]}J+=F.join("")}return J};var rU$=w(()=>{Xa0();i3();fK=(()=>{let $=[];for(let Z=0;Z<256;++Z)$.push("%"+((Z<16?"0":"")+Z.toString(16)).toUpperCase());return $})()});function uj4($){return typeof $==="string"||typeof $==="number"||typeof $==="boolean"||typeof $==="symbol"||typeof $==="bigint"}function $O$($,Z,X,Q,Y,G,J,W,K,F,H,N,U,O,B,D,L,E){let j=$,z=E,A=0,P=!1;while((z=z.get(Ga0))!==void 0&&!P){let l=z.get($);if(A+=1,typeof l<"u")if(l===A)throw RangeError("Cyclic object value");else P=!0;if(typeof z.get(Ga0)>"u")A=0}if(typeof F==="function")j=F(Z,j);else if(j instanceof Date)j=U?.(j);else if(X==="comma"&&FX(j))j=Ya0(j,function(l){if(l instanceof Date)return U?.(l);return l});if(j===null){if(G)return K&&!D?K(Z,NZ.encoder,L,"key",O):Z;j=""}if(uj4(j)||oU$(j)){if(K){let l=D?Z:K(Z,NZ.encoder,L,"key",O);return[B?.(l)+"="+B?.(K(j,NZ.encoder,L,"value",O))]}return[B?.(Z)+"="+B?.(String(j))]}let I=[];if(typeof j>"u")return I;let k;if(X==="comma"&&FX(j)){if(D&&K)j=Ya0(j,K);k=[{value:j.length>0?j.join(",")||null:void 0}]}else if(FX(F))k=F;else{let l=Object.keys(j);k=H?l.sort(H):l}let q=W?String(Z).replace(/\./g,"%2E"):String(Z),C=Q&&FX(j)&&j.length===1?q+"[]":q;if(Y&&FX(j)&&j.length===0)return C+"[]";for(let l=0;l<k.length;++l){let f=k[l],x=typeof f==="object"&&typeof f.value<"u"?f.value:j[f];if(J&&x===null)continue;let n=N&&W?f.replace(/\./g,"%2E"):f,u=FX(j)?typeof X==="function"?X(C,n):C:C+(N?"."+n:"["+n+"]");E.set($,A);let a=new WeakMap;a.set(Ga0,E),eU$(I,$O$(x,u,X,Q,Y,G,J,W,X==="comma"&&D&&FX(j)?null:K,F,H,N,U,O,B,D,L,a))}return I}function cj4($=NZ){if(typeof $.allowEmptyArrays<"u"&&typeof $.allowEmptyArrays!=="boolean")throw TypeError("`allowEmptyArrays` option can only be `true` or `false`, when provided");if(typeof $.encodeDotInKeys<"u"&&typeof $.encodeDotInKeys!=="boolean")throw TypeError("`encodeDotInKeys` option can only be `true` or `false`, when provided");if($.encoder!==null&&typeof $.encoder<"u"&&typeof $.encoder!=="function")throw TypeError("Encoder has to be a function.");let Z=$.charset||NZ.charset;if(typeof $.charset<"u"&&$.charset!=="utf-8"&&$.charset!=="iso-8859-1")throw TypeError("The charset option must be either utf-8, iso-8859-1, or undefined");let X=er0;if(typeof $.format<"u"){if(!zD0(Za0,$.format))throw TypeError("Unknown format option provided.");X=$.format}let Q=Za0[X],Y=NZ.filter;if(typeof $.filter==="function"||FX($.filter))Y=$.filter;let G;if($.arrayFormat&&$.arrayFormat in sU$)G=$.arrayFormat;else if("indices"in $)G=$.indices?"indices":"repeat";else G=NZ.arrayFormat;if("commaRoundTrip"in $&&typeof $.commaRoundTrip!=="boolean")throw TypeError("`commaRoundTrip` must be a boolean, or absent");let J=typeof $.allowDots>"u"?!!$.encodeDotInKeys===!0?!0:NZ.allowDots:!!$.allowDots;return{addQueryPrefix:typeof $.addQueryPrefix==="boolean"?$.addQueryPrefix:NZ.addQueryPrefix,allowDots:J,allowEmptyArrays:typeof $.allowEmptyArrays==="boolean"?!!$.allowEmptyArrays:NZ.allowEmptyArrays,arrayFormat:G,charset:Z,charsetSentinel:typeof $.charsetSentinel==="boolean"?$.charsetSentinel:NZ.charsetSentinel,commaRoundTrip:!!$.commaRoundTrip,delimiter:typeof $.delimiter>"u"?NZ.delimiter:$.delimiter,encode:typeof $.encode==="boolean"?$.encode:NZ.encode,encodeDotInKeys:typeof $.encodeDotInKeys==="boolean"?$.encodeDotInKeys:NZ.encodeDotInKeys,encoder:typeof $.encoder==="function"?$.encoder:NZ.encoder,encodeValuesOnly:typeof $.encodeValuesOnly==="boolean"?$.encodeValuesOnly:NZ.encodeValuesOnly,filter:Y,format:X,formatter:Q,serializeDate:typeof $.serializeDate==="function"?$.serializeDate:NZ.serializeDate,skipNulls:typeof $.skipNulls==="boolean"?$.skipNulls:NZ.skipNulls,sort:typeof $.sort==="function"?$.sort:null,strictNullHandling:typeof $.strictNullHandling==="boolean"?$.strictNullHandling:NZ.strictNullHandling}}function ZO$($,Z={}){let X=$,Q=cj4(Z),Y,G;if(typeof Q.filter==="function")G=Q.filter,X=G("",X);else if(FX(Q.filter))G=Q.filter,Y=G;let J=[];if(typeof X!=="object"||X===null)return"";let W=sU$[Q.arrayFormat],K=W==="comma"&&Q.commaRoundTrip;if(!Y)Y=Object.keys(X);if(Q.sort)Y.sort(Q.sort);let F=new WeakMap;for(let U=0;U<Y.length;++U){let O=Y[U];if(Q.skipNulls&&X[O]===null)continue;eU$(J,$O$(X[O],O,W,K,Q.allowEmptyArrays,Q.strictNullHandling,Q.skipNulls,Q.encodeDotInKeys,Q.encode?Q.encoder:null,Q.filter,Q.sort,Q.allowDots,Q.serializeDate,Q.format,Q.formatter,Q.encodeValuesOnly,Q.charset,F))}let H=J.join(Q.delimiter),N=Q.addQueryPrefix===!0?"?":"";if(Q.charsetSentinel)if(Q.charset==="iso-8859-1")N+="utf8=%26%2310003%3B&";else N+="utf8=%E2%9C%93&";return H.length>0?N+H:""}var sU$,eU$=function($,Z){Array.prototype.push.apply($,FX(Z)?Z:[Z])},aU$,NZ,Ga0;var XO$=w(()=>{rU$();Xa0();i3();sU$={brackets($){return String($)+"[]"},comma:"comma",indices($,Z){return String($)+"["+Z+"]"},repeat($){return String($)}},NZ={addQueryPrefix:!1,allowDots:!1,allowEmptyArrays:!1,arrayFormat:"indices",charset:"utf-8",charsetSentinel:!1,delimiter:"&",encode:!0,encodeDotInKeys:!1,encoder:tU$,encodeValuesOnly:!1,format:er0,formatter:$a0,indices:!1,serializeDate($){return(aU$??(aU$=Function.prototype.call.bind(Date.prototype.toISOString)))($)},skipNulls:!1,strictNullHandling:!1};Ga0={}});function QO$($){return ZO$($,{arrayFormat:"brackets"})}var Ja0=w(()=>{XO$()});function AD0($){if(!$)return;let Z;try{Z=new URL($)}catch(Q){throw new A6(`Invalid token endpoint base URL "${$}": ${Q}`)}if(Z.protocol==="https:")return;let X=Z.hostname.toLowerCase().replace(/^\[|\]$/g,"");if(Z.protocol==="http:"&&(X==="localhost"||X==="127.0.0.1"||X==="::1"))return;throw new A6(`Refusing to send credential over non-https token endpoint "${$}"`)}async function TD0($,Z){let X=await mj4($),Q;try{Q=JSON.parse(X)}catch{throw new A6(`Token endpoint returned non-JSON response (status ${$.status})`,$.status,oQ(X),Z)}if(!Q.access_token)throw new A6(`Token endpoint response missing access_token: ${JSON.stringify(oQ(Q))}`,$.status,oQ(Q),Z);if(Q.token_type&&Q.token_type.toLowerCase()!=="bearer")throw new A6(`Token endpoint response: unsupported token_type "${Q.token_type}" (want Bearer)`,$.status,oQ(Q),Z);return Q}function oQ($){if($==null)return $;if(typeof $==="string"){let Z;try{Z=JSON.parse($)}catch{if($.length<=Wa0)return $;return $.slice(0,Wa0)+`... <${$.length-Wa0} more chars>`}return JSON.stringify(oQ(Z))}if(typeof $==="object"&&!Array.isArray($)){let Z={};for(let[X,Q]of Object.entries($))if(dj4.has(X))Z[X]=Q;return Z}return null}async function RD0($,Z=(X)=>console.warn(`anthropic-sdk: ${X}`)){if(typeof process>"u"||process.platform==="win32")return;let X=await import("fs"),Q=$,Y;try{Q=await X.promises.realpath($),Y=await X.promises.stat(Q)}catch{return}let G=Y.mode&511;if(G&18)throw new A6(`Credentials file at ${Q} is group/world-writable (mode 0o${G.toString(8)}); this allows other local users to plant tokens. Run \`chmod 600 ${Q}\`.`);if(G&36)throw new A6(`Credentials file at ${Q} is group/world-readable (mode 0o${G.toString(8)}); run \`chmod 600 ${Q}\` before retrying.`);if(typeof process.getuid==="function"&&Y.uid!==process.getuid())Z(`credentials file at ${Q} is owned by uid ${Y.uid} (current process uid ${process.getuid()}); verify this is intentional.`)}async function ID0($,Z){let X=await import("fs"),Y=(await import("path")).dirname($);await X.promises.mkdir(Y,{recursive:!0,mode:448});let G=`${$}.${process.pid}.${Math.random().toString(36).slice(2)}.tmp`;try{let J=await X.promises.open(G,"w",384);try{await J.writeFile(JSON.stringify(Z,null,2)),await J.sync()}finally{await J.close()}await X.promises.rename(G,$)}catch(J){throw await X.promises.unlink(G).catch(()=>{}),J}try{let J=await X.promises.open(Y,"r");try{await J.sync()}finally{await J.close()}}catch{}}async function mj4($){if(!$.body)return"";let Z=$.body.getReader(),X=[],Q=0;for(;;){let{done:G,value:J}=await Z.read();if(G)break;if(Q+J.length>YO$){let W=YO$-Q;if(W>0)X.push(J.subarray(0,W));await Z.cancel();break}X.push(J),Q+=J.length}let Y;if(X.length===1)Y=X[0];else{Y=new Uint8Array(X.reduce((J,W)=>J+W.length,0));let G=0;for(let J of X)Y.set(J,G),G+=J.length}return new TextDecoder("utf-8").decode(Y)}var GO$="urn:ietf:params:oauth:grant-type:jwt-bearer",JO$="refresh_token",PD0="/v1/oauth/token",AC="oauth-2025-04-20",WO$="oidc-federation-2026-04-01",KO$=120,ry=30,FO$=5,YO$=1048576,Wa0=2000,dj4,A6;var ay=w(()=>{E5();dj4=new Set(["error","error_description","error_uri"]);A6=class A6 extends F1{constructor($,Z=null,X=null,Q=null){super($);this.statusCode=Z,this.body=X,this.requestId=Q}}});function n3(){return Math.floor(Date.now()/1000)}class Ka0{constructor($,Z){this.cached=null,this.pendingRefresh=null,this.nextForce=!1,this.lastAdvisoryError=0,this.provider=$,this.onAdvisoryRefreshError=Z}async getToken(){let $=this.nextForce;this.nextForce=!1;let Z=this.cached;if($||Z==null)return(await this.refresh($)).token;if(Z.expiresAt==null)return Z.token;let X=Z.expiresAt-n3();if(X>KO$)return Z.token;if(X>ry)return this.backgroundRefresh(),Z.token;return(await this.refresh()).token}invalidate(){this.cached=null,this.nextForce=!0}refresh($=!1){if(this.pendingRefresh&&!$)return this.pendingRefresh;return this.doRefresh($)}backgroundRefresh(){if(this.pendingRefresh)return;if(n3()-this.lastAdvisoryError<FO$)return;this.doRefresh().catch(($)=>{this.lastAdvisoryError=n3(),this.onAdvisoryRefreshError?.($)})}doRefresh($=!1){return this.pendingRefresh=this.provider($?{forceRefresh:!0}:void 0).then((Z)=>{return this.cached=Z,this.pendingRefresh=null,Z},(Z)=>{throw this.pendingRefresh=null,Z}),this.pendingRefresh}}var HO$=w(()=>{ay()});var a8=($)=>{if(typeof globalThis.process<"u")return globalThis.process.env?.[$]?.trim()||void 0;if(typeof globalThis.Deno<"u")return globalThis.Deno.env?.get?.($)?.trim()||void 0;return};function OO$($){let Z=0;for(let Y of $)Z+=Y.length;let X=new Uint8Array(Z),Q=0;for(let Y of $)X.set(Y,Q),Q+=Y.length;return X}function sy($){let Z;return(NO$??(Z=new globalThis.TextEncoder,NO$=Z.encode.bind(Z)))($)}function Fa0($){let Z;return(UO$??(Z=new globalThis.TextDecoder,UO$=Z.decode.bind(Z)))($)}var NO$,UO$;var BO$=w(()=>{E5()});function Yt(){}function qD0($,Z,X){if(!Z||MD0[$]>MD0[X])return Yt;else return Z[$].bind(Z)}function Na0($,Z){let X=wO$.get($);if(X&&X[0]===Z)return X[1];let Q={error:qD0("error",$,Z),warn:qD0("warn",$,Z),info:qD0("info",$,Z),debug:qD0("debug",$,Z)};return wO$.set($,[Z,Q]),Q}function x4($){let Z=$.logger,X=$.logLevel??"off";if(!Z)return ij4;return Na0(Z,X)}function LO$(){let $=a8("ANTHROPIC_LOG");if(!Ha0||$!==DO$)DO$=$,Ha0=Na0(console,kD0($,"process.env['ANTHROPIC_LOG']",Na0(console,Gt))??Gt);return Ha0}var Gt="warn",MD0,kD0=($,Z,X)=>{if(!$)return;if(gU$(MD0,$))return $;X.warn(`${Z} was set to ${JSON.stringify($)}, expected one of ${JSON.stringify(Object.keys(MD0))}`);return},ij4,wO$,DO$,Ha0,bK=($)=>{if($.options)$.options={...$.options},delete $.options.headers;if($.headers)$.headers=Object.fromEntries(($.headers instanceof Headers?[...$.headers]:Object.entries($.headers)).map(([Z,X])=>[Z,Z.toLowerCase()==="authorization"||Z.toLowerCase()==="api-key"||Z.toLowerCase()==="x-api-key"||Z.toLowerCase()==="cookie"||Z.toLowerCase()==="set-cookie"?"***":X]));if("retryOfRequestLogID"in $){if($.retryOfRequestLogID)$.retryOf=$.retryOfRequestLogID;delete $.retryOfRequestLogID}return $};var xK=w(()=>{i3();MD0={off:0,error:200,warn:300,info:400,debug:500};ij4={error:Yt,warn:Yt,info:Yt,debug:Yt},wO$=new WeakMap});var Ua0=w(()=>{i3();BO$();xK();Ja0()});function EO$($){if(!$)throw Error("profile name is empty");if($==="."||$==="..")throw Error(`profile name "${$}" is not allowed`);if($.includes("/")||$.includes("\\"))throw Error(`profile name "${$}" must not contain path separators`);if(!pj4.test($))throw Error(`profile name "${$}" contains disallowed characters (allowed: letters, digits, '_', '.', '-')`)}var VD0="1.0",pj4,jO$=async($)=>{var Z,X;let Q=await Oa0();if(Q===null)return null;let Y=$??await PO$();if(Y===null)return null;EO$(Y);let G=await import("fs"),W=(await import("path")).join(Q,"configs",`${Y}.json`),K;try{K=await G.promises.readFile(W,"utf-8")}catch(N){if(N?.code!=="ENOENT")throw Error(`failed to read config file ${W}: ${N}`);K=null}if(K===null){let N=a8("ANTHROPIC_ORGANIZATION_ID"),U=a8("ANTHROPIC_IDENTITY_TOKEN_FILE"),O=a8("ANTHROPIC_FEDERATION_RULE_ID");if(O&&N)return{fromFile:!1,config:{organization_id:N,workspace_id:a8("ANTHROPIC_WORKSPACE_ID"),base_url:a8("ANTHROPIC_BASE_URL"),authentication:{type:"oidc_federation",federation_rule_id:O,service_account_id:a8("ANTHROPIC_SERVICE_ACCOUNT_ID"),identity_token:U?{source:"file",path:U}:void 0,scope:a8("ANTHROPIC_SCOPE")}}};return null}let F;try{F=JSON.parse(K)}catch(N){throw Error(`failed to parse config file ${W}: ${N}`)}if(!F.authentication)throw Error(`config file ${W} is missing "authentication"`);let H=F.authentication.type;if(H!=="oidc_federation"&&H!=="user_oauth")throw Error(`authentication.type "${H}" is not a known authentication type`);if(F.organization_id??(F.organization_id=a8("ANTHROPIC_ORGANIZATION_ID")),F.workspace_id??(F.workspace_id=a8("ANTHROPIC_WORKSPACE_ID")),F.base_url??(F.base_url=a8("ANTHROPIC_BASE_URL")),(Z=F.authentication).scope??(Z.scope=a8("ANTHROPIC_SCOPE")),F.authentication.type==="oidc_federation"){if(!F.authentication.identity_token){let N=a8("ANTHROPIC_IDENTITY_TOKEN_FILE");if(N)F.authentication.identity_token={source:"file",path:N}}if(!F.authentication.federation_rule_id)F.authentication.federation_rule_id=a8("ANTHROPIC_FEDERATION_RULE_ID")??"";(X=F.authentication).service_account_id??(X.service_account_id=a8("ANTHROPIC_SERVICE_ACCOUNT_ID"))}return{config:F,fromFile:!0}},zO$=async($,Z)=>{if($?.authentication.credentials_path)return $.authentication.credentials_path;let X=await Oa0();if(!X)return null;let Q=Z??await PO$();if(!Q)return null;return EO$(Q),(await import("path")).join(X,"credentials",`${Q}.json`)},Oa0=async()=>{if(!nj4())return null;let $=await import("path"),Z=a8("ANTHROPIC_CONFIG_DIR");if(Z)return Z;if(Xt()["X-Stainless-OS"]==="Windows"){let G=a8("APPDATA");if(G)return $.join(G,"Anthropic");let J=a8("USERPROFILE");if(J)return $.join(J,"AppData","Roaming","Anthropic");return null}let Q=a8("XDG_CONFIG_HOME");if(Q)return $.join(Q,"anthropic");let Y=a8("HOME");if(Y)return $.join(Y,".config","anthropic");return null},nj4=()=>{let $=Xt()["X-Stainless-Runtime"];return $==="node"||$==="deno"},PO$=async()=>{let $=await Oa0();if(!$)return null;let Z=a8("ANTHROPIC_PROFILE");if(Z)return Z;let X=await import("fs"),Y=(await import("path")).join($,"active_config");try{return(await X.promises.readFile(Y,"utf-8")).trim()||"default"}catch(G){if(G?.code!=="ENOENT")throw Error(`failed to read ${Y}: ${G}`);return"default"}};var Ba0=w(()=>{ED0();Ua0();pj4=/^[A-Za-z0-9_.-]+$/});function wa0($){if(!$)throw new F1("Identity token file path is empty");return async()=>{let Z=await import("fs"),X;try{X=await Z.promises.readFile($,"utf-8")}catch(Y){throw new F1(`Failed to read identity token file at ${$}: ${Y}`)}let Q=X.trim();if(!Q)throw new F1(`Identity token file at ${$} is empty`);return Q}}function AO$($){if(!$)throw new F1("Identity token value is empty");return()=>$}var TO$=w(()=>{E5()});function RO$($){return async()=>{AD0($.baseURL);let Z=await $.identityTokenProvider();if(Z.length>16384)throw new A6(`Identity token is ${Math.ceil(Z.length/1024)} KiB, exceeds the 16 KiB assertion limit`);let X={grant_type:GO$,assertion:Z,federation_rule_id:$.federationRuleId,organization_id:$.organizationId};if($.serviceAccountId)X.service_account_id=$.serviceAccountId;if($.workspaceId)X.workspace_id=$.workspaceId;let Q=`${$.baseURL}${PD0}`,Y;try{Y=await $.fetch(Q,{method:"POST",headers:{"Content-Type":"application/json","anthropic-beta":`${AC},${WO$}`,"User-Agent":$.userAgent||`anthropic-sdk-typescript/${NJ} oidcFederationProvider`},body:JSON.stringify(X)})}catch(K){throw new A6(`Failed to reach token endpoint ${Q}: ${K}`)}let G=Y.headers.get("Request-Id");if(!Y.ok){let K=await Y.text().catch(()=>""),F=oQ(K),H="";if(Y.status===401)H=` Ensure your federation rule matches your identity token. ${$.workspaceId?"":"If your federation rule is scoped to multiple workspaces, set the ANTHROPIC_WORKSPACE_ID environment variable, the 'workspace_id' config key, or the `workspaceId` option. "}View your authentication events in the Workload identity page of Claude Console for more details.`;throw new A6(`Token exchange failed with status ${Y.status}${G?` (request-id ${G})`:""}: ${F}${H}`,Y.status,F,G)}let J=await TD0(Y,G),W=Number(J.expires_in);if(!Number.isFinite(W))throw new A6(`Token endpoint response missing required fields: ${JSON.stringify(oQ(J))}`,Y.status,oQ(J),G);return{token:J.access_token,expiresAt:n3()+W}}}var IO$=w(()=>{ay()});function qO$($){return async(Z)=>{let X=await import("fs");await RD0($.credentialsPath,$.onSafetyWarning);let Q;try{Q=await X.promises.readFile($.credentialsPath,"utf-8")}catch(L){throw new A6(`Credentials file not found at ${$.credentialsPath}: ${L}`)}let Y;try{Y=JSON.parse(Q)}catch(L){throw new A6(`Credentials file at ${$.credentialsPath} is not valid JSON: ${L}`)}let G=Y.access_token;if(!G)throw new A6(`Credentials file at ${$.credentialsPath} must include 'access_token'`);let J=Y.expires_at;if(!Z?.forceRefresh&&(J==null||n3()<J-ry))return{token:G,expiresAt:J??null};let W=Y.refresh_token;if(!$.clientId||!W)throw new A6(`Access token at ${$.credentialsPath} has expired and no refresh is available (client_id ${$.clientId?"set":"empty"}, refresh_token ${W?"set":"empty"})`);AD0($.baseURL);let K={grant_type:JO$,refresh_token:W,client_id:$.clientId},F=`${$.baseURL}${PD0}`,H;try{H=await $.fetch(F,{method:"POST",headers:{"Content-Type":"application/json","anthropic-beta":AC,"User-Agent":$.userAgent||`anthropic-sdk-typescript/${NJ} userOAuthProvider`},body:JSON.stringify(K)})}catch(L){throw new A6(`User OAuth refresh failed to reach token endpoint: ${L}`)}let N=H.headers.get("Request-Id");if(!H.ok){let L=await H.text().catch(()=>"");throw new A6(`User OAuth refresh failed (HTTP ${H.status}): ${oQ(L)}`,H.status,oQ(L),N)}let U=await TD0(H,N),O=Number(U.expires_in);if(!Number.isFinite(O))throw new A6(`User OAuth refresh response missing or invalid expires_in: ${JSON.stringify(oQ(U))}`,H.status,oQ(U),N);let B=n3()+O,D=U.refresh_token||W;return await ID0($.credentialsPath,{...Y,version:VD0,type:"oauth_token",access_token:U.access_token,expires_at:B,refresh_token:D}),{token:U.access_token,expiresAt:B}}}var MO$=w(()=>{Ba0();ay()});function Da0($,Z){let X=$.authentication.credentials_path??null,Q=($.base_url||Z.baseURL).replace(/\/+$/,""),Y=tj4($,X,Q,Z),G={};if($.workspace_id&&$.authentication.type==="user_oauth")G["anthropic-workspace-id"]=$.workspace_id;return{provider:Y,extraHeaders:G,baseURL:$.base_url||void 0}}async function kO$($,Z){let X=await jO$(Z);if(!X)return null;let{config:Q,fromFile:Y}=X,G=Q.authentication.credentials_path||!Y?Q:{...Q,authentication:{...Q.authentication,credentials_path:await zO$(Q,Z)??void 0}};return Da0(G,$)}function tj4($,Z,X,Q){switch($.authentication.type){case"oidc_federation":{let Y=$.authentication,G=oj4(Y);if(!G)throw new A6("oidc_federation config requires an identity token (set authentication.identity_token, ANTHROPIC_IDENTITY_TOKEN_FILE, or ANTHROPIC_IDENTITY_TOKEN)");if(!Y.federation_rule_id)throw new A6("oidc_federation config requires 'federation_rule_id'. Set it in authentication.federation_rule_id in your profile, or via ANTHROPIC_FEDERATION_RULE_ID (profile takes precedence).");if(!$.organization_id)throw new A6("oidc_federation config requires organization_id (set ANTHROPIC_ORGANIZATION_ID or config.organization_id)");let J=RO$({identityTokenProvider:G,federationRuleId:Y.federation_rule_id,organizationId:$.organization_id,serviceAccountId:Y.service_account_id,workspaceId:$.workspace_id,baseURL:X,fetch:Q.fetch,userAgent:Q.userAgent});if(Z)return rj4(J,Z,Q.onCacheWriteError,Q.onSafetyWarning);return J}case"user_oauth":{if(!Z)throw new A6("user_oauth config requires authentication.credentials_path (or load via a profile so it defaults to <config_dir>/credentials/<profile>.json)");return qO$({credentialsPath:Z,clientId:$.authentication.client_id,baseURL:X,fetch:Q.fetch,userAgent:Q.userAgent,onSafetyWarning:Q.onSafetyWarning})}default:{let Y=$.authentication.type;throw new A6(`authentication.type "${Y}" is not a known authentication type`)}}}function oj4($){if($.identity_token){let Q=$.identity_token.source;if(Q!=="file")throw new A6(`identity_token.source "${Q}" is not supported by this SDK version (only "file")`);if(!$.identity_token.path)throw new A6('identity_token.source "file" requires a non-empty path');return wa0($.identity_token.path)}let Z=a8("ANTHROPIC_IDENTITY_TOKEN_FILE");if(Z)return wa0(Z);let X=a8("ANTHROPIC_IDENTITY_TOKEN");if(X)return AO$(X);return null}function rj4($,Z,X,Q){return async(Y)=>{let G=await import("fs");await RD0(Z,Q);let J;try{let K=await G.promises.readFile(Z,"utf-8");J=JSON.parse(K);let F=J?.access_token;if(F&&!Y?.forceRefresh){let H=J?.expires_at;if(H==null||n3()<H-ry)return{token:F,expiresAt:H??null}}}catch(K){if(K?.code!=="ENOENT"&&!(K instanceof SyntaxError))X?.(K)}let W=await $(Y);try{await ID0(Z,{...J??{},version:VD0,type:"oauth_token",access_token:W.token,expires_at:W.expiresAt})}catch(K){X?.(K)}return W}}var VO$=w(()=>{Ba0();ay();TO$();IO$();MO$()});class yB{constructor(){aY.set(this,void 0),sY.set(this,void 0),o0(this,aY,new Uint8Array,"f"),o0(this,sY,null,"f")}decode($){if($==null)return[];let Z=$ instanceof ArrayBuffer?new Uint8Array($):typeof $==="string"?sy($):$;o0(this,aY,OO$([d(this,aY,"f"),Z]),"f");let X=[],Q;while((Q=aj4(d(this,aY,"f"),d(this,sY,"f")))!=null){if(Q.carriage&&d(this,sY,"f")==null){o0(this,sY,Q.index,"f");continue}if(d(this,sY,"f")!=null&&(Q.index!==d(this,sY,"f")+1||Q.carriage)){X.push(Fa0(d(this,aY,"f").subarray(0,d(this,sY,"f")-1))),o0(this,aY,d(this,aY,"f").subarray(d(this,sY,"f")),"f"),o0(this,sY,null,"f");continue}let Y=d(this,sY,"f")!==null?Q.preceding-1:Q.preceding,G=Fa0(d(this,aY,"f").subarray(0,Y));X.push(G),o0(this,aY,d(this,aY,"f").subarray(Q.index),"f"),o0(this,sY,null,"f")}return X}flush(){if(!d(this,aY,"f").length)return[];return this.decode(`
|
|
1582
1582
|
`)}}function aj4($,Z){for(let Y=Z??0;Y<$.length;Y++){if($[Y]===10)return{preceding:Y,index:Y+1,carriage:!1};if($[Y]===13)return{preceding:Y,index:Y+1,carriage:!0}}return null}function SO$($){for(let Q=0;Q<$.length-1;Q++){if($[Q]===10&&$[Q+1]===10)return Q+2;if($[Q]===13&&$[Q+1]===13)return Q+2;if($[Q]===13&&$[Q+1]===10&&Q+3<$.length&&$[Q+2]===13&&$[Q+3]===10)return Q+4}return-1}var aY,sY;var La0=w(()=>{tQ();aY=new WeakMap,sY=new WeakMap;yB.NEWLINE_CHARS=new Set([`
|
|
1583
1583
|
`,"\r"]);yB.NEWLINE_REGEXP=/\r\n|[\n\r]/g});async function*CO$($,Z){if(!$.body){if(Z.abort(),typeof globalThis.navigator<"u"&&globalThis.navigator.product==="ReactNative")throw new F1("The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api");throw new F1("Attempted to iterate over a response with no body")}let X=new _O$,Q=new yB,Y=Qt($.body);for await(let G of sj4(Y))for(let J of Q.decode(G)){let W=X.decode(J);if(W)yield W}for(let G of Q.flush()){let J=X.decode(G);if(J)yield J}}async function*sj4($){let Z=new Uint8Array;for await(let X of $){if(X==null)continue;let Q=X instanceof ArrayBuffer?new Uint8Array(X):typeof X==="string"?sy(X):X,Y=new Uint8Array(Z.length+Q.length);Y.set(Z),Y.set(Q,Z.length),Z=Y;let G;while((G=SO$(Z))!==-1)yield Z.slice(0,G),Z=Z.slice(G)}if(Z.length>0)yield Z}class _O${constructor(){this.event=null,this.data=[],this.chunks=[]}decode($){if($.endsWith("\r"))$=$.substring(0,$.length-1);if(!$){if(!this.event&&!this.data.length)return null;let Y={event:this.event,data:this.data.join(`
|
|
1584
1584
|
`),raw:this.chunks};return this.event=null,this.data=[],this.chunks=[],Y}if(this.chunks.push($),$.startsWith(":"))return null;let[Z,X,Q]=ej4($,":");if(Q.startsWith(" "))Q=Q.substring(1);if(Z==="event")this.event=Q;else if(Z==="data")this.data.push(Q);return null}}function ej4($,Z){let X=$.indexOf(Z);if(X!==-1)return[$.substring(0,X),Z,$.substring(X+Z.length)];return[$,"",""]}var Jt,HX;var Wt=w(()=>{tQ();E5();La0();i3();xK();E5();HX=class HX{constructor($,Z,X){this.iterator=$,Jt.set(this,void 0),this.controller=Z,o0(this,Jt,X,"f")}static rawEvents($,Z=new AbortController){return CO$($,Z)}static fromSSEResponse($,Z,X){let Q=!1,Y=X?x4(X):console;async function*G(){if(Q)throw new F1("Cannot iterate over a consumed stream, use `.tee()` to split the stream.");Q=!0;let J=!1;try{for await(let W of CO$($,Z)){if(W.event==="completion")try{yield JSON.parse(W.data)}catch(K){throw Y.error("Could not parse message into JSON:",W.data),Y.error("From chunk:",W.raw),K}if(W.event==="message_start"||W.event==="message_delta"||W.event==="message_stop"||W.event==="content_block_start"||W.event==="content_block_delta"||W.event==="content_block_stop"||W.event==="message"||W.event==="user.message"||W.event==="user.interrupt"||W.event==="user.tool_confirmation"||W.event==="user.custom_tool_result"||W.event==="user.tool_result"||W.event==="agent.message"||W.event==="agent.thinking"||W.event==="agent.tool_use"||W.event==="agent.tool_result"||W.event==="agent.mcp_tool_use"||W.event==="agent.mcp_tool_result"||W.event==="agent.custom_tool_use"||W.event==="agent.thread_context_compacted"||W.event==="session.status_running"||W.event==="session.status_idle"||W.event==="session.status_rescheduled"||W.event==="session.status_terminated"||W.event==="session.error"||W.event==="session.deleted"||W.event==="session.updated"||W.event==="span.model_request_start"||W.event==="span.model_request_end"||W.event==="span.outcome_evaluation_start"||W.event==="span.outcome_evaluation_ongoing"||W.event==="span.outcome_evaluation_end"||W.event==="user.define_outcome"||W.event==="agent.thread_message_received"||W.event==="agent.thread_message_sent"||W.event==="agent.session_thread_message_received"||W.event==="agent.session_thread_message_sent"||W.event==="session.thread_created"||W.event==="session.thread_status_created"||W.event==="session.thread_status_running"||W.event==="session.thread_status_idle"||W.event==="session.thread_status_rescheduled"||W.event==="session.thread_status_terminated")try{yield JSON.parse(W.data)}catch(K){throw Y.error("Could not parse message into JSON:",W.data),Y.error("From chunk:",W.raw),K}if(W.event==="ping")continue;if(W.event==="error"){let K=Zt(W.data)??W.data,F=K?.error?.type;throw new K9(void 0,K,void 0,$.headers,F)}}J=!0}catch(W){if(HJ(W))return;throw W}finally{if(!J)Z.abort()}}return new HX(G,Z,X)}static fromReadableStream($,Z,X){let Q=!1;async function*Y(){let J=new yB,W=Qt($);for await(let K of W)for(let F of J.decode(K))yield F;for(let K of J.flush())yield K}async function*G(){if(Q)throw new F1("Cannot iterate over a consumed stream, use `.tee()` to split the stream.");Q=!0;let J=!1;try{for await(let W of Y()){if(J)continue;if(W)yield JSON.parse(W)}J=!0}catch(W){if(HJ(W))return;throw W}finally{if(!J)Z.abort()}}return new HX(G,Z,X)}[(Jt=new WeakMap,Symbol.asyncIterator)](){return this.iterator()}tee(){let $=[],Z=[],X=this.iterator(),Q=(Y)=>{return{next:()=>{if(Y.length===0){let G=X.next();$.push(G),Z.push(G)}return Y.shift()}}};return[new HX(()=>Q($),this.controller,d(this,Jt,"f")),new HX(()=>Q(Z),this.controller,d(this,Jt,"f"))]}toReadableStream(){let $=this,Z;return sr0({async start(){Z=$[Symbol.asyncIterator]()},async pull(X){try{let{value:Q,done:Y}=await Z.next();if(Y)return X.close();let G=sy(JSON.stringify(Q)+`
|
|
@@ -2910,7 +2910,7 @@ Respond with the structured verdict and a short reason.`,Dg$;var Eg$=w(()=>{v4()
|
|
|
2910
2910
|
${G.join(`
|
|
2911
2911
|
`)}`:Y}function iJ6($){let Z=new Set;for(let X of $)for(let Q of X.split(`
|
|
2912
2912
|
`)){let Y=Q.trim();if(/^Co-authored-by:\s/i.test(Y))Z.add(Y)}return[...Z]}var Xh$=200,xJ6=12,gJ6,uJ6=300,y91=3;var g91=w(()=>{S_();ZA0();gJ6={aheadBy:0,behindBy:0,files:[]}});function nJ6($){if(!$||$.includes(".."))return!1;return pJ6.test($)}function Yh$($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!nJ6(Z))return null;let{__resolveType:X,...Q}=$;return{resolveType:Z,payload:Q}}function Gh$($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var pJ6;var Jh$=w(()=>{pJ6=/^[\w./@-]+$/});function h91($){let Z;try{Z=new URL($)}catch{return null}if(!Z.hostname.endsWith(".localhost"))return null;let X=Z.host;return Z.hostname="127.0.0.1",{url:Z.toString(),hostHeader:X}}function wa($,Z){let X=$?.githubRepo;if(!X?.owner||!X?.name)return null;if(!X.connectionId)return X;if(!Z.includes(X.connectionId))return null;return X}async function Wh$($,Z,X,Q){if(!Q.connectionId)throw new __("Push requires a connected GitHub account. Connect mcp-github for this project and restart the sandbox.");let Y=$.organization?.id;if(!Y)throw new __(Q9);await rO({ctx:$,connectionId:Q.connectionId,organizationId:Y,forceRefresh:!0,onLegacyMintError:(H)=>{let N=H instanceof Error?H.message:Q9;throw new __(N)}});let{cloneUrl:G,gitUserName:J,gitUserEmail:W}=await aO(Q.connectionId,Q.owner,Q.name,$.db,$.vault).catch((H)=>{let{code:N,message:U}=q4$(H instanceof Error?H.message:String(H));throw N?new __(U):H}),K=th($),F=await Z.proxyDaemonRequest(X,"/_sandbox/config",{method:"PUT",headers:new Headers({"content-type":"application/json"}),body:JSON.stringify({git:{repository:{cloneUrl:G},identity:{userName:J,userEmail:W}},...K?{operator:K}:{}})});if(!F.ok){let H=await wB(F,tJ6).catch(()=>F.statusText);throw Error(`Failed to refresh sandbox git credentials (${F.status}): ${H}`)}}var tJ6=10485760,__;var u91=w(()=>{mG();dP0();ip();Gm0();mx();__=class __ extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function rJ6($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!oJ6.test(Z))throw Error(`Invalid branch name: ${$}`)}function v_($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(sJ6)])}function eJ6($,Z,X){let Q=w5($)[Z]?.[X];return!!Q&&Object.keys(IY(Q)).length>0}function f_($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}async function $u($){let{virtualMcpMetadata:Z,connectionIds:X}=$.get("vmClaim"),Q=$.var.studioContext,Y=wa(Z,X);if(!Y)throw new g4(404,"AUTH","repo","Project has no GitHub repository");let G=t(Q);return iP0(Q,G.id,Y)}function c91($,Z){if(Z instanceof mP0)return $.json({error:Z.message},429,{...C5,...Z.retryAfterMs===null?{}:{"Retry-After":String(Math.ceil(Z.retryAfterMs/1000))}});if(Z instanceof g4){let Q=Z.status===404?404:Z.status===409||Z.status===422?409:502;return $.json({error:Z.message},Q,C5)}let X=Z instanceof Error?Z.message:String(Z);return $.json({error:X},502,C5)}async function Hh$($,Z,X){let Q;try{Q=await fetch(Z,X)}catch{return $.json({error:"Preview unreachable"},502)}let Y;try{Y=await Q.text()}catch{return $.json({error:"Preview unreachable"},502)}return new Response(Y,{status:Q.status,headers:{"content-type":Q.headers.get("content-type")??"application/json"}})}async function Nh$($){try{let Z=await $u($),X=await XA0(Z,$.get("vmClaim").branch);return $.json(X,200,C5)}catch(Z){return c91($,Z)}}function Da($,Z){let Q=(GA0.get($)??Promise.resolve()).catch(()=>{}).then(Z),Y=Q.catch(()=>{});return GA0.set($,Y),Y.finally(()=>{if(GA0.get($)===Y)GA0.delete($)}),Q}async function mZ($,Z,X){if($.get("vmClaim").fastPreview)return $.json({error:"sandbox not found: Fast Preview projects are sandbox-less"},404,C5);let Q=f_($);if(Q instanceof Response)return Q;let{claimName:Y,userId:G,projectRef:J}=$.get("vmClaim"),W=X?.method??"POST",K=null,F=new Headers;if(X?.jsonBody!==void 0)K=X.jsonBody,F.set("content-type","application/json");else if(X?.forwardJsonBody)K=await $.req.text(),F.set("content-type","application/json");let H=X?.signal,N={method:W,headers:F,body:K,...H?{signal:H}:{}},U=async()=>{let O=await Q.proxyDaemonRequest(Y,Z,N);if(X?.map404to410&&O.status===404){try{await O.body?.cancel()}catch{}if(await Q.adoptLiveClaim?.({userId:G,projectRef:J},Y))O=await Q.proxyDaemonRequest(Y,Z,N);if(O.status===404){try{await O.body?.cancel()}catch{}return new Response(JSON.stringify({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."}),{status:410,headers:{"content-type":"application/json",...C5}})}}let B=await O.text(),D=X?.redactRepoDirUnlessDesktop&&Q.kind!=="user-desktop"?Z36(B):B,L=O.headers.get("content-type")??"application/json";return new Response(D,{status:O.status,headers:{"content-type":L,...C5}})};try{if(H){let O=U();return O.catch(()=>{}),await Promise.race([O,new Promise((D,L)=>{if(H.aborted)return L(H.reason);H.addEventListener("abort",()=>L(H.reason),{once:!0})})])}return await U()}catch(O){let B=O instanceof Error?O.message:String(O);return $.json({error:`Daemon unreachable: ${B}`},502)}}function Z36($){try{let Z=JSON.parse($);if(Z&&typeof Z==="object"&&!Array.isArray(Z)&&"repoDir"in Z)return JSON.stringify({...Z,repoDir:null})}catch{}return $}async function JA0($,Z,X,Q="GET",Y){let G=await $.proxyDaemonRequest(Z,X,{method:Q,headers:new Headers,body:null});if(G.status===404&&Y){try{await G.body?.cancel()}catch{}if(await $.adoptLiveClaim?.(Y,Z))G=await $.proxyDaemonRequest(Z,X,{method:Q,headers:new Headers,body:null})}if(G.status===404){try{await G.body?.cancel()}catch{}throw Error("SANDBOX_GONE")}let J=await G.text();if(!G.ok){let W=`Daemon error (${G.status})`;try{W=JSON.parse(J).error??W}catch{}throw Error(W)}return JSON.parse(J)}function X36($){return Uh$.includes($)}var oJ6,Kh$=524288,aJ6=65536,sJ6=1e4,Fh$=2000,$36,GA0,C5,Uh$,Oh$=()=>{let $=new H1;$.use("/:virtualMcpId/:branch/*",$36),$.post("/:virtualMcpId/:branch/write",(X)=>mZ(X,"/_sandbox/write",{forwardJsonBody:!0,signal:v_(X)})),$.post("/:virtualMcpId/:branch/unlink",(X)=>mZ(X,"/_sandbox/unlink",{forwardJsonBody:!0,signal:v_(X)})),$.post("/:virtualMcpId/:branch/mkdir",(X)=>mZ(X,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:v_(X)})),$.post("/:virtualMcpId/:branch/rename",(X)=>mZ(X,"/_sandbox/rename",{forwardJsonBody:!0,signal:v_(X)})),$.post("/:virtualMcpId/:branch/read",(X)=>mZ(X,"/_sandbox/read",{forwardJsonBody:!0,signal:v_(X)})),$.post("/:virtualMcpId/:branch/glob",(X)=>mZ(X,"/_sandbox/glob",{forwardJsonBody:!0,signal:v_(X)})),$.post("/:virtualMcpId/:branch/grep",(X)=>mZ(X,"/_sandbox/grep",{forwardJsonBody:!0,signal:v_(X)})),$.post("/:virtualMcpId/:branch/exec/:script",async(X)=>{let Q=X.req.param("script");if(!Q)return X.json({error:"missing script name"},400);return mZ(X,`/_sandbox/exec/${encodeURIComponent(Q)}`)}),$.post("/:virtualMcpId/:branch/exec/:script/kill",async(X)=>{let Q=X.req.param("script");if(!Q)return X.json({error:"missing script name"},400);return mZ(X,`/_sandbox/exec/${encodeURIComponent(Q)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(X)=>mZ(X,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDirUnlessDesktop:!0})),$.put("/:virtualMcpId/:branch/config",(X)=>mZ(X,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(X)=>{let Q=X.req.param("step");if(!Q||!X36(Q))return X.json({error:`step must be one of: ${Uh$.join(", ")}`},400);if(Q==="start"){let Y=X.get("vmClaim");if(Y.runner){let G=t(X.var.studioContext),J=Ky(Y.virtualMcpMetadata);try{await dO0({ctx:X.var.studioContext,runner:Y.runner,handle:Y.claimName,orgId:G.id,userId:Y.callerUserId,entries:J})}catch(W){let K=W instanceof Error?W.message:String(W);return X.json({error:`Failed to push env to daemon: ${K}`},502)}}}return mZ(X,`/_sandbox/setup/${Q}`,{signal:X.req.raw.signal,map404to410:!0})}),$.get("/:virtualMcpId/:branch/events",(X)=>{let Q=X.get("vmClaim");if(!Q.runner)return IN(X,async(Y)=>{await Y.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:"No sandbox runner configured on this studio instance."})})});return Hg$(X,{ctx:X.var.studioContext,claimName:Q.claimName,runner:Q.runner,virtualMcpId:Q.virtualMcpId,branch:Q.branch,userId:Q.userId,projectRef:Q.projectRef,virtualMcpMetadata:Q.virtualMcpMetadata})}),$.get("/:virtualMcpId/:branch/git/status",(X)=>{if(X.get("vmClaim").fastPreview)return Nh$(X);return Z(X)});let Z=(X)=>mZ(X,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([X.req.raw.signal,AbortSignal.timeout(Fh$)])});return $.post("/:virtualMcpId/:branch/git/status",(X)=>{if(X.get("vmClaim").fastPreview)return Nh$(X);return mZ(X,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([X.req.raw.signal,AbortSignal.timeout(Fh$)])})}),$.post("/:virtualMcpId/:branch/git/diff",async(X)=>{let Q=X.get("vmClaim");if(Q.fastPreview)try{let Y=await X.req.json().catch(()=>({})),G=await $u(X),J=await QA0(G,Q.branch,Y.base);return X.json(J,200,C5)}catch(Y){return c91(X,Y)}return mZ(X,"/_sandbox/git/diff",{forwardJsonBody:!0,map404to410:!0})}),$.post("/:virtualMcpId/:branch/git/publish",async(X)=>{if(X.get("vmClaim").fastPreview)return X.json({ok:!0},200,C5);let Q=f_(X);if(Q instanceof Response)return Q;let{claimName:Y,virtualMcpMetadata:G,connectionIds:J}=X.get("vmClaim"),W=X.var.studioContext;return Da(Y,async()=>{try{await E91(W,Q,Y);let K=wa(G,J);if(K)await Wh$(W,Q,Y,K)}catch(K){if(K instanceof __)return X.json({error:K.message},403,C5);let F=K instanceof Error?K.message:String(K);return X.json({error:F},502,C5)}return mZ(X,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/discard",async(X)=>{let Q=X.get("vmClaim");if(Q.fastPreview)return Da(Q.claimName,async()=>{let Y=await X.req.json().catch(()=>({})),G=Array.isArray(Y.filepaths)?Y.filepaths.filter((J)=>typeof J==="string"):[];if(G.length===0)return X.json({error:"filepaths is required"},400,C5);try{let J=await $u(X);return await Qh$(J,Q.branch,G),X.json({ok:!0},200,C5)}catch(J){let W=J instanceof g4&&J.status===409?409:502,K=J instanceof Error?J.message:String(J);return X.json({error:K},W,C5)}});return Da(Q.claimName,()=>mZ(X,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0}))}),$.post("/:virtualMcpId/:branch/git/rebase",async(X)=>{let Q=X.get("vmClaim");if(Q.fastPreview)return Da(Q.claimName,async()=>{try{let W=await X.req.json().catch(()=>({})),K=await $u(X),F=W.base??await K.getDefaultBranch();return await YA0(K,Q.branch,F),X.json({ok:!0},200,C5)}catch(W){return c91(X,W)}});let Y=f_(X);if(Y instanceof Response)return Y;let{claimName:G}=X.get("vmClaim"),J=X.var.studioContext;return Da(G,async()=>{try{await E91(J,Y,G)}catch(W){let K=W instanceof Error?W.message:String(W);return X.json({error:K},502,C5)}return mZ(X,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",k9({maxSize:Kh$,onError:(X)=>X.json({error:"Payload too large"},413,C5)}),async(X)=>{let Q=X.get("vmClaim"),Y=null;if(!Q.fastPreview){let F=f_(X);if(F instanceof Response)return F;Y=F}let{claimName:G,userId:J,projectRef:W}=Q,K=X.var.studioContext;try{let F=await X.req.json().catch(()=>({})),H=F.status,N=F.diff,U=N!=null&&typeof N.diffs==="object"&&N.diffs!==null,[O,B]=P91(H)&&U?[H,N]:Y?await Promise.all([JA0(Y,G,"/_sandbox/git/status","GET",{userId:J,projectRef:W}),JA0(Y,G,"/_sandbox/git/diff","GET",{userId:J,projectRef:W})]):await(async()=>{let L=await $u(X);return Promise.all([XA0(L,Q.branch),QA0(L,Q.branch)])})(),D=await wg$(K,O,B);return X.json(D,200,C5)}catch(F){let H=F instanceof Error?F.message:String(F);if(H==="SANDBOX_GONE")return X.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,C5);return X.json({error:H},502,C5)}}),$.post("/:virtualMcpId/:branch/git/judge-review",k9({maxSize:Kh$,onError:(X)=>X.json({error:"Payload too large"},413,C5)}),async(X)=>{let Q=X.get("vmClaim"),Y=null;if(!Q.fastPreview){let F=f_(X);if(F instanceof Response)return F;Y=F}let{claimName:G,userId:J,projectRef:W}=Q,K=X.var.studioContext;try{let F=await X.req.json().catch(()=>({})),H=F.status,N=F.diff,U=N!=null&&typeof N.diffs==="object"&&N.diffs!==null,[O,B]=P91(H)&&U?[H,N]:Y?await Promise.all([JA0(Y,G,"/_sandbox/git/status","GET",{userId:J,projectRef:W}),JA0(Y,G,"/_sandbox/git/diff","GET",{userId:J,projectRef:W})]):await(async()=>{let L=await $u(X);return Promise.all([XA0(L,Q.branch),QA0(L,Q.branch)])})(),D=await Lg$(K,O,B,typeof F.language==="string"?F.language:void 0);return X.json(D,200,C5)}catch(F){let H=F instanceof Error?F.message:String(F);if(H==="SANDBOX_GONE")return X.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,C5);return X.json({error:H},502,C5)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(X)=>{let Q=f_(X);if(Q instanceof Response)return Q;let{claimName:Y}=X.get("vmClaim"),G=X.req.query("path");if(!G||!G.startsWith("/")||G.startsWith("//")||G.includes("..")||G.includes("\\"))return X.json({error:"Path not allowed"},403);let J;try{J=await Q.getPreviewUrl(Y)}catch{return X.json({error:"Preview not available"},502)}if(!J)return X.json({error:"Preview not available"},502);let W=J.replace(/\/+$/,""),K=h91(`${W}${G}`);return Hh$(X,K?.url??`${W}${G}`,{...K?{headers:{host:K.hostHeader}}:{}})}),$.post("/:virtualMcpId/:branch/preview-invoke",k9({maxSize:aJ6,onError:(X)=>X.json({error:"Payload too large"},413)}),async(X)=>{let Q=f_(X);if(Q instanceof Response)return Q;let{claimName:Y}=X.get("vmClaim"),G;try{G=await Q.getPreviewUrl(Y)}catch{return X.json({error:"Preview not available"},502)}if(!G)return X.json({error:"Preview not available"},502);let J;try{J=await X.req.json()}catch{return X.json({error:"Invalid JSON body"},400)}if(!J||typeof J!=="object"||Array.isArray(J))return X.json({error:"Invalid JSON body"},400);let W=Yh$(J);if(!W)return X.json({error:"Invalid or missing __resolveType"},400);let K=Gh$(G,W.resolveType),F=h91(K);return Hh$(X,F?.url??K,{method:"POST",headers:{"content-type":"application/json",...F?{host:F.hostHeader}:{}},body:JSON.stringify(W.payload),signal:AbortSignal.timeout(30000)})}),$};var Bh$=w(()=>{D8();DN();nh();L91();IH();Kg$();_3();pX();O8();dB0();NB();Fg$();Ng$();Mp0();dp();R91();Eg$();V91();S_();g91();Jh$();u91();oJ6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;$36=lP0(async($,Z)=>{let X=$.var.studioContext;try{r(X)}catch{return $.json({error:"Unauthorized"},401)}let Q=G1(X);if(!Q)return $.json({error:"Unauthorized"},401);let Y;try{Y=t(X)}catch{return $.json({error:"Organization scope required"},403)}let G=$.req.param("virtualMcpId"),J=$.req.param("branch");if(!G||!J)return $.json({error:"virtualMcpId and branch are required"},400);try{rJ6(J)}catch(O){let B=O instanceof Error?O.message:String(O);return $.json({error:B},400)}let W=await X.storage.virtualMcps.findById(G);if(!W||W.organization_id!==Y.id)return $.json({error:"Virtual MCP not found"},404);let K=Jp({orgId:Y.id,virtualMcpId:G,branch:J}),F=await bH(X,J,Q),H=Wg$({userId:F,projectRef:K}),N=W.metadata??null;if(lW$(N).fastPreviewCapability&&!eJ6(N,F,J))return $.set("vmClaim",{claimName:H,callerUserId:Q,runner:null,virtualMcpId:G,branch:J,userId:F,projectRef:K,virtualMcpMetadata:N,connectionIds:W.connections?.map((O)=>O.connection_id)??[],fastPreview:!0}),Z();let U;try{U=(await sX(X,{userId:F,branch:J,virtualMcpMetadata:N})).provider}catch{U=null}if(!U)return $.json({error:"No sandbox runner found"},404);return $.set("vmClaim",{claimName:H,callerUserId:Q,runner:U,virtualMcpId:G,branch:J,userId:F,projectRef:K,virtualMcpMetadata:N,connectionIds:W.connections?.map((O)=>O.connection_id)??[]}),Z()});GA0=new Map;C5={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};Uh$=["clone","install","start"]});function wh$($,Z,X){let Q=l91.get($);if(!Q)Q={pending:null,running:!1},l91.set($,Q);if(!Q.pending)Q.pending={set:new Map,del:new Set,deps:Z,resolvers:[],rejecters:[]};let Y=Q.pending;Y.deps=Z;for(let[J,W]of Object.entries(X.set??{}))Y.set.set(J,W),Y.del.delete(J);for(let J of X.delete??[])Y.del.add(J),Y.set.delete(J);let G=new Promise((J,W)=>{Y.resolvers.push(J),Y.rejecters.push(W)});if(!Q.running)Y36($,Q);return G}async function Y36($,Z){Z.running=!0;try{while(Z.pending){let X=Z.pending;Z.pending=null;try{let Q=await G36(X);for(let Y of X.resolvers)Y(Q)}catch(Q){for(let Y of X.rejecters)Y(Q)}}}finally{if(Z.running=!1,!Z.pending)l91.delete($)}}async function G36($){let{client:Z,branch:X,packagePath:Q}=$.deps;for(let Y=0;;Y++){let G=await eh(Z,X),J=await Z.getCommitTreeSha(G),W=await Z.getTreeRecursive(J),K=b91(W,Q),F=[],H=new Map(K.map((B)=>[B.path,{stem:B.stem,sha:B.sha}]));for(let[B,D]of $.set){let L=x91(K,B),E=`${JSON.stringify(D,null,2)}
|
|
2913
|
-
`,j=await Z.createBlob(E);await eg$(Z.owner,Z.repo,j,E);let z=L[0]??`${$A0(Q)}/${S91(B)}.json`;F.push({path:z,mode:"100644",type:"blob",sha:j});let A=z.slice(z.lastIndexOf("/")+1,-5);H.set(z,{stem:A,sha:j,content:E});for(let P of L.slice(1))F.push({path:P,mode:"100644",type:"blob",sha:null}),H.delete(P)}for(let B of $.del)for(let D of x91(K,B))F.push({path:D,mode:"100644",type:"blob",sha:null}),H.delete(D);if(F.length===0)return G;let N=Q?`${Q}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((B)=>B.type==="blob"&&B.path===N)){let B=await Promise.all([...H.values()].map(async(j)=>({stem:j.stem,content:j.content??await Z.getBlobText(j.sha)}))),{decofile:D,skipped:L}=Na(B);if(L.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:`${Z.owner}/${Z.repo}`,branch:X,packagePath:Q,blocks:L.map((j)=>j.key)});let E=await Z.createBlob(D);F.push({path:N,mode:"100644",type:"blob",sha:E})}let U=await Z.createTree(J,F),O=await Z.createCommit({message:J36($),treeSha:U,parentShas:[G]});try{return await Z.updateRef(X,O),O}catch(B){if(!(B instanceof g4&&B.status===422)||Y>=Q36-1)throw B;await M$(nZ(2000,200,Y,2,0.5))}}}function J36($){let Z=(Y)=>{let G=Y.slice(0,3).join(", ");return Y.length>3?`${G} (+${Y.length-3} more)`:G},X=[];if($.set.size>0)X.push(`update ${Z([...$.set.keys()])}`);if($.del.size>0)X.push(`delete ${Z([...$.del])}`);let Q=`chore(decofile): ${X.join("; ")}`;return rd0(Q,$.deps.coAuthor)}var Q36=3,l91;var Dh$=w(()=>{bO0();nP0();u4();S_();ZA0();l91=new Map});import{createHmac as Lh$,randomBytes as W36,timingSafeEqual as K36}from"crypto";function Eh$(){if(WA0)return WA0;let $;try{let Z=b0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return WA0=$?Buffer.from($):W36(32),WA0}function d91($){let Z=$.nowMs??Date.now(),X={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+F36)/1000)},Q=Buffer.from(JSON.stringify(X)).toString("base64url"),Y=Lh$("sha256",Eh$()).update(Q).digest("base64url");return`${Q}.${Y}`}function jh$($,Z){let X=$.indexOf(".");if(X<0)return!1;let Q=$.slice(0,X),Y=Buffer.from($.slice(X+1)),G=Buffer.from(Lh$("sha256",Eh$()).update(Q).digest("base64url"));if(Y.length!==G.length||!K36(Y,G))return!1;let J;try{J=JSON.parse(Buffer.from(Q,"base64url").toString())}catch{return!1}let W=Math.floor((Z.nowMs??Date.now())/1000);return J.o===Z.organizationId&&J.m===Z.virtualMcpId&&J.b===Z.branch&&typeof J.e==="number"&&J.e>=W}var F36=21600000,WA0=null;var zh$=w(()=>{R$()});import{z as Zu}from"zod";function N36($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&H36.test($)}function Ah$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function KA0($){let Z=$.get("decofileScope");return iP0($.var.studioContext,Z.organizationId,Z.githubRepo)}function FA0($,Z){if(Z instanceof g4){let Q=Z.status===404?404:Z.status===409?409:Z.status===422?409:502;return $.json({error:Z.message},Q)}let X=Z instanceof Error?Z.message:String(Z);return $.json({error:X},500)}function Th$(){let $=new H1;return $.use("/:virtualMcpId/:branch",Ph$),$.use("/:virtualMcpId/:branch/*",Ph$),$.get("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await KA0(Z),Y=await $h$(Q,X.branch,X.packagePath,{createBranchIfMissing:!!X.userId}),G={ETag:`"${Y.sha}"`,"Cache-Control":"no-store","Access-Control-Allow-Origin":"*"};if(Z.req.header("if-none-match")===`"${Y.sha}"`)return Z.body(null,304,G);if(!X.userId)return Z.body(Y.decofile,200,{...G,"content-type":"application/json"});let J=d91({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.body(`{"version":${JSON.stringify(Y.sha)},"token":${JSON.stringify(J)},"apiHost":${JSON.stringify(Ah$(Z))},"decofile":${Y.decofile}}`,200,{...G,"content-type":"application/json"})}catch(Q){return FA0(Z,Q)}}),$.patch("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope"),Q=Z.var.studioContext,Y=U36.safeParse(await Z.req.json().catch(()=>null));if(!Y.success)return Z.json({error:"Invalid body",details:Y.error.issues},400);let G=Y.data;for(let J of[...Object.keys(G.set??{}),...G.delete??[]])try{pP0(J)}catch(W){let K=W instanceof Error?W.message:String(W);return Z.json({error:K},400)}for(let[J,W]of Object.entries(G.set??{}))if(typeof W!=="object"||W===null||Array.isArray(W))return Z.json({error:`Block "${J}" must be a JSON object`},400);try{let J=await KA0(Z),W=await wh$(`${X.organizationId}/${X.virtualMcpId}/${X.branch}`,{client:J,branch:X.branch,packagePath:X.packagePath,coAuthor:th(Q)},G),K=d91({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.json({version:W,token:K,apiHost:Ah$(Z)})}catch(J){return FA0(Z,J)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await KA0(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({error:"Branch is already the default branch"},400);let G=`chore(decofile): publish ${X.branch}`;try{let J;try{J=await Q.mergeBranch(Y,X.branch,G)}catch(W){if(!(W instanceof g4&&W.status===409))throw W;await YA0(Q,X.branch,Y),J=await Q.mergeBranch(Y,X.branch,G)}return J?Z.json({result:"merged",sha:J}):Z.json({result:"up-to-date"})}catch(J){if(J instanceof g4&&J.status===409)return Z.json({error:"merge-conflict"},409);if(J instanceof g4&&J.status===405){let K=await Q.findOpenPullRequest(Y,X.branch)??await Q.createPullRequest({base:Y,head:X.branch,title:`Publish ${X.branch}`});return Z.json({result:"pull-request",number:K.number,url:K.html_url})}throw J}}catch(Q){return FA0(Z,Q)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await KA0(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0});try{let{aheadBy:G,behindBy:J}=await Q.compare(Y,X.branch);return Z.json({baseBranch:Y,aheadBy:G,behindBy:J})}catch(G){if(G instanceof g4&&G.status===404)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0});throw G}}catch(Q){return FA0(Z,Q)}}),$}var H36,U36,Ph$;var Rh$=w(()=>{nP0();D8();L91();dP0();u91();V91();Dh$();zh$();g91();S_();ZA0();H36=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;U36=Zu.object({set:Zu.record(Zu.string(),Zu.unknown()).optional(),delete:Zu.array(Zu.string()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}),Ph$=lP0(async($,Z)=>{let X=$.var.studioContext,Q=X.organization;if(!Q)return $.json({error:"Organization scope required"},500);let Y=$.req.param("virtualMcpId"),G=$.req.param("branch");if(!Y||!G)return $.json({error:"virtualMcpId and branch are required"},400);if(!N36(G))return $.json({error:`Invalid branch name: ${G}`},400);let J=X.auth?.user?.id??null;if(!J){let O=$.req.query("token");if(!($.req.method==="GET"&&!$.req.path.match(/\/(publish|status)$/)))return $.json({error:"Unauthorized"},401);if(!O||!jh$(O,{organizationId:Q.id,virtualMcpId:Y,branch:G}))return $.json({error:"Unauthorized"},401)}let W=await X.storage.virtualMcps.findById(Y);if(!W||W.organization_id!==Q.id)return $.json({error:"Virtual MCP not found"},404);let K=W.metadata??null;if(!lB0(K)||K?.fastPreview!==!0)return $.json({error:"Fast Preview is not enabled for this project"},404);let H=W.connections?.map((O)=>O.connection_id)??[],N=wa(K,H);if(!N)return $.json({error:"Project has no GitHub repository"},404);let U=K?.runtime;return $.set("decofileScope",{organizationId:Q.id,virtualMcpId:Y,branch:G,packagePath:U?.path?.replace(/^\/+|\/+$/g,"")||null,githubRepo:N,userId:J}),Z()})});var Ih$=($)=>{let Z=new H1;if(Z.use("*",P_),Z.route("/",GP0()),Z.route("/",lf$()),Z.route("/",ty$()),Z.route("/",iy$()),Z.route("/",hP0()),Z.route("/tools",Zg$()),Z.route("/",sy$()),Z.route("/",Ry$({kvStorage:$.kvStorage})),Z.route("/",Ay$()),Z.route("/fs",gy$({getConnection:$.getNatsConnection})),Z.route("/sandbox",Oh$()),Z.route("/decofile",Th$()),Z.route("/",ly$()),Z.route("/deco-sites",WP0()),Z.route("/sso",ez0()),Z.route("/",uP0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",ff$()),$.mountDevAssets)Z.route("/dev-assets",KP0({orgFromPath:!0}));return Z.use("/mcp/:connectionId?",$.mcpAuth),Z.use("/mcp/:connectionId/ui-resource",$.mcpAuth),Z.use("/mcp/gateway/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/virtual-mcp/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/self",$.mcpAuth),Z.use("/mcp/task-run/:threadId",$.mcpAuth),Z.route("/",w_$()),Z.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",$.betterAuthProtectedResourceHandler),Z.get("/mcp/.well-known/oauth-protected-resource",$.betterAuthProtectedResourceHandler),Z.route("/mcp/task-run",uy$()),Z.route("/mcp",KD0()),Z.route("/mcp/self",gP0()),Z.route("/mcp",ND0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var qh$=w(()=>{D8();h61();bf$();d61();FP0();yr();y61();Ty$();Iy$();hy$();dn();V61();UD0();H91();cy$();dy$();py$();oy$();ey$();U91();Xg$();O91();FD0();Bh$();Rh$()});function O36($){return $.filter((Z)=>Z.vendors?.alias).map((Z)=>({name:Z.name,title:Z.title,description:Z.description,logo:Z.logo,category:Z.category,vendor:{alias:Z.vendors.alias,url:Z.vendors.url}}))}var B36=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},Mh$=()=>{let $=new H1;return $.use("*",B36),$.get("/",async(Z)=>{let X=b0(),Q=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!Q||!Y)return Z.json({apps:[]});try{let G=await dZ(Q,Y,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:O36(G)})}catch(G){return console.error("[deco-apps] GET error:",G),Z.json({error:"Failed to fetch apps"},502)}}),$};var kh$=w(()=>{D8();R$();Xz0()});import{z as M1}from"zod";function GF($,Z="invalid_request_error",X=null,Q=null){return{error:{message:$,type:Z,param:X,code:Q}}}function R36($){if(!$)return null;let Z=$.indexOf(":");if(Z===-1)return{credentialId:null,modelId:$};let X=$.substring(0,Z),Q=$.substring(Z+1);if(!X||!Q)return null;return{credentialId:X,modelId:Q}}function I36($,Z,X){try{return JSON.parse($)}catch{throw new Ch$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function q36($){let Z={};for(let X of $)if(X.role==="assistant"&&X.tool_calls)for(let Q of X.tool_calls)Z[Q.id]=Q.function.name;return $.map((X)=>{switch(X.role){case"system":return{role:"system",content:X.content};case"user":if(typeof X.content==="string")return{role:"user",content:X.content};return{role:"user",content:X.content.map((Y)=>{if(Y.type==="text")return{type:"text",text:Y.text};return{type:"image",image:Y.image_url.url}})};case"assistant":if(X.tool_calls&&X.tool_calls.length>0)return{role:"assistant",content:X.tool_calls.map((Y)=>({type:"tool-call",toolCallId:Y.id,toolName:Y.function.name,input:I36(Y.function.arguments,Y.id,Y.function.name)}))};return{role:"assistant",content:X.content??""};case"tool":let Q=Z[X.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:X.tool_call_id,toolName:Q,output:{type:"text",value:X.content}}]}}})}function M36($){let Z=$.map((X)=>{let Q=X.function.parameters?hY(X.function.parameters):hY({type:"object",properties:{}});return[X.function.name,b$({description:X.function.description,inputSchema:Q})]});return Object.fromEntries(Z)}function k36($){if(!$)return;return{openai:{response_format:$}}}function V36(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function Vh$($,Z,X,Q,Y,G){let J={model:$,messages:Z,tools:X,temperature:Q.temperature,maxTokens:Q.max_tokens,topP:Q.top_p,frequencyPenalty:Q.frequency_penalty,presencePenalty:Q.presence_penalty,stopSequences:Q.stop?Array.isArray(Q.stop)?Q.stop:[Q.stop]:void 0,abortSignal:G};return Y?{...J,providerOptions:Y}:J}function Sh$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var w36=256,D36,L36,E36,j36,z36,P36,A36,T36,Ch$,_h$,vh$;var fh$=w(()=>{v4();D8();nh();YN();D36=M1.object({type:M1.literal("function"),function:M1.object({name:M1.string(),description:M1.string().optional(),parameters:M1.record(M1.string(),M1.unknown()).optional()})}),L36=M1.object({id:M1.string(),type:M1.literal("function"),function:M1.object({name:M1.string(),arguments:M1.string()})}),E36=M1.discriminatedUnion("role",[M1.object({role:M1.literal("system"),content:M1.string(),name:M1.string().optional()}),M1.object({role:M1.literal("user"),content:M1.union([M1.string(),M1.array(M1.union([M1.object({type:M1.literal("text"),text:M1.string()}),M1.object({type:M1.literal("image_url"),image_url:M1.object({url:M1.string(),detail:M1.string().optional()})})]))]),name:M1.string().optional()}),M1.object({role:M1.literal("assistant"),content:M1.string().nullable().optional(),name:M1.string().optional(),tool_calls:M1.array(L36).optional()}),M1.object({role:M1.literal("tool"),content:M1.string(),tool_call_id:M1.string()})]),j36=M1.object({type:M1.literal("text")}),z36=M1.object({type:M1.literal("json_object")}),P36=M1.object({type:M1.literal("json_schema"),json_schema:M1.object({name:M1.string(),description:M1.string().optional(),schema:M1.record(M1.string(),M1.unknown()),strict:M1.boolean().optional()})}),A36=M1.union([j36,z36,P36]),T36=M1.object({model:M1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:M1.array(E36),stream:M1.boolean().optional().default(!1),temperature:M1.number().min(0).max(2).optional(),max_tokens:M1.number().positive().optional(),top_p:M1.number().min(0).max(1).optional(),frequency_penalty:M1.number().min(-2).max(2).optional(),presence_penalty:M1.number().min(-2).max(2).optional(),stop:M1.union([M1.string(),M1.array(M1.string())]).optional(),tools:M1.array(D36).optional(),tool_choice:M1.union([M1.literal("auto"),M1.literal("none"),M1.literal("required"),M1.object({type:M1.literal("function"),function:M1.object({name:M1.string()})})]).optional(),response_format:A36.optional(),user:M1.string().optional()});Ch$=class Ch$ extends Error{constructor($){super($);this.name="MessageConversionError"}};_h$=new H1;_h$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(GF("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(GF("Organization context is required. Ensure your API key has organization metadata.","invalid_request_error","organization"),400);if((Z.organization.slug??Z.organization.id)!==X)return $.json(GF("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Q=await $.req.json(),Y=T36.safeParse(Q);if(!Y.success){let L=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(GF(`Invalid request: ${L.message}`,"invalid_request_error",L.path.length>0?L.path.join("."):null),400)}let G=Y.data,J=R36(G.model);if(!J)return $.json(GF("Invalid model format. Expected 'model_id' or 'credential_id:model_id' (e.g., 'claude-sonnet-4-6' or 'key_abc123:claude-sonnet-4-6')","invalid_request_error","model"),400);let{credentialId:W}=J,{modelId:K}=J;if(!W){let E=(await Z.storage.aiProviderKeys.list({organizationId:Z.organization.id})).find((j)=>fD(j.providerId));if(!E)return $.json(GF("No AI provider credentials configured for this organization. Add a credential in settings or specify one explicitly via 'credential_id:model_id'.","invalid_request_error","model"),400);W=E.id}let F;try{F=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(GF(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let H=F.aiSdk.languageModel(K),N=q36(G.messages),U=G.tools?M36(G.tools):void 0,O=k36(G.response_format),B=V36(),D=Math.floor(Date.now()/1000);if(G.stream)return IN($,async(L)=>{let E=Vh$(H,N,U,G,O,$.req.raw.signal);try{let j=tO(E),z=!1,A=0,P="",I=async()=>{if(P.length===0)return;let k=P;P="",await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{content:k},finish_reason:null}]})})};for await(let k of j.fullStream){if(!z&&(k.type==="text-delta"||k.type==="tool-call"))await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(k.type==="text-delta"){if(P+=k.text,P.length>=w36)await I()}else if(k.type==="tool-call"){await I();let q=A++;await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{tool_calls:[{index:q,id:k.toolCallId,type:"function",function:{name:k.toolName,arguments:JSON.stringify(k.input)}}]},finish_reason:null}]})})}else if(k.type==="finish")await I(),await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{},finish_reason:Sh$(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 I(),await L.writeSSE({data:"[DONE]"})}catch(j){let z=j;console.error("[openai-compat:stream] Error:",z.message),await L.writeSSE({data:JSON.stringify({error:{message:z.message,type:"server_error"}})})}});else{let L=Vh$(H,N,U,G,O,$.req.raw.signal),E=await pO(L),j={role:"assistant",content:E.text||null};if(E.toolCalls&&E.toolCalls.length>0)j.tool_calls=E.toolCalls.map((z)=>({id:z.toolCallId,type:"function",function:{name:z.toolName,arguments:JSON.stringify("input"in z?z.input:{})}})),j.content=null;return $.json({id:B,object:"chat.completion",created:D,model:G.model,choices:[{index:0,message:j,finish_reason:Sh$(E.finishReason)}],usage:{prompt_tokens:E.usage?.inputTokens??0,completion_tokens:E.usage?.outputTokens??0,total_tokens:E.usage?.totalTokens??0}})}}catch(Q){let Y=Q;if(Y.name==="AbortError")return $.json(GF("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(GF(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(GF(Y.message,"server_error"),500)}});vh$=_h$});function S36($){if(typeof $!=="object"||$===null)return!1;let X=$.githubRepo?.url;return typeof X==="string"&&X.length>0}function bh$(){let $=new H1;return $.use("*",async(Z,X)=>{await X(),Z.header("Cache-Control","private, no-store"),Z.header("Vary","Cookie")}),$.get("/",async(Z)=>{let X=Z.get("studioContext"),Q=G1(X);if(!Q)return Z.json({error:"Authentication required"},401);let G=(Z.req.query("site")??"").trim().toLowerCase();if(!uG(G))return Z.json({error:"Invalid site slug"},400);let J=await X.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["organization.id as id","organization.slug as slug","organization.name as name","organization.metadata as metadata"]).where("member.userId","=",Q).execute(),W=[];for(let F of J){if(!F.slug||W7(F))continue;let H=await X.storage.virtualMcps.list(F.id);for(let N of H){if(Ba1(N)!==G)continue;if(!S36(N.metadata))continue;W.push({orgSlug:F.slug,orgName:F.name??F.slug,project:{id:N.id,title:N.title,icon:N.icon??null}})}}let K={matches:W};return Z.json(K)}),$}var xh$=w(()=>{D8();fO()});var gh$;var yh$=w(()=>{gh$={name:"decocms",version:"4.252.6",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@nats-io/jwt":"0.0.10-5","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function v36(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??_36}}var hh$,_36="https://ph.studio.decocms.com",uh$;var ch$=w(()=>{D8();Mh0();KC();f9();R$();R61();yh$();hh$=new H1;hh$.get("/",($)=>{let Z={version:gh$.version,theme:gd1(),...RL().logo&&{logo:RL().logo},...qK()&&{internalUrl:wS1()},...b0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!b0().firecrawlApiKey,auth:ev$(),posthog:v36(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!qK()&&b0().sandboxProviderKind==="agent-sandbox"}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});uh$=hh$});function Xu($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function m91($){return(Xu($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function dh$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(Xu($))}&sz=${Z}`}function lh$($,Z){let X=$.trim();if(X.length<=Z)return X;let Q=X.slice(0,Z-1),Y=Q.lastIndexOf(" ");return`${(Y>Z*0.6?Q.slice(0,Y):Q).trimEnd()}\u2026`}function mh$($){let{brand:Z,domain:X,score:Q,verdict:Y}=$,G=typeof Q==="number"?`${Z} commerce report \u2014 ${Math.round(Q)}/100 \xB7 decocms`:`${Z} commerce report \xB7 decocms`,J=`See the full ${Z} scorecard \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,W=Y?.trim()?lh$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):lh$(`How does ${X} really perform? ${J}`,200);return{title:G,description:W}}import{z as l0}from"zod";var b_,f36,b36,x36,y36,ih$;var ph$=w(()=>{b_=l0.enum(["good","bad","neutral"]),f36=l0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((X)=>X!==null&&typeof X!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},l0.object({kind:l0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:l0.coerce.string().optional(),tone:b_.optional(),muted:l0.boolean().optional(),delta:l0.coerce.string().optional(),deltaDir:l0.enum(["up","down","neutral"]).optional(),points:l0.array(l0.coerce.number()).optional(),label:l0.coerce.string().optional()}).transform(($)=>{if($.kind==="badge"&&$.label==null)$.label=$.value??"";if($.kind==="score"){let Z=Number($.value);if(Number.isNaN(Z))return{...$,kind:"text"}}return $})),b36=l0.preprocess(($)=>{let Z=$;if(Z&&typeof Z==="object"&&!Array.isArray(Z)&&Array.isArray(Z.cells))Z=Z.cells;if(Array.isArray(Z)&&Z.length===1&&Array.isArray(Z[0]))Z=Z[0];if(Array.isArray(Z))return Z;if(Z&&typeof Z==="object")return Object.values(Z);return Z},l0.array(f36)),x36={key:l0.coerce.string(),title:l0.coerce.string(),eyebrow:l0.coerce.string().optional(),headline:l0.coerce.string(),annotation:l0.coerce.string().optional(),methodology:l0.coerce.string().optional(),sources:l0.array(l0.object({name:l0.coerce.string(),logoUrl:l0.coerce.string()})).optional()},y36=l0.discriminatedUnion("template",[l0.object({template:l0.literal("cover"),score:l0.object({value:l0.coerce.number(),max:l0.coerce.number().optional(),grade:l0.coerce.string().optional(),label:l0.coerce.string().optional()}).optional(),brandImage:l0.coerce.string().optional(),screenshot:l0.coerce.string().optional(),mobileScreenshot:l0.coerce.string().optional()}),l0.object({template:l0.literal("cta"),ctaUrl:l0.coerce.string().optional(),ctaLabel:l0.coerce.string().optional(),bullets:l0.array(l0.coerce.string()).optional()}),l0.object({template:l0.literal("series"),points:l0.array(l0.coerce.number()).min(2),xLabels:l0.array(l0.coerce.string()).min(1),unit:l0.coerce.string().optional(),callout:l0.object({index:l0.coerce.number(),value:l0.coerce.string(),tone:b_.optional()})}),l0.object({template:l0.literal("threshold"),value:l0.coerce.string().default(""),metricLabel:l0.coerce.string().optional(),ratio:l0.coerce.number(),thresholdRatio:l0.coerce.number().optional(),thresholdLabel:l0.coerce.string().default(""),tone:b_.optional()}),l0.object({template:l0.literal("stats"),stats:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),tone:b_.optional()})).min(1)}),l0.object({template:l0.literal("bars"),items:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),ratio:l0.coerce.number(),tone:b_.optional()})).min(1)}),l0.object({template:l0.literal("gauges"),gauges:l0.array(l0.object({label:l0.coerce.string(),value:l0.coerce.string(),status:l0.enum(["good","warn","bad"]).catch("warn"),caption:l0.coerce.string().optional(),ratio:l0.coerce.number().optional()})).min(1)}),l0.object({template:l0.literal("checklist"),checks:l0.array(l0.object({label:l0.coerce.string(),status:l0.enum(["pass","fail","warn"]).catch("fail"),value:l0.coerce.string().optional()})).min(1)}),l0.object({template:l0.literal("table"),columns:l0.array(l0.object({label:l0.coerce.string(),align:l0.enum(["left","right"]).optional()})).min(1),rows:l0.array(b36).min(1),highlightRow:l0.coerce.number().optional()}),l0.object({template:l0.literal("products"),products:l0.array(l0.object({name:l0.coerce.string(),price:l0.coerce.string().optional(),image:l0.coerce.string().optional(),url:l0.coerce.string().optional()})).min(1)}),l0.object({template:l0.literal("list"),entries:l0.array(l0.object({label:l0.coerce.string(),severity:l0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:l0.coerce.number().optional()}),l0.object({template:l0.literal("keywords"),volumeLabel:l0.coerce.string().optional(),keywords:l0.array(l0.object({term:l0.coerce.string(),volume:l0.coerce.string(),position:l0.coerce.number().catch(0)})).min(1)}),l0.object({template:l0.literal("competitor"),metricLabel:l0.coerce.string().optional(),competitors:l0.array(l0.object({name:l0.coerce.string(),value:l0.coerce.string(),tone:b_.optional(),isYou:l0.boolean().optional()})).min(1)}),l0.object({template:l0.literal("scorecard"),rivalLabel:l0.coerce.string().optional(),dimensions:l0.array(l0.object({label:l0.coerce.string(),you:l0.coerce.string(),rival:l0.coerce.string().optional(),rivalName:l0.coerce.string().optional(),tone:b_.optional()})).min(1)})]),ih$=l0.object({...x36,template:y36})});function HA0($){let Z=[],X=[...$.sections].sort((Y,G)=>Y.position-G.position).map((Y)=>{let G=ih$.safeParse(Y.props);if(G.success)return G.data;let J=G.error.issues[0];return Z.push({section_type:Y.section_type,position:Y.position,reason:J?`${J.path.join(".")||"(root)"}: ${J.message}`:"contract violation"}),null}).filter((Y)=>Y!==null),Q=X.filter((Y)=>Y.template.template!=="cover"&&Y.template.template!=="cta").map((Y)=>({key:Y.key,title:Y.title}));return{deck:{meta:{...$.meta,scores:$.summary?.scores,scannedAt:$.scanned_at,toc:Q},slides:X},drops:Z}}var i91=w(()=>{ph$()});import{join as nh$}from"path";async function h36($){try{let Z=await fetch(`${aW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(g36)});if(!Z.ok)return null;let X=await Z.json(),{deck:Q}=HA0(X);if(!Q.slides.length)return null;let Y=Q.slides.find((W)=>W.template.template==="cover"),G=Y?.template,J=G&&G.template==="cover"?G:void 0;return{brand:Q.meta.brand?.trim()||m91($),score:Q.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function WG($){return $.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function u36($,Z){let X=Xu($),Q=Z?.brand?.trim()||m91(X),Y=dh$(X,128),J=`${(b0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=mh$({brand:Q,domain:X,score:Z?.score,verdict:Z?.verdict}),F=`${J}/og.png`,H=`${Q} commerce report by decocms`;return[`<title>${WG(W)}</title>`,`<meta name="description" content="${WG(K)}" />`,'<meta name="robots" content="noindex, follow" />','<meta property="og:type" content="website" />','<meta property="og:site_name" content="decocms" />',`<meta property="og:title" content="${WG(W)}" />`,`<meta property="og:description" content="${WG(K)}" />`,`<meta property="og:url" content="${WG(J)}" />`,`<meta property="og:image" content="${WG(F)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${WG(H)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${WG(W)}" />`,`<meta name="twitter:description" content="${WG(K)}" />`,`<meta name="twitter:image" content="${WG(F)}" />`,`<meta name="twitter:image:alt" content="${WG(H)}" />`,`<link rel="canonical" href="${WG(J)}" />`,`<link rel="icon" href="${WG(Y)}" sizes="any" />`].join(`
|
|
2913
|
+
`,j=await Z.createBlob(E);await eg$(Z.owner,Z.repo,j,E);let z=L[0]??`${$A0(Q)}/${S91(B)}.json`;F.push({path:z,mode:"100644",type:"blob",sha:j});let A=z.slice(z.lastIndexOf("/")+1,-5);H.set(z,{stem:A,sha:j,content:E});for(let P of L.slice(1))F.push({path:P,mode:"100644",type:"blob",sha:null}),H.delete(P)}for(let B of $.del)for(let D of x91(K,B))F.push({path:D,mode:"100644",type:"blob",sha:null}),H.delete(D);if(F.length===0)return G;let N=Q?`${Q}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((B)=>B.type==="blob"&&B.path===N)){let B=await Promise.all([...H.values()].map(async(j)=>({stem:j.stem,content:j.content??await Z.getBlobText(j.sha)}))),{decofile:D,skipped:L}=Na(B);if(L.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:`${Z.owner}/${Z.repo}`,branch:X,packagePath:Q,blocks:L.map((j)=>j.key)});let E=await Z.createBlob(D);F.push({path:N,mode:"100644",type:"blob",sha:E})}let U=await Z.createTree(J,F),O=await Z.createCommit({message:J36($),treeSha:U,parentShas:[G]});try{return await Z.updateRef(X,O),O}catch(B){if(!(B instanceof g4&&B.status===422)||Y>=Q36-1)throw B;await M$(nZ(2000,200,Y,2,0.5))}}}function J36($){let Z=(Y)=>{let G=Y.slice(0,3).join(", ");return Y.length>3?`${G} (+${Y.length-3} more)`:G},X=[];if($.set.size>0)X.push(`update ${Z([...$.set.keys()])}`);if($.del.size>0)X.push(`delete ${Z([...$.del])}`);let Q=`chore(decofile): ${X.join("; ")}`;return rd0(Q,$.deps.coAuthor)}var Q36=3,l91;var Dh$=w(()=>{bO0();nP0();u4();S_();ZA0();l91=new Map});import{createHmac as Lh$,randomBytes as W36,timingSafeEqual as K36}from"crypto";function Eh$(){if(WA0)return WA0;let $;try{let Z=b0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return WA0=$?Buffer.from($):W36(32),WA0}function d91($){let Z=$.nowMs??Date.now(),X={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+F36)/1000)},Q=Buffer.from(JSON.stringify(X)).toString("base64url"),Y=Lh$("sha256",Eh$()).update(Q).digest("base64url");return`${Q}.${Y}`}function jh$($,Z){let X=$.indexOf(".");if(X<0)return!1;let Q=$.slice(0,X),Y=Buffer.from($.slice(X+1)),G=Buffer.from(Lh$("sha256",Eh$()).update(Q).digest("base64url"));if(Y.length!==G.length||!K36(Y,G))return!1;let J;try{J=JSON.parse(Buffer.from(Q,"base64url").toString())}catch{return!1}let W=Math.floor((Z.nowMs??Date.now())/1000);return J.o===Z.organizationId&&J.m===Z.virtualMcpId&&J.b===Z.branch&&typeof J.e==="number"&&J.e>=W}var F36=21600000,WA0=null;var zh$=w(()=>{R$()});import{z as Zu}from"zod";function N36($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&H36.test($)}function Ah$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function KA0($){let Z=$.get("decofileScope");return iP0($.var.studioContext,Z.organizationId,Z.githubRepo)}function FA0($,Z){if(Z instanceof g4){let Q=Z.status===404?404:Z.status===409?409:Z.status===422?409:502;return $.json({error:Z.message},Q)}let X=Z instanceof Error?Z.message:String(Z);return $.json({error:X},500)}function Th$(){let $=new H1;return $.use("/:virtualMcpId/:branch",Ph$),$.use("/:virtualMcpId/:branch/*",Ph$),$.get("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await KA0(Z),Y=await $h$(Q,X.branch,X.packagePath,{createBranchIfMissing:!!X.userId}),G={ETag:`"${Y.sha}"`,"Cache-Control":"no-store","Access-Control-Allow-Origin":"*"};if(Z.req.header("if-none-match")===`"${Y.sha}"`)return Z.body(null,304,G);if(!X.userId)return Z.body(Y.decofile,200,{...G,"content-type":"application/json"});let J=d91({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.body(`{"version":${JSON.stringify(Y.sha)},"token":${JSON.stringify(J)},"apiHost":${JSON.stringify(Ah$(Z))},"decofile":${Y.decofile}}`,200,{...G,"content-type":"application/json"})}catch(Q){return FA0(Z,Q)}}),$.patch("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope"),Q=Z.var.studioContext,Y=U36.safeParse(await Z.req.json().catch(()=>null));if(!Y.success)return Z.json({error:"Invalid body",details:Y.error.issues},400);let G=Y.data;for(let J of[...Object.keys(G.set??{}),...G.delete??[]])try{pP0(J)}catch(W){let K=W instanceof Error?W.message:String(W);return Z.json({error:K},400)}for(let[J,W]of Object.entries(G.set??{}))if(typeof W!=="object"||W===null||Array.isArray(W))return Z.json({error:`Block "${J}" must be a JSON object`},400);try{let J=await KA0(Z),W=await wh$(`${X.organizationId}/${X.virtualMcpId}/${X.branch}`,{client:J,branch:X.branch,packagePath:X.packagePath,coAuthor:th(Q)},G),K=d91({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.json({version:W,token:K,apiHost:Ah$(Z)})}catch(J){return FA0(Z,J)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await KA0(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({error:"Branch is already the default branch"},400);let G=`chore(decofile): publish ${X.branch}`;try{let J;try{J=await Q.mergeBranch(Y,X.branch,G)}catch(W){if(!(W instanceof g4&&W.status===409))throw W;await YA0(Q,X.branch,Y),J=await Q.mergeBranch(Y,X.branch,G)}return J?Z.json({result:"merged",sha:J}):Z.json({result:"up-to-date"})}catch(J){if(J instanceof g4&&J.status===409)return Z.json({error:"merge-conflict"},409);if(J instanceof g4&&J.status===405){let K=await Q.findOpenPullRequest(Y,X.branch)??await Q.createPullRequest({base:Y,head:X.branch,title:`Publish ${X.branch}`});return Z.json({result:"pull-request",number:K.number,url:K.html_url})}throw J}}catch(Q){return FA0(Z,Q)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await KA0(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0});try{let{aheadBy:G,behindBy:J}=await Q.compare(Y,X.branch);return Z.json({baseBranch:Y,aheadBy:G,behindBy:J})}catch(G){if(G instanceof g4&&G.status===404)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0});throw G}}catch(Q){return FA0(Z,Q)}}),$}var H36,U36,Ph$;var Rh$=w(()=>{nP0();D8();L91();dP0();u91();V91();Dh$();zh$();g91();S_();ZA0();H36=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;U36=Zu.object({set:Zu.record(Zu.string(),Zu.unknown()).optional(),delete:Zu.array(Zu.string()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}),Ph$=lP0(async($,Z)=>{let X=$.var.studioContext,Q=X.organization;if(!Q)return $.json({error:"Organization scope required"},500);let Y=$.req.param("virtualMcpId"),G=$.req.param("branch");if(!Y||!G)return $.json({error:"virtualMcpId and branch are required"},400);if(!N36(G))return $.json({error:`Invalid branch name: ${G}`},400);let J=X.auth?.user?.id??null;if(!J){let O=$.req.query("token");if(!($.req.method==="GET"&&!$.req.path.match(/\/(publish|status)$/)))return $.json({error:"Unauthorized"},401);if(!O||!jh$(O,{organizationId:Q.id,virtualMcpId:Y,branch:G}))return $.json({error:"Unauthorized"},401)}let W=await X.storage.virtualMcps.findById(Y);if(!W||W.organization_id!==Q.id)return $.json({error:"Virtual MCP not found"},404);let K=W.metadata??null;if(!lB0(K)||K?.fastPreview!==!0)return $.json({error:"Fast Preview is not enabled for this project"},404);let H=W.connections?.map((O)=>O.connection_id)??[],N=wa(K,H);if(!N)return $.json({error:"Project has no GitHub repository"},404);let U=K?.runtime;return $.set("decofileScope",{organizationId:Q.id,virtualMcpId:Y,branch:G,packagePath:U?.path?.replace(/^\/+|\/+$/g,"")||null,githubRepo:N,userId:J}),Z()})});var Ih$=($)=>{let Z=new H1;if(Z.use("*",P_),Z.route("/",GP0()),Z.route("/",lf$()),Z.route("/",ty$()),Z.route("/",iy$()),Z.route("/",hP0()),Z.route("/tools",Zg$()),Z.route("/",sy$()),Z.route("/",Ry$({kvStorage:$.kvStorage})),Z.route("/",Ay$()),Z.route("/fs",gy$({getConnection:$.getNatsConnection})),Z.route("/sandbox",Oh$()),Z.route("/decofile",Th$()),Z.route("/",ly$()),Z.route("/deco-sites",WP0()),Z.route("/sso",ez0()),Z.route("/",uP0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",ff$()),$.mountDevAssets)Z.route("/dev-assets",KP0({orgFromPath:!0}));return Z.use("/mcp/:connectionId?",$.mcpAuth),Z.use("/mcp/:connectionId/ui-resource",$.mcpAuth),Z.use("/mcp/gateway/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/virtual-mcp/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/self",$.mcpAuth),Z.use("/mcp/task-run/:threadId",$.mcpAuth),Z.route("/",w_$()),Z.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",$.betterAuthProtectedResourceHandler),Z.get("/mcp/.well-known/oauth-protected-resource",$.betterAuthProtectedResourceHandler),Z.route("/mcp/task-run",uy$()),Z.route("/mcp",KD0()),Z.route("/mcp/self",gP0()),Z.route("/mcp",ND0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var qh$=w(()=>{D8();h61();bf$();d61();FP0();yr();y61();Ty$();Iy$();hy$();dn();V61();UD0();H91();cy$();dy$();py$();oy$();ey$();U91();Xg$();O91();FD0();Bh$();Rh$()});function O36($){return $.filter((Z)=>Z.vendors?.alias).map((Z)=>({name:Z.name,title:Z.title,description:Z.description,logo:Z.logo,category:Z.category,vendor:{alias:Z.vendors.alias,url:Z.vendors.url}}))}var B36=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},Mh$=()=>{let $=new H1;return $.use("*",B36),$.get("/",async(Z)=>{let X=b0(),Q=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!Q||!Y)return Z.json({apps:[]});try{let G=await dZ(Q,Y,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:O36(G)})}catch(G){return console.error("[deco-apps] GET error:",G),Z.json({error:"Failed to fetch apps"},502)}}),$};var kh$=w(()=>{D8();R$();Xz0()});import{z as M1}from"zod";function GF($,Z="invalid_request_error",X=null,Q=null){return{error:{message:$,type:Z,param:X,code:Q}}}function R36($){if(!$)return null;let Z=$.indexOf(":");if(Z===-1)return{credentialId:null,modelId:$};let X=$.substring(0,Z),Q=$.substring(Z+1);if(!X||!Q)return null;return{credentialId:X,modelId:Q}}function I36($,Z,X){try{return JSON.parse($)}catch{throw new Ch$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function q36($){let Z={};for(let X of $)if(X.role==="assistant"&&X.tool_calls)for(let Q of X.tool_calls)Z[Q.id]=Q.function.name;return $.map((X)=>{switch(X.role){case"system":return{role:"system",content:X.content};case"user":if(typeof X.content==="string")return{role:"user",content:X.content};return{role:"user",content:X.content.map((Y)=>{if(Y.type==="text")return{type:"text",text:Y.text};return{type:"image",image:Y.image_url.url}})};case"assistant":if(X.tool_calls&&X.tool_calls.length>0)return{role:"assistant",content:X.tool_calls.map((Y)=>({type:"tool-call",toolCallId:Y.id,toolName:Y.function.name,input:I36(Y.function.arguments,Y.id,Y.function.name)}))};return{role:"assistant",content:X.content??""};case"tool":let Q=Z[X.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:X.tool_call_id,toolName:Q,output:{type:"text",value:X.content}}]}}})}function M36($){let Z=$.map((X)=>{let Q=X.function.parameters?hY(X.function.parameters):hY({type:"object",properties:{}});return[X.function.name,b$({description:X.function.description,inputSchema:Q})]});return Object.fromEntries(Z)}function k36($){if(!$)return;return{openai:{response_format:$}}}function V36(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function Vh$($,Z,X,Q,Y,G){let J={model:$,messages:Z,tools:X,temperature:Q.temperature,maxTokens:Q.max_tokens,topP:Q.top_p,frequencyPenalty:Q.frequency_penalty,presencePenalty:Q.presence_penalty,stopSequences:Q.stop?Array.isArray(Q.stop)?Q.stop:[Q.stop]:void 0,abortSignal:G};return Y?{...J,providerOptions:Y}:J}function Sh$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var w36=256,D36,L36,E36,j36,z36,P36,A36,T36,Ch$,_h$,vh$;var fh$=w(()=>{v4();D8();nh();YN();D36=M1.object({type:M1.literal("function"),function:M1.object({name:M1.string(),description:M1.string().optional(),parameters:M1.record(M1.string(),M1.unknown()).optional()})}),L36=M1.object({id:M1.string(),type:M1.literal("function"),function:M1.object({name:M1.string(),arguments:M1.string()})}),E36=M1.discriminatedUnion("role",[M1.object({role:M1.literal("system"),content:M1.string(),name:M1.string().optional()}),M1.object({role:M1.literal("user"),content:M1.union([M1.string(),M1.array(M1.union([M1.object({type:M1.literal("text"),text:M1.string()}),M1.object({type:M1.literal("image_url"),image_url:M1.object({url:M1.string(),detail:M1.string().optional()})})]))]),name:M1.string().optional()}),M1.object({role:M1.literal("assistant"),content:M1.string().nullable().optional(),name:M1.string().optional(),tool_calls:M1.array(L36).optional()}),M1.object({role:M1.literal("tool"),content:M1.string(),tool_call_id:M1.string()})]),j36=M1.object({type:M1.literal("text")}),z36=M1.object({type:M1.literal("json_object")}),P36=M1.object({type:M1.literal("json_schema"),json_schema:M1.object({name:M1.string(),description:M1.string().optional(),schema:M1.record(M1.string(),M1.unknown()),strict:M1.boolean().optional()})}),A36=M1.union([j36,z36,P36]),T36=M1.object({model:M1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:M1.array(E36),stream:M1.boolean().optional().default(!1),temperature:M1.number().min(0).max(2).optional(),max_tokens:M1.number().positive().optional(),top_p:M1.number().min(0).max(1).optional(),frequency_penalty:M1.number().min(-2).max(2).optional(),presence_penalty:M1.number().min(-2).max(2).optional(),stop:M1.union([M1.string(),M1.array(M1.string())]).optional(),tools:M1.array(D36).optional(),tool_choice:M1.union([M1.literal("auto"),M1.literal("none"),M1.literal("required"),M1.object({type:M1.literal("function"),function:M1.object({name:M1.string()})})]).optional(),response_format:A36.optional(),user:M1.string().optional()});Ch$=class Ch$ extends Error{constructor($){super($);this.name="MessageConversionError"}};_h$=new H1;_h$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(GF("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(GF("Organization context is required. Ensure your API key has organization metadata.","invalid_request_error","organization"),400);if((Z.organization.slug??Z.organization.id)!==X)return $.json(GF("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Q=await $.req.json(),Y=T36.safeParse(Q);if(!Y.success){let L=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(GF(`Invalid request: ${L.message}`,"invalid_request_error",L.path.length>0?L.path.join("."):null),400)}let G=Y.data,J=R36(G.model);if(!J)return $.json(GF("Invalid model format. Expected 'model_id' or 'credential_id:model_id' (e.g., 'claude-sonnet-4-6' or 'key_abc123:claude-sonnet-4-6')","invalid_request_error","model"),400);let{credentialId:W}=J,{modelId:K}=J;if(!W){let E=(await Z.storage.aiProviderKeys.list({organizationId:Z.organization.id})).find((j)=>fD(j.providerId));if(!E)return $.json(GF("No AI provider credentials configured for this organization. Add a credential in settings or specify one explicitly via 'credential_id:model_id'.","invalid_request_error","model"),400);W=E.id}let F;try{F=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(GF(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let H=F.aiSdk.languageModel(K),N=q36(G.messages),U=G.tools?M36(G.tools):void 0,O=k36(G.response_format),B=V36(),D=Math.floor(Date.now()/1000);if(G.stream)return IN($,async(L)=>{let E=Vh$(H,N,U,G,O,$.req.raw.signal);try{let j=tO(E),z=!1,A=0,P="",I=async()=>{if(P.length===0)return;let k=P;P="",await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{content:k},finish_reason:null}]})})};for await(let k of j.fullStream){if(!z&&(k.type==="text-delta"||k.type==="tool-call"))await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(k.type==="text-delta"){if(P+=k.text,P.length>=w36)await I()}else if(k.type==="tool-call"){await I();let q=A++;await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{tool_calls:[{index:q,id:k.toolCallId,type:"function",function:{name:k.toolName,arguments:JSON.stringify(k.input)}}]},finish_reason:null}]})})}else if(k.type==="finish")await I(),await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{},finish_reason:Sh$(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 I(),await L.writeSSE({data:"[DONE]"})}catch(j){let z=j;console.error("[openai-compat:stream] Error:",z.message),await L.writeSSE({data:JSON.stringify({error:{message:z.message,type:"server_error"}})})}});else{let L=Vh$(H,N,U,G,O,$.req.raw.signal),E=await pO(L),j={role:"assistant",content:E.text||null};if(E.toolCalls&&E.toolCalls.length>0)j.tool_calls=E.toolCalls.map((z)=>({id:z.toolCallId,type:"function",function:{name:z.toolName,arguments:JSON.stringify("input"in z?z.input:{})}})),j.content=null;return $.json({id:B,object:"chat.completion",created:D,model:G.model,choices:[{index:0,message:j,finish_reason:Sh$(E.finishReason)}],usage:{prompt_tokens:E.usage?.inputTokens??0,completion_tokens:E.usage?.outputTokens??0,total_tokens:E.usage?.totalTokens??0}})}}catch(Q){let Y=Q;if(Y.name==="AbortError")return $.json(GF("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(GF(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(GF(Y.message,"server_error"),500)}});vh$=_h$});function S36($){if(typeof $!=="object"||$===null)return!1;let X=$.githubRepo?.url;return typeof X==="string"&&X.length>0}function bh$(){let $=new H1;return $.use("*",async(Z,X)=>{await X(),Z.header("Cache-Control","private, no-store"),Z.header("Vary","Cookie")}),$.get("/",async(Z)=>{let X=Z.get("studioContext"),Q=G1(X);if(!Q)return Z.json({error:"Authentication required"},401);let G=(Z.req.query("site")??"").trim().toLowerCase();if(!uG(G))return Z.json({error:"Invalid site slug"},400);let J=await X.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["organization.id as id","organization.slug as slug","organization.name as name","organization.metadata as metadata"]).where("member.userId","=",Q).execute(),W=[];for(let F of J){if(!F.slug||W7(F))continue;let H=await X.storage.virtualMcps.list(F.id);for(let N of H){if(Ba1(N)!==G)continue;if(!S36(N.metadata))continue;W.push({orgSlug:F.slug,orgName:F.name??F.slug,project:{id:N.id,title:N.title,icon:N.icon??null}})}}let K={matches:W};return Z.json(K)}),$}var xh$=w(()=>{D8();fO()});var gh$;var yh$=w(()=>{gh$={name:"decocms",version:"4.252.7",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@nats-io/jwt":"0.0.10-5","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function v36(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??_36}}var hh$,_36="https://ph.studio.decocms.com",uh$;var ch$=w(()=>{D8();Mh0();KC();f9();R$();R61();yh$();hh$=new H1;hh$.get("/",($)=>{let Z={version:gh$.version,theme:gd1(),...RL().logo&&{logo:RL().logo},...qK()&&{internalUrl:wS1()},...b0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!b0().firecrawlApiKey,auth:ev$(),posthog:v36(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!qK()&&b0().sandboxProviderKind==="agent-sandbox"}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});uh$=hh$});function Xu($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function m91($){return(Xu($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function dh$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(Xu($))}&sz=${Z}`}function lh$($,Z){let X=$.trim();if(X.length<=Z)return X;let Q=X.slice(0,Z-1),Y=Q.lastIndexOf(" ");return`${(Y>Z*0.6?Q.slice(0,Y):Q).trimEnd()}\u2026`}function mh$($){let{brand:Z,domain:X,score:Q,verdict:Y}=$,G=typeof Q==="number"?`${Z} commerce report \u2014 ${Math.round(Q)}/100 \xB7 decocms`:`${Z} commerce report \xB7 decocms`,J=`See the full ${Z} scorecard \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,W=Y?.trim()?lh$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):lh$(`How does ${X} really perform? ${J}`,200);return{title:G,description:W}}import{z as l0}from"zod";var b_,f36,b36,x36,y36,ih$;var ph$=w(()=>{b_=l0.enum(["good","bad","neutral"]),f36=l0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((X)=>X!==null&&typeof X!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},l0.object({kind:l0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:l0.coerce.string().optional(),tone:b_.optional(),muted:l0.boolean().optional(),delta:l0.coerce.string().optional(),deltaDir:l0.enum(["up","down","neutral"]).optional(),points:l0.array(l0.coerce.number()).optional(),label:l0.coerce.string().optional()}).transform(($)=>{if($.kind==="badge"&&$.label==null)$.label=$.value??"";if($.kind==="score"){let Z=Number($.value);if(Number.isNaN(Z))return{...$,kind:"text"}}return $})),b36=l0.preprocess(($)=>{let Z=$;if(Z&&typeof Z==="object"&&!Array.isArray(Z)&&Array.isArray(Z.cells))Z=Z.cells;if(Array.isArray(Z)&&Z.length===1&&Array.isArray(Z[0]))Z=Z[0];if(Array.isArray(Z))return Z;if(Z&&typeof Z==="object")return Object.values(Z);return Z},l0.array(f36)),x36={key:l0.coerce.string(),title:l0.coerce.string(),eyebrow:l0.coerce.string().optional(),headline:l0.coerce.string(),annotation:l0.coerce.string().optional(),methodology:l0.coerce.string().optional(),sources:l0.array(l0.object({name:l0.coerce.string(),logoUrl:l0.coerce.string()})).optional()},y36=l0.discriminatedUnion("template",[l0.object({template:l0.literal("cover"),score:l0.object({value:l0.coerce.number(),max:l0.coerce.number().optional(),grade:l0.coerce.string().optional(),label:l0.coerce.string().optional()}).optional(),brandImage:l0.coerce.string().optional(),screenshot:l0.coerce.string().optional(),mobileScreenshot:l0.coerce.string().optional()}),l0.object({template:l0.literal("cta"),ctaUrl:l0.coerce.string().optional(),ctaLabel:l0.coerce.string().optional(),bullets:l0.array(l0.coerce.string()).optional()}),l0.object({template:l0.literal("series"),points:l0.array(l0.coerce.number()).min(2),xLabels:l0.array(l0.coerce.string()).min(1),unit:l0.coerce.string().optional(),callout:l0.object({index:l0.coerce.number(),value:l0.coerce.string(),tone:b_.optional()})}),l0.object({template:l0.literal("threshold"),value:l0.coerce.string().default(""),metricLabel:l0.coerce.string().optional(),ratio:l0.coerce.number(),thresholdRatio:l0.coerce.number().optional(),thresholdLabel:l0.coerce.string().default(""),tone:b_.optional()}),l0.object({template:l0.literal("stats"),stats:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),tone:b_.optional()})).min(1)}),l0.object({template:l0.literal("bars"),items:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),ratio:l0.coerce.number(),tone:b_.optional()})).min(1)}),l0.object({template:l0.literal("gauges"),gauges:l0.array(l0.object({label:l0.coerce.string(),value:l0.coerce.string(),status:l0.enum(["good","warn","bad"]).catch("warn"),caption:l0.coerce.string().optional(),ratio:l0.coerce.number().optional()})).min(1)}),l0.object({template:l0.literal("checklist"),checks:l0.array(l0.object({label:l0.coerce.string(),status:l0.enum(["pass","fail","warn"]).catch("fail"),value:l0.coerce.string().optional()})).min(1)}),l0.object({template:l0.literal("table"),columns:l0.array(l0.object({label:l0.coerce.string(),align:l0.enum(["left","right"]).optional()})).min(1),rows:l0.array(b36).min(1),highlightRow:l0.coerce.number().optional()}),l0.object({template:l0.literal("products"),products:l0.array(l0.object({name:l0.coerce.string(),price:l0.coerce.string().optional(),image:l0.coerce.string().optional(),url:l0.coerce.string().optional()})).min(1)}),l0.object({template:l0.literal("list"),entries:l0.array(l0.object({label:l0.coerce.string(),severity:l0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:l0.coerce.number().optional()}),l0.object({template:l0.literal("keywords"),volumeLabel:l0.coerce.string().optional(),keywords:l0.array(l0.object({term:l0.coerce.string(),volume:l0.coerce.string(),position:l0.coerce.number().catch(0)})).min(1)}),l0.object({template:l0.literal("competitor"),metricLabel:l0.coerce.string().optional(),competitors:l0.array(l0.object({name:l0.coerce.string(),value:l0.coerce.string(),tone:b_.optional(),isYou:l0.boolean().optional()})).min(1)}),l0.object({template:l0.literal("scorecard"),rivalLabel:l0.coerce.string().optional(),dimensions:l0.array(l0.object({label:l0.coerce.string(),you:l0.coerce.string(),rival:l0.coerce.string().optional(),rivalName:l0.coerce.string().optional(),tone:b_.optional()})).min(1)})]),ih$=l0.object({...x36,template:y36})});function HA0($){let Z=[],X=[...$.sections].sort((Y,G)=>Y.position-G.position).map((Y)=>{let G=ih$.safeParse(Y.props);if(G.success)return G.data;let J=G.error.issues[0];return Z.push({section_type:Y.section_type,position:Y.position,reason:J?`${J.path.join(".")||"(root)"}: ${J.message}`:"contract violation"}),null}).filter((Y)=>Y!==null),Q=X.filter((Y)=>Y.template.template!=="cover"&&Y.template.template!=="cta").map((Y)=>({key:Y.key,title:Y.title}));return{deck:{meta:{...$.meta,scores:$.summary?.scores,scannedAt:$.scanned_at,toc:Q},slides:X},drops:Z}}var i91=w(()=>{ph$()});import{join as nh$}from"path";async function h36($){try{let Z=await fetch(`${aW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(g36)});if(!Z.ok)return null;let X=await Z.json(),{deck:Q}=HA0(X);if(!Q.slides.length)return null;let Y=Q.slides.find((W)=>W.template.template==="cover"),G=Y?.template,J=G&&G.template==="cover"?G:void 0;return{brand:Q.meta.brand?.trim()||m91($),score:Q.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function WG($){return $.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function u36($,Z){let X=Xu($),Q=Z?.brand?.trim()||m91(X),Y=dh$(X,128),J=`${(b0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=mh$({brand:Q,domain:X,score:Z?.score,verdict:Z?.verdict}),F=`${J}/og.png`,H=`${Q} commerce report by decocms`;return[`<title>${WG(W)}</title>`,`<meta name="description" content="${WG(K)}" />`,'<meta name="robots" content="noindex, follow" />','<meta property="og:type" content="website" />','<meta property="og:site_name" content="decocms" />',`<meta property="og:title" content="${WG(W)}" />`,`<meta property="og:description" content="${WG(K)}" />`,`<meta property="og:url" content="${WG(J)}" />`,`<meta property="og:image" content="${WG(F)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${WG(H)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${WG(W)}" />`,`<meta name="twitter:description" content="${WG(K)}" />`,`<meta name="twitter:image" content="${WG(F)}" />`,`<meta name="twitter:image:alt" content="${WG(H)}" />`,`<link rel="canonical" href="${WG(J)}" />`,`<link rel="icon" href="${WG(Y)}" sizes="any" />`].join(`
|
|
2914
2914
|
`)}function c36($,Z){return $.replace(/<title>[\s\S]*?<\/title>\s*/i,"").replace(/<meta\s+name="(?:description|twitter:[^"]*)"[^>]*>\s*/gi,"").replace(/<meta\s+property="og:[^"]*"[^>]*>\s*/gi,"").replace(/<link\s+rel="icon"[^>]*>\s*/gi,"").replace("</head>",` ${Z}
|
|
2915
2915
|
</head>`)}function th$($){let Z=new H1;return Z.get("/:domain/og.png",async(X)=>{let Q=Xu(X.req.param("domain")),Y=async()=>{let G=$?Bun.file(nh$($,"report-og-fallback.png")):null;if(!G||!await G.exists())return X.notFound();return X.body(new Uint8Array(await G.arrayBuffer()),200,{"Content-Type":"image/png","Cache-Control":"public, max-age=0, s-maxage=3600"})};try{let G=await fetch(`${aW({})}/api/v2/public/diagnostics/${encodeURIComponent(Q)}/og.png`,{signal:AbortSignal.timeout(l36)}),J=G.headers.get("content-type")??"";if(!G.ok||!J.startsWith("image/")||!G.body)return Y();return X.body(G.body,200,{"Content-Type":J,"Cache-Control":"public, max-age=0, s-maxage=604800"})}catch{return Y()}}),Z.get("/:domain",async(X)=>{let Q=X.req.param("domain"),Y=$?nh$($,"index.html"):null,G=Y?Bun.file(Y):null;if(!G||!await G.exists())return X.notFound();let J=await G.text();try{let W=await h36(Xu(Q)),K=u36(Q,W);return X.html(c36(J,K),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return X.html(J)}}),Z}var g36=2500,l36=1e4;var oh$=w(()=>{D8();i91();gL();R$()});function La($,Z){return fetch(`${aW({})}${$}`,Z)}async function d36($,Z,X){let Q=new URLSearchParams;if(Z)Q.set("pw",Z);if(X)Q.set("lang",X);let Y=Q.toString()?`?${Q.toString()}`:"",G=await La(`/api/v2/public/diagnostics/${encodeURIComponent($)}${Y}`,{headers:{Accept:"application/json"}});if(G.status===404)return{status:"not_found",deck:null,scanned_at:null,drops:[]};if(!G.ok)throw Error(`report read HTTP ${G.status}`);let J=await G.json(),{deck:W,drops:K}=HA0(J);return{status:W.slides.length?"ready":"empty",deck:W,scanned_at:J.scanned_at,drops:K}}var m36,MN,rh$=async($,Z)=>{if(!$.get("reportUser"))return $.json({error:"Authentication required"},401);await Z();return},ah$;var sh$=w(()=>{D8();bY();gL();i91();m36=new Set(["complete","errored","terminated","unknown"]),MN=new H1;MN.use("*",async($,Z)=>{let X=await F8.api.getSession({headers:$.req.raw.headers});$.set("reportUser",X?.user?.id?{email:X.user.email}:void 0),await Z(),$.header("Cache-Control","private, no-store"),$.header("Vary","Cookie");return});MN.use("/link-token/*",rh$);MN.use("/suggest",rh$);MN.get("/site/:domain",async($)=>{let Z=$.req.param("domain").trim();if(!Z)return $.json({error:"domain is required"},400);let X=$.get("reportUser"),Q=$.req.query("key")?.trim()||void 0,Y=$.req.query("lang")?.trim()||void 0;try{let G=await d36(Z,Q,Y);if($.header("Cache-Control","private, no-store"),X||!G.deck)return $.json(G);return $.json({...G,deck:{...G.deck,slides:G.deck.slides.slice(0,1)},truncated:G.status==="ready"})}catch{return $.json({error:"report read failed"},502)}});MN.post("/run",async($)=>{let Z=$.get("reportUser"),X;try{X=await $.req.json()}catch{return $.json({error:"invalid JSON"},400)}let Q=typeof X.domain==="string"?X.domain.trim():"";if(!Q)return $.json({error:"domain is required"},400);let Y=Z?.email,G=typeof X.distinctId==="string"&&X.distinctId.trim()&&X.distinctId.length<=200?X.distinctId.trim():void 0;try{let J=await La("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${yL({})}`},body:JSON.stringify({url:Q,...Y?{email:Y}:{},distinct_id:G})});if(!J.ok)return $.json({error:`run HTTP ${J.status}`},502);let W=await J.json(),K=W.blocked?{state:"blocked"}:W.status==="fresh"?{state:"fresh"}:W.mode==="sync"?{state:"sync"}:{state:"running",id:W.id??null};return $.json(K)}catch{return $.json({error:"run failed"},502)}});MN.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let X=await La(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${yL({})}`}});if(!X.ok)return $.json({error:`status HTTP ${X.status}`},502);let Y=(await X.json()).status??"unknown",G={done:m36.has(Y),status:Y};return $.json(G)}catch{return $.json({error:"status failed"},502)}});MN.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let X=await La(`/api/v2/public/link-tokens/${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"}});if(X.status===404)return $.json(null);if(!X.ok)return $.json({error:`link token HTTP ${X.status}`},502);return $.json(await X.json())}catch{return $.json({error:"link token resolve failed"},502)}});MN.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let X=await La(`/api/v2/public/suggest?q=${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"}});if(!X.ok)return $.json({suggestions:[]});let Q=await X.json();return $.json({suggestions:Array.isArray(Q.suggestions)?Q.suggestions:[]})}catch{return $.json({suggestions:[]})}});ah$=MN});import{createHmac as i36,timingSafeEqual as p36}from"crypto";function $u$($,Z,X,Q=Date.now()){if(!Z||!X)return!1;let Y,G=[];for(let F of Z.split(",")){let H=F.indexOf("=");if(H<=0)continue;let N=F.slice(0,H).trim(),U=F.slice(H+1).trim();if(N==="t")Y=U;else if(N==="v1")G.push(U)}if(!Y||G.length===0)return!1;let J=Number(Y);if(!Number.isFinite(J)||Math.abs(Q/1000-J)>n36)return!1;let W=i36("sha256",X).update(`${Y}.${$}`).digest("hex"),K=Buffer.from(W,"hex");return G.some((F)=>{let H=Buffer.from(F,"hex");return K.length===H.length&&p36(K,H)})}function Zu$($){let Z;try{Z=JSON.parse($)}catch{return null}let X=IJ(Z),Q=IJ(IJ(X?.data)?.object);if(!X||typeof X.type!=="string"||!Q)return null;return{id:JF(X.id),type:X.type,created:typeof X.created==="number"?X.created:void 0,livemode:typeof X.livemode==="boolean"?X.livemode:void 0,data:{object:Q}}}function Xu$($){switch($){case"active":case"trialing":return"active";case"past_due":return"past_due";default:return"canceled"}}function JF($){return typeof $==="string"?$:void 0}function IJ($){return typeof $==="object"&&$!==null?$:void 0}function NA0($){return typeof $==="number"?new Date($*1000):null}function t91($){return JF($)??JF(IJ($)?.id)}function t36($){return t91($.subscription)??JF(IJ(IJ($.parent)?.subscription_details)?.subscription)}function o36($){let Z=NA0($.current_period_end);if(Z)return Z;let X=IJ($.items)?.data;if(!Array.isArray(X))return null;let Q=0;for(let Y of X){let G=IJ(Y)?.current_period_end;if(typeof G==="number"&&G>Q)Q=G}return Q>0?new Date(Q*1000):null}function p91($,Z){let X=NA0($.created);return!!X&&!!Z.lastStripeEventAt&&X<Z.lastStripeEventAt}function n91($,Z){let X=NA0($.created);if(!X)return;return Z.lastStripeEventAt&&Z.lastStripeEventAt>X?void 0:X}async function r36($,Z){let X=Z.data.object;switch(Z.type){case"checkout.session.completed":case"checkout.session.async_payment_succeeded":{let Q=JF(IJ(X.metadata)?.orgId);if(!Q)return{handled:!1,reason:"no orgId"};if(JF(IJ(X.metadata)?.kind)==="topup"){if(X.mode!=="payment")return{handled:!1,reason:"topup with wrong mode"};if(JF(X.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let J=JF(X.id);if(!J)return console.error("stripe webhook: topup session without id",{eventId:Z.id,organizationId:Q}),{handled:!1,reason:"topup session without id"};let W=Number(IJ(X.metadata)?.creditCents);if(!Number.isInteger(W)||W<=0)return console.error("stripe webhook: paid topup with bad metadata \u2014 credit NOT applied",{eventId:Z.id,organizationId:Q,creditCents:IJ(X.metadata)?.creditCents}),{handled:!1,reason:"bad topup metadata"};return{handled:!0,organizationId:Q,topUp:{creditCents:W,referenceId:`stripe-topup:${J}`}}}if(X.mode!=="subscription")return{handled:!1,reason:"not a subscription checkout"};if(JF(X.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let Y=await $.getBilling(Q);if(!Y)return{handled:!1,reason:"unknown org"};let G=t91(X.subscription);if(Y.stripeSubscriptionId&&G&&Y.stripeSubscriptionId!==G)return console.error("stripe webhook: refused checkout rebind",{organizationId:Q,eventId:Z.id}),{handled:!1,reason:"org already bound to another subscription",orphanSubscriptionId:G};if(p91(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Q,{stripeCustomerId:t91(X.customer),stripeSubscriptionId:G,status:"active",lastStripeEventAt:n91(Z,Y)}),{handled:!0,organizationId:Q}}case"customer.subscription.updated":case"customer.subscription.deleted":{let Q=JF(X.id);if(!Q)return{handled:!1,reason:"no sub id"};let Y=await $.getBillingByStripeSubscriptionId(Q);if(!Y)return{handled:!1,reason:"unknown subscription"};let G=Z.type==="customer.subscription.deleted";if(!G&&p91(Z,Y))return{handled:!1,reason:"stale event"};let J=G?"canceled":Xu$(X.status);return await $.updateStripeState(Y.organizationId,{status:J,currentPeriodEnd:o36(X),...G&&{stripeSubscriptionId:null},lastStripeEventAt:n91(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}case"invoice.paid":{let Q=t36(X);if(!Q)return{handled:!1,reason:"no sub id"};let Y=await $.getBillingByStripeSubscriptionId(Q);if(!Y)return{handled:!1,reason:"unknown subscription"};if(p91(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Y.organizationId,{status:"active",currentPeriodEnd:NA0(X.period_end),lastStripeEventAt:n91(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}default:return{handled:!1,reason:`unhandled event ${Z.type}`}}}function a36($,Z){if(!Z.handled||$.livemode===!1)return null;let X=$.data.object;if(Z.topUp)return{name:"credits_topup_succeeded",organizationId:Z.organizationId,properties:{credit_cents:Z.topUp.creditCents}};switch($.type){case"checkout.session.completed":case"checkout.session.async_payment_succeeded":return{name:"subscription_started",organizationId:Z.organizationId,properties:{}};case"customer.subscription.deleted":return{name:"subscription_canceled",organizationId:Z.organizationId,properties:{}};case"customer.subscription.updated":return{name:"subscription_updated",organizationId:Z.organizationId,properties:{status:Xu$(X.status),...typeof X.cancel_at_period_end==="boolean"?{cancel_at_period_end:X.cancel_at_period_end}:{}}};case"invoice.paid":if(X.billing_reason==="subscription_create")return null;return{name:"subscription_renewed",organizationId:Z.organizationId,properties:{}};default:return null}}function eh$($,Z){let X=a36($,Z);if(!X)return;SY({event:X.name,organizationId:X.organizationId,...$.id?{uuid:pi1(`stripe:${$.id}:${X.name}`)}:{},...$.created?{timestamp:new Date($.created*1000)}:{},properties:X.properties})}async function Qu$($){let Z=new nW(u8().db),X=await r36(Z,$);if(!(X.handled&&X.topUp))eh$($,X);if(X.handled&&X.topUp)await yw$({organizationId:X.organizationId,amountCents:X.topUp.creditCents,referenceId:X.topUp.referenceId}),eh$($,X);if(!X.handled&&X.orphanSubscriptionId)try{await Hs1(X.orphanSubscriptionId),console.error("stripe webhook: canceled orphan subscription",{subscriptionId:X.orphanSubscriptionId,eventId:$.id})}catch(Q){if(!(Q instanceof xY&&(Q.status===400||Q.status===404)))throw Q}return X}var n36=300;var Yu$=w(()=>{bG();k4();j60();nL();Je0()});var s36=1048576,o91;var Gu$=w(()=>{D8();DN();R$();Yu$();o91=new H1;o91.post("/webhook",k9({maxSize:s36,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=b0().stripeWebhookSecret;if(!Z)return $.json({error:"stripe billing not configured"},503);let X=await $.req.text();if(!$u$(X,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let Y=Zu$(X);if(!Y)return $.json({error:"invalid payload"},400);let G=await Qu$(Y);return console.log("stripe webhook",{eventId:Y.id,type:Y.type,livemode:Y.livemode,...G}),$.json({received:!0})})});import{timingSafeEqual as e36}from"crypto";function ZW6($,Z,X){if(!Z?.startsWith("sha256="))return!1;let Q=new Bun.CryptoHasher("sha256",X).update($).digest("hex"),Y=Z.slice(7);if(Y.length!==Q.length)return!1;return e36(Buffer.from(Y),Buffer.from(Q))}var $W6=5242880,r91;var Ju$=w(()=>{D8();DN();up();r91=new H1;r91.post("/webhook",k9({maxSize:$W6,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=process.env.GITHUB_WEBHOOK_SECRET;if(!Z)return $.json({error:"github webhook not configured"},503);let X=await $.req.text();if(!ZW6(X,$.req.header("x-hub-signature-256"),Z))return $.json({error:"invalid signature"},400);if($.req.header("x-github-event")!=="push")return $.json({ok:!0,ignored:"event"});let Q;try{Q=JSON.parse(X)}catch{return $.json({error:"invalid payload"},400)}let Y=Q.ref,G=Q.repository?.full_name;if(!Y||!G)return $.json({ok:!0,ignored:"shape"});let W=(await Pp0())?.markTenantPoolsDirty(G,Y)??[];return $.json({ok:!0,pools:W})})});function Wu$($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var Ku$,XW6,QW6,Fu$;var Hu$=w(()=>{D8();N3();Ry();Px();Ku$=new H1,XW6=["range","if-none-match","if-modified-since"],QW6=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];Ku$.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),X=Z.organization?.id;if(!Z.auth?.user?.id){if(kh($))return $.redirect(`/login?next=${encodeURIComponent($.req.path)}`,302);throw new $$(401,{message:"Authentication required"})}if(!X)throw new $$(401,{message:"Organization context required"});let Q=$.req.path.replace(/^.*\/files\//,"");if(!Q)throw new $$(400,{message:"Missing file key"});let Y=await Dn(Q,Z);if(!Y)throw new $$(503,{message:"Object storage not configured"});if(Y.startsWith("data:")&&D3()){let K=Y.match(/^data:([^;]+);base64,(.+)$/s);if(!K)throw new $$(500,{message:"Invalid data URL from storage"});let[,F,H]=K,N=Buffer.from(H,"base64"),U=new Headers({"Content-Type":F,"Cache-Control":"private, max-age=86400"});return Wu$(U,F),new Response(N,{status:200,headers:U})}let G=new Headers;for(let K of XW6){let F=$.req.header(K);if(F)G.set(K,F)}let J=await fetch(Y,{headers:G});if(J.status===403||J.status===404)throw new $$(404,{message:"File not found"});if(!J.ok&&J.status!==304&&J.status!==416)throw console.error(`[files] upstream storage error ${J.status} for key:`,Q),new $$(502,{message:"Upstream storage error"});let W=new Headers;for(let K of QW6){let F=J.headers.get(K);if(F)W.set(K,F)}return W.set("Cache-Control","private, max-age=86400"),Wu$(W,W.get("content-type")??""),new Response(J.body,{status:J.status,headers:W})});Fu$=Ku$});var Ea=_((x_)=>{var YW6=x_&&x_.__createBinding||(Object.create?function($,Z,X,Q){if(Q===void 0)Q=X;var Y=Object.getOwnPropertyDescriptor(Z,X);if(!Y||("get"in Y?!Z.__esModule:Y.writable||Y.configurable))Y={enumerable:!0,get:function(){return Z[X]}};Object.defineProperty($,Q,Y)}:function($,Z,X,Q){if(Q===void 0)Q=X;$[Q]=Z[X]}),GW6=x_&&x_.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))YW6(Z,$,X)};Object.defineProperty(x_,"__esModule",{value:!0});GW6(OY(),x_)});var Ou$=_((Nu$)=>{Object.defineProperty(Nu$,"__esModule",{value:!0});Nu$.version=void 0;Nu$.version="3.4.0"});var Du$=_((WF)=>{var JW6=WF&&WF.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(WF,"__esModule",{value:!0});WF.NodeTransport=WF.VERSION=void 0;WF.nodeResolveHost=UW6;var r6=Ea(),WW6=z0("net"),a91=z0("tls"),KW6=z0("path"),Bu$=z0("fs"),FW6=JW6(z0("dns")),HW6=Ou$();WF.VERSION=HW6.version;var NW6="nats.js";class wu${socket;version;lang;yields=[];signal=(0,r6.deferred)();closedNotification=(0,r6.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=NW6,this.version=WF.VERSION}async connect($,Z){this.tlsName=$.tlsName,this.options=Z;let{tls:X}=this.options,{handshakeFirst:Q}=X||{};try{if(Q===!0)this.socket=await this.tlsFirst($);else this.socket=await this.dial($);if(this.done)this.socket?.destroy();let Y=await this.peekInfo();(0,r6.checkOptions)(Y,Z);let{tls_required:G,tls_available:J}=Y,W=J===!0&&Z.tls!==null;if(!Q&&(G||W))this.socket=await this.startTLS();if(this.done)this.socket?.destroy();if(G&&this.socket.encrypted!==!0)throw r6.errors.InvalidArgumentError.format("tls","is not available on this server");return this.connected=!0,this.setupHandlers(),this.signal.resolve(),Promise.resolve()}catch(Y){let G=Y;if(!G)G=new r6.errors.ConnectionError("error connecting - node provided an undefined error");let{code:J}=G,W=J==="ECONNREFUSED"?new r6.errors.ConnectionError("connection refused",{cause:G}):G;throw this.socket?.destroy(),W}}dial($){let Z=(0,r6.deferred)(),X,Q=(0,WW6.createConnection)($.port,$.hostname,()=>{Z.resolve(Q),Q.removeAllListeners()});return Q.on("error",(Y)=>{X=Y}),Q.on("close",()=>{Q.removeAllListeners(),Z.reject(X)}),Q.setNoDelay(!0),Z}get isClosed(){return this.done}close($){return this._closed($,!1)}peekInfo(){let $=(0,r6.deferred)(),Z;return this.socket.on("data",(X)=>{this.yields.push(X);let Q=r6.DataBuffer.concat(...this.yields),Y=(0,r6.extractProtocolMessage)(Q);if(Y!=="")try{let G=r6.INFO.exec(Y);if(!G)throw Error("unexpected response from server");let J=JSON.parse(G[1]);$.resolve(J)}catch(G){$.reject(G)}finally{this.socket.removeAllListeners()}}),this.socket.on("error",(X)=>{Z=X}),this.socket.on("close",()=>{this.socket.removeAllListeners(),$.reject(Z)}),$}loadFile($){if(!$)return Promise.resolve();let Z=(0,r6.deferred)();try{if($=(0,KW6.resolve)($),!(0,Bu$.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,Bu$.readFile)($,(X,Q)=>{if(X)return Z.reject(X);Z.resolve(Q)})}catch(X){Z.reject(X)}return Z}async loadClientCerts(){let $={},{certFile:Z,cert:X,caFile:Q,ca:Y,keyFile:G,key:J}=this.options.tls;try{if(Z){let W=await this.loadFile(Z);if(W)$.cert=W}else if(X)$.cert=X;if(G){let W=await this.loadFile(G);if(W)$.key=W}else if(J)$.key=J;if(Q){let W=await this.loadFile(Q);if(W)$.ca=[W]}else if(Y)$.ca=Y;return Promise.resolve($)}catch(W){return Promise.reject(W)}}async tlsFirst($){let Z,X={servername:this.tlsName,rejectUnauthorized:!0};if(this.socket)X.socket=this.socket;if(typeof this.options.tls==="object")try{let Y=await this.loadClientCerts()||{};X=(0,r6.extend)(X,this.options.tls,Y)}catch(Y){return Promise.reject(new r6.errors.ConnectionError(Y.message,{cause:Y}))}let Q=(0,r6.deferred)();try{let Y=(0,a91.connect)($.port,$.hostname,X,()=>{Y.removeAllListeners(),Q.resolve(Y)});Y.on("error",(G)=>{Z=G}),Y.on("secureConnect",()=>{if(X.rejectUnauthorized===!1)return;if(!Y.authorized)throw Y.authorizationError}),Y.on("close",()=>{Q.reject(Z),Y.removeAllListeners()}),Y.setNoDelay(!0)}catch(Y){Q.reject(new r6.errors.ConnectionError(Y.message,{cause:Y}))}return Q}async startTLS(){let $,Z={socket:this.socket,servername:this.tlsName,rejectUnauthorized:!0};if(typeof this.options.tls==="object")try{let Q=await this.loadClientCerts()||{};Z=(0,r6.extend)(Z,this.options.tls,Q)}catch(Q){return Promise.reject(new r6.errors.ConnectionError(Q.message,{cause:Q}))}let X=(0,r6.deferred)();try{let Q=(0,a91.connect)(Z,()=>{Q.removeAllListeners(),X.resolve(Q)});Q.on("error",(Y)=>{$=Y}),Q.on("secureConnect",()=>{if(Z.rejectUnauthorized===!1)return;if(!Q.authorized)throw Q.authorizationError}),Q.on("close",()=>{X.reject($),Q.removeAllListeners()})}catch(Q){X.reject(new r6.errors.ConnectionError(Q.message,{cause:Q}))}return X}setupHandlers(){let $;this.socket.on("data",(Z)=>{return this.yields.push(Z),this.signal.resolve()}),this.socket.on("error",(Z)=>{$=Z}),this.socket.on("end",()=>{if(this.socket?.destroyed)return;this.socket?.write(new Uint8Array(0),()=>{this.socket?.end()})}),this.socket.on("close",()=>{this._closed($,!1)})}[Symbol.asyncIterator](){return this.iterate()}async*iterate(){while(!0){if(this.yields.length===0)await this.signal;let $=this.yields;this.yields=[];for(let Z=0;Z<$.length;Z++){if(this.options.debug)console.info(`> ${(0,r6.render)($[Z])}`);yield $[Z]}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,r6.deferred)()}}discard(){if(this.done=!0,this.socket)try{this.socket.removeAllListeners(),this.socket.destroy()}catch{}}disconnect(){this._closed(void 0,!0).then().catch()}isEncrypted(){return this.socket instanceof a91.TLSSocket}_send($){if(this.isClosed||this.socket===void 0)return Promise.resolve();if(this.options.debug)console.info(`< ${(0,r6.render)($)}`);let Z=(0,r6.deferred)();try{this.socket.write($,(X)=>{if(X){if(this.options.debug)console.error(`!!! ${(0,r6.render)($)}: ${X}`);return Z.reject(X)}return Z.resolve()})}catch(X){if(this.options.debug)console.error(`!!! ${(0,r6.render)($)}: ${X}`);Z.reject(X)}return Z}send($){this._send($).catch((X)=>{})}async _closed($,Z=!0){if(!this.connected)return;if(this.done){this.socket?.destroy();return}if(this.closeError=$,!$&&this.socket&&Z)try{await this._send(new TextEncoder().encode(""))}catch(X){if(this.options.debug)console.log("transport close terminated with an error",X)}try{if(this.socket)this.socket.removeAllListeners(),this.socket?.destroy(),this.socket=void 0}catch(X){console.log(X)}this.done=!0,this.closedNotification.resolve(this.closeError)}closed(){return this.closedNotification}}WF.NodeTransport=wu$;function UW6($){let Z=(0,r6.deferred)();return FW6.default.lookup($,{all:!0},(X,Q)=>{if(X){Z.reject(X);return}let Y=[];for(let G of Q)Y.push(G.address);if(Y.length===0)Y.push($);Z.resolve(Y)}),Z}});var Pu$=_((zu$)=>{Object.defineProperty(zu$,"__esModule",{value:!0});zu$.connect=OW6;var Lu$=Du$(),Eu$=Ea(),ju$=Ea();function OW6($={}){if((0,ju$.hasWsProtocol)($))return Promise.reject(ju$.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,Eu$.setTransportFactory)({factory:()=>{return new Lu$.NodeTransport},dnsResolveFn:Lu$.nodeResolveHost}),Eu$.NatsConnectionImpl.connect($)}});var Au$=_((kN)=>{var wW6=kN&&kN.__createBinding||(Object.create?function($,Z,X,Q){if(Q===void 0)Q=X;var Y=Object.getOwnPropertyDescriptor(Z,X);if(!Y||("get"in Y?!Z.__esModule:Y.writable||Y.configurable))Y={enumerable:!0,get:function(){return Z[X]}};Object.defineProperty($,Q,Y)}:function($,Z,X,Q){if(Q===void 0)Q=X;$[Q]=Z[X]}),DW6=kN&&kN.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))wW6(Z,$,X)};Object.defineProperty(kN,"__esModule",{value:!0});kN.connect=void 0;var LW6=Pu$();Object.defineProperty(kN,"connect",{enumerable:!0,get:function(){return LW6.connect}});DW6(Ea(),kN)});function qu$($){let Z=$?.connectFn??PW6,X=null,Q=null,Y=!1,G=!1,J=!1,W=[];function K(){return X!==null&&!X.isClosed()&&!X.isDraining()&&!J}function F(){console.log(`[NatsProvider] fireReady: ${W.length} callbacks`);for(let U of W)try{U()}catch{}}function H(U){(async()=>{for await(let O of U.status())if(O.type==="disconnect")console.log("[NatsProvider] Disconnected"),J=!0;else if(O.type==="reconnect")console.log("[NatsProvider] Reconnected, re-firing ready callbacks"),J=!1,Q=null,F()})().catch(()=>{})}async function N(U,O){let B=0;while(!G)try{X=await Z({servers:U,timeout:zW6,reconnect:!0,maxReconnectAttempts:-1,...O?{authenticator:O}:{}}),console.log(`[NatsProvider] Connected to ${X.getServer()} after ${B} attempt(s)`),Q=null,J=!1,H(X),F();return}catch{B++;let D=nZ(jW6,EW6,B-1,2,0.5);await M$(D)}}return{init(U,O){if(Y)return;Y=!0,G=!1;let B=O?.creds?Tu$.credsAuthenticator(new TextEncoder().encode(O.creds)):void 0;N(U,B).catch(()=>{})},isConnected(){return K()},getConnection(){return K()?X:null},getJetStream(){if(!K())return null;if(!Q)Q=Iu$.jetstream(X);return Q},onReady(U){if(W.push(U),K())try{U()}catch{}},async drain(){if(G=!0,Y=!1,Q=null,J=!1,X){let U=X;X=null,await U.drain().catch(()=>{})}}}}function PW6($){return Ru$.connect($)}var Tu$,Ru$,Iu$,EW6=100,jW6=3000,zW6=3000;var Mu$=w(()=>{u4();Tu$=V(Mu(),1),Ru$=V(Au$(),1),Iu$=V(uw(),1)});function s91($,Z){return`${$}.${Z}`}class e91{cache;constructor($){this.cache=Bh({ttlMs:$?.ttlMs??AW6,maxSize:$?.maxSize??TW6})}async get($,Z){return this.cache.get(s91($,Z))??null}async set($,Z,X){this.cache.set(s91($,Z),X)}async invalidate($,Z){this.cache.delete(s91($,Z))}teardown(){this.cache.clear()}}var AW6=600000,TW6=5000;var ku$=()=>{};function UA0($,Z){return`${$}:${Z}`}function $Z1($){let Z=Bh({ttlMs:$?.ttlMs??RW6,maxSize:$?.maxSize??IW6}),X=$?.getConnection,Q=crypto.randomUUID(),Y=new TextEncoder,G=new TextDecoder,J=null;function W(K,F){let H=X?.();if(!H)return;try{H.publish(Vu$,Y.encode(JSON.stringify({organizationId:K,keyId:F,originId:Q})))}catch(N){console.warn("[ProviderKeyCache] Publish failed (non-critical):",N)}}return{get(K,F){return Z.get(UA0(K,F))},set(K,F,H){Z.set(UA0(K,F),H)},invalidate(K,F){Z.delete(UA0(K,F)),W(K,F)},start(){if(J)return;let K=X?.();if(!K)return;J=K.subscribe(Vu$),(async()=>{for await(let F of J)try{let H=JSON.parse(G.decode(F.data));if(H.originId===Q)continue;Z.delete(UA0(H.organizationId,H.keyId))}catch{}})().catch(console.error)},teardown(){J?.unsubscribe(),J=null,Z.clear()}}}var Vu$="studio.ai-provider-keys.invalidate",RW6=30000,IW6=5000;var Su$=()=>{};class ZZ1{options;subscriptions=[];onCancel=null;encoder=new TextEncoder;originId=crypto.randomUUID();seenMessageIds=new Set;constructor($){this.options=$}async start($){if($)this.onCancel=$;if(this.subscriptions.length>0)return;if(!this.onCancel)return;let Z=this.options.getConnection();if(!Z)return;let X=new TextDecoder;this.subscriptions=Cu$.map((Q)=>Z.subscribe(Q));for(let Q of this.subscriptions)(async()=>{for await(let Y of Q)try{let G=JSON.parse(X.decode(Y.data));if(G.originId===this.originId)continue;if(G.messageId&&this.hasSeen(G.messageId))continue;this.onCancel?.(G.taskId)}catch{}})().catch(console.error)}broadcast($){if(/[.*>\s]/.test($)){console.warn("[NatsCancelBroadcast] Invalid threadId, skipping broadcast");return}this.onCancel?.($);try{let Z=this.options.getConnection();if(!Z)return;let X=this.encoder.encode(JSON.stringify({taskId:$,originId:this.originId,messageId:crypto.randomUUID()}));for(let Q of Cu$)Z.publish(Q,X)}catch(Z){console.warn("[NatsCancelBroadcast] Publish failed (non-critical):",Z)}}publishControlFrame($,Z){}async stop(){for(let $ of this.subscriptions)$.unsubscribe();this.subscriptions=[],this.seenMessageIds.clear(),this.onCancel=null}hasSeen($){if(this.seenMessageIds.has($))return!0;if(this.seenMessageIds.add($),this.seenMessageIds.size>1000){let Z=this.seenMessageIds.values().next().value;if(Z)this.seenMessageIds.delete(Z)}return!1}}var Cu$;var _u$=w(()=>{Cu$=["studio.decopilot.cancel","mesh.decopilot.cancel"]});var vu$=($)=>{let Z;return()=>Z??=$()},XZ1,QZ1;var fu$=w(()=>{R6();XZ1=vu$(()=>w$.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),QZ1=vu$(()=>w$.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function _W6(){return{name:pH,subjects:[`${Mw0}.>`],storage:WW.StorageType.File,max_age:kW6,max_bytes:SW6,max_msgs_per_subject:CW6,discard:WW.DiscardPolicy.Old,retention:WW.RetentionPolicy.Limits,duplicate_window:VW6,num_replicas:1}}class yu${chunks=0;encodeMs=0;maxMs=0;bytes=0;windowStart=performance.now();constructor(){setInterval(()=>this.flush(),1e4).unref?.()}record($,Z){if(this.chunks++,this.encodeMs+=$,$>this.maxMs)this.maxMs=$;this.bytes+=Z}flush(){let $=performance.now(),Z=$-this.windowStart;if(this.chunks>0&&Z>0)console.warn(JSON.stringify({msg:"stream-encode-trace",windowMs:Math.round(Z),chunks:this.chunks,encodeMs:Math.round(this.encodeMs),pctOfLoop:+(this.encodeMs/Z*100).toFixed(1),maxChunkMs:+this.maxMs.toFixed(2),mbEncoded:+(this.bytes/1048576).toFixed(2)}));this.chunks=0,this.encodeMs=0,this.maxMs=0,this.bytes=0,this.windowStart=$}}function bu$($){let Z=xu$.headers();for(let[X,Q]of Object.entries($))Z.set(X,Q);return Z}function xW6($,Z){let X=0;return{publish(Q,Y,G,J){Q.publish(Y,G,J?{headers:J}:void 0).catch((W)=>{if(X++,MW6().add(1,{"org.id":Z??"unknown"}),X===1||X%100===0)console.warn(`[Decopilot] JetStream publish failed for thread ${$} (${X} total):`,W)})},get errorCount(){return X}}}function yW6($){if(!($ instanceof Error))return!1;if($.name==="TimeoutError")return!0;return/timeout|no responders|503/i.test($.message)}class YZ1{options;js=null;jsm=null;constructor($){this.options=$}async init(){let $=this.options.getConnection();if(!$){console.log("[Decopilot] StreamBuffer.init skipped: NATS not connected yet");return}let Z=_W6(),X=await v5(async()=>{let Q=this.options.getJetStreamManager?await this.options.getJetStreamManager():await WW.jetstreamManager($);try{await Q.streams.info(pH),await Q.streams.update(pH,Z)}catch(Y){if(Y instanceof Error&&Y.message.includes("stream not found"))await Q.streams.add(Z);else if(Y instanceof Error&&/can ?not change.*storage|storage type/i.test(Y.message))await Q.streams.delete(pH),await Q.streams.add(Z);else throw Y}return Q},{maxAttempts:5,minTimeout:250,maxTimeout:4000,jitter:0.5,isRetriable:yW6});this.js=this.options.getJetStream(),this.jsm=X,console.log(`[Decopilot] StreamBuffer.init ${this.js?"ready":"degraded (js=null)"}`)}pump($,Z,X,Q){let Y=this.js;if(!Y)return console.warn(`[Decopilot] pump: JetStream client unavailable for thread ${Z}; chunks NOT published to NATS`),Promise.resolve();let G=xW6(Z,Q),J=!1,W=()=>{if(J)return;J=!0;let F=wH$(Z);Y.publish(F.subject,F.data).catch(()=>{})};X.addEventListener("abort",W,{once:!0});let K=(F)=>{let H=performance.now(),N=Yo0(F,{runId:Z}),U=performance.now()-H;if(XZ1().record(U),QZ1().add(1,{"org.id":Q??"unknown"}),bW6?.record(U,N.reduce((O,B)=>O+B.data.length,0)),N.length===0){console.warn(`[Decopilot] dropping oversized stream chunk for thread ${Z}`);return}for(let O of N)G.publish(Y,O.subject,O.data,O.headers?bu$(O.headers):void 0)};return(async()=>{let F=$.getReader(),H=0,N=0,U;try{while(!0){let{done:O,value:B}=await F.read();if(O)break;if(K(B),N++,++H>=64)H=0,await new Promise((D)=>setImmediate(D))}}catch(O){U=O,console.warn(`[Decopilot] stream pump error for thread ${Z}:`,O?.message??O)}finally{if(F.releaseLock(),W(),fW6)console.warn(JSON.stringify({msg:"decopilot-stream-diag",event:"pump-done",taskId:Z,publishedChunks:N,publishErrors:G.errorCount}))}if(U!==void 0)throw U})()}async publishRawChunk($,Z,X){let Q=this.js;if(!Q)return!1;let Y=performance.now(),G=Yo0(Z,{runId:$,dedup:X});if(XZ1().record(performance.now()-Y),QZ1().add(1),G.length===0)return console.warn(`[Decopilot] dropping oversized raw chunk for thread ${$} (> MAX_CHUNKED_BYTES)`),!0;for(let J of G)await Q.publish(J.subject,J.data,{...J.headers?{headers:bu$(J.headers)}:{},...J.msgId?{msgID:J.msgId}:{}});return!0}async publishDone($,Z,X){let Q=this.js;if(!Q)return!1;let Y=BH$({runId:$,fenceToken:Z,finalSeq:X});return await Q.publish(Y.subject,Y.data,{msgID:Y.msgId}),!0}async createTailStream($,Z,X){let Q=this.js;if(!Q)return console.warn(`[Decopilot] createTailStream: JetStream client unavailable for thread ${$}; no live tail`),null;let Y=X?.deliverPolicy==="new"?WW.DeliverPolicy.New:WW.DeliverPolicy.All,G=X?.closeOnDone??!1,J=CB($),W;try{W=await(await Q.consumers.get(pH,{filter_subjects:J,deliver_policy:Y})).consume()}catch(D){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",D?.message??D),null}let H=_w0({messages:async function*(){try{for await(let D of W)yield{subject:D.subject,data:D.data,headers:D.headers}}finally{W.stop()}}(),onCancel:()=>W.stop()}).pipeThrough(kw0()).pipeThrough(Vw0()).getReader(),N=!1,U=()=>{if(N)return;N=!0;try{H.releaseLock()}catch{}},O=!1,B=()=>{if(O)return;O=!0,W.stop(),H.cancel().catch(()=>{}),U()};return Z?.addEventListener("abort",B,{once:!0}),new ReadableStream({async pull(D){for(;;){let{done:L,value:E}=await H.read();if(L){B(),D.close();return}let j=E;if(j.kind==="done"){if(G){B(),D.close();return}continue}D.enqueue(j.chunk);return}},cancel(){B()}})}purge($){if(!this.jsm)return;this.jsm.streams.purge(pH,{filter:CB($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var WW,xu$,qW6=($)=>{let Z;return()=>Z??=$()},MW6,kW6=86400000000000,VW6=120000000000,SW6=4294967296,CW6=500000,vW6,fW6,bW6;var gu$=w(()=>{u4();Go0();vw0();Sw0();R6();fu$();WW=V(uw(),1),xu$=V(Mu(),1),MW6=qW6(()=>w$.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"}));vW6=process.env.STREAM_ENCODE_TRACE==="1",fW6=process.env.DECOPILOT_STREAM_TRACE==="1";bW6=vW6?new yu$:null});function OA0($,Z,X,Q){if(!Q)return!1;return $.emit(Z,SW(X,Q.status,{title:Q.title??void 0,virtualMcpId:Q.virtual_mcp_id??void 0,createdBy:Q.created_by??void 0,triggerId:Q.trigger_id??null,branch:Q.branch??null,harnessId:Q.harness_id??void 0,createdAt:Q.created_at,updatedAt:Q.updated_at})),!0}var hu$=w(()=>{O8()});class GZ1{storage;options;timer=null;constructor($,Z={}){this.storage=$;this.options=Z}start(){if(this.timer)return;let $=this.options.intervalMs??300000;this.timer=setInterval(()=>{this.runOnce()},$)}async runOnce(){let $=this.options.staleAfterMs??3600000;try{let Z=await this.storage.sweepAbandoned($);if(Z>0)console.log(`[async-research-sweeper] marked ${Z} stale jobs as abandoned`);return Z}catch(Z){return console.error("[async-research-sweeper] sweep failed",Z),0}}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}async function uu$($,Z,X){let Q=Z.organizationId;if(Z.status!=="in_review")return!1;if(!Sr(X))return!1;if(await $.storage.taskBoard.hasHumanRejectedDone(Z.id,Q))return!1;let Y=await $.storage.taskBoard.update(Z.id,Q,{status:"done"},Z.updatedBy);return await v6($,{taskBoardItemId:Z.id,action:"status_changed",actorId:null,data:{from:Z.status,to:"done",reason:"pr_merged"}}),H8(Q,Y),console.log(`[task-board-review-sweeper] ${Z.id}: linked PR already merged \u2014 moved to done`),!0}var cu$=w(()=>{ZQ();Cr();l5()});function mW6($){return $ instanceof t7}function iW6($,Z){return Z-$>=lW6}class JZ1{taskBoard;contextFactory;billing;options;timer=null;running=!1;cursor=null;constructor($,Z,X,Q={}){this.taskBoard=$;this.contextFactory=Z;this.billing=X;this.options=Q}start(){if(this.timer)return;let $=this.options.intervalMs??gW6;this.timer=setInterval(()=>{this.runOnce()},$),this.timer.unref()}async runOnce(){if(this.running)return 0;this.running=!0;let $=0;try{let Z=this.options.batchSize??uW6,X=this.options.itemIntervalMs??hW6,Q=new Date(Date.now()-X),Y=await this.taskBoard.listItemsPendingReview(Z,this.cursor,Q),G=Y.at(-1);this.cursor=Y.length===Z&&G?{updatedAt:G.updatedAt,id:G.id}:null;for(let{id:J,organizationId:W}of Y)try{if(await this.reconcileItem(J,W,Q))$++}catch(K){console.error(`[task-board-review-sweeper] ${J} failed`,K)}await this.reapNeverStartedThreads(Z),$+=await this.dispatchDueRetries(Z),await this.reactToUnhandledFailures(Z)}catch(Z){console.error("[task-board-review-sweeper] sweep failed",Z)}finally{this.running=!1}return $}async reapNeverStartedThreads($){try{let Z=await this.taskBoard.failNeverStartedLinkedThreads($,new Date(Date.now()-on0),co0);for(let X of Z)console.warn(`[task-board-review-sweeper] failed never-started thread ${X.threadId} on ${X.itemId}`)}catch(Z){console.error("[task-board-review-sweeper] reaping failed",Z)}}async reactToUnhandledFailures($){let Z=await this.taskBoard.listItemsStuckAfterFailure($,new Date(Date.now()-dW6));for(let{id:X,organizationId:Q,threadId:Y}of Z)try{console.warn(`[task-board-review-sweeper] reacting to an unhandled failure on ${X}`),await Mt0(this.taskBoard,Y,Q),await kt0(this.taskBoard,this.billing,Y,Q)}catch(G){console.error(`[task-board-review-sweeper] unhandled-failure reaction for ${X} failed`,G)}}async dispatchDueRetries($){let Z=0,X=await this.taskBoard.listItemsDueForRetry($,new Date);for(let{id:Q,organizationId:Y,attempts:G}of X)try{if(!await this.taskBoard.claimDueRetry(Q,Y,new Date))continue;let J=await this.taskBoard.getById(Q,Y);if(!J||J.status!=="in_progress"||J.assigneeId!==t8)continue;let W=await this.contextFactory(Y,J.assignedBy??J.createdBy);if(!W)continue;await nH(W,J,{runClass:"retry"}),Z++,console.warn(`[task-board-review-sweeper] re-dispatched ${Q} after a failure (attempt ${G})`)}catch(J){if(console.error(`[task-board-review-sweeper] retry dispatch for ${Q} failed`,J),mW6(J)){await this.returnToTodo(Q,Y,J instanceof Error?J.message:String(J));continue}await this.taskBoard.scheduleRunRetry(Q,Y,G,new Date(Date.now()+cW6)).catch((W)=>console.error(`[task-board-review-sweeper] re-arming ${Q} failed`,W))}return Z}async returnToTodo($,Z,X){try{let Q=await this.taskBoard.getById($,Z);if(!Q||Q.status!=="in_progress")return;let Y=await this.taskBoard.returnToTodoAfterFailure($,Z,Q.updatedBy);if(!Y)return;await this.taskBoard.recordActivity({taskBoardItemId:$,action:"status_changed",actorId:null,data:{from:"in_progress",to:"todo",reason:X}}).catch(()=>{}),H8(Z,Y)}catch(Q){console.error(`[task-board-review-sweeper] returning ${$} to todo failed`,Q)}}async handOffReviewWithoutPr($,Z){let X=await this.taskBoard.listActivity(Z.id,Z.organizationId);if(!iW6(jH(X),Date.now()))return;await VK($,Z,"no pull request is linked to this task \u2014 there is nothing for a "+"reviewer to review")}async reconcileItem($,Z,X){if(!await this.taskBoard.claimSweep($,Z,X))return!1;let Q=await this.taskBoard.getById($,Z);if(!Q)return!1;if(Q.status!=="in_review")return!1;let Y=Q.assigneeId===t8,G=await this.taskBoard.listPrs($,Z),J=await this.contextFactory(Z,Q.assignedBy??Q.createdBy);if(!J)return!1;if(G.length===0){if(Y)await this.handOffReviewWithoutPr(J,Q);return!1}let W=await Promise.all(G.map(async(K)=>({...K,...await gy(Z,K)})));if(W.every((K)=>K.state===null))console.warn(`[task-board-review-sweeper] ${$}: no live PR state from GitHub (${W.length} PR(s)) \u2014 proceeding on unknown`);if(await uu$(J,Q,W.map((K)=>K.merged)))return!0;if(await MN$(J,Q))return!0;if(!Y)return!1;if(!yo0(W))return!1;return await hw0(J,Q,{previewMatchesHead:go0(W)}),!0}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}var gW6=60000,hW6=300000,uW6=50,cW6=60000,lW6=900000,dW6=120000;var lu$=w(()=>{j9();Vo0();dH();gn();cu$();l5();z3();lo0();CK();Cn()});import{readdir as pW6,rm as BA0}from"fs/promises";import{join as wA0}from"path";async function DA0($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-nW6),Z.setUTCHours(0,0,0,0);let X=0;try{let Q=await y_($);for(let Y of Q)if(/^\d{4}$/.test(Y))X+=await du$($,Y,Z);else if(!Y.startsWith(".")){let G=wA0($,Y),J=await y_(G);for(let K of J){if(!/^\d{4}$/.test(K))continue;X+=await du$(G,K,Z)}if((await y_(G)).length===0)await BA0(G,{recursive:!0,force:!0})}}catch(Q){console.warn("monitoring retention cleanup failed:",Q)}return X}async function du$($,Z,X){let Q=0,Y=wA0($,Z),G=await y_(Y);for(let W of G){if(!/^\d{2}$/.test(W))continue;let K=wA0(Y,W),F=await y_(K);for(let N of F){if(!/^\d{2}$/.test(N))continue;let U=new Date(`${Z}-${W}-${N}T00:00:00Z`);if(isNaN(U.getTime()))continue;if(U<X){let O=wA0(K,N);await BA0(O,{recursive:!0,force:!0}),Q++}}if((await y_(K)).length===0)await BA0(K,{recursive:!0,force:!0})}if((await y_(Y)).length===0)await BA0(Y,{recursive:!0,force:!0});return Q}async function y_($){try{return(await pW6($)).filter((X)=>!X.startsWith("."))}catch{return[]}}var nW6=30;var WZ1=()=>{};import{DBOS as KZ1,SchedulerMode as tW6}from"@dbos-inc/dbos-sdk";async function rW6(){let $=[VJ(),g_(),NF()],Z=0;for(let X of $)try{Z+=await DA0(X)}catch(Q){console.error("[monitoring-retention] cleanup failed:",Q)}return console.log(`[monitoring-retention] deleted ${Z} day-dir(s) across ${$.length} signal dir(s)`),{deleted:Z,dirs:$.length}}async function aW6($,Z){await KZ1.runStep(()=>rW6(),{name:"monitoringRetention"})}function iu$(){if(mu$)return;mu$=!0;let $=KZ1.registerWorkflow(aW6,{name:"monitoringRetentionWorkflow"});KZ1.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:oW6,mode:tW6.ExactlyOncePerIntervalWhenActive})}var oW6="23 4 * * *",mu$=!1;var pu$=w(()=>{FY();WZ1()});function nu$($){return async(Z,X)=>{let Q=await $.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["member.role","organization.id as orgId","organization.slug as orgSlug","organization.name as orgName"]).where("member.userId","=",X).where("member.organizationId","=",Z).executeTakeFirst();if(!Q)return console.warn(`[automationContextFactory] User ${X} not found in org ${Z} \u2014 returning null`),null;let Y=await XJ.create();Y.auth.user={id:X,role:Q.role},Y.organization={id:Q.orgId,slug:Q.orgSlug,name:Q.orgName};let G=await W61($.db,Z,Q.role);return Y.boundAuth=J61({auth:Y.authInstance,headers:new Headers,role:Q.role,permissions:G,userId:X}),Y.access=new zL(X,void 0,Y.boundAuth,Q.role,"self"),qB(Y,{id:Q.orgId,slug:Q.orgSlug}),Y}}var tu$=w(()=>{PL();FC()});function sW6(){return{services:[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}],migrationsStatus:"pending",serverUrl:null,logs:[]}}function $K6(){for(let $ of eW6)$()}function ou$($){let Z=[...FZ1.logs,$];FZ1={...FZ1,logs:Z.length>500?Z.slice(-500):Z},$K6()}function HZ1(){return ZK6}var FZ1,eW6,ZK6=!1;var NZ1=w(()=>{FZ1=sW6(),eW6=new Set});import{EventEmitter as XK6}from"events";var UZ1;var ru$=w(()=>{NZ1();UZ1=new XK6;UZ1.on("request",($)=>{ou$($)})});function au$(){return async($,Z)=>{let X=Date.now(),Q=$.req.method,Y=$.req.path;if(Y==="/api/auth/get-session"||Y.includes("favicon")){await Z();return}let G="",J=!1;if(Y.startsWith("/mcp")&&Q==="POST"){J=!0;try{if($.req.header("Content-Type")?.includes("application/json")){let U=await $.req.raw.clone().json();if(U.method==="tools/call"&&U.params?.name){let O=Qu(U.params.name),B=U.params.arguments||{},D=Object.keys(B).map((E)=>Qu(E)),L=D.length>0?D.slice(0,3).join(",")+(D.length>3?"\u2026":""):"";G=`${G5.tool}${O}${G5.dim}(${L})${G5.reset}`}else if(U.method)G=`${G5.dim}${Qu(U.method)}${G5.reset}`}}catch{}}let W=Qu(Y);if(Y.startsWith("/mcp/conn_")){let H=Y.split("/")[2]??"";W=`/mcp/${G5.mcp}${Qu(H.slice(0,12))}\u2026${G5.reset}`}else if(Y==="/mcp")W=`${G5.mcp}/mcp${G5.reset}`;else if(Y==="/mcp/registry")W=`${G5.mcp}/mcp/registry${G5.reset}`;let K=YK6(Q),F=J?"\u25C0":"\u2190";if(!HZ1())console.log(`${G5.dim}${F}${G5.reset} ${K}${Q}${G5.reset} ${W}${G?` ${G}`:""}`);try{await Z()}finally{let H=Date.now()-X,N=$.res.status,U=QK6(N),O=H<1000?`${H}ms`:`${(H/1000).toFixed(1)}s`,B=J?"\u25B6":"\u2192";if(!HZ1())console.log(`${G5.dim}${B}${G5.reset} ${K}${Q}${G5.reset} ${W}${G?` ${G}`:""} ${U}${N}${G5.reset} ${G5.duration}${O}${G5.reset}`);UZ1.emit("request",{method:Q,path:Qu(Y),status:N,duration:H,timestamp:new Date})}}}var G5,QK6=($)=>{if($>=500)return G5.serverError;if($>=400)return G5.clientError;if($>=300)return G5.redirect;return G5.ok},YK6=($)=>{return G5[$]||G5.reset},Qu=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var su$=w(()=>{NZ1();ru$();G5={reset:"\x1B[0m",dim:"\x1B[2m",bold:"\x1B[1m",GET:"\x1B[36m",POST:"\x1B[33m",PUT:"\x1B[35m",DELETE:"\x1B[31m",ok:"\x1B[32m",redirect:"\x1B[36m",clientError:"\x1B[33m",serverError:"\x1B[31m",mcp:"\x1B[35m",tool:"\x1B[96m",duration:"\x1B[90m"}});import{createHmac as Xc$}from"crypto";import{mkdir as GK6,readdir as JK6,rm as eu$,stat as Qc$}from"fs/promises";import{join as BZ1,relative as WK6}from"path";import{z as P$}from"zod";function Gc$($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return BZ1(KK6,Z)}function Jc$($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function OZ1($,Z){let X=Gc$($),Q=Jc$(Z);return BZ1(X,Q)}function FK6($,Z,X,Q){let Y=b0().encryptionKey||"dev-secret",G=`${$}:${Z}:${X}:${Q}`;return Xc$("sha256",Y).update(G).digest("hex")}function Zc$($,Z,X,Q,Y){let G=Math.floor(Date.now()/1000)+Q,J=FK6(Z,X,G,Y),W=new URL(`/api/dev-assets/${Z}/${Jc$(X)}`,$);return W.searchParams.set("expires",G.toString()),W.searchParams.set("signature",J),W.searchParams.set("method",Y),W.toString()}function Wc$($,Z,X){let Q=`${$}:${Z.getTime()}:${X}`;return`"${Xc$("md5","etag").update(Q).digest("hex")}"`}async function Kc$($,Z,X,Q,Y){try{let G=await JK6($,{withFileTypes:!0});for(let J of G){let W=BZ1($,J.name),F=WK6(Z,W).replace(/\\/g,"/");if(X&&!F.startsWith(X))continue;if(J.isDirectory())if(Q){let H=F+"/";if(!X||H.startsWith(X)){if(!(X?F.slice(X.length):F).includes("/"))Y.commonPrefixes.add(H)}}else await Kc$(W,Z,X,Q,Y);else if(J.isFile()){if(Q&&X){let H=F.slice(X.length);if(H.includes(Q)){let N=H.indexOf(Q),U=X+H.slice(0,N+1);Y.commonPrefixes.add(U);continue}}try{let H=await Qc$(W);Y.objects.push({key:F,size:H.size,lastModified:H.mtime.toISOString(),etag:Wc$(W,H.mtime,H.size)})}catch{}}}}catch{}}function Fc$($,Z){let Q=t($).id;return[{name:"LIST_OBJECTS",description:"List objects in the local assets directory with pagination support",inputSchema:P$.object({prefix:P$.string().optional(),maxKeys:P$.number().optional().default(1000),continuationToken:P$.string().optional(),delimiter:P$.string().optional()}),outputSchema:P$.object({objects:P$.array(P$.object({key:P$.string(),size:P$.number(),lastModified:P$.string(),etag:P$.string()})),nextContinuationToken:P$.string().optional(),isTruncated:P$.boolean(),commonPrefixes:P$.array(P$.string()).optional()}),handler:async(Y)=>{let G=Y,J=G.prefix||"",W=G.maxKeys??1000,K=G.delimiter,F=G.continuationToken,H=Gc$(Q);await GK6(H,{recursive:!0});let N={objects:[],commonPrefixes:new Set};await Kc$(H,H,J,K,N),N.objects.sort((L,E)=>L.key.localeCompare(E.key));let U=0;if(F){if(U=N.objects.findIndex((L)=>L.key>F),U===-1)U=N.objects.length}let O=N.objects.slice(U,U+W),B=U+W<N.objects.length,D=B?O[O.length-1]?.key:void 0;return{objects:O,isTruncated:B,nextContinuationToken:D,commonPrefixes:Array.from(N.commonPrefixes).sort()}}},{name:"GET_OBJECT_METADATA",description:"Get metadata for a file in the local assets directory",inputSchema:P$.object({key:P$.string()}),outputSchema:P$.object({contentType:P$.string().optional(),contentLength:P$.number(),lastModified:P$.string(),etag:P$.string(),metadata:P$.record(P$.string(),P$.string()).optional()}),handler:async(Y)=>{let G=Y,J=OZ1(Q,G.key),W=await Qc$(J);return{contentType:i61(G.key),contentLength:W.size,lastModified:W.mtime.toISOString(),etag:Wc$(J,W.mtime,W.size)}}},{name:"GET_PRESIGNED_URL",description:"Generate a presigned URL for downloading a file from local storage",inputSchema:P$.object({key:P$.string(),expiresIn:P$.number().optional()}),outputSchema:P$.object({url:P$.string(),expiresIn:P$.number()}),handler:async(Y)=>{let G=Y,J=G.expiresIn??$c$;return{url:Zc$(Z,Q,G.key,J,"GET"),expiresIn:J}}},{name:"PUT_PRESIGNED_URL",description:"Generate a presigned URL for uploading a file to local storage",inputSchema:P$.object({key:P$.string(),expiresIn:P$.number().optional(),contentType:P$.string().optional()}),outputSchema:P$.object({url:P$.string(),expiresIn:P$.number()}),handler:async(Y)=>{let G=Y,J=G.expiresIn??$c$;return{url:Zc$(Z,Q,G.key,J,"PUT"),expiresIn:J}}},{name:"DELETE_OBJECT",description:"Delete a single file from local storage",inputSchema:P$.object({key:P$.string()}),outputSchema:P$.object({success:P$.boolean(),key:P$.string()}),handler:async(Y)=>{let G=Y,J=OZ1(Q,G.key);try{return await eu$(J),{success:!0,key:G.key}}catch{return{success:!1,key:G.key}}}},{name:"DELETE_OBJECTS",description:"Delete multiple files from local storage",inputSchema:P$.object({keys:P$.array(P$.string()).max(1000)}),outputSchema:P$.object({deleted:P$.array(P$.string()),errors:P$.array(P$.object({key:P$.string(),message:P$.string()}))}),handler:async(Y)=>{let G=Y,J=[],W=[];return await Promise.all(G.keys.map(async(K)=>{let F=OZ1(Q,K);try{await eu$(F),J.push(K)}catch(H){W.push({key:K,message:H instanceof Error?H.message:"Unknown error"})}})),{deleted:J,errors:W}}}]}async function wZ1($,Z,X){let Q=Fc$(Z,X),Y=new yW({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:H5});for(let J of Q){let W="shape"in J.inputSchema?J.inputSchema.shape:P$.object({}).shape,K=J.outputSchema&&"shape"in J.outputSchema?J.outputSchema.shape:P$.object({}).shape;Y.registerTool(J.name,{description:J.description??"",inputSchema:W,outputSchema:K,annotations:J.annotations,_meta:J._meta},async(F)=>{try{let H=await J.handler(F);return{content:[{type:"text",text:JSON.stringify(H)}],structuredContent:H}}catch(H){return{content:[{type:"text",text:`Error: ${H.message}`}],isError:!0}}})}let G=new XQ({enableJsonResponse:$.headers.get("Accept")?.includes("application/json")??!1});return await Y.connect(G),FJ(Y,G,$,"mcp:dev-assets")}async function Hc$($,Z,X,Q){let G=Fc$(X,Q).find((J)=>J.name===$);if(!G)return{content:[{type:"text",text:`Tool not found: ${$}`}],isError:!0};try{let J=await G.handler(Z);return{content:[{type:"text",text:JSON.stringify(J)}]}}catch(J){return{content:[{type:"text",text:J instanceof Error?J.message:String(J)}],isError:!0}}}var KK6="./data/assets",$c$=3600,Yc$,Nc$;var Uc$=w(()=>{R$();my();D8();rl();zC();fX();FP0();Yc$=new H1;Yc$.all("/",async($)=>{let Z=$.get("studioContext"),X=new URL($.req.url),Q=`${X.protocol}//${X.host}`;return wZ1($.req.raw,Z,Q)});Nc$=Yc$});var Oc$={};G4(Oc$,{mountDevRoutes:()=>HK6});function HK6($,Z){$.all("/mcp/:connectionId{.*_dev-assets$}",Z,async(Q)=>{let Y=Q.get("studioContext"),G=new URL(Q.req.url),J=`${G.protocol}//${G.host}`;return wZ1(Q.req.raw,Y,J)}),$.all("/mcp/:connectionId{.*_dev-assets$}/call-tool/:toolName",Z,async(Q)=>{let Y=Q.get("studioContext"),G=new URL(Q.req.url),J=`${G.protocol}//${G.host}`,W=Q.req.param("toolName");if(!W)return Q.json({error:"Missing tool name"},400);let K=await Q.req.json(),F=await Hc$(W,K,Y,J);if(F.isError)return Q.json(F.content,500);return Q.json(F.content)}),$.use("/mcp/dev-assets",Z),$.route("/mcp/dev-assets",Nc$);let X=new H1;X.use("*",GW({mountPath:"/api/dev-assets"})),X.route("/",KP0({orgFromPath:!1})),$.route("/api/dev-assets",X)}var Bc$=w(()=>{D8();g61();FP0();Uc$()});import{sql as NK6}from"kysely";import{randomUUID as wc$}from"crypto";import{z as UK6}from"zod";async function BK6($){let Z=new Date().toISOString(),X=wc$(),Q=m4.SELF($.organizationId),Y="registry.publish_request.created",G={requestId:$.request.id,requestedId:$.request.requested_id,title:$.request.title,status:$.request.status,createdAt:$.request.created_at,requester:{name:$.request.requester_name,email:$.request.requester_email}};await $.db.insertInto("events").values({id:X,organization_id:$.organizationId,type:"registry.publish_request.created",source:Q,specversion:"1.0",subject:$.request.id,time:Z,datacontenttype:"application/json",dataschema:null,data:JSON.stringify(G),cron:null,status:"pending",attempts:0,last_error:null,next_retry_at:null,created_at:Z,updated_at:Z}).execute();let J=await $.db.selectFrom("event_subscriptions").select(["id"]).where("organization_id","=",$.organizationId).where("enabled","=",1).where("event_type","=","registry.publish_request.created").where((W)=>W.or([W("publisher","is",null),W("publisher","=",Q)])).execute();if(J.length>0)await $.db.insertInto("event_deliveries").values(J.map((W)=>({id:wc$(),event_id:X,subscription_id:W.id,status:"pending",attempts:0,last_error:null,delivered_at:null,next_retry_at:null,created_at:Z}))).execute();try{await NK6`SELECT
|
|
2916
2916
|
pg_notify('studio_events', ${X}),
|