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/cli.js
CHANGED
|
@@ -1643,7 +1643,7 @@ AS SELECT
|
|
|
1643
1643
|
FROM monitoring_metrics
|
|
1644
1644
|
GROUP BY organization_id, name, bucket, connection_id, tool_name, status
|
|
1645
1645
|
`}),console.log("[clickhouse-schema] monitoring_metrics_rollup_1m_mv view ready")}finally{await G.close()}}catch(Y){console.error("[clickhouse-schema] Failed to create rollup DDL (queries will fall back to raw table):",Y)}}async function aA1(X){let Y={...process.env},G=QK1(X,Y),Q=G.settings.encryptionKey;console.log(`[settings] ENCRYPTION_KEY = ${JSON.stringify(Q)} (${Q.length} chars)`);let{ensureServices:J}=await Promise.resolve().then(() => (i$1(),c$1)),{outputs:W,services:Z}=await J({home:G.settings.dataDir,externalDatabaseUrl:G.externalDatabaseUrl,externalNatsUrl:G.externalNatsUrl});if(!G.skipMigrations){let{migrateBetterAuth:K}=await Promise.resolve().then(() => (WW0(),Og4));await K(W.databaseUrl);let{createDatabase:H}=await Promise.resolve().then(() => (ZU(),zg4)),{migrateToLatest:U}=await Promise.resolve().then(() => (Cs4(),ks4)),B=H(W.databaseUrl);await U({keepOpen:!0,database:B,skipBetterAuth:!0})}if(G.settings.clickhouseUrl){let{ensureClickHouseRollup:K}=await Promise.resolve().then(() => v16);await K(G.settings.clickhouseUrl)}let $={...G.settings,databaseUrl:W.databaseUrl,natsUrls:W.natsUrls};return mt1($),{settings:$,services:Z.map((K)=>({name:K.name==="PostgreSQL"?"Postgres":K.name,port:K.port})),managedServiceNames:Z.filter((K)=>K.owner==="managed").map((K)=>K.name)}}var gN0=w(()=>{lt1();l9()});var sA1={};T0(sA1,{updateService:()=>Za,toggleViewMode:()=>lN0,toggleVibeState:()=>dN0,toggleLogFlow:()=>mN0,subscribeCliState:()=>xX1,setVibe:()=>va5,setTuiConsoleIntercepted:()=>rA1,setServerUrl:()=>gX1,setMigrationsDone:()=>hX1,setEnv:()=>uX1,setDevMode:()=>ka5,setDataDir:()=>Ca5,isTuiConsoleIntercepted:()=>oA1,getCliState:()=>yX1,addLogEntry:()=>$z});function TU(){for(let X of uN0)X()}function yX1(){return X7}function xX1(X){return uN0.add(X),()=>uN0.delete(X)}function Za(X){X7={...X7,services:X7.services.map((Y)=>Y.name===X.name?X:Y)},TU()}function hX1(){X7={...X7,migrationsStatus:"done"},TU()}function gX1(X){X7={...X7,serverUrl:X},TU()}function uX1(X){X7={...X7,env:X},TU()}function $z(X){let Y=[...X7.logs,X];X7={...X7,logs:Y.length>500?Y.slice(-500):Y},TU()}function ka5(){X7={...X7,services:[...X7.services,{name:"Vite",status:"pending",port:0}]},TU()}function lN0(){X7={...X7,viewMode:X7.viewMode==="requests"?"config":"requests"},TU()}function mN0(){X7={...X7,logFlow:!X7.logFlow},TU()}function Ca5(X){X7={...X7,dataDir:X},TU()}function va5(X){X7={...X7,vibe:X},TU()}function dN0(){X7={...X7,vibe:!X7.vibe},TU()}function rA1(X){_16=X}function oA1(){return _16}var X7,uN0,_16=!1;var Kz=w(()=>{X7={services:[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}],migrationsStatus:"pending",serverUrl:null,env:null,logs:[],viewMode:"requests",logFlow:!1,vibe:!1,dataDir:null},uN0=new Set});import{createServer as f16}from"net";function _a5(X){return new Promise((Y)=>{let G=f16();G.once("error",()=>Y(!1)),G.listen(X,"0.0.0.0",()=>{G.close(()=>Y(!0))})})}async function eA1(X){if(await _a5(X))return X;let Y=await new Promise((G,Q)=>{let J=f16();J.once("error",Q),J.listen(0,"0.0.0.0",()=>{let W=J.address(),Z=typeof W==="object"&&W?W.port:0;J.close(()=>G(Z))})});return console.warn(`Port ${X} is in use, using port ${Y} instead.`),Y}var cN0=()=>{};var iN0={};T0(iN0,{startDevServer:()=>ba5});import{join as fa5}from"path";function b16(X){return X.replace(/\x1b\[[0-9;]*m/g,"")}function y16(X){let Y=X.getReader(),G=new TextDecoder,Q="";function J(){let W=Q.split(`
|
|
1646
|
-
`);Q=W.pop()??"";for(let Z of W){let $=b16(Z).replace(/^\[\d+\]\s*/,"").trim();if(!$)continue;$z({method:"",path:"",status:0,duration:0,timestamp:new Date,rawLine:$})}}(async()=>{for(;;){let{done:W,value:Z}=await Y.read();if(W)break;Q+=G.decode(Z,{stream:!0}),J()}if(Q.trim()){let W=b16(Q).replace(/^\[\d+\]\s*/,"").trim();if(W)$z({method:"",path:"",status:0,duration:0,timestamp:new Date,rawLine:W})}})()}async function ba5(X){let{vitePort:Y,baseUrl:G,noTui:Q}=X,J=await eA1(Number(X.port)),{settings:W,services:Z,managedServiceNames:$}=await aA1({port:String(J),home:X.home,baseUrl:X.baseUrl,localMode:X.localMode,skipMigrations:X.skipMigrations,noTui:X.noTui,vitePort:X.vitePort});for(let z of Z)Za({name:z.name,status:"ready",port:z.port});uX1(W),hX1();let K=fa5(import.meta.dir,"..","..","..","..",".."),H=Q===!0,U=Bun.spawn(["bun","run","--cwd=apps/mesh","dev:servers"],{cwd:K,env:{...process.env,PORT:String(W.port),VITE_PORT:String(Y),DATABASE_URL:W.databaseUrl,NATS_URL:W.natsUrls.join(","),NODE_ENV:W.nodeEnv,DECOCMS_LOCAL_MODE:String(W.localMode),DECOCMS_HOME:W.dataDir,DATA_DIR:W.dataDir,DECO_CLI:"1",...W.baseUrl?{BASE_URL:W.baseUrl}:{}},stdio:["inherit",H?"inherit":"pipe",H?"inherit":"pipe"]});if(!H)y16(U.stdout),y16(U.stderr);let B=G||`http://localhost:${W.port}`;gX1(B),Za({name:"Vite",status:"ready",port:Number(Y)});let N=async(z)=>{if(U.kill(z),$.length>0){let{stopServices:O}=await Promise.resolve().then(() => (i$1(),c$1));await O(W.dataDir)}};return process.on("SIGINT",()=>N("SIGINT")),process.on("SIGTERM",()=>N("SIGTERM")),{port:Number(W.port),process:U}}var pN0=w(()=>{gN0();Kz();cN0()});import{Box as nN0,Text as tN0}from"ink";import{jsx as h16,jsxs as XT1}from"react/jsx-runtime";function x16(X){if(!X)return"not set";try{let Y=new URL(X);if(Y.password)Y.password="***";if(Y.username&&Y.username.length>3)Y.username=Y.username.slice(0,3)+"***";return Y.pathname="/",Y.search="",Y.hash="",Y.toString()}catch{if(X.length<=10)return X;return X.slice(0,6)+"***"+X.slice(-4)}}function ha5(X,Y){if(ya5.has(X))return Y?{text:"\u25CF\u25CF\u25CF\u25CF\u25CF\u25CF",dimColor:!0}:{text:"not set",dimColor:!0};if(xa5.has(X)){if(Array.isArray(Y)){if(Y.length===0)return{text:"not set",dimColor:!0};return{text:Y.map((W)=>x16(W)).join(", "),color:"cyan"}}let Q=x16(Y);return Q==="not set"?{text:Q,dimColor:!0}:{text:Q,color:"cyan"}}if(Y===void 0||Y===null||Y==="")return{text:"not set",dimColor:!0};let G=String(Y);if(G==="true")return{text:G,color:"green"};if(G==="false")return{text:G,color:"yellow"};try{return new URL(G),{text:G,color:"cyan"}}catch{return{text:G}}}function ga5(X){return[{title:"Core",entries:[{key:"NODE_ENV",value:X.nodeEnv},{key:"PORT",value:X.port},{key:"BASE_URL",value:X.baseUrl??`http://localhost:${X.port}`},{key:"DATA_DIR",value:X.dataDir}]},{title:"Database",entries:[{key:"DATABASE_URL",value:X.databaseUrl},{key:"DATABASE_PG_SSL",value:X.databasePgSsl}]},{title:"Auth & Secrets",entries:[{key:"BETTER_AUTH_SECRET",value:X.betterAuthSecret},{key:"ENCRYPTION_KEY",value:X.encryptionKey},{key:"MESH_JWT_SECRET",value:X.meshJwtSecret},{key:"STUDIO_PROVISION_SECRET_KEY",value:X.studioProvisionSecretKey},{key:"DISABLE_RATE_LIMIT",value:X.disableRateLimit}]},{title:"Auth Providers",entries:[{key:"AUTH_EMAIL_PASSWORD_ENABLED",value:process.env.AUTH_EMAIL_PASSWORD_ENABLED??"true"},{key:"AUTH_GOOGLE_CLIENT_ID",value:!!process.env.AUTH_GOOGLE_CLIENT_ID},{key:"AUTH_GITHUB_CLIENT_ID",value:!!process.env.AUTH_GITHUB_CLIENT_ID},{key:"AUTH_RESEND_API_KEY",value:!!process.env.AUTH_RESEND_API_KEY},{key:"AUTH_SENDGRID_API_KEY",value:!!process.env.AUTH_SENDGRID_API_KEY},{key:"AUTH_SSO_MS_CLIENT_ID",value:!!process.env.AUTH_SSO_MS_CLIENT_ID},{key:"AUTH_SSO_GOOGLE_CLIENT_ID",value:!!process.env.AUTH_SSO_GOOGLE_CLIENT_ID},{key:"AUTH_MAGIC_LINK_ENABLED",value:process.env.AUTH_MAGIC_LINK_ENABLED==="true"},{key:"AUTH_EMAIL_OTP_ENABLED",value:process.env.AUTH_EMAIL_OTP_ENABLED==="true"}]},{title:"Observability",entries:[{key:"CLICKHOUSE_URL",value:X.clickhouseUrl},{key:"OTEL_SERVICE_NAME",value:X.otelServiceName}]},{title:"Event Bus & Networking",entries:[{key:"NATS_URL",value:X.natsUrls}]},{title:"Config Files",entries:[{key:"CONFIG_PATH",value:X.configPath}]},{title:"AI Gateway",entries:[{key:"DECO_AI_GATEWAY_ENABLED",value:X.aiGatewayEnabled},{key:"DECO_AI_GATEWAY_URL",value:X.aiGatewayUrl}]}]}function g16({env:X}){let Y=ga5(X);return h16(nN0,{flexDirection:"column",children:Y.map((G)=>XT1(nN0,{flexDirection:"column",marginTop:1,children:[XT1(tN0,{dimColor:!0,children:[" ","\u2500\u2500 ",G.title," ","\u2500".repeat(Math.max(0,38-G.title.length))]}),G.entries.map(({key:Q,value:J})=>{let W=ha5(Q,J);return XT1(nN0,{children:[XT1(tN0,{dimColor:!0,children:[" ",Q.padEnd(36)]}),h16(tN0,{color:W.color,dimColor:W.dimColor,children:W.text})]},Q)})]},G.title))})}var ya5,xa5;var u16=w(()=>{ya5=new Set(["BETTER_AUTH_SECRET","ENCRYPTION_KEY","MESH_JWT_SECRET","STUDIO_PROVISION_SECRET_KEY"]),xa5=new Set(["DATABASE_URL","CLICKHOUSE_URL","NATS_URL"])});var aN0;var l16=w(()=>{aN0={name:"decocms",version:"2.312.5",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/mesh"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:'bun run migrate && concurrently "bun run dev:client" "bun run dev:server"',"dev:servers":'concurrently "bun run dev:client" "bun run dev:server"',"dev:client":"bun --bun vite dev","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts","build:client":"bun --bun vite build","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","db:migrate":"bun run ./dist/server/migrate.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts",test:"bun test","test:e2e":"playwright test","test:e2e:ui":"playwright test --ui","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run build:client && bun run build:server"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1","@freestyle-sh/with-bun":"^0.2.12","@freestyle-sh/with-deno":"^0.0.4","@freestyle-sh/with-nodejs":"^0.2.9","freestyle-sandboxes":"^0.1.46"},dependencies:{"@ai-sdk/anthropic":"^3.0.58","@ai-sdk/google":"^3.0.60","@ai-sdk/openai":"^3.0.50","@anthropic-ai/sdk":"^0.79.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@deco-cx/warp-node":"^0.3.20","@dnd-kit/core":"^6.3.1","@dnd-kit/sortable":"^10.0.0","@dnd-kit/utilities":"^3.2.2","@inkjs/ui":"^2.0.0","@modelcontextprotocol/ext-apps":"^1.2.2","@openrouter/ai-sdk-provider":"^2.2.5","@opentelemetry/core":"^2.6.0","@tanstack/react-virtual":"^3.13.21","@xterm/addon-fit":"^0.11.0","@xterm/xterm":"^6.0.0","ai-sdk-provider-claude-code":"^3.4.4","ai-sdk-provider-codex-cli":"^1.1.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12",nats:"^2.29.3","node-pty":"^1.0.0","posthog-js":"^1.371.1","posthog-node":"^5.0.0",react:"^19.2.0","react-dom":"^19.2.0"},devDependencies:{"@ai-sdk/provider":"^3.0.8","@ai-sdk/react":"^3.0.118","@anthropic-ai/claude-agent-sdk":"^0.2.80","@better-auth/sso":"1.4.1","@daveyplate/better-auth-ui":"^3.2.7","@deco/ui":"workspace:*","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/mesh-sdk":"workspace:*","@decocms/runtime":"workspace:*","@decocms/vite-plugin":"workspace:*","@electric-sql/pglite":"^0.3.15","@floating-ui/react":"^0.27.16","@hookform/resolvers":"^5.2.2","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.27.1","@monaco-editor/react":"^4.7.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@playwright/test":"^1.58.2","@radix-ui/react-avatar":"^1.1.10","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-dropdown-menu":"^2.1.16","@radix-ui/react-label":"^2.1.7","@radix-ui/react-select":"^2.2.6","@radix-ui/react-separator":"^1.1.7","@radix-ui/react-slot":"^1.2.3","@radix-ui/react-tabs":"^1.1.13","@rjsf/core":"^6.1.2","@rjsf/shadcn":"^6.1.2","@rjsf/utils":"^6.1.2","@rjsf/validator-ajv8":"^6.1.2","@tailwindcss/vite":"^4.1.17","@tanstack/react-query":"5.90.11","@tanstack/react-router":"^1.139.7","@tiptap/core":"3.20.2","@tiptap/extension-mention":"3.20.2","@tiptap/extension-placeholder":"3.20.2","@tiptap/pm":"3.20.2","@tiptap/react":"3.20.2","@tiptap/starter-kit":"3.20.2","@tiptap/suggestion":"3.20.2","@types/bun":"^1.3.1","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@untitledui/icons":"^0.0.19","@vercel/nft":"^1.1.1","@vitejs/plugin-react":"^5.1.0",ai:"^6.0.116","babel-plugin-react-compiler":"^1.0.0","better-auth":"1.4.5","class-variance-authority":"^0.7.1",clsx:"^2.1.1",concurrently:"^9.2.1",croner:"^9.1.0","date-fns":"^4.1.0",degit:"^2.8.4",hono:"^4.10.7","input-otp":"^1.4.2",jose:"^6.0.11","kysely-pglite":"^0.6.1","lucide-react":"^0.468.0",marked:"^15.0.6","@decocms/sandbox":"workspace:*","mesh-plugin-workflows":"workspace:*",nanoid:"^5.1.6",pg:"^8.16.3",prettier:"^3.4.2","react-hook-form":"^7.66.0","react-markdown":"^10.1.0","react-resizable-panels":"^2.1.7","react-syntax-highlighter":"^15.6.1",recharts:"^3.6.0","rehype-raw":"^7.0.0","remark-gfm":"^4.0.0","sass-embedded":"^1.97.2",sonner:"^2.0.7","tailwind-merge":"^3.3.1",tailwindcss:"^4.1.17",typescript:"^5.9.3",vite:"^7.2.1","vite-tsconfig-paths":"^5.1.4",zod:"^4.0.0",zustand:"^5.0.9"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","mesh","tools"],license:"MIT",publishConfig:{access:"public"}}});import{Box as IU,Text as RX}from"ink";import{Spinner as la5}from"@inkjs/ui";import{useSyncExternalStore as m16}from"react";import{jsx as TY,jsxs as oQ}from"react/jsx-runtime";function pa5(X,Y){if(!X||!ia5.has(X))return X;let G=rN0[Y]??rN0[rN0.length-1];return X==="#875f00"?G[0]:G[1]}function d16({status:X}){if(X==="pending")return TY(la5,{label:""});return TY(RX,{color:"green",children:"\u2713"})}function c16({services:X,migrationsStatus:Y,home:G,serverUrl:Q,vibe:J}){let W=m16(em0,sm0),Z=m16(Zd0,Jd0);return oQ(IU,{flexDirection:"column",paddingBottom:1,children:[J?oQ(IU,{flexDirection:"column",children:[W.map(($,K)=>{let H=Z[K],U=$.reduce((N,z)=>N+z.text.length,0),B=Math.max(0,ca5-U);return oQ(IU,{flexDirection:"row",children:[$.map((N,z)=>{let O=pa5(N.color,K);return O?TY(RX,{color:O,children:N.text},z):TY(RX,{children:N.text},z)}),TY(RX,{children:" ".repeat(B+2)}),H?.map((N,z)=>N.color?TY(RX,{color:N.color,children:N.char},z):TY(RX,{children:N.char},z))]},K)}),oQ(RX,{dimColor:!0,children:[" v",aN0.version]})]}):oQ(IU,{flexDirection:"column",marginTop:1,children:[ma5.map(($,K)=>TY(RX,{color:da5[K],children:$},K)),oQ(RX,{dimColor:!0,children:[" v",aN0.version]})]}),TY(IU,{marginBottom:1,children:TY(RX,{dimColor:!0,children:"\u2500".repeat(80)})}),TY(IU,{children:oQ(RX,{dimColor:!0,children:["Home: ",G]})}),oQ(IU,{gap:2,children:[X.map(($)=>oQ(IU,{gap:1,children:[oQ(RX,{children:[$.name," :",$.port||"...."]}),TY(d16,{status:$.status})]},$.name)),oQ(IU,{gap:1,children:[TY(RX,{children:"Migrations"}),TY(d16,{status:Y})]})]}),TY(IU,{children:Q?oQ(RX,{children:["Open in browser: ",TY(RX,{color:"cyan",children:Q})]}):TY(RX,{dimColor:!0,children:"Starting..."})}),oQ(IU,{gap:2,children:[oQ(RX,{dimColor:!0,children:[TY(RX,{bold:!0,dimColor:!0,children:"K"})," ","toggle config"]}),oQ(RX,{dimColor:!0,children:[TY(RX,{bold:!0,dimColor:!0,children:"L"})," ","toggle log flow"]}),oQ(RX,{dimColor:!0,children:[TY(RX,{bold:!0,dimColor:!0,children:"V"})," ","toggle vibe ",J?"\u266A Nihilore \xB7 CC BY 4.0":""]}),J&&oQ(RX,{dimColor:!0,children:[TY(RX,{bold:!0,dimColor:!0,children:"N"})," ","skip song"]})]})]})}var ma5,da5,rN0,ca5=30,ia5;var i16=w(()=>{l16();kt1();yt1();ma5=[" \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588 ","\u2591\u2591\u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588 \u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588\u2588\u2588 "," \u2591\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2588 \u2591 \u2588\u2588\u2588 \u2591\u2591\u2591 \u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588\u2591\u2591\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591 \u2588\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588 "," \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2591\u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2591 ","\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591 "],da5=["#00ff64","#00ee5e","#00dc56","#00c84e","#00b444","#00a03c","#008832","#006e28"],rN0=[["#00ff64","#00cc50"],["#00f060","#00c04c"],["#00e05c","#00b448"],["#00d058","#00a844"],["#00c054","#009c40"],["#00b050","#00903c"],["#00a04c","#008438"],["#009048","#007834"],["#008044","#006c30"],["#007040","#00602c"],["#00603c","#005428"]],ia5=new Set(["#875f00","#5f3800"])});import{useSyncExternalStore as na5}from"react";function ta5(){let X=process.stdout.rows||24,Y=process.stdout.columns||80;if(X!==YT1.rows||Y!==YT1.columns)YT1={rows:X,columns:Y};return YT1}function aa5(X){return process.stdout.on("resize",X),()=>{process.stdout.off("resize",X)}}function p16(){return na5(aa5,ta5)}var YT1;var n16=w(()=>{YT1={rows:process.stdout.rows||24,columns:process.stdout.columns||80}});import{Box as ra5,Text as lX1}from"ink";import{useSyncExternalStore as oa5}from"react";import{jsx as oN0,jsxs as sN0}from"react/jsx-runtime";function sa5(X){if(X>=500)return"red";if(X>=400)return"yellow";if(X>=300)return"cyan";return"green"}function t16({logs:X,headerHeight:Y}){let{rows:G}=p16(),{logFlow:Q}=oa5(xX1,yX1),J=Math.max(1,G-Y-1),W=Q?X:X.slice(-J);return oN0(ra5,{flexDirection:"column",children:W.map((Z,$)=>{if(Z.rawLine)return oN0(lX1,{dimColor:!0,children:Z.rawLine},$);let K=Z.duration<1000?`${Z.duration}ms`:`${(Z.duration/1000).toFixed(1)}s`;return sN0(lX1,{children:[sN0(lX1,{dimColor:!0,children:[Z.method.padEnd(6)," ",Z.path.padEnd(30)," "]}),oN0(lX1,{color:sa5(Z.status),children:Z.status}),sN0(lX1,{dimColor:!0,children:[" ",K.padStart(8)]})]},$)})})}var a16=w(()=>{Kz();n16()});var eN0={};T0(eN0,{App:()=>Zr5});import{Box as ea5,Text as Xr5,useInput as Yr5}from"ink";import{useSyncExternalStore as Gr5}from"react";import{jsx as GT1,jsxs as Wr5}from"react/jsx-runtime";function Zr5({home:X}){let Y=Gr5(xX1,yX1);return Yr5((G)=>{if(G==="k"||G==="K")lN0();if(G==="l"||G==="L")mN0();if((G==="v"||G==="V")&&Y.dataDir)ut1(Y.dataDir),dN0();if((G==="n"||G==="N")&&Y.vibe)gt1()}),Wr5(ea5,{flexDirection:"column",children:[GT1(c16,{services:Y.services,migrationsStatus:Y.migrationsStatus,home:X,serverUrl:Y.serverUrl,vibe:Y.vibe}),Y.viewMode==="config"?Y.env?GT1(g16,{env:Y.env}):GT1(Xr5,{dimColor:!0,children:"Loading configuration..."}):GT1(t16,{logs:Y.logs,headerHeight:Y.vibe?Jr5:Qr5})]})}var Qr5=15,Jr5=19;var Xz0=w(()=>{u16();i16();a16();Kz();hd()});function r16(X,Y={}){return{PORT:String(X.port),NODE_ENV:X.nodeEnv,BASE_URL:X.baseUrl,DATA_DIR:X.dataDir,DECOCMS_HOME:X.dataDir,DATABASE_URL:X.databaseUrl,DATABASE_PG_SSL:String(X.databasePgSsl),DATABASE_POOL_MAX:String(X.databasePoolMax),NATS_URL:X.natsUrls.join(","),BETTER_AUTH_SECRET:X.betterAuthSecret,ENCRYPTION_KEY:X.encryptionKey,MESH_JWT_SECRET:X.meshJwtSecret,DECOCMS_LOCAL_MODE:String(X.localMode),DISABLE_RATE_LIMIT:String(X.disableRateLimit),STUDIO_PROVISION_SECRET_KEY:X.studioProvisionSecretKey,CONFIG_PATH:X.configPath,...Object.fromEntries(Object.entries(process.env).filter(([G])=>G.startsWith("AUTH_"))),DECO_AI_GATEWAY_ENABLED:String(X.aiGatewayEnabled),DECO_AI_GATEWAY_URL:X.aiGatewayUrl,ENABLE_DECO_IMPORT:String(X.enableDecoImport),S3_ENDPOINT:X.s3Endpoint,S3_BUCKET:X.s3Bucket,S3_REGION:X.s3Region,S3_ACCESS_KEY_ID:X.s3AccessKeyId,S3_SECRET_ACCESS_KEY:X.s3SecretAccessKey,S3_FORCE_PATH_STYLE:String(X.s3ForcePathStyle),OTEL_SERVICE_NAME:X.otelServiceName,CLICKHOUSE_URL:X.clickhouseUrl,OTEL_EXPORTER_OTLP_ENDPOINT:process.env.OTEL_EXPORTER_OTLP_ENDPOINT,OTEL_EXPORTER_OTLP_PROTOCOL:process.env.OTEL_EXPORTER_OTLP_PROTOCOL,OTEL_RESOURCE_ATTRIBUTES:process.env.OTEL_RESOURCE_ATTRIBUTES,DECO_SUPABASE_URL:X.decoSupabaseUrl,DECO_SUPABASE_SERVICE_KEY:X.decoSupabaseServiceKey,FIRECRAWL_API_KEY:X.firecrawlApiKey,STUDIO_SANDBOX_RUNNER:process.env.STUDIO_SANDBOX_RUNNER,STUDIO_SANDBOX_TEMPLATE_NAME:process.env.STUDIO_SANDBOX_TEMPLATE_NAME,STUDIO_ENV:process.env.STUDIO_ENV,STUDIO_SANDBOX_PREVIEW_URL_PATTERN:process.env.STUDIO_SANDBOX_PREVIEW_URL_PATTERN,STUDIO_SANDBOX_PREVIEW_GATEWAY_NAME:process.env.STUDIO_SANDBOX_PREVIEW_GATEWAY_NAME,STUDIO_SANDBOX_PREVIEW_GATEWAY_NAMESPACE:process.env.STUDIO_SANDBOX_PREVIEW_GATEWAY_NAMESPACE,STUDIO_SANDBOX_SENTINEL_TOKEN:process.env.STUDIO_SANDBOX_SENTINEL_TOKEN,KUBERNETES_SERVICE_HOST:process.env.KUBERNETES_SERVICE_HOST,KUBERNETES_SERVICE_PORT:process.env.KUBERNETES_SERVICE_PORT,FREESTYLE_API_KEY:process.env.FREESTYLE_API_KEY,BROWSERLESS_TOKEN:process.env.BROWSERLESS_TOKEN,NODE_EXTRA_CA_CERTS:process.env.NODE_EXTRA_CA_CERTS,DECO_CLI:"1",DECO_NO_TUI:"true",...Y}}var hj=k((Br5)=>{Br5.HttpAuthLocation=void 0;(function(X){X.HEADER="header",X.QUERY="query"})(Br5.HttpAuthLocation||(Br5.HttpAuthLocation={}));Br5.HttpApiKeyAuthLocation=void 0;(function(X){X.HEADER="header",X.QUERY="query"})(Br5.HttpApiKeyAuthLocation||(Br5.HttpApiKeyAuthLocation={}));Br5.EndpointURLScheme=void 0;(function(X){X.HTTP="http",X.HTTPS="https"})(Br5.EndpointURLScheme||(Br5.EndpointURLScheme={}));Br5.AlgorithmId=void 0;(function(X){X.MD5="md5",X.CRC32="crc32",X.CRC32C="crc32c",X.SHA1="sha1",X.SHA256="sha256"})(Br5.AlgorithmId||(Br5.AlgorithmId={}));var $r5=(X)=>{let Y=[];if(X.sha256!==void 0)Y.push({algorithmId:()=>Br5.AlgorithmId.SHA256,checksumConstructor:()=>X.sha256});if(X.md5!=null)Y.push({algorithmId:()=>Br5.AlgorithmId.MD5,checksumConstructor:()=>X.md5});return{addChecksumAlgorithm(G){Y.push(G)},checksumAlgorithms(){return Y}}},Kr5=(X)=>{let Y={};return X.checksumAlgorithms().forEach((G)=>{Y[G.algorithmId()]=G.checksumConstructor()}),Y},Hr5=(X)=>{return $r5(X)},Fr5=(X)=>{return Kr5(X)};Br5.FieldPosition=void 0;(function(X){X[X.HEADER=0]="HEADER",X[X.TRAILER=1]="TRAILER"})(Br5.FieldPosition||(Br5.FieldPosition={}));var Ur5="__smithy_context";Br5.IniSectionType=void 0;(function(X){X.PROFILE="profile",X.SSO_SESSION="sso-session",X.SERVICES="services"})(Br5.IniSectionType||(Br5.IniSectionType={}));Br5.RequestHandlerProtocol=void 0;(function(X){X.HTTP_0_9="http/0.9",X.HTTP_1_0="http/1.0",X.TDS_8_0="tds/8.0"})(Br5.RequestHandlerProtocol||(Br5.RequestHandlerProtocol={}));Br5.SMITHY_CONTEXT_KEY=Ur5;Br5.getDefaultClientConfiguration=Hr5;Br5.resolveDefaultRuntimeConfig=Fr5});var u7=k((qr5)=>{var Dr5=hj(),wr5=(X)=>{return{setHttpHandler(Y){X.httpHandler=Y},httpHandler(){return X.httpHandler},updateHttpClientConfig(Y,G){X.httpHandler?.updateHttpClientConfig(Y,G)},httpHandlerConfigs(){return X.httpHandler.httpHandlerConfigs()}}},Lr5=(X)=>{return{httpHandler:X.httpHandler()}};class o16{name;kind;values;constructor({name:X,kind:Y=Dr5.FieldPosition.HEADER,values:G=[]}){this.name=X,this.kind=Y,this.values=G}add(X){this.values.push(X)}set(X){this.values=X}remove(X){this.values=this.values.filter((Y)=>Y!==X)}toString(){return this.values.map((X)=>X.includes(",")||X.includes(" ")?`"${X}"`:X).join(", ")}get(){return this.values}}class s16{entries={};encoding;constructor({fields:X=[],encoding:Y="utf-8"}){X.forEach(this.setField.bind(this)),this.encoding=Y}setField(X){this.entries[X.name.toLowerCase()]=X}getField(X){return this.entries[X.toLowerCase()]}removeField(X){delete this.entries[X.toLowerCase()]}getByType(X){return Object.values(this.entries).filter((Y)=>Y.kind===X)}}class QT1{method;protocol;hostname;port;path;query;headers;username;password;fragment;body;constructor(X){this.method=X.method||"GET",this.hostname=X.hostname||"localhost",this.port=X.port,this.query=X.query||{},this.headers=X.headers||{},this.body=X.body,this.protocol=X.protocol?X.protocol.slice(-1)!==":"?`${X.protocol}:`:X.protocol:"https:",this.path=X.path?X.path.charAt(0)!=="/"?`/${X.path}`:X.path:"/",this.username=X.username,this.password=X.password,this.fragment=X.fragment}static clone(X){let Y=new QT1({...X,headers:{...X.headers}});if(Y.query)Y.query=Er5(Y.query);return Y}static isInstance(X){if(!X)return!1;let Y=X;return"method"in Y&&"protocol"in Y&&"hostname"in Y&&"path"in Y&&typeof Y.query==="object"&&typeof Y.headers==="object"}clone(){return QT1.clone(this)}}function Er5(X){return Object.keys(X).reduce((Y,G)=>{let Q=X[G];return{...Y,[G]:Array.isArray(Q)?[...Q]:Q}},{})}class e16{statusCode;reason;headers;body;constructor(X){this.statusCode=X.statusCode,this.reason=X.reason,this.headers=X.headers||{},this.body=X.body}static isInstance(X){if(!X)return!1;let Y=X;return typeof Y.statusCode==="number"&&typeof Y.headers==="object"}}function Pr5(X){return/^[a-z0-9][a-z0-9\.\-]*[a-z0-9]$/.test(X)}qr5.Field=o16;qr5.Fields=s16;qr5.HttpRequest=QT1;qr5.HttpResponse=e16;qr5.getHttpHandlerExtensionConfiguration=wr5;qr5.isValidHostname=Pr5;qr5.resolveHttpHandlerRuntimeConfig=Lr5});function Sr5(X){return(Y)=>async(G)=>{let{request:Q}=G;if(X.expectContinueHeader!==!1&&X06.HttpRequest.isInstance(Q)&&Q.body&&X.runtime==="node"&&X.requestHandler?.constructor?.name!=="FetchHttpHandler"){let J=!0;if(typeof X.expectContinueHeader==="number")try{J=(Number(Q.headers?.["content-length"])??X.bodyLengthChecker?.(Q.body)??1/0)>=X.expectContinueHeader}catch(W){}else J=!!X.expectContinueHeader;if(J)Q.headers.Expect="100-continue"}return Y({...G,request:Q})}}var X06,kr5,Y06=(X)=>({applyToStack:(Y)=>{Y.add(Sr5(X),kr5)}});var G06=w(()=>{X06=X1(u7(),1);kr5={step:"build",tags:["SET_EXPECT_HEADER","EXPECT_HEADER"],name:"addExpectContinueMiddleware",override:!0}});var LH,JT1,gj,ZT1,E9,Q06,dX1;var EH=w(()=>{LH={WHEN_SUPPORTED:"WHEN_SUPPORTED",WHEN_REQUIRED:"WHEN_REQUIRED"},JT1=LH.WHEN_SUPPORTED,gj={WHEN_SUPPORTED:"WHEN_SUPPORTED",WHEN_REQUIRED:"WHEN_REQUIRED"},ZT1=LH.WHEN_SUPPORTED;(function(X){X.MD5="MD5",X.CRC32="CRC32",X.CRC32C="CRC32C",X.CRC64NVME="CRC64NVME",X.SHA1="SHA1",X.SHA256="SHA256"})(E9||(E9={}));(function(X){X.HEADER="header",X.TRAILER="trailer"})(Q06||(Q06={}));dX1=E9.CRC32});var Cq,Wa=(X,Y,G,Q)=>{if(!(Y in X))return;let J=X[Y].toUpperCase();if(!Object.values(G).includes(J))throw TypeError(`Cannot load ${Q} '${Y}'. Expected one of ${Object.values(G)}, got '${X[Y]}'.`);return J};var $z0=w(()=>{(function(X){X.ENV="env",X.CONFIG="shared config entry"})(Cq||(Cq={}))});var Cr5="AWS_REQUEST_CHECKSUM_CALCULATION",vr5="request_checksum_calculation",J06;var Z06=w(()=>{EH();$z0();J06={environmentVariableSelector:(X)=>Wa(X,Cr5,LH,Cq.ENV),configFileSelector:(X)=>Wa(X,vr5,LH,Cq.CONFIG),default:JT1}});var _r5="AWS_RESPONSE_CHECKSUM_VALIDATION",fr5="response_checksum_validation",W06;var $06=w(()=>{EH();$z0();W06={environmentVariableSelector:(X)=>Wa(X,_r5,gj,Cq.ENV),configFileSelector:(X)=>Wa(X,fr5,gj,Cq.CONFIG),default:ZT1}});var Hz0=k((cr5)=>{var br5=["AuthFailure","InvalidSignatureException","RequestExpired","RequestInTheFuture","RequestTimeTooSkewed","SignatureDoesNotMatch"],yr5=["BandwidthLimitExceeded","EC2ThrottledException","LimitExceededException","PriorRequestNotComplete","ProvisionedThroughputExceededException","RequestLimitExceeded","RequestThrottled","RequestThrottledException","SlowDown","ThrottledException","Throttling","ThrottlingException","TooManyRequestsException","TransactionInProgressException"],xr5=["TimeoutError","RequestTimeout","RequestTimeoutException"],hr5=[500,502,503,504],gr5=["ECONNRESET","ECONNREFUSED","EPIPE","ETIMEDOUT"],ur5=["EHOSTUNREACH","ENETUNREACH","ENOTFOUND"],K06=(X)=>X?.$retryable!==void 0,lr5=(X)=>br5.includes(X.name),H06=(X)=>X.$metadata?.clockSkewCorrected,F06=(X)=>{let Y=new Set(["Failed to fetch","NetworkError when attempting to fetch resource","The Internet connection appears to be offline","Load failed","Network request failed"]);if(!(X&&X instanceof TypeError))return!1;return Y.has(X.message)},mr5=(X)=>X.$metadata?.httpStatusCode===429||yr5.includes(X.name)||X.$retryable?.throttling==!0,Kz0=(X,Y=0)=>K06(X)||H06(X)||X.name==="InvalidSignatureException"&&X.message?.includes("Signature expired")||xr5.includes(X.name)||gr5.includes(X?.code||"")||ur5.includes(X?.code||"")||hr5.includes(X.$metadata?.httpStatusCode||0)||F06(X)||U06(X)||X.cause!==void 0&&Y<=10&&Kz0(X.cause,Y+1),dr5=(X)=>{if(X.$metadata?.httpStatusCode!==void 0){let Y=X.$metadata.httpStatusCode;if(500<=Y&&Y<=599&&!Kz0(X))return!0;return!1}return!1};function U06(X){return X.code==="ERR_HTTP2_STREAM_ERROR"&&X.message.includes("NGHTTP2_REFUSED_STREAM")}cr5.isBrowserNetworkError=F06;cr5.isClockSkewCorrectedError=H06;cr5.isClockSkewError=lr5;cr5.isNodeJsHttp2TransientError=U06;cr5.isRetryableByTrait=K06;cr5.isServerError=dr5;cr5.isThrottlingError=mr5;cr5.isTransientError=Kz0});var ww=k(($o5)=>{var er5=Hz0();$o5.RETRY_MODES=void 0;(function(X){X.STANDARD="standard",X.ADAPTIVE="adaptive"})($o5.RETRY_MODES||($o5.RETRY_MODES={}));var $T1=3,Xo5=$o5.RETRY_MODES.STANDARD;class KT1{static setTimeoutFn=setTimeout;beta;minCapacity;minFillRate;scaleConstant;smooth;enabled=!1;availableTokens=0;lastMaxRate=0;measuredTxRate=0;requestCount=0;fillRate;lastThrottleTime;lastTimestamp=0;lastTxRateBucket;maxCapacity;timeWindow=0;constructor(X){this.beta=X?.beta??0.7,this.minCapacity=X?.minCapacity??1,this.minFillRate=X?.minFillRate??0.5,this.scaleConstant=X?.scaleConstant??0.4,this.smooth=X?.smooth??0.8,this.lastThrottleTime=this.getCurrentTimeInSeconds(),this.lastTxRateBucket=Math.floor(this.getCurrentTimeInSeconds()),this.fillRate=this.minFillRate,this.maxCapacity=this.minCapacity}async getSendToken(){return this.acquireTokenBucket(1)}updateClientSendingRate(X){let Y;this.updateMeasuredRate();let G=X;if(G?.errorType==="THROTTLING"||er5.isThrottlingError(G?.error??X)){let W=!this.enabled?this.measuredTxRate:Math.min(this.measuredTxRate,this.fillRate);this.lastMaxRate=W,this.calculateTimeWindow(),this.lastThrottleTime=this.getCurrentTimeInSeconds(),Y=this.cubicThrottle(W),this.enableTokenBucket()}else this.calculateTimeWindow(),Y=this.cubicSuccess(this.getCurrentTimeInSeconds());let J=Math.min(Y,2*this.measuredTxRate);this.updateTokenBucketRate(J)}getCurrentTimeInSeconds(){return Date.now()/1000}async acquireTokenBucket(X){if(!this.enabled)return;if(this.refillTokenBucket(),X>this.availableTokens){let Y=(X-this.availableTokens)/this.fillRate*1000;await new Promise((G)=>KT1.setTimeoutFn(G,Y))}this.availableTokens=this.availableTokens-X}refillTokenBucket(){let X=this.getCurrentTimeInSeconds();if(!this.lastTimestamp){this.lastTimestamp=X;return}let Y=(X-this.lastTimestamp)*this.fillRate;this.availableTokens=Math.min(this.maxCapacity,this.availableTokens+Y),this.lastTimestamp=X}calculateTimeWindow(){this.timeWindow=this.getPrecise(Math.pow(this.lastMaxRate*(1-this.beta)/this.scaleConstant,0.3333333333333333))}cubicThrottle(X){return this.getPrecise(X*this.beta)}cubicSuccess(X){return this.getPrecise(this.scaleConstant*Math.pow(X-this.lastThrottleTime-this.timeWindow,3)+this.lastMaxRate)}enableTokenBucket(){this.enabled=!0}updateTokenBucketRate(X){this.refillTokenBucket(),this.fillRate=Math.max(X,this.minFillRate),this.maxCapacity=Math.max(X,this.minCapacity),this.availableTokens=Math.min(this.availableTokens,this.maxCapacity)}updateMeasuredRate(){let X=this.getCurrentTimeInSeconds(),Y=Math.floor(X*2)/2;if(this.requestCount++,Y>this.lastTxRateBucket){let G=this.requestCount/(Y-this.lastTxRateBucket);this.measuredTxRate=this.getPrecise(G*this.smooth+this.measuredTxRate*(1-this.smooth)),this.requestCount=0,this.lastTxRateBucket=Y}}getPrecise(X){return parseFloat(X.toFixed(8))}}var Yo5=100,Bz0=20000,Go5=500,Fz0=500,Qo5=5,Jo5=10,B06=1,Zo5="amz-sdk-invocation-id",Wo5="amz-sdk-request";class sQ{static v2026=typeof process<"u"&&process.env?.SMITHY_NEW_RETRIES_2026==="true";static delay(){return sQ.v2026?50:100}static throttlingDelay(){return sQ.v2026?1000:500}static cost(){return sQ.v2026?14:5}static throttlingCost(){return sQ.v2026?5:10}static modifiedCostType(){return sQ.v2026?"THROTTLING":"TRANSIENT"}}class N06{x=sQ.delay();computeNextBackoffDelay(X){let Y=Math.random(),G=2,Q=Y*Math.min(this.x*2**X,Bz0);return Math.floor(Q)}setDelayBase(X){this.x=X}}class Uz0{delay;count;cost;longPoll;constructor(X,Y,G,Q){this.delay=X,this.count=Y,this.cost=G,this.longPoll=Q}getRetryCount(){return this.count}getRetryDelay(){return Math.min(Bz0,this.delay)}getRetryCost(){return this.cost}isLongPoll(){return this.longPoll}}var WT1={incompatible:1,attempts:2,capacity:3};class cX1{mode=$o5.RETRY_MODES.STANDARD;capacity=Fz0;retryBackoffStrategy;maxAttemptsProvider;baseDelay;constructor(X){if(typeof X==="number")this.maxAttemptsProvider=async()=>X;else if(typeof X==="function")this.maxAttemptsProvider=X;else if(X&&typeof X==="object")this.maxAttemptsProvider=async()=>X.maxAttempts,this.baseDelay=X.baseDelay,this.retryBackoffStrategy=X.backoff;this.maxAttemptsProvider??=async()=>$T1,this.baseDelay??=sQ.delay(),this.retryBackoffStrategy??=new N06}async acquireInitialRetryToken(X){return new Uz0(sQ.delay(),0,void 0,sQ.v2026&&X.includes(":longpoll"))}async refreshRetryTokenForRetry(X,Y){let G=await this.getMaxAttempts(),Q=this.retryCode(X,Y,G),J=Q===0,W=X.isLongPoll?.();if(J||W){let Z=Y.errorType;this.retryBackoffStrategy.setDelayBase(Z==="THROTTLING"?sQ.throttlingDelay():this.baseDelay);let $=this.retryBackoffStrategy.computeNextBackoffDelay(X.getRetryCount()),K=$;if(Y.retryAfterHint instanceof Date)K=Math.max($,Math.min(Y.retryAfterHint.getTime()-Date.now(),$+5000));if(!J)throw Object.assign(Error("No retry token available"),{$backoff:sQ.v2026&&Q===WT1.capacity&&W?K:0});else{let H=this.getCapacityCost(Z);return this.capacity-=H,new Uz0(K,X.getRetryCount()+1,H,X.isLongPoll?.()??!1)}}throw Error("No retry token available")}recordSuccess(X){this.capacity=Math.min(Fz0,this.capacity+(X.getRetryCost()??B06))}getCapacity(){return this.capacity}async maxAttempts(){return this.maxAttemptsProvider()}async getMaxAttempts(){try{return await this.maxAttemptsProvider()}catch(X){return console.warn(`Max attempts provider could not resolve. Using default of ${$T1}`),$T1}}retryCode(X,Y,G){let Q=X.getRetryCount()+1,J=this.isRetryableError(Y.errorType)?0:WT1.incompatible,W=Q<G?0:WT1.attempts,Z=this.capacity>=this.getCapacityCost(Y.errorType)?0:WT1.capacity;return J||W||Z}getCapacityCost(X){return X===sQ.modifiedCostType()?sQ.throttlingCost():sQ.cost()}isRetryableError(X){return X==="THROTTLING"||X==="TRANSIENT"}}class z06{mode=$o5.RETRY_MODES.ADAPTIVE;rateLimiter;standardRetryStrategy;constructor(X,Y){let{rateLimiter:G}=Y??{};this.rateLimiter=G??new KT1,this.standardRetryStrategy=Y?new cX1({maxAttempts:typeof X==="number"?X:3,...Y}):new cX1(X)}async acquireInitialRetryToken(X){return await this.rateLimiter.getSendToken(),this.standardRetryStrategy.acquireInitialRetryToken(X)}async refreshRetryTokenForRetry(X,Y){return this.rateLimiter.updateClientSendingRate(Y),this.standardRetryStrategy.refreshRetryTokenForRetry(X,Y)}recordSuccess(X){this.rateLimiter.updateClientSendingRate({}),this.standardRetryStrategy.recordSuccess(X)}async maxAttemptsProvider(){return this.standardRetryStrategy.maxAttempts()}}class O06 extends cX1{computeNextBackoffDelay;constructor(X,Y=sQ.delay()){super(typeof X==="function"?X:async()=>X);if(typeof Y==="number")this.computeNextBackoffDelay=()=>Y;else this.computeNextBackoffDelay=Y}async refreshRetryTokenForRetry(X,Y){let G=await super.refreshRetryTokenForRetry(X,Y);return G.getRetryDelay=()=>this.computeNextBackoffDelay(G.getRetryCount()),G}}$o5.AdaptiveRetryStrategy=z06;$o5.ConfiguredRetryStrategy=O06;$o5.DEFAULT_MAX_ATTEMPTS=$T1;$o5.DEFAULT_RETRY_DELAY_BASE=Yo5;$o5.DEFAULT_RETRY_MODE=Xo5;$o5.DefaultRateLimiter=KT1;$o5.INITIAL_RETRY_TOKENS=Fz0;$o5.INVOCATION_ID_HEADER=Zo5;$o5.MAXIMUM_RETRY_DELAY=Bz0;$o5.NO_RETRY_INCREMENT=B06;$o5.REQUEST_HEADER=Wo5;$o5.RETRY_COST=Qo5;$o5.Retry=sQ;$o5.StandardRetryStrategy=cX1;$o5.THROTTLING_RETRY_DELAY_BASE=Go5;$o5.TIMEOUT_RETRY_COST=Jo5});var WX=k((vo5)=>{var Io5=ww(),Nz0={warningEmitted:!1},Vo5=(X)=>{if(X&&!Nz0.warningEmitted&&parseInt(X.substring(1,X.indexOf(".")))<20)Nz0.warningEmitted=!0,process.emitWarning(`NodeDeprecationWarning: The AWS SDK for JavaScript (v3) will
|
|
1646
|
+
`);Q=W.pop()??"";for(let Z of W){let $=b16(Z).replace(/^\[\d+\]\s*/,"").trim();if(!$)continue;$z({method:"",path:"",status:0,duration:0,timestamp:new Date,rawLine:$})}}(async()=>{for(;;){let{done:W,value:Z}=await Y.read();if(W)break;Q+=G.decode(Z,{stream:!0}),J()}if(Q.trim()){let W=b16(Q).replace(/^\[\d+\]\s*/,"").trim();if(W)$z({method:"",path:"",status:0,duration:0,timestamp:new Date,rawLine:W})}})()}async function ba5(X){let{vitePort:Y,baseUrl:G,noTui:Q}=X,J=await eA1(Number(X.port)),{settings:W,services:Z,managedServiceNames:$}=await aA1({port:String(J),home:X.home,baseUrl:X.baseUrl,localMode:X.localMode,skipMigrations:X.skipMigrations,noTui:X.noTui,vitePort:X.vitePort});for(let z of Z)Za({name:z.name,status:"ready",port:z.port});uX1(W),hX1();let K=fa5(import.meta.dir,"..","..","..","..",".."),H=Q===!0,U=Bun.spawn(["bun","run","--cwd=apps/mesh","dev:servers"],{cwd:K,env:{...process.env,PORT:String(W.port),VITE_PORT:String(Y),DATABASE_URL:W.databaseUrl,NATS_URL:W.natsUrls.join(","),NODE_ENV:W.nodeEnv,DECOCMS_LOCAL_MODE:String(W.localMode),DECOCMS_HOME:W.dataDir,DATA_DIR:W.dataDir,DECO_CLI:"1",...W.baseUrl?{BASE_URL:W.baseUrl}:{}},stdio:["inherit",H?"inherit":"pipe",H?"inherit":"pipe"]});if(!H)y16(U.stdout),y16(U.stderr);let B=G||`http://localhost:${W.port}`;gX1(B),Za({name:"Vite",status:"ready",port:Number(Y)});let N=async(z)=>{if(U.kill(z),$.length>0){let{stopServices:O}=await Promise.resolve().then(() => (i$1(),c$1));await O(W.dataDir)}};return process.on("SIGINT",()=>N("SIGINT")),process.on("SIGTERM",()=>N("SIGTERM")),{port:Number(W.port),process:U}}var pN0=w(()=>{gN0();Kz();cN0()});import{Box as nN0,Text as tN0}from"ink";import{jsx as h16,jsxs as XT1}from"react/jsx-runtime";function x16(X){if(!X)return"not set";try{let Y=new URL(X);if(Y.password)Y.password="***";if(Y.username&&Y.username.length>3)Y.username=Y.username.slice(0,3)+"***";return Y.pathname="/",Y.search="",Y.hash="",Y.toString()}catch{if(X.length<=10)return X;return X.slice(0,6)+"***"+X.slice(-4)}}function ha5(X,Y){if(ya5.has(X))return Y?{text:"\u25CF\u25CF\u25CF\u25CF\u25CF\u25CF",dimColor:!0}:{text:"not set",dimColor:!0};if(xa5.has(X)){if(Array.isArray(Y)){if(Y.length===0)return{text:"not set",dimColor:!0};return{text:Y.map((W)=>x16(W)).join(", "),color:"cyan"}}let Q=x16(Y);return Q==="not set"?{text:Q,dimColor:!0}:{text:Q,color:"cyan"}}if(Y===void 0||Y===null||Y==="")return{text:"not set",dimColor:!0};let G=String(Y);if(G==="true")return{text:G,color:"green"};if(G==="false")return{text:G,color:"yellow"};try{return new URL(G),{text:G,color:"cyan"}}catch{return{text:G}}}function ga5(X){return[{title:"Core",entries:[{key:"NODE_ENV",value:X.nodeEnv},{key:"PORT",value:X.port},{key:"BASE_URL",value:X.baseUrl??`http://localhost:${X.port}`},{key:"DATA_DIR",value:X.dataDir}]},{title:"Database",entries:[{key:"DATABASE_URL",value:X.databaseUrl},{key:"DATABASE_PG_SSL",value:X.databasePgSsl}]},{title:"Auth & Secrets",entries:[{key:"BETTER_AUTH_SECRET",value:X.betterAuthSecret},{key:"ENCRYPTION_KEY",value:X.encryptionKey},{key:"MESH_JWT_SECRET",value:X.meshJwtSecret},{key:"STUDIO_PROVISION_SECRET_KEY",value:X.studioProvisionSecretKey},{key:"DISABLE_RATE_LIMIT",value:X.disableRateLimit}]},{title:"Auth Providers",entries:[{key:"AUTH_EMAIL_PASSWORD_ENABLED",value:process.env.AUTH_EMAIL_PASSWORD_ENABLED??"true"},{key:"AUTH_GOOGLE_CLIENT_ID",value:!!process.env.AUTH_GOOGLE_CLIENT_ID},{key:"AUTH_GITHUB_CLIENT_ID",value:!!process.env.AUTH_GITHUB_CLIENT_ID},{key:"AUTH_RESEND_API_KEY",value:!!process.env.AUTH_RESEND_API_KEY},{key:"AUTH_SENDGRID_API_KEY",value:!!process.env.AUTH_SENDGRID_API_KEY},{key:"AUTH_SSO_MS_CLIENT_ID",value:!!process.env.AUTH_SSO_MS_CLIENT_ID},{key:"AUTH_SSO_GOOGLE_CLIENT_ID",value:!!process.env.AUTH_SSO_GOOGLE_CLIENT_ID},{key:"AUTH_MAGIC_LINK_ENABLED",value:process.env.AUTH_MAGIC_LINK_ENABLED==="true"},{key:"AUTH_EMAIL_OTP_ENABLED",value:process.env.AUTH_EMAIL_OTP_ENABLED==="true"}]},{title:"Observability",entries:[{key:"CLICKHOUSE_URL",value:X.clickhouseUrl},{key:"OTEL_SERVICE_NAME",value:X.otelServiceName}]},{title:"Event Bus & Networking",entries:[{key:"NATS_URL",value:X.natsUrls}]},{title:"Config Files",entries:[{key:"CONFIG_PATH",value:X.configPath}]},{title:"AI Gateway",entries:[{key:"DECO_AI_GATEWAY_ENABLED",value:X.aiGatewayEnabled},{key:"DECO_AI_GATEWAY_URL",value:X.aiGatewayUrl}]}]}function g16({env:X}){let Y=ga5(X);return h16(nN0,{flexDirection:"column",children:Y.map((G)=>XT1(nN0,{flexDirection:"column",marginTop:1,children:[XT1(tN0,{dimColor:!0,children:[" ","\u2500\u2500 ",G.title," ","\u2500".repeat(Math.max(0,38-G.title.length))]}),G.entries.map(({key:Q,value:J})=>{let W=ha5(Q,J);return XT1(nN0,{children:[XT1(tN0,{dimColor:!0,children:[" ",Q.padEnd(36)]}),h16(tN0,{color:W.color,dimColor:W.dimColor,children:W.text})]},Q)})]},G.title))})}var ya5,xa5;var u16=w(()=>{ya5=new Set(["BETTER_AUTH_SECRET","ENCRYPTION_KEY","MESH_JWT_SECRET","STUDIO_PROVISION_SECRET_KEY"]),xa5=new Set(["DATABASE_URL","CLICKHOUSE_URL","NATS_URL"])});var aN0;var l16=w(()=>{aN0={name:"decocms",version:"2.312.6",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/mesh"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:'bun run migrate && concurrently "bun run dev:client" "bun run dev:server"',"dev:servers":'concurrently "bun run dev:client" "bun run dev:server"',"dev:client":"bun --bun vite dev","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts","build:client":"bun --bun vite build","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","db:migrate":"bun run ./dist/server/migrate.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts",test:"bun test","test:e2e":"playwright test","test:e2e:ui":"playwright test --ui","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run build:client && bun run build:server"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1","@freestyle-sh/with-bun":"^0.2.12","@freestyle-sh/with-deno":"^0.0.4","@freestyle-sh/with-nodejs":"^0.2.9","freestyle-sandboxes":"^0.1.46"},dependencies:{"@ai-sdk/anthropic":"^3.0.58","@ai-sdk/google":"^3.0.60","@ai-sdk/openai":"^3.0.50","@anthropic-ai/sdk":"^0.79.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@deco-cx/warp-node":"^0.3.20","@dnd-kit/core":"^6.3.1","@dnd-kit/sortable":"^10.0.0","@dnd-kit/utilities":"^3.2.2","@inkjs/ui":"^2.0.0","@modelcontextprotocol/ext-apps":"^1.2.2","@openrouter/ai-sdk-provider":"^2.2.5","@opentelemetry/core":"^2.6.0","@tanstack/react-virtual":"^3.13.21","@xterm/addon-fit":"^0.11.0","@xterm/xterm":"^6.0.0","ai-sdk-provider-claude-code":"^3.4.4","ai-sdk-provider-codex-cli":"^1.1.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12",nats:"^2.29.3","node-pty":"^1.0.0","posthog-js":"^1.371.1","posthog-node":"^5.0.0",react:"^19.2.0","react-dom":"^19.2.0"},devDependencies:{"@ai-sdk/provider":"^3.0.8","@ai-sdk/react":"^3.0.118","@anthropic-ai/claude-agent-sdk":"^0.2.80","@better-auth/sso":"1.4.1","@daveyplate/better-auth-ui":"^3.2.7","@deco/ui":"workspace:*","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/mesh-sdk":"workspace:*","@decocms/runtime":"workspace:*","@decocms/vite-plugin":"workspace:*","@electric-sql/pglite":"^0.3.15","@floating-ui/react":"^0.27.16","@hookform/resolvers":"^5.2.2","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.27.1","@monaco-editor/react":"^4.7.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@playwright/test":"^1.58.2","@radix-ui/react-avatar":"^1.1.10","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-dropdown-menu":"^2.1.16","@radix-ui/react-label":"^2.1.7","@radix-ui/react-select":"^2.2.6","@radix-ui/react-separator":"^1.1.7","@radix-ui/react-slot":"^1.2.3","@radix-ui/react-tabs":"^1.1.13","@rjsf/core":"^6.1.2","@rjsf/shadcn":"^6.1.2","@rjsf/utils":"^6.1.2","@rjsf/validator-ajv8":"^6.1.2","@tailwindcss/vite":"^4.1.17","@tanstack/react-query":"5.90.11","@tanstack/react-router":"^1.139.7","@tiptap/core":"3.20.2","@tiptap/extension-mention":"3.20.2","@tiptap/extension-placeholder":"3.20.2","@tiptap/pm":"3.20.2","@tiptap/react":"3.20.2","@tiptap/starter-kit":"3.20.2","@tiptap/suggestion":"3.20.2","@types/bun":"^1.3.1","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@untitledui/icons":"^0.0.19","@vercel/nft":"^1.1.1","@vitejs/plugin-react":"^5.1.0",ai:"^6.0.116","babel-plugin-react-compiler":"^1.0.0","better-auth":"1.4.5","class-variance-authority":"^0.7.1",clsx:"^2.1.1",concurrently:"^9.2.1",croner:"^9.1.0","date-fns":"^4.1.0",degit:"^2.8.4",hono:"^4.10.7","input-otp":"^1.4.2",jose:"^6.0.11","kysely-pglite":"^0.6.1","lucide-react":"^0.468.0",marked:"^15.0.6","@decocms/sandbox":"workspace:*","mesh-plugin-workflows":"workspace:*",nanoid:"^5.1.6",pg:"^8.16.3",prettier:"^3.4.2","react-hook-form":"^7.66.0","react-markdown":"^10.1.0","react-resizable-panels":"^2.1.7","react-syntax-highlighter":"^15.6.1",recharts:"^3.6.0","rehype-raw":"^7.0.0","remark-gfm":"^4.0.0","sass-embedded":"^1.97.2",sonner:"^2.0.7","tailwind-merge":"^3.3.1",tailwindcss:"^4.1.17",typescript:"^5.9.3",vite:"^7.2.1","vite-tsconfig-paths":"^5.1.4",zod:"^4.0.0",zustand:"^5.0.9"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","mesh","tools"],license:"MIT",publishConfig:{access:"public"}}});import{Box as IU,Text as RX}from"ink";import{Spinner as la5}from"@inkjs/ui";import{useSyncExternalStore as m16}from"react";import{jsx as TY,jsxs as oQ}from"react/jsx-runtime";function pa5(X,Y){if(!X||!ia5.has(X))return X;let G=rN0[Y]??rN0[rN0.length-1];return X==="#875f00"?G[0]:G[1]}function d16({status:X}){if(X==="pending")return TY(la5,{label:""});return TY(RX,{color:"green",children:"\u2713"})}function c16({services:X,migrationsStatus:Y,home:G,serverUrl:Q,vibe:J}){let W=m16(em0,sm0),Z=m16(Zd0,Jd0);return oQ(IU,{flexDirection:"column",paddingBottom:1,children:[J?oQ(IU,{flexDirection:"column",children:[W.map(($,K)=>{let H=Z[K],U=$.reduce((N,z)=>N+z.text.length,0),B=Math.max(0,ca5-U);return oQ(IU,{flexDirection:"row",children:[$.map((N,z)=>{let O=pa5(N.color,K);return O?TY(RX,{color:O,children:N.text},z):TY(RX,{children:N.text},z)}),TY(RX,{children:" ".repeat(B+2)}),H?.map((N,z)=>N.color?TY(RX,{color:N.color,children:N.char},z):TY(RX,{children:N.char},z))]},K)}),oQ(RX,{dimColor:!0,children:[" v",aN0.version]})]}):oQ(IU,{flexDirection:"column",marginTop:1,children:[ma5.map(($,K)=>TY(RX,{color:da5[K],children:$},K)),oQ(RX,{dimColor:!0,children:[" v",aN0.version]})]}),TY(IU,{marginBottom:1,children:TY(RX,{dimColor:!0,children:"\u2500".repeat(80)})}),TY(IU,{children:oQ(RX,{dimColor:!0,children:["Home: ",G]})}),oQ(IU,{gap:2,children:[X.map(($)=>oQ(IU,{gap:1,children:[oQ(RX,{children:[$.name," :",$.port||"...."]}),TY(d16,{status:$.status})]},$.name)),oQ(IU,{gap:1,children:[TY(RX,{children:"Migrations"}),TY(d16,{status:Y})]})]}),TY(IU,{children:Q?oQ(RX,{children:["Open in browser: ",TY(RX,{color:"cyan",children:Q})]}):TY(RX,{dimColor:!0,children:"Starting..."})}),oQ(IU,{gap:2,children:[oQ(RX,{dimColor:!0,children:[TY(RX,{bold:!0,dimColor:!0,children:"K"})," ","toggle config"]}),oQ(RX,{dimColor:!0,children:[TY(RX,{bold:!0,dimColor:!0,children:"L"})," ","toggle log flow"]}),oQ(RX,{dimColor:!0,children:[TY(RX,{bold:!0,dimColor:!0,children:"V"})," ","toggle vibe ",J?"\u266A Nihilore \xB7 CC BY 4.0":""]}),J&&oQ(RX,{dimColor:!0,children:[TY(RX,{bold:!0,dimColor:!0,children:"N"})," ","skip song"]})]})]})}var ma5,da5,rN0,ca5=30,ia5;var i16=w(()=>{l16();kt1();yt1();ma5=[" \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588 ","\u2591\u2591\u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588 \u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588\u2588\u2588 "," \u2591\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2588 \u2591 \u2588\u2588\u2588 \u2591\u2591\u2591 \u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588\u2591\u2591\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591 \u2588\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588 "," \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2591\u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2591 ","\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591 "],da5=["#00ff64","#00ee5e","#00dc56","#00c84e","#00b444","#00a03c","#008832","#006e28"],rN0=[["#00ff64","#00cc50"],["#00f060","#00c04c"],["#00e05c","#00b448"],["#00d058","#00a844"],["#00c054","#009c40"],["#00b050","#00903c"],["#00a04c","#008438"],["#009048","#007834"],["#008044","#006c30"],["#007040","#00602c"],["#00603c","#005428"]],ia5=new Set(["#875f00","#5f3800"])});import{useSyncExternalStore as na5}from"react";function ta5(){let X=process.stdout.rows||24,Y=process.stdout.columns||80;if(X!==YT1.rows||Y!==YT1.columns)YT1={rows:X,columns:Y};return YT1}function aa5(X){return process.stdout.on("resize",X),()=>{process.stdout.off("resize",X)}}function p16(){return na5(aa5,ta5)}var YT1;var n16=w(()=>{YT1={rows:process.stdout.rows||24,columns:process.stdout.columns||80}});import{Box as ra5,Text as lX1}from"ink";import{useSyncExternalStore as oa5}from"react";import{jsx as oN0,jsxs as sN0}from"react/jsx-runtime";function sa5(X){if(X>=500)return"red";if(X>=400)return"yellow";if(X>=300)return"cyan";return"green"}function t16({logs:X,headerHeight:Y}){let{rows:G}=p16(),{logFlow:Q}=oa5(xX1,yX1),J=Math.max(1,G-Y-1),W=Q?X:X.slice(-J);return oN0(ra5,{flexDirection:"column",children:W.map((Z,$)=>{if(Z.rawLine)return oN0(lX1,{dimColor:!0,children:Z.rawLine},$);let K=Z.duration<1000?`${Z.duration}ms`:`${(Z.duration/1000).toFixed(1)}s`;return sN0(lX1,{children:[sN0(lX1,{dimColor:!0,children:[Z.method.padEnd(6)," ",Z.path.padEnd(30)," "]}),oN0(lX1,{color:sa5(Z.status),children:Z.status}),sN0(lX1,{dimColor:!0,children:[" ",K.padStart(8)]})]},$)})})}var a16=w(()=>{Kz();n16()});var eN0={};T0(eN0,{App:()=>Zr5});import{Box as ea5,Text as Xr5,useInput as Yr5}from"ink";import{useSyncExternalStore as Gr5}from"react";import{jsx as GT1,jsxs as Wr5}from"react/jsx-runtime";function Zr5({home:X}){let Y=Gr5(xX1,yX1);return Yr5((G)=>{if(G==="k"||G==="K")lN0();if(G==="l"||G==="L")mN0();if((G==="v"||G==="V")&&Y.dataDir)ut1(Y.dataDir),dN0();if((G==="n"||G==="N")&&Y.vibe)gt1()}),Wr5(ea5,{flexDirection:"column",children:[GT1(c16,{services:Y.services,migrationsStatus:Y.migrationsStatus,home:X,serverUrl:Y.serverUrl,vibe:Y.vibe}),Y.viewMode==="config"?Y.env?GT1(g16,{env:Y.env}):GT1(Xr5,{dimColor:!0,children:"Loading configuration..."}):GT1(t16,{logs:Y.logs,headerHeight:Y.vibe?Jr5:Qr5})]})}var Qr5=15,Jr5=19;var Xz0=w(()=>{u16();i16();a16();Kz();hd()});function r16(X,Y={}){return{PORT:String(X.port),NODE_ENV:X.nodeEnv,BASE_URL:X.baseUrl,DATA_DIR:X.dataDir,DECOCMS_HOME:X.dataDir,DATABASE_URL:X.databaseUrl,DATABASE_PG_SSL:String(X.databasePgSsl),DATABASE_POOL_MAX:String(X.databasePoolMax),NATS_URL:X.natsUrls.join(","),BETTER_AUTH_SECRET:X.betterAuthSecret,ENCRYPTION_KEY:X.encryptionKey,MESH_JWT_SECRET:X.meshJwtSecret,DECOCMS_LOCAL_MODE:String(X.localMode),DISABLE_RATE_LIMIT:String(X.disableRateLimit),STUDIO_PROVISION_SECRET_KEY:X.studioProvisionSecretKey,CONFIG_PATH:X.configPath,...Object.fromEntries(Object.entries(process.env).filter(([G])=>G.startsWith("AUTH_"))),DECO_AI_GATEWAY_ENABLED:String(X.aiGatewayEnabled),DECO_AI_GATEWAY_URL:X.aiGatewayUrl,ENABLE_DECO_IMPORT:String(X.enableDecoImport),S3_ENDPOINT:X.s3Endpoint,S3_BUCKET:X.s3Bucket,S3_REGION:X.s3Region,S3_ACCESS_KEY_ID:X.s3AccessKeyId,S3_SECRET_ACCESS_KEY:X.s3SecretAccessKey,S3_FORCE_PATH_STYLE:String(X.s3ForcePathStyle),OTEL_SERVICE_NAME:X.otelServiceName,CLICKHOUSE_URL:X.clickhouseUrl,OTEL_EXPORTER_OTLP_ENDPOINT:process.env.OTEL_EXPORTER_OTLP_ENDPOINT,OTEL_EXPORTER_OTLP_PROTOCOL:process.env.OTEL_EXPORTER_OTLP_PROTOCOL,OTEL_RESOURCE_ATTRIBUTES:process.env.OTEL_RESOURCE_ATTRIBUTES,DECO_SUPABASE_URL:X.decoSupabaseUrl,DECO_SUPABASE_SERVICE_KEY:X.decoSupabaseServiceKey,FIRECRAWL_API_KEY:X.firecrawlApiKey,STUDIO_SANDBOX_RUNNER:process.env.STUDIO_SANDBOX_RUNNER,STUDIO_SANDBOX_TEMPLATE_NAME:process.env.STUDIO_SANDBOX_TEMPLATE_NAME,STUDIO_ENV:process.env.STUDIO_ENV,STUDIO_SANDBOX_PREVIEW_URL_PATTERN:process.env.STUDIO_SANDBOX_PREVIEW_URL_PATTERN,STUDIO_SANDBOX_PREVIEW_GATEWAY_NAME:process.env.STUDIO_SANDBOX_PREVIEW_GATEWAY_NAME,STUDIO_SANDBOX_PREVIEW_GATEWAY_NAMESPACE:process.env.STUDIO_SANDBOX_PREVIEW_GATEWAY_NAMESPACE,STUDIO_SANDBOX_SENTINEL_TOKEN:process.env.STUDIO_SANDBOX_SENTINEL_TOKEN,KUBERNETES_SERVICE_HOST:process.env.KUBERNETES_SERVICE_HOST,KUBERNETES_SERVICE_PORT:process.env.KUBERNETES_SERVICE_PORT,FREESTYLE_API_KEY:process.env.FREESTYLE_API_KEY,BROWSERLESS_TOKEN:process.env.BROWSERLESS_TOKEN,NODE_EXTRA_CA_CERTS:process.env.NODE_EXTRA_CA_CERTS,DECO_CLI:"1",DECO_NO_TUI:"true",...Y}}var hj=k((Br5)=>{Br5.HttpAuthLocation=void 0;(function(X){X.HEADER="header",X.QUERY="query"})(Br5.HttpAuthLocation||(Br5.HttpAuthLocation={}));Br5.HttpApiKeyAuthLocation=void 0;(function(X){X.HEADER="header",X.QUERY="query"})(Br5.HttpApiKeyAuthLocation||(Br5.HttpApiKeyAuthLocation={}));Br5.EndpointURLScheme=void 0;(function(X){X.HTTP="http",X.HTTPS="https"})(Br5.EndpointURLScheme||(Br5.EndpointURLScheme={}));Br5.AlgorithmId=void 0;(function(X){X.MD5="md5",X.CRC32="crc32",X.CRC32C="crc32c",X.SHA1="sha1",X.SHA256="sha256"})(Br5.AlgorithmId||(Br5.AlgorithmId={}));var $r5=(X)=>{let Y=[];if(X.sha256!==void 0)Y.push({algorithmId:()=>Br5.AlgorithmId.SHA256,checksumConstructor:()=>X.sha256});if(X.md5!=null)Y.push({algorithmId:()=>Br5.AlgorithmId.MD5,checksumConstructor:()=>X.md5});return{addChecksumAlgorithm(G){Y.push(G)},checksumAlgorithms(){return Y}}},Kr5=(X)=>{let Y={};return X.checksumAlgorithms().forEach((G)=>{Y[G.algorithmId()]=G.checksumConstructor()}),Y},Hr5=(X)=>{return $r5(X)},Fr5=(X)=>{return Kr5(X)};Br5.FieldPosition=void 0;(function(X){X[X.HEADER=0]="HEADER",X[X.TRAILER=1]="TRAILER"})(Br5.FieldPosition||(Br5.FieldPosition={}));var Ur5="__smithy_context";Br5.IniSectionType=void 0;(function(X){X.PROFILE="profile",X.SSO_SESSION="sso-session",X.SERVICES="services"})(Br5.IniSectionType||(Br5.IniSectionType={}));Br5.RequestHandlerProtocol=void 0;(function(X){X.HTTP_0_9="http/0.9",X.HTTP_1_0="http/1.0",X.TDS_8_0="tds/8.0"})(Br5.RequestHandlerProtocol||(Br5.RequestHandlerProtocol={}));Br5.SMITHY_CONTEXT_KEY=Ur5;Br5.getDefaultClientConfiguration=Hr5;Br5.resolveDefaultRuntimeConfig=Fr5});var u7=k((qr5)=>{var Dr5=hj(),wr5=(X)=>{return{setHttpHandler(Y){X.httpHandler=Y},httpHandler(){return X.httpHandler},updateHttpClientConfig(Y,G){X.httpHandler?.updateHttpClientConfig(Y,G)},httpHandlerConfigs(){return X.httpHandler.httpHandlerConfigs()}}},Lr5=(X)=>{return{httpHandler:X.httpHandler()}};class o16{name;kind;values;constructor({name:X,kind:Y=Dr5.FieldPosition.HEADER,values:G=[]}){this.name=X,this.kind=Y,this.values=G}add(X){this.values.push(X)}set(X){this.values=X}remove(X){this.values=this.values.filter((Y)=>Y!==X)}toString(){return this.values.map((X)=>X.includes(",")||X.includes(" ")?`"${X}"`:X).join(", ")}get(){return this.values}}class s16{entries={};encoding;constructor({fields:X=[],encoding:Y="utf-8"}){X.forEach(this.setField.bind(this)),this.encoding=Y}setField(X){this.entries[X.name.toLowerCase()]=X}getField(X){return this.entries[X.toLowerCase()]}removeField(X){delete this.entries[X.toLowerCase()]}getByType(X){return Object.values(this.entries).filter((Y)=>Y.kind===X)}}class QT1{method;protocol;hostname;port;path;query;headers;username;password;fragment;body;constructor(X){this.method=X.method||"GET",this.hostname=X.hostname||"localhost",this.port=X.port,this.query=X.query||{},this.headers=X.headers||{},this.body=X.body,this.protocol=X.protocol?X.protocol.slice(-1)!==":"?`${X.protocol}:`:X.protocol:"https:",this.path=X.path?X.path.charAt(0)!=="/"?`/${X.path}`:X.path:"/",this.username=X.username,this.password=X.password,this.fragment=X.fragment}static clone(X){let Y=new QT1({...X,headers:{...X.headers}});if(Y.query)Y.query=Er5(Y.query);return Y}static isInstance(X){if(!X)return!1;let Y=X;return"method"in Y&&"protocol"in Y&&"hostname"in Y&&"path"in Y&&typeof Y.query==="object"&&typeof Y.headers==="object"}clone(){return QT1.clone(this)}}function Er5(X){return Object.keys(X).reduce((Y,G)=>{let Q=X[G];return{...Y,[G]:Array.isArray(Q)?[...Q]:Q}},{})}class e16{statusCode;reason;headers;body;constructor(X){this.statusCode=X.statusCode,this.reason=X.reason,this.headers=X.headers||{},this.body=X.body}static isInstance(X){if(!X)return!1;let Y=X;return typeof Y.statusCode==="number"&&typeof Y.headers==="object"}}function Pr5(X){return/^[a-z0-9][a-z0-9\.\-]*[a-z0-9]$/.test(X)}qr5.Field=o16;qr5.Fields=s16;qr5.HttpRequest=QT1;qr5.HttpResponse=e16;qr5.getHttpHandlerExtensionConfiguration=wr5;qr5.isValidHostname=Pr5;qr5.resolveHttpHandlerRuntimeConfig=Lr5});function Sr5(X){return(Y)=>async(G)=>{let{request:Q}=G;if(X.expectContinueHeader!==!1&&X06.HttpRequest.isInstance(Q)&&Q.body&&X.runtime==="node"&&X.requestHandler?.constructor?.name!=="FetchHttpHandler"){let J=!0;if(typeof X.expectContinueHeader==="number")try{J=(Number(Q.headers?.["content-length"])??X.bodyLengthChecker?.(Q.body)??1/0)>=X.expectContinueHeader}catch(W){}else J=!!X.expectContinueHeader;if(J)Q.headers.Expect="100-continue"}return Y({...G,request:Q})}}var X06,kr5,Y06=(X)=>({applyToStack:(Y)=>{Y.add(Sr5(X),kr5)}});var G06=w(()=>{X06=X1(u7(),1);kr5={step:"build",tags:["SET_EXPECT_HEADER","EXPECT_HEADER"],name:"addExpectContinueMiddleware",override:!0}});var LH,JT1,gj,ZT1,E9,Q06,dX1;var EH=w(()=>{LH={WHEN_SUPPORTED:"WHEN_SUPPORTED",WHEN_REQUIRED:"WHEN_REQUIRED"},JT1=LH.WHEN_SUPPORTED,gj={WHEN_SUPPORTED:"WHEN_SUPPORTED",WHEN_REQUIRED:"WHEN_REQUIRED"},ZT1=LH.WHEN_SUPPORTED;(function(X){X.MD5="MD5",X.CRC32="CRC32",X.CRC32C="CRC32C",X.CRC64NVME="CRC64NVME",X.SHA1="SHA1",X.SHA256="SHA256"})(E9||(E9={}));(function(X){X.HEADER="header",X.TRAILER="trailer"})(Q06||(Q06={}));dX1=E9.CRC32});var Cq,Wa=(X,Y,G,Q)=>{if(!(Y in X))return;let J=X[Y].toUpperCase();if(!Object.values(G).includes(J))throw TypeError(`Cannot load ${Q} '${Y}'. Expected one of ${Object.values(G)}, got '${X[Y]}'.`);return J};var $z0=w(()=>{(function(X){X.ENV="env",X.CONFIG="shared config entry"})(Cq||(Cq={}))});var Cr5="AWS_REQUEST_CHECKSUM_CALCULATION",vr5="request_checksum_calculation",J06;var Z06=w(()=>{EH();$z0();J06={environmentVariableSelector:(X)=>Wa(X,Cr5,LH,Cq.ENV),configFileSelector:(X)=>Wa(X,vr5,LH,Cq.CONFIG),default:JT1}});var _r5="AWS_RESPONSE_CHECKSUM_VALIDATION",fr5="response_checksum_validation",W06;var $06=w(()=>{EH();$z0();W06={environmentVariableSelector:(X)=>Wa(X,_r5,gj,Cq.ENV),configFileSelector:(X)=>Wa(X,fr5,gj,Cq.CONFIG),default:ZT1}});var Hz0=k((cr5)=>{var br5=["AuthFailure","InvalidSignatureException","RequestExpired","RequestInTheFuture","RequestTimeTooSkewed","SignatureDoesNotMatch"],yr5=["BandwidthLimitExceeded","EC2ThrottledException","LimitExceededException","PriorRequestNotComplete","ProvisionedThroughputExceededException","RequestLimitExceeded","RequestThrottled","RequestThrottledException","SlowDown","ThrottledException","Throttling","ThrottlingException","TooManyRequestsException","TransactionInProgressException"],xr5=["TimeoutError","RequestTimeout","RequestTimeoutException"],hr5=[500,502,503,504],gr5=["ECONNRESET","ECONNREFUSED","EPIPE","ETIMEDOUT"],ur5=["EHOSTUNREACH","ENETUNREACH","ENOTFOUND"],K06=(X)=>X?.$retryable!==void 0,lr5=(X)=>br5.includes(X.name),H06=(X)=>X.$metadata?.clockSkewCorrected,F06=(X)=>{let Y=new Set(["Failed to fetch","NetworkError when attempting to fetch resource","The Internet connection appears to be offline","Load failed","Network request failed"]);if(!(X&&X instanceof TypeError))return!1;return Y.has(X.message)},mr5=(X)=>X.$metadata?.httpStatusCode===429||yr5.includes(X.name)||X.$retryable?.throttling==!0,Kz0=(X,Y=0)=>K06(X)||H06(X)||X.name==="InvalidSignatureException"&&X.message?.includes("Signature expired")||xr5.includes(X.name)||gr5.includes(X?.code||"")||ur5.includes(X?.code||"")||hr5.includes(X.$metadata?.httpStatusCode||0)||F06(X)||U06(X)||X.cause!==void 0&&Y<=10&&Kz0(X.cause,Y+1),dr5=(X)=>{if(X.$metadata?.httpStatusCode!==void 0){let Y=X.$metadata.httpStatusCode;if(500<=Y&&Y<=599&&!Kz0(X))return!0;return!1}return!1};function U06(X){return X.code==="ERR_HTTP2_STREAM_ERROR"&&X.message.includes("NGHTTP2_REFUSED_STREAM")}cr5.isBrowserNetworkError=F06;cr5.isClockSkewCorrectedError=H06;cr5.isClockSkewError=lr5;cr5.isNodeJsHttp2TransientError=U06;cr5.isRetryableByTrait=K06;cr5.isServerError=dr5;cr5.isThrottlingError=mr5;cr5.isTransientError=Kz0});var ww=k(($o5)=>{var er5=Hz0();$o5.RETRY_MODES=void 0;(function(X){X.STANDARD="standard",X.ADAPTIVE="adaptive"})($o5.RETRY_MODES||($o5.RETRY_MODES={}));var $T1=3,Xo5=$o5.RETRY_MODES.STANDARD;class KT1{static setTimeoutFn=setTimeout;beta;minCapacity;minFillRate;scaleConstant;smooth;enabled=!1;availableTokens=0;lastMaxRate=0;measuredTxRate=0;requestCount=0;fillRate;lastThrottleTime;lastTimestamp=0;lastTxRateBucket;maxCapacity;timeWindow=0;constructor(X){this.beta=X?.beta??0.7,this.minCapacity=X?.minCapacity??1,this.minFillRate=X?.minFillRate??0.5,this.scaleConstant=X?.scaleConstant??0.4,this.smooth=X?.smooth??0.8,this.lastThrottleTime=this.getCurrentTimeInSeconds(),this.lastTxRateBucket=Math.floor(this.getCurrentTimeInSeconds()),this.fillRate=this.minFillRate,this.maxCapacity=this.minCapacity}async getSendToken(){return this.acquireTokenBucket(1)}updateClientSendingRate(X){let Y;this.updateMeasuredRate();let G=X;if(G?.errorType==="THROTTLING"||er5.isThrottlingError(G?.error??X)){let W=!this.enabled?this.measuredTxRate:Math.min(this.measuredTxRate,this.fillRate);this.lastMaxRate=W,this.calculateTimeWindow(),this.lastThrottleTime=this.getCurrentTimeInSeconds(),Y=this.cubicThrottle(W),this.enableTokenBucket()}else this.calculateTimeWindow(),Y=this.cubicSuccess(this.getCurrentTimeInSeconds());let J=Math.min(Y,2*this.measuredTxRate);this.updateTokenBucketRate(J)}getCurrentTimeInSeconds(){return Date.now()/1000}async acquireTokenBucket(X){if(!this.enabled)return;if(this.refillTokenBucket(),X>this.availableTokens){let Y=(X-this.availableTokens)/this.fillRate*1000;await new Promise((G)=>KT1.setTimeoutFn(G,Y))}this.availableTokens=this.availableTokens-X}refillTokenBucket(){let X=this.getCurrentTimeInSeconds();if(!this.lastTimestamp){this.lastTimestamp=X;return}let Y=(X-this.lastTimestamp)*this.fillRate;this.availableTokens=Math.min(this.maxCapacity,this.availableTokens+Y),this.lastTimestamp=X}calculateTimeWindow(){this.timeWindow=this.getPrecise(Math.pow(this.lastMaxRate*(1-this.beta)/this.scaleConstant,0.3333333333333333))}cubicThrottle(X){return this.getPrecise(X*this.beta)}cubicSuccess(X){return this.getPrecise(this.scaleConstant*Math.pow(X-this.lastThrottleTime-this.timeWindow,3)+this.lastMaxRate)}enableTokenBucket(){this.enabled=!0}updateTokenBucketRate(X){this.refillTokenBucket(),this.fillRate=Math.max(X,this.minFillRate),this.maxCapacity=Math.max(X,this.minCapacity),this.availableTokens=Math.min(this.availableTokens,this.maxCapacity)}updateMeasuredRate(){let X=this.getCurrentTimeInSeconds(),Y=Math.floor(X*2)/2;if(this.requestCount++,Y>this.lastTxRateBucket){let G=this.requestCount/(Y-this.lastTxRateBucket);this.measuredTxRate=this.getPrecise(G*this.smooth+this.measuredTxRate*(1-this.smooth)),this.requestCount=0,this.lastTxRateBucket=Y}}getPrecise(X){return parseFloat(X.toFixed(8))}}var Yo5=100,Bz0=20000,Go5=500,Fz0=500,Qo5=5,Jo5=10,B06=1,Zo5="amz-sdk-invocation-id",Wo5="amz-sdk-request";class sQ{static v2026=typeof process<"u"&&process.env?.SMITHY_NEW_RETRIES_2026==="true";static delay(){return sQ.v2026?50:100}static throttlingDelay(){return sQ.v2026?1000:500}static cost(){return sQ.v2026?14:5}static throttlingCost(){return sQ.v2026?5:10}static modifiedCostType(){return sQ.v2026?"THROTTLING":"TRANSIENT"}}class N06{x=sQ.delay();computeNextBackoffDelay(X){let Y=Math.random(),G=2,Q=Y*Math.min(this.x*2**X,Bz0);return Math.floor(Q)}setDelayBase(X){this.x=X}}class Uz0{delay;count;cost;longPoll;constructor(X,Y,G,Q){this.delay=X,this.count=Y,this.cost=G,this.longPoll=Q}getRetryCount(){return this.count}getRetryDelay(){return Math.min(Bz0,this.delay)}getRetryCost(){return this.cost}isLongPoll(){return this.longPoll}}var WT1={incompatible:1,attempts:2,capacity:3};class cX1{mode=$o5.RETRY_MODES.STANDARD;capacity=Fz0;retryBackoffStrategy;maxAttemptsProvider;baseDelay;constructor(X){if(typeof X==="number")this.maxAttemptsProvider=async()=>X;else if(typeof X==="function")this.maxAttemptsProvider=X;else if(X&&typeof X==="object")this.maxAttemptsProvider=async()=>X.maxAttempts,this.baseDelay=X.baseDelay,this.retryBackoffStrategy=X.backoff;this.maxAttemptsProvider??=async()=>$T1,this.baseDelay??=sQ.delay(),this.retryBackoffStrategy??=new N06}async acquireInitialRetryToken(X){return new Uz0(sQ.delay(),0,void 0,sQ.v2026&&X.includes(":longpoll"))}async refreshRetryTokenForRetry(X,Y){let G=await this.getMaxAttempts(),Q=this.retryCode(X,Y,G),J=Q===0,W=X.isLongPoll?.();if(J||W){let Z=Y.errorType;this.retryBackoffStrategy.setDelayBase(Z==="THROTTLING"?sQ.throttlingDelay():this.baseDelay);let $=this.retryBackoffStrategy.computeNextBackoffDelay(X.getRetryCount()),K=$;if(Y.retryAfterHint instanceof Date)K=Math.max($,Math.min(Y.retryAfterHint.getTime()-Date.now(),$+5000));if(!J)throw Object.assign(Error("No retry token available"),{$backoff:sQ.v2026&&Q===WT1.capacity&&W?K:0});else{let H=this.getCapacityCost(Z);return this.capacity-=H,new Uz0(K,X.getRetryCount()+1,H,X.isLongPoll?.()??!1)}}throw Error("No retry token available")}recordSuccess(X){this.capacity=Math.min(Fz0,this.capacity+(X.getRetryCost()??B06))}getCapacity(){return this.capacity}async maxAttempts(){return this.maxAttemptsProvider()}async getMaxAttempts(){try{return await this.maxAttemptsProvider()}catch(X){return console.warn(`Max attempts provider could not resolve. Using default of ${$T1}`),$T1}}retryCode(X,Y,G){let Q=X.getRetryCount()+1,J=this.isRetryableError(Y.errorType)?0:WT1.incompatible,W=Q<G?0:WT1.attempts,Z=this.capacity>=this.getCapacityCost(Y.errorType)?0:WT1.capacity;return J||W||Z}getCapacityCost(X){return X===sQ.modifiedCostType()?sQ.throttlingCost():sQ.cost()}isRetryableError(X){return X==="THROTTLING"||X==="TRANSIENT"}}class z06{mode=$o5.RETRY_MODES.ADAPTIVE;rateLimiter;standardRetryStrategy;constructor(X,Y){let{rateLimiter:G}=Y??{};this.rateLimiter=G??new KT1,this.standardRetryStrategy=Y?new cX1({maxAttempts:typeof X==="number"?X:3,...Y}):new cX1(X)}async acquireInitialRetryToken(X){return await this.rateLimiter.getSendToken(),this.standardRetryStrategy.acquireInitialRetryToken(X)}async refreshRetryTokenForRetry(X,Y){return this.rateLimiter.updateClientSendingRate(Y),this.standardRetryStrategy.refreshRetryTokenForRetry(X,Y)}recordSuccess(X){this.rateLimiter.updateClientSendingRate({}),this.standardRetryStrategy.recordSuccess(X)}async maxAttemptsProvider(){return this.standardRetryStrategy.maxAttempts()}}class O06 extends cX1{computeNextBackoffDelay;constructor(X,Y=sQ.delay()){super(typeof X==="function"?X:async()=>X);if(typeof Y==="number")this.computeNextBackoffDelay=()=>Y;else this.computeNextBackoffDelay=Y}async refreshRetryTokenForRetry(X,Y){let G=await super.refreshRetryTokenForRetry(X,Y);return G.getRetryDelay=()=>this.computeNextBackoffDelay(G.getRetryCount()),G}}$o5.AdaptiveRetryStrategy=z06;$o5.ConfiguredRetryStrategy=O06;$o5.DEFAULT_MAX_ATTEMPTS=$T1;$o5.DEFAULT_RETRY_DELAY_BASE=Yo5;$o5.DEFAULT_RETRY_MODE=Xo5;$o5.DefaultRateLimiter=KT1;$o5.INITIAL_RETRY_TOKENS=Fz0;$o5.INVOCATION_ID_HEADER=Zo5;$o5.MAXIMUM_RETRY_DELAY=Bz0;$o5.NO_RETRY_INCREMENT=B06;$o5.REQUEST_HEADER=Wo5;$o5.RETRY_COST=Qo5;$o5.Retry=sQ;$o5.StandardRetryStrategy=cX1;$o5.THROTTLING_RETRY_DELAY_BASE=Go5;$o5.TIMEOUT_RETRY_COST=Jo5});var WX=k((vo5)=>{var Io5=ww(),Nz0={warningEmitted:!1},Vo5=(X)=>{if(X&&!Nz0.warningEmitted&&parseInt(X.substring(1,X.indexOf(".")))<20)Nz0.warningEmitted=!0,process.emitWarning(`NodeDeprecationWarning: The AWS SDK for JavaScript (v3) will
|
|
1647
1647
|
no longer support Node.js ${X} in January 2026.
|
|
1648
1648
|
|
|
1649
1649
|
To continue receiving updates to AWS services, bug fixes, and security
|
|
@@ -7420,7 +7420,7 @@ The web_search tool streams its research result directly to the user in real tim
|
|
|
7420
7420
|
|
|
7421
7421
|
`+"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 AK8{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((W)=>W.role==="user");return J>=0?Q.slice(J):Q}async save(X){if(X.length===0)return;await this.storage.saveMessages(X)}}async function TK8(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 AK8({thread:J,storage:X,defaultWindowSize:Q})}function IK8(X,Y){let G=X.thinking.capabilities;if(!((G?.vision??!1)||(G?.file??!1))){if(Y.some((W)=>W.parts?.some((Z)=>Z.type==="file")))throw new c5(400,{message:"This model does not support file uploads. Please change the model and try again."})}}var VK8=w(()=>{uw()});function jK8(X,Y=[]){if(X==="stop")return Y.filter((J)=>J.type==="text"&&J.text).map((J)=>J.text).join(`
|
|
7422
7422
|
`).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 MK8(X){let{abortSignal:Y,model:G,userMessage:Q}=X,J=new AbortController,W=()=>J.abort();Y.addEventListener("abort",W,{once:!0});let Z,$=()=>{Z=setTimeout(()=>{J.abort()},wH7)};return{promise:(async()=>{try{let U=(await LT({model:G,system:MC6,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(`
|
|
7423
|
-
`)[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",W)}})(),finish:$}}var wH7=1e4;var RK8=w(()=>{hX();fR()});function Jd(){return u4().podName}var ai1=w(()=>{l9()});function We(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 LH7(X){if(X instanceof Error&&X.name==="AbortError")return"aborted";let Y=(X instanceof Error?X.message:We(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 ti1(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 fL(X,Y,G){return Kg4("decopilot.streamCore",(Q)=>EH7(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 EH7(X,Y,G,Q){let{runRegistry:J,streamBuffer:W}=G;X={...X,messages:X.messages.map((B)=>B.id?B:{...B,id:FR0()})};let Z,$=!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",z=B?.providerId==="codex",O=N||z;if(Q.setAttribute("decopilot.isCliAgent",O),Q.setAttribute("decopilot.isCodex",z),!O){let $1=await QB(Y.db,X.organizationId,Y.auth.user?.role);if(!NT($1,X.models.credentialId,X.models.thinking.id))throw Error("Model not allowed for your role")}let D=X.windowSize??_R;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),O?Promise.resolve(null):Y.aiProviders.activate(X.models.credentialId,X.organizationId),TK8(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 $1=[["thinking",X.models.thinking.id]];if(X.models.coding)$1.push(["coding",X.models.coding.id]);if(X.models.fast)$1.push(["fast",X.models.fast.id]);if(X.models.image)$1.push(["image",X.models.image.id]);for(let[O1,v1]of $1)if(P.asyncResearch.canHandle(v1))throw Error(`Model "${v1}" can only be used as a Deep Research model. It is not usable as the ${O1} model \u2014 set it in the Deep Research slot instead.`)}let j=async(...$1)=>{let O1=Date.now(),v1=[...new Map($1.filter(Boolean).map((s1)=>[s1.id,s1])).values()].filter((s1)=>s1.parts&&s1.parts.length>0).map((s1,d1)=>({...s1,thread_id:q.thread.id,created_at:new Date(O1+d1).toISOString(),updated_at:new Date(O1+d1).toISOString()}));if(v1.length===0)return;await q.save(v1).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:Jd()});else await J.execute({type:"START",taskId:q.thread.id,orgId:X.organizationId,userId:X.userId,abortController:new AbortController,podId:Jd(),runConfig:{models:X.models,agent:X.agent,temperature:X.temperature,toolApprovalLevel:X.toolApprovalLevel,mode:X.mode,windowSize:X.windowSize,triggerId:X.triggerId}});$=!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 $1=X.abortSignal;if($1.aborted)await J.execute({type:"CANCEL",taskId:q.thread.id});else $1.addEventListener("abort",()=>{J.execute({type:"CANCEL",taskId:q.thread.id}).catch(()=>{})},{once:!0})}W?.purge(q.thread.id);let I=X.messages.filter(($1)=>$1.role==="system"),R=X.messages.find(($1)=>$1.role!=="system"),C=R?(await O$8([R],Y)).find(($1)=>$1.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 j(C)}M.addEventListener("abort",()=>{Z?.()});let _=X.models.thinking.limits?.maxOutputTokens??iR1,v=!1,y=[],h=await F$8(q,C,I,D),d;if(N)for(let $1=h.length-1;$1>=0;$1--){let O1=h[$1],v1=O1?.metadata;if(O1?.role==="assistant"&&v1?.codingAgentSessionId&&v1?.codingAgentProvider==="claude-code"){d=v1.codingAgentSessionId;break}}let i=new Map,f=[],u=Y.organization,a=Date.now(),r={inputTokens:0,outputTokens:0,totalTokens:0},U1=null,w1=S31({originalMessages:h,execute:async({writer:$1})=>{let O1=PK8(X.mode,{isCliAgent:O}),v1=await aR(E,Y,"passthrough",!0,{listTimeoutMs:1000}),s1;Z=()=>{v1.close().catch(()=>{}),s1?.close().catch(()=>{})};let{tools:d1,nameMap:h1}=O?{tools:{},nameMap:new Map}:await mi1(v1,i,$1,X.toolApprovalLevel,{ctx:Y,isPlanMode:O1.isPlanMode}),Y1=E.metadata,l1=!Y1.githubRepo,$0=X.userId?{virtualMcpId:X.agent.id,branch:l1?"ephemeral":X.branch??`thread:${q.thread.id}`,userId:X.userId,threadId:q.thread.id}:null,r1=O?{}:await DK8($1,{provider:P,organization:u,models:X.models,toolApprovalLevel:X.toolApprovalLevel,isPlanMode:O1.isPlanMode,toolOutputMap:i,pendingImages:f,passthroughClient:v1,vmContext:$0,taskId:q.thread.id},Y),q1=new Set(Object.keys(d1)),P1=Object.keys(r1),z1=qH7(h,q1),W1=new Map;if(O1.isPlanMode&&!O){let{tools:A1}=await v1.listTools();for(let A of A1){let x=h1.get(A.name);if(x)W1.set(x,{readOnlyHint:A.annotations?.readOnlyHint})}}let k1=O?new Map:v1.getConnectionTitleMap(),M1=new Map,p1=O?{}:{...d1,...r1,list_connection_tools:IH7(v1,h1,k1),enable_tools:LK8(z1,q1,M1,{isPlanMode:O1.isPlanMode,toolAnnotations:W1})},j1=IC6(),[y1,e1]=await Promise.all([TH7(v1,z1,h1,k1),VH7(v1)]);for(let[A1,A]of y1.connectionToolsMap.entries())M1.set(A1,A);let Z0=y1.catalog,L4=v1.getInstructions(),l0=aN(X.agent.id)?VC6():L4,U0=O1.planPrompt,z0=O1.webSearchInstructionPrompt&&"web_search"in p1?O1.webSearchInstructionPrompt:null,f0=Y1?.githubRepo?jC6(Y1.githubRepo):null,M0=[j1,U0,z0,f0,e1,l0].filter((A1)=>Boolean(A1?.trim())),R6=[j1,U0,z0,f0,Z0,e1,l0].filter((A1)=>Boolean(A1?.trim())),C1=await D$8(h,Y),{systemMessages:X0,messages:o0,originalMessages:h4}=await U$8(C1,{windowSize:D,models:X.models,tools:p1});if(IK8(X.models,h4),q.thread.title===pR1&&!O){let A1=JSON.stringify(o0[0]?.content);U1=MK8({abortSignal:M,model:ti1(P,X.models.fast??X.models.thinking),userMessage:A1});let A=U1.promise.then(async(x)=>{if(!x)return;if(await Y.storage.threads.update(q.thread.id,{title:x}).catch((Q1)=>{console.error("[decopilot:stream] Error updating thread title",Q1)}),!v)$1.write({type:"data-thread-title",data:{title:x},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,x)}).catch((x)=>{console.warn("[decopilot:stream] Title generation failed:",x)});y.push(A)}let c=null,S1,g,L,S={inputTokens:0,outputTokens:0,totalTokens:0},p=0;H=Date.now();let e;if(N){let A1=await Y.boundAuth.apiKey.create({name:"claude-code-session",expiresIn:3600,metadata:{organization:{id:u.id,slug:u.slug,name:u.name}}}),A=`${MG1()}/mcp/virtual-mcp/${X.agent.id}`,x;if($0&&Y1.githubRepo){let Q1=await sm(Y);if(Q1.kind==="host"){let{computeHandle:f1,composeSandboxRef:E1}=await Promise.resolve().then(() => (FK(),PS)),x1=E1({orgId:u.id,virtualMcpId:$0.virtualMcpId,branch:$0.branch}),E0=f1({userId:$0.userId,projectRef:x1},$0.branch);x=await Q1.localWorkdir(E0)??void 0}}e=_S0(Cf6(X.models.thinking.id),{mcpServers:{cms:{type:"http",url:A,headers:{Authorization:`Bearer ${A1.key}`,"x-org-id":X.organizationId}}},toolApprovalLevel:X.toolApprovalLevel,isPlanMode:O1.isPlanMode,resume:d,cwd:x})}else if(z){let A1=await Y.boundAuth.apiKey.create({name:"codex-session",expiresIn:3600,metadata:{organization:{id:u.id,slug:u.slug,name:u.name}}}),A=`${MG1()}/mcp/virtual-mcp/${X.agent.id}`,x=oS0(Mb6(X.models.thinking.id),{mcpServers:{cms:{transport:"http",url:A,headers:{Authorization:`Bearer ${A1.key}`,"x-org-id":X.organizationId}}},toolApprovalLevel:X.toolApprovalLevel,isPlanMode:O1.isPlanMode});e=x.model,s1=x.provider}else e=ti1(P,X.models.thinking);let F1=PN.startSpan("decopilot.streamText",{attributes:{"decopilot.model.id":X.models.thinking.id,"decopilot.credential.id":X.models.credentialId,"decopilot.isCliAgent":O,"decopilot.isCodex":z}}),t;try{t=nz({model:e,system:[...R6.map((A1)=>({role:"system",content:A1})),...X0],messages:o0,tools:p1,...O?{}:{prepareStep:(()=>{let A1=O1.forcedFirstStepTool&&O1.forcedFirstStepTool in p1?O1.forcedFirstStepTool:null,A=0;return(x)=>{let Q1=x.messages,f1=A===0;A++;let E1;if(f.length>0){let V4=f.splice(0,f.length),o=[];for(let s of V4)if(o.push({type:"text",text:s.label??(s.pageUrl?`[Screenshot of ${s.pageUrl}]`:"[Image]")}),s.url.startsWith("data:")){let G1=s.url.match(/^data:([^;]+);base64,(.+)$/s);if(G1)o.push({type:"image",image:G1[2],mimeType:G1[1]})}else o.push({type:"image",image:new URL(s.url)});E1=[...Q1,{role:"user",content:o}]}let x1=[...P1,"list_connection_tools","enable_tools",...z1];if(O1.isPlanMode)x1=x1.filter((V4)=>{if(P1.includes(V4)||V4==="enable_tools"||V4==="list_connection_tools")return!0;return W1.get(V4)?.readOnlyHint===!0});let E0=A1&&f1?A1:null;return{activeTools:x1,...E1&&{messages:E1},...E0&&{toolChoice:{type:"tool",toolName:E0}},...!f1&&{system:[...M0.map((V4)=>({role:"system",content:V4})),...X0]}}}})(),temperature:X.temperature,maxOutputTokens:_,stopWhen:iz(qC6)},abortSignal:M,onFinish:async({usage:A1,totalUsage:A,finishReason:x,request:Q1,response:f1})=>{F1.setAttribute("decopilot.llm.inputTokens",A.inputTokens??0),F1.setAttribute("decopilot.llm.outputTokens",A.outputTokens??0),F1.setAttribute("decopilot.llm.finishReason",x),F1.setStatus({code:ri1.SpanStatusCode.OK}),F1.end();let E1=Date.now()-(H??Date.now());if(U=!0,ni1({ctx:Y,organizationId:X.organizationId,modelId:X.models.thinking.id,durationMs:E1,isError:!1,inputTokens:A.inputTokens,outputTokens:A.outputTokens}),r={inputTokens:r.inputTokens+(A.inputTokens??0),outputTokens:r.outputTokens+(A.outputTokens??0),totalTokens:r.totalTokens+(A.totalTokens??0)},pi1({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:E1,isError:!1,finishReason:x,usage:{inputTokens:A1.inputTokens??0,outputTokens:A1.outputTokens??0,totalTokens:A1.totalTokens??0},totalUsage:{inputTokens:A.inputTokens??0,outputTokens:A.outputTokens??0,totalTokens:A.totalTokens??0},request:Q1,response:f1,userId:X.userId,requestId:Y.metadata.requestId,userAgent:Y.metadata.userAgent??null}),M.aborted)return},onError:async(A1)=>{let A=A1 instanceof Error?A1:Error(We(A1));if(F1.setStatus({code:ri1.SpanStatusCode.ERROR,message:A.message}),F1.recordException(A),F1.end(),console.error("[decopilot:stream] Error",A1),M.aborted)throw A1;if(!U){let x=Date.now()-(H??Date.now());U=!0,ni1({ctx:Y,organizationId:X.organizationId,modelId:X.models.thinking.id,durationMs:x,isError:!0,errorType:A1 instanceof Error?A1.name:"Error"}),pi1({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:x,isError:!0,errorMessage:A1 instanceof Error?A1.message:We(A1),userId:X.userId,requestId:Y.metadata.requestId,userAgent:Y.metadata.userAgent??null})}throw A1},onAbort:async({steps:A1})=>{if(!A1.length||U)return;U=!0;let A=Date.now()-(H??Date.now()),x=A1.reduce((f1,E1)=>({inputTokens:f1.inputTokens+(E1.usage.inputTokens??0),outputTokens:f1.outputTokens+(E1.usage.outputTokens??0),totalTokens:f1.totalTokens+(E1.usage.totalTokens??0)}),{inputTokens:0,outputTokens:0,totalTokens:0}),Q1=A1[A1.length-1].usage;if(ni1({ctx:Y,organizationId:X.organizationId,modelId:X.models.thinking.id,durationMs:A,isError:!1,inputTokens:x.inputTokens,outputTokens:x.outputTokens}),pi1({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:x,request:void 0,response:void 0,userId:X.userId,requestId:Y.metadata.requestId,userAgent:Y.metadata.userAgent??null}),x.totalTokens>0)$1.write({type:"message-metadata",messageMetadata:{usage:{inputTokens:x.inputTokens,outputTokens:x.outputTokens,totalTokens:x.totalTokens,...p>0&&{providerMetadata:{openrouter:{usage:{cost:p}}}}}}})}})}catch(A1){if(F1.setStatus({code:ri1.SpanStatusCode.ERROR,message:A1 instanceof Error?A1.message:We(A1)}),A1 instanceof Error)F1.recordException(A1);throw F1.end(),A1}let u1=t.toUIMessageStream({originalMessages:h4,generateMessageId:FR0,onError:(A1)=>Lh0(A1),messageMetadata:({part:A1})=>{if(A1.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:R6.map((A)=>({chars:A.length,preview:A.slice(0,80).replace(/\s+/g," ")})),tools:Object.keys(p1).length,activeTools:P1.length+1+z1.size},thread_id:q.thread.id};if(A1.type==="reasoning-start"){if(c===null)c=new Date;return{reasoning_start_at:c}}if(A1.type==="reasoning-end")return{reasoning_end_at:new Date};if(A1.type==="finish-step"){if(S1=A1.providerMetadata,N&&A1.providerMetadata?.["claude-code"])g=A1.providerMetadata["claude-code"].sessionId,L="claude-code";if(z&&A1.providerMetadata?.["codex-app-server"])g=A1.providerMetadata["codex-app-server"].threadId,L="codex";S={inputTokens:S.inputTokens+(A1.usage?.inputTokens??0),outputTokens:S.outputTokens+(A1.usage?.outputTokens??0),totalTokens:S.totalTokens+(A1.usage?.totalTokens??0)};let A=A1.providerMetadata?.openrouter?.usage?.cost;if(A!=null)p+=A;return{usage:{inputTokens:S.inputTokens,outputTokens:S.outputTokens,totalTokens:S.totalTokens,...p>0&&{providerMetadata:{openrouter:{usage:{cost:p}}}}}}}if(A1.type==="finish"){let A=X.models.thinking.provider,x=A1.totalUsage,Q1=S1??A1.providerMetadata,f1=p>0&&Q1?{...Q1,openrouter:{...Q1.openrouter??{},usage:{...Q1.openrouter?.usage??{},cost:p}}}:Q1,E1=x&&((x.inputTokens??0)>0||(x.outputTokens??0)>0)?x:S.totalTokens>0?S:x,x1=E1?{inputTokens:E1.inputTokens??0,outputTokens:E1.outputTokens??0,reasoningTokens:x?.reasoningTokens??void 0,totalTokens:E1.totalTokens??0,providerMetadata:d71(A&&f1?{...f1,[A]:{...f1[A]??{},reasoning_details:void 0}}:f1)}:void 0;return{...x1&&{usage:x1},...g&&{codingAgentSessionId:g},...L&&{codingAgentProvider:L}}}return}});if(W)$1.merge(W.relay(u1,q.thread.id,M));else $1.merge(u1)},onFinish:async({responseMessage:$1,finishReason:O1})=>{if(console.log("[decopilot:title-debug] onFinish called, setting streamFinished=true threadId=%s pendingOps=%d",q.thread.id,y.length),v=!0,Z?.(),U1?.finish(),await Promise.allSettled(y),await j($1),M.aborted)return;let v1=jK8(O1,$1?.parts);await J.execute({type:"FINISH",taskId:q.thread.id,threadStatus:v1}),M6.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()-a,finish_reason:O1,thread_status:v1,input_tokens:r.inputTokens,output_tokens:r.outputTokens,total_tokens:r.totalTokens,is_resume:X.isResume??!1}})},onStepFinish:({responseMessage:$1})=>{let O1=J.dispatch({type:"STEP_DONE",taskId:q.thread.id});y.push(J.react(O1).catch((d1)=>{console.error("[decopilot:stream] onStepFinish reactor failed",d1)}));let v1=O1[0]?.event;if(X.isResume?v1?.type==="STEP_COMPLETED":v1?.type==="STEP_COMPLETED"&&v1.stepCount%5===0)y.push(j($1).catch((d1)=>{console.error("[decopilot:stream] onStepFinish save failed",d1)}))},onError:($1)=>{if(v=!0,Z?.(),U1?.finish(),M.aborted)return M6.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()-a,is_resume:X.isResume??!1}}),Lh0($1);return console.error("[decopilot] stream error:",$1),M6.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()-a,error_category:LH7($1),error_message:$1 instanceof Error?$1.message:We($1),is_resume:X.isResume??!1}}),J.execute({type:"FINISH",taskId:q.thread.id,threadStatus:"failed"}).catch((O1)=>{console.error("[decopilot:stream] onError reactor failed",O1)}),Lh0($1)}});return{taskId:q.thread.id,stream:w1}}catch(B){if(Z?.(),$&&K)J.execute({type:"FINISH",taskId:K,threadStatus:"failed"}).catch((N)=>{console.error("[decopilot:stream] catch-block reactor failed",N)});throw B}}function PH7(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 Lh0(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] ${PH7(X.message)}`;return X.message}return We(X)}function qH7(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 W=J.result;if(Array.isArray(W.enabled))for(let Z of W.enabled){let $=Z.replace(/[^a-zA-Z0-9_]/g,"_");if(Y.has($))G.add($);else if(Y.has(Z))G.add(Z)}}}return G}async function TH7(X,Y,G,Q){let{tools:J}=await X.listTools(),W=new Map,Z=new Map;for(let H of J){let U=G.get(H.name);if(!U)continue;if(!li1(H))continue;let B=H._meta?.gatewayClientId??"unknown",N=`${B}_`,z=U.startsWith(N)?U.slice(N.length):U,O=Z.get(B);if(!O)O=[],Z.set(B,O);if(O.push(U),Y.has(U))continue;let D=W.get(B);if(!D)D={name:Q.get(B)??B,totalCount:0,preview:[]},W.set(B,D);if(D.totalCount++,D.preview.length<AH7)D.preview.push(z)}let $=[...W.entries()].filter(([,H])=>H.totalCount>0);if($.length===0)return{catalog:null,connectionToolsMap:Z};return{catalog:`
|
|
7423
|
+
`)[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",W)}})(),finish:$}}var wH7=1e4;var RK8=w(()=>{hX();fR()});function Jd(){return u4().podName}var ai1=w(()=>{l9()});function We(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 LH7(X){if(X instanceof Error&&X.name==="AbortError")return"aborted";let Y=(X instanceof Error?X.message:We(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 ti1(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 fL(X,Y,G){return Kg4("decopilot.streamCore",(Q)=>EH7(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 EH7(X,Y,G,Q){let{runRegistry:J,streamBuffer:W}=G;X={...X,messages:X.messages.map((B)=>B.id?B:{...B,id:FR0()})};let Z,$=!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",z=B?.providerId==="codex",O=N||z;if(Q.setAttribute("decopilot.isCliAgent",O),Q.setAttribute("decopilot.isCodex",z),!O){let $1=await QB(Y.db,X.organizationId,Y.auth.user?.role);if(!NT($1,X.models.credentialId,X.models.thinking.id))throw Error("Model not allowed for your role")}let D=X.windowSize??_R;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),O?Promise.resolve(null):Y.aiProviders.activate(X.models.credentialId,X.organizationId),TK8(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:O,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 $1=[["thinking",X.models.thinking.id]];if(X.models.coding)$1.push(["coding",X.models.coding.id]);if(X.models.fast)$1.push(["fast",X.models.fast.id]);if(X.models.image)$1.push(["image",X.models.image.id]);for(let[O1,v1]of $1)if(P.asyncResearch.canHandle(v1))throw Error(`Model "${v1}" can only be used as a Deep Research model. It is not usable as the ${O1} model \u2014 set it in the Deep Research slot instead.`)}let j=async(...$1)=>{let O1=Date.now(),v1=[...new Map($1.filter(Boolean).map((s1)=>[s1.id,s1])).values()].filter((s1)=>s1.parts&&s1.parts.length>0).map((s1,d1)=>({...s1,thread_id:q.thread.id,created_at:new Date(O1+d1).toISOString(),updated_at:new Date(O1+d1).toISOString()}));if(v1.length===0)return;await q.save(v1).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:Jd()});else await J.execute({type:"START",taskId:q.thread.id,orgId:X.organizationId,userId:X.userId,abortController:new AbortController,podId:Jd(),runConfig:{models:X.models,agent:X.agent,temperature:X.temperature,toolApprovalLevel:X.toolApprovalLevel,mode:X.mode,windowSize:X.windowSize,triggerId:X.triggerId}});$=!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 $1=X.abortSignal;if($1.aborted)await J.execute({type:"CANCEL",taskId:q.thread.id});else $1.addEventListener("abort",()=>{J.execute({type:"CANCEL",taskId:q.thread.id}).catch(()=>{})},{once:!0})}W?.purge(q.thread.id);let I=X.messages.filter(($1)=>$1.role==="system"),R=X.messages.find(($1)=>$1.role!=="system"),C=R?(await O$8([R],Y)).find(($1)=>$1.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 j(C)}M.addEventListener("abort",()=>{Z?.()});let _=X.models.thinking.limits?.maxOutputTokens??iR1,v=!1,y=[],h=await F$8(q,C,I,D),d;if(N)for(let $1=h.length-1;$1>=0;$1--){let O1=h[$1],v1=O1?.metadata;if(O1?.role==="assistant"&&v1?.codingAgentSessionId&&v1?.codingAgentProvider==="claude-code"){d=v1.codingAgentSessionId;break}}let i=new Map,f=[],u=Y.organization,a=Date.now(),r={inputTokens:0,outputTokens:0,totalTokens:0},U1=null,w1=S31({originalMessages:h,execute:async({writer:$1})=>{let O1=PK8(X.mode,{isCliAgent:O}),v1=await aR(E,Y,"passthrough",!0,{listTimeoutMs:1000}),s1;Z=()=>{v1.close().catch(()=>{}),s1?.close().catch(()=>{})};let{tools:d1,nameMap:h1}=O?{tools:{},nameMap:new Map}:await mi1(v1,i,$1,X.toolApprovalLevel,{ctx:Y,isPlanMode:O1.isPlanMode}),Y1=E.metadata,l1=!Y1.githubRepo,$0=X.userId?{virtualMcpId:X.agent.id,branch:l1?"ephemeral":X.branch??`thread:${q.thread.id}`,userId:X.userId,threadId:q.thread.id}:null,r1=O?{}:await DK8($1,{provider:P,organization:u,models:X.models,toolApprovalLevel:X.toolApprovalLevel,isPlanMode:O1.isPlanMode,toolOutputMap:i,pendingImages:f,passthroughClient:v1,vmContext:$0,taskId:q.thread.id},Y),q1=new Set(Object.keys(d1)),P1=Object.keys(r1),z1=qH7(h,q1),W1=new Map;if(O1.isPlanMode&&!O){let{tools:A1}=await v1.listTools();for(let A of A1){let x=h1.get(A.name);if(x)W1.set(x,{readOnlyHint:A.annotations?.readOnlyHint})}}let k1=O?new Map:v1.getConnectionTitleMap(),M1=new Map,p1=O?{}:{...d1,...r1,list_connection_tools:IH7(v1,h1,k1),enable_tools:LK8(z1,q1,M1,{isPlanMode:O1.isPlanMode,toolAnnotations:W1})},j1=IC6(),[y1,e1]=await Promise.all([TH7(v1,z1,h1,k1),VH7(v1)]);for(let[A1,A]of y1.connectionToolsMap.entries())M1.set(A1,A);let Z0=y1.catalog,L4=v1.getInstructions(),l0=aN(X.agent.id)?VC6():L4,U0=O1.planPrompt,z0=O1.webSearchInstructionPrompt&&"web_search"in p1?O1.webSearchInstructionPrompt:null,f0=Y1?.githubRepo?jC6(Y1.githubRepo):null,M0=[j1,U0,z0,f0,e1,l0].filter((A1)=>Boolean(A1?.trim())),R6=[j1,U0,z0,f0,Z0,e1,l0].filter((A1)=>Boolean(A1?.trim())),C1=await D$8(h,Y),{systemMessages:X0,messages:o0,originalMessages:h4}=await U$8(C1,{windowSize:D,models:X.models,tools:p1});if(IK8(X.models,h4),q.thread.title===pR1&&!O){let A1=JSON.stringify(o0[0]?.content);U1=MK8({abortSignal:M,model:ti1(P,X.models.fast??X.models.thinking),userMessage:A1});let A=U1.promise.then(async(x)=>{if(!x)return;if(await Y.storage.threads.update(q.thread.id,{title:x}).catch((Q1)=>{console.error("[decopilot:stream] Error updating thread title",Q1)}),!v)$1.write({type:"data-thread-title",data:{title:x},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,x)}).catch((x)=>{console.warn("[decopilot:stream] Title generation failed:",x)});y.push(A)}let c=null,S1,g,L,S={inputTokens:0,outputTokens:0,totalTokens:0},p=0;H=Date.now();let e;if(N){let A1=await Y.boundAuth.apiKey.create({name:"claude-code-session",expiresIn:3600,metadata:{organization:{id:u.id,slug:u.slug,name:u.name}}}),A=`${MG1()}/mcp/virtual-mcp/${X.agent.id}`,x;if($0&&Y1.githubRepo){let Q1=await sm(Y);if(Q1.kind==="host"){let{computeHandle:f1,composeSandboxRef:E1}=await Promise.resolve().then(() => (FK(),PS)),x1=E1({orgId:u.id,virtualMcpId:$0.virtualMcpId,branch:$0.branch}),E0=f1({userId:$0.userId,projectRef:x1},$0.branch);x=await Q1.localWorkdir(E0)??void 0}}e=_S0(Cf6(X.models.thinking.id),{mcpServers:{cms:{type:"http",url:A,headers:{Authorization:`Bearer ${A1.key}`,"x-org-id":X.organizationId}}},toolApprovalLevel:X.toolApprovalLevel,isPlanMode:O1.isPlanMode,resume:d,cwd:x})}else if(z){let A1=await Y.boundAuth.apiKey.create({name:"codex-session",expiresIn:3600,metadata:{organization:{id:u.id,slug:u.slug,name:u.name}}}),A=`${MG1()}/mcp/virtual-mcp/${X.agent.id}`,x=oS0(Mb6(X.models.thinking.id),{mcpServers:{cms:{transport:"http",url:A,headers:{Authorization:`Bearer ${A1.key}`,"x-org-id":X.organizationId}}},toolApprovalLevel:X.toolApprovalLevel,isPlanMode:O1.isPlanMode});e=x.model,s1=x.provider}else e=ti1(P,X.models.thinking);let F1=PN.startSpan("decopilot.streamText",{attributes:{"decopilot.model.id":X.models.thinking.id,"decopilot.credential.id":X.models.credentialId,"decopilot.isCliAgent":O,"decopilot.isCodex":z}}),t;try{t=nz({model:e,system:[...R6.map((A1)=>({role:"system",content:A1})),...X0],messages:o0,tools:p1,...O?{}:{prepareStep:(()=>{let A1=O1.forcedFirstStepTool&&O1.forcedFirstStepTool in p1?O1.forcedFirstStepTool:null,A=0;return(x)=>{let Q1=x.messages,f1=A===0;A++;let E1;if(f.length>0){let V4=f.splice(0,f.length),o=[];for(let s of V4)if(o.push({type:"text",text:s.label??(s.pageUrl?`[Screenshot of ${s.pageUrl}]`:"[Image]")}),s.url.startsWith("data:")){let G1=s.url.match(/^data:([^;]+);base64,(.+)$/s);if(G1)o.push({type:"image",image:G1[2],mimeType:G1[1]})}else o.push({type:"image",image:new URL(s.url)});E1=[...Q1,{role:"user",content:o}]}let x1=[...P1,"list_connection_tools","enable_tools",...z1];if(O1.isPlanMode)x1=x1.filter((V4)=>{if(P1.includes(V4)||V4==="enable_tools"||V4==="list_connection_tools")return!0;return W1.get(V4)?.readOnlyHint===!0});let E0=A1&&f1?A1:null;return{activeTools:x1,...E1&&{messages:E1},...E0&&{toolChoice:{type:"tool",toolName:E0}},...!f1&&{system:[...M0.map((V4)=>({role:"system",content:V4})),...X0]}}}})(),temperature:X.temperature,maxOutputTokens:_,stopWhen:iz(qC6)},abortSignal:M,onFinish:async({usage:A1,totalUsage:A,finishReason:x,request:Q1,response:f1})=>{F1.setAttribute("decopilot.llm.inputTokens",A.inputTokens??0),F1.setAttribute("decopilot.llm.outputTokens",A.outputTokens??0),F1.setAttribute("decopilot.llm.finishReason",x),F1.setStatus({code:ri1.SpanStatusCode.OK}),F1.end();let E1=Date.now()-(H??Date.now());if(U=!0,ni1({ctx:Y,organizationId:X.organizationId,modelId:X.models.thinking.id,durationMs:E1,isError:!1,inputTokens:A.inputTokens,outputTokens:A.outputTokens}),r={inputTokens:r.inputTokens+(A.inputTokens??0),outputTokens:r.outputTokens+(A.outputTokens??0),totalTokens:r.totalTokens+(A.totalTokens??0)},pi1({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:E1,isError:!1,finishReason:x,usage:{inputTokens:A1.inputTokens??0,outputTokens:A1.outputTokens??0,totalTokens:A1.totalTokens??0},totalUsage:{inputTokens:A.inputTokens??0,outputTokens:A.outputTokens??0,totalTokens:A.totalTokens??0},request:Q1,response:f1,userId:X.userId,requestId:Y.metadata.requestId,userAgent:Y.metadata.userAgent??null}),M.aborted)return},onError:async(A1)=>{let A=A1 instanceof Error?A1:Error(We(A1));if(F1.setStatus({code:ri1.SpanStatusCode.ERROR,message:A.message}),F1.recordException(A),F1.end(),console.error("[decopilot:stream] Error",A1),M.aborted)throw A1;if(!U){let x=Date.now()-(H??Date.now());U=!0,ni1({ctx:Y,organizationId:X.organizationId,modelId:X.models.thinking.id,durationMs:x,isError:!0,errorType:A1 instanceof Error?A1.name:"Error"}),pi1({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:x,isError:!0,errorMessage:A1 instanceof Error?A1.message:We(A1),userId:X.userId,requestId:Y.metadata.requestId,userAgent:Y.metadata.userAgent??null})}throw A1},onAbort:async({steps:A1})=>{if(!A1.length||U)return;U=!0;let A=Date.now()-(H??Date.now()),x=A1.reduce((f1,E1)=>({inputTokens:f1.inputTokens+(E1.usage.inputTokens??0),outputTokens:f1.outputTokens+(E1.usage.outputTokens??0),totalTokens:f1.totalTokens+(E1.usage.totalTokens??0)}),{inputTokens:0,outputTokens:0,totalTokens:0}),Q1=A1[A1.length-1].usage;if(ni1({ctx:Y,organizationId:X.organizationId,modelId:X.models.thinking.id,durationMs:A,isError:!1,inputTokens:x.inputTokens,outputTokens:x.outputTokens}),pi1({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:x,request:void 0,response:void 0,userId:X.userId,requestId:Y.metadata.requestId,userAgent:Y.metadata.userAgent??null}),x.totalTokens>0)$1.write({type:"message-metadata",messageMetadata:{usage:{inputTokens:x.inputTokens,outputTokens:x.outputTokens,totalTokens:x.totalTokens,...p>0&&{providerMetadata:{openrouter:{usage:{cost:p}}}}}}})}})}catch(A1){if(F1.setStatus({code:ri1.SpanStatusCode.ERROR,message:A1 instanceof Error?A1.message:We(A1)}),A1 instanceof Error)F1.recordException(A1);throw F1.end(),A1}let u1=t.toUIMessageStream({originalMessages:h4,generateMessageId:FR0,onError:(A1)=>Lh0(A1),messageMetadata:({part:A1})=>{if(A1.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:R6.map((A)=>({chars:A.length,preview:A.slice(0,80).replace(/\s+/g," ")})),tools:Object.keys(p1).length,activeTools:P1.length+1+z1.size},thread_id:q.thread.id};if(A1.type==="reasoning-start"){if(c===null)c=new Date;return{reasoning_start_at:c}}if(A1.type==="reasoning-end")return{reasoning_end_at:new Date};if(A1.type==="finish-step"){if(S1=A1.providerMetadata,N&&A1.providerMetadata?.["claude-code"])g=A1.providerMetadata["claude-code"].sessionId,L="claude-code";if(z&&A1.providerMetadata?.["codex-app-server"])g=A1.providerMetadata["codex-app-server"].threadId,L="codex";S={inputTokens:S.inputTokens+(A1.usage?.inputTokens??0),outputTokens:S.outputTokens+(A1.usage?.outputTokens??0),totalTokens:S.totalTokens+(A1.usage?.totalTokens??0)};let A=A1.providerMetadata?.openrouter?.usage?.cost;if(A!=null)p+=A;return{usage:{inputTokens:S.inputTokens,outputTokens:S.outputTokens,totalTokens:S.totalTokens,...p>0&&{providerMetadata:{openrouter:{usage:{cost:p}}}}}}}if(A1.type==="finish"){let A=X.models.thinking.provider,x=A1.totalUsage,Q1=S1??A1.providerMetadata,f1=p>0&&Q1?{...Q1,openrouter:{...Q1.openrouter??{},usage:{...Q1.openrouter?.usage??{},cost:p}}}:Q1,E1=x&&((x.inputTokens??0)>0||(x.outputTokens??0)>0)?x:S.totalTokens>0?S:x,x1=E1?{inputTokens:E1.inputTokens??0,outputTokens:E1.outputTokens??0,reasoningTokens:x?.reasoningTokens??void 0,totalTokens:E1.totalTokens??0,providerMetadata:d71(A&&f1?{...f1,[A]:{...f1[A]??{},reasoning_details:void 0}}:f1)}:void 0;return{...x1&&{usage:x1},...g&&{codingAgentSessionId:g},...L&&{codingAgentProvider:L}}}return}});if(W)$1.merge(W.relay(u1,q.thread.id,M));else $1.merge(u1)},onFinish:async({responseMessage:$1,finishReason:O1})=>{if(console.log("[decopilot:title-debug] onFinish called, setting streamFinished=true threadId=%s pendingOps=%d",q.thread.id,y.length),v=!0,Z?.(),U1?.finish(),await Promise.allSettled(y),await j($1),M.aborted)return;let v1=jK8(O1,$1?.parts);await J.execute({type:"FINISH",taskId:q.thread.id,threadStatus:v1}),M6.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()-a,finish_reason:O1,thread_status:v1,input_tokens:r.inputTokens,output_tokens:r.outputTokens,total_tokens:r.totalTokens,is_resume:X.isResume??!1}})},onStepFinish:({responseMessage:$1})=>{let O1=J.dispatch({type:"STEP_DONE",taskId:q.thread.id});y.push(J.react(O1).catch((d1)=>{console.error("[decopilot:stream] onStepFinish reactor failed",d1)}));let v1=O1[0]?.event;if(X.isResume?v1?.type==="STEP_COMPLETED":v1?.type==="STEP_COMPLETED"&&v1.stepCount%5===0)y.push(j($1).catch((d1)=>{console.error("[decopilot:stream] onStepFinish save failed",d1)}))},onError:($1)=>{if(v=!0,Z?.(),U1?.finish(),M.aborted)return M6.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()-a,is_resume:X.isResume??!1}}),Lh0($1);return console.error("[decopilot] stream error:",$1),M6.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()-a,error_category:LH7($1),error_message:$1 instanceof Error?$1.message:We($1),is_resume:X.isResume??!1}}),J.execute({type:"FINISH",taskId:q.thread.id,threadStatus:"failed"}).catch((O1)=>{console.error("[decopilot:stream] onError reactor failed",O1)}),Lh0($1)}});return{taskId:q.thread.id,stream:w1}}catch(B){if(Z?.(),$&&K)J.execute({type:"FINISH",taskId:K,threadStatus:"failed"}).catch((N)=>{console.error("[decopilot:stream] catch-block reactor failed",N)});throw B}}function PH7(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 Lh0(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] ${PH7(X.message)}`;return X.message}return We(X)}function qH7(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 W=J.result;if(Array.isArray(W.enabled))for(let Z of W.enabled){let $=Z.replace(/[^a-zA-Z0-9_]/g,"_");if(Y.has($))G.add($);else if(Y.has(Z))G.add(Z)}}}return G}async function TH7(X,Y,G,Q){let{tools:J}=await X.listTools(),W=new Map,Z=new Map;for(let H of J){let U=G.get(H.name);if(!U)continue;if(!li1(H))continue;let B=H._meta?.gatewayClientId??"unknown",N=`${B}_`,z=U.startsWith(N)?U.slice(N.length):U,O=Z.get(B);if(!O)O=[],Z.set(B,O);if(O.push(U),Y.has(U))continue;let D=W.get(B);if(!D)D={name:Q.get(B)??B,totalCount:0,preview:[]},W.set(B,D);if(D.totalCount++,D.preview.length<AH7)D.preview.push(z)}let $=[...W.entries()].filter(([,H])=>H.totalCount>0);if($.length===0)return{catalog:null,connectionToolsMap:Z};return{catalog:`
|
|
7424
7424
|
|
|
7425
7425
|
<available-connections>
|
|
7426
7426
|
${$.map(([H,{name:U,totalCount:B,preview:N}])=>{let z=B-N.length,O=N.join(", ")+(z>0?`, +${z} more`:"");return`<connection name="${Eh0(U)}" id="${Eh0(H)}" tools="${B}">${Eh0(O)}</connection>`}).join(`
|
|
@@ -7432,7 +7432,7 @@ ${Y.map((Q)=>{let J=`${Q.name}|${Q.description??""}`;if(Q.arguments&&Q.arguments
|
|
|
7432
7432
|
`)}
|
|
7433
7433
|
</available-prompts>`}async function oi1(X){let Y=X.stream.getReader();while(!0){let{done:G}=await Y.read();if(G)break}}var ri1,AH7=5;var vW1=w(()=>{vX();rZ1();T$8();I$8();o9();hX();K0();wK8();EK8();fR();Hh0();jW1();RW1();qK8();VK8();H31();RK8();kS1();xS1();mw();A$();ai1();NB();ri1=X1(x0(),1)});async function SK8(X,Y,G,Q){let{storage:J,streamBuffer:W,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}),W.purge(X),Z.emit(Y,Lj(X,G,K)),Z.emit(Y,h71(X,G))}async function jH7(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 si1(X.taskId);let Z=await G.get(X.taskId,X.orgId);J.emit(X.orgId,Lj(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 W=await G.get(X.taskId,X.orgId);J.emit(X.orgId,Lj(X.taskId,"in_progress",W?.virtual_mcp_id??void 0));return}case"STEP_COMPLETED":J.emit(X.orgId,Vq1(X.taskId,X.stepCount));return;case"RUN_COMPLETED":await SK8(X.taskId,X.orgId,"completed",Y);return;case"RUN_REQUIRES_ACTION":await SK8(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 W=await G.get(X.taskId,X.orgId);J.emit(X.orgId,Lj(X.taskId,"failed",W?.virtual_mcp_id??void 0)),J.emit(X.orgId,h71(X.taskId,"failed"));return}case"PREVIOUS_RUN_ABORTED":return}}async function kK8(X,Y){for(let{event:G}of X)await jH7(G,Y)}var si1;var Ph0=w(()=>{o9();si1=class si1 extends Error{constructor(X){super(`Failed to claim run for thread ${X} \u2014 already running on another pod`);this.name="RunClaimError"}}});function _W1(X,Y=15000){if(!X.body)return X;let G=RH7(X.body,Y);return new Response(G,{status:X.status,statusText:X.statusText,headers:X.headers})}function RH7(X,Y=15000){let G=null,Q=null,J=!1,W=!1,Z=()=>{if(Q!==null)clearInterval(Q),Q=null};return new ReadableStream({async start($){G=X.getReader(),Q=setInterval(()=>{if(J||W)return;try{$.enqueue(MH7)}catch{J=!0,Z()}},Y);try{while(!0){let{done:H,value:U}=await G.read();if(H){J=!0,Z(),$.close();return}let B=U.byteLength;if(B>0)W=!(B>=2&&U[B-2]===10&&U[B-1]===10);$.enqueue(U)}}catch(H){J=!0,Z();try{$.error(H)}catch{}}finally{J=!0,Z();try{G.releaseLock()}catch{}}},cancel($){J=!0,Z(),(G??X).cancel($).catch(()=>{})}})}var MH7;var CK8=w(()=>{MH7=new TextEncoder().encode(`: keepalive
|
|
7434
7434
|
|
|
7435
|
-
`)});async function vK8(X){let Y=ui1(X),G=await X.req.json(),Q=q$8.safeParse(G);if(!Q.success)throw new c5(400,{message:Q.error.message});let{messages:J,...W}=Q.data,Z=J,{systemMessages:$,requestMessage:K}=H$8(Z);return{organization:Y,systemMessages:$,requestMessage:K,...W}}function qh0(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 _K8(X,Y){try{return await VW1(X,Y)}catch(G){if(G instanceof Yd)return null;return console.warn(`[decopilot] tier "${Y}" resolution failed:`,G),null}}async function fK8(X,Y){let[G,Q,J]=await Promise.all([VW1(X,Y??"smart"),_K8(X,"image"),_K8(X,"web_research")]);return{credentialId:G.credentialId,thinking:qh0(G),...Q?{image:qh0(Q)}:{},...J?{deepResearch:qh0(J)}:{}}}function Ah0(X){let{cancelBroadcast:Y,streamBuffer:G,runRegistry:Q,threadStorage:J}=X,W=new O6;return W.get("/:org/decopilot/allowed-models",async(Z)=>{try{let $=Z.get("meshContext"),K=ui1(Z),H=$.auth.user?.role,U=await QB($.db,K.id,H);return Z.json(ph6(U))}catch($){if(console.error("[decopilot:allowed-models] Error",$),$ instanceof c5)return Z.json({error:$.message},$.status);return Z.json({error:$ instanceof Error?$.message:"Internal error"},500)}}),W.post("/:org/decopilot/stream",async(Z)=>{try{let $=Z.get("meshContext"),{organization:K,tier:H,agent:U,systemMessages:B,requestMessage:N,temperature:z,memory:O,thread_id:D,branch:E,toolApprovalLevel:P,mode:q}=await vK8(Z),j=$.auth?.user?.id;if(!j)throw new c5(401,{message:"User ID is required"});let M=await fK8($,H),I=await QB($.db,K.id,$.auth.user?.role);if(I!==void 0&&!NT(I,M.credentialId,M.thinking.id))throw new c5(403,{message:"Model not allowed for your role"});let R=O?.windowSize??_R,C=D??O?.thread_id,_=await fL({messages:[...B,N],models:M,agent:U,temperature:z,toolApprovalLevel:P,mode:q,organizationId:K.id,userId:j,taskId:C,windowSize:R,branch:E??null},$,{runRegistry:Q,streamBuffer:G,cancelBroadcast:Y});return M6.capture({distinctId:j,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}}),_W1(ET({stream:_.stream,consumeSseStream:pz}))}catch($){if(console.error("[decopilot:stream] Error",$),$ instanceof Yd)return Z.json({error:$.message},400);if($ instanceof c5)return Z.json({error:$.message},$.status);if($ instanceof Error&&$.name==="AbortError")return console.warn("[decopilot:stream] Aborted",{error:$.message}),Z.json({error:"Request aborted"},400);return M6.captureException($),console.error("[decopilot:stream] Failed",{error:$ instanceof Error?$.message:JSON.stringify($),stack:$ instanceof Error?$.stack:void 0}),Z.json({error:$ instanceof Error?$.message:JSON.stringify($)},500)}}),W.post("/:org/decopilot/runtime/stream",async(Z)=>{try{let $=Z.get("meshContext"),{organization:K,tier:H,agent:U,systemMessages:B,requestMessage:N,temperature:z,memory:O,thread_id:D,branch:E,toolApprovalLevel:P,mode:q}=await vK8(Z),j=$.auth?.user?.id;if(!j)throw new c5(401,{message:"User ID is required"});let M=await fK8($,H),I=await QB($.db,K.id,$.auth.user?.role);if(I!==void 0&&!NT(I,M.credentialId,M.thinking.id))throw new c5(403,{message:"Model not allowed for your role"});let R=O?.windowSize??_R,C=D??O?.thread_id,_=await fL({messages:[...B,N],models:M,agent:U,temperature:z,toolApprovalLevel:P,mode:q,organizationId:K.id,userId:j,taskId:C,windowSize:R,branch:E??null},$,{runRegistry:Q,streamBuffer:G,cancelBroadcast:Y});return _W1(ET({stream:_.stream,consumeSseStream:pz}))}catch($){if(console.error("[decopilot:stream] Error",$),$ instanceof si1)return Z.json({error:$.message},409);if($ instanceof Yd)return Z.json({error:$.message},400);if($ instanceof c5)return Z.json({error:$.message},$.status);if($ instanceof Error&&$.name==="AbortError")return console.warn("[decopilot:stream] Aborted",{error:$.message}),Z.json({error:"Request aborted"},400);return console.error("[decopilot:stream] Failed",{error:$ instanceof Error?$.message:JSON.stringify($),stack:$ instanceof Error?$.stack:void 0}),Z.json({error:$ instanceof Error?$.message:JSON.stringify($)},500)}}),W.post("/:org/decopilot/cancel/:threadId",async(Z)=>{let{taskId:$,thread:K,organization:H}=await P$8(Z);if((await Q.execute({type:"CANCEL",taskId:$})).some((B)=>B.event.type==="RUN_FAILED"))return Z.json({cancelled:!0});if(Y.broadcast($),K.status==="in_progress")console.warn("[decopilot:cancel] Ghost run detected, force-failing",{taskId:$}),Q.execute({type:"FORCE_FAIL",taskId:$,reason:"ghost",orgId:H.id}).catch((B)=>{console.error("[decopilot:cancel] Failed to force-fail ghost thread",{taskId:$,err:B})});return Z.json({cancelled:!0,async:!0},202)}),W.get("/:org/decopilot/attach/:threadId",async(Z)=>{try{let{taskId:$,thread:K,organization:H}=await Dh0(Z);if(Q.isRunning($)){let P=await G.createReplayStream($);if(!P)return Z.body(null,204);let q=S31({execute:async({writer:j})=>{let M=P.getReader();try{while(!0){let{done:I,value:R}=await M.read();if(I)break;j.write(R)}}finally{M.releaseLock()}}});return _W1(ET({stream:q,consumeSseStream:pz}))}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($,H.id),Z.body(null,204);let N=di1.safeParse(K.run_config);if(!N.success)return await J.forceFailIfInProgress($,H.id),Z.body(null,204);let z=N.data,O=await QB(U.db,H.id,U.auth.user?.role);if(O!==void 0&&!NT(O,z.models.credentialId,z.models.thinking.id))throw new c5(403,{message:"Model not allowed for your role"});if(!await J.claimOrphanedRun($,H.id,Jd()))return Z.body(null,204);let E=await fL({messages:[],models:ci1(z.models),agent:z.agent,temperature:z.temperature,toolApprovalLevel:z.toolApprovalLevel,mode:z.mode,organizationId:H.id,userId:B,taskId:$,windowSize:z.windowSize,isResume:!0},U,{runRegistry:Q,streamBuffer:G,cancelBroadcast:Y});return _W1(ET({stream:E.stream,consumeSseStream:pz}))}catch($){if($ instanceof c5)throw $;return console.error("[decopilot:attach] Error",$),Z.body(null,500)}}),W}var bK8=w(()=>{Kh0();vX();hX();CX();uw();fR();Hh0();RW1();H31();wh0();A$8();vW1();Ph0();CK8();ai1()});var yK8=w(()=>{bK8()});var ei1=()=>{let X=new O6;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 W=G.organization?.id;if(!W)return Y.json({error:"Organization context required"},403);let Z=await G.storage.connections.findById(Q,W);if(!Z)return Y.json({error:"Connection not found"},404);let $=await Y.req.json();if(!$.accessToken)return Y.json({error:"accessToken is required"},400);if($.tokenEndpoint){let z;try{z=new URL($.tokenEndpoint)}catch{return Y.json({error:"tokenEndpoint must be a valid URL"},400)}if(z.protocol!=="http:"&&z.protocol!=="https:")return Y.json({error:"tokenEndpoint must be an http(s) URL"},400)}let K=$.expiresIn?new Date(Date.now()+$.expiresIn*1000):null,H=$.tokenEndpoint??null;if(H?.includes("/oauth-proxy/")&&Z.connection_url)try{let z=await lS1(Z.connection_url);if(z)try{let O=new URL(z);if(O.protocol==="http:"||O.protocol==="https:")H=z}catch{}}catch{}let U=new I3(G.db,G.vault),B={connectionId:Q,accessToken:$.accessToken,refreshToken:$.refreshToken??null,scope:$.scope??null,expiresAt:K,clientId:$.clientId??null,clientSecret:$.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 W=G.organization?.id;if(!W)return Y.json({error:"Organization context required"},403);if(!await G.storage.connections.findById(Q,W))return Y.json({error:"Connection not found"},404);return await new I3(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 W=G.organization?.id;if(!W)return Y.json({error:"Organization context required"},403);if(!await G.storage.connections.findById(Q,W))return Y.json({error:"Connection not found"},404);let $=new I3(G.db,G.vault),K=await $.get(Q);if(!K)return Y.json({hasToken:!1,isExpired:!0,canRefresh:!1});let H=$.isExpired(K),U=!!K.refreshToken&&!!K.tokenEndpoint;return Y.json({hasToken:!0,isExpired:H,canRefresh:U,expiresAt:K.expiresAt})}),X};var Th0=w(()=>{CX();Ak0();tR()});var SH7,xK8=(X={})=>async(Y,G)=>{await G();let J=(Y.req.matchedRoutes??[]).find((Z)=>Z.method!=="ALL"&&!Z.path.endsWith("*"));if(!J)return;if(SH7.has(J.path))return;if(J.path.startsWith("/api/:org/"))return;if(X.mountPath!==void 0&&J.basePath!==X.mountPath)return;let W=Y.get("meshContext");console.log("deprecated route",{route:Y.req.routePath,method:Y.req.method,org:W?.organization?.slug,user:W?.auth?.user?.id,ua:Y.req.header("user-agent")})},uT,DK=(X)=>xK8(X);var Ih0=w(()=>{SH7=new Set(["/api/deco-sites/profile"]),uT=xK8()});var $e=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,W=await J.selectFrom("organization").select(["id","slug","name"]).where("slug","=",G).executeTakeFirst();if(!W)return X.json({error:`organization "${G}" not found`},404);let Z=Q.auth?.user?.id,$;if(Z){let K=await J.selectFrom("member").select(["role"]).where("userId","=",Z).where("organizationId","=",W.id).executeTakeFirst();if(!K)return X.json({error:"forbidden: not a member of organization"},403);$=K.role}if(Q.organization={id:W.id,slug:W.slug,name:W.name,role:$},Q.access.setOrganizationId(W.id),Q.access.setRole($),Q.storage.threads.setOrganizationId(W.id),!Q.objectStorage){let K=$r();Q.objectStorage=K?gS1(K,W.id):new mZ1(W.id,Q.baseUrl)}return await Y()};var Vh0=w(()=>{Ok0();bV1()});async function bL(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 Ke(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 W=await J.json();if(!W[0])throw Error("Supabase POST returned no rows");return W[0]}function jh0(){let X=u4(),Y=X.decoSupabaseUrl,G=X.decoSupabaseServiceKey;if(!Y||!G)return null;return{supabaseUrl:Y,serviceKey:G}}async function Mh0(X,Y,G){return(await bL(X,Y,`profiles?email=eq.${encodeURIComponent(G)}&select=user_id`))[0]?.user_id??null}async function hK8(X,Y,G){let Q=await bL(X,Y,`api_key?user_id=eq.${encodeURIComponent(G)}&select=id&limit=1`);if(Q[0]?.id)return Q[0].id;return(await Ke(X,Y,"api_key",{user_id:G})).id}function vH7(X){return`${kH7}${X}@${CH7}`}async function _H7(X,Y,G){return(await bL(X,Y,`sites?name=eq.${encodeURIComponent(G)}&select=team&limit=1`))[0]?.team??null}async function fH7(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 W=await Q.text().catch(()=>Q.statusText);throw console.error(`[deco-sites] Auth admin create user error (${Q.status}): ${W}`),Error(`Failed to create auth user (${Q.status})`)}return(await Q.json()).id}async function bH7(X,Y,G){let Q=vH7(G),J=await bL(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 bL(X,Y,`members?user_id=eq.${encodeURIComponent(K)}&team_id=eq.${G}&select=id&limit=1`))[0]?.id){let U=await Ke(X,Y,"members",{user_id:K,team_id:G,admin:!0});await Ke(X,Y,"member_roles",{member_id:U.id,role_id:1})}return hK8(X,Y,K)}let W=await fH7(X,Y,Q);if(!(await bL(X,Y,`profiles?user_id=eq.${encodeURIComponent(W)}&select=user_id&limit=1`))[0])await Ke(X,Y,"profiles",{user_id:W,email:Q,name:`Mesh Service Account (team ${G})`});let $=await Ke(X,Y,"members",{user_id:W,team_id:G,admin:!0});return await Ke(X,Y,"member_roles",{member_id:$.id,role_id:1}),hK8(X,Y,W)}async function yH7(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 kH7="deco-team-",CH7="deco.cx",uK8=async(X,Y)=>{if(!X.get("meshContext").auth.user?.id)return X.json({error:"Unauthorized"},401);return Y()},gK8="https://sites-admin-mcp.decocache.com/api/mcp",lK8=()=>{let X=new O6;return X.use("*",uK8),X.get("/profile",async(Y)=>{let Q=Y.get("meshContext").auth.user?.email;if(!Q)return Y.json({error:"Unauthorized"},401);let J=jh0();if(!J)return Y.json({isDecoUser:!1});try{let W=await Mh0(J.supabaseUrl,J.serviceKey,Q);return Y.json({isDecoUser:W!==null})}catch{return Y.json({isDecoUser:!1})}}),X},Xp1=()=>{let X=new O6;return X.use("*",uK8),X.get("/",async(Y)=>{let Q=Y.get("meshContext").auth.user?.email;if(!Q)return Y.json({error:"Unauthorized"},401);let J=jh0();if(!J)return Y.json({sites:[]});let{supabaseUrl:W,serviceKey:Z}=J;try{let $=await Mh0(W,Z,Q);if(!$)return Y.json({sites:[]});let H=(await bL(W,Z,`members?user_id=eq.${encodeURIComponent($)}&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 bL(W,Z,`sites?team=in.(${H.join(",")})&select=name,domains,thumb_url&order=id`);return Y.json({sites:U})}catch($){return console.error("[deco-sites] GET error:",$),Y.json({error:"Failed to fetch sites"},502)}}),X.post("/connection",async(Y)=>{let G=Y.get("meshContext"),Q=G.auth.user?.email,J=Z6(G);if(!Q||!J)return Y.json({error:"Unauthorized"},401);let W;try{W=await Y.req.json()}catch{return Y.json({error:"Invalid request body"},400)}let{siteName:Z,orgId:$}=W;if(!Z||!$)return Y.json({error:"siteName and orgId are required"},400);let K=m7("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","=",$).executeTakeFirst())return Y.json({error:"Forbidden"},403);let U=jh0();if(!U)return Y.json({error:"Deco integration is not configured"},503);let{supabaseUrl:B,serviceKey:N}=U;try{let z=await Mh0(B,N,Q);if(!z)return Y.json({error:"No deco.cx account found for this user"},404);let O=await _H7(B,N,Z);if(!O)return Y.json({error:"Site not found or has no team"},404);if(!(await bL(B,N,`members?user_id=eq.${encodeURIComponent(z)}&team_id=eq.${O}&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 bH7(B,N,O),P=await BA({id:`pending-${K}`,title:`deco.cx \u2014 ${Z}`,connection_type:"HTTP",connection_url:gK8,connection_token:E}).catch(()=>null),q=P?.tools?.length?P.tools:null,j=P?.scopes?.length?P.scopes:null,M=await yH7(`${Z}.deco.site`),I=await G.storage.connections.create({id:K,organization_id:$,created_by:J,title:`deco.cx \u2014 ${Z}`,description:`Admin MCP for deco.cx site: ${Z}`,connection_type:"HTTP",connection_url:gK8,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:j});return Y.json({connId:I.id,icon:M})}catch(z){return console.error("[deco-sites] POST /connection error:",z),Y.json({error:"Failed to create connection"},500)}}),X};var Rh0=w(()=>{CX();CH();lG1();l9()});import{createHmac as xH7}from"crypto";import{mkdir as hH7,writeFile as gH7}from"fs/promises";import{dirname as uH7,join as cK8}from"path";function mH7(X){let Y=X.replace(/[^a-zA-Z0-9_-]/g,"_");return cK8(lH7,Y)}function dH7(X){return X.replace(/^\/+/,"").replace(/\.\./g,"")}function mK8(X,Y){let G=mH7(X),Q=dH7(Y);return cK8(G,Q)}function dK8(X,Y,G,Q,J){let W=u4().encryptionKey||"dev-secret",Z=`${X}:${Y}:${G}:${Q}`,$=xH7("sha256",W).update(Z).digest("hex");return J===$}function Sh0(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 lH7="./data/assets",Yp1=(X)=>{let Y=new O6,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 W=X.orgFromPath?`/api/${Q.req.param("org")??""}/dev-assets/`:`/api/dev-assets/${J}/`,Z=Q.req.path.replace(W,"");if(!Z)return Q.json({error:"Missing key"},400);let $=Q.req.query("expires"),K=Q.req.query("signature"),H=Q.req.query("method");if(!$||!K||H!=="GET")return Q.json({error:"Invalid or missing signature parameters"},400);let U=parseInt($,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(!dK8(J,Z,U,"GET",K))return Q.json({error:"Invalid signature"},403);let N=mK8(J,Z);try{let z=Bun.file(N);if(!await z.exists())return Q.json({error:"File not found"},404);let D=Sh0(Z);return new Response(z.stream(),{headers:{"Content-Type":D,"Content-Length":z.size.toString(),"Cache-Control":"private, max-age=3600"}})}catch(z){return console.error("Error serving file:",z),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 W=X.orgFromPath?`/api/${Q.req.param("org")??""}/dev-assets/`:`/api/dev-assets/${J}/`,Z=Q.req.path.replace(W,"");if(!Z)return Q.json({error:"Missing key"},400);let $=Q.req.query("expires"),K=Q.req.query("signature"),H=Q.req.query("method");if(!$||!K||H!=="PUT")return Q.json({error:"Invalid or missing signature parameters"},400);let U=parseInt($,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(!dK8(J,Z,U,"PUT",K))return Q.json({error:"Invalid signature"},403);let N=mK8(J,Z),z=uH7(N);try{await hH7(z,{recursive:!0});let O=await Q.req.arrayBuffer();return await gH7(N,Buffer.from(O)),Q.json({success:!0,key:Z})}catch(O){return console.error("Error saving file:",O),Q.json({error:"Failed to save file"},500)}}),Y};var Gp1=w(()=>{CX();l9()});var iK8="Payload Too Large",pK8,Qp1=(X)=>{let Y=X.onError||(()=>{let Q=new Response(iK8,{status:413});throw new c5(413,{res:Q})}),G=X.maxSize;return async function(J,W){if(!J.req.raw.body)return W();let Z=J.req.raw.headers.has("transfer-encoding"),$=J.req.raw.headers.has("content-length");if($&&!Z)return parseInt(J.req.raw.headers.get("content-length")||"0",10)>G?Y(J):W();let K=0,H=J.req.raw.body.getReader(),B={body:new ReadableStream({async start(N){try{for(;;){let{done:z,value:O}=await H.read();if(z)break;if(K+=O.length,K>G){N.error(new pK8(iK8));break}N.enqueue(O)}}finally{N.close()}}}),duplex:"half"};if(J.req.raw=new Request(J.req.raw,B),await W(),J.error instanceof pK8)J.res=await Y(J)}};var kh0=w(()=>{uw();pK8=class extends Error{constructor(X){super(X);this.name="BodyLimitError"}}});function Jp1(X){let Y=new O6;return Y.get("/kv/:key",async(G)=>{let J=G.get("meshContext").organization?.id;if(!J)return G.json({error:"Organization required"},400);let W=G.req.param("key"),Z=await X.kvStorage.get(J,W);if(Z===null)return G.json({error:"Not found"},404);return G.json({key:W,value:Z})}),Y.put("/kv/:key",Qp1({maxSize:cH7,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 W=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,W,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 W=G.req.param("key");return await X.kvStorage.delete(J,W),G.json({ok:!0})}),Y}var cH7=1048576;var Ch0=w(()=>{CX();kh0()});var Zp1=()=>{let X=new O6;return X.all("/",async(Y)=>{let G=await Us(Y.get("meshContext")),Q=new pH({enableJsonResponse:Y.req.raw.headers.get("Accept")?.includes("application/json")??!1});return await G.connect(Q),Q.handleRequest(Y.req.raw)}),X};var vh0=w(()=>{CX();Fs();Ks()});var Wp1=()=>{let X=new O6;return X.get("/threads/:threadId/outputs",async(Y)=>{let G=Y.get("meshContext");if(!G.auth?.user?.id)throw new c5(401,{message:"Unauthorized"});let J=G.organization?.slug;if(!J)throw new c5(400,{message:"Organization required"});let W=Y.req.param("threadId");if(!W||!/^[A-Za-z0-9_-]+$/.test(W))throw new c5(400,{message:"Invalid thread ID"});if(!await G.storage.threads.get(W))throw new c5(404,{message:"Thread not found"});let $=G.objectStorage;if(!$)return Y.json({objects:[]});let K=await $.list({prefix:`model-outputs/${W}/`,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 _h0=w(()=>{CX();uw()});function $p1(X){let Y=new O6;return Y.post("/trigger-callback",Qp1({maxSize:pH7,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),W=await X.tokenStorage.validateToken(J);if(!W)return G.json({error:"Invalid callback token"},401);let Z=iH7.safeParse(await G.req.json().catch(()=>null));if(!Z.success)return G.json({error:"Invalid body",details:Z.error.issues},400);let{type:$,data:K}=Z.data;return X.eventTriggerEngine.notifyEvents([{source:W.connectionId,type:$,data:K??{},organizationId:W.organizationId}]),G.json({ok:!0,type:$},202)}),Y}var iH7,pH7=1048576;var fh0=w(()=>{CX();kh0();K0();iH7=F.object({type:F.string().min(1),data:F.record(F.string(),F.unknown()).optional()})});var bh0=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:W}=await G.read();J?Q.close():Q.enqueue(W)},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+`
|
|
7435
|
+
`)});async function vK8(X){let Y=ui1(X),G=await X.req.json(),Q=q$8.safeParse(G);if(!Q.success)throw new c5(400,{message:Q.error.message});let{messages:J,...W}=Q.data,Z=J,{systemMessages:$,requestMessage:K}=H$8(Z);return{organization:Y,systemMessages:$,requestMessage:K,...W}}function qh0(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 _K8(X,Y){try{return await VW1(X,Y)}catch(G){if(G instanceof Yd)return null;return console.warn(`[decopilot] tier "${Y}" resolution failed:`,G),null}}async function fK8(X,Y){let[G,Q,J]=await Promise.all([VW1(X,Y??"smart"),_K8(X,"image"),_K8(X,"web_research")]);return{credentialId:G.credentialId,thinking:qh0(G),...Q?{image:qh0(Q)}:{},...J?{deepResearch:qh0(J)}:{}}}function Ah0(X){let{cancelBroadcast:Y,streamBuffer:G,runRegistry:Q,threadStorage:J}=X,W=new O6;return W.get("/:org/decopilot/allowed-models",async(Z)=>{try{let $=Z.get("meshContext"),K=ui1(Z),H=$.auth.user?.role,U=await QB($.db,K.id,H);return Z.json(ph6(U))}catch($){if(console.error("[decopilot:allowed-models] Error",$),$ instanceof c5)return Z.json({error:$.message},$.status);return Z.json({error:$ instanceof Error?$.message:"Internal error"},500)}}),W.post("/:org/decopilot/stream",async(Z)=>{try{let $=Z.get("meshContext"),{organization:K,tier:H,agent:U,systemMessages:B,requestMessage:N,temperature:z,memory:O,thread_id:D,branch:E,toolApprovalLevel:P,mode:q}=await vK8(Z),j=$.auth?.user?.id;if(!j)throw new c5(401,{message:"User ID is required"});let M=await fK8($,H),I=await QB($.db,K.id,$.auth.user?.role);if(I!==void 0&&!NT(I,M.credentialId,M.thinking.id))throw new c5(403,{message:"Model not allowed for your role"});let R=O?.windowSize??_R,C=D??O?.thread_id,_=await fL({messages:[...B,N],models:M,agent:U,temperature:z,toolApprovalLevel:P,mode:q,organizationId:K.id,userId:j,taskId:C,windowSize:R,branch:E??null},$,{runRegistry:Q,streamBuffer:G,cancelBroadcast:Y});return M6.capture({distinctId:j,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}}),_W1(ET({stream:_.stream,consumeSseStream:pz}))}catch($){if(console.error("[decopilot:stream] Error",$),$ instanceof Yd)return Z.json({error:$.message},400);if($ instanceof c5)return Z.json({error:$.message},$.status);if($ instanceof Error&&$.name==="AbortError")return console.warn("[decopilot:stream] Aborted",{error:$.message}),Z.json({error:"Request aborted"},400);return M6.captureException($),console.error("[decopilot:stream] Failed",{error:$ instanceof Error?$.message:JSON.stringify($),stack:$ instanceof Error?$.stack:void 0}),Z.json({error:$ instanceof Error?$.message:JSON.stringify($)},500)}}),W.post("/:org/decopilot/runtime/stream",async(Z)=>{try{let $=Z.get("meshContext"),{organization:K,tier:H,agent:U,systemMessages:B,requestMessage:N,temperature:z,memory:O,thread_id:D,branch:E,toolApprovalLevel:P,mode:q}=await vK8(Z),j=$.auth?.user?.id;if(!j)throw new c5(401,{message:"User ID is required"});let M=await fK8($,H),I=await QB($.db,K.id,$.auth.user?.role);if(I!==void 0&&!NT(I,M.credentialId,M.thinking.id))throw new c5(403,{message:"Model not allowed for your role"});let R=O?.windowSize??_R,C=D??O?.thread_id,_=await fL({messages:[...B,N],models:M,agent:U,temperature:z,toolApprovalLevel:P,mode:q,organizationId:K.id,userId:j,taskId:C,windowSize:R,branch:E??null},$,{runRegistry:Q,streamBuffer:G,cancelBroadcast:Y});return _W1(ET({stream:_.stream,consumeSseStream:pz}))}catch($){if(console.error("[decopilot:stream] Error",$),$ instanceof si1)return Z.json({error:$.message},409);if($ instanceof Yd)return Z.json({error:$.message},400);if($ instanceof c5)return Z.json({error:$.message},$.status);if($ instanceof Error&&$.name==="AbortError")return console.warn("[decopilot:stream] Aborted",{error:$.message}),Z.json({error:"Request aborted"},400);return console.error("[decopilot:stream] Failed",{error:$ instanceof Error?$.message:JSON.stringify($),stack:$ instanceof Error?$.stack:void 0}),Z.json({error:$ instanceof Error?$.message:JSON.stringify($)},500)}}),W.post("/:org/decopilot/cancel/:threadId",async(Z)=>{let{taskId:$,thread:K,organization:H}=await P$8(Z);if((await Q.execute({type:"CANCEL",taskId:$})).some((B)=>B.event.type==="RUN_FAILED"))return Z.json({cancelled:!0});if(Y.broadcast($),K.status==="in_progress")console.warn("[decopilot:cancel] Ghost run detected, force-failing",{taskId:$}),Q.execute({type:"FORCE_FAIL",taskId:$,reason:"ghost",orgId:H.id}).catch((B)=>{console.error("[decopilot:cancel] Failed to force-fail ghost thread",{taskId:$,err:B})});return Z.json({cancelled:!0,async:!0},202)}),W.get("/:org/decopilot/attach/:threadId",async(Z)=>{try{let{taskId:$,thread:K,organization:H}=await Dh0(Z);if(Q.isRunning($)){let P=await G.createReplayStream($);if(!P)return Z.body(null,204);let q=S31({execute:async({writer:j})=>{let M=P.getReader();try{while(!0){let{done:I,value:R}=await M.read();if(I)break;j.write(R)}}finally{M.releaseLock()}}});return _W1(ET({stream:q,consumeSseStream:pz}))}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($,H.id),Z.body(null,204);let N=di1.safeParse(K.run_config);if(!N.success)return await J.forceFailIfInProgress($,H.id),Z.body(null,204);let z=N.data;console.log("[decopilot:attach] orphan resume \u2014 persisted config",{taskId:$,thinkingModelId:z.models.thinking.id,hasFast:!!z.models.fast,hasCoding:!!z.models.coding,hasImage:!!z.models.image,hasDeepResearch:!!z.models.deepResearch,mode:z.mode});let O=await QB(U.db,H.id,U.auth.user?.role);if(O!==void 0&&!NT(O,z.models.credentialId,z.models.thinking.id))throw new c5(403,{message:"Model not allowed for your role"});if(!await J.claimOrphanedRun($,H.id,Jd()))return Z.body(null,204);let E=await fL({messages:[],models:ci1(z.models),agent:z.agent,temperature:z.temperature,toolApprovalLevel:z.toolApprovalLevel,mode:z.mode,organizationId:H.id,userId:B,taskId:$,windowSize:z.windowSize,isResume:!0},U,{runRegistry:Q,streamBuffer:G,cancelBroadcast:Y});return _W1(ET({stream:E.stream,consumeSseStream:pz}))}catch($){if($ instanceof c5)throw $;return console.error("[decopilot:attach] Error",$),Z.body(null,500)}}),W}var bK8=w(()=>{Kh0();vX();hX();CX();uw();fR();Hh0();RW1();H31();wh0();A$8();vW1();Ph0();CK8();ai1()});var yK8=w(()=>{bK8()});var ei1=()=>{let X=new O6;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 W=G.organization?.id;if(!W)return Y.json({error:"Organization context required"},403);let Z=await G.storage.connections.findById(Q,W);if(!Z)return Y.json({error:"Connection not found"},404);let $=await Y.req.json();if(!$.accessToken)return Y.json({error:"accessToken is required"},400);if($.tokenEndpoint){let z;try{z=new URL($.tokenEndpoint)}catch{return Y.json({error:"tokenEndpoint must be a valid URL"},400)}if(z.protocol!=="http:"&&z.protocol!=="https:")return Y.json({error:"tokenEndpoint must be an http(s) URL"},400)}let K=$.expiresIn?new Date(Date.now()+$.expiresIn*1000):null,H=$.tokenEndpoint??null;if(H?.includes("/oauth-proxy/")&&Z.connection_url)try{let z=await lS1(Z.connection_url);if(z)try{let O=new URL(z);if(O.protocol==="http:"||O.protocol==="https:")H=z}catch{}}catch{}let U=new I3(G.db,G.vault),B={connectionId:Q,accessToken:$.accessToken,refreshToken:$.refreshToken??null,scope:$.scope??null,expiresAt:K,clientId:$.clientId??null,clientSecret:$.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 W=G.organization?.id;if(!W)return Y.json({error:"Organization context required"},403);if(!await G.storage.connections.findById(Q,W))return Y.json({error:"Connection not found"},404);return await new I3(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 W=G.organization?.id;if(!W)return Y.json({error:"Organization context required"},403);if(!await G.storage.connections.findById(Q,W))return Y.json({error:"Connection not found"},404);let $=new I3(G.db,G.vault),K=await $.get(Q);if(!K)return Y.json({hasToken:!1,isExpired:!0,canRefresh:!1});let H=$.isExpired(K),U=!!K.refreshToken&&!!K.tokenEndpoint;return Y.json({hasToken:!0,isExpired:H,canRefresh:U,expiresAt:K.expiresAt})}),X};var Th0=w(()=>{CX();Ak0();tR()});var SH7,xK8=(X={})=>async(Y,G)=>{await G();let J=(Y.req.matchedRoutes??[]).find((Z)=>Z.method!=="ALL"&&!Z.path.endsWith("*"));if(!J)return;if(SH7.has(J.path))return;if(J.path.startsWith("/api/:org/"))return;if(X.mountPath!==void 0&&J.basePath!==X.mountPath)return;let W=Y.get("meshContext");console.log("deprecated route",{route:Y.req.routePath,method:Y.req.method,org:W?.organization?.slug,user:W?.auth?.user?.id,ua:Y.req.header("user-agent")})},uT,DK=(X)=>xK8(X);var Ih0=w(()=>{SH7=new Set(["/api/deco-sites/profile"]),uT=xK8()});var $e=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,W=await J.selectFrom("organization").select(["id","slug","name"]).where("slug","=",G).executeTakeFirst();if(!W)return X.json({error:`organization "${G}" not found`},404);let Z=Q.auth?.user?.id,$;if(Z){let K=await J.selectFrom("member").select(["role"]).where("userId","=",Z).where("organizationId","=",W.id).executeTakeFirst();if(!K)return X.json({error:"forbidden: not a member of organization"},403);$=K.role}if(Q.organization={id:W.id,slug:W.slug,name:W.name,role:$},Q.access.setOrganizationId(W.id),Q.access.setRole($),Q.storage.threads.setOrganizationId(W.id),!Q.objectStorage){let K=$r();Q.objectStorage=K?gS1(K,W.id):new mZ1(W.id,Q.baseUrl)}return await Y()};var Vh0=w(()=>{Ok0();bV1()});async function bL(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 Ke(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 W=await J.json();if(!W[0])throw Error("Supabase POST returned no rows");return W[0]}function jh0(){let X=u4(),Y=X.decoSupabaseUrl,G=X.decoSupabaseServiceKey;if(!Y||!G)return null;return{supabaseUrl:Y,serviceKey:G}}async function Mh0(X,Y,G){return(await bL(X,Y,`profiles?email=eq.${encodeURIComponent(G)}&select=user_id`))[0]?.user_id??null}async function hK8(X,Y,G){let Q=await bL(X,Y,`api_key?user_id=eq.${encodeURIComponent(G)}&select=id&limit=1`);if(Q[0]?.id)return Q[0].id;return(await Ke(X,Y,"api_key",{user_id:G})).id}function vH7(X){return`${kH7}${X}@${CH7}`}async function _H7(X,Y,G){return(await bL(X,Y,`sites?name=eq.${encodeURIComponent(G)}&select=team&limit=1`))[0]?.team??null}async function fH7(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 W=await Q.text().catch(()=>Q.statusText);throw console.error(`[deco-sites] Auth admin create user error (${Q.status}): ${W}`),Error(`Failed to create auth user (${Q.status})`)}return(await Q.json()).id}async function bH7(X,Y,G){let Q=vH7(G),J=await bL(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 bL(X,Y,`members?user_id=eq.${encodeURIComponent(K)}&team_id=eq.${G}&select=id&limit=1`))[0]?.id){let U=await Ke(X,Y,"members",{user_id:K,team_id:G,admin:!0});await Ke(X,Y,"member_roles",{member_id:U.id,role_id:1})}return hK8(X,Y,K)}let W=await fH7(X,Y,Q);if(!(await bL(X,Y,`profiles?user_id=eq.${encodeURIComponent(W)}&select=user_id&limit=1`))[0])await Ke(X,Y,"profiles",{user_id:W,email:Q,name:`Mesh Service Account (team ${G})`});let $=await Ke(X,Y,"members",{user_id:W,team_id:G,admin:!0});return await Ke(X,Y,"member_roles",{member_id:$.id,role_id:1}),hK8(X,Y,W)}async function yH7(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 kH7="deco-team-",CH7="deco.cx",uK8=async(X,Y)=>{if(!X.get("meshContext").auth.user?.id)return X.json({error:"Unauthorized"},401);return Y()},gK8="https://sites-admin-mcp.decocache.com/api/mcp",lK8=()=>{let X=new O6;return X.use("*",uK8),X.get("/profile",async(Y)=>{let Q=Y.get("meshContext").auth.user?.email;if(!Q)return Y.json({error:"Unauthorized"},401);let J=jh0();if(!J)return Y.json({isDecoUser:!1});try{let W=await Mh0(J.supabaseUrl,J.serviceKey,Q);return Y.json({isDecoUser:W!==null})}catch{return Y.json({isDecoUser:!1})}}),X},Xp1=()=>{let X=new O6;return X.use("*",uK8),X.get("/",async(Y)=>{let Q=Y.get("meshContext").auth.user?.email;if(!Q)return Y.json({error:"Unauthorized"},401);let J=jh0();if(!J)return Y.json({sites:[]});let{supabaseUrl:W,serviceKey:Z}=J;try{let $=await Mh0(W,Z,Q);if(!$)return Y.json({sites:[]});let H=(await bL(W,Z,`members?user_id=eq.${encodeURIComponent($)}&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 bL(W,Z,`sites?team=in.(${H.join(",")})&select=name,domains,thumb_url&order=id`);return Y.json({sites:U})}catch($){return console.error("[deco-sites] GET error:",$),Y.json({error:"Failed to fetch sites"},502)}}),X.post("/connection",async(Y)=>{let G=Y.get("meshContext"),Q=G.auth.user?.email,J=Z6(G);if(!Q||!J)return Y.json({error:"Unauthorized"},401);let W;try{W=await Y.req.json()}catch{return Y.json({error:"Invalid request body"},400)}let{siteName:Z,orgId:$}=W;if(!Z||!$)return Y.json({error:"siteName and orgId are required"},400);let K=m7("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","=",$).executeTakeFirst())return Y.json({error:"Forbidden"},403);let U=jh0();if(!U)return Y.json({error:"Deco integration is not configured"},503);let{supabaseUrl:B,serviceKey:N}=U;try{let z=await Mh0(B,N,Q);if(!z)return Y.json({error:"No deco.cx account found for this user"},404);let O=await _H7(B,N,Z);if(!O)return Y.json({error:"Site not found or has no team"},404);if(!(await bL(B,N,`members?user_id=eq.${encodeURIComponent(z)}&team_id=eq.${O}&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 bH7(B,N,O),P=await BA({id:`pending-${K}`,title:`deco.cx \u2014 ${Z}`,connection_type:"HTTP",connection_url:gK8,connection_token:E}).catch(()=>null),q=P?.tools?.length?P.tools:null,j=P?.scopes?.length?P.scopes:null,M=await yH7(`${Z}.deco.site`),I=await G.storage.connections.create({id:K,organization_id:$,created_by:J,title:`deco.cx \u2014 ${Z}`,description:`Admin MCP for deco.cx site: ${Z}`,connection_type:"HTTP",connection_url:gK8,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:j});return Y.json({connId:I.id,icon:M})}catch(z){return console.error("[deco-sites] POST /connection error:",z),Y.json({error:"Failed to create connection"},500)}}),X};var Rh0=w(()=>{CX();CH();lG1();l9()});import{createHmac as xH7}from"crypto";import{mkdir as hH7,writeFile as gH7}from"fs/promises";import{dirname as uH7,join as cK8}from"path";function mH7(X){let Y=X.replace(/[^a-zA-Z0-9_-]/g,"_");return cK8(lH7,Y)}function dH7(X){return X.replace(/^\/+/,"").replace(/\.\./g,"")}function mK8(X,Y){let G=mH7(X),Q=dH7(Y);return cK8(G,Q)}function dK8(X,Y,G,Q,J){let W=u4().encryptionKey||"dev-secret",Z=`${X}:${Y}:${G}:${Q}`,$=xH7("sha256",W).update(Z).digest("hex");return J===$}function Sh0(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 lH7="./data/assets",Yp1=(X)=>{let Y=new O6,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 W=X.orgFromPath?`/api/${Q.req.param("org")??""}/dev-assets/`:`/api/dev-assets/${J}/`,Z=Q.req.path.replace(W,"");if(!Z)return Q.json({error:"Missing key"},400);let $=Q.req.query("expires"),K=Q.req.query("signature"),H=Q.req.query("method");if(!$||!K||H!=="GET")return Q.json({error:"Invalid or missing signature parameters"},400);let U=parseInt($,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(!dK8(J,Z,U,"GET",K))return Q.json({error:"Invalid signature"},403);let N=mK8(J,Z);try{let z=Bun.file(N);if(!await z.exists())return Q.json({error:"File not found"},404);let D=Sh0(Z);return new Response(z.stream(),{headers:{"Content-Type":D,"Content-Length":z.size.toString(),"Cache-Control":"private, max-age=3600"}})}catch(z){return console.error("Error serving file:",z),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 W=X.orgFromPath?`/api/${Q.req.param("org")??""}/dev-assets/`:`/api/dev-assets/${J}/`,Z=Q.req.path.replace(W,"");if(!Z)return Q.json({error:"Missing key"},400);let $=Q.req.query("expires"),K=Q.req.query("signature"),H=Q.req.query("method");if(!$||!K||H!=="PUT")return Q.json({error:"Invalid or missing signature parameters"},400);let U=parseInt($,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(!dK8(J,Z,U,"PUT",K))return Q.json({error:"Invalid signature"},403);let N=mK8(J,Z),z=uH7(N);try{await hH7(z,{recursive:!0});let O=await Q.req.arrayBuffer();return await gH7(N,Buffer.from(O)),Q.json({success:!0,key:Z})}catch(O){return console.error("Error saving file:",O),Q.json({error:"Failed to save file"},500)}}),Y};var Gp1=w(()=>{CX();l9()});var iK8="Payload Too Large",pK8,Qp1=(X)=>{let Y=X.onError||(()=>{let Q=new Response(iK8,{status:413});throw new c5(413,{res:Q})}),G=X.maxSize;return async function(J,W){if(!J.req.raw.body)return W();let Z=J.req.raw.headers.has("transfer-encoding"),$=J.req.raw.headers.has("content-length");if($&&!Z)return parseInt(J.req.raw.headers.get("content-length")||"0",10)>G?Y(J):W();let K=0,H=J.req.raw.body.getReader(),B={body:new ReadableStream({async start(N){try{for(;;){let{done:z,value:O}=await H.read();if(z)break;if(K+=O.length,K>G){N.error(new pK8(iK8));break}N.enqueue(O)}}finally{N.close()}}}),duplex:"half"};if(J.req.raw=new Request(J.req.raw,B),await W(),J.error instanceof pK8)J.res=await Y(J)}};var kh0=w(()=>{uw();pK8=class extends Error{constructor(X){super(X);this.name="BodyLimitError"}}});function Jp1(X){let Y=new O6;return Y.get("/kv/:key",async(G)=>{let J=G.get("meshContext").organization?.id;if(!J)return G.json({error:"Organization required"},400);let W=G.req.param("key"),Z=await X.kvStorage.get(J,W);if(Z===null)return G.json({error:"Not found"},404);return G.json({key:W,value:Z})}),Y.put("/kv/:key",Qp1({maxSize:cH7,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 W=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,W,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 W=G.req.param("key");return await X.kvStorage.delete(J,W),G.json({ok:!0})}),Y}var cH7=1048576;var Ch0=w(()=>{CX();kh0()});var Zp1=()=>{let X=new O6;return X.all("/",async(Y)=>{let G=await Us(Y.get("meshContext")),Q=new pH({enableJsonResponse:Y.req.raw.headers.get("Accept")?.includes("application/json")??!1});return await G.connect(Q),Q.handleRequest(Y.req.raw)}),X};var vh0=w(()=>{CX();Fs();Ks()});var Wp1=()=>{let X=new O6;return X.get("/threads/:threadId/outputs",async(Y)=>{let G=Y.get("meshContext");if(!G.auth?.user?.id)throw new c5(401,{message:"Unauthorized"});let J=G.organization?.slug;if(!J)throw new c5(400,{message:"Organization required"});let W=Y.req.param("threadId");if(!W||!/^[A-Za-z0-9_-]+$/.test(W))throw new c5(400,{message:"Invalid thread ID"});if(!await G.storage.threads.get(W))throw new c5(404,{message:"Thread not found"});let $=G.objectStorage;if(!$)return Y.json({objects:[]});let K=await $.list({prefix:`model-outputs/${W}/`,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 _h0=w(()=>{CX();uw()});function $p1(X){let Y=new O6;return Y.post("/trigger-callback",Qp1({maxSize:pH7,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),W=await X.tokenStorage.validateToken(J);if(!W)return G.json({error:"Invalid callback token"},401);let Z=iH7.safeParse(await G.req.json().catch(()=>null));if(!Z.success)return G.json({error:"Invalid body",details:Z.error.issues},400);let{type:$,data:K}=Z.data;return X.eventTriggerEngine.notifyEvents([{source:W.connectionId,type:$,data:K??{},organizationId:W.organizationId}]),G.json({ok:!0,type:$},202)}),Y}var iH7,pH7=1048576;var fh0=w(()=>{CX();kh0();K0();iH7=F.object({type:F.string().min(1),data:F.record(F.string(),F.unknown()).optional()})});var bh0=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:W}=await G.read();J?Q.close():Q.enqueue(W)},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+`
|
|
7436
7436
|
`),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 yh0=()=>{};var Kp1=()=>{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 Kp1=()=>Y,Y};var xh0=()=>{};var nK8=w(()=>{yh0();xh0()});var tK8,nH7=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()}},tH7,lT=(X,Y,G)=>{let{readable:Q,writable:J}=new TransformStream,W=new tK8(J,Q);if(Kp1())X.req.raw.signal.addEventListener("abort",()=>{if(!W.closed)W.abort()});return tH7.set(W.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"),nH7(W,Y,G),X.newResponse(W.responseReadable)};var aK8=w(()=>{lV1();yh0();xh0();tK8=class extends bh0{constructor(X,Y){super(X,Y)}async writeSSE(X){let G=(await FG1(X.data,uV1.Stringify,!1,{})).split(/\r\n|\r|\n/).map((J)=>{return`data: ${J}`}).join(`
|
|
7437
7437
|
`);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(`
|
|
7438
7438
|
`)+`
|