auto-sync: 2026-05-19 13:53:29
This commit is contained in:
+24
-1
@@ -48,7 +48,7 @@ def _migrate_v27(conn: sqlite3.Connection) -> None:
|
||||
|
||||
|
||||
def _migrate_v28(conn: sqlite3.Connection) -> None:
|
||||
"""v2.8 数据迁移:3 新状态 + 归档字段 + CHECK 约束更新"""
|
||||
"""v2.8 数据迁移:3 新状态 + 归档字段 + CHECK 约束更新 + checkpoints 表"""
|
||||
# 1. 添加归档字段
|
||||
_safe_add_column(conn, "tasks", "archived", "INTEGER DEFAULT 0")
|
||||
_safe_add_column(conn, "tasks", "archived_at", "TEXT")
|
||||
@@ -104,6 +104,29 @@ def _migrate_v28(conn: sqlite3.Connection) -> None:
|
||||
CREATE INDEX IF NOT EXISTS idx_tasks_current_agent ON tasks(current_agent);
|
||||
""")
|
||||
|
||||
# 3. checkpoints 表(M3)
|
||||
conn.execute("""CREATE TABLE IF NOT EXISTS checkpoints (
|
||||
id TEXT PRIMARY KEY,
|
||||
task_id TEXT NOT NULL REFERENCES tasks(id),
|
||||
type TEXT NOT NULL CHECK (type IN ('verify', 'decision', 'action')),
|
||||
title TEXT NOT NULL,
|
||||
description TEXT,
|
||||
status TEXT NOT NULL DEFAULT 'pending' CHECK (status IN ('pending', 'approved', 'rejected')),
|
||||
payload TEXT NOT NULL,
|
||||
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
||||
resolved_at TEXT,
|
||||
resolved_by TEXT,
|
||||
resolve_note TEXT
|
||||
)""")
|
||||
conn.execute("CREATE INDEX IF NOT EXISTS idx_checkpoints_task ON checkpoints(task_id)")
|
||||
conn.execute("CREATE INDEX IF NOT EXISTS idx_checkpoints_status ON checkpoints(status)")
|
||||
|
||||
# 4. outputs 扩展字段(M3 成果物)
|
||||
_safe_add_column(conn, "outputs", "file_name", "TEXT")
|
||||
_safe_add_column(conn, "outputs", "file_size", "INTEGER")
|
||||
_safe_add_column(conn, "outputs", "file_path", "TEXT")
|
||||
_safe_add_column(conn, "outputs", "mime_type", "TEXT")
|
||||
|
||||
|
||||
def _safe_add_column(conn: sqlite3.Connection, table: str,
|
||||
column: str, col_type: str) -> None:
|
||||
|
||||
Reference in New Issue
Block a user