import { FC } from 'react'; import { PendingWrite } from '../pendingWrite'; interface Props { pendingWrite: PendingWrite; /** * Approve this exact pending write. Absent when the conversation is not live * (history, export) — the card then reads as a record of what was asked. */ onApprove?: (reference: string) => void; /** True while the approval is in flight, so the button cannot be double-sent. */ approving?: boolean; } /** * What the assistant is asking permission to change — taken from the request it * tried to send, not from its description of it. * * ★ WHY THIS IS NOT DECORATION. In "Take action" mode the sandbox refuses every * mutation on its first attempt and tells the model to describe the change and * ask. So the thing the user reads, and approves, is a paragraph written by the * same model that wants the write to go through. Nothing reconciles that * paragraph against the payload: a field can be omitted, a number rounded, a * delete described as an update, and the approval still counts. This card is the * payload. * * ★★ IT NOW HAS AN APPROVE BUTTON, AND THAT IS A CHANGE OF FACT, NOT OF TASTE. * * This card deliberately had none. A button would have had to send "yes" as a * chat message and let the model decide what that authorised — the very * arrangement the card existed to expose, dressed up as a control — because the * model held the single-use token and could paste it back whenever it liked. * * That is no longer true. The sandbox no longer puts the token in anything the * model can read; the refusal carries a reference that NAMES the pending change * and authorises nothing. Approval is an out-of-band call to the sandbox * (`/write-confirmations/:reference/approve`) that the model is not part of. So * the button now promises a boundary that exists. * * ★ The reference is not a secret and the token is never rendered — the card * still never displays anything that could authorise the write on its own. * * ★ Without a reference (an older sandbox image) the button is not shown at * all, and the card falls back to what it always said: reply in your own words. * A control that cannot work is worse than no control. */ export declare const AssistantPendingWriteCard: FC; export {}; //# sourceMappingURL=AssistantPendingWriteCard.d.ts.map