mirror of
https://github.com/allaunthefox/Research-Stack.git
synced 2026-07-31 03:05:21 +00:00
cleanup(ene): add canonical SQL schema for chat/session sync tables
This commit is contained in:
parent
e630fd0612
commit
b8cc57943e
1 changed files with 86 additions and 0 deletions
|
|
@ -0,0 +1,86 @@
|
|||
-- Canonical ENE chat/session sync schema
|
||||
--
|
||||
-- This schema is consumed by:
|
||||
-- - 4-Infrastructure/infra/ene-session-sync (Rust)
|
||||
--
|
||||
-- Policy:
|
||||
-- - treat this file as the canonical DDL source for these tables
|
||||
-- - code should not embed divergent CREATE TABLE strings
|
||||
|
||||
CREATE SCHEMA IF NOT EXISTS ene;
|
||||
|
||||
-- Optional extension (non-fatal if unavailable).
|
||||
CREATE EXTENSION IF NOT EXISTS vector;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS ene.chat_sessions (
|
||||
session_id TEXT PRIMARY KEY,
|
||||
title TEXT,
|
||||
agent TEXT,
|
||||
model TEXT,
|
||||
workspace_fingerprint TEXT,
|
||||
workspace_root TEXT,
|
||||
fork_parent_session_id TEXT,
|
||||
compaction_count INTEGER NOT NULL DEFAULT 0,
|
||||
compaction_summary TEXT,
|
||||
message_count INTEGER NOT NULL DEFAULT 0,
|
||||
token_input_total BIGINT NOT NULL DEFAULT 0,
|
||||
token_output_total BIGINT NOT NULL DEFAULT 0,
|
||||
created_at_ms BIGINT NOT NULL,
|
||||
updated_at_ms BIGINT NOT NULL,
|
||||
first_message_at_ms BIGINT,
|
||||
last_message_at_ms BIGINT,
|
||||
embedding vector(768),
|
||||
meta JSONB NOT NULL DEFAULT '{}',
|
||||
receipt TEXT,
|
||||
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS ene.chat_messages (
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
session_id TEXT NOT NULL REFERENCES ene.chat_sessions(session_id) ON DELETE CASCADE,
|
||||
message_index INTEGER NOT NULL,
|
||||
role TEXT NOT NULL,
|
||||
blocks JSONB NOT NULL,
|
||||
text_content TEXT,
|
||||
token_input BIGINT NOT NULL DEFAULT 0,
|
||||
token_output BIGINT NOT NULL DEFAULT 0,
|
||||
token_cache_creation BIGINT NOT NULL DEFAULT 0,
|
||||
token_cache_read BIGINT NOT NULL DEFAULT 0,
|
||||
tool_calls JSONB NOT NULL DEFAULT '[]',
|
||||
embedding vector(768),
|
||||
receipt_hash TEXT,
|
||||
created_at_ms BIGINT NOT NULL,
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
||||
UNIQUE(session_id, message_index)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS ene.ingestion_receipts (
|
||||
receipt_id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
shim_name TEXT NOT NULL,
|
||||
status TEXT NOT NULL DEFAULT 'pending',
|
||||
sha256 TEXT NOT NULL,
|
||||
record_count BIGINT NOT NULL DEFAULT 0,
|
||||
source_path TEXT NOT NULL,
|
||||
meta JSONB NOT NULL DEFAULT '{}',
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
||||
);
|
||||
|
||||
-- Idempotent migration helpers.
|
||||
ALTER TABLE ene.chat_sessions ADD COLUMN IF NOT EXISTS title TEXT;
|
||||
ALTER TABLE ene.chat_sessions ADD COLUMN IF NOT EXISTS agent TEXT;
|
||||
ALTER TABLE ene.chat_sessions ADD COLUMN IF NOT EXISTS model TEXT;
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_chat_sessions_updated
|
||||
ON ene.chat_sessions(updated_at_ms DESC);
|
||||
CREATE INDEX IF NOT EXISTS idx_chat_sessions_workspace
|
||||
ON ene.chat_sessions(workspace_fingerprint);
|
||||
CREATE INDEX IF NOT EXISTS idx_chat_messages_session_order
|
||||
ON ene.chat_messages(session_id, message_index);
|
||||
CREATE INDEX IF NOT EXISTS idx_chat_messages_receipt
|
||||
ON ene.chat_messages(receipt_hash);
|
||||
|
||||
-- Optional indexes (non-fatal if missing language config).
|
||||
CREATE INDEX IF NOT EXISTS idx_chat_messages_text_search
|
||||
ON ene.chat_messages USING GIN(to_tsvector('english', COALESCE(text_content, '')));
|
||||
CREATE INDEX IF NOT EXISTS idx_chat_messages_tool_search
|
||||
ON ene.chat_messages USING GIN(tool_calls jsonb_path_ops);
|
||||
Loading…
Add table
Reference in a new issue