Files
app/frontend/src/client/schemas.gen.ts
T
stroblmeandClaude Opus 5 ffae24c16b Panels: per-device dashboard sets, paired by code
A panel is one screen and the ordered set of whole dashboards it shows, so a
hallway tablet and a workshop tablet carry different sets without either
dashboard knowing about the other. More than one and the device draws a rail
to switch between them — the same rail the editor puts on screen, because the
wall has it and it takes room off the canvas.

A screen has no keyboard, so it pairs rather than logs in: it shows a
six-character code, somebody approves it against a panel from the dashboards
overview, and the credential that mints reaches that panel's published
dashboards and the message endpoints its widgets speak, and nothing else.
Deleting the panel revokes it.

Closes the per-device view and the kiosk credential; supersedes the
multi-page/multi-section UI, since a page is now a dashboard of its own.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AHpLJHozysQXjsxAyU1WHj
2026-08-20 16:23:36 +02:00

3367 lines
80 KiB
TypeScript

// This file is auto-generated by @hey-api/openapi-ts
export const AlertsConfigSchema = {
properties: {
enabled: {
type: 'boolean',
title: 'Enabled',
default: true
},
channels: {
items: {
'$ref': '#/components/schemas/Channel'
},
type: 'array',
title: 'Channels'
},
rules: {
items: {
'$ref': '#/components/schemas/Rule'
},
type: 'array',
title: 'Rules'
}
},
type: 'object',
title: 'AlertsConfig',
description: 'The whole alerting setup, as stored and as the API sees it.'
} as const;
export const ApplyRequestSchema = {
properties: {
requirements: {
type: 'string',
title: 'Requirements',
default: ''
}
},
type: 'object',
title: 'ApplyRequest',
description: 'A pip manifest, one requirement per line.'
} as const;
export const ApplyResultSchema = {
properties: {
ok: {
type: 'boolean',
title: 'Ok'
},
output: {
type: 'string',
title: 'Output',
default: ''
}
},
type: 'object',
required: ['ok'],
title: 'ApplyResult'
} as const;
export const ArtifactRefSchema = {
properties: {
digest: {
type: 'string',
title: 'Digest'
},
size: {
type: 'integer',
title: 'Size'
},
media_type: {
type: 'string',
title: 'Media Type'
},
name: {
type: 'string',
title: 'Name',
default: ''
}
},
type: 'object',
required: ['digest', 'size', 'media_type'],
title: 'ArtifactRef'
} as const;
export const ArtifactRowSchema = {
properties: {
name: {
type: 'string',
title: 'Name'
},
node: {
type: 'string',
title: 'Node'
},
digest: {
type: 'string',
title: 'Digest'
},
size: {
type: 'integer',
title: 'Size'
},
media_type: {
type: 'string',
title: 'Media Type'
}
},
type: 'object',
required: ['name', 'node', 'digest', 'size', 'media_type'],
title: 'ArtifactRow'
} as const;
export const Body_login_login_access_tokenSchema = {
properties: {
grant_type: {
anyOf: [
{
type: 'string',
pattern: '^password$'
},
{
type: 'null'
}
],
title: 'Grant Type'
},
username: {
type: 'string',
title: 'Username'
},
password: {
type: 'string',
format: 'password',
title: 'Password'
},
scope: {
type: 'string',
title: 'Scope',
default: ''
},
client_id: {
anyOf: [
{
type: 'string'
},
{
type: 'null'
}
],
title: 'Client Id'
},
client_secret: {
anyOf: [
{
type: 'string'
},
{
type: 'null'
}
],
format: 'password',
title: 'Client Secret'
}
},
type: 'object',
required: ['username', 'password'],
title: 'Body_login-login_access_token'
} as const;
export const Body_oauth_tokenSchema = {
properties: {
grant_type: {
type: 'string',
title: 'Grant Type'
},
code: {
anyOf: [
{
type: 'string'
},
{
type: 'null'
}
],
title: 'Code'
},
redirect_uri: {
anyOf: [
{
type: 'string'
},
{
type: 'null'
}
],
title: 'Redirect Uri'
},
client_id: {
anyOf: [
{
type: 'string'
},
{
type: 'null'
}
],
title: 'Client Id'
},
code_verifier: {
anyOf: [
{
type: 'string'
},
{
type: 'null'
}
],
title: 'Code Verifier'
},
refresh_token: {
anyOf: [
{
type: 'string'
},
{
type: 'null'
}
],
title: 'Refresh Token'
},
resource: {
anyOf: [
{
type: 'string'
},
{
type: 'null'
}
],
title: 'Resource'
}
},
type: 'object',
required: ['grant_type'],
title: 'Body_oauth-token'
} as const;
export const BrainEdgeSchema = {
properties: {
source: {
type: 'string',
title: 'Source'
},
target: {
type: 'string',
title: 'Target'
},
messages: {
items: {
type: 'string'
},
type: 'array',
title: 'Messages'
}
},
type: 'object',
required: ['source', 'target'],
title: 'BrainEdge',
description: 'Messages carrying values from one neuron to another.'
} as const;
export const BrainGraphSchema = {
properties: {
nodes: {
items: {
'$ref': '#/components/schemas/BrainNode'
},
type: 'array',
title: 'Nodes'
},
edges: {
items: {
'$ref': '#/components/schemas/BrainEdge'
},
type: 'array',
title: 'Edges'
}
},
type: 'object',
title: 'BrainGraph',
description: 'Every published flow at once, merged on what its nodes talk to.'
} as const;
export const BrainNodeSchema = {
properties: {
id: {
type: 'string',
title: 'Id'
},
label: {
type: 'string',
title: 'Label'
},
kind: {
type: 'string',
title: 'Kind'
},
members: {
items: {
type: 'string'
},
type: 'array',
title: 'Members'
},
flows: {
items: {
type: 'string'
},
type: 'array',
title: 'Flows'
},
issue: {
anyOf: [
{
type: 'string'
},
{
type: 'null'
}
],
title: 'Issue',
description: 'Why this neuron cannot run, if validation found something. A failure the engine hits while running arrives over the socket instead; this is the part that is already true before anything fires, and so has to travel with the graph.'
}
},
type: 'object',
required: ['id', 'label', 'kind'],
title: 'BrainNode',
description: `One neuron: a thing the engine talks to, or a node that only computes.
Nodes of the same type pointing at the same outside thing — one broker
topic, one URL, one bucket — are a single entry here, whichever flows they
sit in. \`\`members\`\` are the \`\`flow.node_id\`\` names behind it, which is also
what the live events are keyed by.`
} as const;
export const ChannelSchema = {
properties: {
name: {
type: 'string',
title: 'Name'
},
kind: {
type: 'string',
enum: ['ntfy', 'smtp', 'webhook', 'dashboard'],
title: 'Kind'
},
enabled: {
type: 'boolean',
title: 'Enabled',
default: true
},
config: {
additionalProperties: true,
type: 'object',
title: 'Config'
}
},
type: 'object',
required: ['name', 'kind'],
title: 'Channel',
description: 'Somewhere to send an alert.'
} as const;
export const DTypeSchema = {
type: 'string',
enum: ['float', 'int', 'str', 'bool', 'json', 'series', 'record', 'list', 'artifact'],
title: 'DType',
description: `Serializable payload types.
The scalars carry what a single reading can say. The three structured ones
are declared shapes rather than "some JSON": a widget or a downstream node
knows what it is getting before anything runs, which is what lets the
dashboard picker offer a message and refuse a wrong binding.
Binary payloads — tensors, checkpoints, images — travel as \`\`artifact\`\`:
the bytes go to the artifact store and the message carries a reference to
them. That keeps everything on the wire JSON, which is what the state
backend, the queue and the worker protocol all rely on, and it means a
thirty-megabyte checkpoint never sits in Redis. Inline codecs would only be
needed for payloads too small to be worth a round trip, and nothing asks
for that yet.`
} as const;
export const DashboardDef_InputSchema = {
properties: {
name: {
type: 'string',
title: 'Name'
},
title: {
type: 'string',
title: 'Title',
default: ''
},
columns: {
type: 'integer',
maximum: 48,
minimum: 1,
title: 'Columns',
default: 12
},
canvas_width: {
type: 'integer',
maximum: 7680,
minimum: 0,
title: 'Canvas Width',
default: 1920
},
canvas_height: {
type: 'integer',
maximum: 4320,
minimum: 0,
title: 'Canvas Height',
default: 1080
},
pages: {
items: {
'$ref': '#/components/schemas/PageDef-Input'
},
type: 'array',
title: 'Pages'
},
version: {
type: 'integer',
title: 'Version',
default: 1
},
has_draft: {
type: 'boolean',
title: 'Has Draft',
default: false
}
},
type: 'object',
required: ['name'],
title: 'DashboardDef',
description: 'A dashboard as stored, and as the API hands it over.'
} as const;
export const DashboardDef_OutputSchema = {
properties: {
name: {
type: 'string',
title: 'Name'
},
title: {
type: 'string',
title: 'Title',
default: ''
},
columns: {
type: 'integer',
maximum: 48,
minimum: 1,
title: 'Columns',
default: 12
},
canvas_width: {
type: 'integer',
maximum: 7680,
minimum: 0,
title: 'Canvas Width',
default: 1920
},
canvas_height: {
type: 'integer',
maximum: 4320,
minimum: 0,
title: 'Canvas Height',
default: 1080
},
pages: {
items: {
'$ref': '#/components/schemas/PageDef-Output'
},
type: 'array',
title: 'Pages'
},
version: {
type: 'integer',
title: 'Version',
default: 1
},
has_draft: {
type: 'boolean',
title: 'Has Draft',
default: false
}
},
type: 'object',
required: ['name'],
title: 'DashboardDef',
description: 'A dashboard as stored, and as the API hands it over.'
} as const;
export const DashboardSummarySchema = {
properties: {
name: {
type: 'string',
title: 'Name'
},
title: {
type: 'string',
title: 'Title',
default: ''
},
page_count: {
type: 'integer',
title: 'Page Count',
default: 0
},
widget_count: {
type: 'integer',
title: 'Widget Count',
default: 0
},
has_draft: {
type: 'boolean',
title: 'Has Draft',
default: false
}
},
type: 'object',
required: ['name'],
title: 'DashboardSummary',
description: 'A dashboard in a list, without its contents.'
} as const;
export const DashboardsPublicSchema = {
properties: {
data: {
items: {
'$ref': '#/components/schemas/DashboardSummary'
},
type: 'array',
title: 'Data'
},
count: {
type: 'integer',
title: 'Count'
}
},
type: 'object',
required: ['data', 'count'],
title: 'DashboardsPublic'
} as const;
export const DeadLetterSchema = {
properties: {
id: {
type: 'string',
title: 'Id'
},
ts: {
type: 'number',
title: 'Ts'
},
flow: {
type: 'string',
title: 'Flow'
},
node: {
type: 'string',
title: 'Node'
},
cause: {
type: 'string',
title: 'Cause'
},
reason: {
type: 'string',
title: 'Reason'
}
},
type: 'object',
required: ['id', 'ts', 'flow', 'node', 'cause', 'reason'],
title: 'DeadLetter'
} as const;
export const EndpointSchema = {
properties: {
kind: {
type: 'string',
title: 'Kind'
},
id: {
type: 'string',
title: 'Id'
},
label: {
type: 'string',
title: 'Label'
},
detail: {
type: 'string',
title: 'Detail',
default: ''
},
provides: {
items: {
type: 'string'
},
type: 'array',
title: 'Provides',
default: []
},
requires: {
items: {
type: 'string'
},
type: 'array',
title: 'Requires',
default: []
}
},
type: 'object',
required: ['kind', 'id', 'label'],
title: 'Endpoint',
description: `Something wired into this flow that is not a node in it.
A dashboard control setting one of its messages, a tile showing one, or a
node in another flow on the far side of a dotted name. The canvas draws
these so a value never appears to come from nowhere — or worse, appears to
come from whichever node happens to be drawn as a producer.`
} as const;
export const EnrollBodySchema = {
properties: {
portal_url: {
type: 'string',
maxLength: 255,
minLength: 1,
title: 'Portal Url'
},
claim_code: {
type: 'string',
maxLength: 32,
minLength: 1,
title: 'Claim Code'
}
},
type: 'object',
required: ['portal_url', 'claim_code'],
title: 'EnrollBody'
} as const;
export const EventRowSchema = {
properties: {
id: {
type: 'integer',
title: 'Id'
},
ts: {
type: 'string',
format: 'date-time',
title: 'Ts'
},
type: {
type: 'string',
title: 'Type'
},
flow: {
type: 'string',
title: 'Flow'
},
node: {
type: 'string',
title: 'Node'
},
detail: {
type: 'string',
title: 'Detail'
},
actor: {
type: 'string',
title: 'Actor'
}
},
type: 'object',
required: ['id', 'ts', 'type', 'flow', 'node', 'detail', 'actor'],
title: 'EventRow'
} as const;
export const FlowDef_InputSchema = {
properties: {
name: {
type: 'string',
title: 'Name'
},
title: {
type: 'string',
title: 'Title',
default: ''
},
nodes: {
items: {
'$ref': '#/components/schemas/NodeDef-Input'
},
type: 'array',
title: 'Nodes'
},
inputs: {
items: {
'$ref': '#/components/schemas/FlowInput-Input'
},
type: 'array',
title: 'Inputs'
},
version: {
type: 'integer',
title: 'Version',
default: 1
},
mode: {
type: 'string',
enum: ['live', 'batch'],
title: 'Mode',
description: 'A live flow reacts to what arrives: its subscriptions, schedules and webhooks run until it is stopped. A batch flow only runs when a run asks it to, from its inputs to its outputs, and is never activated.',
default: 'live'
},
outputs: {
items: {
type: 'string'
},
type: 'array',
title: 'Outputs',
description: 'Messages a batch run reports as its result, unqualified. Empty means every message the flow ends up holding.'
}
},
type: 'object',
required: ['name'],
title: 'FlowDef',
description: 'One atomic flow.'
} as const;
export const FlowDef_OutputSchema = {
properties: {
name: {
type: 'string',
title: 'Name'
},
title: {
type: 'string',
title: 'Title',
default: ''
},
nodes: {
items: {
'$ref': '#/components/schemas/NodeDef-Output'
},
type: 'array',
title: 'Nodes'
},
inputs: {
items: {
'$ref': '#/components/schemas/FlowInput-Output'
},
type: 'array',
title: 'Inputs'
},
version: {
type: 'integer',
title: 'Version',
default: 1
},
mode: {
type: 'string',
enum: ['live', 'batch'],
title: 'Mode',
description: 'A live flow reacts to what arrives: its subscriptions, schedules and webhooks run until it is stopped. A batch flow only runs when a run asks it to, from its inputs to its outputs, and is never activated.',
default: 'live'
},
outputs: {
items: {
type: 'string'
},
type: 'array',
title: 'Outputs',
description: 'Messages a batch run reports as its result, unqualified. Empty means every message the flow ends up holding.'
}
},
type: 'object',
required: ['name'],
title: 'FlowDef',
description: 'One atomic flow.'
} as const;
export const FlowDetailSchema = {
properties: {
definition: {
'$ref': '#/components/schemas/FlowDef-Output'
},
nodes: {
items: {
'$ref': '#/components/schemas/NodeStatusPublic'
},
type: 'array',
title: 'Nodes',
default: []
},
issues: {
items: {
'$ref': '#/components/schemas/ValidationIssue'
},
type: 'array',
title: 'Issues',
default: []
},
has_draft: {
type: 'boolean',
title: 'Has Draft',
default: false
},
enabled: {
type: 'boolean',
title: 'Enabled',
default: true
},
paused: {
type: 'boolean',
title: 'Paused',
default: false
},
endpoints: {
items: {
'$ref': '#/components/schemas/Endpoint'
},
type: 'array',
title: 'Endpoints',
default: []
}
},
type: 'object',
required: ['definition'],
title: 'FlowDetail',
description: `A flow plus how it is currently doing.
\`\`definition\`\` is the working copy — the unpublished draft when there is
one — because that is what the editor shows. \`\`nodes\`\` reports the
published flow, which is what is actually running.`
} as const;
export const FlowInput_InputSchema = {
properties: {
spec: {
'$ref': '#/components/schemas/MessageSpec'
},
initial: {
anyOf: [
{},
{
type: 'null'
}
],
title: 'Initial'
}
},
type: 'object',
required: ['spec'],
title: 'FlowInput',
description: 'A message the flow starts with rather than computes.'
} as const;
export const FlowInput_OutputSchema = {
properties: {
spec: {
'$ref': '#/components/schemas/MessageSpec'
},
initial: {
anyOf: [
{},
{
type: 'null'
}
],
title: 'Initial'
}
},
type: 'object',
required: ['spec'],
title: 'FlowInput',
description: 'A message the flow starts with rather than computes.'
} as const;
export const FlowRollupSchema = {
properties: {
flow: {
type: 'string',
title: 'Flow'
},
executions: {
type: 'integer',
title: 'Executions'
},
errors: {
type: 'integer',
title: 'Errors'
},
messages: {
type: 'integer',
title: 'Messages'
},
avg_ms: {
type: 'number',
title: 'Avg Ms'
},
avg_lag_ms: {
type: 'number',
title: 'Avg Lag Ms'
},
spark: {
items: {
type: 'integer'
},
type: 'array',
title: 'Spark'
},
last_error_ts: {
anyOf: [
{
type: 'number'
},
{
type: 'null'
}
],
title: 'Last Error Ts'
}
},
type: 'object',
required: ['flow', 'executions', 'errors', 'messages', 'avg_ms', 'avg_lag_ms', 'spark'],
title: 'FlowRollup'
} as const;
export const FlowStatePublicSchema = {
properties: {
values: {
additionalProperties: {
'$ref': '#/components/schemas/app__flow__schemas__MessageValue'
},
type: 'object',
title: 'Values'
},
nodes: {
items: {
'$ref': '#/components/schemas/NodeStatusPublic'
},
type: 'array',
title: 'Nodes'
}
},
type: 'object',
title: 'FlowStatePublic'
} as const;
export const FlowSummarySchema = {
properties: {
name: {
type: 'string',
title: 'Name'
},
title: {
type: 'string',
title: 'Title',
default: ''
},
node_count: {
type: 'integer',
title: 'Node Count',
default: 0
},
error_count: {
type: 'integer',
title: 'Error Count',
default: 0
},
has_draft: {
type: 'boolean',
title: 'Has Draft',
default: false
},
enabled: {
type: 'boolean',
title: 'Enabled',
default: true
},
paused: {
type: 'boolean',
title: 'Paused',
default: false
},
quarantined: {
type: 'boolean',
title: 'Quarantined',
default: false
}
},
type: 'object',
required: ['name'],
title: 'FlowSummary'
} as const;
export const FlowsPublicSchema = {
properties: {
data: {
items: {
'$ref': '#/components/schemas/FlowSummary'
},
type: 'array',
title: 'Data'
},
count: {
type: 'integer',
title: 'Count'
}
},
type: 'object',
required: ['data', 'count'],
title: 'FlowsPublic'
} as const;
export const HTTPValidationErrorSchema = {
properties: {
detail: {
items: {
'$ref': '#/components/schemas/ValidationError'
},
type: 'array',
title: 'Detail'
}
},
type: 'object',
title: 'HTTPValidationError'
} as const;
export const HealthSummarySchema = {
properties: {
status: {
type: 'string',
title: 'Status'
},
problems: {
items: {
type: 'string'
},
type: 'array',
title: 'Problems'
},
flows: {
additionalProperties: {
type: 'integer'
},
type: 'object',
title: 'Flows'
},
nodes: {
additionalProperties: {
type: 'integer'
},
type: 'object',
title: 'Nodes'
},
queue: {
additionalProperties: true,
type: 'object',
title: 'Queue'
},
loop_lag: {
additionalProperties: {
type: 'number'
},
type: 'object',
title: 'Loop Lag'
},
failures_24h: {
type: 'integer',
title: 'Failures 24H'
}
},
type: 'object',
required: ['status', 'problems', 'flows', 'nodes', 'queue', 'loop_lag', 'failures_24h'],
title: 'HealthSummary'
} as const;
export const HistoryPointSchema = {
properties: {
ts: {
type: 'number',
title: 'Ts'
},
value: {
type: 'number',
title: 'Value'
}
},
type: 'object',
required: ['ts', 'value'],
title: 'HistoryPoint',
description: 'One numeric value a message carried, and when.'
} as const;
export const LibraryNodeSchema = {
properties: {
name: {
type: 'string',
title: 'Name'
},
used_by: {
items: {
type: 'string'
},
type: 'array',
title: 'Used By'
}
},
type: 'object',
required: ['name'],
title: 'LibraryNode',
description: 'A node source shared across flows, and who is using it.'
} as const;
export const MessageSchema = {
properties: {
message: {
type: 'string',
title: 'Message'
}
},
type: 'object',
required: ['message'],
title: 'Message'
} as const;
export const MessageHistorySchema = {
properties: {
message: {
type: 'string',
title: 'Message'
},
numeric: {
type: 'boolean',
title: 'Numeric',
default: false
},
points: {
items: {
'$ref': '#/components/schemas/HistoryPoint'
},
type: 'array',
title: 'Points'
}
},
type: 'object',
required: ['message'],
title: 'MessageHistory',
description: `A message's recent numeric values, oldest first.
Only numbers are recorded, so \`\`numeric\`\` tells the panel whether an empty
series means "nothing plottable here" or "nothing has arrived yet".`
} as const;
export const MessageInfoSchema = {
properties: {
name: {
type: 'string',
title: 'Name'
},
flow: {
type: 'string',
title: 'Flow'
},
dtype: {
type: 'string',
title: 'Dtype'
},
providers: {
items: {
type: 'string'
},
type: 'array',
title: 'Providers',
default: []
},
writable: {
type: 'boolean',
title: 'Writable',
default: true
},
numeric: {
type: 'boolean',
title: 'Numeric',
default: false
},
value: {
title: 'Value'
},
ts: {
anyOf: [
{
type: 'number'
},
{
type: 'null'
}
],
title: 'Ts'
}
},
type: 'object',
required: ['name', 'flow', 'dtype'],
title: 'MessageInfo',
description: 'One message, as something to bind a widget to.'
} as const;
export const MessagePointsSchema = {
properties: {
message: {
type: 'string',
title: 'Message'
},
numeric: {
type: 'boolean',
title: 'Numeric'
},
points: {
items: {
additionalProperties: {
type: 'number'
},
type: 'object'
},
type: 'array',
title: 'Points'
}
},
type: 'object',
required: ['message', 'numeric', 'points'],
title: 'MessagePoints'
} as const;
export const MessageSpecSchema = {
properties: {
name: {
type: 'string',
title: 'Name',
default: ''
},
port: {
type: 'string',
title: 'Port',
default: ''
},
dtype: {
'$ref': '#/components/schemas/DType',
default: 'float'
},
item: {
anyOf: [
{
'$ref': '#/components/schemas/DType'
},
{
type: 'null'
}
]
},
interval: {
type: 'number',
minimum: 0,
title: 'Interval',
default: 0
},
trigger: {
type: 'boolean',
title: 'Trigger',
default: true
},
stream: {
type: 'boolean',
title: 'Stream',
default: false
}
},
type: 'object',
title: 'MessageSpec',
description: `A single port of a node, and the message it is bound to.
:param name: The message this port binds to. Bare names are qualified with
the flow name at load time; empty means the port is unbound.
:param port: The identifier the node function sees. Defaults to the last
segment of \`\`name\`\`, so unqualified flows read naturally.
:param dtype: Payload type, validated on every message that passes through.
:param item: The type of each item of a \`\`list\`\` port, ignored otherwise.
Unset means \`\`record\`\`, which is what the agenda and forecast widgets
read; \`\`float\`\` is the numeric list a pipeline passes around. A list of
lists, or of series, is refused — one declared level is the point.
:param interval: Deliver at most every this many seconds; 0 is every time.
On an output it holds back publishing, on an input it holds back waking
the node. The value is never lost — state keeps the latest — only the
delivery is skipped.
:param trigger: Whether arriving values wake the node. An input with this
off is read when the node runs for some other reason, but never causes
a run and never makes the node wait — which is how a node reads a
message it also produces without depending on itself.
:param stream: On an output, that this port produces repeatedly *during* one
execution rather than once at the end — a training loss, a progress
fraction. A node emits on it by being a generator and yielding, or by
calling \`\`fluksio.emit\`\`. What it means downstream is nothing special:
a value published mid-execution is a value like any other. What it
means to a run is that the whole series is kept, which is how a run's
metrics are simply its streaming outputs rather than something logged
beside them.`
} as const;
export const MessagesPublicSchema = {
properties: {
data: {
items: {
'$ref': '#/components/schemas/MessageInfo'
},
type: 'array',
title: 'Data'
},
count: {
type: 'integer',
title: 'Count'
}
},
type: 'object',
required: ['data', 'count'],
title: 'MessagesPublic'
} as const;
export const MetricPointSchema = {
properties: {
step: {
type: 'integer',
title: 'Step'
},
ts: {
type: 'number',
title: 'Ts'
},
value: {
type: 'number',
title: 'Value'
}
},
type: 'object',
required: ['step', 'ts', 'value'],
title: 'MetricPoint'
} as const;
export const MetricSeriesSchema = {
properties: {
label: {
type: 'string',
title: 'Label'
},
points: {
items: {
items: {
type: 'number'
},
type: 'array'
},
type: 'array',
title: 'Points'
}
},
type: 'object',
required: ['label'],
title: 'MetricSeries',
description: 'The shape a chart widget already draws, so comparing runs is a binding.'
} as const;
export const ModulePackageSchema = {
properties: {
name: {
type: 'string',
title: 'Name'
},
version: {
type: 'string',
title: 'Version'
}
},
type: 'object',
required: ['name', 'version'],
title: 'ModulePackage',
description: 'One package installed in the venv node code runs on.'
} as const;
export const ModulesInfoSchema = {
properties: {
python_version: {
type: 'string',
title: 'Python Version',
default: ''
},
venv_path: {
type: 'string',
title: 'Venv Path',
default: ''
},
requirements: {
type: 'string',
title: 'Requirements',
default: ''
},
packages: {
items: {
'$ref': '#/components/schemas/ModulePackage'
},
type: 'array',
title: 'Packages'
},
applied: {
type: 'boolean',
title: 'Applied',
default: false
}
},
type: 'object',
title: 'ModulesInfo',
description: 'The venv node code imports from, and the manifest that describes it.'
} as const;
export const NewPasswordSchema = {
properties: {
token: {
type: 'string',
title: 'Token'
},
new_password: {
type: 'string',
maxLength: 128,
minLength: 8,
title: 'New Password'
}
},
type: 'object',
required: ['token', 'new_password'],
title: 'NewPassword'
} as const;
export const NodeDef_InputSchema = {
properties: {
id: {
type: 'string',
title: 'Id'
},
type: {
type: 'string',
title: 'Type',
default: 'python'
},
title: {
type: 'string',
title: 'Title',
default: ''
},
params: {
additionalProperties: true,
type: 'object',
title: 'Params'
},
requires: {
items: {
'$ref': '#/components/schemas/MessageSpec'
},
type: 'array',
title: 'Requires'
},
provides: {
items: {
'$ref': '#/components/schemas/MessageSpec'
},
type: 'array',
title: 'Provides'
},
source_ref: {
anyOf: [
{
type: 'string'
},
{
type: 'null'
}
],
title: 'Source Ref'
},
timeout: {
anyOf: [
{
type: 'number',
exclusiveMinimum: 0
},
{
type: 'null'
}
],
title: 'Timeout',
description: "Seconds this node's code may run before it is stopped. This covers the first call's imports, which can be much slower than the body. Above 60 the engine may deliver its work again while it is still running — in a batch run, which never redelivers, it is an idle timeout instead: silence this long is a kill."
},
device: {
anyOf: [
{
type: 'string'
},
{
type: 'null'
}
],
title: 'Device',
description: "Label of the worker this node's code must run on, such as 'gpu'. Empty means the engine's own workers. A run needing a label no attached worker carries waits rather than failing."
},
device_policy: {
type: 'string',
enum: ['require', 'prefer'],
title: 'Device Policy',
description: 'What to do when no worker carries `device`: wait for one, or run locally anyway.',
default: 'require'
}
},
type: 'object',
required: ['id'],
title: 'NodeDef',
description: `A node as stored: identity, configuration and ports.
Deliberately no canvas position. The editor lays a flow out itself, so
where a node sits is a fact about the drawing rather than about the flow —
and a graph nobody can arrange is one worth keeping small.`
} as const;
export const NodeDef_OutputSchema = {
properties: {
id: {
type: 'string',
title: 'Id'
},
type: {
type: 'string',
title: 'Type',
default: 'python'
},
title: {
type: 'string',
title: 'Title',
default: ''
},
params: {
additionalProperties: true,
type: 'object',
title: 'Params'
},
requires: {
items: {
'$ref': '#/components/schemas/MessageSpec'
},
type: 'array',
title: 'Requires'
},
provides: {
items: {
'$ref': '#/components/schemas/MessageSpec'
},
type: 'array',
title: 'Provides'
},
source_ref: {
anyOf: [
{
type: 'string'
},
{
type: 'null'
}
],
title: 'Source Ref'
},
timeout: {
anyOf: [
{
type: 'number',
exclusiveMinimum: 0
},
{
type: 'null'
}
],
title: 'Timeout',
description: "Seconds this node's code may run before it is stopped. This covers the first call's imports, which can be much slower than the body. Above 60 the engine may deliver its work again while it is still running — in a batch run, which never redelivers, it is an idle timeout instead: silence this long is a kill."
},
device: {
anyOf: [
{
type: 'string'
},
{
type: 'null'
}
],
title: 'Device',
description: "Label of the worker this node's code must run on, such as 'gpu'. Empty means the engine's own workers. A run needing a label no attached worker carries waits rather than failing."
},
device_policy: {
type: 'string',
enum: ['require', 'prefer'],
title: 'Device Policy',
description: 'What to do when no worker carries `device`: wait for one, or run locally anyway.',
default: 'require'
}
},
type: 'object',
required: ['id'],
title: 'NodeDef',
description: `A node as stored: identity, configuration and ports.
Deliberately no canvas position. The editor lays a flow out itself, so
where a node sits is a fact about the drawing rather than about the flow —
and a graph nobody can arrange is one worth keeping small.`
} as const;
export const NodeSourceSchema = {
properties: {
code: {
type: 'string',
title: 'Code'
}
},
type: 'object',
required: ['code'],
title: 'NodeSource',
description: 'The Python source of a node.'
} as const;
export const NodeStatusPublicSchema = {
properties: {
id: {
type: 'string',
title: 'Id'
},
status: {
type: 'string',
title: 'Status',
default: 'active'
},
error: {
anyOf: [
{
type: 'string'
},
{
type: 'null'
}
],
title: 'Error'
},
health: {
type: 'string',
enum: ['ok', 'degraded', 'down'],
title: 'Health',
default: 'ok'
},
health_detail: {
anyOf: [
{
type: 'string'
},
{
type: 'null'
}
],
title: 'Health Detail'
}
},
type: 'object',
required: ['id'],
title: 'NodeStatusPublic',
description: 'Whether a node loaded, and how its connection is doing.'
} as const;
export const NodeTypeInfoSchema = {
properties: {
type: {
type: 'string',
title: 'Type'
},
title: {
type: 'string',
title: 'Title'
},
description: {
type: 'string',
title: 'Description'
},
params_schema: {
additionalProperties: true,
type: 'object',
title: 'Params Schema'
},
has_source: {
type: 'boolean',
title: 'Has Source',
default: false
},
free_params: {
type: 'boolean',
title: 'Free Params',
default: false
},
plugin: {
anyOf: [
{
type: 'string'
},
{
type: 'null'
}
],
title: 'Plugin'
}
},
type: 'object',
required: ['type', 'title', 'description'],
title: 'NodeTypeInfo',
description: 'A node type the editor can offer, with its parameter schema.'
} as const;
export const OAuthAuthorizeInfoSchema = {
properties: {
client_name: {
type: 'string',
title: 'Client Name'
},
redirect_uri: {
type: 'string',
title: 'Redirect Uri'
},
scope: {
type: 'string',
title: 'Scope'
}
},
type: 'object',
required: ['client_name', 'redirect_uri', 'scope'],
title: 'OAuthAuthorizeInfo',
description: 'What the consent page shows, all of it validated server-side.'
} as const;
export const OAuthAuthorizeRequestSchema = {
properties: {
client_id: {
type: 'string',
title: 'Client Id'
},
redirect_uri: {
type: 'string',
title: 'Redirect Uri'
},
code_challenge: {
type: 'string',
title: 'Code Challenge'
},
code_challenge_method: {
type: 'string',
title: 'Code Challenge Method',
default: 'S256'
},
state: {
anyOf: [
{
type: 'string'
},
{
type: 'null'
}
],
title: 'State'
},
resource: {
anyOf: [
{
type: 'string'
},
{
type: 'null'
}
],
title: 'Resource'
},
scope: {
anyOf: [
{
type: 'string'
},
{
type: 'null'
}
],
title: 'Scope'
}
},
type: 'object',
required: ['client_id', 'redirect_uri', 'code_challenge'],
title: 'OAuthAuthorizeRequest'
} as const;
export const OAuthAuthorizeResponseSchema = {
properties: {
redirect_url: {
type: 'string',
title: 'Redirect Url'
}
},
type: 'object',
required: ['redirect_url'],
title: 'OAuthAuthorizeResponse'
} as const;
export const OAuthClientRegisterSchema = {
properties: {
client_name: {
type: 'string',
maxLength: 128,
title: 'Client Name',
default: 'MCP client'
},
redirect_uris: {
items: {
type: 'string'
},
type: 'array',
title: 'Redirect Uris'
},
grant_types: {
anyOf: [
{
items: {
type: 'string'
},
type: 'array'
},
{
type: 'null'
}
],
title: 'Grant Types'
},
response_types: {
anyOf: [
{
items: {
type: 'string'
},
type: 'array'
},
{
type: 'null'
}
],
title: 'Response Types'
},
token_endpoint_auth_method: {
anyOf: [
{
type: 'string'
},
{
type: 'null'
}
],
title: 'Token Endpoint Auth Method'
}
},
type: 'object',
required: ['redirect_uris'],
title: 'OAuthClientRegister',
description: 'RFC 7591 dynamic client registration request.'
} as const;
export const PageDef_InputSchema = {
properties: {
id: {
type: 'string',
title: 'Id'
},
title: {
type: 'string',
title: 'Title',
default: ''
},
icon: {
type: 'string',
title: 'Icon',
default: ''
},
sections: {
items: {
'$ref': '#/components/schemas/SectionDef-Input'
},
type: 'array',
title: 'Sections'
}
},
type: 'object',
required: ['id'],
title: 'PageDef',
description: 'One tab of a dashboard.'
} as const;
export const PageDef_OutputSchema = {
properties: {
id: {
type: 'string',
title: 'Id'
},
title: {
type: 'string',
title: 'Title',
default: ''
},
icon: {
type: 'string',
title: 'Icon',
default: ''
},
sections: {
items: {
'$ref': '#/components/schemas/SectionDef-Output'
},
type: 'array',
title: 'Sections'
}
},
type: 'object',
required: ['id'],
title: 'PageDef',
description: 'One tab of a dashboard.'
} as const;
export const PairRequestSchema = {
properties: {
code: {
type: 'string',
title: 'Code'
}
},
type: 'object',
required: ['code'],
title: 'PairRequest'
} as const;
export const PairStartedSchema = {
properties: {
code: {
type: 'string',
title: 'Code'
},
secret: {
type: 'string',
title: 'Secret'
},
expires_in: {
type: 'integer',
title: 'Expires In',
default: 600
}
},
type: 'object',
required: ['code', 'secret'],
title: 'PairStarted',
description: 'What the device puts on the wall, and what it polls with.'
} as const;
export const PairStatusSchema = {
properties: {
access_token: {
anyOf: [
{
type: 'string'
},
{
type: 'null'
}
],
title: 'Access Token'
},
panel: {
anyOf: [
{
type: 'string'
},
{
type: 'null'
}
],
title: 'Panel'
}
},
type: 'object',
title: 'PairStatus',
description: 'Nothing yet, or the credential and the panel it is for.'
} as const;
export const PanelDefSchema = {
properties: {
id: {
type: 'string',
title: 'Id'
},
title: {
type: 'string',
title: 'Title',
default: ''
},
dashboards: {
items: {
type: 'string'
},
type: 'array',
title: 'Dashboards'
}
},
type: 'object',
required: ['id'],
title: 'PanelDef',
description: 'One device, and what it shows.'
} as const;
export const PanelsConfigSchema = {
properties: {
panels: {
items: {
'$ref': '#/components/schemas/PanelDef'
},
type: 'array',
title: 'Panels'
}
},
type: 'object',
title: 'PanelsConfig',
description: 'Every panel this installation knows about.'
} as const;
export const PlacementSchema = {
properties: {
x: {
type: 'integer',
title: 'X',
default: 0
},
y: {
type: 'integer',
title: 'Y',
default: 0
},
w: {
type: 'integer',
title: 'W',
default: 3
},
h: {
type: 'integer',
title: 'H',
default: 2
}
},
type: 'object',
title: 'Placement',
description: "Where a widget sits in its section's grid, in grid units."
} as const;
export const PrivateUserCreateSchema = {
properties: {
email: {
type: 'string',
title: 'Email'
},
password: {
type: 'string',
title: 'Password'
},
full_name: {
type: 'string',
title: 'Full Name'
},
is_verified: {
type: 'boolean',
title: 'Is Verified',
default: false
}
},
type: 'object',
required: ['email', 'password', 'full_name'],
title: 'PrivateUserCreate'
} as const;
export const RegisteredClientSchema = {
properties: {
id: {
type: 'string',
format: 'uuid',
title: 'Id'
},
client_name: {
type: 'string',
title: 'Client Name'
},
redirect_uris: {
items: {
type: 'string'
},
type: 'array',
title: 'Redirect Uris'
},
created_at: {
type: 'string',
format: 'date-time',
title: 'Created At'
},
active_tokens: {
type: 'integer',
title: 'Active Tokens'
},
last_authorized_at: {
anyOf: [
{
type: 'string',
format: 'date-time'
},
{
type: 'null'
}
],
title: 'Last Authorized At'
}
},
type: 'object',
required: ['id', 'client_name', 'redirect_uris', 'created_at', 'active_tokens', 'last_authorized_at'],
title: 'RegisteredClient',
description: 'A registered agent, and whether anyone actually let it in.'
} as const;
export const RegisteredClientsSchema = {
properties: {
data: {
items: {
'$ref': '#/components/schemas/RegisteredClient'
},
type: 'array',
title: 'Data'
},
count: {
type: 'integer',
title: 'Count'
}
},
type: 'object',
required: ['data', 'count'],
title: 'RegisteredClients'
} as const;
export const RuleSchema = {
properties: {
events: {
items: {
type: 'string'
},
type: 'array',
title: 'Events'
},
channels: {
items: {
type: 'string'
},
type: 'array',
title: 'Channels'
},
cooldown_s: {
type: 'number',
title: 'Cooldown S',
default: 900
}
},
type: 'object',
title: 'Rule',
description: 'Which events go to which channels.'
} as const;
export const RunCreateSchema = {
properties: {
params: {
additionalProperties: true,
type: 'object',
title: 'Params'
},
seed: {
anyOf: [
{
type: 'integer'
},
{
type: 'null'
}
],
title: 'Seed'
},
draft: {
type: 'boolean',
title: 'Draft',
default: false
}
},
type: 'object',
title: 'RunCreate'
} as const;
export const RunDetailSchema = {
properties: {
id: {
type: 'string',
title: 'Id'
},
flow: {
type: 'string',
title: 'Flow'
},
status: {
type: 'string',
title: 'Status'
},
status_reason: {
type: 'string',
title: 'Status Reason'
},
cause: {
type: 'string',
title: 'Cause'
},
params: {
additionalProperties: true,
type: 'object',
title: 'Params'
},
params_digest: {
type: 'string',
title: 'Params Digest'
},
seed: {
anyOf: [
{
type: 'integer'
},
{
type: 'null'
}
],
title: 'Seed'
},
group_id: {
anyOf: [
{
type: 'string'
},
{
type: 'null'
}
],
title: 'Group Id'
},
labels: {
items: {
type: 'string'
},
type: 'array',
title: 'Labels'
},
created_at: {
title: 'Created At'
},
started_at: {
title: 'Started At'
},
finished_at: {
title: 'Finished At'
},
duration_ms: {
type: 'number',
title: 'Duration Ms'
},
actor: {
type: 'string',
title: 'Actor'
},
result: {
additionalProperties: true,
type: 'object',
title: 'Result'
},
commit: {
type: 'string',
title: 'Commit',
default: ''
},
flow_version: {
type: 'integer',
title: 'Flow Version',
default: 1
},
nodes: {
items: {
'$ref': '#/components/schemas/RunNodeRow'
},
type: 'array',
title: 'Nodes'
},
artifacts: {
items: {
'$ref': '#/components/schemas/ArtifactRow'
},
type: 'array',
title: 'Artifacts'
}
},
type: 'object',
required: ['id', 'flow', 'status', 'status_reason', 'cause', 'params', 'params_digest', 'seed', 'group_id', 'labels', 'created_at', 'duration_ms', 'actor'],
title: 'RunDetail'
} as const;
export const RunNodeRowSchema = {
properties: {
node: {
type: 'string',
title: 'Node'
},
status: {
type: 'string',
title: 'Status'
},
attempt: {
type: 'integer',
title: 'Attempt'
},
duration_ms: {
type: 'number',
title: 'Duration Ms'
},
worker: {
type: 'string',
title: 'Worker'
},
error: {
type: 'string',
title: 'Error'
},
logs: {
type: 'string',
title: 'Logs'
}
},
type: 'object',
required: ['node', 'status', 'attempt', 'duration_ms', 'worker', 'error', 'logs'],
title: 'RunNodeRow'
} as const;
export const RunRequestSchema = {
properties: {
inputs: {
additionalProperties: true,
type: 'object',
title: 'Inputs',
default: {}
}
},
type: 'object',
title: 'RunRequest'
} as const;
export const SecretNamesSchema = {
properties: {
data: {
items: {
type: 'string'
},
type: 'array',
title: 'Data'
},
count: {
type: 'integer',
title: 'Count'
}
},
type: 'object',
required: ['data', 'count'],
title: 'SecretNames'
} as const;
export const SecretValueSchema = {
properties: {
value: {
type: 'string',
title: 'Value'
}
},
type: 'object',
required: ['value'],
title: 'SecretValue'
} as const;
export const SectionDef_InputSchema = {
properties: {
id: {
type: 'string',
title: 'Id'
},
title: {
type: 'string',
title: 'Title',
default: ''
},
widgets: {
items: {
'$ref': '#/components/schemas/WidgetDef'
},
type: 'array',
title: 'Widgets'
}
},
type: 'object',
required: ['id'],
title: 'SectionDef',
description: 'A grid of widgets under a heading.'
} as const;
export const SectionDef_OutputSchema = {
properties: {
id: {
type: 'string',
title: 'Id'
},
title: {
type: 'string',
title: 'Title',
default: ''
},
widgets: {
items: {
'$ref': '#/components/schemas/WidgetDef'
},
type: 'array',
title: 'Widgets'
}
},
type: 'object',
required: ['id'],
title: 'SectionDef',
description: 'A grid of widgets under a heading.'
} as const;
export const SeriesAnswerSchema = {
properties: {
metric: {
type: 'string',
title: 'Metric'
},
lines: {
items: {
'$ref': '#/components/schemas/MetricSeries'
},
type: 'array',
title: 'Lines'
}
},
type: 'object',
required: ['metric'],
title: 'SeriesAnswer'
} as const;
export const SeriesPointSchema = {
properties: {
ts: {
type: 'number',
title: 'Ts'
},
executions: {
type: 'integer',
title: 'Executions'
},
errors: {
type: 'integer',
title: 'Errors'
},
messages: {
type: 'integer',
title: 'Messages'
},
avg_ms: {
type: 'number',
title: 'Avg Ms'
},
max_ms: {
type: 'number',
title: 'Max Ms'
},
avg_lag_ms: {
type: 'number',
title: 'Avg Lag Ms'
}
},
type: 'object',
required: ['ts', 'executions', 'errors', 'messages', 'avg_ms', 'max_ms', 'avg_lag_ms'],
title: 'SeriesPoint'
} as const;
export const ShareRequestSchema = {
properties: {
lib_name: {
type: 'string',
title: 'Lib Name'
}
},
type: 'object',
required: ['lib_name'],
title: 'ShareRequest'
} as const;
export const SweepCreateSchema = {
properties: {
runs: {
items: {
'$ref': '#/components/schemas/SweepEntry'
},
type: 'array',
title: 'Runs'
},
draft: {
type: 'boolean',
title: 'Draft',
default: false
}
},
type: 'object',
title: 'SweepCreate'
} as const;
export const SweepEntrySchema = {
properties: {
params: {
additionalProperties: true,
type: 'object',
title: 'Params'
},
seed: {
anyOf: [
{
type: 'integer'
},
{
type: 'null'
}
],
title: 'Seed'
}
},
type: 'object',
title: 'SweepEntry'
} as const;
export const TokenSchema = {
properties: {
access_token: {
type: 'string',
title: 'Access Token'
},
token_type: {
type: 'string',
title: 'Token Type',
default: 'bearer'
}
},
type: 'object',
required: ['access_token'],
title: 'Token'
} as const;
export const TokenIssuedSchema = {
properties: {
name: {
type: 'string',
title: 'Name'
},
token: {
type: 'string',
title: 'Token'
},
expires_days: {
type: 'integer',
title: 'Expires Days',
default: 365
}
},
type: 'object',
required: ['name', 'token'],
title: 'TokenIssued'
} as const;
export const TokenRequestSchema = {
properties: {
name: {
type: 'string',
title: 'Name'
}
},
type: 'object',
required: ['name'],
title: 'TokenRequest'
} as const;
export const TriggerRequestSchema = {
properties: {
values: {
additionalProperties: true,
type: 'object',
title: 'Values',
default: {}
}
},
type: 'object',
title: 'TriggerRequest'
} as const;
export const UpdatePasswordSchema = {
properties: {
current_password: {
type: 'string',
maxLength: 128,
minLength: 8,
title: 'Current Password'
},
new_password: {
type: 'string',
maxLength: 128,
minLength: 8,
title: 'New Password'
}
},
type: 'object',
required: ['current_password', 'new_password'],
title: 'UpdatePassword'
} as const;
export const UserCreateSchema = {
properties: {
email: {
type: 'string',
maxLength: 255,
format: 'email',
title: 'Email'
},
is_active: {
type: 'boolean',
title: 'Is Active',
default: true
},
is_superuser: {
type: 'boolean',
title: 'Is Superuser',
default: false
},
full_name: {
anyOf: [
{
type: 'string',
maxLength: 255
},
{
type: 'null'
}
],
title: 'Full Name'
},
password: {
type: 'string',
maxLength: 128,
minLength: 8,
title: 'Password'
}
},
type: 'object',
required: ['email', 'password'],
title: 'UserCreate'
} as const;
export const UserPublicSchema = {
properties: {
email: {
type: 'string',
maxLength: 255,
format: 'email',
title: 'Email'
},
is_active: {
type: 'boolean',
title: 'Is Active',
default: true
},
is_superuser: {
type: 'boolean',
title: 'Is Superuser',
default: false
},
full_name: {
anyOf: [
{
type: 'string',
maxLength: 255
},
{
type: 'null'
}
],
title: 'Full Name'
},
id: {
type: 'string',
format: 'uuid',
title: 'Id'
},
created_at: {
anyOf: [
{
type: 'string',
format: 'date-time'
},
{
type: 'null'
}
],
title: 'Created At'
}
},
type: 'object',
required: ['email', 'id'],
title: 'UserPublic'
} as const;
export const UserRegisterSchema = {
properties: {
email: {
type: 'string',
maxLength: 255,
format: 'email',
title: 'Email'
},
password: {
type: 'string',
maxLength: 128,
minLength: 8,
title: 'Password'
},
full_name: {
anyOf: [
{
type: 'string',
maxLength: 255
},
{
type: 'null'
}
],
title: 'Full Name'
}
},
type: 'object',
required: ['email', 'password'],
title: 'UserRegister'
} as const;
export const UserUpdateSchema = {
properties: {
email: {
anyOf: [
{
type: 'string',
maxLength: 255,
format: 'email'
},
{
type: 'null'
}
],
title: 'Email'
},
is_active: {
type: 'boolean',
title: 'Is Active',
default: true
},
is_superuser: {
type: 'boolean',
title: 'Is Superuser',
default: false
},
full_name: {
anyOf: [
{
type: 'string',
maxLength: 255
},
{
type: 'null'
}
],
title: 'Full Name'
},
password: {
anyOf: [
{
type: 'string',
maxLength: 128,
minLength: 8
},
{
type: 'null'
}
],
title: 'Password'
}
},
type: 'object',
title: 'UserUpdate'
} as const;
export const UserUpdateMeSchema = {
properties: {
full_name: {
anyOf: [
{
type: 'string',
maxLength: 255
},
{
type: 'null'
}
],
title: 'Full Name'
},
email: {
anyOf: [
{
type: 'string',
maxLength: 255,
format: 'email'
},
{
type: 'null'
}
],
title: 'Email'
}
},
type: 'object',
title: 'UserUpdateMe'
} as const;
export const UsersPublicSchema = {
properties: {
data: {
items: {
'$ref': '#/components/schemas/UserPublic'
},
type: 'array',
title: 'Data'
},
count: {
type: 'integer',
title: 'Count'
}
},
type: 'object',
required: ['data', 'count'],
title: 'UsersPublic'
} as const;
export const ValidationErrorSchema = {
properties: {
loc: {
items: {
anyOf: [
{
type: 'string'
},
{
type: 'integer'
}
]
},
type: 'array',
title: 'Location'
},
msg: {
type: 'string',
title: 'Message'
},
type: {
type: 'string',
title: 'Error Type'
}
},
type: 'object',
required: ['loc', 'msg', 'type'],
title: 'ValidationError'
} as const;
export const ValidationIssueSchema = {
properties: {
code: {
type: 'string',
enum: ['cycle', 'unconnected_input', 'missing_initial_value', 'node_error', 'unauthenticated_hook', 'self_loop_needs_initial'],
title: 'Code'
},
message: {
type: 'string',
title: 'Message'
},
flow: {
type: 'string',
title: 'Flow',
default: ''
},
nodes: {
items: {
type: 'string'
},
type: 'array',
title: 'Nodes',
default: []
},
node: {
anyOf: [
{
type: 'string'
},
{
type: 'null'
}
],
title: 'Node'
},
port: {
anyOf: [
{
type: 'string'
},
{
type: 'null'
}
],
title: 'Port'
},
message_name: {
anyOf: [
{
type: 'string'
},
{
type: 'null'
}
],
title: 'Message Name'
}
},
type: 'object',
required: ['code', 'message'],
title: 'ValidationIssue',
description: 'A problem that keeps a flow from running correctly.'
} as const;
export const ValidationResultSchema = {
properties: {
issues: {
items: {
'$ref': '#/components/schemas/ValidationIssue'
},
type: 'array',
title: 'Issues',
default: []
}
},
type: 'object',
title: 'ValidationResult'
} as const;
export const WidgetDefSchema = {
properties: {
id: {
type: 'string',
title: 'Id'
},
type: {
type: 'string',
enum: ['stat', 'gauge', 'chart', 'markdown', 'agenda', 'notification', 'bar', 'icon', 'forecast', 'clock', 'button', 'switch', 'slider', 'input', 'dropdown'],
title: 'Type'
},
title: {
type: 'string',
title: 'Title',
default: ''
},
layout: {
additionalProperties: {
'$ref': '#/components/schemas/Placement'
},
type: 'object',
title: 'Layout'
},
config: {
additionalProperties: true,
type: 'object',
title: 'Config'
}
},
type: 'object',
required: ['id', 'type'],
title: 'WidgetDef',
description: `One tile: what it shows or does, and where it sits.
\`\`config\`\` is per type — a chart names its series, a button names the
message it publishes — and is validated against the type below rather than
by a schema per class, because the whole set is small and closed.
A chart comes in two kinds. The default reads what the engine kept for a
message. One with \`\`source: "query"\`\` asks instead, and its config is
\`\`{source, request, request_dtype: "record", message, dtype: "series",
refresh_s, range_s}\`\`: it publishes \`\`{range_s, interval_s}\`\` to
\`\`request\`\` exactly as a slider publishes a value, and draws the \`\`series\`\`
a flow answers with on \`\`message\`\`.`
} as const;
export const WorkerInfoSchema = {
properties: {
name: {
type: 'string',
title: 'Name'
},
labels: {
items: {
type: 'string'
},
type: 'array',
title: 'Labels'
},
max_parallel: {
type: 'integer',
title: 'Max Parallel',
default: 1
},
in_flight: {
type: 'integer',
title: 'In Flight',
default: 0
},
attached_at: {
type: 'number',
title: 'Attached At',
default: 0
},
last_seen: {
type: 'number',
title: 'Last Seen',
default: 0
},
python: {
type: 'string',
title: 'Python',
default: ''
},
venv_digest: {
type: 'string',
title: 'Venv Digest',
default: ''
}
},
type: 'object',
required: ['name'],
title: 'WorkerInfo'
} as const;
export const app__api__routes__dashboards__PublishRequestSchema = {
properties: {
version: {
type: 'integer',
title: 'Version'
}
},
type: 'object',
required: ['version'],
title: 'PublishRequest'
} as const;
export const app__api__routes__dashboards__RenameRequestSchema = {
properties: {
name: {
type: 'string',
title: 'Name'
}
},
type: 'object',
required: ['name'],
title: 'RenameRequest'
} as const;
export const app__api__routes__flows__PublishRequestSchema = {
properties: {
version: {
type: 'integer',
title: 'Version'
}
},
type: 'object',
required: ['version'],
title: 'PublishRequest'
} as const;
export const app__api__routes__flows__RenameRequestSchema = {
properties: {
new_name: {
type: 'string',
title: 'New Name'
}
},
type: 'object',
required: ['new_name'],
title: 'RenameRequest'
} as const;
export const app__api__routes__messages__MessageValueSchema = {
properties: {
name: {
type: 'string',
title: 'Name'
},
value: {
title: 'Value'
},
ts: {
anyOf: [
{
type: 'number'
},
{
type: 'null'
}
],
title: 'Ts'
}
},
type: 'object',
required: ['name', 'value'],
title: 'MessageValue'
} as const;
export const app__api__routes__messages__PublishRequestSchema = {
properties: {
value: {
title: 'Value'
},
source_kind: {
type: 'string',
title: 'Source Kind',
default: 'api'
},
source_id: {
type: 'string',
title: 'Source Id',
default: ''
},
source_label: {
type: 'string',
title: 'Source Label',
default: ''
},
source_detail: {
type: 'string',
title: 'Source Detail',
default: ''
}
},
type: 'object',
required: ['value'],
title: 'PublishRequest'
} as const;
export const app__api__routes__observability__RunRowSchema = {
properties: {
id: {
type: 'string',
title: 'Id'
},
flow: {
type: 'string',
title: 'Flow'
},
source: {
type: 'string',
title: 'Source'
},
status: {
type: 'string',
title: 'Status'
},
started_at: {
type: 'string',
format: 'date-time',
title: 'Started At'
},
finished_at: {
anyOf: [
{
type: 'string',
format: 'date-time'
},
{
type: 'null'
}
],
title: 'Finished At'
},
nodes: {
type: 'integer',
title: 'Nodes'
},
errors: {
type: 'integer',
title: 'Errors'
},
duration_ms: {
type: 'number',
title: 'Duration Ms'
},
deliveries: {
type: 'integer',
title: 'Deliveries'
}
},
type: 'object',
required: ['id', 'flow', 'source', 'status', 'started_at', 'nodes', 'errors', 'duration_ms', 'deliveries'],
title: 'RunRow'
} as const;
export const app__api__routes__runs__RunRowSchema = {
properties: {
id: {
type: 'string',
title: 'Id'
},
flow: {
type: 'string',
title: 'Flow'
},
status: {
type: 'string',
title: 'Status'
},
status_reason: {
type: 'string',
title: 'Status Reason'
},
cause: {
type: 'string',
title: 'Cause'
},
params: {
additionalProperties: true,
type: 'object',
title: 'Params'
},
params_digest: {
type: 'string',
title: 'Params Digest'
},
seed: {
anyOf: [
{
type: 'integer'
},
{
type: 'null'
}
],
title: 'Seed'
},
group_id: {
anyOf: [
{
type: 'string'
},
{
type: 'null'
}
],
title: 'Group Id'
},
labels: {
items: {
type: 'string'
},
type: 'array',
title: 'Labels'
},
created_at: {
title: 'Created At'
},
started_at: {
title: 'Started At'
},
finished_at: {
title: 'Finished At'
},
duration_ms: {
type: 'number',
title: 'Duration Ms'
},
actor: {
type: 'string',
title: 'Actor'
}
},
type: 'object',
required: ['id', 'flow', 'status', 'status_reason', 'cause', 'params', 'params_digest', 'seed', 'group_id', 'labels', 'created_at', 'duration_ms', 'actor'],
title: 'RunRow',
description: 'A run without its result, which is the part that can be large.'
} as const;
export const app__flow__schemas__MessageValueSchema = {
properties: {
value: {
title: 'Value'
},
ts: {
anyOf: [
{
type: 'number'
},
{
type: 'null'
}
],
title: 'Ts'
}
},
type: 'object',
title: 'MessageValue',
description: 'The last payload seen on a message.'
} as const;