94 lines
3.4 KiB
SQL
94 lines
3.4 KiB
SQL
-- Spore Agent Commons — Initial Schema
|
|
-- Requires: pgvector extension
|
|
|
|
CREATE EXTENSION IF NOT EXISTS vector;
|
|
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
|
|
|
|
-- Universal entity table
|
|
CREATE TABLE IF NOT EXISTS entities (
|
|
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
|
|
rid TEXT UNIQUE NOT NULL,
|
|
kind TEXT NOT NULL,
|
|
status TEXT NOT NULL DEFAULT 'active',
|
|
content JSONB NOT NULL DEFAULT '{}',
|
|
embedding vector(1024),
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_entities_rid ON entities (rid);
|
|
CREATE INDEX IF NOT EXISTS idx_entities_kind ON entities (kind);
|
|
CREATE INDEX IF NOT EXISTS idx_entities_content ON entities USING GIN (content);
|
|
|
|
-- Governance specification documents (DAG)
|
|
CREATE TABLE IF NOT EXISTS governance_docs (
|
|
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
|
|
doc_id TEXT UNIQUE NOT NULL,
|
|
doc_kind TEXT NOT NULL,
|
|
title TEXT NOT NULL DEFAULT '',
|
|
status TEXT NOT NULL DEFAULT 'draft',
|
|
body TEXT NOT NULL DEFAULT '',
|
|
frontmatter JSONB NOT NULL DEFAULT '{}',
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_governance_docs_kind ON governance_docs (doc_kind);
|
|
CREATE INDEX IF NOT EXISTS idx_governance_docs_status ON governance_docs (status);
|
|
|
|
-- Governance DAG edges (depends_on relationships)
|
|
CREATE TABLE IF NOT EXISTS governance_deps (
|
|
from_doc TEXT NOT NULL REFERENCES governance_docs(doc_id) ON DELETE CASCADE,
|
|
to_doc TEXT NOT NULL REFERENCES governance_docs(doc_id) ON DELETE CASCADE,
|
|
PRIMARY KEY (from_doc, to_doc)
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_governance_deps_to ON governance_deps (to_doc);
|
|
|
|
-- Holons (agents, teams, organizations)
|
|
CREATE TABLE IF NOT EXISTS holons (
|
|
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
|
|
rid TEXT UNIQUE NOT NULL,
|
|
slug TEXT UNIQUE NOT NULL,
|
|
name TEXT NOT NULL,
|
|
holon_type TEXT NOT NULL DEFAULT 'agent',
|
|
description TEXT NOT NULL DEFAULT '',
|
|
membrane_config JSONB NOT NULL DEFAULT '{}',
|
|
metadata JSONB NOT NULL DEFAULT '{}',
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_holons_slug ON holons (slug);
|
|
CREATE INDEX IF NOT EXISTS idx_holons_type ON holons (holon_type);
|
|
|
|
-- Immutable append-only event log
|
|
CREATE TABLE IF NOT EXISTS events (
|
|
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
|
|
sequence_num BIGSERIAL UNIQUE,
|
|
entity_rid TEXT NOT NULL,
|
|
event_kind TEXT NOT NULL,
|
|
actor_rid TEXT,
|
|
payload JSONB NOT NULL DEFAULT '{}',
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_events_entity ON events (entity_rid);
|
|
CREATE INDEX IF NOT EXISTS idx_events_sequence ON events (sequence_num);
|
|
CREATE INDEX IF NOT EXISTS idx_events_kind ON events (event_kind);
|
|
|
|
-- Federation peer nodes
|
|
CREATE TABLE IF NOT EXISTS koi_peers (
|
|
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
|
|
node_rid TEXT UNIQUE NOT NULL,
|
|
node_url TEXT NOT NULL,
|
|
trust_tier TEXT NOT NULL DEFAULT 'monitored',
|
|
handshake_status TEXT NOT NULL DEFAULT 'pending',
|
|
config JSONB NOT NULL DEFAULT '{}',
|
|
last_seen_at TIMESTAMPTZ,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_koi_peers_trust ON koi_peers (trust_tier);
|