feat: add MCP tool progress update support in TUI and SDK mode

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
This commit is contained in:
tanzhenxin 2026-02-08 15:48:13 +08:00
parent 36931e1eab
commit 5ebbceea65
14 changed files with 724 additions and 25 deletions

View file

@ -12,6 +12,7 @@ import type {
SessionMetrics,
ServerGeminiStreamEvent,
TaskResultDisplay,
McpToolProgressData,
} from '@qwen-code/qwen-code-core';
import {
GeminiEventType,
@ -82,6 +83,18 @@ export interface MessageEmitter {
parentToolUseId?: string | null,
): void;
emitSystemMessage(subtype: string, data?: unknown): void;
/**
* Emits a tool progress stream event.
* Only emits when the adapter supports partial messages (stream mode).
* In non-streaming mode, this is a no-op.
*
* @param request - Tool call request info
* @param progress - Structured MCP progress data
*/
emitToolProgress(
request: ToolCallRequestInfo,
progress: McpToolProgressData,
): void;
}
/**
@ -1051,6 +1064,22 @@ export abstract class BaseJsonOutputAdapter {
this.emitMessageImpl(systemMessage);
}
/**
* Emits a tool progress stream event.
* Default implementation is a no-op. StreamJsonOutputAdapter overrides this
* to emit stream events when includePartialMessages is enabled.
*
* @param _request - Tool call request info
* @param _progress - Structured MCP progress data
*/
emitToolProgress(
_request: ToolCallRequestInfo,
_progress: McpToolProgressData,
): void {
// No-op in base class. Only StreamJsonOutputAdapter emits tool progress
// as stream events when includePartialMessages is enabled.
}
/**
* Builds a result message from options.
* Helper method used by both emitResult implementations.