-- ============================================================ -- 智能体互通(agent_gate)数据库迁移 -- 适用:server-core 生产库(本机与生产共用同一 MySQL) -- 执行方式(本机): -- mysql -h47.108.226.213 -P8091 -uopc -pjjjsgysyujkwjwgb opc < migrate_agent_gate.sql -- 幂等:全部语句可重复执行(先检查列/表是否已存在) -- ============================================================ -- 1) agents 表新增:外部调用开关 + 调用确认模式 SET @col_exists := ( SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = 'opc' AND TABLE_NAME = 'agents' AND COLUMN_NAME = 'external_callable' ); SET @sql := IF(@col_exists = 0, 'ALTER TABLE agents ADD COLUMN external_callable TINYINT(1) NOT NULL DEFAULT 1 COMMENT ''是否允许被企业内其他账号/智能体调用''', 'SELECT 1'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; SET @col_exists := ( SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = 'opc' AND TABLE_NAME = 'agents' AND COLUMN_NAME = 'call_mode' ); SET @sql := IF(@col_exists = 0, 'ALTER TABLE agents ADD COLUMN call_mode VARCHAR(16) NOT NULL DEFAULT ''auto'' COMMENT ''auto=自动执行 / confirm=需归属用户确认''', 'SELECT 1'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; -- 2) 智能体临时授权表(L3 成员开放调用) CREATE TABLE IF NOT EXISTS agent_access_grants ( id VARCHAR(64) NOT NULL COMMENT 'grant_xxx', grantor_user_id VARCHAR(36) NOT NULL COMMENT '授权人(agent 归属用户)', target_agent_addr VARCHAR(128) NOT NULL COMMENT '目标 agent 地址 {user_id}.{agent_id}', grantee_user_id VARCHAR(36) NOT NULL COMMENT '被授权人(可调用方)', scope TEXT NOT NULL COMMENT 'prompt 前缀白名单(每行一条),空=全部', max_calls INT NOT NULL DEFAULT 0 COMMENT '0=不限次数', used_calls INT NOT NULL DEFAULT 0, expires_at VARCHAR(32) NOT NULL DEFAULT '' COMMENT 'ISO 时间(UTC);空=永久', status VARCHAR(16) NOT NULL DEFAULT 'active' COMMENT 'active|revoked', created_at VARCHAR(32) NOT NULL DEFAULT '', updated_at VARCHAR(32) NOT NULL DEFAULT '', PRIMARY KEY (id), KEY idx_agent_grant_grantee (grantee_user_id, status), KEY idx_agent_grant_target (target_agent_addr, status), KEY idx_agent_grant_grantor (grantor_user_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='智能体临时开放调用授权(L3)'; -- 3) im-service 智能体任务登记表(im_agent_tasks,幂等兜底;im-service 启动时也会 create_all) CREATE TABLE IF NOT EXISTS im_agent_tasks ( task_id VARCHAR(48) NOT NULL COMMENT 'agt_xxx', addr VARCHAR(128) NOT NULL DEFAULT '' COMMENT '{user_id}.{agent_id}', conv_id VARCHAR(96) NOT NULL DEFAULT '' COMMENT 'agent_reply 回写会话', caller_user_id VARCHAR(36) NOT NULL DEFAULT '', caller_name VARCHAR(64) NOT NULL DEFAULT '', prompt TEXT, mode VARCHAR(16) NOT NULL DEFAULT 'auto' COMMENT 'auto|confirm', status VARCHAR(16) NOT NULL DEFAULT 'pending' COMMENT 'pending|running|ok|error|offline|cancelled', reply_content TEXT, created_at VARCHAR(32) NOT NULL DEFAULT '', updated_at VARCHAR(32) NOT NULL DEFAULT '', PRIMARY KEY (task_id), KEY idx_im_agent_task_conv (conv_id), KEY idx_im_agent_task_addr (addr, status) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='智能体互通任务登记(im-service)';