mirror of
https://github.com/bytedance/deer-flow.git
synced 2026-10-26 13:16:24 +00:00
* fix(mcp): close thread-scoped MCP sessions on thread deletion Deleting a thread removed its filesystem data, checkpoints, runs, events, feedback, metadata and browser session, but never closed its persistent MCP sessions. MCPSessionPool.close_scope() had no production caller at all, so a recreated thread id under the same user could reuse stale stateful MCP server state, and the leaked owner task plus subprocess kept holding memory and file descriptors. Add MCPSessionPool.close_thread_scope(user_id, thread_id) and call it from the reserved deletion path under the same best-effort policy as the neighbouring cleanups. It matches every incarnation of the thread -- the legacy user:thread scope and any v2:[user, thread, incarnation] scope -- because a deletion cannot reliably read the current incarnation: the record may predate incarnation tracking, and a new incarnation can be minted concurrently. close_scope() is unchanged for callers that already hold one exact key. Add mcp_scope_belongs_to_thread() to own the matching rule, and hoist the v2: prefix into a shared constant so the encoder and matcher cannot drift. Refs #5188 * test(mcp): bind owner identity in thread cleanup checks --------- Co-authored-by: Willem Jiang <willem.jiang@gmail.com>