# Functions & Workflow Page (`functions-01`) - SignalOS page block

> Functions and workflow page: a filterable workflow list beside a detail panel showing the compiled step graph, revision history, and run records with their results.

- **Version:** 0.1.10
- **Kind:** block (group: semantics-details) · **Category:** pages
- **Install:** `npx shadcn@latest add @signalos/functions-01`
- **Registry dependencies (pulled automatically):** @signalos/tokens, @signalos/utils, @signalos/button, @signalos/page-header, @signalos/textarea, @signalos/badge, @signalos/checkbox, @signalos/command, @signalos/form-dialog, @signalos/popover, @signalos/progress, @signalos/select, @signalos/skeleton, @signalos/tooltip, @signalos/split-panel, @signalos/tabs, @signalos/view-controler, @signalos/input, @signalos/sheet, @signalos/dialog, @signalos/label, @signalos/switch, @signalos/dropdown-menu, @signalos/text-field
- **npm dependencies:** lucide-react@^0.468.0, @xyflow/react@^12.0.0, yaml
- **Files installed:** `src/components/blocks/functions-01/Functions01.tsx`, `src/components/blocks/functions-01/Functions01.types.ts`, `src/components/blocks/functions-01/Functions01.constants.ts`, `src/components/blocks/functions-01/Functions01.utils.ts`, `src/components/blocks/functions-01/components/CodeBlock.tsx`, `src/components/blocks/functions-01/components/FunctionsProgressDock.tsx`, `src/components/blocks/functions-01/components/FunctionsReviewHeader.tsx`, `src/components/blocks/functions-01/components/FunctionsReviewSkeleton.tsx`, `src/components/blocks/functions-01/components/FunctionsStageSummary.tsx`, `src/components/blocks/functions-01/components/NodeCatalogPanel.tsx`, `src/components/blocks/functions-01/components/NodeInspectorSections.tsx`, `src/components/blocks/functions-01/components/NodeInspectorSheet.tsx`, `src/components/blocks/functions-01/components/RejectStageDialog.tsx`, `src/components/blocks/functions-01/components/RunResultPanel.tsx`, `src/components/blocks/functions-01/components/RunStatusBadge.tsx`, `src/components/blocks/functions-01/components/SampleTable.tsx`, `src/components/blocks/functions-01/components/SignalsPanel.tsx`, `src/components/blocks/functions-01/components/StageReviewBar.tsx`, `src/components/blocks/functions-01/components/TuneConfigEditor.tsx`, `src/components/blocks/functions-01/components/TuneParameterForm.tsx`, `src/components/blocks/functions-01/components/TuneSuggestionsRail.tsx`, `src/components/blocks/functions-01/components/WorkflowAboutTab.tsx`, `src/components/blocks/functions-01/components/WorkflowCanvas.tsx`, `src/components/blocks/functions-01/components/WorkflowDetailPanel.tsx`, `src/components/blocks/functions-01/components/WorkflowEditDialog.tsx`, `src/components/blocks/functions-01/components/WorkflowEvidenceTab.tsx`, `src/components/blocks/functions-01/components/WorkflowSummaryCard.tsx`, `src/components/blocks/functions-01/components/WorkflowWiringTab.tsx`, `src/components/blocks/functions-01/components/WorkflowListPanel.tsx`, `src/components/blocks/functions-01/components/yaml-lint.ts`

## Access

This is a private registry: pulling source requires a `SIGNALOS_REGISTRY_TOKEN`
(GitHub fine-grained PAT with read access to the signal-widgets repo) and an
`@signalos` entry in components.json `"registries"`. Previews and this document are public.

## Usage

```tsx
// after: npx shadcn@latest add @signalos/functions-01
// mount the pulled page in a route, e.g. src/app/semantics-details/page.tsx
import Functions01 from "@/components/blocks/functions-01/Functions01"

export default function Page() {
  return <Functions01 />
}
```

## Props

### `WorkflowCoordinate`

| Prop | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `pattern` | `string \| null \| undefined` | no | - |  |
| `frame` | `string \| null \| undefined` | no | - |  |
| `time_axis` | `string \| null \| undefined` | no | - |  |
| `time` | `string \| null \| undefined` | no | - |  |
| `shorthand` | `string \| null \| undefined` | no | - |  |

### `FunctionsView`

```ts
export type FunctionsView = "detectors" | "signals"
```

### `CoordinateCount`

