/** spec §16 law 1 — the card body is NOT chosen by its data. * * The consent cards used to pick between three mutually exclusive bodies (a * consequence sentence, a `
` of 1–8 primitive args, or a raw `
` of the
 *  server's `inputPreview`), so the same ask looked like a different product
 *  depending on what the model happened to pass. One body now: field rows,
 *  always. Nested values flatten to compact `Key: value` lines (the shell's dd
 *  is `white-space: pre-line`), non-object args become one row, and a long arg
 *  list is simply a long list — never a fallback to raw JSON.
 */
import type { JsonSchema } from "../../core/index.js";
import { type ToolMeta } from "./humanize.js";
export interface CardFieldRow {
    /** WHICH argument this row is — the top-level input key, verbatim ("Input",
        or "Result" on the way back, for a value with no name of its own).
        Identity, never display: `humanizeToolName` is many-to-one
        (`recipient_name`, `recipientName` and `RecipientName` all
        read "Recipient name"), so anything matching a row against something else
        — the consent question's `questionKeys`, say — matches on this. */
    key: string;
    /** Humanized argument name ("recipient_name" → "Recipient name"). */
    label: string;
    /** What the person reads — host formatter first, else the shared money-safe
        value rule (`argValue`). */
    value: string;
    /** The raw value, for the dd tooltip: the consent honesty contract keeps the
        real input one hover away whenever display changed it. */
    raw: string;
    /** Numbers right-align on tabular figures so a column of amounts reads as a
        column (`.fl-card-field dd[data-numeric]`). */
    numeric: boolean;
}
/** The declared schema for one member of a container: an object's property, an
    array's `items`. Undefined where the host declared nothing there — the same
    "undeclared" state the top level already answers for honestly.

    Exported for H-7: the consequence sentence has to count money with the SAME
    descent these rows format it with, or the two disagree about what is on the
    card. */
export declare function memberSchema(schema: JsonSchema | undefined, key: string): JsonSchema | undefined;
/** The one body, for any args a tool call can carry. */
export declare function fieldRows(args: unknown, inputSchema?: JsonSchema, meta?: ToolMeta): CardFieldRow[];
/** The same one body for what the call RETURNED — one word different, and the
    word is the DIRECTION. A value with no name of its own (a bare value, or a
    list) is the whole thing, and the arg-side name for that row labelled a
    settled receipt's returned todo list "Input", as if the list were what the
    person had approved sending. */
export declare function resultRows(output: unknown): CardFieldRow[];