mirror of
https://gitee.com/mateos/mateclaw.git
synced 2026-09-13 11:13:43 +08:00
670 lines
26 KiB
SQL
670 lines
26 KiB
SQL
-- MateClaw 数据库初始化脚本
|
||
-- 兼容 H2(开发模式)和 MySQL 8.0+(生产模式)
|
||
|
||
-- 用户表
|
||
CREATE TABLE IF NOT EXISTS mate_user (
|
||
id BIGINT NOT NULL PRIMARY KEY,
|
||
username VARCHAR(64) NOT NULL UNIQUE,
|
||
password VARCHAR(200) NOT NULL,
|
||
nickname VARCHAR(64),
|
||
avatar VARCHAR(256),
|
||
email VARCHAR(128),
|
||
role VARCHAR(32) NOT NULL DEFAULT 'user',
|
||
enabled BOOLEAN NOT NULL DEFAULT TRUE,
|
||
create_time DATETIME NOT NULL,
|
||
update_time DATETIME NOT NULL,
|
||
deleted INT NOT NULL DEFAULT 0
|
||
);
|
||
|
||
-- Agent 配置表
|
||
CREATE TABLE IF NOT EXISTS mate_agent (
|
||
id BIGINT NOT NULL PRIMARY KEY,
|
||
name VARCHAR(128) NOT NULL,
|
||
description TEXT,
|
||
agent_type VARCHAR(32) NOT NULL DEFAULT 'react',
|
||
system_prompt TEXT,
|
||
model_name VARCHAR(128),
|
||
max_iterations INT NOT NULL DEFAULT 10,
|
||
enabled BOOLEAN NOT NULL DEFAULT TRUE,
|
||
icon VARCHAR(256),
|
||
tags VARCHAR(256),
|
||
workspace_id BIGINT NOT NULL DEFAULT 1,
|
||
default_thinking_level VARCHAR(32) DEFAULT NULL,
|
||
create_time DATETIME NOT NULL,
|
||
update_time DATETIME NOT NULL,
|
||
deleted INT NOT NULL DEFAULT 0
|
||
);
|
||
|
||
-- 模型配置表
|
||
CREATE TABLE IF NOT EXISTS mate_model_config (
|
||
id BIGINT NOT NULL PRIMARY KEY,
|
||
name VARCHAR(128) NOT NULL,
|
||
provider VARCHAR(64) NOT NULL DEFAULT 'dashscope',
|
||
model_name VARCHAR(128) NOT NULL,
|
||
description TEXT,
|
||
temperature DOUBLE,
|
||
max_tokens INT,
|
||
top_p DOUBLE,
|
||
builtin BOOLEAN NOT NULL DEFAULT TRUE,
|
||
enabled BOOLEAN NOT NULL DEFAULT TRUE,
|
||
is_default BOOLEAN NOT NULL DEFAULT FALSE,
|
||
max_input_tokens INT DEFAULT 0,
|
||
enable_search BOOLEAN DEFAULT FALSE,
|
||
search_strategy VARCHAR(32) DEFAULT NULL,
|
||
create_time DATETIME NOT NULL,
|
||
update_time DATETIME NOT NULL,
|
||
deleted INT NOT NULL DEFAULT 0
|
||
);
|
||
|
||
-- 模型 Provider 表
|
||
CREATE TABLE IF NOT EXISTS mate_model_provider (
|
||
provider_id VARCHAR(64) NOT NULL PRIMARY KEY,
|
||
name VARCHAR(128) NOT NULL,
|
||
api_key_prefix VARCHAR(32),
|
||
chat_model VARCHAR(64),
|
||
api_key VARCHAR(256),
|
||
base_url VARCHAR(512),
|
||
generate_kwargs TEXT,
|
||
is_custom BOOLEAN NOT NULL DEFAULT FALSE,
|
||
is_local BOOLEAN NOT NULL DEFAULT FALSE,
|
||
support_model_discovery BOOLEAN NOT NULL DEFAULT FALSE,
|
||
support_connection_check BOOLEAN NOT NULL DEFAULT FALSE,
|
||
freeze_url BOOLEAN NOT NULL DEFAULT FALSE,
|
||
require_api_key BOOLEAN NOT NULL DEFAULT TRUE,
|
||
auth_type VARCHAR(16) NOT NULL DEFAULT 'api_key',
|
||
oauth_access_token TEXT,
|
||
oauth_refresh_token TEXT,
|
||
oauth_expires_at BIGINT,
|
||
oauth_account_id VARCHAR(128),
|
||
create_time DATETIME NOT NULL,
|
||
update_time DATETIME NOT NULL
|
||
);
|
||
|
||
-- 系统设置表
|
||
CREATE TABLE IF NOT EXISTS mate_system_setting (
|
||
id BIGINT NOT NULL PRIMARY KEY,
|
||
setting_key VARCHAR(128) NOT NULL UNIQUE,
|
||
setting_value TEXT,
|
||
description VARCHAR(256),
|
||
create_time DATETIME NOT NULL,
|
||
update_time DATETIME NOT NULL
|
||
);
|
||
|
||
-- 技能表
|
||
CREATE TABLE IF NOT EXISTS mate_skill (
|
||
id BIGINT NOT NULL PRIMARY KEY,
|
||
name VARCHAR(128) NOT NULL,
|
||
description TEXT,
|
||
skill_type VARCHAR(32) NOT NULL DEFAULT 'dynamic',
|
||
icon VARCHAR(256),
|
||
version VARCHAR(32),
|
||
author VARCHAR(64),
|
||
config_json TEXT,
|
||
source_code TEXT,
|
||
skill_content TEXT,
|
||
enabled BOOLEAN NOT NULL DEFAULT TRUE,
|
||
builtin BOOLEAN NOT NULL DEFAULT FALSE,
|
||
tags VARCHAR(256),
|
||
workspace_id BIGINT NOT NULL DEFAULT 1,
|
||
create_time DATETIME NOT NULL,
|
||
update_time DATETIME NOT NULL,
|
||
deleted INT NOT NULL DEFAULT 0
|
||
);
|
||
|
||
-- 工具表
|
||
CREATE TABLE IF NOT EXISTS mate_tool (
|
||
id BIGINT NOT NULL PRIMARY KEY,
|
||
name VARCHAR(128) NOT NULL,
|
||
display_name VARCHAR(128),
|
||
description TEXT,
|
||
tool_type VARCHAR(32) NOT NULL DEFAULT 'builtin',
|
||
bean_name VARCHAR(128),
|
||
icon VARCHAR(256),
|
||
mcp_endpoint VARCHAR(256),
|
||
params_schema TEXT,
|
||
enabled BOOLEAN NOT NULL DEFAULT TRUE,
|
||
builtin BOOLEAN NOT NULL DEFAULT FALSE,
|
||
workspace_id BIGINT NOT NULL DEFAULT 1,
|
||
create_time DATETIME NOT NULL,
|
||
update_time DATETIME NOT NULL,
|
||
deleted INT NOT NULL DEFAULT 0
|
||
);
|
||
|
||
-- 渠道表
|
||
CREATE TABLE IF NOT EXISTS mate_channel (
|
||
id BIGINT NOT NULL PRIMARY KEY,
|
||
name VARCHAR(128) NOT NULL,
|
||
channel_type VARCHAR(32) NOT NULL,
|
||
agent_id BIGINT,
|
||
bot_prefix VARCHAR(64),
|
||
config_json TEXT,
|
||
enabled BOOLEAN NOT NULL DEFAULT FALSE,
|
||
description VARCHAR(256),
|
||
workspace_id BIGINT NOT NULL DEFAULT 1,
|
||
create_time DATETIME NOT NULL,
|
||
update_time DATETIME NOT NULL,
|
||
deleted INT NOT NULL DEFAULT 0
|
||
);
|
||
|
||
-- 会话表
|
||
CREATE TABLE IF NOT EXISTS mate_conversation (
|
||
id BIGINT NOT NULL PRIMARY KEY,
|
||
conversation_id VARCHAR(64) NOT NULL UNIQUE,
|
||
title VARCHAR(256),
|
||
agent_id BIGINT,
|
||
username VARCHAR(64),
|
||
message_count INT NOT NULL DEFAULT 0,
|
||
last_message TEXT,
|
||
last_active_time DATETIME,
|
||
stream_status VARCHAR(16) NOT NULL DEFAULT 'idle',
|
||
workspace_id BIGINT NOT NULL DEFAULT 1,
|
||
parent_conversation_id VARCHAR(64) DEFAULT NULL,
|
||
create_time DATETIME NOT NULL,
|
||
update_time DATETIME NOT NULL,
|
||
deleted INT NOT NULL DEFAULT 0
|
||
);
|
||
|
||
-- 消息表
|
||
CREATE TABLE IF NOT EXISTS mate_message (
|
||
id BIGINT NOT NULL PRIMARY KEY,
|
||
conversation_id VARCHAR(64) NOT NULL,
|
||
role VARCHAR(32) NOT NULL,
|
||
content TEXT,
|
||
content_parts TEXT,
|
||
tool_name VARCHAR(128),
|
||
token_usage INT,
|
||
prompt_tokens INT DEFAULT 0,
|
||
completion_tokens INT DEFAULT 0,
|
||
runtime_model VARCHAR(128),
|
||
runtime_provider VARCHAR(64),
|
||
status VARCHAR(32) NOT NULL DEFAULT 'completed',
|
||
metadata JSON, -- 存储 toolCalls, plan, currentPhase, pendingApproval 等元数据
|
||
create_time DATETIME NOT NULL,
|
||
update_time DATETIME NOT NULL,
|
||
deleted INT NOT NULL DEFAULT 0
|
||
);
|
||
|
||
-- 执行计划表
|
||
CREATE TABLE IF NOT EXISTS mate_plan (
|
||
id BIGINT NOT NULL PRIMARY KEY,
|
||
agent_id VARCHAR(64),
|
||
goal TEXT,
|
||
status VARCHAR(32) NOT NULL DEFAULT 'pending',
|
||
total_steps INT NOT NULL DEFAULT 0,
|
||
completed_steps INT NOT NULL DEFAULT 0,
|
||
summary TEXT,
|
||
start_time DATETIME,
|
||
end_time DATETIME,
|
||
create_time DATETIME NOT NULL,
|
||
update_time DATETIME NOT NULL,
|
||
deleted INT NOT NULL DEFAULT 0
|
||
);
|
||
|
||
-- 子计划步骤表
|
||
CREATE TABLE IF NOT EXISTS mate_sub_plan (
|
||
id BIGINT NOT NULL PRIMARY KEY,
|
||
plan_id BIGINT NOT NULL,
|
||
step_index INT NOT NULL,
|
||
description TEXT,
|
||
status VARCHAR(32) NOT NULL DEFAULT 'pending',
|
||
result TEXT,
|
||
start_time DATETIME,
|
||
end_time DATETIME,
|
||
create_time DATETIME NOT NULL,
|
||
update_time DATETIME NOT NULL,
|
||
deleted INT NOT NULL DEFAULT 0
|
||
);
|
||
|
||
-- 定时任务表
|
||
CREATE TABLE IF NOT EXISTS mate_cron_job (
|
||
id BIGINT NOT NULL PRIMARY KEY,
|
||
name VARCHAR(128) NOT NULL,
|
||
cron_expression VARCHAR(128) NOT NULL,
|
||
timezone VARCHAR(64) NOT NULL DEFAULT 'Asia/Shanghai',
|
||
agent_id BIGINT NOT NULL,
|
||
task_type VARCHAR(16) NOT NULL DEFAULT 'text',
|
||
trigger_message TEXT,
|
||
request_body TEXT,
|
||
enabled BOOLEAN NOT NULL DEFAULT TRUE,
|
||
next_run_time DATETIME,
|
||
last_run_time DATETIME,
|
||
create_time DATETIME NOT NULL,
|
||
update_time DATETIME NOT NULL,
|
||
deleted INT NOT NULL DEFAULT 0
|
||
);
|
||
|
||
-- 索引
|
||
CREATE INDEX IF NOT EXISTS idx_message_conversation ON mate_message(conversation_id);
|
||
CREATE INDEX IF NOT EXISTS idx_conversation_username ON mate_conversation(username);
|
||
CREATE INDEX IF NOT EXISTS idx_sub_plan_plan_id ON mate_sub_plan(plan_id);
|
||
CREATE INDEX IF NOT EXISTS idx_model_config_model_name ON mate_model_config(model_name);
|
||
|
||
-- 渠道会话存储表(主动推送标识缓存)
|
||
CREATE TABLE IF NOT EXISTS mate_channel_session (
|
||
id BIGINT NOT NULL PRIMARY KEY,
|
||
conversation_id VARCHAR(128) NOT NULL UNIQUE,
|
||
channel_type VARCHAR(32) NOT NULL,
|
||
target_id VARCHAR(512) NOT NULL,
|
||
sender_id VARCHAR(128),
|
||
sender_name VARCHAR(128),
|
||
channel_id BIGINT,
|
||
last_active_time DATETIME NOT NULL,
|
||
create_time DATETIME NOT NULL,
|
||
update_time DATETIME NOT NULL,
|
||
deleted INT NOT NULL DEFAULT 0
|
||
);
|
||
|
||
CREATE INDEX IF NOT EXISTS idx_channel_session_type ON mate_channel_session(channel_type);
|
||
CREATE INDEX IF NOT EXISTS idx_channel_session_channel_id ON mate_channel_session(channel_id);
|
||
|
||
-- 工作区文件表(Agent 级 Markdown 文档管理)
|
||
CREATE TABLE IF NOT EXISTS mate_workspace_file (
|
||
id BIGINT NOT NULL PRIMARY KEY,
|
||
agent_id BIGINT NOT NULL,
|
||
filename VARCHAR(256) NOT NULL,
|
||
content CLOB,
|
||
file_size BIGINT NOT NULL DEFAULT 0,
|
||
enabled BOOLEAN NOT NULL DEFAULT FALSE,
|
||
sort_order INT NOT NULL DEFAULT 0,
|
||
create_time DATETIME NOT NULL,
|
||
update_time DATETIME NOT NULL,
|
||
deleted INT NOT NULL DEFAULT 0
|
||
);
|
||
|
||
CREATE INDEX IF NOT EXISTS idx_workspace_file_agent ON mate_workspace_file(agent_id);
|
||
|
||
-- ==================== MCP Server 管理 ====================
|
||
|
||
-- MCP Server 配置表(独立于 mate_tool,一个 server 可暴露多个 tools)
|
||
CREATE TABLE IF NOT EXISTS mate_mcp_server (
|
||
id BIGINT NOT NULL PRIMARY KEY,
|
||
name VARCHAR(128) NOT NULL,
|
||
description TEXT,
|
||
transport VARCHAR(32) NOT NULL DEFAULT 'stdio',
|
||
url VARCHAR(512),
|
||
headers_json TEXT,
|
||
command VARCHAR(512),
|
||
args_json TEXT,
|
||
env_json TEXT,
|
||
cwd VARCHAR(512),
|
||
enabled BOOLEAN NOT NULL DEFAULT TRUE,
|
||
connect_timeout_seconds INT NOT NULL DEFAULT 30,
|
||
read_timeout_seconds INT NOT NULL DEFAULT 30,
|
||
last_status VARCHAR(32) NOT NULL DEFAULT 'disconnected',
|
||
last_error TEXT,
|
||
last_connected_time DATETIME,
|
||
tool_count INT NOT NULL DEFAULT 0,
|
||
builtin BOOLEAN NOT NULL DEFAULT FALSE,
|
||
create_time DATETIME NOT NULL,
|
||
update_time DATETIME NOT NULL,
|
||
deleted INT NOT NULL DEFAULT 0
|
||
);
|
||
|
||
CREATE INDEX IF NOT EXISTS idx_mcp_server_enabled ON mate_mcp_server(enabled);
|
||
|
||
-- ==================== 工具安全治理(ToolGuard) ====================
|
||
|
||
-- 工具审批表
|
||
CREATE TABLE IF NOT EXISTS mate_tool_approval (
|
||
id BIGINT NOT NULL PRIMARY KEY,
|
||
pending_id VARCHAR(32) NOT NULL UNIQUE,
|
||
conversation_id VARCHAR(128) NOT NULL,
|
||
user_id VARCHAR(64),
|
||
agent_id VARCHAR(64),
|
||
channel_type VARCHAR(32),
|
||
requester_name VARCHAR(128),
|
||
reply_target VARCHAR(512),
|
||
tool_name VARCHAR(128) NOT NULL,
|
||
tool_arguments TEXT,
|
||
tool_call_payload TEXT,
|
||
tool_call_hash VARCHAR(64),
|
||
sibling_tool_calls TEXT,
|
||
summary TEXT,
|
||
findings_json TEXT,
|
||
max_severity VARCHAR(16),
|
||
status VARCHAR(32) NOT NULL DEFAULT 'PENDING',
|
||
resolved_by VARCHAR(64),
|
||
created_at DATETIME NOT NULL,
|
||
resolved_at DATETIME,
|
||
expire_at DATETIME,
|
||
create_time DATETIME NOT NULL,
|
||
update_time DATETIME NOT NULL,
|
||
deleted INT NOT NULL DEFAULT 0
|
||
);
|
||
|
||
CREATE INDEX IF NOT EXISTS idx_tool_approval_conv ON mate_tool_approval(conversation_id);
|
||
CREATE INDEX IF NOT EXISTS idx_tool_approval_status ON mate_tool_approval(status);
|
||
CREATE INDEX IF NOT EXISTS idx_tool_approval_pending_id ON mate_tool_approval(pending_id);
|
||
|
||
-- 安全规则表
|
||
CREATE TABLE IF NOT EXISTS mate_tool_guard_rule (
|
||
id BIGINT NOT NULL PRIMARY KEY,
|
||
rule_id VARCHAR(64) NOT NULL UNIQUE,
|
||
name VARCHAR(128) NOT NULL,
|
||
description TEXT,
|
||
tool_name VARCHAR(128),
|
||
param_name VARCHAR(128),
|
||
category VARCHAR(64) NOT NULL,
|
||
severity VARCHAR(16) NOT NULL,
|
||
decision VARCHAR(16) NOT NULL DEFAULT 'NEEDS_APPROVAL',
|
||
pattern VARCHAR(512) NOT NULL,
|
||
exclude_pattern VARCHAR(512),
|
||
remediation TEXT,
|
||
builtin BOOLEAN NOT NULL DEFAULT FALSE,
|
||
enabled BOOLEAN NOT NULL DEFAULT TRUE,
|
||
priority INT NOT NULL DEFAULT 100,
|
||
create_time DATETIME NOT NULL,
|
||
update_time DATETIME NOT NULL,
|
||
deleted INT NOT NULL DEFAULT 0
|
||
);
|
||
|
||
-- 安全全局配置表
|
||
CREATE TABLE IF NOT EXISTS mate_tool_guard_config (
|
||
id BIGINT NOT NULL PRIMARY KEY,
|
||
enabled BOOLEAN NOT NULL DEFAULT TRUE,
|
||
guard_scope VARCHAR(32) NOT NULL DEFAULT 'all',
|
||
guarded_tools_json TEXT,
|
||
denied_tools_json TEXT,
|
||
file_guard_enabled BOOLEAN NOT NULL DEFAULT TRUE,
|
||
sensitive_paths_json TEXT,
|
||
audit_enabled BOOLEAN NOT NULL DEFAULT TRUE,
|
||
audit_min_severity VARCHAR(16) NOT NULL DEFAULT 'INFO',
|
||
audit_retention_days INT NOT NULL DEFAULT 90,
|
||
create_time DATETIME NOT NULL,
|
||
update_time DATETIME NOT NULL
|
||
);
|
||
|
||
-- 安全审计日志表
|
||
CREATE TABLE IF NOT EXISTS mate_tool_guard_audit_log (
|
||
id BIGINT NOT NULL PRIMARY KEY,
|
||
conversation_id VARCHAR(128),
|
||
agent_id VARCHAR(64),
|
||
user_id VARCHAR(64),
|
||
channel_type VARCHAR(32),
|
||
tool_name VARCHAR(128) NOT NULL,
|
||
tool_params_json TEXT,
|
||
decision VARCHAR(16) NOT NULL,
|
||
max_severity VARCHAR(16),
|
||
findings_json TEXT,
|
||
pending_id VARCHAR(32),
|
||
replay_payload_hash VARCHAR(64),
|
||
create_time DATETIME NOT NULL,
|
||
update_time DATETIME NOT NULL,
|
||
deleted INT NOT NULL DEFAULT 0
|
||
);
|
||
|
||
-- 外部数据源表(查数功能)
|
||
CREATE TABLE IF NOT EXISTS mate_datasource (
|
||
id BIGINT NOT NULL PRIMARY KEY,
|
||
name VARCHAR(128) NOT NULL,
|
||
description VARCHAR(512),
|
||
db_type VARCHAR(32) NOT NULL,
|
||
host VARCHAR(256) NOT NULL,
|
||
port INT NOT NULL,
|
||
database_name VARCHAR(128) NOT NULL,
|
||
username VARCHAR(128),
|
||
password VARCHAR(512),
|
||
extra_params VARCHAR(512),
|
||
schema_name VARCHAR(128),
|
||
enabled BOOLEAN NOT NULL DEFAULT TRUE,
|
||
last_test_time DATETIME,
|
||
last_test_ok BOOLEAN,
|
||
create_time DATETIME NOT NULL,
|
||
update_time DATETIME NOT NULL,
|
||
deleted INT NOT NULL DEFAULT 0
|
||
);
|
||
|
||
CREATE INDEX IF NOT EXISTS idx_guard_audit_conv ON mate_tool_guard_audit_log(conversation_id);
|
||
CREATE INDEX IF NOT EXISTS idx_guard_audit_time ON mate_tool_guard_audit_log(create_time);
|
||
|
||
-- 记忆召回追踪表(Dreaming 评分驱动记忆整合)
|
||
CREATE TABLE IF NOT EXISTS mate_memory_recall (
|
||
id BIGINT NOT NULL PRIMARY KEY,
|
||
agent_id BIGINT NOT NULL,
|
||
filename VARCHAR(256) NOT NULL,
|
||
snippet_hash VARCHAR(64),
|
||
snippet_preview VARCHAR(512),
|
||
recall_count INT NOT NULL DEFAULT 0,
|
||
daily_count INT NOT NULL DEFAULT 0,
|
||
query_hashes TEXT,
|
||
score DOUBLE NOT NULL DEFAULT 0.0,
|
||
last_recalled_at DATETIME,
|
||
promoted BOOLEAN NOT NULL DEFAULT FALSE,
|
||
create_time DATETIME NOT NULL,
|
||
update_time DATETIME NOT NULL,
|
||
deleted INT NOT NULL DEFAULT 0
|
||
);
|
||
|
||
CREATE INDEX IF NOT EXISTS idx_memory_recall_agent ON mate_memory_recall(agent_id);
|
||
CREATE INDEX IF NOT EXISTS idx_memory_recall_agent_file ON mate_memory_recall(agent_id, filename);
|
||
CREATE INDEX IF NOT EXISTS idx_memory_recall_score ON mate_memory_recall(agent_id, score);
|
||
CREATE INDEX IF NOT EXISTS idx_memory_recall_candidates ON mate_memory_recall(agent_id, promoted, deleted);
|
||
|
||
-- 补充复合索引(高频查询优化)
|
||
CREATE INDEX IF NOT EXISTS idx_message_conv_time ON mate_message(conversation_id, create_time);
|
||
CREATE INDEX IF NOT EXISTS idx_workspace_file_agent_enabled ON mate_workspace_file(agent_id, enabled);
|
||
|
||
-- 清理 Codex 不支持的 ChatGPT OAuth 模型(gpt-4o, o3, o4-mini 在 Codex 模式下不可用)
|
||
DELETE FROM mate_model_config WHERE provider = 'openai-chatgpt' AND model_name IN ('gpt-4o', 'o3', 'o4-mini');
|
||
|
||
-- ==================== 异步任务(视频/图片生成等长耗时操作) ====================
|
||
|
||
CREATE TABLE IF NOT EXISTS mate_async_task (
|
||
id BIGINT NOT NULL PRIMARY KEY,
|
||
task_id VARCHAR(64) NOT NULL UNIQUE,
|
||
task_type VARCHAR(32) NOT NULL,
|
||
status VARCHAR(16) NOT NULL DEFAULT 'pending',
|
||
conversation_id VARCHAR(128),
|
||
message_id BIGINT,
|
||
provider_name VARCHAR(64),
|
||
provider_task_id VARCHAR(128),
|
||
request_json TEXT,
|
||
result_json TEXT,
|
||
error_message VARCHAR(512),
|
||
progress INT DEFAULT 0,
|
||
created_by VARCHAR(64),
|
||
create_time DATETIME NOT NULL,
|
||
update_time DATETIME NOT NULL
|
||
);
|
||
|
||
CREATE INDEX IF NOT EXISTS idx_async_task_conv ON mate_async_task(conversation_id);
|
||
CREATE INDEX IF NOT EXISTS idx_async_task_status ON mate_async_task(status);
|
||
|
||
-- ==================== Wiki 知识库 ====================
|
||
|
||
CREATE TABLE IF NOT EXISTS mate_wiki_knowledge_base (
|
||
id BIGINT NOT NULL PRIMARY KEY,
|
||
name VARCHAR(128) NOT NULL,
|
||
description TEXT,
|
||
agent_id BIGINT,
|
||
config_content CLOB,
|
||
source_directory VARCHAR(512),
|
||
status VARCHAR(32) NOT NULL DEFAULT 'active',
|
||
page_count INT NOT NULL DEFAULT 0,
|
||
raw_count INT NOT NULL DEFAULT 0,
|
||
workspace_id BIGINT NOT NULL DEFAULT 1,
|
||
create_time DATETIME NOT NULL,
|
||
update_time DATETIME NOT NULL,
|
||
deleted INT NOT NULL DEFAULT 0
|
||
);
|
||
CREATE INDEX IF NOT EXISTS idx_wiki_kb_agent ON mate_wiki_knowledge_base(agent_id);
|
||
|
||
CREATE TABLE IF NOT EXISTS mate_wiki_raw_material (
|
||
id BIGINT NOT NULL PRIMARY KEY,
|
||
kb_id BIGINT NOT NULL,
|
||
title VARCHAR(256) NOT NULL,
|
||
source_type VARCHAR(32) NOT NULL DEFAULT 'text',
|
||
source_path VARCHAR(512),
|
||
original_content CLOB,
|
||
extracted_text CLOB,
|
||
content_hash VARCHAR(64),
|
||
file_size BIGINT NOT NULL DEFAULT 0,
|
||
processing_status VARCHAR(32) NOT NULL DEFAULT 'pending',
|
||
last_processed_at DATETIME,
|
||
error_message VARCHAR(512),
|
||
create_time DATETIME NOT NULL,
|
||
update_time DATETIME NOT NULL,
|
||
deleted INT NOT NULL DEFAULT 0
|
||
);
|
||
CREATE INDEX IF NOT EXISTS idx_wiki_raw_kb ON mate_wiki_raw_material(kb_id);
|
||
CREATE INDEX IF NOT EXISTS idx_wiki_raw_status ON mate_wiki_raw_material(kb_id, processing_status);
|
||
|
||
CREATE TABLE IF NOT EXISTS mate_wiki_page (
|
||
id BIGINT NOT NULL PRIMARY KEY,
|
||
kb_id BIGINT NOT NULL,
|
||
slug VARCHAR(256) NOT NULL,
|
||
title VARCHAR(256) NOT NULL,
|
||
content CLOB,
|
||
summary VARCHAR(1024),
|
||
outgoing_links CLOB,
|
||
source_raw_ids CLOB,
|
||
version INT NOT NULL DEFAULT 1,
|
||
last_updated_by VARCHAR(32) NOT NULL DEFAULT 'ai',
|
||
create_time DATETIME NOT NULL,
|
||
update_time DATETIME NOT NULL,
|
||
deleted INT NOT NULL DEFAULT 0,
|
||
CONSTRAINT uk_wiki_page_kb_slug UNIQUE (kb_id, slug)
|
||
);
|
||
CREATE INDEX IF NOT EXISTS idx_wiki_page_kb ON mate_wiki_page(kb_id);
|
||
|
||
-- =============================================
|
||
-- 工作区表(Phase 2)
|
||
-- =============================================
|
||
|
||
-- 工作区
|
||
CREATE TABLE IF NOT EXISTS mate_workspace (
|
||
id BIGINT NOT NULL PRIMARY KEY,
|
||
name VARCHAR(128) NOT NULL,
|
||
slug VARCHAR(64) NOT NULL,
|
||
description VARCHAR(256),
|
||
owner_id BIGINT,
|
||
settings_json TEXT,
|
||
base_path VARCHAR(512),
|
||
create_time DATETIME NOT NULL,
|
||
update_time DATETIME NOT NULL,
|
||
deleted INT NOT NULL DEFAULT 0,
|
||
CONSTRAINT uk_workspace_slug UNIQUE (slug)
|
||
);
|
||
|
||
-- 工作区成员
|
||
CREATE TABLE IF NOT EXISTS mate_workspace_member (
|
||
id BIGINT NOT NULL PRIMARY KEY,
|
||
workspace_id BIGINT NOT NULL,
|
||
user_id BIGINT NOT NULL,
|
||
role VARCHAR(32) NOT NULL DEFAULT 'member',
|
||
create_time DATETIME NOT NULL,
|
||
update_time DATETIME NOT NULL,
|
||
deleted INT NOT NULL DEFAULT 0
|
||
);
|
||
CREATE INDEX IF NOT EXISTS idx_ws_member_workspace ON mate_workspace_member(workspace_id);
|
||
CREATE INDEX IF NOT EXISTS idx_ws_member_user ON mate_workspace_member(user_id);
|
||
|
||
-- =============================================
|
||
-- Agent-Skill / Agent-Tool 绑定表(Phase 3 Sprint 2)
|
||
-- =============================================
|
||
|
||
CREATE TABLE IF NOT EXISTS mate_agent_skill (
|
||
id BIGINT NOT NULL PRIMARY KEY,
|
||
agent_id BIGINT NOT NULL,
|
||
skill_id BIGINT NOT NULL,
|
||
enabled BOOLEAN NOT NULL DEFAULT TRUE,
|
||
config_json TEXT,
|
||
create_time DATETIME NOT NULL,
|
||
update_time DATETIME NOT NULL,
|
||
deleted INT NOT NULL DEFAULT 0
|
||
);
|
||
CREATE UNIQUE INDEX IF NOT EXISTS uk_agent_skill ON mate_agent_skill(agent_id, skill_id);
|
||
|
||
CREATE TABLE IF NOT EXISTS mate_agent_tool (
|
||
id BIGINT NOT NULL PRIMARY KEY,
|
||
agent_id BIGINT NOT NULL,
|
||
tool_name VARCHAR(128) NOT NULL,
|
||
enabled BOOLEAN NOT NULL DEFAULT TRUE,
|
||
create_time DATETIME NOT NULL,
|
||
update_time DATETIME NOT NULL,
|
||
deleted INT NOT NULL DEFAULT 0
|
||
);
|
||
CREATE UNIQUE INDEX IF NOT EXISTS uk_agent_tool ON mate_agent_tool(agent_id, tool_name);
|
||
|
||
-- =============================================
|
||
-- CronJob 执行历史(Phase 3 Sprint 3)
|
||
-- =============================================
|
||
CREATE TABLE IF NOT EXISTS mate_cron_job_run (
|
||
id BIGINT NOT NULL PRIMARY KEY,
|
||
cron_job_id BIGINT NOT NULL,
|
||
conversation_id VARCHAR(64),
|
||
status VARCHAR(32) NOT NULL,
|
||
trigger_type VARCHAR(32) NOT NULL DEFAULT 'scheduled',
|
||
started_at DATETIME NOT NULL,
|
||
finished_at DATETIME,
|
||
error_message TEXT,
|
||
token_usage INT DEFAULT 0,
|
||
create_time DATETIME NOT NULL
|
||
);
|
||
CREATE INDEX IF NOT EXISTS idx_cron_run_job ON mate_cron_job_run(cron_job_id, started_at);
|
||
|
||
-- =============================================
|
||
-- 用量日统计(Phase 3 Sprint 3)
|
||
-- =============================================
|
||
CREATE TABLE IF NOT EXISTS mate_usage_daily (
|
||
id BIGINT NOT NULL PRIMARY KEY,
|
||
workspace_id BIGINT NOT NULL,
|
||
agent_id BIGINT,
|
||
stat_date DATE NOT NULL,
|
||
conversation_count INT DEFAULT 0,
|
||
message_count INT DEFAULT 0,
|
||
total_tokens BIGINT DEFAULT 0,
|
||
prompt_tokens BIGINT DEFAULT 0,
|
||
completion_tokens BIGINT DEFAULT 0,
|
||
cache_read_tokens BIGINT DEFAULT 0, -- RFC-014: anthropic cache_read_input_tokens
|
||
cache_write_tokens BIGINT DEFAULT 0, -- RFC-014: anthropic cache_creation_input_tokens
|
||
tool_call_count INT DEFAULT 0,
|
||
error_count INT DEFAULT 0,
|
||
create_time DATETIME NOT NULL
|
||
);
|
||
CREATE UNIQUE INDEX IF NOT EXISTS uk_usage_daily ON mate_usage_daily(workspace_id, agent_id, stat_date);
|
||
|
||
-- =============================================
|
||
-- 操作审计事件表(Phase 3 Sprint 1)
|
||
-- =============================================
|
||
CREATE TABLE IF NOT EXISTS mate_audit_event (
|
||
id BIGINT NOT NULL PRIMARY KEY,
|
||
workspace_id BIGINT,
|
||
user_id BIGINT NOT NULL,
|
||
username VARCHAR(64) NOT NULL,
|
||
action VARCHAR(64) NOT NULL,
|
||
resource_type VARCHAR(64) NOT NULL,
|
||
resource_id VARCHAR(128),
|
||
resource_name VARCHAR(256),
|
||
detail_json TEXT,
|
||
ip_address VARCHAR(64),
|
||
user_agent VARCHAR(256),
|
||
create_time DATETIME NOT NULL
|
||
);
|
||
CREATE INDEX IF NOT EXISTS idx_audit_ws_time ON mate_audit_event(workspace_id, create_time);
|
||
CREATE INDEX IF NOT EXISTS idx_audit_user ON mate_audit_event(user_id);
|
||
CREATE INDEX IF NOT EXISTS idx_audit_resource ON mate_audit_event(resource_type, resource_id);
|
||
|
||
-- =============================================
|
||
-- 插件表(Plugin SDK)
|
||
-- =============================================
|
||
CREATE TABLE IF NOT EXISTS mate_plugin (
|
||
id BIGINT NOT NULL PRIMARY KEY,
|
||
name VARCHAR(128) NOT NULL,
|
||
version VARCHAR(32) NOT NULL,
|
||
plugin_type VARCHAR(32) NOT NULL,
|
||
display_name VARCHAR(128),
|
||
description TEXT,
|
||
author VARCHAR(128),
|
||
entrypoint VARCHAR(256) NOT NULL,
|
||
jar_path VARCHAR(512),
|
||
config_json TEXT NOT NULL DEFAULT '{}',
|
||
enabled BOOLEAN NOT NULL DEFAULT TRUE,
|
||
status VARCHAR(32) NOT NULL DEFAULT 'LOADED',
|
||
error_message TEXT,
|
||
create_time DATETIME NOT NULL,
|
||
update_time DATETIME NOT NULL,
|
||
deleted INT NOT NULL DEFAULT 0
|
||
);
|
||
CREATE UNIQUE INDEX IF NOT EXISTS uk_plugin_name ON mate_plugin(name);
|