| Prop | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `count` | `number \| undefined` | no | - |  |
| `pattern` | `string \| null \| undefined` | no | - |  |
| `frame` | `string \| null \| undefined` | no | - |  |
| `time_axis` | `string \| null \| undefined` | no | - |  |
| `time` | `string \| null \| undefined` | no | - |  |
| `shorthand` | `string \| null \| undefined` | no | - |  |

### `WorkflowStep`

| Prop | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `id` | `string` | yes | - |  |
| `function` | `string` | yes | - |  |
| `params` | `Record<string, unknown> \| undefined` | no | - |  |

### `EditableParams`

```ts
export type EditableParams = Record<string, Record<string, unknown>>
```

### `SignalWorkflow`

| Prop | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `id` | `string` | yes | - |  |
| `workflow_key` | `string \| null \| undefined` | no | - |  |
| `title` | `string \| null \| undefined` | no | - |  |
| `description` | `string \| null \| undefined` | no | - |  |
| `outcome` | `string \| null \| undefined` | no | - |  |
| `coordinate` | `WorkflowCoordinate \| null \| undefined` | no | - |  |
| `source_ids` | `string[] \| undefined` | no | - |  |
| `node_refs` | `(string \| { node_id?: string \| undefined; })[] \| undefined` | no | - |  |
| `gate_status` | `string \| null \| undefined` | no | - |  |
| `status` | `string \| null \| undefined` | no | - |  |
| `confidence` | `number \| null \| undefined` | no | - |  |
| `frozen_ref` | `string \| null \| undefined` | no | - |  |
| `steps` | `WorkflowStep[] \| undefined` | no | - |  |
| `editable_params` | `EditableParams \| undefined` | no | - |  |

### `WorkflowListResponse`

| Prop | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `pipeline_id` | `string` | yes | - |  |
| `count` | `number` | yes | - |  |
| `workflows` | `SignalWorkflow[]` | yes | - |  |

### `CanvasNodeKind`

```ts
export type CanvasNodeKind =
  "source" | "catalog" | "node" | "workflow" | "step" | "signal"
```

### `CanvasEdgeKind`

```ts
export type CanvasEdgeKind = "feeds" | "uses" | "flows" | "emits" | "contains"
```

### `NodeActionKind`

```ts
export type NodeActionKind =
  "run" | "form" | "code" | "table" | "expand" | "detail"
```

### `FormControl`

| Prop | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `name` | `string` | yes | - |  |
| `label` | `string \| undefined` | no | - |  |
| `type` | `string \| undefined` | no | - |  |
| `step_id` | `string \| undefined` | no | - |  |
| `value` | `unknown` | no | - |  |
| `default` | `unknown` | no | - |  |
| `enum` | `unknown[] \| undefined` | no | - |  |
| `minimum` | `number \| null \| undefined` | no | - |  |
| `maximum` | `number \| null \| undefined` | no | - |  |
| `help` | `string \| undefined` | no | - |  |

### `NodeActionForm`

| Prop | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `controls` | `FormControl[] \| undefined` | no | - |  |
| `submit_endpoint` | `string \| undefined` | no | - |  |
| `method` | `string \| undefined` | no | - |  |

### `NodeAction`

| Prop | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `id` | `string` | yes | - |  |
| `label` | `string \| undefined` | no | - |  |
| `method` | `string \| undefined` | no | - |  |
| `endpoint` | `string \| undefined` | no | - |  |
| `kind` | `string \| undefined` | no | - |  |
| `result` | `string \| undefined` | no | - |  |
| `body` | `Record<string, unknown> \| undefined` | no | - |  |
| `form` | `NodeActionForm \| undefined` | no | - |  |
| `params` | `Record<string, unknown> \| undefined` | no | - |  |

### `StepLastRun`

| Prop | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `status` | `string \| undefined` | no | - |  |
| `rows` | `number \| null \| undefined` | no | - |  |
| `error` | `string \| null \| undefined` | no | - |  |
| `latency_ms` | `number \| null \| undefined` | no | - |  |

### `CanvasNodeData`

