decocms 4.175.0 → 4.175.1
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-D9z4DwqY.js → AlertCircle-gBgC-IDj.js} +1 -1
- package/dist/client/assets/{AreaChart-DvL8v73U.js → AreaChart-DF037x7j.js} +1 -1
- package/dist/client/assets/{ArrowUp-DEXuZtmX.js → ArrowUp-v9chKyHK.js} +1 -1
- package/dist/client/assets/{ArrowUpRight-Dna0UAHv.js → ArrowUpRight-DQ-en6iJ.js} +1 -1
- package/dist/client/assets/{Check-GvvZYRsI.js → Check-Cm0N5Xp1.js} +1 -1
- package/dist/client/assets/{CheckCircle-CJUp01GU.js → CheckCircle-DNkhRFtL.js} +1 -1
- package/dist/client/assets/{ChevronDown-Dsl-h0Bd.js → ChevronDown-CGpzF5Tp.js} +1 -1
- package/dist/client/assets/{ChevronRight-Cn3Rdh2g.js → ChevronRight-uYqx7PHp.js} +1 -1
- package/dist/client/assets/{ChevronUp-BysRSee5.js → ChevronUp-BbYR_cV6.js} +1 -1
- package/dist/client/assets/{Copy01-KWnB_oGG.js → Copy01-B9wS1vC-.js} +1 -1
- package/dist/client/assets/{CpuChip01-BbiyMAVI.js → CpuChip01-AWVpXsY4.js} +1 -1
- package/dist/client/assets/{DotsVertical-DC7ObWYv.js → DotsVertical-D_I0FzwU.js} +1 -1
- package/dist/client/assets/{Eye-BlnDBJl4.js → Eye-Dg_Cwp5s.js} +1 -1
- package/dist/client/assets/{FilterLines-LQO_dShY.js → FilterLines-BaP3cCYD.js} +1 -1
- package/dist/client/assets/{HardDrive-DIV7E2BK.js → HardDrive-BpCOR94X.js} +1 -1
- package/dist/client/assets/{Key01-DZC-pqnV.js → Key01-DeHkxCcX.js} +1 -1
- package/dist/client/assets/{LayoutLeft-Bag7CII4.js → LayoutLeft-wIcrY_QM.js} +1 -1
- package/dist/client/assets/{LinkExternal01-Dz8KLg3g.js → LinkExternal01-BKiT6Lg5.js} +1 -1
- package/dist/client/assets/{LogOut01-BJxKLuNC.js → LogOut01-THqSoWGX.js} +1 -1
- package/dist/client/assets/{Monitor01-uObDYoTB.js → Monitor01-CaaXe9Ty.js} +1 -1
- package/dist/client/assets/{Palette-CxnqGidx.js → Palette-BFT2IxVH.js} +1 -1
- package/dist/client/assets/{Play-C9qq5I9o.js → Play-D6dqRBBL.js} +1 -1
- package/dist/client/assets/{Plus-CJp_CDz4.js → Plus-CzX8ksPj.js} +1 -1
- package/dist/client/assets/{SearchLg-Ci53DDg4.js → SearchLg-ClRKcOmG.js} +1 -1
- package/dist/client/assets/{SearchMd-DsQMM__Y.js → SearchMd-CChGc0qj.js} +1 -1
- package/dist/client/assets/{Settings02-Dttjrqg3.js → Settings02-Cndba0CR.js} +1 -1
- package/dist/client/assets/{Shield01-uwUJeNcU.js → Shield01-BcYc_LI3.js} +1 -1
- package/dist/client/assets/{Star01-C90-UaWE.js → Star01-DrbVBTPI.js} +1 -1
- package/dist/client/assets/{Stars01-6rAs6Pdr.js → Stars01-2HJFeMi3.js} +1 -1
- package/dist/client/assets/{Stars02-BVT4iEEW.js → Stars02-BBw_PSwc.js} +1 -1
- package/dist/client/assets/{Sun-DyMoczDd.js → Sun-CMRBSsx9.js} +1 -1
- package/dist/client/assets/{SwitchHorizontal01-uNX11AV2.js → SwitchHorizontal01-jLNSp4oB.js} +1 -1
- package/dist/client/assets/{Tool01-CEfxgIRv.js → Tool01-EzL5AMRE.js} +1 -1
- package/dist/client/assets/{Tool02-DqSguwet.js → Tool02-7CeN_eX3.js} +1 -1
- package/dist/client/assets/{Trash01-C5iKDmdI.js → Trash01-DI04PDkF.js} +1 -1
- package/dist/client/assets/{TrendUp01-c515c7D6.js → TrendUp01-rmhNgtoT.js} +1 -1
- package/dist/client/assets/{Upload01-DoCt_EF5.js → Upload01-BfNUVrdU.js} +1 -1
- package/dist/client/assets/{User01-CdsXH39B.js → User01-BpfKnMCd.js} +1 -1
- package/dist/client/assets/{Users01-D5y4A7Ko.js → Users01-Biz3dQtc.js} +1 -1
- package/dist/client/assets/{Users03-CLD-wiRl.js → Users03-B7VhAJ6s.js} +1 -1
- package/dist/client/assets/{X-Dnq5chel.js → X-BeHJXMOX.js} +1 -1
- package/dist/client/assets/{XCircle-BpXLVCtl.js → XCircle-DsfZK6Fi.js} +1 -1
- package/dist/client/assets/{XClose-By5aTFhI.js → XClose-yEy6wJCH.js} +1 -1
- package/dist/client/assets/{Zap-BtulaO-a.js → Zap-B_be8ugm.js} +1 -1
- package/dist/client/assets/{ZapSquare-CorwJv8h.js → ZapSquare-0UHU2E1-.js} +1 -1
- package/dist/client/assets/{access-gate-Bm8LeI99.js → access-gate-arSA2CqL.js} +1 -1
- package/dist/client/assets/{add-section-modal-B0vKHhgJ.js → add-section-modal-Dyf6Zk_Q.js} +1 -1
- package/dist/client/assets/{agent-icon-By2CIqs2.js → agent-icon-BB8mzMQ9.js} +1 -1
- package/dist/client/assets/{agents-list-CzlaehRX.js → agents-list-Dpi4dokW.js} +1 -1
- package/dist/client/assets/{ai-providers-CrdsrS1o.js → ai-providers-ouqrsg4Y.js} +1 -1
- package/dist/client/assets/{alert-C84tvxCH.js → alert-CNw5Haa7.js} +1 -1
- package/dist/client/assets/{alert-dialog-BDRJpDqS.js → alert-dialog-C2Nzx1YE.js} +1 -1
- package/dist/client/assets/{app-editor-3hFVXY1h.js → app-editor-DoKHzAzj.js} +1 -1
- package/dist/client/assets/{auth-Co6vGQQB.js → auth-B48EtwHB.js} +1 -1
- package/dist/client/assets/{auth-catchall-CTTfklVQ.js → auth-catchall-fbg8isTq.js} +1 -1
- package/dist/client/assets/{auth-entry-Cxfejntu.js → auth-entry-jx5uMJTi.js} +1 -1
- package/dist/client/assets/{auth-split-layout-V2c0lLtt.js → auth-split-layout-eaae3FHA.js} +1 -1
- package/dist/client/assets/{authenticate-and-persist-oauth-BAduBfYL.js → authenticate-and-persist-oauth-Di8-syFQ.js} +1 -1
- package/dist/client/assets/{automation-list-row-C90J7qWf.js → automation-list-row-VQ5g6Dhp.js} +1 -1
- package/dist/client/assets/{automation-runs-DIY-tOkv.js → automation-runs-T-6LDbI3.js} +1 -1
- package/dist/client/assets/{automations-B9Q3MODG.js → automations-5RUzkP69.js} +1 -1
- package/dist/client/assets/{avatar-fTyWPkcT.js → avatar-JHFTWNp7.js} +1 -1
- package/dist/client/assets/{badge-DEG52kZb.js → badge-CttcUU9Z.js} +1 -1
- package/dist/client/assets/{block-document-CmitKHWv.js → block-document-DF1N1JC6.js} +1 -1
- package/dist/client/assets/{brand-context-B6IKZfuo.js → brand-context-49-nr2gz.js} +1 -1
- package/dist/client/assets/{buckets-BS2nv8Uk.js → buckets-DD20ONF1.js} +1 -1
- package/dist/client/assets/{bulk-category-panel-BP0ZhgGL.js → bulk-category-panel-Bxz1yeRr.js} +1 -1
- package/dist/client/assets/{calendar-DsVIFc5p.js → calendar-Bi3Ui_zb.js} +1 -1
- package/dist/client/assets/{capability-load-error-DUDcEC3l.js → capability-load-error-C36707hz.js} +1 -1
- package/dist/client/assets/{card-D0CgKqJX.js → card-CkiEgOp1.js} +1 -1
- package/dist/client/assets/{category-editor-DmSDhjT7.js → category-editor-7Es3bqJO.js} +1 -1
- package/dist/client/assets/{chat-context-BgeeD5Jl.js → chat-context-ZANxeYW1.js} +1 -1
- package/dist/client/assets/{checkbox-C1J8T7sH.js → checkbox-oXBpggwR.js} +1 -1
- package/dist/client/assets/{cli-auth-success-3wyZ78BT.js → cli-auth-success-DA5i-h2V.js} +1 -1
- package/dist/client/assets/{collection-detail-DC-PKE8R.js → collection-detail-DjjIpN3b.js} +1 -1
- package/dist/client/assets/{collection-display-button-BBdACffh.js → collection-display-button-CzlQ3-Ru.js} +1 -1
- package/dist/client/assets/{collection-search-cFXzws2z.js → collection-search-BECJRGvb.js} +1 -1
- package/dist/client/assets/{collection-table-wrapper-C1GjpG6Y.js → collection-table-wrapper-Dqudguu6.js} +1 -1
- package/dist/client/assets/{collection-tabs-Q1HFTFag.js → collection-tabs-DLgcQ9vN.js} +1 -1
- package/dist/client/assets/{command-9zwhH25D.js → command-BwpPSuEK.js} +1 -1
- package/dist/client/assets/{commerce-onboarding-DOrRTV18.js → commerce-onboarding-CpUDWDPF.js} +1 -1
- package/dist/client/assets/{companions-core-JbMztE77.js → companions-core-CZj6AdLP.js} +1 -1
- package/dist/client/assets/{connect-BnNAxIWl.js → connect-pkqfGkBp.js} +1 -1
- package/dist/client/assets/{connection-CdIB5kfz.js → connection-Cp9yA2cA.js} +1 -1
- package/dist/client/assets/{connection-card-SFhKV-rF.js → connection-card-CHCG5YLX.js} +1 -1
- package/dist/client/assets/{connection-detail-DCa4io88.js → connection-detail-BgdGMvJ-.js} +1 -1
- package/dist/client/assets/{connection-form-helpers-CCpQ5GRM.js → connection-form-helpers-BTPKH1hE.js} +1 -1
- package/dist/client/assets/{connections-BuE94CFd.js → connections-VPa6zhqx.js} +1 -1
- package/dist/client/assets/{decopilot-sse-pool-Bz3npBcG.js → decopilot-sse-pool-CdUwcdgN.js} +1 -1
- package/dist/client/assets/{dialog-BUJG_M8-.js → dialog-3W-8IScJ.js} +1 -1
- package/dist/client/assets/{domain-settings-k6_EiE5D.js → domain-settings-DFOMNmtP.js} +1 -1
- package/dist/client/assets/{drawer-xlaEza8M.js → drawer-BfyjUlUf.js} +1 -1
- package/dist/client/assets/{dropdown-menu-CfdP22tm.js → dropdown-menu-D6c-yNXN.js} +1 -1
- package/dist/client/assets/{empty-state-Bmr6t-f_.js → empty-state-DSeXLvMa.js} +1 -1
- package/dist/client/assets/{extract-connection-data-DcIg-Yv2.js → extract-connection-data-916x9paw.js} +1 -1
- package/dist/client/assets/{file-explorer-i0mdzQXi.js → file-explorer-DKbMJMdh.js} +1 -1
- package/dist/client/assets/{form-0yMXXEtB.js → form-DN_EVxGu.js} +1 -1
- package/dist/client/assets/{general-ikXoHMOd.js → general-DDGPXHK7.js} +1 -1
- package/dist/client/assets/{github-repo-picker-gVGqqhGc.js → github-repo-picker-BMroiuBR.js} +1 -1
- package/dist/client/assets/{hooks-CPwHlqqx.js → hooks-BzCUuOns.js} +2 -2
- package/dist/client/assets/{index-GqWUnG2u.js → index-B9SJSEs8.js} +3 -3
- package/dist/client/assets/{index-CEZvKOcG.js → index-B9Sd5SNY.js} +1 -1
- package/dist/client/assets/{index-ClWNVcaq.js → index-BmfagrE5.js} +1 -1
- package/dist/client/assets/{index-DAWMEIYQ.js → index-Ci2-WeDM.js} +3 -3
- package/dist/client/assets/{index-DJgcTTFd.js → index-Ck3OddUp.js} +1 -1
- package/dist/client/assets/{index-BnnQKZWm.js → index-CxLtShDr.js} +1 -1
- package/dist/client/assets/{index-BAvYhkb6.js → index-D1Wg8_dp.js} +5 -5
- package/dist/client/assets/{index-H1qScfPU.js → index-DHH-tyXp.js} +1 -1
- package/dist/client/assets/{index-CAqMXrlV.js → index-DiTRDbD6.js} +1 -1
- package/dist/client/assets/{index-Dbs1XRiR.js → index-DyLXmCq2.js} +1 -1
- package/dist/client/assets/{index-C11fXaOI.js → index-cyN-8TNg.js} +1 -1
- package/dist/client/assets/{index-redirect-COrA22Pb.js → index-redirect-BAIh-u-t.js} +1 -1
- package/dist/client/assets/{input-DcVMV6ej.js → input-CSbRtiVQ.js} +1 -1
- package/dist/client/assets/{integration-icon-DXRixRzA.js → integration-icon-CUPPNkWn.js} +1 -1
- package/dist/client/assets/{invite-member-dialog-B11aMG2B.js → invite-member-dialog-DxNsaS30.js} +1 -1
- package/dist/client/assets/{label-BY0IhX_r.js → label-DGvaEu-Z.js} +1 -1
- package/dist/client/assets/{layout-D_Is8miC.js → layout-BhCe4UGa.js} +1 -1
- package/dist/client/assets/{login-F3JA8LX0.js → login-CytzYVev.js} +1 -1
- package/dist/client/assets/{mcp-oauth-ByGjTfpo.js → mcp-oauth-BDiXNpWl.js} +1 -1
- package/dist/client/assets/{members-CamiMB8c.js → members-N9Lk_KYA.js} +1 -1
- package/dist/client/assets/{monaco-editor-DmjM4ddM.js → monaco-editor-CppjdLmN.js} +1 -1
- package/dist/client/assets/{monitoring-stats-row-CH8Dvtr6.js → monitoring-stats-row-CDiSTj0B.js} +1 -1
- package/dist/client/assets/{multi-select-DKNtFOG8.js → multi-select-DPkl-fQc.js} +1 -1
- package/dist/client/assets/{oauth-callback-ai-provider-DRResbOB.js → oauth-callback-ai-provider-D4vEiIZK.js} +1 -1
- package/dist/client/assets/{oauth-callback-DN0KtnCp.js → oauth-callback-urJEesdj.js} +1 -1
- package/dist/client/assets/{onboarding-C748bdsl.js → onboarding-NMD7Rgsh.js} +1 -1
- package/dist/client/assets/{org-layout-CqP0LRlT.js → org-layout-3FbPnKCH.js} +1 -1
- package/dist/client/assets/{organization-choice-aL35gqMT.js → organization-choice-DRlimkmR.js} +1 -1
- package/dist/client/assets/{orgs-CC_Jmq_t.js → orgs-BS-I92U-.js} +1 -1
- package/dist/client/assets/{page-seo-form-D0KkS_Yj.js → page-seo-form--knIJHxX.js} +1 -1
- package/dist/client/assets/{popover-CcimhQkR.js → popover-C5IHpjj7.js} +1 -1
- package/dist/client/assets/{post-editor-BUd4hDTs.js → post-editor-Cyb7CBZu.js} +1 -1
- package/dist/client/assets/{primitives-tFkpOjRN.js → primitives-eKxr__L-.js} +1 -1
- package/dist/client/assets/{profile-D6juYVAI.js → profile-BLo-8uaY.js} +1 -1
- package/dist/client/assets/project-app-view-DI33Uf1W.js +1 -0
- package/dist/client/assets/record-editor-DASq4Mkh.js +1 -0
- package/dist/client/assets/{redirect-editor-6F2IudGB.js → redirect-editor-pTxMMIka.js} +1 -1
- package/dist/client/assets/registry-BC2bizEu.js +2 -0
- package/dist/client/assets/{registry-layout-BMjtGwu1.js → registry-layout-CCN-tAs-.js} +1 -1
- package/dist/client/assets/{reports-DfRFFUe4.js → reports-N2zbxBuL.js} +1 -1
- package/dist/client/assets/{require-capability-DuMTlzFk.js → require-capability-C0gWEvXs.js} +1 -1
- package/dist/client/assets/{required-auth-layout-Cs9bOvZM.js → required-auth-layout-Cadc6LjF.js} +1 -1
- package/dist/client/assets/{reset-password-BmpYYJMS.js → reset-password-BwyQEavx.js} +1 -1
- package/dist/client/assets/{roles-BEV1A-tW.js → roles-CnA68_xi.js} +1 -1
- package/dist/client/assets/{search-input-DBycbMJP.js → search-input-DwPTNKRK.js} +1 -1
- package/dist/client/assets/{secrets-DTjj9y7W.js → secrets-C4eJ6A5S.js} +1 -1
- package/dist/client/assets/{sections-editor-DCWInB5K.js → sections-editor-BK545TXJ.js} +1 -1
- package/dist/client/assets/{select-model-yOmJI8SP.js → select-model-DF2yexj8.js} +1 -1
- package/dist/client/assets/{select-3aXc2X12.js → select-ntnc0DeD.js} +1 -1
- package/dist/client/assets/{self-tool-result-DCPt_VUo.js → self-tool-result-CUYnn309.js} +1 -1
- package/dist/client/assets/{seo-editor-BAx1QC35.js → seo-editor-D8ISmwI0.js} +1 -1
- package/dist/client/assets/{settings-layout-dpvFesRB.js → settings-layout-BuncGk0j.js} +1 -1
- package/dist/client/assets/{settings-section-CbQ1wg-O.js → settings-section-DLpWTC0i.js} +1 -1
- package/dist/client/assets/{shell-controls-ByvlYzST.js → shell-controls-DXy1fqcy.js} +1 -1
- package/dist/client/assets/{shell-layout-WtD-c0s_.js → shell-layout-C8vXpdx8.js} +1 -1
- package/dist/client/assets/{sidebar-BtPsDNvG.js → sidebar-gTBPMKXv.js} +1 -1
- package/dist/client/assets/{skeleton-m47UDa87.js → skeleton-DB9zRkhz.js} +1 -1
- package/dist/client/assets/{spinner-YY2IUgV6.js → spinner-CoHgFrQQ.js} +1 -1
- package/dist/client/assets/{sso-CEzqPA5d.js → sso-RvH9UTzx.js} +1 -1
- package/dist/client/assets/{store-Cud44RMC.js → store-DMSKzAh9.js} +1 -1
- package/dist/client/assets/store-registry-tM2ZixeZ.js +2 -0
- package/dist/client/assets/{studio-tools-D1ncXiNn.js → studio-tools-CMu0zejY.js} +1 -1
- package/dist/client/assets/{switch-C-FZcR4l.js → switch-D3xcu-F2.js} +1 -1
- package/dist/client/assets/{tab-id-DDAdtcVl.js → tab-id-zqDmuOai.js} +1 -1
- package/dist/client/assets/{table-CxMBXEbk.js → table-0P2Wc2TK.js} +1 -1
- package/dist/client/assets/{tabs-N0GUzc3c.js → tabs-Bx87nE6V.js} +1 -1
- package/dist/client/assets/{textarea-BKISZGyx.js → textarea-DZs2CdHW.js} +1 -1
- package/dist/client/assets/{toggle-group-DIfDOM7d.js → toggle-group-skqXoHrg.js} +1 -1
- package/dist/client/assets/{toolbar-DDss6XUx.js → toolbar-MZ2ylwjL.js} +1 -1
- package/dist/client/assets/{tooltip-CCw8gRXU.js → tooltip-C5kLfH4m.js} +1 -1
- package/dist/client/assets/{use-ai-providers-BFDad-4v.js → use-ai-providers-5zLZx5j1.js} +1 -1
- package/dist/client/assets/{use-automations-BUlYNhu1.js → use-automations-4THjPRL2.js} +1 -1
- package/dist/client/assets/{use-autosave-CxE1tLQh.js → use-autosave-CFwkwQtT.js} +1 -1
- package/dist/client/assets/{use-capability-BxXucS2e.js → use-capability-Bk-mxsYF.js} +1 -1
- package/dist/client/assets/{use-clock-tick-eORZDs3Q.js → use-clock-tick-DiU5xSPA.js} +1 -1
- package/dist/client/assets/{use-connection-DgzNE2yF.js → use-connection-VGJh4zjw.js} +1 -1
- package/dist/client/assets/{use-copy-x4i8LsdT.js → use-copy-ugNCdSAD.js} +1 -1
- package/dist/client/assets/{use-create-virtual-mcp-CJjCt69L.js → use-create-virtual-mcp-D5NOiXHC.js} +1 -1
- package/dist/client/assets/{use-debounced-autosave-Bz0cYUXO.js → use-debounced-autosave-BmApGYN6.js} +1 -1
- package/dist/client/assets/{use-debounced-value-BwM7FZ7B.js → use-debounced-value-CfDM0Jhq.js} +1 -1
- package/dist/client/assets/{use-deco-credits-Dd1kijyo.js → use-deco-credits-B4UjorXb.js} +1 -1
- package/dist/client/assets/{use-decopilot-events-BZI63chs.js → use-decopilot-events-D5dgQ5AI.js} +1 -1
- package/dist/client/assets/{use-delete-connection-D2HvaOsD.js → use-delete-connection-CUR9j-BP.js} +1 -1
- package/dist/client/assets/{use-deployment-admin-o1IYehdi.js → use-deployment-admin-BixrzrZ5.js} +1 -1
- package/dist/client/assets/{use-file-configs-Bi5Rxkba.js → use-file-configs-CHUmsqsc.js} +1 -1
- package/dist/client/assets/{use-infinite-scroll-BVFCd5xL.js → use-infinite-scroll-BthWIatn.js} +1 -1
- package/dist/client/assets/{use-join-requests-BzvB_z43.js → use-join-requests-BTozyIE4.js} +1 -1
- package/dist/client/assets/{use-mcp-auth-status-CQG1GpAj.js → use-mcp-auth-status-B6ROc3dd.js} +1 -1
- package/dist/client/assets/{use-mcp-client-UyVI2Ncc.js → use-mcp-client-CaVVZEYW.js} +1 -1
- package/dist/client/assets/{use-mcp-tools-DWz5pwhb.js → use-mcp-tools-DvuJ8P5F.js} +1 -1
- package/dist/client/assets/{use-members-_wt30skE.js → use-members-Csv5Hp9l.js} +1 -1
- package/dist/client/assets/{use-mobile-B0QJzA1A.js → use-mobile-CsZZ5Bco.js} +1 -1
- package/dist/client/assets/{use-navigate-to-agent-B70RHUEJ.js → use-navigate-to-agent-D3FDvvrd.js} +1 -1
- package/dist/client/assets/{use-org-auth-client-DIsKxOJl.js → use-org-auth-client-DJ5wJM3W.js} +1 -1
- package/dist/client/assets/{use-org-sso-LJQLgxsp.js → use-org-sso-aOrIhTdJ.js} +1 -1
- package/dist/client/assets/{use-organization-roles-BBV3R82H.js → use-organization-roles-Bl34Q4rS.js} +1 -1
- package/dist/client/assets/{use-organization-settings-Cy18Qg6k.js → use-organization-settings-Teu3tLzq.js} +1 -1
- package/dist/client/assets/{use-registry-connections-TBFAcKW1.js → use-registry-connections-Y3AY23BD.js} +1 -1
- package/dist/client/assets/{use-secrets-BtoQNov0.js → use-secrets-BPoLBbik.js} +1 -1
- package/dist/client/assets/{use-status-sounds-Y4vRylUr.js → use-status-sounds-BhdAWgIR.js} +1 -1
- package/dist/client/assets/{use-tags-CenrBmPy.js → use-tags-DaZQsGJQ.js} +1 -1
- package/dist/client/assets/{use-view-mode-odLNdA2j.js → use-view-mode-Dm0_QE6W.js} +1 -1
- package/dist/client/assets/{use-virtual-mcp-BN1akK5b.js → use-virtual-mcp-6nLwy6c-.js} +1 -1
- package/dist/client/assets/useInfiniteQuery-BsbZizup.js +1 -0
- package/dist/client/assets/{useQueries-DYF41JbC.js → useQueries-DEhpvmrD.js} +1 -1
- package/dist/client/assets/{useRouterState-B7SdwuRi.js → useRouterState-DHCxiPwV.js} +1 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-__xFXx7Y.js +1 -0
- package/dist/client/assets/{users-CtOQYO3X.js → users-CzCIQeS6.js} +1 -1
- package/dist/client/assets/{variant-calendar-DYlB4VJq.js → variant-calendar-Ct0BNjVX.js} +1 -1
- package/dist/client/assets/{view-mode-toggle-DARAjcXX.js → view-mode-toggle-CA1P05si.js} +1 -1
- package/dist/client/index.html +1 -1
- package/dist/server/cli.js +3 -3
- package/dist/server/server.js +3 -3
- package/package.json +1 -1
- package/dist/client/assets/project-app-view-DY5aaTXj.js +0 -1
- package/dist/client/assets/record-editor-Bxpoji1t.js +0 -1
- package/dist/client/assets/registry-k_T2DRjZ.js +0 -2
- package/dist/client/assets/store-registry-DuMc_sgG.js +0 -2
- package/dist/client/assets/useInfiniteQuery-B7fXLmuh.js +0 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-BCK1N3zY.js +0 -1
package/dist/server/server.js
CHANGED
|
@@ -1036,7 +1036,7 @@ Keep both indexes concise \u2014 a curated list of durable facts and one-line po
|
|
|
1036
1036
|
- \`org/public/<set>/\` \u2014 curated read-only skill sets, mounted here. Your skills are listed in the <available-skills> catalog; load one with the \`skill\` tool before applying it.
|
|
1037
1037
|
- \`org/upload/\` \u2014 files the user attached to this conversation are already here; read them directly (no copy step needed).
|
|
1038
1038
|
- \`org/output/\` \u2014 write final deliverables here; they are shared back to the organization under this run's folder.
|
|
1039
|
-
</organization-filesystem>`}var cU=B(()=>{iD();dy0()});function my0($){let Z=new Map;for(let G of $){let Y=Z.get(G.message_id);if(Y)Y.push(G);else Z.set(G.message_id,[G])}let X=[];for(let[G,Y]of Z){let Q=[...Y].sort((W,K)=>W.seq-K.seq),J=Q[0];X.push({id:G,role:J.role,parts:Q.filter((W)=>W.kind!=="finish").map((W)=>W.payload&&typeof W.payload==="object"&&!Array.isArray(W.payload)?{...W.payload,created_at:W.created_at}:W.payload),created_at:J.created_at,status:Q.some((W)=>W.kind==="finish")?"complete":"in_progress",metadata:Q.find((W)=>W.kind==="finish")?.metadata??null})}return X.sort((G,Y)=>G.created_at<Y.created_at?-1:G.created_at>Y.created_at?1:0),X}function ih8($,Z){let X=0,G=0,Y=[$];while(Y.length>0){if(X>Z||++G>dh8)return 1/0;let Q=Y.pop();if(typeof Q==="string")X+=Q.length;else if(Array.isArray(Q))for(let J of Q)Y.push(J);else if(Q!==null&&typeof Q==="object")for(let J of Object.values(Q))Y.push(J)}return X}function th8($){return $.replace(nh8,"").replace(ph8,"\uFFFD")}function Oi1($){if(ih8($,wi1)>wi1)return JSON.stringify({truncated:!0,reason:"payload exceeds max stored size"});return JSON.stringify($,(Z,X)=>typeof X==="string"?th8(X):X)}class iy0{db;constructor($){this.db=$}async serializeParts($){let Z=new Set,X=[],G=new Map;for(let Y=0;Y<$.length;Y++){let Q=$[Y];if(Z.has(Q.id))continue;if(Z.add(Q.id),G.set(Q.id,Q),X.push({id:Q.id,seq:Q.seq,org_id:Q.org_id,thread_id:Q.thread_id,run_id:Q.run_id,message_id:Q.message_id,role:Q.role,kind:Q.kind,payload:Oi1(Q.payload),payload_ref:Q.payload_ref??null,metadata:Q.metadata!=null?Oi1(Q.metadata):null,created_at:Q.created_at}),(Y+1)%mh8===0)await a$(0)}return{rows:X,partsById:G}}async appendParts($){if($.length===0)return[];let{rows:Z,partsById:X}=await this.serializeParts($);return(await this.db.insertInto("thread_message_parts").values(Z).onConflict((Y)=>Y.column("id").doNothing()).returning("id").execute()).map((Y)=>X.get(Y.id)).filter((Y)=>Y!==void 0)}async replaceMessageParts($,Z,X){let{rows:G}=await this.serializeParts(X);return await this.db.transaction().execute(async(Y)=>{let Q=await Y.selectFrom("thread_message_parts").select((K)=>K.fn.min("created_at").as("created_at")).where("thread_id","=",$).where("message_id","=",Z).executeTakeFirst(),J=Q?.created_at!=null?new Date(Q.created_at).getTime():null,W=J!=null&&Number.isFinite(J)?G.map((K)=>({...K,created_at:new Date(J+K.seq).toISOString()})):G;if(await Y.deleteFrom("thread_message_parts").where("thread_id","=",$).where("message_id","=",Z).execute(),W.length>0)await Y.insertInto("thread_message_parts").values(W).onConflict((K)=>K.column("id").doUpdateSet((N)=>({seq:N.ref("excluded.seq"),role:N.ref("excluded.role"),kind:N.ref("excluded.kind"),payload:N.ref("excluded.payload"),payload_ref:N.ref("excluded.payload_ref"),metadata:N.ref("excluded.metadata"),created_at:N.ref("excluded.created_at")}))).execute()}),X}async deleteMessageParts($,Z){await this.db.deleteFrom("thread_message_parts").where("thread_id","=",$).where("message_id","=",Z).execute()}async maxCreatedAtMsForRun($){let Z=await this.db.selectFrom("thread_message_parts").select((G)=>G.fn.max("created_at").as("max")).where("run_id","=",$).executeTakeFirst();if(!Z?.max)return null;let X=new Date(Z.max).getTime();return Number.isFinite(X)?X:null}async maxCreatedAtMsForMessage($,Z){let X=await this.db.selectFrom("thread_message_parts").select((Y)=>Y.fn.max("created_at").as("max")).where("run_id","=",$).where("message_id","=",Z).executeTakeFirst();if(!X?.max)return null;let G=new Date(X.max).getTime();return Number.isFinite(G)?G:null}async loadWindow($,Z){let X=await this.db.selectFrom("thread_message_parts").select(["message_id"]).where("thread_id","=",$).where("kind","=","finish").orderBy("created_at","desc").orderBy("id","desc").limit(Z.limit).offset(Z.offset??0).execute(),G=await this.db.selectFrom("thread_message_parts").select((K)=>K.fn.count("id").as("count")).where("thread_id","=",$).where("kind","=","finish").executeTakeFirst(),Y=Number(G?.count??0),Q=Z.includeInFlight&&(Z.offset??0)===0?await this.db.selectFrom("thread_message_parts as p").select("p.message_id").distinct().where("p.thread_id","=",$).where((K)=>K.not(K.exists(K.selectFrom("thread_message_parts as f").select("f.id").whereRef("f.message_id","=","p.message_id").where("f.thread_id","=",$).where("f.kind","=","finish")))).execute():[],J=[...X.map((K)=>K.message_id),...Q.map((K)=>K.message_id)];if(J.length===0)return{messages:[],total:Y};let W=await this.db.selectFrom("thread_message_parts").selectAll().where("thread_id","=",$).where("message_id","in",J).orderBy("seq","asc").execute();return{messages:my0(W),total:Y}}async backfillFromMessages($,Z){let X=[],G=0;for(let Y of $)X.push({id:`${Z.runId}:${Y.id}:content`,seq:G++,org_id:Z.orgId,thread_id:Z.threadId,run_id:Z.runId,message_id:Y.id,role:Y.role,kind:"text",payload:Y.parts,payload_ref:null,metadata:Y.metadata??null,created_at:Y.created_at}),X.push({id:`${Z.runId}:${Y.id}:finish`,seq:G++,org_id:Z.orgId,thread_id:Z.threadId,run_id:Z.runId,message_id:Y.id,role:Y.role,kind:"finish",payload:{},payload_ref:null,metadata:null,created_at:Y.created_at});await this.appendParts(X)}}var wi1=50000000,dh8=1e5,mh8=25,nh8,ph8;var Bi1=B(()=>{J5();nh8=/\u0000/g,ph8=/[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?<![\uD800-\uDBFF])[\uDC00-\uDFFF]/g});import{sql as Bf}from"kysely";function nD($){return typeof $==="string"?$:$.toISOString()}function Di1($){return $.replace(/[\\%_]/g,"\\$&")}class ny0{inner;organizationId;constructor($,Z){this.inner=$;this.organizationId=Z}requireOrg(){if(!this.organizationId)throw Error("OrgScopedThreadStorage: thread operations require an authenticated organization");return this.organizationId}setOrganizationId($){this.organizationId=$}getOrganizationId(){return this.organizationId}create($){let Z=this.requireOrg();return this.inner.create({...$,organization_id:Z})}get($){return this.inner.get($,this.requireOrg())}update($,Z){return this.inner.update($,this.requireOrg(),Z)}pinRuntimeIfUnset($,Z){return this.inner.pinRuntimeIfUnset($,this.requireOrg(),Z)}completeRunIfNotCompleted($){return this.inner.completeRunIfNotCompleted($,this.requireOrg())}markRunFailed($,Z,X){return this.inner.markRunFailed($,this.requireOrg(),Z,X)}requiresActionIfInProgress($){return this.inner.requiresActionIfInProgress($,this.requireOrg())}forceFailIfInProgress($,Z){return this.inner.forceFailIfInProgress($,this.requireOrg(),Z)}delete($){return this.inner.delete($,this.requireOrg())}list($,Z){return this.inner.list(this.requireOrg(),$,Z)}listByTriggerIds($,Z){return this.inner.listByTriggerIds(this.requireOrg(),$,Z)}findLastUsedByVirtualMcpIds($){return this.inner.findLastUsedByVirtualMcpIds(this.requireOrg(),$)}bumpProgress($){return this.inner.bumpProgress($,this.requireOrg())}getProgress($){return this.inner.getProgress($,this.requireOrg())}listMessages($,Z){return this.inner.listMessages($,this.requireOrg(),Z)}listWithLastMessage($){return this.inner.listWithLastMessage(this.requireOrg(),$)}messageParts(){return this.inner.messageParts()}getRunFence($){return this.inner.getRunFence($)}setRunFence($,Z){return this.inner.setRunFence($,Z)}setCancelRequested($,Z){return this.inner.setCancelRequested($,Z)}getCancelRequestedAt($){return this.inner.getCancelRequestedAt($)}clearCancelRequested($){return this.inner.clearCancelRequested($)}bumpAckedSeq($,Z,X){return this.inner.bumpAckedSeq($,this.requireOrg(),Z,X)}getAckedSeq($){return this.inner.getAckedSeq($,this.requireOrg())}}class Df{db;constructor($){this.db=$}messageParts(){return new iy0(this.db)}async create($){let Z=$.id??c8("thrd"),X=new Date().toISOString();if(!$.organization_id)throw Error("organization_id is required");if(!$.created_by)throw Error("created_by is required");if(!$.title)$.title=uU;let G={id:Z,organization_id:$.organization_id,title:$.title,description:$.description??null,status:$.status??"completed",trigger_id:$.trigger_id??null,virtual_mcp_id:$.virtual_mcp_id??"",branch:$.branch??null,sandbox_provider_kind:$.sandbox_provider_kind??null,harness_id:$.harness_id??null,created_at:X,updated_at:X,created_by:$.created_by,updated_by:$.updated_by??null,...$.message_storage_version!==void 0?{message_storage_version:$.message_storage_version}:{},...$.metadata!==void 0?{metadata:JSON.stringify($.metadata)}:{}},Y=await this.db.insertInto("threads").values(G).onConflict((J)=>J.column("id").doNothing()).returningAll().executeTakeFirst();if(Y)return{...this.threadFromDbRow(Y),isNew:!0};let Q=await this.db.selectFrom("threads").selectAll().where("id","=",Z).where("organization_id","=",$.organization_id).executeTakeFirstOrThrow();return{...this.threadFromDbRow(Q),isNew:!1}}async get($,Z){let X=await this.db.selectFrom("threads").selectAll().where("id","=",$).where("organization_id","=",Z).executeTakeFirst();return X?this.threadFromDbRow(X):null}async update($,Z,X){let Y={updated_at:new Date().toISOString()};if(X.title!==void 0)Y.title=X.title;if(X.description!==void 0)Y.description=X.description;if(X.updated_by!==void 0)Y.updated_by=X.updated_by;if(X.hidden!==void 0)Y.hidden=X.hidden;if(X.status!==void 0)Y.status=X.status;if(X.context_start_message_id!==void 0)Y.context_start_message_id=X.context_start_message_id;if(X.run_owner_pod!==void 0)Y.run_owner_pod=X.run_owner_pod;if(X.run_config!==void 0)Y.run_config=X.run_config?JSON.stringify(X.run_config):null;if(X.run_started_at!==void 0)Y.run_started_at=X.run_started_at;if(X.last_progress_at!==void 0)Y.last_progress_at=X.last_progress_at;if(X.failure_reason!==void 0)Y.failure_reason=X.failure_reason;if(X.failure_kind!==void 0)Y.failure_kind=X.failure_kind;if(X.metadata!==void 0)Y.metadata=JSON.stringify(X.metadata);if(X.branch!==void 0)Y.branch=X.branch;if(X.virtual_mcp_id!==void 0)Y.virtual_mcp_id=X.virtual_mcp_id;if(X.sandbox_provider_kind!==void 0)Y.sandbox_provider_kind=X.sandbox_provider_kind;if(X.harness_id!==void 0)Y.harness_id=X.harness_id;if(X.message_storage_version!==void 0)Y.message_storage_version=X.message_storage_version;await this.db.updateTable("threads").set(Y).where("id","=",$).where("organization_id","=",Z).execute();let Q=await this.get($,Z);if(!Q)throw Error("Thread not found after update");return Q}async pinRuntimeIfUnset($,Z,X){let G=await this.db.updateTable("threads").set({harness_id:X.harnessId,sandbox_provider_kind:Bf`coalesce(${Bf.ref("sandbox_provider_kind")}, ${X.sandboxProviderKind})`,branch:Bf`coalesce(${Bf.ref("branch")}, ${X.branch})`,updated_at:new Date().toISOString(),...X.messageStorageVersion!==void 0?{message_storage_version:X.messageStorageVersion}:{}}).where("id","=",$).where("organization_id","=",Z).where("harness_id","is",null).where((Y)=>X.sandboxProviderKind===null?Y("sandbox_provider_kind","is",null):Y.or([Y("sandbox_provider_kind","is",null),Y("sandbox_provider_kind","=",X.sandboxProviderKind)])).returningAll().executeTakeFirst();if(G)return{thread:this.threadFromDbRow(G),claimed:!0};return{thread:await this.get($,Z),claimed:!1}}async completeRunIfNotCompleted($,Z){let G=(await this.db.updateTable("threads").set({status:"completed",run_owner_pod:null,run_config:null,run_started_at:null,updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).where("status","=","in_progress").returningAll().execute())[0];return G?this.threadFromDbRow(G):null}async markRunFailed($,Z,X,G){let Q=(await this.db.updateTable("threads").set({status:"failed",failure_reason:X,failure_kind:G,run_owner_pod:null,run_config:null,run_started_at:null,updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).where("status","=","in_progress").returningAll().execute())[0];return Q?this.threadFromDbRow(Q):null}async requiresActionIfInProgress($,Z){let G=(await this.db.updateTable("threads").set({status:"requires_action",run_config:null,run_started_at:null,updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).where("status","=","in_progress").returningAll().execute())[0];return G?this.threadFromDbRow(G):null}async forceFailIfInProgress($,Z,X){let G=new Date().toISOString(),Y=this.db.updateTable("threads").set({status:"failed",updated_at:G}).where("id","=",$).where("organization_id","=",Z).where("status","=","in_progress");if(X!=null)Y=Y.where("run_fence_token","=",X);return((await Y.executeTakeFirst()).numUpdatedRows??BigInt(0))>BigInt(0)}async delete($,Z){await this.db.deleteFrom("threads").where("id","=",$).where("organization_id","=",Z).execute()}async list($,Z,X){let G=X?.includeArchived===!0,Y=this.db.selectFrom("threads").selectAll().where("organization_id","=",$).where("hidden","=",G).orderBy("updated_at","desc");if(Z)Y=Y.where("created_by","=",Z);let Q=X?.virtualMcpId??X?.agentId;if(Q)Y=Y.where("virtual_mcp_id","=",Q);if(X?.hasTrigger===!0)Y=Y.where("trigger_id","is not",null);else if(X?.hasTrigger===!1)Y=Y.where("trigger_id","is",null);if(X?.startDate)Y=Y.where("updated_at",">=",X.startDate);if(X?.endDate)Y=Y.where("updated_at","<=",X.endDate);if(X?.search)Y=Y.where("title","ilike",`%${Di1(X.search)}%`);if(X?.status)Y=Y.where("status","=",X.status);let J=this.db.selectFrom("threads").select((N)=>N.fn.count("id").as("count")).where("organization_id","=",$).where("hidden","=",G);if(Z)J=J.where("created_by","=",Z);if(Q)J=J.where("virtual_mcp_id","=",Q);if(X?.hasTrigger===!0)J=J.where("trigger_id","is not",null);else if(X?.hasTrigger===!1)J=J.where("trigger_id","is",null);if(X?.startDate)J=J.where("updated_at",">=",X.startDate);if(X?.endDate)J=J.where("updated_at","<=",X.endDate);if(X?.search)J=J.where("title","ilike",`%${Di1(X.search)}%`);if(X?.status)J=J.where("status","=",X.status);if(X?.limit)Y=Y.limit(X.limit);if(X?.offset)Y=Y.offset(X.offset);let[W,K]=await Promise.all([Y.execute(),J.executeTakeFirst()]);return{threads:W.map((N)=>this.threadFromDbRow(N)),total:Number(K?.count||0)}}async listByTriggerIds($,Z,X){if(Z.length===0)return{threads:[],total:0};let G=this.db.selectFrom("threads").selectAll().where("organization_id","=",$).where("hidden","=",!1).where("trigger_id","in",Z).orderBy("updated_at","desc"),Y=this.db.selectFrom("threads").select((W)=>W.fn.count("id").as("count")).where("organization_id","=",$).where("hidden","=",!1).where("trigger_id","in",Z);if(X?.limit)G=G.limit(X.limit);if(X?.offset)G=G.offset(X.offset);let[Q,J]=await Promise.all([G.execute(),Y.executeTakeFirst()]);return{threads:Q.map((W)=>this.threadFromDbRow(W)),total:Number(J?.count||0)}}async findLastUsedByVirtualMcpIds($,Z){let X=new Map;if(Z.length===0)return X;let G=await this.db.selectFrom("threads").distinctOn("virtual_mcp_id").select(["virtual_mcp_id","created_by","created_at"]).where("organization_id","=",$).where("virtual_mcp_id","in",Z).orderBy("virtual_mcp_id").orderBy("created_at","desc").execute();for(let Y of G)X.set(Y.virtual_mcp_id,{last_used_at:nD(Y.created_at),last_used_by:Y.created_by});return X}async listWithLastMessage($,Z){let X=this.db.selectFrom("threads as t").innerJoinLateral((Y)=>Y.selectFrom("thread_messages as m").selectAll().whereRef("m.thread_id","=","t.id").orderBy("m.created_at","desc").orderBy("m.id","desc").limit(1).as("lm"),(Y)=>Y.onTrue()).selectAll("t").select(["lm.id as lm_id","lm.thread_id as lm_thread_id","lm.metadata as lm_metadata","lm.parts as lm_parts","lm.role as lm_role","lm.created_at as lm_created_at","lm.updated_at as lm_updated_at"]).where("t.organization_id","=",$).where("t.hidden","=",!1).where("lm.role","=",Z.lastMessageRole).orderBy("lm.created_at","desc").limit(Z.limit);if(Z.createdBy)X=X.where("t.created_by","=",Z.createdBy);return(await X.execute()).map((Y)=>({thread:this.threadFromDbRow(Y),lastMessage:this.messageFromDbRow({id:Y.lm_id,thread_id:Y.lm_thread_id,metadata:Y.lm_metadata,parts:Y.lm_parts,role:Y.lm_role,created_at:Y.lm_created_at,updated_at:Y.lm_updated_at})}))}async listMessages($,Z,X){if(!await this.get($,Z))return{messages:[],total:0};let Y=X?.sort??"asc",Q=this.db.selectFrom("thread_messages").selectAll().where("thread_id","=",$).orderBy("created_at",Y).orderBy("id",Y),J=this.db.selectFrom("thread_messages").select((N)=>N.fn.count("id").as("count")).where("thread_id","=",$);if(X?.limit)Q=Q.limit(X.limit);if(X?.offset)Q=Q.offset(X.offset);let[W,K]=await Promise.all([Q.execute(),J.executeTakeFirst()]);return{messages:W.map((N)=>this.messageFromDbRow(N)),total:Number(K?.count||0)}}async bumpProgress($,Z){await this.db.updateTable("threads").set({last_progress_at:Bf`now()`}).where("id","=",$).where("organization_id","=",Z).execute()}async getProgress($,Z){let X=await this.db.selectFrom("threads").select(["last_progress_at","run_started_at"]).where("id","=",$).where("organization_id","=",Z).executeTakeFirst();if(!X)return null;let G=(Y)=>{if(Y==null)return null;let Q=(Y instanceof Date?Y:new Date(Y)).getTime();return Number.isNaN(Q)?null:Q};return{lastProgressAt:G(X.last_progress_at),runStartedAt:G(X.run_started_at)}}async getRunFence($){return(await this.db.selectFrom("threads").select("run_fence_token").where("id","=",$).executeTakeFirst())?.run_fence_token??null}async setRunFence($,Z){await this.db.updateTable("threads").set(Z===null?{run_fence_token:null,run_acked_seq:null}:{run_fence_token:Z,run_acked_seq:null,status:"in_progress"}).where("id","=",$).execute()}async setCancelRequested($,Z){await this.db.updateTable("threads").set({cancel_requested_at:Bf`now()`}).where("id","=",$).where("organization_id","=",Z).execute()}async getCancelRequestedAt($){let X=(await this.db.selectFrom("threads").select("cancel_requested_at").where("id","=",$).executeTakeFirst())?.cancel_requested_at;if(X==null)return null;return X instanceof Date?X:new Date(X)}async clearCancelRequested($){await this.db.updateTable("threads").set({cancel_requested_at:null}).where("id","=",$).execute()}async bumpAckedSeq($,Z,X,G){await this.db.updateTable("threads").set({run_acked_seq:G}).where("id","=",$).where("organization_id","=",Z).where((Y)=>Y.or([Y("run_acked_seq","is",null),Y("run_acked_seq","<",G)])).execute()}async getAckedSeq($,Z){return(await this.db.selectFrom("threads").select("run_acked_seq").where("id","=",$).where("organization_id","=",Z).executeTakeFirst())?.run_acked_seq??0}threadFromDbRow($){let Z={};if($.metadata!=null)if(typeof $.metadata==="string")try{Z=JSON.parse($.metadata)}catch(X){console.error(`Failed to parse metadata for thread ${$.id}:`,$.metadata,X)}else Z=$.metadata;return{id:$.id,organization_id:$.organization_id,title:$.title,description:$.description,status:$.status,trigger_id:$.trigger_id??null,context_start_message_id:$.context_start_message_id??null,run_owner_pod:$.run_owner_pod??null,run_config:$.run_config??null,run_started_at:$.run_started_at?nD($.run_started_at):null,last_progress_at:$.last_progress_at?nD($.last_progress_at):null,virtual_mcp_id:$.virtual_mcp_id??"",branch:$.branch??null,sandbox_provider_kind:$.sandbox_provider_kind??null,harness_id:$.harness_id??null,metadata:Z,created_at:nD($.created_at),updated_at:nD($.updated_at),created_by:$.created_by,updated_by:$.updated_by??void 0,hidden:!!$.hidden,message_storage_version:$.message_storage_version??1,link_transport:$.link_transport??null}}messageFromDbRow($){let Z,X;try{Z=$.metadata?JSON.parse($.metadata):void 0}catch(G){console.error(`Failed to parse metadata for message ${$.id}:`,$.metadata,G),Z=void 0}try{X=typeof $.parts==="string"?JSON.parse($.parts):$.parts}catch(G){console.error(`Failed to parse parts for message ${$.id}:`,$.parts,G),X=[]}return{id:$.id,thread_id:$.thread_id,metadata:Z,parts:X,role:$.role,created_at:nD($.created_at),updated_at:nD($.updated_at)}}}var py0=B(()=>{DX();cU();Bi1()});import{sql as ty0}from"kysely";function v40($){if($==null)return null;return typeof $==="string"?$:$.toISOString()}function b40($){return`msg_async_stub_${$}`}async function oy0($,Z){await $.deleteFrom("thread_messages").where("id","=",b40(Z)).execute(),await $.deleteFrom("thread_message_parts").where("message_id","=",b40(Z)).execute()}function oh8($){if($==null)return null;if(typeof $!=="string")return $;try{return JSON.parse($)}catch{return null}}function ry0($){return{id:$.id,interactionId:$.interaction_id??null,toolCallId:$.tool_call_id,organizationId:$.organization_id,threadId:$.thread_id,messageId:$.message_id??null,provider:$.provider,modelId:$.model_id,query:$.query,status:$.status,attempts:$.attempts??0,lastPolledAt:v40($.last_polled_at),lastError:$.last_error??null,inputTokens:$.input_tokens??null,outputTokens:$.output_tokens??null,citations:oh8($.citations),resultUri:$.result_uri??null,resultPreview:$.result_preview??null,resultContent:$.result_content??null,createdAt:v40($.created_at)??"",updatedAt:v40($.updated_at)??"",completedAt:v40($.completed_at)}}class ay0{inner;organizationId;constructor($,Z){this.inner=$;this.organizationId=Z}requireOrg(){if(!this.organizationId)throw Error("OrgScopedAsyncResearchJobStorage: requires an authenticated organization");return this.organizationId}setOrganizationId($){this.organizationId=$}upsertPending($){return this.inner.upsertPending({organizationId:this.requireOrg(),...$})}findByToolCall($){return this.inner.findByToolCall(this.requireOrg(),$)}markPolling($,Z,X){return this.inner.markPolling(this.requireOrg(),$,Z,X)}recordPoll($,Z){return this.inner.recordPoll(this.requireOrg(),$,Z)}markCompleted($,Z){return this.inner.markCompleted(this.requireOrg(),$,Z)}markFailed($,Z){return this.inner.markFailed(this.requireOrg(),$,Z)}markCancelled($,Z){return this.inner.markCancelled(this.requireOrg(),$,Z)}}class ld{db;constructor($){this.db=$}async upsertPending($){let Z=new Date().toISOString(),X=await this.db.insertInto("async_research_jobs").values({organization_id:$.organizationId,thread_id:$.threadId,tool_call_id:$.toolCallId,message_id:$.messageId??null,provider:$.provider,model_id:$.modelId,query:$.query,status:"pending",attempts:0,updated_at:Z}).onConflict((Y)=>Y.columns(["organization_id","tool_call_id"]).doNothing()).returningAll().executeTakeFirst();if(X)return ry0(X);let G=await this.db.selectFrom("async_research_jobs").selectAll().where("organization_id","=",$.organizationId).where("tool_call_id","=",$.toolCallId).executeTakeFirstOrThrow();return ry0(G)}async findByToolCall($,Z){let X=await this.db.selectFrom("async_research_jobs").selectAll().where("organization_id","=",$).where("tool_call_id","=",Z).executeTakeFirst();return X?ry0(X):null}async markPolling($,Z,X,G){let Y=new Date().toISOString();await this.db.transaction().execute(async(Q)=>{if(await Q.updateTable("async_research_jobs").set({status:"polling",interaction_id:X,last_polled_at:Y,updated_at:Y}).where("organization_id","=",$).where("tool_call_id","=",Z).execute(),(await Q.selectFrom("threads").select("message_storage_version").where("id","=",G.threadId).where("organization_id","=",$).executeTakeFirst())?.message_storage_version!==2)return;let W=b40(Z);await Q.insertInto("thread_message_parts").values([{id:`${G.threadId}:${W}:0`,seq:0,org_id:$,thread_id:G.threadId,run_id:G.threadId,message_id:W,role:"assistant",kind:"tool_call",payload:JSON.stringify({type:`tool-${G.toolName}`,toolCallId:Z,state:"input-available",input:{query:G.query}}),payload_ref:null,metadata:null,created_at:Y},{id:`${G.threadId}:${W}:finish`,seq:1,org_id:$,thread_id:G.threadId,run_id:G.threadId,message_id:W,role:"assistant",kind:"finish",payload:JSON.stringify({}),payload_ref:null,metadata:null,created_at:Y}]).onConflict((K)=>K.column("id").doNothing()).execute()})}async recordPoll($,Z,X){let G=new Date().toISOString();await this.db.updateTable("async_research_jobs").set({attempts:ty0`attempts + 1`,last_polled_at:G,...X!==void 0?{last_error:X}:{},updated_at:G}).where("organization_id","=",$).where("tool_call_id","=",Z).execute()}async markCompleted($,Z,X){let G=new Date().toISOString();await this.db.transaction().execute(async(Y)=>{await Y.updateTable("async_research_jobs").set({status:"completed",input_tokens:X.inputTokens,output_tokens:X.outputTokens,citations:JSON.stringify(X.citations),result_uri:X.resultUri,result_preview:X.resultPreview,result_content:X.resultContent,completed_at:G,updated_at:G}).where("organization_id","=",$).where("tool_call_id","=",Z).execute(),await oy0(Y,Z)})}async markFailed($,Z,X){let G=new Date().toISOString();await this.db.transaction().execute(async(Y)=>{await Y.updateTable("async_research_jobs").set({status:"failed",last_error:X,completed_at:G,updated_at:G}).where("organization_id","=",$).where("tool_call_id","=",Z).execute(),await oy0(Y,Z)})}async markCancelled($,Z,X){let G=new Date().toISOString();await this.db.transaction().execute(async(Y)=>{await Y.updateTable("async_research_jobs").set({status:"cancelled",last_error:X??null,completed_at:G,updated_at:G}).where("organization_id","=",$).where("tool_call_id","=",Z).execute(),await oy0(Y,Z)})}async sweepAbandoned($){let Z=new Date(Date.now()-$).toISOString(),X=new Date().toISOString();return await this.db.transaction().execute(async(G)=>{let Y=await G.updateTable("async_research_jobs").set({status:"abandoned",completed_at:X,updated_at:X,last_error:ty0`COALESCE(last_error, '') || ' [abandoned by sweeper]'`}).where("status","in",["pending","polling"]).where(ty0`COALESCE(last_polled_at, created_at) < ${Z}::timestamptz`).returning(["tool_call_id"]).execute();if(Y.length===0)return 0;let Q=Y.map((J)=>b40(J.tool_call_id));return await G.deleteFrom("thread_messages").where("id","in",Q).execute(),await G.deleteFrom("thread_message_parts").where("message_id","in",Q).execute(),Y.length})}}var sy0=()=>{};function f40(){let $=new Map;function Z(G,Y){let Q=$.get(Y);if(Q)return Q;let J=new P9({name:`outbound-client-${Y}`,version:"1.0.0"},{capabilities:{tasks:{list:{},cancel:{},requests:{tool:{call:{}}}}},jsonSchemaValidator:a6});J.onclose=()=>{$.delete(Y)};let W=J.connect(G).then(()=>J).catch((K)=>{throw $.delete(Y),K});return $.set(Y,W),W}return Object.assign(Z,{[Symbol.asyncDispose]:async()=>{let G=[];for(let[Y,Q]of $)G.push(Q.then((J)=>J.close()).catch(()=>{}));await Promise.all(G),$.clear()}})}var ey0=B(()=>{YW();PX()});class $g0{db;vault;constructor($,Z){this.db=$;this.vault=Z}async get($){let Z=await this.db.selectFrom("subsidized_gateway_keys").select("encrypted_key").where("organization_id","=",$).executeTakeFirst();if(!Z)return null;return await this.vault.decrypt(Z.encrypted_key)}async put($,Z){let X=await this.vault.encrypt(Z);await this.db.insertInto("subsidized_gateway_keys").values({organization_id:$,encrypted_key:X}).onConflict((G)=>G.column("organization_id").doUpdateSet({encrypted_key:X})).execute()}}import{sql as rh8}from"kysely";function Li1($){return $ instanceof Date?$.toISOString():String($)}class Zg0{db;vault;constructor($,Z){this.db=$;this.vault=Z}rowToInfo($){return{id:$.id,organizationId:$.organization_id,scope:$.scope,userId:$.user_id,name:$.name,description:$.description,createdBy:$.created_by,createdAt:Li1($.created_at),updatedBy:$.updated_by,updatedAt:Li1($.updated_at)}}assertVisible($,Z){if($.scope==="user"&&$.user_id!==Z)throw new lU($.id)}async create($){let Z=c8("sec"),X=await this.vault.encrypt($.value),G=new Date,Y=await this.db.insertInto("secrets").values({id:Z,organization_id:$.organizationId,scope:$.scope.kind,user_id:$.scope.kind==="user"?$.scope.userId:null,name:$.name,encrypted_value:X,description:$.description??null,created_by:$.createdBy,created_at:G,updated_by:$.createdBy,updated_at:G}).returning(x40).executeTakeFirstOrThrow();return this.rowToInfo(Y)}async update($){let Z=await this.db.selectFrom("secrets").where("id","=",$.id).where("organization_id","=",$.organizationId).select(["id","scope","user_id"]).executeTakeFirst();if(!Z)throw new wQ($.id);this.assertVisible(Z,$.callerUserId);let X={updated_by:$.updatedBy,updated_at:new Date};if($.value!==void 0)X.encrypted_value=await this.vault.encrypt($.value);if($.description!==void 0)X.description=$.description;let G=await this.db.updateTable("secrets").set(X).where("id","=",$.id).where("organization_id","=",$.organizationId).returning(x40).executeTakeFirstOrThrow();return this.rowToInfo(G)}async delete($,Z,X){let G=await this.db.selectFrom("secrets").where("id","=",$).where("organization_id","=",Z).select(["id","scope","user_id"]).executeTakeFirst();if(!G)throw new wQ($);this.assertVisible(G,X),await this.db.deleteFrom("secrets").where("id","=",$).where("organization_id","=",Z).execute()}async list($){let Z=this.db.selectFrom("secrets").where("organization_id","=",$.organizationId).select(x40);if($.scope?.kind==="user")Z=Z.where("scope","=","user").where("user_id","=",$.scope.userId);else if($.scope?.kind==="organization")Z=Z.where("scope","=","organization");else Z=Z.where((G)=>G.or([G("scope","=","organization"),G.and([G("scope","=","user"),G("user_id","=",$.callerUserId)])]));return(await Z.orderBy("created_at","desc").execute()).map((G)=>this.rowToInfo(G))}async findById($,Z,X){let G=await this.db.selectFrom("secrets").where("id","=",$).where("organization_id","=",Z).select(x40).executeTakeFirst();if(!G)throw new wQ($);return this.assertVisible(G,X),this.rowToInfo(G)}async resolveById($,Z,X){let G=await this.db.selectFrom("secrets").where("id","=",$).where("organization_id","=",Z).selectAll().executeTakeFirst();if(!G)throw new wQ($);this.assertVisible(G,X);let Y=await this.vault.decrypt(G.encrypted_value);return{info:this.rowToInfo(G),value:Y}}async resolveByName($){let Z=this.db.selectFrom("secrets").where("organization_id","=",$.organizationId).where("scope","=",$.scope.kind).where(rh8`lower(name) = lower(${$.name})`).selectAll();if($.scope.kind==="user")Z=Z.where("user_id","=",$.scope.userId);let X=await Z.executeTakeFirst();if(!X)throw new wQ(`${$.scope.kind}:${$.name}`);let G=await this.vault.decrypt(X.encrypted_value);return{info:this.rowToInfo(X),value:G}}}var x40,wQ,lU;var dd=B(()=>{DX();x40=["id","organization_id","scope","user_id","name","description","created_by","created_at","updated_by","updated_at"];wQ=class wQ extends Error{constructor($){super(`Secret ${$} not found`);this.name="SecretNotFoundError"}};lU=class lU extends Error{constructor($){super(`Access denied for secret ${$}`);this.name="SecretAccessDeniedError"}}});import{sql as ah8}from"kysely";function Ei1($){return $ instanceof Date?$.toISOString():String($)}class Xg0{db;vault;constructor($,Z){this.db=$;this.vault=Z}rowToInfo($){return{id:$.id,organizationId:$.organization_id,name:$.name,description:$.description,bucket:$.bucket,region:$.region,endpoint:$.endpoint,forcePathStyle:$.force_path_style,prefix:$.prefix,publicUrlBase:$.public_url_base,credentialType:$.credential_type??"static",refreshUrl:$.refresh_url,siteSlug:$.site_slug,createdBy:$.created_by,createdAt:Ei1($.created_at),updatedBy:$.updated_by,updatedAt:Ei1($.updated_at)}}async create($){let Z=c8("fcfg"),X=await this.vault.encrypt(JSON.stringify($.credentials)),G=new Date,Y=await this.db.insertInto("org_file_configs").values({id:Z,organization_id:$.organizationId,name:$.name,description:$.description??null,bucket:$.bucket,region:$.region,endpoint:$.endpoint??null,force_path_style:$.forcePathStyle??!1,prefix:$.prefix??null,public_url_base:$.publicUrlBase??null,credential_type:$.credentials.type,refresh_url:$.refreshUrl??null,site_slug:$.siteSlug??null,encrypted_credentials:X,created_by:$.createdBy,created_at:G,updated_by:$.createdBy,updated_at:G}).returning(y40).executeTakeFirstOrThrow();return this.rowToInfo(Y)}async update($){if(!await this.db.selectFrom("org_file_configs").where("id","=",$.id).where("organization_id","=",$.organizationId).select(["id"]).executeTakeFirst())throw new Lf($.id);let X={updated_by:$.updatedBy,updated_at:new Date};if($.name!==void 0)X.name=$.name;if($.description!==void 0)X.description=$.description;if($.bucket!==void 0)X.bucket=$.bucket;if($.region!==void 0)X.region=$.region;if($.endpoint!==void 0)X.endpoint=$.endpoint;if($.forcePathStyle!==void 0)X.force_path_style=$.forcePathStyle;if($.prefix!==void 0)X.prefix=$.prefix;if($.publicUrlBase!==void 0)X.public_url_base=$.publicUrlBase;if($.refreshUrl!==void 0)X.refresh_url=$.refreshUrl;if($.siteSlug!==void 0)X.site_slug=$.siteSlug;if($.credentials!==void 0)X.credential_type=$.credentials.type,X.encrypted_credentials=await this.vault.encrypt(JSON.stringify($.credentials));let G=await this.db.updateTable("org_file_configs").set(X).where("id","=",$.id).where("organization_id","=",$.organizationId).returning(y40).executeTakeFirstOrThrow();return this.rowToInfo(G)}async delete($,Z){if(!await this.db.selectFrom("org_file_configs").where("id","=",$).where("organization_id","=",Z).select(["id"]).executeTakeFirst())throw new Lf($);await this.db.deleteFrom("org_file_configs").where("id","=",$).where("organization_id","=",Z).execute()}async list($){return(await this.db.selectFrom("org_file_configs").where("organization_id","=",$).select(y40).orderBy("created_at","desc").execute()).map((X)=>this.rowToInfo(X))}async findById($,Z){let X=await this.db.selectFrom("org_file_configs").where("id","=",$).where("organization_id","=",Z).select(y40).executeTakeFirst();if(!X)throw new Lf($);return this.rowToInfo(X)}async resolveById($,Z){let X=await this.db.selectFrom("org_file_configs").where("id","=",$).where("organization_id","=",Z).selectAll().executeTakeFirst();if(!X)throw new Lf($);return{info:this.rowToInfo(X),credentials:await this.decodeCredentials(X)}}async resolveByName($){let Z=await this.db.selectFrom("org_file_configs").where("organization_id","=",$.organizationId).where(ah8`lower(name) = lower(${$.name})`).selectAll().executeTakeFirst();if(!Z)throw new Lf($.name);return{info:this.rowToInfo(Z),credentials:await this.decodeCredentials(Z)}}async decodeCredentials($){if($.credential_type==="managed")return{type:"managed"};let Z=await this.vault.decrypt($.encrypted_credentials),X=JSON.parse(Z);if(($.credential_type??"static")==="sts-session")return{type:"sts-session",apiKey:String(X.apiKey)};return{type:"static",accessKeyId:String(X.accessKeyId),secretAccessKey:String(X.secretAccessKey)}}}var y40,Lf;var zi1=B(()=>{DX();y40=["id","organization_id","name","description","bucket","region","endpoint","force_path_style","prefix","public_url_base","credential_type","refresh_url","site_slug","created_by","created_at","updated_by","updated_at"];Lf=class Lf extends Error{constructor($){super(`File config ${$} not found`);this.name="OrgFileConfigNotFoundError"}}});function g40($){return Gg0.test($)}var Gg0;var h40=B(()=>{Gg0=/^[a-z0-9][a-z0-9-]{0,59}$/});function ji1($){return $ instanceof Date?$.toISOString():String($)}function Yg0($){return{slug:$.slug,organizationId:$.organization_id,source:$.source,createdBy:$.created_by,createdAt:ji1($.created_at),updatedBy:$.updated_by,updatedAt:ji1($.updated_at)}}class Jg0{db;constructor($){this.db=$}async claimSite($){if(!g40($.slug))throw Error(`Invalid site slug "${$.slug}" \u2014 must be 1-60 chars of lowercase letters, digits, or hyphens, starting with a letter or digit`);let Z=new Date,X=await this.db.insertInto("org_sites").values({slug:$.slug,organization_id:$.organizationId,source:$.source??"deco-import",created_by:$.by,created_at:Z,updated_by:$.by,updated_at:Z}).onConflict((Q)=>Q.column("slug").doNothing()).returningAll().executeTakeFirst();if(X)return Yg0(X);let G=await this.getBySlug($.slug);if(!G)throw new Qg0($.slug,"unknown");if(G.organizationId!==$.organizationId)throw new Qg0($.slug,G.organizationId);let Y=await this.db.updateTable("org_sites").set({source:$.source??G.source,updated_by:$.by,updated_at:Z}).where("slug","=",$.slug).where("organization_id","=",$.organizationId).returningAll().executeTakeFirstOrThrow();return Yg0(Y)}async getBySlug($){let Z=await this.db.selectFrom("org_sites").selectAll().where("slug","=",$).executeTakeFirst();return Z?Yg0(Z):null}async isOwnedBy($,Z){return!!await this.db.selectFrom("org_sites").select("slug").where("slug","=",$).where("organization_id","=",Z).executeTakeFirst()}}var Qg0;var Pi1=B(()=>{h40();Qg0=class Qg0 extends Error{slug;ownerOrganizationId;constructor($,Z){super(`Site slug "${$}" is already owned by another organization`);this.slug=$;this.ownerOrganizationId=Z;this.name="OrgSiteConflictError"}}});function Ai1($,Z){return $?.startsWith(`${md[Z]}:`)??!1}function Wg0($){let Z=0;for(let X of $){if(X.action!=="status_changed")continue;if(X.data?.to!=="in_review")continue;Z=Math.max(Z,new Date(X.occurredAt).getTime())}return Z}function sh8($,Z){let X=Wg0($),G=new Map;for(let Y of $){if(Y.action!=="review_approved"&&Y.action!=="review_changes_requested")continue;if(new Date(Y.occurredAt).getTime()<X)continue;let Q=Y.data??{};if(Q.reviewer!=="qa"&&Q.reviewer!=="code_review")continue;if(Y.action==="review_approved"){if(Z?.verifiedOnly&&Q.verified!==!0)continue;G.set(Q.reviewer,"approved")}else G.set(Q.reviewer,"changes_requested")}return G}function Ef($,Z,X){if(Z.length===0)return!1;let G=sh8($,X);return Z.every((Y)=>G.get(Y)==="approved")}var s6="super-agent",dU,md,mU,Ti1="task-board.item.updated",Ri1="task-board.item.deleted";var OQ=B(()=>{dU=["qa","code_review"],md={qa:"QA Agent",code_review:"Code Reviewer"},mU={qa:"qa_agent_enabled",code_review:"code_reviewer_enabled"}});function Kg0($){let Z=(X)=>X instanceof Date?X.toISOString():X;return{id:$.id,taskBoardItemId:$.task_board_item_id,parentId:$.parent_id,authorId:$.author_id,body:$.body,resolved:$.resolved,createdAt:Z($.created_at),updatedAt:Z($.updated_at)}}function eh8($){if($&&typeof $==="object"&&!Array.isArray($)){let Z=$.text;if(typeof Z==="string"&&Z.trim())return Z.trim()}return null}function Hg0($){if($.status!=="in_progress")return!1;let Z=$.threads.filter((X)=>X.hasMessages);if(Z.length===0)return!1;return Z.every((X)=>X.status!==null&&Ng0.has(X.status))}function $u8($){let Z=typeof $==="string"?(()=>{try{return JSON.parse($)}catch{return null}})():$;if(!Z||typeof Z!=="object")return!1;let X=Z.githubRepo?.url;return typeof X==="string"&&X.length>0}class iU{db;constructor($){this.db=$}inTransaction($){return this.db.isTransaction?$(this.db):this.db.transaction().execute($)}async list($){let X=(await this.db.selectFrom("task_board_items").selectAll().where("organization_id","=",$).orderBy("sort_order","asc").execute()).map((G)=>this.itemFromDbRow(G));return await this.attachRefs(X,$),X}async getById($,Z){let X=await this.db.selectFrom("task_board_items").selectAll().where("id","=",$).where("organization_id","=",Z).executeTakeFirst();if(!X)return null;let G=this.itemFromDbRow(X);return await this.attachRefs([G],Z),G}async create($){let Z=c8("board"),X=new Date().toISOString(),G=$.status??"triage",{minOrder:Y}=await this.db.selectFrom("task_board_items").select((J)=>J.fn.min("sort_order").as("minOrder")).where("organization_id","=",$.organizationId).where("status","=",G).executeTakeFirstOrThrow(),Q=await this.db.insertInto("task_board_items").values({id:Z,organization_id:$.organizationId,title:$.title,description:$.description??null,status:G,priority:$.priority??"medium",assignee_id:$.assigneeId??null,assigned_by:$.assignedBy??null,due_date:$.dueDate??null,external_key:$.externalKey??null,sort_order:(Y??0)-1,created_by:$.by,created_at:X,updated_by:$.by,updated_at:X}).returningAll().executeTakeFirstOrThrow();return this.itemFromDbRow(Q)}async update($,Z,X,G){let Y=await this.db.updateTable("task_board_items").set({...X.title!==void 0?{title:X.title}:{},...X.description!==void 0?{description:X.description}:{},...X.status!==void 0?{status:X.status}:{},...X.priority!==void 0?{priority:X.priority}:{},...X.assigneeId!==void 0?{assignee_id:X.assigneeId}:{},...X.assignedBy!==void 0?{assigned_by:X.assignedBy}:{},...X.dueDate!==void 0?{due_date:X.dueDate}:{},...X.sortOrder!==void 0?{sort_order:X.sortOrder}:{},updated_by:G,updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).returningAll().executeTakeFirstOrThrow(),Q=this.itemFromDbRow(Y);return await this.attachRefs([Q],Z),Q}async delete($,Z){await this.inTransaction(async(X)=>{await X.deleteFrom("task_board_item_threads").where("task_board_item_id","=",$).where("organization_id","=",Z).execute(),await X.deleteFrom("task_board_item_prs").where("task_board_item_id","=",$).where("organization_id","=",Z).execute(),await X.deleteFrom("task_board_items").where("id","=",$).where("organization_id","=",Z).execute()})}async setItemTags($,Z,X){await this.inTransaction(async(G)=>{if(await G.deleteFrom("task_board_item_tags").where("task_board_item_id","=",$).$if(Z.length>0,(Y)=>Y.where("id","not in",Z)).execute(),Z.length>0)await G.insertInto("task_board_item_tags").values(Z.map((Y)=>({task_board_item_id:$,id:Y,created_by:X,created_at:new Date().toISOString()}))).onConflict((Y)=>Y.doNothing()).execute()})}async linkThread($,Z,X){await this.db.insertInto("task_board_item_threads").values({task_board_item_id:$,thread_id:Z,organization_id:X}).onConflict((G)=>G.columns(["task_board_item_id","thread_id"]).doNothing()).execute()}async linkedTaskIds($,Z){return(await this.db.selectFrom("task_board_item_threads").select("task_board_item_id as taskId").where("thread_id","=",$).where("organization_id","=",Z).execute()).map((G)=>G.taskId)}async linkPr($){await this.db.insertInto("task_board_item_prs").values({task_board_item_id:$.taskBoardItemId,organization_id:$.organizationId,url:$.url,pr_number:$.prNumber,repo_owner:$.repoOwner,repo_name:$.repoName,connection_id:$.connectionId??null}).onConflict((Z)=>Z.columns(["task_board_item_id","url"]).doNothing()).execute()}async listPrs($,Z){return(await this.db.selectFrom("task_board_item_prs").select(["url","pr_number as prNumber","repo_owner as repoOwner","repo_name as repoName","connection_id as connectionId","created_at as createdAt"]).where("task_board_item_id","=",$).where("organization_id","=",Z).orderBy("created_at","desc").execute()).map((G)=>({url:G.url,number:G.prNumber,repoOwner:G.repoOwner,repoName:G.repoName,connectionId:G.connectionId??null,createdAt:G.createdAt instanceof Date?G.createdAt.toISOString():G.createdAt}))}async advanceLinkedTasksToReviewOnThreadFinish($,Z){let X=[];for(let G of await this.linkedTaskIds($,Z)){let Y=await this.getById(G,Z);if(!Y||!Hg0(Y))continue;X.push(await this.update(G,Z,{status:"in_review"},Y.updatedBy)),await this.recordActivity({taskBoardItemId:G,action:"status_changed",actorId:null,data:{from:Y.status,to:"in_review"}}).catch((Q)=>console.error("[task-board] in_review activity write failed",Q))}return X}async reopenLinkedTasksOnThreadRun($,Z){let X=[];for(let G of await this.linkedTaskIds($,Z)){let Y=await this.getById(G,Z);if(!Y||Y.status!=="in_review")continue;X.push(await this.update(G,Z,{status:"in_progress"},Y.updatedBy))}return X}async claimConflictResolution($,Z,X){let G=await this.db.updateTable("task_board_items").set({status:"in_progress",updated_by:X,updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).where("status","=","in_review").where("assignee_id","=",s6).returningAll().executeTakeFirst();if(!G)return null;let Y=this.itemFromDbRow(G);return await this.attachRefs([Y],Z),Y}async claimReviewChangesBounce($,Z,X){let G=await this.db.updateTable("task_board_items").set({status:"in_progress",updated_by:X,updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).where("status","=","in_review").where("assignee_id","=",s6).returningAll().executeTakeFirst();if(!G)return null;let Y=this.itemFromDbRow(G);return await this.attachRefs([Y],Z),Y}async attachRefs($,Z){if($.length===0)return;await this.inTransaction(async(X)=>{await this.attachThreads(X,$,Z),await this.attachTags(X,$)})}async attachThreads($,Z,X){let G=Z.map((J)=>J.id),Y=await $.selectFrom("task_board_item_threads as link").innerJoin("threads as t","t.id","link.thread_id").leftJoinLateral((J)=>J.selectFrom("thread_message_parts as p").select("p.payload as payload").whereRef("p.thread_id","=","link.thread_id").where("p.role","=","assistant").where("p.kind","=","text").orderBy("p.created_at","desc").limit(1).as("lastmsg"),(J)=>J.onTrue()).select((J)=>["link.task_board_item_id as taskId","link.thread_id as threadId","link.created_at as createdAt","t.status as status","t.title as title","t.virtual_mcp_id as virtualMcpId","t.metadata as metadata","lastmsg.payload as lastMessagePayload",J.or([J.exists(J.selectFrom("thread_message_parts as mp").select("mp.id").whereRef("mp.thread_id","=","link.thread_id")),J.exists(J.selectFrom("thread_messages as tm").select("tm.id").whereRef("tm.thread_id","=","link.thread_id"))]).as("hasMessages")]).where("link.organization_id","=",X).where("link.task_board_item_id","in",G).orderBy("link.created_at","desc").execute(),Q=new Map;for(let J of Y){let W={threadId:J.threadId,virtualMcpId:J.virtualMcpId??null,status:J.status??null,title:J.title??null,lastMessage:eh8(J.lastMessagePayload),hasPreview:$u8(J.metadata),hasMessages:!!J.hasMessages,createdAt:J.createdAt instanceof Date?J.createdAt.toISOString():J.createdAt},K=Q.get(J.taskId);if(K)K.push(W);else Q.set(J.taskId,[W])}for(let J of Z)J.threads=Q.get(J.id)??[]}async attachTags($,Z){let X=Z.map((Q)=>Q.id),G=await $.selectFrom("task_board_item_tags as link").innerJoin("organization_tags as tag","tag.id","link.id").select(["link.task_board_item_id as taskId","link.created_by as createdBy","link.created_at as createdAt","tag.id as id","tag.name as name","tag.color as color"]).where("link.task_board_item_id","in",X).orderBy("tag.name","asc").execute(),Y=new Map;for(let Q of G){let J={id:Q.id,name:Q.name,color:Q.color??null,createdBy:Q.createdBy,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():Q.createdAt},W=Y.get(Q.taskId);if(W)W.push(J);else Y.set(Q.taskId,[J])}for(let Q of Z)Q.tags=Y.get(Q.id)??[]}async recordActivity($){await this.db.insertInto("task_board_activity").values({id:c8("act"),task_board_item_id:$.taskBoardItemId,action:$.action,actor_id:$.actorId,data:$.data?JSON.stringify($.data):null,occurred_at:new Date().toISOString()}).execute()}async claimReviewer($,Z,X){let G=`rtok_${crypto.randomUUID()}`,Y=await this.db.insertInto("task_board_review_claims").values({task_board_item_id:$,reviewer:Z,cycle_at:X,token:G}).onConflict((J)=>J.columns(["task_board_item_id","reviewer","cycle_at"]).doNothing()).returning("token").executeTakeFirst();if(Y)return{claimed:!0,token:Y.token};return{claimed:!1,token:(await this.db.selectFrom("task_board_review_claims").select("token").where("task_board_item_id","=",$).where("reviewer","=",Z).where("cycle_at","=",X).executeTakeFirst())?.token??G}}async resolveReviewClaimByToken($,Z){let X=await this.db.selectFrom("task_board_review_claims").select(["reviewer","cycle_at"]).where("task_board_item_id","=",$).where("token","=",Z).executeTakeFirst();return X?{reviewer:X.reviewer,cycleAt:X.cycle_at}:null}async recordActivities($){if($.length===0)return;let Z=new Date().toISOString();await this.db.insertInto("task_board_activity").values($.map((X)=>({id:c8("act"),task_board_item_id:X.taskBoardItemId,action:X.action,actor_id:X.actorId,data:X.data?JSON.stringify(X.data):null,occurred_at:Z}))).execute()}async listActivity($,Z){return(await this.db.selectFrom("task_board_activity as a").innerJoin("task_board_items as item","item.id","a.task_board_item_id").selectAll("a").where("item.organization_id","=",Z).where("a.task_board_item_id","=",$).orderBy("a.occurred_at","asc").execute()).map((G)=>({id:G.id,taskBoardItemId:G.task_board_item_id,action:G.action,actorId:G.actor_id,data:typeof G.data==="string"?JSON.parse(G.data):G.data??{},occurredAt:G.occurred_at instanceof Date?G.occurred_at.toISOString():G.occurred_at}))}async listComments($,Z){return(await this.db.selectFrom("task_board_comments as c").innerJoin("task_board_items as item","item.id","c.task_board_item_id").selectAll("c").where("item.organization_id","=",Z).where("c.task_board_item_id","=",$).orderBy("c.created_at","asc").execute()).map((G)=>Kg0(G))}async createComment($){if(!await this.db.selectFrom("task_board_items").select("id").where("id","=",$.taskBoardItemId).where("organization_id","=",$.organizationId).executeTakeFirst())return null;let X=null;if($.parentId){let Y=await this.db.selectFrom("task_board_comments").select(["id","parent_id"]).where("id","=",$.parentId).where("task_board_item_id","=",$.taskBoardItemId).executeTakeFirst();if(!Y)return null;X=Y.parent_id??Y.id}let G=await this.db.insertInto("task_board_comments").values({id:c8("cmt"),task_board_item_id:$.taskBoardItemId,parent_id:X,author_id:$.authorId,body:$.body}).returningAll().executeTakeFirstOrThrow();return Kg0(G)}async updateComment($){let Z=await this.commentInOrg($.id,$.organizationId);if(!Z)return null;if($.body!==void 0&&Z.authorId!==$.callerId)return null;let X=await this.db.updateTable("task_board_comments").set({...$.body===void 0?{}:{body:$.body},...$.resolved===void 0?{}:{resolved:$.resolved},updated_at:new Date().toISOString()}).where("id","=",$.id).returningAll().executeTakeFirst();return X?Kg0(X):null}async deleteComment($,Z,X){let G=await this.commentInOrg($,Z);if(!G||G.authorId!==X)return!1;return await this.db.deleteFrom("task_board_comments").where("id","=",$).execute(),!0}async commentInOrg($,Z){let X=await this.db.selectFrom("task_board_comments as c").innerJoin("task_board_items as item","item.id","c.task_board_item_id").select(["c.id","c.author_id"]).where("c.id","=",$).where("item.organization_id","=",Z).executeTakeFirst();return X?{authorId:X.author_id}:null}itemFromDbRow($){return{id:$.id,organizationId:$.organization_id,title:$.title,description:$.description,status:$.status,priority:$.priority,assigneeId:$.assignee_id,assignedBy:$.assigned_by,dueDate:$.due_date instanceof Date?$.due_date.toISOString():$.due_date,sortOrder:$.sort_order,threads:[],tags:[],createdBy:$.created_by,createdAt:$.created_at instanceof Date?$.created_at.toISOString():$.created_at,updatedBy:$.updated_by,updatedAt:$.updated_at instanceof Date?$.updated_at.toISOString():$.updated_at}}}var Ng0;var zf=B(()=>{DX();OQ();Ng0=new Set(["completed","failed","expired"])});class Fg0{db;constructor($){this.db=$}async create($,Z,X){let G=crypto.randomUUID(),Y=new Date(Date.now()+600000);return await this.db.insertInto("oauth_pkce_states").values({id:G,organization_id:Z,user_id:X,code_verifier:$,expires_at:Y,created_at:new Date}).execute(),G}async consume($,Z,X){let G=await this.db.deleteFrom("oauth_pkce_states").where("id","=",$).where("organization_id","=",Z).where("user_id","=",X).returningAll().executeTakeFirst();if(!G)throw Error("Invalid or expired OAuth state token");if((G.expires_at instanceof Date?G.expires_at:new Date(G.expires_at))<new Date)throw Error("OAuth state token has expired");return G.code_verifier}}function EW($){if($==null)return"unknown error";if(typeof $==="string")return $;if($ instanceof Error)return $.message;return JSON.stringify($)}function u40($){if($===null||typeof $==="string"||typeof $==="number"||typeof $==="boolean")return!0;if(Array.isArray($))return $.every(u40);if(typeof $==="object")return Object.entries($).every(([Z,X])=>typeof Z==="string"&&(X===void 0||u40(X)));return!1}function Ug0($){return Array.isArray($)&&$.every(u40)}function id($){return $!=null&&typeof $==="object"&&Object.entries($).every(([Z,X])=>typeof Z==="string"&&(X===void 0||u40(X)))}var ei1="vercel.ai.error",Zu8,Ii1,qi1,Q1,$n1="AI_APICallError",Zn1,Xu8,Mi1,ki1,a8,Xn1="AI_EmptyResponseBodyError",Gn1,Gu8,Si1,Vi1,c40,Yn1="AI_InvalidArgumentError",Qn1,Yu8,Ci1,_i1,nU,Jn1="AI_InvalidPromptError",Wn1,Qu8,vi1,bi1,BQ,Kn1="AI_InvalidResponseDataError",Nn1,Ju8,fi1,xi1,jf,Hn1="AI_JSONParseError",Fn1,Wu8,yi1,gi1,CN,Un1="AI_LoadAPIKeyError",wn1,Ku8,hi1,ui1,pD,On1="AI_LoadSettingError",Bn1,Nu8,ci1,li1,Dn1,Ln1="AI_NoContentGeneratedError",En1,Hu8,di1,mi1,zn1,jn1="AI_NoSuchModelError",Pn1,Fu8,ii1,ni1,R5,An1="AI_TooManyEmbeddingValuesForCallError",Tn1,Uu8,pi1,ti1,Pf,Rn1="AI_TypeValidationError",In1,wu8,oi1,ri1,e6,qn1="AI_UnsupportedFunctionalityError",Mn1,Ou8,ai1,si1,T4;var o1=B(()=>{Zu8=Symbol.for(ei1),Q1=class $ extends(qi1=Error,Ii1=Zu8,qi1){constructor({name:Z,message:X,cause:G}){super(X);this[Ii1]=!0,this.name=Z,this.cause=G}static isInstance(Z){return $.hasMarker(Z,ei1)}static hasMarker(Z,X){let G=Symbol.for(X);return Z!=null&&typeof Z==="object"&&G in Z&&typeof Z[G]==="boolean"&&Z[G]===!0}},Zn1=`vercel.ai.error.${$n1}`,Xu8=Symbol.for(Zn1),a8=class extends(ki1=Q1,Mi1=Xu8,ki1){constructor({message:$,url:Z,requestBodyValues:X,statusCode:G,responseHeaders:Y,responseBody:Q,cause:J,isRetryable:W=G!=null&&(G===408||G===409||G===429||G>=500),data:K}){super({name:$n1,message:$,cause:J});this[Mi1]=!0,this.url=Z,this.requestBodyValues=X,this.statusCode=G,this.responseHeaders=Y,this.responseBody=Q,this.isRetryable=W,this.data=K}static isInstance($){return Q1.hasMarker($,Zn1)}},Gn1=`vercel.ai.error.${Xn1}`,Gu8=Symbol.for(Gn1),c40=class extends(Vi1=Q1,Si1=Gu8,Vi1){constructor({message:$="Empty response body"}={}){super({name:Xn1,message:$});this[Si1]=!0}static isInstance($){return Q1.hasMarker($,Gn1)}};Qn1=`vercel.ai.error.${Yn1}`,Yu8=Symbol.for(Qn1),nU=class extends(_i1=Q1,Ci1=Yu8,_i1){constructor({message:$,cause:Z,argument:X}){super({name:Yn1,message:$,cause:Z});this[Ci1]=!0,this.argument=X}static isInstance($){return Q1.hasMarker($,Qn1)}},Wn1=`vercel.ai.error.${Jn1}`,Qu8=Symbol.for(Wn1),BQ=class extends(bi1=Q1,vi1=Qu8,bi1){constructor({prompt:$,message:Z,cause:X}){super({name:Jn1,message:`Invalid prompt: ${Z}`,cause:X});this[vi1]=!0,this.prompt=$}static isInstance($){return Q1.hasMarker($,Wn1)}},Nn1=`vercel.ai.error.${Kn1}`,Ju8=Symbol.for(Nn1),jf=class extends(xi1=Q1,fi1=Ju8,xi1){constructor({data:$,message:Z=`Invalid response data: ${JSON.stringify($)}.`}){super({name:Kn1,message:Z});this[fi1]=!0,this.data=$}static isInstance($){return Q1.hasMarker($,Nn1)}},Fn1=`vercel.ai.error.${Hn1}`,Wu8=Symbol.for(Fn1),CN=class extends(gi1=Q1,yi1=Wu8,gi1){constructor({text:$,cause:Z}){super({name:Hn1,message:`JSON parsing failed: Text: ${$}.
|
|
1039
|
+
</organization-filesystem>`}var cU=B(()=>{iD();dy0()});function my0($){let Z=new Map;for(let G of $){let Y=Z.get(G.message_id);if(Y)Y.push(G);else Z.set(G.message_id,[G])}let X=[];for(let[G,Y]of Z){let Q=[...Y].sort((W,K)=>W.seq-K.seq),J=Q[0];X.push({id:G,role:J.role,parts:Q.filter((W)=>W.kind!=="finish").map((W)=>W.payload&&typeof W.payload==="object"&&!Array.isArray(W.payload)?{...W.payload,created_at:W.created_at}:W.payload),created_at:J.created_at,status:Q.some((W)=>W.kind==="finish")?"complete":"in_progress",metadata:Q.find((W)=>W.kind==="finish")?.metadata??null})}return X.sort((G,Y)=>G.created_at<Y.created_at?-1:G.created_at>Y.created_at?1:0),X}function ih8($,Z){let X=0,G=0,Y=[$];while(Y.length>0){if(X>Z||++G>dh8)return 1/0;let Q=Y.pop();if(typeof Q==="string")X+=Q.length;else if(Array.isArray(Q))for(let J of Q)Y.push(J);else if(Q!==null&&typeof Q==="object")for(let J of Object.values(Q))Y.push(J)}return X}function th8($){return $.replace(nh8,"").replace(ph8,"\uFFFD")}function Oi1($){if(ih8($,wi1)>wi1)return JSON.stringify({truncated:!0,reason:"payload exceeds max stored size"});return JSON.stringify($,(Z,X)=>typeof X==="string"?th8(X):X)}class iy0{db;constructor($){this.db=$}async serializeParts($){let Z=new Set,X=[],G=new Map;for(let Y=0;Y<$.length;Y++){let Q=$[Y];if(Z.has(Q.id))continue;if(Z.add(Q.id),G.set(Q.id,Q),X.push({id:Q.id,seq:Q.seq,org_id:Q.org_id,thread_id:Q.thread_id,run_id:Q.run_id,message_id:Q.message_id,role:Q.role,kind:Q.kind,payload:Oi1(Q.payload),payload_ref:Q.payload_ref??null,metadata:Q.metadata!=null?Oi1(Q.metadata):null,created_at:Q.created_at}),(Y+1)%mh8===0)await a$(0)}return{rows:X,partsById:G}}async appendParts($){if($.length===0)return[];let{rows:Z,partsById:X}=await this.serializeParts($);return(await this.db.insertInto("thread_message_parts").values(Z).onConflict((Y)=>Y.column("id").doNothing()).returning("id").execute()).map((Y)=>X.get(Y.id)).filter((Y)=>Y!==void 0)}async replaceMessageParts($,Z,X){let{rows:G}=await this.serializeParts(X);return await this.db.transaction().execute(async(Y)=>{let Q=await Y.selectFrom("thread_message_parts").select((K)=>K.fn.min("created_at").as("created_at")).where("thread_id","=",$).where("message_id","=",Z).executeTakeFirst(),J=Q?.created_at!=null?new Date(Q.created_at).getTime():null,W=J!=null&&Number.isFinite(J)?G.map((K)=>({...K,created_at:new Date(J+K.seq).toISOString()})):G;if(await Y.deleteFrom("thread_message_parts").where("thread_id","=",$).where("message_id","=",Z).execute(),W.length>0)await Y.insertInto("thread_message_parts").values(W).onConflict((K)=>K.column("id").doUpdateSet((N)=>({seq:N.ref("excluded.seq"),role:N.ref("excluded.role"),kind:N.ref("excluded.kind"),payload:N.ref("excluded.payload"),payload_ref:N.ref("excluded.payload_ref"),metadata:N.ref("excluded.metadata"),created_at:N.ref("excluded.created_at")}))).execute()}),X}async deleteMessageParts($,Z){await this.db.deleteFrom("thread_message_parts").where("thread_id","=",$).where("message_id","=",Z).execute()}async maxCreatedAtMsForRun($){let Z=await this.db.selectFrom("thread_message_parts").select((G)=>G.fn.max("created_at").as("max")).where("run_id","=",$).executeTakeFirst();if(!Z?.max)return null;let X=new Date(Z.max).getTime();return Number.isFinite(X)?X:null}async maxCreatedAtMsForMessage($,Z){let X=await this.db.selectFrom("thread_message_parts").select((Y)=>Y.fn.max("created_at").as("max")).where("run_id","=",$).where("message_id","=",Z).executeTakeFirst();if(!X?.max)return null;let G=new Date(X.max).getTime();return Number.isFinite(G)?G:null}async loadWindow($,Z){let X=await this.db.selectFrom("thread_message_parts").select(["message_id"]).where("thread_id","=",$).where("kind","=","finish").orderBy("created_at","desc").orderBy("id","desc").limit(Z.limit).offset(Z.offset??0).execute(),G=await this.db.selectFrom("thread_message_parts").select((K)=>K.fn.count("id").as("count")).where("thread_id","=",$).where("kind","=","finish").executeTakeFirst(),Y=Number(G?.count??0),Q=Z.includeInFlight&&(Z.offset??0)===0?await this.db.selectFrom("thread_message_parts as p").select("p.message_id").distinct().where("p.thread_id","=",$).where((K)=>K.not(K.exists(K.selectFrom("thread_message_parts as f").select("f.id").whereRef("f.message_id","=","p.message_id").where("f.thread_id","=",$).where("f.kind","=","finish")))).execute():[],J=[...X.map((K)=>K.message_id),...Q.map((K)=>K.message_id)];if(J.length===0)return{messages:[],total:Y};let W=await this.db.selectFrom("thread_message_parts").selectAll().where("thread_id","=",$).where("message_id","in",J).orderBy("seq","asc").execute();return{messages:my0(W),total:Y}}async backfillFromMessages($,Z){let X=[],G=0;for(let Y of $)X.push({id:`${Z.runId}:${Y.id}:content`,seq:G++,org_id:Z.orgId,thread_id:Z.threadId,run_id:Z.runId,message_id:Y.id,role:Y.role,kind:"text",payload:Y.parts,payload_ref:null,metadata:Y.metadata??null,created_at:Y.created_at}),X.push({id:`${Z.runId}:${Y.id}:finish`,seq:G++,org_id:Z.orgId,thread_id:Z.threadId,run_id:Z.runId,message_id:Y.id,role:Y.role,kind:"finish",payload:{},payload_ref:null,metadata:null,created_at:Y.created_at});await this.appendParts(X)}}var wi1=50000000,dh8=1e5,mh8=25,nh8,ph8;var Bi1=B(()=>{J5();nh8=/\u0000/g,ph8=/[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?<![\uD800-\uDBFF])[\uDC00-\uDFFF]/g});import{sql as Bf}from"kysely";function nD($){return typeof $==="string"?$:$.toISOString()}function Di1($){return $.replace(/[\\%_]/g,"\\$&")}class ny0{inner;organizationId;constructor($,Z){this.inner=$;this.organizationId=Z}requireOrg(){if(!this.organizationId)throw Error("OrgScopedThreadStorage: thread operations require an authenticated organization");return this.organizationId}setOrganizationId($){this.organizationId=$}getOrganizationId(){return this.organizationId}create($){let Z=this.requireOrg();return this.inner.create({...$,organization_id:Z})}get($){return this.inner.get($,this.requireOrg())}update($,Z){return this.inner.update($,this.requireOrg(),Z)}pinRuntimeIfUnset($,Z){return this.inner.pinRuntimeIfUnset($,this.requireOrg(),Z)}completeRunIfNotCompleted($){return this.inner.completeRunIfNotCompleted($,this.requireOrg())}markRunFailed($,Z,X){return this.inner.markRunFailed($,this.requireOrg(),Z,X)}requiresActionIfInProgress($){return this.inner.requiresActionIfInProgress($,this.requireOrg())}forceFailIfInProgress($,Z){return this.inner.forceFailIfInProgress($,this.requireOrg(),Z)}delete($){return this.inner.delete($,this.requireOrg())}list($,Z){return this.inner.list(this.requireOrg(),$,Z)}listByTriggerIds($,Z){return this.inner.listByTriggerIds(this.requireOrg(),$,Z)}findLastUsedByVirtualMcpIds($){return this.inner.findLastUsedByVirtualMcpIds(this.requireOrg(),$)}bumpProgress($){return this.inner.bumpProgress($,this.requireOrg())}getProgress($){return this.inner.getProgress($,this.requireOrg())}listMessages($,Z){return this.inner.listMessages($,this.requireOrg(),Z)}listWithLastMessage($){return this.inner.listWithLastMessage(this.requireOrg(),$)}messageParts(){return this.inner.messageParts()}getRunFence($){return this.inner.getRunFence($)}setRunFence($,Z){return this.inner.setRunFence($,Z)}setCancelRequested($,Z){return this.inner.setCancelRequested($,Z)}getCancelRequestedAt($){return this.inner.getCancelRequestedAt($)}clearCancelRequested($){return this.inner.clearCancelRequested($)}bumpAckedSeq($,Z,X){return this.inner.bumpAckedSeq($,this.requireOrg(),Z,X)}getAckedSeq($){return this.inner.getAckedSeq($,this.requireOrg())}}class Df{db;constructor($){this.db=$}messageParts(){return new iy0(this.db)}async create($){let Z=$.id??c8("thrd"),X=new Date().toISOString();if(!$.organization_id)throw Error("organization_id is required");if(!$.created_by)throw Error("created_by is required");if(!$.title)$.title=uU;let G={id:Z,organization_id:$.organization_id,title:$.title,description:$.description??null,status:$.status??"completed",trigger_id:$.trigger_id??null,virtual_mcp_id:$.virtual_mcp_id??"",branch:$.branch??null,sandbox_provider_kind:$.sandbox_provider_kind??null,harness_id:$.harness_id??null,created_at:X,updated_at:X,created_by:$.created_by,updated_by:$.updated_by??null,...$.message_storage_version!==void 0?{message_storage_version:$.message_storage_version}:{},...$.metadata!==void 0?{metadata:JSON.stringify($.metadata)}:{}},Y=await this.db.insertInto("threads").values(G).onConflict((J)=>J.column("id").doNothing()).returningAll().executeTakeFirst();if(Y)return{...this.threadFromDbRow(Y),isNew:!0};let Q=await this.db.selectFrom("threads").selectAll().where("id","=",Z).where("organization_id","=",$.organization_id).executeTakeFirstOrThrow();return{...this.threadFromDbRow(Q),isNew:!1}}async get($,Z){let X=await this.db.selectFrom("threads").selectAll().where("id","=",$).where("organization_id","=",Z).executeTakeFirst();return X?this.threadFromDbRow(X):null}async update($,Z,X){let Y={updated_at:new Date().toISOString()};if(X.title!==void 0)Y.title=X.title;if(X.description!==void 0)Y.description=X.description;if(X.updated_by!==void 0)Y.updated_by=X.updated_by;if(X.hidden!==void 0)Y.hidden=X.hidden;if(X.status!==void 0)Y.status=X.status;if(X.context_start_message_id!==void 0)Y.context_start_message_id=X.context_start_message_id;if(X.run_owner_pod!==void 0)Y.run_owner_pod=X.run_owner_pod;if(X.run_config!==void 0)Y.run_config=X.run_config?JSON.stringify(X.run_config):null;if(X.run_started_at!==void 0)Y.run_started_at=X.run_started_at;if(X.last_progress_at!==void 0)Y.last_progress_at=X.last_progress_at;if(X.failure_reason!==void 0)Y.failure_reason=X.failure_reason;if(X.failure_kind!==void 0)Y.failure_kind=X.failure_kind;if(X.metadata!==void 0)Y.metadata=JSON.stringify(X.metadata);if(X.branch!==void 0)Y.branch=X.branch;if(X.virtual_mcp_id!==void 0)Y.virtual_mcp_id=X.virtual_mcp_id;if(X.sandbox_provider_kind!==void 0)Y.sandbox_provider_kind=X.sandbox_provider_kind;if(X.harness_id!==void 0)Y.harness_id=X.harness_id;if(X.message_storage_version!==void 0)Y.message_storage_version=X.message_storage_version;await this.db.updateTable("threads").set(Y).where("id","=",$).where("organization_id","=",Z).execute();let Q=await this.get($,Z);if(!Q)throw Error("Thread not found after update");return Q}async pinRuntimeIfUnset($,Z,X){let G=await this.db.updateTable("threads").set({harness_id:X.harnessId,sandbox_provider_kind:Bf`coalesce(${Bf.ref("sandbox_provider_kind")}, ${X.sandboxProviderKind})`,branch:Bf`coalesce(${Bf.ref("branch")}, ${X.branch})`,updated_at:new Date().toISOString(),...X.messageStorageVersion!==void 0?{message_storage_version:X.messageStorageVersion}:{}}).where("id","=",$).where("organization_id","=",Z).where("harness_id","is",null).where((Y)=>X.sandboxProviderKind===null?Y("sandbox_provider_kind","is",null):Y.or([Y("sandbox_provider_kind","is",null),Y("sandbox_provider_kind","=",X.sandboxProviderKind)])).returningAll().executeTakeFirst();if(G)return{thread:this.threadFromDbRow(G),claimed:!0};return{thread:await this.get($,Z),claimed:!1}}async completeRunIfNotCompleted($,Z){let G=(await this.db.updateTable("threads").set({status:"completed",run_owner_pod:null,run_config:null,run_started_at:null,updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).where("status","=","in_progress").returningAll().execute())[0];return G?this.threadFromDbRow(G):null}async markRunFailed($,Z,X,G){let Q=(await this.db.updateTable("threads").set({status:"failed",failure_reason:X,failure_kind:G,run_owner_pod:null,run_config:null,run_started_at:null,updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).where("status","=","in_progress").returningAll().execute())[0];return Q?this.threadFromDbRow(Q):null}async requiresActionIfInProgress($,Z){let G=(await this.db.updateTable("threads").set({status:"requires_action",run_config:null,run_started_at:null,updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).where("status","=","in_progress").returningAll().execute())[0];return G?this.threadFromDbRow(G):null}async forceFailIfInProgress($,Z,X){let G=new Date().toISOString(),Y=this.db.updateTable("threads").set({status:"failed",updated_at:G}).where("id","=",$).where("organization_id","=",Z).where("status","=","in_progress");if(X!=null)Y=Y.where("run_fence_token","=",X);return((await Y.executeTakeFirst()).numUpdatedRows??BigInt(0))>BigInt(0)}async delete($,Z){await this.db.deleteFrom("threads").where("id","=",$).where("organization_id","=",Z).execute()}async list($,Z,X){let G=X?.includeArchived===!0,Y=this.db.selectFrom("threads").selectAll().where("organization_id","=",$).where("hidden","=",G).orderBy("updated_at","desc");if(Z)Y=Y.where("created_by","=",Z);let Q=X?.virtualMcpId??X?.agentId;if(Q)Y=Y.where("virtual_mcp_id","=",Q);if(X?.hasTrigger===!0)Y=Y.where("trigger_id","is not",null);else if(X?.hasTrigger===!1)Y=Y.where("trigger_id","is",null);if(X?.startDate)Y=Y.where("updated_at",">=",X.startDate);if(X?.endDate)Y=Y.where("updated_at","<=",X.endDate);if(X?.search)Y=Y.where("title","ilike",`%${Di1(X.search)}%`);if(X?.status)Y=Y.where("status","=",X.status);let J=this.db.selectFrom("threads").select((N)=>N.fn.count("id").as("count")).where("organization_id","=",$).where("hidden","=",G);if(Z)J=J.where("created_by","=",Z);if(Q)J=J.where("virtual_mcp_id","=",Q);if(X?.hasTrigger===!0)J=J.where("trigger_id","is not",null);else if(X?.hasTrigger===!1)J=J.where("trigger_id","is",null);if(X?.startDate)J=J.where("updated_at",">=",X.startDate);if(X?.endDate)J=J.where("updated_at","<=",X.endDate);if(X?.search)J=J.where("title","ilike",`%${Di1(X.search)}%`);if(X?.status)J=J.where("status","=",X.status);if(X?.limit)Y=Y.limit(X.limit);if(X?.offset)Y=Y.offset(X.offset);let[W,K]=await Promise.all([Y.execute(),J.executeTakeFirst()]);return{threads:W.map((N)=>this.threadFromDbRow(N)),total:Number(K?.count||0)}}async listByTriggerIds($,Z,X){if(Z.length===0)return{threads:[],total:0};let G=this.db.selectFrom("threads").selectAll().where("organization_id","=",$).where("hidden","=",!1).where("trigger_id","in",Z).orderBy("updated_at","desc"),Y=this.db.selectFrom("threads").select((W)=>W.fn.count("id").as("count")).where("organization_id","=",$).where("hidden","=",!1).where("trigger_id","in",Z);if(X?.limit)G=G.limit(X.limit);if(X?.offset)G=G.offset(X.offset);let[Q,J]=await Promise.all([G.execute(),Y.executeTakeFirst()]);return{threads:Q.map((W)=>this.threadFromDbRow(W)),total:Number(J?.count||0)}}async findLastUsedByVirtualMcpIds($,Z){let X=new Map;if(Z.length===0)return X;let G=await this.db.selectFrom("threads").distinctOn("virtual_mcp_id").select(["virtual_mcp_id","created_by","created_at"]).where("organization_id","=",$).where("virtual_mcp_id","in",Z).orderBy("virtual_mcp_id").orderBy("created_at","desc").execute();for(let Y of G)X.set(Y.virtual_mcp_id,{last_used_at:nD(Y.created_at),last_used_by:Y.created_by});return X}async listWithLastMessage($,Z){let X=this.db.selectFrom("threads as t").innerJoinLateral((Y)=>Y.selectFrom("thread_messages as m").selectAll().whereRef("m.thread_id","=","t.id").orderBy("m.created_at","desc").orderBy("m.id","desc").limit(1).as("lm"),(Y)=>Y.onTrue()).selectAll("t").select(["lm.id as lm_id","lm.thread_id as lm_thread_id","lm.metadata as lm_metadata","lm.parts as lm_parts","lm.role as lm_role","lm.created_at as lm_created_at","lm.updated_at as lm_updated_at"]).where("t.organization_id","=",$).where("t.hidden","=",!1).where("lm.role","=",Z.lastMessageRole).orderBy("lm.created_at","desc").limit(Z.limit);if(Z.createdBy)X=X.where("t.created_by","=",Z.createdBy);return(await X.execute()).map((Y)=>({thread:this.threadFromDbRow(Y),lastMessage:this.messageFromDbRow({id:Y.lm_id,thread_id:Y.lm_thread_id,metadata:Y.lm_metadata,parts:Y.lm_parts,role:Y.lm_role,created_at:Y.lm_created_at,updated_at:Y.lm_updated_at})}))}async listMessages($,Z,X){if(!await this.get($,Z))return{messages:[],total:0};let Y=X?.sort??"asc",Q=this.db.selectFrom("thread_messages").selectAll().where("thread_id","=",$).orderBy("created_at",Y).orderBy("id",Y),J=this.db.selectFrom("thread_messages").select((N)=>N.fn.count("id").as("count")).where("thread_id","=",$);if(X?.limit)Q=Q.limit(X.limit);if(X?.offset)Q=Q.offset(X.offset);let[W,K]=await Promise.all([Q.execute(),J.executeTakeFirst()]);return{messages:W.map((N)=>this.messageFromDbRow(N)),total:Number(K?.count||0)}}async bumpProgress($,Z){await this.db.updateTable("threads").set({last_progress_at:Bf`now()`}).where("id","=",$).where("organization_id","=",Z).execute()}async getProgress($,Z){let X=await this.db.selectFrom("threads").select(["last_progress_at","run_started_at"]).where("id","=",$).where("organization_id","=",Z).executeTakeFirst();if(!X)return null;let G=(Y)=>{if(Y==null)return null;let Q=(Y instanceof Date?Y:new Date(Y)).getTime();return Number.isNaN(Q)?null:Q};return{lastProgressAt:G(X.last_progress_at),runStartedAt:G(X.run_started_at)}}async getRunFence($){return(await this.db.selectFrom("threads").select("run_fence_token").where("id","=",$).executeTakeFirst())?.run_fence_token??null}async setRunFence($,Z){await this.db.updateTable("threads").set(Z===null?{run_fence_token:null,run_acked_seq:null}:{run_fence_token:Z,run_acked_seq:null,status:"in_progress"}).where("id","=",$).execute()}async setCancelRequested($,Z){await this.db.updateTable("threads").set({cancel_requested_at:Bf`now()`}).where("id","=",$).where("organization_id","=",Z).execute()}async getCancelRequestedAt($){let X=(await this.db.selectFrom("threads").select("cancel_requested_at").where("id","=",$).executeTakeFirst())?.cancel_requested_at;if(X==null)return null;return X instanceof Date?X:new Date(X)}async clearCancelRequested($){await this.db.updateTable("threads").set({cancel_requested_at:null}).where("id","=",$).execute()}async bumpAckedSeq($,Z,X,G){await this.db.updateTable("threads").set({run_acked_seq:G}).where("id","=",$).where("organization_id","=",Z).where((Y)=>Y.or([Y("run_acked_seq","is",null),Y("run_acked_seq","<",G)])).execute()}async getAckedSeq($,Z){return(await this.db.selectFrom("threads").select("run_acked_seq").where("id","=",$).where("organization_id","=",Z).executeTakeFirst())?.run_acked_seq??0}threadFromDbRow($){let Z={};if($.metadata!=null)if(typeof $.metadata==="string")try{Z=JSON.parse($.metadata)}catch(X){console.error(`Failed to parse metadata for thread ${$.id}:`,$.metadata,X)}else Z=$.metadata;return{id:$.id,organization_id:$.organization_id,title:$.title,description:$.description,status:$.status,trigger_id:$.trigger_id??null,context_start_message_id:$.context_start_message_id??null,run_owner_pod:$.run_owner_pod??null,run_config:$.run_config??null,run_started_at:$.run_started_at?nD($.run_started_at):null,last_progress_at:$.last_progress_at?nD($.last_progress_at):null,virtual_mcp_id:$.virtual_mcp_id??"",branch:$.branch??null,sandbox_provider_kind:$.sandbox_provider_kind??null,harness_id:$.harness_id??null,metadata:Z,created_at:nD($.created_at),updated_at:nD($.updated_at),created_by:$.created_by,updated_by:$.updated_by??void 0,hidden:!!$.hidden,message_storage_version:$.message_storage_version??1,link_transport:$.link_transport??null}}messageFromDbRow($){let Z,X;try{Z=$.metadata?JSON.parse($.metadata):void 0}catch(G){console.error(`Failed to parse metadata for message ${$.id}:`,$.metadata,G),Z=void 0}try{X=typeof $.parts==="string"?JSON.parse($.parts):$.parts}catch(G){console.error(`Failed to parse parts for message ${$.id}:`,$.parts,G),X=[]}return{id:$.id,thread_id:$.thread_id,metadata:Z,parts:X,role:$.role,created_at:nD($.created_at),updated_at:nD($.updated_at)}}}var py0=B(()=>{DX();cU();Bi1()});import{sql as ty0}from"kysely";function v40($){if($==null)return null;return typeof $==="string"?$:$.toISOString()}function b40($){return`msg_async_stub_${$}`}async function oy0($,Z){await $.deleteFrom("thread_messages").where("id","=",b40(Z)).execute(),await $.deleteFrom("thread_message_parts").where("message_id","=",b40(Z)).execute()}function oh8($){if($==null)return null;if(typeof $!=="string")return $;try{return JSON.parse($)}catch{return null}}function ry0($){return{id:$.id,interactionId:$.interaction_id??null,toolCallId:$.tool_call_id,organizationId:$.organization_id,threadId:$.thread_id,messageId:$.message_id??null,provider:$.provider,modelId:$.model_id,query:$.query,status:$.status,attempts:$.attempts??0,lastPolledAt:v40($.last_polled_at),lastError:$.last_error??null,inputTokens:$.input_tokens??null,outputTokens:$.output_tokens??null,citations:oh8($.citations),resultUri:$.result_uri??null,resultPreview:$.result_preview??null,resultContent:$.result_content??null,createdAt:v40($.created_at)??"",updatedAt:v40($.updated_at)??"",completedAt:v40($.completed_at)}}class ay0{inner;organizationId;constructor($,Z){this.inner=$;this.organizationId=Z}requireOrg(){if(!this.organizationId)throw Error("OrgScopedAsyncResearchJobStorage: requires an authenticated organization");return this.organizationId}setOrganizationId($){this.organizationId=$}upsertPending($){return this.inner.upsertPending({organizationId:this.requireOrg(),...$})}findByToolCall($){return this.inner.findByToolCall(this.requireOrg(),$)}markPolling($,Z,X){return this.inner.markPolling(this.requireOrg(),$,Z,X)}recordPoll($,Z){return this.inner.recordPoll(this.requireOrg(),$,Z)}markCompleted($,Z){return this.inner.markCompleted(this.requireOrg(),$,Z)}markFailed($,Z){return this.inner.markFailed(this.requireOrg(),$,Z)}markCancelled($,Z){return this.inner.markCancelled(this.requireOrg(),$,Z)}}class ld{db;constructor($){this.db=$}async upsertPending($){let Z=new Date().toISOString(),X=await this.db.insertInto("async_research_jobs").values({organization_id:$.organizationId,thread_id:$.threadId,tool_call_id:$.toolCallId,message_id:$.messageId??null,provider:$.provider,model_id:$.modelId,query:$.query,status:"pending",attempts:0,updated_at:Z}).onConflict((Y)=>Y.columns(["organization_id","tool_call_id"]).doNothing()).returningAll().executeTakeFirst();if(X)return ry0(X);let G=await this.db.selectFrom("async_research_jobs").selectAll().where("organization_id","=",$.organizationId).where("tool_call_id","=",$.toolCallId).executeTakeFirstOrThrow();return ry0(G)}async findByToolCall($,Z){let X=await this.db.selectFrom("async_research_jobs").selectAll().where("organization_id","=",$).where("tool_call_id","=",Z).executeTakeFirst();return X?ry0(X):null}async markPolling($,Z,X,G){let Y=new Date().toISOString();await this.db.transaction().execute(async(Q)=>{if(await Q.updateTable("async_research_jobs").set({status:"polling",interaction_id:X,last_polled_at:Y,updated_at:Y}).where("organization_id","=",$).where("tool_call_id","=",Z).execute(),(await Q.selectFrom("threads").select("message_storage_version").where("id","=",G.threadId).where("organization_id","=",$).executeTakeFirst())?.message_storage_version!==2)return;let W=b40(Z);await Q.insertInto("thread_message_parts").values([{id:`${G.threadId}:${W}:0`,seq:0,org_id:$,thread_id:G.threadId,run_id:G.threadId,message_id:W,role:"assistant",kind:"tool_call",payload:JSON.stringify({type:`tool-${G.toolName}`,toolCallId:Z,state:"input-available",input:{query:G.query}}),payload_ref:null,metadata:null,created_at:Y},{id:`${G.threadId}:${W}:finish`,seq:1,org_id:$,thread_id:G.threadId,run_id:G.threadId,message_id:W,role:"assistant",kind:"finish",payload:JSON.stringify({}),payload_ref:null,metadata:null,created_at:Y}]).onConflict((K)=>K.column("id").doNothing()).execute()})}async recordPoll($,Z,X){let G=new Date().toISOString();await this.db.updateTable("async_research_jobs").set({attempts:ty0`attempts + 1`,last_polled_at:G,...X!==void 0?{last_error:X}:{},updated_at:G}).where("organization_id","=",$).where("tool_call_id","=",Z).execute()}async markCompleted($,Z,X){let G=new Date().toISOString();await this.db.transaction().execute(async(Y)=>{await Y.updateTable("async_research_jobs").set({status:"completed",input_tokens:X.inputTokens,output_tokens:X.outputTokens,citations:JSON.stringify(X.citations),result_uri:X.resultUri,result_preview:X.resultPreview,result_content:X.resultContent,completed_at:G,updated_at:G}).where("organization_id","=",$).where("tool_call_id","=",Z).execute(),await oy0(Y,Z)})}async markFailed($,Z,X){let G=new Date().toISOString();await this.db.transaction().execute(async(Y)=>{await Y.updateTable("async_research_jobs").set({status:"failed",last_error:X,completed_at:G,updated_at:G}).where("organization_id","=",$).where("tool_call_id","=",Z).execute(),await oy0(Y,Z)})}async markCancelled($,Z,X){let G=new Date().toISOString();await this.db.transaction().execute(async(Y)=>{await Y.updateTable("async_research_jobs").set({status:"cancelled",last_error:X??null,completed_at:G,updated_at:G}).where("organization_id","=",$).where("tool_call_id","=",Z).execute(),await oy0(Y,Z)})}async sweepAbandoned($){let Z=new Date(Date.now()-$).toISOString(),X=new Date().toISOString();return await this.db.transaction().execute(async(G)=>{let Y=await G.updateTable("async_research_jobs").set({status:"abandoned",completed_at:X,updated_at:X,last_error:ty0`COALESCE(last_error, '') || ' [abandoned by sweeper]'`}).where("status","in",["pending","polling"]).where(ty0`COALESCE(last_polled_at, created_at) < ${Z}::timestamptz`).returning(["tool_call_id"]).execute();if(Y.length===0)return 0;let Q=Y.map((J)=>b40(J.tool_call_id));return await G.deleteFrom("thread_messages").where("id","in",Q).execute(),await G.deleteFrom("thread_message_parts").where("message_id","in",Q).execute(),Y.length})}}var sy0=()=>{};function f40(){let $=new Map;function Z(G,Y){let Q=$.get(Y);if(Q)return Q;let J=new P9({name:`outbound-client-${Y}`,version:"1.0.0"},{capabilities:{tasks:{list:{},cancel:{},requests:{tool:{call:{}}}}},jsonSchemaValidator:a6});J.onclose=()=>{$.delete(Y)};let W=J.connect(G).then(()=>J).catch((K)=>{throw $.delete(Y),K});return $.set(Y,W),W}return Object.assign(Z,{[Symbol.asyncDispose]:async()=>{let G=[];for(let[Y,Q]of $)G.push(Q.then((J)=>J.close()).catch(()=>{}));await Promise.all(G),$.clear()}})}var ey0=B(()=>{YW();PX()});class $g0{db;vault;constructor($,Z){this.db=$;this.vault=Z}async get($){let Z=await this.db.selectFrom("subsidized_gateway_keys").select("encrypted_key").where("organization_id","=",$).executeTakeFirst();if(!Z)return null;return await this.vault.decrypt(Z.encrypted_key)}async put($,Z){let X=await this.vault.encrypt(Z);await this.db.insertInto("subsidized_gateway_keys").values({organization_id:$,encrypted_key:X}).onConflict((G)=>G.column("organization_id").doUpdateSet({encrypted_key:X})).execute()}}import{sql as rh8}from"kysely";function Li1($){return $ instanceof Date?$.toISOString():String($)}class Zg0{db;vault;constructor($,Z){this.db=$;this.vault=Z}rowToInfo($){return{id:$.id,organizationId:$.organization_id,scope:$.scope,userId:$.user_id,name:$.name,description:$.description,createdBy:$.created_by,createdAt:Li1($.created_at),updatedBy:$.updated_by,updatedAt:Li1($.updated_at)}}assertVisible($,Z){if($.scope==="user"&&$.user_id!==Z)throw new lU($.id)}async create($){let Z=c8("sec"),X=await this.vault.encrypt($.value),G=new Date,Y=await this.db.insertInto("secrets").values({id:Z,organization_id:$.organizationId,scope:$.scope.kind,user_id:$.scope.kind==="user"?$.scope.userId:null,name:$.name,encrypted_value:X,description:$.description??null,created_by:$.createdBy,created_at:G,updated_by:$.createdBy,updated_at:G}).returning(x40).executeTakeFirstOrThrow();return this.rowToInfo(Y)}async update($){let Z=await this.db.selectFrom("secrets").where("id","=",$.id).where("organization_id","=",$.organizationId).select(["id","scope","user_id"]).executeTakeFirst();if(!Z)throw new wQ($.id);this.assertVisible(Z,$.callerUserId);let X={updated_by:$.updatedBy,updated_at:new Date};if($.value!==void 0)X.encrypted_value=await this.vault.encrypt($.value);if($.description!==void 0)X.description=$.description;let G=await this.db.updateTable("secrets").set(X).where("id","=",$.id).where("organization_id","=",$.organizationId).returning(x40).executeTakeFirstOrThrow();return this.rowToInfo(G)}async delete($,Z,X){let G=await this.db.selectFrom("secrets").where("id","=",$).where("organization_id","=",Z).select(["id","scope","user_id"]).executeTakeFirst();if(!G)throw new wQ($);this.assertVisible(G,X),await this.db.deleteFrom("secrets").where("id","=",$).where("organization_id","=",Z).execute()}async list($){let Z=this.db.selectFrom("secrets").where("organization_id","=",$.organizationId).select(x40);if($.scope?.kind==="user")Z=Z.where("scope","=","user").where("user_id","=",$.scope.userId);else if($.scope?.kind==="organization")Z=Z.where("scope","=","organization");else Z=Z.where((G)=>G.or([G("scope","=","organization"),G.and([G("scope","=","user"),G("user_id","=",$.callerUserId)])]));return(await Z.orderBy("created_at","desc").execute()).map((G)=>this.rowToInfo(G))}async findById($,Z,X){let G=await this.db.selectFrom("secrets").where("id","=",$).where("organization_id","=",Z).select(x40).executeTakeFirst();if(!G)throw new wQ($);return this.assertVisible(G,X),this.rowToInfo(G)}async resolveById($,Z,X){let G=await this.db.selectFrom("secrets").where("id","=",$).where("organization_id","=",Z).selectAll().executeTakeFirst();if(!G)throw new wQ($);this.assertVisible(G,X);let Y=await this.vault.decrypt(G.encrypted_value);return{info:this.rowToInfo(G),value:Y}}async resolveByName($){let Z=this.db.selectFrom("secrets").where("organization_id","=",$.organizationId).where("scope","=",$.scope.kind).where(rh8`lower(name) = lower(${$.name})`).selectAll();if($.scope.kind==="user")Z=Z.where("user_id","=",$.scope.userId);let X=await Z.executeTakeFirst();if(!X)throw new wQ(`${$.scope.kind}:${$.name}`);let G=await this.vault.decrypt(X.encrypted_value);return{info:this.rowToInfo(X),value:G}}}var x40,wQ,lU;var dd=B(()=>{DX();x40=["id","organization_id","scope","user_id","name","description","created_by","created_at","updated_by","updated_at"];wQ=class wQ extends Error{constructor($){super(`Secret ${$} not found`);this.name="SecretNotFoundError"}};lU=class lU extends Error{constructor($){super(`Access denied for secret ${$}`);this.name="SecretAccessDeniedError"}}});import{sql as ah8}from"kysely";function Ei1($){return $ instanceof Date?$.toISOString():String($)}class Xg0{db;vault;constructor($,Z){this.db=$;this.vault=Z}rowToInfo($){return{id:$.id,organizationId:$.organization_id,name:$.name,description:$.description,bucket:$.bucket,region:$.region,endpoint:$.endpoint,forcePathStyle:$.force_path_style,prefix:$.prefix,publicUrlBase:$.public_url_base,credentialType:$.credential_type??"static",refreshUrl:$.refresh_url,siteSlug:$.site_slug,createdBy:$.created_by,createdAt:Ei1($.created_at),updatedBy:$.updated_by,updatedAt:Ei1($.updated_at)}}async create($){let Z=c8("fcfg"),X=await this.vault.encrypt(JSON.stringify($.credentials)),G=new Date,Y=await this.db.insertInto("org_file_configs").values({id:Z,organization_id:$.organizationId,name:$.name,description:$.description??null,bucket:$.bucket,region:$.region,endpoint:$.endpoint??null,force_path_style:$.forcePathStyle??!1,prefix:$.prefix??null,public_url_base:$.publicUrlBase??null,credential_type:$.credentials.type,refresh_url:$.refreshUrl??null,site_slug:$.siteSlug??null,encrypted_credentials:X,created_by:$.createdBy,created_at:G,updated_by:$.createdBy,updated_at:G}).returning(y40).executeTakeFirstOrThrow();return this.rowToInfo(Y)}async update($){if(!await this.db.selectFrom("org_file_configs").where("id","=",$.id).where("organization_id","=",$.organizationId).select(["id"]).executeTakeFirst())throw new Lf($.id);let X={updated_by:$.updatedBy,updated_at:new Date};if($.name!==void 0)X.name=$.name;if($.description!==void 0)X.description=$.description;if($.bucket!==void 0)X.bucket=$.bucket;if($.region!==void 0)X.region=$.region;if($.endpoint!==void 0)X.endpoint=$.endpoint;if($.forcePathStyle!==void 0)X.force_path_style=$.forcePathStyle;if($.prefix!==void 0)X.prefix=$.prefix;if($.publicUrlBase!==void 0)X.public_url_base=$.publicUrlBase;if($.refreshUrl!==void 0)X.refresh_url=$.refreshUrl;if($.siteSlug!==void 0)X.site_slug=$.siteSlug;if($.credentials!==void 0)X.credential_type=$.credentials.type,X.encrypted_credentials=await this.vault.encrypt(JSON.stringify($.credentials));let G=await this.db.updateTable("org_file_configs").set(X).where("id","=",$.id).where("organization_id","=",$.organizationId).returning(y40).executeTakeFirstOrThrow();return this.rowToInfo(G)}async delete($,Z){if(!await this.db.selectFrom("org_file_configs").where("id","=",$).where("organization_id","=",Z).select(["id"]).executeTakeFirst())throw new Lf($);await this.db.deleteFrom("org_file_configs").where("id","=",$).where("organization_id","=",Z).execute()}async list($){return(await this.db.selectFrom("org_file_configs").where("organization_id","=",$).select(y40).orderBy("created_at","desc").execute()).map((X)=>this.rowToInfo(X))}async findById($,Z){let X=await this.db.selectFrom("org_file_configs").where("id","=",$).where("organization_id","=",Z).select(y40).executeTakeFirst();if(!X)throw new Lf($);return this.rowToInfo(X)}async resolveById($,Z){let X=await this.db.selectFrom("org_file_configs").where("id","=",$).where("organization_id","=",Z).selectAll().executeTakeFirst();if(!X)throw new Lf($);return{info:this.rowToInfo(X),credentials:await this.decodeCredentials(X)}}async resolveByName($){let Z=await this.db.selectFrom("org_file_configs").where("organization_id","=",$.organizationId).where(ah8`lower(name) = lower(${$.name})`).selectAll().executeTakeFirst();if(!Z)throw new Lf($.name);return{info:this.rowToInfo(Z),credentials:await this.decodeCredentials(Z)}}async decodeCredentials($){if($.credential_type==="managed")return{type:"managed"};let Z=await this.vault.decrypt($.encrypted_credentials),X=JSON.parse(Z);if(($.credential_type??"static")==="sts-session")return{type:"sts-session",apiKey:String(X.apiKey)};return{type:"static",accessKeyId:String(X.accessKeyId),secretAccessKey:String(X.secretAccessKey)}}}var y40,Lf;var zi1=B(()=>{DX();y40=["id","organization_id","name","description","bucket","region","endpoint","force_path_style","prefix","public_url_base","credential_type","refresh_url","site_slug","created_by","created_at","updated_by","updated_at"];Lf=class Lf extends Error{constructor($){super(`File config ${$} not found`);this.name="OrgFileConfigNotFoundError"}}});function g40($){return Gg0.test($)}var Gg0;var h40=B(()=>{Gg0=/^[a-z0-9][a-z0-9-]{0,59}$/});function ji1($){return $ instanceof Date?$.toISOString():String($)}function Yg0($){return{slug:$.slug,organizationId:$.organization_id,source:$.source,createdBy:$.created_by,createdAt:ji1($.created_at),updatedBy:$.updated_by,updatedAt:ji1($.updated_at)}}class Jg0{db;constructor($){this.db=$}async claimSite($){if(!g40($.slug))throw Error(`Invalid site slug "${$.slug}" \u2014 must be 1-60 chars of lowercase letters, digits, or hyphens, starting with a letter or digit`);let Z=new Date,X=await this.db.insertInto("org_sites").values({slug:$.slug,organization_id:$.organizationId,source:$.source??"deco-import",created_by:$.by,created_at:Z,updated_by:$.by,updated_at:Z}).onConflict((Q)=>Q.column("slug").doNothing()).returningAll().executeTakeFirst();if(X)return Yg0(X);let G=await this.getBySlug($.slug);if(!G)throw new Qg0($.slug,"unknown");if(G.organizationId!==$.organizationId)throw new Qg0($.slug,G.organizationId);let Y=await this.db.updateTable("org_sites").set({source:$.source??G.source,updated_by:$.by,updated_at:Z}).where("slug","=",$.slug).where("organization_id","=",$.organizationId).returningAll().executeTakeFirstOrThrow();return Yg0(Y)}async getBySlug($){let Z=await this.db.selectFrom("org_sites").selectAll().where("slug","=",$).executeTakeFirst();return Z?Yg0(Z):null}async isOwnedBy($,Z){return!!await this.db.selectFrom("org_sites").select("slug").where("slug","=",$).where("organization_id","=",Z).executeTakeFirst()}}var Qg0;var Pi1=B(()=>{h40();Qg0=class Qg0 extends Error{slug;ownerOrganizationId;constructor($,Z){super(`Site slug "${$}" is already owned by another organization`);this.slug=$;this.ownerOrganizationId=Z;this.name="OrgSiteConflictError"}}});function Ai1($,Z){return $?.startsWith(`${md[Z]}:`)??!1}function Wg0($){let Z=0;for(let X of $){if(X.action!=="status_changed")continue;if(X.data?.to!=="in_review")continue;Z=Math.max(Z,new Date(X.occurredAt).getTime())}return Z}function sh8($,Z){let X=Wg0($),G=new Map;for(let Y of $){if(Y.action!=="review_approved"&&Y.action!=="review_changes_requested")continue;if(new Date(Y.occurredAt).getTime()<X)continue;let Q=Y.data??{};if(Q.reviewer!=="qa"&&Q.reviewer!=="code_review")continue;if(Y.action==="review_approved"){if(Z?.verifiedOnly&&Q.verified!==!0)continue;G.set(Q.reviewer,"approved")}else G.set(Q.reviewer,"changes_requested")}return G}function Ef($,Z,X){if(Z.length===0)return!1;let G=sh8($,X);return Z.every((Y)=>G.get(Y)==="approved")}var s6="super-agent",dU,md,mU,Ti1="task-board.item.updated",Ri1="task-board.item.deleted";var OQ=B(()=>{dU=["qa","code_review"],md={qa:"QA Agent",code_review:"Code Reviewer"},mU={qa:"qa_agent_enabled",code_review:"code_reviewer_enabled"}});function Kg0($){let Z=(X)=>X instanceof Date?X.toISOString():X;return{id:$.id,taskBoardItemId:$.task_board_item_id,parentId:$.parent_id,authorId:$.author_id,body:$.body,resolved:$.resolved,createdAt:Z($.created_at),updatedAt:Z($.updated_at)}}function eh8($){if($&&typeof $==="object"&&!Array.isArray($)){let Z=$.text;if(typeof Z==="string"&&Z.trim())return Z.trim()}return null}function Hg0($){if($.status!=="in_progress")return!1;let Z=$.threads.filter((X)=>X.hasMessages);if(Z.length===0)return!1;return Z.every((X)=>X.status!==null&&Ng0.has(X.status))}function $u8($){let Z=typeof $==="string"?(()=>{try{return JSON.parse($)}catch{return null}})():$;if(!Z||typeof Z!=="object")return!1;let X=Z.githubRepo?.url;return typeof X==="string"&&X.length>0}class iU{db;constructor($){this.db=$}inTransaction($){return this.db.isTransaction?$(this.db):this.db.transaction().execute($)}async list($){let X=(await this.db.selectFrom("task_board_items").selectAll().where("organization_id","=",$).orderBy("sort_order","asc").execute()).map((G)=>this.itemFromDbRow(G));return await this.attachRefs(X,$),X}async getById($,Z){let X=await this.db.selectFrom("task_board_items").selectAll().where("id","=",$).where("organization_id","=",Z).executeTakeFirst();if(!X)return null;let G=this.itemFromDbRow(X);return await this.attachRefs([G],Z),G}async create($){let Z=c8("board"),X=new Date().toISOString(),G=$.status??"triage",{minOrder:Y}=await this.db.selectFrom("task_board_items").select((J)=>J.fn.min("sort_order").as("minOrder")).where("organization_id","=",$.organizationId).where("status","=",G).executeTakeFirstOrThrow(),Q=await this.db.insertInto("task_board_items").values({id:Z,organization_id:$.organizationId,title:$.title,description:$.description??null,status:G,priority:$.priority??"medium",assignee_id:$.assigneeId??null,assigned_by:$.assignedBy??null,due_date:$.dueDate??null,external_key:$.externalKey??null,sort_order:(Y??0)-1,created_by:$.by,created_at:X,updated_by:$.by,updated_at:X}).returningAll().executeTakeFirstOrThrow();return this.itemFromDbRow(Q)}async update($,Z,X,G){let Y=await this.db.updateTable("task_board_items").set({...X.title!==void 0?{title:X.title}:{},...X.description!==void 0?{description:X.description}:{},...X.status!==void 0?{status:X.status}:{},...X.priority!==void 0?{priority:X.priority}:{},...X.assigneeId!==void 0?{assignee_id:X.assigneeId}:{},...X.assignedBy!==void 0?{assigned_by:X.assignedBy}:{},...X.dueDate!==void 0?{due_date:X.dueDate}:{},...X.sortOrder!==void 0?{sort_order:X.sortOrder}:{},updated_by:G,updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).returningAll().executeTakeFirstOrThrow(),Q=this.itemFromDbRow(Y);return await this.attachRefs([Q],Z),Q}async delete($,Z){await this.inTransaction(async(X)=>{await X.deleteFrom("task_board_item_threads").where("task_board_item_id","=",$).where("organization_id","=",Z).execute(),await X.deleteFrom("task_board_item_prs").where("task_board_item_id","=",$).where("organization_id","=",Z).execute(),await X.deleteFrom("task_board_items").where("id","=",$).where("organization_id","=",Z).execute()})}async setItemTags($,Z,X){await this.inTransaction(async(G)=>{if(await G.deleteFrom("task_board_item_tags").where("task_board_item_id","=",$).$if(Z.length>0,(Y)=>Y.where("id","not in",Z)).execute(),Z.length>0)await G.insertInto("task_board_item_tags").values(Z.map((Y)=>({task_board_item_id:$,id:Y,created_by:X,created_at:new Date().toISOString()}))).onConflict((Y)=>Y.doNothing()).execute()})}async linkThread($,Z,X){await this.db.insertInto("task_board_item_threads").values({task_board_item_id:$,thread_id:Z,organization_id:X}).onConflict((G)=>G.columns(["task_board_item_id","thread_id"]).doNothing()).execute()}async linkedTaskIds($,Z){return(await this.db.selectFrom("task_board_item_threads").select("task_board_item_id as taskId").where("thread_id","=",$).where("organization_id","=",Z).execute()).map((G)=>G.taskId)}async linkPr($){await this.db.insertInto("task_board_item_prs").values({task_board_item_id:$.taskBoardItemId,organization_id:$.organizationId,url:$.url,pr_number:$.prNumber,repo_owner:$.repoOwner,repo_name:$.repoName,connection_id:$.connectionId??null}).onConflict((Z)=>Z.columns(["task_board_item_id","url"]).doNothing()).execute()}async listPrs($,Z){return(await this.db.selectFrom("task_board_item_prs").select(["url","pr_number as prNumber","repo_owner as repoOwner","repo_name as repoName","connection_id as connectionId","created_at as createdAt"]).where("task_board_item_id","=",$).where("organization_id","=",Z).orderBy("created_at","desc").execute()).map((G)=>({url:G.url,number:G.prNumber,repoOwner:G.repoOwner,repoName:G.repoName,connectionId:G.connectionId??null,createdAt:G.createdAt instanceof Date?G.createdAt.toISOString():G.createdAt}))}async advanceLinkedTasksToReviewOnThreadFinish($,Z){let X=[];for(let G of await this.linkedTaskIds($,Z)){let Y=await this.getById(G,Z);if(!Y||!Hg0(Y))continue;X.push(await this.update(G,Z,{status:"in_review"},Y.updatedBy)),await this.recordActivity({taskBoardItemId:G,action:"status_changed",actorId:null,data:{from:Y.status,to:"in_review"}}).catch((Q)=>console.error("[task-board] in_review activity write failed",Q))}return X}async reopenLinkedTasksOnThreadRun($,Z){let X=[];for(let G of await this.linkedTaskIds($,Z)){let Y=await this.getById(G,Z);if(!Y||Y.status!=="in_review")continue;X.push(await this.update(G,Z,{status:"in_progress"},Y.updatedBy))}return X}async claimConflictResolution($,Z,X){let G=await this.db.updateTable("task_board_items").set({status:"in_progress",updated_by:X,updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).where("status","=","in_review").where("assignee_id","=",s6).returningAll().executeTakeFirst();if(!G)return null;let Y=this.itemFromDbRow(G);return await this.attachRefs([Y],Z),Y}async claimReviewChangesBounce($,Z,X){let G=await this.db.updateTable("task_board_items").set({status:"in_progress",updated_by:X,updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).where("status","=","in_review").where("assignee_id","=",s6).returningAll().executeTakeFirst();if(!G)return null;let Y=this.itemFromDbRow(G);return await this.attachRefs([Y],Z),Y}async attachRefs($,Z){if($.length===0)return;await this.inTransaction(async(X)=>{await this.attachThreads(X,$,Z),await this.attachTags(X,$)})}async attachThreads($,Z,X){let G=Z.map((J)=>J.id),Y=await $.selectFrom("task_board_item_threads as link").innerJoin("threads as t","t.id","link.thread_id").leftJoinLateral((J)=>J.selectFrom("thread_message_parts as p").select("p.payload as payload").whereRef("p.thread_id","=","link.thread_id").where("p.role","=","assistant").where("p.kind","=","text").orderBy("p.created_at","desc").limit(1).as("lastmsg"),(J)=>J.onTrue()).select((J)=>["link.task_board_item_id as taskId","link.thread_id as threadId","link.created_at as createdAt","t.status as status","t.title as title","t.virtual_mcp_id as virtualMcpId","t.metadata as metadata","lastmsg.payload as lastMessagePayload",J.or([J.exists(J.selectFrom("thread_message_parts as mp").select("mp.id").whereRef("mp.thread_id","=","link.thread_id")),J.exists(J.selectFrom("thread_messages as tm").select("tm.id").whereRef("tm.thread_id","=","link.thread_id"))]).as("hasMessages")]).where("link.organization_id","=",X).where("link.task_board_item_id","in",G).orderBy("link.created_at","desc").execute(),Q=new Map;for(let J of Y){let W={threadId:J.threadId,virtualMcpId:J.virtualMcpId??null,status:J.status??null,title:J.title??null,lastMessage:eh8(J.lastMessagePayload),hasPreview:$u8(J.metadata),hasMessages:!!J.hasMessages,createdAt:J.createdAt instanceof Date?J.createdAt.toISOString():J.createdAt},K=Q.get(J.taskId);if(K)K.push(W);else Q.set(J.taskId,[W])}for(let J of Z)J.threads=Q.get(J.id)??[]}async attachTags($,Z){let X=Z.map((Q)=>Q.id),G=await $.selectFrom("task_board_item_tags as link").innerJoin("organization_tags as tag","tag.id","link.id").select(["link.task_board_item_id as taskId","link.created_by as createdBy","link.created_at as createdAt","tag.id as id","tag.name as name","tag.color as color"]).where("link.task_board_item_id","in",X).orderBy("tag.name","asc").execute(),Y=new Map;for(let Q of G){let J={id:Q.id,name:Q.name,color:Q.color??null,createdBy:Q.createdBy,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():Q.createdAt},W=Y.get(Q.taskId);if(W)W.push(J);else Y.set(Q.taskId,[J])}for(let Q of Z)Q.tags=Y.get(Q.id)??[]}async recordActivity($){await this.db.insertInto("task_board_activity").values({id:c8("act"),task_board_item_id:$.taskBoardItemId,action:$.action,actor_id:$.actorId,data:$.data?JSON.stringify($.data):null,occurred_at:new Date().toISOString()}).execute()}async claimReviewer($,Z,X){let G=`rtok_${crypto.randomUUID()}`,Y=await this.db.insertInto("task_board_review_claims").values({task_board_item_id:$,reviewer:Z,cycle_at:X,token:G}).onConflict((J)=>J.columns(["task_board_item_id","reviewer","cycle_at"]).doNothing()).returning("token").executeTakeFirst();if(Y)return{claimed:!0,token:Y.token};return{claimed:!1,token:(await this.db.selectFrom("task_board_review_claims").select("token").where("task_board_item_id","=",$).where("reviewer","=",Z).where("cycle_at","=",X).executeTakeFirst())?.token??G}}async resolveReviewClaimByToken($,Z){let X=await this.db.selectFrom("task_board_review_claims").select(["reviewer","cycle_at"]).where("task_board_item_id","=",$).where("token","=",Z).executeTakeFirst();return X?{reviewer:X.reviewer,cycleAt:X.cycle_at}:null}async recordActivities($){if($.length===0)return;let Z=new Date().toISOString();await this.db.insertInto("task_board_activity").values($.map((X)=>({id:c8("act"),task_board_item_id:X.taskBoardItemId,action:X.action,actor_id:X.actorId,data:X.data?JSON.stringify(X.data):null,occurred_at:Z}))).execute()}async listActivity($,Z){return(await this.db.selectFrom("task_board_activity as a").innerJoin("task_board_items as item","item.id","a.task_board_item_id").selectAll("a").where("item.organization_id","=",Z).where("a.task_board_item_id","=",$).orderBy("a.occurred_at","asc").execute()).map((G)=>({id:G.id,taskBoardItemId:G.task_board_item_id,action:G.action,actorId:G.actor_id,data:typeof G.data==="string"?JSON.parse(G.data):G.data??{},occurredAt:G.occurred_at instanceof Date?G.occurred_at.toISOString():G.occurred_at}))}async listComments($,Z){return(await this.db.selectFrom("task_board_comments as c").innerJoin("task_board_items as item","item.id","c.task_board_item_id").selectAll("c").where("item.organization_id","=",Z).where("c.task_board_item_id","=",$).orderBy("c.created_at","asc").execute()).map((G)=>Kg0(G))}async createComment($){if(!await this.db.selectFrom("task_board_items").select("id").where("id","=",$.taskBoardItemId).where("organization_id","=",$.organizationId).executeTakeFirst())return null;let X=null;if($.parentId){let Y=await this.db.selectFrom("task_board_comments").select(["id","parent_id"]).where("id","=",$.parentId).where("task_board_item_id","=",$.taskBoardItemId).executeTakeFirst();if(!Y)return null;X=Y.parent_id??Y.id}let G=await this.db.insertInto("task_board_comments").values({id:c8("cmt"),task_board_item_id:$.taskBoardItemId,parent_id:X,author_id:$.authorId,body:$.body}).returningAll().executeTakeFirstOrThrow();return Kg0(G)}async updateComment($){let Z=await this.commentInOrg($.id,$.organizationId);if(!Z)return null;if($.body!==void 0&&Z.authorId!==$.callerId)return null;if($.resolved!==void 0&&Z.parentId!==null)return null;let X=await this.db.updateTable("task_board_comments").set({...$.body===void 0?{}:{body:$.body},...$.resolved===void 0?{}:{resolved:$.resolved},updated_at:new Date().toISOString()}).where("id","=",$.id).returningAll().executeTakeFirst();return X?Kg0(X):null}async deleteComment($,Z,X){let G=await this.commentInOrg($,Z);if(!G||G.authorId!==X)return!1;return await this.db.deleteFrom("task_board_comments").where("id","=",$).execute(),!0}async commentInOrg($,Z){let X=await this.db.selectFrom("task_board_comments as c").innerJoin("task_board_items as item","item.id","c.task_board_item_id").select(["c.id","c.author_id","c.parent_id"]).where("c.id","=",$).where("item.organization_id","=",Z).executeTakeFirst();return X?{authorId:X.author_id,parentId:X.parent_id}:null}itemFromDbRow($){return{id:$.id,organizationId:$.organization_id,title:$.title,description:$.description,status:$.status,priority:$.priority,assigneeId:$.assignee_id,assignedBy:$.assigned_by,dueDate:$.due_date instanceof Date?$.due_date.toISOString():$.due_date,sortOrder:$.sort_order,threads:[],tags:[],createdBy:$.created_by,createdAt:$.created_at instanceof Date?$.created_at.toISOString():$.created_at,updatedBy:$.updated_by,updatedAt:$.updated_at instanceof Date?$.updated_at.toISOString():$.updated_at}}}var Ng0;var zf=B(()=>{DX();OQ();Ng0=new Set(["completed","failed","expired"])});class Fg0{db;constructor($){this.db=$}async create($,Z,X){let G=crypto.randomUUID(),Y=new Date(Date.now()+600000);return await this.db.insertInto("oauth_pkce_states").values({id:G,organization_id:Z,user_id:X,code_verifier:$,expires_at:Y,created_at:new Date}).execute(),G}async consume($,Z,X){let G=await this.db.deleteFrom("oauth_pkce_states").where("id","=",$).where("organization_id","=",Z).where("user_id","=",X).returningAll().executeTakeFirst();if(!G)throw Error("Invalid or expired OAuth state token");if((G.expires_at instanceof Date?G.expires_at:new Date(G.expires_at))<new Date)throw Error("OAuth state token has expired");return G.code_verifier}}function EW($){if($==null)return"unknown error";if(typeof $==="string")return $;if($ instanceof Error)return $.message;return JSON.stringify($)}function u40($){if($===null||typeof $==="string"||typeof $==="number"||typeof $==="boolean")return!0;if(Array.isArray($))return $.every(u40);if(typeof $==="object")return Object.entries($).every(([Z,X])=>typeof Z==="string"&&(X===void 0||u40(X)));return!1}function Ug0($){return Array.isArray($)&&$.every(u40)}function id($){return $!=null&&typeof $==="object"&&Object.entries($).every(([Z,X])=>typeof Z==="string"&&(X===void 0||u40(X)))}var ei1="vercel.ai.error",Zu8,Ii1,qi1,Q1,$n1="AI_APICallError",Zn1,Xu8,Mi1,ki1,a8,Xn1="AI_EmptyResponseBodyError",Gn1,Gu8,Si1,Vi1,c40,Yn1="AI_InvalidArgumentError",Qn1,Yu8,Ci1,_i1,nU,Jn1="AI_InvalidPromptError",Wn1,Qu8,vi1,bi1,BQ,Kn1="AI_InvalidResponseDataError",Nn1,Ju8,fi1,xi1,jf,Hn1="AI_JSONParseError",Fn1,Wu8,yi1,gi1,CN,Un1="AI_LoadAPIKeyError",wn1,Ku8,hi1,ui1,pD,On1="AI_LoadSettingError",Bn1,Nu8,ci1,li1,Dn1,Ln1="AI_NoContentGeneratedError",En1,Hu8,di1,mi1,zn1,jn1="AI_NoSuchModelError",Pn1,Fu8,ii1,ni1,R5,An1="AI_TooManyEmbeddingValuesForCallError",Tn1,Uu8,pi1,ti1,Pf,Rn1="AI_TypeValidationError",In1,wu8,oi1,ri1,e6,qn1="AI_UnsupportedFunctionalityError",Mn1,Ou8,ai1,si1,T4;var o1=B(()=>{Zu8=Symbol.for(ei1),Q1=class $ extends(qi1=Error,Ii1=Zu8,qi1){constructor({name:Z,message:X,cause:G}){super(X);this[Ii1]=!0,this.name=Z,this.cause=G}static isInstance(Z){return $.hasMarker(Z,ei1)}static hasMarker(Z,X){let G=Symbol.for(X);return Z!=null&&typeof Z==="object"&&G in Z&&typeof Z[G]==="boolean"&&Z[G]===!0}},Zn1=`vercel.ai.error.${$n1}`,Xu8=Symbol.for(Zn1),a8=class extends(ki1=Q1,Mi1=Xu8,ki1){constructor({message:$,url:Z,requestBodyValues:X,statusCode:G,responseHeaders:Y,responseBody:Q,cause:J,isRetryable:W=G!=null&&(G===408||G===409||G===429||G>=500),data:K}){super({name:$n1,message:$,cause:J});this[Mi1]=!0,this.url=Z,this.requestBodyValues=X,this.statusCode=G,this.responseHeaders=Y,this.responseBody=Q,this.isRetryable=W,this.data=K}static isInstance($){return Q1.hasMarker($,Zn1)}},Gn1=`vercel.ai.error.${Xn1}`,Gu8=Symbol.for(Gn1),c40=class extends(Vi1=Q1,Si1=Gu8,Vi1){constructor({message:$="Empty response body"}={}){super({name:Xn1,message:$});this[Si1]=!0}static isInstance($){return Q1.hasMarker($,Gn1)}};Qn1=`vercel.ai.error.${Yn1}`,Yu8=Symbol.for(Qn1),nU=class extends(_i1=Q1,Ci1=Yu8,_i1){constructor({message:$,cause:Z,argument:X}){super({name:Yn1,message:$,cause:Z});this[Ci1]=!0,this.argument=X}static isInstance($){return Q1.hasMarker($,Qn1)}},Wn1=`vercel.ai.error.${Jn1}`,Qu8=Symbol.for(Wn1),BQ=class extends(bi1=Q1,vi1=Qu8,bi1){constructor({prompt:$,message:Z,cause:X}){super({name:Jn1,message:`Invalid prompt: ${Z}`,cause:X});this[vi1]=!0,this.prompt=$}static isInstance($){return Q1.hasMarker($,Wn1)}},Nn1=`vercel.ai.error.${Kn1}`,Ju8=Symbol.for(Nn1),jf=class extends(xi1=Q1,fi1=Ju8,xi1){constructor({data:$,message:Z=`Invalid response data: ${JSON.stringify($)}.`}){super({name:Kn1,message:Z});this[fi1]=!0,this.data=$}static isInstance($){return Q1.hasMarker($,Nn1)}},Fn1=`vercel.ai.error.${Hn1}`,Wu8=Symbol.for(Fn1),CN=class extends(gi1=Q1,yi1=Wu8,gi1){constructor({text:$,cause:Z}){super({name:Hn1,message:`JSON parsing failed: Text: ${$}.
|
|
1040
1040
|
Error message: ${EW(Z)}`,cause:Z});this[yi1]=!0,this.text=$}static isInstance($){return Q1.hasMarker($,Fn1)}},wn1=`vercel.ai.error.${Un1}`,Ku8=Symbol.for(wn1),pD=class extends(ui1=Q1,hi1=Ku8,ui1){constructor({message:$}){super({name:Un1,message:$});this[hi1]=!0}static isInstance($){return Q1.hasMarker($,wn1)}},Bn1=`vercel.ai.error.${On1}`,Nu8=Symbol.for(Bn1),Dn1=class extends(li1=Q1,ci1=Nu8,li1){constructor({message:$}){super({name:On1,message:$});this[ci1]=!0}static isInstance($){return Q1.hasMarker($,Bn1)}},En1=`vercel.ai.error.${Ln1}`,Hu8=Symbol.for(En1),zn1=class extends(mi1=Q1,di1=Hu8,mi1){constructor({message:$="No content generated."}={}){super({name:Ln1,message:$});this[di1]=!0}static isInstance($){return Q1.hasMarker($,En1)}},Pn1=`vercel.ai.error.${jn1}`,Fu8=Symbol.for(Pn1),R5=class extends(ni1=Q1,ii1=Fu8,ni1){constructor({errorName:$=jn1,modelId:Z,modelType:X,message:G=`No such ${X}: ${Z}`}){super({name:$,message:G});this[ii1]=!0,this.modelId=Z,this.modelType=X}static isInstance($){return Q1.hasMarker($,Pn1)}},Tn1=`vercel.ai.error.${An1}`,Uu8=Symbol.for(Tn1),Pf=class extends(ti1=Q1,pi1=Uu8,ti1){constructor($){super({name:An1,message:`Too many values for a single embedding call. The ${$.provider} model "${$.modelId}" can only embed up to ${$.maxEmbeddingsPerCall} values per call, but ${$.values.length} values were provided.`});this[pi1]=!0,this.provider=$.provider,this.modelId=$.modelId,this.maxEmbeddingsPerCall=$.maxEmbeddingsPerCall,this.values=$.values}static isInstance($){return Q1.hasMarker($,Tn1)}},In1=`vercel.ai.error.${Rn1}`,wu8=Symbol.for(In1),e6=class $ extends(ri1=Q1,oi1=wu8,ri1){constructor({value:Z,cause:X,context:G}){let Y="Type validation failed";if(G==null?void 0:G.field)Y+=` for ${G.field}`;if((G==null?void 0:G.entityName)||(G==null?void 0:G.entityId)){Y+=" (";let Q=[];if(G.entityName)Q.push(G.entityName);if(G.entityId)Q.push(`id: "${G.entityId}"`);Y+=Q.join(", "),Y+=")"}super({name:Rn1,message:`${Y}: Value: ${JSON.stringify(Z)}.
|
|
1041
1041
|
Error message: ${EW(X)}`,cause:X});this[oi1]=!0,this.value=Z,this.context=G}static isInstance(Z){return Q1.hasMarker(Z,In1)}static wrap({value:Z,cause:X,context:G}){var Y,Q,J;if($.isInstance(X)&&X.value===Z&&((Y=X.context)==null?void 0:Y.field)===(G==null?void 0:G.field)&&((Q=X.context)==null?void 0:Q.entityName)===(G==null?void 0:G.entityName)&&((J=X.context)==null?void 0:J.entityId)===(G==null?void 0:G.entityId))return X;return new $({value:Z,cause:X,context:G})}},Mn1=`vercel.ai.error.${qn1}`,Ou8=Symbol.for(Mn1),T4=class extends(si1=Q1,ai1=Ou8,si1){constructor({functionality:$,message:Z=`'${$}' functionality not supported.`}){super({name:qn1,message:Z});this[ai1]=!0,this.functionality=$}static isInstance($){return Q1.hasMarker($,Mn1)}}});import*as i40 from"zod/v4";import{ZodFirstPartyTypeKind as J4}from"zod/v3";import{ZodFirstPartyTypeKind as _u8}from"zod/v3";import{ZodFirstPartyTypeKind as l40}from"zod/v3";function m$(...$){return $.reduce((Z,X)=>({...Z,...X!=null?X:{}}),{})}function d40({tools:$=[],providerToolNames:Z,resolveProviderToolName:X}){var G;let Y={},Q={};for(let J of $)if(J.type==="provider"){let W=(G=X==null?void 0:X(J))!=null?G:(J.id in Z)?Z[J.id]:void 0;if(W==null)continue;Y[J.name]=W,Q[W]=J.name}return{toProviderToolName:(J)=>{var W;return(W=Y[J])!=null?W:J},toCustomToolName:(J)=>{var W;return(W=Q[J])!=null?W:J}}}async function WG($,Z){if($==null)return Promise.resolve();let X=Z==null?void 0:Z.abortSignal;return new Promise((G,Y)=>{if(X==null?void 0:X.aborted){Y(kn1());return}let Q=setTimeout(()=>{J(),G()},$),J=()=>{clearTimeout(Q),X==null||X.removeEventListener("abort",W)},W=()=>{J(),Y(kn1())};X==null||X.addEventListener("abort",W)})}function kn1(){return new DOMException("Delay was aborted","AbortError")}function Af($){return Object.fromEntries([...$.headers])}function Q9($){let Z=$.replace(/-/g,"+").replace(/_/g,"/"),X=Du8(Z);return Uint8Array.from(X,(G)=>G.codePointAt(0))}function NG($){let Z="";for(let X=0;X<$.length;X++)Z+=String.fromCodePoint($[X]);return Bu8(Z)}function n9($){return $ instanceof Uint8Array?NG($):$}function bn1($,Z={}){let{useArrayBrackets:X=!0}=Z,G=new FormData;for(let[Y,Q]of Object.entries($)){if(Q==null)continue;if(Array.isArray(Q)){if(Q.length===1){G.append(Y,Q[0]);continue}let J=X?`${Y}[]`:Y;for(let W of Q)G.append(J,W);continue}G.append(Y,Q)}return G}async function nd($){var Z;try{await((Z=$.body)==null?void 0:Z.cancel())}catch(X){}}function Eu8($=globalThis){return $.window!=null}function zu8($){let Z;try{Z=new URL($)}catch(G){throw new i9({url:$,message:`Invalid URL: ${$}`})}if(Z.protocol==="data:")return;if(Z.protocol!=="http:"&&Z.protocol!=="https:")throw new i9({url:$,message:`URL scheme must be http, https, or data, got ${Z.protocol}`});let X=Z.hostname.toLowerCase().replace(/\.+$/,"");if(!X)throw new i9({url:$,message:"URL must have a hostname"});if(X==="localhost"||X.endsWith(".local")||X.endsWith(".localhost"))throw new i9({url:$,message:`URL with hostname ${X} is not allowed`});if(X.startsWith("[")&&X.endsWith("]")){let G=X.slice(1,-1);if(Pu8(G))throw new i9({url:$,message:`URL with IPv6 address ${X} is not allowed`});return}if(yn1(X)){if(gn1(X))throw new i9({url:$,message:`URL with IP address ${X} is not allowed`});return}}function yn1($){let Z=$.split(".");if(Z.length!==4)return!1;return Z.every((X)=>{let G=Number(X);return Number.isInteger(G)&&G>=0&&G<=255&&String(G)===X})}function gn1($){let Z=$.split(".").map(Number),[X,G,Y]=Z;if(X===0)return!0;if(X===10)return!0;if(X===100&&G>=64&&G<=127)return!0;if(X===127)return!0;if(X===169&&G===254)return!0;if(X===172&&G>=16&&G<=31)return!0;if(X===192&&G===0&&Y===0)return!0;if(X===192&&G===168)return!0;if(X===198&&(G===18||G===19))return!0;if(X>=240)return!0;return!1}function ju8($){let Z=$.toLowerCase(),X=Z.indexOf("%");if(X!==-1)Z=Z.slice(0,X);let G=Z.split("::");if(G.length>2)return null;let Y=(J)=>{if(J==="")return[];let W=[],K=J.split(":");for(let N=0;N<K.length;N++){let H=K[N];if(H.includes(".")){if(N!==K.length-1||!yn1(H))return null;let[F,U,w,O]=H.split(".").map(Number);W.push(F<<8|U,w<<8|O);continue}if(!/^[0-9a-f]{1,4}$/.test(H))return null;W.push(parseInt(H,16))}return W},Q=Y(G[0]);if(Q===null)return null;if(G.length===2){let J=Y(G[1]);if(J===null)return null;let W=8-Q.length-J.length;if(W<0)return null;return[...Q,...Array(W).fill(0),...J]}return Q.length===8?Q:null}function Pu8($){let Z=ju8($);if(Z===null)return!0;let X=(Y)=>Z.slice(0,Y).every((Q)=>Q===0);if(X(7)&&(Z[7]===0||Z[7]===1))return!0;if((Z[0]&65024)===64512)return!0;if((Z[0]&65472)===65152)return!0;if((Z[0]&65472)===65216)return!0;if((Z[0]&65280)===65280)return!0;if(X(6)||X(5)&&Z[5]===65535||X(4)&&Z[4]===65535&&Z[5]===0||Z[0]===100&&Z[1]===65435&&Z[2]===0&&Z[3]===0&&Z[4]===0&&Z[5]===0||Z[0]===100&&Z[1]===65435&&Z[2]===1){let Y=Z[6]>>8&255,Q=Z[6]&255,J=Z[7]>>8&255,W=Z[7]&255;return gn1(`${Y}.${Q}.${J}.${W}`)}return!1}async function Lg0({url:$,headers:Z,abortSignal:X,maxRedirects:G=Au8}){let Y={signal:X};if(Z!==void 0)Y.headers=Z;let Q=$;for(let J=0;J<=G;J++){zu8(Q);let W=await fetch(Q,{...Y,redirect:"manual"});if(W.type==="opaqueredirect"){if(!Eu8())throw new i9({url:$,message:`Redirect from ${Q} could not be validated and was blocked`});return await fetch(Q,{...Y,redirect:"follow"})}let K=W.headers.get("location");if(W.status>=300&&W.status<400&&K){await nd(W),Q=new URL(K,Q).toString();continue}return W}throw new i9({url:$,message:`Too many redirects (max ${G})`})}async function Eg0({response:$,url:Z,maxBytes:X=m40}){let G=$.headers.get("content-length");if(G!=null){let H=parseInt(G,10);if(!isNaN(H)&&H>X)throw await nd($),new i9({url:Z,message:`Download of ${Z} exceeded maximum size of ${X} bytes (Content-Length: ${H}).`})}let Y=$.body;if(Y==null)return new Uint8Array(0);let Q=Y.getReader(),J=[],W=0;try{while(!0){let{done:H,value:F}=await Q.read();if(H)break;if(W+=F.length,W>X)throw new i9({url:Z,message:`Download of ${Z} exceeded maximum size of ${X} bytes.`});J.push(F)}}finally{try{await Q.cancel()}finally{Q.releaseLock()}}let K=new Uint8Array(W),N=0;for(let H of J)K.set(H,N),N+=H.length;return K}async function zg0($,Z){var X,G;try{let Y=await Lg0({url:$,abortSignal:Z==null?void 0:Z.abortSignal});if(!Y.ok)throw await nd(Y),new i9({url:$,statusCode:Y.status,statusText:Y.statusText});let Q=await Eg0({response:Y,url:$,maxBytes:(X=Z==null?void 0:Z.maxBytes)!=null?X:m40}),J=(G=Y.headers.get("content-type"))!=null?G:void 0;return new Blob([Q],J?{type:J}:void 0)}catch(Y){if(i9.isInstance(Y))throw Y;throw new i9({url:$,cause:Y})}}function Tf($){if($==null)return"unknown error";if(typeof $==="string")return $;if($ instanceof Error)return $.message;return JSON.stringify($)}function JG($){return($ instanceof Error||$ instanceof DOMException)&&($.name==="AbortError"||$.name==="ResponseAborted"||$.name==="TimeoutError")}function Iu8($){if(!($ instanceof Error))return!1;let Z=$.code;if(typeof Z==="string"&&Ru8.includes(Z))return!0;return!1}function hn1({error:$,url:Z,requestBodyValues:X}){if(JG($))return $;if($ instanceof TypeError&&Tu8.includes($.message.toLowerCase())){let G=$.cause;if(G!=null)return new a8({message:`Cannot connect to API: ${G.message}`,cause:G,url:Z,requestBodyValues:X,isRetryable:!0})}if(Iu8($))return new a8({message:`Cannot connect to API: ${$.message}`,cause:$,url:Z,requestBodyValues:X,isRetryable:!0});return $}function pU($=globalThis){var Z,X,G;if($.window)return"runtime/browser";if((Z=$.navigator)==null?void 0:Z.userAgent)return`runtime/${$.navigator.userAgent.toLowerCase()}`;if((G=(X=$.process)==null?void 0:X.versions)==null?void 0:G.node)return`runtime/node.js/${$.process.version.substring(0)}`;if($.EdgeRuntime)return"runtime/vercel-edge";return"runtime/unknown"}function tU($){if($==null)return{};let Z={};if($ instanceof Headers)$.forEach((X,G)=>{Z[G.toLowerCase()]=X});else{if(!Array.isArray($))$=Object.entries($);for(let[X,G]of $)if(G!=null)Z[X.toLowerCase()]=G}return Z}function u4($,...Z){let X=new Headers(tU($)),G=X.get("user-agent")||"";return X.set("user-agent",[G,...Z].filter(Boolean).join(" ")),Object.fromEntries(X.entries())}function oD($){return $!=null}function cn1($,Z){try{return new URL($).origin===new URL(Z).origin}catch(X){return!1}}function ln1({mediaType:$,url:Z,supportedUrls:X}){return Z=Z.toLowerCase(),$=$.toLowerCase(),Object.entries(X).map(([G,Y])=>{let Q=G.toLowerCase();return Q==="*"||Q==="*/*"?{mediaTypePrefix:"",regexes:Y}:{mediaTypePrefix:Q.replace(/\*/,""),regexes:Y}}).filter(({mediaTypePrefix:G})=>$.startsWith(G)).flatMap(({regexes:G})=>G).some((G)=>G.test(Z))}function Rf({apiKey:$,environmentVariableName:Z,apiKeyParameterName:X="apiKey",description:G}){if(typeof $==="string")return $;if($!=null)throw new pD({message:`${G} API key must be a string.`});if(typeof process>"u")throw new pD({message:`${G} API key is missing. Pass it using the '${X}' parameter. Environment variables are not supported in this environment.`});if($=process.env[Z],$==null)throw new pD({message:`${G} API key is missing. Pass it using the '${X}' parameter or the ${Z} environment variable.`});if(typeof $!=="string")throw new pD({message:`${G} API key must be a string. The value of the ${Z} environment variable is not a string.`});return $}function zW({settingValue:$,environmentVariableName:Z}){if(typeof $==="string")return $;if($!=null||typeof process>"u")return;if($=process.env[Z],$==null||typeof $!=="string")return;return $}function dn1($){var Z;let[X,G=""]=$.toLowerCase().split("/");return(Z={mpeg:"mp3","x-wav":"wav",opus:"ogg",mp4:"m4a","x-m4a":"m4a"}[G])!=null?Z:G}function Cn1($){let Z=JSON.parse($);if(Z===null||typeof Z!=="object")return Z;if(Mu8.test($)===!1&&ku8.test($)===!1)return Z;return Su8(Z)}function Su8($){let Z=[$];while(Z.length){let X=Z;Z=[];for(let G of X){if(Object.prototype.hasOwnProperty.call(G,"__proto__"))throw SyntaxError("Object contains forbidden prototype property");if(Object.prototype.hasOwnProperty.call(G,"constructor")&&G.constructor!==null&&typeof G.constructor==="object"&&Object.prototype.hasOwnProperty.call(G.constructor,"prototype"))throw SyntaxError("Object contains forbidden prototype property");for(let Y in G){let Q=G[Y];if(Q&&typeof Q==="object")Z.push(Q)}}}return $}function jg0($){let{stackTraceLimit:Z}=Error;try{Error.stackTraceLimit=0}catch(X){return Cn1($)}try{return Cn1($)}finally{Error.stackTraceLimit=Z}}function Pg0($){if($.type==="object"||Array.isArray($.type)&&$.type.includes("object")){$.additionalProperties=!1;let{properties:X}=$;if(X!=null)for(let G of Object.keys(X))X[G]=tD(X[G])}if($.items!=null)$.items=Array.isArray($.items)?$.items.map(tD):tD($.items);if($.anyOf!=null)$.anyOf=$.anyOf.map(tD);if($.allOf!=null)$.allOf=$.allOf.map(tD);if($.oneOf!=null)$.oneOf=$.oneOf.map(tD);let{definitions:Z}=$;if(Z!=null)for(let X of Object.keys(Z))Z[X]=tD(Z[X]);return $}function tD($){if(typeof $==="boolean")return $;return Pg0($)}function UY(){return{}}function vu8($,Z){var X,G,Y;let Q={type:"array"};if(((X=$.type)==null?void 0:X._def)&&((Y=(G=$.type)==null?void 0:G._def)==null?void 0:Y.typeName)!==_u8.ZodAny)Q.items=W6($.type._def,{...Z,currentPath:[...Z.currentPath,"items"]});if($.minLength)Q.minItems=$.minLength.value;if($.maxLength)Q.maxItems=$.maxLength.value;if($.exactLength)Q.minItems=$.exactLength.value,Q.maxItems=$.exactLength.value;return Q}function bu8($){let Z={type:"integer",format:"int64"};if(!$.checks)return Z;for(let X of $.checks)switch(X.kind){case"min":if(X.inclusive)Z.minimum=X.value;else Z.exclusiveMinimum=X.value;break;case"max":if(X.inclusive)Z.maximum=X.value;else Z.exclusiveMaximum=X.value;break;case"multipleOf":Z.multipleOf=X.value;break}return Z}function fu8(){return{type:"boolean"}}function mn1($,Z){return W6($.type._def,Z)}function in1($,Z,X){let G=X!=null?X:Z.dateStrategy;if(Array.isArray(G))return{anyOf:G.map((Y,Q)=>in1($,Z,Y))};switch(G){case"string":case"format:date-time":return{type:"string",format:"date-time"};case"format:date":return{type:"string",format:"date"};case"integer":return yu8($)}}function gu8($,Z){return{...W6($.innerType._def,Z),default:$.defaultValue()}}function hu8($,Z){return Z.effectStrategy==="input"?W6($.schema._def,Z):UY()}function uu8($){return{type:"string",enum:Array.from($.values)}}function lu8($,Z){let X=[W6($.left._def,{...Z,currentPath:[...Z.currentPath,"allOf","0"]}),W6($.right._def,{...Z,currentPath:[...Z.currentPath,"allOf","1"]})].filter((Y)=>!!Y),G=[];return X.forEach((Y)=>{if(cu8(Y))G.push(...Y.allOf);else{let Q=Y;if("additionalProperties"in Y&&Y.additionalProperties===!1){let{additionalProperties:J,...W}=Y;Q=W}G.push(Q)}}),G.length?{allOf:G}:void 0}function du8($){let Z=typeof $.value;if(Z!=="bigint"&&Z!=="number"&&Z!=="boolean"&&Z!=="string")return{type:Array.isArray($.value)?"array":"object"};return{type:Z==="bigint"?"integer":Z,const:$.value}}function nn1($,Z){let X={type:"string"};if($.checks)for(let G of $.checks)switch(G.kind){case"min":X.minLength=typeof X.minLength==="number"?Math.max(X.minLength,G.value):G.value;break;case"max":X.maxLength=typeof X.maxLength==="number"?Math.min(X.maxLength,G.value):G.value;break;case"email":switch(Z.emailStrategy){case"format:email":uJ(X,"email",G.message,Z);break;case"format:idn-email":uJ(X,"idn-email",G.message,Z);break;case"pattern:zod":IX(X,hJ.email,G.message,Z);break}break;case"url":uJ(X,"uri",G.message,Z);break;case"uuid":uJ(X,"uuid",G.message,Z);break;case"regex":IX(X,G.regex,G.message,Z);break;case"cuid":IX(X,hJ.cuid,G.message,Z);break;case"cuid2":IX(X,hJ.cuid2,G.message,Z);break;case"startsWith":IX(X,RegExp(`^${Og0(G.value,Z)}`),G.message,Z);break;case"endsWith":IX(X,RegExp(`${Og0(G.value,Z)}$`),G.message,Z);break;case"datetime":uJ(X,"date-time",G.message,Z);break;case"date":uJ(X,"date",G.message,Z);break;case"time":uJ(X,"time",G.message,Z);break;case"duration":uJ(X,"duration",G.message,Z);break;case"length":X.minLength=typeof X.minLength==="number"?Math.max(X.minLength,G.value):G.value,X.maxLength=typeof X.maxLength==="number"?Math.min(X.maxLength,G.value):G.value;break;case"includes":{IX(X,RegExp(Og0(G.value,Z)),G.message,Z);break}case"ip":{if(G.version!=="v6")uJ(X,"ipv4",G.message,Z);if(G.version!=="v4")uJ(X,"ipv6",G.message,Z);break}case"base64url":IX(X,hJ.base64url,G.message,Z);break;case"jwt":IX(X,hJ.jwt,G.message,Z);break;case"cidr":{if(G.version!=="v6")IX(X,hJ.ipv4Cidr,G.message,Z);if(G.version!=="v4")IX(X,hJ.ipv6Cidr,G.message,Z);break}case"emoji":IX(X,hJ.emoji(),G.message,Z);break;case"ulid":{IX(X,hJ.ulid,G.message,Z);break}case"base64":{switch(Z.base64Strategy){case"format:binary":{uJ(X,"binary",G.message,Z);break}case"contentEncoding:base64":{X.contentEncoding="base64";break}case"pattern:zod":{IX(X,hJ.base64,G.message,Z);break}}break}case"nanoid":IX(X,hJ.nanoid,G.message,Z);case"toLowerCase":case"toUpperCase":case"trim":break;default:}return X}function Og0($,Z){return Z.patternStrategy==="escape"?iu8($):$}function iu8($){let Z="";for(let X=0;X<$.length;X++){if(!mu8.has($[X]))Z+="\\";Z+=$[X]}return Z}function uJ($,Z,X,G){var Y;if($.format||((Y=$.anyOf)==null?void 0:Y.some((Q)=>Q.format))){if(!$.anyOf)$.anyOf=[];if($.format)$.anyOf.push({format:$.format}),delete $.format;$.anyOf.push({format:Z,...X&&G.errorMessages&&{errorMessage:{format:X}}})}else $.format=Z}function IX($,Z,X,G){var Y;if($.pattern||((Y=$.allOf)==null?void 0:Y.some((Q)=>Q.pattern))){if(!$.allOf)$.allOf=[];if($.pattern)$.allOf.push({pattern:$.pattern}),delete $.pattern;$.allOf.push({pattern:vn1(Z,G),...X&&G.errorMessages&&{errorMessage:{pattern:X}}})}else $.pattern=vn1(Z,G)}function vn1($,Z){var X;if(!Z.applyRegexFlags||!$.flags)return $.source;let G={i:$.flags.includes("i"),m:$.flags.includes("m"),s:$.flags.includes("s")},Y=G.i?$.source.toLowerCase():$.source,Q="",J=!1,W=!1,K=!1;for(let N=0;N<Y.length;N++){if(J){Q+=Y[N],J=!1;continue}if(G.i){if(W){if(Y[N].match(/[a-z]/)){if(K)Q+=Y[N],Q+=`${Y[N-2]}-${Y[N]}`.toUpperCase(),K=!1;else if(Y[N+1]==="-"&&((X=Y[N+2])==null?void 0:X.match(/[a-z]/)))Q+=Y[N],K=!0;else Q+=`${Y[N]}${Y[N].toUpperCase()}`;continue}}else if(Y[N].match(/[a-z]/)){Q+=`[${Y[N]}${Y[N].toUpperCase()}]`;continue}}if(G.m){if(Y[N]==="^"){Q+=`(^|(?<=[\r
|
|
1042
1042
|
]))`;continue}else if(Y[N]==="$"){Q+=`($|(?=[\r
|
|
@@ -1266,7 +1266,7 @@ Respond with a JSON object containing the title.`,TQ$=($)=>/[\p{L}\p{N}]/u.test(
|
|
|
1266
1266
|
${[...d].sort().join(`
|
|
1267
1267
|
`)}
|
|
1268
1268
|
</currently-enabled-tools>`}:null,a=Q?.virtualMcp.metadata,t=Z.workspace.cwd==="/repo"&&Z.workspace.repo?{repo:Z.workspace.repo,branch:Z.workspace.branch,cwd:Z.workspace.cwd,workspaceKind:"github"}:void 0,A0=await G({kind:Q?.isSubagent?"subagent":"agent",virtualMcp:{id:Z.agent.id,repo:a?.githubRepo??void 0,delegationTargetIds:a?.subAgents},mcpClient:X.passthroughClient,provider:J,models:Z.models,messages:F,abortSignal:N,temperature:Z.temperature,planMode:L.isPlanMode,isDecopilot:eY(Z.agent.id)!==null,codingWorkspace:t,systemAgentInstructions:X.serverInstructions,currentThreadId:w,user:{id:Z.user.id,email:Z.user.email},userContext:Q?.userContext,writer:O,prepareStep:B0,onStepFinish:Y.onStepFinish,passthroughClient:X.passthroughClient,connectionsData:{tools:X.connectionsBlockTools,connectionTitleMap:X.connectionTitleMap},toolOutputMap:X.toolOutputMap,extraTools:{...X.builtInTools,...X.connectionsBlockTools.length>0&&W0.enable_tool?{enable_tool:W0.enable_tool}:{}},additionalSystemMessages:[...H,...P0?[P0]:[]],activeToolNames:[...x,..."enable_tool"in W0?["enable_tool"]:[],...d],stepLimit:Y.stepLimit??Z.maxAgentSteps}),X0=A0.result,g0=Promise.resolve(X0.finishReason).then(async(x0)=>{let[c1,F8,o4,E5]=await Promise.all([X0.totalUsage,X0.usage,X0.request,X0.response]);if(await A0.error!==void 0)return;A0.span.setAttribute("decopilot.llm.inputTokens",c1.inputTokens??0),A0.span.setAttribute("decopilot.llm.outputTokens",c1.outputTokens??0),A0.span.setAttribute("decopilot.llm.finishReason",x0);let i=l.cacheTotals();A0.span.setAttribute("decopilot.cache.read_tokens",i.read),A0.span.setAttribute("decopilot.cache.write_tokens",i.write);let n0=i.input>0?i.read/i.input:0;A0.span.setAttribute("decopilot.cache.hit_ratio",n0);let Z8=Date.now()-(E??Date.now());if(z=!0,D?.recordLlmCall({organizationId:Z.organizationId,modelId:Z.models.thinking.id,durationMs:Z8,isError:!1,inputTokens:c1.inputTokens,outputTokens:c1.outputTokens,cacheReadTokens:i.read,cacheWriteTokens:i.write}),D?.monitorLlmCall({organizationId:Z.organizationId,agentId:Z.agent.id,modelId:Z.models.thinking.id,modelTitle:Z.models.thinking.title??Z.models.thinking.id,credentialId:Z.models.thinking.credentialId,taskId:w,durationMs:Z8,isError:!1,finishReason:x0,usage:{inputTokens:F8.inputTokens??0,outputTokens:F8.outputTokens??0,totalTokens:F8.totalTokens??0},totalUsage:{inputTokens:c1.inputTokens??0,outputTokens:c1.outputTokens??0,totalTokens:c1.totalTokens??0},cost:l.cost(),request:o4,response:E5,userId:Z.user.id}),N.aborted)return}).catch(async(x0)=>{let c1=x0 instanceof Error?x0:Error(HH(x0));if(console.error("[decopilot:stream] Error",c1.message),N.aborted)return;if(!z){let F8=Date.now()-(E??Date.now());z=!0,D?.recordLlmCall({organizationId:Z.organizationId,modelId:Z.models.thinking.id,durationMs:F8,isError:!0,errorType:c1.name}),D?.monitorLlmCall({organizationId:Z.organizationId,agentId:Z.agent.id,modelId:Z.models.thinking.id,modelTitle:Z.models.thinking.title??Z.models.thinking.id,credentialId:Z.models.thinking.credentialId,taskId:w,durationMs:F8,isError:!0,errorMessage:c1.message,userId:Z.user.id})}}).catch((x0)=>{console.error("[decopilot:stream] finish metrics failed",x0)}),c0=A0.error.then(async(x0)=>{if(!N.aborted||z)return null;let c1=await X0.steps;if(!c1.length||z)return null;z=!0;let F8=Date.now()-(E??Date.now()),o4=c1.reduce((n0,Z8)=>({inputTokens:n0.inputTokens+(Z8.usage.inputTokens??0),outputTokens:n0.outputTokens+(Z8.usage.outputTokens??0),totalTokens:n0.totalTokens+(Z8.usage.totalTokens??0)}),{inputTokens:0,outputTokens:0,totalTokens:0}),E5=c1[c1.length-1].usage,B9=l.cacheTotals();if(D?.recordLlmCall({organizationId:Z.organizationId,modelId:Z.models.thinking.id,durationMs:F8,isError:!1,inputTokens:o4.inputTokens,outputTokens:o4.outputTokens,cacheReadTokens:B9.read,cacheWriteTokens:B9.write}),D?.monitorLlmCall({organizationId:Z.organizationId,agentId:Z.agent.id,modelId:Z.models.thinking.id,modelTitle:Z.models.thinking.title??Z.models.thinking.id,credentialId:Z.models.thinking.credentialId,taskId:w,durationMs:F8,isError:!1,finishReason:"abort",usage:{inputTokens:E5.inputTokens??0,outputTokens:E5.outputTokens??0,totalTokens:E5.totalTokens??0},totalUsage:o4,cost:l.cost(),request:void 0,response:void 0,userId:Z.user.id}),o4.totalTokens<=0)return null;let i=l.cost();return{type:"message-metadata",messageMetadata:{usage:{inputTokens:o4.inputTokens,outputTokens:o4.outputTokens,totalTokens:o4.totalTokens,cachedInputTokens:B9.read,inputTokenDetails:{cacheReadTokens:B9.read,cacheWriteTokens:B9.write,noCacheTokens:o4.inputTokens-B9.read-B9.write},...i>0&&{providerMetadata:{openrouter:{usage:{cost:i}}}}}}}}).then((x0)=>x0).catch((x0)=>{return console.error("[decopilot:stream] abort metadata failed",x0),null}),O0=X0.toUIMessageStream({originalMessages:U,generateMessageId:cd,onError:(x0)=>LQ$(x0),messageMetadata:({part:x0})=>{if(x0.type==="start")return{agent:{id:Z.agent.id??null},models:{credentialId:Z.models.thinking.credentialId,thinking:{...Z.models.thinking,title:Z.models.thinking.title??Z.models.thinking.id,provider:Z.models.thinking.provider??void 0}},created_at:new Date,_request:{systemSections:A0.assembledSystemMessages.map((c1)=>({chars:c1.content.length,preview:c1.content.slice(0,80).replace(/\s+/g," ")})),tools:Object.keys(W0).length,activeTools:x.length+("enable_tool"in W0?1:0)+d.size},thread_id:w,...Q?.subtaskJobId?{subtaskJobId:Q.subtaskJobId}:{},...Q?.resumedFromBackground?{resumedFromBackground:!0}:{}};if(x0.type==="reasoning-start"){if(_===null)_=new Date;return{reasoning_start_at:_}}if(x0.type==="reasoning-end")return{reasoning_end_at:new Date};if(x0.type==="finish-step")return l.addStep(x0.usage,x0.providerMetadata),{usage:l.buildStepUsage()};if(x0.type==="finish"){let c1=l.buildFinalUsage({totalUsage:x0.totalUsage,providerKey:Z.models.thinking.provider,fallbackProviderMetadata:x0.providerMetadata});return c1?{usage:c1}:{}}return}})[Symbol.asyncIterator](),z0=Y.sideChunks?.[Symbol.asyncIterator](),I0=!1,r=S===null,Z0=!1,q0=!1,J0=!1,U0=z0===void 0,E1=!1,C0=O0.next().then((x0)=>({kind:"main",value:x0})),p=j.next().then((x0)=>({kind:"queue",value:x0})),G0=z0?z0.next().then((x0)=>({kind:"side",value:x0})):null,r0=M.then((x0)=>({kind:"title",value:x0})),Y1=g0.then(()=>({kind:"finish-metrics"})),J$=c0.then((x0)=>({kind:"abort-metadata",value:x0}));try{while(!I0||!r||!Z0||!q0||!J0||!U0){if(I0&&r&&Z0&&q0&&!E1)Y.closeSideChunks?.(),j.close(),E1=!0;let x0=[];if(!J0)x0.push(p);if(!I0)x0.push(C0);if(!r)x0.push(r0);if(!Z0)x0.push(Y1);if(!q0)x0.push(J$);if(!U0&&G0)x0.push(G0);let c1=await Promise.race(x0);if(c1.kind==="main"){if(c1.value.done){if(I0=!0,!r)S?.finish();continue}yield c1.value.value,C0=O0.next().then((F8)=>({kind:"main",value:F8}))}else if(c1.kind==="title"){if(r=!0,c1.value)yield c1.value}else if(c1.kind==="finish-metrics")Z0=!0;else if(c1.kind==="abort-metadata"){if(q0=!0,c1.value)yield c1.value}else if(c1.kind==="side"){if(c1.value.done){U0=!0;continue}yield c1.value.value,G0=z0?.next().then((F8)=>({kind:"side",value:F8}))??null}else{if(c1.value.done){J0=!0;continue}yield c1.value.value,p=j.next().then((F8)=>({kind:"queue",value:F8}))}}}finally{if(!r)S?.finish();Y.closeSideChunks?.(),await O0.return?.().catch(()=>{}),await z0?.return?.().catch(()=>{}),j.close()}}var VQ$=B(()=>{KQ$();Dn0();dy0();En0();OQ$();Pn0();IQ$();B8()});function CQ$($){return $.type==="tool-call"&&$.toolName==="todo_write"&&typeof $.toolCallId==="string"}function mJ4($){return $.type==="tool-result"&&$.toolName==="todo_write"&&typeof $.toolCallId==="string"}function _Q$($){let Z=null;for(let G=$.length-1;G>=0&&Z===null;G--){let Q=$[G].content;if(!Array.isArray(Q))continue;for(let J=Q.length-1;J>=0;J--){let W=Q[J];if(CQ$(W)){Z=W.toolCallId;break}}}if(Z===null)return $;let X=Z;return $.map((G)=>{let Y=G.content;if(!Array.isArray(Y))return G;let Q=Y.filter((J)=>{if(CQ$(J))return J.toolCallId===X;if(mJ4(J))return J.toolCallId===X;return!0});if(Q.length===Y.length)return G;return{...G,content:Q}})}function vQ$($){let Z=!1,X=$.map((G)=>{if(G.role!=="assistant")return G;if(!G.parts.some((Q)=>("state"in Q)&&Q.state==="approval-requested"))return G;return Z=!0,{...G,parts:G.parts.map((Q)=>{if(!("state"in Q)||Q.state!=="approval-requested"||!("approval"in Q)||!Q.approval)return Q;return{...Q,state:"output-denied",approval:{...Q.approval,approved:!1,reason:"User sent a new message without approving this tool call."}}})}});return Z?X:$}function iJ4($){let[Z,X]=$.reduce((G,Y)=>{if(Y.role==="system")G[0].push(Y);else G[1].push(Y);return G},[[],[]]);return{systemMessages:Z,messages:X}}async function An0($,Z){let X=$.filter((F)=>F.role!=="assistant"||F.parts&&F.parts.length>0),G=await Nn({messages:X}),Y=vQ$(G),Q=await Kn(Y,{tools:Z.tools,ignoreIncompleteToolCalls:!0}),{systemMessages:J,messages:W}=iJ4(Q),K=_Q$(W),H=_d0({messages:K,reasoning:"all",emptyMessages:"remove",toolCalls:"none"}).map((F)=>{if(F.role!=="assistant")return F;let U=Array.isArray(F.content)?F.content.filter((w)=>w.type!=="reasoning"&&w.type!=="thinking"&&w.type!=="redacted-reasoning").map((w)=>{let O=w;if("providerOptions"in O||"providerMetadata"in O){let{providerOptions:D,providerMetadata:L,...E}=O;if(O.type==="tool-call"){let z=L?.google,j=D?.google;return{...E,...z?{providerMetadata:{google:z}}:{},...j?{providerOptions:{google:j}}:{}}}return E}return w}):F.content;return{...F,content:Array.isArray(U)&&U.length===0?[{type:"text",text:""}]:U,providerOptions:void 0,providerMetadata:void 0}});return{systemMessages:J,messages:H,originalMessages:G}}var Tn0=B(()=>{S4()});function bQ$($){if($<1)throw Error("Semaphore cap must be >= 1");let Z=$,X=[];function G(Y){return Y.reason??Error("Semaphore acquire aborted")}return{acquire(Y){if(Y?.aborted)return Promise.reject(G(Y));if(Z>0)return Z-=1,Promise.resolve();return new Promise((Q,J)=>{let W={resolve:Q,reject:J,cleanup:()=>{}},K=()=>{let N=X.indexOf(W);if(N!==-1)X.splice(N,1);W.cleanup(),J(G(Y))};if(Y)Y.addEventListener("abort",K,{once:!0}),W.cleanup=()=>Y.removeEventListener("abort",K);X.push(W)})},release(){let Y=X.shift();if(Y){Y.cleanup(),Y.resolve();return}if(Z+=1,Z>$)Z=$},available(){return Z}}}function Rn0($,Z){fQ$.set($,Z)}function In0($){return fQ$.get($)}function dx($){let Z=In0($);if(!Z)throw Error("Decopilot requires process-local run context. Dispatch must attach DecopilotRunContext before invoking the Decopilot harness.");return Z}var fQ$;var mx=B(()=>{fQ$=new WeakMap});function xQ$($,Z){let X=$.modelSources?.thinking??null;if(!X||X.kind!=="secret")throw Error("Decopilot core requires a secret thinking model source. Dispatch must resolve the selected model credential before invoking Decopilot.");let G=Z(X),Y=(H)=>{let F=$.models[H];if(!F)return;let U=$.modelSources?.[H];if(U&&U.kind!=="secret")throw Error("Decopilot core requires secret modelSources for all resolved slots.");return{model:F,provider:U&&U.kind==="secret"?Z(U):G}},Q=Y("fast"),J=Y("smart"),W=Y("image"),K=Y("webSearch"),N=Y("deepResearch");return{thinking:{model:$.models.thinking,provider:G},...Q?{fast:Q}:{},...J?{smart:J}:{},...W?{image:W}:{},...K?{webSearch:K}:{},...N?{deepResearch:N}:{}}}async function*yQ$($){let{input:Z,modelRuntime:X,toolRuntime:G,telemetry:Y}=$,Q=In0(Z),J=$.kind==="subtask",W=Zw0(),K=J?void 0:(L)=>W.addExternal(L),N=await G.buildEnvironmentTools({input:Z,onChildUsage:K});if(J)pJ4(N);let{systemMessages:H,messages:F,originalMessages:U}=await An0(Q?.messages??[Z.userMessage],{windowSize:UQ,models:Z.models,tools:N.tools}),w=F,O=Z.models.fast??Z.models.smart??Z.models.thinking,D=(Z.models.fast?X.fast?.provider:void 0)??(Z.models.smart?X.smart?.provider:void 0)??X.thinking.provider;yield*SQ$({input:Z,tools:N,runEngine:G.runEngine,extras:{provider:X.thinking.provider,titleProvider:D,titleModel:O,registrySignal:Z.signal??new AbortController().signal,processedSystemMessages:H,processedMessages:w,originalMessages:U,threadId:Z.threadId,currentThreadTitle:Z.currentThreadTitle??"",pendingImages:N.pendingImages,writer:N.writer,sideChunks:N.sideChunks,closeSideChunks:N.closeSideChunks,onStepFinish:N.onStepFinish,telemetry:Y,kind:$.kind,stepLimit:J?VN:void 0,usageAccumulator:W,runContext:Q}})}function pJ4($){if("subtask"in $.tools){let{subtask:Z,...X}=$.tools;$.tools=X}if("subtask"in $.builtInTools){let{subtask:Z,...X}=$.builtInTools;$.builtInTools=X}}var nJ4=4,Cj9;var gQ$=B(()=>{VQ$();Tn0();iD();Dn0();mx();Cj9=bQ$(nJ4)});function tJ4($){return"storage"in $}function hQ$($){qn0=$}var qn0,uQ$;var Mn0=B(()=>{On0();gQ$();mx();uQ$={id:"decopilot",create($){return{id:"decopilot",async*stream(Z){let X=dx(Z),G=xQ$({models:Z.models,modelSources:X.modelSources},eU0),Y=$w0(),Q={};if(!tJ4($))throw Error("[decopilot] a hosted Studio context is required");if(!qn0)throw Error("[decopilot] cluster environment builder not registered \u2014 "+"apps/api/src/harnesses must be imported before dispatching the decopilot harness in cluster mode");let J=qn0({ctx:$,modelRuntime:G,sideChannel:Y,cleanup:Q});try{yield*yQ$({input:Z,modelRuntime:G,toolRuntime:J.toolRuntime,telemetry:J.telemetry,kind:"main"})}finally{Y.close(),await Q.close?.().catch(()=>{})}}}}}});class kn0{ctx;harnessId;constructor($){this.ctx=$.ctx,this.harnessId=$.harnessId}dispatch($){if(this.harnessId!=="decopilot")throw Error(`InProcessSandboxClient runs cluster-hosted decopilot only; got "${this.harnessId}" \u2014 CLI harnesses run in the desktop app or are `+"rejected at the gate");return uQ$.create(this.ctx).stream($)}}var cQ$=B(()=>{Mn0()});import{z as M1}from"zod";var oJ4,cj9,lj9,lQ$,rJ4,rn,aJ4,sJ4,dj9;var dQ$=B(()=>{oJ4=M1.enum(["claude-code","codex","decopilot-sandbox","body-offload"]),cj9=M1.array(M1.string()).catch([]).transform(($)=>$.filter((Z)=>oJ4.safeParse(Z).success)),lj9=M1.discriminatedUnion("type",[M1.object({type:M1.literal("ui-message-chunk"),chunk:M1.unknown()}),M1.object({type:M1.literal("error"),code:M1.string(),message:M1.string()}),M1.object({type:M1.literal("done")})]),lQ$=M1.object({chunks:M1.array(M1.unknown()),done:M1.boolean().nullish().transform(($)=>$??!1),error:M1.object({code:M1.string(),message:M1.string()}).nullish().transform(($)=>$??null)}),rJ4=M1.record(M1.string(),M1.unknown()),rn=M1.object({id:M1.string(),title:M1.string().optional(),provider:M1.string().nullable().optional(),credentialId:M1.string(),limits:M1.object({contextWindow:M1.number().int().positive().optional(),maxOutputTokens:M1.number().int().positive().optional()}).optional(),capabilities:M1.object({vision:M1.boolean().optional(),text:M1.boolean().optional(),reasoning:M1.boolean().optional()}).optional()}).strict(),aJ4=M1.object({thinking:rn.extend({title:M1.string()}),fast:rn.optional(),smart:rn.optional(),image:rn.optional(),deepResearch:rn.optional()}).strict(),sJ4=M1.discriminatedUnion("cwd",[M1.object({cwd:M1.literal("/repo"),repo:M1.object({owner:M1.string(),name:M1.string(),connectedGithub:M1.boolean()}).strict().optional(),branch:M1.string().nullable()}).strict(),M1.object({cwd:M1.null()}).strict()]),dj9=M1.object({harnessId:M1.enum(["decopilot","claude-code","codex"]).optional(),threadId:M1.string(),userMessage:rJ4,harness:M1.object({sessionId:M1.string().optional()}).strict(),workspace:sJ4,models:aJ4,mcp:M1.object({url:M1.string().url(),headers:M1.record(M1.string(),M1.string()),expiresAt:M1.number().int().positive()}).strict(),mode:M1.enum(["default","plan","web-search","gen-image"]),temperature:M1.number(),toolApprovalLevel:M1.enum(["auto","readonly"]),toolAllowlist:M1.array(M1.string()).nullable().optional(),maxAgentSteps:M1.number().int().optional(),user:M1.object({id:M1.string(),email:M1.string()}).strict(),organizationId:M1.string(),organizationSlug:M1.string().optional(),agent:M1.object({id:M1.string(),instructions:M1.string().optional()}).strict(),triggerId:M1.string().optional(),currentThreadTitle:M1.string().optional(),traceparent:M1.string().optional(),runFenceToken:M1.string().optional(),resume:M1.object({reason:M1.string()}).strict().optional()}).strict()});function nQ$($){let{providerId:Z,apiKey:X,baseUrl:G}=$;if(Z==="anthropic")return{CLAUDE_CODE_MODEL:mQ$.anthropic,ANTHROPIC_API_KEY:X,ANTHROPIC_AUTH_TOKEN:null,ANTHROPIC_BASE_URL:G??null};if(Z==="openrouter"||Z==="deco")return{CLAUDE_CODE_MODEL:mQ$.openrouter,ANTHROPIC_API_KEY:"",ANTHROPIC_AUTH_TOKEN:X,ANTHROPIC_BASE_URL:G??"https://openrouter.ai/api"};throw new iQ$(Z)}var mQ$,iQ$;var pQ$=B(()=>{mQ$={anthropic:"claude-opus-5",openrouter:"anthropic/claude-opus-5"};iQ$=class iQ$ extends Error{constructor($){super(`the claude-code harness needs an Anthropic, OpenRouter or Deco model credential; this run's model resolves to "${$}". Point the agent's thinking model at one of those, or run it with Decopilot.`);this.name="UnsupportedClaudeCodeProviderError"}}});function Z34($){return $===404||$===410||$>=500}function tw($){return eJ4.has($)}class Sn0{ctx;harnessId;virtualMcpId;branch;credential;resume;constructor($){if(!tw($.harnessId))throw Error(`SandboxDispatchClient runs sandbox-hosted harnesses only; got "${$.harnessId}"`);this.ctx=$.ctx,this.harnessId=$.harnessId,this.virtualMcpId=$.virtualMcpId,this.branch=$.branch,this.credential=$.credential,this.resume=$.resume??null}dispatch($){return this.stream($)}async resolveWorkspace($){let Z=await mw(this.ctx,$);if(!Z)return this.branch===H3($)?{cwd:tQ$,branch:QH(this.branch)}:{cwd:null};return{cwd:tQ$,repo:{owner:Z.owner,name:Z.name,connectedGithub:Boolean(Z.connectionId)},branch:this.branch.startsWith("thread:")?QH(this.branch):this.branch}}async*stream($){if(!this.credential)throw Error(`the ${this.harnessId} harness needs a resolved model credential; this run has none (check the agent's thinking model)`);let Z=nQ$(this.credential),X=this.ctx.organization;if(!X)throw Error(`the ${this.harnessId} harness needs an organization on the context to mint its MCP endpoint; this run has none`);let{provider:G,kind:Y}=await bX(this.ctx,{userId:$.user.id,branch:this.branch,virtualMcpMetadata:null}),Q={...$,mcp:await nU0(this.ctx,this.virtualMcpId,X,`${this.harnessId}-run`,"task-run",$.threadId),workspace:await this.resolveWorkspace($.threadId)},J=$.threadId,{ctx:W,harnessId:K,virtualMcpId:N,branch:H}=this,F=null,U=(w)=>async function*(){let O=await gx({virtualMcpId:N,branch:H,sandboxProviderKind:Y,cloneOnly:!0},W);F=O.sandboxHandle,await G34(G,O.sandboxHandle,Z),yield*Q34({provider:G,handle:O.sandboxHandle,harnessId:K,input:w?{...Q,resume:w}:Q,runId:J,signal:$.signal})}();try{yield*X34({runId:J,resume:this.resume,aborted:()=>$.signal?.aborted===!0,dispatchOnce:U})}finally{if(F&&m0().sandboxReleaseOnRunEndEnabled)await G.releaseAfter?.(F,m0().sandboxReleaseGraceMs).catch(()=>{})}}}async function*X34($){let Z=$.maxAttempts??$34,X=$.resume,G=X!==null;for(let Y=1;;Y++)try{for await(let Q of $.dispatchOnce(X)){if(Q.type==="start"){if(G)continue;G=!0}yield Q}return}catch(Q){if($.aborted())throw Q;if(!(Q instanceof zV)||Y>=Z)throw Q;console.warn("[sandbox-dispatch] sandbox lost mid-run; continuing",{runId:$.runId,attempt:Y,reason:Q.message}),X={reason:`the sandbox running the previous attempt stopped answering (${Q.message})`},G=!0}}async function G34($,Z,X){let G=await $.proxyDaemonRequest(Z,"/_sandbox/config",{method:"PUT",headers:new Headers({"content-type":"application/json"}),body:JSON.stringify({env:X})});if(!G.ok)throw Error(`failed to push model env to the sandbox (${G.status} ${G.statusText})`)}function Y34($){let{signal:Z,...X}=$;return X}async function*Q34($){let Z=Date.now(),X;try{X=await $.provider.proxyDaemonRequest($.handle,"/_sandbox/dispatch",{method:"POST",headers:new Headers({"content-type":"application/json"}),body:JSON.stringify({harnessId:$.harnessId,runId:$.runId,input:Y34($.input)}),...$.signal?{signal:$.signal}:{}})}catch(J){if($.signal?.aborted)throw J;throw new zV(`could not reach the sandbox daemon: ${J instanceof Error?J.message:String(J)}`)}if(!X.ok){let J=await X.text().catch(()=>X.statusText),W=`sandbox dispatch failed (${X.status}): ${J.slice(0,512)}`;if(Z34(X.status))throw new zV(W);throw Error(W)}if(!X.body)throw new zV("dispatch returned no body");let G=0,Y=null,Q=!1;for await(let J of J34(X.body,$.signal)){let W=lQ$.safeParse(J);if(!W.success)throw Error(`sandbox dispatch returned a malformed frame: ${W.error.message}`);if(G+=W.data.chunks.length,yield*W.data.chunks,Y??=W.data.error,W.data.done)Q=!0}if(console.log("[sandbox-dispatch] run ended",{runId:$.runId,handle:$.handle,chunks:G,elapsedMs:Date.now()-Z,done:Q,error:Y?.code??null}),!Q&&!Y)throw new zV(`the sandbox stopped streaming after ${G} chunks without finishing the run`);if(Y)throw Error(`${Y.code}: ${Y.message}`)}async function*J34($,Z){let X=new TextDecoder,G="",Y=function*(J){let W=G.split(`
|
|
1269
|
-
`);G=J?W.pop()??"":"";for(let K of W)if(K.trim().length
|
|
1269
|
+
`);G=J?W.pop()??"":"";for(let K of W){if(K.trim().length===0)continue;try{yield JSON.parse(K)}catch(N){throw Error(`sandbox dispatch produced a non-JSON line: ${N instanceof Error?N.message:String(N)} (line: ${K.slice(0,256)})`)}}},Q=$[Symbol.asyncIterator]();try{for(;;){let J=new AbortController,W=Q.next().then((H)=>{return J.abort(),H}),K=a$(oQ$,{signal:J.signal}).then(()=>"silent").catch(()=>"read-won"),N=await Promise.race([W,K]);if(N==="silent"){if(Z?.aborted)return;throw new zV(`no output from the sandbox for ${oQ$/1000}s (its keepalive is every 15s, so the pod is gone)`)}if(N==="read-won")continue;if(N.done)break;G+=X.decode(N.value,{stream:!0}),yield*Y(!0)}yield*Y(!1)}finally{await Q.return?.().catch(()=>{})}}var tQ$="/repo",eJ4,$34=2,oQ$=90000,zV;var Yw0=B(()=>{J5();dQ$();pQ$();Kn0();lw();V$();nn();F3();eJ4=new Set(["claude-code"]);zV=class zV extends Error{constructor($){super($);this.name="SandboxUnreachableError"}}});import{context as W34,trace as K34}from"@opentelemetry/api";function rQ$($){N34({...$,tracer:$.ctx.tracer})}function N34($){try{if(!$.organizationId)return;let Z=$.tracer.startSpan(sE0),X=K34.setSpan(W34.active(),Z),G=$.totalUsage??$.usage;Ai({type:VC,organizationId:$.organizationId,connectionId:Eo,toolName:$.modelId,toolArguments:{model:$.modelId,credentialId:$.credentialId,threadId:$.taskId,...$.request?.body!==void 0?{requestBody:$.request.body}:{}},result:{...$.usage??{},...$.totalUsage?{totalUsage:$.totalUsage}:{},...$.cost!==void 0?{cost:$.cost}:{},...$.finishReason?{finishReason:$.finishReason}:{},...$.response?{responseId:$.response.id,responseModelId:$.response.modelId,responseTimestamp:$.response.timestamp,messages:$.response.messages}:{},logType:VC},duration:$.durationMs,isError:$.isError,errorMessage:$.errorMessage??null,userId:$.userId,requestId:$.requestId,userAgent:$.userAgent??null,virtualMcpId:$.agentId??null,properties:{model_title:$.modelTitle,credential_id:$.credentialId,thread_id:$.taskId,log_type:VC,...$.response?{response_id:$.response.id}:{},...G?{input_tokens:String(G.inputTokens),output_tokens:String(G.outputTokens),total_tokens:String(G.totalTokens)}:{},...$.cost!==void 0?{cost:String($.cost)}:{}}},X),Z.end()}catch{}}var aQ$=B(()=>{Q50();dG()});function sQ$($){let{ctx:Z,organizationId:X,modelId:G,durationMs:Y,isError:Q,inputTokens:J,outputTokens:W,cacheReadTokens:K,cacheWriteTokens:N}=$;if(!X||!G)return;let H={"connection.id":Eo,"tool.name":G,"organization.id":X,status:Q?"error":"success","error.type":Q?$.errorType||"Error":""};if(Z.meter.createHistogram("tool.execution.duration",{description:"Duration of tool executions in milliseconds",unit:"ms"}).record(Y,H),Z.meter.createCounter("tool.execution.count",{description:"Number of tool executions"}).add(1,H),J!=null||W!=null)Z.meter.createCounter("tool.execution.tokens",{description:"Number of tokens used by LLM calls"}).add((J??0)+(W??0),H);if((K??0)>0)Z.meter.createCounter("tool.execution.cache_tokens",{description:"LLM cache tokens by kind (read/write)"}).add(K,{...H,kind:"read"});if((N??0)>0)Z.meter.createCounter("tool.execution.cache_tokens",{description:"LLM cache tokens by kind (read/write)"}).add(N,{...H,kind:"write"})}var eQ$=B(()=>{dG()});function Vn0($){let Z=Object.values($),[X]=Z;if(!X)return null;return Z.find((G)=>G.sandboxProviderKind!=="user-desktop")??X}async function U34($){if($J$.has($))return!0;let Z=Date.now();if(Z-(ZJ$.get($)??0)<F34)return!1;ZJ$.set($,Z);try{let X=await fetch($,{method:"POST",headers:{"content-type":"application/json",accept:"application/json, text/event-stream"},body:JSON.stringify({jsonrpc:"2.0",id:1,method:"initialize",params:{protocolVersion:"2025-06-18",capabilities:{},clientInfo:{name:"studio-dev-probe",version:"1"}}}),signal:AbortSignal.timeout(4000)}),G=X.ok?await X.text():"",Y=/"protocolVersion"|"serverInfo"/.test(G);if(Y)$J$.add($);return Y}catch{return!1}}async function jV($,Z,X,G){let Y=$.organization?.id;if(!Y)return null;let Q=await $.storage.virtualMcps.findById(Z);if(!Q||Q.organization_id!==Y)return null;let J=Q.metadata??{},W=S5(J)[X];if(!W)return null;let K=G?w34(W,G):O34(W);if(!K?.entry.previewUrl)return null;let N=await B34($,J,Y,X),H=K.entry.previewUrl.replace(/\/+$/,""),F=N?`${H}/api/mcp?token=${encodeURIComponent(N)}`:`${H}/api/mcp`;if(!await U34(F))return null;return{id:g21(Z),organization_id:Y,title:`${Q.title} (dev)`,description:"Ephemeral sandbox dev-server connection",icon:Q.icon??null,app_name:Q.title??null,app_id:null,slug:null,connection_type:"HTTP",connection_url:F,connection_token:null,connection_headers:null,oauth_config:null,configuration_state:null,configuration_scopes:null,metadata:{isDevConnection:!0,virtualMcpId:Z,branch:K.branch},tools:null,bindings:null,status:"active",created_at:new Date().toISOString(),updated_at:new Date().toISOString(),created_by:"system"}}function w34($,Z){let X=Vn0(LJ($[Z]));return X?{branch:Z,entry:X}:null}function O34($){let Z=null;for(let[X,G]of Object.entries($)){let Y=Vn0(LJ(G));if(!Y)continue;if(!Z||(Y.createdAt??0)>(Z.entry.createdAt??0))Z={branch:X,entry:Y}}return Z}async function B34($,Z,X,G){let Y=lU0(Z)?.find((Q)=>Q.key===H34);if(!Y)return null;if(Y.kind==="literal")return Y.value||null;try{let{value:Q}=await $.storage.secrets.resolveById(Y.secretId,X,G);return Q||null}catch(Q){if(Q instanceof wQ||Q instanceof lU)return null;throw Q}}var H34="MCP_AUTH_TOKEN",$J$,ZJ$,F34=1e4;var Qw0=B(()=>{B8();dd();dn();RG();$J$=new Set,ZJ$=new Map});import{z as Cn0}from"zod";function Jw0($){let{toolOutputMap:Z}=$;return _$({description:"Filter a tool output that was too large to display inline. Returns all lines matching the given regular expression pattern (grep-like). You may call this tool multiple times with different patterns to extract different pieces of information.",inputExamples:[{input:{tool_call_id:"id_1",pattern:"error|warning"}},{input:{tool_call_id:"id_2",pattern:'"status":\\s*"failed"'}}],inputSchema:s(Cn0.object({tool_call_id:Cn0.string(),pattern:Cn0.string().min(1).describe("Regular expression pattern to filter tool output lines. Returns all matching lines.")})),execute:async({tool_call_id:X,pattern:G})=>{if(!Z.has(X))return{result:`Tool output not found for tool call id: ${X}. Available ids: ${[...Z.keys()].join(", ")||"(none)"}`,matchCount:0,totalLines:0};let Y=Z.get(X),Q;try{Q=new RegExp(G)}catch{return{result:`Invalid regex pattern: ${G}`,matchCount:0,totalLines:0}}let J=Y.split(`
|
|
1270
1270
|
`),W=J.filter((H)=>Q.test(H)),K=W.join(`
|
|
1271
1271
|
`),N=t7(K);if(N>ow){let H=fX(K);return{result:`Output is still too long (${N} tokens), use a more specific pattern to reduce output.
|
|
1272
1272
|
|
|
@@ -2720,7 +2720,7 @@ Do NOT require review (requiresReview = false) when the changes are low-risk, su
|
|
|
2720
2720
|
|
|
2721
2721
|
When unsure between the two, lean toward NOT requiring review for small frontend-only diffs, and toward requiring it for anything backend or large.
|
|
2722
2722
|
|
|
2723
|
-
Respond with the structured verdict and a short reason.`,kV$;var VV$=B(()=>{S4();nw();V$1();U06=C$1.object({requiresReview:C$1.boolean().describe("true if the changes should go through pull-request review"),reason:C$1.string().describe("One short sentence explaining the decision (max ~120 chars)")});kV$={requiresReview:!1,reason:""}});function D06($){if(!$||$.includes(".."))return!1;return B06.test($)}function CV$($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!D06(Z))return null;let{__resolveType:X,...G}=$;return{resolveType:Z,payload:G}}function _V$($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var B06;var vV$=B(()=>{B06=/^[\w./@-]+$/});function _$1($){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 bV$($,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 fV$($,Z,X,G){if(!G.connectionId)throw new qg("Push requires a connected GitHub account. Connect mcp-github for this project and restart the sandbox.");let Y=$.organization?.id;if(!Y)throw new qg(u7);await jx({ctx:$,connectionId:G.connectionId,organizationId:Y,forceRefresh:!0,onLegacyMintError:(H)=>{let F=H instanceof Error?H.message:u7;throw new qg(F)}});let{cloneUrl:Q,gitUserName:J,gitUserEmail:W}=await kw(G.connectionId,G.owner,G.name,$.db,$.vault),K=CE0($),N=await Z.proxyDaemonRequest(X,"/_sandbox/config",{method:"PUT",headers:new Headers({"content-type":"application/json"}),body:JSON.stringify({git:{repository:{cloneUrl:Q},identity:{userName:J,userEmail:W}},...K?{operator:K}:{}})});if(!N.ok){let H=await iw(N,L06).catch(()=>N.statusText);throw Error(`Failed to refresh sandbox git credentials (${N.status}): ${H}`)}}var L06=10485760,qg;var xV$=B(()=>{Fw();T$1();mn();Dn();qg=class qg extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function z06($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!E06.test(Z))throw Error(`Invalid branch name: ${$}`)}function RC($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(P06)])}function IC($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}function v$1($,Z){let G=(_E0.get($)??Promise.resolve()).catch(()=>{}).then(Z),Y=G.catch(()=>{});return _E0.set($,Y),Y.finally(()=>{if(_E0.get($)===Y)_E0.delete($)}),G}async function SZ($,Z,X){let G=IC($);if(G instanceof Response)return G;let{claimName:Y,userId:Q,projectRef:J}=$.get("vmClaim"),W=X?.method??"POST",K=null,N=new Headers;if(X?.jsonBody!==void 0)K=X.jsonBody,N.set("content-type","application/json");else if(X?.forwardJsonBody)K=await $.req.text(),N.set("content-type","application/json");let H=X?.signal,F={method:W,headers:N,body:K,...H?{signal:H}:{}},U=async()=>{let w=await G.proxyDaemonRequest(Y,Z,F);if(X?.map404to410&&w.status===404){try{await w.body?.cancel()}catch{}if(await G.adoptLiveClaim?.({userId:Q,projectRef:J},Y))w=await G.proxyDaemonRequest(Y,Z,F);if(w.status===404){try{await w.body?.cancel()}catch{}return new Response(JSON.stringify({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."}),{status:410,headers:{"content-type":"application/json",...bY}})}}let O=await w.text(),D=X?.redactRepoDirUnlessDesktop&&G.kind!=="user-desktop"?T06(O):O,L=w.headers.get("content-type")??"application/json";return new Response(D,{status:w.status,headers:{"content-type":L,...bY}})};try{if(H){let w=U();return w.catch(()=>{}),await Promise.race([w,new Promise((D,L)=>{if(H.aborted)return L(H.reason);H.addEventListener("abort",()=>L(H.reason),{once:!0})})])}return await U()}catch(w){let O=w instanceof Error?w.message:String(w);return $.json({error:`Daemon unreachable: ${O}`},502)}}function T06($){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 vE0($,Z,X,G="GET",Y){let Q=await $.proxyDaemonRequest(Z,X,{method:G,headers:new Headers,body:null});if(Q.status===404&&Y){try{await Q.body?.cancel()}catch{}if(await $.adoptLiveClaim?.(Y,Z))Q=await $.proxyDaemonRequest(Z,X,{method:G,headers:new Headers,body:null})}if(Q.status===404){try{await Q.body?.cancel()}catch{}throw Error("SANDBOX_GONE")}let J=await Q.text();if(!Q.ok)try{let W=JSON.parse(J);throw Error(W.error??`Daemon error (${Q.status})`)}catch(W){if(W instanceof Error&&W.message!==J)throw W;throw Error(`Daemon error (${Q.status})`)}return JSON.parse(J)}function R06($){return hV$.includes($)}var E06,yV$=524288,j06=65536,P06=1e4,gV$=2000,A06,_E0,bY,hV$,uV$=()=>{let $=new D1;return $.use("/:virtualMcpId/:branch/*",A06),$.post("/:virtualMcpId/:branch/write",(Z)=>SZ(Z,"/_sandbox/write",{forwardJsonBody:!0,signal:RC(Z)})),$.post("/:virtualMcpId/:branch/unlink",(Z)=>SZ(Z,"/_sandbox/unlink",{forwardJsonBody:!0,signal:RC(Z)})),$.post("/:virtualMcpId/:branch/mkdir",(Z)=>SZ(Z,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:RC(Z)})),$.post("/:virtualMcpId/:branch/rename",(Z)=>SZ(Z,"/_sandbox/rename",{forwardJsonBody:!0,signal:RC(Z)})),$.post("/:virtualMcpId/:branch/read",(Z)=>SZ(Z,"/_sandbox/read",{forwardJsonBody:!0,signal:RC(Z)})),$.post("/:virtualMcpId/:branch/glob",(Z)=>SZ(Z,"/_sandbox/glob",{forwardJsonBody:!0,signal:RC(Z)})),$.post("/:virtualMcpId/:branch/grep",(Z)=>SZ(Z,"/_sandbox/grep",{forwardJsonBody:!0,signal:RC(Z)})),$.post("/:virtualMcpId/:branch/exec/:script",async(Z)=>{let X=Z.req.param("script");if(!X)return Z.json({error:"missing script name"},400);return SZ(Z,`/_sandbox/exec/${encodeURIComponent(X)}`)}),$.post("/:virtualMcpId/:branch/exec/:script/kill",async(Z)=>{let X=Z.req.param("script");if(!X)return Z.json({error:"missing script name"},400);return SZ(Z,`/_sandbox/exec/${encodeURIComponent(X)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(Z)=>SZ(Z,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDirUnlessDesktop:!0})),$.put("/:virtualMcpId/:branch/config",(Z)=>SZ(Z,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(Z)=>{let X=Z.req.param("step");if(!X||!R06(X))return Z.json({error:`step must be one of: ${hV$.join(", ")}`},400);if(X==="start"){let G=Z.get("vmClaim");if(G.runner){let Y=e(Z.var.studioContext),Q=lU0(G.virtualMcpMetadata);try{await dU0({ctx:Z.var.studioContext,runner:G.runner,handle:G.claimName,orgId:Y.id,userId:G.callerUserId,entries:Q})}catch(J){let W=J instanceof Error?J.message:String(J);return Z.json({error:`Failed to push env to daemon: ${W}`},502)}}}return SZ(Z,`/_sandbox/setup/${X}`,{signal:Z.req.raw.signal,map404to410:!0})}),$.get("/:virtualMcpId/:branch/events",(Z)=>{let X=Z.get("vmClaim");if(!X.runner)return uH(Z,async(G)=>{await G.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:"No sandbox runner configured on this studio instance."})})});return AV$(Z,{ctx:Z.var.studioContext,claimName:X.claimName,runner:X.runner,virtualMcpId:X.virtualMcpId,branch:X.branch,userId:X.userId,projectRef:X.projectRef,virtualMcpMetadata:X.virtualMcpMetadata})}),$.get("/:virtualMcpId/:branch/git/status",(Z)=>SZ(Z,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([Z.req.raw.signal,AbortSignal.timeout(gV$)])})),$.post("/:virtualMcpId/:branch/git/status",(Z)=>SZ(Z,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([Z.req.raw.signal,AbortSignal.timeout(gV$)])})),$.post("/:virtualMcpId/:branch/git/diff",(Z)=>SZ(Z,"/_sandbox/git/diff",{forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/git/publish",async(Z)=>{let X=IC(Z);if(X instanceof Response)return X;let{claimName:G,virtualMcpMetadata:Y,connectionIds:Q}=Z.get("vmClaim"),J=Z.var.studioContext;return v$1(G,async()=>{try{await R$1(J,X,G);let W=bV$(Y,Q);if(W)await fV$(J,X,G,W)}catch(W){if(W instanceof qg)return Z.json({error:W.message},403,bY);let K=W instanceof Error?W.message:String(W);return Z.json({error:K},502,bY)}return SZ(Z,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/discard",(Z)=>{let{claimName:X}=Z.get("vmClaim");return v$1(X,()=>SZ(Z,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0}))}),$.post("/:virtualMcpId/:branch/git/rebase",async(Z)=>{let X=IC(Z);if(X instanceof Response)return X;let{claimName:G}=Z.get("vmClaim"),Y=Z.var.studioContext;return v$1(G,async()=>{try{await R$1(Y,X,G)}catch(Q){let J=Q instanceof Error?Q.message:String(Q);return Z.json({error:J},502,bY)}return SZ(Z,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",F7({maxSize:yV$,onError:(Z)=>Z.json({error:"Payload too large"},413,bY)}),async(Z)=>{let X=IC(Z);if(X instanceof Response)return X;let{claimName:G,userId:Y,projectRef:Q}=Z.get("vmClaim"),J=Z.var.studioContext;try{let W=await Z.req.json().catch(()=>({})),K=W.status,N=W.diff,H=N!=null&&typeof N.diffs==="object"&&N.diffs!==null,[F,U]=M$1(K)&&H?[K,N]:await Promise.all([vE0(X,G,"/_sandbox/git/status","GET",{userId:Y,projectRef:Q}),vE0(X,G,"/_sandbox/git/diff","GET",{userId:Y,projectRef:Q})]),w=await MV$(J,F,U);return Z.json(w,200,bY)}catch(W){let K=W instanceof Error?W.message:String(W);if(K==="SANDBOX_GONE")return Z.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,bY);return Z.json({error:K},502,bY)}}),$.post("/:virtualMcpId/:branch/git/judge-review",F7({maxSize:yV$,onError:(Z)=>Z.json({error:"Payload too large"},413,bY)}),async(Z)=>{let X=IC(Z);if(X instanceof Response)return X;let{claimName:G,userId:Y,projectRef:Q}=Z.get("vmClaim"),J=Z.var.studioContext;try{let W=await Z.req.json().catch(()=>({})),K=W.status,N=W.diff,H=N!=null&&typeof N.diffs==="object"&&N.diffs!==null,[F,U]=M$1(K)&&H?[K,N]:await Promise.all([vE0(X,G,"/_sandbox/git/status","GET",{userId:Y,projectRef:Q}),vE0(X,G,"/_sandbox/git/diff","GET",{userId:Y,projectRef:Q})]),w=await SV$(J,F,U,typeof W.language==="string"?W.language:void 0);return Z.json(w,200,bY)}catch(W){let K=W instanceof Error?W.message:String(W);if(K==="SANDBOX_GONE")return Z.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,bY);return Z.json({error:K},502,bY)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(Z)=>{let X=IC(Z);if(X instanceof Response)return X;let{claimName:G}=Z.get("vmClaim"),Y=Z.req.query("path");if(!Y||!Y.startsWith("/")||Y.startsWith("//")||Y.includes("..")||Y.includes("\\"))return Z.json({error:"Path not allowed"},403);let Q;try{Q=await X.getPreviewUrl(G)}catch{return Z.json({error:"Preview not available"},502)}if(!Q)return Z.json({error:"Preview not available"},502);let J=Q.replace(/\/+$/,""),W=_$1(`${J}${Y}`),K;try{K=await fetch(W?.url??`${J}${Y}`,{...W?{headers:{host:W.hostHeader}}:{}})}catch{return Z.json({error:"Preview unreachable"},502)}let N;try{N=await K.text()}catch{return Z.json({error:"Preview unreachable"},502)}return new Response(N,{status:K.status,headers:{"content-type":K.headers.get("content-type")??"application/json"}})}),$.post("/:virtualMcpId/:branch/preview-invoke",F7({maxSize:j06,onError:(Z)=>Z.json({error:"Payload too large"},413)}),async(Z)=>{let X=IC(Z);if(X instanceof Response)return X;let{claimName:G}=Z.get("vmClaim"),Y;try{Y=await X.getPreviewUrl(G)}catch{return Z.json({error:"Preview not available"},502)}if(!Y)return Z.json({error:"Preview not available"},502);let Q;try{Q=await Z.req.json()}catch{return Z.json({error:"Invalid JSON body"},400)}if(!Q||typeof Q!=="object"||Array.isArray(Q))return Z.json({error:"Invalid JSON body"},400);let J=CV$(Q);if(!J)return Z.json({error:"Invalid or missing __resolveType"},400);let W=_V$(Y,J.resolveType),K=_$1(W),N;try{N=await fetch(K?.url??W,{method:"POST",headers:{"content-type":"application/json",...K?{host:K.hostHeader}:{}},body:JSON.stringify(J.payload),signal:AbortSignal.timeout(30000)})}catch{return Z.json({error:"Preview unreachable"},502)}let H;try{H=await N.text()}catch{return Z.json({error:"Preview unreachable"},502)}return new Response(H,{status:N.status,headers:{"content-type":N.headers.get("content-type")??"application/json"}})}),$};var cV$=B(()=>{u8();BC();Ig();EV$();sN();jV$();F3();lw();PV$();TV$();Qn0();dn();V$1();VV$();vV$();xV$();E06=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;A06=LV$(async($,Z)=>{let X=$.var.studioContext;try{Y0(X)}catch{return $.json({error:"Unauthorized"},401)}let G=O1(X);if(!G)return $.json({error:"Unauthorized"},401);let Y;try{Y=e(X)}catch{return $.json({error:"Organization scope required"},403)}let Q=$.req.param("virtualMcpId"),J=$.req.param("branch");if(!Q||!J)return $.json({error:"virtualMcpId and branch are required"},400);try{z06(J)}catch(w){let O=w instanceof Error?w.message:String(w);return $.json({error:O},400)}let W=await X.storage.virtualMcps.findById(Q);if(!W||W.organization_id!==Y.id)return $.json({error:"Virtual MCP not found"},404);let K=Fn({orgId:Y.id,virtualMcpId:Q,branch:J}),N=await JH(X,J,G),H=zV$({userId:N,projectRef:K}),F=W.metadata??null,U;try{U=(await bX(X,{userId:N,branch:J,virtualMcpMetadata:F})).provider}catch{U=null}if(!U)return $.json({error:"No sandbox runner found"},404);return $.set("vmClaim",{claimName:H,callerUserId:G,runner:U,virtualMcpId:Q,branch:J,userId:N,projectRef:K,virtualMcpMetadata:F,connectionIds:W.connections?.map((w)=>w.connection_id)??[]}),Z()});_E0=new Map;bY={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};hV$=["clone","install","start"]});var lV$=($)=>{let Z=new D1;if(Z.use("*",OC),Z.route("/",tL0()),Z.route("/",XM$()),Z.route("/",YV$()),Z.route("/",XV$()),Z.route("/",kE0()),Z.route("/tools",FV$()),Z.route("/",KV$()),Z.route("/",gS$({kvStorage:$.kvStorage})),Z.route("/",xS$()),Z.route("/fs",oS$({getConnection:$.getNatsConnection})),Z.route("/sandbox",uV$()),Z.route("/",eS$()),Z.route("/deco-sites",rL0()),Z.route("/sso",cL0()),Z.route("/",SE0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",tq$()),$.mountDevAssets)Z.route("/dev-assets",aL0({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("/",ha1()),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",aS$()),Z.route("/mcp",AO0()),Z.route("/mcp/self",ME0()),Z.route("/mcp",IO0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var dV$=B(()=>{u8();m01();oq$();o01();sL0();gt();l01();yS$();hS$();rS$();ji();v01();qO0();D$1();sS$();$V$();GV$();QV$();NV$();E$1();UV$();z$1();TO0();cV$()});function q06($){return $.filter((Z)=>Z.vendors?.alias).map((Z)=>({name:Z.name,title:Z.title,description:Z.description,logo:Z.logo,category:Z.category,vendor:{alias:Z.vendors.alias,url:Z.vendors.url}}))}async function M06($,Z){let X=await fetch(`${$}/rest/v1/apps?select=name,title,description,logo,category,vendors(alias,url)`,{headers:{apikey:Z,Authorization:`Bearer ${Z}`,Accept:"application/json"},signal:AbortSignal.timeout(I06)});if(!X.ok){let G=await X.text().catch(()=>X.statusText);throw console.error(`[deco-apps] Supabase error (${X.status}): ${G.slice(0,200)}`),Error(`External service error (${X.status})`)}return await X.json()}var I06=1e4,k06=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},mV$=()=>{let $=new D1;return $.use("*",k06),$.get("/",async(Z)=>{let X=m0(),G=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!G||!Y)return Z.json({apps:[]});try{let Q=await M06(G,Y);return Z.json({apps:q06(Q)})}catch(Q){return console.error("[deco-apps] GET error:",Q),Z.json({error:"Failed to fetch apps"},502)}}),$};var iV$=B(()=>{u8();V$()});import{z as I1}from"zod";function jK($,Z="invalid_request_error",X=null,G=null){return{error:{message:$,type:Z,param:X,code:G}}}function g06($){if(!$)return null;let Z=$.indexOf(":");if(Z===-1)return{credentialId:null,modelId:$};let X=$.substring(0,Z),G=$.substring(Z+1);if(!X||!G)return null;return{credentialId:X,modelId:G}}function h06($,Z,X){try{return JSON.parse($)}catch{throw new tV$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function u06($){let Z={};for(let X of $)if(X.role==="assistant"&&X.tool_calls)for(let G of X.tool_calls)Z[G.id]=G.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:h06(Y.function.arguments,Y.id,Y.function.name)}))};return{role:"assistant",content:X.content??""};case"tool":let G=Z[X.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:X.tool_call_id,toolName:G,output:{type:"text",value:X.content}}]}}})}function c06($){let Z=$.map((X)=>{let G=X.function.parameters?OY(X.function.parameters):OY({type:"object",properties:{}});return[X.function.name,_$({description:X.function.description,inputSchema:G})]});return Object.fromEntries(Z)}function l06($){if(!$)return;return{openai:{response_format:$}}}function d06(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function nV$($,Z,X,G,Y,Q){let J={model:$,messages:Z,tools:X,temperature:G.temperature,maxTokens:G.max_tokens,topP:G.top_p,frequencyPenalty:G.frequency_penalty,presencePenalty:G.presence_penalty,stopSequences:G.stop?Array.isArray(G.stop)?G.stop:[G.stop]:void 0,abortSignal:Q};return Y?{...J,providerOptions:Y}:J}function pV$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var S06=256,V06,C06,_06,v06,b06,f06,x06,y06,tV$,oV$,rV$;var aV$=B(()=>{S4();u8();Ig();zH();V06=I1.object({type:I1.literal("function"),function:I1.object({name:I1.string(),description:I1.string().optional(),parameters:I1.record(I1.string(),I1.unknown()).optional()})}),C06=I1.object({id:I1.string(),type:I1.literal("function"),function:I1.object({name:I1.string(),arguments:I1.string()})}),_06=I1.discriminatedUnion("role",[I1.object({role:I1.literal("system"),content:I1.string(),name:I1.string().optional()}),I1.object({role:I1.literal("user"),content:I1.union([I1.string(),I1.array(I1.union([I1.object({type:I1.literal("text"),text:I1.string()}),I1.object({type:I1.literal("image_url"),image_url:I1.object({url:I1.string(),detail:I1.string().optional()})})]))]),name:I1.string().optional()}),I1.object({role:I1.literal("assistant"),content:I1.string().nullable().optional(),name:I1.string().optional(),tool_calls:I1.array(C06).optional()}),I1.object({role:I1.literal("tool"),content:I1.string(),tool_call_id:I1.string()})]),v06=I1.object({type:I1.literal("text")}),b06=I1.object({type:I1.literal("json_object")}),f06=I1.object({type:I1.literal("json_schema"),json_schema:I1.object({name:I1.string(),description:I1.string().optional(),schema:I1.record(I1.string(),I1.unknown()),strict:I1.boolean().optional()})}),x06=I1.union([v06,b06,f06]),y06=I1.object({model:I1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:I1.array(_06),stream:I1.boolean().optional().default(!1),temperature:I1.number().min(0).max(2).optional(),max_tokens:I1.number().positive().optional(),top_p:I1.number().min(0).max(1).optional(),frequency_penalty:I1.number().min(-2).max(2).optional(),presence_penalty:I1.number().min(-2).max(2).optional(),stop:I1.union([I1.string(),I1.array(I1.string())]).optional(),tools:I1.array(V06).optional(),tool_choice:I1.union([I1.literal("auto"),I1.literal("none"),I1.literal("required"),I1.object({type:I1.literal("function"),function:I1.object({name:I1.string()})})]).optional(),response_format:x06.optional(),user:I1.string().optional()});tV$=class tV$ extends Error{constructor($){super($);this.name="MessageConversionError"}};oV$=new D1;oV$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(jK("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(jK("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(jK("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let G=await $.req.json(),Y=y06.safeParse(G);if(!Y.success){let L=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(jK(`Invalid request: ${L.message}`,"invalid_request_error",L.path.length>0?L.path.join("."):null),400)}let Q=Y.data,J=g06(Q.model);if(!J)return $.json(jK("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((z)=>uB(z.providerId));if(!E)return $.json(jK("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 N;try{N=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(jK(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let H=N.aiSdk.languageModel(K),F=u06(Q.messages),U=Q.tools?c06(Q.tools):void 0,w=l06(Q.response_format),O=d06(),D=Math.floor(Date.now()/1000);if(Q.stream)return uH($,async(L)=>{let E=nV$(H,F,U,Q,w,$.req.raw.signal);try{let z=qw(E),j=!1,A=0,P="",q=async()=>{if(P.length===0)return;let S=P;P="",await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Q.model,choices:[{index:0,delta:{content:S},finish_reason:null}]})})};for await(let S of z.fullStream){if(!j&&(S.type==="text-delta"||S.type==="tool-call"))await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Q.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),j=!0;if(S.type==="text-delta"){if(P+=S.text,P.length>=S06)await q()}else if(S.type==="tool-call"){await q();let M=A++;await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Q.model,choices:[{index:0,delta:{tool_calls:[{index:M,id:S.toolCallId,type:"function",function:{name:S.toolName,arguments:JSON.stringify(S.input)}}]},finish_reason:null}]})})}else if(S.type==="finish")await q(),await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Q.model,choices:[{index:0,delta:{},finish_reason:pV$(S.finishReason)}],usage:S.totalUsage?{prompt_tokens:S.totalUsage.inputTokens??0,completion_tokens:S.totalUsage.outputTokens??0,total_tokens:S.totalUsage.totalTokens??0}:void 0})})}await q(),await L.writeSSE({data:"[DONE]"})}catch(z){let j=z;console.error("[openai-compat:stream] Error:",j.message),await L.writeSSE({data:JSON.stringify({error:{message:j.message,type:"server_error"}})})}});else{let L=nV$(H,F,U,Q,w,$.req.raw.signal),E=await Rw(L),z={role:"assistant",content:E.text||null};if(E.toolCalls&&E.toolCalls.length>0)z.tool_calls=E.toolCalls.map((j)=>({id:j.toolCallId,type:"function",function:{name:j.toolName,arguments:JSON.stringify("input"in j?j.input:{})}})),z.content=null;return $.json({id:O,object:"chat.completion",created:D,model:Q.model,choices:[{index:0,message:z,finish_reason:pV$(E.finishReason)}],usage:{prompt_tokens:E.usage?.inputTokens??0,completion_tokens:E.usage?.outputTokens??0,total_tokens:E.usage?.totalTokens??0}})}}catch(G){let Y=G;if(Y.name==="AbortError")return $.json(jK("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(jK(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(jK(Y.message,"server_error"),500)}});rV$=oV$});var eV$;var sV$=B(()=>{eV$={name:"decocms",version:"4.175.0",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",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 n06(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??i06}}var $C$,i06="https://ph.studio.decocms.com",ZC$;var XC$=B(()=>{u8();BC0();PV();OZ();V$();k01();sV$();$C$=new D1;$C$.get("/",($)=>{let Z={version:eV$.version,theme:oq1(),...iB().logo&&{logo:iB().logo},...rW()&&{internalUrl:aI1()},...m0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!m0().firecrawlApiKey,auth:Nq$(),posthog:n06(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!rW()&&m0().sandboxProviderKind==="agent-sandbox"}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});ZC$=$C$});function Mg($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function b$1($){return(Mg($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function YC$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(Mg($))}&sz=${Z}`}function GC$($,Z){let X=$.trim();if(X.length<=Z)return X;let G=X.slice(0,Z-1),Y=G.lastIndexOf(" ");return`${(Y>Z*0.6?G.slice(0,Y):G).trimEnd()}\u2026`}function QC$($){let{brand:Z,domain:X,score:G,verdict:Y}=$,Q=typeof G==="number"?`${Z} commerce report \u2014 ${Math.round(G)}/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()?GC$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):GC$(`How does ${X} really perform? ${J}`,200);return{title:Q,description:W}}import{z as u0}from"zod";var qC,p06,t06,o06,r06,JC$;var WC$=B(()=>{qC=u0.enum(["good","bad","neutral"]),p06=u0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((X)=>X!==null&&typeof X!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},u0.object({kind:u0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:u0.coerce.string().optional(),tone:qC.optional(),muted:u0.boolean().optional(),delta:u0.coerce.string().optional(),deltaDir:u0.enum(["up","down","neutral"]).optional(),points:u0.array(u0.coerce.number()).optional(),label:u0.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 $})),t06=u0.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},u0.array(p06)),o06={key:u0.coerce.string(),title:u0.coerce.string(),eyebrow:u0.coerce.string().optional(),headline:u0.coerce.string(),annotation:u0.coerce.string().optional(),methodology:u0.coerce.string().optional(),sources:u0.array(u0.object({name:u0.coerce.string(),logoUrl:u0.coerce.string()})).optional()},r06=u0.discriminatedUnion("template",[u0.object({template:u0.literal("cover"),score:u0.object({value:u0.coerce.number(),max:u0.coerce.number().optional(),grade:u0.coerce.string().optional(),label:u0.coerce.string().optional()}).optional(),brandImage:u0.coerce.string().optional(),screenshot:u0.coerce.string().optional(),mobileScreenshot:u0.coerce.string().optional()}),u0.object({template:u0.literal("cta"),ctaUrl:u0.coerce.string().optional(),ctaLabel:u0.coerce.string().optional(),bullets:u0.array(u0.coerce.string()).optional()}),u0.object({template:u0.literal("series"),points:u0.array(u0.coerce.number()).min(2),xLabels:u0.array(u0.coerce.string()).min(1),unit:u0.coerce.string().optional(),callout:u0.object({index:u0.coerce.number(),value:u0.coerce.string(),tone:qC.optional()})}),u0.object({template:u0.literal("threshold"),value:u0.coerce.string().default(""),metricLabel:u0.coerce.string().optional(),ratio:u0.coerce.number(),thresholdRatio:u0.coerce.number().optional(),thresholdLabel:u0.coerce.string().default(""),tone:qC.optional()}),u0.object({template:u0.literal("stats"),stats:u0.array(u0.object({value:u0.coerce.string(),label:u0.coerce.string(),tone:qC.optional()})).min(1)}),u0.object({template:u0.literal("bars"),items:u0.array(u0.object({value:u0.coerce.string(),label:u0.coerce.string(),ratio:u0.coerce.number(),tone:qC.optional()})).min(1)}),u0.object({template:u0.literal("gauges"),gauges:u0.array(u0.object({label:u0.coerce.string(),value:u0.coerce.string(),status:u0.enum(["good","warn","bad"]).catch("warn"),caption:u0.coerce.string().optional(),ratio:u0.coerce.number().optional()})).min(1)}),u0.object({template:u0.literal("checklist"),checks:u0.array(u0.object({label:u0.coerce.string(),status:u0.enum(["pass","fail","warn"]).catch("fail"),value:u0.coerce.string().optional()})).min(1)}),u0.object({template:u0.literal("table"),columns:u0.array(u0.object({label:u0.coerce.string(),align:u0.enum(["left","right"]).optional()})).min(1),rows:u0.array(t06).min(1),highlightRow:u0.coerce.number().optional()}),u0.object({template:u0.literal("products"),products:u0.array(u0.object({name:u0.coerce.string(),price:u0.coerce.string().optional(),image:u0.coerce.string().optional(),url:u0.coerce.string().optional()})).min(1)}),u0.object({template:u0.literal("list"),entries:u0.array(u0.object({label:u0.coerce.string(),severity:u0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:u0.coerce.number().optional()}),u0.object({template:u0.literal("keywords"),volumeLabel:u0.coerce.string().optional(),keywords:u0.array(u0.object({term:u0.coerce.string(),volume:u0.coerce.string(),position:u0.coerce.number().catch(0)})).min(1)}),u0.object({template:u0.literal("competitor"),metricLabel:u0.coerce.string().optional(),competitors:u0.array(u0.object({name:u0.coerce.string(),value:u0.coerce.string(),tone:qC.optional(),isYou:u0.boolean().optional()})).min(1)}),u0.object({template:u0.literal("scorecard"),rivalLabel:u0.coerce.string().optional(),dimensions:u0.array(u0.object({label:u0.coerce.string(),you:u0.coerce.string(),rival:u0.coerce.string().optional(),rivalName:u0.coerce.string().optional(),tone:qC.optional()})).min(1)})]),JC$=u0.object({...o06,template:r06})});function bE0($){let Z=[],X=[...$.sections].sort((G,Y)=>G.position-Y.position).map((G)=>{let Y=JC$.safeParse(G.props);if(Y.success)return Y.data;let Q=Y.error.issues[0];return Z.push({section_type:G.section_type,position:G.position,reason:Q?`${Q.path.join(".")||"(root)"}: ${Q.message}`:"contract violation"}),null}).filter((G)=>G!==null);return{deck:{meta:{...$.meta,scores:$.summary?.scores},slides:X},drops:Z}}var f$1=B(()=>{WC$()});import{join as KC$}from"path";async function s06($){try{let Z=await fetch(`${KW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(a06)});if(!Z.ok)return null;let X=await Z.json(),{deck:G}=bE0(X);if(!G.slides.length)return null;let Y=G.slides.find((W)=>W.template.template==="cover"),Q=Y?.template,J=Q&&Q.template==="cover"?Q:void 0;return{brand:G.meta.brand?.trim()||b$1($),score:G.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function fY($){return $.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function e06($,Z){let X=Mg($),G=Z?.brand?.trim()||b$1(X),Y=YC$(X,128),J=`${(m0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=QC$({brand:G,domain:X,score:Z?.score,verdict:Z?.verdict}),N=`${J}/og.png`,H=`${G} commerce report by decocms`;return[`<title>${fY(W)}</title>`,`<meta name="description" content="${fY(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="${fY(W)}" />`,`<meta property="og:description" content="${fY(K)}" />`,`<meta property="og:url" content="${fY(J)}" />`,`<meta property="og:image" content="${fY(N)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${fY(H)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${fY(W)}" />`,`<meta name="twitter:description" content="${fY(K)}" />`,`<meta name="twitter:image" content="${fY(N)}" />`,`<meta name="twitter:image:alt" content="${fY(H)}" />`,`<link rel="canonical" href="${fY(J)}" />`,`<link rel="icon" href="${fY(Y)}" sizes="any" />`].join(`
|
|
2723
|
+
Respond with the structured verdict and a short reason.`,kV$;var VV$=B(()=>{S4();nw();V$1();U06=C$1.object({requiresReview:C$1.boolean().describe("true if the changes should go through pull-request review"),reason:C$1.string().describe("One short sentence explaining the decision (max ~120 chars)")});kV$={requiresReview:!1,reason:""}});function D06($){if(!$||$.includes(".."))return!1;return B06.test($)}function CV$($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!D06(Z))return null;let{__resolveType:X,...G}=$;return{resolveType:Z,payload:G}}function _V$($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var B06;var vV$=B(()=>{B06=/^[\w./@-]+$/});function _$1($){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 bV$($,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 fV$($,Z,X,G){if(!G.connectionId)throw new qg("Push requires a connected GitHub account. Connect mcp-github for this project and restart the sandbox.");let Y=$.organization?.id;if(!Y)throw new qg(u7);await jx({ctx:$,connectionId:G.connectionId,organizationId:Y,forceRefresh:!0,onLegacyMintError:(H)=>{let F=H instanceof Error?H.message:u7;throw new qg(F)}});let{cloneUrl:Q,gitUserName:J,gitUserEmail:W}=await kw(G.connectionId,G.owner,G.name,$.db,$.vault),K=CE0($),N=await Z.proxyDaemonRequest(X,"/_sandbox/config",{method:"PUT",headers:new Headers({"content-type":"application/json"}),body:JSON.stringify({git:{repository:{cloneUrl:Q},identity:{userName:J,userEmail:W}},...K?{operator:K}:{}})});if(!N.ok){let H=await iw(N,L06).catch(()=>N.statusText);throw Error(`Failed to refresh sandbox git credentials (${N.status}): ${H}`)}}var L06=10485760,qg;var xV$=B(()=>{Fw();T$1();mn();Dn();qg=class qg extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function z06($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!E06.test(Z))throw Error(`Invalid branch name: ${$}`)}function RC($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(P06)])}function IC($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}function v$1($,Z){let G=(_E0.get($)??Promise.resolve()).catch(()=>{}).then(Z),Y=G.catch(()=>{});return _E0.set($,Y),Y.finally(()=>{if(_E0.get($)===Y)_E0.delete($)}),G}async function SZ($,Z,X){let G=IC($);if(G instanceof Response)return G;let{claimName:Y,userId:Q,projectRef:J}=$.get("vmClaim"),W=X?.method??"POST",K=null,N=new Headers;if(X?.jsonBody!==void 0)K=X.jsonBody,N.set("content-type","application/json");else if(X?.forwardJsonBody)K=await $.req.text(),N.set("content-type","application/json");let H=X?.signal,F={method:W,headers:N,body:K,...H?{signal:H}:{}},U=async()=>{let w=await G.proxyDaemonRequest(Y,Z,F);if(X?.map404to410&&w.status===404){try{await w.body?.cancel()}catch{}if(await G.adoptLiveClaim?.({userId:Q,projectRef:J},Y))w=await G.proxyDaemonRequest(Y,Z,F);if(w.status===404){try{await w.body?.cancel()}catch{}return new Response(JSON.stringify({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."}),{status:410,headers:{"content-type":"application/json",...bY}})}}let O=await w.text(),D=X?.redactRepoDirUnlessDesktop&&G.kind!=="user-desktop"?T06(O):O,L=w.headers.get("content-type")??"application/json";return new Response(D,{status:w.status,headers:{"content-type":L,...bY}})};try{if(H){let w=U();return w.catch(()=>{}),await Promise.race([w,new Promise((D,L)=>{if(H.aborted)return L(H.reason);H.addEventListener("abort",()=>L(H.reason),{once:!0})})])}return await U()}catch(w){let O=w instanceof Error?w.message:String(w);return $.json({error:`Daemon unreachable: ${O}`},502)}}function T06($){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 vE0($,Z,X,G="GET",Y){let Q=await $.proxyDaemonRequest(Z,X,{method:G,headers:new Headers,body:null});if(Q.status===404&&Y){try{await Q.body?.cancel()}catch{}if(await $.adoptLiveClaim?.(Y,Z))Q=await $.proxyDaemonRequest(Z,X,{method:G,headers:new Headers,body:null})}if(Q.status===404){try{await Q.body?.cancel()}catch{}throw Error("SANDBOX_GONE")}let J=await Q.text();if(!Q.ok)try{let W=JSON.parse(J);throw Error(W.error??`Daemon error (${Q.status})`)}catch(W){if(W instanceof Error&&W.message!==J)throw W;throw Error(`Daemon error (${Q.status})`)}return JSON.parse(J)}function R06($){return hV$.includes($)}var E06,yV$=524288,j06=65536,P06=1e4,gV$=2000,A06,_E0,bY,hV$,uV$=()=>{let $=new D1;return $.use("/:virtualMcpId/:branch/*",A06),$.post("/:virtualMcpId/:branch/write",(Z)=>SZ(Z,"/_sandbox/write",{forwardJsonBody:!0,signal:RC(Z)})),$.post("/:virtualMcpId/:branch/unlink",(Z)=>SZ(Z,"/_sandbox/unlink",{forwardJsonBody:!0,signal:RC(Z)})),$.post("/:virtualMcpId/:branch/mkdir",(Z)=>SZ(Z,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:RC(Z)})),$.post("/:virtualMcpId/:branch/rename",(Z)=>SZ(Z,"/_sandbox/rename",{forwardJsonBody:!0,signal:RC(Z)})),$.post("/:virtualMcpId/:branch/read",(Z)=>SZ(Z,"/_sandbox/read",{forwardJsonBody:!0,signal:RC(Z)})),$.post("/:virtualMcpId/:branch/glob",(Z)=>SZ(Z,"/_sandbox/glob",{forwardJsonBody:!0,signal:RC(Z)})),$.post("/:virtualMcpId/:branch/grep",(Z)=>SZ(Z,"/_sandbox/grep",{forwardJsonBody:!0,signal:RC(Z)})),$.post("/:virtualMcpId/:branch/exec/:script",async(Z)=>{let X=Z.req.param("script");if(!X)return Z.json({error:"missing script name"},400);return SZ(Z,`/_sandbox/exec/${encodeURIComponent(X)}`)}),$.post("/:virtualMcpId/:branch/exec/:script/kill",async(Z)=>{let X=Z.req.param("script");if(!X)return Z.json({error:"missing script name"},400);return SZ(Z,`/_sandbox/exec/${encodeURIComponent(X)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(Z)=>SZ(Z,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDirUnlessDesktop:!0})),$.put("/:virtualMcpId/:branch/config",(Z)=>SZ(Z,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(Z)=>{let X=Z.req.param("step");if(!X||!R06(X))return Z.json({error:`step must be one of: ${hV$.join(", ")}`},400);if(X==="start"){let G=Z.get("vmClaim");if(G.runner){let Y=e(Z.var.studioContext),Q=lU0(G.virtualMcpMetadata);try{await dU0({ctx:Z.var.studioContext,runner:G.runner,handle:G.claimName,orgId:Y.id,userId:G.callerUserId,entries:Q})}catch(J){let W=J instanceof Error?J.message:String(J);return Z.json({error:`Failed to push env to daemon: ${W}`},502)}}}return SZ(Z,`/_sandbox/setup/${X}`,{signal:Z.req.raw.signal,map404to410:!0})}),$.get("/:virtualMcpId/:branch/events",(Z)=>{let X=Z.get("vmClaim");if(!X.runner)return uH(Z,async(G)=>{await G.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:"No sandbox runner configured on this studio instance."})})});return AV$(Z,{ctx:Z.var.studioContext,claimName:X.claimName,runner:X.runner,virtualMcpId:X.virtualMcpId,branch:X.branch,userId:X.userId,projectRef:X.projectRef,virtualMcpMetadata:X.virtualMcpMetadata})}),$.get("/:virtualMcpId/:branch/git/status",(Z)=>SZ(Z,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([Z.req.raw.signal,AbortSignal.timeout(gV$)])})),$.post("/:virtualMcpId/:branch/git/status",(Z)=>SZ(Z,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([Z.req.raw.signal,AbortSignal.timeout(gV$)])})),$.post("/:virtualMcpId/:branch/git/diff",(Z)=>SZ(Z,"/_sandbox/git/diff",{forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/git/publish",async(Z)=>{let X=IC(Z);if(X instanceof Response)return X;let{claimName:G,virtualMcpMetadata:Y,connectionIds:Q}=Z.get("vmClaim"),J=Z.var.studioContext;return v$1(G,async()=>{try{await R$1(J,X,G);let W=bV$(Y,Q);if(W)await fV$(J,X,G,W)}catch(W){if(W instanceof qg)return Z.json({error:W.message},403,bY);let K=W instanceof Error?W.message:String(W);return Z.json({error:K},502,bY)}return SZ(Z,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/discard",(Z)=>{let{claimName:X}=Z.get("vmClaim");return v$1(X,()=>SZ(Z,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0}))}),$.post("/:virtualMcpId/:branch/git/rebase",async(Z)=>{let X=IC(Z);if(X instanceof Response)return X;let{claimName:G}=Z.get("vmClaim"),Y=Z.var.studioContext;return v$1(G,async()=>{try{await R$1(Y,X,G)}catch(Q){let J=Q instanceof Error?Q.message:String(Q);return Z.json({error:J},502,bY)}return SZ(Z,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",F7({maxSize:yV$,onError:(Z)=>Z.json({error:"Payload too large"},413,bY)}),async(Z)=>{let X=IC(Z);if(X instanceof Response)return X;let{claimName:G,userId:Y,projectRef:Q}=Z.get("vmClaim"),J=Z.var.studioContext;try{let W=await Z.req.json().catch(()=>({})),K=W.status,N=W.diff,H=N!=null&&typeof N.diffs==="object"&&N.diffs!==null,[F,U]=M$1(K)&&H?[K,N]:await Promise.all([vE0(X,G,"/_sandbox/git/status","GET",{userId:Y,projectRef:Q}),vE0(X,G,"/_sandbox/git/diff","GET",{userId:Y,projectRef:Q})]),w=await MV$(J,F,U);return Z.json(w,200,bY)}catch(W){let K=W instanceof Error?W.message:String(W);if(K==="SANDBOX_GONE")return Z.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,bY);return Z.json({error:K},502,bY)}}),$.post("/:virtualMcpId/:branch/git/judge-review",F7({maxSize:yV$,onError:(Z)=>Z.json({error:"Payload too large"},413,bY)}),async(Z)=>{let X=IC(Z);if(X instanceof Response)return X;let{claimName:G,userId:Y,projectRef:Q}=Z.get("vmClaim"),J=Z.var.studioContext;try{let W=await Z.req.json().catch(()=>({})),K=W.status,N=W.diff,H=N!=null&&typeof N.diffs==="object"&&N.diffs!==null,[F,U]=M$1(K)&&H?[K,N]:await Promise.all([vE0(X,G,"/_sandbox/git/status","GET",{userId:Y,projectRef:Q}),vE0(X,G,"/_sandbox/git/diff","GET",{userId:Y,projectRef:Q})]),w=await SV$(J,F,U,typeof W.language==="string"?W.language:void 0);return Z.json(w,200,bY)}catch(W){let K=W instanceof Error?W.message:String(W);if(K==="SANDBOX_GONE")return Z.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,bY);return Z.json({error:K},502,bY)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(Z)=>{let X=IC(Z);if(X instanceof Response)return X;let{claimName:G}=Z.get("vmClaim"),Y=Z.req.query("path");if(!Y||!Y.startsWith("/")||Y.startsWith("//")||Y.includes("..")||Y.includes("\\"))return Z.json({error:"Path not allowed"},403);let Q;try{Q=await X.getPreviewUrl(G)}catch{return Z.json({error:"Preview not available"},502)}if(!Q)return Z.json({error:"Preview not available"},502);let J=Q.replace(/\/+$/,""),W=_$1(`${J}${Y}`),K;try{K=await fetch(W?.url??`${J}${Y}`,{...W?{headers:{host:W.hostHeader}}:{}})}catch{return Z.json({error:"Preview unreachable"},502)}let N;try{N=await K.text()}catch{return Z.json({error:"Preview unreachable"},502)}return new Response(N,{status:K.status,headers:{"content-type":K.headers.get("content-type")??"application/json"}})}),$.post("/:virtualMcpId/:branch/preview-invoke",F7({maxSize:j06,onError:(Z)=>Z.json({error:"Payload too large"},413)}),async(Z)=>{let X=IC(Z);if(X instanceof Response)return X;let{claimName:G}=Z.get("vmClaim"),Y;try{Y=await X.getPreviewUrl(G)}catch{return Z.json({error:"Preview not available"},502)}if(!Y)return Z.json({error:"Preview not available"},502);let Q;try{Q=await Z.req.json()}catch{return Z.json({error:"Invalid JSON body"},400)}if(!Q||typeof Q!=="object"||Array.isArray(Q))return Z.json({error:"Invalid JSON body"},400);let J=CV$(Q);if(!J)return Z.json({error:"Invalid or missing __resolveType"},400);let W=_V$(Y,J.resolveType),K=_$1(W),N;try{N=await fetch(K?.url??W,{method:"POST",headers:{"content-type":"application/json",...K?{host:K.hostHeader}:{}},body:JSON.stringify(J.payload),signal:AbortSignal.timeout(30000)})}catch{return Z.json({error:"Preview unreachable"},502)}let H;try{H=await N.text()}catch{return Z.json({error:"Preview unreachable"},502)}return new Response(H,{status:N.status,headers:{"content-type":N.headers.get("content-type")??"application/json"}})}),$};var cV$=B(()=>{u8();BC();Ig();EV$();sN();jV$();F3();lw();PV$();TV$();Qn0();dn();V$1();VV$();vV$();xV$();E06=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;A06=LV$(async($,Z)=>{let X=$.var.studioContext;try{Y0(X)}catch{return $.json({error:"Unauthorized"},401)}let G=O1(X);if(!G)return $.json({error:"Unauthorized"},401);let Y;try{Y=e(X)}catch{return $.json({error:"Organization scope required"},403)}let Q=$.req.param("virtualMcpId"),J=$.req.param("branch");if(!Q||!J)return $.json({error:"virtualMcpId and branch are required"},400);try{z06(J)}catch(w){let O=w instanceof Error?w.message:String(w);return $.json({error:O},400)}let W=await X.storage.virtualMcps.findById(Q);if(!W||W.organization_id!==Y.id)return $.json({error:"Virtual MCP not found"},404);let K=Fn({orgId:Y.id,virtualMcpId:Q,branch:J}),N=await JH(X,J,G),H=zV$({userId:N,projectRef:K}),F=W.metadata??null,U;try{U=(await bX(X,{userId:N,branch:J,virtualMcpMetadata:F})).provider}catch{U=null}if(!U)return $.json({error:"No sandbox runner found"},404);return $.set("vmClaim",{claimName:H,callerUserId:G,runner:U,virtualMcpId:Q,branch:J,userId:N,projectRef:K,virtualMcpMetadata:F,connectionIds:W.connections?.map((w)=>w.connection_id)??[]}),Z()});_E0=new Map;bY={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};hV$=["clone","install","start"]});var lV$=($)=>{let Z=new D1;if(Z.use("*",OC),Z.route("/",tL0()),Z.route("/",XM$()),Z.route("/",YV$()),Z.route("/",XV$()),Z.route("/",kE0()),Z.route("/tools",FV$()),Z.route("/",KV$()),Z.route("/",gS$({kvStorage:$.kvStorage})),Z.route("/",xS$()),Z.route("/fs",oS$({getConnection:$.getNatsConnection})),Z.route("/sandbox",uV$()),Z.route("/",eS$()),Z.route("/deco-sites",rL0()),Z.route("/sso",cL0()),Z.route("/",SE0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",tq$()),$.mountDevAssets)Z.route("/dev-assets",aL0({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("/",ha1()),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",aS$()),Z.route("/mcp",AO0()),Z.route("/mcp/self",ME0()),Z.route("/mcp",IO0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var dV$=B(()=>{u8();m01();oq$();o01();sL0();gt();l01();yS$();hS$();rS$();ji();v01();qO0();D$1();sS$();$V$();GV$();QV$();NV$();E$1();UV$();z$1();TO0();cV$()});function q06($){return $.filter((Z)=>Z.vendors?.alias).map((Z)=>({name:Z.name,title:Z.title,description:Z.description,logo:Z.logo,category:Z.category,vendor:{alias:Z.vendors.alias,url:Z.vendors.url}}))}async function M06($,Z){let X=await fetch(`${$}/rest/v1/apps?select=name,title,description,logo,category,vendors(alias,url)`,{headers:{apikey:Z,Authorization:`Bearer ${Z}`,Accept:"application/json"},signal:AbortSignal.timeout(I06)});if(!X.ok){let G=await X.text().catch(()=>X.statusText);throw console.error(`[deco-apps] Supabase error (${X.status}): ${G.slice(0,200)}`),Error(`External service error (${X.status})`)}return await X.json()}var I06=1e4,k06=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},mV$=()=>{let $=new D1;return $.use("*",k06),$.get("/",async(Z)=>{let X=m0(),G=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!G||!Y)return Z.json({apps:[]});try{let Q=await M06(G,Y);return Z.json({apps:q06(Q)})}catch(Q){return console.error("[deco-apps] GET error:",Q),Z.json({error:"Failed to fetch apps"},502)}}),$};var iV$=B(()=>{u8();V$()});import{z as I1}from"zod";function jK($,Z="invalid_request_error",X=null,G=null){return{error:{message:$,type:Z,param:X,code:G}}}function g06($){if(!$)return null;let Z=$.indexOf(":");if(Z===-1)return{credentialId:null,modelId:$};let X=$.substring(0,Z),G=$.substring(Z+1);if(!X||!G)return null;return{credentialId:X,modelId:G}}function h06($,Z,X){try{return JSON.parse($)}catch{throw new tV$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function u06($){let Z={};for(let X of $)if(X.role==="assistant"&&X.tool_calls)for(let G of X.tool_calls)Z[G.id]=G.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:h06(Y.function.arguments,Y.id,Y.function.name)}))};return{role:"assistant",content:X.content??""};case"tool":let G=Z[X.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:X.tool_call_id,toolName:G,output:{type:"text",value:X.content}}]}}})}function c06($){let Z=$.map((X)=>{let G=X.function.parameters?OY(X.function.parameters):OY({type:"object",properties:{}});return[X.function.name,_$({description:X.function.description,inputSchema:G})]});return Object.fromEntries(Z)}function l06($){if(!$)return;return{openai:{response_format:$}}}function d06(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function nV$($,Z,X,G,Y,Q){let J={model:$,messages:Z,tools:X,temperature:G.temperature,maxTokens:G.max_tokens,topP:G.top_p,frequencyPenalty:G.frequency_penalty,presencePenalty:G.presence_penalty,stopSequences:G.stop?Array.isArray(G.stop)?G.stop:[G.stop]:void 0,abortSignal:Q};return Y?{...J,providerOptions:Y}:J}function pV$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var S06=256,V06,C06,_06,v06,b06,f06,x06,y06,tV$,oV$,rV$;var aV$=B(()=>{S4();u8();Ig();zH();V06=I1.object({type:I1.literal("function"),function:I1.object({name:I1.string(),description:I1.string().optional(),parameters:I1.record(I1.string(),I1.unknown()).optional()})}),C06=I1.object({id:I1.string(),type:I1.literal("function"),function:I1.object({name:I1.string(),arguments:I1.string()})}),_06=I1.discriminatedUnion("role",[I1.object({role:I1.literal("system"),content:I1.string(),name:I1.string().optional()}),I1.object({role:I1.literal("user"),content:I1.union([I1.string(),I1.array(I1.union([I1.object({type:I1.literal("text"),text:I1.string()}),I1.object({type:I1.literal("image_url"),image_url:I1.object({url:I1.string(),detail:I1.string().optional()})})]))]),name:I1.string().optional()}),I1.object({role:I1.literal("assistant"),content:I1.string().nullable().optional(),name:I1.string().optional(),tool_calls:I1.array(C06).optional()}),I1.object({role:I1.literal("tool"),content:I1.string(),tool_call_id:I1.string()})]),v06=I1.object({type:I1.literal("text")}),b06=I1.object({type:I1.literal("json_object")}),f06=I1.object({type:I1.literal("json_schema"),json_schema:I1.object({name:I1.string(),description:I1.string().optional(),schema:I1.record(I1.string(),I1.unknown()),strict:I1.boolean().optional()})}),x06=I1.union([v06,b06,f06]),y06=I1.object({model:I1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:I1.array(_06),stream:I1.boolean().optional().default(!1),temperature:I1.number().min(0).max(2).optional(),max_tokens:I1.number().positive().optional(),top_p:I1.number().min(0).max(1).optional(),frequency_penalty:I1.number().min(-2).max(2).optional(),presence_penalty:I1.number().min(-2).max(2).optional(),stop:I1.union([I1.string(),I1.array(I1.string())]).optional(),tools:I1.array(V06).optional(),tool_choice:I1.union([I1.literal("auto"),I1.literal("none"),I1.literal("required"),I1.object({type:I1.literal("function"),function:I1.object({name:I1.string()})})]).optional(),response_format:x06.optional(),user:I1.string().optional()});tV$=class tV$ extends Error{constructor($){super($);this.name="MessageConversionError"}};oV$=new D1;oV$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(jK("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(jK("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(jK("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let G=await $.req.json(),Y=y06.safeParse(G);if(!Y.success){let L=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(jK(`Invalid request: ${L.message}`,"invalid_request_error",L.path.length>0?L.path.join("."):null),400)}let Q=Y.data,J=g06(Q.model);if(!J)return $.json(jK("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((z)=>uB(z.providerId));if(!E)return $.json(jK("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 N;try{N=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(jK(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let H=N.aiSdk.languageModel(K),F=u06(Q.messages),U=Q.tools?c06(Q.tools):void 0,w=l06(Q.response_format),O=d06(),D=Math.floor(Date.now()/1000);if(Q.stream)return uH($,async(L)=>{let E=nV$(H,F,U,Q,w,$.req.raw.signal);try{let z=qw(E),j=!1,A=0,P="",q=async()=>{if(P.length===0)return;let S=P;P="",await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Q.model,choices:[{index:0,delta:{content:S},finish_reason:null}]})})};for await(let S of z.fullStream){if(!j&&(S.type==="text-delta"||S.type==="tool-call"))await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Q.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),j=!0;if(S.type==="text-delta"){if(P+=S.text,P.length>=S06)await q()}else if(S.type==="tool-call"){await q();let M=A++;await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Q.model,choices:[{index:0,delta:{tool_calls:[{index:M,id:S.toolCallId,type:"function",function:{name:S.toolName,arguments:JSON.stringify(S.input)}}]},finish_reason:null}]})})}else if(S.type==="finish")await q(),await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Q.model,choices:[{index:0,delta:{},finish_reason:pV$(S.finishReason)}],usage:S.totalUsage?{prompt_tokens:S.totalUsage.inputTokens??0,completion_tokens:S.totalUsage.outputTokens??0,total_tokens:S.totalUsage.totalTokens??0}:void 0})})}await q(),await L.writeSSE({data:"[DONE]"})}catch(z){let j=z;console.error("[openai-compat:stream] Error:",j.message),await L.writeSSE({data:JSON.stringify({error:{message:j.message,type:"server_error"}})})}});else{let L=nV$(H,F,U,Q,w,$.req.raw.signal),E=await Rw(L),z={role:"assistant",content:E.text||null};if(E.toolCalls&&E.toolCalls.length>0)z.tool_calls=E.toolCalls.map((j)=>({id:j.toolCallId,type:"function",function:{name:j.toolName,arguments:JSON.stringify("input"in j?j.input:{})}})),z.content=null;return $.json({id:O,object:"chat.completion",created:D,model:Q.model,choices:[{index:0,message:z,finish_reason:pV$(E.finishReason)}],usage:{prompt_tokens:E.usage?.inputTokens??0,completion_tokens:E.usage?.outputTokens??0,total_tokens:E.usage?.totalTokens??0}})}}catch(G){let Y=G;if(Y.name==="AbortError")return $.json(jK("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(jK(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(jK(Y.message,"server_error"),500)}});rV$=oV$});var eV$;var sV$=B(()=>{eV$={name:"decocms",version:"4.175.1",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@nats-io/jwt":"0.0.10-5","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function n06(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??i06}}var $C$,i06="https://ph.studio.decocms.com",ZC$;var XC$=B(()=>{u8();BC0();PV();OZ();V$();k01();sV$();$C$=new D1;$C$.get("/",($)=>{let Z={version:eV$.version,theme:oq1(),...iB().logo&&{logo:iB().logo},...rW()&&{internalUrl:aI1()},...m0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!m0().firecrawlApiKey,auth:Nq$(),posthog:n06(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!rW()&&m0().sandboxProviderKind==="agent-sandbox"}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});ZC$=$C$});function Mg($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function b$1($){return(Mg($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function YC$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(Mg($))}&sz=${Z}`}function GC$($,Z){let X=$.trim();if(X.length<=Z)return X;let G=X.slice(0,Z-1),Y=G.lastIndexOf(" ");return`${(Y>Z*0.6?G.slice(0,Y):G).trimEnd()}\u2026`}function QC$($){let{brand:Z,domain:X,score:G,verdict:Y}=$,Q=typeof G==="number"?`${Z} commerce report \u2014 ${Math.round(G)}/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()?GC$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):GC$(`How does ${X} really perform? ${J}`,200);return{title:Q,description:W}}import{z as u0}from"zod";var qC,p06,t06,o06,r06,JC$;var WC$=B(()=>{qC=u0.enum(["good","bad","neutral"]),p06=u0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((X)=>X!==null&&typeof X!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},u0.object({kind:u0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:u0.coerce.string().optional(),tone:qC.optional(),muted:u0.boolean().optional(),delta:u0.coerce.string().optional(),deltaDir:u0.enum(["up","down","neutral"]).optional(),points:u0.array(u0.coerce.number()).optional(),label:u0.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 $})),t06=u0.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},u0.array(p06)),o06={key:u0.coerce.string(),title:u0.coerce.string(),eyebrow:u0.coerce.string().optional(),headline:u0.coerce.string(),annotation:u0.coerce.string().optional(),methodology:u0.coerce.string().optional(),sources:u0.array(u0.object({name:u0.coerce.string(),logoUrl:u0.coerce.string()})).optional()},r06=u0.discriminatedUnion("template",[u0.object({template:u0.literal("cover"),score:u0.object({value:u0.coerce.number(),max:u0.coerce.number().optional(),grade:u0.coerce.string().optional(),label:u0.coerce.string().optional()}).optional(),brandImage:u0.coerce.string().optional(),screenshot:u0.coerce.string().optional(),mobileScreenshot:u0.coerce.string().optional()}),u0.object({template:u0.literal("cta"),ctaUrl:u0.coerce.string().optional(),ctaLabel:u0.coerce.string().optional(),bullets:u0.array(u0.coerce.string()).optional()}),u0.object({template:u0.literal("series"),points:u0.array(u0.coerce.number()).min(2),xLabels:u0.array(u0.coerce.string()).min(1),unit:u0.coerce.string().optional(),callout:u0.object({index:u0.coerce.number(),value:u0.coerce.string(),tone:qC.optional()})}),u0.object({template:u0.literal("threshold"),value:u0.coerce.string().default(""),metricLabel:u0.coerce.string().optional(),ratio:u0.coerce.number(),thresholdRatio:u0.coerce.number().optional(),thresholdLabel:u0.coerce.string().default(""),tone:qC.optional()}),u0.object({template:u0.literal("stats"),stats:u0.array(u0.object({value:u0.coerce.string(),label:u0.coerce.string(),tone:qC.optional()})).min(1)}),u0.object({template:u0.literal("bars"),items:u0.array(u0.object({value:u0.coerce.string(),label:u0.coerce.string(),ratio:u0.coerce.number(),tone:qC.optional()})).min(1)}),u0.object({template:u0.literal("gauges"),gauges:u0.array(u0.object({label:u0.coerce.string(),value:u0.coerce.string(),status:u0.enum(["good","warn","bad"]).catch("warn"),caption:u0.coerce.string().optional(),ratio:u0.coerce.number().optional()})).min(1)}),u0.object({template:u0.literal("checklist"),checks:u0.array(u0.object({label:u0.coerce.string(),status:u0.enum(["pass","fail","warn"]).catch("fail"),value:u0.coerce.string().optional()})).min(1)}),u0.object({template:u0.literal("table"),columns:u0.array(u0.object({label:u0.coerce.string(),align:u0.enum(["left","right"]).optional()})).min(1),rows:u0.array(t06).min(1),highlightRow:u0.coerce.number().optional()}),u0.object({template:u0.literal("products"),products:u0.array(u0.object({name:u0.coerce.string(),price:u0.coerce.string().optional(),image:u0.coerce.string().optional(),url:u0.coerce.string().optional()})).min(1)}),u0.object({template:u0.literal("list"),entries:u0.array(u0.object({label:u0.coerce.string(),severity:u0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:u0.coerce.number().optional()}),u0.object({template:u0.literal("keywords"),volumeLabel:u0.coerce.string().optional(),keywords:u0.array(u0.object({term:u0.coerce.string(),volume:u0.coerce.string(),position:u0.coerce.number().catch(0)})).min(1)}),u0.object({template:u0.literal("competitor"),metricLabel:u0.coerce.string().optional(),competitors:u0.array(u0.object({name:u0.coerce.string(),value:u0.coerce.string(),tone:qC.optional(),isYou:u0.boolean().optional()})).min(1)}),u0.object({template:u0.literal("scorecard"),rivalLabel:u0.coerce.string().optional(),dimensions:u0.array(u0.object({label:u0.coerce.string(),you:u0.coerce.string(),rival:u0.coerce.string().optional(),rivalName:u0.coerce.string().optional(),tone:qC.optional()})).min(1)})]),JC$=u0.object({...o06,template:r06})});function bE0($){let Z=[],X=[...$.sections].sort((G,Y)=>G.position-Y.position).map((G)=>{let Y=JC$.safeParse(G.props);if(Y.success)return Y.data;let Q=Y.error.issues[0];return Z.push({section_type:G.section_type,position:G.position,reason:Q?`${Q.path.join(".")||"(root)"}: ${Q.message}`:"contract violation"}),null}).filter((G)=>G!==null);return{deck:{meta:{...$.meta,scores:$.summary?.scores},slides:X},drops:Z}}var f$1=B(()=>{WC$()});import{join as KC$}from"path";async function s06($){try{let Z=await fetch(`${KW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(a06)});if(!Z.ok)return null;let X=await Z.json(),{deck:G}=bE0(X);if(!G.slides.length)return null;let Y=G.slides.find((W)=>W.template.template==="cover"),Q=Y?.template,J=Q&&Q.template==="cover"?Q:void 0;return{brand:G.meta.brand?.trim()||b$1($),score:G.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function fY($){return $.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function e06($,Z){let X=Mg($),G=Z?.brand?.trim()||b$1(X),Y=YC$(X,128),J=`${(m0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=QC$({brand:G,domain:X,score:Z?.score,verdict:Z?.verdict}),N=`${J}/og.png`,H=`${G} commerce report by decocms`;return[`<title>${fY(W)}</title>`,`<meta name="description" content="${fY(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="${fY(W)}" />`,`<meta property="og:description" content="${fY(K)}" />`,`<meta property="og:url" content="${fY(J)}" />`,`<meta property="og:image" content="${fY(N)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${fY(H)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${fY(W)}" />`,`<meta name="twitter:description" content="${fY(K)}" />`,`<meta name="twitter:image" content="${fY(N)}" />`,`<meta name="twitter:image:alt" content="${fY(H)}" />`,`<link rel="canonical" href="${fY(J)}" />`,`<link rel="icon" href="${fY(Y)}" sizes="any" />`].join(`
|
|
2724
2724
|
`)}function $16($,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}
|
|
2725
2725
|
</head>`)}function NC$($){let Z=new D1;return Z.get("/:domain/og.png",async(X)=>{let G=Mg(X.req.param("domain")),Y=async()=>{let Q=$?Bun.file(KC$($,"report-og-fallback.png")):null;if(!Q||!await Q.exists())return X.notFound();return X.body(new Uint8Array(await Q.arrayBuffer()),200,{"Content-Type":"image/png","Cache-Control":"public, max-age=0, s-maxage=3600"})};try{let Q=await fetch(`${KW({})}/api/v2/public/diagnostics/${encodeURIComponent(G)}/og.png`,{signal:AbortSignal.timeout(Z16)}),J=Q.headers.get("content-type")??"";if(!Q.ok||!J.startsWith("image/")||!Q.body)return Y();return X.body(Q.body,200,{"Content-Type":J,"Cache-Control":"public, max-age=0, s-maxage=604800"})}catch{return Y()}}),Z.get("/:domain",async(X)=>{let G=X.req.param("domain"),Y=$?KC$($,"index.html"):null,Q=Y?Bun.file(Y):null;if(!Q||!await Q.exists())return X.notFound();let J=await Q.text();try{let W=await s06(Mg(G)),K=e06(G,W);return X.html($16(J,K),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return X.html(J)}}),Z}var a06=2500,Z16=1e4;var HC$=B(()=>{u8();f$1();LD();V$()});function Fo($,Z){return fetch(`${KW({})}${$}`,Z)}async function X16($,Z,X){let G=new URLSearchParams;if(Z)G.set("pw",Z);if(X)G.set("lang",X);let Y=G.toString()?`?${G.toString()}`:"",Q=await Fo(`/api/v2/public/diagnostics/${encodeURIComponent($)}${Y}`,{headers:{Accept:"application/json"}});if(Q.status===404)return{status:"not_found",deck:null,scanned_at:null,drops:[]};if(!Q.ok)throw Error(`report read HTTP ${Q.status}`);let J=await Q.json(),{deck:W,drops:K}=bE0(J);return{status:W.slides.length?"ready":"empty",deck:W,scanned_at:J.scanned_at,drops:K}}var G16,k3,fE0=async($,Z)=>{if(!$.get("reportUser"))return $.json({error:"Authentication required"},401);await Z();return},FC$;var UC$=B(()=>{u8();RQ();LD();f$1();G16=new Set(["complete","errored","terminated","unknown"]),k3=new D1;k3.use("*",async($,Z)=>{let X=await E8.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});k3.use("/run",fE0);k3.use("/status",fE0);k3.use("/link-token/*",fE0);k3.use("/suggest",fE0);k3.get("/site/:domain",async($)=>{let Z=$.req.param("domain").trim();if(!Z)return $.json({error:"domain is required"},400);let X=$.get("reportUser"),G=$.req.query("key")?.trim()||void 0,Y=$.req.query("lang")?.trim()||void 0;try{let Q=await X16(Z,G,Y);if($.header("Cache-Control","private, no-store"),X||!Q.deck)return $.json(Q);return $.json({...Q,deck:{...Q.deck,slides:Q.deck.slides.slice(0,1)},truncated:Q.status==="ready"})}catch{return $.json({error:"report read failed"},502)}});k3.post("/run",async($)=>{let Z=$.get("reportUser"),X;try{X=await $.req.json()}catch{return $.json({error:"invalid JSON"},400)}let G=typeof X.domain==="string"?X.domain.trim():"";if(!G)return $.json({error:"domain is required"},400);let Y=Z.email,Q=typeof X.distinctId==="string"&&X.distinctId.trim()&&X.distinctId.length<=200?X.distinctId.trim():void 0;try{let J=await Fo("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${DD({})}`},body:JSON.stringify({url:G,email:Y,distinct_id:Q})});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)}});k3.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let X=await Fo(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${DD({})}`}});if(!X.ok)return $.json({error:`status HTTP ${X.status}`},502);let Y=(await X.json()).status??"unknown",Q={done:G16.has(Y),status:Y};return $.json(Q)}catch{return $.json({error:"status failed"},502)}});k3.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let X=await Fo(`/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)}});k3.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let X=await Fo(`/api/v2/public/suggest?q=${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"}});if(!X.ok)return $.json({suggestions:[]});let G=await X.json();return $.json({suggestions:Array.isArray(G.suggestions)?G.suggestions:[]})}catch{return $.json({suggestions:[]})}});FC$=k3});import{createHmac as Y16,timingSafeEqual as Q16}from"crypto";function wC$($,Z,X,G=Date.now()){if(!Z||!X)return!1;let Y,Q=[];for(let N of Z.split(",")){let H=N.indexOf("=");if(H<=0)continue;let F=N.slice(0,H).trim(),U=N.slice(H+1).trim();if(F==="t")Y=U;else if(F==="v1")Q.push(U)}if(!Y||Q.length===0)return!1;let J=Number(Y);if(!Number.isFinite(J)||Math.abs(G/1000-J)>J16)return!1;let W=Y16("sha256",X).update(`${Y}.${$}`).digest("hex"),K=Buffer.from(W,"hex");return Q.some((N)=>{let H=Buffer.from(N,"hex");return K.length===H.length&&Q16(K,H)})}function OC$($){let Z;try{Z=JSON.parse($)}catch{return null}let X=nQ(Z),G=nQ(nQ(X?.data)?.object);if(!X||typeof X.type!=="string"||!G)return null;return{id:PK(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:G}}}function W16($){switch($){case"active":case"trialing":return"active";case"past_due":return"past_due";default:return"canceled"}}function PK($){return typeof $==="string"?$:void 0}function nQ($){return typeof $==="object"&&$!==null?$:void 0}function xE0($){return typeof $==="number"?new Date($*1000):null}function g$1($){return PK($)??PK(nQ($)?.id)}function K16($){return g$1($.subscription)??PK(nQ(nQ($.parent)?.subscription_details)?.subscription)}function N16($){let Z=xE0($.current_period_end);if(Z)return Z;let X=nQ($.items)?.data;if(!Array.isArray(X))return null;let G=0;for(let Y of X){let Q=nQ(Y)?.current_period_end;if(typeof Q==="number"&&Q>G)G=Q}return G>0?new Date(G*1000):null}function x$1($,Z){let X=xE0($.created);return!!X&&!!Z.lastStripeEventAt&&X<Z.lastStripeEventAt}function y$1($,Z){let X=xE0($.created);if(!X)return;return Z.lastStripeEventAt&&Z.lastStripeEventAt>X?void 0:X}async function H16($,Z){let X=Z.data.object;switch(Z.type){case"checkout.session.completed":case"checkout.session.async_payment_succeeded":{let G=PK(nQ(X.metadata)?.orgId);if(!G)return{handled:!1,reason:"no orgId"};if(PK(nQ(X.metadata)?.kind)==="topup"){if(X.mode!=="payment")return{handled:!1,reason:"topup with wrong mode"};if(PK(X.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let J=PK(X.id);if(!J)return console.error("stripe webhook: topup session without id",{eventId:Z.id,organizationId:G}),{handled:!1,reason:"topup session without id"};let W=Number(nQ(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:G,creditCents:nQ(X.metadata)?.creditCents}),{handled:!1,reason:"bad topup metadata"};return{handled:!0,organizationId:G,topUp:{creditCents:W,referenceId:`stripe-topup:${J}`}}}if(X.mode!=="subscription")return{handled:!1,reason:"not a subscription checkout"};if(PK(X.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let Y=await $.getBilling(G);if(!Y)return{handled:!1,reason:"unknown org"};let Q=g$1(X.subscription);if(Y.stripeSubscriptionId&&Q&&Y.stripeSubscriptionId!==Q)return console.error("stripe webhook: refused checkout rebind",{organizationId:G,eventId:Z.id}),{handled:!1,reason:"org already bound to another subscription",orphanSubscriptionId:Q};if(x$1(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(G,{stripeCustomerId:g$1(X.customer),stripeSubscriptionId:Q,status:"active",lastStripeEventAt:y$1(Z,Y)}),{handled:!0,organizationId:G}}case"customer.subscription.updated":case"customer.subscription.deleted":{let G=PK(X.id);if(!G)return{handled:!1,reason:"no sub id"};let Y=await $.getBillingByStripeSubscriptionId(G);if(!Y)return{handled:!1,reason:"unknown subscription"};let Q=Z.type==="customer.subscription.deleted";if(!Q&&x$1(Z,Y))return{handled:!1,reason:"stale event"};let J=Q?"canceled":W16(X.status);return await $.updateStripeState(Y.organizationId,{status:J,currentPeriodEnd:N16(X),...Q&&{stripeSubscriptionId:null},lastStripeEventAt:y$1(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}case"invoice.paid":{let G=K16(X);if(!G)return{handled:!1,reason:"no sub id"};let Y=await $.getBillingByStripeSubscriptionId(G);if(!Y)return{handled:!1,reason:"unknown subscription"};if(x$1(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Y.organizationId,{status:"active",currentPeriodEnd:xE0(X.period_end),lastStripeEventAt:y$1(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}default:return{handled:!1,reason:`unhandled event ${Z.type}`}}}async function BC$($){let Z=new kN(p8().db),X=await H16(Z,$);if(X.handled&&X.topUp)await TH$({organizationId:X.organizationId,amountCents:X.topUp.creditCents,referenceId:X.topUp.referenceId});if(!X.handled&&X.orphanSubscriptionId)try{await q0$(X.orphanSubscriptionId),console.error("stripe webhook: canceled orphan subscription",{subscriptionId:X.orphanSubscriptionId,eventId:$.id})}catch(G){if(!(G instanceof X3&&(G.status===400||G.status===404)))throw G}return X}var J16=300;var DC$=B(()=>{GQ();ni();Bo0()});var F16=1048576,h$1;var LC$=B(()=>{u8();BC();V$();DC$();h$1=new D1;h$1.post("/webhook",F7({maxSize:F16,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=m0().stripeWebhookSecret;if(!Z)return $.json({error:"stripe billing not configured"},503);let X=await $.req.text();if(!wC$(X,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let Y=OC$(X);if(!Y)return $.json({error:"invalid payload"},400);let Q=await BC$(Y);return console.log("stripe webhook",{eventId:Y.id,type:Y.type,livemode:Y.livemode,...Q}),$.json({received:!0})})});function EC$($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var zC$,U16,w16,jC$;var PC$=B(()=>{u8();zJ();nx();Fv();zC$=new D1,U16=["range","if-none-match","if-modified-since"],w16=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];zC$.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),X=Z.organization?.id;if(!Z.auth?.user?.id){if(Jg($))return $.redirect(`/login?next=${encodeURIComponent($.req.path)}`,302);throw new X$(401,{message:"Authentication required"})}if(!X)throw new X$(401,{message:"Organization context required"});let G=$.req.path.replace(/^.*\/files\//,"");if(!G)throw new X$(400,{message:"Missing file key"});let Y=await $p(G,Z);if(!Y)throw new X$(503,{message:"Object storage not configured"});if(Y.startsWith("data:")&&EJ()){let K=Y.match(/^data:([^;]+);base64,(.+)$/s);if(!K)throw new X$(500,{message:"Invalid data URL from storage"});let[,N,H]=K,F=Buffer.from(H,"base64"),U=new Headers({"Content-Type":N,"Cache-Control":"private, max-age=86400"});return EC$(U,N),new Response(F,{status:200,headers:U})}let Q=new Headers;for(let K of U16){let N=$.req.header(K);if(N)Q.set(K,N)}let J=await fetch(Y,{headers:Q});if(J.status===403||J.status===404)throw new X$(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:`,G),new X$(502,{message:"Upstream storage error"});let W=new Headers;for(let K of w16){let N=J.headers.get(K);if(N)W.set(K,N)}return W.set("Cache-Control","private, max-age=86400"),EC$(W,W.get("content-type")??""),new Response(J.body,{status:J.status,headers:W})});jC$=zC$});var Uo=C((MC)=>{var O16=MC&&MC.__createBinding||(Object.create?function($,Z,X,G){if(G===void 0)G=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($,G,Y)}:function($,Z,X,G){if(G===void 0)G=X;$[G]=Z[X]}),B16=MC&&MC.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))O16(Z,$,X)};Object.defineProperty(MC,"__esModule",{value:!0});B16(pG(),MC)});var RC$=C((AC$)=>{Object.defineProperty(AC$,"__esModule",{value:!0});AC$.version=void 0;AC$.version="3.4.0"});var MC$=C((AK)=>{var D16=AK&&AK.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(AK,"__esModule",{value:!0});AK.NodeTransport=AK.VERSION=void 0;AK.nodeResolveHost=A16;var g6=Uo(),L16=j0("net"),u$1=j0("tls"),E16=j0("path"),IC$=j0("fs"),z16=D16(j0("dns")),j16=RC$();AK.VERSION=j16.version;var P16="nats.js";class qC${socket;version;lang;yields=[];signal=(0,g6.deferred)();closedNotification=(0,g6.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=P16,this.version=AK.VERSION}async connect($,Z){this.tlsName=$.tlsName,this.options=Z;let{tls:X}=this.options,{handshakeFirst:G}=X||{};try{if(G===!0)this.socket=await this.tlsFirst($);else this.socket=await this.dial($);if(this.done)this.socket?.destroy();let Y=await this.peekInfo();(0,g6.checkOptions)(Y,Z);let{tls_required:Q,tls_available:J}=Y,W=J===!0&&Z.tls!==null;if(!G&&(Q||W))this.socket=await this.startTLS();if(this.done)this.socket?.destroy();if(Q&&this.socket.encrypted!==!0)throw g6.errors.InvalidArgumentError.format("tls","is not available on this server");return this.connected=!0,this.setupHandlers(),this.signal.resolve(),Promise.resolve()}catch(Y){let Q=Y;if(!Q)Q=new g6.errors.ConnectionError("error connecting - node provided an undefined error");let{code:J}=Q,W=J==="ECONNREFUSED"?new g6.errors.ConnectionError("connection refused",{cause:Q}):Q;throw this.socket?.destroy(),W}}dial($){let Z=(0,g6.deferred)(),X,G=(0,L16.createConnection)($.port,$.hostname,()=>{Z.resolve(G),G.removeAllListeners()});return G.on("error",(Y)=>{X=Y}),G.on("close",()=>{G.removeAllListeners(),Z.reject(X)}),G.setNoDelay(!0),Z}get isClosed(){return this.done}close($){return this._closed($,!1)}peekInfo(){let $=(0,g6.deferred)(),Z;return this.socket.on("data",(X)=>{this.yields.push(X);let G=g6.DataBuffer.concat(...this.yields),Y=(0,g6.extractProtocolMessage)(G);if(Y!=="")try{let Q=g6.INFO.exec(Y);if(!Q)throw Error("unexpected response from server");let J=JSON.parse(Q[1]);$.resolve(J)}catch(Q){$.reject(Q)}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,g6.deferred)();try{if($=(0,E16.resolve)($),!(0,IC$.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,IC$.readFile)($,(X,G)=>{if(X)return Z.reject(X);Z.resolve(G)})}catch(X){Z.reject(X)}return Z}async loadClientCerts(){let $={},{certFile:Z,cert:X,caFile:G,ca:Y,keyFile:Q,key:J}=this.options.tls;try{if(Z){let W=await this.loadFile(Z);if(W)$.cert=W}else if(X)$.cert=X;if(Q){let W=await this.loadFile(Q);if(W)$.key=W}else if(J)$.key=J;if(G){let W=await this.loadFile(G);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,g6.extend)(X,this.options.tls,Y)}catch(Y){return Promise.reject(new g6.errors.ConnectionError(Y.message,{cause:Y}))}let G=(0,g6.deferred)();try{let Y=(0,u$1.connect)($.port,$.hostname,X,()=>{Y.removeAllListeners(),G.resolve(Y)});Y.on("error",(Q)=>{Z=Q}),Y.on("secureConnect",()=>{if(X.rejectUnauthorized===!1)return;if(!Y.authorized)throw Y.authorizationError}),Y.on("close",()=>{G.reject(Z),Y.removeAllListeners()}),Y.setNoDelay(!0)}catch(Y){G.reject(new g6.errors.ConnectionError(Y.message,{cause:Y}))}return G}async startTLS(){let $,Z={socket:this.socket,servername:this.tlsName,rejectUnauthorized:!0};if(typeof this.options.tls==="object")try{let G=await this.loadClientCerts()||{};Z=(0,g6.extend)(Z,this.options.tls,G)}catch(G){return Promise.reject(new g6.errors.ConnectionError(G.message,{cause:G}))}let X=(0,g6.deferred)();try{let G=(0,u$1.connect)(Z,()=>{G.removeAllListeners(),X.resolve(G)});G.on("error",(Y)=>{$=Y}),G.on("secureConnect",()=>{if(Z.rejectUnauthorized===!1)return;if(!G.authorized)throw G.authorizationError}),G.on("close",()=>{X.reject($),G.removeAllListeners()})}catch(G){X.reject(new g6.errors.ConnectionError(G.message,{cause:G}))}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,g6.render)($[Z])}`);yield $[Z]}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,g6.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 u$1.TLSSocket}_send($){if(this.isClosed||this.socket===void 0)return Promise.resolve();if(this.options.debug)console.info(`< ${(0,g6.render)($)}`);let Z=(0,g6.deferred)();try{this.socket.write($,(X)=>{if(X){if(this.options.debug)console.error(`!!! ${(0,g6.render)($)}: ${X}`);return Z.reject(X)}return Z.resolve()})}catch(X){if(this.options.debug)console.error(`!!! ${(0,g6.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}}AK.NodeTransport=qC$;function A16($){let Z=(0,g6.deferred)();return z16.default.lookup($,{all:!0},(X,G)=>{if(X){Z.reject(X);return}let Y=[];for(let Q of G)Y.push(Q.address);if(Y.length===0)Y.push($);Z.resolve(Y)}),Z}});var _C$=C((CC$)=>{Object.defineProperty(CC$,"__esModule",{value:!0});CC$.connect=T16;var kC$=MC$(),SC$=Uo(),VC$=Uo();function T16($={}){if((0,VC$.hasWsProtocol)($))return Promise.reject(VC$.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,SC$.setTransportFactory)({factory:()=>{return new kC$.NodeTransport},dnsResolveFn:kC$.nodeResolveHost}),SC$.NatsConnectionImpl.connect($)}});var vC$=C((cH)=>{var I16=cH&&cH.__createBinding||(Object.create?function($,Z,X,G){if(G===void 0)G=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($,G,Y)}:function($,Z,X,G){if(G===void 0)G=X;$[G]=Z[X]}),q16=cH&&cH.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))I16(Z,$,X)};Object.defineProperty(cH,"__esModule",{value:!0});cH.connect=void 0;var M16=_C$();Object.defineProperty(cH,"connect",{enumerable:!0,get:function(){return M16.connect}});q16(Uo(),cH)});function yC$($){let Z=$?.connectFn??C16,X=null,G=null,Y=!1,Q=!1,J=!1,W=[];function K(){return X!==null&&!X.isClosed()&&!X.isDraining()&&!J}function N(){console.log(`[NatsProvider] fireReady: ${W.length} callbacks`);for(let U of W)try{U()}catch{}}function H(U){(async()=>{for await(let w of U.status())if(w.type==="disconnect")console.log("[NatsProvider] Disconnected"),J=!0;else if(w.type==="reconnect")console.log("[NatsProvider] Reconnected, re-firing ready callbacks"),J=!1,G=null,N()})().catch(()=>{})}async function F(U,w){let O=0;while(!Q)try{X=await Z({servers:U,timeout:V16,reconnect:!0,maxReconnectAttempts:-1,...w?{authenticator:w}:{}}),console.log(`[NatsProvider] Connected to ${X.getServer()} after ${O} attempt(s)`),G=null,J=!1,H(X),N();return}catch{O++;let D=cG(S16,k16,O-1,2,0.5);await a$(D)}}return{init(U,w){if(Y)return;Y=!0,Q=!1;let O=w?.creds?bC$.credsAuthenticator(new TextEncoder().encode(w.creds)):void 0;F(U,O).catch(()=>{})},isConnected(){return K()},getConnection(){return K()?X:null},getJetStream(){if(!K())return null;if(!G)G=xC$.jetstream(X);return G},onReady(U){if(W.push(U),K())try{U()}catch{}},async drain(){if(Q=!0,Y=!1,G=null,J=!1,X){let U=X;X=null,await U.drain().catch(()=>{})}}}}function C16($){return fC$.connect($)}var bC$,fC$,xC$,k16=100,S16=3000,V16=3000;var gC$=B(()=>{J5();bC$=k($h(),1),fC$=k(vC$(),1),xC$=k(tO(),1)});function c$1($,Z){return`${$}.${Z}`}class l$1{cache;constructor($){this.cache=Xg({ttlMs:$?.ttlMs??_16,maxSize:$?.maxSize??v16})}async get($,Z){return this.cache.get(c$1($,Z))??null}async set($,Z,X){this.cache.set(c$1($,Z),X)}async invalidate($,Z){this.cache.delete(c$1($,Z))}teardown(){this.cache.clear()}}var _16=600000,v16=5000;var hC$=()=>{};function yE0($,Z){return`${$}:${Z}`}function d$1($){let Z=Xg({ttlMs:$?.ttlMs??b16,maxSize:$?.maxSize??f16}),X=$?.getConnection,G=crypto.randomUUID(),Y=new TextEncoder,Q=new TextDecoder,J=null;function W(K,N){let H=X?.();if(!H)return;try{H.publish(uC$,Y.encode(JSON.stringify({organizationId:K,keyId:N,originId:G})))}catch(F){console.warn("[ProviderKeyCache] Publish failed (non-critical):",F)}}return{get(K,N){return Z.get(yE0(K,N))},set(K,N,H){Z.set(yE0(K,N),H)},invalidate(K,N){Z.delete(yE0(K,N)),W(K,N)},start(){if(J)return;let K=X?.();if(!K)return;J=K.subscribe(uC$),(async()=>{for await(let N of J)try{let H=JSON.parse(Q.decode(N.data));if(H.originId===G)continue;Z.delete(yE0(H.organizationId,H.keyId))}catch{}})().catch(console.error)},teardown(){J?.unsubscribe(),J=null,Z.clear()}}}var uC$="studio.ai-provider-keys.invalidate",b16=30000,f16=5000;var cC$=()=>{};class m$1{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=lC$.map((G)=>Z.subscribe(G));for(let G of this.subscriptions)(async()=>{for await(let Y of G)try{let Q=JSON.parse(X.decode(Y.data));if(Q.originId===this.originId)continue;if(Q.messageId&&this.hasSeen(Q.messageId))continue;this.onCancel?.(Q.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 G of lC$)Z.publish(G,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 lC$;var dC$=B(()=>{lC$=["studio.decopilot.cancel","mesh.decopilot.cancel"]});var mC$=($)=>{let Z;return()=>Z??=$()},i$1,n$1;var iC$=B(()=>{W5();i$1=mC$(()=>J8.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),n$1=mC$(()=>J8.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function l16(){return{name:wH,subjects:[`${pw0}.>`],storage:S3.StorageType.File,max_age:g16,max_bytes:u16,max_msgs_per_subject:c16,discard:S3.DiscardPolicy.Old,retention:S3.RetentionPolicy.Limits,duplicate_window:h16,num_replicas:1}}class tC${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 nC$($){let Z=pC$.headers();for(let[X,G]of Object.entries($))Z.set(X,G);return Z}function n16($,Z){let X=0;return{publish(G,Y,Q,J){G.publish(Y,Q,J?{headers:J}:void 0).catch((W)=>{if(X++,y16().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 p16($){if(!($ instanceof Error))return!1;if($.name==="TimeoutError")return!0;return/timeout|no responders|503/i.test($.message)}class p$1{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=l16(),X=await lG(async()=>{let G=this.options.getJetStreamManager?await this.options.getJetStreamManager():await S3.jetstreamManager($);try{await G.streams.info(wH),await G.streams.update(wH,Z)}catch(Y){if(Y instanceof Error&&Y.message.includes("stream not found"))await G.streams.add(Z);else if(Y instanceof Error&&/can ?not change.*storage|storage type/i.test(Y.message))await G.streams.delete(wH),await G.streams.add(Z);else throw Y}return G},{maxAttempts:5,minTimeout:250,maxTimeout:4000,jitter:0.5,isRetriable:p16});this.js=this.options.getJetStream(),this.jsm=X,console.log(`[Decopilot] StreamBuffer.init ${this.js?"ready":"degraded (js=null)"}`)}pump($,Z,X,G){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 Q=n16(Z,G),J=!1,W=()=>{if(J)return;J=!0;let N=QK$(Z);Y.publish(N.subject,N.data).catch(()=>{})};X.addEventListener("abort",W,{once:!0});let K=(N)=>{let H=performance.now(),F=Sp0(N,{runId:Z}),U=performance.now()-H;if(i$1().record(U),n$1().add(1,{"org.id":G??"unknown"}),i16?.record(U,F.reduce((w,O)=>w+O.data.length,0)),F.length===0){console.warn(`[Decopilot] dropping oversized stream chunk for thread ${Z}`);return}for(let w of F)Q.publish(Y,w.subject,w.data,w.headers?nC$(w.headers):void 0)};return(async()=>{let N=$.getReader(),H=0,F=0,U;try{while(!0){let{done:w,value:O}=await N.read();if(w)break;if(K(O),F++,++H>=64)H=0,await new Promise((D)=>setImmediate(D))}}catch(w){U=w,console.warn(`[Decopilot] stream pump error for thread ${Z}:`,w?.message??w)}finally{if(N.releaseLock(),W(),m16)console.warn(JSON.stringify({msg:"decopilot-stream-diag",event:"pump-done",taskId:Z,publishedChunks:F,publishErrors:Q.errorCount}))}if(U!==void 0)throw U})()}async publishRawChunk($,Z,X){let G=this.js;if(!G)return!1;let Y=performance.now(),Q=Sp0(Z,{runId:$,dedup:X});if(i$1().record(performance.now()-Y),n$1().add(1),Q.length===0)return console.warn(`[Decopilot] dropping oversized raw chunk for thread ${$} (> MAX_CHUNKED_BYTES)`),!0;for(let J of Q)await G.publish(J.subject,J.data,{...J.headers?{headers:nC$(J.headers)}:{},...J.msgId?{msgID:J.msgId}:{}});return!0}async publishDone($,Z,X){let G=this.js;if(!G)return!1;let Y=YK$({runId:$,fenceToken:Z,finalSeq:X});return await G.publish(Y.subject,Y.data,{msgID:Y.msgId}),!0}async createTailStream($,Z,X){let G=this.js;if(!G)return console.warn(`[Decopilot] createTailStream: JetStream client unavailable for thread ${$}; no live tail`),null;let Y=X?.deliverPolicy==="new"?S3.DeliverPolicy.New:S3.DeliverPolicy.All,Q=X?.closeOnDone??!1,J=ZO($),W;try{W=await(await G.consumers.get(wH,{filter_subjects:J,deliver_policy:Y})).consume()}catch(D){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",D?.message??D),null}let H=sw0({messages:async function*(){try{for await(let D of W)yield{subject:D.subject,data:D.data,headers:D.headers}}finally{W.stop()}}(),onCancel:()=>W.stop()}).pipeThrough(tw0()).pipeThrough(ow0()).getReader(),F=!1,U=()=>{if(F)return;F=!0;try{H.releaseLock()}catch{}},w=!1,O=()=>{if(w)return;w=!0,W.stop(),H.cancel().catch(()=>{}),U()};return Z?.addEventListener("abort",O,{once:!0}),new ReadableStream({async pull(D){for(;;){let{done:L,value:E}=await H.read();if(L){O(),D.close();return}let z=E;if(z.kind==="done"){if(Q){O(),D.close();return}continue}D.enqueue(z.chunk);return}},cancel(){O()}})}purge($){if(!this.jsm)return;this.jsm.streams.purge(wH,{filter:ZO($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var S3,pC$,x16=($)=>{let Z;return()=>Z??=$()},y16,g16=86400000000000,h16=120000000000,u16=4294967296,c16=500000,d16,m16,i16;var oC$=B(()=>{J5();Vp0();ew0();rw0();W5();iC$();S3=k(tO(),1),pC$=k($h(),1),y16=x16(()=>J8.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"}));d16=process.env.STREAM_ENCODE_TRACE==="1",m16=process.env.DECOPILOT_STREAM_TRACE==="1";i16=d16?new tC$:null});function gE0($,Z,X,G){if(!G)return!1;return $.emit(Z,o3(X,G.status,{title:G.title??void 0,virtualMcpId:G.virtual_mcp_id??void 0,createdBy:G.created_by??void 0,triggerId:G.trigger_id??null,branch:G.branch??null,harnessId:G.harness_id??void 0,createdAt:G.created_at,updatedAt:G.updated_at})),!0}var rC$=B(()=>{B8()});class t$1{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}}import{readdir as t16,rm as hE0}from"fs/promises";import{join as uE0}from"path";async function cE0($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-o16),Z.setUTCHours(0,0,0,0);let X=0;try{let G=await kC($);for(let Y of G)if(/^\d{4}$/.test(Y))X+=await aC$($,Y,Z);else if(!Y.startsWith(".")){let Q=uE0($,Y),J=await kC(Q);for(let K of J){if(!/^\d{4}$/.test(K))continue;X+=await aC$(Q,K,Z)}if((await kC(Q)).length===0)await hE0(Q,{recursive:!0,force:!0})}}catch(G){console.warn("monitoring retention cleanup failed:",G)}return X}async function aC$($,Z,X){let G=0,Y=uE0($,Z),Q=await kC(Y);for(let W of Q){if(!/^\d{2}$/.test(W))continue;let K=uE0(Y,W),N=await kC(K);for(let F of N){if(!/^\d{2}$/.test(F))continue;let U=new Date(`${Z}-${W}-${F}T00:00:00Z`);if(isNaN(U.getTime()))continue;if(U<X){let w=uE0(K,F);await hE0(w,{recursive:!0,force:!0}),G++}}if((await kC(K)).length===0)await hE0(K,{recursive:!0,force:!0})}if((await kC(Y)).length===0)await hE0(Y,{recursive:!0,force:!0});return G}async function kC($){try{return(await t16($)).filter((X)=>!X.startsWith("."))}catch{return[]}}var o16=30;var o$1=()=>{};import{DBOS as r$1,SchedulerMode as r16}from"@dbos-inc/dbos-sdk";async function s16(){let $=[oQ(),SC(),qK()],Z=0;for(let X of $)try{Z+=await cE0(X)}catch(G){console.error("[monitoring-retention] cleanup failed:",G)}return console.log(`[monitoring-retention] deleted ${Z} day-dir(s) across ${$.length} signal dir(s)`),{deleted:Z,dirs:$.length}}async function e16($,Z){await r$1.runStep(()=>s16(),{name:"monitoringRetention"})}function eC$(){if(sC$)return;sC$=!0;let $=r$1.registerWorkflow(e16,{name:"monitoringRetentionWorkflow"});r$1.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:a16,mode:r16.ExactlyOncePerIntervalWhenActive})}var a16="23 4 * * *",sC$=!1;var $_$=B(()=>{dG();o$1()});function Z_$($){return async(Z,X)=>{let G=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(!G)return console.warn(`[automationContextFactory] User ${X} not found in org ${Z} \u2014 returning null`),null;let Y=await Hw.create();Y.auth.user={id:X,role:G.role},Y.organization={id:G.orgId,slug:G.orgSlug,name:G.orgName};let Q=await Yc0($.db,Z,G.role);return Y.boundAuth=Gc0({auth:Y.authInstance,headers:new Headers,role:G.role,permissions:Q,userId:X}),Y.access=new dD(X,void 0,Y.boundAuth,G.role,"self"),e60(Y,{id:G.orgId,slug:G.orgSlug}),Y}}var X_$=B(()=>{mD();Li()});function $$6(){return{services:[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}],migrationsStatus:"pending",serverUrl:null,logs:[]}}function X$6(){for(let $ of Z$6)$()}function G_$($){let Z=[...a$1.logs,$];a$1={...a$1,logs:Z.length>500?Z.slice(-500):Z},X$6()}function s$1(){return G$6}var a$1,Z$6,G$6=!1;var e$1=B(()=>{a$1=$$6(),Z$6=new Set});import{EventEmitter as Y$6}from"events";var $81;var Y_$=B(()=>{e$1();$81=new Y$6;$81.on("request",($)=>{G_$($)})});function Q_$(){return async($,Z)=>{let X=Date.now(),G=$.req.method,Y=$.req.path;if(Y==="/api/auth/get-session"||Y.includes("favicon")){await Z();return}let Q="",J=!1;if(Y.startsWith("/mcp")&&G==="POST"){J=!0;try{if($.req.header("Content-Type")?.includes("application/json")){let U=await $.req.raw.clone().json();if(U.method==="tools/call"&&U.params?.name){let w=kg(U.params.name),O=U.params.arguments||{},D=Object.keys(O).map((E)=>kg(E)),L=D.length>0?D.slice(0,3).join(",")+(D.length>3?"\u2026":""):"";Q=`${n6.tool}${w}${n6.dim}(${L})${n6.reset}`}else if(U.method)Q=`${n6.dim}${kg(U.method)}${n6.reset}`}}catch{}}let W=kg(Y);if(Y.startsWith("/mcp/conn_")){let H=Y.split("/")[2]??"";W=`/mcp/${n6.mcp}${kg(H.slice(0,12))}\u2026${n6.reset}`}else if(Y==="/mcp")W=`${n6.mcp}/mcp${n6.reset}`;else if(Y==="/mcp/registry")W=`${n6.mcp}/mcp/registry${n6.reset}`;let K=J$6(G),N=J?"\u25C0":"\u2190";if(!s$1())console.log(`${n6.dim}${N}${n6.reset} ${K}${G}${n6.reset} ${W}${Q?` ${Q}`:""}`);try{await Z()}finally{let H=Date.now()-X,F=$.res.status,U=Q$6(F),w=H<1000?`${H}ms`:`${(H/1000).toFixed(1)}s`,O=J?"\u25B6":"\u2192";if(!s$1())console.log(`${n6.dim}${O}${n6.reset} ${K}${G}${n6.reset} ${W}${Q?` ${Q}`:""} ${U}${F}${n6.reset} ${n6.duration}${w}${n6.reset}`);$81.emit("request",{method:G,path:kg(Y),status:F,duration:H,timestamp:new Date})}}}var n6,Q$6=($)=>{if($>=500)return n6.serverError;if($>=400)return n6.clientError;if($>=300)return n6.redirect;return n6.ok},J$6=($)=>{return n6[$]||n6.reset},kg=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var J_$=B(()=>{e$1();Y_$();n6={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 H_$}from"crypto";import{mkdir as W$6,readdir as K$6,rm as W_$,stat as F_$}from"fs/promises";import{join as X81,relative as N$6}from"path";import{z as L$}from"zod";function w_$($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return X81(H$6,Z)}function O_$($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function Z81($,Z){let X=w_$($),G=O_$(Z);return X81(X,G)}function F$6($,Z,X,G){let Y=m0().encryptionKey||"dev-secret",Q=`${$}:${Z}:${X}:${G}`;return H_$("sha256",Y).update(Q).digest("hex")}function N_$($,Z,X,G,Y){let Q=Math.floor(Date.now()/1000)+G,J=F$6(Z,X,Q,Y),W=new URL(`/api/dev-assets/${Z}/${O_$(X)}`,$);return W.searchParams.set("expires",Q.toString()),W.searchParams.set("signature",J),W.searchParams.set("method",Y),W.toString()}function B_$($,Z,X){let G=`${$}:${Z.getTime()}:${X}`;return`"${H_$("md5","etag").update(G).digest("hex")}"`}async function D_$($,Z,X,G,Y){try{let Q=await K$6($,{withFileTypes:!0});for(let J of Q){let W=X81($,J.name),N=N$6(Z,W).replace(/\\/g,"/");if(X&&!N.startsWith(X))continue;if(J.isDirectory())if(G){let H=N+"/";if(!X||H.startsWith(X)){if(!(X?N.slice(X.length):N).includes("/"))Y.commonPrefixes.add(H)}}else await D_$(W,Z,X,G,Y);else if(J.isFile()){if(G&&X){let H=N.slice(X.length);if(H.includes(G)){let F=H.indexOf(G),U=X+H.slice(0,F+1);Y.commonPrefixes.add(U);continue}}try{let H=await F_$(W);Y.objects.push({key:N,size:H.size,lastModified:H.mtime.toISOString(),etag:B_$(W,H.mtime,H.size)})}catch{}}}}catch{}}function L_$($,Z){let G=e($).id;return[{name:"LIST_OBJECTS",description:"List objects in the local assets directory with pagination support",inputSchema:L$.object({prefix:L$.string().optional(),maxKeys:L$.number().optional().default(1000),continuationToken:L$.string().optional(),delimiter:L$.string().optional()}),outputSchema:L$.object({objects:L$.array(L$.object({key:L$.string(),size:L$.number(),lastModified:L$.string(),etag:L$.string()})),nextContinuationToken:L$.string().optional(),isTruncated:L$.boolean(),commonPrefixes:L$.array(L$.string()).optional()}),handler:async(Y)=>{let Q=Y,J=Q.prefix||"",W=Q.maxKeys??1000,K=Q.delimiter,N=Q.continuationToken,H=w_$(G);await W$6(H,{recursive:!0});let F={objects:[],commonPrefixes:new Set};await D_$(H,H,J,K,F),F.objects.sort((L,E)=>L.key.localeCompare(E.key));let U=0;if(N){if(U=F.objects.findIndex((L)=>L.key>N),U===-1)U=F.objects.length}let w=F.objects.slice(U,U+W),O=U+W<F.objects.length,D=O?w[w.length-1]?.key:void 0;return{objects:w,isTruncated:O,nextContinuationToken:D,commonPrefixes:Array.from(F.commonPrefixes).sort()}}},{name:"GET_OBJECT_METADATA",description:"Get metadata for a file in the local assets directory",inputSchema:L$.object({key:L$.string()}),outputSchema:L$.object({contentType:L$.string().optional(),contentLength:L$.number(),lastModified:L$.string(),etag:L$.string(),metadata:L$.record(L$.string(),L$.string()).optional()}),handler:async(Y)=>{let Q=Y,J=Z81(G,Q.key),W=await F_$(J);return{contentType:a01(Q.key),contentLength:W.size,lastModified:W.mtime.toISOString(),etag:B_$(J,W.mtime,W.size)}}},{name:"GET_PRESIGNED_URL",description:"Generate a presigned URL for downloading a file from local storage",inputSchema:L$.object({key:L$.string(),expiresIn:L$.number().optional()}),outputSchema:L$.object({url:L$.string(),expiresIn:L$.number()}),handler:async(Y)=>{let Q=Y,J=Q.expiresIn??K_$;return{url:N_$(Z,G,Q.key,J,"GET"),expiresIn:J}}},{name:"PUT_PRESIGNED_URL",description:"Generate a presigned URL for uploading a file to local storage",inputSchema:L$.object({key:L$.string(),expiresIn:L$.number().optional(),contentType:L$.string().optional()}),outputSchema:L$.object({url:L$.string(),expiresIn:L$.number()}),handler:async(Y)=>{let Q=Y,J=Q.expiresIn??K_$;return{url:N_$(Z,G,Q.key,J,"PUT"),expiresIn:J}}},{name:"DELETE_OBJECT",description:"Delete a single file from local storage",inputSchema:L$.object({key:L$.string()}),outputSchema:L$.object({success:L$.boolean(),key:L$.string()}),handler:async(Y)=>{let Q=Y,J=Z81(G,Q.key);try{return await W_$(J),{success:!0,key:Q.key}}catch{return{success:!1,key:Q.key}}}},{name:"DELETE_OBJECTS",description:"Delete multiple files from local storage",inputSchema:L$.object({keys:L$.array(L$.string()).max(1000)}),outputSchema:L$.object({deleted:L$.array(L$.string()),errors:L$.array(L$.object({key:L$.string(),message:L$.string()}))}),handler:async(Y)=>{let Q=Y,J=[],W=[];return await Promise.all(Q.keys.map(async(K)=>{let N=Z81(G,K);try{await W_$(N),J.push(K)}catch(H){W.push({key:K,message:H instanceof Error?H.message:"Unknown error"})}})),{deleted:J,errors:W}}}]}async function G81($,Z,X){let G=L_$(Z,X),Y=new QW({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:a6});for(let J of G){let W="shape"in J.inputSchema?J.inputSchema.shape:L$.object({}).shape,K=J.outputSchema&&"shape"in J.outputSchema?J.outputSchema.shape:L$.object({}).shape;Y.registerTool(J.name,{description:J.description??"",inputSchema:W,outputSchema:K,annotations:J.annotations,_meta:J._meta},async(N)=>{try{let H=await J.handler(N);return{content:[{type:"text",text:JSON.stringify(H)}],structuredContent:H}}catch(H){return{content:[{type:"text",text:`Error: ${H.message}`}],isError:!0}}})}let Q=new yX({enableJsonResponse:$.headers.get("Accept")?.includes("application/json")??!1});return await Y.connect(Q),yQ(Y,Q,$,"mcp:dev-assets")}async function E_$($,Z,X,G){let Q=L_$(X,G).find((J)=>J.name===$);if(!Q)return{content:[{type:"text",text:`Tool not found: ${$}`}],isError:!0};try{let J=await Q.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 H$6="./data/assets",K_$=3600,U_$,z_$;var j_$=B(()=>{V$();Wy();u8();ec();vV();PX();sL0();U_$=new D1;U_$.all("/",async($)=>{let Z=$.get("studioContext"),X=new URL($.req.url),G=`${X.protocol}//${X.host}`;return G81($.req.raw,Z,G)});z_$=U_$});var P_$={};N4(P_$,{mountDevRoutes:()=>U$6});function U$6($,Z){$.all("/mcp/:connectionId{.*_dev-assets$}",Z,async(G)=>{let Y=G.get("studioContext"),Q=new URL(G.req.url),J=`${Q.protocol}//${Q.host}`;return G81(G.req.raw,Y,J)}),$.all("/mcp/:connectionId{.*_dev-assets$}/call-tool/:toolName",Z,async(G)=>{let Y=G.get("studioContext"),Q=new URL(G.req.url),J=`${Q.protocol}//${Q.host}`,W=G.req.param("toolName");if(!W)return G.json({error:"Missing tool name"},400);let K=await G.req.json(),N=await E_$(W,K,Y,J);if(N.isError)return G.json(N.content,500);return G.json(N.content)}),$.use("/mcp/dev-assets",Z),$.route("/mcp/dev-assets",z_$);let X=new D1;X.use("*",q3({mountPath:"/api/dev-assets"})),X.route("/",aL0({orgFromPath:!1})),$.route("/api/dev-assets",X)}var A_$=B(()=>{u8();d01();sL0();j_$()});import{sql as w$6}from"kysely";import{randomUUID as T_$}from"crypto";import{z as O$6}from"zod";async function D$6($){let Z=new Date().toISOString(),X=T_$(),G=x4.SELF($.organizationId),Y="registry.publish_request.created",Q={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:G,specversion:"1.0",subject:$.request.id,time:Z,datacontenttype:"application/json",dataschema:null,data:JSON.stringify(Q),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","=",G)])).execute();if(J.length>0)await $.db.insertInto("event_deliveries").values(J.map((W)=>({id:T_$(),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 w$6`SELECT
|
|
2726
2726
|
pg_notify('studio_events', ${X}),
|