v1.8.2 —— 竞态修复 + 日志统一
springai-agentdemo v1.8.2
在 v1.8.1 基础上的缺陷修复版(patch)。核心交付物仍是终端编码智能体 springai-code-tui。本版修复一处低概率并发竞态(忙时提交在回合边界被错路由),并统一日志级别策略与系统提示工具访问边界措辞。无破坏性变更,无新增依赖。
下载物仍是两个自包含运行包(解压即用,无需构建):
springai-code-tui-1.8.2-dist.tar.gz(macOS / Linux 首选)springai-code-tui-1.8.2-dist.zip(Windows 首选)
两者内容一致:启动脚本(bin/)+ 主 jar + 全部运行期依赖(lib/)+ LICENSE/NOTICE/README。运行时界面版本标识为 v1.8.2。
完整功能全景与
⚠️ 安全声明见 v1.3.0 发布说明 与 v1.0.0 发布说明;本文只列出相对 v1.8.1 的变化。
🐛 修复
忙时提交在回合边界不再被误路由为「排队」
现象:在模型回复的最后一刻发送消息,偶尔该插话的消息被送进排队队列,要等到下一次用户主动发消息才被捎走——像是「Enter 没反应」。
根因:路由逻辑先读 busy()、再读 isIdle(),若 Reactor 线程恰好在两次读取之间结束回合,同一次 Enter 会先看到「忙」、随后又看到「空闲」,最终误走排队分支而非插话。
修复:新增 ConversationState.submissionSnapshot() 原子快照(synchronized,一次读取同时拿到 busy 与 activeTurn),路由决策全部基于这一份快照,消除竞态窗口。配套单测 submissionUsesOneRoutingSnapshot 钉住:快照之后回合结束,路由结果仍为插话。
🔧 工程
日志级别统一为 INFO
生产代码中原本散落的 debug(...) 调用(插话送达、权限审批、后台任务生命周期、软链失败、权限规则回写、建议规则放弃)统一升为 info,与文档声明的「生产最低 INFO」策略对齐。
CodingAgent错误路径(同步组装出错、回合 doOnError)补error级日志,便于按 turnId 排障。- Reactor
subscribe加空errorConsumer,消除onErrorDropped / ErrorCallbackNotImplemented噪音。 SubagentRunner后台任务生命周期新增三条 INFO(「已提交」「开始执行」「执行完成+耗时 ms」),配套单测断言:结果文本不夹带生命周期日志,日志不含 DEBUG。config.env.example、启动脚本说明补充CODETUI_BACKGROUND_CONCURRENCY/CODETUI_TASK_OUTPUT_TIMEOUT_SECONDS配置项。
系统提示工具访问边界措辞优化
原措辞「所有操作都应发生在当前项目根目录之内」过于严格,会拦住合理的跨目录访问(读另一个项目的文件、写系统临时目录等)。改为:根目录是默认工作目录而非强制访问边界;跨目录访问服从权限引擎与内置安全底线;操作范围以任务必需为限。配套单测钉住措辞不回退。
📊 测试
全量测试:springai-code-tui 1386 用例通过(较 v1.8.1 新增路由竞态单测、后台任务日志策略验证、系统提示措辞钉桩)。
🔐 校验(SHA-256)
b933fe009239ed610c2f8381f6d441e10e1abab6e9c32e5825f5a4e47fec794b springai-code-tui-1.8.2-dist.tar.gz
88448b43e1f46b6caeed1e22c7a36f9c434eeed1698f90e5681fa6b055a1f6de springai-code-tui-1.8.2-dist.zip
shasum -a 256 -c <<'EOF'
b933fe009239ed610c2f8381f6d441e10e1abab6e9c32e5825f5a4e47fec794b springai-code-tui-1.8.2-dist.tar.gz
88448b43e1f46b6caeed1e22c7a36f9c434eeed1698f90e5681fa6b055a1f6de springai-code-tui-1.8.2-dist.zip
EOF📄 许可
Apache License 2.0。发布包内随附 LICENSE 与 NOTICE(含所分发第三方库:Spring AI / Spring Boot / spring-ai-community 为 Apache 2.0,TamboUI 为 MIT)。本版未引入任何新的第三方依赖。
环境:JDK 17+,macOS / Linux / Windows。