feat(storage): add SQLite wrapper and full schema migrations (15 tables)
This commit is contained in:
113
internal/storage/migrations.go
Normal file
113
internal/storage/migrations.go
Normal file
@@ -0,0 +1,113 @@
|
||||
package storage
|
||||
|
||||
var migrations = []string{
|
||||
divacodeSchema,
|
||||
companionSchema,
|
||||
}
|
||||
|
||||
const divacodeSchema = `
|
||||
CREATE TABLE IF NOT EXISTS conversations (
|
||||
id TEXT PRIMARY KEY,
|
||||
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
||||
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS messages (
|
||||
id TEXT PRIMARY KEY,
|
||||
conversation_id TEXT NOT NULL REFERENCES conversations(id),
|
||||
role TEXT NOT NULL CHECK(role IN ('user','assistant','system','tool')),
|
||||
content TEXT NOT NULL,
|
||||
tool_call TEXT,
|
||||
token_count INTEGER,
|
||||
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_messages_conversation ON messages(conversation_id);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS context_state (
|
||||
conversation_id TEXT PRIMARY KEY REFERENCES conversations(id),
|
||||
token_count INTEGER NOT NULL DEFAULT 0,
|
||||
summary TEXT
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS memories (
|
||||
id TEXT PRIMARY KEY,
|
||||
content TEXT NOT NULL,
|
||||
embedding BLOB,
|
||||
source TEXT,
|
||||
importance REAL DEFAULT 0.5,
|
||||
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
||||
last_accessed TEXT
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_memories_importance ON memories(importance);
|
||||
CREATE INDEX IF NOT EXISTS idx_memories_created ON memories(created_at);
|
||||
`
|
||||
|
||||
const companionSchema = `
|
||||
CREATE TABLE IF NOT EXISTS personality_traits (
|
||||
id TEXT PRIMARY KEY,
|
||||
trait TEXT NOT NULL UNIQUE,
|
||||
value REAL NOT NULL DEFAULT 0.5,
|
||||
min_value REAL NOT NULL DEFAULT 0.0,
|
||||
max_value REAL NOT NULL DEFAULT 1.0,
|
||||
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS relationship_metrics (
|
||||
id TEXT PRIMARY KEY,
|
||||
metric TEXT NOT NULL UNIQUE,
|
||||
value REAL NOT NULL DEFAULT 0.0,
|
||||
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS shared_topics (
|
||||
id TEXT PRIMARY KEY,
|
||||
topic TEXT NOT NULL UNIQUE,
|
||||
count INTEGER NOT NULL DEFAULT 1,
|
||||
last_discussed TEXT
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS inside_jokes (
|
||||
id TEXT PRIMARY KEY,
|
||||
joke TEXT NOT NULL,
|
||||
context TEXT,
|
||||
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS diary_entries (
|
||||
id TEXT PRIMARY KEY,
|
||||
date TEXT NOT NULL,
|
||||
summary TEXT NOT NULL,
|
||||
mood TEXT,
|
||||
topics TEXT,
|
||||
observations TEXT,
|
||||
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS observations (
|
||||
id TEXT PRIMARY KEY,
|
||||
content TEXT NOT NULL,
|
||||
confidence REAL DEFAULT 0.5,
|
||||
category TEXT,
|
||||
applied INTEGER DEFAULT 0,
|
||||
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS agent_promises (
|
||||
id TEXT PRIMARY KEY,
|
||||
promise TEXT NOT NULL,
|
||||
context TEXT,
|
||||
fulfilled INTEGER DEFAULT 0,
|
||||
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
||||
deadline TEXT
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS agent_strategies (
|
||||
id TEXT PRIMARY KEY,
|
||||
situation TEXT NOT NULL,
|
||||
strategy TEXT NOT NULL,
|
||||
outcome TEXT,
|
||||
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
||||
);
|
||||
`
|
||||
Reference in New Issue
Block a user