// 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 }, icon: { type: 'string', title: 'Icon', default: '' }, widgets: { items: { '$ref': '#/components/schemas/WidgetDef' }, type: 'array', title: 'Widgets' }, settings: { additionalProperties: { '$ref': '#/components/schemas/SettingDef' }, type: 'object', title: 'Settings' }, 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 }, icon: { type: 'string', title: 'Icon', default: '' }, widgets: { items: { '$ref': '#/components/schemas/WidgetDef' }, type: 'array', title: 'Widgets' }, settings: { additionalProperties: { '$ref': '#/components/schemas/SettingDef' }, type: 'object', title: 'Settings' }, 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: '' }, widget_count: { type: 'integer', title: 'Widget Count', default: 0 }, has_draft: { type: 'boolean', title: 'Has Draft', default: false }, version: { type: 'integer', title: 'Version', default: 1 } }, 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.' }, origin: { anyOf: [ { '$ref': '#/components/schemas/FlowOrigin' }, { type: 'null' } ], description: 'Set when the flow was declared in code elsewhere and uploaded by `fluksio sync`. Absent for a flow drawn on the canvas.' } }, 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.' }, origin: { anyOf: [ { '$ref': '#/components/schemas/FlowOrigin' }, { type: 'null' } ], description: 'Set when the flow was declared in code elsewhere and uploaded by `fluksio sync`. Absent for a flow drawn on the canvas.' } }, 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 FlowOriginSchema = { properties: { kind: { type: 'string', const: 'python', title: 'Kind', default: 'python' }, repo: { type: 'string', title: 'Repo', default: '' }, commit: { type: 'string', title: 'Commit', default: '' }, dirty: { type: 'boolean', title: 'Dirty', default: false } }, type: 'object', title: 'FlowOrigin', description: `Where a flow was declared, when that was somewhere other than here. A flow drawn on the canvas has no origin: the store is where it lives. One stamped with this was declared with the decorators in somebody's own repository and put here by \`\`fluksio sync\`\`, so the node bodies below it are generated imports and the code they run is versioned twice — once here and once there. Its presence is what makes a flow code-defined. Deliberately no timestamp. The store commits every change it is given, so when a flow was last synced is a fact its own history already holds — and one that would otherwise change on every sync, making an unchanged upload look like a new version of the flow.` } 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 FlowRunsRowSchema = { properties: { flow: { type: 'string', title: 'Flow' }, runs: { type: 'integer', title: 'Runs' }, running: { type: 'integer', title: 'Running' }, queued: { type: 'integer', title: 'Queued' }, last_created_at: { title: 'Last Created At' } }, type: 'object', required: ['flow', 'runs', 'running', 'queued'], title: 'FlowRunsRow', description: "How much a flow has been run, for the screen's list of flows." } as const; export const FlowStatePublicSchema = { properties: { values: { additionalProperties: { '$ref': '#/components/schemas/fluksio__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 }, version: { type: 'integer', title: 'Version', default: 1 } }, 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' } }, type: 'object', required: ['status', 'problems', 'flows', 'nodes', 'queue', 'loop_lag'], 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' }, name: { type: 'string', title: 'Name', default: '' } }, 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 }, adopted: { type: 'boolean', title: 'Adopted', 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', minimum: 0 }, { type: 'null' } ], title: 'Timeout', description: "Seconds this node's code may be silent before it is stopped. A yield or an emit resets the clock, and the first call's imports are not charged to it. 0 disables the limit: the node runs until it finishes, and only a dead worker fails the call. Empty inherits the engine default." }, 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' }, cache: { type: 'boolean', title: 'Cache', description: 'Whether a batch run may reuse an earlier execution of this node with the same source, settings and inputs. Turn it off for a function whose answer can change on its own.', default: true } }, 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', minimum: 0 }, { type: 'null' } ], title: 'Timeout', description: "Seconds this node's code may be silent before it is stopped. A yield or an emit resets the clock, and the first call's imports are not charged to it. 0 disables the limit: the node runs until it finishes, and only a dead worker fails the call. Empty inherits the engine default." }, 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' }, cache: { type: 'boolean', title: 'Cache', description: 'Whether a batch run may reuse an earlier execution of this node with the same source, settings and inputs. Turn it off for a function whose answer can change on its own.', default: true } }, 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' }, last_error: { type: 'string', title: 'Last Error', default: '' }, last_error_ts: { anyOf: [ { type: 'number' }, { type: 'null' } ], title: 'Last Error Ts' } }, 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 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' }, nonce: { type: 'integer', title: 'Nonce', default: 0 } }, 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 PanelsPublicSchema = { properties: { panels: { items: { '$ref': '#/components/schemas/PanelDef' }, type: 'array', title: 'Panels' }, frontend_host: { type: 'string', title: 'Frontend Host', default: '' } }, type: 'object', title: 'PanelsPublic', description: `The panels, and the address a device should be pointed at. The address is the server's own, because the browser's origin is not a reliable answer to it: an admin working through the portal is on the portal's origin, and this one is for a screen on this network. An installation enrolled with a portal has a second address, built by the dialog from what \`\`/cloud/status\`\` reports rather than from here — a panel is not the thing that knows whether remote access is on.` } as const; export const PendingDeviceSchema = { properties: { device: { type: 'string', title: 'Device' }, remote: { type: 'boolean', title: 'Remote', default: false } }, type: 'object', required: ['device'], title: 'PendingDevice', description: 'Who is asking, as far as the request itself says.' } 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 RemoteUserBodySchema = { properties: { code: { type: 'string', maxLength: 32, minLength: 1, title: 'Code' } }, type: 'object', required: ['code'], title: 'RemoteUserBody' } 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 }, no_cache: { type: 'boolean', title: 'No Cache', default: false }, cause: { type: 'string', enum: ['api', 'cli', 'sdk'], title: 'Cause', default: 'api' } }, 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' }, origin_commit: { type: 'string', title: 'Origin Commit', default: '' }, commit: { type: 'string', title: 'Commit', default: '' }, 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' }, 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' }, cache_key: { type: 'string', title: 'Cache Key', default: '' }, cached_from: { type: 'string', title: 'Cached From', default: '' } }, type: 'object', required: ['node', 'status', 'attempt', 'duration_ms', 'worker', 'error', 'logs'], title: 'RunNodeRow' } as const; export const RunPageSchema = { properties: { data: { items: { '$ref': '#/components/schemas/fluksio__api__routes__observability__RunRow' }, type: 'array', title: 'Data' }, count: { type: 'integer', title: 'Count' } }, type: 'object', required: ['data', 'count'], title: 'RunPage' } 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 SeriesAnswerSchema = { properties: { metric: { type: 'string', title: 'Metric' }, x: { type: 'string', title: 'X', default: 'step' }, 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 SettingDefSchema = { properties: { value: { title: 'Value' }, message: { type: 'string', title: 'Message', default: '' }, dtype: { type: 'string', title: 'Dtype', default: '' } }, type: 'object', title: 'SettingDef', description: `One dashboard-wide setting: a value, and optionally where it comes from. Unbound — no \`\`message\`\` — the setting is simply \`\`value\`\`, which is what makes a panel that is always dark cost no flow at all. Bound, a flow drives it live and \`\`value\`\` is the fallback: what the dashboard uses until something arrives, and whenever the message is silent. A schedule is not a third case. A node publishing to the bound message on a cron *is* the schedule, which is the whole reason this is a channel rather than a switching rule per setting.` } 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 }, no_cache: { type: 'boolean', title: 'No Cache', 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' }, portal_sub: { anyOf: [ { type: 'string' }, { type: 'null' } ], title: 'Portal Sub' }, 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' }, input: { title: 'Input' }, ctx: { type: 'object', title: 'Context' } }, 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' }, advisory: { type: 'boolean', title: 'Advisory', description: 'Worth saying, but not a fault — the UI says so in a softer tone.', readOnly: true } }, type: 'object', required: ['code', 'message', 'advisory'], title: 'ValidationIssue', description: 'Something wrong with a flow — a fault, or merely advisory.' } 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', 'color'], 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\`\`. A colour widget picks what it publishes with \`\`format\`\`, because fixtures differ and a change node per tile is not the answer: - \`\`hsv\`\` (the default) — \`\`[h, s, v]\`\`, hue 0-360 degrees, saturation and value 0-100 percent. What the Node-RED installation this ports feeds its 3CH/4CH DMX encoders, which divide by 360 and by 100. - \`\`rgb\`\` — \`\`[r, g, b]\`\`, each 0-255. The conventional range; the reference's own encoders produce it after converting. - \`\`hex\`\` — \`\`"#rrggbb"\`\`, lowercase. Conventional likewise. The first two are a \`\`list\`\` message, the third a \`\`str\`\`, which is what \`\`COLOR_DTYPES\`\` records and the check below holds a binding to.` } 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 fluksio__api__routes__dashboards__PublishRequestSchema = { properties: { version: { type: 'integer', title: 'Version' } }, type: 'object', required: ['version'], title: 'PublishRequest' } as const; export const fluksio__api__routes__dashboards__RenameRequestSchema = { properties: { name: { type: 'string', title: 'Name' } }, type: 'object', required: ['name'], title: 'RenameRequest' } as const; export const fluksio__api__routes__flows__PublishRequestSchema = { properties: { version: { type: 'integer', title: 'Version' } }, type: 'object', required: ['version'], title: 'PublishRequest' } as const; export const fluksio__api__routes__flows__RenameRequestSchema = { properties: { new_name: { type: 'string', title: 'New Name' } }, type: 'object', required: ['new_name'], title: 'RenameRequest' } as const; export const fluksio__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 fluksio__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 fluksio__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 fluksio__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' }, origin_commit: { type: 'string', title: 'Origin Commit', default: '' }, commit: { type: 'string', title: 'Commit', default: '' }, 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 fluksio__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;