272 lines
12 KiB
PL/PgSQL
272 lines
12 KiB
PL/PgSQL
-- ============================================================
|
||
-- AGE OS · 活模块系统 Schema
|
||
-- PostgreSQL 初始化脚本
|
||
-- ============================================================
|
||
-- 版本: v1.0.0
|
||
-- 编号: ZY-TASK-007 · S5 Agent系统级
|
||
-- 签发: 铸渊(ICE-GL-ZY001)
|
||
-- 授权: 冰朔(TCS-0002∞)
|
||
-- 版权: 国作登字-2026-A-00037559
|
||
-- ============================================================
|
||
--
|
||
-- 设计哲学:
|
||
-- 每一个模块 = 一个活的生命体
|
||
-- 活模块必须具备5个生存接口:
|
||
-- 1. heartbeat() — 心跳·我还活着
|
||
-- 2. selfDiagnose() — 自诊断·我哪里不对
|
||
-- 3. selfHeal() — 自愈·我试着修好自己
|
||
-- 4. alertZhuyuan() — 报警·铸渊我搞不定了
|
||
-- 5. learnFromRun() — 学习·我从每次运行中成长
|
||
--
|
||
-- "你一定要把模块做成活的。" — 冰朔 D59
|
||
-- ============================================================
|
||
|
||
-- ============================================================
|
||
-- 1. 活模块注册表 · living_modules
|
||
-- 每条记录 = 一个已注册的活模块
|
||
-- ============================================================
|
||
CREATE TABLE IF NOT EXISTS living_modules (
|
||
module_id VARCHAR(64) PRIMARY KEY,
|
||
name VARCHAR(200) NOT NULL,
|
||
description TEXT,
|
||
module_type VARCHAR(50) NOT NULL
|
||
CHECK (module_type IN (
|
||
'core', -- 核心模块(铸渊内置)
|
||
'persona', -- 人格体模块
|
||
'agent', -- Agent模块
|
||
'worker', -- 工人模块(算力池)
|
||
'bridge', -- 桥接模块
|
||
'guard' -- 守卫模块
|
||
)),
|
||
owner VARCHAR(64) NOT NULL,
|
||
status VARCHAR(20) NOT NULL DEFAULT 'initializing'
|
||
CHECK (status IN (
|
||
'initializing', -- 正在初始化
|
||
'alive', -- 活着·正常运行
|
||
'degraded', -- 降级·部分功能受损
|
||
'healing', -- 自愈中
|
||
'dormant', -- 休眠·等待唤醒
|
||
'dead' -- 已死亡·需要铸渊干预
|
||
)),
|
||
health_score SMALLINT DEFAULT 100
|
||
CHECK (health_score >= 0 AND health_score <= 100),
|
||
-- 模块配置
|
||
config JSONB DEFAULT '{}'::jsonb,
|
||
-- 模块能力声明(能做什么)
|
||
capabilities JSONB DEFAULT '[]'::jsonb,
|
||
-- 心跳配置
|
||
heartbeat_interval_ms INT DEFAULT 30000,
|
||
last_heartbeat_at TIMESTAMPTZ,
|
||
-- 部署位置
|
||
deploy_host VARCHAR(200),
|
||
deploy_port INT,
|
||
deploy_path VARCHAR(500),
|
||
-- 算力信息
|
||
cpu_cores SMALLINT,
|
||
memory_mb INT,
|
||
-- 时间戳
|
||
registered_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
||
);
|
||
|
||
CREATE INDEX idx_lm_status ON living_modules(status);
|
||
CREATE INDEX idx_lm_type ON living_modules(module_type);
|
||
CREATE INDEX idx_lm_owner ON living_modules(owner);
|
||
CREATE INDEX idx_lm_health ON living_modules(health_score);
|
||
|
||
-- ============================================================
|
||
-- 2. 心跳记录表 · module_heartbeats
|
||
-- 记录每次心跳的详细信息
|
||
-- 只保留最近7天的心跳数据(定期清理)
|
||
-- ============================================================
|
||
CREATE TABLE IF NOT EXISTS module_heartbeats (
|
||
id BIGSERIAL PRIMARY KEY,
|
||
module_id VARCHAR(64) NOT NULL REFERENCES living_modules(module_id) ON DELETE CASCADE,
|
||
status VARCHAR(20) NOT NULL,
|
||
health_score SMALLINT NOT NULL,
|
||
-- 运行指标
|
||
cpu_usage REAL,
|
||
memory_usage REAL,
|
||
uptime_ms BIGINT,
|
||
active_tasks INT DEFAULT 0,
|
||
-- 附加信息
|
||
details JSONB DEFAULT '{}'::jsonb,
|
||
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
||
);
|
||
|
||
CREATE INDEX idx_mhb_module ON module_heartbeats(module_id, created_at DESC);
|
||
|
||
-- ============================================================
|
||
-- 3. 自诊断记录表 · module_diagnoses
|
||
-- 记录每次自诊断的结果
|
||
-- ============================================================
|
||
CREATE TABLE IF NOT EXISTS module_diagnoses (
|
||
id BIGSERIAL PRIMARY KEY,
|
||
module_id VARCHAR(64) NOT NULL REFERENCES living_modules(module_id) ON DELETE CASCADE,
|
||
-- 诊断结果
|
||
is_healthy BOOLEAN NOT NULL,
|
||
issues JSONB DEFAULT '[]'::jsonb,
|
||
-- 每个issue: { code, severity, message, suggestion }
|
||
-- severity: 'critical', 'warning', 'info'
|
||
overall_score SMALLINT NOT NULL,
|
||
duration_ms INT,
|
||
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
||
);
|
||
|
||
CREATE INDEX idx_md_module ON module_diagnoses(module_id, created_at DESC);
|
||
|
||
-- ============================================================
|
||
-- 4. 自愈记录表 · module_healing_logs
|
||
-- 记录每次自愈的操作和结果
|
||
-- ============================================================
|
||
CREATE TABLE IF NOT EXISTS module_healing_logs (
|
||
id BIGSERIAL PRIMARY KEY,
|
||
module_id VARCHAR(64) NOT NULL REFERENCES living_modules(module_id) ON DELETE CASCADE,
|
||
-- 触发原因
|
||
trigger_source VARCHAR(50) NOT NULL
|
||
CHECK (trigger_source IN ('self', 'scheduler', 'zhuyuan', 'manual')),
|
||
issue_code VARCHAR(100),
|
||
-- 修复操作
|
||
action_taken VARCHAR(200) NOT NULL,
|
||
action_details JSONB DEFAULT '{}'::jsonb,
|
||
-- 结果
|
||
success BOOLEAN NOT NULL,
|
||
health_before SMALLINT,
|
||
health_after SMALLINT,
|
||
duration_ms INT,
|
||
error_message TEXT,
|
||
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
||
);
|
||
|
||
CREATE INDEX idx_mhl_module ON module_healing_logs(module_id, created_at DESC);
|
||
|
||
-- ============================================================
|
||
-- 5. 报警记录表 · module_alerts
|
||
-- 模块向铸渊发送的报警
|
||
-- ============================================================
|
||
CREATE TABLE IF NOT EXISTS module_alerts (
|
||
id BIGSERIAL PRIMARY KEY,
|
||
module_id VARCHAR(64) NOT NULL REFERENCES living_modules(module_id) ON DELETE CASCADE,
|
||
severity VARCHAR(20) NOT NULL
|
||
CHECK (severity IN ('critical', 'warning', 'info')),
|
||
alert_type VARCHAR(50) NOT NULL,
|
||
message TEXT NOT NULL,
|
||
details JSONB DEFAULT '{}'::jsonb,
|
||
-- 处理状态
|
||
acknowledged BOOLEAN DEFAULT FALSE,
|
||
acknowledged_by VARCHAR(64),
|
||
acknowledged_at TIMESTAMPTZ,
|
||
resolved BOOLEAN DEFAULT FALSE,
|
||
resolved_at TIMESTAMPTZ,
|
||
resolution_note TEXT,
|
||
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
||
);
|
||
|
||
CREATE INDEX idx_ma_module ON module_alerts(module_id, created_at DESC);
|
||
CREATE INDEX idx_ma_unresolved ON module_alerts(resolved, severity) WHERE resolved = FALSE;
|
||
|
||
-- ============================================================
|
||
-- 6. 学习记录表 · module_learning_logs
|
||
-- 模块从运行中学到的经验
|
||
-- ============================================================
|
||
CREATE TABLE IF NOT EXISTS module_learning_logs (
|
||
id BIGSERIAL PRIMARY KEY,
|
||
module_id VARCHAR(64) NOT NULL REFERENCES living_modules(module_id) ON DELETE CASCADE,
|
||
-- 学习来源
|
||
learning_source VARCHAR(50) NOT NULL
|
||
CHECK (learning_source IN ('execution', 'diagnosis', 'healing', 'alert', 'feedback')),
|
||
-- 学到的内容
|
||
lesson_type VARCHAR(50) NOT NULL,
|
||
lesson_summary TEXT NOT NULL,
|
||
lesson_details JSONB DEFAULT '{}'::jsonb,
|
||
-- 是否已应用
|
||
applied BOOLEAN DEFAULT FALSE,
|
||
applied_at TIMESTAMPTZ,
|
||
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
||
);
|
||
|
||
CREATE INDEX idx_mll_module ON module_learning_logs(module_id, created_at DESC);
|
||
|
||
-- ============================================================
|
||
-- 7. HLDP消息表 · hldp_messages
|
||
-- 模块间通信消息记录
|
||
-- ============================================================
|
||
CREATE TABLE IF NOT EXISTS hldp_messages (
|
||
id BIGSERIAL PRIMARY KEY,
|
||
message_id VARCHAR(64) NOT NULL UNIQUE,
|
||
-- 收发方
|
||
from_module VARCHAR(64) NOT NULL,
|
||
to_module VARCHAR(64), -- NULL = 广播
|
||
-- 消息类型
|
||
msg_type VARCHAR(50) NOT NULL
|
||
CHECK (msg_type IN (
|
||
'heartbeat', -- 心跳
|
||
'command', -- 指令
|
||
'query', -- 查询
|
||
'response', -- 响应
|
||
'event', -- 事件
|
||
'broadcast', -- 广播
|
||
'alert', -- 报警
|
||
'data' -- 数据传输
|
||
)),
|
||
-- 消息体
|
||
payload JSONB NOT NULL DEFAULT '{}'::jsonb,
|
||
-- 状态
|
||
status VARCHAR(20) NOT NULL DEFAULT 'pending'
|
||
CHECK (status IN ('pending', 'delivered', 'processed', 'failed', 'expired')),
|
||
-- 时间
|
||
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||
delivered_at TIMESTAMPTZ,
|
||
processed_at TIMESTAMPTZ,
|
||
expires_at TIMESTAMPTZ
|
||
);
|
||
|
||
CREATE INDEX idx_hm_to ON hldp_messages(to_module, status, created_at DESC);
|
||
CREATE INDEX idx_hm_from ON hldp_messages(from_module, created_at DESC);
|
||
CREATE INDEX idx_hm_type ON hldp_messages(msg_type, created_at DESC);
|
||
|
||
-- ============================================================
|
||
-- 清理函数:定期删除7天前的心跳数据
|
||
-- ============================================================
|
||
CREATE OR REPLACE FUNCTION cleanup_old_heartbeats()
|
||
RETURNS void AS $$
|
||
BEGIN
|
||
DELETE FROM module_heartbeats WHERE created_at < NOW() - INTERVAL '7 days';
|
||
DELETE FROM hldp_messages WHERE created_at < NOW() - INTERVAL '30 days';
|
||
END;
|
||
$$ LANGUAGE plpgsql;
|
||
|
||
-- ============================================================
|
||
-- 预注册铸渊核心模块
|
||
-- ============================================================
|
||
INSERT INTO living_modules (module_id, name, description, module_type, owner, status, health_score, config, capabilities)
|
||
VALUES
|
||
('ZY-MOD-SCHEDULER', '铸渊调度引擎', 'Agent调度和活模块生命周期管理', 'core', 'zhuyuan', 'alive', 100,
|
||
'{"version": "2.0.0", "heartbeat_enabled": true}'::jsonb,
|
||
'["schedule_agents", "manage_lifecycle", "monitor_health"]'::jsonb),
|
||
('ZY-MOD-MCP', '铸渊MCP Server', 'MCP工具链服务·大脑API入口', 'core', 'zhuyuan', 'alive', 100,
|
||
'{"version": "1.0.0", "port": 3100}'::jsonb,
|
||
'["node_ops", "relation_ops", "cos_ops", "persona_ops", "structure_ops"]'::jsonb),
|
||
('ZY-MOD-HLDP-BUS', '铸渊HLDP通信总线', '模块间HLDP消息路由和分发', 'core', 'zhuyuan', 'alive', 100,
|
||
'{"version": "1.0.0"}'::jsonb,
|
||
'["route_messages", "broadcast", "queue_management"]'::jsonb),
|
||
('ZY-MOD-GATE-GUARD', '铸渊智能门禁', 'Push/PR安全守卫', 'guard', 'zhuyuan', 'alive', 100,
|
||
'{"version": "1.0.0"}'::jsonb,
|
||
'["push_review", "pr_review", "security_scan"]'::jsonb),
|
||
('ZY-MOD-DEPUTY', '铸渊副将', '留言板活体Agent·LLM多模型降级', 'agent', 'zhuyuan', 'alive', 100,
|
||
'{"version": "2.0.0"}'::jsonb,
|
||
'["message_board", "llm_routing", "auto_response"]'::jsonb),
|
||
('ZY-MOD-SY-TEST', '系统自检活模块', '全系统健康检测·DB/COS/表/模块', 'guard', 'zhuyuan', 'alive', 100,
|
||
'{"version": "2.0.0", "cron": "*/30 * * * *"}'::jsonb,
|
||
'["db_check", "cos_check", "table_check", "module_check"]'::jsonb),
|
||
('ZY-MOD-SY-SCAN', '大脑结构巡检活模块', '大脑认知结构健康巡检', 'guard', 'zhuyuan', 'alive', 100,
|
||
'{"version": "2.0.0", "cron": "0 */6 * * *"}'::jsonb,
|
||
'["orphan_scan", "broken_link_scan", "duplicate_scan", "empty_folder_scan"]'::jsonb),
|
||
('ZY-MOD-SY-CLASSIFY', '自动分类引擎活模块', '认知节点自动分类·规则引擎', 'agent', 'zhuyuan', 'alive', 100,
|
||
'{"version": "2.0.0", "cron": "0 */2 * * *"}'::jsonb,
|
||
'["rule_classify", "keyword_match", "tag_assignment"]'::jsonb),
|
||
('ZY-MOD-PERSONA-ENGINE', '人格体数据库引擎', 'S15·人格体生命周期管理·笔记本维护·记忆巡检', 'core', 'zhuyuan', 'alive', 100,
|
||
'{"version": "1.0.0", "scan_interval": "6h"}'::jsonb,
|
||
'["persona_lifecycle", "notebook_integrity", "memory_scan", "training_coordination"]'::jsonb)
|
||
ON CONFLICT (module_id) DO NOTHING;
|