# DryRunPreview

The agent's declared effects before anything runs, with a veto per line and one versioned decision.

- **Use it for**: The declared effects of a plan before anything runs, with a veto per line.
- **Not for**: Reviewing changes already made. Try [ReviewChanges](https://unseenui.com/components/review-changes/).

## Installation

```bash
npm install @stackunseen/ui
```

## Usage

```tsx
import { DryRunPreview } from '@stackunseen/ui/conversation-flow';
import '@stackunseen/ui/styles.css';
import '@stackunseen/ui/conversation-flow.css';

<DryRunPreview variant="card" plan={plan} skippedIds={skipped} onSkippedChange={setSkipped} onDecision={decide} />
```

## All props

| Prop | Type | Description |
| --- | --- | --- |
| `label` | `string` |  |
| `onDecision` (required) | `(decision: DryRunDecision) => void` |  |
| `onSkippedChange` (required) | `(ids: string[]) => void` |  |
| `plan` (required) | `DryRunPlan` |  |
| `receipt` | `CommandReceipt` |  |
| `skippedIds` (required) | `readonly string[]` |  |
| `stale` | `boolean` | True when the host has a newer plan version; decisions are blocked until it is shown. |
| `submission` | `SubmissionState` |  |
| `variant` | `"card" \| "inline"` |  |

## Keyboard

Each effect is a checkbox; Run and Cancel are buttons.

## Works with

[ApprovalCard](https://unseenui.com/components/approval-card/), [PermissionRequest](https://unseenui.com/components/permission-request/), [ReviewChanges](https://unseenui.com/components/review-changes/), [ApprovalBatch](https://unseenui.com/components/approval-batch/), [ScopeGrant](https://unseenui.com/components/scope-grant/), [AccessModeSelector](https://unseenui.com/components/access-mode-selector/), [ClarificationRequest](https://unseenui.com/components/clarification-request/)

Page: https://unseenui.com/components/dry-run-preview/
