chat.nvim v1.8.0:自动重试、用户画像与定时任务重写

chat.nvim v1.8.0 正式发布。这个版本的核心主题是稳定性和个性化——让 AI 更不容易断、更懂你是谁。

自动重试:网络波动不再是死局

用 AI 最烦什么?请求发出去,网络抖了一下,直接报错,前功尽弃。

v1.8.0 新增了 LLM 请求自动重试机制。当遇到连接错误或超时时,chat.nvim 会自动重试,而不是直接把错误甩给用户。成功响应后重试计数自动归零。

这个改动看似简单,实际影响很大。尤其在移动网络或 Termux 环境下,网络波动是常态,自动重试意味着你不用每次断线都手动重新发送。

用户画像:让 AI 记住你是谁

每个用户的编程习惯、技术栈、偏好都不同。v1.8.0 引入了用户画像(人物画像) 功能,AI 可以主动记录和查询用户信息:

  • 编程语言偏好
  • 编辑器习惯
  • 技术背景
  • 工作方式

更关键的是,这个功能不局限于当前用户——对话中提到其他人时,AI 会主动查询对方的画像,提供更个性化的上下文感知响应。

画像以 Markdown 文件存储,结构清晰,易于维护。

定时任务架构重写

v1.7.0 引入了定时任务功能,v1.8.0 对其进行了全面重写。

旧架构存在一些设计问题,新版本改为独立 uv.timer 架构——每个任务一个独立定时器,到点才唤醒,不到点 CPU 零开销。同时新增了 skip_if_busy 选项:当 AI 正在处理请求时,周期任务会跳过本次触发,等下一个周期再试,避免在繁忙时打断正在进行的工作。

配合之前的防漂移机制和 30 天超长延时支持,定时任务现在更加健壮。

Markdown 渲染:代码高亮开箱即用

v1.8.0 为 result buffer 启用了 markdown filetype,并新增 render_markdown 配置选项。配合 render-markdown.nvim 插件,AI 回复中的标题、代码块、表格、列表都能得到原生渲染,阅读体验显著提升。

同时为 result 和 prompt 窗口增加了 signcolumn,恢复了标题徽标字符,禁用了行号显示——细节打磨,让界面更干净。

工具系统增强

write_file 新增 str_replace

write_file 工具新增 str_replace 操作,支持通过字符串匹配替换文件内容,无需指定行号。比原来的 replace 操作更灵活,尤其适合精确修改代码片段。

get_history 支持搜索

get_history 工具新增 search 参数,可以按关键词过滤历史消息。长会话中找特定内容不再需要翻页。

git_add 更健壮

修复了 git_add 在接收到字符串化 JSON 数组时的解析问题,路径处理更加可靠。

数据存储迁移

v1.8.0 将内存和会话存储从 stdpath('cache') 迁移到 stdpath('data')。

这个改动的原因很直接:cache 目录可能被系统清理工具自动清除,而 data 目录是持久的。会话数据和记忆是用户的重要资产,不应该因为系统清理而丢失。集成状态文件也统一移到了 chat.nvim/integration/ 目录下。

HTTP 稳定性修复

v1.8.0 修复了多个 HTTP 相关的稳定性问题:

  • 防止 double-close:HTTP 服务在关闭时不再重复关闭连接
  • 防止客户端挂起:route handler 出错时客户端不会无限等待
  • MCP 错误处理:改善了 MCP 协议的错误处理逻辑

这些修复对 Nova(Android 客户端)用户尤其重要——手机网络环境复杂,HTTP 连接的健壮性直接影响体验。

会话管理改进

  • 会话标题重命名:可以为会话设置自定义标题,方便区分
  • 会话搜索显示项目名称:原有的 <leader>fr 会话搜索现在会展示每个会话所属的项目名称,多项目并行时不再混淆
  • picker 合并:原 chat_project source 已合并进 chat source,统一入口

完整更新日志

新功能

Bug 修复

除了前面提到的 HTTP 稳定性修复,v1.8.0 还解决了以下问题:

工具调用完整性:当上下文长度超限触发截断时,新增了 tool_call 与 tool_result 的配对验证,防止截断导致工具调用链断裂,进而引发 LLM 端的解析错误。

重试机制:成功收到响应后重试计数自动归零,确保后续请求不受之前重试历史的影响。

会话队列:修复了空闲会话队列定时器的延迟问题,避免不必要的等待。同时移除了回复中偶尔出现的重复代码块。

工具可靠性:git_add 在接收到字符串化的 JSON 数组时解析失败的问题已修复,路径处理更加健壮。

界面细节:恢复了窗口标题中的徽标字符,修正了显示异常。

此外,还修复了若干代码质量和安全问题,提升了整体代码健壮性。

重构

v1.8.0 的重构集中在架构简化和路径规范化两方面。

定时任务从原来的轮询架构重写为独立 uv.timer 架构,每个任务一个独立定时器,到点才唤醒。存储路径从 stdpath('cache') 迁移到 stdpath('data'),会话缓存也移到了独立的 sessions 子目录下,目录结构更加清晰。

picker 层面,原 chat_project source 合并进 chat source,减少了重复代码,统一了会话搜索的入口。HTTP routes 统一使用 response.send_raw,简化了响应处理逻辑。

升级方式

如果你已经安装了 chat.nvim,直接更新即可:

-- lazy.nvim
{
  'wsdjeg/chat.nvim',
  -- 更新到最新版
}

如果你是 Nova 用户,无需额外操作,服务端更新后自动生效。

写在最后

v1.8.0 是一个以稳定性和用户体验为核心的版本。自动重试让 AI 对话更抗网络波动,用户画像让 AI 更懂你,定时任务重写让自动化更可靠,Markdown 渲染让阅读更舒适。

感谢所有反馈问题的用户。如果你在使用中遇到问题或有功能建议,欢迎在 GitHub Issues 提交反馈。