import { type ApprovalRequest, type RiskLabel } from "../../core/index.js"; /** demo-live-readiness 2026-07 — the grant-SET consent card (approved mockup, * section 2): an automation that needs several standing grants asks for ALL of * them in one card — every permission enumerated, ONE Approve that grants the * whole set, one Deny that declines it. The decided card stays in the * transcript as the settled record ("Enabled · N permissions granted" / * "Denied — the automation stays paused."). Presentational: the caller owns * deciding the guard approvals and resuming the parked turn. * * spec §16 — contents only: the geometry is the one card shell. */ export interface GrantSetPermission { /** The pending guard approval this row settles. */ approvalId: string; tool: string; /** The service action this row is for, when the tool is the connector dispatcher. It, not the tool name, is what the person is allowing — two service actions on one card are otherwise the same row twice. */ slug?: string; risk: RiskLabel; } /** The consent rows for a set of pending asks — ONE mapping for every surface that renders them (the workspace panel's arming and failed-run cards, and the in-thread automation consent), so a permission reads the same words everywhere. A connector ask is FOR its service action, not the dispatcher — two service actions on one card are otherwise the same row twice. */ export declare function grantSetPermissions(asks: readonly ApprovalRequest[]): GrantSetPermission[]; /** * The word a permission row leads with — FROM THE GRADE, and only the grade. * * This briefly took the word from the ask's own verb instead (ruling 15, to * stop a `read`-graded send tool rendering "Reads: Email send"). Yousef's * grading ruling retires that mechanism: no code path may conclude anything * from a tool's NAME, because a word list misses silently and its existence * reads as coverage. The honest fix for a mis-graded tool is to fix the GRADE — * the judge and `overrides.json` exist for exactly that — not to have the * highest-stakes card in the product second-guess it from a slug. * * An UNGRADED permission says so. It may not borrow "Reads": that is the * safest-sounding word available and the one thing nobody has established. */ export declare function grantRowWord(risk: RiskLabel | string): string; export interface GrantSetCardProps { /** The automation's display name. */ name: string; permissions: GrantSetPermission[]; /** parked → actionable; approved/denied → the settled record. */ state: "parked" | "approved" | "denied"; onDecide?(approve: boolean): void | PromiseLike; } /** Mockup copy: "Allow both & enable" for the pair; sensible words either side. */ export declare function allowLabel(count: number): string; export declare function GrantSetCard({ name, permissions, state, onDecide }: GrantSetCardProps): import("react").JSX.Element;