claude-os/app/db/schema.sqlite

120 lines
4.9 KiB
Text
Raw Permalink Normal View History

-- SQLite Schema for Code-Forge
-- Replaces PostgreSQL with single-file SQLite database with vector support
-- Enable foreign keys
PRAGMA foreign_keys = ON;
-- Knowledge Bases (Collections)
CREATE TABLE IF NOT EXISTS knowledge_bases (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT UNIQUE NOT NULL,
slug TEXT UNIQUE NOT NULL,
kb_type TEXT NOT NULL DEFAULT 'generic',
description TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
metadata TEXT DEFAULT '{}' -- JSON string
);
CREATE INDEX IF NOT EXISTS idx_kb_name ON knowledge_bases(name);
CREATE INDEX IF NOT EXISTS idx_kb_slug ON knowledge_bases(slug);
CREATE INDEX IF NOT EXISTS idx_kb_type ON knowledge_bases(kb_type);
CREATE INDEX IF NOT EXISTS idx_kb_created_at ON knowledge_bases(created_at);
-- Documents with vector embeddings (using sqlite-vec extension)
-- sqlite-vec stores embeddings in a special format for efficient similarity search
CREATE TABLE IF NOT EXISTS documents (
id INTEGER PRIMARY KEY AUTOINCREMENT,
kb_id INTEGER NOT NULL,
doc_id TEXT NOT NULL,
content TEXT NOT NULL,
embedding BLOB, -- sqlite-vec binary format for 768-dim vectors
metadata TEXT DEFAULT '{}', -- JSON string
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
UNIQUE(kb_id, doc_id),
FOREIGN KEY (kb_id) REFERENCES knowledge_bases(id) ON DELETE CASCADE
);
CREATE INDEX IF NOT EXISTS idx_doc_kb_id ON documents(kb_id);
CREATE INDEX IF NOT EXISTS idx_doc_doc_id ON documents(doc_id);
-- Agent OS specific content (optional)
CREATE TABLE IF NOT EXISTS agent_os_content (
id INTEGER PRIMARY KEY AUTOINCREMENT,
kb_id INTEGER NOT NULL,
content_type TEXT NOT NULL, -- standard, agent, workflow, command, product, spec
name TEXT NOT NULL,
content TEXT NOT NULL,
file_path TEXT,
metadata TEXT DEFAULT '{}', -- JSON string
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
UNIQUE(kb_id, content_type, name),
FOREIGN KEY (kb_id) REFERENCES knowledge_bases(id) ON DELETE CASCADE
);
CREATE INDEX IF NOT EXISTS idx_aos_kb_id ON agent_os_content(kb_id);
CREATE INDEX IF NOT EXISTS idx_aos_content_type ON agent_os_content(content_type);
CREATE INDEX IF NOT EXISTS idx_aos_name ON agent_os_content(name);
-- Projects (new - for Claude OS project management)
CREATE TABLE IF NOT EXISTS projects (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT UNIQUE NOT NULL,
path TEXT UNIQUE NOT NULL,
description TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
metadata TEXT DEFAULT '{}' -- JSON: config, hooks, folder mappings
);
CREATE INDEX IF NOT EXISTS idx_project_name ON projects(name);
CREATE INDEX IF NOT EXISTS idx_project_path ON projects(path);
-- Project MCP Assignments (links projects to their 4 required MCPs)
CREATE TABLE IF NOT EXISTS project_mcps (
id INTEGER PRIMARY KEY AUTOINCREMENT,
project_id INTEGER NOT NULL,
kb_id INTEGER NOT NULL,
mcp_type TEXT NOT NULL, -- knowledge_docs, project_profile, project_index, project_memories
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
UNIQUE(project_id, mcp_type),
FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE,
FOREIGN KEY (kb_id) REFERENCES knowledge_bases(id) ON DELETE CASCADE
);
CREATE INDEX IF NOT EXISTS idx_pmcp_project_id ON project_mcps(project_id);
CREATE INDEX IF NOT EXISTS idx_pmcp_kb_id ON project_mcps(kb_id);
CREATE INDEX IF NOT EXISTS idx_pmcp_type ON project_mcps(mcp_type);
-- Project Folder Configuration (for selecting KB folders)
CREATE TABLE IF NOT EXISTS project_kb_folders (
id INTEGER PRIMARY KEY AUTOINCREMENT,
project_id INTEGER NOT NULL,
mcp_type TEXT NOT NULL, -- knowledge_docs, project_profile, etc.
folder_path TEXT NOT NULL,
auto_sync INTEGER DEFAULT 0, -- 0 = disabled, 1 = enabled
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
UNIQUE(project_id, mcp_type),
FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE
);
CREATE INDEX IF NOT EXISTS idx_pkf_project_id ON project_kb_folders(project_id);
CREATE INDEX IF NOT EXISTS idx_pkf_mcp_type ON project_kb_folders(mcp_type);
-- Knowledge Lifecycle Tracking (for dedup, consolidation, archival audit log)
CREATE TABLE IF NOT EXISTS lifecycle_log (
id INTEGER PRIMARY KEY AUTOINCREMENT,
kb_name TEXT NOT NULL,
operation_type TEXT NOT NULL, -- dedup_scan, dedup_merge, consolidate, archive, restore
status TEXT NOT NULL DEFAULT 'pending',
input_doc_ids TEXT DEFAULT '[]', -- JSON array
output_doc_ids TEXT DEFAULT '[]', -- JSON array
details TEXT DEFAULT '{}', -- JSON blob
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
completed_at TIMESTAMP
);
CREATE INDEX IF NOT EXISTS idx_lifecycle_kb ON lifecycle_log(kb_name);
CREATE INDEX IF NOT EXISTS idx_lifecycle_op ON lifecycle_log(operation_type);