feat(channel-memory): add extraction store schema

This commit is contained in:
Goon committed 2026-05-29 20:48:12 +07:00
1 parent 4c4d95ce49
commit e6e7aded0c
11 files changed
+836 -39

No files matched your search

+71
View File
@@ -1141,6 +1141,77 @@ CREATE TABLE IF NOT EXISTS channel_pending_messages (
CREATE INDEX IF NOT EXISTS idx_channel_pending_messages_lookup ON channel_pending_messages(channel_name, history_key, created_at);
CREATE INDEX IF NOT EXISTS idx_channel_pending_messages_tenant ON channel_pending_messages(tenant_id);
-- ============================================================
-- Table: channel_memory_extraction_runs
-- ============================================================
CREATE TABLE IF NOT EXISTS channel_memory_extraction_runs (
id TEXT NOT NULL PRIMARY KEY,
tenant_id TEXT NOT NULL REFERENCES tenants(id) ON DELETE CASCADE,
channel_instance_id TEXT NOT NULL REFERENCES channel_instances(id) ON DELETE CASCADE,
channel_name VARCHAR(255) NOT NULL,
agent_id TEXT NOT NULL REFERENCES agents(id) ON DELETE CASCADE,
user_id VARCHAR(255) NOT NULL DEFAULT '',
history_key VARCHAR(255) NOT NULL,
trigger VARCHAR(32) NOT NULL DEFAULT 'scheduled',
status VARCHAR(32) NOT NULL DEFAULT 'pending',
source_start_id VARCHAR(255) NOT NULL DEFAULT '',
source_end_id VARCHAR(255) NOT NULL DEFAULT '',
source_start_at TEXT,
source_end_at TEXT,
message_count INTEGER NOT NULL DEFAULT 0,
redaction_count INTEGER NOT NULL DEFAULT 0,
redaction_types TEXT NOT NULL DEFAULT '[]',
item_count INTEGER NOT NULL DEFAULT 0,
error_message TEXT NOT NULL DEFAULT '',
started_at TEXT,
completed_at TEXT,
created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
updated_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
UNIQUE (tenant_id, channel_instance_id, history_key, source_start_id, source_end_id)
);
CREATE INDEX IF NOT EXISTS idx_channel_memory_runs_channel
ON channel_memory_extraction_runs(tenant_id, channel_instance_id, created_at DESC);
CREATE INDEX IF NOT EXISTS idx_channel_memory_runs_status
ON channel_memory_extraction_runs(tenant_id, status, created_at DESC);
-- ============================================================
-- Table: channel_memory_extraction_items
-- ============================================================
CREATE TABLE IF NOT EXISTS channel_memory_extraction_items (
id TEXT NOT NULL PRIMARY KEY,
tenant_id TEXT NOT NULL REFERENCES tenants(id) ON DELETE CASCADE,
run_id TEXT NOT NULL REFERENCES channel_memory_extraction_runs(id) ON DELETE CASCADE,
channel_instance_id TEXT NOT NULL REFERENCES channel_instances(id) ON DELETE CASCADE,
agent_id TEXT NOT NULL REFERENCES agents(id) ON DELETE CASCADE,
user_id VARCHAR(255) NOT NULL DEFAULT '',
item_hash VARCHAR(128) NOT NULL,
item_type VARCHAR(64) NOT NULL,
summary TEXT NOT NULL,
topics TEXT NOT NULL DEFAULT '[]',
entities TEXT NOT NULL DEFAULT '[]',
confidence REAL NOT NULL DEFAULT 0,
source_id VARCHAR(255) NOT NULL DEFAULT '',
status VARCHAR(32) NOT NULL DEFAULT 'pending_review',
approved_by VARCHAR(255) NOT NULL DEFAULT '',
approved_at TEXT,
rejected_by VARCHAR(255) NOT NULL DEFAULT '',
rejected_at TEXT,
deleted_at TEXT,
written_at TEXT,
episodic_id VARCHAR(64) NOT NULL DEFAULT '',
created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
updated_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
UNIQUE (tenant_id, run_id, item_hash)
);
CREATE INDEX IF NOT EXISTS idx_channel_memory_items_channel_status
ON channel_memory_extraction_items(tenant_id, channel_instance_id, status, created_at DESC);
CREATE INDEX IF NOT EXISTS idx_channel_memory_items_run
ON channel_memory_extraction_items(tenant_id, run_id);
-- ============================================================
-- Table: channel_contacts
-- ============================================================