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 缓冲区 - 可重试条件:
LlmTimeout、LlmConnectionFailed、LlmStreamTruncated、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.rs、commit.rs、llm.rs、network.rs
Provider 模块重组
- Provider 实现移至
provider/backends/ - SSE 流解析器提取到
provider/streaming/,按 Provider 分文件 (claude.rs、openai.rs、gemini.rs) - 基础工具(retry、response、validation)保留在
provider/base/
依赖
- 新增
httpdate1.0 用于解析 Retry-After 头 - 更新
clap、reqwest、serde_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