feat: 路由不再开机自动接管 + 保存分组即写直连配置 + 官方登录完整备份 (v1.5.16)

- 启动不再自动 router.start():只想用其它功能的用户不再被接管
- 新增 applyDirectToCodex():保存 responses 中转分组即把直连配置写进
  config.toml+auth.json(非本地路由),重启 Codex 即用;本地路由降级为
  '启用本地路由(高级)'显式选项
- chat 协议转换分组(DeepSeek/GLM/Kimi)保存时只提示需启用路由,不自动起
- 新增 snapshotOfficialLogin():首次接管前完整快照官方 auth.json(含OAuth
  tokens)+config.toml(router.json加密存+落盘副本);restoreDirect 优先用它
  100%还原官方登录态,并清理 td-direct 残段
- setActive 按 isRunning 分流:路由在跑走本地路由秒切,否则写直连需重启
- 隔离测试:登录态21/21 + Mac custom回归9/9 全绿
- 版本 1.5.15 → 1.5.16

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
mac
2026-07-16 22:36:56 +08:00
parent 3f27682e78
commit 45ee76e3c8
10 changed files with 215 additions and 54 deletions
+11 -7
View File
@@ -213,15 +213,13 @@ app.whenReady().then(async () => {
if (mainWindow && !mainWindow.isDestroyed()) mainWindow.webContents.send("memory-changed");
},
});
// 有分组就自动启动本地路由
// 启动时不再自动接管/启动本地路由:用户可能只想用其它功能。
// 保存分组已直接写 Codex 直连配置;只有用户显式「启用本地路由」才 start() 路由进程。
// 仅刷新一次托盘菜单以反映当前分组/状态(不 start)。
try {
const st = router.status();
if (st.groups.length) {
await router.start();
rebuildTrayMenu();
}
rebuildTrayMenu();
} catch (e) {
log(`本地路由启动失败:${e.message || e}`);
log(`刷新托盘失败:${e.message || e}`);
}
try {
const r = migrateLegacySkills();
@@ -1303,6 +1301,12 @@ ipcMain.handle("router-apply-codex", async () => {
rebuildTrayMenu();
return { ...r, status: router.status() };
});
// 把指定分组的直连中转配置写进 Codex(不经路由、不起进程)
ipcMain.handle("router-apply-direct", async (_e, { id } = {}) => {
const r = router.applyDirectToCodex(id);
rebuildTrayMenu();
return { ...r, status: router.status() };
});
ipcMain.handle("router-snippet", async () => router.codexSnippet());
ipcMain.handle("router-apply-claude", async () => {
const r = router.applyToClaudeCode();