| Prop | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `connector_id` | `string \| undefined` | no | - |  |
| `total_nodes` | `number \| undefined` | no | - |  |
| `covered_shorthands` | `string[] \| undefined` | no | - |  |
| `gap_shorthands` | `string[] \| undefined` | no | - |  |
| `coords` | `CoordinateCount[] \| undefined` | no | - |  |
| `workflow_id` | `string \| undefined` | no | - |  |
| `workflow_key` | `string \| undefined` | no | - |  |
| `title` | `string \| undefined` | no | - |  |
| `description` | `string \| undefined` | no | - |  |
| `outcome` | `string \| undefined` | no | - |  |
| `coordinate` | `WorkflowCoordinate \| null \| undefined` | no | - |  |
| `source_ids` | `string[] \| undefined` | no | - |  |
| `cross_source` | `boolean \| undefined` | no | - |  |
| `status` | `string \| undefined` | no | - |  |
| `gate_status` | `string \| undefined` | no | - |  |
| `confidence` | `number \| null \| undefined` | no | - |  |
| `frozen_ref` | `string \| undefined` | no | - |  |
| `node_refs` | `string[] \| undefined` | no | - |  |
| `steps` | `WorkflowStep[] \| undefined` | no | - |  |
| `step_id` | `string \| undefined` | no | - |  |
| `function` | `string \| undefined` | no | - |  |
| `role` | `string \| undefined` | no | - |  |
| `source` | `string \| null \| undefined` | no | - |  |
| `optional` | `boolean \| undefined` | no | - |  |
| `params` | `Record<string, unknown> \| undefined` | no | - |  |
| `inputs` | `Record<string, string> \| undefined` | no | - |  |
| `explains` | `string \| undefined` | no | - |  |
| `last_run` | `StepLastRun \| null \| undefined` | no | - |  |
| `impl_kind` | `string \| undefined` | no | - |  |
| `sql` | `string \| undefined` | no | - |  |
| `dialect` | `string \| undefined` | no | - |  |
| `resource` | `string \| undefined` | no | - |  |
| `action` | `string \| undefined` | no | - |  |
| `input_template` | `Record<string, unknown> \| undefined` | no | - |  |
| `runtime` | `string \| undefined` | no | - |  |
| `body` | `string \| null \| undefined` | no | - |  |
| `capability` | `string \| undefined` | no | - |  |
| `native_ref` | `string \| undefined` | no | - |  |
| `model` | `string \| undefined` | no | - |  |
| `prompt` | `string \| undefined` | no | - |  |
| `fired` | `boolean \| undefined` | no | - |  |
| `note` | `string \| undefined` | no | - |  |
| `kind` | `string \| undefined` | no | - |  |
| `severity` | `string \| undefined` | no | - |  |
| `preview` | `unknown` | no | - |  |
| `row_count` | `number \| undefined` | no | - |  |

### `CanvasNode`

| Prop | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `id` | `string` | yes | - |  |
| `kind` | `string` | yes | - |  |
| `label` | `string \| undefined` | no | - |  |
| `lane` | `number \| undefined` | no | - |  |
| `x` | `number \| undefined` | no | - |  |
| `y` | `number \| undefined` | no | - |  |
| `parent` | `string \| null \| undefined` | no | - |  |
| `collapsed` | `boolean \| null \| undefined` | no | - |  |
| `badge` | `string \| undefined` | no | - |  |
| `data` | `CanvasNodeData \| undefined` | no | - |  |
| `actions` | `NodeAction[] \| undefined` | no | - |  |

### `CanvasEdge`

| Prop | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `id` | `string` | yes | - |  |
| `source` | `string` | yes | - |  |
| `target` | `string` | yes | - |  |
| `kind` | `string \| undefined` | no | - |  |
| `label` | `string \| undefined` | no | - |  |

### `CanvasLane`

| Prop | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `index` | `number` | yes | - |  |
| `key` | `string` | yes | - |  |
| `label` | `string` | yes | - |  |

### `GraphSpec`

| Prop | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `lanes` | `CanvasLane[] \| undefined` | no | - |  |
| `nodes` | `CanvasNode[] \| undefined` | no | - |  |
| `edges` | `CanvasEdge[] \| undefined` | no | - |  |
| `counts` | `Record<string, number> \| undefined` | no | - |  |
| `meta` | `Record<string, unknown> \| undefined` | no | - |  |

### `CatalogNodeParamSpec`

| Prop | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `type` | `string \| undefined` | no | - |  |
| `default` | `unknown` | no | - |  |
| `enum` | `unknown[] \| null \| undefined` | no | - |  |
| `example` | `unknown` | no | - |  |
| `required` | `boolean \| undefined` | no | - |  |
| `description` | `string \| undefined` | no | - |  |

### `CatalogNodeGrounding`

| Prop | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `type` | `string \| undefined` | no | - |  |
| `label` | `string \| undefined` | no | - |  |
| `source_id` | `string \| undefined` | no | - |  |

### `CatalogNodeImpl`

