decocms 2.312.5 → 2.312.6
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-8gO1aXOV.js → AlertCircle--E7UrpAr.js} +1 -1
- package/dist/client/assets/{Archive-CpwaQ9i2.js → Archive-D0ENLr1k.js} +1 -1
- package/dist/client/assets/{ArrowNarrowLeft-Bj9BOs-z.js → ArrowNarrowLeft-CIQd7Thm.js} +1 -1
- package/dist/client/assets/{ArrowUpRight-CGIcPNOI.js → ArrowUpRight-Dj7chErN.js} +1 -1
- package/dist/client/assets/{Check-iLkh97pT.js → Check-C_Bp7Lkb.js} +1 -1
- package/dist/client/assets/{CheckCircle-BqxncqLD.js → CheckCircle-9G-pL5Yz.js} +1 -1
- package/dist/client/assets/{ChevronDown-hAIeVVjO.js → ChevronDown-XYfullCn.js} +1 -1
- package/dist/client/assets/{ChevronRight-DvySy092.js → ChevronRight-BoP1zu-d.js} +1 -1
- package/dist/client/assets/{ChevronUp-nRc3sEaT.js → ChevronUp-BOtuvBeQ.js} +1 -1
- package/dist/client/assets/{Container-kWAyJ_HH.js → Container-BnqqIRxQ.js} +1 -1
- package/dist/client/assets/{DotsVertical-C-S6nCss.js → DotsVertical-C8L9nh0Y.js} +1 -1
- package/dist/client/assets/{LayoutLeft-JykQcN-j.js → LayoutLeft-CRh2Avtv.js} +1 -1
- package/dist/client/assets/{LinkExternal01-BxIXc_ra.js → LinkExternal01-CsvNVKSe.js} +1 -1
- package/dist/client/assets/{Lock01-mA7QgL2y.js → Lock01-BfkT1rLN.js} +1 -1
- package/dist/client/assets/{Palette-BcbDyirO.js → Palette-C_x81RzA.js} +1 -1
- package/dist/client/assets/{Play-B-SyQLb4.js → Play-BGKlvj8h.js} +1 -1
- package/dist/client/assets/{Plus-Da0UZLbd.js → Plus-CoyZs5M_.js} +1 -1
- package/dist/client/assets/{RefreshCcw01-DjbieO7J.js → RefreshCcw01-BTQrYDoS.js} +1 -1
- package/dist/client/assets/{SearchMd-CRZSLxL6.js → SearchMd-CqfIDBLz.js} +1 -1
- package/dist/client/assets/{Settings02-CRn2TAbB.js → Settings02-Bj1bohUt.js} +1 -1
- package/dist/client/assets/{Shield01-mkPGOpR6.js → Shield01-D9x40AM1.js} +1 -1
- package/dist/client/assets/{Star01-DKC04CRs.js → Star01-Dezh7tEC.js} +1 -1
- package/dist/client/assets/{Sun-BmooIo9H.js → Sun-CF_fZ8z_.js} +1 -1
- package/dist/client/assets/{Tool01-Cmmu87hJ.js → Tool01-yEmwHppq.js} +1 -1
- package/dist/client/assets/{Trash01-_0GJuf6O.js → Trash01-CfYXqAgk.js} +1 -1
- package/dist/client/assets/{User01-BeQhAfkv.js → User01-nyGmAcbb.js} +1 -1
- package/dist/client/assets/{Users03-BRhtwP3R.js → Users03-CC5zD4NC.js} +1 -1
- package/dist/client/assets/{X-BIBUzPXw.js → X-_H3PwZ-x.js} +1 -1
- package/dist/client/assets/{XCircle-B3Ec4xbl.js → XCircle-DlAAwHo3.js} +1 -1
- package/dist/client/assets/{XClose-_fuYraP_.js → XClose-DJ6uZIFi.js} +1 -1
- package/dist/client/assets/{Zap-C2Ojyfeu.js → Zap-DAhFCcSC.js} +1 -1
- package/dist/client/assets/{ZapSquare-Bp-Tac0d.js → ZapSquare-BQR205kq.js} +1 -1
- package/dist/client/assets/{accordion-rzQTbL0h.js → accordion-BUvTDbcS.js} +1 -1
- package/dist/client/assets/{agent-icon-C3ToZMO1.js → agent-icon-pqJUo1bp.js} +1 -1
- package/dist/client/assets/{agents-list-sQ_2-MIz.js → agents-list-RvvpkzOh.js} +1 -1
- package/dist/client/assets/{ai-providers-DRxrdzrJ.js → ai-providers-CXyEZeAJ.js} +1 -1
- package/dist/client/assets/{alert-dialog-rJ8tQXxB.js → alert-dialog-D1FQBcc3.js} +1 -1
- package/dist/client/assets/{auth-catchall-Cqm9tpGx.js → auth-catchall-ol1v2Hpr.js} +1 -1
- package/dist/client/assets/{automation-list-row-A_8c4BfR.js → automation-list-row-BTS2cEDn.js} +1 -1
- package/dist/client/assets/{automations-YzDLAcj1.js → automations-BsVY7Fq2.js} +1 -1
- package/dist/client/assets/{avatar-BzKxqu3b.js → avatar-C-x5h3du.js} +1 -1
- package/dist/client/assets/{badge-CtvUEMa3.js → badge-B5O2UAE8.js} +1 -1
- package/dist/client/assets/{brand-context-CFaaMt6s.js → brand-context-CYXLTPxr.js} +1 -1
- package/dist/client/assets/{card-DTHqwNV7.js → card-DDt5rBOW.js} +1 -1
- package/dist/client/assets/{chat-context-DxzvANdp.js → chat-context-B0CrrMvm.js} +1 -1
- package/dist/client/assets/{checkbox-Cs8wVTnP.js → checkbox-DdbawBjt.js} +1 -1
- package/dist/client/assets/{collection-detail-BVdBCgeZ.js → collection-detail-BQGTMUz_.js} +1 -1
- package/dist/client/assets/{collection-display-button-B-70Ju9K.js → collection-display-button-BME188lN.js} +1 -1
- package/dist/client/assets/{collection-search-BvyGXjxx.js → collection-search-ClTmOQtV.js} +1 -1
- package/dist/client/assets/{collection-search-CbmTjLje.js → collection-search-DnJUOSiV.js} +1 -1
- package/dist/client/assets/{collection-table-wrapper-DXq2NrGj.js → collection-table-wrapper-jsYib-z5.js} +1 -1
- package/dist/client/assets/{collection-tabs-Cx7Fw5pB.js → collection-tabs-Bv32FI82.js} +1 -1
- package/dist/client/assets/{collections-BrXh640u.js → collections-C2GekKfD.js} +1 -1
- package/dist/client/assets/{command-Gp6-PTcb.js → command-4tV0tWXg.js} +1 -1
- package/dist/client/assets/{connection-card-gdrfoq9h.js → connection-card-D9M-U0UE.js} +1 -1
- package/dist/client/assets/{connection-detail-sPm6-FQh.js → connection-detail-W-i4n_V0.js} +1 -1
- package/dist/client/assets/{connection-form-helpers-CMTw78q4.js → connection-form-helpers-PKzSpxAP.js} +1 -1
- package/dist/client/assets/{connections-ClXPJSid.js → connections-CFyWQjm7.js} +1 -1
- package/dist/client/assets/{constants-Byqq7P-x.js → constants-ChOKU-PU.js} +1 -1
- package/dist/client/assets/{constants-j7SVGFua.js → constants-K_0FCyet.js} +1 -1
- package/dist/client/assets/{dialog-CVU8C65F.js → dialog-DLvaCZhi.js} +1 -1
- package/dist/client/assets/{domain-settings-DKmwgR9_.js → domain-settings-lkafeUQo.js} +1 -1
- package/dist/client/assets/{drawer-BPoStQav.js → drawer-e4igmw2U.js} +1 -1
- package/dist/client/assets/{dropdown-menu-CFvw1sby.js → dropdown-menu-B8cH2K9_.js} +1 -1
- package/dist/client/assets/{dynamic-plugin-layout-DB9J-dmB.js → dynamic-plugin-layout-C5NDBdyq.js} +1 -1
- package/dist/client/assets/{empty-state-8-OQfGVL.js → empty-state-_hM6S73f.js} +1 -1
- package/dist/client/assets/{empty-state-DICfxaK6.js → empty-state-xC0Hjgxk.js} +1 -1
- package/dist/client/assets/{extract-connection-data-D9CVtxg9.js → extract-connection-data-Dn4BJH0J.js} +1 -1
- package/dist/client/assets/{features-CozjNW2D.js → features-DlZAVmim.js} +1 -1
- package/dist/client/assets/{form-D2ajrZY7.js → form-BeBxrBEq.js} +1 -1
- package/dist/client/assets/{general-BkPw_hwG.js → general-iTpBfhZ3.js} +1 -1
- package/dist/client/assets/{index-BbzWWop6.js → index-713BaADI.js} +1 -1
- package/dist/client/assets/{index-D7EGXs0z.js → index-B4qEuPcM.js} +1 -1
- package/dist/client/assets/{index-BwduZbfJ.js → index-BMva3-9T.js} +1 -1
- package/dist/client/assets/{index-DR62hZV9.js → index-BO0Inq7t.js} +1 -1
- package/dist/client/assets/{index-CB-9CUUW.js → index-BRY25LXZ.js} +2 -2
- package/dist/client/assets/{index-MHifxSvC.js → index-BSuvPrwU.js} +1 -1
- package/dist/client/assets/{index-Cd02a-JG.js → index-BjpkEK9E.js} +1 -1
- package/dist/client/assets/{index-Ca8lIGfE.js → index-CWtyRHnw.js} +1 -1
- package/dist/client/assets/{index-CPY1FvNi.js → index-Ck8rOeRC.js} +1 -1
- package/dist/client/assets/{index-BcJogvuh.js → index-CuUtTo4R.js} +1 -1
- package/dist/client/assets/{index-D7tifyXI.js → index-DDOld6Hj.js} +1 -1
- package/dist/client/assets/{index-8aV9WSX6.js → index-D_QVZZhC.js} +1 -1
- package/dist/client/assets/{index-dI45a3oJ.js → index-nrobA16R.js} +1 -1
- package/dist/client/assets/{index-Bb5AeDnq.js → index-o9XsekIm.js} +1 -1
- package/dist/client/assets/{index-C_u8z90u.js → index-sv_5_jW0.js} +1 -1
- package/dist/client/assets/{index-4U7gRnbz.js → index-x7mx8TiN.js} +3 -3
- package/dist/client/assets/{infiniteQueryObserver-B8WYxU9o.js → infiniteQueryObserver-C1nf2zRF.js} +1 -1
- package/dist/client/assets/{input-DNFaDN-t.js → input-g22460I-.js} +1 -1
- package/dist/client/assets/{integration-icon-Bt36uZm6.js → integration-icon-BkoK_Zpp.js} +1 -1
- package/dist/client/assets/{label-EPch60Re.js → label-CB2xWKDz.js} +1 -1
- package/dist/client/assets/{layout-C-ijRiyr.js → layout-O8BY7YMT.js} +1 -1
- package/dist/client/assets/{lean-canvas-recruit-modal-DfNm4E73.js → lean-canvas-recruit-modal-C5kJnWTY.js} +1 -1
- package/dist/client/assets/{login-Dp5n-o6e.js → login-BAjANqId.js} +1 -1
- package/dist/client/assets/{members-B4-cMOsS.js → members-DdZ1NeQN.js} +1 -1
- package/dist/client/assets/{monaco-editor-UJJyG6n2.js → monaco-editor-DlTcdq5f.js} +1 -1
- package/dist/client/assets/{monitoring-stats-row-Ba3ar8Om.js → monitoring-stats-row-BdyzlkVq.js} +1 -1
- package/dist/client/assets/{oauth-callback-Dgudf75C.js → oauth-callback-WBrarn1K.js} +1 -1
- package/dist/client/assets/{oauth-callback-ai-provider-EanhHzQY.js → oauth-callback-ai-provider-RNILsOLP.js} +1 -1
- package/dist/client/assets/{onboarding-CN7qNa98.js → onboarding-DyswWi3n.js} +1 -1
- package/dist/client/assets/{org-layout-CdBnaGi6.js → org-layout-DUCy6vsu.js} +1 -1
- package/dist/client/assets/{org-plugin-layout-pmz_1-KP.js → org-plugin-layout-DHoq95_4.js} +1 -1
- package/dist/client/assets/{pair-C-m8tavv.js → pair-DHYTbtVI.js} +1 -1
- package/dist/client/assets/{plugin-empty-state-PqSYiLpp.js → plugin-empty-state-Cmk2xH9Y.js} +1 -1
- package/dist/client/assets/{plugin-header-apdmEPGc.js → plugin-header-9qVbYUa2.js} +1 -1
- package/dist/client/assets/{plugin-layout-DE-RB_rr.js → plugin-layout-CFpRp241.js} +1 -1
- package/dist/client/assets/{popover-DqPZrAPW.js → popover-BTKCLXDn.js} +1 -1
- package/dist/client/assets/{profile-CDG3HHBU.js → profile-Bv6bMhaY.js} +1 -1
- package/dist/client/assets/{project-app-view-eNqi9XCt.js → project-app-view-e8_e4R8S.js} +1 -1
- package/dist/client/assets/{registry-layout-CoJtCj-r.js → registry-layout-CbP8TcT_.js} +1 -1
- package/dist/client/assets/registry-qNWihn9t.js +2 -0
- package/dist/client/assets/{required-auth-layout-DNLyc-Jc.js → required-auth-layout-bGbsPRe1.js} +1 -1
- package/dist/client/assets/{reset-password-BILcwCX-.js → reset-password-ftD4VHiA.js} +1 -1
- package/dist/client/assets/{roles-EUFvZijn.js → roles-BPdqIQwH.js} +1 -1
- package/dist/client/assets/{scroll-area-C80z-i4l.js → scroll-area-Bd7rJlST.js} +1 -1
- package/dist/client/assets/{search-input-CITVGcCE.js → search-input-C7xe1zP3.js} +1 -1
- package/dist/client/assets/{select-D2rWlduK.js → select-CRjOFVsl.js} +1 -1
- package/dist/client/assets/{select-model-BTNonZmN.js → select-model-DaqlG4E9.js} +1 -1
- package/dist/client/assets/{settings-layout-Bg2zZUvB.js → settings-layout-fOFpl38H.js} +1 -1
- package/dist/client/assets/{settings-section-Dnz7xxTt.js → settings-section-DS7ApbzG.js} +1 -1
- package/dist/client/assets/{shell-layout-C4Qbz79U.js → shell-layout-DCTWNnYh.js} +1 -1
- package/dist/client/assets/{sidebar-BWu_ePOy.js → sidebar-G21X9kgh.js} +1 -1
- package/dist/client/assets/{skeleton-DJTy6ez2.js → skeleton-CLaDxckX.js} +1 -1
- package/dist/client/assets/{spinner-WgqEYOpc.js → spinner-aHtyyvs3.js} +1 -1
- package/dist/client/assets/{sso-ZW_bBsst.js → sso-DG6fo7Wz.js} +1 -1
- package/dist/client/assets/{store-2-hWApJp.js → store-Co--1mXW.js} +1 -1
- package/dist/client/assets/store-registry-CGxsV0jz.js +2 -0
- package/dist/client/assets/{switch-qhfo8Vps.js → switch-BCi_tNrV.js} +1 -1
- package/dist/client/assets/{table-DT9Lwdc9.js → table-DKQMevzB.js} +1 -1
- package/dist/client/assets/{tabs-DdVMeHSM.js → tabs-D5qvY9dA.js} +1 -1
- package/dist/client/assets/{task-status-CNZzETah.js → task-status-CLd6IVO0.js} +1 -1
- package/dist/client/assets/{textarea-tUo13Bze.js → textarea-DU6sgZef.js} +1 -1
- package/dist/client/assets/{toggle-group-CDk1azIm.js → toggle-group-BYdg659y.js} +1 -1
- package/dist/client/assets/{tools-list-B7BG48WQ.js → tools-list-CxlLpio7.js} +1 -1
- package/dist/client/assets/{tooltip-Fw0r1Fnv.js → tooltip-CaFNQbaH.js} +1 -1
- package/dist/client/assets/{types-SLEmji6U.js → types-BcO5bOr1.js} +1 -1
- package/dist/client/assets/{use-ai-providers-C-k1YUCw.js → use-ai-providers-CMl8n2RP.js} +1 -1
- package/dist/client/assets/{use-collections-B62mMH76.js → use-collections-B18X79ey.js} +1 -1
- package/dist/client/assets/{use-connection-CGnX1bAr.js → use-connection-D-Y5WZLa.js} +1 -1
- package/dist/client/assets/{use-copy-S7d6ccvS.js → use-copy-C1Kl6cer.js} +1 -1
- package/dist/client/assets/{use-create-virtual-mcp-D8mqROzD.js → use-create-virtual-mcp-C5acPMBL.js} +1 -1
- package/dist/client/assets/{use-debounced-autosave-DSiduY2E.js → use-debounced-autosave-DTP9ZFm1.js} +1 -1
- package/dist/client/assets/{use-decopilot-events-CD5HmYFC.js → use-decopilot-events-DCwOC8tQ.js} +1 -1
- package/dist/client/assets/{use-delete-connection-DVHNgb48.js → use-delete-connection-CuUEXsMJ.js} +1 -1
- package/dist/client/assets/{use-infinite-scroll-SPOySZcn.js → use-infinite-scroll-BrvZ5kNc.js} +1 -1
- package/dist/client/assets/{use-list-state-CB5cSSEY.js → use-list-state-CYrR4koF.js} +1 -1
- package/dist/client/assets/{use-mcp-tools-DbRVIPCe.js → use-mcp-tools-p5eNuRu_.js} +1 -1
- package/dist/client/assets/{use-members-Cjc37mTg.js → use-members-asX6PNtQ.js} +1 -1
- package/dist/client/assets/{use-navigate-to-agent-BFHXdont.js → use-navigate-to-agent-re2UjJnQ.js} +1 -1
- package/dist/client/assets/{use-org-auth-client-CH982N7h.js → use-org-auth-client-Y6P_21Nx.js} +1 -1
- package/dist/client/assets/{use-org-sso-DyRmCzkM.js → use-org-sso-j8HePnUG.js} +1 -1
- package/dist/client/assets/{use-organization-roles-2UTk-DFF.js → use-organization-roles-D7hbxwdc.js} +1 -1
- package/dist/client/assets/{use-organization-settings-gXH8ly7B.js → use-organization-settings-8Xiyp7J6.js} +1 -1
- package/dist/client/assets/{use-registry-connections-DAbFKgpw.js → use-registry-connections-IbCOWAWk.js} +1 -1
- package/dist/client/assets/{use-status-sounds-VTPYJ4_T.js → use-status-sounds-B8tKxqE4.js} +1 -1
- package/dist/client/assets/{use-tasks-Buj64kOD.js → use-tasks-jUiBKFWl.js} +1 -1
- package/dist/client/assets/{use-view-mode-C9lWb9qo.js → use-view-mode-CJVMuzSM.js} +1 -1
- package/dist/client/assets/{use-virtual-mcp-CnvhxxMa.js → use-virtual-mcp-DLuIO4Fw.js} +1 -1
- package/dist/client/assets/useInfiniteQuery-ycBQMtqS.js +1 -0
- package/dist/client/assets/useSuspenseInfiniteQuery-DkCw-LQn.js +1 -0
- package/dist/client/assets/{user-Chu-GPC8.js → user-a1mAL36G.js} +1 -1
- package/dist/client/assets/{view-mode-toggle-Cj1WIwcj.js → view-mode-toggle-D2MfIulL.js} +1 -1
- package/dist/client/assets/{workflow-BBU02wN2.js → workflow-73m9n75X.js} +1 -1
- package/dist/client/assets/workflow-detail-80bLLyu0.js +1 -0
- package/dist/client/index.html +1 -1
- package/dist/server/cli.js +3 -3
- package/dist/server/server.js +2 -2
- package/package.json +1 -1
- package/dist/client/assets/registry-CBqcs7XA.js +0 -2
- package/dist/client/assets/store-registry-01dPTj0W.js +0 -2
- package/dist/client/assets/useInfiniteQuery-BECdJto-.js +0 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-DLoMCiwp.js +0 -1
- package/dist/client/assets/workflow-detail-CoYIUlop.js +0 -1
- package/dist/server/node_modules/mimic-fn/index.d.ts +0 -54
- package/dist/server/node_modules/mimic-fn/index.js +0 -13
- package/dist/server/node_modules/mimic-fn/license +0 -9
- package/dist/server/node_modules/mimic-fn/package.json +0 -42
- package/dist/server/node_modules/mimic-fn/readme.md +0 -69
package/dist/server/server.js
CHANGED
|
@@ -6966,7 +6966,7 @@ The web_search tool streams its research result directly to the user in real tim
|
|
|
6966
6966
|
|
|
6967
6967
|
`+"For large results, the tool result contains a `uri` (mesh-storage:\u2026) instead of "+"inline content. To re-access the full research in a later turn, call `read_resource` with that URI.\n</web-search>"});class C68{thread;organization_id;storage;defaultWindowSize;constructor(X){this.thread=X.thread,this.organization_id=X.thread.organization_id,this.storage=X.storage,this.defaultWindowSize=X.defaultWindowSize??50}async loadHistory(X){let Y=X??this.defaultWindowSize,{messages:G}=await this.storage.listMessages(this.thread.id,{limit:Y,sort:"desc"}),Q=[...G].reverse(),J=Q.findIndex(($)=>$.role==="user");return J>=0?Q.slice(J):Q}async save(X){if(X.length===0)return;await this.storage.saveMessages(X)}}async function v68(X,Y){let{thread_id:G,defaultWindowSize:Q}=Y;if(!G)throw Error("createMemory: thread_id is required");let J=await X.get(G);if(!J)throw Error(`Thread not found: ${G}`);return new C68({thread:J,storage:X,defaultWindowSize:Q})}function _68(X,Y){let G=X.thinking.capabilities;if(!((G?.vision??!1)||(G?.file??!1))){if(Y.some(($)=>$.parts?.some((Z)=>Z.type==="file")))throw new _9(400,{message:"This model does not support file uploads. Please change the model and try again."})}}var f68=w(()=>{Iz()});function b68(X,Y=[]){if(X==="stop")return Y.filter((J)=>J.type==="text"&&J.text).map((J)=>J.text).join(`
|
|
6968
6968
|
`).replace(/https?:\/\/[^\s)>\]]+/g,"").includes("?")?"requires_action":"completed";if(X==="tool-calls"){let G=Y.some((J)=>J.type==="tool-user_ask"&&J.state==="input-available"),Q=Y.some((J)=>J.state==="approval-requested");return G||Q?"requires_action":"completed"}return"failed"}function y68(X){let{abortSignal:Y,model:G,userMessage:Q}=X,J=new AbortController,$=()=>J.abort();Y.addEventListener("abort",$,{once:!0});let Z,W=()=>{Z=setTimeout(()=>{J.abort()},qn5)};return{promise:(async()=>{try{let U=(await rq({model:G,system:yL6,messages:[{role:"user",content:Q}],maxOutputTokens:60,temperature:0.2,abortSignal:J.signal})).text.trim().replace(/^```(?:json)?\s*\n?/i,"").replace(/\n?```\s*$/,"").trim(),B;try{let N=JSON.parse(U);B=typeof N.title==="string"?N.title:U}catch{B=U.split(`
|
|
6969
|
-
`)[0]??U}if(B=B.replace(/^["']|["']$/g,"").replace(/^(Title:|title:)\s*/i,"").replace(/^```.*$/gm,"").replace(/[{}[\]]/g,"").replace(/[.!?]$/,"").slice(0,60).trim(),!B||/^[\s"':{}[\],]+$/.test(B))return null;return B}catch(H){let U=H;if(U.name==="AbortError")console.warn("[decopilot:title] Title generation aborted (timeout or parent abort)");else console.error("[decopilot:title] \u274C Failed to generate title:",U.message);return null}finally{clearTimeout(Z),Y.removeEventListener("abort",$)}})(),finish:W}}var qn5=1e4;var h68=w(()=>{jY();i2()});function zl(){return h4().podName}var Wl1=w(()=>{XX()});function ga(X){if(X instanceof Error)return X.message;if(typeof X==="object"&&X!==null)try{return JSON.stringify(X)}catch{return"[unserializable object]"}return String(X)}function An5(X){if(X instanceof Error&&X.name==="AbortError")return"aborted";let Y=(X instanceof Error?X.message:ga(X)).toLowerCase();if(/insufficient|no credits|out of credits|balance|payment|quota exceeded|402/i.test(Y))return"insufficient_funds";if(/rate.?limit|too many requests|429/i.test(Y))return"rate_limit";if(/timeout|timed out|deadline/i.test(Y))return"timeout";if(/unauthor|forbidden|401|403|invalid.*(key|token)/i.test(Y))return"auth";if(/tool|mcp|connection/i.test(Y))return"tool_error";if(/model|provider|anthropic|openai|gemini|claude/i.test(Y))return"model_error";return"unknown"}function $l1(X,Y){if(Y.capabilities?.reasoning!==!1)return X.aiSdk.languageModel(Y.id,{reasoning:{enabled:!0,effort:"medium"}});return X.aiSdk.languageModel(Y.id)}async function Mw(X,Y,G){return LB4("decopilot.streamCore",(Q)=>Tn5(X,Y,G,Q),{"decopilot.agent.id":X.agent.id,"decopilot.model.id":X.models.thinking.id,"decopilot.credential.id":X.models.credentialId,"decopilot.organization.id":X.organizationId,"decopilot.user.id":X.userId,"decopilot.thread.id":X.taskId})}async function Tn5(X,Y,G,Q){let{runRegistry:J,streamBuffer:$}=G;X={...X,messages:X.messages.map((B)=>B.id?B:{...B,id:EP0()})};let Z,W=!1,K,H,U=!1;try{let B=await Y.storage.aiProviderKeys.findById(X.models.credentialId,X.organizationId).catch(()=>null),N=B?.providerId==="claude-code",O=B?.providerId==="codex",z=N||O;if(Q.setAttribute("decopilot.isCliAgent",z),Q.setAttribute("decopilot.isCodex",O),!z){let U1=await LU(Y.db,X.organizationId,Y.auth.user?.role);if(!cq(U1,X.models.credentialId,X.models.thinking.id))throw Error("Model not allowed for your role")}let D=X.windowSize??c2;if(!X.taskId)throw Error("streamCore: taskId is required");let[E,P,q]=await Promise.all([Y.storage.virtualMcps.findById(X.agent.id,X.organizationId),z?Promise.resolve(null):Y.aiProviders.activate(X.models.credentialId,X.organizationId),v68(Y.storage.threads,{organization_id:X.organizationId,thread_id:X.taskId,userId:X.userId,defaultWindowSize:D})]);if(K=q.thread.id,Y.metadata.threadId=q.thread.id,Q.setAttribute("decopilot.thread.id",q.thread.id),q.thread.created_by!==X.userId)throw Error("You are not allowed to write to this thread because you are not the owner");if(P?.asyncResearch){let U1=[["thinking",X.models.thinking.id]];if(X.models.coding)U1.push(["coding",X.models.coding.id]);if(X.models.fast)U1.push(["fast",X.models.fast.id]);if(X.models.image)U1.push(["image",X.models.image.id]);for(let[w1,C1]of U1)if(P.asyncResearch.canHandle(C1))throw Error(`Model "${C1}" can only be used as a Deep Research model. It is not usable as the ${w1} model \u2014 set it in the Deep Research slot instead.`)}let V=async(...U1)=>{let w1=Date.now(),C1=[...new Map(U1.filter(Boolean).map((s1)=>[s1.id,s1])).values()].filter((s1)=>s1.parts&&s1.parts.length>0).map((s1,m1)=>({...s1,thread_id:q.thread.id,created_at:new Date(w1+m1).toISOString(),updated_at:new Date(w1+m1).toISOString()}));if(C1.length===0)return;await q.save(C1).catch((s1)=>{console.error("[decopilot:stream] Error saving messages",s1)})};if(!E)throw Error("Agent not found");if(X.isResume)await J.execute({type:"RESUME",taskId:q.thread.id,orgId:X.organizationId,userId:X.userId,abortController:new AbortController,podId:zl()});else await J.execute({type:"START",taskId:q.thread.id,orgId:X.organizationId,userId:X.userId,abortController:new AbortController,podId:zl(),runConfig:{models:X.models,agent:X.agent,temperature:X.temperature,toolApprovalLevel:X.toolApprovalLevel,mode:X.mode,windowSize:X.windowSize,triggerId:X.triggerId}});W=!0;let M=J.getAbortSignal(q.thread.id);if(!M)throw await J.execute({type:"FINISH",taskId:q.thread.id,threadStatus:"failed"}),Error("Run was cancelled immediately after starting");if(X.abortSignal){let U1=X.abortSignal;if(U1.aborted)await J.execute({type:"CANCEL",taskId:q.thread.id});else U1.addEventListener("abort",()=>{J.execute({type:"CANCEL",taskId:q.thread.id}).catch(()=>{})},{once:!0})}$?.purge(q.thread.id);let I=X.messages.filter((U1)=>U1.role==="system"),R=X.messages.find((U1)=>U1.role!=="system"),C=R?(await j48([R],Y)).find((U1)=>U1.role!=="system"):void 0;if(!X.isResume){if(!C)throw Error("No user message found in input \u2014 expected at least one non-system message");await V(C)}M.addEventListener("abort",()=>{Z?.()});let _=X.models.thinking.limits?.maxOutputTokens??QI1,v=!1,b=[],x=await E48(q,C,I,D),i;if(N)for(let U1=x.length-1;U1>=0;U1--){let w1=x[U1],C1=w1?.metadata;if(w1?.role==="assistant"&&C1?.codingAgentSessionId&&C1?.codingAgentProvider==="claude-code"){i=C1.codingAgentSessionId;break}}let n=new Map,h=[],m=Y.organization,e=Date.now(),s={inputTokens:0,outputTokens:0,totalTokens:0},N1=null,L1=zQ1({originalMessages:x,execute:async({writer:U1})=>{let w1=S68(X.mode,{isCliAgent:z}),C1=await $M(E,Y,"passthrough",!0,{listTimeoutMs:1000}),s1;Z=()=>{C1.close().catch(()=>{}),s1?.close().catch(()=>{})};let{tools:m1,nameMap:y1}=z?{tools:{},nameMap:new Map}:await Xl1(C1,n,U1,X.toolApprovalLevel,{ctx:Y,isPlanMode:w1.isPlanMode}),Y1=E.metadata,u1=!Y1.githubRepo,W0=X.userId?{virtualMcpId:X.agent.id,branch:u1?"ephemeral":X.branch??`thread:${q.thread.id}`,userId:X.userId,threadId:q.thread.id}:null,a1=z?{}:await I68(U1,{provider:P,organization:m,models:X.models,toolApprovalLevel:X.toolApprovalLevel,isPlanMode:w1.isPlanMode,toolOutputMap:n,pendingImages:h,passthroughClient:C1,vmContext:W0,taskId:q.thread.id},Y),P1=new Set(Object.keys(m1)),E1=Object.keys(a1),B1=In5(x,P1),$1=new Map;if(w1.isPlanMode&&!z){let{tools:q1}=await C1.listTools();for(let A of q1){let y=y1.get(A.name);if(y)$1.set(y,{readOnlyHint:A.annotations?.readOnlyHint})}}let M1=z?new Map:C1.getConnectionTitleMap(),j1=new Map,i1=z?{}:{...m1,...a1,list_connection_tools:Rn5(C1,y1,M1),enable_tools:M68(B1,P1,j1,{isPlanMode:w1.isPlanMode,toolAnnotations:$1})},T1=_L6(),[f1,e1]=await Promise.all([Mn5(C1,B1,y1,M1),Sn5(C1)]);for(let[q1,A]of f1.connectionToolsMap.entries())j1.set(q1,A);let Z0=f1.catalog,z4=C1.getInstructions(),g0=AB(X.agent.id)?fL6():z4,U0=w1.planPrompt,N0=w1.webSearchInstructionPrompt&&"web_search"in i1?w1.webSearchInstructionPrompt:null,v0=Y1?.githubRepo?bL6(Y1.githubRepo):null,I0=[T1,U0,N0,v0,e1,g0].filter((q1)=>Boolean(q1?.trim())),T6=[T1,U0,N0,v0,Z0,e1,g0].filter((q1)=>Boolean(q1?.trim())),R1=await I48(x,Y),{systemMessages:X0,messages:r0,originalMessages:b4}=await P48(R1,{windowSize:D,models:X.models,tools:i1});if(_68(X.models,b4),q.thread.title===JI1&&!z){let q1=JSON.stringify(r0[0]?.content);N1=y68({abortSignal:M,model:$l1(P,X.models.fast??X.models.thinking),userMessage:q1});let A=N1.promise.then(async(y)=>{if(!y)return;if(await Y.storage.threads.update(q.thread.id,{title:y}).catch((Q1)=>{console.error("[decopilot:stream] Error updating thread title",Q1)}),!v)U1.write({type:"data-thread-title",data:{title:y},transient:!0}),console.log("[decopilot:title-debug] SSE title event sent threadId=%s",q.thread.id);else console.warn("[decopilot:title-debug] Stream already finished, title SSE NOT sent threadId=%s title=%j",q.thread.id,y)}).catch((y)=>{console.warn("[decopilot:stream] Title generation failed:",y)});b.push(A)}let d=null,V1,g,L,S={inputTokens:0,outputTokens:0,totalTokens:0},c=0;H=Date.now();let o;if(N){let q1=await Y.boundAuth.apiKey.create({name:"claude-code-session",expiresIn:3600,metadata:{organization:{id:m.id,slug:m.slug,name:m.name}}}),A=`${E51()}/mcp/virtual-mcp/${X.agent.id}`,y;if(W0&&Y1.githubRepo){let Q1=await Hl(Y);if(Q1.kind==="host"){let{computeHandle:k1,composeSandboxRef:D1}=await Promise.resolve().then(() => (b3(),CM)),b1=D1({orgId:m.id,virtualMcpId:W0.virtualMcpId,branch:W0.branch}),L0=k1({userId:W0.userId,projectRef:b1},W0.branch);y=await Q1.localWorkdir(L0)??void 0}}o=mq0(uq6(X.models.thinking.id),{mcpServers:{cms:{type:"http",url:A,headers:{Authorization:`Bearer ${q1.key}`,"x-org-id":X.organizationId}}},toolApprovalLevel:X.toolApprovalLevel,isPlanMode:w1.isPlanMode,resume:i,cwd:y})}else if(O){let q1=await Y.boundAuth.apiKey.create({name:"codex-session",expiresIn:3600,metadata:{organization:{id:m.id,slug:m.slug,name:m.name}}}),A=`${E51()}/mcp/virtual-mcp/${X.agent.id}`,y=$A0(yA6(X.models.thinking.id),{mcpServers:{cms:{transport:"http",url:A,headers:{Authorization:`Bearer ${q1.key}`,"x-org-id":X.organizationId}}},toolApprovalLevel:X.toolApprovalLevel,isPlanMode:w1.isPlanMode});o=y.model,s1=y.provider}else o=$l1(P,X.models.thinking);let H1=xU.startSpan("decopilot.streamText",{attributes:{"decopilot.model.id":X.models.thinking.id,"decopilot.credential.id":X.models.credentialId,"decopilot.isCliAgent":z,"decopilot.isCodex":O}}),t;try{t=oN({model:o,system:[...T6.map((q1)=>({role:"system",content:q1})),...X0],messages:r0,tools:i1,...z?{}:{prepareStep:(()=>{let q1=w1.forcedFirstStepTool&&w1.forcedFirstStepTool in i1?w1.forcedFirstStepTool:null,A=0;return(y)=>{let Q1=y.messages,k1=A===0;A++;let D1;if(h.length>0){let A4=h.splice(0,h.length),r=[];for(let a of A4)if(r.push({type:"text",text:a.label??(a.pageUrl?`[Screenshot of ${a.pageUrl}]`:"[Image]")}),a.url.startsWith("data:")){let G1=a.url.match(/^data:([^;]+);base64,(.+)$/s);if(G1)r.push({type:"image",image:G1[2],mimeType:G1[1]})}else r.push({type:"image",image:new URL(a.url)});D1=[...Q1,{role:"user",content:r}]}let b1=[...E1,"list_connection_tools","enable_tools",...B1];if(w1.isPlanMode)b1=b1.filter((A4)=>{if(E1.includes(A4)||A4==="enable_tools"||A4==="list_connection_tools")return!0;return $1.get(A4)?.readOnlyHint===!0});let L0=q1&&k1?q1:null;return{activeTools:b1,...D1&&{messages:D1},...L0&&{toolChoice:{type:"tool",toolName:L0}},...!k1&&{system:[...I0.map((A4)=>({role:"system",content:A4})),...X0]}}}})(),temperature:X.temperature,maxOutputTokens:_,stopWhen:rN(kL6)},abortSignal:M,onFinish:async({usage:q1,totalUsage:A,finishReason:y,request:Q1,response:k1})=>{H1.setAttribute("decopilot.llm.inputTokens",A.inputTokens??0),H1.setAttribute("decopilot.llm.outputTokens",A.outputTokens??0),H1.setAttribute("decopilot.llm.finishReason",y),H1.setStatus({code:Kl1.SpanStatusCode.OK}),H1.end();let D1=Date.now()-(H??Date.now());if(U=!0,Zl1({ctx:Y,organizationId:X.organizationId,modelId:X.models.thinking.id,durationMs:D1,isError:!1,inputTokens:A.inputTokens,outputTokens:A.outputTokens}),s={inputTokens:s.inputTokens+(A.inputTokens??0),outputTokens:s.outputTokens+(A.outputTokens??0),totalTokens:s.totalTokens+(A.totalTokens??0)},Jl1({ctx:Y,organizationId:X.organizationId,agentId:X.agent.id,modelId:X.models.thinking.id,modelTitle:X.models.thinking.title??X.models.thinking.id,credentialId:X.models.credentialId,taskId:q.thread.id,durationMs:D1,isError:!1,finishReason:y,usage:{inputTokens:q1.inputTokens??0,outputTokens:q1.outputTokens??0,totalTokens:q1.totalTokens??0},totalUsage:{inputTokens:A.inputTokens??0,outputTokens:A.outputTokens??0,totalTokens:A.totalTokens??0},request:Q1,response:k1,userId:X.userId,requestId:Y.metadata.requestId,userAgent:Y.metadata.userAgent??null}),M.aborted)return},onError:async(q1)=>{let A=q1 instanceof Error?q1:Error(ga(q1));if(H1.setStatus({code:Kl1.SpanStatusCode.ERROR,message:A.message}),H1.recordException(A),H1.end(),console.error("[decopilot:stream] Error",q1),M.aborted)throw q1;if(!U){let y=Date.now()-(H??Date.now());U=!0,Zl1({ctx:Y,organizationId:X.organizationId,modelId:X.models.thinking.id,durationMs:y,isError:!0,errorType:q1 instanceof Error?q1.name:"Error"}),Jl1({ctx:Y,organizationId:X.organizationId,agentId:X.agent.id,modelId:X.models.thinking.id,modelTitle:X.models.thinking.title??X.models.thinking.id,credentialId:X.models.credentialId,taskId:q.thread.id,durationMs:y,isError:!0,errorMessage:q1 instanceof Error?q1.message:ga(q1),userId:X.userId,requestId:Y.metadata.requestId,userAgent:Y.metadata.userAgent??null})}throw q1},onAbort:async({steps:q1})=>{if(!q1.length||U)return;U=!0;let A=Date.now()-(H??Date.now()),y=q1.reduce((k1,D1)=>({inputTokens:k1.inputTokens+(D1.usage.inputTokens??0),outputTokens:k1.outputTokens+(D1.usage.outputTokens??0),totalTokens:k1.totalTokens+(D1.usage.totalTokens??0)}),{inputTokens:0,outputTokens:0,totalTokens:0}),Q1=q1[q1.length-1].usage;if(Zl1({ctx:Y,organizationId:X.organizationId,modelId:X.models.thinking.id,durationMs:A,isError:!1,inputTokens:y.inputTokens,outputTokens:y.outputTokens}),Jl1({ctx:Y,organizationId:X.organizationId,agentId:X.agent.id,modelId:X.models.thinking.id,modelTitle:X.models.thinking.title??X.models.thinking.id,credentialId:X.models.credentialId,taskId:q.thread.id,durationMs:A,isError:!1,finishReason:"abort",usage:{inputTokens:Q1.inputTokens??0,outputTokens:Q1.outputTokens??0,totalTokens:Q1.totalTokens??0},totalUsage:y,request:void 0,response:void 0,userId:X.userId,requestId:Y.metadata.requestId,userAgent:Y.metadata.userAgent??null}),y.totalTokens>0)U1.write({type:"message-metadata",messageMetadata:{usage:{inputTokens:y.inputTokens,outputTokens:y.outputTokens,totalTokens:y.totalTokens,...c>0&&{providerMetadata:{openrouter:{usage:{cost:c}}}}}}})}})}catch(q1){if(H1.setStatus({code:Kl1.SpanStatusCode.ERROR,message:q1 instanceof Error?q1.message:ga(q1)}),q1 instanceof Error)H1.recordException(q1);throw H1.end(),q1}let x1=t.toUIMessageStream({originalMessages:b4,generateMessageId:EP0,onError:(q1)=>MS0(q1),messageMetadata:({part:q1})=>{if(q1.type==="start")return{agent:{id:X.agent.id??null},models:{credentialId:X.models.credentialId,thinking:{...X.models.thinking,title:X.models.thinking.title??X.models.thinking.id,provider:X.models.thinking.provider??void 0}},created_at:new Date,_request:{systemSections:T6.map((A)=>({chars:A.length,preview:A.slice(0,80).replace(/\s+/g," ")})),tools:Object.keys(i1).length,activeTools:E1.length+1+B1.size},thread_id:q.thread.id};if(q1.type==="reasoning-start"){if(d===null)d=new Date;return{reasoning_start_at:d}}if(q1.type==="reasoning-end")return{reasoning_end_at:new Date};if(q1.type==="finish-step"){if(V1=q1.providerMetadata,N&&q1.providerMetadata?.["claude-code"])g=q1.providerMetadata["claude-code"].sessionId,L="claude-code";if(O&&q1.providerMetadata?.["codex-app-server"])g=q1.providerMetadata["codex-app-server"].threadId,L="codex";S={inputTokens:S.inputTokens+(q1.usage?.inputTokens??0),outputTokens:S.outputTokens+(q1.usage?.outputTokens??0),totalTokens:S.totalTokens+(q1.usage?.totalTokens??0)};let A=q1.providerMetadata?.openrouter?.usage?.cost;if(A!=null)c+=A;return{usage:{inputTokens:S.inputTokens,outputTokens:S.outputTokens,totalTokens:S.totalTokens,...c>0&&{providerMetadata:{openrouter:{usage:{cost:c}}}}}}}if(q1.type==="finish"){let A=X.models.thinking.provider,y=q1.totalUsage,Q1=V1??q1.providerMetadata,k1=c>0&&Q1?{...Q1,openrouter:{...Q1.openrouter??{},usage:{...Q1.openrouter?.usage??{},cost:c}}}:Q1,D1=y&&((y.inputTokens??0)>0||(y.outputTokens??0)>0)?y:S.totalTokens>0?S:y,b1=D1?{inputTokens:D1.inputTokens??0,outputTokens:D1.outputTokens??0,reasoningTokens:y?.reasoningTokens??void 0,totalTokens:D1.totalTokens??0,providerMetadata:P61(A&&k1?{...k1,[A]:{...k1[A]??{},reasoning_details:void 0}}:k1)}:void 0;return{...b1&&{usage:b1},...g&&{codingAgentSessionId:g},...L&&{codingAgentProvider:L}}}return}});if($)U1.merge($.relay(x1,q.thread.id,M));else U1.merge(x1)},onFinish:async({responseMessage:U1,finishReason:w1})=>{if(console.log("[decopilot:title-debug] onFinish called, setting streamFinished=true threadId=%s pendingOps=%d",q.thread.id,b.length),v=!0,Z?.(),N1?.finish(),await Promise.allSettled(b),await V(U1),M.aborted)return;let C1=b68(w1,U1?.parts);await J.execute({type:"FINISH",taskId:q.thread.id,threadStatus:C1}),A6.capture({distinctId:X.userId,event:"chat_message_completed",groups:{organization:X.organizationId},properties:{organization_id:X.organizationId,thread_id:q.thread.id,agent_id:X.agent.id,model_id:X.models.thinking.id,model_title:X.models.thinking.title,mode:X.mode,duration_ms:Date.now()-e,finish_reason:w1,thread_status:C1,input_tokens:s.inputTokens,output_tokens:s.outputTokens,total_tokens:s.totalTokens,is_resume:X.isResume??!1}})},onStepFinish:({responseMessage:U1})=>{let w1=J.dispatch({type:"STEP_DONE",taskId:q.thread.id});b.push(J.react(w1).catch((m1)=>{console.error("[decopilot:stream] onStepFinish reactor failed",m1)}));let C1=w1[0]?.event;if(X.isResume?C1?.type==="STEP_COMPLETED":C1?.type==="STEP_COMPLETED"&&C1.stepCount%5===0)b.push(V(U1).catch((m1)=>{console.error("[decopilot:stream] onStepFinish save failed",m1)}))},onError:(U1)=>{if(v=!0,Z?.(),N1?.finish(),M.aborted)return A6.capture({distinctId:X.userId,event:"chat_message_aborted",groups:{organization:X.organizationId},properties:{organization_id:X.organizationId,thread_id:q.thread.id,agent_id:X.agent.id,model_id:X.models.thinking.id,mode:X.mode,duration_ms:Date.now()-e,is_resume:X.isResume??!1}}),MS0(U1);return console.error("[decopilot] stream error:",U1),A6.capture({distinctId:X.userId,event:"chat_message_failed",groups:{organization:X.organizationId},properties:{organization_id:X.organizationId,thread_id:q.thread.id,agent_id:X.agent.id,model_id:X.models.thinking.id,mode:X.mode,duration_ms:Date.now()-e,error_category:An5(U1),error_message:U1 instanceof Error?U1.message:ga(U1),is_resume:X.isResume??!1}}),J.execute({type:"FINISH",taskId:q.thread.id,threadStatus:"failed"}).catch((w1)=>{console.error("[decopilot:stream] onError reactor failed",w1)}),MS0(U1)}});return{taskId:q.thread.id,stream:L1}}catch(B){if(Z?.(),W&&K)J.execute({type:"FINISH",taskId:K,threadStatus:"failed"}).catch((N)=>{console.error("[decopilot:stream] catch-block reactor failed",N)});throw B}}function jn5(X){let G=X.split(/\.\s+/).filter((J)=>!/https?:\/\//i.test(J)&&!/openrouter/i.test(J));if(G.length===0)return X;let Q=G.join(". ").trim();return Q.endsWith(".")?Q:`${Q}.`}function MS0(X){if(X instanceof Error){let Y=X.statusCode,G=X.message.toLowerCase();if(Y===402||G.includes("credit")||G.includes("insufficient funds")||G.includes("insufficient balance")||G.includes("billing")||G.includes("quota exceeded")||G.includes("payment required"))return`[CREDITS] ${jn5(X.message)}`;return X.message}return ga(X)}function In5(X,Y){let G=new Set;for(let Q of X){if(Q.role!=="assistant")continue;for(let J of Q.parts)if("toolName"in J&&J.toolName==="enable_tools"&&"result"in J&&J.result){let $=J.result;if(Array.isArray($.enabled))for(let Z of $.enabled){let W=Z.replace(/[^a-zA-Z0-9_]/g,"_");if(Y.has(W))G.add(W);else if(Y.has(Z))G.add(Z)}}}return G}async function Mn5(X,Y,G,Q){let{tools:J}=await X.listTools(),$=new Map,Z=new Map;for(let H of J){let U=G.get(H.name);if(!U)continue;if(!eu1(H))continue;let B=H._meta?.gatewayClientId??"unknown",N=`${B}_`,O=U.startsWith(N)?U.slice(N.length):U,z=Z.get(B);if(!z)z=[],Z.set(B,z);if(z.push(U),Y.has(U))continue;let D=$.get(B);if(!D)D={name:Q.get(B)??B,totalCount:0,preview:[]},$.set(B,D);if(D.totalCount++,D.preview.length<Vn5)D.preview.push(O)}let W=[...$.entries()].filter(([,H])=>H.totalCount>0);if(W.length===0)return{catalog:null,connectionToolsMap:Z};return{catalog:`
|
|
6969
|
+
`)[0]??U}if(B=B.replace(/^["']|["']$/g,"").replace(/^(Title:|title:)\s*/i,"").replace(/^```.*$/gm,"").replace(/[{}[\]]/g,"").replace(/[.!?]$/,"").slice(0,60).trim(),!B||/^[\s"':{}[\],]+$/.test(B))return null;return B}catch(H){let U=H;if(U.name==="AbortError")console.warn("[decopilot:title] Title generation aborted (timeout or parent abort)");else console.error("[decopilot:title] \u274C Failed to generate title:",U.message);return null}finally{clearTimeout(Z),Y.removeEventListener("abort",$)}})(),finish:W}}var qn5=1e4;var h68=w(()=>{jY();i2()});function zl(){return h4().podName}var Wl1=w(()=>{XX()});function ga(X){if(X instanceof Error)return X.message;if(typeof X==="object"&&X!==null)try{return JSON.stringify(X)}catch{return"[unserializable object]"}return String(X)}function An5(X){if(X instanceof Error&&X.name==="AbortError")return"aborted";let Y=(X instanceof Error?X.message:ga(X)).toLowerCase();if(/insufficient|no credits|out of credits|balance|payment|quota exceeded|402/i.test(Y))return"insufficient_funds";if(/rate.?limit|too many requests|429/i.test(Y))return"rate_limit";if(/timeout|timed out|deadline/i.test(Y))return"timeout";if(/unauthor|forbidden|401|403|invalid.*(key|token)/i.test(Y))return"auth";if(/tool|mcp|connection/i.test(Y))return"tool_error";if(/model|provider|anthropic|openai|gemini|claude/i.test(Y))return"model_error";return"unknown"}function $l1(X,Y){if(Y.capabilities?.reasoning!==!1)return X.aiSdk.languageModel(Y.id,{reasoning:{enabled:!0,effort:"medium"}});return X.aiSdk.languageModel(Y.id)}async function Mw(X,Y,G){return LB4("decopilot.streamCore",(Q)=>Tn5(X,Y,G,Q),{"decopilot.agent.id":X.agent.id,"decopilot.model.id":X.models.thinking.id,"decopilot.credential.id":X.models.credentialId,"decopilot.organization.id":X.organizationId,"decopilot.user.id":X.userId,"decopilot.thread.id":X.taskId})}async function Tn5(X,Y,G,Q){let{runRegistry:J,streamBuffer:$}=G;X={...X,messages:X.messages.map((B)=>B.id?B:{...B,id:EP0()})};let Z,W=!1,K,H,U=!1;try{let B=await Y.storage.aiProviderKeys.findById(X.models.credentialId,X.organizationId).catch(()=>null),N=B?.providerId==="claude-code",O=B?.providerId==="codex",z=N||O;if(Q.setAttribute("decopilot.isCliAgent",z),Q.setAttribute("decopilot.isCodex",O),!z){let U1=await LU(Y.db,X.organizationId,Y.auth.user?.role);if(!cq(U1,X.models.credentialId,X.models.thinking.id))throw Error("Model not allowed for your role")}let D=X.windowSize??c2;if(!X.taskId)throw Error("streamCore: taskId is required");let[E,P,q]=await Promise.all([Y.storage.virtualMcps.findById(X.agent.id,X.organizationId),z?Promise.resolve(null):Y.aiProviders.activate(X.models.credentialId,X.organizationId),v68(Y.storage.threads,{organization_id:X.organizationId,thread_id:X.taskId,userId:X.userId,defaultWindowSize:D})]);if(X.isResume)console.log("[decopilot:stream] resume \u2014 runtime state",{taskId:X.taskId,isCliAgent:z,providerActivated:!!P,thinkingModelId:X.models.thinking.id,hasImage:!!X.models.image,hasDeepResearch:!!X.models.deepResearch});if(K=q.thread.id,Y.metadata.threadId=q.thread.id,Q.setAttribute("decopilot.thread.id",q.thread.id),q.thread.created_by!==X.userId)throw Error("You are not allowed to write to this thread because you are not the owner");if(P?.asyncResearch){let U1=[["thinking",X.models.thinking.id]];if(X.models.coding)U1.push(["coding",X.models.coding.id]);if(X.models.fast)U1.push(["fast",X.models.fast.id]);if(X.models.image)U1.push(["image",X.models.image.id]);for(let[w1,C1]of U1)if(P.asyncResearch.canHandle(C1))throw Error(`Model "${C1}" can only be used as a Deep Research model. It is not usable as the ${w1} model \u2014 set it in the Deep Research slot instead.`)}let V=async(...U1)=>{let w1=Date.now(),C1=[...new Map(U1.filter(Boolean).map((s1)=>[s1.id,s1])).values()].filter((s1)=>s1.parts&&s1.parts.length>0).map((s1,m1)=>({...s1,thread_id:q.thread.id,created_at:new Date(w1+m1).toISOString(),updated_at:new Date(w1+m1).toISOString()}));if(C1.length===0)return;await q.save(C1).catch((s1)=>{console.error("[decopilot:stream] Error saving messages",s1)})};if(!E)throw Error("Agent not found");if(X.isResume)await J.execute({type:"RESUME",taskId:q.thread.id,orgId:X.organizationId,userId:X.userId,abortController:new AbortController,podId:zl()});else await J.execute({type:"START",taskId:q.thread.id,orgId:X.organizationId,userId:X.userId,abortController:new AbortController,podId:zl(),runConfig:{models:X.models,agent:X.agent,temperature:X.temperature,toolApprovalLevel:X.toolApprovalLevel,mode:X.mode,windowSize:X.windowSize,triggerId:X.triggerId}});W=!0;let M=J.getAbortSignal(q.thread.id);if(!M)throw await J.execute({type:"FINISH",taskId:q.thread.id,threadStatus:"failed"}),Error("Run was cancelled immediately after starting");if(X.abortSignal){let U1=X.abortSignal;if(U1.aborted)await J.execute({type:"CANCEL",taskId:q.thread.id});else U1.addEventListener("abort",()=>{J.execute({type:"CANCEL",taskId:q.thread.id}).catch(()=>{})},{once:!0})}$?.purge(q.thread.id);let I=X.messages.filter((U1)=>U1.role==="system"),R=X.messages.find((U1)=>U1.role!=="system"),C=R?(await j48([R],Y)).find((U1)=>U1.role!=="system"):void 0;if(!X.isResume){if(!C)throw Error("No user message found in input \u2014 expected at least one non-system message");await V(C)}M.addEventListener("abort",()=>{Z?.()});let _=X.models.thinking.limits?.maxOutputTokens??QI1,v=!1,b=[],x=await E48(q,C,I,D),i;if(N)for(let U1=x.length-1;U1>=0;U1--){let w1=x[U1],C1=w1?.metadata;if(w1?.role==="assistant"&&C1?.codingAgentSessionId&&C1?.codingAgentProvider==="claude-code"){i=C1.codingAgentSessionId;break}}let n=new Map,h=[],m=Y.organization,e=Date.now(),s={inputTokens:0,outputTokens:0,totalTokens:0},N1=null,L1=zQ1({originalMessages:x,execute:async({writer:U1})=>{let w1=S68(X.mode,{isCliAgent:z}),C1=await $M(E,Y,"passthrough",!0,{listTimeoutMs:1000}),s1;Z=()=>{C1.close().catch(()=>{}),s1?.close().catch(()=>{})};let{tools:m1,nameMap:y1}=z?{tools:{},nameMap:new Map}:await Xl1(C1,n,U1,X.toolApprovalLevel,{ctx:Y,isPlanMode:w1.isPlanMode}),Y1=E.metadata,u1=!Y1.githubRepo,W0=X.userId?{virtualMcpId:X.agent.id,branch:u1?"ephemeral":X.branch??`thread:${q.thread.id}`,userId:X.userId,threadId:q.thread.id}:null,a1=z?{}:await I68(U1,{provider:P,organization:m,models:X.models,toolApprovalLevel:X.toolApprovalLevel,isPlanMode:w1.isPlanMode,toolOutputMap:n,pendingImages:h,passthroughClient:C1,vmContext:W0,taskId:q.thread.id},Y),P1=new Set(Object.keys(m1)),E1=Object.keys(a1),B1=In5(x,P1),$1=new Map;if(w1.isPlanMode&&!z){let{tools:q1}=await C1.listTools();for(let A of q1){let y=y1.get(A.name);if(y)$1.set(y,{readOnlyHint:A.annotations?.readOnlyHint})}}let M1=z?new Map:C1.getConnectionTitleMap(),j1=new Map,i1=z?{}:{...m1,...a1,list_connection_tools:Rn5(C1,y1,M1),enable_tools:M68(B1,P1,j1,{isPlanMode:w1.isPlanMode,toolAnnotations:$1})},T1=_L6(),[f1,e1]=await Promise.all([Mn5(C1,B1,y1,M1),Sn5(C1)]);for(let[q1,A]of f1.connectionToolsMap.entries())j1.set(q1,A);let Z0=f1.catalog,z4=C1.getInstructions(),g0=AB(X.agent.id)?fL6():z4,U0=w1.planPrompt,N0=w1.webSearchInstructionPrompt&&"web_search"in i1?w1.webSearchInstructionPrompt:null,v0=Y1?.githubRepo?bL6(Y1.githubRepo):null,I0=[T1,U0,N0,v0,e1,g0].filter((q1)=>Boolean(q1?.trim())),T6=[T1,U0,N0,v0,Z0,e1,g0].filter((q1)=>Boolean(q1?.trim())),R1=await I48(x,Y),{systemMessages:X0,messages:r0,originalMessages:b4}=await P48(R1,{windowSize:D,models:X.models,tools:i1});if(_68(X.models,b4),q.thread.title===JI1&&!z){let q1=JSON.stringify(r0[0]?.content);N1=y68({abortSignal:M,model:$l1(P,X.models.fast??X.models.thinking),userMessage:q1});let A=N1.promise.then(async(y)=>{if(!y)return;if(await Y.storage.threads.update(q.thread.id,{title:y}).catch((Q1)=>{console.error("[decopilot:stream] Error updating thread title",Q1)}),!v)U1.write({type:"data-thread-title",data:{title:y},transient:!0}),console.log("[decopilot:title-debug] SSE title event sent threadId=%s",q.thread.id);else console.warn("[decopilot:title-debug] Stream already finished, title SSE NOT sent threadId=%s title=%j",q.thread.id,y)}).catch((y)=>{console.warn("[decopilot:stream] Title generation failed:",y)});b.push(A)}let d=null,V1,g,L,S={inputTokens:0,outputTokens:0,totalTokens:0},c=0;H=Date.now();let o;if(N){let q1=await Y.boundAuth.apiKey.create({name:"claude-code-session",expiresIn:3600,metadata:{organization:{id:m.id,slug:m.slug,name:m.name}}}),A=`${E51()}/mcp/virtual-mcp/${X.agent.id}`,y;if(W0&&Y1.githubRepo){let Q1=await Hl(Y);if(Q1.kind==="host"){let{computeHandle:k1,composeSandboxRef:D1}=await Promise.resolve().then(() => (b3(),CM)),b1=D1({orgId:m.id,virtualMcpId:W0.virtualMcpId,branch:W0.branch}),L0=k1({userId:W0.userId,projectRef:b1},W0.branch);y=await Q1.localWorkdir(L0)??void 0}}o=mq0(uq6(X.models.thinking.id),{mcpServers:{cms:{type:"http",url:A,headers:{Authorization:`Bearer ${q1.key}`,"x-org-id":X.organizationId}}},toolApprovalLevel:X.toolApprovalLevel,isPlanMode:w1.isPlanMode,resume:i,cwd:y})}else if(O){let q1=await Y.boundAuth.apiKey.create({name:"codex-session",expiresIn:3600,metadata:{organization:{id:m.id,slug:m.slug,name:m.name}}}),A=`${E51()}/mcp/virtual-mcp/${X.agent.id}`,y=$A0(yA6(X.models.thinking.id),{mcpServers:{cms:{transport:"http",url:A,headers:{Authorization:`Bearer ${q1.key}`,"x-org-id":X.organizationId}}},toolApprovalLevel:X.toolApprovalLevel,isPlanMode:w1.isPlanMode});o=y.model,s1=y.provider}else o=$l1(P,X.models.thinking);let H1=xU.startSpan("decopilot.streamText",{attributes:{"decopilot.model.id":X.models.thinking.id,"decopilot.credential.id":X.models.credentialId,"decopilot.isCliAgent":z,"decopilot.isCodex":O}}),t;try{t=oN({model:o,system:[...T6.map((q1)=>({role:"system",content:q1})),...X0],messages:r0,tools:i1,...z?{}:{prepareStep:(()=>{let q1=w1.forcedFirstStepTool&&w1.forcedFirstStepTool in i1?w1.forcedFirstStepTool:null,A=0;return(y)=>{let Q1=y.messages,k1=A===0;A++;let D1;if(h.length>0){let A4=h.splice(0,h.length),r=[];for(let a of A4)if(r.push({type:"text",text:a.label??(a.pageUrl?`[Screenshot of ${a.pageUrl}]`:"[Image]")}),a.url.startsWith("data:")){let G1=a.url.match(/^data:([^;]+);base64,(.+)$/s);if(G1)r.push({type:"image",image:G1[2],mimeType:G1[1]})}else r.push({type:"image",image:new URL(a.url)});D1=[...Q1,{role:"user",content:r}]}let b1=[...E1,"list_connection_tools","enable_tools",...B1];if(w1.isPlanMode)b1=b1.filter((A4)=>{if(E1.includes(A4)||A4==="enable_tools"||A4==="list_connection_tools")return!0;return $1.get(A4)?.readOnlyHint===!0});let L0=q1&&k1?q1:null;return{activeTools:b1,...D1&&{messages:D1},...L0&&{toolChoice:{type:"tool",toolName:L0}},...!k1&&{system:[...I0.map((A4)=>({role:"system",content:A4})),...X0]}}}})(),temperature:X.temperature,maxOutputTokens:_,stopWhen:rN(kL6)},abortSignal:M,onFinish:async({usage:q1,totalUsage:A,finishReason:y,request:Q1,response:k1})=>{H1.setAttribute("decopilot.llm.inputTokens",A.inputTokens??0),H1.setAttribute("decopilot.llm.outputTokens",A.outputTokens??0),H1.setAttribute("decopilot.llm.finishReason",y),H1.setStatus({code:Kl1.SpanStatusCode.OK}),H1.end();let D1=Date.now()-(H??Date.now());if(U=!0,Zl1({ctx:Y,organizationId:X.organizationId,modelId:X.models.thinking.id,durationMs:D1,isError:!1,inputTokens:A.inputTokens,outputTokens:A.outputTokens}),s={inputTokens:s.inputTokens+(A.inputTokens??0),outputTokens:s.outputTokens+(A.outputTokens??0),totalTokens:s.totalTokens+(A.totalTokens??0)},Jl1({ctx:Y,organizationId:X.organizationId,agentId:X.agent.id,modelId:X.models.thinking.id,modelTitle:X.models.thinking.title??X.models.thinking.id,credentialId:X.models.credentialId,taskId:q.thread.id,durationMs:D1,isError:!1,finishReason:y,usage:{inputTokens:q1.inputTokens??0,outputTokens:q1.outputTokens??0,totalTokens:q1.totalTokens??0},totalUsage:{inputTokens:A.inputTokens??0,outputTokens:A.outputTokens??0,totalTokens:A.totalTokens??0},request:Q1,response:k1,userId:X.userId,requestId:Y.metadata.requestId,userAgent:Y.metadata.userAgent??null}),M.aborted)return},onError:async(q1)=>{let A=q1 instanceof Error?q1:Error(ga(q1));if(H1.setStatus({code:Kl1.SpanStatusCode.ERROR,message:A.message}),H1.recordException(A),H1.end(),console.error("[decopilot:stream] Error",q1),M.aborted)throw q1;if(!U){let y=Date.now()-(H??Date.now());U=!0,Zl1({ctx:Y,organizationId:X.organizationId,modelId:X.models.thinking.id,durationMs:y,isError:!0,errorType:q1 instanceof Error?q1.name:"Error"}),Jl1({ctx:Y,organizationId:X.organizationId,agentId:X.agent.id,modelId:X.models.thinking.id,modelTitle:X.models.thinking.title??X.models.thinking.id,credentialId:X.models.credentialId,taskId:q.thread.id,durationMs:y,isError:!0,errorMessage:q1 instanceof Error?q1.message:ga(q1),userId:X.userId,requestId:Y.metadata.requestId,userAgent:Y.metadata.userAgent??null})}throw q1},onAbort:async({steps:q1})=>{if(!q1.length||U)return;U=!0;let A=Date.now()-(H??Date.now()),y=q1.reduce((k1,D1)=>({inputTokens:k1.inputTokens+(D1.usage.inputTokens??0),outputTokens:k1.outputTokens+(D1.usage.outputTokens??0),totalTokens:k1.totalTokens+(D1.usage.totalTokens??0)}),{inputTokens:0,outputTokens:0,totalTokens:0}),Q1=q1[q1.length-1].usage;if(Zl1({ctx:Y,organizationId:X.organizationId,modelId:X.models.thinking.id,durationMs:A,isError:!1,inputTokens:y.inputTokens,outputTokens:y.outputTokens}),Jl1({ctx:Y,organizationId:X.organizationId,agentId:X.agent.id,modelId:X.models.thinking.id,modelTitle:X.models.thinking.title??X.models.thinking.id,credentialId:X.models.credentialId,taskId:q.thread.id,durationMs:A,isError:!1,finishReason:"abort",usage:{inputTokens:Q1.inputTokens??0,outputTokens:Q1.outputTokens??0,totalTokens:Q1.totalTokens??0},totalUsage:y,request:void 0,response:void 0,userId:X.userId,requestId:Y.metadata.requestId,userAgent:Y.metadata.userAgent??null}),y.totalTokens>0)U1.write({type:"message-metadata",messageMetadata:{usage:{inputTokens:y.inputTokens,outputTokens:y.outputTokens,totalTokens:y.totalTokens,...c>0&&{providerMetadata:{openrouter:{usage:{cost:c}}}}}}})}})}catch(q1){if(H1.setStatus({code:Kl1.SpanStatusCode.ERROR,message:q1 instanceof Error?q1.message:ga(q1)}),q1 instanceof Error)H1.recordException(q1);throw H1.end(),q1}let x1=t.toUIMessageStream({originalMessages:b4,generateMessageId:EP0,onError:(q1)=>MS0(q1),messageMetadata:({part:q1})=>{if(q1.type==="start")return{agent:{id:X.agent.id??null},models:{credentialId:X.models.credentialId,thinking:{...X.models.thinking,title:X.models.thinking.title??X.models.thinking.id,provider:X.models.thinking.provider??void 0}},created_at:new Date,_request:{systemSections:T6.map((A)=>({chars:A.length,preview:A.slice(0,80).replace(/\s+/g," ")})),tools:Object.keys(i1).length,activeTools:E1.length+1+B1.size},thread_id:q.thread.id};if(q1.type==="reasoning-start"){if(d===null)d=new Date;return{reasoning_start_at:d}}if(q1.type==="reasoning-end")return{reasoning_end_at:new Date};if(q1.type==="finish-step"){if(V1=q1.providerMetadata,N&&q1.providerMetadata?.["claude-code"])g=q1.providerMetadata["claude-code"].sessionId,L="claude-code";if(O&&q1.providerMetadata?.["codex-app-server"])g=q1.providerMetadata["codex-app-server"].threadId,L="codex";S={inputTokens:S.inputTokens+(q1.usage?.inputTokens??0),outputTokens:S.outputTokens+(q1.usage?.outputTokens??0),totalTokens:S.totalTokens+(q1.usage?.totalTokens??0)};let A=q1.providerMetadata?.openrouter?.usage?.cost;if(A!=null)c+=A;return{usage:{inputTokens:S.inputTokens,outputTokens:S.outputTokens,totalTokens:S.totalTokens,...c>0&&{providerMetadata:{openrouter:{usage:{cost:c}}}}}}}if(q1.type==="finish"){let A=X.models.thinking.provider,y=q1.totalUsage,Q1=V1??q1.providerMetadata,k1=c>0&&Q1?{...Q1,openrouter:{...Q1.openrouter??{},usage:{...Q1.openrouter?.usage??{},cost:c}}}:Q1,D1=y&&((y.inputTokens??0)>0||(y.outputTokens??0)>0)?y:S.totalTokens>0?S:y,b1=D1?{inputTokens:D1.inputTokens??0,outputTokens:D1.outputTokens??0,reasoningTokens:y?.reasoningTokens??void 0,totalTokens:D1.totalTokens??0,providerMetadata:P61(A&&k1?{...k1,[A]:{...k1[A]??{},reasoning_details:void 0}}:k1)}:void 0;return{...b1&&{usage:b1},...g&&{codingAgentSessionId:g},...L&&{codingAgentProvider:L}}}return}});if($)U1.merge($.relay(x1,q.thread.id,M));else U1.merge(x1)},onFinish:async({responseMessage:U1,finishReason:w1})=>{if(console.log("[decopilot:title-debug] onFinish called, setting streamFinished=true threadId=%s pendingOps=%d",q.thread.id,b.length),v=!0,Z?.(),N1?.finish(),await Promise.allSettled(b),await V(U1),M.aborted)return;let C1=b68(w1,U1?.parts);await J.execute({type:"FINISH",taskId:q.thread.id,threadStatus:C1}),A6.capture({distinctId:X.userId,event:"chat_message_completed",groups:{organization:X.organizationId},properties:{organization_id:X.organizationId,thread_id:q.thread.id,agent_id:X.agent.id,model_id:X.models.thinking.id,model_title:X.models.thinking.title,mode:X.mode,duration_ms:Date.now()-e,finish_reason:w1,thread_status:C1,input_tokens:s.inputTokens,output_tokens:s.outputTokens,total_tokens:s.totalTokens,is_resume:X.isResume??!1}})},onStepFinish:({responseMessage:U1})=>{let w1=J.dispatch({type:"STEP_DONE",taskId:q.thread.id});b.push(J.react(w1).catch((m1)=>{console.error("[decopilot:stream] onStepFinish reactor failed",m1)}));let C1=w1[0]?.event;if(X.isResume?C1?.type==="STEP_COMPLETED":C1?.type==="STEP_COMPLETED"&&C1.stepCount%5===0)b.push(V(U1).catch((m1)=>{console.error("[decopilot:stream] onStepFinish save failed",m1)}))},onError:(U1)=>{if(v=!0,Z?.(),N1?.finish(),M.aborted)return A6.capture({distinctId:X.userId,event:"chat_message_aborted",groups:{organization:X.organizationId},properties:{organization_id:X.organizationId,thread_id:q.thread.id,agent_id:X.agent.id,model_id:X.models.thinking.id,mode:X.mode,duration_ms:Date.now()-e,is_resume:X.isResume??!1}}),MS0(U1);return console.error("[decopilot] stream error:",U1),A6.capture({distinctId:X.userId,event:"chat_message_failed",groups:{organization:X.organizationId},properties:{organization_id:X.organizationId,thread_id:q.thread.id,agent_id:X.agent.id,model_id:X.models.thinking.id,mode:X.mode,duration_ms:Date.now()-e,error_category:An5(U1),error_message:U1 instanceof Error?U1.message:ga(U1),is_resume:X.isResume??!1}}),J.execute({type:"FINISH",taskId:q.thread.id,threadStatus:"failed"}).catch((w1)=>{console.error("[decopilot:stream] onError reactor failed",w1)}),MS0(U1)}});return{taskId:q.thread.id,stream:L1}}catch(B){if(Z?.(),W&&K)J.execute({type:"FINISH",taskId:K,threadStatus:"failed"}).catch((N)=>{console.error("[decopilot:stream] catch-block reactor failed",N)});throw B}}function jn5(X){let G=X.split(/\.\s+/).filter((J)=>!/https?:\/\//i.test(J)&&!/openrouter/i.test(J));if(G.length===0)return X;let Q=G.join(". ").trim();return Q.endsWith(".")?Q:`${Q}.`}function MS0(X){if(X instanceof Error){let Y=X.statusCode,G=X.message.toLowerCase();if(Y===402||G.includes("credit")||G.includes("insufficient funds")||G.includes("insufficient balance")||G.includes("billing")||G.includes("quota exceeded")||G.includes("payment required"))return`[CREDITS] ${jn5(X.message)}`;return X.message}return ga(X)}function In5(X,Y){let G=new Set;for(let Q of X){if(Q.role!=="assistant")continue;for(let J of Q.parts)if("toolName"in J&&J.toolName==="enable_tools"&&"result"in J&&J.result){let $=J.result;if(Array.isArray($.enabled))for(let Z of $.enabled){let W=Z.replace(/[^a-zA-Z0-9_]/g,"_");if(Y.has(W))G.add(W);else if(Y.has(Z))G.add(Z)}}}return G}async function Mn5(X,Y,G,Q){let{tools:J}=await X.listTools(),$=new Map,Z=new Map;for(let H of J){let U=G.get(H.name);if(!U)continue;if(!eu1(H))continue;let B=H._meta?.gatewayClientId??"unknown",N=`${B}_`,O=U.startsWith(N)?U.slice(N.length):U,z=Z.get(B);if(!z)z=[],Z.set(B,z);if(z.push(U),Y.has(U))continue;let D=$.get(B);if(!D)D={name:Q.get(B)??B,totalCount:0,preview:[]},$.set(B,D);if(D.totalCount++,D.preview.length<Vn5)D.preview.push(O)}let W=[...$.entries()].filter(([,H])=>H.totalCount>0);if(W.length===0)return{catalog:null,connectionToolsMap:Z};return{catalog:`
|
|
6970
6970
|
|
|
6971
6971
|
<available-connections>
|
|
6972
6972
|
${W.map(([H,{name:U,totalCount:B,preview:N}])=>{let O=B-N.length,z=N.join(", ")+(O>0?`, +${O} more`:"");return`<connection name="${RS0(U)}" id="${RS0(H)}" tools="${B}">${RS0(z)}</connection>`}).join(`
|
|
@@ -6978,7 +6978,7 @@ ${Y.map((Q)=>{let J=`${Q.name}|${Q.description??""}`;if(Q.arguments&&Q.arguments
|
|
|
6978
6978
|
`)}
|
|
6979
6979
|
</available-prompts>`}async function Hl1(X){let Y=X.stream.getReader();while(!0){let{done:G}=await Y.read();if(G)break}}var Kl1,Vn5=5;var LJ1=w(()=>{zY();yG1();v48();_48();u5();jY();F0();V68();R68();i2();LS0();BJ1();OJ1();k68();f68();rG1();h68();mI1();rI1();ED();AW();Wl1();RU();Kl1=X1(b0(),1)});async function x68(X,Y,G,Q){let{storage:J,streamBuffer:$,sseHub:Z}=Q,K=(await J.get(X,Y))?.virtual_mcp_id??void 0;await J.update(X,Y,{status:G,run_owner_pod:null,run_config:null,run_started_at:null}),$.purge(X),Z.emit(Y,NI(X,G,K)),Z.emit(Y,z61(X,G))}async function kn5(X,Y){let{storage:G,streamBuffer:Q,sseHub:J}=Y;switch(X.type){case"RUN_STARTED":{if(!await G.claimRunStart(X.taskId,X.orgId,{status:"in_progress",run_owner_pod:X.podId??null,run_config:X.runConfig??null,run_started_at:X.podId?new Date().toISOString():null},X.podId??null))throw new Fl1(X.taskId);let Z=await G.get(X.taskId,X.orgId);J.emit(X.orgId,NI(X.taskId,"in_progress",Z?.virtual_mcp_id??void 0));return}case"RUN_RESUMED":{await G.update(X.taskId,X.orgId,{run_owner_pod:X.podId,run_started_at:new Date().toISOString()});let $=await G.get(X.taskId,X.orgId);J.emit(X.orgId,NI(X.taskId,"in_progress",$?.virtual_mcp_id??void 0));return}case"STEP_COMPLETED":J.emit(X.orgId,WD1(X.taskId,X.stepCount));return;case"RUN_COMPLETED":await x68(X.taskId,X.orgId,"completed",Y);return;case"RUN_REQUIRES_ACTION":await x68(X.taskId,X.orgId,"requires_action",Y);return;case"RUN_FAILED":{if(X.reason==="ghost"){if(!await G.forceFailIfInProgress(X.taskId,X.orgId))return;await G.update(X.taskId,X.orgId,{run_owner_pod:null,run_config:null,run_started_at:null})}else await G.update(X.taskId,X.orgId,{status:"failed",run_owner_pod:null,run_config:null,run_started_at:null});Q.purge(X.taskId);let $=await G.get(X.taskId,X.orgId);J.emit(X.orgId,NI(X.taskId,"failed",$?.virtual_mcp_id??void 0)),J.emit(X.orgId,z61(X.taskId,"failed"));return}case"PREVIOUS_RUN_ABORTED":return}}async function g68(X,Y){for(let{event:G}of X)await kn5(G,Y)}var Fl1;var SS0=w(()=>{u5();Fl1=class Fl1 extends Error{constructor(X){super(`Failed to claim run for thread ${X} \u2014 already running on another pod`);this.name="RunClaimError"}}});function EJ1(X,Y=15000){if(!X.body)return X;let G=vn5(X.body,Y);return new Response(G,{status:X.status,statusText:X.statusText,headers:X.headers})}function vn5(X,Y=15000){let G=null,Q=null,J=!1,$=!1,Z=()=>{if(Q!==null)clearInterval(Q),Q=null};return new ReadableStream({async start(W){G=X.getReader(),Q=setInterval(()=>{if(J||$)return;try{W.enqueue(Cn5)}catch{J=!0,Z()}},Y);try{while(!0){let{done:H,value:U}=await G.read();if(H){J=!0,Z(),W.close();return}let B=U.byteLength;if(B>0)$=!(B>=2&&U[B-2]===10&&U[B-1]===10);W.enqueue(U)}}catch(H){J=!0,Z();try{W.error(H)}catch{}}finally{J=!0,Z();try{G.releaseLock()}catch{}}},cancel(W){J=!0,Z(),(G??X).cancel(W).catch(()=>{})}})}var Cn5;var u68=w(()=>{Cn5=new TextEncoder().encode(`: keepalive
|
|
6980
6980
|
|
|
6981
|
-
`)});async function l68(X){let Y=su1(X),G=await X.req.json(),Q=k48.safeParse(G);if(!Q.success)throw new _9(400,{message:Q.error.message});let{messages:J,...$}=Q.data,Z=J,{systemMessages:W,requestMessage:K}=L48(Z);return{organization:Y,systemMessages:W,requestMessage:K,...$}}function kS0(X){let Y=X.modelMeta.capabilities;return{id:X.modelId,title:X.modelMeta.title??X.modelId,provider:X.modelMeta.providerId??null,capabilities:Y&&Y.length>0?{vision:Y.includes("vision")||Y.includes("image")||void 0,text:Y.includes("text")||void 0,reasoning:Y.includes("reasoning")||void 0}:void 0,limits:X.modelMeta.limits?{contextWindow:X.modelMeta.limits.contextWindow,maxOutputTokens:X.modelMeta.limits.maxOutputTokens??void 0}:void 0}}async function m68(X,Y){try{return await UJ1(X,Y)}catch(G){if(G instanceof Bl)return null;return console.warn(`[decopilot] tier "${Y}" resolution failed:`,G),null}}async function d68(X,Y){let[G,Q,J]=await Promise.all([UJ1(X,Y??"smart"),m68(X,"image"),m68(X,"web_research")]);return{credentialId:G.credentialId,thinking:kS0(G),...Q?{image:kS0(Q)}:{},...J?{deepResearch:kS0(J)}:{}}}function CS0(X){let{cancelBroadcast:Y,streamBuffer:G,runRegistry:Q,threadStorage:J}=X,$=new H6;return $.get("/:org/decopilot/allowed-models",async(Z)=>{try{let W=Z.get("meshContext"),K=su1(Z),H=W.auth.user?.role,U=await LU(W.db,K.id,H);return Z.json(YV6(U))}catch(W){if(console.error("[decopilot:allowed-models] Error",W),W instanceof _9)return Z.json({error:W.message},W.status);return Z.json({error:W instanceof Error?W.message:"Internal error"},500)}}),$.post("/:org/decopilot/stream",async(Z)=>{try{let W=Z.get("meshContext"),{organization:K,tier:H,agent:U,systemMessages:B,requestMessage:N,temperature:O,memory:z,thread_id:D,branch:E,toolApprovalLevel:P,mode:q}=await l68(Z),V=W.auth?.user?.id;if(!V)throw new _9(401,{message:"User ID is required"});let M=await d68(W,H),I=await LU(W.db,K.id,W.auth.user?.role);if(I!==void 0&&!cq(I,M.credentialId,M.thinking.id))throw new _9(403,{message:"Model not allowed for your role"});let R=z?.windowSize??c2,C=D??z?.thread_id,_=await Mw({messages:[...B,N],models:M,agent:U,temperature:O,toolApprovalLevel:P,mode:q,organizationId:K.id,userId:V,taskId:C,windowSize:R,branch:E??null},W,{runRegistry:Q,streamBuffer:G,cancelBroadcast:Y});return A6.capture({distinctId:V,event:"chat_message_started",groups:{organization:K.id},properties:{organization_id:K.id,agent_id:U,mode:q,thread_id:C,credential_id:M.credentialId}}),EJ1(aq({stream:_.stream,consumeSseStream:aN}))}catch(W){if(console.error("[decopilot:stream] Error",W),W instanceof Bl)return Z.json({error:W.message},400);if(W instanceof _9)return Z.json({error:W.message},W.status);if(W instanceof Error&&W.name==="AbortError")return console.warn("[decopilot:stream] Aborted",{error:W.message}),Z.json({error:"Request aborted"},400);return A6.captureException(W),console.error("[decopilot:stream] Failed",{error:W instanceof Error?W.message:JSON.stringify(W),stack:W instanceof Error?W.stack:void 0}),Z.json({error:W instanceof Error?W.message:JSON.stringify(W)},500)}}),$.post("/:org/decopilot/runtime/stream",async(Z)=>{try{let W=Z.get("meshContext"),{organization:K,tier:H,agent:U,systemMessages:B,requestMessage:N,temperature:O,memory:z,thread_id:D,branch:E,toolApprovalLevel:P,mode:q}=await l68(Z),V=W.auth?.user?.id;if(!V)throw new _9(401,{message:"User ID is required"});let M=await d68(W,H),I=await LU(W.db,K.id,W.auth.user?.role);if(I!==void 0&&!cq(I,M.credentialId,M.thinking.id))throw new _9(403,{message:"Model not allowed for your role"});let R=z?.windowSize??c2,C=D??z?.thread_id,_=await Mw({messages:[...B,N],models:M,agent:U,temperature:O,toolApprovalLevel:P,mode:q,organizationId:K.id,userId:V,taskId:C,windowSize:R,branch:E??null},W,{runRegistry:Q,streamBuffer:G,cancelBroadcast:Y});return EJ1(aq({stream:_.stream,consumeSseStream:aN}))}catch(W){if(console.error("[decopilot:stream] Error",W),W instanceof Fl1)return Z.json({error:W.message},409);if(W instanceof Bl)return Z.json({error:W.message},400);if(W instanceof _9)return Z.json({error:W.message},W.status);if(W instanceof Error&&W.name==="AbortError")return console.warn("[decopilot:stream] Aborted",{error:W.message}),Z.json({error:"Request aborted"},400);return console.error("[decopilot:stream] Failed",{error:W instanceof Error?W.message:JSON.stringify(W),stack:W instanceof Error?W.stack:void 0}),Z.json({error:W instanceof Error?W.message:JSON.stringify(W)},500)}}),$.post("/:org/decopilot/cancel/:threadId",async(Z)=>{let{taskId:W,thread:K,organization:H}=await S48(Z);if((await Q.execute({type:"CANCEL",taskId:W})).some((B)=>B.event.type==="RUN_FAILED"))return Z.json({cancelled:!0});if(Y.broadcast(W),K.status==="in_progress")console.warn("[decopilot:cancel] Ghost run detected, force-failing",{taskId:W}),Q.execute({type:"FORCE_FAIL",taskId:W,reason:"ghost",orgId:H.id}).catch((B)=>{console.error("[decopilot:cancel] Failed to force-fail ghost thread",{taskId:W,err:B})});return Z.json({cancelled:!0,async:!0},202)}),$.get("/:org/decopilot/attach/:threadId",async(Z)=>{try{let{taskId:W,thread:K,organization:H}=await IS0(Z);if(Q.isRunning(W)){let P=await G.createReplayStream(W);if(!P)return Z.body(null,204);let q=zQ1({execute:async({writer:V})=>{let M=P.getReader();try{while(!0){let{done:I,value:R}=await M.read();if(I)break;V.write(R)}}finally{M.releaseLock()}}});return EJ1(aq({stream:q,consumeSseStream:aN}))}let U=Z.get("meshContext"),B=U.auth?.user?.id;if(K.status!=="in_progress")return Z.body(null,204);if(K.created_by!==B)return Z.body(null,204);if(!K.run_config)return await J.forceFailIfInProgress(W,H.id),Z.body(null,204);let N=Yl1.safeParse(K.run_config);if(!N.success)return await J.forceFailIfInProgress(W,H.id),Z.body(null,204);let O=N.data,z=await LU(U.db,H.id,U.auth.user?.role);if(z!==void 0&&!cq(z,O.models.credentialId,O.models.thinking.id))throw new _9(403,{message:"Model not allowed for your role"});if(!await J.claimOrphanedRun(W,H.id,zl()))return Z.body(null,204);let E=await Mw({messages:[],models:Gl1(O.models),agent:O.agent,temperature:O.temperature,toolApprovalLevel:O.toolApprovalLevel,mode:O.mode,organizationId:H.id,userId:B,taskId:W,windowSize:O.windowSize,isResume:!0},U,{runRegistry:Q,streamBuffer:G,cancelBroadcast:Y});return EJ1(aq({stream:E.stream,consumeSseStream:aN}))}catch(W){if(W instanceof _9)throw W;return console.error("[decopilot:attach] Error",W),Z.body(null,500)}}),$}var c68=w(()=>{wS0();zY();jY();JY();Iz();i2();LS0();OJ1();rG1();VS0();C48();LJ1();SS0();u68();Wl1()});var i68=w(()=>{c68()});var Ul1=()=>{let X=new H6;return X.post("/connections/:connectionId/oauth-token",async(Y)=>{let G=Y.get("meshContext"),Q=Y.req.param("connectionId");if(!(G.auth.user?.id??G.auth.apiKey?.userId??null))return Y.json({error:"Unauthorized"},401);let $=G.organization?.id;if(!$)return Y.json({error:"Organization context required"},403);let Z=await G.storage.connections.findById(Q,$);if(!Z)return Y.json({error:"Connection not found"},404);let W=await Y.req.json();if(!W.accessToken)return Y.json({error:"accessToken is required"},400);if(W.tokenEndpoint){let O;try{O=new URL(W.tokenEndpoint)}catch{return Y.json({error:"tokenEndpoint must be a valid URL"},400)}if(O.protocol!=="http:"&&O.protocol!=="https:")return Y.json({error:"tokenEndpoint must be an http(s) URL"},400)}let K=W.expiresIn?new Date(Date.now()+W.expiresIn*1000):null,H=W.tokenEndpoint??null;if(H?.includes("/oauth-proxy/")&&Z.connection_url)try{let O=await eI1(Z.connection_url);if(O)try{let z=new URL(O);if(z.protocol==="http:"||z.protocol==="https:")H=O}catch{}}catch{}let U=new Y$(G.db,G.vault),B={connectionId:Q,accessToken:W.accessToken,refreshToken:W.refreshToken??null,scope:W.scope??null,expiresAt:K,clientId:W.clientId??null,clientSecret:W.clientSecret??null,tokenEndpoint:H},N=await U.upsert(B);return Y.json({success:!0,expiresAt:N.expiresAt})}),X.delete("/connections/:connectionId/oauth-token",async(Y)=>{let G=Y.get("meshContext"),Q=Y.req.param("connectionId");if(!(G.auth.user?.id??G.auth.apiKey?.userId??null))return Y.json({error:"Unauthorized"},401);let $=G.organization?.id;if(!$)return Y.json({error:"Organization context required"},403);if(!await G.storage.connections.findById(Q,$))return Y.json({error:"Connection not found"},404);return await new Y$(G.db,G.vault).delete(Q),Y.json({success:!0})}),X.get("/connections/:connectionId/oauth-token/status",async(Y)=>{let G=Y.get("meshContext"),Q=Y.req.param("connectionId");if(!(G.auth.user?.id??G.auth.apiKey?.userId??null))return Y.json({error:"Unauthorized"},401);let $=G.organization?.id;if(!$)return Y.json({error:"Organization context required"},403);if(!await G.storage.connections.findById(Q,$))return Y.json({error:"Connection not found"},404);let W=new Y$(G.db,G.vault),K=await W.get(Q);if(!K)return Y.json({hasToken:!1,isExpired:!0,canRefresh:!1});let H=W.isExpired(K),U=!!K.refreshToken&&!!K.tokenEndpoint;return Y.json({hasToken:!0,isExpired:H,canRefresh:U,expiresAt:K.expiresAt})}),X};var vS0=w(()=>{JY();CA0();ZM()});var _n5,p68=(X={})=>async(Y,G)=>{await G();let J=(Y.req.matchedRoutes??[]).find((Z)=>Z.method!=="ALL"&&!Z.path.endsWith("*"));if(!J)return;if(_n5.has(J.path))return;if(J.path.startsWith("/api/:org/"))return;if(X.mountPath!==void 0&&J.basePath!==X.mountPath)return;let $=Y.get("meshContext");console.log("deprecated route",{route:Y.req.routePath,method:Y.req.method,org:$?.organization?.slug,user:$?.auth?.user?.id,ua:Y.req.header("user-agent")})},wA,l3=(X)=>p68(X);var _S0=w(()=>{_n5=new Set(["/api/deco-sites/profile"]),wA=p68()});var ua=async(X,Y)=>{let G=X.req.param("org");if(!G)return X.json({error:"org slug missing in path"},400);let Q=X.get("meshContext");if(!Q?.db)return X.json({error:"meshContext not initialized"},500);let J=Q.db,$=await J.selectFrom("organization").select(["id","slug","name"]).where("slug","=",G).executeTakeFirst();if(!$)return X.json({error:`organization "${G}" not found`},404);let Z=Q.auth?.user?.id,W;if(Z){let K=await J.selectFrom("member").select(["role"]).where("userId","=",Z).where("organizationId","=",$.id).executeTakeFirst();if(!K)return X.json({error:"forbidden: not a member of organization"},403);W=K.role}if(Q.organization={id:$.id,slug:$.slug,name:$.name,role:W},Q.access.setOrganizationId($.id),Q.access.setRole(W),Q.storage.threads.setOrganizationId($.id),!Q.objectStorage){let K=dd();Q.objectStorage=K?oI1(K,$.id):new RG1($.id,Q.baseUrl)}return await Y()};var fS0=w(()=>{jA0();JU1()});async function Rw(X,Y,G){let Q=await fetch(`${X}/rest/v1/${G}`,{headers:{apikey:Y,Authorization:`Bearer ${Y}`,Accept:"application/json"}});if(!Q.ok){let J=await Q.text().catch(()=>Q.statusText);throw console.error(`[deco-sites] Supabase error (${Q.status}): ${J}`),Error(`External service error (${Q.status})`)}return Q.json()}async function la(X,Y,G,Q){let J=await fetch(`${X}/rest/v1/${G}`,{method:"POST",headers:{apikey:Y,Authorization:`Bearer ${Y}`,"Content-Type":"application/json",Accept:"application/json",Prefer:"return=representation"},body:JSON.stringify(Q)});if(!J.ok){let Z=await J.text().catch(()=>J.statusText);throw console.error(`[deco-sites] Supabase POST error (${J.status}): ${Z}`),Error(`External service error (${J.status})`)}let $=await J.json();if(!$[0])throw Error("Supabase POST returned no rows");return $[0]}function bS0(){let X=h4(),Y=X.decoSupabaseUrl,G=X.decoSupabaseServiceKey;if(!Y||!G)return null;return{supabaseUrl:Y,serviceKey:G}}async function yS0(X,Y,G){return(await Rw(X,Y,`profiles?email=eq.${encodeURIComponent(G)}&select=user_id`))[0]?.user_id??null}async function n68(X,Y,G){let Q=await Rw(X,Y,`api_key?user_id=eq.${encodeURIComponent(G)}&select=id&limit=1`);if(Q[0]?.id)return Q[0].id;return(await la(X,Y,"api_key",{user_id:G})).id}function yn5(X){return`${fn5}${X}@${bn5}`}async function hn5(X,Y,G){return(await Rw(X,Y,`sites?name=eq.${encodeURIComponent(G)}&select=team&limit=1`))[0]?.team??null}async function xn5(X,Y,G){let Q=await fetch(`${X}/auth/v1/admin/users`,{method:"POST",headers:{apikey:Y,Authorization:`Bearer ${Y}`,"Content-Type":"application/json"},body:JSON.stringify({email:G,email_confirm:!0,app_metadata:{mesh_service_account:!0}})});if(!Q.ok){let $=await Q.text().catch(()=>Q.statusText);throw console.error(`[deco-sites] Auth admin create user error (${Q.status}): ${$}`),Error(`Failed to create auth user (${Q.status})`)}return(await Q.json()).id}async function gn5(X,Y,G){let Q=yn5(G),J=await Rw(X,Y,`profiles?email=eq.${encodeURIComponent(Q)}&select=user_id&limit=1`);if(J[0]?.user_id){let K=J[0].user_id;if(!(await Rw(X,Y,`members?user_id=eq.${encodeURIComponent(K)}&team_id=eq.${G}&select=id&limit=1`))[0]?.id){let U=await la(X,Y,"members",{user_id:K,team_id:G,admin:!0});await la(X,Y,"member_roles",{member_id:U.id,role_id:1})}return n68(X,Y,K)}let $=await xn5(X,Y,Q);if(!(await Rw(X,Y,`profiles?user_id=eq.${encodeURIComponent($)}&select=user_id&limit=1`))[0])await la(X,Y,"profiles",{user_id:$,email:Q,name:`Mesh Service Account (team ${G})`});let W=await la(X,Y,"members",{user_id:$,team_id:G,admin:!0});return await la(X,Y,"member_roles",{member_id:W.id,role_id:1}),n68(X,Y,$)}async function un5(X){try{let Y=await fetch(`https://${X}/favicon.ico`,{signal:AbortSignal.timeout(5000)});if(!Y.ok)return null;let G=Y.headers.get("content-type")??"image/x-icon",Q=await Y.arrayBuffer();if(Q.byteLength===0)return null;let J=Buffer.from(Q).toString("base64");return`data:${G};base64,${J}`}catch{return null}}var fn5="deco-team-",bn5="deco.cx",r68=async(X,Y)=>{if(!X.get("meshContext").auth.user?.id)return X.json({error:"Unauthorized"},401);return Y()},t68="https://sites-admin-mcp.decocache.com/api/mcp",a68=()=>{let X=new H6;return X.use("*",r68),X.get("/profile",async(Y)=>{let Q=Y.get("meshContext").auth.user?.email;if(!Q)return Y.json({error:"Unauthorized"},401);let J=bS0();if(!J)return Y.json({isDecoUser:!1});try{let $=await yS0(J.supabaseUrl,J.serviceKey,Q);return Y.json({isDecoUser:$!==null})}catch{return Y.json({isDecoUser:!1})}}),X},Bl1=()=>{let X=new H6;return X.use("*",r68),X.get("/",async(Y)=>{let Q=Y.get("meshContext").auth.user?.email;if(!Q)return Y.json({error:"Unauthorized"},401);let J=bS0();if(!J)return Y.json({sites:[]});let{supabaseUrl:$,serviceKey:Z}=J;try{let W=await yS0($,Z,Q);if(!W)return Y.json({sites:[]});let H=(await Rw($,Z,`members?user_id=eq.${encodeURIComponent(W)}&deleted_at=is.null&select=team_id`)).map((B)=>B.team_id).filter((B)=>Number.isInteger(B));if(H.length===0)return Y.json({sites:[]});let U=await Rw($,Z,`sites?team=in.(${H.join(",")})&select=name,domains,thumb_url&order=id`);return Y.json({sites:U})}catch(W){return console.error("[deco-sites] GET error:",W),Y.json({error:"Failed to fetch sites"},502)}}),X.post("/connection",async(Y)=>{let G=Y.get("meshContext"),Q=G.auth.user?.email,J=G6(G);if(!Q||!J)return Y.json({error:"Unauthorized"},401);let $;try{$=await Y.req.json()}catch{return Y.json({error:"Invalid request body"},400)}let{siteName:Z,orgId:W}=$;if(!Z||!W)return Y.json({error:"siteName and orgId are required"},400);let K=vX("conn");if(!/^[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$/.test(Z))return Y.json({error:"Invalid siteName"},400);if(!await G.db.selectFrom("member").select("member.id").where("member.userId","=",J).where("member.organizationId","=",W).executeTakeFirst())return Y.json({error:"Forbidden"},403);let U=bS0();if(!U)return Y.json({error:"Deco integration is not configured"},503);let{supabaseUrl:B,serviceKey:N}=U;try{let O=await yS0(B,N,Q);if(!O)return Y.json({error:"No deco.cx account found for this user"},404);let z=await hn5(B,N,Z);if(!z)return Y.json({error:"Site not found or has no team"},404);if(!(await Rw(B,N,`members?user_id=eq.${encodeURIComponent(O)}&team_id=eq.${z}&deleted_at=is.null&select=id&limit=1`))[0])return Y.json({error:"You are not a member of this site's team"},403);let E=await gn5(B,N,z),P=await vP({id:`pending-${K}`,title:`deco.cx \u2014 ${Z}`,connection_type:"HTTP",connection_url:t68,connection_token:E}).catch(()=>null),q=P?.tools?.length?P.tools:null,V=P?.scopes?.length?P.scopes:null,M=await un5(`${Z}.deco.site`),I=await G.storage.connections.create({id:K,organization_id:W,created_by:J,title:`deco.cx \u2014 ${Z}`,description:`Admin MCP for deco.cx site: ${Z}`,connection_type:"HTTP",connection_url:t68,connection_token:E,connection_headers:null,oauth_config:null,configuration_state:{SITE_NAME:Z},metadata:{source:"deco.cx-import"},icon:null,app_name:"deco.cx",app_id:null,tools:q,configuration_scopes:V});return Y.json({connId:I.id,icon:M})}catch(O){return console.error("[deco-sites] POST /connection error:",O),Y.json({error:"Failed to create connection"},500)}}),X};var hS0=w(()=>{JY();nK();u51();XX()});import{createHmac as ln5}from"crypto";import{mkdir as mn5,writeFile as dn5}from"fs/promises";import{dirname as cn5,join as e68}from"path";function pn5(X){let Y=X.replace(/[^a-zA-Z0-9_-]/g,"_");return e68(in5,Y)}function nn5(X){return X.replace(/^\/+/,"").replace(/\.\./g,"")}function o68(X,Y){let G=pn5(X),Q=nn5(Y);return e68(G,Q)}function s68(X,Y,G,Q,J){let $=h4().encryptionKey||"dev-secret",Z=`${X}:${Y}:${G}:${Q}`,W=ln5("sha256",$).update(Z).digest("hex");return J===W}function xS0(X){let Y=X.split(".").pop()?.toLowerCase()||"";return{jpg:"image/jpeg",jpeg:"image/jpeg",png:"image/png",gif:"image/gif",webp:"image/webp",svg:"image/svg+xml",ico:"image/x-icon",bmp:"image/bmp",pdf:"application/pdf",json:"application/json",xml:"application/xml",txt:"text/plain",html:"text/html",htm:"text/html",css:"text/css",csv:"text/csv",md:"text/markdown",js:"application/javascript",mjs:"application/javascript",ts:"application/typescript",mp4:"video/mp4",webm:"video/webm",avi:"video/x-msvideo",mov:"video/quicktime",mp3:"audio/mpeg",wav:"audio/wav",ogg:"audio/ogg",zip:"application/zip",gz:"application/gzip",tar:"application/x-tar",woff:"font/woff",woff2:"font/woff2",ttf:"font/ttf",otf:"font/otf"}[Y]||"application/octet-stream"}var in5="./data/assets",Nl1=(X)=>{let Y=new H6,G=X.orgFromPath?"/*":"/:orgId/*";return Y.get(G,async(Q)=>{let J=X.orgFromPath?Q.get("meshContext")?.organization?.id:Q.req.param("orgId");if(!J)return Q.json({error:"Missing organization context"},500);let $=X.orgFromPath?`/api/${Q.req.param("org")??""}/dev-assets/`:`/api/dev-assets/${J}/`,Z=Q.req.path.replace($,"");if(!Z)return Q.json({error:"Missing key"},400);let W=Q.req.query("expires"),K=Q.req.query("signature"),H=Q.req.query("method");if(!W||!K||H!=="GET")return Q.json({error:"Invalid or missing signature parameters"},400);let U=parseInt(W,10);if(!Number.isFinite(U))return Q.json({error:"Invalid expires parameter"},400);let B=Math.floor(Date.now()/1000);if(U<B)return Q.json({error:"URL has expired"},403);if(!s68(J,Z,U,"GET",K))return Q.json({error:"Invalid signature"},403);let N=o68(J,Z);try{let O=Bun.file(N);if(!await O.exists())return Q.json({error:"File not found"},404);let D=xS0(Z);return new Response(O.stream(),{headers:{"Content-Type":D,"Content-Length":O.size.toString(),"Cache-Control":"private, max-age=3600"}})}catch(O){return console.error("Error serving file:",O),Q.json({error:"Failed to read file"},500)}}),Y.put(G,async(Q)=>{let J=X.orgFromPath?Q.get("meshContext")?.organization?.id:Q.req.param("orgId");if(!J)return Q.json({error:"Missing organization context"},500);let $=X.orgFromPath?`/api/${Q.req.param("org")??""}/dev-assets/`:`/api/dev-assets/${J}/`,Z=Q.req.path.replace($,"");if(!Z)return Q.json({error:"Missing key"},400);let W=Q.req.query("expires"),K=Q.req.query("signature"),H=Q.req.query("method");if(!W||!K||H!=="PUT")return Q.json({error:"Invalid or missing signature parameters"},400);let U=parseInt(W,10);if(!Number.isFinite(U))return Q.json({error:"Invalid expires parameter"},400);let B=Math.floor(Date.now()/1000);if(U<B)return Q.json({error:"URL has expired"},403);if(!s68(J,Z,U,"PUT",K))return Q.json({error:"Invalid signature"},403);let N=o68(J,Z),O=cn5(N);try{await mn5(O,{recursive:!0});let z=await Q.req.arrayBuffer();return await dn5(N,Buffer.from(z)),Q.json({success:!0,key:Z})}catch(z){return console.error("Error saving file:",z),Q.json({error:"Failed to save file"},500)}}),Y};var Ol1=w(()=>{JY();XX()});var X88="Payload Too Large",Y88,zl1=(X)=>{let Y=X.onError||(()=>{let Q=new Response(X88,{status:413});throw new _9(413,{res:Q})}),G=X.maxSize;return async function(J,$){if(!J.req.raw.body)return $();let Z=J.req.raw.headers.has("transfer-encoding"),W=J.req.raw.headers.has("content-length");if(W&&!Z)return parseInt(J.req.raw.headers.get("content-length")||"0",10)>G?Y(J):$();let K=0,H=J.req.raw.body.getReader(),B={body:new ReadableStream({async start(N){try{for(;;){let{done:O,value:z}=await H.read();if(O)break;if(K+=z.length,K>G){N.error(new Y88(X88));break}N.enqueue(z)}}finally{N.close()}}}),duplex:"half"};if(J.req.raw=new Request(J.req.raw,B),await $(),J.error instanceof Y88)J.res=await Y(J)}};var gS0=w(()=>{Iz();Y88=class extends Error{constructor(X){super(X);this.name="BodyLimitError"}}});function Dl1(X){let Y=new H6;return Y.get("/kv/:key",async(G)=>{let J=G.get("meshContext").organization?.id;if(!J)return G.json({error:"Organization required"},400);let $=G.req.param("key"),Z=await X.kvStorage.get(J,$);if(Z===null)return G.json({error:"Not found"},404);return G.json({key:$,value:Z})}),Y.put("/kv/:key",zl1({maxSize:tn5,onError:(G)=>G.json({error:"Payload too large"},413)}),async(G)=>{let J=G.get("meshContext").organization?.id;if(!J)return G.json({error:"Organization required"},400);let $=G.req.param("key"),Z;try{Z=await G.req.json()}catch{return G.json({error:"Invalid JSON body"},400)}return await X.kvStorage.set(J,$,Z),G.json({ok:!0})}),Y.delete("/kv/:key",async(G)=>{let J=G.get("meshContext").organization?.id;if(!J)return G.json({error:"Organization required"},400);let $=G.req.param("key");return await X.kvStorage.delete(J,$),G.json({ok:!0})}),Y}var tn5=1048576;var uS0=w(()=>{JY();gS0()});var wl1=()=>{let X=new H6;return X.all("/",async(Y)=>{let G=await cr(Y.get("meshContext")),Q=new NH({enableJsonResponse:Y.req.raw.headers.get("Accept")?.includes("application/json")??!1});return await G.connect(Q),Q.handleRequest(Y.req.raw)}),X};var lS0=w(()=>{JY();dr();lr()});var Ll1=()=>{let X=new H6;return X.get("/threads/:threadId/outputs",async(Y)=>{let G=Y.get("meshContext");if(!G.auth?.user?.id)throw new _9(401,{message:"Unauthorized"});let J=G.organization?.slug;if(!J)throw new _9(400,{message:"Organization required"});let $=Y.req.param("threadId");if(!$||!/^[A-Za-z0-9_-]+$/.test($))throw new _9(400,{message:"Invalid thread ID"});if(!await G.storage.threads.get($))throw new _9(404,{message:"Thread not found"});let W=G.objectStorage;if(!W)return Y.json({objects:[]});let K=await W.list({prefix:`model-outputs/${$}/`,maxKeys:200});return Y.json({objects:K.objects.map((H)=>{let U=H.key.split("/").pop()??H.key,B=H.key.split("/").map(encodeURIComponent).join("/");return{key:H.key,filename:U,size:H.size,uploadedAt:H.lastModified?.toISOString(),downloadUrl:`${G.baseUrl}/api/${encodeURIComponent(J)}/files/${B}`}})})}),X};var mS0=w(()=>{JY();Iz()});function El1(X){let Y=new H6;return Y.post("/trigger-callback",zl1({maxSize:an5,onError:(G)=>G.json({error:"Payload too large"},413)}),async(G)=>{let Q=G.req.header("authorization");if(!Q?.startsWith("Bearer "))return G.json({error:"Missing or invalid Authorization header"},401);let J=Q.slice(7),$=await X.tokenStorage.validateToken(J);if(!$)return G.json({error:"Invalid callback token"},401);let Z=rn5.safeParse(await G.req.json().catch(()=>null));if(!Z.success)return G.json({error:"Invalid body",details:Z.error.issues},400);let{type:W,data:K}=Z.data;return X.eventTriggerEngine.notifyEvents([{source:$.connectionId,type:W,data:K??{},organizationId:$.organizationId}]),G.json({ok:!0,type:W},202)}),Y}var rn5,an5=1048576;var dS0=w(()=>{JY();gS0();F0();rn5=F.object({type:F.string().min(1),data:F.record(F.string(),F.unknown()).optional()})});var cS0=class{writer;encoder;writable;abortSubscribers=[];responseReadable;aborted=!1;closed=!1;constructor(X,Y){this.writable=X,this.writer=X.getWriter(),this.encoder=new TextEncoder;let G=Y.getReader();this.abortSubscribers.push(async()=>{await G.cancel()}),this.responseReadable=new ReadableStream({async pull(Q){let{done:J,value:$}=await G.read();J?Q.close():Q.enqueue($)},cancel:()=>{this.abort()}})}async write(X){try{if(typeof X==="string")X=this.encoder.encode(X);await this.writer.write(X)}catch{}return this}async writeln(X){return await this.write(X+`
|
|
6981
|
+
`)});async function l68(X){let Y=su1(X),G=await X.req.json(),Q=k48.safeParse(G);if(!Q.success)throw new _9(400,{message:Q.error.message});let{messages:J,...$}=Q.data,Z=J,{systemMessages:W,requestMessage:K}=L48(Z);return{organization:Y,systemMessages:W,requestMessage:K,...$}}function kS0(X){let Y=X.modelMeta.capabilities;return{id:X.modelId,title:X.modelMeta.title??X.modelId,provider:X.modelMeta.providerId??null,capabilities:Y&&Y.length>0?{vision:Y.includes("vision")||Y.includes("image")||void 0,text:Y.includes("text")||void 0,reasoning:Y.includes("reasoning")||void 0}:void 0,limits:X.modelMeta.limits?{contextWindow:X.modelMeta.limits.contextWindow,maxOutputTokens:X.modelMeta.limits.maxOutputTokens??void 0}:void 0}}async function m68(X,Y){try{return await UJ1(X,Y)}catch(G){if(G instanceof Bl)return null;return console.warn(`[decopilot] tier "${Y}" resolution failed:`,G),null}}async function d68(X,Y){let[G,Q,J]=await Promise.all([UJ1(X,Y??"smart"),m68(X,"image"),m68(X,"web_research")]);return{credentialId:G.credentialId,thinking:kS0(G),...Q?{image:kS0(Q)}:{},...J?{deepResearch:kS0(J)}:{}}}function CS0(X){let{cancelBroadcast:Y,streamBuffer:G,runRegistry:Q,threadStorage:J}=X,$=new H6;return $.get("/:org/decopilot/allowed-models",async(Z)=>{try{let W=Z.get("meshContext"),K=su1(Z),H=W.auth.user?.role,U=await LU(W.db,K.id,H);return Z.json(YV6(U))}catch(W){if(console.error("[decopilot:allowed-models] Error",W),W instanceof _9)return Z.json({error:W.message},W.status);return Z.json({error:W instanceof Error?W.message:"Internal error"},500)}}),$.post("/:org/decopilot/stream",async(Z)=>{try{let W=Z.get("meshContext"),{organization:K,tier:H,agent:U,systemMessages:B,requestMessage:N,temperature:O,memory:z,thread_id:D,branch:E,toolApprovalLevel:P,mode:q}=await l68(Z),V=W.auth?.user?.id;if(!V)throw new _9(401,{message:"User ID is required"});let M=await d68(W,H),I=await LU(W.db,K.id,W.auth.user?.role);if(I!==void 0&&!cq(I,M.credentialId,M.thinking.id))throw new _9(403,{message:"Model not allowed for your role"});let R=z?.windowSize??c2,C=D??z?.thread_id,_=await Mw({messages:[...B,N],models:M,agent:U,temperature:O,toolApprovalLevel:P,mode:q,organizationId:K.id,userId:V,taskId:C,windowSize:R,branch:E??null},W,{runRegistry:Q,streamBuffer:G,cancelBroadcast:Y});return A6.capture({distinctId:V,event:"chat_message_started",groups:{organization:K.id},properties:{organization_id:K.id,agent_id:U,mode:q,thread_id:C,credential_id:M.credentialId}}),EJ1(aq({stream:_.stream,consumeSseStream:aN}))}catch(W){if(console.error("[decopilot:stream] Error",W),W instanceof Bl)return Z.json({error:W.message},400);if(W instanceof _9)return Z.json({error:W.message},W.status);if(W instanceof Error&&W.name==="AbortError")return console.warn("[decopilot:stream] Aborted",{error:W.message}),Z.json({error:"Request aborted"},400);return A6.captureException(W),console.error("[decopilot:stream] Failed",{error:W instanceof Error?W.message:JSON.stringify(W),stack:W instanceof Error?W.stack:void 0}),Z.json({error:W instanceof Error?W.message:JSON.stringify(W)},500)}}),$.post("/:org/decopilot/runtime/stream",async(Z)=>{try{let W=Z.get("meshContext"),{organization:K,tier:H,agent:U,systemMessages:B,requestMessage:N,temperature:O,memory:z,thread_id:D,branch:E,toolApprovalLevel:P,mode:q}=await l68(Z),V=W.auth?.user?.id;if(!V)throw new _9(401,{message:"User ID is required"});let M=await d68(W,H),I=await LU(W.db,K.id,W.auth.user?.role);if(I!==void 0&&!cq(I,M.credentialId,M.thinking.id))throw new _9(403,{message:"Model not allowed for your role"});let R=z?.windowSize??c2,C=D??z?.thread_id,_=await Mw({messages:[...B,N],models:M,agent:U,temperature:O,toolApprovalLevel:P,mode:q,organizationId:K.id,userId:V,taskId:C,windowSize:R,branch:E??null},W,{runRegistry:Q,streamBuffer:G,cancelBroadcast:Y});return EJ1(aq({stream:_.stream,consumeSseStream:aN}))}catch(W){if(console.error("[decopilot:stream] Error",W),W instanceof Fl1)return Z.json({error:W.message},409);if(W instanceof Bl)return Z.json({error:W.message},400);if(W instanceof _9)return Z.json({error:W.message},W.status);if(W instanceof Error&&W.name==="AbortError")return console.warn("[decopilot:stream] Aborted",{error:W.message}),Z.json({error:"Request aborted"},400);return console.error("[decopilot:stream] Failed",{error:W instanceof Error?W.message:JSON.stringify(W),stack:W instanceof Error?W.stack:void 0}),Z.json({error:W instanceof Error?W.message:JSON.stringify(W)},500)}}),$.post("/:org/decopilot/cancel/:threadId",async(Z)=>{let{taskId:W,thread:K,organization:H}=await S48(Z);if((await Q.execute({type:"CANCEL",taskId:W})).some((B)=>B.event.type==="RUN_FAILED"))return Z.json({cancelled:!0});if(Y.broadcast(W),K.status==="in_progress")console.warn("[decopilot:cancel] Ghost run detected, force-failing",{taskId:W}),Q.execute({type:"FORCE_FAIL",taskId:W,reason:"ghost",orgId:H.id}).catch((B)=>{console.error("[decopilot:cancel] Failed to force-fail ghost thread",{taskId:W,err:B})});return Z.json({cancelled:!0,async:!0},202)}),$.get("/:org/decopilot/attach/:threadId",async(Z)=>{try{let{taskId:W,thread:K,organization:H}=await IS0(Z);if(Q.isRunning(W)){let P=await G.createReplayStream(W);if(!P)return Z.body(null,204);let q=zQ1({execute:async({writer:V})=>{let M=P.getReader();try{while(!0){let{done:I,value:R}=await M.read();if(I)break;V.write(R)}}finally{M.releaseLock()}}});return EJ1(aq({stream:q,consumeSseStream:aN}))}let U=Z.get("meshContext"),B=U.auth?.user?.id;if(K.status!=="in_progress")return Z.body(null,204);if(K.created_by!==B)return Z.body(null,204);if(!K.run_config)return await J.forceFailIfInProgress(W,H.id),Z.body(null,204);let N=Yl1.safeParse(K.run_config);if(!N.success)return await J.forceFailIfInProgress(W,H.id),Z.body(null,204);let O=N.data;console.log("[decopilot:attach] orphan resume \u2014 persisted config",{taskId:W,thinkingModelId:O.models.thinking.id,hasFast:!!O.models.fast,hasCoding:!!O.models.coding,hasImage:!!O.models.image,hasDeepResearch:!!O.models.deepResearch,mode:O.mode});let z=await LU(U.db,H.id,U.auth.user?.role);if(z!==void 0&&!cq(z,O.models.credentialId,O.models.thinking.id))throw new _9(403,{message:"Model not allowed for your role"});if(!await J.claimOrphanedRun(W,H.id,zl()))return Z.body(null,204);let E=await Mw({messages:[],models:Gl1(O.models),agent:O.agent,temperature:O.temperature,toolApprovalLevel:O.toolApprovalLevel,mode:O.mode,organizationId:H.id,userId:B,taskId:W,windowSize:O.windowSize,isResume:!0},U,{runRegistry:Q,streamBuffer:G,cancelBroadcast:Y});return EJ1(aq({stream:E.stream,consumeSseStream:aN}))}catch(W){if(W instanceof _9)throw W;return console.error("[decopilot:attach] Error",W),Z.body(null,500)}}),$}var c68=w(()=>{wS0();zY();jY();JY();Iz();i2();LS0();OJ1();rG1();VS0();C48();LJ1();SS0();u68();Wl1()});var i68=w(()=>{c68()});var Ul1=()=>{let X=new H6;return X.post("/connections/:connectionId/oauth-token",async(Y)=>{let G=Y.get("meshContext"),Q=Y.req.param("connectionId");if(!(G.auth.user?.id??G.auth.apiKey?.userId??null))return Y.json({error:"Unauthorized"},401);let $=G.organization?.id;if(!$)return Y.json({error:"Organization context required"},403);let Z=await G.storage.connections.findById(Q,$);if(!Z)return Y.json({error:"Connection not found"},404);let W=await Y.req.json();if(!W.accessToken)return Y.json({error:"accessToken is required"},400);if(W.tokenEndpoint){let O;try{O=new URL(W.tokenEndpoint)}catch{return Y.json({error:"tokenEndpoint must be a valid URL"},400)}if(O.protocol!=="http:"&&O.protocol!=="https:")return Y.json({error:"tokenEndpoint must be an http(s) URL"},400)}let K=W.expiresIn?new Date(Date.now()+W.expiresIn*1000):null,H=W.tokenEndpoint??null;if(H?.includes("/oauth-proxy/")&&Z.connection_url)try{let O=await eI1(Z.connection_url);if(O)try{let z=new URL(O);if(z.protocol==="http:"||z.protocol==="https:")H=O}catch{}}catch{}let U=new Y$(G.db,G.vault),B={connectionId:Q,accessToken:W.accessToken,refreshToken:W.refreshToken??null,scope:W.scope??null,expiresAt:K,clientId:W.clientId??null,clientSecret:W.clientSecret??null,tokenEndpoint:H},N=await U.upsert(B);return Y.json({success:!0,expiresAt:N.expiresAt})}),X.delete("/connections/:connectionId/oauth-token",async(Y)=>{let G=Y.get("meshContext"),Q=Y.req.param("connectionId");if(!(G.auth.user?.id??G.auth.apiKey?.userId??null))return Y.json({error:"Unauthorized"},401);let $=G.organization?.id;if(!$)return Y.json({error:"Organization context required"},403);if(!await G.storage.connections.findById(Q,$))return Y.json({error:"Connection not found"},404);return await new Y$(G.db,G.vault).delete(Q),Y.json({success:!0})}),X.get("/connections/:connectionId/oauth-token/status",async(Y)=>{let G=Y.get("meshContext"),Q=Y.req.param("connectionId");if(!(G.auth.user?.id??G.auth.apiKey?.userId??null))return Y.json({error:"Unauthorized"},401);let $=G.organization?.id;if(!$)return Y.json({error:"Organization context required"},403);if(!await G.storage.connections.findById(Q,$))return Y.json({error:"Connection not found"},404);let W=new Y$(G.db,G.vault),K=await W.get(Q);if(!K)return Y.json({hasToken:!1,isExpired:!0,canRefresh:!1});let H=W.isExpired(K),U=!!K.refreshToken&&!!K.tokenEndpoint;return Y.json({hasToken:!0,isExpired:H,canRefresh:U,expiresAt:K.expiresAt})}),X};var vS0=w(()=>{JY();CA0();ZM()});var _n5,p68=(X={})=>async(Y,G)=>{await G();let J=(Y.req.matchedRoutes??[]).find((Z)=>Z.method!=="ALL"&&!Z.path.endsWith("*"));if(!J)return;if(_n5.has(J.path))return;if(J.path.startsWith("/api/:org/"))return;if(X.mountPath!==void 0&&J.basePath!==X.mountPath)return;let $=Y.get("meshContext");console.log("deprecated route",{route:Y.req.routePath,method:Y.req.method,org:$?.organization?.slug,user:$?.auth?.user?.id,ua:Y.req.header("user-agent")})},wA,l3=(X)=>p68(X);var _S0=w(()=>{_n5=new Set(["/api/deco-sites/profile"]),wA=p68()});var ua=async(X,Y)=>{let G=X.req.param("org");if(!G)return X.json({error:"org slug missing in path"},400);let Q=X.get("meshContext");if(!Q?.db)return X.json({error:"meshContext not initialized"},500);let J=Q.db,$=await J.selectFrom("organization").select(["id","slug","name"]).where("slug","=",G).executeTakeFirst();if(!$)return X.json({error:`organization "${G}" not found`},404);let Z=Q.auth?.user?.id,W;if(Z){let K=await J.selectFrom("member").select(["role"]).where("userId","=",Z).where("organizationId","=",$.id).executeTakeFirst();if(!K)return X.json({error:"forbidden: not a member of organization"},403);W=K.role}if(Q.organization={id:$.id,slug:$.slug,name:$.name,role:W},Q.access.setOrganizationId($.id),Q.access.setRole(W),Q.storage.threads.setOrganizationId($.id),!Q.objectStorage){let K=dd();Q.objectStorage=K?oI1(K,$.id):new RG1($.id,Q.baseUrl)}return await Y()};var fS0=w(()=>{jA0();JU1()});async function Rw(X,Y,G){let Q=await fetch(`${X}/rest/v1/${G}`,{headers:{apikey:Y,Authorization:`Bearer ${Y}`,Accept:"application/json"}});if(!Q.ok){let J=await Q.text().catch(()=>Q.statusText);throw console.error(`[deco-sites] Supabase error (${Q.status}): ${J}`),Error(`External service error (${Q.status})`)}return Q.json()}async function la(X,Y,G,Q){let J=await fetch(`${X}/rest/v1/${G}`,{method:"POST",headers:{apikey:Y,Authorization:`Bearer ${Y}`,"Content-Type":"application/json",Accept:"application/json",Prefer:"return=representation"},body:JSON.stringify(Q)});if(!J.ok){let Z=await J.text().catch(()=>J.statusText);throw console.error(`[deco-sites] Supabase POST error (${J.status}): ${Z}`),Error(`External service error (${J.status})`)}let $=await J.json();if(!$[0])throw Error("Supabase POST returned no rows");return $[0]}function bS0(){let X=h4(),Y=X.decoSupabaseUrl,G=X.decoSupabaseServiceKey;if(!Y||!G)return null;return{supabaseUrl:Y,serviceKey:G}}async function yS0(X,Y,G){return(await Rw(X,Y,`profiles?email=eq.${encodeURIComponent(G)}&select=user_id`))[0]?.user_id??null}async function n68(X,Y,G){let Q=await Rw(X,Y,`api_key?user_id=eq.${encodeURIComponent(G)}&select=id&limit=1`);if(Q[0]?.id)return Q[0].id;return(await la(X,Y,"api_key",{user_id:G})).id}function yn5(X){return`${fn5}${X}@${bn5}`}async function hn5(X,Y,G){return(await Rw(X,Y,`sites?name=eq.${encodeURIComponent(G)}&select=team&limit=1`))[0]?.team??null}async function xn5(X,Y,G){let Q=await fetch(`${X}/auth/v1/admin/users`,{method:"POST",headers:{apikey:Y,Authorization:`Bearer ${Y}`,"Content-Type":"application/json"},body:JSON.stringify({email:G,email_confirm:!0,app_metadata:{mesh_service_account:!0}})});if(!Q.ok){let $=await Q.text().catch(()=>Q.statusText);throw console.error(`[deco-sites] Auth admin create user error (${Q.status}): ${$}`),Error(`Failed to create auth user (${Q.status})`)}return(await Q.json()).id}async function gn5(X,Y,G){let Q=yn5(G),J=await Rw(X,Y,`profiles?email=eq.${encodeURIComponent(Q)}&select=user_id&limit=1`);if(J[0]?.user_id){let K=J[0].user_id;if(!(await Rw(X,Y,`members?user_id=eq.${encodeURIComponent(K)}&team_id=eq.${G}&select=id&limit=1`))[0]?.id){let U=await la(X,Y,"members",{user_id:K,team_id:G,admin:!0});await la(X,Y,"member_roles",{member_id:U.id,role_id:1})}return n68(X,Y,K)}let $=await xn5(X,Y,Q);if(!(await Rw(X,Y,`profiles?user_id=eq.${encodeURIComponent($)}&select=user_id&limit=1`))[0])await la(X,Y,"profiles",{user_id:$,email:Q,name:`Mesh Service Account (team ${G})`});let W=await la(X,Y,"members",{user_id:$,team_id:G,admin:!0});return await la(X,Y,"member_roles",{member_id:W.id,role_id:1}),n68(X,Y,$)}async function un5(X){try{let Y=await fetch(`https://${X}/favicon.ico`,{signal:AbortSignal.timeout(5000)});if(!Y.ok)return null;let G=Y.headers.get("content-type")??"image/x-icon",Q=await Y.arrayBuffer();if(Q.byteLength===0)return null;let J=Buffer.from(Q).toString("base64");return`data:${G};base64,${J}`}catch{return null}}var fn5="deco-team-",bn5="deco.cx",r68=async(X,Y)=>{if(!X.get("meshContext").auth.user?.id)return X.json({error:"Unauthorized"},401);return Y()},t68="https://sites-admin-mcp.decocache.com/api/mcp",a68=()=>{let X=new H6;return X.use("*",r68),X.get("/profile",async(Y)=>{let Q=Y.get("meshContext").auth.user?.email;if(!Q)return Y.json({error:"Unauthorized"},401);let J=bS0();if(!J)return Y.json({isDecoUser:!1});try{let $=await yS0(J.supabaseUrl,J.serviceKey,Q);return Y.json({isDecoUser:$!==null})}catch{return Y.json({isDecoUser:!1})}}),X},Bl1=()=>{let X=new H6;return X.use("*",r68),X.get("/",async(Y)=>{let Q=Y.get("meshContext").auth.user?.email;if(!Q)return Y.json({error:"Unauthorized"},401);let J=bS0();if(!J)return Y.json({sites:[]});let{supabaseUrl:$,serviceKey:Z}=J;try{let W=await yS0($,Z,Q);if(!W)return Y.json({sites:[]});let H=(await Rw($,Z,`members?user_id=eq.${encodeURIComponent(W)}&deleted_at=is.null&select=team_id`)).map((B)=>B.team_id).filter((B)=>Number.isInteger(B));if(H.length===0)return Y.json({sites:[]});let U=await Rw($,Z,`sites?team=in.(${H.join(",")})&select=name,domains,thumb_url&order=id`);return Y.json({sites:U})}catch(W){return console.error("[deco-sites] GET error:",W),Y.json({error:"Failed to fetch sites"},502)}}),X.post("/connection",async(Y)=>{let G=Y.get("meshContext"),Q=G.auth.user?.email,J=G6(G);if(!Q||!J)return Y.json({error:"Unauthorized"},401);let $;try{$=await Y.req.json()}catch{return Y.json({error:"Invalid request body"},400)}let{siteName:Z,orgId:W}=$;if(!Z||!W)return Y.json({error:"siteName and orgId are required"},400);let K=vX("conn");if(!/^[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$/.test(Z))return Y.json({error:"Invalid siteName"},400);if(!await G.db.selectFrom("member").select("member.id").where("member.userId","=",J).where("member.organizationId","=",W).executeTakeFirst())return Y.json({error:"Forbidden"},403);let U=bS0();if(!U)return Y.json({error:"Deco integration is not configured"},503);let{supabaseUrl:B,serviceKey:N}=U;try{let O=await yS0(B,N,Q);if(!O)return Y.json({error:"No deco.cx account found for this user"},404);let z=await hn5(B,N,Z);if(!z)return Y.json({error:"Site not found or has no team"},404);if(!(await Rw(B,N,`members?user_id=eq.${encodeURIComponent(O)}&team_id=eq.${z}&deleted_at=is.null&select=id&limit=1`))[0])return Y.json({error:"You are not a member of this site's team"},403);let E=await gn5(B,N,z),P=await vP({id:`pending-${K}`,title:`deco.cx \u2014 ${Z}`,connection_type:"HTTP",connection_url:t68,connection_token:E}).catch(()=>null),q=P?.tools?.length?P.tools:null,V=P?.scopes?.length?P.scopes:null,M=await un5(`${Z}.deco.site`),I=await G.storage.connections.create({id:K,organization_id:W,created_by:J,title:`deco.cx \u2014 ${Z}`,description:`Admin MCP for deco.cx site: ${Z}`,connection_type:"HTTP",connection_url:t68,connection_token:E,connection_headers:null,oauth_config:null,configuration_state:{SITE_NAME:Z},metadata:{source:"deco.cx-import"},icon:null,app_name:"deco.cx",app_id:null,tools:q,configuration_scopes:V});return Y.json({connId:I.id,icon:M})}catch(O){return console.error("[deco-sites] POST /connection error:",O),Y.json({error:"Failed to create connection"},500)}}),X};var hS0=w(()=>{JY();nK();u51();XX()});import{createHmac as ln5}from"crypto";import{mkdir as mn5,writeFile as dn5}from"fs/promises";import{dirname as cn5,join as e68}from"path";function pn5(X){let Y=X.replace(/[^a-zA-Z0-9_-]/g,"_");return e68(in5,Y)}function nn5(X){return X.replace(/^\/+/,"").replace(/\.\./g,"")}function o68(X,Y){let G=pn5(X),Q=nn5(Y);return e68(G,Q)}function s68(X,Y,G,Q,J){let $=h4().encryptionKey||"dev-secret",Z=`${X}:${Y}:${G}:${Q}`,W=ln5("sha256",$).update(Z).digest("hex");return J===W}function xS0(X){let Y=X.split(".").pop()?.toLowerCase()||"";return{jpg:"image/jpeg",jpeg:"image/jpeg",png:"image/png",gif:"image/gif",webp:"image/webp",svg:"image/svg+xml",ico:"image/x-icon",bmp:"image/bmp",pdf:"application/pdf",json:"application/json",xml:"application/xml",txt:"text/plain",html:"text/html",htm:"text/html",css:"text/css",csv:"text/csv",md:"text/markdown",js:"application/javascript",mjs:"application/javascript",ts:"application/typescript",mp4:"video/mp4",webm:"video/webm",avi:"video/x-msvideo",mov:"video/quicktime",mp3:"audio/mpeg",wav:"audio/wav",ogg:"audio/ogg",zip:"application/zip",gz:"application/gzip",tar:"application/x-tar",woff:"font/woff",woff2:"font/woff2",ttf:"font/ttf",otf:"font/otf"}[Y]||"application/octet-stream"}var in5="./data/assets",Nl1=(X)=>{let Y=new H6,G=X.orgFromPath?"/*":"/:orgId/*";return Y.get(G,async(Q)=>{let J=X.orgFromPath?Q.get("meshContext")?.organization?.id:Q.req.param("orgId");if(!J)return Q.json({error:"Missing organization context"},500);let $=X.orgFromPath?`/api/${Q.req.param("org")??""}/dev-assets/`:`/api/dev-assets/${J}/`,Z=Q.req.path.replace($,"");if(!Z)return Q.json({error:"Missing key"},400);let W=Q.req.query("expires"),K=Q.req.query("signature"),H=Q.req.query("method");if(!W||!K||H!=="GET")return Q.json({error:"Invalid or missing signature parameters"},400);let U=parseInt(W,10);if(!Number.isFinite(U))return Q.json({error:"Invalid expires parameter"},400);let B=Math.floor(Date.now()/1000);if(U<B)return Q.json({error:"URL has expired"},403);if(!s68(J,Z,U,"GET",K))return Q.json({error:"Invalid signature"},403);let N=o68(J,Z);try{let O=Bun.file(N);if(!await O.exists())return Q.json({error:"File not found"},404);let D=xS0(Z);return new Response(O.stream(),{headers:{"Content-Type":D,"Content-Length":O.size.toString(),"Cache-Control":"private, max-age=3600"}})}catch(O){return console.error("Error serving file:",O),Q.json({error:"Failed to read file"},500)}}),Y.put(G,async(Q)=>{let J=X.orgFromPath?Q.get("meshContext")?.organization?.id:Q.req.param("orgId");if(!J)return Q.json({error:"Missing organization context"},500);let $=X.orgFromPath?`/api/${Q.req.param("org")??""}/dev-assets/`:`/api/dev-assets/${J}/`,Z=Q.req.path.replace($,"");if(!Z)return Q.json({error:"Missing key"},400);let W=Q.req.query("expires"),K=Q.req.query("signature"),H=Q.req.query("method");if(!W||!K||H!=="PUT")return Q.json({error:"Invalid or missing signature parameters"},400);let U=parseInt(W,10);if(!Number.isFinite(U))return Q.json({error:"Invalid expires parameter"},400);let B=Math.floor(Date.now()/1000);if(U<B)return Q.json({error:"URL has expired"},403);if(!s68(J,Z,U,"PUT",K))return Q.json({error:"Invalid signature"},403);let N=o68(J,Z),O=cn5(N);try{await mn5(O,{recursive:!0});let z=await Q.req.arrayBuffer();return await dn5(N,Buffer.from(z)),Q.json({success:!0,key:Z})}catch(z){return console.error("Error saving file:",z),Q.json({error:"Failed to save file"},500)}}),Y};var Ol1=w(()=>{JY();XX()});var X88="Payload Too Large",Y88,zl1=(X)=>{let Y=X.onError||(()=>{let Q=new Response(X88,{status:413});throw new _9(413,{res:Q})}),G=X.maxSize;return async function(J,$){if(!J.req.raw.body)return $();let Z=J.req.raw.headers.has("transfer-encoding"),W=J.req.raw.headers.has("content-length");if(W&&!Z)return parseInt(J.req.raw.headers.get("content-length")||"0",10)>G?Y(J):$();let K=0,H=J.req.raw.body.getReader(),B={body:new ReadableStream({async start(N){try{for(;;){let{done:O,value:z}=await H.read();if(O)break;if(K+=z.length,K>G){N.error(new Y88(X88));break}N.enqueue(z)}}finally{N.close()}}}),duplex:"half"};if(J.req.raw=new Request(J.req.raw,B),await $(),J.error instanceof Y88)J.res=await Y(J)}};var gS0=w(()=>{Iz();Y88=class extends Error{constructor(X){super(X);this.name="BodyLimitError"}}});function Dl1(X){let Y=new H6;return Y.get("/kv/:key",async(G)=>{let J=G.get("meshContext").organization?.id;if(!J)return G.json({error:"Organization required"},400);let $=G.req.param("key"),Z=await X.kvStorage.get(J,$);if(Z===null)return G.json({error:"Not found"},404);return G.json({key:$,value:Z})}),Y.put("/kv/:key",zl1({maxSize:tn5,onError:(G)=>G.json({error:"Payload too large"},413)}),async(G)=>{let J=G.get("meshContext").organization?.id;if(!J)return G.json({error:"Organization required"},400);let $=G.req.param("key"),Z;try{Z=await G.req.json()}catch{return G.json({error:"Invalid JSON body"},400)}return await X.kvStorage.set(J,$,Z),G.json({ok:!0})}),Y.delete("/kv/:key",async(G)=>{let J=G.get("meshContext").organization?.id;if(!J)return G.json({error:"Organization required"},400);let $=G.req.param("key");return await X.kvStorage.delete(J,$),G.json({ok:!0})}),Y}var tn5=1048576;var uS0=w(()=>{JY();gS0()});var wl1=()=>{let X=new H6;return X.all("/",async(Y)=>{let G=await cr(Y.get("meshContext")),Q=new NH({enableJsonResponse:Y.req.raw.headers.get("Accept")?.includes("application/json")??!1});return await G.connect(Q),Q.handleRequest(Y.req.raw)}),X};var lS0=w(()=>{JY();dr();lr()});var Ll1=()=>{let X=new H6;return X.get("/threads/:threadId/outputs",async(Y)=>{let G=Y.get("meshContext");if(!G.auth?.user?.id)throw new _9(401,{message:"Unauthorized"});let J=G.organization?.slug;if(!J)throw new _9(400,{message:"Organization required"});let $=Y.req.param("threadId");if(!$||!/^[A-Za-z0-9_-]+$/.test($))throw new _9(400,{message:"Invalid thread ID"});if(!await G.storage.threads.get($))throw new _9(404,{message:"Thread not found"});let W=G.objectStorage;if(!W)return Y.json({objects:[]});let K=await W.list({prefix:`model-outputs/${$}/`,maxKeys:200});return Y.json({objects:K.objects.map((H)=>{let U=H.key.split("/").pop()??H.key,B=H.key.split("/").map(encodeURIComponent).join("/");return{key:H.key,filename:U,size:H.size,uploadedAt:H.lastModified?.toISOString(),downloadUrl:`${G.baseUrl}/api/${encodeURIComponent(J)}/files/${B}`}})})}),X};var mS0=w(()=>{JY();Iz()});function El1(X){let Y=new H6;return Y.post("/trigger-callback",zl1({maxSize:an5,onError:(G)=>G.json({error:"Payload too large"},413)}),async(G)=>{let Q=G.req.header("authorization");if(!Q?.startsWith("Bearer "))return G.json({error:"Missing or invalid Authorization header"},401);let J=Q.slice(7),$=await X.tokenStorage.validateToken(J);if(!$)return G.json({error:"Invalid callback token"},401);let Z=rn5.safeParse(await G.req.json().catch(()=>null));if(!Z.success)return G.json({error:"Invalid body",details:Z.error.issues},400);let{type:W,data:K}=Z.data;return X.eventTriggerEngine.notifyEvents([{source:$.connectionId,type:W,data:K??{},organizationId:$.organizationId}]),G.json({ok:!0,type:W},202)}),Y}var rn5,an5=1048576;var dS0=w(()=>{JY();gS0();F0();rn5=F.object({type:F.string().min(1),data:F.record(F.string(),F.unknown()).optional()})});var cS0=class{writer;encoder;writable;abortSubscribers=[];responseReadable;aborted=!1;closed=!1;constructor(X,Y){this.writable=X,this.writer=X.getWriter(),this.encoder=new TextEncoder;let G=Y.getReader();this.abortSubscribers.push(async()=>{await G.cancel()}),this.responseReadable=new ReadableStream({async pull(Q){let{done:J,value:$}=await G.read();J?Q.close():Q.enqueue($)},cancel:()=>{this.abort()}})}async write(X){try{if(typeof X==="string")X=this.encoder.encode(X);await this.writer.write(X)}catch{}return this}async writeln(X){return await this.write(X+`
|
|
6982
6982
|
`),this}sleep(X){return new Promise((Y)=>setTimeout(Y,X))}async close(){try{await this.writer.close()}catch{}this.closed=!0}async pipe(X){this.writer.releaseLock(),await X.pipeTo(this.writable,{preventClose:!0}),this.writer=this.writable.getWriter()}onAbort(X){this.abortSubscribers.push(X)}abort(){if(!this.aborted)this.aborted=!0,this.abortSubscribers.forEach((X)=>X())}};var iS0=()=>{};var Pl1=()=>{let X=typeof Bun<"u"?Bun.version:void 0;if(X===void 0)return!1;let Y=X.startsWith("1.1")||X.startsWith("1.0")||X.startsWith("0.");return Pl1=()=>Y,Y};var pS0=()=>{};var G88=w(()=>{iS0();pS0()});var Q88,on5=async(X,Y,G)=>{try{await Y(X)}catch(Q){if(Q instanceof Error&&G)await G(Q,X),await X.writeSSE({event:"error",data:Q.message});else console.error(Q)}finally{X.close()}},sn5,LA=(X,Y,G)=>{let{readable:Q,writable:J}=new TransformStream,$=new Q88(J,Q);if(Pl1())X.req.raw.signal.addEventListener("abort",()=>{if(!$.closed)$.abort()});return sn5.set($.responseReadable,X),X.header("Transfer-Encoding","chunked"),X.header("Content-Type","text/event-stream"),X.header("Cache-Control","no-cache"),X.header("Connection","keep-alive"),on5($,Y,G),X.newResponse($.responseReadable)};var J88=w(()=>{OD1();iS0();pS0();Q88=class extends cS0{constructor(X,Y){super(X,Y)}async writeSSE(X){let G=(await A61(X.data,ND1.Stringify,!1,{})).split(/\r\n|\r|\n/).map((J)=>{return`data: ${J}`}).join(`
|
|
6983
6983
|
`);for(let J of["event","id","retry"])if(X[J]&&/[\r\n]/.test(X[J]))throw Error(`${J} must not contain "\\r" or "\\n"`);let Q=[X.event&&`event: ${X.event}`,G,X.id&&`id: ${X.id}`,X.retry&&`retry: ${X.retry}`].filter(Boolean).join(`
|
|
6984
6984
|
`)+`
|
package/package.json
CHANGED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/registry-layout-CoJtCj-r.js","assets/index-CB-9CUUW.js","assets/index-CzeuUc9U.css","assets/ArrowNarrowLeft-Bj9BOs-z.js","assets/CheckCircle-BqxncqLD.js","assets/Container-kWAyJ_HH.js","assets/Settings02-CRn2TAbB.js","assets/XCircle-B3Ec4xbl.js","assets/constants-Byqq7P-x.js","assets/useInfiniteQuery-BECdJto-.js","assets/infiniteQueryObserver-B8WYxU9o.js","assets/badge-CtvUEMa3.js","assets/input-DNFaDN-t.js","assets/dropdown-menu-CFvw1sby.js","assets/Check-iLkh97pT.js","assets/ChevronRight-DvySy092.js","assets/DotsVertical-C-S6nCss.js","assets/table-DT9Lwdc9.js","assets/toggle-group-CDk1azIm.js","assets/use-view-mode-C9lWb9qo.js","assets/tooltip-Fw0r1Fnv.js","assets/SearchMd-CRZSLxL6.js","assets/dialog-CVU8C65F.js","assets/X-BIBUzPXw.js","assets/AlertCircle-8gO1aXOV.js","assets/alert-dialog-rJ8tQXxB.js","assets/card-DTHqwNV7.js","assets/Trash01-_0GJuf6O.js","assets/label-EPch60Re.js","assets/select-D2rWlduK.js","assets/ChevronDown-hAIeVVjO.js","assets/ChevronUp-nRc3sEaT.js","assets/switch-qhfo8Vps.js","assets/textarea-tUo13Bze.js","assets/RefreshCcw01-DjbieO7J.js","assets/checkbox-Cs8wVTnP.js","assets/LinkExternal01-BxIXc_ra.js","assets/use-copy-S7d6ccvS.js","assets/Plus-Da0UZLbd.js","assets/Play-B-SyQLb4.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{e as a,j as t,r,l as i,_ as o}from"./index-CB-9CUUW.js";const n=r.lazy(()=>o(()=>import("./registry-layout-CoJtCj-r.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39])));function c(){const s=a.c(1);let e;return s[0]===Symbol.for("react.memo_cache_sentinel")?(e=t.jsx(r.Suspense,{fallback:t.jsx("div",{className:"flex-1 flex items-center justify-center",children:t.jsx(i,{size:20,className:"animate-spin text-muted-foreground"})}),children:t.jsx(n,{})}),s[0]=e):e=s[0],e}export{c as default};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/registry-layout-CoJtCj-r.js","assets/index-CB-9CUUW.js","assets/index-CzeuUc9U.css","assets/ArrowNarrowLeft-Bj9BOs-z.js","assets/CheckCircle-BqxncqLD.js","assets/Container-kWAyJ_HH.js","assets/Settings02-CRn2TAbB.js","assets/XCircle-B3Ec4xbl.js","assets/constants-Byqq7P-x.js","assets/useInfiniteQuery-BECdJto-.js","assets/infiniteQueryObserver-B8WYxU9o.js","assets/badge-CtvUEMa3.js","assets/input-DNFaDN-t.js","assets/dropdown-menu-CFvw1sby.js","assets/Check-iLkh97pT.js","assets/ChevronRight-DvySy092.js","assets/DotsVertical-C-S6nCss.js","assets/table-DT9Lwdc9.js","assets/toggle-group-CDk1azIm.js","assets/use-view-mode-C9lWb9qo.js","assets/tooltip-Fw0r1Fnv.js","assets/SearchMd-CRZSLxL6.js","assets/dialog-CVU8C65F.js","assets/X-BIBUzPXw.js","assets/AlertCircle-8gO1aXOV.js","assets/alert-dialog-rJ8tQXxB.js","assets/card-DTHqwNV7.js","assets/Trash01-_0GJuf6O.js","assets/label-EPch60Re.js","assets/select-D2rWlduK.js","assets/ChevronDown-hAIeVVjO.js","assets/ChevronUp-nRc3sEaT.js","assets/switch-qhfo8Vps.js","assets/textarea-tUo13Bze.js","assets/RefreshCcw01-DjbieO7J.js","assets/checkbox-Cs8wVTnP.js","assets/LinkExternal01-BxIXc_ra.js","assets/use-copy-S7d6ccvS.js","assets/Plus-Da0UZLbd.js","assets/Play-B-SyQLb4.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{e as n,f as c,g as m,j as r,l as f,r as l,_ as u}from"./index-CB-9CUUW.js";const _=l.lazy(()=>u(()=>import("./registry-layout-CoJtCj-r.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39])));function x(){const e=n.c(5),o=c();let t;e[0]===Symbol.for("react.memo_cache_sentinel")?(t={from:"/shell/$org"},e[0]=t):t=e[0];const{org:i}=m(t);let s;e[1]===Symbol.for("react.memo_cache_sentinel")?(s=r.jsx("div",{className:"h-full flex items-center justify-center",children:r.jsx(f,{size:20,className:"animate-spin text-muted-foreground"})}),e[1]=s):s=e[1];let a;return e[2]!==o||e[3]!==i?(a=r.jsx(l.Suspense,{fallback:s,children:r.jsx(_,{onBack:()=>o({to:"/$org/settings/store",params:{org:i}})})}),e[2]=o,e[3]=i,e[4]=a):a=e[4],a}export{x as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{I as u}from"./infiniteQueryObserver-B8WYxU9o.js";import{c1 as i}from"./index-CB-9CUUW.js";function t(e,r){return i(e,u,r)}export{t as u};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{I as s}from"./infiniteQueryObserver-B8WYxU9o.js";import{c1 as u,c2 as n}from"./index-CB-9CUUW.js";function a(r,e){return u({...r,enabled:!0,suspense:!0,throwOnError:n},s,e)}export{a as u};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{e as s,g as l,j as o,l as a,E as n,r as c}from"./index-CB-9CUUW.js";import{a as f}from"./index-dI45a3oJ.js";import"./index-BcJogvuh.js";import"./constants-Byqq7P-x.js";import"./collections-BrXh640u.js";import"./index-Bb5AeDnq.js";import"./use-virtual-mcp-CnvhxxMa.js";import"./use-collections-B62mMH76.js";import"./monaco-editor-UJJyG6n2.js";import"./spinner-WgqEYOpc.js";import"./accordion-rzQTbL0h.js";import"./agent-icon-C3ToZMO1.js";import"./AlertCircle-8gO1aXOV.js";import"./Tool01-Cmmu87hJ.js";import"./Archive-CpwaQ9i2.js";import"./XClose-_fuYraP_.js";import"./RefreshCcw01-DjbieO7J.js";import"./ArrowNarrowLeft-Bj9BOs-z.js";import"./XCircle-B3Ec4xbl.js";import"./ArrowUpRight-CGIcPNOI.js";import"./ZapSquare-Bp-Tac0d.js";import"./Users03-BRhtwP3R.js";import"./CheckCircle-BqxncqLD.js";import"./Check-iLkh97pT.js";import"./ChevronDown-hAIeVVjO.js";import"./ChevronRight-DvySy092.js";import"./ChevronUp-nRc3sEaT.js";import"./DotsVertical-C-S6nCss.js";import"./Container-kWAyJ_HH.js";import"./Star01-DKC04CRs.js";import"./Palette-BcbDyirO.js";import"./SearchMd-CRZSLxL6.js";import"./LayoutLeft-JykQcN-j.js";import"./LinkExternal01-BxIXc_ra.js";import"./Lock01-mA7QgL2y.js";import"./Sun-BmooIo9H.js";import"./Play-B-SyQLb4.js";import"./Plus-Da0UZLbd.js";import"./Settings02-CRn2TAbB.js";import"./Shield01-mkPGOpR6.js";import"./Trash01-_0GJuf6O.js";import"./User01-BeQhAfkv.js";import"./X-BIBUzPXw.js";import"./Zap-C2Ojyfeu.js";import"./index-C_u8z90u.js";import"./badge-CtvUEMa3.js";import"./select-D2rWlduK.js";import"./tooltip-Fw0r1Fnv.js";import"./view-mode-toggle-Cj1WIwcj.js";import"./layout-C-ijRiyr.js";import"./index-DR62hZV9.js";import"./sidebar-BWu_ePOy.js";import"./use-connection-CGnX1bAr.js";import"./use-mcp-tools-DbRVIPCe.js";import"./dialog-CVU8C65F.js";import"./index-BwduZbfJ.js";import"./dropdown-menu-CFvw1sby.js";import"./integration-icon-Bt36uZm6.js";import"./scroll-area-C80z-i4l.js";import"./index-Cd02a-JG.js";import"./empty-state-DICfxaK6.js";import"./create-sse-subscription-CxkOgzKf.js";import"./input-DNFaDN-t.js";function yt(){const t=s.c(4);let r;t[0]===Symbol.for("react.memo_cache_sentinel")?(r={from:"/shell/$org/settings/workflows/$itemId"},t[0]=r):r=t[0];const{itemId:e}=l(r);let i;t[1]===Symbol.for("react.memo_cache_sentinel")?(i=o.jsx("div",{className:"flex h-full items-center justify-center",children:o.jsx(a,{size:32,className:"animate-spin text-muted-foreground"})}),t[1]=i):i=t[1];const p=decodeURIComponent(e);let m;return t[2]!==p?(m=o.jsx(n,{children:o.jsx(c.Suspense,{fallback:i,children:o.jsx(f,{itemId:p})})}),t[2]=p,t[3]=m):m=t[3],m}export{yt as default};
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
declare const mimicFn: {
|
|
2
|
-
/**
|
|
3
|
-
Make a function mimic another one. It will copy over the properties `name`, `length`, `displayName`, and any custom properties you may have set.
|
|
4
|
-
|
|
5
|
-
@param to - Mimicking function.
|
|
6
|
-
@param from - Function to mimic.
|
|
7
|
-
@returns The modified `to` function.
|
|
8
|
-
|
|
9
|
-
@example
|
|
10
|
-
```
|
|
11
|
-
import mimicFn = require('mimic-fn');
|
|
12
|
-
|
|
13
|
-
function foo() {}
|
|
14
|
-
foo.unicorn = '🦄';
|
|
15
|
-
|
|
16
|
-
function wrapper() {
|
|
17
|
-
return foo();
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
console.log(wrapper.name);
|
|
21
|
-
//=> 'wrapper'
|
|
22
|
-
|
|
23
|
-
mimicFn(wrapper, foo);
|
|
24
|
-
|
|
25
|
-
console.log(wrapper.name);
|
|
26
|
-
//=> 'foo'
|
|
27
|
-
|
|
28
|
-
console.log(wrapper.unicorn);
|
|
29
|
-
//=> '🦄'
|
|
30
|
-
```
|
|
31
|
-
*/
|
|
32
|
-
<
|
|
33
|
-
ArgumentsType extends unknown[],
|
|
34
|
-
ReturnType,
|
|
35
|
-
FunctionType extends (...arguments: ArgumentsType) => ReturnType
|
|
36
|
-
>(
|
|
37
|
-
to: (...arguments: ArgumentsType) => ReturnType,
|
|
38
|
-
from: FunctionType
|
|
39
|
-
): FunctionType;
|
|
40
|
-
|
|
41
|
-
// TODO: Remove this for the next major release, refactor the whole definition to:
|
|
42
|
-
// declare function mimicFn<
|
|
43
|
-
// ArgumentsType extends unknown[],
|
|
44
|
-
// ReturnType,
|
|
45
|
-
// FunctionType extends (...arguments: ArgumentsType) => ReturnType
|
|
46
|
-
// >(
|
|
47
|
-
// to: (...arguments: ArgumentsType) => ReturnType,
|
|
48
|
-
// from: FunctionType
|
|
49
|
-
// ): FunctionType;
|
|
50
|
-
// export = mimicFn;
|
|
51
|
-
default: typeof mimicFn;
|
|
52
|
-
};
|
|
53
|
-
|
|
54
|
-
export = mimicFn;
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
const mimicFn = (to, from) => {
|
|
4
|
-
for (const prop of Reflect.ownKeys(from)) {
|
|
5
|
-
Object.defineProperty(to, prop, Object.getOwnPropertyDescriptor(from, prop));
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
return to;
|
|
9
|
-
};
|
|
10
|
-
|
|
11
|
-
module.exports = mimicFn;
|
|
12
|
-
// TODO: Remove this for the next major release
|
|
13
|
-
module.exports.default = mimicFn;
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
MIT License
|
|
2
|
-
|
|
3
|
-
Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
|
|
4
|
-
|
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
6
|
-
|
|
7
|
-
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
8
|
-
|
|
9
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "mimic-fn",
|
|
3
|
-
"version": "2.1.0",
|
|
4
|
-
"description": "Make a function mimic another one",
|
|
5
|
-
"license": "MIT",
|
|
6
|
-
"repository": "sindresorhus/mimic-fn",
|
|
7
|
-
"author": {
|
|
8
|
-
"name": "Sindre Sorhus",
|
|
9
|
-
"email": "sindresorhus@gmail.com",
|
|
10
|
-
"url": "sindresorhus.com"
|
|
11
|
-
},
|
|
12
|
-
"engines": {
|
|
13
|
-
"node": ">=6"
|
|
14
|
-
},
|
|
15
|
-
"scripts": {
|
|
16
|
-
"test": "xo && ava && tsd"
|
|
17
|
-
},
|
|
18
|
-
"files": [
|
|
19
|
-
"index.js",
|
|
20
|
-
"index.d.ts"
|
|
21
|
-
],
|
|
22
|
-
"keywords": [
|
|
23
|
-
"function",
|
|
24
|
-
"mimic",
|
|
25
|
-
"imitate",
|
|
26
|
-
"rename",
|
|
27
|
-
"copy",
|
|
28
|
-
"inherit",
|
|
29
|
-
"properties",
|
|
30
|
-
"name",
|
|
31
|
-
"func",
|
|
32
|
-
"fn",
|
|
33
|
-
"set",
|
|
34
|
-
"infer",
|
|
35
|
-
"change"
|
|
36
|
-
],
|
|
37
|
-
"devDependencies": {
|
|
38
|
-
"ava": "^1.4.1",
|
|
39
|
-
"tsd": "^0.7.1",
|
|
40
|
-
"xo": "^0.24.0"
|
|
41
|
-
}
|
|
42
|
-
}
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
# mimic-fn [](https://travis-ci.org/sindresorhus/mimic-fn)
|
|
2
|
-
|
|
3
|
-
> Make a function mimic another one
|
|
4
|
-
|
|
5
|
-
Useful when you wrap a function in another function and like to preserve the original name and other properties.
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
## Install
|
|
9
|
-
|
|
10
|
-
```
|
|
11
|
-
$ npm install mimic-fn
|
|
12
|
-
```
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
## Usage
|
|
16
|
-
|
|
17
|
-
```js
|
|
18
|
-
const mimicFn = require('mimic-fn');
|
|
19
|
-
|
|
20
|
-
function foo() {}
|
|
21
|
-
foo.unicorn = '🦄';
|
|
22
|
-
|
|
23
|
-
function wrapper() {
|
|
24
|
-
return foo();
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
console.log(wrapper.name);
|
|
28
|
-
//=> 'wrapper'
|
|
29
|
-
|
|
30
|
-
mimicFn(wrapper, foo);
|
|
31
|
-
|
|
32
|
-
console.log(wrapper.name);
|
|
33
|
-
//=> 'foo'
|
|
34
|
-
|
|
35
|
-
console.log(wrapper.unicorn);
|
|
36
|
-
//=> '🦄'
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
## API
|
|
41
|
-
|
|
42
|
-
It will copy over the properties `name`, `length`, `displayName`, and any custom properties you may have set.
|
|
43
|
-
|
|
44
|
-
### mimicFn(to, from)
|
|
45
|
-
|
|
46
|
-
Modifies the `to` function and returns it.
|
|
47
|
-
|
|
48
|
-
#### to
|
|
49
|
-
|
|
50
|
-
Type: `Function`
|
|
51
|
-
|
|
52
|
-
Mimicking function.
|
|
53
|
-
|
|
54
|
-
#### from
|
|
55
|
-
|
|
56
|
-
Type: `Function`
|
|
57
|
-
|
|
58
|
-
Function to mimic.
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
## Related
|
|
62
|
-
|
|
63
|
-
- [rename-fn](https://github.com/sindresorhus/rename-fn) - Rename a function
|
|
64
|
-
- [keep-func-props](https://github.com/ehmicky/keep-func-props) - Wrap a function without changing its name, length and other properties
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
## License
|
|
68
|
-
|
|
69
|
-
MIT © [Sindre Sorhus](https://sindresorhus.com)
|