From e70587a0a10722f19eb9774c7efecec7deeba878 Mon Sep 17 00:00:00 2001 From: Hoshino-Yumetsuki Date: Sun, 16 Aug 2026 23:29:51 +0800 Subject: [PATCH] fix(agent): avoid context timer during MCP shutdown Use a non-context Node timer for the MCP client close deadline so service disposal does not create a Cordis effect after the context becomes inactive. Constraint: Preserve the five-second close bound without keeping Node alive Rejected: Revert progressive MCP disclosure | broader unrelated behavior loss Confidence: high Scope-risk: narrow --- packages/extension-agent/src/service/mcp.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/extension-agent/src/service/mcp.ts b/packages/extension-agent/src/service/mcp.ts index feecf695b..d2283f058 100644 --- a/packages/extension-agent/src/service/mcp.ts +++ b/packages/extension-agent/src/service/mcp.ts @@ -1,5 +1,7 @@ /** @module service/mcp */ +import { setTimeout as wait } from 'node:timers/promises' + import { Context } from 'koishi' import { Client } from '@modelcontextprotocol/sdk/client/index.js' import { ToolListChangedNotificationSchema } from '@modelcontextprotocol/sdk/types.js' @@ -541,9 +543,7 @@ export class ChatLunaAgentMcpService { client.onerror = undefined await Promise.race([ client.close().catch(() => {}), - new Promise((resolve) => - this.ctx.setTimeout(resolve, 5000) - ) + wait(5000, undefined, { ref: false }) ]) } }