| Prop | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `kind` | `string \| undefined` | no | - |  |
| `dialect` | `string \| undefined` | no | - |  |
| `template` | `string \| undefined` | no | - |  |
| `required_connector_caps` | `string[] \| undefined` | no | - |  |

### `CatalogNode`

| Prop | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `id` | `string` | yes | - |  |
| `title` | `string \| undefined` | no | - |  |
| `description` | `string \| undefined` | no | - |  |
| `role` | `string \| undefined` | no | - |  |
| `tier` | `string \| undefined` | no | - |  |
| `archetype` | `string \| undefined` | no | - |  |
| `priority` | `string \| undefined` | no | - |  |
| `scope` | `string \| undefined` | no | - |  |
| `base_ref` | `string \| undefined` | no | - |  |
| `version` | `string \| undefined` | no | - |  |
| `emits` | `WorkflowCoordinate[] \| undefined` | no | - |  |
| `grounding` | `CatalogNodeGrounding[] \| undefined` | no | - |  |
| `params` | `Record<string, CatalogNodeParamSpec> \| undefined` | no | - |  |
| `impl` | `CatalogNodeImpl \| undefined` | no | - |  |

### `NodesByConnector`

```ts
export type NodesByConnector = Record<
  string,
  { nodes: CatalogNode[]; count: number }
>
```

### `WorkflowRunStatus`

```ts
export type WorkflowRunStatus =
  | "ok"
  | "signal"
  | "no_signal"
  | "error"
  | "gate_failed"
  | "uncompilable"
  | string
```

### `PersistedStepOutcome`

| Prop | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `step_id` | `string \| undefined` | no | - |  |
| `function` | `string \| undefined` | no | - |  |
| `kind` | `string \| undefined` | no | - |  |
| `row_count` | `number \| null \| undefined` | no | - |  |
| `latency_ms` | `number \| null \| undefined` | no | - |  |
| `error` | `string \| null \| undefined` | no | - |  |

### `WorkflowRunRecord`

| Prop | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `id` | `string \| undefined` | no | - |  |
| `pipeline_id` | `string \| undefined` | no | - |  |
| `workflow_id` | `string \| null \| undefined` | no | - |  |
| `workflow_ref` | `string \| undefined` | no | - |  |
| `run_id` | `string \| undefined` | no | - |  |
| `status` | `string \| undefined` | no | - |  |
| `signal_count` | `number \| undefined` | no | - |  |
| `step_outcomes` | `PersistedStepOutcome[] \| undefined` | no | - |  |
| `latency_ms` | `number \| null \| undefined` | no | - |  |
| `cost_usd` | `number \| undefined` | no | - |  |
| `error` | `string \| undefined` | no | - |  |
| `triggered_by` | `string \| undefined` | no | - |  |
| `created_at` | `string \| undefined` | no | - |  |

### `WorkflowRunListResponse`

| Prop | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `pipeline_id` | `string` | yes | - |  |
| `count` | `number` | yes | - |  |
| `runs` | `WorkflowRunRecord[]` | yes | - |  |

### `RunStepOutcome`

| Prop | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `step` | `string \| undefined` | no | - |  |
| `fn` | `string \| undefined` | no | - |  |
| `kind` | `string \| undefined` | no | - |  |
| `rows` | `number \| null \| undefined` | no | - |  |
| `sample` | `Record<string, unknown>[] \| null \| undefined` | no | - |  |
| `error` | `string \| null \| undefined` | no | - |  |

### `EmittedSignalView`

| Prop | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `kind` | `string \| undefined` | no | - |  |
| `summary` | `string \| undefined` | no | - |  |
| `coordinate` | `WorkflowCoordinate \| null \| undefined` | no | - |  |
| `data` | `unknown` | no | - |  |

### `WorkflowEditReport`

| Prop | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `applied` | `string[] \| undefined` | no | - |  |
| `unsupported` | `string[] \| undefined` | no | - |  |
| `unknown` | `string[] \| undefined` | no | - |  |

### `WorkflowRunResult`

