272 lines
12 KiB
MySQL
272 lines
12 KiB
MySQL
|
|
-- ============================================================
|
|||
|
|
-- 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;
|