# 工具超时自动回复设计方案

## 1. 背景与目标
在 MCP 交互中，客户端（如 Claude Desktop）通常会对工具调用设置 5 分钟左右的超时限制。如果用户在 Web UI 中长时间未提交反馈，客户端会抛出 `MCP error -32001: Request timed out`，导致会话异常中断。

本方案旨在通过引入**自动回复**机制，在客户端超时前主动向 AI 返回一段预设的系统提醒，从而维持连接并引导 AI 主动询问用户。

## 2. 配置项 (环境变量)

*   **`MCP_AUTO_REPLY_TIMEOUT`**: 
    *   **类型**: 整数（分钟）
    *   **说明**: 触发自动回复的超时时间。若设置为 `0`，则禁用此功能。
    *   **建议**: 设置为 `4` (4分钟)，以确保在客户端断开前完成回复。

## 3. 自动回复内容
当触发超时时，系统将向 AI 返回以下硬编码的内容：

> `[系统自动回复] 用户未在预定时间内输入。请告知用户工作仍在进行，询问是否需要更多时间或协助，并**必须再次调用**本工具以维持连接。`

## 4. 技术实现细节

### A. 会话模型修改 (`WebFeedbackSession`)
在 `wait_for_feedback` 方法中：
1.  读取 `MCP_AUTO_REPLY_TIMEOUT` 环境变量。
2.  若值 > 0，使用 `asyncio.wait_for` 包装等待逻辑。
3.  在捕获到 `asyncio.TimeoutError` 后：
    *   记录日志：`"会话已到达自动回复超时阈值"`。
    *   将结果中的 `interactive_feedback` 设为上述预设提醒内容。
    *   将会话状态更新为 `SessionStatus.TIMEOUT`。

### B. UI 反馈逻辑
1.  (可选) 当触发自动回复时，通过 WebSocket 向 Web UI 发送通知，告知用户“系统已自动回复以保持连接活跃”。

## 5. 交互流程
1.  **AI 启动等待**: 调用 `interactive_feedback` 工具，Web UI 开启。
2.  **计时触发**: 用户在 4 分钟内未操作。
3.  **自动回复**: 服务器向 AI 返回预设提醒。
4.  **AI 响应**: AI 向用户确认状态，并根据指令**再次调用**工具，开启新一轮的等待。
5.  **无缝体验**: 用户可以在 Web UI 中继续操作，下一轮提交将由新的工具调用接收。
