feat(agent-gate): 智能体互通编排层——authorize_call 三层权限(L1管理员/L2同企业/L3临时授权)+MQTT invoke 派发+agent-events 内部接口+agent-grants CRUD+幂等迁移SQL

This commit is contained in:
Pine
2026-09-10 01:40:38 +08:00
parent c94d4b72d9
commit 23e17560f6
7 changed files with 557 additions and 1 deletions
+63
View File
@@ -0,0 +1,63 @@
-- ============================================================
-- 智能体互通(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)';