oh-my-muse/muse-cloud/sql/muse/V4__init_ai_schema.sql

258 lines
11 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- Muse AI 模块初始 SchemaPostgreSQL 16
-- 影响范围AI 任务、候选、智能体、Prompt、质量策略、工具授权。
CREATE TABLE muse_ai_generation (
id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
work_id BIGINT,
chapter_id BIGINT,
block_id BIGINT,
agent_id BIGINT,
agent_version_id BIGINT,
task_type VARCHAR(50) NOT NULL,
status VARCHAR(20) NOT NULL DEFAULT 'queued',
idempotency_key VARCHAR(200) NOT NULL,
input_snapshot JSONB,
output_summary JSONB,
candidate_id BIGINT,
error_code VARCHAR(50),
error_message VARCHAR(500),
retry_count INT NOT NULL DEFAULT 0,
started_at TIMESTAMP,
finished_at TIMESTAMP,
creator VARCHAR(64) NOT NULL DEFAULT '',
create_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updater VARCHAR(64) NOT NULL DEFAULT '',
update_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
deleted BOOLEAN NOT NULL DEFAULT FALSE,
tenant_id BIGINT NOT NULL DEFAULT 0,
CONSTRAINT uk_muse_ai_generation_idem UNIQUE (tenant_id, idempotency_key)
);
CREATE INDEX idx_muse_ai_gen_work_status ON muse_ai_generation(tenant_id, work_id, status, create_time);
CREATE INDEX idx_muse_ai_gen_block ON muse_ai_generation(tenant_id, block_id);
CREATE TRIGGER trg_muse_ai_generation_updated_at BEFORE UPDATE ON muse_ai_generation FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
CREATE TABLE muse_ai_suggestion (
id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
work_id BIGINT NOT NULL,
chapter_id BIGINT,
block_id BIGINT,
generation_id BIGINT NOT NULL,
candidate_type VARCHAR(50) NOT NULL DEFAULT 'suggestion',
content_snapshot JSONB,
agent_id BIGINT,
agent_name VARCHAR(200),
agent_version VARCHAR(50),
status VARCHAR(20) NOT NULL DEFAULT 'pending',
source_revision INT,
source_hash VARCHAR(100),
diff_summary JSONB,
quality_scores JSONB,
quality_result_id BIGINT,
source_snapshot_id BIGINT,
authorization_snapshot_id BIGINT,
source_status VARCHAR(30),
source_action_policy VARCHAR(30),
decision_archive_id BIGINT,
command_id VARCHAR(120),
creator VARCHAR(64) NOT NULL DEFAULT '',
create_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updater VARCHAR(64) NOT NULL DEFAULT '',
update_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
deleted BOOLEAN NOT NULL DEFAULT FALSE,
tenant_id BIGINT NOT NULL DEFAULT 0
);
CREATE INDEX idx_muse_ai_suggestion_work_status ON muse_ai_suggestion(tenant_id, work_id, status, create_time);
CREATE INDEX idx_muse_ai_suggestion_gen ON muse_ai_suggestion(tenant_id, generation_id);
CREATE UNIQUE INDEX uk_muse_ai_suggestion_command ON muse_ai_suggestion(tenant_id, command_id) WHERE command_id IS NOT NULL;
CREATE TRIGGER trg_muse_ai_suggestion_updated_at BEFORE UPDATE ON muse_ai_suggestion FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
CREATE TABLE muse_agent (
id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
agent_key VARCHAR(100) NOT NULL,
name VARCHAR(200) NOT NULL,
description VARCHAR(500),
agent_type VARCHAR(20) NOT NULL DEFAULT 'system',
owner_user_id BIGINT,
prompt_key VARCHAR(100),
status VARCHAR(20) NOT NULL DEFAULT 'active',
current_version_id BIGINT,
slot_bindings JSONB,
category VARCHAR(50),
tags JSONB,
creator VARCHAR(64) NOT NULL DEFAULT '',
create_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updater VARCHAR(64) NOT NULL DEFAULT '',
update_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
deleted BOOLEAN NOT NULL DEFAULT FALSE,
tenant_id BIGINT NOT NULL DEFAULT 0,
CONSTRAINT uk_muse_agent_key UNIQUE (tenant_id, agent_key)
);
CREATE INDEX idx_muse_agent_type_status ON muse_agent(tenant_id, agent_type, status);
CREATE TRIGGER trg_muse_agent_updated_at BEFORE UPDATE ON muse_agent FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
CREATE TABLE muse_agent_version (
id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
agent_id BIGINT NOT NULL,
version VARCHAR(50) NOT NULL,
config JSONB,
change_note VARCHAR(500),
status VARCHAR(20) NOT NULL DEFAULT 'draft',
command_id VARCHAR(120),
creator VARCHAR(64) NOT NULL DEFAULT '',
create_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updater VARCHAR(64) NOT NULL DEFAULT '',
update_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
deleted BOOLEAN NOT NULL DEFAULT FALSE,
tenant_id BIGINT NOT NULL DEFAULT 0,
CONSTRAINT uk_muse_agent_version_agent_ver UNIQUE (tenant_id, agent_id, version)
);
CREATE INDEX idx_muse_agent_version_agent ON muse_agent_version(tenant_id, agent_id);
CREATE TRIGGER trg_muse_agent_version_updated_at BEFORE UPDATE ON muse_agent_version FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
CREATE TABLE muse_agent_slot_binding (
id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
work_id BIGINT NOT NULL,
slot_key VARCHAR(100) NOT NULL,
agent_id BIGINT NOT NULL,
agent_version VARCHAR(50) NOT NULL,
status VARCHAR(20) NOT NULL DEFAULT 'active',
revision INT NOT NULL DEFAULT 1,
authorization_snapshot_id BIGINT,
source_snapshot_id BIGINT,
fallback_agent_id BIGINT,
binding_source VARCHAR(50),
command_id VARCHAR(120),
creator VARCHAR(64) NOT NULL DEFAULT '',
create_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updater VARCHAR(64) NOT NULL DEFAULT '',
update_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
deleted BOOLEAN NOT NULL DEFAULT FALSE,
tenant_id BIGINT NOT NULL DEFAULT 0
);
CREATE INDEX idx_muse_agent_slot_binding_work ON muse_agent_slot_binding(tenant_id, work_id, slot_key, status);
CREATE UNIQUE INDEX uk_muse_agent_slot_binding_command ON muse_agent_slot_binding(tenant_id, command_id) WHERE command_id IS NOT NULL;
CREATE TRIGGER trg_muse_agent_slot_binding_updated_at BEFORE UPDATE ON muse_agent_slot_binding FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
CREATE TABLE muse_prompt (
id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
prompt_key VARCHAR(100) NOT NULL,
name VARCHAR(200) NOT NULL,
description VARCHAR(500),
content TEXT,
active_version VARCHAR(50),
status VARCHAR(20) NOT NULL DEFAULT 'active',
category VARCHAR(50),
creator VARCHAR(64) NOT NULL DEFAULT '',
create_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updater VARCHAR(64) NOT NULL DEFAULT '',
update_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
deleted BOOLEAN NOT NULL DEFAULT FALSE,
tenant_id BIGINT NOT NULL DEFAULT 0,
CONSTRAINT uk_muse_prompt_key UNIQUE (tenant_id, prompt_key)
);
CREATE TRIGGER trg_muse_prompt_updated_at BEFORE UPDATE ON muse_prompt FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
CREATE TABLE muse_prompt_version (
id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
prompt_id BIGINT NOT NULL,
prompt_key VARCHAR(100) NOT NULL,
version VARCHAR(50) NOT NULL,
content TEXT,
variables JSONB,
change_note VARCHAR(500),
status VARCHAR(20) NOT NULL DEFAULT 'draft',
command_id VARCHAR(120),
creator VARCHAR(64) NOT NULL DEFAULT '',
create_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updater VARCHAR(64) NOT NULL DEFAULT '',
update_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
deleted BOOLEAN NOT NULL DEFAULT FALSE,
tenant_id BIGINT NOT NULL DEFAULT 0,
CONSTRAINT uk_muse_prompt_version_key_ver UNIQUE (tenant_id, prompt_key, version)
);
CREATE INDEX idx_muse_prompt_version_prompt ON muse_prompt_version(tenant_id, prompt_id);
CREATE TRIGGER trg_muse_prompt_version_updated_at BEFORE UPDATE ON muse_prompt_version FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
CREATE TABLE muse_quality_policy (
id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
policy_key VARCHAR(100) NOT NULL,
name VARCHAR(200) NOT NULL,
description VARCHAR(500),
active_version VARCHAR(50),
task_types JSONB,
creator VARCHAR(64) NOT NULL DEFAULT '',
create_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updater VARCHAR(64) NOT NULL DEFAULT '',
update_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
deleted BOOLEAN NOT NULL DEFAULT FALSE,
tenant_id BIGINT NOT NULL DEFAULT 0,
CONSTRAINT uk_muse_quality_policy_key UNIQUE (tenant_id, policy_key)
);
CREATE TRIGGER trg_muse_quality_policy_updated_at BEFORE UPDATE ON muse_quality_policy FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
CREATE TABLE muse_quality_policy_version (
id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
policy_id BIGINT NOT NULL,
policy_key VARCHAR(100) NOT NULL,
version_no INT NOT NULL,
status VARCHAR(20) NOT NULL DEFAULT 'draft',
active_flag BOOLEAN NOT NULL DEFAULT FALSE,
effective_scope JSONB,
metric_contract_snapshot JSONB,
threshold_snapshot JSONB,
rewrite_policy_snapshot JSONB,
rollback_from_version_id BIGINT,
rollback_to_version_id BIGINT,
command_id VARCHAR(120),
creator VARCHAR(64) NOT NULL DEFAULT '',
create_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updater VARCHAR(64) NOT NULL DEFAULT '',
update_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
deleted BOOLEAN NOT NULL DEFAULT FALSE,
tenant_id BIGINT NOT NULL DEFAULT 0,
CONSTRAINT uk_muse_quality_policy_ver UNIQUE (tenant_id, policy_key, version_no)
);
CREATE INDEX idx_muse_quality_policy_ver_pid ON muse_quality_policy_version(tenant_id, policy_id);
CREATE TRIGGER trg_muse_quality_policy_ver_updated_at BEFORE UPDATE ON muse_quality_policy_version FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
CREATE TABLE muse_tool_grant (
id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
grant_key VARCHAR(100) NOT NULL,
agent_id BIGINT NOT NULL,
tool_name VARCHAR(100) NOT NULL,
action VARCHAR(100) NOT NULL,
purpose VARCHAR(200),
authority_owner VARCHAR(50) NOT NULL DEFAULT 'governance',
scope JSONB,
budget JSONB,
input_source_policy JSONB,
output_target_policy JSONB,
egress_policy JSONB,
outbound_policy JSONB,
audit_requirement JSONB,
approval_status VARCHAR(20) NOT NULL DEFAULT 'pending',
approved_by VARCHAR(64),
status VARCHAR(20) NOT NULL DEFAULT 'active',
command_id VARCHAR(120),
creator VARCHAR(64) NOT NULL DEFAULT '',
create_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updater VARCHAR(64) NOT NULL DEFAULT '',
update_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
deleted BOOLEAN NOT NULL DEFAULT FALSE,
tenant_id BIGINT NOT NULL DEFAULT 0,
CONSTRAINT uk_muse_tool_grant_key UNIQUE (tenant_id, grant_key)
);
CREATE INDEX idx_muse_tool_grant_agent ON muse_tool_grant(tenant_id, agent_id);
CREATE UNIQUE INDEX uk_muse_tool_grant_command ON muse_tool_grant(tenant_id, command_id) WHERE command_id IS NOT NULL;
CREATE TRIGGER trg_muse_tool_grant_updated_at BEFORE UPDATE ON muse_tool_grant FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();