| Prop | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `status` | `string` | yes | - |  |
| `workflow_id` | `string \| null \| undefined` | no | - |  |
| `frozen_ref` | `string \| undefined` | no | - |  |
| `signals_emitted` | `number \| undefined` | no | - |  |
| `latency_ms` | `number \| null \| undefined` | no | - |  |
| `healed` | `boolean \| undefined` | no | - |  |
| `heal_notes` | `string[] \| undefined` | no | - |  |
| `step_outcomes` | `RunStepOutcome[] \| undefined` | no | - |  |
| `signals` | `EmittedSignalView[] \| undefined` | no | - |  |
| `edit` | `WorkflowEditReport \| undefined` | no | - |  |
| `errors` | `string[] \| undefined` | no | - | Populated when `status` is `gate_failed`. |
| `error` | `string \| undefined` | no | - |  |
| `node_id` | `string \| undefined` | no | - | Present on a single-node run only. |
| `connector_id` | `string \| undefined` | no | - |  |
| `title` | `string \| undefined` | no | - |  |
| `rerun` | `boolean \| undefined` | no | - | Present when an edit was persisted without a rerun. |

### `SemanticSignalRecord`

| Prop | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `id` | `string \| undefined` | no | - |  |
| `pipeline_id` | `string \| undefined` | no | - |  |
| `workflow_id` | `string \| null \| undefined` | no | - |  |
| `workflow_ref` | `string \| undefined` | no | - |  |
| `run_id` | `string \| undefined` | no | - |  |
| `signal_key` | `string \| undefined` | no | - |  |
| `name` | `string \| undefined` | no | - |  |
| `summary` | `string \| undefined` | no | - |  |
| `title` | `string \| undefined` | no | - |  |
| `source_id` | `string \| undefined` | no | - |  |
| `connector_id` | `string \| undefined` | no | - |  |
| `pattern` | `string \| undefined` | no | - |  |
| `frame` | `string \| undefined` | no | - |  |
| `time_axis` | `string \| undefined` | no | - |  |
| `shorthand` | `string \| undefined` | no | - |  |
| `coordinate` | `WorkflowCoordinate \| null \| undefined` | no | - |  |
| `severity` | `string \| undefined` | no | - |  |
| `confidence` | `number \| undefined` | no | - |  |
| `value` | `{ kind?: string \| undefined; data?: unknown; } \| null \| undefined` | no | - |  |
| `evidence` | `unknown[] \| undefined` | no | - |  |
| `dimension_key` | `Record<string, unknown> \| undefined` | no | - |  |
| `cost_usd` | `number \| undefined` | no | - |  |
| `latency_ms` | `number \| undefined` | no | - |  |
| `status` | `string \| undefined` | no | - |  |
| `created_at` | `string \| undefined` | no | - |  |

### `SemanticSignalListResponse`

| Prop | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `pipeline_id` | `string` | yes | - |  |
| `count` | `number` | yes | - |  |
| `signals` | `SemanticSignalRecord[]` | yes | - |  |

### `WorkflowRevision`

| Prop | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `id` | `string \| undefined` | no | - |  |
| `workflow_id` | `string \| undefined` | no | - |  |
| `pipeline_id` | `string \| undefined` | no | - |  |
| `revision_num` | `number \| undefined` | no | - |  |
| `editor` | `string \| undefined` | no | - |  |
| `summary` | `string \| undefined` | no | - |  |
| `frozen_ref_before` | `string \| undefined` | no | - |  |
| `frozen_ref_after` | `string \| undefined` | no | - |  |
| `created_at` | `string \| undefined` | no | - |  |

### `WorkflowRevisionListResponse`

| Prop | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `pipeline_id` | `string` | yes | - |  |
| `workflow_id` | `string` | yes | - |  |
| `count` | `number` | yes | - |  |
| `revisions` | `WorkflowRevision[]` | yes | - |  |

### `FunctionsCost`

| Prop | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `est_cost_usd` | `number \| undefined` | no | - |  |
| `input_tokens` | `number \| undefined` | no | - |  |
| `output_tokens` | `number \| undefined` | no | - |  |
| `provider_calls` | `number \| undefined` | no | - |  |
| `cache_read_tokens` | `number \| undefined` | no | - |  |

### `FunctionsProgress`

| Prop | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `phase` | `string \| undefined` | no | - |  |
| `phases` | `string[] \| undefined` | no | - |  |
| `phase_index` | `number \| undefined` | no | - |  |
| `phase_total` | `number \| undefined` | no | - |  |
| `complete` | `boolean \| undefined` | no | - |  |
| `counters` | `Record<string, number> \| undefined` | no | - |  |
| `connectors_done` | `number \| undefined` | no | - |  |
| `connectors_total` | `number \| undefined` | no | - |  |
| `current_connector` | `string \| undefined` | no | - |  |

### `FunctionsPlanNode`

