/** 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 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[];