- feat(codex): 引入 Codex 应用与供应商切换(管理 auth.json/config.toml,支持备份与恢复)

- feat(core): 多应用配置 v2(claude/codex)与 ProviderManager;支持 v1→v2 自动迁移
- feat(ui): 新增 Codex 页签与双编辑器表单;统一 window.api 支持 app 参数
- feat(tauri): 新增 get_config_status/open_config_folder/open_external 命令并适配 Codex
- fix(codex): 主配置缺失时不执行默认导入(对齐 Claude 行为)
- chore: 配置目录展示与重启提示等细节优化
This commit is contained in:
Jason
2025-08-30 21:54:11 +08:00
parent 0e803b53d8
commit c10ace7a84
13 changed files with 891 additions and 279 deletions

View File

@@ -1,36 +1,31 @@
use crate::config::get_app_config_path;
use crate::provider::ProviderManager;
use crate::app_config::MultiAppConfig;
use std::sync::Mutex;
/// 全局应用状态
pub struct AppState {
pub provider_manager: Mutex<ProviderManager>,
pub config: Mutex<MultiAppConfig>,
}
impl AppState {
/// 创建新的应用状态
pub fn new() -> Self {
let config_path = get_app_config_path();
let provider_manager = ProviderManager::load_from_file(&config_path).unwrap_or_else(|e| {
let config = MultiAppConfig::load().unwrap_or_else(|e| {
log::warn!("加载配置失败: {}, 使用默认配置", e);
ProviderManager::default()
MultiAppConfig::default()
});
Self {
provider_manager: Mutex::new(provider_manager),
config: Mutex::new(config),
}
}
/// 保存配置到文件
pub fn save(&self) -> Result<(), String> {
let config_path = get_app_config_path();
let manager = self
.provider_manager
let config = self
.config
.lock()
.map_err(|e| format!("获取锁失败: {}", e))?;
manager.save_to_file(&config_path)
config.save()
}
// 保留按需扩展:若未来需要热加载,可在此实现
}