-- AI自进化引擎 v2 数据库变更 -- Qihu-AIFlow v2.0.0 -- 使用存储过程进行幂等的列添加,确保可重复执行 DELIMITER $$ -- ============================================================ -- 1. 现有表新增字段(幂等操作) -- ============================================================ -- evolution_trajectories 新增字段 CREATE PROCEDURE IF NOT EXISTS add_col_evtraj() BEGIN IF NOT EXISTS (SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'evolution_trajectories' AND COLUMN_NAME = 'error_msg') THEN ALTER TABLE `evolution_trajectories` ADD COLUMN `error_msg` VARCHAR(500) DEFAULT NULL COMMENT '轨迹处理失败的错误信息'; END IF; IF NOT EXISTS (SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'evolution_trajectories' AND COLUMN_NAME = 'retry_count') THEN ALTER TABLE `evolution_trajectories` ADD COLUMN `retry_count` INT DEFAULT 0 COMMENT '失败重试次数'; END IF; IF NOT EXISTS (SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'evolution_trajectories' AND COLUMN_NAME = 'tasks_extracted') THEN ALTER TABLE `evolution_trajectories` ADD COLUMN `tasks_extracted` INT DEFAULT 0 COMMENT '拆分的AtomTask数量'; END IF; END$$ -- messages 新增字段 CREATE PROCEDURE IF NOT EXISTS add_col_msgs() BEGIN IF NOT EXISTS (SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'messages' AND COLUMN_NAME = 'used_skills') THEN ALTER TABLE `messages` ADD COLUMN `used_skills` JSON DEFAULT NULL COMMENT '该轮对话调用的进化技能名列表'; END IF; END$$ -- user_evolution_config 新增字段 CREATE PROCEDURE IF NOT EXISTS add_col_uec() BEGIN IF NOT EXISTS (SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'user_evolution_config' AND COLUMN_NAME = 'watcher_error') THEN ALTER TABLE `user_evolution_config` ADD COLUMN `watcher_error` VARCHAR(500) DEFAULT NULL COMMENT 'watcher异常信息'; END IF; IF NOT EXISTS (SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'user_evolution_config' AND COLUMN_NAME = 'pipeline_status') THEN ALTER TABLE `user_evolution_config` ADD COLUMN `pipeline_status` VARCHAR(20) DEFAULT 'idle' COMMENT '流水线状态: running/idle/error'; END IF; IF NOT EXISTS (SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'user_evolution_config' AND COLUMN_NAME = 'pipeline_processed') THEN ALTER TABLE `user_evolution_config` ADD COLUMN `pipeline_processed` INT DEFAULT 0 COMMENT '已处理轨迹数'; END IF; END$$ DELIMITER ; -- 执行列添加 CALL add_col_evtraj(); CALL add_col_msgs(); CALL add_col_uec(); -- 清理存储过程 DROP PROCEDURE IF EXISTS add_col_evtraj; DROP PROCEDURE IF EXISTS add_col_msgs; DROP PROCEDURE IF EXISTS add_col_uec; -- ============================================================ -- 2. 新增表: skill_versions (技能版本历史, 用于回滚) -- ============================================================ CREATE TABLE IF NOT EXISTS `skill_versions` ( `id` VARCHAR(36) NOT NULL PRIMARY KEY, `user_id` VARCHAR(36) NOT NULL, `skill_name` VARCHAR(200) NOT NULL, `version` INT NOT NULL DEFAULT 1, `skill_md_content` LONGTEXT COMMENT '该版本的SKILL.md完整内容', `git_commit_sha` VARCHAR(40) COMMENT 'Git提交SHA', `description` TEXT COMMENT '版本变更说明', `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP, INDEX `idx_sv_user_skill` (`user_id`, `skill_name`), INDEX `idx_sv_version` (`version`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- ============================================================ -- 3. 新增表: evolution_reports (进化报告) -- ============================================================ CREATE TABLE IF NOT EXISTS `evolution_reports` ( `id` VARCHAR(36) NOT NULL PRIMARY KEY, `user_id` VARCHAR(36) NOT NULL, `report_type` VARCHAR(20) NOT NULL COMMENT 'weekly / monthly', `period_start` DATE NOT NULL COMMENT '报告周期开始日期', `period_end` DATE NOT NULL COMMENT '报告周期结束日期', `report_data` JSON COMMENT '报告详细数据(JSON)', `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP, INDEX `idx_er_user_type` (`user_id`, `report_type`), INDEX `idx_er_period` (`period_start`, `period_end`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- ============================================================ -- 4. 新增表: skill_publish_records (技能市场发布记录) -- ============================================================ CREATE TABLE IF NOT EXISTS `skill_publish_records` ( `id` VARCHAR(36) NOT NULL PRIMARY KEY, `skill_id` VARCHAR(36) NOT NULL COMMENT '关联evolution_skills.id', `skill_name` VARCHAR(200) NOT NULL, `user_id` VARCHAR(36) NOT NULL, `market_app_id` VARCHAR(36) COMMENT '关联market_apps.id', `price` DECIMAL(10, 2) DEFAULT 0.00, `market_description` TEXT, `status` VARCHAR(20) NOT NULL DEFAULT 'published' COMMENT 'published/unpublished', `published_at` DATETIME DEFAULT CURRENT_TIMESTAMP, `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP, INDEX `idx_spr_skill_id` (`skill_id`), INDEX `idx_spr_user_id` (`user_id`), INDEX `idx_spr_status` (`status`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- ============================================================ -- 5. 新增表: team_shared_skills (团队共享技能) -- ============================================================ CREATE TABLE IF NOT EXISTS `team_shared_skills` ( `id` VARCHAR(36) NOT NULL PRIMARY KEY, `team_id` VARCHAR(36) NOT NULL, `skill_id` VARCHAR(36) NOT NULL COMMENT '关联evolution_skills.id', `skill_name` VARCHAR(200) NOT NULL, `shared_by` VARCHAR(36) NOT NULL COMMENT '分享者user_id', `shared_by_name` VARCHAR(100) COMMENT '分享者昵称', `is_public` TINYINT(1) DEFAULT 1 COMMENT '团队内是否可见', `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP, UNIQUE KEY `uk_tss_team_skill` (`team_id`, `skill_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;