# Release v0.1.6

## 🔄 LLM API 自动重试与网络增强

这个版本专注于提升网络请求的稳定性和容错能力，添加了自动重试机制和完整的代理支持。

## 新功能

### 1. 自动重试机制

LLM API 请求现在会自动重试，应对临时性网络故障和 API 限流。

**重试策略**：
- **指数退避**: 1秒 → 2秒 → 4秒
- **最多重试**: 3 次（总共尝试 4 次）
- **智能重试**: 仅对可恢复错误重试
  - ✅ 连接失败 (connection failed)
  - ✅ 429 限流 (rate limit)
  - ❌ 401/403 认证错误（不重试）
  - ❌ 400 请求格式错误（不重试）

**重试日志示例**（使用 `-v` 查看）：
```
WARN  OpenAI API request failed (attempt 1/4): connection failed. Retrying in 1.0s...
WARN  OpenAI API request failed (attempt 2/4): connection failed. Retrying in 2.0s...
INFO  OpenAI API request succeeded after 3 attempts
```

### 2. HTTP 超时配置

防止请求无限挂起：

- **请求超时**: 120 秒（整个 API 调用）
- **连接超时**: 10 秒（建立连接）

这确保即使 API 响应缓慢或网络不稳定，程序也不会卡死。

### 3. 增强的错误信息

网络错误现在提供详细的诊断信息和解决建议：

```
✗ Error: OpenAI API connection failed: error sending request. Check network connectivity or API endpoint.
💡 Suggestion: Cannot connect to API server. Check endpoint URL, network, or DNS settings
```

错误类型识别：
- `timeout` - 请求超时
- `connection failed` - 无法建立连接
- `request error` - 请求构造错误
- `body error` - 请求体错误
- `decode error` - 响应解码错误

### 4. 代理支持

支持通过环境变量配置代理（reqwest 内置功能）：

**HTTP/HTTPS 代理**：
```bash
export HTTP_PROXY=http://127.0.0.1:7890
export HTTPS_PROXY=http://127.0.0.1:7890
gcop-rs commit
```

**SOCKS5 代理**（新增 `socks` feature）：
```bash
export HTTP_PROXY=socks5://127.0.0.1:1080
export HTTPS_PROXY=socks5://127.0.0.1:1080
gcop-rs commit
```

**代理认证**：
```bash
export HTTP_PROXY=http://username:password@proxy.example.com:8080
```

**排除代理**：
```bash
export NO_PROXY=localhost,127.0.0.1,.local
```

## 其他改进

### 常量重构

提取所有魔法数字到 `src/constants.rs`：

```rust
// 新增常量模块
pub mod http {
    pub const REQUEST_TIMEOUT_SECS: u64 = 120;
    pub const CONNECT_TIMEOUT_SECS: u64 = 10;
}

pub mod retry {
    pub const MAX_RETRY_ATTEMPTS: usize = 3;
    pub const INITIAL_RETRY_DELAY_MS: u64 = 1000;
}
```

### 文件大小校验优化

优化了大文件跳过逻辑，避免发送超大 diff 到 LLM API。

## 使用示例

### 在网络不稳定环境下使用

```bash
# 启用 verbose 模式查看重试过程
gcop-rs -v commit

# 输出示例：
# DEBUG Sending request to: https://api.openai.com/v1/chat/completions
# ERROR OpenAI API request failed [connection failed]: ...
# WARN  OpenAI API request failed (attempt 1/4): connection failed. Retrying in 1.0s...
# WARN  OpenAI API request failed (attempt 2/4): connection failed. Retrying in 2.0s...
# INFO  OpenAI API request succeeded after 3 attempts
```

### 配置代理

```bash
# 临时使用代理
HTTP_PROXY=http://127.0.0.1:7890 HTTPS_PROXY=http://127.0.0.1:7890 gcop-rs commit

# 或永久配置（添加到 ~/.bashrc 或 ~/.zshrc）
export HTTP_PROXY=http://127.0.0.1:7890
export HTTPS_PROXY=http://127.0.0.1:7890
```

### 验证代理是否生效

```bash
gcop-rs -v commit

# 如果看到类似日志，说明代理已启用：
# DEBUG reqwest::connect: proxy(http://127.0.0.1:7890/) intercepts 'https://api.openai.com/'
```

## 升级说明

从 v0.1.5 升级无需任何配置更改。

所有新功能都是自动启用的：
- ✅ 自动重试 - 开箱即用
- ✅ 超时保护 - 开箱即用
- ✅ HTTP/HTTPS 代理 - 通过环境变量
- ✅ SOCKS 代理 - 通过环境变量

## 📦 安装

```bash
cargo install gcop-rs
```

或从源码构建：

```bash
git clone https://github.com/AptS-1547/gcop-rs.git
cd gcop-rs
cargo build --release
```

## 📚 文档

- [README](https://github.com/AptS-1547/gcop-rs#readme)
- [中文文档](https://github.com/AptS-1547/gcop-rs/blob/master/README_ZH.md)
- [Full Changelog](https://github.com/AptS-1547/gcop-rs/blob/master/CHANGELOG.md)
- [Troubleshooting Guide](https://github.com/AptS-1547/gcop-rs/blob/master/docs/troubleshooting.md)

## 反馈与贡献

如有问题或建议，欢迎提交 [Issue](https://github.com/AptS-1547/gcop-rs/issues)。
