Governed substrate for autonomous agents: scoped identity (passports), audited actions, MCP workspace. Infra IPs and secrets redacted for public release.
114 lines
No EOL
3.9 KiB
SQL
114 lines
No EOL
3.9 KiB
SQL
-- Migration 014: Labs Tables (ADR-043)
|
|
-- Laboratories feature for AI workflow management
|
|
-- Created: 2026-01-24
|
|
|
|
-- ============================================================
|
|
-- Labs Projects Table
|
|
-- ============================================================
|
|
|
|
CREATE TABLE IF NOT EXISTS labs_projects (
|
|
id SERIAL PRIMARY KEY,
|
|
space_id INTEGER REFERENCES spaces(id),
|
|
project_id VARCHAR(255) UNIQUE NOT NULL,
|
|
title VARCHAR(255) NOT NULL,
|
|
description TEXT,
|
|
settings JSONB DEFAULT '{}',
|
|
ai_default_provider_id INTEGER,
|
|
ai_default_agent_id INTEGER,
|
|
created_at TIMESTAMP DEFAULT NOW(),
|
|
updated_at TIMESTAMP DEFAULT NOW()
|
|
);
|
|
|
|
-- Indexes for labs_projects
|
|
CREATE INDEX IF NOT EXISTS idx_labs_projects_space ON labs_projects(space_id);
|
|
CREATE INDEX IF NOT EXISTS idx_labs_projects_project_id ON labs_projects(project_id);
|
|
|
|
-- ============================================================
|
|
-- Labs Nodes Table
|
|
-- ============================================================
|
|
|
|
CREATE TABLE IF NOT EXISTS labs_nodes (
|
|
id SERIAL PRIMARY KEY,
|
|
project_id VARCHAR(255) NOT NULL,
|
|
node_id VARCHAR(255) NOT NULL,
|
|
type VARCHAR(100) NOT NULL,
|
|
title VARCHAR(255) NOT NULL,
|
|
content TEXT,
|
|
meta JSONB DEFAULT '{}',
|
|
ai_config JSONB DEFAULT '{}',
|
|
ai_agent_id INTEGER,
|
|
ai_provider_id INTEGER,
|
|
ai_routing_config JSONB DEFAULT '{}',
|
|
ui_config JSONB DEFAULT '{}',
|
|
ai_visible BOOLEAN DEFAULT true,
|
|
created_at TIMESTAMP DEFAULT NOW(),
|
|
updated_at TIMESTAMP DEFAULT NOW(),
|
|
UNIQUE(project_id, node_id)
|
|
);
|
|
|
|
-- Indexes for labs_nodes
|
|
CREATE INDEX IF NOT EXISTS idx_labs_nodes_project ON labs_nodes(project_id);
|
|
|
|
-- ============================================================
|
|
-- Labs Edges Table
|
|
-- ============================================================
|
|
|
|
CREATE TABLE IF NOT EXISTS labs_edges (
|
|
id SERIAL PRIMARY KEY,
|
|
project_id VARCHAR(255) NOT NULL,
|
|
edge_id VARCHAR(255) NOT NULL,
|
|
source_node_id VARCHAR(255) NOT NULL,
|
|
target_node_id VARCHAR(255) NOT NULL,
|
|
source_handle VARCHAR(100),
|
|
target_handle VARCHAR(100),
|
|
created_at TIMESTAMP DEFAULT NOW(),
|
|
UNIQUE(project_id, edge_id)
|
|
);
|
|
|
|
-- Indexes for labs_edges
|
|
CREATE INDEX IF NOT EXISTS idx_labs_edges_project ON labs_edges(project_id);
|
|
|
|
-- ============================================================
|
|
-- Labs AI Templates Table
|
|
-- ============================================================
|
|
|
|
CREATE TABLE IF NOT EXISTS labs_ai_templates (
|
|
id SERIAL PRIMARY KEY,
|
|
mindworkflow_id VARCHAR(100) UNIQUE NOT NULL,
|
|
name VARCHAR(255) NOT NULL,
|
|
category VARCHAR(100) NOT NULL,
|
|
description TEXT,
|
|
system_prompt TEXT,
|
|
user_prompt_example TEXT,
|
|
inputs JSONB DEFAULT '[]',
|
|
settings JSONB DEFAULT '{}',
|
|
routing_config JSONB DEFAULT '{}',
|
|
ai_agent_id INTEGER,
|
|
created_at TIMESTAMP DEFAULT NOW()
|
|
);
|
|
|
|
-- ============================================================
|
|
-- Extend AI Operators Table
|
|
-- ============================================================
|
|
|
|
-- Note: AI Operators is a universal_table, not a direct SQL table
|
|
-- These columns will be added via the universal table system
|
|
-- This is documented here for reference but implemented in the API
|
|
|
|
-- ALTER TABLE "AI Operators"
|
|
-- ADD COLUMN IF NOT EXISTS integration_key VARCHAR(100),
|
|
-- ADD COLUMN IF NOT EXISTS default_model VARCHAR(100),
|
|
-- ADD COLUMN IF NOT EXISTS supported_models JSONB DEFAULT '[]',
|
|
-- ADD COLUMN IF NOT EXISTS mindworkflow_config JSONB DEFAULT '{}';
|
|
|
|
-- ============================================================
|
|
-- SQLite Compatibility Adjustments
|
|
-- ============================================================
|
|
|
|
-- For SQLite, we need to adjust some syntax
|
|
-- SERIAL -> INTEGER PRIMARY KEY AUTOINCREMENT
|
|
-- JSONB -> TEXT (JSON stored as text)
|
|
-- BOOLEAN -> INTEGER (0/1)
|
|
-- NOW() -> datetime('now')
|
|
|
|
-- Note: The database adapter handles these differences automatically |