+
+
Checkpoint 迁移
+
+ 按时间段把 SQLite 旧聊天 checkpoint 同步到 Postgres。同一来源、同一时间段完成后再次执行会跳过。
+
+
+
+
+
+
+
+ SQLite 来源
+
+
+
+ {sourcesLoading ? (
+
+
+ 加载中
+
+ ) : (sources?.source_paths.length ?? 0) > 0 ? (
+
+ {sources?.source_paths.map((path) => (
+
+ {path}
+
+ ))}
+
+ ) : (
+
+ 未配置 SQLite 来源路径
+
+ )}
+
+
+
+
+ {task && (
+
+
+
+
+
总线程
+
+ {task.total_threads}
+
+
+
+
已复制
+
+ {task.copied_threads}
+
+
+
+
已跳过
+
+ {task.skipped_threads}
+
+
+
+
跳过时间段
+
+ {task.skipped_ranges}
+
+
+
+ {(task.message || task.error) && (
+
+ {task.error || task.message}
+
+ )}
+
+ )}
+
+ );
+}
diff --git a/frontend-web/src/pages/WorkspaceRoutes.tsx b/frontend-web/src/pages/WorkspaceRoutes.tsx
index f6e68ad9..923eb137 100644
--- a/frontend-web/src/pages/WorkspaceRoutes.tsx
+++ b/frontend-web/src/pages/WorkspaceRoutes.tsx
@@ -25,6 +25,7 @@ import AdminSkillsPage from './AdminSkillsPage';
import ScheduledTaskRunDetailPage from './ScheduledTaskRunDetailPage';
import ScheduledTasksPage from './ScheduledTasksPage';
import LlmMetricsPage from './LlmMetricsPage';
+import CheckpointMigrationPage from './CheckpointMigrationPage';
import MemoryPage from './MemoryPage';
import PromptPrefixSettingsPage from './PromptPrefixSettingsPage';
import PrivateSquareSettingsPage from './PrivateSquareSettingsPage';
@@ -476,6 +477,18 @@ export default function WorkspaceRoutes({
)
}
/>
+