Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 6 additions & 2 deletions apps/codex-plus-launcher/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -284,10 +284,14 @@ impl LaunchHooks for LauncherHooks {
}

async fn run_provider_sync(&self) -> anyhow::Result<()> {
let _ = tokio::task::spawn_blocking(|| codex_plus_data::run_provider_sync(None))
let result = tokio::task::spawn_blocking(|| codex_plus_data::run_provider_sync(None))
.await
.map_err(|error| anyhow::anyhow!("provider sync task failed: {error}"))?;
Ok(())
if matches!(result.status, codex_plus_data::ProviderSyncStatus::Synced) {
Ok(())
} else {
anyhow::bail!(result.message)
}
}

async fn apply_active_relay_profile(
Expand Down
58 changes: 35 additions & 23 deletions apps/codex-plus-manager/src-tauri/src/commands.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1180,35 +1180,47 @@ pub async fn sync_providers_now(target_provider: Option<String>) -> CommandResul
.map_err(|error| anyhow::anyhow!("provider sync task failed: {error}"));
match result {
Ok(sync) => {
if is_success_sync_status(&sync.status) {
let succeeded = is_success_sync_status(&sync.status);
if succeeded {
persist_provider_sync_selection(
target_for_settings
.as_deref()
.unwrap_or(&sync.target_provider),
);
}
ok(
&format!(
"供应商已同步一次:{} 个会话文件,{} 行索引,跳过 {} 个占用文件。",
sync.changed_session_files,
sync.sqlite_rows_updated,
sync.skipped_locked_rollout_files.len()
),
json!({
"syncStatus": sync.status,
"targetProvider": sync.target_provider,
"changedSessionFiles": sync.changed_session_files,
"skippedLockedRolloutFiles": sync.skipped_locked_rollout_files,
"sqliteRowsUpdated": sync.sqlite_rows_updated,
"sqliteProviderRowsUpdated": sync.sqlite_provider_rows_updated,
"sqliteUserEventRowsUpdated": sync.sqlite_user_event_rows_updated,
"sqliteCwdRowsUpdated": sync.sqlite_cwd_rows_updated,
"updatedWorkspaceRoots": sync.updated_workspace_roots,
"encryptedContentWarning": sync.encrypted_content_warning,
"backupDir": sync.backup_dir,
"syncMessage": sync.message,
}),
)
let summary = format!(
"供应商已同步一次:{} 个会话文件,{} 行索引,其中 WSL 正本更新 {} 行({} 个数据库),跳过 {} 个占用文件。",
sync.changed_session_files,
sync.sqlite_rows_updated,
sync.wsl_sqlite_rows_updated,
sync.wsl_sqlite_databases_updated,
sync.skipped_locked_rollout_files.len()
);
let failure_message = format!("供应商同步未完成:{}", sync.message);
let payload = json!({
"syncStatus": sync.status,
"targetProvider": sync.target_provider,
"changedSessionFiles": sync.changed_session_files,
"skippedLockedRolloutFiles": sync.skipped_locked_rollout_files,
"sqliteRowsUpdated": sync.sqlite_rows_updated,
"sqliteProviderRowsUpdated": sync.sqlite_provider_rows_updated,
"sqliteUserEventRowsUpdated": sync.sqlite_user_event_rows_updated,
"sqliteCwdRowsUpdated": sync.sqlite_cwd_rows_updated,
"wslSqliteRowsUpdated": sync.wsl_sqlite_rows_updated,
"wslSqliteProviderRowsUpdated": sync.wsl_sqlite_provider_rows_updated,
"wslSqliteUserEventRowsUpdated": sync.wsl_sqlite_user_event_rows_updated,
"wslSqliteCwdRowsUpdated": sync.wsl_sqlite_cwd_rows_updated,
"wslSqliteDatabasesUpdated": sync.wsl_sqlite_databases_updated,
"updatedWorkspaceRoots": sync.updated_workspace_roots,
"encryptedContentWarning": sync.encrypted_content_warning,
"backupDir": sync.backup_dir,
"syncMessage": sync.message,
});
if succeeded {
ok(&summary, payload)
} else {
failed(&failure_message, payload)
}
}
Err(error) => failed(&format!("供应商同步失败:{error}"), json!({})),
}
Expand Down
20 changes: 17 additions & 3 deletions apps/codex-plus-manager/src/App.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -502,11 +502,16 @@ type ProviderSyncPayload = {
sqliteProviderRowsUpdated?: number;
sqliteUserEventRowsUpdated?: number;
sqliteCwdRowsUpdated?: number;
wslSqliteRowsUpdated?: number;
wslSqliteProviderRowsUpdated?: number;
wslSqliteUserEventRowsUpdated?: number;
wslSqliteCwdRowsUpdated?: number;
wslSqliteDatabasesUpdated?: number;
updatedWorkspaceRoots?: number;
encryptedContentWarning?: string | null;
};

type ProviderSyncTargetSource = "config" | "rollout" | "sqlite" | "manual";
type ProviderSyncTargetSource = "config" | "rollout" | "sqlite" | "wsl_sqlite" | "manual";

type ProviderSyncTargetOption = {
id: string;
Expand Down Expand Up @@ -610,18 +615,27 @@ type ScriptMarketResult = CommandResult<{
}>;

function providerSyncProgressMessage(result: CommandResult<ProviderSyncPayload>): string {
if (!isSuccessStatus(result.status)) {
return result.message || t("历史会话修复失败,请查看错误提示后重试。");
}
const changed = result.changedSessionFiles ?? 0;
const rows = result.sqliteRowsUpdated ?? 0;
const target = result.targetProvider || t("当前 provider");
const skipped = result.skippedLockedRolloutFiles?.length ?? 0;
const wslRows = result.wslSqliteRowsUpdated ?? 0;
const wslDatabases = result.wslSqliteDatabasesUpdated ?? 0;
const wslText = wslRows || wslDatabases
? tf(",其中 WSL 正本更新 {0} 行({1} 个数据库)", [wslRows, wslDatabases])
: "";
const skippedText = skipped ? tf(",跳过 {0} 个占用文件", [skipped]) : "";
return tf("已同步到 {0}:修复 {1} 个会话文件,更新 {2} 行索引{3}。", [target, changed, rows, skippedText]);
return tf("已同步到 {0}:修复 {1} 个会话文件,更新 {2} 行索引{3}{4}。", [target, changed, rows, wslText, skippedText]);
}

const providerSyncSourceLabels: Record<ProviderSyncTargetSource, string> = {
config: t("配置"),
rollout: t("会话"),
sqlite: t("索引"),
wsl_sqlite: t("WSL 索引"),
manual: t("手动"),
};

Expand Down Expand Up @@ -1519,7 +1533,7 @@ export function App() {
message: providerSyncProgressMessage(result),
result,
});
if (targetProvider) {
if (targetProvider && isSuccessStatus(result.status)) {
const next = {
...settingsForm,
providerSyncLastSelectedProvider: targetProvider,
Expand Down
9 changes: 7 additions & 2 deletions apps/codex-plus-manager/src/i18n-en.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ export const EN_PLAIN: Record<string, string> = {
"MCP, Skills and Plugins are managed independently as global config and merged in whenever you switch providers.",
"Markdown 导出": "Markdown export",
"Provider 同步目标": "Provider sync target",
"WSL 索引": "WSL index",
"Stepwise 直接发送": "Stepwise direct send",
"基于当前对话生成下一步建议,使用独立 API 配置。": "Generate next-step suggestions from the current conversation using a separate API configuration.",
"插件与模型": "Plugins and models",
Expand Down Expand Up @@ -700,8 +701,10 @@ export const EN_TEMPLATE: Record<string, string> = {
"已删除 {0} 个会话。": "Deleted {0} session(s).",
"已删除 {0} 个,失败 {1} 个:{2}": "Deleted {0}, failed {1}: {2}",
"已加载 {0} 条推荐": "Loaded {0} recommendation(s)",
"已同步到 {0}:修复 {1} 个会话文件,更新 {2} 行索引{3}。":
"Synced to {0}: repaired {1} session file(s), updated {2} index row(s){3}.",
"已同步到 {0}:修复 {1} 个会话文件,更新 {2} 行索引{3}{4}。":
"Synced to {0}: repaired {1} session file(s), updated {2} index row(s){3}{4}.",
",其中 WSL 正本更新 {0} 行({1} 个数据库)":
", including {0} row(s) in {1} authoritative WSL database(s)",
"已安装 {0}": "Installed {0}",
"已缓存 {0} 个插件 / {1} 个技能。": "Cached {0} plugin(s) / {1} skill(s).",
"已运行 {0} 分钟": "Running for {0} minute(s)",
Expand Down Expand Up @@ -827,6 +830,8 @@ export const EN_BACKEND_PATTERNS: Array<[RegExp, string]> = [
[/^无法在 Zed Remote 打开项目。$/, "Cannot open project in Zed Remote."],
[/^移除 Zed 远程项目失败。$/, "Failed to remove Zed remote project."],
[/^供应商已同步一次:(\d+) 个会话文件,(\d+) 行索引,跳过 (\d+) 个占用文件。$/, "Provider synced: $1 session file(s), $2 index row(s), skipped $3 locked file(s)."],
[/^供应商已同步一次:(\d+) 个会话文件,(\d+) 行索引,其中 WSL 正本更新 (\d+) 行((\d+) 个数据库),跳过 (\d+) 个占用文件。$/, "Provider synced: $1 session file(s), $2 index row(s), including $3 row(s) in $4 authoritative WSL database(s), skipped $5 locked file(s)."],
[/^供应商同步未完成:(.+)$/, "Provider sync did not complete: $1"],
[/^供应商同步失败:(.+)$/, "Provider sync failed: $1"],
[/^推荐内容加载失败:(.+)$/, "Failed to load recommendations: $1"],
[/^脚本市场加载失败:(.+)$/, "Failed to load script marketplace: $1"],
Expand Down
1 change: 1 addition & 0 deletions crates/codex-plus-data/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ pub mod backup;
pub mod markdown;
pub mod provider_sync;
pub mod storage;
mod wsl_sqlite;

pub use backup::BackupStore;
pub use markdown::{MarkdownExportService, export_markdown_from_paths};
Expand Down
Loading