症状:模型输出了 toolCall,程序却直接把它显示给用户。
修正:扫描 assistant content,发现 tool call 后执行工具,把结果写成 toolResult,再继续请求模型。
症状:工具明明执行成功,但模型下一轮还说“不知道文件内容”。
修正:工具结果必须追加到 messages,并且带上原始 toolCallId。
症状:重启后无法继续,压缩也没有材料。
修正:保存用户消息、助手消息、工具结果、模型切换、压缩摘要等结构化 entry。
症状:模型生成了删除文件、覆盖配置、执行危险命令的调用。
修正:为工具加路径限制、参数校验、before hook 和必要的人类确认。
症状:长会话能继续,但模型忘了之前的关键决策。
修正:用摘要替换旧消息,并保留最近消息原文。摘要最好包含已完成、关键文件、约束、待办、错误。
症状:每加一个功能都要改 loop,最后核心越来越乱。
修正:核心 loop 保持小,把策略放到 hook、资源加载、工具定义和运行层。
症状:用户只看到“卡住了”,不知道是在等模型还是工具。
修正:暴露 message_update、tool_execution_start/update/end,让 UI 能解释当前状态。