pbl_agent_runtime/sql/m4a_ddl.sql
2026-09-17 23:44:00 +08:00

124 lines
8.8 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- pbl_agent_runtime M4a DDL(自动生成,勿手改)
-- 生成源:pbl_agent_runtime/m4a_tables.py(四段式表定义 → to_sql)
-- 表:pbl_agent_def / pbl_agent_tool / pbl_agent_trace(append-only) / pbl_agent_trace_stage(append-only) / pbl_agent_approval
-- 工具注册表 seed:13 enabled + 9 disabled(scripts/seed_m4a.py 幂等注入,build.sh 调用)
CREATE TABLE IF NOT EXISTS `pbl_agent_def` (
`id` INT NOT NULL AUTO_INCREMENT COMMENT '主键',
`tenant_id` VARCHAR(64) NOT NULL COMMENT '租户ID(强制打头)',
`agent_code` VARCHAR(128) NOT NULL COMMENT 'Agent 编码:designer / critic',
`agent_name` VARCHAR(128) COMMENT 'Agent 名称',
`agent_type` VARCHAR(64) COMMENT '类型:authoring(设计) / review(评审)',
`loop_pattern` VARCHAR(128) COMMENT '循环模式:observe_think_propose[_execute]',
`authority_boundary` TEXT COMMENT '权威边界说明(Agent 非真相源,14.1)',
`write_allowed` TINYINT(1) NOT NULL DEFAULT 0 DEFAULT 0 COMMENT '是否允许写操作:designer=1 / critic=0',
`allowed_tools` LONGTEXT COMMENT '该 Agent 可调用的 tool_code 白名单(JSON 数组)',
`denied_tools` LONGTEXT COMMENT '显式黑名单(JSON 数组,优先级高于 allowed)',
`model_binding` LONGTEXT COMMENT '模型绑定:{model,capability,fallback}',
`offline_fallback` VARCHAR(64) COMMENT '模型不可达兜底策略:template_fallback / none',
`status` VARCHAR(64) DEFAULT 'enabled' COMMENT '状态:enabled / disabled',
`description` TEXT COMMENT '说明',
`created_by` VARCHAR(64) COMMENT '创建人',
`created_at` DATETIME COMMENT '创建时间',
`updated_at` DATETIME COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_agent_def` (`tenant_id`, `agent_code`),
KEY `idx_agent_def_status` (`tenant_id`, `status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Agent 定义表:本迭代仅 designer / critic 两个(第 13.1 章)。write_allowed=0 表示零写权限(Critic,14.1 不直接修改 Blueprint)。';
CREATE TABLE IF NOT EXISTS `pbl_agent_tool` (
`id` INT NOT NULL AUTO_INCREMENT COMMENT '主键',
`tenant_id` VARCHAR(64) NOT NULL COMMENT '租户ID(强制打头)',
`tool_code` VARCHAR(128) NOT NULL COMMENT '工具编码,如 blueprint.create',
`tool_name` VARCHAR(128) COMMENT '工具名称',
`tool_group` VARCHAR(64) COMMENT '分组:blueprint/template/validation/critic/trace/approval/compile/kdb/publish/marketplace/experiments/agent/world',
`status` VARCHAR(64) NOT NULL DEFAULT 'disabled' COMMENT '状态:enabled / disabled',
`required_permission` VARCHAR(128) COMMENT '所需权限域:pbl_authoring / agent_tools / publishing / kdb / platform_admin',
`require_approval` TINYINT(1) NOT NULL DEFAULT 0 DEFAULT 0 COMMENT '是否强制人工审批(14.2)',
`approval_action_type` VARCHAR(64) COMMENT '强制审批类别:publish / compile_execute / blueprint_approve / tool_registry_change',
`allowed_agents` LONGTEXT COMMENT '允许调用的 agent_code 列表(JSON 数组)',
`write_operation` TINYINT(1) NOT NULL DEFAULT 0 DEFAULT 0 COMMENT '是否写操作(Critic 零写权限据此拒绝)',
`input_schema` LONGTEXT COMMENT '入参 JSON Schema(S8 契约校验)',
`output_schema` LONGTEXT COMMENT '出参 JSON Schema',
`backend_mapping` VARCHAR(255) COMMENT '后端权威服务映射,如 pbl_blueprint.create_blueprint',
`disable_reason` TEXT COMMENT '禁用原因(disabled 时必填,out_of_scope 锚点)',
`scope_note` TEXT COMMENT '范围备注(Phase / owner 决策锚点)',
`sort_no` INT COMMENT '排序号',
`created_by` VARCHAR(64) COMMENT '创建人',
`created_at` DATETIME COMMENT '创建时间',
`updated_at` DATETIME COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_agent_tool` (`tenant_id`, `tool_code`),
KEY `idx_tool_status` (`tenant_id`, `status`),
KEY `idx_tool_group` (`tenant_id`, `tool_group`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Agent 工具注册表:第 31 章裁剪子集(13 enabled + 9 disabled)。fail-closed default-deny:仅本表 enabled 记录可被 invoke_tool 执行;disabled 记录保留 disable_reason 供审计与拒绝回执。';
CREATE TABLE IF NOT EXISTS `pbl_agent_trace` (
`id` INT NOT NULL AUTO_INCREMENT COMMENT '主键',
`tenant_id` VARCHAR(64) NOT NULL COMMENT '租户ID(强制打头)',
`trace_no` VARCHAR(128) NOT NULL COMMENT '轨迹编号(业务主键)',
`agent_code` VARCHAR(64) COMMENT '产生轨迹的 Agent:designer / critic',
`session_no` VARCHAR(128) COMMENT '会话号(多轮对话归并)',
`status` VARCHAR(64) DEFAULT 'open' COMMENT '轨迹状态:open / done / deny',
`step_reached` VARCHAR(64) COMMENT '裁决链到达步:S1~S8 / EXECUTED',
`deny_code` VARCHAR(64) COMMENT '拒绝错误码(被拒时填)',
`deny_reason` TEXT COMMENT '拒绝原因(含 disable_reason / 越权说明)',
`input_context` LONGTEXT COMMENT '① 输入上下文',
`retrieved_knowledge` LONGTEXT COMMENT '② 检索到的知识(含 KDB 桩降级路径)',
`tool_calls` LONGTEXT COMMENT '③ 工具调用(入参+出参,含被拒调用)',
`proposed_action` LONGTEXT COMMENT '④ 提案动作(Agent 只 Propose,14.1)',
`result` LONGTEXT COMMENT '⑤ 执行结果(allow/deny + 结果体)',
`approval` LONGTEXT COMMENT '⑥ 审批信息(approval_no/status/approver)',
`final_output` LONGTEXT COMMENT '⑦ 最终输出',
`created_by` VARCHAR(64) COMMENT '创建人',
`created_at` DATETIME COMMENT '创建时间',
`appended_at` DATETIME COMMENT '最后追加时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_trace_no` (`tenant_id`, `trace_no`),
KEY `idx_trace_agent` (`tenant_id`, `agent_code`, `created_at`),
KEY `idx_trace_session` (`tenant_id`, `session_no`),
KEY `idx_trace_status` (`tenant_id`, `status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Agent 执行轨迹(第 28 章 7 要素,US-20 可查不可篡改)。append-only:无 update/delete 对外接口,DB 层 append_only 标记,要素只能追加;已完成(done/deny)轨迹再追加 → PBL_E_APPEND_ONLY。 [APPEND-ONLY: 禁止 UPDATE/DELETE]';
CREATE TABLE IF NOT EXISTS `pbl_agent_trace_stage` (
`id` INT NOT NULL AUTO_INCREMENT COMMENT '主键',
`tenant_id` VARCHAR(64) NOT NULL COMMENT '租户ID',
`trace_no` VARCHAR(128) NOT NULL COMMENT '轨迹编号',
`stage` VARCHAR(64) NOT NULL COMMENT '要素名(7 要素之一)',
`payload` LONGTEXT COMMENT '要素内容',
`seq_no` INT COMMENT '追加序号(同轨迹内自增)',
`created_at` DATETIME COMMENT '追加时间',
PRIMARY KEY (`id`),
KEY `idx_stage_trace` (`tenant_id`, `trace_no`, `seq_no`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='轨迹要素追加流水:每次 append_trace 落一行,只增不改不删,用于举证 7 要素逐条可查与追加顺序(US-20)。 [APPEND-ONLY: 禁止 UPDATE/DELETE]';
CREATE TABLE IF NOT EXISTS `pbl_agent_approval` (
`id` INT NOT NULL AUTO_INCREMENT COMMENT '主键',
`tenant_id` VARCHAR(64) NOT NULL COMMENT '租户ID(强制打头)',
`approval_no` VARCHAR(128) NOT NULL COMMENT '审批单号(业务主键)',
`trace_id` INT COMMENT '关联轨迹ID',
`trace_no` VARCHAR(128) COMMENT '关联轨迹编号',
`agent_code` VARCHAR(64) COMMENT '提案 Agent',
`action_type` VARCHAR(64) NOT NULL COMMENT '审批类别(四类之一)',
`tool_code` VARCHAR(128) COMMENT '触发审批的工具编码',
`object_type` VARCHAR(64) COMMENT '对象类型:blueprint / tool / compile_task',
`object_id` VARCHAR(128) COMMENT '对象ID',
`action_payload` LONGTEXT COMMENT '提案内容快照(审批人据此判断)',
`status` VARCHAR(64) NOT NULL DEFAULT 'pending' COMMENT '状态:pending / approved / rejected / expired',
`requester_type` VARCHAR(64) COMMENT '提案方类型:agent / user',
`requester_id` VARCHAR(64) COMMENT '提案方ID',
`approver_id` VARCHAR(64) COMMENT '指定审批人(可空=任一授权人)',
`approver_type` VARCHAR(64) COMMENT '实际审批人类型(必须 user)',
`decided_by` VARCHAR(64) COMMENT '实际审批人ID',
`decided_at` DATETIME COMMENT '审批时间',
`comment` TEXT COMMENT '审批意见',
`expires_at` DATETIME COMMENT '过期时间(过期后 pending 视为无效)',
`created_at` DATETIME COMMENT '创建时间',
`updated_at` DATETIME COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_approval_no` (`tenant_id`, `approval_no`),
KEY `idx_approval_pending` (`tenant_id`, `status`, `approver_id`),
KEY `idx_approval_trace` (`tenant_id`, `trace_no`),
KEY `idx_approval_action` (`tenant_id`, `action_type`, `status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='人工审批单(14.2):四类强制审批 publish / compile_execute / blueprint_approve / tool_registry_change。Agent 不可自批:decide_approval 仅 actor_type=user 可调用。';