| Prop | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `id` | `string` | yes | - |  |
| `kind` | `string` | yes | - |  |
| `label` | `string \| undefined` | no | - |  |
| `route` | `string \| undefined` | no | - |  |
| `authored` | `boolean \| undefined` | no | - |  |
| `node_ref` | `string \| undefined` | no | - |  |
| `rationale` | `string \| undefined` | no | - |  |
| `coordinate` | `WorkflowCoordinate \| undefined` | no | - |  |
| `workflow_hint` | `string \| undefined` | no | - |  |
| `cross_source` | `boolean \| undefined` | no | - |  |

### `FunctionsPlanEdge`

| Prop | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `from` | `string` | yes | - |  |
| `to` | `string` | yes | - |  |
| `kind` | `string \| undefined` | no | - |  |

### `FunctionsPlanGraph`

| Prop | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `nodes` | `FunctionsPlanNode[] \| undefined` | no | - |  |
| `edges` | `FunctionsPlanEdge[] \| undefined` | no | - |  |
| `counts` | `Record<string, number> \| undefined` | no | - |  |

### `FunctionsFdeInput`

| Prop | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `mode` | `string \| undefined` | no | - |  |
| `stage` | `string \| undefined` | no | - |  |
| `executed` | `boolean \| undefined` | no | - |  |
| `cost` | `FunctionsCost \| undefined` | no | - |  |
| `_progress` | `FunctionsProgress \| undefined` | no | - | Live progress is mirrored here because Blackboard has no progress column. |
| `gate_failed` | `number \| undefined` | no | - |  |
| `nodes_emitted` | `number \| undefined` | no | - |  |
| `nodes_authored` | `number \| undefined` | no | - |  |
| `connectors_done` | `number \| undefined` | no | - |  |
| `connectors_total` | `number \| undefined` | no | - |  |
| `intents_derived` | `number \| undefined` | no | - |  |
| `signals_emitted` | `number \| undefined` | no | - |  |
| `workflows_total` | `number \| undefined` | no | - |  |
| `workflows_persisted` | `number \| undefined` | no | - |  |
| `workflows_self_healed` | `number \| undefined` | no | - |  |
| `graph` | `FunctionsPlanGraph \| undefined` | no | - |  |

### `WorkflowEditPayload`

| Prop | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `param_edits` | `Record<string, unknown> \| undefined` | no | - |  |
| `config_yaml` | `string \| undefined` | no | - |  |
| `ai_note` | `string \| undefined` | no | - |  |
| `rerun` | `boolean \| undefined` | no | - |  |
| `edited_by` | `string \| undefined` | no | - |  |

### `RunCatalogNodePayload`

| Prop | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `connector_id` | `string` | yes | - |  |
| `max_rows` | `number \| undefined` | no | - |  |

### `CanvasPosition`

| Prop | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `x` | `number` | yes | - |  |
| `y` | `number` | yes | - |  |

### `GraphPositionsPayload`

| Prop | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `positions` | `Record<string, CanvasPosition> \| undefined` | no | - |  |
| `collapsed` | `Record<string, boolean> \| undefined` | no | - |  |

### `WorkflowTemplateFormat`

```ts
export type WorkflowTemplateFormat = "yaml" | "edit" | "json"
```

### `SubmitFunctionsReviewPayload`

| Prop | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `action` | `"confirm" \| "retry" \| "reject"` | yes | - |  |
| `feedback` | `string \| undefined` | no | - |  |

## Changelog

## 0.1.10

- Replace the copied placeholder description with one that actually describes this block; the registry description is what the agent skill shows as "pick it when".

# functions-01

## 0.1.9
- Global css update

## 0.1.8

- Replace raw scale token classes with semantic tokens (text-text-error, bg-bg-success, border-border-warning, etc.) to respect client theme overrides.

## 0.1.7

- `Functions01.utils.ts`: remove stale JSDoc module comment block.

## 0.1.6

- Add `WorkflowAboutTab`, `WorkflowCanvas`, `WorkflowDetailPanel`, `WorkflowEditDialog`, `WorkflowEvidenceTab`, `WorkflowListPanel`, `WorkflowSummaryCard`, and `WorkflowWiringTab` subcomponents; register all in `registry-item.json`.
- Add `yaml-lint.ts` utility for YAML validation in `TuneConfigEditor`.

## 0.1.4

Move all state, handlers, and logic from Functions01 into preview; Functions01 is now a pure presentational pass-through.

## 0.1.1

Initial release of the functions-01 block with workflow canvas, review queue, per-stage review views, node inspector, tune config editor, and signals panel.
