mirror of
https://github.com/yynxxxxx/Codex-X.git
synced 2026-10-02 03:24:52 +08:00
fix: restore Windows routing paths and release v0.3.20
This commit is contained in:
+1
-1
@@ -2,7 +2,7 @@
|
||||
|
||||
记录 Codex-X 的新功能、体验改进和问题修复。
|
||||
|
||||
## [v0.3.19] - 2026-09-18
|
||||
## [v0.3.20] - 2026-09-18
|
||||
|
||||
- 新增「设置 → 路由与故障转移」:可管理本地路由、安排供应商优先顺序,并在服务异常时自动切换;支持调整超时和重试参数,官方登录也可使用本地路由。
|
||||
- 修复添加或切换第三方供应商时,MCP、桌面设置等配置丢失的问题。
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "codex-x",
|
||||
"version": "0.3.19",
|
||||
"version": "0.3.20",
|
||||
"private": true,
|
||||
"description": "Codex Switch & Instruct desktop manager",
|
||||
"type": "module",
|
||||
|
||||
Generated
+1
-1
@@ -492,7 +492,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "codex-x"
|
||||
version = "0.3.19"
|
||||
version = "0.3.20"
|
||||
dependencies = [
|
||||
"base64 0.22.1",
|
||||
"chrono",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "codex-x"
|
||||
version = "0.3.19"
|
||||
version = "0.3.20"
|
||||
description = "Codex Switch & Instruct desktop manager"
|
||||
authors = ["yynxxxxx"]
|
||||
license = "MIT"
|
||||
|
||||
@@ -1486,8 +1486,14 @@ fn stored_directories() -> Result<Vec<PathBuf>> {
|
||||
.query_map([], |row| row.get::<_, String>(0))
|
||||
.map_err(|e| CodexxError::Database(e.to_string()))?
|
||||
.map(|row| {
|
||||
row.map(PathBuf::from)
|
||||
.map_err(|e| CodexxError::Database(e.to_string()))
|
||||
let scope = row.map_err(|e| CodexxError::Database(e.to_string()))?;
|
||||
// Database scopes use lowercase forward slashes on Windows. They
|
||||
// are comparison keys, not the canonical native paths used by the
|
||||
// running-instance map (including Windows' verbatim \\?\ prefix).
|
||||
// Rehydrate using the same path resolution as interactive IPC.
|
||||
#[cfg(target_os = "windows")]
|
||||
let scope = scope.replace('/', "\\");
|
||||
directory(Some(scope))
|
||||
})
|
||||
.collect();
|
||||
paths
|
||||
|
||||
@@ -2357,7 +2357,11 @@ mod tests {
|
||||
let started = Instant::now();
|
||||
proxy.shutdown();
|
||||
assert!(started.elapsed() < Duration::from_millis(500));
|
||||
assert!(TcpStream::connect((std::net::Ipv4Addr::LOCALHOST, proxy.port())).is_err());
|
||||
// Windows can delay a refused connect beyond this fixture's 2-second
|
||||
// stream-idle timeout. Bound the probe while the upstream is paused so
|
||||
// it tests listener shutdown rather than causing an unrelated timeout.
|
||||
let stopped_address = SocketAddr::new(proxy.listen_address(), proxy.port());
|
||||
assert!(TcpStream::connect_timeout(&stopped_address, Duration::from_millis(100)).is_err());
|
||||
release.send(()).unwrap();
|
||||
let mut last = String::new();
|
||||
reader.read_to_string(&mut last).unwrap();
|
||||
|
||||
@@ -435,6 +435,21 @@ fn failed_restore_keeps_the_listener_alive() {
|
||||
stop(&fixture);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn persisted_directory_scopes_resolve_to_the_interactive_runtime_key() {
|
||||
let _guard = crate::app_db::test_db_guard();
|
||||
let fixture = Fixture::new();
|
||||
fixture.enable();
|
||||
let scope = normalized_path_scope(&fixture.dir);
|
||||
let stored = stored_directories().unwrap();
|
||||
let restored = stored
|
||||
.iter()
|
||||
.find(|dir| normalized_path_scope(dir) == scope)
|
||||
.unwrap();
|
||||
assert_eq!(*restored, directory(fixture.scope()).unwrap());
|
||||
assert!(lock_manager().unwrap().contains_key(restored));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn exit_restores_and_rejects_queued_enabling_then_restart_resumes_same_port() {
|
||||
let _guard = crate::app_db::test_db_guard();
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"$schema": "https://schema.tauri.app/config/2",
|
||||
"productName": "Codex-X",
|
||||
"version": "0.3.19",
|
||||
"version": "0.3.20",
|
||||
"identifier": "com.yynxxxxx.codexx",
|
||||
"build": {
|
||||
"frontendDist": "../dist",
|
||||
|
||||
@@ -8,6 +8,16 @@
|
||||
|
||||
日志不得包含 Token、认证文件内容、用户数据或仅适用于某台电脑的隐私路径。
|
||||
|
||||
## 2026-09-18:Windows 发布验证修正
|
||||
|
||||
- v0.3.19 草稿构建在 Windows 测试阶段发现路由重启恢复问题,未公开发布该版本。
|
||||
数据库存储的目录比较键会统一斜线和大小写,启动恢复却直接将其用作原生路径和运行实例键;
|
||||
Windows 的 verbatim 前缀及规范大小写因此与交互入口不一致。恢复时现先还原原生分隔符,
|
||||
再使用交互入口相同的路径解析,新增持久化目录与运行实例一致性的回归。
|
||||
- 流式停止测试在上游等待期间同步探测已关闭端口,Windows 的默认连接等待耗尽了测试的静默期限;
|
||||
改为有明确短期限的连接探测,仍验证停止监听不截断已经开始的响应,不放宽运行时超时策略。
|
||||
- 修正沿用新的 v0.3.20 标签重新发布,保留失败构建记录,不覆盖 v0.3.19 标签。
|
||||
|
||||
## 2026-09-18:按 CC Switch 对齐路由控制与故障转移
|
||||
|
||||
- 对照 CC Switch `06082e189d65e6d6dbadc35dacdac1ce6c79d89a` 的 UI → IPC → 数据库 → 运行时链路,
|
||||
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "codex-x-workspace",
|
||||
"private": true,
|
||||
"version": "0.3.19",
|
||||
"version": "0.3.20",
|
||||
"scripts": {
|
||||
"dev": "pnpm --dir apps/desktop tauri dev",
|
||||
"build": "pnpm --dir apps/desktop tauri build",
|
||||
|
||||
Reference in New Issue
Block a user