🎯 核心改进:从根源缓解 max_output_token 截断
长对话 + 多工具场景下,Claude Code 经常遇到输出被截断的问题。本版本新增三个可选的防截断机制,全部默认关闭,按需在 config.yaml 或环境变量中开启。
🆕 上下文压力膨胀(Context Pressure Inflation)
配置:
context_pressure: 1.35/ 环境变量:CONTEXT_PRESSURE=1.35
原理:Claude Code 假设模型 context window 为 200K tokens,在 ~80%(160K)时才触发自动压缩。但 Cursor API 实际窗口只有 ~150K,导致客户端压缩太晚,输出空间被挤压。
解决方案:虚增报告给客户端的 input_tokens(×1.35),让 Claude Code 提前触发内置的自动压缩机制。用户无需修改客户端任何设置。
| 实际输入 | 报告给客户端 | 效果 |
|---|---|---|
| 118K tokens | 160K tokens | ✅ 触发自动压缩,避免截断 |
🆕 自适应历史预算(Adaptive Budget)
配置:
tools.adaptive_budget: true/ 环境变量:TOOLS_ADAPTIVE_BUDGET=true
工具数量越多,自动从历史 token 预算中预留越多输出空间:
- 90 个工具 → 额外预留 ~8K tokens
- 5 个工具 → 额外预留 ~450 tokens
🆕 工具结果智能截断(Smart Truncation)
配置:
tools.smart_truncation: true/ 环境变量:TOOLS_SMART_TRUNCATION=true
按工具类型差异化截断,保留最有价值的部分:
| 工具类型 | 头部保留 | 尾部保留 | 原因 |
|---|---|---|---|
| Read | 50% | 30% | import/声明在头部,关键代码可能在尾部 |
| Bash | 20% | 60% | 错误信息和最终输出在末尾 |
| Search | 70% | 15% | 第一批匹配结果最相关 |
| Default | 60% | 40% | 通用平衡策略 |
📦 变更文件
- src/handler.ts — 上下文压力膨胀逻辑
- src/converter.ts — 自适应预算算法 + 智能截断逻辑 + tool_use_id 映射
- src/config.ts — 新增配置解析 + 环境变量覆盖
- src/types.ts — 新增
contextPressure、adaptiveBudget、smartTruncation类型 - config.yaml.example — 新增配置项及详细注释
- docker-compose.yml — 新增环境变量条目
- README.md — 更新特性列表 + 环境变量表 + 更新日志
⬆️ 升级指南
- 拉取最新代码或 Docker 镜像
- 三个功能默认关闭,零配置即可平滑升级
- 如需开启,在 config.yaml 中取消注释对应配置项即可(支持热重载)
完整版对照: v2.7.7...v2.7.8