feat(ops): 畸形 tool_call 进工具失败聚集 + 巡检邮件只发活跃聚集(bump 0.58.19)
畸形轮整轮丢弃、messages 无痕,admin「工具失败聚集」原本看不见这类失败
(toolfail 只扫 role=tool 报错);且巡检邮件去重集是内存态,每次部署清零,
高频部署期每次重启都把 7 天窗口内早已安静的存量聚集重发一遍。
- 新增 record_malformed_tool_call:丢弃畸形轮时写 usage_events 一行
kind=tool_malformed(units={tool,len,err,head,tail,tokens_in/out}),
cost_cny 恒 0 —— cost 全 kind 合计且随任务展示,provider 抖动不算用户
花销;真实 token 快照进 units 供反推浪费。DB 写失败静默不阻塞重试
- core/toolfail.py 加第二段扫描(usage_events kind=tool_malformed),聚成
kind=malformed 同构 cluster,admin 面板/巡检邮件零改动自动带上;聚合
逻辑抽 _add 闭包双数据源复用
- 巡检邮件发信前加 count_24h>0 过滤:已安静的聚集重启后不再重发,还在
烧的重启后再提醒一次(刻意保留)
- 新增 tests/test_toolfail_malformed.py 4 用例(mock session_scope);
RUN.md env 巡检段 + 故障兜底同步;PROGRESS 更新
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>