-- ============ ACP 工具调用权限审批 ============ -- agent kind 的工具白名单:命中的工具调用自动放行(status=auto),未命中走人工审批。 -- 空数组表示无白名单(全部需人工审批);含 '*' 表示全部自动放行。 ALTER TABLE acp_agent_kinds ADD COLUMN tool_allowlist TEXT[] NOT NULL DEFAULT '{}'; -- 代理发起的 session/request_permission 请求落库,供人工审批与审计。 CREATE TABLE acp_permission_requests ( id UUID PRIMARY KEY, session_id UUID NOT NULL REFERENCES acp_sessions(id) ON DELETE CASCADE, agent_request_id TEXT NOT NULL DEFAULT '', -- 代理 JSON-RPC request id(排障/幂等) tool_name TEXT NOT NULL DEFAULT '', -- 从 toolCall 提取的工具标识,便于展示 tool_call JSONB NOT NULL, -- 原始 toolCall 对象 options JSONB NOT NULL, -- 原始 options 数组 status TEXT NOT NULL, -- pending|approved|denied|auto|expired chosen_option_id TEXT, -- 最终选中的 option id decided_by UUID REFERENCES users(id) ON DELETE SET NULL, decided_at TIMESTAMPTZ, created_at TIMESTAMPTZ NOT NULL DEFAULT now(), CONSTRAINT acp_perm_status_check CHECK (status IN ('pending','approved','denied','auto','expired')) ); CREATE INDEX idx_acp_perm_session_status ON acp_permission_requests(session_id, status); CREATE INDEX idx_acp_perm_pending ON acp_permission_requests(status) WHERE status = 'pending';