# {{name}} FlowRunner Extension

{{description}}

Deploy it, open a flow, and poke it. Every action either echoes what it received or reports what the
runtime did, so you can see defaults being applied, values converted, unknown fields stripped, dictionaries
loading, triggers firing and errors surfacing — without a real API behind any of it.

Each action is named for the **one thing it proves**, so a failing check tells you what broke.

Storage is in the pod's memory and resets on restart. Nothing calls a third party except **Call An HTTP
Endpoint**, where you supply the URL.

## Ideal Use Cases

- Verifying a custom-extension deployment end to end after a platform change
- Checking how a zod declaration renders in the flow editor before committing to it
- Reproducing a reported bug against a known-good service

## Suggested run-through

1. **Show Config And Context** — config resolved, what `initContext` built, and which deploy is live
2. **Params — Every Scalar Type** — one widget per type, and the JS type each value arrived as
3. **Params — Optional, Nullable, Nullish, Defaults** — leave every optional field blank and compare
4. **Params — Date Forms** — put the same value in every field and compare what each declaration hands over
5. **Params — List Of Objects** and **Params — List Of Choices** — the repeatable editors
6. **Params — Dictionary-backed** — dependent, paged and failing dropdowns
7. **Files — Upload, Read, List, Delete** — the whole storage surface in one call
8. **Throw An Error** and **Run Longer Than A Timeout** — failure propagation, and that a long run survives
9. Enable one of the triggers and wait for a poll

## List of Actions

**1. Config**

- Show Config And Context

**2. Params** — each echoes `params` back exactly as `execute` received them

- Params — Every Scalar Type
- Params — Optional, Nullable, Nullish, Defaults
- Params — Values Arrive As Their Declared Type
- Params — Date Forms
- Params — Dropdowns, Plain And Mapped
- Params — List Of Primitives
- Params — List Of Objects
- Params — List Of Choices
- Params — Nested Object
- Params — Dictionary-backed
- Params — Generated At Runtime
- Params — Unknown Fields Are Stripped

**3. Results** — one per `result` form, because each publishes a different return type or sample source

- Returns — Object
- Returns — List
- Returns — Nothing
- Returns — Sample From A Schema
- Returns — Sample Computed From Params

**4. Runtime**

- Call Helpers
- Emit Logs
- Throw An Error
- Run Longer Than A Timeout
- Read OAuth Without Declaring It

**5. HTTP**

- Call An HTTP Endpoint

**6. Files**

- Files — Upload, Read, List, Delete
- Files — Storage Usage

## List of Triggers

- On New Item — by id (dedupe)
- On New Item — by timestamp (watermark)
- On New Item — managing its own state (poll)

## Agent Ideas

- Chain **{{name}}** "Params — Every Scalar Type" after an agent step to see exactly what the agent passed as arguments
- Use **{{name}}** "Throw An Error" to rehearse a flow's error branch without waiting for a real failure
- Pair **{{name}}** "Files — Upload, Read, List, Delete" with **Gmail** "Send Email" to check a generated file URL survives the hop to another service
