Skip to content

Release v0.13.6

可靠性与架构 - 流式重试 + Amend 钩子 + 模块重构

新增 LLM 流式响应截断自动重试、prepare-commit-msg 钩子支持 git commit --amend, 以及配置和 Provider 模块的重大内部重构。

新增

流式响应重试机制

  • spawn_stream_with_retry() 检测截断的流式响应(Claude 无 message_stop、 OpenAI/Gemini 无 [DONE]),自动以指数退避重发 HTTP 请求
  • 新增 StreamChunk::Retry 变体,重试前清空 UI 缓冲区
  • 可重试条件:LlmTimeoutLlmConnectionFailedLlmStreamTruncated、HTTP 429/5xx

Git Commit --amend 钩子支持

  • prepare-commit-msg 钩子通过 determine_hook_mode() 检测 amend 场景
  • Amend 模式基于原始提交的 diff 生成消息;若有额外暂存变更则合并两份 diff
  • 新增 i18n 字符串:hook.generating_amend

错误类型

  • LlmStreamTruncated:流式响应未正常终止
  • LlmContentBlocked:Provider 安全过滤触发(Gemini SAFETY/RECITATION)
  • LlmTimeout / LlmConnectionFailed:HTTP 级别的显式失败
  • 所有新变体均包含本地化消息和可操作建议

变更

配置模块拆分

  • 将 685 行的 config/structs.rs 拆分为 4 个独立模块: app.rscommit.rsllm.rsnetwork.rs

Provider 模块重组

  • Provider 实现移至 provider/backends/
  • SSE 流解析器提取到 provider/streaming/,按 Provider 分文件 (claude.rs、openai.rs、gemini.rs)
  • 基础工具(retry、response、validation)保留在 provider/base/

依赖

  • 新增 httpdate 1.0 用于解析 Retry-After 头
  • 更新 clapreqwestserde_json 等依赖

文档

  • 澄清 custom_prompt 行为:普通模式替换系统 prompt,split 模式追加为约束; 无占位符替换
  • 澄清 max_diff_size 仅适用于非 split 流程

测试

  • determine_hook_mode():所有 source/SHA 组合(message、merge、squash、commit、amend)
  • 流式重试:429 Retry-After 处理、5xx 错误、截断检测
  • 指数退避计算

升级

bash
# Homebrew
brew upgrade gcop-rs

# Cargo
cargo install gcop-rs

# pip
pip install --upgrade gcop-rs