-- ============ 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';
