mirror of
https://github.com/windmill-labs/windmill.git
synced 2026-08-18 16:02:10 +00:00
9bbab3321e
* data tables settings ui * install runed * zod 4 fixes * use new toJSONSchema * Migrate ducklake catalogs to more generic custom instance databases * fix compilation * Safety conversion for old duckdb ffi * data tables settings * ts client basis * inline run works * datatables work * Revert "datatables work" This reverts commit6e1588d59e. * datatables work (without leaking pg credentials) * println * separate sqlUtils.ts * nit * Separate custom instance db Select and Wizard components * nit * nit wording * add tags to custom instance dbs * error when trying to use ducklake as datatable or opposite * show status in dropdown * data table instance setup works * sqk function for ducklake * factorize logic * fix temp reactivity * Data table assetexplore * Migrate S3 permissions to modal * Revert "Migrate S3 permissions to modal" This reverts commit0631d03cb0. * nit query -> fetch * Custom instance setup new look * run_language_executor separate fn * run_inline param * nit wording * Better typed client * Data tables display as assets in frontend * asset db icon * nit * cleaner errors * nit * Fix sed calls in mac * run_inline_script_preview in python client * basic python datatable client * datatable and datalake parser in python * ducklake client python * nit fix * Fix migration producing NULL instead of {} when no custom databases * merge conflict fail * python ducklake client arg fix * parse or infer sql types in ts client * ts asset parser, detect datatable & ducklake R/W * fix sql repl for other read ops than select * export type SqlTemplateFunction * rename list_custom_instance_pg_databases * typecheck datatable and ducklake name in Typescript * Fix typecheck datatable and ducklake in TS * declare module overriding instead of extending * infer_sql_type in python client * SqlQuery object in python * fix merge conflicts * update const_format * CI fix * factor out to var_identifiers * sqlx prepare * unnecessary security (admin is required) * clearer comment * ee repo ref * nit snake case * claude step 1: detect var declarations * move detect_sql_access_type to common mod * claude step 2: detect when saved vars are queried * Revert "claude step 2: detect when saved vars are queried" This reverts commit1e1f930568. * Revert "claude step 1: detect var declarations" This reverts commitf866f4819d. * remove ducklake/datatable and default * detect data table assigns in var_identifiers * Python parser successfully infers R/W/RW from ducklake / datatable * still register ducklake/datatable if not used as unknown R/W * Go to settings button in Assets Dropdown on not found * nit * sqlx prepare fail * manual fix, somehow sqlx prepare won't do it * fix frontend ci * ee repo ref * ducklake_user doesnt exist in unit tests * nit fix * ui nit * nit * nit missing clone * fork ducklakes and datatables * fix surface hover bug * stupid mistake * better deeply reactive mutable derived * Ducklake picker * Editor bar data tables * DuckDB supports datatables * datatable in duckdb asset parser * duckdb asset parser var_identifiers * Revert "duckdb asset parser var_identifiers" This reverts commit88068b1a77. * sqlx prepare * Box pin in test_workflow_as_code to fix stack overflow * go to settings button * ee repo ref * fix compilation * wording nit
816 lines
19 KiB
YAML
816 lines
19 KiB
YAML
openapi: "3.0.3"
|
|
|
|
info:
|
|
version: 1.589.3
|
|
title: OpenFlow Spec
|
|
contact:
|
|
name: Ruben Fiszel
|
|
email: ruben@windmill.dev
|
|
url: https://windmill.dev
|
|
|
|
license:
|
|
name: Apache 2.0
|
|
url: https://www.apache.org/licenses/LICENSE-2.0.html
|
|
|
|
paths: {}
|
|
|
|
externalDocs:
|
|
description: documentation portal
|
|
url: https://windmill.dev
|
|
|
|
components:
|
|
schemas:
|
|
OpenFlow:
|
|
type: object
|
|
properties:
|
|
summary:
|
|
type: string
|
|
description:
|
|
type: string
|
|
value:
|
|
$ref: "#/components/schemas/FlowValue"
|
|
schema:
|
|
type: object
|
|
required:
|
|
- summary
|
|
- value
|
|
|
|
FlowValue:
|
|
type: object
|
|
properties:
|
|
modules:
|
|
type: array
|
|
items:
|
|
$ref: "#/components/schemas/FlowModule"
|
|
failure_module:
|
|
$ref: "#/components/schemas/FlowModule"
|
|
preprocessor_module:
|
|
$ref: "#/components/schemas/FlowModule"
|
|
same_worker:
|
|
type: boolean
|
|
concurrent_limit:
|
|
type: number
|
|
concurrency_key:
|
|
type: string
|
|
concurrency_time_window_s:
|
|
type: number
|
|
debounce_delay_s:
|
|
type: number
|
|
debounce_key:
|
|
type: string
|
|
skip_expr:
|
|
type: string
|
|
cache_ttl:
|
|
type: number
|
|
cache_ignore_s3_path:
|
|
type: boolean
|
|
flow_env:
|
|
type: object
|
|
additionalProperties:
|
|
type: string
|
|
priority:
|
|
type: number
|
|
early_return:
|
|
type: string
|
|
chat_input_enabled:
|
|
type: boolean
|
|
description: Whether this flow accepts chat-style input
|
|
notes:
|
|
type: array
|
|
description: Sticky notes attached to the flow
|
|
items:
|
|
$ref: "#/components/schemas/FlowNote"
|
|
required:
|
|
- modules
|
|
|
|
Retry:
|
|
type: object
|
|
properties:
|
|
constant:
|
|
type: object
|
|
properties:
|
|
attempts:
|
|
type: integer
|
|
seconds:
|
|
type: integer
|
|
exponential:
|
|
type: object
|
|
properties:
|
|
attempts:
|
|
type: integer
|
|
multiplier:
|
|
type: integer
|
|
seconds:
|
|
type: integer
|
|
minimum: 1
|
|
random_factor:
|
|
type: integer
|
|
minimum: 0
|
|
maximum: 100
|
|
retry_if:
|
|
$ref: "#/components/schemas/RetryIf"
|
|
|
|
FlowNote:
|
|
type: object
|
|
description: A sticky note attached to a flow for documentation and annotation
|
|
properties:
|
|
id:
|
|
type: string
|
|
description: Unique identifier for the note
|
|
text:
|
|
type: string
|
|
description: Content of the note
|
|
position:
|
|
type: object
|
|
description: Position of the note in the flow editor
|
|
properties:
|
|
x:
|
|
type: number
|
|
description: X coordinate
|
|
y:
|
|
type: number
|
|
description: Y coordinate
|
|
required:
|
|
- x
|
|
- y
|
|
size:
|
|
type: object
|
|
description: Size of the note in the flow editor
|
|
properties:
|
|
width:
|
|
type: number
|
|
description: Width in pixels
|
|
height:
|
|
type: number
|
|
description: Height in pixels
|
|
required:
|
|
- width
|
|
- height
|
|
color:
|
|
type: string
|
|
description: Color of the note (e.g., "yellow", "#ffff00")
|
|
type:
|
|
type: string
|
|
enum: [free, group]
|
|
description: Type of note - 'free' for standalone notes, 'group' for notes that group other nodes
|
|
locked:
|
|
type: boolean
|
|
default: false
|
|
description: Whether the note is locked and cannot be edited or moved
|
|
contained_node_ids:
|
|
type: array
|
|
items:
|
|
type: string
|
|
description: For group notes, the IDs of nodes contained within this group
|
|
required:
|
|
- id
|
|
- text
|
|
- color
|
|
- type
|
|
|
|
RetryIf:
|
|
type: object
|
|
properties:
|
|
expr:
|
|
type: string
|
|
required:
|
|
- expr
|
|
|
|
StopAfterIf:
|
|
type: object
|
|
properties:
|
|
skip_if_stopped:
|
|
type: boolean
|
|
expr:
|
|
type: string
|
|
error_message:
|
|
type: string
|
|
required:
|
|
- expr
|
|
|
|
FlowModule:
|
|
type: object
|
|
properties:
|
|
id:
|
|
type: string
|
|
value:
|
|
$ref: "#/components/schemas/FlowModuleValue"
|
|
stop_after_if:
|
|
$ref: "#/components/schemas/StopAfterIf"
|
|
stop_after_all_iters_if:
|
|
$ref: "#/components/schemas/StopAfterIf"
|
|
skip_if:
|
|
type: object
|
|
properties:
|
|
expr:
|
|
type: string
|
|
required:
|
|
- expr
|
|
sleep:
|
|
$ref: "#/components/schemas/InputTransform"
|
|
cache_ttl:
|
|
type: number
|
|
cache_ignore_s3_path:
|
|
type: boolean
|
|
timeout:
|
|
$ref: "#/components/schemas/InputTransform"
|
|
delete_after_use:
|
|
type: boolean
|
|
summary:
|
|
type: string
|
|
mock:
|
|
type: object
|
|
properties:
|
|
enabled:
|
|
type: boolean
|
|
return_value: {}
|
|
suspend:
|
|
type: object
|
|
properties:
|
|
required_events:
|
|
type: integer
|
|
timeout:
|
|
type: integer
|
|
resume_form:
|
|
type: object
|
|
properties:
|
|
schema:
|
|
type: object
|
|
user_auth_required:
|
|
type: boolean
|
|
user_groups_required:
|
|
$ref: "#/components/schemas/InputTransform"
|
|
self_approval_disabled:
|
|
type: boolean
|
|
hide_cancel:
|
|
type: boolean
|
|
continue_on_disapprove_timeout:
|
|
type: boolean
|
|
priority:
|
|
type: number
|
|
continue_on_error:
|
|
type: boolean
|
|
retry:
|
|
$ref: "#/components/schemas/Retry"
|
|
required:
|
|
- value
|
|
- id
|
|
|
|
InputTransform:
|
|
oneOf:
|
|
- $ref: "#/components/schemas/StaticTransform"
|
|
- $ref: "#/components/schemas/JavascriptTransform"
|
|
discriminator:
|
|
propertyName: type
|
|
mapping:
|
|
static: "#/components/schemas/StaticTransform"
|
|
javascript: "#/components/schemas/JavascriptTransform"
|
|
|
|
StaticTransform:
|
|
type: object
|
|
properties:
|
|
value: {}
|
|
type:
|
|
type: string
|
|
enum:
|
|
- static
|
|
required:
|
|
- type
|
|
|
|
JavascriptTransform:
|
|
type: object
|
|
properties:
|
|
expr:
|
|
type: string
|
|
type:
|
|
type: string
|
|
enum:
|
|
- javascript
|
|
required:
|
|
- expr
|
|
- type
|
|
|
|
FlowModuleValue:
|
|
oneOf:
|
|
- $ref: "#/components/schemas/RawScript"
|
|
- $ref: "#/components/schemas/PathScript"
|
|
- $ref: "#/components/schemas/PathFlow"
|
|
- $ref: "#/components/schemas/ForloopFlow"
|
|
- $ref: "#/components/schemas/WhileloopFlow"
|
|
- $ref: "#/components/schemas/BranchOne"
|
|
- $ref: "#/components/schemas/BranchAll"
|
|
- $ref: "#/components/schemas/Identity"
|
|
- $ref: "#/components/schemas/AiAgent"
|
|
discriminator:
|
|
propertyName: type
|
|
mapping:
|
|
rawscript: "#/components/schemas/RawScript"
|
|
script: "#/components/schemas/PathScript"
|
|
flow: "#/components/schemas/PathFlow"
|
|
forloopflow: "#/components/schemas/ForloopFlow"
|
|
whileloopflow: "#/components/schemas/WhileloopFlow"
|
|
branchone: "#/components/schemas/BranchOne"
|
|
branchall: "#/components/schemas/BranchAll"
|
|
identity: "#/components/schemas/Identity"
|
|
aiagent: "#/components/schemas/AiAgent"
|
|
|
|
RawScript:
|
|
type: object
|
|
properties:
|
|
# to be made required once migration is over
|
|
input_transforms:
|
|
type: object
|
|
additionalProperties:
|
|
$ref: "#/components/schemas/InputTransform"
|
|
content:
|
|
type: string
|
|
language:
|
|
type: string
|
|
enum:
|
|
- deno
|
|
- bun
|
|
- python3
|
|
- go
|
|
- bash
|
|
- powershell
|
|
- postgresql
|
|
- mysql
|
|
- bigquery
|
|
- snowflake
|
|
- mssql
|
|
- oracledb
|
|
- graphql
|
|
- nativets
|
|
- php
|
|
# TODO: Add missing languages
|
|
path:
|
|
type: string
|
|
lock:
|
|
type: string
|
|
type:
|
|
type: string
|
|
enum:
|
|
- rawscript
|
|
tag:
|
|
type: string
|
|
concurrent_limit:
|
|
type: number
|
|
concurrency_time_window_s:
|
|
type: number
|
|
custom_concurrency_key:
|
|
type: string
|
|
is_trigger:
|
|
type: boolean
|
|
assets:
|
|
type: array
|
|
items:
|
|
type: object
|
|
required:
|
|
- path
|
|
- kind
|
|
properties:
|
|
path:
|
|
type: string
|
|
kind:
|
|
type: string
|
|
enum:
|
|
- s3object
|
|
- resource
|
|
- ducklake
|
|
- datatable
|
|
access_type:
|
|
type: string
|
|
enum: [r, w, rw]
|
|
alt_access_type:
|
|
type: string
|
|
enum: [r, w, rw]
|
|
required:
|
|
- type
|
|
- content
|
|
- language
|
|
- input_transforms
|
|
|
|
PathScript:
|
|
type: object
|
|
properties:
|
|
input_transforms:
|
|
type: object
|
|
additionalProperties:
|
|
$ref: "#/components/schemas/InputTransform"
|
|
path:
|
|
type: string
|
|
hash:
|
|
type: string
|
|
type:
|
|
type: string
|
|
enum:
|
|
- script
|
|
tag_override:
|
|
type: string
|
|
is_trigger:
|
|
type: boolean
|
|
required:
|
|
- type
|
|
- path
|
|
- input_transforms
|
|
|
|
PathFlow:
|
|
type: object
|
|
properties:
|
|
input_transforms:
|
|
type: object
|
|
additionalProperties:
|
|
$ref: "#/components/schemas/InputTransform"
|
|
path:
|
|
type: string
|
|
type:
|
|
type: string
|
|
enum:
|
|
- flow
|
|
required:
|
|
- type
|
|
- path
|
|
- input_transforms
|
|
|
|
ForloopFlow:
|
|
type: object
|
|
properties:
|
|
modules:
|
|
type: array
|
|
items:
|
|
$ref: "#/components/schemas/FlowModule"
|
|
iterator:
|
|
$ref: "#/components/schemas/InputTransform"
|
|
skip_failures:
|
|
type: boolean
|
|
type:
|
|
type: string
|
|
enum:
|
|
- forloopflow
|
|
parallel:
|
|
type: boolean
|
|
parallelism:
|
|
$ref: "#/components/schemas/InputTransform"
|
|
squash:
|
|
type: boolean
|
|
required:
|
|
- modules
|
|
- iterator
|
|
- skip_failures
|
|
- type
|
|
|
|
WhileloopFlow:
|
|
type: object
|
|
properties:
|
|
modules:
|
|
type: array
|
|
items:
|
|
$ref: "#/components/schemas/FlowModule"
|
|
skip_failures:
|
|
type: boolean
|
|
type:
|
|
type: string
|
|
enum:
|
|
- whileloopflow
|
|
parallel:
|
|
type: boolean
|
|
parallelism:
|
|
$ref: "#/components/schemas/InputTransform"
|
|
squash:
|
|
type: boolean
|
|
required:
|
|
- modules
|
|
- skip_failures
|
|
- type
|
|
|
|
BranchOne:
|
|
type: object
|
|
properties:
|
|
branches:
|
|
type: array
|
|
items:
|
|
type: object
|
|
properties:
|
|
summary:
|
|
type: string
|
|
expr:
|
|
type: string
|
|
modules:
|
|
type: array
|
|
items:
|
|
$ref: "#/components/schemas/FlowModule"
|
|
required:
|
|
- modules
|
|
- expr
|
|
default:
|
|
type: array
|
|
items:
|
|
$ref: "#/components/schemas/FlowModule"
|
|
required: [modules]
|
|
type:
|
|
type: string
|
|
enum:
|
|
- branchone
|
|
required:
|
|
- branches
|
|
- default
|
|
- type
|
|
|
|
BranchAll:
|
|
type: object
|
|
properties:
|
|
branches:
|
|
type: array
|
|
items:
|
|
type: object
|
|
properties:
|
|
summary:
|
|
type: string
|
|
skip_failure:
|
|
type: boolean
|
|
modules:
|
|
type: array
|
|
items:
|
|
$ref: "#/components/schemas/FlowModule"
|
|
required:
|
|
- modules
|
|
type:
|
|
type: string
|
|
enum:
|
|
- branchall
|
|
parallel:
|
|
type: boolean
|
|
required:
|
|
- branches
|
|
- type
|
|
|
|
AgentTool:
|
|
type: object
|
|
properties:
|
|
id:
|
|
type: string
|
|
summary:
|
|
type: string
|
|
value:
|
|
$ref: "#/components/schemas/ToolValue"
|
|
required:
|
|
- id
|
|
- value
|
|
|
|
ToolValue:
|
|
oneOf:
|
|
- $ref: "#/components/schemas/FlowModuleTool"
|
|
- $ref: "#/components/schemas/McpToolValue"
|
|
discriminator:
|
|
propertyName: tool_type
|
|
mapping:
|
|
flowmodule: "#/components/schemas/FlowModuleTool"
|
|
mcp: "#/components/schemas/McpToolValue"
|
|
|
|
FlowModuleTool:
|
|
allOf:
|
|
- type: object
|
|
properties:
|
|
tool_type:
|
|
type: string
|
|
enum:
|
|
- flowmodule
|
|
required:
|
|
- tool_type
|
|
- $ref: "#/components/schemas/FlowModuleValue"
|
|
|
|
McpToolValue:
|
|
type: object
|
|
properties:
|
|
tool_type:
|
|
type: string
|
|
enum:
|
|
- mcp
|
|
resource_path:
|
|
type: string
|
|
include_tools:
|
|
type: array
|
|
items:
|
|
type: string
|
|
exclude_tools:
|
|
type: array
|
|
items:
|
|
type: string
|
|
required:
|
|
- tool_type
|
|
- resource_path
|
|
|
|
AiAgent:
|
|
type: object
|
|
properties:
|
|
input_transforms:
|
|
type: object
|
|
additionalProperties:
|
|
$ref: "#/components/schemas/InputTransform"
|
|
tools:
|
|
type: array
|
|
items:
|
|
$ref: "#/components/schemas/AgentTool"
|
|
type:
|
|
type: string
|
|
enum:
|
|
- aiagent
|
|
parallel:
|
|
type: boolean
|
|
required:
|
|
- tools
|
|
- type
|
|
- input_transforms
|
|
|
|
Identity:
|
|
type: object
|
|
properties:
|
|
type:
|
|
type: string
|
|
enum:
|
|
- identity
|
|
flow:
|
|
type: boolean
|
|
|
|
required:
|
|
- type
|
|
|
|
FlowStatus:
|
|
type: object
|
|
properties:
|
|
step:
|
|
type: integer
|
|
modules:
|
|
type: array
|
|
items:
|
|
$ref: "#/components/schemas/FlowStatusModule"
|
|
user_states:
|
|
additionalProperties: true
|
|
preprocessor_module:
|
|
allOf:
|
|
- $ref: "#/components/schemas/FlowStatusModule"
|
|
failure_module:
|
|
allOf:
|
|
- $ref: "#/components/schemas/FlowStatusModule"
|
|
- type: object
|
|
properties:
|
|
parent_module:
|
|
type: string
|
|
retry:
|
|
type: object
|
|
properties:
|
|
fail_count:
|
|
type: integer
|
|
failed_jobs:
|
|
type: array
|
|
items:
|
|
type: string
|
|
format: uuid
|
|
required:
|
|
- step
|
|
- modules
|
|
- failure_module
|
|
|
|
FlowStatusModule:
|
|
type: object
|
|
properties:
|
|
type:
|
|
type: string
|
|
enum:
|
|
- WaitingForPriorSteps
|
|
- WaitingForEvents
|
|
- WaitingForExecutor
|
|
- InProgress
|
|
- Success
|
|
- Failure
|
|
id:
|
|
type: string
|
|
job:
|
|
type: string
|
|
format: uuid
|
|
count:
|
|
type: integer
|
|
progress:
|
|
type: integer
|
|
iterator:
|
|
type: object
|
|
properties:
|
|
index:
|
|
type: integer
|
|
itered:
|
|
type: array
|
|
items: {}
|
|
args: {}
|
|
flow_jobs:
|
|
type: array
|
|
items:
|
|
type: string
|
|
flow_jobs_success:
|
|
type: array
|
|
items:
|
|
type: boolean
|
|
flow_jobs_duration:
|
|
type: object
|
|
properties:
|
|
started_at:
|
|
type: array
|
|
items:
|
|
type: string
|
|
duration_ms:
|
|
type: array
|
|
items:
|
|
type: integer
|
|
branch_chosen:
|
|
type: object
|
|
properties:
|
|
type:
|
|
type: string
|
|
enum: [branch, default]
|
|
branch:
|
|
type: integer
|
|
required:
|
|
- type
|
|
branchall:
|
|
type: object
|
|
properties:
|
|
branch:
|
|
type: integer
|
|
len:
|
|
type: integer
|
|
required:
|
|
- branch
|
|
- len
|
|
approvers:
|
|
type: array
|
|
items:
|
|
type: object
|
|
properties:
|
|
resume_id:
|
|
type: integer
|
|
approver:
|
|
type: string
|
|
required:
|
|
- resume_id
|
|
- approver
|
|
failed_retries:
|
|
type: array
|
|
items:
|
|
type: string
|
|
format: uuid
|
|
skipped:
|
|
type: boolean
|
|
agent_actions:
|
|
type: array
|
|
items:
|
|
type: object
|
|
oneOf:
|
|
- type: object
|
|
properties:
|
|
job_id:
|
|
type: string
|
|
format: uuid
|
|
function_name:
|
|
type: string
|
|
type:
|
|
type: string
|
|
enum: [tool_call]
|
|
module_id:
|
|
type: string
|
|
required:
|
|
- job_id
|
|
- function_name
|
|
- type
|
|
- module_id
|
|
- type: object
|
|
properties:
|
|
call_id:
|
|
type: string
|
|
format: uuid
|
|
function_name:
|
|
type: string
|
|
resource_path:
|
|
type: string
|
|
type:
|
|
type: string
|
|
enum: [mcp_tool_call]
|
|
arguments:
|
|
type: object
|
|
required:
|
|
- call_id
|
|
- function_name
|
|
- resource_path
|
|
- type
|
|
- type: object
|
|
properties:
|
|
type:
|
|
type: string
|
|
enum: [message]
|
|
required:
|
|
- content
|
|
- type
|
|
agent_actions_success:
|
|
type: array
|
|
items:
|
|
type: boolean
|
|
required: [type]
|