orynxml-ai / schema.sql
Speedofmastery's picture
Upload folder using huggingface_hub
2f28b62 verified
-- OpenManus Database Schema for Cloudflare D1
-- Users table to store user information
CREATE TABLE IF NOT EXISTS users (
id TEXT PRIMARY KEY,
mobile_number TEXT UNIQUE NOT NULL,
full_name TEXT NOT NULL,
password_hash TEXT NOT NULL,
avatar_url TEXT,
preferences TEXT, -- JSON string for user preferences
is_active BOOLEAN DEFAULT TRUE,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
-- Sessions table to store user sessions
CREATE TABLE IF NOT EXISTS sessions (
id TEXT PRIMARY KEY,
user_id TEXT NOT NULL,
title TEXT,
metadata TEXT, -- JSON string for session metadata
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP,
expires_at DATETIME,
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
);
-- Conversations table to store chat messages
CREATE TABLE IF NOT EXISTS conversations (
id TEXT PRIMARY KEY,
session_id TEXT NOT NULL,
role TEXT NOT NULL, -- 'user', 'assistant', 'system'
content TEXT NOT NULL,
metadata TEXT, -- JSON string for message metadata (files, tools used, etc.)
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (session_id) REFERENCES sessions(id) ON DELETE CASCADE
);
-- Files table to store uploaded file information
CREATE TABLE IF NOT EXISTS files (
id TEXT PRIMARY KEY,
user_id TEXT NOT NULL,
session_id TEXT,
filename TEXT NOT NULL,
content_type TEXT,
size INTEGER,
r2_key TEXT NOT NULL, -- Key in R2 storage
bucket TEXT NOT NULL, -- Which R2 bucket
metadata TEXT, -- JSON string for file metadata
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
FOREIGN KEY (session_id) REFERENCES sessions(id) ON DELETE SET NULL
);
-- Agents table to store agent configurations
CREATE TABLE IF NOT EXISTS agents (
id TEXT PRIMARY KEY,
user_id TEXT NOT NULL,
name TEXT NOT NULL,
description TEXT,
system_prompt TEXT,
model TEXT,
tools TEXT, -- JSON array of enabled tools
config TEXT, -- JSON configuration object
is_active BOOLEAN DEFAULT TRUE,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
);
-- Agent sessions table for durable object session tracking
CREATE TABLE IF NOT EXISTS agent_sessions (
id TEXT PRIMARY KEY,
agent_id TEXT NOT NULL,
user_id TEXT NOT NULL,
session_id TEXT NOT NULL,
durable_object_id TEXT, -- ID of the corresponding durable object
status TEXT DEFAULT 'active', -- 'active', 'paused', 'completed', 'error'
metadata TEXT, -- JSON string for session state
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (agent_id) REFERENCES agents(id) ON DELETE CASCADE,
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
FOREIGN KEY (session_id) REFERENCES sessions(id) ON DELETE CASCADE
);
-- Usage tracking table for monitoring and analytics
CREATE TABLE IF NOT EXISTS usage_logs (
id TEXT PRIMARY KEY,
user_id TEXT NOT NULL,
session_id TEXT,
agent_id TEXT,
action TEXT NOT NULL, -- 'chat', 'upload', 'tool_use', etc.
resource_type TEXT, -- 'd1', 'r2', 'kv', 'durable_object'
resource_id TEXT,
tokens_used INTEGER DEFAULT 0,
duration_ms INTEGER DEFAULT 0,
cost_cents INTEGER DEFAULT 0,
metadata TEXT, -- JSON string for additional details
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
FOREIGN KEY (session_id) REFERENCES sessions(id) ON DELETE SET NULL,
FOREIGN KEY (agent_id) REFERENCES agents(id) ON DELETE SET NULL
);
-- Create indexes for better performance
CREATE INDEX IF NOT EXISTS idx_users_mobile_number ON users(mobile_number);
CREATE INDEX IF NOT EXISTS idx_sessions_user_id ON sessions(user_id);
CREATE INDEX IF NOT EXISTS idx_sessions_created_at ON sessions(created_at);
CREATE INDEX IF NOT EXISTS idx_conversations_session_id ON conversations(session_id);
CREATE INDEX IF NOT EXISTS idx_conversations_created_at ON conversations(created_at);
CREATE INDEX IF NOT EXISTS idx_files_user_id ON files(user_id);
CREATE INDEX IF NOT EXISTS idx_files_session_id ON files(session_id);
CREATE INDEX IF NOT EXISTS idx_files_created_at ON files(created_at);
CREATE INDEX IF NOT EXISTS idx_agents_user_id ON agents(user_id);
CREATE INDEX IF NOT EXISTS idx_agent_sessions_user_id ON agent_sessions(user_id);
CREATE INDEX IF NOT EXISTS idx_agent_sessions_session_id ON agent_sessions(session_id);
CREATE INDEX IF NOT EXISTS idx_usage_logs_user_id ON usage_logs(user_id);
CREATE INDEX IF NOT EXISTS idx_usage_logs_created_at ON usage_logs(created_at);
-- Insert a default system user for system-level operations
INSERT OR IGNORE INTO users (id, mobile_number, full_name, password_hash)
VALUES ('system', '0000000000', 'OpenManus System', 'system_hash');
-- Insert a default agent configuration
INSERT OR IGNORE INTO agents (id, user_id, name, description, system_prompt, model, tools)
VALUES (
'default-agent',
'system',
'OpenManus Assistant',
'Default OpenManus AI assistant with full capabilities',
'You are OpenManus, an intelligent AI assistant with access to various tools and services. You help users with a wide range of tasks including file management, data analysis, web browsing, and more. Always be helpful, accurate, and concise in your responses.',
'gpt-4-turbo-preview',
'["file_operations", "web_search", "data_analysis", "browser_use", "python_execute"]'
);