Files
sundynix-ForgePilot/src-tauri/migrations/001_initial.sql
T
2026-08-02 21:15:48 +08:00

187 lines
5.8 KiB
SQL

CREATE TABLE IF NOT EXISTS projects (
id TEXT PRIMARY KEY,
name TEXT NOT NULL,
root_path TEXT NOT NULL UNIQUE,
canonical_path TEXT NOT NULL,
is_git_repository INTEGER NOT NULL DEFAULT 0,
trust_level TEXT NOT NULL DEFAULT 'readonly',
detected_stack_json TEXT NOT NULL DEFAULT '{}',
created_at TEXT NOT NULL DEFAULT (datetime('now')),
last_opened_at TEXT NOT NULL DEFAULT (datetime('now'))
);
CREATE TABLE IF NOT EXISTS project_settings (
project_id TEXT PRIMARY KEY,
model_profile_id TEXT,
approval_mode TEXT NOT NULL DEFAULT 'balanced',
git_isolation_mode TEXT NOT NULL DEFAULT 'worktree',
network_policy TEXT NOT NULL DEFAULT 'local_only',
read_roots_json TEXT NOT NULL DEFAULT '[]',
write_roots_json TEXT NOT NULL DEFAULT '[]',
ignored_paths_json TEXT NOT NULL DEFAULT '[]',
commands_json TEXT NOT NULL DEFAULT '{}',
FOREIGN KEY(project_id) REFERENCES projects(id) ON DELETE CASCADE
);
CREATE TABLE IF NOT EXISTS tasks (
id TEXT PRIMARY KEY,
project_id TEXT NOT NULL,
title TEXT NOT NULL,
description TEXT NOT NULL DEFAULT '',
mode TEXT NOT NULL DEFAULT 'planAndExecute',
status TEXT NOT NULL DEFAULT 'draft',
base_revision TEXT,
worktree_path TEXT,
created_at TEXT NOT NULL DEFAULT (datetime('now')),
updated_at TEXT NOT NULL DEFAULT (datetime('now')),
completed_at TEXT,
failure_code TEXT,
failure_message TEXT,
FOREIGN KEY(project_id) REFERENCES projects(id) ON DELETE CASCADE
);
CREATE TABLE IF NOT EXISTS task_events (
id TEXT PRIMARY KEY,
task_id TEXT NOT NULL,
sequence INTEGER NOT NULL,
event_type TEXT NOT NULL,
payload_json TEXT NOT NULL DEFAULT '{}',
created_at TEXT NOT NULL DEFAULT (datetime('now')),
UNIQUE(task_id, sequence),
FOREIGN KEY(task_id) REFERENCES tasks(id) ON DELETE CASCADE
);
CREATE TABLE IF NOT EXISTS messages (
id TEXT PRIMARY KEY,
task_id TEXT NOT NULL,
role TEXT NOT NULL,
content_markdown TEXT NOT NULL DEFAULT '',
metadata_json TEXT NOT NULL DEFAULT '{}',
created_at TEXT NOT NULL DEFAULT (datetime('now')),
FOREIGN KEY(task_id) REFERENCES tasks(id) ON DELETE CASCADE
);
CREATE TABLE IF NOT EXISTS plans (
id TEXT PRIMARY KEY,
task_id TEXT NOT NULL,
version INTEGER NOT NULL DEFAULT 1,
status TEXT NOT NULL DEFAULT 'draft',
content_json TEXT NOT NULL DEFAULT '{}',
created_at TEXT NOT NULL DEFAULT (datetime('now')),
approved_at TEXT,
FOREIGN KEY(task_id) REFERENCES tasks(id) ON DELETE CASCADE
);
CREATE TABLE IF NOT EXISTS tool_calls (
id TEXT PRIMARY KEY,
task_id TEXT NOT NULL,
tool_name TEXT NOT NULL,
arguments_json TEXT NOT NULL DEFAULT '{}',
reason TEXT NOT NULL DEFAULT '',
risk_level TEXT NOT NULL DEFAULT 'low',
approval_status TEXT NOT NULL DEFAULT 'pending',
status TEXT NOT NULL DEFAULT 'pending',
output_summary TEXT,
error_json TEXT,
started_at TEXT,
completed_at TEXT,
FOREIGN KEY(task_id) REFERENCES tasks(id) ON DELETE CASCADE
);
CREATE TABLE IF NOT EXISTS patches (
id TEXT PRIMARY KEY,
task_id TEXT NOT NULL,
version INTEGER NOT NULL DEFAULT 1,
status TEXT NOT NULL DEFAULT 'draft',
base_revision TEXT,
summary TEXT NOT NULL DEFAULT '',
created_at TEXT NOT NULL DEFAULT (datetime('now')),
applied_at TEXT,
FOREIGN KEY(task_id) REFERENCES tasks(id) ON DELETE CASCADE
);
CREATE TABLE IF NOT EXISTS patch_files (
id TEXT PRIMARY KEY,
patch_id TEXT NOT NULL,
file_path TEXT NOT NULL,
operation TEXT NOT NULL,
before_hash TEXT,
after_hash TEXT,
diff_text TEXT NOT NULL DEFAULT '',
review_status TEXT NOT NULL DEFAULT 'pending',
FOREIGN KEY(patch_id) REFERENCES patches(id) ON DELETE CASCADE
);
CREATE TABLE IF NOT EXISTS command_runs (
id TEXT PRIMARY KEY,
task_id TEXT,
program TEXT NOT NULL,
args_json TEXT NOT NULL DEFAULT '[]',
cwd TEXT NOT NULL,
risk_level TEXT NOT NULL DEFAULT 'low',
exit_code INTEGER,
status TEXT NOT NULL DEFAULT 'pending',
output_log_path TEXT,
started_at TEXT NOT NULL DEFAULT (datetime('now')),
completed_at TEXT
);
CREATE TABLE IF NOT EXISTS model_profiles (
id TEXT PRIMARY KEY,
name TEXT NOT NULL,
role TEXT NOT NULL DEFAULT 'planner',
provider TEXT NOT NULL,
base_url TEXT NOT NULL,
model_id TEXT NOT NULL,
api_key_ref TEXT,
context_window INTEGER,
max_output_tokens INTEGER,
temperature REAL,
capabilities_json TEXT NOT NULL DEFAULT '{}',
created_at TEXT NOT NULL DEFAULT (datetime('now'))
);
CREATE TABLE IF NOT EXISTS mcp_servers (
id TEXT PRIMARY KEY,
name TEXT NOT NULL,
transport TEXT NOT NULL DEFAULT 'stdio',
command TEXT,
args_json TEXT NOT NULL DEFAULT '[]',
url TEXT,
status TEXT NOT NULL DEFAULT 'stopped',
auto_start INTEGER NOT NULL DEFAULT 0,
created_at TEXT NOT NULL DEFAULT (datetime('now'))
);
CREATE TABLE IF NOT EXISTS index_files (
id TEXT PRIMARY KEY,
project_id TEXT NOT NULL,
file_path TEXT NOT NULL,
file_size INTEGER NOT NULL DEFAULT 0,
modified_at TEXT NOT NULL,
file_hash TEXT,
language TEXT,
is_ignored INTEGER NOT NULL DEFAULT 0,
index_status TEXT NOT NULL DEFAULT 'pending',
UNIQUE(project_id, file_path),
FOREIGN KEY(project_id) REFERENCES projects(id) ON DELETE CASCADE
);
CREATE TABLE IF NOT EXISTS symbols (
id TEXT PRIMARY KEY,
project_id TEXT NOT NULL,
file_path TEXT NOT NULL,
symbol_name TEXT NOT NULL,
symbol_kind TEXT NOT NULL,
start_line INTEGER NOT NULL,
end_line INTEGER,
parent_symbol_id TEXT,
FOREIGN KEY(project_id) REFERENCES projects(id) ON DELETE CASCADE
);
CREATE TABLE IF NOT EXISTS app_settings (
key TEXT PRIMARY KEY,
value_json TEXT NOT NULL DEFAULT '{}',
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
);