# 更新日志

所有项目的重要变更都记录在此文件中。

格式基于 [Keep a Changelog](https://keepachangelog.com/zh-CN/1.0.0/)，并且本项目遵守 [语义化版本控制](https://semver.org/lang/zh-CN/)。

## [1.4.5] - 2025-11-09

### 🚀 新增功能

- **跳过 API 检测** ⚡：
  - 当直接指定 Provider 编号时，自动跳过 API 可用性检测，立即切换
  - 新增 `--no-check` 参数，明确跳过检测，快速使用默认或交互选择的 Provider
  - 例如：`switch-claude 1` 直接使用编号 1 的 Provider，无需等待检测
  - 例如：`switch-claude --no-check` 跳过检测，使用默认 Provider 或交互选择
  - 适用场景：
    - 快速切换已知可用的 API
    - 网络不稳定但 API 实际可用时
    - 离线环境或信任的 Provider

### ⚡ 性能优化

- 直接指定编号时启动速度显著提升（无需等待 API 检测）
- `--list` 命令保持快速响应（已优化，不进行检测）

### 📖 文档更新

- 更新帮助文档，说明 `--no-check` 参数用法
- 更新示例，展示快速切换的使用方法

---

## [1.4.4] - 2025-09-30

### 🚀 新增功能

- **新增命令别名** ⚡：
  - 新增 `ccc` 命令别名（Choose Claude CLI）
  - 现在支持三个命令别名：`switch-claude`、`scl`、`ccc`
  - 所有别名功能完全相同，用户可根据喜好选择

---

## [1.4.3] - 2025-09-30

### 🚀 新增功能

- **快捷命令别名** ⚡：
  - 新增 `scl` 命令别名，完全等价于 `switch-claude` 命令
  - 简化命令输入，提升使用体验
  - 例如：`scl 1` 等价于 `switch-claude 1`
  - 更易记忆和快速输入的命令选项

### 📖 文档更新

- 在所有 README 文档（中文、英文、日文）中添加快捷命令使用说明
- 添加命令别名对照表，帮助用户快速上手

---

## [1.4.2] - 2025-09-30

### 🚀 新增功能

- **编辑 Provider 功能** ✏️：
  - 新增 `--edit <编号>` 命令，支持编辑已有的 Provider 配置
  - 编辑时显示当前值作为默认值，可以直接回车保留
  - 支持修改名称、URL、API Key、代理和默认设置
  - 无需删除后重新添加，更加便捷

- **HTTP/HTTPS 代理支持** 🌐：
  - 在 Provider 配置中添加可选的 `proxy` 字段，支持为每个 API 提供方单独配置代理
  - 支持 HTTP 和 HTTPS 代理协议
  - 在添加或编辑 Provider 时可以交互式输入代理地址
  - **自动检测系统代理**：从环境变量（`HTTP_PROXY`/`HTTPS_PROXY`）自动检测并提示使用
  - 适用于需要通过 VPN 或代理访问的 API 服务
  - 使用 `undici` 库的 ProxyAgent 实现代理功能

### 📖 文档更新

- 在 README 中添加代理配置说明和示例
- 更新配置示例，包含代理配置的 Provider

### 🔧 技术改进

- 新增 `undici` 依赖，提供更好的 HTTP 客户端和代理支持
- 新增 `proxy-utils.ts` 工具模块，封装代理检测和验证逻辑
- 在交互式添加或编辑 Provider 时增加代理地址输入和验证
- 自动从 `HTTP_PROXY`/`HTTPS_PROXY` 环境变量读取代理配置
- **启动 Claude 时自动设置代理环境变量**：如果 Provider 配置了代理，会自动设置 `HTTP_PROXY`/`HTTPS_PROXY` 环境变量，确保 Claude CLI 也能通过代理访问
- 改进参数验证：`--edit`、`--remove`、`--set-default` 命令缺少必需参数时会正确提示错误

---

## [1.4.1] - 2025-09-25

### 🐛 修复

- 修复在 CLI 中选择 Provider 后启动 `claude` 报 `command not found` 的问题：
  - 新增对 zsh/bash `alias`/函数的解析，能够解析出 `claude` 的真实可执行路径（例如 `~/.claude/local/claude`）。
  - 当未解析到绝对路径时，回退使用“登录 + 交互式” shell 启动，确保加载用户的 `zprofile`/`zshrc` 或 `bash_profile`/`bashrc`。
- 修复环境变量未生效问题：
  - 在回退到 shell 启动时，内联 `export ANTHROPIC_BASE_URL` 与 `export ANTHROPIC_AUTH_TOKEN`，确保覆盖 shell 中的默认值。

### 🔧 其它

- 优化日志与错误提示，便于排查 PATH 与别名问题。

---

## [1.4.0] - 2025-09-24

### 🎉 **重大更新：TypeScript 重构完成**

这是一个里程碑版本！我们完全重构了整个项目，从 JavaScript 迁移到 TypeScript，采用了现代化的模块化架构。

### 🚀 **新增功能**

#### ✨ **TypeScript 重构**
- **完全类型安全**：所有代码使用 TypeScript 编写，提供完整的类型检查
- **模块化架构**：重新设计的代码结构，更易维护和扩展
- **ESM 模块系统**：使用现代 ES 模块，更好的 tree-shaking 支持
- **严格类型检查**：启用严格模式，确保代码质量

#### 📊 **使用统计功能**
- **命令使用统计**：记录每个命令的使用频率和时间
- **Provider 性能统计**：跟踪每个 API 提供商的成功率和响应时间
- **24小时使用分布**：可视化显示使用时间分布
- **错误统计分析**：记录和分析各种错误类型
- **统计数据导出**：支持导出统计数据到 JSON 文件
- **统计数据重置**：支持清空所有统计数据

#### 🧪 **完整测试覆盖**
- **单元测试**：19个测试用例，覆盖核心功能
- **测试框架**：使用 Vitest 作为测试运行器
- **测试覆盖率**：达到 95%+ 的代码覆盖率
- **CI/CD 集成**：GitHub Actions 自动运行测试

### 🏗️ **架构改进**

#### 📁 **模块化设计**
- **核心模块**：
  - `api-tester.ts` - API 可用性检测
  - `cache-manager.ts` - 缓存管理
  - `config-manager.ts` - 配置文件管理
  - `stats-manager.ts` - 使用统计管理
- **UI 模块**：
  - `cli-interface.ts` - 命令行交互界面
  - `output-formatter.ts` - 输出格式化
  - `progress-indicator.ts` - 进度显示
- **工具模块**：
  - `file-utils.ts` - 文件操作工具
  - `platform-utils.ts` - 跨平台兼容
  - `validation.ts` - 数据验证

#### 🎯 **命令系统重构**
- **基础命令类**：统一的命令接口和错误处理
- **命令执行器**：集中的命令分发和执行逻辑
- **CLI 解析器**：改进的参数解析和验证

### 🐛 **修复和改进**

#### 🔧 **错误处理优化**
- **统一错误处理**：标准化的错误消息和处理流程
- **用户友好提示**：更清晰的错误信息和解决建议
- **异常恢复**：更好的异常处理和程序稳定性

#### 🎨 **用户体验提升**
- **显示优化**：修复多处文本换行和格式问题
- **交互改进**：更流畅的用户交互体验
- **性能优化**：更快的启动速度和响应时间

#### 📦 **构建系统**
- **TypeScript 编译**：使用 tsc 进行类型检查和编译
- **代码质量工具**：ESLint + Prettier 确保代码规范
- **自动化脚本**：完善的 npm scripts 支持开发和发布

### 🔄 **兼容性保证**

#### ✅ **向后兼容**
- **配置文件**：完全兼容现有的 `providers.json` 配置
- **命令行参数**：所有原有命令和参数保持不变
- **缓存文件**：兼容现有的缓存数据格式
- **用户体验**：保持原有的使用方式和界面风格

#### 🔄 **无缝升级**
- **自动迁移**：首次运行时自动处理配置迁移
- **数据保留**：保留所有用户配置和缓存数据
- **功能增强**：在保持兼容的基础上增加新功能

### 📈 **性能提升**

#### ⚡ **运行时性能**
- **更快启动**：优化模块加载和初始化流程
- **内存优化**：更高效的内存使用和垃圾回收
- **并发处理**：改进的异步处理和错误恢复

#### 🛠️ **开发体验**
- **类型提示**：完整的 IDE 类型提示和自动补全
- **调试支持**：更好的调试信息和错误堆栈
- **代码导航**：清晰的模块结构便于代码导航

### 🎯 **新增命令**

#### 📊 **统计相关命令**
- `switch-claude --stats` - 显示使用统计信息
- `switch-claude --export-stats [文件路径]` - 导出统计数据
- `switch-claude --reset-stats` - 重置所有统计数据

### 🔧 **技术细节**

#### 📦 **依赖更新**
- **TypeScript 5.9+**：使用最新的 TypeScript 特性
- **Node.js 18+**：要求 Node.js 18 或更高版本
- **ESM 模块**：完全使用 ES 模块系统
- **现代工具链**：Vitest、ESLint 9、Prettier 3

#### 🏗️ **构建配置**
- **tsconfig.json**：严格的 TypeScript 配置
- **eslint.config.js**：现代 ESLint 平面配置
- **package.json**：更新的脚本和依赖管理

### 🚨 **重要说明**

#### ⚠️ **最低要求**
- **Node.js 版本**：需要 Node.js 18.0.0 或更高版本
- **npm 版本**：建议使用 npm 8+ 或 yarn 1.22+

#### 🔄 **迁移指南**
1. **自动升级**：直接运行 `npm update -g switch-claude-cli` 即可
2. **配置保留**：所有现有配置和缓存自动保留
3. **功能验证**：升级后建议运行 `switch-claude --version` 验证

#### 🆘 **问题反馈**
如果在升级过程中遇到任何问题，请在 [GitHub Issues](https://github.com/yak33/switch-claude-cli/issues) 提交反馈。

---

## [1.3.3] - 2025-09-23

### 🎨 用户体验改进

#### 📺 **进度显示优化**
- **显示完整API名称**：现在可以显示完整的API提供商名称（如 NonoCode、AgentRouter、PrismAI 等）
- **智能长度控制**：根据终端宽度自动调整显示内容，优先保留API名称完整性
- **简化显示逻辑**：
  - 之前：`🔍 正在检测 API 可用性... ⣾ [3/5] 已完成: ...API1, API2, API3`
  - 现在：`🔍 检测中 ⣾ [3/5] 当前: NonoCode✓`
- **清晰状态指示**：
  - `✓` - 检测成功
  - `✗` - 检测失败  
  - `📋` - 使用缓存结果

#### 🔧 **技术改进**
- **移除名称截断**：不再限制API名称为15字符
- **动态空间管理**：当行太长时智能缩短其他部分但保留API名称
- **兼容性保持**：在TTY和非TTY环境下都能正常工作
- **代码质量**：修复ESLint警告，改进字符串拼接方式

#### 📊 **显示效果对比**
- **解决问题**：修复API检测时显示行过长导致终端换行的问题
- **提升体验**：用户可以清楚看到正在检测哪个具体的API提供商
- **保持功能**：所有原有功能完全保留，仅优化显示效果

## [1.3.2] - 2025-09-23

### 🐛 Bug修复
- 修复测试文件中未使用变量的ESLint错误
- 改进代码规范，使用模板字符串替代字符串拼接

## [1.3.1] - 2025-09-23

### 🔧 维护更新
- 更新依赖版本
- 改进错误处理机制
- 优化缓存性能

## [1.3.0] - 2025-09-22

### 🚀 新增功能

#### 🔔 **版本更新检查**
- 集成 `update-notifier` 自动提醒用户更新
- 每6小时自动检查一次新版本
- 运行时自动显示更新提示（如果有新版本）
- 支持 `--version` 或 `-V` 查看当前版本并检查更新
- 新增 `--check-update` 命令手动检查更新
- 更新提示包含版本号、发布时间和更新命令

#### 📦 **配置备份与恢复**
- 支持导出配置到 JSON 文件（`--export`）
- 支持从文件导入配置（`--import`）
- 合并导入模式，不会覆盖已有的同名 provider（`--merge`）
- 自动备份到系统目录（`--backup`）
- 列出所有备份文件（`--list-backups`）
- 导入前自动备份原配置
- 自动清理旧备份（保留最近10个）
- 导出文件包含版本和时间元数据

### 🎨 改进
- 📝 在帮助信息和欢迎界面显示版本号
- 🔔 更新提示使用醒目的黄色边框
- 💡 提供多种更新方式（npm update 或 npm install）

#### ✅ **测试套件**
- 使用 Vitest 作为测试框架
- 添加全面的单元测试（34 个测试用例）
- 测试覆盖率达到 95.62%
- 支持测试观察模式和 UI 模式
- 添加 GitHub Actions CI/CD 工作流
- 支持多平台和多 Node.js 版本测试

#### 📊 **使用统计功能**
- 跟踪命令使用频率
- 记录 Provider 使用情况和成功率
- 显示 24 小时使用分布图
- 统计平均响应时间
- 错误类型和频率分析
- 支持导出和重置统计数据

#### 🎨 **代码质量工具**
- 集成 ESLint 进行代码检查
- 集成 Prettier 进行代码格式化
- 添加相关 lint 和 format 脚本
- 配置适合 CLI 工具的规则

### 🔧 技术细节
- 添加 `update-notifier` 依赖（54个子包）
- 使用 ESM 模块的 `import.meta.url` 获取当前目录
- 缓存更新检查结果，避免频繁网络请求

## [1.2.0] - 2025-09-22

### 🚀 重大改进
- 🎯 **多模型兼容性**：支持 Claude 和 GPT 模型的第三方服务检测
  - 自动测试 `claude-sonnet-4-20250514` 和 `gpt-5` 模型
  - 解决只支持 GPT 模型的第三方服务检测问题
  - 智能识别每个服务支持的模型类型

### 🎨 用户体验提升
- 🌀 **进度显示**：新增实时进度条和动画效果
  - 旋转动画显示检测进度 `⣾⣽⣻⢿⡿⣟⣯⣷`
  - 实时显示 `[已完成数/总数]` 进度
  - 显示最近完成的服务及其支持的模型类型
  - 自适应TTY/非TTY环境
- 📋 **模型类型显示**：在可用性后显示支持的模型类型
  - 示例：`✅ [1] nonocode 可用 (支持: Claude, GPT)`
  - 清晰区分不同服务的模型支持能力

### 🔧 技术改进
- 🏗️ **检测策略优化**：
  - 移除对 `/v1/models` 端点的依赖（解决第三方不开放此接口的问题）
  - 专注使用 `/v1/messages` 进行实际功能检测
  - 扩展状态码处理：400/422 也视为服务可达（模型不支持但服务可用）
- 🎭 **智能错误处理**：
  - 401: "认证失败，请检查API Key"
  - 400/422: "模型不支持，但服务可用"
  - 403: "权限不足，请检查API Key权限"
  - 429: "请求频率超限，服务可用"
- 💾 **缓存增强**：缓存数据包含模型支持信息
- 🎪 **非阻塞体验**：
  - 普通模式：显示进度条
  - 详细模式：保持传统的详细输出
  - 缓存模式：快速返回结果

### 🐛 修复问题
- ✅ **AgentRouter 检测修复**：现在正确识别为可用（之前因401状态码被误判为不可用）
- 🔄 **检测逻辑优化**：更准确地区分"服务不可达"和"认证/模型问题"
- 📊 **显示一致性**：修复模型支持信息的缓存和显示

### 📈 性能提升
- ⚡ **并行检测优化**：每种模型独立检测，提高效率
- 🎯 **智能重试**：成功的模型检测不再重试
- 💨 **响应时间改进**：减少不必要的端点测试

## [1.1.0] - 2025-09-21

### 新增
- 🏠 **用户目录配置**：配置文件现在存储在 `~/.switch-claude/` 目录下
- 🎉 **首次运行体验**：自动创建配置目录和示例配置文件
- 📚 **欢迎界面**：首次运行时显示完整的帮助信息
- 🔧 **跨平台支持**：自动检测操作系统并提供对应的文件编辑命令

### 改进
- ✨ **用户友好显示**：移除 HTTP 状态码，普通用户只看到"可用/不可用"
- 🔍 **详细模式**：使用 `-v` 参数可查看技术详情（状态码、响应时间等）
- 🎯 **编号一致性**：修复交互选择界面编号显示错误的问题
- 🛡️ **更好的错误处理**：改进配置文件缺失时的提示信息

### 技术改进
- 📁 **配置管理**：使用用户主目录，避免权限问题
- 🔄 **缓存位置**：缓存文件移至配置目录下
- 🎨 **代码优化**：改进索引映射逻辑，修复引用匹配问题

## [1.0.0] - 2025-09-21

### 新增
- 🚀 **核心功能**：Claude API Provider 智能切换
- ⚡ **智能检测**：多端点测试和重试机制
- 💾 **缓存机制**：5分钟缓存，避免重复检测
- 🎯 **灵活选择**：支持默认 provider 和交互式选择
- 🔧 **配置管理**：完整的 provider 增删改查功能
- 📊 **详细日志**：可选的详细模式显示
- 🛡️ **错误处理**：完善的错误处理和用户提示

### 支持的功能
- `switch-claude` - 交互式选择 provider
- `switch-claude <编号>` - 直接选择指定 provider
- `switch-claude --add` - 添加新 provider
- `switch-claude --remove <编号>` - 删除 provider
- `switch-claude --set-default <编号>` - 设置默认 provider
- `switch-claude --clear-default` - 清除默认设置
- `switch-claude --list` - 列出所有 providers
- `switch-claude --refresh` - 强制刷新缓存
- `switch-claude --verbose` - 详细模式
- `switch-claude --env-only` - 仅设置环境变量
- `switch-claude --help` - 显示帮助信息

### 技术特性
- 📦 **零配置启动**：首次运行自动初始化
- 🔒 **安全设计**：API Key 部分遮码显示
- 🌐 **跨平台支持**：Windows、macOS、Linux
- 📋 **智能验证**：配置文件格式和内容验证
- ⚡ **性能优化**：并行检测和结果缓存

## [未来计划]

### 🚀 计划中的功能
- 📈 **增强统计**：响应时间趋势图表和可视化
- 🔔 **通知系统**：服务状态变化提醒和告警
- 🎨 **主题支持**：自定义显示样式和颜色主题
- 🌍 **国际化**：多语言支持（英文、日文等）
- 🔌 **插件系统**：支持自定义扩展和钩子函数
- 📱 **移动端支持**：适配移动终端显示和操作
- 🔄 **配置同步**：跨设备配置同步功能
- 🤖 **AI 助手**：智能推荐最佳 Provider 选择

### 🎯 改进计划
- **更智能的检测**：支持更多API端点和协议类型
- **配置文件热重载**：实时监听配置变化并自动重载
- **更丰富的健康检查**：延迟、吞吐量、可用率等指标
- **GUI 界面支持**：基于Web的管理界面和仪表板
- **Docker 支持**：容器化部署和使用
- **API 监控面板**：实时状态监控和历史数据分析
- **自动故障转移**：智能切换到备用服务
- **负载均衡**：多个 Provider 之间的智能负载分配

### 🔧 技术改进
- **性能优化**：优化大量 provider 时的检测性能
- **错误处理**：更详细的错误日志和调试信息
- **代码质量**：持续改进代码覆盖率和测试质量
- **文档完善**：API 文档和开发者指南
- **安全增强**：API Key 加密存储和安全传输

### ✅ **已完成（v1.4.0）**
- ✅ **TypeScript 重构**：完全迁移到 TypeScript
- ✅ **模块化架构**：重新设计的代码结构
- ✅ **使用统计功能**：完整的统计和分析功能
- ✅ **测试覆盖**：95%+ 的单元测试覆盖率
- ✅ **进度显示优化**：独立的进度显示模块
- ✅ **错误处理改进**：统一的错误处理机制

---

格式说明：
- `新增` - 新功能
- `改进` - 对现有功能的改进
- `修复` - Bug 修复
- `移除` - 移除的功能
- `安全` - 安全相关的修复