Commit Graph

49 Commits

  • feat: 添加 API Key 快速输入功能
    - 选择预设模板后自动显示 API Key 输入框
    - 输入 API Key 后自动更新 JSON 配置
    - 简化用户配置流程,无需手动编辑 JSON
    - 优化交互体验,API Key 输入框位于供应商名称下方
  • feat: 添加快速选择模板按钮的选中状态
    - 为模板选择按钮添加选中后保持深色的视觉反馈
    - 选中状态与hover状态共享相同的样式
    - 用户可以清楚地看到当前选中的模板
  • fix: 修复关键逻辑错误
    - 修复 store 初始化的异步问题:构造函数中的异步方法现在正确等待
    - 修复配置切换时删除原文件的严重 bug:使用 copyFile 替代 rename 避免文件丢失
    - 简化代码实现,移除过度设计的部分
  • 修复UI问题:禁用正在使用供应商的编辑按钮
    - 为正在使用中的供应商禁用编辑按钮,避免编辑活跃配置
    - 添加edit-btn的disabled样式,保持界面一致性
    - 防止用户编辑正在使用的settings.json导致配置冲突
  • 代码重构:移除 any 类型并抽取共享表单组件
    - 移除所有 any 类型声明,提升类型安全性
    - 简化 ClaudeCodeSettings 接口为通用的 Record<string, any>,支持任意供应商配置
    - 创建 ProviderForm 共享组件,减少重复代码约 300 行
    - 优化 Store 类型定义,使用泛型约束确保类型安全
    
    🤖 Generated with [Claude Code](https://claude.ai/code)
    
    Co-Authored-By: Claude <noreply@anthropic.com>
  • 界面改进和代码重构:设置窗口最小尺寸并抽象预设供应商配置
    - 设置窗口最小尺寸为600x400,防止界面缩放问题
    - 将预设供应商配置提取到独立文件providerPresets.ts
    - 便于管理和维护预设供应商列表
    
    🤖 Generated with [Claude Code](https://claude.ai/code)
    
    Co-Authored-By: Claude <noreply@anthropic.com>
  • 代码质量优化:修复废弃API并改进ID生成
    - 使用 crypto.randomUUID() 替换已废弃的 substr() 方法
    - 将默认供应商名称从"默认"改为"default",提高国际化兼容性
    - 优化 ID 生成算法,提供更可靠的唯一性保证
  • 重大功能改进:添加禁止 Claude Code 签名功能并重构代码
    新增功能:
    - 在添加供应商和编辑供应商窗口都增加"禁止 Claude Code 签名"选择框
    - 自动同步 JSON 配置中的 includeCoAuthoredBy 字段
    - 支持双向同步:手动编辑 JSON 时选择框状态自动更新
    
    代码优化:
    - 提取通用函数到 providerConfigUtils.ts 工具文件
    - 重构代码避免重复,提高可维护性
    - 保持原有自动提取官网地址功能
    
    UI改进:
    - 优化选择框与标签的对齐样式
    - 统一两个窗口的交互体验
  • 改进添加供应商界面:实现自动提取官网地址功能
    - 新增 extractWebsiteUrl 函数,从 JSON 配置中自动解析 ANTHROPIC_BASE_URL
    - 智能处理 URL 前缀,自动去掉 "api." 前缀生成官网地址
    - 优化用户体验:仅在官网地址为空时自动填入,不覆盖用户手动输入
    - 支持实时解析,用户输入 JSON 配置时立即更新官网地址字段
  • 优化用户体验:简化数据结构并改进文件夹访问
    - 移除 Provider 中无用的 createdAt 和 updatedAt 字段
    - 简化数据结构,去除冗余的时间戳设置代码
    - 将底部"浏览"按钮改为"打开",直接打开配置文件夹
    - 新增 openConfigFolder API,使用 shell.openPath 打开文件夹
    - 优化用户体验,方便用户查看和管理所有配置文件
  • 统一供应商处理逻辑:默认供应商与普通供应商一致处理
    - 移除默认供应商在切换时的特殊逻辑
    - 默认供应商现在也创建独立配置文件 settings-默认.json
    - 移除删除时对默认供应商的特殊保护
    - 所有供应商现在都遵循相同的文件管理规则
  • 简化界面:删除导入当前配置功能
    - 移除 ImportConfigModal 组件及相关文件
    - 删除头部的导入当前配置按钮
    - 移除 importCurrentConfig 相关的 API 和 IPC 处理器
    - 保留 importCurrentConfigAsDefault 功能用于首次启动
    - 界面更简洁,专注核心功能:添加、编辑、切换、删除供应商
    - 减少用户困惑,因为自动创建的默认供应商已经满足大部分需求
  • 移除默认供应商删除时的过度保护逻辑
    用户要删除就说明不需要了,没必要特别保护。
    默认供应商现在可以正常删除,只是因为没有独立配置文件所以跳过文件删除操作。
  • 优化首次启动体验:自动创建默认供应商且设为选中状态
    - 新增 importCurrentConfigAsDefault 函数,创建 ID 为 'default' 的特殊供应商
    - 默认供应商不生成独立配置文件,直接使用现有 settings.json
    - 首次启动时自动导入现有配置为默认供应商,并设为选中状态
    - 切换到默认供应商时无需文件操作,直接使用原配置
    - 删除默认供应商时保护原配置文件不被误删
    - 简化 ImportConfigModal 组件,移除 isEmpty 相关逻辑
    - 提升用户体验:无需手动操作,开箱即用
  • 修复编辑供应商名称后配置文件名不同步问题
    - 修改 getProviderConfigPath 函数,支持基于供应商名称生成配置文件名
    - 在 updateProvider 中添加文件重命名逻辑,当供应商名称改变时自动重命名配置文件
    - 更新所有相关函数调用,传递供应商名称参数确保文件命名一致
    - 完善 switchProvider 备份逻辑,使用正确的供应商名称生成备份文件名
    - 添加必要的导入声明修复编译错误
    
    现在编辑供应商名称后,对应的配置文件名会自动更新反映新名称
  • 改进用户体验:供应商列表为空时自动弹出导入配置对话框
    - 当供应商列表为空时,自动显示导入配置对话框,引导用户导入当前配置
    - 为导入配置对话框添加isEmpty属性,针对空列表场景优化界面文案
    - 空列表场景下显示更友好的标题和说明文本
    - 优化按钮文本:空列表时取消按钮显示为"稍后设置"
  • 重大重构:从字段替换切换到完整配置文件切换系统
    - 实现基于文件重命名的供应商切换机制,支持完整settings.json配置切换
    - 移除所有向后兼容代码,简化为纯JSON配置模式
    - 添加导入当前配置功能,解决首次使用时配置丢失问题
    - 移除描述字段,简化用户界面
    - 完整的错误处理和回滚机制确保配置安全
    - 清理所有调试代码,优化代码质量
  • 重大改进:用原生 JSON 存储替换 electron-store
    - 实现 SimpleStore 类,使用原生 fs 操作 JSON 文件
    - 解决 "Cannot find module 'conf'" 的依赖问题
    - 移除 electron-store 依赖,减少包体积
    - 配置文件存储在 ~/.cc-switch/config.json
    - 数据格式透明,便于备份和调试
    - 修复 TypeScript 类型问题
    - 测试通过:构建、打包、运行正常
  • 移除模态框点击外部关闭功能,防止误触关闭
    - 移除 AddProviderModal 的点击遮罩层关闭功能
    - 移除 EditProviderModal 的点击遮罩层关闭功能
    - 用户现在只能通过按钮主动关闭模态框,提升用户体验
  • 代码优化:清理冗余功能并修复关键问题
    - 删除未使用的 axios 依赖
    - 移除 Provider 接口中未使用的 model 字段
    - 删除未使用的供应商连通性检查功能
    - 修复 preload.ts 中缺失的 IPC 方法暴露
    - 简化 UI:移除重复的单选按钮,仅保留启用按钮
    - 修复 TypeScript 接口定义不完整的问题
  • 解决系统弹窗阻塞问题:实现非阻塞用户交互
    - 创建自定义ConfirmDialog组件替代系统confirm
    - 删除功能使用自定义确认对话框,避免界面阻塞
    - 添加/编辑模态框使用内联错误提示替代alert
    - 优化用户体验:更详细的确认信息和统一的视觉风格
  • 实现完美的浮动通知系统
    - 添加自定义通知组件替代阻塞式alert
    - 浮动定位不影响页面布局,宽度自适应内容
    - 支持成功/错误两种样式,渐变背景+阴影效果
    - 实现完整的淡入淡出动画,原地显示隐藏
    - 重启提示显示4秒,普通操作反馈2-3秒
    - 智能定时器管理,支持动画完成后清理
    
    用户体验:切换供应商后优雅提示"请重启Claude Code终端以生效"
  • 修复编辑后输入框无法选中的焦点管理问题
    - 移除阻塞式alert调用,避免焦点管理冲突
    - 清理不必要的CSS z-index层级设置
    - 优化EditProviderModal的useEffect依赖管理
    - 改用console日志记录操作结果
    
    问题原因:alert()强制抢夺焦点,在模态框关闭时打断正常焦点流转
  • 修复编辑供应商配置同步问题
    - 修复当编辑当前激活供应商时,Claude Code配置文件未同步更新的问题
    - 在updateProvider中增加逻辑检测是否为当前激活供应商
    - 如果是当前激活供应商,同时调用switchProvider更新~/.claude/settings.json
    - 确保编辑后的配置能立即生效,无需重新切换供应商
  • 修复URL推测功能:支持不完整URL输入并保持验证
    - 修复inferWebsiteUrl函数,支持无协议URL的推测
    - 在API地址失焦时自动补全https://协议
    - 同时更新API地址和网站地址字段
    - 保持URL输入验证,确保API地址有效性
    - 提升用户体验:用户可输入api.example.com等简化格式
  • 增强供应商配置:添加网站地址字段和智能推测功能
    - 添加websiteUrl可选字段到Provider类型
    - 实现API地址到网站地址的自动推测逻辑(去除api.前缀)
    - 在添加/编辑供应商表单中增加网站地址字段
    - 供应商列表智能显示:有网址显示可点击链接,无网址显示API地址
    - 提升用户体验:避免点击API端点地址导致的错误页面
  • 修复fetch API超时实现:使用AbortController替换不支持的timeout参数
    - 替换fetch中的timeout选项为AbortController + setTimeout实现
    - 修复TypeScript编译错误:timeout不存在于RequestInit类型中
    - 添加proper超时清理逻辑避免内存泄漏
    - 更新CLAUDE.md文档:统一使用pnpm命令,补充IPC接口说明
  • 简化过度设计,恢复原生弹窗
    - 删除 ConfirmModal 和 MessageModal 组件
    - 恢复原生 alert() 和 confirm() 弹窗
    - 移除不必要的加载状态指示器
    - 移除切换供应商的确认对话框
    - 简化代码,提升响应速度和用户体验
  • 添加加载状态指示器
    - 在切换供应商时显示加载状态
    - 禁用操作按钮防止重复提交
    - 提供视觉反馈改善用户体验
  • 添加切换供应商的确认对话框
    - 切换供应商前显示确认对话框
    - 防止误操作导致的意外切换
    - 提升用户操作安全性
  • 改进 ID 生成方式避免冲突
    - 使用时间戳+随机字符串组合生成唯一ID
    - 避免快速连击导致的ID冲突问题
    - 提升数据一致性和稳定性
  • 用 Modal 组件替换所有 alert 弹窗
    - 创建 ConfirmModal 和 MessageModal 组件
    - 更新 App.tsx 使用新的 Modal 组件
    - 改进表单验证错误显示
    - 提升用户体验和界面一致性
  • 修复 any 类型为具体的接口定义
    - 定义 ClaudeCodeConfig 接口替代 any 类型
    - 提升类型安全性和代码可维护性
    - 明确配置文件结构
  • 移除调试用的 console.log 语句
    - 清理 EditProviderModal.tsx 中的调试日志
    - 保留必要的错误日志输出
    - 提升代码整洁度
  • 修复缺失的 checkStatus IPC处理器
    - 添加 checkStatus IPC handler 到主进程
    - 实现基础的 API 连通性检查
    - 修复 preload API 与主进程不匹配的问题
  • 移除状态检测功能,专注核心切换功能
    - 删除 checkProviderStatus 函数和相关 IPC 处理
    - 移除 App.tsx 中所有状态检测相关的状态和函数
    - 简化 ProviderList.tsx,去除状态显示和检查按钮
    - 清理 types.ts 中的 ProviderStatus 类型定义
    - 界面更简洁,专注于供应商切换这一核心功能
  • 修复按钮禁用逻辑:临时禁用状态检查功能
    - 临时禁用"检查状态"按钮(功能开发中)
    - 移除"启用"按钮对在线状态的依赖
    - 修复因状态检查未完成导致所有供应商无法启用的问题
  • 添加配置文件浏览选择功能
    - 在主进程添加文件选择对话框,支持选择 settings.json 配置文件
    - 更新类型定义和预加载脚本,添加 selectConfigFile API
    - 在界面底部配置路径区域添加"浏览"按钮
    - 优化样式布局,使配置路径和浏览按钮水平排列
    - 修复 React 导入警告,移除未使用的 React 导入
  • 重构状态检测功能:清理复杂逻辑,保留UI结构
    ## 主要变更
    - 移除所有Claude命令调用和进程管理逻辑
    - 简化检测函数,暂时返回"功能开发中"状态
    - 添加单独检查状态按钮和相关UI交互
    - 保留完整的供应商管理功能(添加、编辑、删除、切换)
    
    ## 技术优化
    - 删除复杂的超时机制、进程监听、错误处理
    - 移除axios依赖和HTTP请求相关代码
    - 清理竞态条件和队列管理逻辑
    - 保持清晰的UI状态管理
    
    ## UI改进
    - 添加橙色主题的单独检查按钮
    - 增强检查状态的视觉反馈(🔄 进度指示器)
    - 保留所有状态显示逻辑等待功能重新实现
  • 增强供应商状态检查功能
    - 新增 Anthropic 官方状态检查,优先检查服务可用性
    - 改进错误处理和状态码判断逻辑
    - 增加超时时间到20秒,提高连接稳定性
    - 优化错误信息显示,区分认证错误和服务不可用
    - 使用最新的 claude-sonnet-4 模型进行测试
  • 移除自动状态检查,改为手动检查模式
    - 删除定时检查逻辑,避免不必要的 token 消耗
    - 按钮文本从"刷新状态"改为"检查状态"
    - 现在只能手动触发状态检查
  • 添加供应商编辑功能和密码显示切换
    - 为供应商列表添加启用和编辑按钮
    - 创建EditProviderModal组件支持编辑供应商信息
    - 实现updateProvider API接口
    - 为API Key输入框添加密码显示/隐藏功能,使用SVG图标
    - 更新预设供应商配置为YesCode和PackyCode
    - 移除model字段,简化供应商配置
  • 修复 Electron 应用窗口不显示的问题
    - 修正 Electron 依赖版本为 28.0.0(解决安装问题)
    - 更新 package.json 中的启动脚本,改进并发命令执行
    - 修正主进程入口文件路径配置
    - 调整 TypeScript 编译配置的根目录设置
    - 添加 Windows 开发环境启动脚本 start-dev.bat
    - 更新 .gitignore 排除编译产物和锁文件
    
    问题原因:pnpm 默认阻止了 Electron 安装脚本执行,导致应用无法正常启动