From dd89fbbb83efc2445a48697710cf0ed1e613c8c5 Mon Sep 17 00:00:00 2001 From: wenshao Date: Sat, 4 Apr 2026 15:19:26 +0800 Subject: [PATCH 1/2] feat: add MCP Auto-Reconnect as item 70 (from PR #2866 analysis) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit New P2 item from QwenLM/qwen-code#2866 upstream backports analysis: - Claude Code: MAX_ERRORS_BEFORE_RECONNECT = 3, SSE auto-reconnect, session expired (404) auto-refresh - Qwen Code: no MCP reconnect mechanism - Source: services/mcp/client.ts L1225-L1357 Also confirmed PR #2866 items already covered: - Compress orphan funcCall → item 1 (compression) enhancement - API-round grouping → item 1 grouping.ts (63 lines) - Follow-up suggestions → item 3 (Speculation) Co-Authored-By: Claude Opus 4.6 (1M context) --- .../qwen-code-improvement-report-p2.md | 21 +++++++++++++++++++ .../qwen-code-improvement-report.md | 1 + 2 files changed, 22 insertions(+) diff --git a/docs/comparison/qwen-code-improvement-report-p2.md b/docs/comparison/qwen-code-improvement-report-p2.md index 6f715ac..541c521 100644 --- a/docs/comparison/qwen-code-improvement-report-p2.md +++ b/docs/comparison/qwen-code-improvement-report-p2.md @@ -770,3 +770,24 @@ **意义**:与外部服务(GitHub/Slack/Linear)的集成需要 OAuth 管理。 **缺失后果**:手动配置 token + 手动刷新——容易过期。 **改进收益**:托管式 OAuth——一键连接,自动刷新,401 自动重试。 + +--- + + + +### 70. MCP Auto-Reconnect(P2) + +**思路**:MCP 服务器连接不稳定(网络抖动、服务重启)时自动重连——连续 3 次错误后关闭连接并重建。SSE 传输层内置重连(maxRetries: 2),session 过期(404)时自动刷新。 + +**Claude Code 源码索引**: + +| 文件 | 关键函数/常量 | +|------|-------------| +| `services/mcp/client.ts` (L1225-L1357) | `MAX_ERRORS_BEFORE_RECONNECT = 3`、`consecutiveConnectionErrors` 计数、SSE reconnection exhausted 检测 | +| `services/mcp/types.ts` (L211) | `reconnectAttempt?: number` | + +**Qwen Code 修改方向**:`mcp-client.ts` 的 `McpClient` 类新增 `consecutiveErrors` 计数;`onError` 回调中累计错误数,达到 3 次时 `close()` + 重新 `connect()`。 + +**意义**:MCP 工具是 Agent 扩展能力的核心——连接中断会导致 Agent 丧失关键工具能力。 +**缺失后果**:MCP 服务器短暂不可用 → Agent 整个 session 的 MCP 工具失效——需手动重启。 +**改进收益**:瞬态故障自动恢复——用户无感知,Agent 持续使用 MCP 工具。 diff --git a/docs/comparison/qwen-code-improvement-report.md b/docs/comparison/qwen-code-improvement-report.md index 0c495e9..d754708 100644 --- a/docs/comparison/qwen-code-improvement-report.md +++ b/docs/comparison/qwen-code-improvement-report.md @@ -82,6 +82,7 @@ | **P2** | Bash File Watcher — 检测 formatter/linter 修改已读文件,防止 stale-edit [↓](./qwen-code-improvement-report-p2.md#item-49) | 缺失 | 小 | — | | **P2** | /batch 并行操作 — 编排大规模并行变更(多文件/多任务)[↓](./qwen-code-improvement-report-p2.md#item-50) | 缺失 | 中 | — | | **P2** | Chrome Extension — 调试 live web 应用(读 DOM/Console/Network)[↓](./qwen-code-improvement-report-p2.md#item-51) | 缺失 | 中 | — | +| **P2** | MCP Auto-Reconnect — 连续 3 次错误自动重连 + SSE 断线恢复 [↓](./qwen-code-improvement-report-p2.md#item-70) | 缺失 | 小 | — | | **P1** | Structured Output — `--json-schema` 强制 JSON Schema 验证输出 [↓](./qwen-code-improvement-report-p0-p1.md#item-17) | 缺失 | 小 | — | | **P1** | Agent SDK 增强 — Python SDK + 流式回调 + 工具审批回调(Qwen 仅 TS SDK)[↓](./qwen-code-improvement-report-p0-p1.md#item-18) | 仅 TypeScript SDK | 中 | — | | **P1** | Bare Mode — `--bare` 跳过所有自动发现,CI/脚本最快启动 [↓](./qwen-code-improvement-report-p0-p1.md#item-19) | 缺失 | 小 | — | From 3ece901f304d927a60d8a1fe5c7b0349889da559 Mon Sep 17 00:00:00 2001 From: wenshao Date: Sat, 4 Apr 2026 15:21:29 +0800 Subject: [PATCH 2/2] feat: expand terminal rendering item + add MCP auto-reconnect MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Item 54 expanded from "Fullscreen Rendering" to full "终端渲染优化": - DEC 2026 synchronized output (BSU/ESU atomic rendering) - Cell-level differential rendering (ink/log-update.ts) - Double buffering (frontFrame/backFrame swap) - DECSTBM hardware scroll - CharCache/StylePool/CharPool caching (16K cap) - Damage tracking (dirty rectangle) - Render throttling (~60fps via queueMicrotask) - Alt-screen fullscreen mode Qwen Code has only message-splitting (useGeminiStream.ts L632-634). Claude Code has 8-layer anti-flicker in customized Ink engine (~7000 LOC). Item 70: MCP Auto-Reconnect (from PR #2866 analysis) Co-Authored-By: Claude Opus 4.6 (1M context) --- .../qwen-code-improvement-report-p2.md | 22 +++++++++++++------ .../qwen-code-improvement-report.md | 2 +- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/docs/comparison/qwen-code-improvement-report-p2.md b/docs/comparison/qwen-code-improvement-report-p2.md index 541c521..5eef4f1 100644 --- a/docs/comparison/qwen-code-improvement-report-p2.md +++ b/docs/comparison/qwen-code-improvement-report-p2.md @@ -673,21 +673,29 @@ -### 54. Fullscreen Rendering(P2) +### 54. 终端渲染优化(P2) -**思路**:Alt-screen 渲染 + 虚拟滚动缓冲区——完全消除终端闪烁。通过 `CLAUDE_CODE_NO_FLICKER=1` 启用。 +**思路**:Claude Code 定制了 Ink 渲染引擎(`ink/` 目录 ~7,000 行),实现 8 层防闪烁机制。Qwen Code 使用标准 Ink 库仅有消息拆分一种防闪烁手段。核心技术:DEC 2026 同步输出(BSU/ESU 包裹所有输出,终端原子渲染)+ cell-level 差分(仅写变化的 cell)+ 双缓冲(frontFrame/backFrame swap)。 **Claude Code 源码索引**: | 文件 | 关键函数/常量 | |------|-------------| -| `utils/fullscreen.ts` | alt-screen 切换 + 虚拟化 | +| `ink/terminal.ts` (248行) | DEC 2026 检测(`CSI ?2026h/l`)、`writeDiffToTerminal()` | +| `ink/log-update.ts` (773行) | cell-level diff 引擎、DECSTBM 硬件滚动 | +| `ink/renderer.ts` (178行) | `frontFrame`/`backFrame` 双缓冲、`prevFrameContaminated` | +| `ink/output.ts` (797行) | Damage Tracking(dirty rectangle)、CharCache(16K cap) | +| `ink/screen.ts` (1486行) | StylePool、CharPool、HyperlinkPool | +| `ink/ink.tsx` (1722行) | 渲染节流(~60fps via `queueMicrotask`)、pool 管理 | +| `utils/fullscreen.ts` | alt-screen 切换(`CLAUDE_CODE_NO_FLICKER=1`) | -**Qwen Code 修改方向**:`AppContainer.tsx` 新增 fullscreen 模式;通过 ANSI alt-screen sequences 切换;Ink `` 虚拟化长内容。 +**Qwen Code 修改方向**:短期——对 Ink 的 `render()` 包裹 BSU/ESU 序列实现同步输出(最高性价比);中期——引入 cell-level diff(参考 `ink/log-update.ts`)替代 Ink 默认的全量 rewrite。 -**意义**:终端闪烁是低性能终端上的常见 UX 问题。 -**缺失后果**:长输出时终端闪烁——视觉体验差。 -**改进收益**:alt-screen 无闪烁渲染——视觉稳定。 +**意义**:终端渲染质量直接决定用户对工具的第一感受——闪烁 = 不专业。 +**缺失后果**:流式输出和工具执行时终端闪烁——尤其在 tmux/低性能终端上明显。 +**改进收益**:8 层防闪烁机制——从"能用"到"丝滑"的 UX 跨越。 + +**相关文章**:[终端渲染与防闪烁](../tools/claude-code/11-terminal-rendering.md) --- diff --git a/docs/comparison/qwen-code-improvement-report.md b/docs/comparison/qwen-code-improvement-report.md index d754708..2bc53fa 100644 --- a/docs/comparison/qwen-code-improvement-report.md +++ b/docs/comparison/qwen-code-improvement-report.md @@ -91,7 +91,7 @@ | **P1** | GitLab CI/CD — 官方 GitLab pipeline 集成 [↓](./qwen-code-improvement-report-p0-p1.md#item-22) | 缺失 | 中 | — | | **P2** | /effort — 设置模型 effort 级别(○ 低 / ◐ 中 / ● 高)[↓](./qwen-code-improvement-report-p2.md#item-52) | 缺失 | 小 | — | | **P2** | Status Line 自定义 — shell 脚本在状态栏展示自定义信息 [↓](./qwen-code-improvement-report-p2.md#item-53) | 缺失 | 小 | — | -| **P2** | Fullscreen Rendering — alt-screen 无闪烁渲染 + 虚拟滚动缓冲 [↓](./qwen-code-improvement-report-p2.md#item-54) | 缺失 | 中 | — | +| **P2** | 终端渲染优化 — DEC 2026 同步输出 + 差分渲染 + 双缓冲 + DECSTBM 硬件滚动 + 缓存池化 + alt-screen [↓](./qwen-code-improvement-report-p2.md#item-54) | 仅消息拆分防闪烁 | 大 | — | | **P2** | Image [Image #N] Chips — 粘贴图片后生成位置引用标记 [↓](./qwen-code-improvement-report-p2.md#item-55) | 缺失 | 小 | — | | **P2** | --max-turns — headless 模式最大 turn 数限制 [↓](./qwen-code-improvement-report-p2.md#item-56) | 缺失 | 小 | — | | **P2** | --max-budget-usd — headless 模式 USD 花费上限 [↓](./qwen-code-improvement-report-p2.md#item-57) | 缺失 | 小 | — |