Skip to content

v1.8.3 —— context 低估修复 + Terminal.app 崩溃缓解

Choose a tag to compare

@javaside javaside released this 10 Aug 04:11
· 5 commits to main since this release

springai-agentdemo v1.8.3

v1.8.2 基础上的缺陷修复版(patch)。核心交付物仍是终端编码智能体 springai-code-tui。本版修复两处低概率运行期缺陷,并降低 Terminal.app 崩溃频率。无破坏性变更,无新增依赖。

下载物仍是两个自包含运行包(解压即用,无需构建):

  • springai-code-tui-1.8.3-dist.tar.gz(macOS / Linux 首选)
  • springai-code-tui-1.8.3-dist.zip(Windows 首选)

两者内容一致:启动脚本(bin/)+ 主 jar + 全部运行期依赖(lib/)+ LICENSE/NOTICE/README。运行时界面版本标识为 v1.8.3

完整功能全景与⚠️安全声明见 v1.3.0 发布说明v1.0.0 发布说明;本文只列出相对 v1.8.2 的变化。


🐛 修复

/context 上下文用量严重低估

现象/context 面板显示的 token 估算值远低于实际(有时只有真实用量的几十分之一),会话明显已经很长,面板却显示占用极低。

根因CodingAgent.contextStats() 遍历消息时只调用 m.getText(),而 Spring AI 2.0 的 ToolResponseMessage 构造函数硬传空串给父类——getText() 永远返回 ""。工具调用结果(尤其是 BashOutputRead 大文件等)的实际内容存在 getResponses()[i].responseData() 里,完全被漏算。一个含 1MB BashOutput 的会话,token 估算值可能接近于零。

修复:对 ToolResponseMessage 改走 getResponses() 遍历 responseData(),其余消息类型保持原有 getText() 路径。配套回归单测:构造含 100k 字符 responseData 的工具消息,断言 token 估算必须包含该内容。

Terminal.app 在处理大量输出时崩溃频率降低

现象:使用 macOS 自带 Terminal.app 时,模型执行工具(尤其 BashOutput 输出大量内容)期间,整个 Terminal.app 偶尔崩溃关闭,所有窗口/标签页同时消失。

根因:Terminal.app 在 _dispatch_kevent_mach_msg_recv(GCD kevent pty I/O 路径)中存在 use-after-free bug(EXC_BAD_ACCESS / SIGSEGV),触发条件是短时间内向 pty 写入大量数据。工具结果一次可产生数千行输出,此前全部在单个 33ms 帧内打出,形成 MB 级突发流量。v1.8.1 的 printWrapped 修复使完整内容被打印(而非截断),加剧了这一情况。

缓解:新增每帧 pty 写入行数上限(MAX_LINES_PER_DRAIN = 300),超出的行保留到下一帧继续打,将突发流量打散到多个 33ms 帧中。内容不丢失,只是渐进显示(体验类似流式回复);对正常大小的输出(≤300 行)无任何影响。

注意:这是降频缓解手段,不能 100% 消除崩溃——Terminal.app 的 bug 仍在。根治方案是改用 iTerm2


🔧 工程

README 拆分为 docs/guide/ 专题文档

README.md 从 799 行精简到 111 行,保留简介、模块用途摘要与快速上手。8 个专题内容独立成 docs/guide/ 下的专题文档:

文档 内容
security.md 安全声明完整版
permissions.md 权限管理:审批面板、规则 DSL、内置底线
background-agent.md 后台子 agent:结果回收、权限矩阵、三个刹车
vision.md 视觉输入:贴图、模型列表、硬上限
mcp.md MCP 配置
skills.md 技能配置
interjection.md 回合中插话
reference.md 操作键、斜杠命令、已知限制

全量测试

springai-code-tui 1387 用例通过(新增 ToolResponseMessage token 漏算回归断言)。


🔐 校验(SHA-256)

5e67eea904302635ef3f3daf0469546eedf0f45fb6d60ecd312bd55beb421dc8  springai-code-tui-1.8.3-dist.tar.gz
6f32f25e73b89011592a4c455f889aa2dc0ba166a13c557885c187209e7682cb  springai-code-tui-1.8.3-dist.zip
shasum -a 256 -c <<'EOF'
5e67eea904302635ef3f3daf0469546eedf0f45fb6d60ecd312bd55beb421dc8  springai-code-tui-1.8.3-dist.tar.gz
6f32f25e73b89011592a4c455f889aa2dc0ba166a13c557885c187209e7682cb  springai-code-tui-1.8.3-dist.zip
EOF

📄 许可

Apache License 2.0。发布包内随附 LICENSENOTICE(含所分发第三方库:Spring AI / Spring Boot / spring-ai-community 为 Apache 2.0,TamboUI 为 MIT)。本版未引入任何新的第三方依赖

环境:JDK 17+,macOS / Linux / Windows。