新增: AI Chat多项增强(审批去重/编辑重发/导出/实体引用/会话置顶搜索)+任务推进链df-nodes落地

This commit is contained in:
2026-06-16 12:41:13 +08:00
parent 212a927eee
commit 7d5cd4c89a
62 changed files with 4576 additions and 248 deletions

View File

@@ -34,7 +34,7 @@ pub fn run(conn: &Connection) -> Result<()> {
// 迁移步骤链: 顺序执行,跳过已应用的版本(current_version < N 才跑)。
// 新增版本时,在此数组追加一项 (N, migrate_vN) 即可,无需改逻辑。
let steps: [(i32, fn(&Connection) -> Result<()>); 15] = [
let steps: [(i32, fn(&Connection) -> Result<()>); 16] = [
(1, migrate_v1),
(2, migrate_v2),
(3, migrate_v3),
@@ -50,6 +50,7 @@ pub fn run(conn: &Connection) -> Result<()> {
(13, migrate_v13),
(14, migrate_v14),
(15, migrate_v15),
(16, migrate_v16),
];
for (version, migrate_fn) in steps {
@@ -276,6 +277,24 @@ fn migrate_v15(conn: &Connection) -> Result<()> {
Ok(())
}
/// V16: 幂等补 ai_conversations.pinned 列(对话置顶,UX-17)
///
/// 侧栏置顶分组排序信号:前端按 pinned DESC, updated_at DESC 排,置顶在前。
/// 纯元数据标记(同 archived),NOT NULL DEFAULT 0 保证老库行非 NULL,AiConversationRecord.pinned 为 bool。
/// 用 PRAGMA 探测列存在性,缺失才 ALTER(同 v4/v5/v6/v8/v10/v11/v14/v15 模式),对新库/老库均安全。
fn migrate_v16(conn: &Connection) -> Result<()> {
if !column_exists(conn, "ai_conversations", "pinned") {
conn.execute(
"ALTER TABLE ai_conversations ADD COLUMN pinned INTEGER NOT NULL DEFAULT 0",
[],
)?;
tracing::info!("v16: 补建 ai_conversations.pinned 列(对话置顶)");
}
conn.execute("INSERT INTO schema_version (version) VALUES (?)", [16])?;
tracing::info!("迁移 v16 完成");
Ok(())
}
/// V1 建表 SQL
const V1_SQL: &str = "
-- 想法表