{
  "openapi": "3.1.0",
  "info": {
    "title": "AutoAir API",
    "description": "No-code DAG builder for Apache Airflow 3",
    "version": "0.2.3"
  },
  "paths": {
    "/auth/config": {
      "get": {
        "tags": [
          "auth"
        ],
        "summary": "Auth Config",
        "description": "What the sign-in page offers (no authentication needed).",
        "operationId": "getAuthConfig",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuthConfig"
                }
              }
            }
          }
        }
      }
    },
    "/auth/session": {
      "get": {
        "tags": [
          "auth"
        ],
        "summary": "Auth Session",
        "description": "The caller's Airflow session: a bearer token, else the Airflow UI cookie, verified\nagainst Airflow (standalone). 401 when there is none or it is no longer valid \u2014 e.g.\nafter signing out of Airflow (the UI then signs AutoAir out too).",
        "operationId": "getAuthSession",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SessionInfo"
                }
              }
            }
          }
        }
      }
    },
    "/auth/refresh": {
      "post": {
        "tags": [
          "auth"
        ],
        "summary": "Refresh Session",
        "description": "Renew a cookie session through Airflow: any request carrying the cookie lets\nAirflow's JWT refresh middleware re-issue it (auth managers with refreshable sessions,\ne.g. Keycloak); the new cookie is passed on. Bearer tokens cannot be renewed (409).",
        "operationId": "refreshAuthSession",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SessionInfo"
                }
              }
            }
          },
          "401": {
            "description": "The Airflow session has ended (cookie cleared)."
          }
        }
      }
    },
    "/health": {
      "get": {
        "tags": [
          "ops"
        ],
        "summary": "Health",
        "operationId": "health",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Health"
                }
              }
            }
          }
        }
      }
    },
    "/ready": {
      "get": {
        "tags": [
          "ops"
        ],
        "summary": "Ready",
        "description": "Readiness: the catalog, and (server.ready_check_storage / ready_check_airflow) the\ndeploy target and Airflow's health endpoint. 503 when a check fails.",
        "operationId": "ready",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Readiness"
                }
              }
            }
          }
        }
      }
    },
    "/metrics": {
      "get": {
        "tags": [
          "ops"
        ],
        "summary": "Metrics",
        "operationId": "metrics",
        "responses": {
          "200": {
            "description": "Successful Response"
          }
        }
      }
    },
    "/meta": {
      "get": {
        "tags": [
          "meta"
        ],
        "summary": "Get Meta",
        "operationId": "getMeta",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MetaInfo"
                }
              }
            }
          }
        }
      }
    },
    "/me": {
      "get": {
        "tags": [
          "meta"
        ],
        "summary": "Get Me",
        "description": "The caller: user, AutoAir roles, effective permissions, deploy rights, auth mode.",
        "operationId": "getMe",
        "parameters": [
          {
            "name": "team",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 200
                },
                {
                  "type": "null"
                }
              ],
              "description": "Deploy rights on this team's target (multi-team).",
              "title": "Team"
            },
            "description": "Deploy rights on this team's target (multi-team)."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MeInfo"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/catalog/operators": {
      "get": {
        "tags": [
          "catalog"
        ],
        "summary": "List Operators",
        "operationId": "listOperators",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/OperatorSummary"
                  },
                  "type": "array",
                  "title": "Response Listoperators"
                }
              }
            }
          }
        }
      }
    },
    "/catalog/operators/{fqn}": {
      "get": {
        "tags": [
          "catalog"
        ],
        "summary": "Get Operator",
        "operationId": "getOperator",
        "parameters": [
          {
            "name": "fqn",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Fqn"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OperatorDetail"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/catalog/stats": {
      "get": {
        "tags": [
          "catalog"
        ],
        "summary": "Catalog Stats",
        "operationId": "getCatalogStats",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CatalogStats"
                }
              }
            }
          }
        }
      }
    },
    "/catalog/node-kinds": {
      "get": {
        "tags": [
          "catalog"
        ],
        "summary": "List Node Kinds",
        "operationId": "listNodeKinds",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/NodeKindInfo"
                  },
                  "type": "array",
                  "title": "Response Listnodekinds"
                }
              }
            }
          }
        }
      }
    },
    "/catalog/notifiers": {
      "get": {
        "tags": [
          "catalog"
        ],
        "summary": "List Notifiers",
        "operationId": "listNotifiers",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/NotifierSummary"
                  },
                  "type": "array",
                  "title": "Response Listnotifiers"
                }
              }
            }
          }
        }
      }
    },
    "/catalog/notifiers/{fqn}": {
      "get": {
        "tags": [
          "catalog"
        ],
        "summary": "Get Notifier",
        "operationId": "getNotifier",
        "parameters": [
          {
            "name": "fqn",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Fqn"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotifierDetail"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/catalog/decorators": {
      "get": {
        "tags": [
          "catalog"
        ],
        "summary": "List Decorators",
        "operationId": "listDecorators",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/TaskDecoratorInfo"
                  },
                  "type": "array",
                  "title": "Response Listdecorators"
                }
              }
            }
          }
        }
      }
    },
    "/catalog/queue-schemes": {
      "get": {
        "tags": [
          "catalog"
        ],
        "summary": "List Queue Schemes",
        "operationId": "listQueueSchemes",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/QueueScheme"
                  },
                  "type": "array",
                  "title": "Response Listqueueschemes"
                }
              }
            }
          }
        }
      }
    },
    "/catalog/connection-types": {
      "get": {
        "tags": [
          "catalog"
        ],
        "summary": "List Connection Types",
        "operationId": "listConnectionTypes",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/ConnectionTypeInfo"
                  },
                  "type": "array",
                  "title": "Response Listconnectiontypes"
                }
              }
            }
          }
        }
      }
    },
    "/catalog/refresh": {
      "post": {
        "tags": [
          "catalog"
        ],
        "summary": "Refresh Catalog",
        "operationId": "refreshCatalog",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CatalogStats"
                }
              }
            }
          }
        }
      }
    },
    "/catalog/diagnostics": {
      "get": {
        "tags": [
          "catalog"
        ],
        "summary": "Catalog Diagnostics",
        "description": "What the catalog build scanned and found, what was filtered out and why, failed\nmodules and applied package metadata (catalog:refresh permission).",
        "operationId": "getCatalogDiagnostics",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CatalogDiagnostics"
                }
              }
            }
          }
        }
      }
    },
    "/blueprints": {
      "get": {
        "tags": [
          "blueprints"
        ],
        "summary": "List Blueprints",
        "description": "Every blueprint version found (entry points, template folders, configured modules).",
        "operationId": "listBlueprints",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/BlueprintSummary"
                  },
                  "type": "array",
                  "title": "Response Listblueprints"
                }
              }
            }
          }
        }
      }
    },
    "/blueprints/status": {
      "get": {
        "tags": [
          "blueprints"
        ],
        "summary": "Blueprint Status",
        "operationId": "getBlueprintStatus",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BlueprintCatalogStatus"
                }
              }
            }
          }
        }
      }
    },
    "/blueprints/{name}/{version}": {
      "get": {
        "tags": [
          "blueprints"
        ],
        "summary": "Get Blueprint",
        "description": "One blueprint version with its config schema and default task preview.",
        "operationId": "getBlueprint",
        "parameters": [
          {
            "name": "name",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "maxLength": 100,
              "pattern": "^[a-z][a-z0-9_]*$",
              "title": "Name"
            }
          },
          {
            "name": "version",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "maximum": 10000,
              "minimum": 1,
              "title": "Version"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BlueprintDetail"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/blueprints/preview": {
      "post": {
        "tags": [
          "blueprints"
        ],
        "summary": "Preview Blueprint",
        "description": "The task ids the step renders with ``config``: the step is generated as in a deployed\nDAG and imported by the DagBag worker pool (rate limit group ``validate``).",
        "operationId": "previewBlueprint",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BlueprintPreviewRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BlueprintPreview"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/blueprints/refresh": {
      "post": {
        "tags": [
          "blueprints"
        ],
        "summary": "Refresh Blueprints",
        "operationId": "refreshBlueprints",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BlueprintCatalogStatus"
                }
              }
            }
          }
        }
      }
    },
    "/airflow/connections": {
      "get": {
        "tags": [
          "airflow"
        ],
        "summary": "Connections",
        "operationId": "listConnections",
        "parameters": [
          {
            "name": "team",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Team"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ConnectionInfo"
                  },
                  "title": "Response Listconnections"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "airflow"
        ],
        "summary": "Create Connection",
        "description": "Create the connection in Airflow (the caller's Airflow permissions apply).",
        "operationId": "createConnection",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ConnectionDraft"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConnectionInfo"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/airflow/connections/hook-meta": {
      "get": {
        "tags": [
          "airflow"
        ],
        "summary": "Connection Hook Meta",
        "description": "Per conn_type form metadata (standard field labels/visibility, typed extra fields)\nfor the new-connection form; empty when Airflow does not provide it.",
        "operationId": "listConnectionHookMeta",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/ConnectionHookMeta"
                  },
                  "type": "array",
                  "title": "Response Listconnectionhookmeta"
                }
              }
            }
          }
        }
      }
    },
    "/airflow/connections/test": {
      "post": {
        "tags": [
          "airflow"
        ],
        "summary": "Test Connection",
        "operationId": "testConnection",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ConnectionDraft"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConnectionTestResult"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/airflow/pools": {
      "get": {
        "tags": [
          "airflow"
        ],
        "summary": "Pools",
        "operationId": "listPools",
        "parameters": [
          {
            "name": "team",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Team"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PoolInfo"
                  },
                  "title": "Response Listpools"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/airflow/variables": {
      "get": {
        "tags": [
          "airflow"
        ],
        "summary": "Variables",
        "operationId": "listVariables",
        "parameters": [
          {
            "name": "team",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Team"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/VariableInfo"
                  },
                  "title": "Response Listvariables"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/airflow/assets": {
      "get": {
        "tags": [
          "airflow"
        ],
        "summary": "Assets",
        "operationId": "listAssets",
        "parameters": [
          {
            "name": "name_pattern",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Name Pattern"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": true
                  },
                  "title": "Response Listassets"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/airflow/assets/{asset_id}/events": {
      "post": {
        "tags": [
          "airflow"
        ],
        "summary": "Create Asset Event",
        "description": "Send a (test) asset event: downstream asset-scheduled DAGs react to it.",
        "operationId": "createAssetEvent",
        "parameters": [
          {
            "name": "asset_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "title": "Asset Id"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "anyOf": [
                  {
                    "$ref": "#/components/schemas/AssetEventRequest"
                  },
                  {
                    "type": "null"
                  }
                ],
                "title": "Body"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true,
                  "title": "Response Createassetevent"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/airflow/assets/{asset_id}/materialize": {
      "post": {
        "tags": [
          "airflow"
        ],
        "summary": "Materialize Asset",
        "description": "Trigger the DAG that produces the asset (Airflow's own DAG run permission applies).",
        "operationId": "materializeAsset",
        "parameters": [
          {
            "name": "asset_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "title": "Asset Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true,
                  "title": "Response Materializeasset"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/airflow/capabilities": {
      "get": {
        "tags": [
          "airflow"
        ],
        "summary": "Capabilities",
        "description": "Version-dependent run operations of the connected Airflow (falls back to the\ninstalled Airflow's version when the server cannot be asked).",
        "operationId": "getAirflowCapabilities",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AirflowCapabilities"
                }
              }
            }
          }
        }
      }
    },
    "/airflow/import-errors": {
      "get": {
        "tags": [
          "airflow"
        ],
        "summary": "Import Errors",
        "operationId": "listImportErrors",
        "parameters": [
          {
            "name": "filename",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Filename"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ImportErrorInfo"
                  },
                  "title": "Response Listimporterrors"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/airflow/bundles": {
      "get": {
        "tags": [
          "airflow"
        ],
        "summary": "Bundles",
        "operationId": "listDagBundles",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "additionalProperties": true,
                    "type": "object"
                  },
                  "type": "array",
                  "title": "Response Listdagbundles"
                }
              }
            }
          }
        }
      }
    },
    "/airflow/dags/{dag_id}/status": {
      "get": {
        "tags": [
          "airflow"
        ],
        "summary": "Dag Status",
        "operationId": "getDagStatus",
        "parameters": [
          {
            "name": "dag_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Dag Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DagStatus"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/airflow/dags/{dag_id}/paused": {
      "put": {
        "tags": [
          "airflow"
        ],
        "summary": "Set Paused",
        "description": "Pause / unpause in Airflow (the caller's token: Airflow enforces DAG edit rights).",
        "operationId": "setDagPaused",
        "parameters": [
          {
            "name": "dag_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Dag Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PauseRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DagStatus"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/airflow/dags/{dag_id}/scheduling-state": {
      "put": {
        "tags": [
          "airflow"
        ],
        "summary": "Set Scheduling State",
        "description": "Airflow >= 3.4: activate, drain or pause the DAG (PATCH scheduling_state).",
        "operationId": "setDagSchedulingState",
        "parameters": [
          {
            "name": "dag_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Dag Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SchedulingStateRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DagStatus"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/airflow/dags/{dag_id}/runs": {
      "get": {
        "tags": [
          "airflow"
        ],
        "summary": "Dag Runs",
        "operationId": "listDagRuns",
        "parameters": [
          {
            "name": "dag_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Dag Id"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 1000,
              "minimum": 1,
              "default": 25,
              "title": "Limit"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/DagRunInfo"
                  },
                  "title": "Response Listdagruns"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/airflow/dags/{dag_id}/runs/{run_id}/overlay": {
      "get": {
        "tags": [
          "airflow"
        ],
        "summary": "Run Overlay",
        "operationId": "getRunOverlay",
        "parameters": [
          {
            "name": "dag_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Dag Id"
            }
          },
          {
            "name": "run_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Run Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RunsOverlay"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/airflow/dags/{dag_id}/runs/{run_id}/tasks/{task_id}/log": {
      "get": {
        "tags": [
          "airflow"
        ],
        "summary": "Task Log",
        "operationId": "getTaskLog",
        "parameters": [
          {
            "name": "dag_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Dag Id"
            }
          },
          {
            "name": "run_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Run Id"
            }
          },
          {
            "name": "task_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Task Id"
            }
          },
          {
            "name": "try_number",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 1,
              "title": "Try Number"
            }
          },
          {
            "name": "map_index",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": -1,
              "title": "Map Index"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "title": "Response Gettasklog"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/airflow/dags/{dag_id}/runs/{run_id}/tasks/{task_id}/xcom": {
      "get": {
        "tags": [
          "airflow"
        ],
        "summary": "Task Xcom",
        "operationId": "getTaskXcom",
        "parameters": [
          {
            "name": "dag_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Dag Id"
            }
          },
          {
            "name": "run_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Run Id"
            }
          },
          {
            "name": "task_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Task Id"
            }
          },
          {
            "name": "map_index",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": -1,
              "title": "Map Index"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/XComInfo"
                  },
                  "title": "Response Gettaskxcom"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/airflow/dags/{dag_id}/versions": {
      "get": {
        "tags": [
          "airflow"
        ],
        "summary": "Dag Versions",
        "operationId": "listDagVersions",
        "parameters": [
          {
            "name": "dag_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Dag Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/DagVersionInfo"
                  },
                  "title": "Response Listdagversions"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/airflow/dags/{dag_id}/trigger": {
      "post": {
        "tags": [
          "airflow"
        ],
        "summary": "Trigger",
        "operationId": "triggerDag",
        "parameters": [
          {
            "name": "dag_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Dag Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TriggerRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TriggerResult"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/airflow/dags/{dag_id}/runs/{run_id}/clear": {
      "post": {
        "tags": [
          "airflow"
        ],
        "summary": "Clear Run",
        "operationId": "clearDagRun",
        "parameters": [
          {
            "name": "dag_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Dag Id"
            }
          },
          {
            "name": "run_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Run Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ClearRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true,
                  "title": "Response Cleardagrun"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/airflow/dags/{dag_id}/backfill": {
      "post": {
        "tags": [
          "airflow"
        ],
        "summary": "Backfill",
        "operationId": "createBackfill",
        "parameters": [
          {
            "name": "dag_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Dag Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BackfillRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true,
                  "title": "Response Createbackfill"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/airflow/mapping-check": {
      "post": {
        "tags": [
          "airflow"
        ],
        "summary": "Mapping Check",
        "description": "Check an environment's connection/variable mapping against the connected Airflow\n(the Airflow AutoAir deploys that environment to). Never an error: ids can come from a\nsecrets backend the REST API cannot list.",
        "operationId": "checkEnvironmentMapping",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MappingCheckRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MappingCheckResult"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/airflow/next-runs": {
      "post": {
        "tags": [
          "airflow"
        ],
        "summary": "Next Runs",
        "description": "Compute upcoming run times of the spec's schedule with Airflow's own timetable.",
        "operationId": "previewNextRuns",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NextRunsRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NextRunsResult"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/ai/status": {
      "get": {
        "tags": [
          "ai"
        ],
        "summary": "Ai Status",
        "operationId": "aiStatus",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AIStatus"
                }
              }
            }
          }
        }
      }
    },
    "/ai/generate": {
      "post": {
        "tags": [
          "ai"
        ],
        "summary": "Generate",
        "operationId": "generateDag",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GenerateRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenerationResult"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/ai/explain": {
      "post": {
        "tags": [
          "ai"
        ],
        "summary": "Explain",
        "operationId": "explainProblems",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ExplainRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExplainResult"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/ai/describe": {
      "post": {
        "tags": [
          "ai"
        ],
        "summary": "Describe",
        "operationId": "describeDag",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DescribeRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DescribeResult"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/ai/explain-dag": {
      "post": {
        "tags": [
          "ai"
        ],
        "summary": "Explain Dag Endpoint",
        "operationId": "explainDag",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ExplainDagRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DagExplanation"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/ai/explain-code": {
      "post": {
        "tags": [
          "ai"
        ],
        "summary": "Explain Code Endpoint",
        "operationId": "explainCode",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ExplainCodeRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExplainCodeResult"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/ai/explain-code/stream": {
      "post": {
        "tags": [
          "ai"
        ],
        "summary": "Explain Code Stream",
        "description": "Token-streamed explanation (``text/event-stream``; result kind ``explain_code``).",
        "operationId": "explainCodeStream",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ExplainCodeRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/ai/task-code": {
      "post": {
        "tags": [
          "ai"
        ],
        "summary": "Task Code",
        "operationId": "writeTaskCode",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TaskCodeRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TaskCodeResult"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/ai/review": {
      "post": {
        "tags": [
          "ai"
        ],
        "summary": "Review",
        "operationId": "reviewDag",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AnalysisRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FindingsReport"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/ai/leaks": {
      "post": {
        "tags": [
          "ai"
        ],
        "summary": "Leaks",
        "operationId": "scanLeaks",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AnalysisRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FindingsReport"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/ai/optimize": {
      "post": {
        "tags": [
          "ai"
        ],
        "summary": "Optimize",
        "operationId": "optimizeDag",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/OptimizeRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OptimizeReport"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/ai/fix": {
      "post": {
        "tags": [
          "ai"
        ],
        "summary": "Fix",
        "operationId": "fixDag",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FixRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FindingsReport"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/ai/apply": {
      "post": {
        "tags": [
          "ai"
        ],
        "summary": "Apply",
        "description": "Apply the patches of the selected findings and validate the result.",
        "operationId": "applyFindings",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ApplyRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AppliedPatches"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/ai/search": {
      "get": {
        "tags": [
          "ai"
        ],
        "summary": "Search",
        "description": "Hybrid retrieval over operators, docs, saved DAGs and templates.",
        "operationId": "aiSearch",
        "parameters": [
          {
            "name": "q",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 500,
              "title": "Q"
            }
          },
          {
            "name": "kinds",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "array",
                  "items": {
                    "enum": [
                      "operator",
                      "doc",
                      "spec",
                      "template"
                    ],
                    "type": "string"
                  }
                },
                {
                  "type": "null"
                }
              ],
              "title": "Kinds"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 50,
              "minimum": 1,
              "default": 10,
              "title": "Limit"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Hit"
                  },
                  "title": "Response Aisearch"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/ai/research/search": {
      "get": {
        "tags": [
          "ai"
        ],
        "summary": "Research Search",
        "description": "Search installed provider docs / examples and the knowledge base (air-gapped).",
        "operationId": "aiResearchSearch",
        "parameters": [
          {
            "name": "q",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 500,
              "title": "Q"
            }
          },
          {
            "name": "scope",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "array",
                  "items": {
                    "enum": [
                      "installed",
                      "knowledge",
                      "web"
                    ],
                    "type": "string"
                  }
                },
                {
                  "type": "null"
                }
              ],
              "title": "Scope"
            }
          },
          {
            "name": "package",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 200
                },
                {
                  "type": "null"
                }
              ],
              "title": "Package"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 30,
              "minimum": 1,
              "default": 8,
              "title": "Limit"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Hit"
                  },
                  "title": "Response Airesearchsearch"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/ai/ask": {
      "post": {
        "tags": [
          "ai"
        ],
        "summary": "Ask",
        "description": "Open-ended question answered by the tool-using agent (read-only tools).",
        "operationId": "askAssistant",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AskRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AgentResult"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/ai/ask/stream": {
      "post": {
        "tags": [
          "ai"
        ],
        "summary": "Ask Stream",
        "description": "The agent as a stream: tokens, tool calls/results, usage, then the ``agent`` result.",
        "operationId": "askAssistantStream",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AskRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/ai/writers": {
      "get": {
        "tags": [
          "ai"
        ],
        "summary": "Writers Info",
        "description": "Writer kinds and the installed environment their prompts are built from.",
        "operationId": "aiWriters",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WritersInfo"
                }
              }
            }
          }
        }
      }
    },
    "/ai/write": {
      "post": {
        "tags": [
          "ai"
        ],
        "summary": "Write",
        "description": "Write code with a specialised writer (validate-and-repair loop).",
        "operationId": "aiWrite",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WriteRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WriterResult"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/ai/write/stream": {
      "post": {
        "tags": [
          "ai"
        ],
        "summary": "Write Stream",
        "operationId": "aiWriteStream",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WriteRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/ai/me/model": {
      "get": {
        "tags": [
          "ai"
        ],
        "summary": "Get My Model",
        "operationId": "getMyAiModel",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserModelState"
                }
              }
            }
          }
        }
      },
      "put": {
        "tags": [
          "ai"
        ],
        "summary": "Set My Model",
        "operationId": "setMyAiModel",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UserLlmUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserModelState"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "ai"
        ],
        "summary": "Delete My Model",
        "operationId": "deleteMyAiModel",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserModelState"
                }
              }
            }
          }
        }
      }
    },
    "/ai/me/model/test": {
      "post": {
        "tags": [
          "ai"
        ],
        "summary": "Test My Model",
        "description": "Send a tiny prompt with the caller's effective model, or - with a body - with the\nunsaved model settings of the form (validated like a save, never stored).",
        "operationId": "testMyAiModel",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "anyOf": [
                  {
                    "$ref": "#/components/schemas/UserLlmUpdate"
                  },
                  {
                    "type": "null"
                  }
                ],
                "title": "Body"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExplainResult"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/ai/knowledge": {
      "get": {
        "tags": [
          "ai"
        ],
        "summary": "List Knowledge",
        "operationId": "listAiKnowledge",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/KnowledgeDoc"
                  },
                  "type": "array",
                  "title": "Response Listaiknowledge"
                }
              }
            }
          }
        }
      }
    },
    "/ai/knowledge/{doc_id}": {
      "get": {
        "tags": [
          "ai"
        ],
        "summary": "Get Knowledge",
        "operationId": "getAiKnowledge",
        "parameters": [
          {
            "name": "doc_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Doc Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/KnowledgeContent"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      },
      "put": {
        "tags": [
          "ai"
        ],
        "summary": "Put Knowledge",
        "description": "Upload a replacement of a built-in document, or a new custom document.",
        "operationId": "putAiKnowledge",
        "parameters": [
          {
            "name": "doc_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Doc Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/KnowledgeUpload"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/KnowledgeDoc"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "ai"
        ],
        "summary": "Reset Knowledge",
        "description": "Back to the default: delete the override and UI toggles (custom docs are removed).",
        "operationId": "resetAiKnowledge",
        "parameters": [
          {
            "name": "doc_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Doc Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/KnowledgeDoc"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "title": "Response Resetaiknowledge"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/ai/knowledge/{doc_id}/enabled": {
      "post": {
        "tags": [
          "ai"
        ],
        "summary": "Toggle Knowledge",
        "operationId": "toggleAiKnowledge",
        "parameters": [
          {
            "name": "doc_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Doc Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/KnowledgeToggle"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/KnowledgeDoc"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/ai/audit": {
      "get": {
        "tags": [
          "ai"
        ],
        "summary": "Ai Audit",
        "operationId": "aiAuditLog",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 1000,
              "minimum": 1,
              "default": 100,
              "title": "Limit"
            }
          },
          {
            "name": "user",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 200
                },
                {
                  "type": "null"
                }
              ],
              "title": "User"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/AiAuditRecord"
                  },
                  "title": "Response Aiauditlog"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/ai/prompts": {
      "get": {
        "tags": [
          "ai"
        ],
        "summary": "Ai Prompts",
        "operationId": "aiPrompts",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/PromptInfo"
                  },
                  "type": "array",
                  "title": "Response Aiprompts"
                }
              }
            }
          }
        }
      }
    },
    "/ai/assistant/info": {
      "get": {
        "tags": [
          "ai"
        ],
        "summary": "Assistant Info",
        "operationId": "assistantInfo",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssistantInfo"
                }
              }
            }
          }
        }
      }
    },
    "/ai/assistant/threads": {
      "get": {
        "tags": [
          "ai"
        ],
        "summary": "List Threads",
        "operationId": "listAssistantThreads",
        "parameters": [
          {
            "name": "mode",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "enum": [
                    "developer",
                    "admin"
                  ],
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Mode"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ThreadSummary"
                  },
                  "title": "Response Listassistantthreads"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/ai/assistant/threads/{thread_id}": {
      "get": {
        "tags": [
          "ai"
        ],
        "summary": "Get Thread",
        "operationId": "getAssistantThread",
        "parameters": [
          {
            "name": "thread_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Thread Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ChatThread"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      },
      "patch": {
        "tags": [
          "ai"
        ],
        "summary": "Rename Thread",
        "operationId": "renameAssistantThread",
        "parameters": [
          {
            "name": "thread_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Thread Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ThreadRename"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ThreadSummary"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "ai"
        ],
        "summary": "Delete Thread",
        "operationId": "deleteAssistantThread",
        "parameters": [
          {
            "name": "thread_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Thread Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ThreadSummary"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/ai/assistant/chat/stream": {
      "post": {
        "tags": [
          "ai"
        ],
        "summary": "Assistant Chat Stream",
        "description": "One assistant turn as a stream (tokens, tool calls/results, usage, then the\n``assistant_turn`` result: the stored user + assistant messages).",
        "operationId": "assistantChatStream",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ChatTurnRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/ai/assistant/threads/{thread_id}/proposals/{proposal_id}/decision": {
      "post": {
        "tags": [
          "ai"
        ],
        "summary": "Decide Proposal",
        "description": "Record that the user approved (applied in the editor), rejected or deployed a\nproposal. Approving a spec change needs ``spec:write``.",
        "operationId": "decideAssistantProposal",
        "parameters": [
          {
            "name": "thread_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Thread Id"
            }
          },
          {
            "name": "proposal_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Proposal Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProposalDecision"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Proposal"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/ai/approvals": {
      "get": {
        "tags": [
          "ai"
        ],
        "summary": "List Tool Approvals",
        "description": "The caller's tool approvals waiting for a decision (or being resumed).",
        "operationId": "listToolApprovals",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/ToolApprovalView"
                  },
                  "type": "array",
                  "title": "Response Listtoolapprovals"
                }
              }
            }
          }
        }
      }
    },
    "/ai/approvals/{approval_id}": {
      "get": {
        "tags": [
          "ai"
        ],
        "summary": "Get Tool Approval",
        "operationId": "getToolApproval",
        "parameters": [
          {
            "name": "approval_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Approval Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ToolApprovalView"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/ai/approvals/{approval_id}/calls/{call_id}/arguments": {
      "get": {
        "tags": [
          "ai"
        ],
        "summary": "Get Tool Call Arguments",
        "description": "Everything a pending call would run with, for review before approving it: the card\ncuts long arguments (``ai.approvals.max_argument_chars``); secrets stay masked here.",
        "operationId": "getToolCallArguments",
        "parameters": [
          {
            "name": "approval_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Approval Id"
            }
          },
          {
            "name": "call_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "maxLength": 200,
              "title": "Call Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ToolCallArguments"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/ai/approvals/{approval_id}/stream": {
      "post": {
        "tags": [
          "ai"
        ],
        "summary": "Resume Tool Approval",
        "description": "Approve or deny each pending tool call of a paused run and resume it as a stream.\n\nThe approval is claimed first (compare-and-set): a second decision - also on another\nreplica - gets 409, an expired approval 410. The stream ends with the result of the\npaused run's kind: ``assistant_turn`` (the completed chat message) or ``troubleshoot``\n(the analysis). Every decision is written to the AI audit log.",
        "operationId": "resumeToolApprovalStream",
        "parameters": [
          {
            "name": "approval_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Approval Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ToolApprovalDecision"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/ai/troubleshoot/options": {
      "get": {
        "tags": [
          "ai"
        ],
        "summary": "Troubleshoot Options",
        "operationId": "troubleshootOptions",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TroubleshootOptions"
                }
              }
            }
          }
        }
      }
    },
    "/ai/mcp/servers/{name}/tools": {
      "get": {
        "tags": [
          "ai"
        ],
        "summary": "Mcp Server Tools",
        "description": "Connect to an allowed external MCP server and list its tools (allow-list applied).\nThe caller must be allowed to use ``agent`` (troubleshooting: airflow:read; admin\nassistant: ai:admin or admin:panel).",
        "operationId": "aiMcpServerTools",
        "parameters": [
          {
            "name": "name",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Name"
            }
          },
          {
            "name": "agent",
            "in": "query",
            "required": false,
            "schema": {
              "enum": [
                "troubleshoot",
                "developer",
                "admin"
              ],
              "type": "string",
              "default": "troubleshoot",
              "title": "Agent"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/McpToolInfo"
                  },
                  "title": "Response Aimcpservertools"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/ai/troubleshoot/stream": {
      "post": {
        "tags": [
          "ai"
        ],
        "summary": "Troubleshoot Stream",
        "description": "Analyse a DAG run as a stream (evidence collection, tool calls, tokens), ending with\nthe stored ``troubleshoot`` analysis. Read-only: proposals need an explicit decision;\ntool calls that need approval (``ai.approvals``) pause it (``awaiting_approval``).",
        "operationId": "troubleshootStream",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TroubleshootRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/ai/troubleshoot/analyses": {
      "get": {
        "tags": [
          "ai"
        ],
        "summary": "List Analyses",
        "operationId": "listTroubleshootAnalyses",
        "parameters": [
          {
            "name": "dag_id",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 250
                },
                {
                  "type": "null"
                }
              ],
              "title": "Dag Id"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 200,
              "minimum": 1,
              "default": 30,
              "title": "Limit"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/AnalysisSummary"
                  },
                  "title": "Response Listtroubleshootanalyses"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/ai/troubleshoot/analyses/{analysis_id}": {
      "get": {
        "tags": [
          "ai"
        ],
        "summary": "Get Analysis",
        "operationId": "getTroubleshootAnalysis",
        "parameters": [
          {
            "name": "analysis_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Analysis Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TroubleshootAnalysis"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/ai/troubleshoot/analyses/{analysis_id}/decision": {
      "post": {
        "tags": [
          "ai"
        ],
        "summary": "Decide Analysis",
        "description": "Approve (returns the patched, validated spec and its generated code for the normal\ndeploy pipeline; needs ``spec:write``) or reject the analysis' proposed change.",
        "operationId": "decideTroubleshootAnalysis",
        "parameters": [
          {
            "name": "analysis_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Analysis Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AnalysisDecision"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DecisionResult"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/ai/troubleshoot/analyses/{analysis_id}/applied": {
      "post": {
        "tags": [
          "ai"
        ],
        "summary": "Analysis Applied",
        "description": "Record that the approved change went through the deploy pipeline.",
        "operationId": "troubleshootAnalysisApplied",
        "parameters": [
          {
            "name": "analysis_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Analysis Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AnalysisApplied"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TroubleshootAnalysis"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/ai/troubleshoot/analyses/{analysis_id}/actions/{action_id}": {
      "post": {
        "tags": [
          "ai"
        ],
        "summary": "Decide Action",
        "description": "Execute (hitl: the user's approval of this one action; needs ``run:manage`` and\n``features.runs``) or reject one proposed Airflow action of an analysis. Executing an\naction that already succeeded or was skipped returns the analysis unchanged.",
        "operationId": "decideTroubleshootAction",
        "parameters": [
          {
            "name": "analysis_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Analysis Id"
            }
          },
          {
            "name": "action_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Action Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ActionDecision"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TroubleshootAnalysis"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/ai/upgrade": {
      "post": {
        "tags": [
          "ai"
        ],
        "summary": "Upgrade",
        "description": "Airflow 2 \u2192 3 idioms of one spec, some saved DAGs or all of them (ruff AIR3 + rules;\nan LLM pass for a single DAG). Proposals come back as a reviewable diff.",
        "operationId": "aiUpgradeDags",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpgradeRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UpgradeReport"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/ai/deploy-message": {
      "post": {
        "tags": [
          "ai"
        ],
        "summary": "Generate Deploy Message",
        "description": "A commit subject and PR description summarising the spec diff of a deploy.",
        "operationId": "aiDeployMessage",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DeployMessageRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeployMessage"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/ai/rules": {
      "get": {
        "tags": [
          "ai"
        ],
        "summary": "List Rules",
        "operationId": "listAiRules",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/ProjectRules"
                  },
                  "type": "array",
                  "title": "Response Listairules"
                }
              }
            }
          }
        }
      }
    },
    "/ai/rules/effective": {
      "get": {
        "tags": [
          "ai"
        ],
        "summary": "Effective Rules Endpoint",
        "operationId": "effectiveAiRules",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EffectiveRules"
                }
              }
            }
          }
        }
      }
    },
    "/ai/rules/{scope}": {
      "put": {
        "tags": [
          "ai"
        ],
        "summary": "Put Rules",
        "operationId": "putAiRules",
        "parameters": [
          {
            "name": "scope",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Scope"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RulesUpdate"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectRules"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "ai"
        ],
        "summary": "Delete Rules",
        "operationId": "deleteAiRules",
        "parameters": [
          {
            "name": "scope",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Scope"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EffectiveRules"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/lsp/python/complete": {
      "post": {
        "tags": [
          "lsp"
        ],
        "summary": "Python Complete",
        "operationId": "pythonComplete",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PythonContext"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CompletionList"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/lsp/python/hover": {
      "post": {
        "tags": [
          "lsp"
        ],
        "summary": "Python Hover",
        "operationId": "pythonHover",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PythonContext"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HoverInfo"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/lsp/python/signatures": {
      "post": {
        "tags": [
          "lsp"
        ],
        "summary": "Python Signatures",
        "operationId": "pythonSignatures",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PythonContext"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SignatureList"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/lsp/shell/lint": {
      "post": {
        "tags": [
          "lsp"
        ],
        "summary": "Shell Lint",
        "description": "ShellCheck diagnostics for a bash command/script (Jinja masked). Optional dependency.",
        "operationId": "shellLint",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ShellLintRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ShellLintResult"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/lsp/validate": {
      "post": {
        "tags": [
          "lsp"
        ],
        "summary": "Validate Code Field",
        "description": "Syntax/lint diagnostics of a code field with the best checker installed (ast + ruff,\nstrict JSON, YAML, bash -n + ShellCheck, sqlglot, gofmt, javac, tsc/esbuild). Nothing\nis executed; the response says which tools ran or are missing.",
        "operationId": "validateCode",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ValidateRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidateResult"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/lsp/servers": {
      "get": {
        "tags": [
          "lsp"
        ],
        "summary": "Lsp Servers",
        "description": "Which language servers are installed (the editor falls back to the built-in\ncompletions for a missing one).",
        "operationId": "lspServers",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LanguageServers"
                }
              }
            }
          }
        }
      }
    },
    "/lsp/session": {
      "post": {
        "tags": [
          "lsp"
        ],
        "summary": "Lsp Session",
        "description": "Ticket to open a language-server WebSocket for ``language``.",
        "operationId": "lspSession",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LspSessionRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LspSessionTicket"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/codegen": {
      "post": {
        "tags": [
          "tools"
        ],
        "summary": "Generate Code",
        "operationId": "generateCode",
        "parameters": [
          {
            "name": "environment",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 250
                },
                {
                  "type": "null"
                }
              ],
              "description": "Render with this environment's overlay and connection/variable mapping applied (the read-only environment preview). Raw code DAGs render unchanged.",
              "title": "Environment"
            },
            "description": "Render with this environment's overlay and connection/variable mapping applied (the read-only environment preview). Raw code DAGs render unchanged."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DagSpec"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CodegenResult"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/validate": {
      "post": {
        "tags": [
          "tools"
        ],
        "summary": "Validate",
        "description": "``environment`` (default: ``default_environment``) applies that environment's overlay\nand selects the policy rules that match it.",
        "operationId": "validateSpec",
        "parameters": [
          {
            "name": "import_check",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": false,
              "title": "Import Check"
            }
          },
          {
            "name": "environment",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Environment"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DagSpec"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationReport"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/export/dag-factory": {
      "post": {
        "tags": [
          "tools"
        ],
        "summary": "Export",
        "operationId": "exportDagFactory",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DagSpec"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DagFactoryExport"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/schema/spec": {
      "get": {
        "tags": [
          "tools"
        ],
        "summary": "Spec Schema",
        "operationId": "getSpecSchema",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "type": "object",
                  "title": "Response Getspecschema"
                }
              }
            }
          }
        }
      }
    },
    "/review/rules": {
      "post": {
        "tags": [
          "review"
        ],
        "summary": "Review Rules",
        "description": "Best-practice review by rules: retries, timeouts, idempotency, Airflow 3 idioms,\nownership and docs. Findings carry JSON patches; ``proposed_spec`` has them applied.",
        "operationId": "reviewDagRules",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RulesRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FindingsReport"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/lint/secrets": {
      "post": {
        "tags": [
          "review"
        ],
        "summary": "Scan Secrets",
        "description": "Leak scan by rules: hard-coded secrets, credentials exposed through logs, templates,\nXCom or command lines, and unbounded resources. Secret values are masked.",
        "operationId": "scanDagSecrets",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RulesRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FindingsReport"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/interchange/yaml/export": {
      "post": {
        "tags": [
          "interchange"
        ],
        "summary": "Export Yaml",
        "description": "Airflow 3.4 native YAML Dag (AIP-85).",
        "operationId": "exportYamlDag",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DagSpec"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/YamlExport"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/interchange/yaml/import": {
      "post": {
        "tags": [
          "interchange"
        ],
        "summary": "Import Yaml",
        "operationId": "importYamlDag",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/YamlBody"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/YamlImportResult"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/interchange/spec/import": {
      "post": {
        "tags": [
          "interchange"
        ],
        "summary": "Import Spec Json",
        "description": "Parses an AutoAir spec file (older spec versions are migrated).",
        "operationId": "importSpecJson",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SpecJsonBody"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DagSpec"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/interchange/python/import": {
      "post": {
        "tags": [
          "interchange"
        ],
        "summary": "Import Python",
        "description": "Reverse-engineer a hand-written Python DAG file (runs in an isolated subprocess).",
        "operationId": "importPythonDag",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SourceBody"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PythonImportResult"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/interchange/python/sync": {
      "post": {
        "tags": [
          "interchange"
        ],
        "summary": "Sync Python Code",
        "description": "Code mode: import the edited DAG file into a spec (syntax checked first, then executed\nin an isolated subprocess). Problems come back located when possible; nothing is saved.",
        "operationId": "syncPythonCode",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CodeSyncBody"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CodeSyncResult"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/interchange/airflow/{dag_id}/import": {
      "post": {
        "tags": [
          "interchange"
        ],
        "summary": "Import From Airflow",
        "description": "Fetch an existing DAG's source from Airflow (``/dagSources``) and import it.",
        "operationId": "importAirflowDag",
        "parameters": [
          {
            "name": "dag_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Dag Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PythonImportResult"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/interchange/bulk/scan": {
      "post": {
        "tags": [
          "interchange"
        ],
        "summary": "Bulk Import",
        "description": "Import every DAG file of a repository with the Python importer (isolated subprocesses)\nand report per file what was found, which DAGs convert and which already exist. Nothing\nis saved: the client deploys the selected specs (``create_only``, or the stored etag for\na confirmed overwrite).",
        "operationId": "bulkImportDags",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BulkImportRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BulkImportResult"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/templates": {
      "get": {
        "tags": [
          "templates"
        ],
        "summary": "List Templates",
        "operationId": "listTemplates",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/TemplateSummary"
                  },
                  "title": "Response Listtemplates"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "templates"
        ],
        "summary": "Save Template",
        "description": "Create a template, or publish a new version of a saved one (operator templates get\nthe next version number; older versions stay readable under `/versions`). A template\nwith hand-written DAG code needs `code:raw`.",
        "operationId": "saveTemplate",
        "parameters": [
          {
            "name": "if-match",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Etag of the template as last read: the write happens only if nobody changed it since (409 otherwise).",
              "title": "If-Match"
            },
            "description": "Etag of the template as last read: the write happens only if nobody changed it since (409 otherwise)."
          },
          {
            "name": "if-none-match",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "`*`: create only; 409 when a template with this id exists.",
              "title": "If-None-Match"
            },
            "description": "`*`: create only; 409 when a template with this id exists."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TemplateInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Template"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/templates/{template_id}": {
      "get": {
        "tags": [
          "templates"
        ],
        "summary": "Get Template",
        "operationId": "getTemplate",
        "parameters": [
          {
            "name": "template_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Template Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Template"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "templates"
        ],
        "summary": "Delete Template",
        "operationId": "deleteTemplate",
        "parameters": [
          {
            "name": "template_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Template Id"
            }
          },
          {
            "name": "if-match",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Etag of the template as last read: the write happens only if nobody changed it since (409 otherwise).",
              "title": "If-Match"
            },
            "description": "Etag of the template as last read: the write happens only if nobody changed it since (409 otherwise)."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeleteTemplateResult"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/templates/{template_id}/versions": {
      "get": {
        "tags": [
          "templates"
        ],
        "summary": "List Template Versions",
        "description": "Stored versions of a template, newest first (operator templates keep a history).",
        "operationId": "listTemplateVersions",
        "parameters": [
          {
            "name": "template_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Template Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/TemplateVersionInfo"
                  },
                  "title": "Response Listtemplateversions"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/templates/{template_id}/versions/{version}": {
      "get": {
        "tags": [
          "templates"
        ],
        "summary": "Get Template Version",
        "operationId": "getTemplateVersion",
        "parameters": [
          {
            "name": "template_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Template Id"
            }
          },
          {
            "name": "version",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Version"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Template"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/icons": {
      "get": {
        "tags": [
          "icons"
        ],
        "summary": "List Icons",
        "description": "Bundled integration logos and custom icons.",
        "operationId": "listIcons",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/IconInfo"
                  },
                  "type": "array",
                  "title": "Response Listicons"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "icons"
        ],
        "summary": "Upload Icon",
        "description": "Store a custom icon (re-encoded server-side as a small PNG).",
        "operationId": "uploadIcon",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/IconUpload"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IconInfo"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/icons/assignments": {
      "get": {
        "tags": [
          "icons"
        ],
        "summary": "Get Assignments",
        "operationId": "getIconAssignments",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IconAssignments"
                }
              }
            }
          }
        }
      },
      "put": {
        "tags": [
          "icons"
        ],
        "summary": "Assign Icon",
        "description": "Default icon for every node of an operator class (or a whole provider).",
        "operationId": "assignIcon",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/IconAssignment"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IconAssignments"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/icons/{icon_id}": {
      "delete": {
        "tags": [
          "icons"
        ],
        "summary": "Delete Icon",
        "operationId": "deleteIcon",
        "parameters": [
          {
            "name": "icon_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Icon Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "boolean"
                  },
                  "title": "Response Deleteicon"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      },
      "get": {
        "tags": [
          "icons"
        ],
        "summary": "Get Icon",
        "operationId": "getIcon",
        "parameters": [
          {
            "name": "icon_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Icon Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "image/png": {},
              "image/svg+xml": {}
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/specs": {
      "get": {
        "tags": [
          "specs"
        ],
        "summary": "List Specs",
        "operationId": "listSpecs",
        "parameters": [
          {
            "name": "environment",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 64
                },
                {
                  "type": "null"
                }
              ],
              "description": "Environment to read (git targets: its branch); default: default_environment.",
              "title": "Environment"
            },
            "description": "Environment to read (git targets: its branch); default: default_environment."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/SpecSummary"
                  },
                  "title": "Response Listspecs"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/specs/{dag_id}": {
      "get": {
        "tags": [
          "specs"
        ],
        "summary": "Get Spec",
        "operationId": "getSpec",
        "parameters": [
          {
            "name": "dag_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Dag Id"
            }
          },
          {
            "name": "environment",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 64
                },
                {
                  "type": "null"
                }
              ],
              "description": "Environment to read (git targets: its branch); default: default_environment.",
              "title": "Environment"
            },
            "description": "Environment to read (git targets: its branch); default: default_environment."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StoredSpecResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      },
      "put": {
        "tags": [
          "specs"
        ],
        "summary": "Deploy Spec",
        "operationId": "deploySpec",
        "parameters": [
          {
            "name": "dag_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Dag Id"
            }
          },
          {
            "name": "if-match",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "If-Match"
            }
          },
          {
            "name": "X-AutoAir-Git-Token",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Git token for this one write (storage.git.request_token): used instead of the configured credentials, never stored or logged. HTTPS only.",
              "title": "X-Autoair-Git-Token"
            },
            "description": "Git token for this one write (storage.git.request_token): used instead of the configured credentials, never stored or logged. HTTPS only."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DeployRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeployResult"
                }
              }
            }
          },
          "202": {
            "description": "Stored as a deploy proposal awaiting approval (status 'pending_approval'); nothing went live.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeployResult"
                }
              }
            }
          },
          "428": {
            "description": "The DAG already exists and the request carries no base_etag / If-Match (storage.require_base_etag); the ETag header holds the current etag."
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "specs"
        ],
        "summary": "Delete Spec",
        "description": "Delete a DAG (spec and DAG files). Governed like a deploy: on git targets it follows\nthe target's mode and iam.force_pr_without_direct_push (a pull request removes the\nfile), a delete that goes live needs 'deploy', and with iam.require_approval it needs\nanother user's approval first (else it is stored as a delete proposal, HTTP 202).",
        "operationId": "deleteSpec",
        "parameters": [
          {
            "name": "dag_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Dag Id"
            }
          },
          {
            "name": "git_conn_id",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 250
                },
                {
                  "type": "null"
                }
              ],
              "description": "per_user git credentials: connection to use.",
              "title": "Git Conn Id"
            },
            "description": "per_user git credentials: connection to use."
          },
          {
            "name": "if-match",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "If-Match"
            }
          },
          {
            "name": "X-AutoAir-Git-Token",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Git token for this one write (storage.git.request_token): used instead of the configured credentials, never stored or logged. HTTPS only.",
              "title": "X-Autoair-Git-Token"
            },
            "description": "Git token for this one write (storage.git.request_token): used instead of the configured credentials, never stored or logged. HTTPS only."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeleteResult"
                }
              }
            }
          },
          "202": {
            "description": "Stored as a delete proposal awaiting approval (status 'pending_approval'); nothing was deleted.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeleteResult"
                }
              }
            }
          },
          "409": {
            "description": "The If-Match etag is stale: the DAG changed since it was loaded."
          },
          "428": {
            "description": "The DAG exists and the request carries no If-Match (storage.require_base_etag); the ETag header holds the current etag."
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/specs/{dag_id}/audit": {
      "get": {
        "tags": [
          "specs"
        ],
        "summary": "Spec Audit",
        "operationId": "getSpecAudit",
        "parameters": [
          {
            "name": "dag_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Dag Id"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 1000,
              "minimum": 1,
              "default": 50,
              "title": "Limit"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": true
                  },
                  "title": "Response Getspecaudit"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/specs/{dag_id}/reviews": {
      "get": {
        "tags": [
          "specs"
        ],
        "summary": "List Reviews",
        "operationId": "listSpecReviews",
        "parameters": [
          {
            "name": "dag_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Dag Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Review"
                  },
                  "title": "Response Listspecreviews"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "specs"
        ],
        "summary": "Review Spec",
        "description": "Approve, request changes on, or comment a spec version: a stored version or a deploy\nproposal (by its etag). The author of a proposal cannot approve it.",
        "operationId": "reviewSpec",
        "parameters": [
          {
            "name": "dag_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Dag Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ReviewRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Review"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/specs/{dag_id}/proposals": {
      "get": {
        "tags": [
          "specs"
        ],
        "summary": "List Proposals",
        "description": "Pending deploy proposals of a DAG (newest first).",
        "operationId": "listProposals",
        "parameters": [
          {
            "name": "dag_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Dag Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ProposalSummary"
                  },
                  "title": "Response Listproposals"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/specs/{dag_id}/proposals/{etag}": {
      "get": {
        "tags": [
          "specs"
        ],
        "summary": "Get Proposal",
        "description": "A deploy proposal: the proposed spec, its reviews, and the stored spec (diff base).",
        "operationId": "getProposal",
        "parameters": [
          {
            "name": "dag_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Dag Id"
            }
          },
          {
            "name": "etag",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Etag"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProposalDetail"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/specs/{dag_id}/deploy-preview": {
      "post": {
        "tags": [
          "specs"
        ],
        "summary": "Preview Deploy",
        "description": "The commit message / pull request description a deploy of ``body`` would produce\n(nothing is written; the validation is static).",
        "operationId": "previewDeploy",
        "parameters": [
          {
            "name": "dag_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Dag Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DeployRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeployPreview"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/specs/{dag_id}/source-preview": {
      "post": {
        "tags": [
          "specs"
        ],
        "summary": "Preview Source",
        "description": "What a deploy of ``body.spec`` would write as the DAG file, without writing: the\nsource policy in force, whether the file in the target was changed outside AutoAir, and\nthe unified diff of the generated or patched file. Preserve plans import the existing\nand the patched file in a sandboxed subprocess (round-trip check), so this can take a\nfew seconds.",
        "operationId": "previewSource",
        "parameters": [
          {
            "name": "dag_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Dag Id"
            }
          },
          {
            "name": "X-AutoAir-Git-Token",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Git token for this one write (storage.git.request_token): used instead of the configured credentials, never stored or logged. HTTPS only.",
              "title": "X-Autoair-Git-Token"
            },
            "description": "Git token for this one write (storage.git.request_token): used instead of the configured credentials, never stored or logged. HTTPS only."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SourcePreviewRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SourcePlan"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/specs/{dag_id}/proposals/{etag}/deploy": {
      "post": {
        "tags": [
          "specs"
        ],
        "summary": "Deploy Proposal",
        "description": "Deploy an approved proposal. Anyone holding ``deploy`` may, including its author,\nonce another user approved it.",
        "operationId": "deployProposal",
        "parameters": [
          {
            "name": "dag_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Dag Id"
            }
          },
          {
            "name": "etag",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Etag"
            }
          },
          {
            "name": "X-AutoAir-Git-Token",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Git token for this one write (storage.git.request_token): used instead of the configured credentials, never stored or logged. HTTPS only.",
              "title": "X-Autoair-Git-Token"
            },
            "description": "Git token for this one write (storage.git.request_token): used instead of the configured credentials, never stored or logged. HTTPS only."
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "anyOf": [
                  {
                    "$ref": "#/components/schemas/ProposalDeployRequest"
                  },
                  {
                    "type": "null"
                  }
                ],
                "title": "Body"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeployResult"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/specs/{dag_id}/proposals/{etag}/delete": {
      "post": {
        "tags": [
          "specs"
        ],
        "summary": "Execute Delete Proposal",
        "description": "Execute an approved delete proposal. Anyone holding ``spec:delete`` and ``deploy``\nmay, including its author, once another user approved it; the delete conflicts (409)\nwhen the DAG changed since it was proposed.",
        "operationId": "executeDeleteProposal",
        "parameters": [
          {
            "name": "dag_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Dag Id"
            }
          },
          {
            "name": "etag",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Etag"
            }
          },
          {
            "name": "git_conn_id",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 250
                },
                {
                  "type": "null"
                }
              ],
              "description": "per_user git credentials: connection to use.",
              "title": "Git Conn Id"
            },
            "description": "per_user git credentials: connection to use."
          },
          {
            "name": "X-AutoAir-Git-Token",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Git token for this one write (storage.git.request_token): used instead of the configured credentials, never stored or logged. HTTPS only.",
              "title": "X-Autoair-Git-Token"
            },
            "description": "Git token for this one write (storage.git.request_token): used instead of the configured credentials, never stored or logged. HTTPS only."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeleteResult"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/vcs/status": {
      "get": {
        "tags": [
          "vcs"
        ],
        "summary": "Get Storage Status",
        "operationId": "getStorageStatus",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TargetStatus"
                }
              }
            }
          }
        }
      }
    },
    "/vcs/{dag_id}/history": {
      "get": {
        "tags": [
          "vcs"
        ],
        "summary": "List Versions",
        "operationId": "listVersions",
        "parameters": [
          {
            "name": "dag_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Dag Id"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 500,
              "minimum": 1,
              "default": 50,
              "title": "Limit"
            }
          },
          {
            "name": "environment",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 64
                },
                {
                  "type": "null"
                }
              ],
              "description": "Environment to read (git targets: its branch); default: default_environment.",
              "title": "Environment"
            },
            "description": "Environment to read (git targets: its branch); default: default_environment."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/VersionInfo"
                  },
                  "title": "Response Listversions"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/vcs/{dag_id}/versions/{version}": {
      "get": {
        "tags": [
          "vcs"
        ],
        "summary": "Get Version",
        "operationId": "getVersion",
        "parameters": [
          {
            "name": "dag_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Dag Id"
            }
          },
          {
            "name": "version",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Version"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DagSpec"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/vcs/{dag_id}/diff": {
      "get": {
        "tags": [
          "vcs"
        ],
        "summary": "Diff With Version",
        "operationId": "diffWithVersion",
        "parameters": [
          {
            "name": "dag_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Dag Id"
            }
          },
          {
            "name": "from",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "description": "Version id or 'current'.",
              "title": "From"
            },
            "description": "Version id or 'current'."
          },
          {
            "name": "to",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "description": "Version id or 'current' (default).",
              "default": "current",
              "title": "To"
            },
            "description": "Version id or 'current' (default)."
          },
          {
            "name": "environment",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 64
                },
                {
                  "type": "null"
                }
              ],
              "description": "Environment to read (git targets: its branch); default: default_environment.",
              "title": "Environment"
            },
            "description": "Environment to read (git targets: its branch); default: default_environment."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SpecDiff"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/vcs/diff": {
      "post": {
        "tags": [
          "vcs"
        ],
        "summary": "Diff Versions",
        "operationId": "diffVersions",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DiffRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SpecDiff"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/vcs/merge": {
      "post": {
        "tags": [
          "vcs"
        ],
        "summary": "Merge",
        "operationId": "mergeSpecs",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MergeRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MergeResult"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/vcs/{dag_id}/promote": {
      "post": {
        "tags": [
          "vcs"
        ],
        "summary": "Promote Environment",
        "description": "Open a promotion pull request. With AutoAir's services (not in a bare router) the\ncommit/PR carry the deploy context, the git token typed for this request (header\nX-AutoAir-Git-Token, storage.git.request_token) or the user's own git credentials\n(per_user mode) are used, and the promotion is audited (autoair.governance).",
        "operationId": "promoteEnvironment",
        "parameters": [
          {
            "name": "dag_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Dag Id"
            }
          },
          {
            "name": "X-AutoAir-Git-Token",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Git token for this one write (storage.git.request_token): used instead of the configured credentials, never stored or logged. HTTPS only.",
              "title": "X-Autoair-Git-Token"
            },
            "description": "Git token for this one write (storage.git.request_token): used instead of the configured credentials, never stored or logged. HTTPS only."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PromoteRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SaveResult"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/runner/test-task": {
      "post": {
        "tags": [
          "runner"
        ],
        "summary": "Test Task",
        "operationId": "testTask",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TestTaskRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TaskTestResult"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/runner/test-dag": {
      "post": {
        "tags": [
          "runner"
        ],
        "summary": "Test Dag",
        "operationId": "testDag",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TestDagRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DagTestResult"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/collab/{dag_id}/ticket": {
      "post": {
        "tags": [
          "collab"
        ],
        "summary": "Collab Ticket",
        "description": "Short-lived, single-use ticket for one connection to the DAG's live editing room,\nbound to the caller and the room (needs DAG edit permission).",
        "operationId": "collabTicket",
        "parameters": [
          {
            "name": "dag_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Dag Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CollabTicket"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/deploy-target": {
      "get": {
        "tags": [
          "deploy-target"
        ],
        "summary": "Get Deploy Target",
        "description": "Current deploy target and the options this Airflow offers (bundles, git checkout).",
        "operationId": "getDeployTarget",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeployTargetInfo"
                }
              }
            }
          }
        }
      },
      "put": {
        "tags": [
          "deploy-target"
        ],
        "summary": "Set Deploy Target",
        "description": "Test, persist (secrets excluded \u2014 use an Airflow connection) and switch now. The\nadministrator's policy (allowed target kinds, forced git connection, credential rules)\nis enforced: disallowed kinds are refused, policy fields are taken from configuration.",
        "operationId": "setDeployTarget",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StorageSettings"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeployTargetInfo"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "deploy-target"
        ],
        "summary": "Reset Deploy Target",
        "description": "Forget the target chosen in the UI and go back to AUTOAIR_STORAGE__* settings.",
        "operationId": "resetDeployTarget",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeployTargetInfo"
                }
              }
            }
          }
        }
      }
    },
    "/deploy-target/git-credentials": {
      "get": {
        "tags": [
          "deploy-target"
        ],
        "summary": "Get Git Credentials",
        "description": "Which credentials the caller's git deploys use: a token typed per deploy\n(storage.git.request_token), the forced or shared connection, or their own connection\n(per-user credentials, looked up with their token so Airflow's RBAC applies).",
        "operationId": "getGitCredentials",
        "parameters": [
          {
            "name": "team",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 250
                },
                {
                  "type": "null"
                }
              ],
              "description": "Team whose deploy target (team_storage) applies.",
              "title": "Team"
            },
            "description": "Team whose deploy target (team_storage) applies."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GitCredentialChoice"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/deploy-target/test": {
      "post": {
        "tags": [
          "deploy-target"
        ],
        "summary": "Test Deploy Target",
        "operationId": "testDeployTarget",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StorageSettings"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeployTargetTest"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/marketplace": {
      "get": {
        "tags": [
          "marketplace"
        ],
        "summary": "List Marketplace",
        "description": "Entries of every configured source (signature-verified indexes only).",
        "operationId": "listMarketplace",
        "parameters": [
          {
            "name": "refresh",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": false,
              "title": "Refresh"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MarketplaceListing"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/marketplace/install": {
      "post": {
        "tags": [
          "marketplace"
        ],
        "summary": "Install Entry",
        "description": "Downloads a template/fragment, checks its SHA-256 against the signed index, saves it.\nA template with hand-written DAG code needs `code:raw`, like saving it directly.",
        "operationId": "installMarketplaceEntry",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/InstallRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Template"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/config": {
      "get": {
        "tags": [
          "config"
        ],
        "summary": "Get Config",
        "description": "Every effective setting with its source, type, default and description.",
        "operationId": "getConfig",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConfigInfo"
                }
              }
            }
          }
        }
      }
    },
    "/admin/overview": {
      "get": {
        "tags": [
          "admin"
        ],
        "summary": "Admin Overview",
        "description": "Versions, backends, feature flags, replicas and catalog statistics.",
        "operationId": "adminOverview",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdminOverview"
                }
              }
            }
          }
        }
      }
    },
    "/admin/audit": {
      "get": {
        "tags": [
          "admin"
        ],
        "summary": "Admin Audit",
        "description": "The audit trail, newest first, filtered (``since`` inclusive, ``until`` exclusive).",
        "operationId": "adminAudit",
        "parameters": [
          {
            "name": "user",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 250
                },
                {
                  "type": "null"
                }
              ],
              "title": "User"
            }
          },
          {
            "name": "action",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 250
                },
                {
                  "type": "null"
                }
              ],
              "title": "Action"
            }
          },
          {
            "name": "dag_id",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 250
                },
                {
                  "type": "null"
                }
              ],
              "title": "Dag Id"
            }
          },
          {
            "name": "since",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 250
                },
                {
                  "type": "null"
                }
              ],
              "title": "Since"
            }
          },
          {
            "name": "until",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 250
                },
                {
                  "type": "null"
                }
              ],
              "title": "Until"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 1000,
              "minimum": 1,
              "default": 100,
              "title": "Limit"
            }
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 1000000,
              "minimum": 0,
              "default": 0,
              "title": "Offset"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuditPage"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/admin/audit.csv": {
      "get": {
        "tags": [
          "admin"
        ],
        "summary": "Admin Audit Csv",
        "description": "The filtered audit trail as CSV (formula-like cells are neutralised). ``limit``\ndefaults to ``admin.export_default`` and may not exceed ``admin.export_limit``.",
        "operationId": "adminAuditCsv",
        "parameters": [
          {
            "name": "user",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 250
                },
                {
                  "type": "null"
                }
              ],
              "title": "User"
            }
          },
          {
            "name": "action",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 250
                },
                {
                  "type": "null"
                }
              ],
              "title": "Action"
            }
          },
          {
            "name": "dag_id",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 250
                },
                {
                  "type": "null"
                }
              ],
              "title": "Dag Id"
            }
          },
          {
            "name": "since",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 250
                },
                {
                  "type": "null"
                }
              ],
              "title": "Since"
            }
          },
          {
            "name": "until",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 250
                },
                {
                  "type": "null"
                }
              ],
              "title": "Until"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "integer",
                  "maximum": 1000000,
                  "minimum": 1
                },
                {
                  "type": "null"
                }
              ],
              "title": "Limit"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "text/csv": {}
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/admin/templates": {
      "get": {
        "tags": [
          "admin"
        ],
        "summary": "Admin Templates",
        "description": "Every template (built-in and saved), saved ones first.",
        "operationId": "adminTemplates",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/TemplateSummary"
                  },
                  "type": "array",
                  "title": "Response Admintemplates"
                }
              }
            }
          }
        }
      }
    },
    "/admin/templates/{template_id}": {
      "delete": {
        "tags": [
          "admin"
        ],
        "summary": "Admin Delete Template",
        "operationId": "adminDeleteTemplate",
        "parameters": [
          {
            "name": "template_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Template Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CacheAction"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/admin/users": {
      "get": {
        "tags": [
          "admin"
        ],
        "summary": "Admin Users",
        "description": "Users seen by this AutoAir (their AutoAir roles when last seen) and in the audit.",
        "operationId": "adminUsers",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/SeenUser"
                  },
                  "type": "array",
                  "title": "Response Adminusers"
                }
              }
            }
          }
        }
      }
    },
    "/admin/ai-usage": {
      "get": {
        "tags": [
          "admin"
        ],
        "summary": "Admin Ai Usage",
        "description": "Requests, tokens and cost per user and model over the last ``days`` (AI audit log).",
        "operationId": "adminAiUsage",
        "parameters": [
          {
            "name": "days",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 3660,
              "minimum": 1,
              "default": 30,
              "title": "Days"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/UsageRow"
                  },
                  "title": "Response Adminaiusage"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/admin/proposals": {
      "get": {
        "tags": [
          "admin"
        ],
        "summary": "Admin Proposals",
        "description": "Pending deploy proposals of every DAG and recent review verdicts.",
        "operationId": "adminProposals",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProposalsOverview"
                }
              }
            }
          }
        }
      }
    },
    "/admin/database": {
      "get": {
        "tags": [
          "admin"
        ],
        "summary": "Admin Database",
        "description": "State backend, schema version, pending migrations and table sizes.",
        "operationId": "adminDatabase",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DatabaseStatus"
                }
              }
            }
          }
        }
      }
    },
    "/admin/database/upgrade": {
      "post": {
        "tags": [
          "admin"
        ],
        "summary": "Admin Database Upgrade",
        "description": "Apply pending schema migrations (like ``autoair db upgrade``).",
        "operationId": "adminDatabaseUpgrade",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DatabaseStatus"
                }
              }
            }
          }
        }
      }
    },
    "/admin/caches": {
      "get": {
        "tags": [
          "admin"
        ],
        "summary": "Admin Caches",
        "description": "In-process caches of this replica (each replica has its own).",
        "operationId": "adminCaches",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/CacheInfo"
                  },
                  "type": "array",
                  "title": "Response Admincaches"
                }
              }
            }
          }
        }
      }
    },
    "/admin/caches/{cache}/clear": {
      "post": {
        "tags": [
          "admin"
        ],
        "summary": "Admin Clear Cache",
        "description": "Rebuild the catalog, forget marketplace indexes or rebuild the AI index (this\nreplica).",
        "operationId": "adminClearCache",
        "parameters": [
          {
            "name": "cache",
            "in": "path",
            "required": true,
            "schema": {
              "enum": [
                "catalog",
                "marketplace",
                "ai-index"
              ],
              "type": "string",
              "title": "Cache"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CacheAction"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/admin/features": {
      "get": {
        "tags": [
          "admin"
        ],
        "summary": "Admin Features",
        "description": "Every feature flag: configured value, runtime override, effective value, lock.",
        "operationId": "adminFeatures",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FeatureFlagsView"
                }
              }
            }
          }
        }
      }
    },
    "/admin/features/{name}": {
      "put": {
        "tags": [
          "admin"
        ],
        "summary": "Admin Set Feature",
        "description": "Set (``value``) or remove (``null``) the runtime override of one flag.",
        "operationId": "adminSetFeature",
        "parameters": [
          {
            "name": "name",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "maxLength": 64,
              "title": "Name"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FeatureOverrideRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FeatureFlagsView"
                }
              }
            }
          },
          "404": {
            "description": "Unknown flag"
          },
          "409": {
            "description": "Flag is locked"
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/admin/mcp-servers": {
      "get": {
        "tags": [
          "admin"
        ],
        "summary": "List Mcp Servers",
        "description": "Every external MCP server (configuration and admin panel), secrets hidden.",
        "operationId": "adminMcpServers",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/McpServerView"
                  },
                  "type": "array",
                  "title": "Response Adminmcpservers"
                }
              }
            }
          }
        }
      }
    },
    "/admin/mcp-servers/{name}": {
      "put": {
        "tags": [
          "admin"
        ],
        "summary": "Put Mcp Server",
        "operationId": "adminPutMcpServer",
        "parameters": [
          {
            "name": "name",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Name"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/McpServerInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/McpServerView"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "admin"
        ],
        "summary": "Delete Mcp Server",
        "operationId": "adminDeleteMcpServer",
        "parameters": [
          {
            "name": "name",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Name"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/McpServerView"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/admin/mcp-servers/{name}/test": {
      "post": {
        "tags": [
          "admin"
        ],
        "summary": "Test Mcp Server",
        "description": "Connect and list the server's tools (with whether the allow-list permits each).",
        "operationId": "adminTestMcpServer",
        "parameters": [
          {
            "name": "name",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Name"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/McpToolInfo"
                  },
                  "title": "Response Admintestmcpserver"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/kb/status": {
      "get": {
        "tags": [
          "kb"
        ],
        "summary": "Status",
        "description": "Index size, store, search mode, sources and the last / running refresh.",
        "operationId": "kbStatus",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/KbStatus"
                }
              }
            }
          }
        }
      }
    },
    "/kb/sources": {
      "get": {
        "tags": [
          "kb"
        ],
        "summary": "Sources",
        "operationId": "kbSources",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/SourceInfo"
                  },
                  "type": "array",
                  "title": "Response Kbsources"
                }
              }
            }
          }
        }
      }
    },
    "/kb/search": {
      "get": {
        "tags": [
          "kb"
        ],
        "summary": "Search",
        "description": "Hybrid search (BM25 + embeddings, RRF, optional reranker) with citations.",
        "operationId": "kbSearch",
        "parameters": [
          {
            "name": "q",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 500,
              "title": "Q"
            }
          },
          {
            "name": "component",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "array",
                  "items": {
                    "type": "string"
                  },
                  "maxItems": 20
                },
                {
                  "type": "null"
                }
              ],
              "title": "Component"
            }
          },
          {
            "name": "package",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "pattern": "^[A-Za-z0-9_.+:-]{1,120}$"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Package"
            }
          },
          {
            "name": "version",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "pattern": "^[A-Za-z0-9_.+:-]{1,120}$"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Version"
            }
          },
          {
            "name": "source",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "pattern": "^[a-z0-9][a-z0-9_-]{0,40}$"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Source"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 50,
              "minimum": 1,
              "default": 8,
              "title": "Limit"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/KbSearchResult"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/kb/sources/{source_id}": {
      "put": {
        "tags": [
          "kb"
        ],
        "summary": "Put Source",
        "description": "Override a configured source at runtime (enabled, components, versions).",
        "operationId": "kbPutSource",
        "parameters": [
          {
            "name": "source_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9][a-z0-9_-]{0,40}$",
              "title": "Source Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SourceOverride"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SourceInfo"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/kb/sources/{source_id}/override": {
      "delete": {
        "tags": [
          "kb"
        ],
        "summary": "Reset Source",
        "description": "Drop the admin-panel override of a source (back to the configuration).",
        "operationId": "kbResetSource",
        "parameters": [
          {
            "name": "source_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9][a-z0-9_-]{0,40}$",
              "title": "Source Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SourceInfo"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/kb/refresh": {
      "post": {
        "tags": [
          "kb"
        ],
        "summary": "Refresh",
        "description": "Start a refresh or rebuild in the background (409 while one runs anywhere).",
        "operationId": "kbRefresh",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RefreshRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "202": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/KbRunStatus"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/kb/cancel": {
      "post": {
        "tags": [
          "kb"
        ],
        "summary": "Cancel",
        "description": "Ask the running refresh to stop (it keeps what it indexed).",
        "operationId": "kbCancel",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/KbRunStatus"
                }
              }
            }
          }
        }
      }
    },
    "/kb/export": {
      "get": {
        "tags": [
          "kb"
        ],
        "summary": "Export",
        "description": "Download the index as a KB bundle (zip, unsigned; sign with `autoair kb build`).",
        "operationId": "kbExport",
        "parameters": [
          {
            "name": "source",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "array",
                  "items": {
                    "type": "string"
                  },
                  "maxItems": 50
                },
                {
                  "type": "null"
                }
              ],
              "title": "Source"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/zip": {}
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/kb/import": {
      "post": {
        "tags": [
          "kb"
        ],
        "summary": "Import Bundle",
        "description": "Import a KB bundle (request body: the zip; bound by server.max_body_bytes - use\n`autoair kb import` for larger bundles). Checksums are verified, signatures when\nkb.bundle.public_keys is set.",
        "operationId": "kbImport",
        "parameters": [
          {
            "name": "source_id",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9][a-z0-9_-]{0,40}$",
              "default": "bundle",
              "title": "Source Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ImportReport"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/zip": {
              "schema": {
                "type": "string",
                "format": "binary"
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "AIStatus": {
        "properties": {
          "configured": {
            "type": "boolean",
            "title": "Configured"
          },
          "enabled": {
            "type": "boolean",
            "title": "Enabled",
            "description": "False when features.ai is off.",
            "default": true
          },
          "reason": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Reason",
            "description": "Why AI is off or unconfigured (e.g. the autoair[ai] extra is missing)."
          },
          "provider": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Provider"
          },
          "model": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Model"
          },
          "models": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Models",
            "description": "Models selectable per request."
          },
          "features": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Features"
          },
          "retrieval": {
            "type": "string",
            "enum": [
              "bm25",
              "hybrid"
            ],
            "title": "Retrieval",
            "default": "bm25"
          },
          "reranker": {
            "type": "string",
            "title": "Reranker",
            "default": "none"
          },
          "llm_mode": {
            "type": "string",
            "enum": [
              "central",
              "per_user",
              "both"
            ],
            "title": "Llm Mode",
            "default": "central"
          },
          "llm_source": {
            "type": "string",
            "enum": [
              "central",
              "user",
              "none"
            ],
            "title": "Llm Source",
            "description": "Which model answers this user's requests.",
            "default": "none"
          },
          "user_model_configured": {
            "type": "boolean",
            "title": "User Model Configured",
            "default": false
          },
          "runtime": {
            "type": "string",
            "title": "Runtime",
            "description": "Agent runtime.",
            "default": "pydantic-ai"
          },
          "streaming": {
            "type": "boolean",
            "title": "Streaming",
            "default": true
          },
          "research_online": {
            "type": "boolean",
            "title": "Research Online",
            "default": false
          },
          "writers": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Writers"
          },
          "role": {
            "type": "string",
            "enum": [
              "viewer",
              "editor",
              "admin"
            ],
            "title": "Role",
            "default": "viewer"
          }
        },
        "type": "object",
        "required": [
          "configured"
        ],
        "title": "AIStatus"
      },
      "ActionDecision": {
        "properties": {
          "decision": {
            "type": "string",
            "enum": [
              "execute",
              "reject"
            ],
            "title": "Decision"
          },
          "comment": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 2000
              },
              {
                "type": "null"
              }
            ],
            "title": "Comment"
          }
        },
        "type": "object",
        "required": [
          "decision"
        ],
        "title": "ActionDecision"
      },
      "ActionResult": {
        "properties": {
          "status": {
            "type": "string",
            "enum": [
              "succeeded",
              "skipped",
              "failed"
            ],
            "title": "Status"
          },
          "message": {
            "type": "string",
            "title": "Message",
            "description": "English text (logs, audit, older clients).",
            "default": ""
          },
          "code": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Code",
            "description": "Stable message code; the UI shows troubleshoot.result.<code> with params."
          },
          "params": {
            "additionalProperties": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                }
              ]
            },
            "type": "object",
            "title": "Params",
            "description": "Interpolation values of the code's message."
          },
          "at": {
            "type": "string",
            "title": "At"
          },
          "by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "By"
          },
          "automatic": {
            "type": "boolean",
            "title": "Automatic",
            "description": "Executed by apply mode.",
            "default": false
          },
          "affected": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Affected",
            "description": "Task instances changed."
          }
        },
        "type": "object",
        "required": [
          "status"
        ],
        "title": "ActionResult"
      },
      "AdminOverview": {
        "properties": {
          "autoair_version": {
            "type": "string",
            "title": "Autoair Version"
          },
          "airflow_version": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Airflow Version"
          },
          "mode": {
            "type": "string",
            "title": "Mode"
          },
          "auth": {
            "type": "string",
            "title": "Auth"
          },
          "started_at": {
            "type": "string",
            "title": "Started At"
          },
          "backends": {
            "$ref": "#/components/schemas/BackendInfo"
          },
          "features": {
            "additionalProperties": {
              "type": "boolean"
            },
            "type": "object",
            "title": "Features"
          },
          "replicas": {
            "items": {
              "$ref": "#/components/schemas/ReplicaInfo"
            },
            "type": "array",
            "title": "Replicas"
          },
          "catalog": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/CatalogStats"
              },
              {
                "type": "null"
              }
            ]
          },
          "templates": {
            "type": "integer",
            "title": "Templates",
            "default": 0
          },
          "user_templates": {
            "type": "integer",
            "title": "User Templates",
            "default": 0
          }
        },
        "type": "object",
        "required": [
          "autoair_version",
          "airflow_version",
          "mode",
          "auth",
          "started_at",
          "backends",
          "features",
          "replicas"
        ],
        "title": "AdminOverview"
      },
      "AgentResult": {
        "properties": {
          "answer": {
            "type": "string",
            "title": "Answer"
          },
          "findings": {
            "items": {
              "$ref": "#/components/schemas/Finding"
            },
            "type": "array",
            "title": "Findings"
          },
          "proposed_spec": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/DagSpec"
              },
              {
                "type": "null"
              }
            ]
          },
          "proposed_ok": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Proposed Ok"
          },
          "problems": {
            "items": {
              "$ref": "#/components/schemas/SpecProblem"
            },
            "type": "array",
            "title": "Problems"
          },
          "steps": {
            "items": {
              "$ref": "#/components/schemas/AgentStep"
            },
            "type": "array",
            "title": "Steps"
          },
          "stopped": {
            "type": "string",
            "enum": [
              "answer",
              "max_steps",
              "budget",
              "timeout",
              "approval"
            ],
            "title": "Stopped",
            "default": "answer"
          },
          "model": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Model"
          },
          "usage": {
            "$ref": "#/components/schemas/Usage"
          },
          "runtime": {
            "type": "string",
            "title": "Runtime",
            "default": "pydantic-ai"
          },
          "guardrails": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Guardrails",
            "description": "Guardrail actions taken during the run."
          },
          "extra": {
            "additionalProperties": true,
            "type": "object",
            "title": "Extra",
            "description": "Further fields of a custom final answer (AgentTask.final_model)."
          },
          "messages": {
            "items": {},
            "type": "array",
            "title": "Messages"
          },
          "pending": {
            "items": {
              "$ref": "#/components/schemas/PendingToolCall"
            },
            "type": "array",
            "title": "Pending",
            "description": "stopped=approval: the tool calls waiting for the user's decision."
          },
          "requests": {
            "type": "integer",
            "title": "Requests",
            "description": "Model requests of this run.",
            "default": 0
          }
        },
        "type": "object",
        "required": [
          "answer"
        ],
        "title": "AgentResult"
      },
      "AgentStep": {
        "properties": {
          "index": {
            "type": "integer",
            "title": "Index"
          },
          "tool": {
            "type": "string",
            "title": "Tool"
          },
          "arguments": {
            "additionalProperties": true,
            "type": "object",
            "title": "Arguments"
          },
          "ok": {
            "type": "boolean",
            "title": "Ok"
          },
          "output_preview": {
            "type": "string",
            "title": "Output Preview",
            "default": ""
          },
          "duration_ms": {
            "type": "integer",
            "title": "Duration Ms",
            "default": 0
          }
        },
        "type": "object",
        "required": [
          "index",
          "tool",
          "ok"
        ],
        "title": "AgentStep"
      },
      "AiAuditRecord": {
        "properties": {
          "timestamp": {
            "type": "string",
            "title": "Timestamp"
          },
          "user": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "User"
          },
          "role": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Role"
          },
          "feature": {
            "type": "string",
            "title": "Feature"
          },
          "provider": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Provider"
          },
          "model": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Model"
          },
          "llm_source": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Llm Source",
            "description": "central / user / user-connection / service."
          },
          "usage": {
            "$ref": "#/components/schemas/Usage"
          },
          "tools": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Tools"
          },
          "guardrails": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Guardrails"
          },
          "duration_ms": {
            "type": "integer",
            "title": "Duration Ms",
            "default": 0
          },
          "outcome": {
            "type": "string",
            "title": "Outcome",
            "default": "ok"
          },
          "error": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Error"
          },
          "prompt": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Prompt"
          },
          "sources": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Sources",
            "description": "Sources the answer used (docs, files, audit ids)."
          },
          "detail": {
            "additionalProperties": true,
            "type": "object",
            "title": "Detail",
            "description": "Feature specifics, e.g. thread / analysis id, dag/run ids, proposal decisions (never secrets)."
          }
        },
        "type": "object",
        "required": [
          "timestamp",
          "feature"
        ],
        "title": "AiAuditRecord"
      },
      "AirflowAction": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id",
            "default": ""
          },
          "action": {
            "type": "string",
            "enum": [
              "clear",
              "retry",
              "clear_run",
              "mark_success",
              "mark_failed",
              "mark_run_success",
              "mark_run_failed",
              "fix_connection",
              "adjust_pool",
              "other"
            ],
            "title": "Action",
            "default": "other"
          },
          "target": {
            "type": "string",
            "title": "Target",
            "default": ""
          },
          "instructions": {
            "type": "string",
            "title": "Instructions",
            "default": ""
          },
          "dag_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Dag Id"
          },
          "run_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Run Id"
          },
          "task_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Task Id"
          },
          "map_index": {
            "type": "integer",
            "title": "Map Index",
            "default": -1
          },
          "include_downstream": {
            "type": "boolean",
            "title": "Include Downstream",
            "default": false
          },
          "include_upstream": {
            "type": "boolean",
            "title": "Include Upstream",
            "default": false
          },
          "only_failed": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Only Failed"
          },
          "status": {
            "type": "string",
            "enum": [
              "instruction",
              "proposed",
              "blocked",
              "rejected",
              "running",
              "succeeded",
              "skipped",
              "failed"
            ],
            "title": "Status",
            "default": "instruction"
          },
          "blocked": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "not_allowed",
                  "other_dag",
                  "other_run",
                  "missing_task",
                  "upstream_not_allowed",
                  "downstream_not_allowed",
                  "limit",
                  "duplicate",
                  "permission",
                  "feature_off"
                ]
              },
              {
                "type": "null"
              }
            ],
            "title": "Blocked",
            "description": "Why the action cannot be executed."
          },
          "results": {
            "items": {
              "$ref": "#/components/schemas/ActionResult"
            },
            "type": "array",
            "title": "Results"
          },
          "claimed_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Claimed By",
            "description": "Who claimed the last execution (status running)."
          },
          "claimed_at": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Claimed At",
            "description": "When that claim was made."
          }
        },
        "type": "object",
        "title": "AirflowAction",
        "description": "A proposed Airflow action as stored with the analysis (older analyses only have\n``action``, ``target`` and ``instructions``)."
      },
      "AirflowCapabilities": {
        "properties": {
          "version": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Version",
            "description": "The Airflow server's version (null: unknown)."
          },
          "source": {
            "type": "string",
            "enum": [
              "server",
              "installed",
              "unknown"
            ],
            "title": "Source",
            "description": "server: GET /api/v2/version; installed: the Airflow installed next to AutoAir (the server was unreachable)."
          },
          "materialize": {
            "type": "boolean",
            "title": "Materialize",
            "description": "POST /assets/{id}/materialize (>= 3.0)."
          },
          "clear_run_on_latest_version": {
            "type": "boolean",
            "title": "Clear Run On Latest Version",
            "description": "Clear run_on_latest_version (>= 3.1)."
          },
          "clear_only_new": {
            "type": "boolean",
            "title": "Clear Only New",
            "description": "Clear only_new (>= 3.2)."
          },
          "keep_task_state": {
            "type": "boolean",
            "title": "Keep Task State",
            "description": "Clear keep_task_state (>= 3.4)."
          },
          "backfill_run_on_latest_version": {
            "type": "boolean",
            "title": "Backfill Run On Latest Version",
            "description": "Backfill run_on_latest_version (>= 3.1)."
          },
          "scheduling_state": {
            "type": "boolean",
            "title": "Scheduling State",
            "description": "DAG scheduling_state active/draining/paused and drain (>= 3.4)."
          },
          "retry_try_is_next": {
            "type": "boolean",
            "title": "Retry Try Is Next",
            "description": "An up_for_retry task instance's try_number is the upcoming try, which has no log yet; the failed try is try_number - 1 (>= 3.4).",
            "default": false
          }
        },
        "type": "object",
        "required": [
          "version",
          "source",
          "materialize",
          "clear_run_on_latest_version",
          "clear_only_new",
          "keep_task_state",
          "backfill_run_on_latest_version",
          "scheduling_state"
        ],
        "title": "AirflowCapabilities",
        "description": "What the connected Airflow server's REST API supports (by its version)."
      },
      "AnalysisApplied": {
        "properties": {
          "deployed": {
            "type": "boolean",
            "title": "Deployed",
            "default": true
          },
          "detail": {
            "additionalProperties": true,
            "type": "object",
            "title": "Detail",
            "description": "Deploy outcome: version, etag, PR url, environment."
          }
        },
        "type": "object",
        "title": "AnalysisApplied"
      },
      "AnalysisDecision": {
        "properties": {
          "decision": {
            "type": "string",
            "enum": [
              "approve",
              "reject"
            ],
            "title": "Decision"
          },
          "finding_ids": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Finding Ids",
            "description": "Findings to apply (default: every patch)."
          },
          "comment": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 2000
              },
              {
                "type": "null"
              }
            ],
            "title": "Comment"
          }
        },
        "type": "object",
        "required": [
          "decision"
        ],
        "title": "AnalysisDecision"
      },
      "AnalysisRequest": {
        "properties": {
          "spec": {
            "$ref": "#/components/schemas/DagSpec"
          },
          "use_ai": {
            "type": "boolean",
            "title": "Use Ai",
            "description": "Add an LLM pass (when configured) to the deterministic checks.",
            "default": true
          },
          "model": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 200
              },
              {
                "type": "null"
              }
            ],
            "title": "Model",
            "description": "Model for this request (one of /ai/status `models`; default: configured)."
          }
        },
        "type": "object",
        "required": [
          "spec"
        ],
        "title": "AnalysisRequest"
      },
      "AnalysisSummary": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "created_at": {
            "type": "string",
            "title": "Created At"
          },
          "dag_id": {
            "type": "string",
            "title": "Dag Id"
          },
          "run_id": {
            "type": "string",
            "title": "Run Id"
          },
          "task_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Task Id"
          },
          "summary": {
            "type": "string",
            "title": "Summary",
            "default": ""
          },
          "status": {
            "type": "string",
            "enum": [
              "proposed",
              "no_change",
              "approved",
              "rejected",
              "applied",
              "awaiting_approval"
            ],
            "title": "Status"
          },
          "model": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Model"
          }
        },
        "type": "object",
        "required": [
          "id",
          "created_at",
          "dag_id",
          "run_id",
          "status"
        ],
        "title": "AnalysisSummary"
      },
      "AppliedPatches": {
        "properties": {
          "spec": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/DagSpec"
              },
              {
                "type": "null"
              }
            ]
          },
          "ok": {
            "type": "boolean",
            "title": "Ok"
          },
          "problems": {
            "items": {
              "$ref": "#/components/schemas/SpecProblem"
            },
            "type": "array",
            "title": "Problems"
          },
          "applied": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Applied"
          },
          "skipped": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Skipped"
          }
        },
        "type": "object",
        "required": [
          "spec",
          "ok",
          "problems",
          "applied",
          "skipped"
        ],
        "title": "AppliedPatches"
      },
      "ApplyRequest": {
        "properties": {
          "spec": {
            "$ref": "#/components/schemas/DagSpec"
          },
          "findings": {
            "items": {
              "$ref": "#/components/schemas/Finding"
            },
            "type": "array",
            "title": "Findings"
          },
          "only": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Only",
            "description": "Finding ids to apply (default all)."
          }
        },
        "type": "object",
        "required": [
          "spec",
          "findings"
        ],
        "title": "ApplyRequest"
      },
      "AskRequest": {
        "properties": {
          "question": {
            "type": "string",
            "maxLength": 20000,
            "minLength": 1,
            "title": "Question"
          },
          "spec": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/DagSpec"
              },
              {
                "type": "null"
              }
            ],
            "description": "The DAG being edited, if any."
          },
          "model": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 200
              },
              {
                "type": "null"
              }
            ],
            "title": "Model",
            "description": "Model for this request (one of /ai/status `models`; default: configured)."
          },
          "research": {
            "type": "boolean",
            "title": "Research",
            "description": "Give the agent the research tools.",
            "default": true
          }
        },
        "type": "object",
        "required": [
          "question"
        ],
        "title": "AskRequest"
      },
      "AssetAliasLeaf": {
        "properties": {
          "op": {
            "type": "string",
            "const": "alias",
            "title": "Op"
          },
          "name": {
            "type": "string",
            "minLength": 1,
            "title": "Name"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "op",
          "name"
        ],
        "title": "AssetAliasLeaf"
      },
      "AssetAndTimeScheduleSpec": {
        "properties": {
          "type": {
            "type": "string",
            "const": "assets_and_time",
            "title": "Type"
          },
          "expression": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/AssetLeaf"
              },
              {
                "$ref": "#/components/schemas/AssetAliasLeaf"
              },
              {
                "$ref": "#/components/schemas/AssetCombination"
              }
            ],
            "title": "Expression",
            "discriminator": {
              "propertyName": "op",
              "mapping": {
                "alias": "#/components/schemas/AssetAliasLeaf",
                "all": "#/components/schemas/AssetCombination",
                "any": "#/components/schemas/AssetCombination",
                "asset": "#/components/schemas/AssetLeaf"
              }
            }
          },
          "time": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/PresetSchedule"
              },
              {
                "$ref": "#/components/schemas/CronSchedule"
              },
              {
                "$ref": "#/components/schemas/IntervalSchedule"
              },
              {
                "$ref": "#/components/schemas/MultiCronSchedule"
              },
              {
                "$ref": "#/components/schemas/EventsSchedule"
              }
            ],
            "title": "Time",
            "discriminator": {
              "propertyName": "type",
              "mapping": {
                "cron": "#/components/schemas/CronSchedule",
                "events": "#/components/schemas/EventsSchedule",
                "interval": "#/components/schemas/IntervalSchedule",
                "multi_cron": "#/components/schemas/MultiCronSchedule",
                "preset": "#/components/schemas/PresetSchedule"
              }
            }
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "type",
          "expression",
          "time"
        ],
        "title": "AssetAndTimeScheduleSpec",
        "description": "Airflow >= 3.4: scheduled run happens only once the assets were updated."
      },
      "AssetCombination": {
        "properties": {
          "op": {
            "type": "string",
            "enum": [
              "all",
              "any"
            ],
            "title": "Op"
          },
          "items": {
            "items": {
              "oneOf": [
                {
                  "$ref": "#/components/schemas/AssetLeaf"
                },
                {
                  "$ref": "#/components/schemas/AssetAliasLeaf"
                },
                {
                  "$ref": "#/components/schemas/AssetCombination"
                }
              ],
              "discriminator": {
                "propertyName": "op",
                "mapping": {
                  "alias": "#/components/schemas/AssetAliasLeaf",
                  "all": "#/components/schemas/AssetCombination",
                  "any": "#/components/schemas/AssetCombination",
                  "asset": "#/components/schemas/AssetLeaf"
                }
              }
            },
            "type": "array",
            "minItems": 1,
            "title": "Items"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "op",
          "items"
        ],
        "title": "AssetCombination"
      },
      "AssetEventRequest": {
        "properties": {
          "extra": {
            "additionalProperties": true,
            "type": "object",
            "title": "Extra",
            "description": "The event's extra (JSON object)."
          }
        },
        "type": "object",
        "title": "AssetEventRequest"
      },
      "AssetLeaf": {
        "properties": {
          "op": {
            "type": "string",
            "const": "asset",
            "title": "Op"
          },
          "asset": {
            "$ref": "#/components/schemas/AssetRef"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "op",
          "asset"
        ],
        "title": "AssetLeaf"
      },
      "AssetOrTimeScheduleSpec": {
        "properties": {
          "type": {
            "type": "string",
            "const": "assets_or_time",
            "title": "Type"
          },
          "expression": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/AssetLeaf"
              },
              {
                "$ref": "#/components/schemas/AssetAliasLeaf"
              },
              {
                "$ref": "#/components/schemas/AssetCombination"
              }
            ],
            "title": "Expression",
            "discriminator": {
              "propertyName": "op",
              "mapping": {
                "alias": "#/components/schemas/AssetAliasLeaf",
                "all": "#/components/schemas/AssetCombination",
                "any": "#/components/schemas/AssetCombination",
                "asset": "#/components/schemas/AssetLeaf"
              }
            }
          },
          "time": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/PresetSchedule"
              },
              {
                "$ref": "#/components/schemas/CronSchedule"
              },
              {
                "$ref": "#/components/schemas/IntervalSchedule"
              },
              {
                "$ref": "#/components/schemas/MultiCronSchedule"
              },
              {
                "$ref": "#/components/schemas/EventsSchedule"
              }
            ],
            "title": "Time",
            "discriminator": {
              "propertyName": "type",
              "mapping": {
                "cron": "#/components/schemas/CronSchedule",
                "events": "#/components/schemas/EventsSchedule",
                "interval": "#/components/schemas/IntervalSchedule",
                "multi_cron": "#/components/schemas/MultiCronSchedule",
                "preset": "#/components/schemas/PresetSchedule"
              }
            }
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "type",
          "expression",
          "time"
        ],
        "title": "AssetOrTimeScheduleSpec",
        "description": "Run on the time schedule *or* when the assets update."
      },
      "AssetRef": {
        "properties": {
          "name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Name"
          },
          "uri": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Uri"
          },
          "group": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Group"
          },
          "extra": {
            "additionalProperties": true,
            "type": "object",
            "title": "Extra"
          },
          "watchers": {
            "items": {
              "$ref": "#/components/schemas/AssetWatcherSpec"
            },
            "type": "array",
            "title": "Watchers"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "title": "AssetRef"
      },
      "AssetSchedule": {
        "properties": {
          "type": {
            "type": "string",
            "const": "assets",
            "title": "Type"
          },
          "expression": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/AssetLeaf"
              },
              {
                "$ref": "#/components/schemas/AssetAliasLeaf"
              },
              {
                "$ref": "#/components/schemas/AssetCombination"
              }
            ],
            "title": "Expression",
            "discriminator": {
              "propertyName": "op",
              "mapping": {
                "alias": "#/components/schemas/AssetAliasLeaf",
                "all": "#/components/schemas/AssetCombination",
                "any": "#/components/schemas/AssetCombination",
                "asset": "#/components/schemas/AssetLeaf"
              }
            }
          },
          "batch_asset_events": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Batch Asset Events",
            "description": "Airflow >= 3.4: batch events into one run (default per event)."
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "type",
          "expression"
        ],
        "title": "AssetSchedule"
      },
      "AssetWatcherSpec": {
        "properties": {
          "name": {
            "type": "string",
            "maxLength": 250,
            "minLength": 1,
            "pattern": "^[A-Za-z0-9_.-]+$",
            "title": "Name"
          },
          "scheme": {
            "type": "string",
            "pattern": "^[a-z0-9+.-]+$",
            "title": "Scheme",
            "examples": [
              "sqs",
              "kafka",
              "redis+pubsub",
              "google+pubsub",
              "azure+servicebus",
              "kinesis"
            ]
          },
          "kwargs": {
            "patternProperties": {
              "^[A-Za-z_][A-Za-z0-9_]*$": {}
            },
            "propertyNames": {
              "maxLength": 100
            },
            "type": "object",
            "title": "Kwargs",
            "description": "Provider specific MessageQueueTrigger kwargs."
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "name",
          "scheme"
        ],
        "title": "AssetWatcherSpec",
        "description": "Event-driven scheduling: ``AssetWatcher(trigger=MessageQueueTrigger(...))``."
      },
      "AssistantInfo": {
        "properties": {
          "developer": {
            "$ref": "#/components/schemas/AssistantModeInfo"
          },
          "admin": {
            "$ref": "#/components/schemas/AssistantModeInfo"
          },
          "troubleshoot": {
            "type": "boolean",
            "title": "Troubleshoot"
          },
          "compaction_trigger_chars": {
            "type": "integer",
            "title": "Compaction Trigger Chars"
          },
          "max_follow_ups": {
            "type": "integer",
            "title": "Max Follow Ups"
          }
        },
        "type": "object",
        "required": [
          "developer",
          "admin",
          "troubleshoot",
          "compaction_trigger_chars",
          "max_follow_ups"
        ],
        "title": "AssistantInfo"
      },
      "AssistantModeInfo": {
        "properties": {
          "enabled": {
            "type": "boolean",
            "title": "Enabled"
          },
          "allowed": {
            "type": "boolean",
            "title": "Allowed"
          },
          "tools": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Tools"
          },
          "mcp_servers": {
            "items": {
              "$ref": "#/components/schemas/McpServerOption"
            },
            "type": "array",
            "title": "Mcp Servers",
            "description": "External MCP servers attached to this assistant's turns (by default all of them; send `mcp` in the chat request to choose)."
          }
        },
        "type": "object",
        "required": [
          "enabled",
          "allowed"
        ],
        "title": "AssistantModeInfo"
      },
      "AuditPage": {
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/AuditRecord"
            },
            "type": "array",
            "title": "Items"
          },
          "offset": {
            "type": "integer",
            "title": "Offset"
          },
          "limit": {
            "type": "integer",
            "title": "Limit"
          },
          "has_more": {
            "type": "boolean",
            "title": "Has More"
          }
        },
        "type": "object",
        "required": [
          "items",
          "offset",
          "limit",
          "has_more"
        ],
        "title": "AuditPage"
      },
      "AuditRecord": {
        "properties": {
          "timestamp": {
            "type": "string",
            "title": "Timestamp"
          },
          "action": {
            "type": "string",
            "title": "Action"
          },
          "user": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "User"
          },
          "dag_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Dag Id"
          },
          "details": {
            "additionalProperties": true,
            "type": "object",
            "title": "Details",
            "default": {}
          }
        },
        "type": "object",
        "required": [
          "timestamp",
          "action",
          "user"
        ],
        "title": "AuditRecord"
      },
      "AuthConfig": {
        "properties": {
          "mode": {
            "type": "string",
            "title": "Mode"
          },
          "auth": {
            "type": "string",
            "title": "Auth",
            "description": "airflow (plugin), bearer, static (local token) or none."
          },
          "login_enabled": {
            "type": "boolean",
            "title": "Login Enabled"
          },
          "sso": {
            "$ref": "#/components/schemas/SsoInfo"
          },
          "ui": {
            "$ref": "#/components/schemas/Branding"
          }
        },
        "type": "object",
        "required": [
          "mode",
          "auth",
          "login_enabled",
          "sso",
          "ui"
        ],
        "title": "AuthConfig"
      },
      "BackendInfo": {
        "properties": {
          "database": {
            "type": "string",
            "enum": [
              "file",
              "sqlite",
              "postgresql"
            ],
            "title": "Database"
          },
          "database_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Database Url",
            "description": "Credentials masked."
          },
          "schema_version": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Schema Version"
          },
          "schema_head": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Schema Head"
          },
          "collab_sync": {
            "type": "string",
            "title": "Collab Sync",
            "description": "memory, database or redis (effective)."
          },
          "deploy_target": {
            "type": "string",
            "title": "Deploy Target",
            "description": "Kind of the default deploy target."
          },
          "deploy_target_source": {
            "type": "string",
            "title": "Deploy Target Source"
          }
        },
        "type": "object",
        "required": [
          "database",
          "collab_sync",
          "deploy_target",
          "deploy_target_source"
        ],
        "title": "BackendInfo"
      },
      "BackfillRequest": {
        "properties": {
          "from_date": {
            "type": "string",
            "title": "From Date"
          },
          "to_date": {
            "type": "string",
            "title": "To Date"
          },
          "reprocess_behavior": {
            "type": "string",
            "enum": [
              "none",
              "failed",
              "completed"
            ],
            "title": "Reprocess Behavior",
            "default": "none"
          },
          "max_active_runs": {
            "type": "integer",
            "minimum": 1.0,
            "title": "Max Active Runs",
            "default": 10
          },
          "run_backwards": {
            "type": "boolean",
            "title": "Run Backwards",
            "default": false
          },
          "dry_run": {
            "type": "boolean",
            "title": "Dry Run",
            "default": true
          },
          "dag_run_conf": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Dag Run Conf"
          },
          "run_on_latest_version": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Run On Latest Version",
            "description": "Airflow >= 3.1: run each backfilled run on the latest bundle version (null: the DAG's / Airflow's default)."
          },
          "drain_dag": {
            "type": "boolean",
            "title": "Drain Dag",
            "description": "Airflow >= 3.4: drain the DAG together with the backfill (no new scheduled runs; it pauses once unfinished runs finish). Ignored by the dry run.",
            "default": false
          }
        },
        "type": "object",
        "required": [
          "from_date",
          "to_date"
        ],
        "title": "BackfillRequest"
      },
      "BlueprintCatalogError": {
        "properties": {
          "location": {
            "type": "string",
            "title": "Location"
          },
          "error": {
            "type": "string",
            "title": "Error"
          }
        },
        "type": "object",
        "required": [
          "location",
          "error"
        ],
        "title": "BlueprintCatalogError"
      },
      "BlueprintCatalogStatus": {
        "properties": {
          "available": {
            "type": "boolean",
            "title": "Available",
            "description": "airflow-blueprint is installed in AutoAir's environment (needed to read config schemas; install autoair[blueprint])."
          },
          "package_version": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Package Version",
            "description": "airflow-blueprint version."
          },
          "blueprints": {
            "type": "integer",
            "title": "Blueprints"
          },
          "errors": {
            "items": {
              "$ref": "#/components/schemas/BlueprintCatalogError"
            },
            "type": "array",
            "title": "Errors"
          },
          "built_at": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Built At"
          }
        },
        "type": "object",
        "required": [
          "available",
          "blueprints"
        ],
        "title": "BlueprintCatalogStatus",
        "description": "What the catalog found and whether schemas can be read in this installation."
      },
      "BlueprintDetail": {
        "properties": {
          "name": {
            "type": "string",
            "title": "Name",
            "description": "Registered name (snake_case), as `blueprint list` shows it."
          },
          "version": {
            "type": "integer",
            "minimum": 1.0,
            "title": "Version"
          },
          "class_name": {
            "type": "string",
            "title": "Class Name"
          },
          "module": {
            "type": "string",
            "title": "Module",
            "description": "Module the generated DAG imports the class from."
          },
          "class_path": {
            "type": "string",
            "title": "Class Path",
            "description": "module.Class"
          },
          "config_class": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Config Class",
            "description": "Name of the config model importable from the same module, if any."
          },
          "summary": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Summary",
            "description": "First sentence of the docstring."
          },
          "source": {
            "type": "string",
            "enum": [
              "entry_point",
              "template_dir",
              "module"
            ],
            "title": "Source"
          },
          "package": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Package",
            "description": "Distribution providing it."
          },
          "package_version": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Package Version"
          },
          "supports_params": {
            "type": "boolean",
            "title": "Supports Params",
            "description": "Config fields become DAG params (supports_params=True).",
            "default": false
          },
          "latest": {
            "type": "boolean",
            "title": "Latest",
            "description": "Highest version of this name.",
            "default": true
          },
          "schema_error": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Schema Error",
            "description": "Why the config schema could not be read (e.g. the module failed to import)."
          },
          "docstring": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Docstring"
          },
          "config_schema": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Config Schema",
            "description": "JSON Schema of the config model (Blueprint.get_schema(): references inlined), read in a child process."
          },
          "preview": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/BlueprintPreview"
              },
              {
                "type": "null"
              }
            ],
            "description": "Tasks rendered with the config defaults, when they suffice."
          }
        },
        "type": "object",
        "required": [
          "name",
          "version",
          "class_name",
          "module",
          "class_path",
          "source"
        ],
        "title": "BlueprintDetail",
        "description": "A blueprint version with its config schema and a default task preview."
      },
      "BlueprintNode": {
        "properties": {
          "id": {
            "type": "string",
            "maxLength": 100,
            "minLength": 1,
            "pattern": "^[A-Za-z0-9_-]+$",
            "title": "Id"
          },
          "label": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 200
              },
              {
                "type": "null"
              }
            ],
            "title": "Label",
            "description": "Canvas label only."
          },
          "icon": {
            "anyOf": [
              {
                "type": "string",
                "pattern": "^(builtin|custom|package):[a-z0-9][a-z0-9-]{0,80}$"
              },
              {
                "type": "null"
              }
            ],
            "title": "Icon",
            "description": "Canvas icon only (builtin:<logo> or custom:<name>); overrides the default."
          },
          "parent_group": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 100,
                "minLength": 1,
                "pattern": "^[A-Za-z0-9_-]+$"
              },
              {
                "type": "null"
              }
            ],
            "title": "Parent Group",
            "description": "Id of a task_group node."
          },
          "position": {
            "$ref": "#/components/schemas/Position"
          },
          "kind": {
            "type": "string",
            "const": "blueprint",
            "title": "Kind"
          },
          "step_id": {
            "type": "string",
            "maxLength": 250,
            "minLength": 1,
            "pattern": "^[A-Za-z0-9_.-]+$",
            "title": "Step Id",
            "description": "Task or group id the blueprint renders under."
          },
          "blueprint": {
            "type": "string",
            "maxLength": 100,
            "pattern": "^[a-z][a-z0-9_]*$",
            "title": "Blueprint",
            "description": "Registered blueprint name (snake_case), as `blueprint list` shows it."
          },
          "version": {
            "type": "integer",
            "minimum": 1.0,
            "title": "Version",
            "description": "Blueprint version the step is pinned to.",
            "default": 1
          },
          "class_path": {
            "type": "string",
            "maxLength": 300,
            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(\\.[A-Za-z_][A-Za-z0-9_]*)+$",
            "title": "Class Path",
            "description": "Importable path of the Blueprint class (module.Class)."
          },
          "config_class": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 100,
                "pattern": "^[A-Za-z_][A-Za-z0-9_]*$"
              },
              {
                "type": "null"
              }
            ],
            "title": "Config Class",
            "description": "Name of the config model in the blueprint's module; omitted: the generated code asks the class for it (get_config_type())."
          },
          "config": {
            "additionalProperties": true,
            "type": "object",
            "title": "Config",
            "description": "Config values, validated against the blueprint's config schema. Plain JSON values only (no XCom references or tagged values)."
          },
          "disabled": {
            "type": "boolean",
            "title": "Disabled",
            "description": "Excluded from the generated DAG (kept on the canvas).",
            "default": false
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "id",
          "kind",
          "step_id",
          "blueprint",
          "class_path"
        ],
        "title": "BlueprintNode",
        "description": "A step built from an Astronomer Blueprint template (``airflow-blueprint``).\n\nA blueprint is a reusable ``Blueprint[Config]`` class with a Pydantic config model whose\n``render()`` returns a task or a TaskGroup. The generated DAG imports ``class_path``, sets\n``step_id`` on an instance and calls ``render(Config(**config))``, the way the blueprint\nproject documents its use in Python DAGs. Edges to and from the node depend on the whole\nrendered step. The Airflow environment needs ``airflow-blueprint`` and the template."
      },
      "BlueprintPreview": {
        "properties": {
          "kind": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "task",
                  "group"
                ]
              },
              {
                "type": "null"
              }
            ],
            "title": "Kind",
            "description": "What render() returned: one task or a TaskGroup."
          },
          "tasks": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Tasks",
            "description": "Task ids inside the step (without the step prefix); a single-task blueprint lists its own id."
          },
          "error": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Error",
            "description": "Why the preview could not be built."
          }
        },
        "type": "object",
        "title": "BlueprintPreview",
        "description": "The tasks one blueprint step renders, relative to its ``step_id``."
      },
      "BlueprintPreviewRequest": {
        "properties": {
          "name": {
            "type": "string",
            "maxLength": 100,
            "pattern": "^[a-z][a-z0-9_]*$",
            "title": "Name"
          },
          "version": {
            "type": "integer",
            "minimum": 1.0,
            "title": "Version"
          },
          "step_id": {
            "type": "string",
            "maxLength": 250,
            "pattern": "^[A-Za-z0-9_.-]+$",
            "title": "Step Id",
            "default": "step"
          },
          "config": {
            "additionalProperties": true,
            "type": "object",
            "title": "Config"
          }
        },
        "type": "object",
        "required": [
          "name",
          "version"
        ],
        "title": "BlueprintPreviewRequest"
      },
      "BlueprintSummary": {
        "properties": {
          "name": {
            "type": "string",
            "title": "Name",
            "description": "Registered name (snake_case), as `blueprint list` shows it."
          },
          "version": {
            "type": "integer",
            "minimum": 1.0,
            "title": "Version"
          },
          "class_name": {
            "type": "string",
            "title": "Class Name"
          },
          "module": {
            "type": "string",
            "title": "Module",
            "description": "Module the generated DAG imports the class from."
          },
          "class_path": {
            "type": "string",
            "title": "Class Path",
            "description": "module.Class"
          },
          "config_class": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Config Class",
            "description": "Name of the config model importable from the same module, if any."
          },
          "summary": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Summary",
            "description": "First sentence of the docstring."
          },
          "source": {
            "type": "string",
            "enum": [
              "entry_point",
              "template_dir",
              "module"
            ],
            "title": "Source"
          },
          "package": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Package",
            "description": "Distribution providing it."
          },
          "package_version": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Package Version"
          },
          "supports_params": {
            "type": "boolean",
            "title": "Supports Params",
            "description": "Config fields become DAG params (supports_params=True).",
            "default": false
          },
          "latest": {
            "type": "boolean",
            "title": "Latest",
            "description": "Highest version of this name.",
            "default": true
          },
          "schema_error": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Schema Error",
            "description": "Why the config schema could not be read (e.g. the module failed to import)."
          }
        },
        "type": "object",
        "required": [
          "name",
          "version",
          "class_name",
          "module",
          "class_path",
          "source"
        ],
        "title": "BlueprintSummary",
        "description": "One version of a blueprint template, for the palette."
      },
      "Branding": {
        "properties": {
          "title": {
            "type": "string",
            "title": "Title",
            "default": "AutoAir"
          },
          "logo_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Logo Url"
          },
          "accent_color": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Accent Color"
          },
          "banner_text": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Banner Text"
          },
          "banner_color": {
            "type": "string",
            "title": "Banner Color",
            "default": "orange"
          },
          "default_language": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Default Language"
          },
          "default_timezone": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Default Timezone"
          },
          "date_locale": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Date Locale"
          }
        },
        "type": "object",
        "title": "Branding"
      },
      "BulkDag": {
        "properties": {
          "dag_id": {
            "type": "string",
            "title": "Dag Id"
          },
          "spec": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/DagSpec"
              },
              {
                "type": "null"
              }
            ]
          },
          "warnings": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Warnings"
          },
          "error": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Error"
          },
          "exists": {
            "type": "boolean",
            "title": "Exists",
            "description": "A DAG with this id is already stored.",
            "default": false
          },
          "stored_etag": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Stored Etag",
            "description": "Version of the stored DAG (to overwrite it, confirmed)."
          }
        },
        "type": "object",
        "required": [
          "dag_id",
          "spec",
          "warnings"
        ],
        "title": "BulkDag"
      },
      "BulkFileResult": {
        "properties": {
          "path": {
            "type": "string",
            "title": "Path"
          },
          "status": {
            "type": "string",
            "enum": [
              "imported",
              "no_dag",
              "excluded",
              "error",
              "not_scanned"
            ],
            "title": "Status"
          },
          "dags": {
            "items": {
              "$ref": "#/components/schemas/BulkDag"
            },
            "type": "array",
            "title": "Dags"
          },
          "import_errors": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Import Errors"
          },
          "message": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Message"
          }
        },
        "type": "object",
        "required": [
          "path",
          "status"
        ],
        "title": "BulkFileResult"
      },
      "BulkImportRequest": {
        "properties": {
          "git": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/GitSource"
              },
              {
                "type": "null"
              }
            ]
          },
          "files": {
            "items": {
              "$ref": "#/components/schemas/UploadedFile"
            },
            "type": "array",
            "title": "Files"
          }
        },
        "type": "object",
        "title": "BulkImportRequest",
        "description": "A DAG repository: a git repository (cloned shallowly on the server) or the files of a\nfolder picked in the browser. Exactly one of ``git`` / ``files``."
      },
      "BulkImportResult": {
        "properties": {
          "source": {
            "type": "string",
            "title": "Source",
            "description": "What was imported (URL@ref or 'upload')."
          },
          "files": {
            "items": {
              "$ref": "#/components/schemas/BulkFileResult"
            },
            "type": "array",
            "title": "Files"
          },
          "summary": {
            "$ref": "#/components/schemas/BulkSummary"
          }
        },
        "type": "object",
        "required": [
          "source",
          "files",
          "summary"
        ],
        "title": "BulkImportResult"
      },
      "BulkSummary": {
        "properties": {
          "files": {
            "type": "integer",
            "title": "Files",
            "default": 0
          },
          "imported_files": {
            "type": "integer",
            "title": "Imported Files",
            "default": 0
          },
          "dags": {
            "type": "integer",
            "title": "Dags",
            "default": 0
          },
          "convertible": {
            "type": "integer",
            "title": "Convertible",
            "default": 0
          },
          "existing": {
            "type": "integer",
            "title": "Existing",
            "default": 0
          },
          "errors": {
            "type": "integer",
            "title": "Errors",
            "default": 0
          }
        },
        "type": "object",
        "title": "BulkSummary"
      },
      "CacheAction": {
        "properties": {
          "cache": {
            "type": "string",
            "title": "Cache"
          },
          "ok": {
            "type": "boolean",
            "title": "Ok"
          },
          "detail": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Detail"
          }
        },
        "type": "object",
        "required": [
          "cache",
          "ok"
        ],
        "title": "CacheAction"
      },
      "CacheInfo": {
        "properties": {
          "name": {
            "type": "string",
            "title": "Name"
          },
          "description": {
            "type": "string",
            "title": "Description"
          },
          "entries": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Entries"
          },
          "detail": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Detail"
          }
        },
        "type": "object",
        "required": [
          "name",
          "description"
        ],
        "title": "CacheInfo"
      },
      "CallbackRef": {
        "properties": {
          "notifier": {
            "type": "string",
            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(\\.[A-Za-z_][A-Za-z0-9_]*)+$",
            "title": "Notifier",
            "examples": [
              "airflow.providers.slack.notifications.slack.SlackNotifier"
            ]
          },
          "params": {
            "patternProperties": {
              "^[A-Za-z_][A-Za-z0-9_]*$": {}
            },
            "propertyNames": {
              "maxLength": 100
            },
            "type": "object",
            "title": "Params"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "notifier"
        ],
        "title": "CallbackRef",
        "description": "A notifier instance (``BaseNotifier`` subclass from the catalog)."
      },
      "Callbacks": {
        "properties": {
          "on_success": {
            "items": {
              "$ref": "#/components/schemas/CallbackRef"
            },
            "type": "array",
            "title": "On Success"
          },
          "on_failure": {
            "items": {
              "$ref": "#/components/schemas/CallbackRef"
            },
            "type": "array",
            "title": "On Failure"
          },
          "on_retry": {
            "items": {
              "$ref": "#/components/schemas/CallbackRef"
            },
            "type": "array",
            "title": "On Retry"
          },
          "on_execute": {
            "items": {
              "$ref": "#/components/schemas/CallbackRef"
            },
            "type": "array",
            "title": "On Execute"
          },
          "on_skipped": {
            "items": {
              "$ref": "#/components/schemas/CallbackRef"
            },
            "type": "array",
            "title": "On Skipped"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "title": "Callbacks"
      },
      "CatalogDiagnostics": {
        "properties": {
          "sources": {
            "items": {
              "$ref": "#/components/schemas/CatalogSourceInfo"
            },
            "type": "array",
            "title": "Sources",
            "default": []
          },
          "filtered": {
            "items": {
              "$ref": "#/components/schemas/CatalogFiltered"
            },
            "type": "array",
            "title": "Filtered",
            "default": []
          },
          "parse_errors": {
            "items": {
              "$ref": "#/components/schemas/CatalogError"
            },
            "type": "array",
            "title": "Parse Errors",
            "default": []
          },
          "metadata": {
            "items": {
              "$ref": "#/components/schemas/CatalogMetadataSource"
            },
            "type": "array",
            "title": "Metadata",
            "default": []
          },
          "strategy": {
            "type": "string",
            "enum": [
              "static",
              "import"
            ],
            "title": "Strategy"
          },
          "cache_key": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Cache Key"
          },
          "loaded_from_cache": {
            "type": "boolean",
            "title": "Loaded From Cache",
            "default": false
          },
          "built_at": {
            "type": "number",
            "title": "Built At",
            "description": "Build time (epoch seconds)."
          },
          "build_seconds": {
            "type": "number",
            "title": "Build Seconds"
          },
          "loaded_at": {
            "type": "number",
            "title": "Loaded At",
            "description": "When this process loaded the catalog (epoch s)."
          },
          "operators": {
            "type": "integer",
            "title": "Operators"
          },
          "notifiers": {
            "type": "integer",
            "title": "Notifiers"
          },
          "providers": {
            "type": "integer",
            "title": "Providers"
          },
          "errors": {
            "items": {
              "$ref": "#/components/schemas/CatalogError"
            },
            "type": "array",
            "title": "Errors",
            "description": "Modules that failed to import or be analysed.",
            "default": []
          }
        },
        "type": "object",
        "required": [
          "strategy",
          "built_at",
          "build_seconds",
          "loaded_at",
          "operators",
          "notifiers",
          "providers"
        ],
        "title": "CatalogDiagnostics",
        "description": "``GET /api/catalog/diagnostics``: the build's diagnostics plus the load-time filters."
      },
      "CatalogError": {
        "properties": {
          "module": {
            "type": "string",
            "title": "Module"
          },
          "provider": {
            "type": "string",
            "title": "Provider"
          },
          "error": {
            "type": "string",
            "title": "Error"
          }
        },
        "type": "object",
        "required": [
          "module",
          "provider",
          "error"
        ],
        "title": "CatalogError"
      },
      "CatalogFiltered": {
        "properties": {
          "name": {
            "type": "string",
            "title": "Name",
            "description": "Operator class path, module or distribution."
          },
          "kind": {
            "type": "string",
            "enum": [
              "operator",
              "module",
              "distribution"
            ],
            "title": "Kind"
          },
          "reason": {
            "type": "string",
            "title": "Reason",
            "description": "operator_allow, operator_deny, discovery.skip_class_pattern, discovery.skip_module_pattern, discovery.exclude_distributions, policy.forbidden_operators, policy.privileged_operators."
          },
          "detail": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Detail",
            "description": "The matching pattern."
          }
        },
        "type": "object",
        "required": [
          "name",
          "kind",
          "reason"
        ],
        "title": "CatalogFiltered",
        "description": "Something discovery or the configuration left out of the palette."
      },
      "CatalogMetadataSource": {
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "file",
              "entry_point"
            ],
            "title": "Kind"
          },
          "origin": {
            "type": "string",
            "title": "Origin",
            "description": "File path, or `name = module:attr` of the entry point."
          },
          "package": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Package"
          },
          "distribution": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Distribution"
          },
          "operators": {
            "type": "integer",
            "title": "Operators",
            "description": "Operators it applied to.",
            "default": 0
          },
          "icons": {
            "type": "integer",
            "title": "Icons",
            "description": "Package icons it provided.",
            "default": 0
          },
          "error": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Error"
          }
        },
        "type": "object",
        "required": [
          "kind",
          "origin"
        ],
        "title": "CatalogMetadataSource",
        "description": "A package metadata file or entry point read by the build."
      },
      "CatalogSourceInfo": {
        "properties": {
          "source": {
            "type": "string",
            "title": "Source",
            "description": "Source type (ProvidersSource, PathsSource\u2026)."
          },
          "detail": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Detail",
            "description": "What it scans: folders, packages, distributions, modules.",
            "default": []
          },
          "modules": {
            "type": "integer",
            "title": "Modules",
            "description": "Candidate modules it yielded.",
            "default": 0
          },
          "providers": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Providers",
            "description": "Provider/package labels it yielded.",
            "default": []
          },
          "operators": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Operators",
            "description": "Operator class paths found.",
            "default": []
          },
          "error": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Error"
          }
        },
        "type": "object",
        "required": [
          "source"
        ],
        "title": "CatalogSourceInfo",
        "description": "One catalog source of a build and what it contributed."
      },
      "CatalogStats": {
        "properties": {
          "operators": {
            "type": "integer",
            "title": "Operators"
          },
          "providers": {
            "type": "integer",
            "title": "Providers"
          },
          "errors": {
            "items": {
              "$ref": "#/components/schemas/CatalogError"
            },
            "type": "array",
            "title": "Errors"
          },
          "notifiers": {
            "type": "integer",
            "title": "Notifiers",
            "default": 0
          },
          "strategy": {
            "type": "string",
            "enum": [
              "static",
              "import"
            ],
            "title": "Strategy",
            "default": "static"
          },
          "cache_key": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Cache Key"
          },
          "loaded_from_cache": {
            "type": "boolean",
            "title": "Loaded From Cache",
            "default": false
          },
          "build_seconds": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Build Seconds"
          }
        },
        "type": "object",
        "required": [
          "operators",
          "providers",
          "errors"
        ],
        "title": "CatalogStats"
      },
      "ChatMessage": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "role": {
            "type": "string",
            "enum": [
              "user",
              "assistant"
            ],
            "title": "Role"
          },
          "content": {
            "type": "string",
            "title": "Content"
          },
          "created_at": {
            "type": "string",
            "title": "Created At"
          },
          "model": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Model"
          },
          "usage": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Usage"
              },
              {
                "type": "null"
              }
            ]
          },
          "tools": {
            "items": {
              "$ref": "#/components/schemas/ToolCallRecord"
            },
            "type": "array",
            "title": "Tools"
          },
          "citations": {
            "items": {
              "$ref": "#/components/schemas/Citation"
            },
            "type": "array",
            "title": "Citations"
          },
          "follow_ups": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Follow Ups"
          },
          "proposals": {
            "items": {
              "$ref": "#/components/schemas/Proposal"
            },
            "type": "array",
            "title": "Proposals"
          },
          "guardrails": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Guardrails"
          },
          "stopped": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Stopped"
          },
          "error": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Error"
          },
          "approvals": {
            "items": {
              "$ref": "#/components/schemas/ToolApprovalView"
            },
            "type": "array",
            "title": "Approvals",
            "description": "Tool approvals of this turn (the last one is current); a pending one means the turn is paused until the user decides its tool calls."
          },
          "history": {
            "anyOf": [
              {
                "items": {
                  "additionalProperties": true,
                  "type": "object"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "History",
            "description": "The turn's pydantic-ai messages (stored with the thread, never returned)."
          }
        },
        "type": "object",
        "required": [
          "role",
          "content"
        ],
        "title": "ChatMessage"
      },
      "ChatThread": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "user": {
            "type": "string",
            "title": "User"
          },
          "mode": {
            "type": "string",
            "enum": [
              "developer",
              "admin"
            ],
            "title": "Mode"
          },
          "title": {
            "type": "string",
            "title": "Title",
            "default": "New conversation"
          },
          "created_at": {
            "type": "string",
            "title": "Created At"
          },
          "updated_at": {
            "type": "string",
            "title": "Updated At"
          },
          "messages": {
            "items": {
              "$ref": "#/components/schemas/ChatMessage"
            },
            "type": "array",
            "title": "Messages"
          },
          "summary": {
            "type": "string",
            "title": "Summary",
            "description": "Compaction summary of older messages.",
            "default": ""
          },
          "summarized": {
            "type": "integer",
            "title": "Summarized",
            "description": "Leading messages folded into the summary (not sent verbatim).",
            "default": 0
          },
          "usage": {
            "$ref": "#/components/schemas/Usage"
          }
        },
        "type": "object",
        "required": [
          "user",
          "mode"
        ],
        "title": "ChatThread"
      },
      "ChatTurnRequest": {
        "properties": {
          "thread_id": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 40
              },
              {
                "type": "null"
              }
            ],
            "title": "Thread Id",
            "description": "Continue a thread."
          },
          "mode": {
            "type": "string",
            "enum": [
              "developer",
              "admin"
            ],
            "title": "Mode",
            "default": "developer"
          },
          "message": {
            "type": "string",
            "maxLength": 20000,
            "title": "Message",
            "description": "The user's message.",
            "default": ""
          },
          "spec": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/DagSpec"
              },
              {
                "type": "null"
              }
            ],
            "description": "The DAG open in the editor."
          },
          "model": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 200
              },
              {
                "type": "null"
              }
            ],
            "title": "Model"
          },
          "regenerate": {
            "type": "boolean",
            "title": "Regenerate",
            "description": "Answer the last user message again (replaces the answer).",
            "default": false
          },
          "research": {
            "type": "boolean",
            "title": "Research",
            "description": "Developer: give it the research tools.",
            "default": true
          },
          "mcp": {
            "anyOf": [
              {
                "items": {
                  "$ref": "#/components/schemas/McpSelection"
                },
                "type": "array",
                "maxItems": 10
              },
              {
                "type": "null"
              }
            ],
            "title": "Mcp",
            "description": "External MCP servers (and tools) to attach. Default: every server scoped to this assistant (ai.mcp_client.servers[].agents); [] attaches none."
          }
        },
        "type": "object",
        "title": "ChatTurnRequest"
      },
      "Citation": {
        "properties": {
          "n": {
            "type": "integer",
            "title": "N",
            "description": "Number the answer cites as [n]."
          },
          "kind": {
            "type": "string",
            "enum": [
              "doc",
              "source",
              "audit",
              "spec",
              "web",
              "log",
              "config",
              "tool",
              "file"
            ],
            "title": "Kind"
          },
          "title": {
            "type": "string",
            "title": "Title"
          },
          "ref": {
            "type": "string",
            "title": "Ref",
            "description": "Path, URL, audit id, log reference or document id."
          },
          "snippet": {
            "type": "string",
            "title": "Snippet",
            "default": ""
          }
        },
        "type": "object",
        "required": [
          "n",
          "kind",
          "title",
          "ref"
        ],
        "title": "Citation"
      },
      "ClearRequest": {
        "properties": {
          "only_failed": {
            "type": "boolean",
            "title": "Only Failed",
            "default": false
          },
          "dry_run": {
            "type": "boolean",
            "title": "Dry Run",
            "default": false
          },
          "only_new": {
            "type": "boolean",
            "title": "Only New",
            "description": "Airflow >= 3.2: only queue tasks added in the latest DAG version (exclusive with only_failed).",
            "default": false
          },
          "run_on_latest_version": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Run On Latest Version",
            "description": "Airflow >= 3.1: re-run on the latest bundle version (null: the DAG's / Airflow's default)."
          },
          "keep_task_state": {
            "type": "boolean",
            "title": "Keep Task State",
            "description": "Airflow >= 3.4: keep the task state store so the next attempt resumes (uses clearTaskInstances; exclusive with only_new).",
            "default": false
          }
        },
        "type": "object",
        "title": "ClearRequest"
      },
      "CodeProblem": {
        "properties": {
          "severity": {
            "type": "string",
            "enum": [
              "error",
              "warning"
            ],
            "title": "Severity"
          },
          "message": {
            "type": "string",
            "title": "Message"
          },
          "line": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Line",
            "description": "1-based line in the code, if known."
          },
          "column": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Column",
            "description": "1-based column, if known."
          }
        },
        "type": "object",
        "required": [
          "severity",
          "message"
        ],
        "title": "CodeProblem"
      },
      "CodeSyncBody": {
        "properties": {
          "source": {
            "type": "string",
            "maxLength": 100000000,
            "title": "Source",
            "description": "The edited DAG file."
          },
          "dag_id": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 250
              },
              {
                "type": "null"
              }
            ],
            "title": "Dag Id",
            "description": "DAG to take when the file defines several."
          },
          "current": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/DagSpec"
              },
              {
                "type": "null"
              }
            ],
            "description": "The document being edited: its canvas-only state (positions, labels, notes\u2026) is kept and the result carries the diff against it."
          }
        },
        "type": "object",
        "required": [
          "source"
        ],
        "title": "CodeSyncBody"
      },
      "CodeSyncResult": {
        "properties": {
          "ok": {
            "type": "boolean",
            "title": "Ok",
            "description": "A spec could be built from the code (warnings allowed)."
          },
          "spec": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/DagSpec"
              },
              {
                "type": "null"
              }
            ]
          },
          "dag_ids": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Dag Ids",
            "description": "DAGs the file defines."
          },
          "problems": {
            "items": {
              "$ref": "#/components/schemas/CodeProblem"
            },
            "type": "array",
            "title": "Problems"
          },
          "diff": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/SpecDiff"
              },
              {
                "type": "null"
              }
            ],
            "description": "Changes against the current document (when sent)."
          }
        },
        "type": "object",
        "required": [
          "ok"
        ],
        "title": "CodeSyncResult"
      },
      "CodegenResult": {
        "properties": {
          "code": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Code"
          },
          "problems": {
            "items": {
              "$ref": "#/components/schemas/Problem"
            },
            "type": "array",
            "title": "Problems"
          }
        },
        "type": "object",
        "required": [
          "code",
          "problems"
        ],
        "title": "CodegenResult"
      },
      "CollabTicket": {
        "properties": {
          "ticket": {
            "type": "string",
            "title": "Ticket"
          },
          "expires_in": {
            "type": "integer",
            "title": "Expires In"
          }
        },
        "type": "object",
        "required": [
          "ticket",
          "expires_in"
        ],
        "title": "CollabTicket"
      },
      "CompletionItem": {
        "properties": {
          "label": {
            "type": "string",
            "title": "Label"
          },
          "type": {
            "type": "string",
            "enum": [
              "function",
              "class",
              "module",
              "keyword",
              "variable",
              "property",
              "param",
              "text"
            ],
            "title": "Type"
          },
          "detail": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Detail"
          },
          "info": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Info"
          }
        },
        "type": "object",
        "required": [
          "label",
          "type"
        ],
        "title": "CompletionItem"
      },
      "CompletionList": {
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/CompletionItem"
            },
            "type": "array",
            "title": "Items"
          },
          "prefix_length": {
            "type": "integer",
            "title": "Prefix Length",
            "default": 0
          }
        },
        "type": "object",
        "required": [
          "items"
        ],
        "title": "CompletionList"
      },
      "ComponentInfo": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "title": {
            "type": "string",
            "title": "Title"
          },
          "family": {
            "type": "string",
            "enum": [
              "apache",
              "astronomer",
              "autoair"
            ],
            "title": "Family"
          },
          "default": {
            "type": "boolean",
            "title": "Default"
          },
          "description": {
            "type": "string",
            "title": "Description",
            "default": ""
          }
        },
        "type": "object",
        "required": [
          "id",
          "title",
          "family",
          "default"
        ],
        "title": "ComponentInfo"
      },
      "ConfigChange": {
        "properties": {
          "target": {
            "type": "string",
            "title": "Target",
            "description": "What it changes, e.g. \"task load: retries\"."
          },
          "format": {
            "type": "string",
            "enum": [
              "yaml",
              "json",
              "env",
              "text"
            ],
            "title": "Format",
            "default": "text"
          },
          "snippet": {
            "type": "string",
            "title": "Snippet"
          },
          "explanation": {
            "type": "string",
            "title": "Explanation",
            "default": ""
          }
        },
        "type": "object",
        "required": [
          "target",
          "snippet"
        ],
        "title": "ConfigChange"
      },
      "ConfigInfo": {
        "properties": {
          "expose": {
            "type": "string",
            "enum": [
              "true",
              "non-sensitive-only"
            ],
            "title": "Expose"
          },
          "files": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Files",
            "description": "Configuration files in effect, lowest precedence first."
          },
          "options": {
            "items": {
              "$ref": "#/components/schemas/ConfigOption"
            },
            "type": "array",
            "title": "Options"
          }
        },
        "type": "object",
        "required": [
          "expose",
          "files",
          "options"
        ],
        "title": "ConfigInfo"
      },
      "ConfigOption": {
        "properties": {
          "key": {
            "type": "string",
            "title": "Key",
            "description": "Dotted key (configuration files), e.g. storage.git.mode."
          },
          "section": {
            "type": "string",
            "title": "Section",
            "description": "Dotted section ('' = top level)."
          },
          "env": {
            "type": "string",
            "title": "Env",
            "description": "Environment variable, e.g. AUTOAIR_STORAGE__GIT__MODE."
          },
          "type": {
            "type": "string",
            "title": "Type"
          },
          "value": {
            "title": "Value",
            "description": "Effective value (secrets: ***)."
          },
          "default": {
            "title": "Default",
            "description": "Default value (null when computed)."
          },
          "default_text": {
            "type": "string",
            "title": "Default Text",
            "description": "Human-readable default."
          },
          "description": {
            "type": "string",
            "title": "Description"
          },
          "source": {
            "type": "string",
            "title": "Source",
            "description": "Where the value comes from: default, env, dotenv, secrets, init, file:<path> or ui (deploy target chosen in the UI)."
          },
          "secret": {
            "type": "boolean",
            "title": "Secret"
          }
        },
        "type": "object",
        "required": [
          "key",
          "section",
          "env",
          "type",
          "default_text",
          "description",
          "source",
          "secret"
        ],
        "title": "ConfigOption"
      },
      "Conflict": {
        "properties": {
          "path": {
            "type": "string",
            "title": "Path",
            "description": "e.g. 'schedule', 'nodes[extract].params.sql'."
          },
          "base": {
            "title": "Base"
          },
          "ours": {
            "title": "Ours"
          },
          "theirs": {
            "title": "Theirs"
          },
          "reason": {
            "type": "string",
            "title": "Reason",
            "default": "changed on both sides"
          },
          "base_present": {
            "type": "boolean",
            "title": "Base Present",
            "default": true
          },
          "ours_present": {
            "type": "boolean",
            "title": "Ours Present",
            "default": true
          },
          "theirs_present": {
            "type": "boolean",
            "title": "Theirs Present",
            "default": true
          }
        },
        "type": "object",
        "required": [
          "path"
        ],
        "title": "Conflict"
      },
      "ConflictInfo": {
        "properties": {
          "current_etag": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Current Etag"
          },
          "current_version": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Current Version"
          },
          "current_spec": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/DagSpec"
              },
              {
                "type": "null"
              }
            ]
          },
          "ejected_file": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Ejected File"
          },
          "hand_written": {
            "type": "boolean",
            "title": "Hand Written",
            "description": "ejected_file is the hand-written DAG file AutoAir keeps for this DAG (not a generated file changed outside AutoAir).",
            "default": false
          },
          "force_allowed": {
            "type": "boolean",
            "title": "Force Allowed",
            "description": "Deploying again with force=true would overwrite ejected_file for this caller (preserve.allow_force_overwrite and 'deploy:overwrite_ejected').",
            "default": false
          }
        },
        "type": "object",
        "title": "ConflictInfo"
      },
      "ConnectionDraft": {
        "properties": {
          "connection_id": {
            "type": "string",
            "pattern": "^[A-Za-z0-9_.-]{1,200}$",
            "title": "Connection Id"
          },
          "conn_type": {
            "type": "string",
            "maxLength": 200,
            "minLength": 1,
            "title": "Conn Type"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "host": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Host"
          },
          "login": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Login"
          },
          "password": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Password"
          },
          "schema": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Schema"
          },
          "port": {
            "anyOf": [
              {
                "type": "integer",
                "maximum": 65535.0,
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Port"
          },
          "extra": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Extra"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "connection_id",
          "conn_type"
        ],
        "title": "ConnectionDraft",
        "description": "A new Airflow connection; secrets are sent to Airflow and never kept by AutoAir."
      },
      "ConnectionHookMeta": {
        "properties": {
          "connection_type": {
            "type": "string",
            "title": "Connection Type"
          },
          "hook_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Hook Name"
          },
          "hook_class_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Hook Class Name"
          },
          "default_conn_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Default Conn Name"
          },
          "standard_fields": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/HookStandardFields"
              },
              {
                "type": "null"
              }
            ]
          },
          "extra_fields": {
            "additionalProperties": {
              "$ref": "#/components/schemas/HookExtraField"
            },
            "type": "object",
            "title": "Extra Fields"
          }
        },
        "type": "object",
        "required": [
          "connection_type"
        ],
        "title": "ConnectionHookMeta",
        "description": "Form metadata of a connection type (Airflow's ``/ui/connections/hook_meta``)."
      },
      "ConnectionInfo": {
        "properties": {
          "connection_id": {
            "type": "string",
            "title": "Connection Id"
          },
          "conn_type": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Conn Type"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "host": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Host"
          },
          "team_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Team Name"
          }
        },
        "type": "object",
        "required": [
          "connection_id"
        ],
        "title": "ConnectionInfo"
      },
      "ConnectionTestResult": {
        "properties": {
          "status": {
            "type": "boolean",
            "title": "Status"
          },
          "message": {
            "type": "string",
            "title": "Message",
            "default": ""
          }
        },
        "type": "object",
        "required": [
          "status"
        ],
        "title": "ConnectionTestResult"
      },
      "ConnectionTypeInfo": {
        "properties": {
          "conn_type": {
            "type": "string",
            "title": "Conn Type"
          },
          "hook_class": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Hook Class"
          },
          "hook_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Hook Name"
          },
          "provider": {
            "type": "string",
            "title": "Provider"
          },
          "default_conn_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Default Conn Name"
          }
        },
        "type": "object",
        "required": [
          "conn_type",
          "provider"
        ],
        "title": "ConnectionTypeInfo"
      },
      "CronSchedule": {
        "properties": {
          "type": {
            "type": "string",
            "const": "cron",
            "title": "Type"
          },
          "expression": {
            "type": "string",
            "pattern": "^\\S+( \\S+){4,5}$",
            "title": "Expression",
            "examples": [
              "0 6 * * 1-5"
            ]
          },
          "timezone": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Timezone",
            "examples": [
              "UTC",
              "Europe/Istanbul"
            ]
          },
          "data_interval": {
            "type": "boolean",
            "title": "Data Interval",
            "description": "Airflow 2 semantics: logical date = start of the interval.",
            "default": false
          },
          "interval_seconds": {
            "anyOf": [
              {
                "type": "number",
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Interval Seconds",
            "description": "CronTriggerTimetable(interval=...) data interval length."
          },
          "run_immediately": {
            "type": "boolean",
            "title": "Run Immediately",
            "default": false
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "type",
          "expression"
        ],
        "title": "CronSchedule",
        "description": "``CronTriggerTimetable`` (default) or ``CronDataIntervalTimetable``."
      },
      "CustomNode": {
        "properties": {
          "id": {
            "type": "string",
            "maxLength": 100,
            "minLength": 1,
            "pattern": "^[A-Za-z0-9_-]+$",
            "title": "Id"
          },
          "label": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 200
              },
              {
                "type": "null"
              }
            ],
            "title": "Label",
            "description": "Canvas label only."
          },
          "icon": {
            "anyOf": [
              {
                "type": "string",
                "pattern": "^(builtin|custom|package):[a-z0-9][a-z0-9-]{0,80}$"
              },
              {
                "type": "null"
              }
            ],
            "title": "Icon",
            "description": "Canvas icon only (builtin:<logo> or custom:<name>); overrides the default."
          },
          "parent_group": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 100,
                "minLength": 1,
                "pattern": "^[A-Za-z0-9_-]+$"
              },
              {
                "type": "null"
              }
            ],
            "title": "Parent Group",
            "description": "Id of a task_group node."
          },
          "position": {
            "$ref": "#/components/schemas/Position"
          },
          "task_id": {
            "type": "string",
            "maxLength": 250,
            "minLength": 1,
            "pattern": "^[A-Za-z0-9_.-]+$",
            "title": "Task Id"
          },
          "trigger_rule": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "all_success",
                  "all_failed",
                  "all_done",
                  "all_done_min_one_success",
                  "all_skipped",
                  "one_success",
                  "one_done",
                  "one_failed",
                  "none_failed",
                  "none_failed_min_one_success",
                  "none_skipped",
                  "always",
                  "all_done_setup_success"
                ]
              },
              {
                "type": "null"
              }
            ],
            "title": "Trigger Rule"
          },
          "retries": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Retries"
          },
          "retry_delay_seconds": {
            "anyOf": [
              {
                "type": "number",
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Retry Delay Seconds"
          },
          "execution_timeout_seconds": {
            "anyOf": [
              {
                "type": "number",
                "exclusiveMinimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Execution Timeout Seconds"
          },
          "pool": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Pool"
          },
          "pool_slots": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 1.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Pool Slots"
          },
          "queue": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Queue"
          },
          "owner": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Owner"
          },
          "doc_md": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Doc Md"
          },
          "outlets": {
            "items": {
              "$ref": "#/components/schemas/AssetRef"
            },
            "type": "array",
            "title": "Outlets"
          },
          "inlets": {
            "items": {
              "$ref": "#/components/schemas/AssetRef"
            },
            "type": "array",
            "title": "Inlets"
          },
          "mapping": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/MappingSpec"
              },
              {
                "type": "null"
              }
            ]
          },
          "is_setup": {
            "type": "boolean",
            "title": "Is Setup",
            "default": false
          },
          "is_teardown": {
            "type": "boolean",
            "title": "Is Teardown",
            "default": false
          },
          "callbacks": {
            "$ref": "#/components/schemas/Callbacks"
          },
          "retry_policy": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/RetryPolicySpec"
              },
              {
                "type": "null"
              }
            ]
          },
          "retry_exponential_backoff": {
            "anyOf": [
              {
                "type": "number",
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Retry Exponential Backoff"
          },
          "priority_weight": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Priority Weight"
          },
          "weight_rule": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "downstream",
                  "upstream",
                  "absolute"
                ]
              },
              {
                "type": "null"
              }
            ],
            "title": "Weight Rule"
          },
          "task_display_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Task Display Name"
          },
          "executor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Executor"
          },
          "executor_config": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Executor Config"
          },
          "max_active_tis_per_dagrun": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 1.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Max Active Tis Per Dagrun"
          },
          "depends_on_past": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Depends On Past"
          },
          "disabled": {
            "type": "boolean",
            "title": "Disabled",
            "description": "Excluded from the generated DAG (kept on the canvas).",
            "default": false
          },
          "lineage": {
            "type": "string",
            "enum": [
              "inherit",
              "enabled",
              "disabled"
            ],
            "title": "Lineage",
            "description": "OpenLineage selective enable/disable for this task.",
            "default": "inherit"
          },
          "template_ref": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/TemplateRef"
              },
              {
                "type": "null"
              }
            ],
            "description": "Operator template (blueprint) this task was created from; validation enforces the template's locked fields. Not part of the generated DAG."
          },
          "kind": {
            "type": "string",
            "const": "custom",
            "title": "Kind"
          },
          "handler": {
            "type": "string",
            "pattern": "^[a-z0-9_.-]+$",
            "title": "Handler"
          },
          "config": {
            "additionalProperties": true,
            "type": "object",
            "title": "Config"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "id",
          "task_id",
          "kind",
          "handler"
        ],
        "title": "CustomNode",
        "description": "Node provided by an extension handler (entry point group ``autoair.node_kinds``)."
      },
      "DagExplanation": {
        "properties": {
          "summary": {
            "type": "string",
            "title": "Summary",
            "description": "What the DAG does and why, 1-3 sentences."
          },
          "schedule": {
            "type": "string",
            "title": "Schedule",
            "description": "When it runs, in plain language."
          },
          "steps": {
            "items": {
              "$ref": "#/components/schemas/ExplainStep"
            },
            "type": "array",
            "title": "Steps",
            "description": "Tasks in execution order."
          },
          "data_flow": {
            "type": "string",
            "title": "Data Flow",
            "description": "How data moves between tasks and systems."
          },
          "connections": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Connections",
            "description": "Airflow connections / variables it needs."
          },
          "risks": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Risks",
            "description": "Operational risks worth knowing."
          },
          "model": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Model"
          },
          "usage": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Usage"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "type": "object",
        "required": [
          "summary",
          "schedule",
          "steps",
          "data_flow",
          "connections",
          "risks"
        ],
        "title": "DagExplanation"
      },
      "DagFactoryExport": {
        "properties": {
          "yaml": {
            "type": "string",
            "title": "Yaml"
          },
          "warnings": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Warnings"
          }
        },
        "type": "object",
        "required": [
          "yaml",
          "warnings"
        ],
        "title": "DagFactoryExport"
      },
      "DagParam": {
        "properties": {
          "default": {
            "title": "Default"
          },
          "type": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "string",
                  "number",
                  "integer",
                  "boolean",
                  "array",
                  "object",
                  "null"
                ]
              },
              {
                "items": {
                  "type": "string",
                  "enum": [
                    "string",
                    "number",
                    "integer",
                    "boolean",
                    "array",
                    "object",
                    "null"
                  ]
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Type"
          },
          "title": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Title"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "description_md": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description Md"
          },
          "section": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Section"
          },
          "format": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Format",
            "examples": [
              "date",
              "date-time",
              "time",
              "duration",
              "multiline",
              "email"
            ]
          },
          "enum": {
            "anyOf": [
              {
                "items": {},
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Enum"
          },
          "values_display": {
            "anyOf": [
              {
                "additionalProperties": {
                  "type": "string"
                },
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Values Display"
          },
          "examples": {
            "anyOf": [
              {
                "items": {},
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Examples"
          },
          "minimum": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Minimum"
          },
          "maximum": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Maximum"
          },
          "min_length": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Min Length"
          },
          "max_length": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Max Length"
          },
          "pattern": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Pattern"
          },
          "items": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Items"
          },
          "const": {
            "title": "Const"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "title": "DagParam",
        "description": "``airflow.sdk.Param`` \u2014 JSON Schema validated, rendered in Airflow's trigger form."
      },
      "DagRunInfo": {
        "properties": {
          "dag_run_id": {
            "type": "string",
            "title": "Dag Run Id"
          },
          "state": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "State"
          },
          "run_type": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Run Type"
          },
          "logical_date": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Logical Date"
          },
          "run_after": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Run After"
          },
          "start_date": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Start Date"
          },
          "end_date": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "End Date"
          },
          "conf": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Conf"
          },
          "bundle_version": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Bundle Version"
          },
          "note": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Note"
          }
        },
        "type": "object",
        "required": [
          "dag_run_id"
        ],
        "title": "DagRunInfo"
      },
      "DagSource": {
        "properties": {
          "policy": {
            "type": "string",
            "enum": [
              "auto",
              "generate",
              "preserve",
              "strict-preserve"
            ],
            "title": "Policy",
            "description": "auto | generate | preserve | strict-preserve (see the model description).",
            "default": "auto"
          },
          "origin": {
            "type": "string",
            "enum": [
              "autoair",
              "python"
            ],
            "title": "Origin",
            "description": "autoair: built in AutoAir; python: imported from or edited as a hand-written Python file (makes 'auto' preserve).",
            "default": "autoair"
          },
          "code": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 2000000
              },
              {
                "type": "null"
              }
            ],
            "title": "Code",
            "description": "The hand-written file this spec was last imported from or applied in the code mode. Preserve patches it when the deploy target has no newer version of the file. Writing it needs the 'code:raw' permission (it is arbitrary Python)."
          },
          "base_sha": {
            "anyOf": [
              {
                "type": "string",
                "pattern": "^[0-9a-f]{64}$"
              },
              {
                "type": "null"
              }
            ],
            "title": "Base Sha",
            "description": "sha256 of the file the editor started from (the imported file). Equal to the hash of `code`: the code is that file unchanged; different: it was edited in the code mode, so a merge with changes made outside AutoAir uses the version deployed last as the common ancestor."
          }
        },
        "additionalProperties": false,
        "type": "object",
        "title": "DagSource",
        "description": "How the DAG file of a spec-backed DAG is written (python output mode only).\n\n``generate`` writes the file AutoAir generates from the spec; ``preserve`` applies each\nchange to the existing (hand-written) file as a minimal patch and keeps its comments,\nformatting and ordering; ``strict-preserve`` is preserve that refuses every change it\ncannot apply exactly. ``auto``: preserve for DAGs that come from hand-written Python\n(imported or applied in the code mode), generate for DAGs built in AutoAir."
      },
      "DagSpec": {
        "properties": {
          "spec_version": {
            "type": "integer",
            "const": 3,
            "title": "Spec Version",
            "default": 3
          },
          "dag_id": {
            "type": "string",
            "maxLength": 250,
            "minLength": 1,
            "pattern": "^[A-Za-z0-9_.-]+$",
            "title": "Dag Id"
          },
          "output_mode": {
            "type": "string",
            "enum": [
              "python",
              "loader",
              "yaml"
            ],
            "title": "Output Mode",
            "default": "python"
          },
          "display_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Display Name"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "doc_md": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Doc Md"
          },
          "schedule": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/NoSchedule"
              },
              {
                "$ref": "#/components/schemas/PresetSchedule"
              },
              {
                "$ref": "#/components/schemas/CronSchedule"
              },
              {
                "$ref": "#/components/schemas/IntervalSchedule"
              },
              {
                "$ref": "#/components/schemas/MultiCronSchedule"
              },
              {
                "$ref": "#/components/schemas/EventsSchedule"
              },
              {
                "$ref": "#/components/schemas/AssetSchedule"
              },
              {
                "$ref": "#/components/schemas/AssetOrTimeScheduleSpec"
              },
              {
                "$ref": "#/components/schemas/AssetAndTimeScheduleSpec"
              },
              {
                "$ref": "#/components/schemas/PartitionedCronSchedule"
              },
              {
                "$ref": "#/components/schemas/PartitionedAssetSchedule"
              }
            ],
            "title": "Schedule",
            "discriminator": {
              "propertyName": "type",
              "mapping": {
                "assets": "#/components/schemas/AssetSchedule",
                "assets_and_time": "#/components/schemas/AssetAndTimeScheduleSpec",
                "assets_or_time": "#/components/schemas/AssetOrTimeScheduleSpec",
                "cron": "#/components/schemas/CronSchedule",
                "events": "#/components/schemas/EventsSchedule",
                "interval": "#/components/schemas/IntervalSchedule",
                "multi_cron": "#/components/schemas/MultiCronSchedule",
                "none": "#/components/schemas/NoSchedule",
                "partitioned_assets": "#/components/schemas/PartitionedAssetSchedule",
                "partitioned_cron": "#/components/schemas/PartitionedCronSchedule",
                "preset": "#/components/schemas/PresetSchedule"
              }
            }
          },
          "timezone": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Timezone",
            "description": "DAG timezone (IANA). start/end dates are wall-clock times in it and schedules without their own timezone (presets, cron, intervals) follow it. None: Airflow's default_timezone (UTC unless configured).",
            "examples": [
              "Europe/Istanbul",
              "America/New_York"
            ]
          },
          "start_date": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Start Date"
          },
          "end_date": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "End Date"
          },
          "catchup": {
            "type": "boolean",
            "title": "Catchup",
            "default": false
          },
          "tags": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Tags"
          },
          "max_active_runs": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 1.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Max Active Runs"
          },
          "max_active_tasks": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 1.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Max Active Tasks"
          },
          "dagrun_timeout_seconds": {
            "anyOf": [
              {
                "type": "number",
                "exclusiveMinimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Dagrun Timeout Seconds"
          },
          "is_paused_upon_creation": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Is Paused Upon Creation"
          },
          "default_args": {
            "$ref": "#/components/schemas/DefaultArgs"
          },
          "params": {
            "patternProperties": {
              "^[A-Za-z_][A-Za-z0-9_]*$": {
                "$ref": "#/components/schemas/DagParam"
              }
            },
            "propertyNames": {
              "maxLength": 100
            },
            "type": "object",
            "title": "Params"
          },
          "callbacks": {
            "$ref": "#/components/schemas/Callbacks",
            "description": "DAG-level on_success / on_failure only."
          },
          "deadlines": {
            "items": {
              "$ref": "#/components/schemas/DeadlineSpec"
            },
            "type": "array",
            "title": "Deadlines"
          },
          "fail_fast": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Fail Fast"
          },
          "max_consecutive_failed_dag_runs": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 1.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Max Consecutive Failed Dag Runs"
          },
          "owner_links": {
            "additionalProperties": {
              "type": "string"
            },
            "type": "object",
            "title": "Owner Links"
          },
          "render_template_as_native_obj": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Render Template As Native Obj"
          },
          "rerun_with_latest_version": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Rerun With Latest Version"
          },
          "team": {
            "anyOf": [
              {
                "type": "string",
                "pattern": "^[a-z0-9_-]+$"
              },
              {
                "type": "null"
              }
            ],
            "title": "Team"
          },
          "lineage": {
            "type": "string",
            "enum": [
              "inherit",
              "enabled",
              "disabled"
            ],
            "title": "Lineage",
            "description": "OpenLineage for the whole DAG (selective enable/disable).",
            "default": "inherit"
          },
          "environments": {
            "patternProperties": {
              "^[A-Za-z0-9_.-]+$": {
                "$ref": "#/components/schemas/EnvironmentOverlay"
              }
            },
            "propertyNames": {
              "maxLength": 250,
              "minLength": 1
            },
            "type": "object",
            "title": "Environments"
          },
          "nodes": {
            "items": {
              "oneOf": [
                {
                  "$ref": "#/components/schemas/OperatorNode"
                },
                {
                  "$ref": "#/components/schemas/PythonTaskNode"
                },
                {
                  "$ref": "#/components/schemas/TaskGroupNode"
                },
                {
                  "$ref": "#/components/schemas/CustomNode"
                },
                {
                  "$ref": "#/components/schemas/BlueprintNode"
                },
                {
                  "$ref": "#/components/schemas/NoteNode"
                }
              ],
              "discriminator": {
                "propertyName": "kind",
                "mapping": {
                  "blueprint": "#/components/schemas/BlueprintNode",
                  "custom": "#/components/schemas/CustomNode",
                  "note": "#/components/schemas/NoteNode",
                  "operator": "#/components/schemas/OperatorNode",
                  "python_task": "#/components/schemas/PythonTaskNode",
                  "task_group": "#/components/schemas/TaskGroupNode"
                }
              }
            },
            "type": "array",
            "title": "Nodes"
          },
          "edges": {
            "items": {
              "$ref": "#/components/schemas/Edge"
            },
            "type": "array",
            "title": "Edges"
          },
          "source": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/DagSource"
              },
              {
                "type": "null"
              }
            ],
            "description": "Source policy of the DAG file (generate / preserve / strict-preserve) and the hand-written file it comes from. None: auto policy, built in AutoAir."
          },
          "raw_code": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 2000000
              },
              {
                "type": "null"
              }
            ],
            "title": "Raw Code",
            "description": "Raw code DAG: the complete DAG file, written by hand and deployed as it is (no generated code, no spec rules; validated by syntax, lint, secret, policy and import checks). Set: nodes and edges must be empty, output_mode is python and environment overlays do not change the file. Absent: a spec-backed (visual) DAG."
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "dag_id"
        ],
        "title": "DagSpec"
      },
      "DagStatus": {
        "properties": {
          "dag_id": {
            "type": "string",
            "title": "Dag Id"
          },
          "exists": {
            "type": "boolean",
            "title": "Exists"
          },
          "is_paused": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Is Paused"
          },
          "file_token": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "File Token"
          },
          "fileloc": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Fileloc"
          },
          "last_parsed_time": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Last Parsed Time"
          },
          "scheduling_state": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Scheduling State",
            "description": "Airflow >= 3.4: active / draining / paused (null on older versions)."
          },
          "latest_runs": {
            "items": {
              "additionalProperties": true,
              "type": "object"
            },
            "type": "array",
            "title": "Latest Runs",
            "default": []
          }
        },
        "type": "object",
        "required": [
          "dag_id",
          "exists"
        ],
        "title": "DagStatus"
      },
      "DagTaskOutcome": {
        "properties": {
          "task_id": {
            "type": "string",
            "title": "Task Id"
          },
          "state": {
            "type": "string",
            "title": "State"
          },
          "duration": {
            "type": "number",
            "title": "Duration",
            "default": 0.0
          },
          "return_value_repr": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Return Value Repr"
          },
          "error": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Error"
          }
        },
        "type": "object",
        "required": [
          "task_id",
          "state"
        ],
        "title": "DagTaskOutcome"
      },
      "DagTestResult": {
        "properties": {
          "state": {
            "type": "string",
            "title": "State"
          },
          "mode": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "memory",
                  "db"
                ]
              },
              {
                "type": "null"
              }
            ],
            "title": "Mode"
          },
          "duration": {
            "type": "number",
            "title": "Duration",
            "default": 0.0
          },
          "tasks": {
            "items": {
              "$ref": "#/components/schemas/DagTaskOutcome"
            },
            "type": "array",
            "title": "Tasks",
            "default": []
          },
          "log": {
            "type": "string",
            "title": "Log",
            "default": ""
          },
          "error": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Error"
          },
          "where": {
            "type": "string",
            "title": "Where",
            "description": "Where the code ran: local (this server), validator (the validator service) or none (it did not run).",
            "readOnly": true
          },
          "process_isolated": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Process Isolated",
            "description": "Whether the run had its own PID namespace (runner.process_isolation); false: it ran with the audit hook only and could see other processes (not fully isolated), null: not known.",
            "readOnly": true
          }
        },
        "type": "object",
        "required": [
          "state",
          "where",
          "process_isolated"
        ],
        "title": "DagTestResult"
      },
      "DagUpgrade": {
        "properties": {
          "dag_id": {
            "type": "string",
            "title": "Dag Id"
          },
          "summary": {
            "type": "string",
            "title": "Summary",
            "default": ""
          },
          "findings": {
            "items": {
              "$ref": "#/components/schemas/Finding"
            },
            "type": "array",
            "title": "Findings"
          },
          "ruff": {
            "items": {
              "$ref": "#/components/schemas/RuffDiagnostic"
            },
            "type": "array",
            "title": "Ruff"
          },
          "ruff_ran": {
            "type": "boolean",
            "title": "Ruff Ran",
            "default": false
          },
          "base_spec": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/DagSpec"
              },
              {
                "type": "null"
              }
            ]
          },
          "proposed_spec": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/DagSpec"
              },
              {
                "type": "null"
              }
            ]
          },
          "proposed_ok": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Proposed Ok"
          },
          "problems": {
            "items": {
              "$ref": "#/components/schemas/SpecProblem"
            },
            "type": "array",
            "title": "Problems"
          },
          "skipped": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Skipped"
          },
          "code_before": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Code Before"
          },
          "code_after": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Code After"
          },
          "ai_used": {
            "type": "boolean",
            "title": "Ai Used",
            "default": false
          },
          "error": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Error"
          }
        },
        "type": "object",
        "required": [
          "dag_id"
        ],
        "title": "DagUpgrade"
      },
      "DagVersionInfo": {
        "properties": {
          "version_number": {
            "type": "integer",
            "title": "Version Number"
          },
          "bundle_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Bundle Name"
          },
          "bundle_version": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Bundle Version"
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At"
          },
          "bundle_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Bundle Url"
          }
        },
        "type": "object",
        "required": [
          "version_number"
        ],
        "title": "DagVersionInfo"
      },
      "DatabaseStatus": {
        "properties": {
          "backend": {
            "type": "string",
            "enum": [
              "file",
              "sqlite",
              "postgresql"
            ],
            "title": "Backend"
          },
          "url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Url"
          },
          "reachable": {
            "type": "boolean",
            "title": "Reachable",
            "default": true
          },
          "current": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Current"
          },
          "head": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Head"
          },
          "pending": {
            "items": {
              "$ref": "#/components/schemas/MigrationInfo"
            },
            "type": "array",
            "title": "Pending"
          },
          "applied": {
            "items": {
              "$ref": "#/components/schemas/MigrationInfo"
            },
            "type": "array",
            "title": "Applied"
          },
          "pool": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Pool"
          },
          "tables": {
            "additionalProperties": {
              "type": "integer"
            },
            "type": "object",
            "title": "Tables"
          },
          "state_dir": {
            "type": "string",
            "title": "State Dir"
          }
        },
        "type": "object",
        "required": [
          "backend",
          "state_dir"
        ],
        "title": "DatabaseStatus"
      },
      "DeadlineSpec": {
        "properties": {
          "name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Name"
          },
          "reference": {
            "type": "string",
            "enum": [
              "dagrun_queued_at",
              "dagrun_logical_date",
              "fixed_datetime",
              "average_runtime"
            ],
            "title": "Reference",
            "default": "dagrun_queued_at"
          },
          "interval_seconds": {
            "type": "number",
            "title": "Interval Seconds"
          },
          "fixed_datetime": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Fixed Datetime"
          },
          "average_max_runs": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 1.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Average Max Runs"
          },
          "callback": {
            "$ref": "#/components/schemas/CallbackRef"
          },
          "synchronous": {
            "type": "boolean",
            "title": "Synchronous",
            "default": false
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "interval_seconds",
          "callback"
        ],
        "title": "DeadlineSpec",
        "description": "Airflow >= 3.1 ``DeadlineAlert``."
      },
      "Decision": {
        "properties": {
          "user": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "User"
          },
          "decision": {
            "type": "string",
            "enum": [
              "approve",
              "reject",
              "applied"
            ],
            "title": "Decision"
          },
          "at": {
            "type": "string",
            "title": "At"
          },
          "comment": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Comment"
          },
          "finding_ids": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Finding Ids"
          },
          "detail": {
            "additionalProperties": true,
            "type": "object",
            "title": "Detail"
          }
        },
        "type": "object",
        "required": [
          "user",
          "decision"
        ],
        "title": "Decision"
      },
      "DecisionResult": {
        "properties": {
          "analysis": {
            "$ref": "#/components/schemas/TroubleshootAnalysis"
          },
          "applied": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/AppliedPatches"
              },
              {
                "type": "null"
              }
            ]
          },
          "code_after": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Code After"
          }
        },
        "type": "object",
        "required": [
          "analysis"
        ],
        "title": "DecisionResult"
      },
      "DefaultArgs": {
        "properties": {
          "owner": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Owner"
          },
          "retries": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Retries"
          },
          "retry_delay_seconds": {
            "anyOf": [
              {
                "type": "number",
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Retry Delay Seconds"
          },
          "execution_timeout_seconds": {
            "anyOf": [
              {
                "type": "number",
                "exclusiveMinimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Execution Timeout Seconds"
          },
          "depends_on_past": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Depends On Past"
          },
          "email": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Email"
          },
          "email_on_failure": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Email On Failure"
          },
          "pool": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Pool"
          },
          "queue": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Queue"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "title": "DefaultArgs"
      },
      "DeleteResult": {
        "properties": {
          "deleted": {
            "type": "boolean",
            "title": "Deleted",
            "description": "Something was deleted or a deleting pull request opened."
          },
          "status": {
            "type": "string",
            "enum": [
              "deleted",
              "not_found",
              "pending_approval",
              "pr_opened"
            ],
            "title": "Status",
            "description": "'deleted': gone from the target; 'pr_opened': a pull request removes it (still live until merged); 'pending_approval' (HTTP 202): stored as a delete proposal that needs another user's approval (iam.require_approval); 'not_found'.",
            "default": "deleted"
          },
          "proposal_etag": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Proposal Etag",
            "description": "Etag of the stored delete proposal (pending_approval)."
          },
          "message": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Message"
          }
        },
        "type": "object",
        "required": [
          "deleted"
        ],
        "title": "DeleteResult"
      },
      "DeleteTemplateResult": {
        "properties": {
          "deleted": {
            "type": "boolean",
            "title": "Deleted"
          }
        },
        "type": "object",
        "required": [
          "deleted"
        ],
        "title": "DeleteTemplateResult"
      },
      "DeployCandidate": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "kind": {
            "type": "string",
            "enum": [
              "local",
              "airflow-bundle",
              "git-checkout",
              "object-bundle",
              "object"
            ],
            "title": "Kind"
          },
          "title": {
            "type": "string",
            "title": "Title"
          },
          "description": {
            "type": "string",
            "title": "Description",
            "default": ""
          },
          "repo": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Repo"
          },
          "branch": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Branch"
          },
          "subdir": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Subdir"
          },
          "conn_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Conn Id"
          },
          "provider": {
            "type": "string",
            "enum": [
              "local",
              "github",
              "gitlab",
              "bitbucket",
              "azure",
              "gitea"
            ],
            "title": "Provider",
            "default": "local"
          },
          "object_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Object Url",
            "description": "Object storage candidates: fsspec URL of the DAG prefix."
          },
          "settings": {
            "$ref": "#/components/schemas/StorageSettings",
            "description": "Proposed deploy target settings."
          }
        },
        "type": "object",
        "required": [
          "id",
          "kind",
          "title",
          "settings"
        ],
        "title": "DeployCandidate"
      },
      "DeployMessage": {
        "properties": {
          "title": {
            "type": "string",
            "title": "Title"
          },
          "description": {
            "type": "string",
            "title": "Description"
          },
          "ai_used": {
            "type": "boolean",
            "title": "Ai Used",
            "default": false
          },
          "new_dag": {
            "type": "boolean",
            "title": "New Dag",
            "default": false
          },
          "model": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Model"
          },
          "usage": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Usage"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "type": "object",
        "required": [
          "title",
          "description"
        ],
        "title": "DeployMessage"
      },
      "DeployMessageRequest": {
        "properties": {
          "spec": {
            "$ref": "#/components/schemas/DagSpec"
          },
          "environment": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 100
              },
              {
                "type": "null"
              }
            ],
            "title": "Environment"
          },
          "use_ai": {
            "type": "boolean",
            "title": "Use Ai",
            "default": true
          },
          "model": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 200
              },
              {
                "type": "null"
              }
            ],
            "title": "Model"
          }
        },
        "type": "object",
        "required": [
          "spec"
        ],
        "title": "DeployMessageRequest"
      },
      "DeployPreview": {
        "properties": {
          "target_kind": {
            "type": "string",
            "title": "Target Kind"
          },
          "git_mode": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "pr",
                  "push"
                ]
              },
              {
                "type": "null"
              }
            ],
            "title": "Git Mode"
          },
          "opens_pr": {
            "type": "boolean",
            "title": "Opens Pr",
            "default": false
          },
          "commit_message": {
            "type": "string",
            "title": "Commit Message"
          },
          "pr_title": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Pr Title"
          },
          "pr_body": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Pr Body"
          },
          "context": {
            "type": "string",
            "title": "Context",
            "description": "The mandatory context block (cannot be removed)."
          },
          "trailers": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Trailers"
          },
          "commit_author": {
            "type": "string",
            "enum": [
              "service",
              "user"
            ],
            "title": "Commit Author",
            "default": "service"
          },
          "credentials": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/GitCredentialsInfo"
              },
              {
                "type": "null"
              }
            ]
          },
          "validation": {
            "type": "string",
            "title": "Validation",
            "description": "Static validation summary (no import check)."
          }
        },
        "type": "object",
        "required": [
          "target_kind",
          "commit_message",
          "context",
          "validation"
        ],
        "title": "DeployPreview",
        "description": "What a deploy would write: the commit message and pull request texts with the\nmandatory context block (the deploy dialog shows it)."
      },
      "DeployRequest": {
        "properties": {
          "spec": {
            "$ref": "#/components/schemas/DagSpec"
          },
          "base_etag": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Base Etag",
            "description": "Etag of the spec this edit started from (or the If-Match header). Required to overwrite an existing DAG (storage.require_base_etag); a stale one returns status 'conflict'."
          },
          "environment": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Environment"
          },
          "message": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 20000
              },
              {
                "type": "null"
              }
            ],
            "title": "Message",
            "description": "Commit message (first line: subject). AutoAir appends the mandatory context block and trailers (autoair.governance); they cannot be removed."
          },
          "pr_description": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 60000
              },
              {
                "type": "null"
              }
            ],
            "title": "Pr Description",
            "description": "Pull request description (git PR mode): the {description} placeholder of storage.git.pr_body_template; the context block is always appended."
          },
          "git_conn_id": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 250
              },
              {
                "type": "null"
              }
            ],
            "title": "Git Conn Id",
            "description": "per_user git credentials: the user's Airflow connection to commit with (must match storage.git.user_conn_id_pattern; default: the template's)."
          },
          "force": {
            "type": "boolean",
            "title": "Force",
            "description": "Overwrite a generated file that was changed outside AutoAir, or the hand-written file AutoAir keeps (output modes other than python and raw code; needs preserve.allow_force_overwrite and 'deploy:overwrite_ejected', otherwise ignored). Python DAG files use source_resolution instead.",
            "default": false
          },
          "source_resolution": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "preserve",
                  "overwrite"
                ]
              },
              {
                "type": "null"
              }
            ],
            "title": "Source Resolution",
            "description": "Answer to a deploy that stopped at a DAG file changed outside AutoAir (status 'ejected'): preserve applies the change to that file (LibCST patch); overwrite regenerates it and discards the outside changes (needs preserve.allow_force_overwrite, 'deploy:overwrite_ejected' and, for a file changed outside AutoAir, preserve.ejected_files=overwrite)."
          },
          "source_target_sha": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 64
              },
              {
                "type": "null"
              }
            ],
            "title": "Source Target Sha",
            "description": "The `target_sha` of the source preview the user reviewed: the deploy stops ('source_refused') when the DAG file in the target is no longer that one ('' = there was no file)."
          },
          "create_only": {
            "type": "boolean",
            "title": "Create Only",
            "description": "Only create: when the DAG already exists in the target the deploy returns status 'conflict' and writes nothing (bulk imports use it so nothing is overwritten without confirmation).",
            "default": false
          },
          "direct_push": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Direct Push",
            "description": "Git targets: true pushes straight to the branch even in PR mode (needs 'deploy:direct_push'); false opens a pull request even in push mode; null follows the target's mode (and iam.force_pr_without_direct_push)."
          }
        },
        "type": "object",
        "required": [
          "spec"
        ],
        "title": "DeployRequest"
      },
      "DeployResult": {
        "properties": {
          "deployed": {
            "type": "boolean",
            "title": "Deployed"
          },
          "status": {
            "type": "string",
            "enum": [
              "deployed",
              "invalid",
              "conflict",
              "ejected",
              "pending_approval",
              "source_refused"
            ],
            "title": "Status",
            "description": "'pending_approval' (HTTP 202): stored as a deploy proposal that needs another user's approval (iam.require_approval); nothing went live.",
            "default": "deployed"
          },
          "report": {
            "$ref": "#/components/schemas/ValidationReport"
          },
          "dag_file": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Dag File"
          },
          "etag": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Etag"
          },
          "version": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Version"
          },
          "pr_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Pr Url"
          },
          "branch": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Branch"
          },
          "reparse_requested": {
            "type": "boolean",
            "title": "Reparse Requested",
            "default": false
          },
          "conflict": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ConflictInfo"
              },
              {
                "type": "null"
              }
            ]
          },
          "proposal_etag": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Proposal Etag",
            "description": "Etag of the stored deploy proposal (pending_approval)."
          },
          "source": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/SourcePlan"
              },
              {
                "type": "null"
              }
            ],
            "description": "Python DAGs: how the DAG file was (or would be) written -- generated or the existing file patched (source policy), with the diff; 'source_refused': why the change cannot be applied to the existing file."
          },
          "stored_spec": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/DagSpec"
              },
              {
                "type": "null"
              }
            ],
            "description": "The spec as stored, when it differs from the one sent (a preserve deploy merged changes made to the file outside AutoAir): reload it."
          },
          "message": {
            "type": "string",
            "title": "Message"
          }
        },
        "type": "object",
        "required": [
          "deployed",
          "report",
          "message"
        ],
        "title": "DeployResult"
      },
      "DeployRights": {
        "properties": {
          "git_mode": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "pr",
                  "push"
                ]
              },
              {
                "type": "null"
              }
            ],
            "title": "Git Mode",
            "description": "Git deploy mode of the default target (null: not a git target)."
          },
          "can_save": {
            "type": "boolean",
            "title": "Can Save",
            "description": "May save at all (spec:write)."
          },
          "can_deploy_live": {
            "type": "boolean",
            "title": "Can Deploy Live",
            "description": "May write changes that go live (deploy)."
          },
          "direct_push": {
            "type": "boolean",
            "title": "Direct Push",
            "description": "May send direct_push=true (push to the branch, bypassing a PR)."
          },
          "default_opens_pr": {
            "type": "boolean",
            "title": "Default Opens Pr",
            "description": "A plain deploy (direct_push omitted) opens/updates a pull request."
          },
          "require_approval": {
            "type": "boolean",
            "title": "Require Approval",
            "description": "Live deploys need another reviewer's approval of the version."
          },
          "git_token": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "off",
                  "optional",
                  "required"
                ]
              },
              {
                "type": "null"
              }
            ],
            "title": "Git Token",
            "description": "Git targets: deploys take a token typed by the user (storage.git.request_token after the kill switch and forced-connection rule; required: the quick deploy opens the deploy dialog). Null: not a git target."
          }
        },
        "type": "object",
        "required": [
          "git_mode",
          "can_save",
          "can_deploy_live",
          "direct_push",
          "default_opens_pr",
          "require_approval"
        ],
        "title": "DeployRights",
        "description": "What a deploy of the default target does for this user."
      },
      "DeployTargetInfo": {
        "properties": {
          "settings": {
            "$ref": "#/components/schemas/StorageSettings"
          },
          "source": {
            "type": "string",
            "title": "Source"
          },
          "status": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/TargetStatus"
              },
              {
                "type": "null"
              }
            ]
          },
          "error": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Error"
          },
          "candidates": {
            "items": {
              "$ref": "#/components/schemas/DeployCandidate"
            },
            "type": "array",
            "title": "Candidates"
          },
          "policy": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/DeployTargetPolicy"
              },
              {
                "type": "null"
              }
            ]
          },
          "request_token": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/RequestTokenInfo"
              },
              {
                "type": "null"
              }
            ],
            "description": "Git targets: whether deploys take a token typed by the user (header X-AutoAir-Git-Token) and which token the git host needs."
          }
        },
        "type": "object",
        "required": [
          "settings",
          "source",
          "candidates"
        ],
        "title": "DeployTargetInfo"
      },
      "DeployTargetPolicy": {
        "properties": {
          "allowed_targets": {
            "items": {
              "type": "string",
              "enum": [
                "local",
                "object",
                "git"
              ]
            },
            "type": "array",
            "title": "Allowed Targets",
            "description": "Target kinds offered and accepted (storage.allowed_targets)."
          },
          "forced_conn_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Forced Conn Id",
            "description": "Git connection every deploy uses (storage.git.forced_conn_id)."
          },
          "credentials_mode": {
            "type": "string",
            "enum": [
              "shared",
              "per_user"
            ],
            "title": "Credentials Mode",
            "default": "shared"
          },
          "user_conn_id_template": {
            "type": "string",
            "title": "User Conn Id Template",
            "default": "git_{username}"
          },
          "user_conn_id_pattern": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "User Conn Id Pattern"
          },
          "user_credentials_fallback": {
            "type": "boolean",
            "title": "User Credentials Fallback",
            "default": false
          },
          "commit_author": {
            "type": "string",
            "enum": [
              "auto",
              "service",
              "user"
            ],
            "title": "Commit Author",
            "default": "auto"
          },
          "request_token": {
            "type": "string",
            "enum": [
              "off",
              "optional",
              "required"
            ],
            "title": "Request Token",
            "default": "optional"
          },
          "request_token_overrides_forced": {
            "type": "boolean",
            "title": "Request Token Overrides Forced",
            "default": false
          },
          "request_token_allow_insecure": {
            "type": "boolean",
            "title": "Request Token Allow Insecure",
            "default": false
          }
        },
        "type": "object",
        "required": [
          "allowed_targets"
        ],
        "title": "DeployTargetPolicy",
        "description": "Administrator policy (configuration only; the dialog cannot change it)."
      },
      "DeployTargetTest": {
        "properties": {
          "ok": {
            "type": "boolean",
            "title": "Ok"
          },
          "message": {
            "type": "string",
            "title": "Message"
          },
          "status": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/TargetStatus"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "type": "object",
        "required": [
          "ok",
          "message"
        ],
        "title": "DeployTargetTest"
      },
      "DescribeRequest": {
        "properties": {
          "spec": {
            "$ref": "#/components/schemas/DagSpec"
          },
          "model": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 200
              },
              {
                "type": "null"
              }
            ],
            "title": "Model",
            "description": "Model for this request (one of /ai/status `models`; default: configured)."
          }
        },
        "type": "object",
        "required": [
          "spec"
        ],
        "title": "DescribeRequest"
      },
      "DescribeResult": {
        "properties": {
          "doc_md": {
            "type": "string",
            "title": "Doc Md"
          }
        },
        "type": "object",
        "required": [
          "doc_md"
        ],
        "title": "DescribeResult"
      },
      "DiffRequest": {
        "properties": {
          "a": {
            "$ref": "#/components/schemas/DagSpec"
          },
          "b": {
            "$ref": "#/components/schemas/DagSpec"
          }
        },
        "type": "object",
        "required": [
          "a",
          "b"
        ],
        "title": "DiffRequest"
      },
      "Edge": {
        "properties": {
          "id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Id"
          },
          "source": {
            "type": "string",
            "maxLength": 100,
            "minLength": 1,
            "pattern": "^[A-Za-z0-9_-]+$",
            "title": "Source"
          },
          "target": {
            "type": "string",
            "maxLength": 100,
            "minLength": 1,
            "pattern": "^[A-Za-z0-9_-]+$",
            "title": "Target"
          },
          "label": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 200
              },
              {
                "type": "null"
              }
            ],
            "title": "Label"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "source",
          "target"
        ],
        "title": "Edge"
      },
      "EdgeChange": {
        "properties": {
          "source": {
            "type": "string",
            "title": "Source"
          },
          "target": {
            "type": "string",
            "title": "Target"
          },
          "changes": {
            "items": {
              "$ref": "#/components/schemas/FieldChange"
            },
            "type": "array",
            "title": "Changes"
          }
        },
        "type": "object",
        "required": [
          "source",
          "target"
        ],
        "title": "EdgeChange"
      },
      "EdgeRef": {
        "properties": {
          "source": {
            "type": "string",
            "title": "Source"
          },
          "target": {
            "type": "string",
            "title": "Target"
          },
          "label": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Label"
          }
        },
        "type": "object",
        "required": [
          "source",
          "target"
        ],
        "title": "EdgeRef"
      },
      "EffectiveRules": {
        "properties": {
          "team": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Team"
          },
          "text": {
            "type": "string",
            "title": "Text",
            "default": ""
          }
        },
        "type": "object",
        "title": "EffectiveRules"
      },
      "EnvironmentOverlay": {
        "properties": {
          "schedule": {
            "anyOf": [
              {
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/NoSchedule"
                  },
                  {
                    "$ref": "#/components/schemas/PresetSchedule"
                  },
                  {
                    "$ref": "#/components/schemas/CronSchedule"
                  },
                  {
                    "$ref": "#/components/schemas/IntervalSchedule"
                  },
                  {
                    "$ref": "#/components/schemas/MultiCronSchedule"
                  },
                  {
                    "$ref": "#/components/schemas/EventsSchedule"
                  },
                  {
                    "$ref": "#/components/schemas/AssetSchedule"
                  },
                  {
                    "$ref": "#/components/schemas/AssetOrTimeScheduleSpec"
                  },
                  {
                    "$ref": "#/components/schemas/AssetAndTimeScheduleSpec"
                  },
                  {
                    "$ref": "#/components/schemas/PartitionedCronSchedule"
                  },
                  {
                    "$ref": "#/components/schemas/PartitionedAssetSchedule"
                  }
                ],
                "discriminator": {
                  "propertyName": "type",
                  "mapping": {
                    "assets": "#/components/schemas/AssetSchedule",
                    "assets_and_time": "#/components/schemas/AssetAndTimeScheduleSpec",
                    "assets_or_time": "#/components/schemas/AssetOrTimeScheduleSpec",
                    "cron": "#/components/schemas/CronSchedule",
                    "events": "#/components/schemas/EventsSchedule",
                    "interval": "#/components/schemas/IntervalSchedule",
                    "multi_cron": "#/components/schemas/MultiCronSchedule",
                    "none": "#/components/schemas/NoSchedule",
                    "partitioned_assets": "#/components/schemas/PartitionedAssetSchedule",
                    "partitioned_cron": "#/components/schemas/PartitionedCronSchedule",
                    "preset": "#/components/schemas/PresetSchedule"
                  }
                }
              },
              {
                "type": "null"
              }
            ],
            "title": "Schedule"
          },
          "is_paused_upon_creation": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Is Paused Upon Creation"
          },
          "tags": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Tags"
          },
          "default_args": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/DefaultArgs"
              },
              {
                "type": "null"
              }
            ]
          },
          "params_defaults": {
            "patternProperties": {
              "^[A-Za-z_][A-Za-z0-9_]*$": {}
            },
            "propertyNames": {
              "maxLength": 100
            },
            "type": "object",
            "title": "Params Defaults"
          },
          "max_active_runs": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 1.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Max Active Runs"
          },
          "connections": {
            "patternProperties": {
              "^[A-Za-z0-9_.-]+$": {
                "type": "string",
                "maxLength": 250,
                "minLength": 1,
                "pattern": "^[A-Za-z0-9_.-]+$"
              }
            },
            "propertyNames": {
              "maxLength": 250,
              "minLength": 1
            },
            "type": "object",
            "title": "Connections",
            "description": "Logical connection id -> this environment's Airflow connection id (substituted in *_conn_id parameters, Jinja `conn.<id>` and Python hook calls; see autoair.spec.env_mapping)."
          },
          "variables": {
            "patternProperties": {
              "^[A-Za-z0-9_.-]+$": {
                "type": "string",
                "maxLength": 250,
                "minLength": 1,
                "pattern": "^[A-Za-z0-9_.-]+$"
              }
            },
            "propertyNames": {
              "maxLength": 250,
              "minLength": 1
            },
            "type": "object",
            "title": "Variables",
            "description": "Logical Variable key -> this environment's Variable key (Jinja `var.value.<key>` / `var.json.<key>` and `Variable.get(\"<key>\")`)."
          }
        },
        "additionalProperties": false,
        "type": "object",
        "title": "EnvironmentOverlay",
        "description": "Per-environment overrides applied at deploy time (dev / staging / prod...)."
      },
      "EnvironmentProfile": {
        "properties": {
          "airflow_version": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Airflow Version"
          },
          "python_version": {
            "type": "string",
            "title": "Python Version"
          },
          "providers": {
            "items": {
              "additionalProperties": {
                "type": "string"
              },
              "type": "object"
            },
            "type": "array",
            "title": "Providers"
          },
          "packages": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Packages",
            "description": "Importable modules."
          },
          "shellcheck": {
            "type": "boolean",
            "title": "Shellcheck",
            "default": false
          },
          "ruff": {
            "type": "boolean",
            "title": "Ruff",
            "default": false
          },
          "sqlglot": {
            "type": "boolean",
            "title": "Sqlglot",
            "default": false
          },
          "allow_python_code": {
            "type": "boolean",
            "title": "Allow Python Code",
            "default": true
          }
        },
        "type": "object",
        "required": [
          "python_version"
        ],
        "title": "EnvironmentProfile",
        "description": "What the generated code can rely on."
      },
      "EventsSchedule": {
        "properties": {
          "type": {
            "type": "string",
            "const": "events",
            "title": "Type"
          },
          "dates": {
            "items": {
              "type": "string",
              "format": "date-time"
            },
            "type": "array",
            "minItems": 1,
            "title": "Dates"
          },
          "restrict_to_events": {
            "type": "boolean",
            "title": "Restrict To Events",
            "default": false
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "type",
          "dates"
        ],
        "title": "EventsSchedule"
      },
      "Evidence": {
        "properties": {
          "source": {
            "type": "string",
            "title": "Source",
            "description": "Where: \"log:<task>#<try>\", \"tool:<name>\", \"spec\", \u2026"
          },
          "line": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Line",
            "description": "Line number in the log (from the pack)."
          },
          "quote": {
            "type": "string",
            "title": "Quote",
            "description": "The relevant line(s), verbatim.",
            "default": ""
          }
        },
        "type": "object",
        "required": [
          "source"
        ],
        "title": "Evidence"
      },
      "ExplainCodeRequest": {
        "properties": {
          "code": {
            "type": "string",
            "maxLength": 200000,
            "minLength": 1,
            "title": "Code"
          },
          "language": {
            "type": "string",
            "enum": [
              "python",
              "bash",
              "sql",
              "yaml",
              "json",
              "text"
            ],
            "title": "Language",
            "default": "python"
          },
          "question": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 4000
              },
              {
                "type": "null"
              }
            ],
            "title": "Question"
          },
          "context": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 4000
              },
              {
                "type": "null"
              }
            ],
            "title": "Context"
          },
          "model": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 200
              },
              {
                "type": "null"
              }
            ],
            "title": "Model",
            "description": "Model for this request (one of /ai/status `models`; default: configured)."
          }
        },
        "type": "object",
        "required": [
          "code"
        ],
        "title": "ExplainCodeRequest"
      },
      "ExplainCodeResult": {
        "properties": {
          "explanation": {
            "type": "string",
            "title": "Explanation"
          },
          "model": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Model"
          },
          "usage": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Usage"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "type": "object",
        "required": [
          "explanation"
        ],
        "title": "ExplainCodeResult"
      },
      "ExplainDagRequest": {
        "properties": {
          "spec": {
            "$ref": "#/components/schemas/DagSpec"
          },
          "node_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Node Id",
            "description": "Focus on this node."
          },
          "question": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 4000
              },
              {
                "type": "null"
              }
            ],
            "title": "Question"
          },
          "model": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 200
              },
              {
                "type": "null"
              }
            ],
            "title": "Model",
            "description": "Model for this request (one of /ai/status `models`; default: configured)."
          }
        },
        "type": "object",
        "required": [
          "spec"
        ],
        "title": "ExplainDagRequest"
      },
      "ExplainRequest": {
        "properties": {
          "spec": {
            "$ref": "#/components/schemas/DagSpec"
          },
          "problems": {
            "anyOf": [
              {
                "items": {
                  "$ref": "#/components/schemas/Problem"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Problems",
            "description": "Problems to explain; validated server-side when omitted."
          },
          "model": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 200
              },
              {
                "type": "null"
              }
            ],
            "title": "Model",
            "description": "Model for this request (one of /ai/status `models`; default: configured)."
          }
        },
        "type": "object",
        "required": [
          "spec"
        ],
        "title": "ExplainRequest"
      },
      "ExplainResult": {
        "properties": {
          "explanation": {
            "type": "string",
            "title": "Explanation"
          }
        },
        "type": "object",
        "required": [
          "explanation"
        ],
        "title": "ExplainResult"
      },
      "ExplainStep": {
        "properties": {
          "node_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Node Id",
            "description": "Task node id this step describes."
          },
          "title": {
            "type": "string",
            "title": "Title"
          },
          "explanation": {
            "type": "string",
            "title": "Explanation"
          }
        },
        "type": "object",
        "required": [
          "node_id",
          "title",
          "explanation"
        ],
        "title": "ExplainStep"
      },
      "FeatureFlagState": {
        "properties": {
          "name": {
            "type": "string",
            "title": "Name"
          },
          "description": {
            "type": "string",
            "title": "Description",
            "default": ""
          },
          "configured": {
            "type": "boolean",
            "title": "Configured",
            "description": "Value from the configuration (files, env, defaults)."
          },
          "override": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Override",
            "description": "Runtime override set in the admin panel (None: none)."
          },
          "effective": {
            "type": "boolean",
            "title": "Effective",
            "description": "What the server obeys now (as /api/meta reports)."
          },
          "locked": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "features_locked",
                  "env"
                ]
              },
              {
                "type": "null"
              }
            ],
            "title": "Locked",
            "description": "Why admins cannot change it: listed in features_locked, or set through the environment (AUTOAIR_FEATURES__<NAME>)."
          },
          "constrained": {
            "type": "boolean",
            "title": "Constrained",
            "description": "Kept off by another setting (allow_python_code) or by the installation (see unavailable) whatever the flag says.",
            "default": false
          },
          "unavailable": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Unavailable",
            "description": "Why the feature cannot run here (e.g. the autoair[ai] extra is not installed); it cannot be switched on."
          },
          "updated_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated By"
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At"
          },
          "reason": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Reason"
          }
        },
        "type": "object",
        "required": [
          "name",
          "configured",
          "effective"
        ],
        "title": "FeatureFlagState"
      },
      "FeatureFlagsView": {
        "properties": {
          "flags": {
            "items": {
              "$ref": "#/components/schemas/FeatureFlagState"
            },
            "type": "array",
            "title": "Flags"
          },
          "can_write": {
            "type": "boolean",
            "title": "Can Write",
            "description": "The caller has admin:config."
          },
          "refresh_seconds": {
            "type": "number",
            "title": "Refresh Seconds",
            "description": "features_override_ttl: how long other replicas may take to pick up a change."
          },
          "shared": {
            "type": "boolean",
            "title": "Shared",
            "description": "Overrides are stored in a SQL database shared by the replicas (false: files in this deployment's state folder)."
          }
        },
        "type": "object",
        "required": [
          "flags",
          "can_write",
          "refresh_seconds",
          "shared"
        ],
        "title": "FeatureFlagsView"
      },
      "FeatureOverrideRequest": {
        "properties": {
          "value": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Value",
            "description": "New value; null removes the runtime override."
          },
          "reason": {
            "type": "string",
            "maxLength": 500,
            "minLength": 3,
            "title": "Reason",
            "description": "Why (audited)."
          }
        },
        "type": "object",
        "required": [
          "value",
          "reason"
        ],
        "title": "FeatureOverrideRequest"
      },
      "FieldChange": {
        "properties": {
          "path": {
            "type": "string",
            "title": "Path"
          },
          "before": {
            "title": "Before"
          },
          "after": {
            "title": "After"
          },
          "before_present": {
            "type": "boolean",
            "title": "Before Present",
            "description": "False when the key was absent before (not null).",
            "default": true
          },
          "after_present": {
            "type": "boolean",
            "title": "After Present",
            "description": "False when the key is absent after (not null).",
            "default": true
          }
        },
        "type": "object",
        "required": [
          "path"
        ],
        "title": "FieldChange"
      },
      "Finding": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id",
            "description": "Stable id (rule + location)."
          },
          "severity": {
            "type": "string",
            "enum": [
              "critical",
              "high",
              "medium",
              "low",
              "info"
            ],
            "title": "Severity"
          },
          "category": {
            "type": "string",
            "enum": [
              "secret",
              "security",
              "reliability",
              "performance",
              "cost",
              "correctness",
              "idempotency",
              "airflow3",
              "best_practice",
              "maintainability",
              "documentation"
            ],
            "title": "Category"
          },
          "title": {
            "type": "string",
            "title": "Title",
            "description": "One line, imperative or descriptive."
          },
          "message": {
            "type": "string",
            "title": "Message",
            "description": "Why it matters and what to do."
          },
          "node_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Node Id",
            "description": "Node to select in the editor."
          },
          "field": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Field",
            "description": "Field to focus: a node/DAG field name or an operator param."
          },
          "path": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Path",
            "description": "JSON pointer of the offending value."
          },
          "rule": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Rule",
            "description": "Deterministic rule id, when not AI."
          },
          "source": {
            "type": "string",
            "enum": [
              "rule",
              "ai"
            ],
            "title": "Source",
            "default": "rule"
          },
          "evidence": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Evidence",
            "description": "Offending snippet (secrets masked)."
          },
          "patch": {
            "items": {
              "$ref": "#/components/schemas/PatchOp"
            },
            "type": "array",
            "title": "Patch"
          }
        },
        "type": "object",
        "required": [
          "id",
          "severity",
          "category",
          "title",
          "message"
        ],
        "title": "Finding"
      },
      "FindingsReport": {
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "review",
              "leaks",
              "optimize",
              "fix"
            ],
            "title": "Kind"
          },
          "summary": {
            "type": "string",
            "title": "Summary",
            "default": ""
          },
          "findings": {
            "items": {
              "$ref": "#/components/schemas/Finding"
            },
            "type": "array",
            "title": "Findings"
          },
          "proposed_spec": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/DagSpec"
              },
              {
                "type": "null"
              }
            ],
            "description": "The spec with every finding's patch applied (when any)."
          },
          "proposed_ok": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Proposed Ok",
            "description": "Whether the proposed spec passes validation."
          },
          "problems": {
            "items": {
              "$ref": "#/components/schemas/SpecProblem"
            },
            "type": "array",
            "title": "Problems",
            "description": "Validation problems of the proposed spec."
          },
          "skipped_patches": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Skipped Patches",
            "description": "Finding ids whose patch could not be applied."
          },
          "ai_used": {
            "type": "boolean",
            "title": "Ai Used",
            "default": false
          },
          "model": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Model"
          },
          "usage": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Usage"
              },
              {
                "type": "null"
              }
            ]
          },
          "notes": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Notes"
          }
        },
        "type": "object",
        "required": [
          "kind"
        ],
        "title": "FindingsReport"
      },
      "FixRequest": {
        "properties": {
          "spec": {
            "additionalProperties": true,
            "type": "object",
            "title": "Spec",
            "description": "The DagSpec document (may be invalid)."
          },
          "problems": {
            "anyOf": [
              {
                "items": {
                  "$ref": "#/components/schemas/SpecProblem"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Problems",
            "description": "Problems to fix (default: validated server-side)."
          },
          "import_errors": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "maxItems": 10,
            "title": "Import Errors"
          },
          "task_log": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 500000
              },
              {
                "type": "null"
              }
            ],
            "title": "Task Log"
          },
          "dag_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Dag Id"
          },
          "run_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Run Id",
            "description": "Fetch the failed task's log from here."
          },
          "task_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Task Id"
          },
          "try_number": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 1.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Try Number"
          },
          "model": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 200
              },
              {
                "type": "null"
              }
            ],
            "title": "Model",
            "description": "Model for this request (one of /ai/status `models`; default: configured)."
          }
        },
        "type": "object",
        "required": [
          "spec"
        ],
        "title": "FixRequest"
      },
      "Fragment": {
        "properties": {
          "nodes": {
            "items": {
              "oneOf": [
                {
                  "$ref": "#/components/schemas/OperatorNode"
                },
                {
                  "$ref": "#/components/schemas/PythonTaskNode"
                },
                {
                  "$ref": "#/components/schemas/TaskGroupNode"
                },
                {
                  "$ref": "#/components/schemas/CustomNode"
                },
                {
                  "$ref": "#/components/schemas/BlueprintNode"
                },
                {
                  "$ref": "#/components/schemas/NoteNode"
                }
              ],
              "discriminator": {
                "propertyName": "kind",
                "mapping": {
                  "blueprint": "#/components/schemas/BlueprintNode",
                  "custom": "#/components/schemas/CustomNode",
                  "note": "#/components/schemas/NoteNode",
                  "operator": "#/components/schemas/OperatorNode",
                  "python_task": "#/components/schemas/PythonTaskNode",
                  "task_group": "#/components/schemas/TaskGroupNode"
                }
              }
            },
            "type": "array",
            "minItems": 1,
            "title": "Nodes"
          },
          "edges": {
            "items": {
              "$ref": "#/components/schemas/Edge"
            },
            "type": "array",
            "title": "Edges"
          }
        },
        "type": "object",
        "required": [
          "nodes"
        ],
        "title": "Fragment"
      },
      "GenerateRequest": {
        "properties": {
          "prompt": {
            "type": "string",
            "maxLength": 20000,
            "minLength": 1,
            "title": "Prompt"
          },
          "existing": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/DagSpec"
              },
              {
                "type": "null"
              }
            ],
            "description": "Current spec to modify ('edit with AI')."
          },
          "max_repairs": {
            "type": "integer",
            "maximum": 5.0,
            "minimum": 0.0,
            "title": "Max Repairs",
            "default": 3
          },
          "model": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 200
              },
              {
                "type": "null"
              }
            ],
            "title": "Model",
            "description": "Model for this request (one of /ai/status `models`; default: configured)."
          }
        },
        "type": "object",
        "required": [
          "prompt"
        ],
        "title": "GenerateRequest"
      },
      "GenerationResult": {
        "properties": {
          "spec": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/DagSpec"
              },
              {
                "type": "null"
              }
            ],
            "description": "The generated spec (best effort when not ok)."
          },
          "ok": {
            "type": "boolean",
            "title": "Ok",
            "description": "True when the spec passed validation (no errors)."
          },
          "problems": {
            "items": {
              "$ref": "#/components/schemas/SpecProblem"
            },
            "type": "array",
            "title": "Problems"
          },
          "attempts": {
            "type": "integer",
            "title": "Attempts",
            "description": "Number of spec drafts requested from the model."
          },
          "explanation": {
            "type": "string",
            "title": "Explanation",
            "default": ""
          },
          "selected_operators": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Selected Operators"
          },
          "model": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Model"
          }
        },
        "type": "object",
        "required": [
          "spec",
          "ok",
          "attempts"
        ],
        "title": "GenerationResult"
      },
      "GitCredentialChoice": {
        "properties": {
          "mode": {
            "type": "string",
            "enum": [
              "shared",
              "per_user"
            ],
            "title": "Mode"
          },
          "forced_conn_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Forced Conn Id"
          },
          "conn_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Conn Id",
            "description": "per_user: the template's connection id for this user."
          },
          "conn_exists": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Conn Exists",
            "description": "per_user: Airflow lets this user read conn_id (null: not checked)."
          },
          "pattern": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Pattern"
          },
          "choices": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Choices",
            "description": "per_user: readable connections matching user_conn_id_pattern."
          },
          "fallback": {
            "type": "boolean",
            "title": "Fallback",
            "default": false
          },
          "error": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Error"
          },
          "request_token": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/RequestTokenInfo"
              },
              {
                "type": "null"
              }
            ],
            "description": "Whether deploys of this target take a token typed by the user (off/optional/required) and the token the git host needs (null: not a git target)."
          }
        },
        "type": "object",
        "required": [
          "mode"
        ],
        "title": "GitCredentialChoice",
        "description": "The caller's git credentials for deploys (per_user mode)."
      },
      "GitCredentialsInfo": {
        "properties": {
          "mode": {
            "type": "string",
            "enum": [
              "shared",
              "per_user"
            ],
            "title": "Mode"
          },
          "forced_conn_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Forced Conn Id",
            "description": "Admin-forced Airflow connection (storage.git.forced_conn_id)."
          },
          "conn_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Conn Id",
            "description": "per_user: the connection this deploy would use."
          },
          "pattern": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Pattern",
            "description": "per_user: regex of connection ids the user may pick."
          },
          "fallback": {
            "type": "boolean",
            "title": "Fallback",
            "description": "Shared credentials if the user has none.",
            "default": false
          }
        },
        "type": "object",
        "required": [
          "mode"
        ],
        "title": "GitCredentialsInfo"
      },
      "GitSource": {
        "properties": {
          "url": {
            "type": "string",
            "maxLength": 2000,
            "title": "Url",
            "description": "https:// URL of the repository."
          },
          "ref": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 200
              },
              {
                "type": "null"
              }
            ],
            "title": "Ref",
            "description": "Branch or tag."
          },
          "subdir": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 1000
              },
              {
                "type": "null"
              }
            ],
            "title": "Subdir",
            "description": "Only import files below this folder."
          },
          "token": {
            "anyOf": [
              {
                "type": "string",
                "format": "password",
                "writeOnly": true
              },
              {
                "type": "null"
              }
            ],
            "title": "Token",
            "description": "Access token of a private repository (sent as an HTTP header, never stored or logged)."
          }
        },
        "type": "object",
        "required": [
          "url"
        ],
        "title": "GitSource"
      },
      "GitStorageSettings": {
        "properties": {
          "provider": {
            "type": "string",
            "enum": [
              "local",
              "github",
              "gitlab",
              "bitbucket",
              "azure",
              "gitea"
            ],
            "title": "Provider",
            "description": "Git host API: local (git CLI, any remote), github, gitlab, bitbucket, azure, gitea (Gitea/Forgejo: git CLI push + pull requests over the REST API).",
            "default": "local"
          },
          "repo": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Repo",
            "description": "owner/name (github), project id or path (gitlab), workspace/repo (bitbucket), organization/project/repository (azure), remote URL (local, gitea)."
          },
          "username": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Username",
            "description": "Bitbucket app-password user (omit for access tokens)."
          },
          "azure_bearer": {
            "type": "boolean",
            "title": "Azure Bearer",
            "description": "Azure DevOps: token is an Entra ID bearer token, not a PAT.",
            "default": false
          },
          "base_branch": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Base Branch",
            "description": "Defaults to the bundle ref/main."
          },
          "subdir": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Subdir",
            "description": "Folder inside the repository."
          },
          "mode": {
            "type": "string",
            "enum": [
              "pr",
              "push"
            ],
            "title": "Mode",
            "description": "pr: a branch + pull request per DAG; push: commit straight to the branch.",
            "default": "pr"
          },
          "branch_prefix": {
            "type": "string",
            "title": "Branch Prefix",
            "description": "Prefix of pending-change branches (mode=pr).",
            "default": "autoair/"
          },
          "token": {
            "anyOf": [
              {
                "type": "string",
                "format": "password",
                "writeOnly": true
              },
              {
                "type": "null"
              }
            ],
            "title": "Token",
            "description": "Personal/project access token, app password or PAT."
          },
          "api_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Api Url",
            "description": "REST API base URL (GitHub Enterprise, self-hosted GitLab, Azure DevOps Server\u2026); default: the public host's. gitea: default <scheme>://<host>/api/v1 of an http(s) repo URL (required for SSH remotes)."
          },
          "environments": {
            "additionalProperties": {
              "type": "string"
            },
            "type": "object",
            "title": "Environments",
            "description": "Environment name -> branch, e.g. {'prod': 'main'}."
          },
          "use_airflow_bundle": {
            "type": "boolean",
            "title": "Use Airflow Bundle",
            "description": "Fill repo/branch/subdir/credentials from Airflow's GitDagBundle config.",
            "default": false
          },
          "bundle_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Bundle Name",
            "description": "GitDagBundle to read (use_airflow_bundle; default: the first)."
          },
          "conn_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Conn Id",
            "description": "Airflow git connection id."
          },
          "credentials_ttl": {
            "type": "number",
            "minimum": 0.0,
            "title": "Credentials Ttl",
            "description": "Seconds the credentials read from an Airflow connection (conn_id, forced_conn_id, the bundle's or a user's own) are reused before the connection is read again; on an authentication failure it is re-read at once and the operation retried, so a rotated token works without a restart. 0 = read on every operation.",
            "default": 60
          },
          "cache_dir": {
            "anyOf": [
              {
                "type": "string",
                "format": "path"
              },
              {
                "type": "null"
              }
            ],
            "title": "Cache Dir",
            "description": "Clone cache (provider=local)."
          },
          "ssh_key_file": {
            "anyOf": [
              {
                "type": "string",
                "format": "path"
              },
              {
                "type": "null"
              }
            ],
            "title": "Ssh Key File",
            "description": "provider=local: SSH key."
          },
          "ssh_key_cache_days": {
            "type": "integer",
            "minimum": 0.0,
            "title": "Ssh Key Cache Days",
            "description": "provider=local/gitea: days an SSH private key from a git connection stays in the clone cache (<cache_dir>/keys/id_autoair-<hash>, mode 0600) after its last use. Writing a new key file removes AutoAir's key files unused for longer (only files of that name owned by this user, never the key being used). 0 keeps them.",
            "default": 30
          },
          "github_app_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Github App Id",
            "description": "GitHub App id."
          },
          "github_installation_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Github Installation Id",
            "description": "GitHub App installation id."
          },
          "github_private_key": {
            "anyOf": [
              {
                "type": "string",
                "format": "password",
                "writeOnly": true
              },
              {
                "type": "null"
              }
            ],
            "title": "Github Private Key",
            "description": "GitHub App private key (PEM)."
          },
          "github_private_key_file": {
            "anyOf": [
              {
                "type": "string",
                "format": "path"
              },
              {
                "type": "null"
              }
            ],
            "title": "Github Private Key File",
            "description": "GitHub App private key file (PEM)."
          },
          "fetch_interval": {
            "type": "number",
            "minimum": 0.0,
            "title": "Fetch Interval",
            "description": "provider=local: seconds between fetches of the remote.",
            "default": 5.0
          },
          "direct_push_roles": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Direct Push Roles",
            "description": "AutoAir roles allowed to push straight to the target branch (deploy request flag direct_push=true in mode=pr; see iam.force_pr_without_direct_push for mode=push). Evaluated by autoair.iam; unset = iam.direct_push_roles applies (default ['Admin']); [] = nobody, except users granted 'deploy:direct_push' explicitly."
          },
          "forced_conn_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Forced Conn Id",
            "description": "Admin policy: the Airflow connection every git deploy uses. Overrides conn_id (and the bundle's connection); the deploy-target dialog cannot change it."
          },
          "credentials_mode": {
            "type": "string",
            "enum": [
              "shared",
              "per_user"
            ],
            "title": "Credentials Mode",
            "description": "shared: one service connection/token for everybody; per_user: commits and pull requests use the deploying user's own Airflow connection (see user_conn_id_template), read with the user's token so Airflow's RBAC applies. Reads (listing, history) keep the shared credentials when configured.",
            "default": "shared"
          },
          "user_conn_id_template": {
            "type": "string",
            "title": "User Conn Id Template",
            "description": "per_user: the user's connection id. Placeholders: {username} (the Airflow username, lower-cased; characters outside [A-Za-z0-9_.-] become '_').",
            "default": "git_{username}"
          },
          "user_conn_id_pattern": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "User Conn Id Pattern",
            "description": "per_user: regex (fullmatch) of connection ids a user may pick in the deploy dialog instead of the template's (e.g. 'git_.*'); unset: only the template."
          },
          "user_credentials_fallback": {
            "type": "boolean",
            "title": "User Credentials Fallback",
            "description": "per_user: use the shared credentials when the user has no readable connection (otherwise such deploys are refused).",
            "default": false
          },
          "request_token": {
            "type": "string",
            "enum": [
              "off",
              "optional",
              "required"
            ],
            "title": "Request Token",
            "description": "Git token the user types for one deploy, delete, promotion or pull request (header X-AutoAir-Git-Token, never stored, logged or audited): off = the header is refused; optional = a token, when given, replaces the configured credentials for that one write; required = every git write needs one (the configured connection, if any, only serves reads; MCP git writes need mcp_request_token and the header). A team target uses its own team_storage.<team>.git.request_token, but off here turns request tokens off for every target. With forced_conn_id set, tokens are refused unless request_token_overrides_forced.",
            "default": "optional",
            "secret": false
          },
          "request_token_overrides_forced": {
            "type": "boolean",
            "title": "Request Token Overrides Forced",
            "description": "A request token may replace the admin-forced connection (forced_conn_id) for that one write. Default: the forced connection always wins and the X-AutoAir-Git-Token header is refused.",
            "default": false
          },
          "mcp_request_token": {
            "type": "boolean",
            "title": "Mcp Request Token",
            "description": "MCP over HTTP: save_dag_spec / delete_dag_spec take the user's git token from the X-AutoAir-Git-Token header of the MCP request (set in the MCP client's server configuration; never a tool argument, so it stays out of the model's context and transcripts). request_token, the forced-connection rule and the HTTPS rule apply as for the REST API. Off: such a header is refused.",
            "default": false,
            "secret": false
          },
          "request_token_allow_insecure": {
            "type": "boolean",
            "title": "Request Token Allow Insecure",
            "description": "Accept X-AutoAir-Git-Token over plain HTTP from a non-loopback client (the scheme and client address honour server.proxy_headers / forwarded_allow_ips), and send it to http:// git hosts. Only for test setups.",
            "default": false
          },
          "commit_author": {
            "type": "string",
            "enum": [
              "auto",
              "service",
              "user"
            ],
            "title": "Commit Author",
            "description": "Commit author: service = the service identity (the user is credited in trailers and Co-authored-by); user = the deploying user ('Name <email>'); auto = user with per_user credentials, else service. GitHub's API always commits as the token's owner (the user is credited with Co-authored-by).",
            "default": "auto"
          },
          "branch_template": {
            "type": "string",
            "title": "Branch Template",
            "description": "mode=pr: branch of a DAG's pending change. Placeholders: {branch_prefix}, {dag_id}, {environment} (may be empty), {environment_path} ('<env>/' or '').",
            "default": "{branch_prefix}{environment_path}{dag_id}"
          },
          "promote_branch_template": {
            "type": "string",
            "title": "Promote Branch Template",
            "description": "Branch of an environment promotion. Placeholders: {branch_prefix}, {dag_id}, {from_env}, {to_env}.",
            "default": "{branch_prefix}promote/{from_env}-to-{to_env}/{dag_id}"
          },
          "commit_message_template": {
            "type": "string",
            "title": "Commit Message Template",
            "description": "Commit message of a save without a user message. Placeholders: {dag_id}, {environment}, {author} and the context placeholders ({user}, {user_name}, {user_email}, {autoair_version}, {etag_before}, {etag_after}, {validation}, {approvals}, {link}, {target}, {description}, {context}). The context block and trailers are always appended unless the template places {context} itself.",
            "default": "AutoAir: update DAG {dag_id}"
          },
          "delete_message_template": {
            "type": "string",
            "title": "Delete Message Template",
            "description": "Commit message (and PR title) of a delete. Placeholders: {dag_id}, {environment}, {author} and the context placeholders (see commit_message_template).",
            "default": "AutoAir: delete DAG {dag_id}"
          },
          "promote_message_template": {
            "type": "string",
            "title": "Promote Message Template",
            "description": "Commit message (and PR title) of a promotion. Placeholders: {dag_id}, {from_env}, {to_env}, {author} and the context placeholders.",
            "default": "AutoAir: promote DAG {dag_id} from {from_env} to {to_env}"
          },
          "pr_title_template": {
            "type": "string",
            "title": "Pr Title Template",
            "description": "Pull request title of a save. Placeholders: {dag_id}, {environment}, {author}, {message} (first line of the commit message) and the context placeholders.",
            "default": "AutoAir: update DAG {dag_id}"
          },
          "pr_body_template": {
            "type": "string",
            "title": "Pr Body Template",
            "description": "Pull request description. Placeholders: {message} (the commit message without the context), {description} (the PR description typed in the deploy dialog), {dag_id}, {environment}, {author} and the context placeholders. The context block is appended unless the template places {context}; it cannot be removed.",
            "default": "{message}\n\n{description}\n\nOpened by AutoAir."
          },
          "pr_labels": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Pr Labels",
            "description": "Labels put on opened pull requests (GitHub, GitLab, Azure DevOps, Gitea)."
          },
          "pr_reviewers": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Pr Reviewers",
            "description": "Reviewers requested on opened pull requests: GitHub logins (or 'org/team' for teams), GitLab usernames, Bitbucket account UUIDs, Azure DevOps identity ids, Gitea usernames."
          },
          "pr_draft": {
            "type": "boolean",
            "title": "Pr Draft",
            "description": "Open pull requests as drafts.",
            "default": false
          },
          "delete_branch_after_merge": {
            "type": "boolean",
            "title": "Delete Branch After Merge",
            "description": "Ask the host to delete the source branch when the pull request is merged (GitLab, Bitbucket, Azure DevOps; on GitHub this is a repository setting).",
            "default": true
          },
          "committer_name": {
            "type": "string",
            "title": "Committer Name",
            "description": "provider=local: committer name of AutoAir commits.",
            "default": "AutoAir"
          },
          "committer_email": {
            "type": "string",
            "title": "Committer Email",
            "description": "provider=local: committer e-mail (also the author when none is known).",
            "default": "autoair@localhost"
          },
          "timeout": {
            "type": "number",
            "exclusiveMinimum": 0.0,
            "title": "Timeout",
            "description": "Seconds per request to the git host's REST API.",
            "default": 30
          },
          "command_timeout": {
            "type": "number",
            "exclusiveMinimum": 0.0,
            "title": "Command Timeout",
            "description": "provider=local: seconds a git command may take.",
            "default": 300
          },
          "env_passthrough": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Env Passthrough",
            "description": "provider=local/gitea: environment variables (fnmatch patterns, case-insensitive) the git CLI inherits besides the ones git, ssh and curl read (PATH, HOME, locale, TMPDIR, SSH_AUTH_SOCK, SSL_CERT_*, proxy variables, GIT_*), e.g. ['KRB5CCNAME'] for Kerberos. Nothing else of the server's environment reaches git."
          },
          "max_attempts": {
            "type": "integer",
            "maximum": 20.0,
            "minimum": 1.0,
            "title": "Max Attempts",
            "description": "Saves retried when the branch moves between read and commit.",
            "default": 3
          },
          "read_cache_size": {
            "type": "integer",
            "minimum": 0.0,
            "title": "Read Cache Size",
            "description": "File reads at immutable commits kept in memory.",
            "default": 512
          }
        },
        "type": "object",
        "title": "GitStorageSettings"
      },
      "HTTPValidationError": {
        "properties": {
          "detail": {
            "items": {
              "$ref": "#/components/schemas/ValidationError"
            },
            "type": "array",
            "title": "Detail"
          }
        },
        "type": "object",
        "title": "HTTPValidationError"
      },
      "Health": {
        "properties": {
          "status": {
            "type": "string",
            "title": "Status"
          },
          "version": {
            "type": "string",
            "title": "Version"
          }
        },
        "type": "object",
        "required": [
          "status",
          "version"
        ],
        "title": "Health"
      },
      "HistoryStats": {
        "properties": {
          "dag_id": {
            "type": "string",
            "title": "Dag Id"
          },
          "runs": {
            "type": "integer",
            "title": "Runs",
            "default": 0
          },
          "run_success_rate": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Run Success Rate"
          },
          "run_p50_seconds": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Run P50 Seconds"
          },
          "run_p95_seconds": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Run P95 Seconds"
          },
          "tasks": {
            "items": {
              "$ref": "#/components/schemas/TaskStats"
            },
            "type": "array",
            "title": "Tasks"
          }
        },
        "type": "object",
        "required": [
          "dag_id"
        ],
        "title": "HistoryStats"
      },
      "Hit": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "kind": {
            "type": "string",
            "enum": [
              "operator",
              "doc",
              "spec",
              "template",
              "memory",
              "source",
              "package",
              "web"
            ],
            "title": "Kind"
          },
          "title": {
            "type": "string",
            "title": "Title"
          },
          "snippet": {
            "type": "string",
            "title": "Snippet"
          },
          "uri": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Uri"
          },
          "score": {
            "type": "number",
            "title": "Score"
          },
          "meta": {
            "additionalProperties": true,
            "type": "object",
            "title": "Meta"
          }
        },
        "type": "object",
        "required": [
          "id",
          "kind",
          "title",
          "snippet",
          "score"
        ],
        "title": "Hit"
      },
      "HookExtraField": {
        "properties": {
          "schema": {
            "additionalProperties": true,
            "type": "object",
            "title": "Schema",
            "description": "JSON Schema of the value (type, title, format, enum\u2026)."
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "default": {
            "title": "Default",
            "description": "Default value (never a masked secret)."
          }
        },
        "type": "object",
        "title": "HookExtraField",
        "description": "One provider-specific field stored in the connection's ``extra`` JSON."
      },
      "HookFieldBehaviour": {
        "properties": {
          "hidden": {
            "type": "boolean",
            "title": "Hidden",
            "default": false
          },
          "title": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Title"
          },
          "placeholder": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Placeholder"
          }
        },
        "type": "object",
        "title": "HookFieldBehaviour",
        "description": "How a connection type shows one standard field (Airflow's ``field_behaviour``)."
      },
      "HookStandardFields": {
        "properties": {
          "description": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/HookFieldBehaviour"
              },
              {
                "type": "null"
              }
            ]
          },
          "url_schema": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/HookFieldBehaviour"
              },
              {
                "type": "null"
              }
            ],
            "description": "The `schema` field (Airflow names it url_schema here)."
          },
          "host": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/HookFieldBehaviour"
              },
              {
                "type": "null"
              }
            ]
          },
          "port": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/HookFieldBehaviour"
              },
              {
                "type": "null"
              }
            ]
          },
          "login": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/HookFieldBehaviour"
              },
              {
                "type": "null"
              }
            ]
          },
          "password": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/HookFieldBehaviour"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "type": "object",
        "title": "HookStandardFields"
      },
      "HoverInfo": {
        "properties": {
          "markdown": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Markdown"
          }
        },
        "type": "object",
        "required": [
          "markdown"
        ],
        "title": "HoverInfo"
      },
      "Hypothesis": {
        "properties": {
          "title": {
            "type": "string",
            "title": "Title"
          },
          "explanation": {
            "type": "string",
            "title": "Explanation",
            "default": ""
          },
          "confidence": {
            "type": "number",
            "maximum": 1.0,
            "minimum": 0.0,
            "title": "Confidence",
            "default": 0.5
          },
          "category": {
            "type": "string",
            "enum": [
              "spec",
              "code",
              "configuration",
              "infrastructure",
              "data",
              "dependency",
              "platform",
              "unknown"
            ],
            "title": "Category",
            "default": "unknown"
          },
          "evidence": {
            "items": {
              "$ref": "#/components/schemas/Evidence"
            },
            "type": "array",
            "title": "Evidence"
          }
        },
        "type": "object",
        "required": [
          "title"
        ],
        "title": "Hypothesis"
      },
      "IconAssignment": {
        "properties": {
          "operator": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Operator",
            "description": "Operator class FQN."
          },
          "provider": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Provider"
          },
          "icon": {
            "anyOf": [
              {
                "type": "string",
                "pattern": "^(builtin|custom|package):[a-z0-9][a-z0-9-]{0,80}$"
              },
              {
                "type": "null"
              }
            ],
            "title": "Icon",
            "description": "None clears."
          }
        },
        "type": "object",
        "title": "IconAssignment"
      },
      "IconAssignments": {
        "properties": {
          "operators": {
            "additionalProperties": {
              "type": "string"
            },
            "type": "object",
            "title": "Operators",
            "description": "operator FQN -> icon id"
          },
          "providers": {
            "additionalProperties": {
              "type": "string"
            },
            "type": "object",
            "title": "Providers",
            "description": "provider -> icon id"
          }
        },
        "type": "object",
        "title": "IconAssignments"
      },
      "IconInfo": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "name": {
            "type": "string",
            "title": "Name"
          },
          "kind": {
            "type": "string",
            "enum": [
              "builtin",
              "custom",
              "package"
            ],
            "title": "Kind"
          },
          "url": {
            "type": "string",
            "title": "Url",
            "description": "Relative to the API base."
          }
        },
        "type": "object",
        "required": [
          "id",
          "name",
          "kind",
          "url"
        ],
        "title": "IconInfo"
      },
      "IconUpload": {
        "properties": {
          "name": {
            "type": "string",
            "maxLength": 80,
            "minLength": 1,
            "title": "Name",
            "description": "Display name (slugified)."
          },
          "data": {
            "type": "string",
            "maxLength": 89478741,
            "title": "Data",
            "description": "Base64 PNG/JPEG/WebP/GIF (the UI sends a resized 64 px PNG)."
          }
        },
        "type": "object",
        "required": [
          "name",
          "data"
        ],
        "title": "IconUpload"
      },
      "ImportCheckResult": {
        "properties": {
          "ok": {
            "type": "boolean",
            "title": "Ok",
            "default": false
          },
          "dag_ids": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Dag Ids",
            "default": []
          },
          "task_ids": {
            "additionalProperties": {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            "type": "object",
            "title": "Task Ids",
            "default": {}
          },
          "import_errors": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Import Errors",
            "default": []
          }
        },
        "type": "object",
        "title": "ImportCheckResult"
      },
      "ImportErrorInfo": {
        "properties": {
          "import_error_id": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Import Error Id"
          },
          "filename": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Filename"
          },
          "stack_trace": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Stack Trace"
          },
          "timestamp": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Timestamp"
          },
          "bundle_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Bundle Name"
          }
        },
        "type": "object",
        "title": "ImportErrorInfo"
      },
      "ImportReport": {
        "properties": {
          "pages": {
            "type": "integer",
            "title": "Pages",
            "default": 0
          },
          "changed": {
            "type": "integer",
            "title": "Changed",
            "default": 0
          },
          "unchanged": {
            "type": "integer",
            "title": "Unchanged",
            "default": 0
          },
          "removed": {
            "type": "integer",
            "title": "Removed",
            "default": 0
          },
          "chunks": {
            "type": "integer",
            "title": "Chunks",
            "default": 0
          },
          "signed": {
            "type": "boolean",
            "title": "Signed",
            "default": false
          },
          "signature_verified": {
            "type": "boolean",
            "title": "Signature Verified",
            "default": false
          },
          "sources": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Sources"
          }
        },
        "type": "object",
        "title": "ImportReport"
      },
      "ImportedDag": {
        "properties": {
          "dag_id": {
            "type": "string",
            "title": "Dag Id"
          },
          "spec": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/DagSpec"
              },
              {
                "type": "null"
              }
            ]
          },
          "warnings": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Warnings"
          },
          "error": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Error"
          }
        },
        "type": "object",
        "required": [
          "dag_id",
          "spec",
          "warnings"
        ],
        "title": "ImportedDag"
      },
      "InstallRequest": {
        "properties": {
          "source": {
            "type": "string",
            "title": "Source"
          },
          "entry_id": {
            "type": "string",
            "title": "Entry Id"
          }
        },
        "type": "object",
        "required": [
          "source",
          "entry_id"
        ],
        "title": "InstallRequest"
      },
      "IntervalSchedule": {
        "properties": {
          "type": {
            "type": "string",
            "const": "interval",
            "title": "Type"
          },
          "seconds": {
            "type": "integer",
            "exclusiveMinimum": 0.0,
            "title": "Seconds"
          },
          "data_interval": {
            "type": "boolean",
            "title": "Data Interval",
            "default": false
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "type",
          "seconds"
        ],
        "title": "IntervalSchedule",
        "description": "``DeltaTriggerTimetable`` (default) or ``DeltaDataIntervalTimetable``."
      },
      "KbError": {
        "properties": {
          "level": {
            "type": "string",
            "enum": [
              "error",
              "warning",
              "info"
            ],
            "title": "Level",
            "default": "error"
          },
          "source": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Source"
          },
          "url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Url"
          },
          "message": {
            "type": "string",
            "title": "Message"
          },
          "at": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "At"
          }
        },
        "type": "object",
        "required": [
          "message"
        ],
        "title": "KbError"
      },
      "KbHit": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "title": {
            "type": "string",
            "title": "Title"
          },
          "heading": {
            "type": "string",
            "title": "Heading",
            "default": ""
          },
          "url": {
            "type": "string",
            "title": "Url"
          },
          "snippet": {
            "type": "string",
            "title": "Snippet"
          },
          "text": {
            "type": "string",
            "title": "Text",
            "default": ""
          },
          "source": {
            "type": "string",
            "title": "Source"
          },
          "component": {
            "type": "string",
            "title": "Component"
          },
          "package": {
            "type": "string",
            "title": "Package"
          },
          "version": {
            "type": "string",
            "title": "Version"
          },
          "updated": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated"
          },
          "score": {
            "type": "number",
            "title": "Score",
            "default": 0.0
          }
        },
        "type": "object",
        "required": [
          "id",
          "title",
          "url",
          "snippet",
          "source",
          "component",
          "package",
          "version"
        ],
        "title": "KbHit",
        "description": "A search result with everything a citation needs."
      },
      "KbProgress": {
        "properties": {
          "source": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Source"
          },
          "unit": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Unit"
          },
          "phase": {
            "type": "string",
            "title": "Phase",
            "default": "idle"
          },
          "done": {
            "type": "integer",
            "title": "Done",
            "default": 0
          },
          "total": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Total"
          }
        },
        "type": "object",
        "title": "KbProgress"
      },
      "KbRunStatus": {
        "properties": {
          "state": {
            "type": "string",
            "enum": [
              "idle",
              "running",
              "failed"
            ],
            "title": "State",
            "default": "idle"
          },
          "run_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Run Id"
          },
          "mode": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "refresh",
                  "rebuild",
                  "import"
                ]
              },
              {
                "type": "null"
              }
            ],
            "title": "Mode"
          },
          "owner": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Owner",
            "description": "Replica running the refresh."
          },
          "started_at": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Started At"
          },
          "finished_at": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Finished At"
          },
          "last_refresh": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Last Refresh",
            "description": "End of the last refresh."
          },
          "last_success": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Last Success",
            "description": "End of the last full refresh."
          },
          "outcome": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "ok",
                  "partial",
                  "failed",
                  "cancelled"
                ]
              },
              {
                "type": "null"
              }
            ],
            "title": "Outcome"
          },
          "cancel_requested": {
            "type": "boolean",
            "title": "Cancel Requested",
            "default": false
          },
          "progress": {
            "$ref": "#/components/schemas/KbProgress"
          },
          "sources": {
            "items": {
              "$ref": "#/components/schemas/SourceRun"
            },
            "type": "array",
            "title": "Sources"
          },
          "errors": {
            "items": {
              "$ref": "#/components/schemas/KbError"
            },
            "type": "array",
            "title": "Errors"
          },
          "embedding_model": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Embedding Model"
          }
        },
        "type": "object",
        "title": "KbRunStatus",
        "description": "The persisted status of the knowledge base of one store (shared by replicas)."
      },
      "KbSearchResult": {
        "properties": {
          "query": {
            "type": "string",
            "title": "Query"
          },
          "mode": {
            "type": "string",
            "enum": [
              "hybrid",
              "lexical",
              "empty"
            ],
            "title": "Mode",
            "description": "hybrid: BM25 + embeddings; lexical: BM25 only; empty: nothing indexed."
          },
          "reranked": {
            "type": "boolean",
            "title": "Reranked",
            "default": false
          },
          "hits": {
            "items": {
              "$ref": "#/components/schemas/KbHit"
            },
            "type": "array",
            "title": "Hits"
          }
        },
        "type": "object",
        "required": [
          "query",
          "mode"
        ],
        "title": "KbSearchResult"
      },
      "KbStatus": {
        "properties": {
          "enabled": {
            "type": "boolean",
            "title": "Enabled"
          },
          "online": {
            "type": "boolean",
            "title": "Online"
          },
          "store": {
            "$ref": "#/components/schemas/StoreStats"
          },
          "run": {
            "$ref": "#/components/schemas/KbRunStatus"
          },
          "mode": {
            "type": "string",
            "enum": [
              "hybrid",
              "lexical"
            ],
            "title": "Mode",
            "default": "lexical"
          },
          "embedder": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Embedder",
            "description": "Embedding model, if any."
          },
          "reranker": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Reranker"
          },
          "refresh_interval_hours": {
            "type": "number",
            "title": "Refresh Interval Hours",
            "default": 0
          },
          "next_refresh": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Refresh"
          },
          "sources": {
            "items": {
              "$ref": "#/components/schemas/SourceInfo"
            },
            "type": "array",
            "title": "Sources"
          },
          "components": {
            "items": {
              "$ref": "#/components/schemas/ComponentInfo"
            },
            "type": "array",
            "title": "Components"
          },
          "providers": {
            "type": "string",
            "title": "Providers",
            "default": "installed"
          }
        },
        "type": "object",
        "required": [
          "enabled",
          "online",
          "store",
          "run"
        ],
        "title": "KbStatus"
      },
      "KnowledgeContent": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "content": {
            "type": "string",
            "title": "Content"
          },
          "default_content": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Default Content"
          }
        },
        "type": "object",
        "required": [
          "id",
          "content"
        ],
        "title": "KnowledgeContent"
      },
      "KnowledgeDoc": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "title": {
            "type": "string",
            "title": "Title"
          },
          "origin": {
            "type": "string",
            "enum": [
              "builtin",
              "extra",
              "overridden",
              "custom"
            ],
            "title": "Origin",
            "description": "builtin (shipped), extra (a configured folder), overridden (an uploaded replacement of a builtin/extra doc) or custom (uploaded, no default)."
          },
          "enabled": {
            "type": "boolean",
            "title": "Enabled"
          },
          "disabled_by": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "settings",
                  "ui"
                ]
              },
              {
                "type": "null"
              }
            ],
            "title": "Disabled By"
          },
          "has_default": {
            "type": "boolean",
            "title": "Has Default",
            "description": "Reset restores a shipped / configured version."
          },
          "size": {
            "type": "integer",
            "title": "Size",
            "default": 0
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At"
          }
        },
        "type": "object",
        "required": [
          "id",
          "title",
          "origin",
          "enabled",
          "has_default"
        ],
        "title": "KnowledgeDoc"
      },
      "KnowledgeToggle": {
        "properties": {
          "enabled": {
            "type": "boolean",
            "title": "Enabled"
          }
        },
        "type": "object",
        "required": [
          "enabled"
        ],
        "title": "KnowledgeToggle"
      },
      "KnowledgeUpload": {
        "properties": {
          "content": {
            "type": "string",
            "maxLength": 2000000,
            "minLength": 1,
            "title": "Content"
          }
        },
        "type": "object",
        "required": [
          "content"
        ],
        "title": "KnowledgeUpload"
      },
      "LanguageServerStatus": {
        "properties": {
          "server": {
            "type": "string",
            "title": "Server",
            "description": "basedpyright, pylsp or bash-language-server."
          },
          "available": {
            "type": "boolean",
            "title": "Available",
            "description": "False when the server binary is not installed."
          }
        },
        "type": "object",
        "required": [
          "server",
          "available"
        ],
        "title": "LanguageServerStatus"
      },
      "LanguageServers": {
        "properties": {
          "python": {
            "$ref": "#/components/schemas/LanguageServerStatus"
          },
          "bash": {
            "$ref": "#/components/schemas/LanguageServerStatus"
          }
        },
        "type": "object",
        "required": [
          "python",
          "bash"
        ],
        "title": "LanguageServers"
      },
      "ListedEntry": {
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[a-z0-9][a-z0-9_-]{0,80}$",
            "title": "Id"
          },
          "kind": {
            "type": "string",
            "enum": [
              "dag",
              "fragment",
              "extension"
            ],
            "title": "Kind"
          },
          "title": {
            "type": "string",
            "title": "Title"
          },
          "description": {
            "type": "string",
            "title": "Description",
            "default": ""
          },
          "category": {
            "type": "string",
            "title": "Category",
            "default": "general"
          },
          "tags": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Tags",
            "default": []
          },
          "version": {
            "type": "string",
            "title": "Version",
            "default": "1.0.0"
          },
          "author": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Author"
          },
          "min_airflow": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Min Airflow"
          },
          "requires": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Requires",
            "description": "Provider packages needed."
          },
          "path": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Path",
            "description": "Payload, relative to the index."
          },
          "sha256": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Sha256"
          },
          "package": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Package",
            "description": "extension: pip requirement."
          },
          "homepage": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Homepage"
          },
          "source": {
            "type": "string",
            "title": "Source"
          },
          "verified": {
            "type": "boolean",
            "title": "Verified"
          },
          "installed": {
            "type": "boolean",
            "title": "Installed",
            "default": false
          }
        },
        "type": "object",
        "required": [
          "id",
          "kind",
          "title",
          "source",
          "verified"
        ],
        "title": "ListedEntry"
      },
      "LoopSpec": {
        "properties": {
          "max_iterations": {
            "type": "integer",
            "maximum": 10000.0,
            "minimum": 1.0,
            "title": "Max Iterations"
          },
          "until_code": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Until Code",
            "description": "Body of the stop condition (`loop`, `ti`, `params`, ... are available); return True to stop. Omit for a fixed-count loop."
          },
          "until_name": {
            "type": "string",
            "maxLength": 100,
            "pattern": "^[A-Za-z_][A-Za-z0-9_]*$",
            "title": "Until Name",
            "default": "until_done"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "max_iterations"
        ],
        "title": "LoopSpec",
        "description": "Airflow >= 3.4 Task Loop: repeat the group's tasks (``@task_group ... .loop()``).\n\nThe body must have exactly one terminal task; its return value is ``loop.result`` for\nthe ``until`` condition and ``loop.previous`` for the next iteration."
      },
      "LspSessionRequest": {
        "properties": {
          "language": {
            "type": "string",
            "enum": [
              "python",
              "bash"
            ],
            "title": "Language"
          }
        },
        "type": "object",
        "required": [
          "language"
        ],
        "title": "LspSessionRequest"
      },
      "LspSessionTicket": {
        "properties": {
          "ticket": {
            "type": "string",
            "title": "Ticket"
          },
          "expires_in": {
            "type": "integer",
            "title": "Expires In"
          },
          "path": {
            "type": "string",
            "title": "Path",
            "description": "WebSocket path below the API root, e.g. /lsp/ws/python."
          }
        },
        "type": "object",
        "required": [
          "ticket",
          "expires_in",
          "path"
        ],
        "title": "LspSessionTicket"
      },
      "MappingCheckRequest": {
        "properties": {
          "spec": {
            "$ref": "#/components/schemas/DagSpec"
          },
          "environment": {
            "type": "string",
            "minLength": 1,
            "title": "Environment",
            "description": "The environment whose mapping is checked."
          }
        },
        "type": "object",
        "required": [
          "spec",
          "environment"
        ],
        "title": "MappingCheckRequest"
      },
      "MappingCheckResult": {
        "properties": {
          "environment": {
            "type": "string",
            "title": "Environment"
          },
          "connections": {
            "items": {
              "$ref": "#/components/schemas/MappingEntry"
            },
            "type": "array",
            "title": "Connections"
          },
          "variables": {
            "items": {
              "$ref": "#/components/schemas/MappingEntry"
            },
            "type": "array",
            "title": "Variables"
          },
          "secrets_backend": {
            "type": "boolean",
            "title": "Secrets Backend",
            "description": "airflow_secrets_backend: ids missing from the metastore may still resolve from a secrets backend (not an error)."
          }
        },
        "type": "object",
        "required": [
          "environment",
          "connections",
          "variables",
          "secrets_backend"
        ],
        "title": "MappingCheckResult"
      },
      "MappingEntry": {
        "properties": {
          "logical": {
            "type": "string",
            "title": "Logical",
            "description": "The id the DAG uses."
          },
          "actual": {
            "type": "string",
            "title": "Actual",
            "description": "The id in this environment's Airflow."
          },
          "found": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Found",
            "description": "Whether Airflow's metastore has it (null: could not be checked, e.g. no permission to list them)."
          }
        },
        "type": "object",
        "required": [
          "logical",
          "actual",
          "found"
        ],
        "title": "MappingEntry"
      },
      "MappingSpec": {
        "properties": {
          "expand": {
            "patternProperties": {
              "^[A-Za-z_][A-Za-z0-9_]*$": {}
            },
            "propertyNames": {
              "maxLength": 100
            },
            "type": "object",
            "title": "Expand"
          },
          "expand_kwargs": {
            "title": "Expand Kwargs"
          },
          "map_index_template": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Map Index Template"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "title": "MappingSpec",
        "description": "Dynamic task mapping.\n\n* ``expand``: ``Op.partial(...).expand(**expand)`` \u2014 values are lists or XCom refs;\n  those argument names are removed from the node's regular params.\n* ``expand_kwargs``: ``Op.partial(...).expand_kwargs(<xcom ref to a list of dicts>)``."
      },
      "MarketplaceListing": {
        "properties": {
          "sources": {
            "items": {
              "$ref": "#/components/schemas/SourceStatus"
            },
            "type": "array",
            "title": "Sources"
          },
          "entries": {
            "items": {
              "$ref": "#/components/schemas/ListedEntry"
            },
            "type": "array",
            "title": "Entries"
          }
        },
        "type": "object",
        "required": [
          "sources",
          "entries"
        ],
        "title": "MarketplaceListing"
      },
      "McpSelection": {
        "properties": {
          "server": {
            "type": "string",
            "maxLength": 40,
            "title": "Server"
          },
          "tools": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Tools",
            "description": "Tools to attach (default: every allowed tool)."
          }
        },
        "type": "object",
        "required": [
          "server"
        ],
        "title": "McpSelection"
      },
      "McpServerInput": {
        "properties": {
          "description": {
            "type": "string",
            "maxLength": 500,
            "title": "Description",
            "default": ""
          },
          "transport": {
            "type": "string",
            "enum": [
              "http",
              "sse"
            ],
            "title": "Transport",
            "default": "http"
          },
          "url": {
            "type": "string",
            "maxLength": 2000,
            "pattern": "^https?://",
            "title": "Url"
          },
          "tools": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "maxItems": 200,
            "title": "Tools"
          },
          "read_only_tools": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "maxItems": 200,
            "title": "Read Only Tools",
            "description": "Tools (fnmatch) an admin vouches only read: they run without approval and the admin assistant may use them. The server's readOnlyHint is not trusted."
          },
          "headers": {
            "additionalProperties": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ]
            },
            "type": "object",
            "title": "Headers",
            "description": "Header values; null or '***' keeps the stored value, '' removes it."
          },
          "timeout_seconds": {
            "type": "number",
            "maximum": 600.0,
            "exclusiveMinimum": 0.0,
            "title": "Timeout Seconds",
            "default": 30
          },
          "enabled": {
            "type": "boolean",
            "title": "Enabled",
            "default": true
          },
          "agents": {
            "items": {
              "type": "string",
              "enum": [
                "troubleshoot",
                "developer",
                "admin"
              ]
            },
            "type": "array",
            "title": "Agents"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "url"
        ],
        "title": "McpServerInput",
        "description": "Create/replace a server in the admin panel (HTTP/SSE only)."
      },
      "McpServerOption": {
        "properties": {
          "name": {
            "type": "string",
            "title": "Name"
          },
          "description": {
            "type": "string",
            "title": "Description",
            "default": ""
          },
          "tools": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Tools",
            "description": "Allow-list patterns."
          }
        },
        "type": "object",
        "required": [
          "name"
        ],
        "title": "McpServerOption"
      },
      "McpServerView": {
        "properties": {
          "name": {
            "type": "string",
            "title": "Name"
          },
          "description": {
            "type": "string",
            "title": "Description",
            "default": ""
          },
          "transport": {
            "type": "string",
            "enum": [
              "http",
              "sse",
              "stdio"
            ],
            "title": "Transport"
          },
          "url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Url"
          },
          "command": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Command"
          },
          "tools": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Tools"
          },
          "read_only_tools": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Read Only Tools",
            "description": "Tools an admin vouches only read (run without approval)."
          },
          "headers": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Headers",
            "description": "Names of the set headers."
          },
          "timeout_seconds": {
            "type": "number",
            "title": "Timeout Seconds",
            "default": 30
          },
          "enabled": {
            "type": "boolean",
            "title": "Enabled",
            "default": true
          },
          "agents": {
            "items": {
              "type": "string",
              "enum": [
                "troubleshoot",
                "developer",
                "admin"
              ]
            },
            "type": "array",
            "title": "Agents"
          },
          "source": {
            "type": "string",
            "enum": [
              "settings",
              "database"
            ],
            "title": "Source"
          },
          "updated_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated By"
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At"
          }
        },
        "type": "object",
        "required": [
          "name",
          "transport",
          "source"
        ],
        "title": "McpServerView",
        "description": "A server as the API shows it (secret values never leave the server)."
      },
      "McpToolInfo": {
        "properties": {
          "name": {
            "type": "string",
            "title": "Name"
          },
          "description": {
            "type": "string",
            "title": "Description",
            "default": ""
          },
          "allowed": {
            "type": "boolean",
            "title": "Allowed",
            "default": true
          },
          "read_only": {
            "type": "boolean",
            "title": "Read Only",
            "description": "Listed in the server's read_only_tools (runs without approval).",
            "default": false
          },
          "hinted_read_only": {
            "type": "boolean",
            "title": "Hinted Read Only",
            "description": "The server marks it read-only (readOnlyHint; informational, not trusted).",
            "default": false
          }
        },
        "type": "object",
        "required": [
          "name"
        ],
        "title": "McpToolInfo"
      },
      "MeInfo": {
        "properties": {
          "user": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "User"
          },
          "display_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Display Name",
            "description": "From the auth manager / token (first/last name, name)."
          },
          "email": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Email"
          },
          "roles": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Roles"
          },
          "permissions": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Permissions"
          },
          "auth": {
            "type": "string",
            "title": "Auth",
            "description": "airflow (plugin), bearer (standalone token) or none."
          },
          "mode": {
            "type": "string",
            "title": "Mode"
          },
          "strategies": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Strategies"
          },
          "login_enabled": {
            "type": "boolean",
            "title": "Login Enabled",
            "description": "Standalone password sign-in is available."
          },
          "iam_enabled": {
            "type": "boolean",
            "title": "Iam Enabled",
            "description": "AutoAir's own authorization is on (features.iam). false: roles come only from Airflow's DAG/configuration permissions; no approvals or direct-push roles.",
            "default": true
          },
          "deploy": {
            "$ref": "#/components/schemas/DeployRights"
          },
          "role_permissions": {
            "additionalProperties": {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            "type": "object",
            "title": "Role Permissions",
            "description": "Permissions granted by each of the caller's roles (role chip tooltips)."
          }
        },
        "type": "object",
        "required": [
          "user",
          "roles",
          "permissions",
          "auth",
          "mode",
          "strategies",
          "login_enabled",
          "deploy"
        ],
        "title": "MeInfo"
      },
      "MergeRequest": {
        "properties": {
          "base": {
            "$ref": "#/components/schemas/DagSpec"
          },
          "ours": {
            "$ref": "#/components/schemas/DagSpec"
          },
          "theirs": {
            "$ref": "#/components/schemas/DagSpec"
          }
        },
        "type": "object",
        "required": [
          "base",
          "ours",
          "theirs"
        ],
        "title": "MergeRequest"
      },
      "MergeResult": {
        "properties": {
          "merged": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/DagSpec"
              },
              {
                "type": "null"
              }
            ],
            "description": "The merged spec; None when conflicts remain."
          },
          "conflicts": {
            "items": {
              "$ref": "#/components/schemas/Conflict"
            },
            "type": "array",
            "title": "Conflicts"
          },
          "draft": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Draft",
            "description": "Best-effort merge (ours wins on conflicts) to resolve conflicts from."
          }
        },
        "type": "object",
        "title": "MergeResult"
      },
      "MetaInfo": {
        "properties": {
          "autoair_version": {
            "type": "string",
            "title": "Autoair Version"
          },
          "airflow_version": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Airflow Version"
          },
          "target_airflow_version": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Target Airflow Version"
          },
          "mode": {
            "type": "string",
            "title": "Mode"
          },
          "auth": {
            "type": "string",
            "title": "Auth"
          },
          "allow_python_code": {
            "type": "boolean",
            "title": "Allow Python Code"
          },
          "allow_privileged_operators": {
            "type": "boolean",
            "title": "Allow Privileged Operators"
          },
          "import_check_on_deploy": {
            "type": "boolean",
            "title": "Import Check On Deploy"
          },
          "output_dir": {
            "type": "string",
            "title": "Output Dir"
          },
          "supports_react_apps": {
            "type": "boolean",
            "title": "Supports React Apps"
          },
          "storage": {
            "$ref": "#/components/schemas/TargetStatus"
          },
          "environments": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Environments"
          },
          "default_environment": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Default Environment"
          },
          "team": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Team"
          },
          "ai_enabled": {
            "type": "boolean",
            "title": "Ai Enabled"
          },
          "ai_model": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Ai Model"
          },
          "ai_unavailable_reason": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Ai Unavailable Reason",
            "description": "Why AI is off although features.ai is on (e.g. the autoair[ai] extra is not installed)."
          },
          "mcp_enabled": {
            "type": "boolean",
            "title": "Mcp Enabled"
          },
          "mcp_unavailable_reason": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Mcp Unavailable Reason",
            "description": "Why MCP is off although features.mcp is on (e.g. the autoair[mcp] extra is not installed, or cannot be next to Airflow 3.1)."
          },
          "collab_enabled": {
            "type": "boolean",
            "title": "Collab Enabled"
          },
          "features": {
            "additionalProperties": {
              "type": "boolean"
            },
            "type": "object",
            "title": "Features",
            "description": "Effective feature flags (AUTOAIR_FEATURES__*, runtime overrides and policy applied): hide what is false."
          },
          "expose_config": {
            "type": "string",
            "enum": [
              "false",
              "true",
              "non-sensitive-only"
            ],
            "title": "Expose Config",
            "description": "Whether GET /config is available (admins only).",
            "default": "false"
          },
          "policy": {
            "$ref": "#/components/schemas/PolicyInfo"
          },
          "iam": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/MeInfo"
              },
              {
                "type": "null"
              }
            ],
            "description": "The caller (same as GET /me)."
          },
          "ui": {
            "$ref": "#/components/schemas/Branding",
            "description": "UI branding and defaults (ui.*): title, logo, accent, banner, language, time zone."
          },
          "public_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Public Url",
            "description": "server.public_url."
          },
          "airflow_public_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Airflow Public Url",
            "description": "Airflow as browsers and API clients reach it (sso.airflow_public_url, else airflow_url): base of the trigger-endpoint snippets."
          },
          "allow_force_overwrite": {
            "type": "boolean",
            "title": "Allow Force Overwrite",
            "description": "preserve.allow_force_overwrite: the overwrite (force) choice for a DAG file changed outside AutoAir or the hand-written file AutoAir keeps is offered (still with 'deploy:overwrite_ejected'). false: hide it.",
            "default": false
          },
          "secrets_backend": {
            "type": "boolean",
            "title": "Secrets Backend",
            "description": "airflow_secrets_backend: connections/variables may come from a secrets backend, so ids missing from Airflow's metastore are not flagged.",
            "default": false
          },
          "test_runs": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/TestRunInfo"
              },
              {
                "type": "null"
              }
            ],
            "description": "Test runs: where they execute, whether mode=db is offered."
          }
        },
        "type": "object",
        "required": [
          "autoair_version",
          "airflow_version",
          "target_airflow_version",
          "mode",
          "auth",
          "allow_python_code",
          "allow_privileged_operators",
          "import_check_on_deploy",
          "output_dir",
          "supports_react_apps",
          "storage",
          "environments",
          "default_environment",
          "team",
          "ai_enabled",
          "ai_model",
          "mcp_enabled",
          "collab_enabled",
          "policy"
        ],
        "title": "MetaInfo"
      },
      "MigrationInfo": {
        "properties": {
          "version": {
            "type": "integer",
            "title": "Version"
          },
          "description": {
            "type": "string",
            "title": "Description"
          },
          "applied_at": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Applied At"
          }
        },
        "type": "object",
        "required": [
          "version",
          "description"
        ],
        "title": "MigrationInfo"
      },
      "MultiCronSchedule": {
        "properties": {
          "type": {
            "type": "string",
            "const": "multi_cron",
            "title": "Type"
          },
          "expressions": {
            "items": {
              "type": "string",
              "pattern": "^\\S+( \\S+){4,5}$",
              "examples": [
                "0 6 * * 1-5"
              ]
            },
            "type": "array",
            "minItems": 1,
            "title": "Expressions"
          },
          "timezone": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Timezone"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "type",
          "expressions"
        ],
        "title": "MultiCronSchedule"
      },
      "NextRunsRequest": {
        "properties": {
          "spec": {
            "$ref": "#/components/schemas/DagSpec"
          },
          "count": {
            "type": "integer",
            "maximum": 50.0,
            "minimum": 1.0,
            "title": "Count",
            "default": 5
          }
        },
        "type": "object",
        "required": [
          "spec"
        ],
        "title": "NextRunsRequest"
      },
      "NextRunsResult": {
        "properties": {
          "runs": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Runs"
          },
          "summary": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Summary"
          },
          "error": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Error"
          }
        },
        "type": "object",
        "required": [
          "runs"
        ],
        "title": "NextRunsResult"
      },
      "NoSchedule": {
        "properties": {
          "type": {
            "type": "string",
            "const": "none",
            "title": "Type"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "type"
        ],
        "title": "NoSchedule"
      },
      "NodeChange": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "kind": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Kind"
          },
          "changes": {
            "items": {
              "$ref": "#/components/schemas/FieldChange"
            },
            "type": "array",
            "title": "Changes"
          },
          "layout_only": {
            "type": "boolean",
            "title": "Layout Only",
            "description": "Only the canvas position changed.",
            "default": false
          }
        },
        "type": "object",
        "required": [
          "id"
        ],
        "title": "NodeChange"
      },
      "NodeKindInfo": {
        "properties": {
          "name": {
            "type": "string",
            "title": "Name"
          },
          "title": {
            "type": "string",
            "title": "Title"
          },
          "description": {
            "type": "string",
            "title": "Description"
          },
          "category": {
            "type": "string",
            "title": "Category"
          },
          "config_schema": {
            "additionalProperties": true,
            "type": "object",
            "title": "Config Schema"
          },
          "icon": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Icon",
            "description": "Palette/canvas icon id (builtin:<logo> or custom:<name>)."
          },
          "color": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Color",
            "description": "Canvas accent colour (#rrggbb)."
          },
          "example_config": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Example Config",
            "description": "Config prefilled when the node is inserted."
          },
          "output_schema": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Output Schema",
            "description": "JSON Schema of the task's return value (XCom)."
          },
          "doc_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Doc Url",
            "description": "Documentation link (https)."
          }
        },
        "type": "object",
        "required": [
          "name",
          "title",
          "description",
          "category",
          "config_schema"
        ],
        "title": "NodeKindInfo"
      },
      "NoteNode": {
        "properties": {
          "id": {
            "type": "string",
            "maxLength": 100,
            "minLength": 1,
            "pattern": "^[A-Za-z0-9_-]+$",
            "title": "Id"
          },
          "label": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 200
              },
              {
                "type": "null"
              }
            ],
            "title": "Label",
            "description": "Canvas label only."
          },
          "icon": {
            "anyOf": [
              {
                "type": "string",
                "pattern": "^(builtin|custom|package):[a-z0-9][a-z0-9-]{0,80}$"
              },
              {
                "type": "null"
              }
            ],
            "title": "Icon",
            "description": "Canvas icon only (builtin:<logo> or custom:<name>); overrides the default."
          },
          "parent_group": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 100,
                "minLength": 1,
                "pattern": "^[A-Za-z0-9_-]+$"
              },
              {
                "type": "null"
              }
            ],
            "title": "Parent Group",
            "description": "Id of a task_group node."
          },
          "position": {
            "$ref": "#/components/schemas/Position"
          },
          "kind": {
            "type": "string",
            "const": "note",
            "title": "Kind"
          },
          "text": {
            "type": "string",
            "maxLength": 20000,
            "title": "Text",
            "default": ""
          },
          "color": {
            "anyOf": [
              {
                "type": "string",
                "pattern": "^[a-z]+$|^#[0-9a-fA-F]{6}$"
              },
              {
                "type": "null"
              }
            ],
            "title": "Color"
          },
          "include_in_docs": {
            "type": "boolean",
            "title": "Include In Docs",
            "default": false
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "id",
          "kind"
        ],
        "title": "NoteNode",
        "description": "Sticky note on the canvas. Not a task; optionally appended to the DAG docs."
      },
      "NotifierDetail": {
        "properties": {
          "fqn": {
            "type": "string",
            "title": "Fqn"
          },
          "class_name": {
            "type": "string",
            "title": "Class Name"
          },
          "module": {
            "type": "string",
            "title": "Module"
          },
          "provider": {
            "type": "string",
            "title": "Provider"
          },
          "provider_version": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Provider Version"
          },
          "summary": {
            "type": "string",
            "title": "Summary",
            "default": ""
          },
          "deprecated": {
            "type": "boolean",
            "title": "Deprecated",
            "default": false
          },
          "builder_supported": {
            "type": "boolean",
            "title": "Builder Supported",
            "default": true
          },
          "unsupported_reason": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Unsupported Reason"
          },
          "unsupported_params": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Unsupported Params",
            "default": []
          },
          "python_ref_params": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Python Ref Params",
            "default": []
          },
          "requires_python_code": {
            "type": "boolean",
            "title": "Requires Python Code",
            "default": false
          },
          "params_schema": {
            "additionalProperties": true,
            "type": "object",
            "title": "Params Schema"
          },
          "template_fields": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Template Fields",
            "default": []
          },
          "docstring": {
            "type": "string",
            "title": "Docstring",
            "default": ""
          },
          "connection_types": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Connection Types",
            "default": []
          }
        },
        "type": "object",
        "required": [
          "fqn",
          "class_name",
          "module",
          "provider",
          "params_schema"
        ],
        "title": "NotifierDetail"
      },
      "NotifierSummary": {
        "properties": {
          "fqn": {
            "type": "string",
            "title": "Fqn"
          },
          "class_name": {
            "type": "string",
            "title": "Class Name"
          },
          "module": {
            "type": "string",
            "title": "Module"
          },
          "provider": {
            "type": "string",
            "title": "Provider"
          },
          "provider_version": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Provider Version"
          },
          "summary": {
            "type": "string",
            "title": "Summary",
            "default": ""
          },
          "deprecated": {
            "type": "boolean",
            "title": "Deprecated",
            "default": false
          },
          "builder_supported": {
            "type": "boolean",
            "title": "Builder Supported",
            "default": true
          },
          "unsupported_reason": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Unsupported Reason"
          },
          "unsupported_params": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Unsupported Params",
            "default": []
          },
          "python_ref_params": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Python Ref Params",
            "default": []
          },
          "requires_python_code": {
            "type": "boolean",
            "title": "Requires Python Code",
            "default": false
          }
        },
        "type": "object",
        "required": [
          "fqn",
          "class_name",
          "module",
          "provider"
        ],
        "title": "NotifierSummary"
      },
      "OperatorBlueprint": {
        "properties": {
          "node": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/OperatorNode"
              },
              {
                "$ref": "#/components/schemas/PythonTaskNode"
              },
              {
                "$ref": "#/components/schemas/CustomNode"
              }
            ],
            "title": "Node",
            "discriminator": {
              "propertyName": "kind",
              "mapping": {
                "custom": "#/components/schemas/CustomNode",
                "operator": "#/components/schemas/OperatorNode",
                "python_task": "#/components/schemas/PythonTaskNode"
              }
            }
          },
          "locked": {
            "items": {
              "type": "string",
              "maxLength": 200,
              "pattern": "^[a-z_][a-z0-9_]*(\\.[A-Za-z_][A-Za-z0-9_]*)?$"
            },
            "type": "array",
            "title": "Locked",
            "description": "Field paths fixed by the template (`retries`, `params.bash_command`): read-only on insert, a validation error when changed."
          },
          "required": {
            "items": {
              "type": "string",
              "maxLength": 200,
              "pattern": "^[a-z_][a-z0-9_]*(\\.[A-Za-z_][A-Za-z0-9_]*)?$"
            },
            "type": "array",
            "title": "Required",
            "description": "Field paths the user fills in when inserting (asked in a form); every other field keeps the template's value as an editable default."
          }
        },
        "type": "object",
        "required": [
          "node"
        ],
        "title": "OperatorBlueprint",
        "description": "One configured task plus the guardrails applied when it is reused."
      },
      "OperatorDetail": {
        "properties": {
          "fqn": {
            "type": "string",
            "title": "Fqn",
            "description": "Fully qualified class path; the import allowlist key."
          },
          "class_name": {
            "type": "string",
            "title": "Class Name"
          },
          "module": {
            "type": "string",
            "title": "Module"
          },
          "provider": {
            "type": "string",
            "title": "Provider"
          },
          "provider_version": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Provider Version"
          },
          "integration": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Integration"
          },
          "category": {
            "type": "string",
            "enum": [
              "operator",
              "sensor",
              "transfer"
            ],
            "title": "Category"
          },
          "summary": {
            "type": "string",
            "title": "Summary",
            "default": ""
          },
          "ui_color": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Ui Color"
          },
          "deprecated": {
            "type": "boolean",
            "title": "Deprecated",
            "default": false
          },
          "builder_supported": {
            "type": "boolean",
            "title": "Builder Supported",
            "default": true
          },
          "unsupported_reason": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Unsupported Reason"
          },
          "unsupported_params": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Unsupported Params",
            "description": "Constructor params the builder cannot express.",
            "default": []
          },
          "python_ref_params": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Python Ref Params",
            "description": "Params that take a Python object (callable, class\u2026), given as an import reference ``{\"$type\": \"import\", \"path\": \"pkg.module.name\"}``.",
            "default": []
          },
          "requires_python_code": {
            "type": "boolean",
            "title": "Requires Python Code",
            "description": "A required param can only be a Python reference: the operator needs the allow_python_code permission (like Python task nodes).",
            "default": false
          },
          "icon": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Icon",
            "description": "Canvas icon id (assignment or integration logo)."
          },
          "equivalent_decorator": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Equivalent Decorator",
            "description": "TaskFlow alternative (``@task.<name>``) where the callable is written in the builder instead of referenced, e.g. ``branch`` for BranchPythonOperator."
          },
          "group": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Group",
            "description": "Palette group (catalog.groups or the package metadata); unset: the provider/package."
          },
          "group_order": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Group Order",
            "description": "Sort key of the palette group (lower first)."
          },
          "docs_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Docs Url",
            "description": "Documentation link (package metadata)."
          },
          "params_schema": {
            "additionalProperties": true,
            "type": "object",
            "title": "Params Schema",
            "description": "JSON Schema (draft 2020-12) of the operator-specific constructor params."
          },
          "template_fields": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Template Fields",
            "default": []
          },
          "docstring": {
            "type": "string",
            "title": "Docstring",
            "default": ""
          },
          "connection_types": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Connection Types",
            "description": "Connection types used by the operator's ``*_conn_id`` params (also given per param as ``x-autoair-conn-type``).",
            "default": []
          },
          "is_sensor": {
            "type": "boolean",
            "title": "Is Sensor",
            "default": false
          },
          "deferrable_param": {
            "type": "boolean",
            "title": "Deferrable Param",
            "description": "The operator accepts a ``deferrable`` argument.",
            "default": false
          },
          "hitl": {
            "type": "boolean",
            "title": "Hitl",
            "description": "Human-in-the-loop operator.",
            "default": false
          },
          "required_airflow": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Required Airflow",
            "description": "Airflow version specifier required by the provider."
          },
          "examples": {
            "items": {
              "$ref": "#/components/schemas/OperatorExample"
            },
            "type": "array",
            "title": "Examples",
            "description": "Example parameter sets (package metadata).",
            "default": []
          }
        },
        "type": "object",
        "required": [
          "fqn",
          "class_name",
          "module",
          "provider",
          "category",
          "params_schema"
        ],
        "title": "OperatorDetail"
      },
      "OperatorExample": {
        "properties": {
          "title": {
            "type": "string",
            "maxLength": 120,
            "minLength": 1,
            "title": "Title"
          },
          "description": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 2000
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "params": {
            "additionalProperties": true,
            "type": "object",
            "title": "Params",
            "description": "Operator params."
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "title"
        ],
        "title": "OperatorExample",
        "description": "A ready-made parameter set (package metadata ``examples``)."
      },
      "OperatorNode": {
        "properties": {
          "id": {
            "type": "string",
            "maxLength": 100,
            "minLength": 1,
            "pattern": "^[A-Za-z0-9_-]+$",
            "title": "Id"
          },
          "label": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 200
              },
              {
                "type": "null"
              }
            ],
            "title": "Label",
            "description": "Canvas label only."
          },
          "icon": {
            "anyOf": [
              {
                "type": "string",
                "pattern": "^(builtin|custom|package):[a-z0-9][a-z0-9-]{0,80}$"
              },
              {
                "type": "null"
              }
            ],
            "title": "Icon",
            "description": "Canvas icon only (builtin:<logo> or custom:<name>); overrides the default."
          },
          "parent_group": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 100,
                "minLength": 1,
                "pattern": "^[A-Za-z0-9_-]+$"
              },
              {
                "type": "null"
              }
            ],
            "title": "Parent Group",
            "description": "Id of a task_group node."
          },
          "position": {
            "$ref": "#/components/schemas/Position"
          },
          "task_id": {
            "type": "string",
            "maxLength": 250,
            "minLength": 1,
            "pattern": "^[A-Za-z0-9_.-]+$",
            "title": "Task Id"
          },
          "trigger_rule": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "all_success",
                  "all_failed",
                  "all_done",
                  "all_done_min_one_success",
                  "all_skipped",
                  "one_success",
                  "one_done",
                  "one_failed",
                  "none_failed",
                  "none_failed_min_one_success",
                  "none_skipped",
                  "always",
                  "all_done_setup_success"
                ]
              },
              {
                "type": "null"
              }
            ],
            "title": "Trigger Rule"
          },
          "retries": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Retries"
          },
          "retry_delay_seconds": {
            "anyOf": [
              {
                "type": "number",
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Retry Delay Seconds"
          },
          "execution_timeout_seconds": {
            "anyOf": [
              {
                "type": "number",
                "exclusiveMinimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Execution Timeout Seconds"
          },
          "pool": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Pool"
          },
          "pool_slots": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 1.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Pool Slots"
          },
          "queue": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Queue"
          },
          "owner": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Owner"
          },
          "doc_md": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Doc Md"
          },
          "outlets": {
            "items": {
              "$ref": "#/components/schemas/AssetRef"
            },
            "type": "array",
            "title": "Outlets"
          },
          "inlets": {
            "items": {
              "$ref": "#/components/schemas/AssetRef"
            },
            "type": "array",
            "title": "Inlets"
          },
          "mapping": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/MappingSpec"
              },
              {
                "type": "null"
              }
            ]
          },
          "is_setup": {
            "type": "boolean",
            "title": "Is Setup",
            "default": false
          },
          "is_teardown": {
            "type": "boolean",
            "title": "Is Teardown",
            "default": false
          },
          "callbacks": {
            "$ref": "#/components/schemas/Callbacks"
          },
          "retry_policy": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/RetryPolicySpec"
              },
              {
                "type": "null"
              }
            ]
          },
          "retry_exponential_backoff": {
            "anyOf": [
              {
                "type": "number",
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Retry Exponential Backoff"
          },
          "priority_weight": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Priority Weight"
          },
          "weight_rule": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "downstream",
                  "upstream",
                  "absolute"
                ]
              },
              {
                "type": "null"
              }
            ],
            "title": "Weight Rule"
          },
          "task_display_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Task Display Name"
          },
          "executor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Executor"
          },
          "executor_config": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Executor Config"
          },
          "max_active_tis_per_dagrun": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 1.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Max Active Tis Per Dagrun"
          },
          "depends_on_past": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Depends On Past"
          },
          "disabled": {
            "type": "boolean",
            "title": "Disabled",
            "description": "Excluded from the generated DAG (kept on the canvas).",
            "default": false
          },
          "lineage": {
            "type": "string",
            "enum": [
              "inherit",
              "enabled",
              "disabled"
            ],
            "title": "Lineage",
            "description": "OpenLineage selective enable/disable for this task.",
            "default": "inherit"
          },
          "template_ref": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/TemplateRef"
              },
              {
                "type": "null"
              }
            ],
            "description": "Operator template (blueprint) this task was created from; validation enforces the template's locked fields. Not part of the generated DAG."
          },
          "kind": {
            "type": "string",
            "const": "operator",
            "title": "Kind"
          },
          "operator": {
            "type": "string",
            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(\\.[A-Za-z_][A-Za-z0-9_]*)+$",
            "title": "Operator",
            "examples": [
              "airflow.providers.standard.operators.bash.BashOperator"
            ]
          },
          "params": {
            "patternProperties": {
              "^[A-Za-z_][A-Za-z0-9_]*$": {}
            },
            "propertyNames": {
              "maxLength": 100
            },
            "type": "object",
            "title": "Params"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "id",
          "task_id",
          "kind",
          "operator"
        ],
        "title": "OperatorNode",
        "description": "Any ``BaseOperator`` subclass discovered by the operator catalog."
      },
      "OperatorSummary": {
        "properties": {
          "fqn": {
            "type": "string",
            "title": "Fqn",
            "description": "Fully qualified class path; the import allowlist key."
          },
          "class_name": {
            "type": "string",
            "title": "Class Name"
          },
          "module": {
            "type": "string",
            "title": "Module"
          },
          "provider": {
            "type": "string",
            "title": "Provider"
          },
          "provider_version": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Provider Version"
          },
          "integration": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Integration"
          },
          "category": {
            "type": "string",
            "enum": [
              "operator",
              "sensor",
              "transfer"
            ],
            "title": "Category"
          },
          "summary": {
            "type": "string",
            "title": "Summary",
            "default": ""
          },
          "ui_color": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Ui Color"
          },
          "deprecated": {
            "type": "boolean",
            "title": "Deprecated",
            "default": false
          },
          "builder_supported": {
            "type": "boolean",
            "title": "Builder Supported",
            "default": true
          },
          "unsupported_reason": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Unsupported Reason"
          },
          "unsupported_params": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Unsupported Params",
            "description": "Constructor params the builder cannot express.",
            "default": []
          },
          "python_ref_params": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Python Ref Params",
            "description": "Params that take a Python object (callable, class\u2026), given as an import reference ``{\"$type\": \"import\", \"path\": \"pkg.module.name\"}``.",
            "default": []
          },
          "requires_python_code": {
            "type": "boolean",
            "title": "Requires Python Code",
            "description": "A required param can only be a Python reference: the operator needs the allow_python_code permission (like Python task nodes).",
            "default": false
          },
          "icon": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Icon",
            "description": "Canvas icon id (assignment or integration logo)."
          },
          "equivalent_decorator": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Equivalent Decorator",
            "description": "TaskFlow alternative (``@task.<name>``) where the callable is written in the builder instead of referenced, e.g. ``branch`` for BranchPythonOperator."
          },
          "group": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Group",
            "description": "Palette group (catalog.groups or the package metadata); unset: the provider/package."
          },
          "group_order": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Group Order",
            "description": "Sort key of the palette group (lower first)."
          },
          "docs_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Docs Url",
            "description": "Documentation link (package metadata)."
          }
        },
        "type": "object",
        "required": [
          "fqn",
          "class_name",
          "module",
          "provider",
          "category"
        ],
        "title": "OperatorSummary"
      },
      "OptimizeReport": {
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "review",
              "leaks",
              "optimize",
              "fix"
            ],
            "title": "Kind"
          },
          "summary": {
            "type": "string",
            "title": "Summary",
            "default": ""
          },
          "findings": {
            "items": {
              "$ref": "#/components/schemas/Finding"
            },
            "type": "array",
            "title": "Findings"
          },
          "proposed_spec": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/DagSpec"
              },
              {
                "type": "null"
              }
            ],
            "description": "The spec with every finding's patch applied (when any)."
          },
          "proposed_ok": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Proposed Ok",
            "description": "Whether the proposed spec passes validation."
          },
          "problems": {
            "items": {
              "$ref": "#/components/schemas/SpecProblem"
            },
            "type": "array",
            "title": "Problems",
            "description": "Validation problems of the proposed spec."
          },
          "skipped_patches": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Skipped Patches",
            "description": "Finding ids whose patch could not be applied."
          },
          "ai_used": {
            "type": "boolean",
            "title": "Ai Used",
            "default": false
          },
          "model": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Model"
          },
          "usage": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Usage"
              },
              {
                "type": "null"
              }
            ]
          },
          "notes": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Notes"
          },
          "stats": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/HistoryStats"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "type": "object",
        "required": [
          "kind"
        ],
        "title": "OptimizeReport"
      },
      "OptimizeRequest": {
        "properties": {
          "spec": {
            "$ref": "#/components/schemas/DagSpec"
          },
          "use_ai": {
            "type": "boolean",
            "title": "Use Ai",
            "description": "Add an LLM pass (when configured) to the deterministic checks.",
            "default": true
          },
          "model": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 200
              },
              {
                "type": "null"
              }
            ],
            "title": "Model",
            "description": "Model for this request (one of /ai/status `models`; default: configured)."
          },
          "dag_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Dag Id",
            "description": "Read run history of this DAG (default: spec.dag_id)."
          },
          "history_runs": {
            "type": "integer",
            "maximum": 50.0,
            "minimum": 0.0,
            "title": "History Runs",
            "default": 15
          }
        },
        "type": "object",
        "required": [
          "spec"
        ],
        "title": "OptimizeRequest"
      },
      "PartitionedAssetSchedule": {
        "properties": {
          "type": {
            "type": "string",
            "const": "partitioned_assets",
            "title": "Type"
          },
          "expression": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/AssetLeaf"
              },
              {
                "$ref": "#/components/schemas/AssetAliasLeaf"
              },
              {
                "$ref": "#/components/schemas/AssetCombination"
              }
            ],
            "title": "Expression",
            "discriminator": {
              "propertyName": "op",
              "mapping": {
                "alias": "#/components/schemas/AssetAliasLeaf",
                "all": "#/components/schemas/AssetCombination",
                "any": "#/components/schemas/AssetCombination",
                "asset": "#/components/schemas/AssetLeaf"
              }
            }
          },
          "mapper": {
            "type": "string",
            "enum": [
              "identity",
              "start_of_hour",
              "start_of_day",
              "start_of_week",
              "start_of_month",
              "start_of_quarter",
              "start_of_year"
            ],
            "title": "Mapper",
            "default": "identity"
          },
          "timezone": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Timezone"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "type",
          "expression"
        ],
        "title": "PartitionedAssetSchedule",
        "description": "Airflow >= 3.2 ``PartitionedAssetTimetable`` \u2014 consume partitioned asset events."
      },
      "PartitionedCronSchedule": {
        "properties": {
          "type": {
            "type": "string",
            "const": "partitioned_cron",
            "title": "Type"
          },
          "expression": {
            "type": "string",
            "pattern": "^\\S+( \\S+){4,5}$",
            "title": "Expression",
            "examples": [
              "0 6 * * 1-5"
            ]
          },
          "timezone": {
            "type": "string",
            "title": "Timezone",
            "default": "UTC"
          },
          "key_format": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Key Format"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "type",
          "expression"
        ],
        "title": "PartitionedCronSchedule",
        "description": "Airflow >= 3.2 ``CronPartitionTimetable`` \u2014 produces partitioned runs."
      },
      "PatchOp": {
        "properties": {
          "op": {
            "type": "string",
            "enum": [
              "add",
              "replace",
              "remove"
            ],
            "title": "Op"
          },
          "path": {
            "type": "string",
            "title": "Path",
            "description": "JSON pointer; address nodes as /nodes/@<node id>/... (e.g. /nodes/@load/retries, /default_args/retries)."
          },
          "value": {
            "title": "Value",
            "description": "New value (omit for remove)."
          }
        },
        "type": "object",
        "required": [
          "op",
          "path"
        ],
        "title": "PatchOp",
        "description": "One JSON Patch operation against the DagSpec document."
      },
      "PauseRequest": {
        "properties": {
          "paused": {
            "type": "boolean",
            "title": "Paused"
          }
        },
        "type": "object",
        "required": [
          "paused"
        ],
        "title": "PauseRequest"
      },
      "PendingToolCall": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id",
            "description": "The model's tool call id."
          },
          "tool": {
            "type": "string",
            "title": "Tool"
          },
          "kind": {
            "type": "string",
            "enum": [
              "read",
              "write",
              "execute"
            ],
            "title": "Kind",
            "default": "write"
          },
          "description": {
            "type": "string",
            "title": "Description",
            "description": "The tool's description (shortened).",
            "default": ""
          },
          "arguments": {
            "title": "Arguments",
            "description": "Arguments with secrets masked and long values cut (display only)."
          },
          "truncated": {
            "type": "boolean",
            "title": "Truncated",
            "description": "Arguments were cut for display.",
            "default": false
          },
          "omitted_chars": {
            "type": "integer",
            "title": "Omitted Chars",
            "description": "About how many characters of the (masked) arguments the cut left out; the full arguments come from GET /ai/approvals/{id}/calls/{call_id}/arguments.",
            "default": 0
          },
          "arguments_sha256": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Arguments Sha256",
            "description": "SHA-256 of the exact arguments the tool will run with (canonical JSON). An approval sends it back; the run resumes only when the stored call still has these arguments."
          }
        },
        "type": "object",
        "required": [
          "id",
          "tool"
        ],
        "title": "PendingToolCall",
        "description": "One tool call waiting for a decision, as the approval card shows it."
      },
      "PolicyInfo": {
        "properties": {
          "allow_python_code": {
            "type": "boolean",
            "title": "Allow Python Code"
          },
          "allow_privileged_operators": {
            "type": "boolean",
            "title": "Allow Privileged Operators"
          },
          "require_owner": {
            "type": "boolean",
            "title": "Require Owner"
          },
          "require_description": {
            "type": "boolean",
            "title": "Require Description"
          },
          "min_retries": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Min Retries"
          },
          "required_tags": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Required Tags"
          },
          "forbidden_operators": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Forbidden Operators"
          },
          "max_tasks": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Max Tasks"
          },
          "dag_id_prefix": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Dag Id Prefix"
          },
          "python_ref_allow": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Python Ref Allow"
          },
          "dag_id_patterns": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Dag Id Patterns",
            "description": "Regexes every dag_id must fullmatch (policy)."
          },
          "task_id_patterns": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Task Id Patterns",
            "description": "Regexes every task_id must fullmatch (policy)."
          }
        },
        "type": "object",
        "required": [
          "allow_python_code",
          "allow_privileged_operators",
          "require_owner",
          "require_description",
          "min_retries",
          "required_tags",
          "forbidden_operators",
          "max_tasks",
          "dag_id_prefix",
          "python_ref_allow"
        ],
        "title": "PolicyInfo"
      },
      "PoolInfo": {
        "properties": {
          "name": {
            "type": "string",
            "title": "Name"
          },
          "slots": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Slots"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "team_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Team Name"
          }
        },
        "type": "object",
        "required": [
          "name"
        ],
        "title": "PoolInfo"
      },
      "Position": {
        "properties": {
          "x": {
            "type": "number",
            "title": "X",
            "default": 0
          },
          "y": {
            "type": "number",
            "title": "Y",
            "default": 0
          },
          "width": {
            "anyOf": [
              {
                "type": "number",
                "exclusiveMinimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Width"
          },
          "height": {
            "anyOf": [
              {
                "type": "number",
                "exclusiveMinimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Height"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "title": "Position",
        "description": "Canvas geometry (relative to the parent group). Ignored by code generation."
      },
      "PresetSchedule": {
        "properties": {
          "type": {
            "type": "string",
            "const": "preset",
            "title": "Type"
          },
          "preset": {
            "type": "string",
            "enum": [
              "@once",
              "@continuous",
              "@hourly",
              "@daily",
              "@weekly",
              "@monthly",
              "@quarterly",
              "@yearly"
            ],
            "title": "Preset"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "type",
          "preset"
        ],
        "title": "PresetSchedule"
      },
      "Problem": {
        "properties": {
          "severity": {
            "type": "string",
            "enum": [
              "error",
              "warning",
              "info"
            ],
            "title": "Severity"
          },
          "code": {
            "type": "string",
            "title": "Code"
          },
          "message": {
            "type": "string",
            "title": "Message"
          },
          "node_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Node Id"
          },
          "field": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Field"
          },
          "line": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Line"
          },
          "column": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Column"
          },
          "doc_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Doc Url",
            "description": "Documentation of the rule (e.g. ruff/ShellCheck rule page)."
          }
        },
        "type": "object",
        "required": [
          "severity",
          "code",
          "message"
        ],
        "title": "Problem"
      },
      "ProjectRules": {
        "properties": {
          "scope": {
            "type": "string",
            "title": "Scope",
            "description": "global or team:<name>."
          },
          "content": {
            "type": "string",
            "maxLength": 50000,
            "title": "Content",
            "default": ""
          },
          "enabled": {
            "type": "boolean",
            "title": "Enabled",
            "default": true
          },
          "updated_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated By"
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At"
          }
        },
        "type": "object",
        "required": [
          "scope"
        ],
        "title": "ProjectRules"
      },
      "PromoteRequest": {
        "properties": {
          "from_env": {
            "type": "string",
            "title": "From Env"
          },
          "to_env": {
            "type": "string",
            "title": "To Env"
          },
          "git_conn_id": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 250
              },
              {
                "type": "null"
              }
            ],
            "title": "Git Conn Id",
            "description": "per_user git credentials: the Airflow connection to commit with."
          }
        },
        "type": "object",
        "required": [
          "from_env",
          "to_env"
        ],
        "title": "PromoteRequest"
      },
      "PromptInfo": {
        "properties": {
          "name": {
            "type": "string",
            "title": "Name"
          },
          "overridden": {
            "type": "boolean",
            "title": "Overridden"
          },
          "chars": {
            "type": "integer",
            "title": "Chars"
          }
        },
        "type": "object",
        "required": [
          "name",
          "overridden",
          "chars"
        ],
        "title": "PromptInfo"
      },
      "Proposal": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "kind": {
            "type": "string",
            "enum": [
              "spec_patch",
              "config_snippet"
            ],
            "title": "Kind"
          },
          "title": {
            "type": "string",
            "title": "Title"
          },
          "summary": {
            "type": "string",
            "title": "Summary",
            "default": ""
          },
          "findings": {
            "items": {
              "$ref": "#/components/schemas/Finding"
            },
            "type": "array",
            "title": "Findings"
          },
          "base_spec": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/DagSpec"
              },
              {
                "type": "null"
              }
            ],
            "description": "The spec the change is on."
          },
          "proposed_spec": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/DagSpec"
              },
              {
                "type": "null"
              }
            ]
          },
          "proposed_ok": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Proposed Ok"
          },
          "problems": {
            "items": {
              "$ref": "#/components/schemas/SpecProblem"
            },
            "type": "array",
            "title": "Problems"
          },
          "skipped": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Skipped"
          },
          "format": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "yaml",
                  "env",
                  "json"
                ]
              },
              {
                "type": "null"
              }
            ],
            "title": "Format"
          },
          "snippet": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Snippet"
          },
          "status": {
            "type": "string",
            "enum": [
              "proposed",
              "approved",
              "rejected",
              "applied"
            ],
            "title": "Status",
            "default": "proposed"
          },
          "decided_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Decided By"
          },
          "decided_at": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Decided At"
          }
        },
        "type": "object",
        "required": [
          "kind",
          "title"
        ],
        "title": "Proposal",
        "description": "A change the assistant proposes; nothing happens until the user approves it."
      },
      "ProposalDecision": {
        "properties": {
          "decision": {
            "type": "string",
            "enum": [
              "approve",
              "reject",
              "applied"
            ],
            "title": "Decision"
          },
          "comment": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 2000
              },
              {
                "type": "null"
              }
            ],
            "title": "Comment"
          },
          "detail": {
            "additionalProperties": true,
            "type": "object",
            "title": "Detail",
            "description": "applied: deploy outcome (version, PR url\u2026)."
          }
        },
        "type": "object",
        "required": [
          "decision"
        ],
        "title": "ProposalDecision"
      },
      "ProposalDeployRequest": {
        "properties": {
          "force": {
            "type": "boolean",
            "title": "Force",
            "description": "Overwrite even if the stored spec changed meanwhile.",
            "default": false
          },
          "message": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 4000
              },
              {
                "type": "null"
              }
            ],
            "title": "Message",
            "description": "Commit message (default: the proposal's)."
          }
        },
        "type": "object",
        "title": "ProposalDeployRequest"
      },
      "ProposalDetail": {
        "properties": {
          "dag_id": {
            "type": "string",
            "title": "Dag Id"
          },
          "etag": {
            "type": "string",
            "title": "Etag"
          },
          "author": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Author"
          },
          "timestamp": {
            "type": "string",
            "title": "Timestamp"
          },
          "expires_at": {
            "type": "string",
            "title": "Expires At"
          },
          "message": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Message"
          },
          "environment": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Environment"
          },
          "base_etag": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Base Etag"
          },
          "direct_push": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Direct Push"
          },
          "action": {
            "type": "string",
            "enum": [
              "deploy",
              "delete"
            ],
            "title": "Action",
            "description": "'deploy' deploys the proposed spec; 'delete' deletes the DAG (POST .../proposals/{etag}/delete).",
            "default": "deploy"
          },
          "approved_by": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Approved By",
            "description": "Other users whose latest verdict is 'approve'."
          },
          "changes_requested_by": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Changes Requested By"
          },
          "approved": {
            "type": "boolean",
            "title": "Approved",
            "description": "Deployable: approved by someone else than the author."
          },
          "spec": {
            "$ref": "#/components/schemas/DagSpec"
          },
          "current_spec": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/DagSpec"
              },
              {
                "type": "null"
              }
            ],
            "description": "The DAG's stored spec now (diff base)."
          },
          "current_etag": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Current Etag"
          },
          "stale": {
            "type": "boolean",
            "title": "Stale",
            "description": "The stored spec changed since the author's base version, or the DAG exists now and the proposal records no base version: deploying, executing or approving it is refused (409) until it is proposed again.",
            "default": false
          },
          "reviews": {
            "items": {
              "$ref": "#/components/schemas/Review"
            },
            "type": "array",
            "title": "Reviews"
          }
        },
        "type": "object",
        "required": [
          "dag_id",
          "etag",
          "timestamp",
          "expires_at",
          "approved",
          "spec"
        ],
        "title": "ProposalDetail"
      },
      "ProposalRow": {
        "properties": {
          "dag_id": {
            "type": "string",
            "title": "Dag Id"
          },
          "etag": {
            "type": "string",
            "title": "Etag"
          },
          "author": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Author"
          },
          "timestamp": {
            "type": "string",
            "title": "Timestamp"
          },
          "message": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Message"
          },
          "environment": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Environment"
          },
          "action": {
            "type": "string",
            "enum": [
              "deploy",
              "delete"
            ],
            "title": "Action",
            "description": "'delete': the proposal deletes the DAG.",
            "default": "deploy"
          },
          "approvals": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Approvals"
          }
        },
        "type": "object",
        "required": [
          "dag_id",
          "etag",
          "author",
          "timestamp"
        ],
        "title": "ProposalRow"
      },
      "ProposalSummary": {
        "properties": {
          "dag_id": {
            "type": "string",
            "title": "Dag Id"
          },
          "etag": {
            "type": "string",
            "title": "Etag"
          },
          "author": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Author"
          },
          "timestamp": {
            "type": "string",
            "title": "Timestamp"
          },
          "expires_at": {
            "type": "string",
            "title": "Expires At"
          },
          "message": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Message"
          },
          "environment": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Environment"
          },
          "base_etag": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Base Etag"
          },
          "direct_push": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Direct Push"
          },
          "action": {
            "type": "string",
            "enum": [
              "deploy",
              "delete"
            ],
            "title": "Action",
            "description": "'deploy' deploys the proposed spec; 'delete' deletes the DAG (POST .../proposals/{etag}/delete).",
            "default": "deploy"
          },
          "approved_by": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Approved By",
            "description": "Other users whose latest verdict is 'approve'."
          },
          "changes_requested_by": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Changes Requested By"
          },
          "approved": {
            "type": "boolean",
            "title": "Approved",
            "description": "Deployable: approved by someone else than the author."
          }
        },
        "type": "object",
        "required": [
          "dag_id",
          "etag",
          "timestamp",
          "expires_at",
          "approved"
        ],
        "title": "ProposalSummary"
      },
      "ProposalsOverview": {
        "properties": {
          "require_approval": {
            "type": "boolean",
            "title": "Require Approval"
          },
          "proposals": {
            "items": {
              "$ref": "#/components/schemas/ProposalRow"
            },
            "type": "array",
            "title": "Proposals"
          },
          "reviews": {
            "items": {
              "$ref": "#/components/schemas/ReviewRow"
            },
            "type": "array",
            "title": "Reviews"
          }
        },
        "type": "object",
        "required": [
          "require_approval",
          "proposals",
          "reviews"
        ],
        "title": "ProposalsOverview"
      },
      "PythonContext": {
        "properties": {
          "code": {
            "type": "string",
            "maxLength": 10000000,
            "title": "Code"
          },
          "line": {
            "type": "integer",
            "minimum": 1.0,
            "title": "Line",
            "description": "1-based line inside the task body"
          },
          "column": {
            "type": "integer",
            "minimum": 0.0,
            "title": "Column",
            "description": "0-based column inside the line"
          },
          "arguments": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Arguments"
          },
          "uses_loop_context": {
            "type": "boolean",
            "title": "Uses Loop Context",
            "default": false
          },
          "function_name": {
            "type": "string",
            "title": "Function Name",
            "default": "task_fn"
          },
          "mode": {
            "type": "string",
            "enum": [
              "task_body",
              "module"
            ],
            "title": "Mode",
            "description": "task_body: code is the body of a @task function (wrapped for analysis); module: code is a whole module (inline functions, .py script files).",
            "default": "task_body"
          }
        },
        "type": "object",
        "required": [
          "code",
          "line",
          "column"
        ],
        "title": "PythonContext"
      },
      "PythonImportResult": {
        "properties": {
          "dags": {
            "items": {
              "$ref": "#/components/schemas/ImportedDag"
            },
            "type": "array",
            "title": "Dags"
          },
          "import_errors": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Import Errors"
          },
          "source": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Source",
            "description": "The imported file's code (imports from Airflow), e.g. to open a DAG that cannot be converted in the code editor."
          }
        },
        "type": "object",
        "required": [
          "dags",
          "import_errors"
        ],
        "title": "PythonImportResult"
      },
      "PythonTaskNode": {
        "properties": {
          "id": {
            "type": "string",
            "maxLength": 100,
            "minLength": 1,
            "pattern": "^[A-Za-z0-9_-]+$",
            "title": "Id"
          },
          "label": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 200
              },
              {
                "type": "null"
              }
            ],
            "title": "Label",
            "description": "Canvas label only."
          },
          "icon": {
            "anyOf": [
              {
                "type": "string",
                "pattern": "^(builtin|custom|package):[a-z0-9][a-z0-9-]{0,80}$"
              },
              {
                "type": "null"
              }
            ],
            "title": "Icon",
            "description": "Canvas icon only (builtin:<logo> or custom:<name>); overrides the default."
          },
          "parent_group": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 100,
                "minLength": 1,
                "pattern": "^[A-Za-z0-9_-]+$"
              },
              {
                "type": "null"
              }
            ],
            "title": "Parent Group",
            "description": "Id of a task_group node."
          },
          "position": {
            "$ref": "#/components/schemas/Position"
          },
          "task_id": {
            "type": "string",
            "maxLength": 250,
            "minLength": 1,
            "pattern": "^[A-Za-z0-9_.-]+$",
            "title": "Task Id"
          },
          "trigger_rule": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "all_success",
                  "all_failed",
                  "all_done",
                  "all_done_min_one_success",
                  "all_skipped",
                  "one_success",
                  "one_done",
                  "one_failed",
                  "none_failed",
                  "none_failed_min_one_success",
                  "none_skipped",
                  "always",
                  "all_done_setup_success"
                ]
              },
              {
                "type": "null"
              }
            ],
            "title": "Trigger Rule"
          },
          "retries": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Retries"
          },
          "retry_delay_seconds": {
            "anyOf": [
              {
                "type": "number",
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Retry Delay Seconds"
          },
          "execution_timeout_seconds": {
            "anyOf": [
              {
                "type": "number",
                "exclusiveMinimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Execution Timeout Seconds"
          },
          "pool": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Pool"
          },
          "pool_slots": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 1.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Pool Slots"
          },
          "queue": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Queue"
          },
          "owner": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Owner"
          },
          "doc_md": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Doc Md"
          },
          "outlets": {
            "items": {
              "$ref": "#/components/schemas/AssetRef"
            },
            "type": "array",
            "title": "Outlets"
          },
          "inlets": {
            "items": {
              "$ref": "#/components/schemas/AssetRef"
            },
            "type": "array",
            "title": "Inlets"
          },
          "mapping": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/MappingSpec"
              },
              {
                "type": "null"
              }
            ]
          },
          "is_setup": {
            "type": "boolean",
            "title": "Is Setup",
            "default": false
          },
          "is_teardown": {
            "type": "boolean",
            "title": "Is Teardown",
            "default": false
          },
          "callbacks": {
            "$ref": "#/components/schemas/Callbacks"
          },
          "retry_policy": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/RetryPolicySpec"
              },
              {
                "type": "null"
              }
            ]
          },
          "retry_exponential_backoff": {
            "anyOf": [
              {
                "type": "number",
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Retry Exponential Backoff"
          },
          "priority_weight": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Priority Weight"
          },
          "weight_rule": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "downstream",
                  "upstream",
                  "absolute"
                ]
              },
              {
                "type": "null"
              }
            ],
            "title": "Weight Rule"
          },
          "task_display_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Task Display Name"
          },
          "executor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Executor"
          },
          "executor_config": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Executor Config"
          },
          "max_active_tis_per_dagrun": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 1.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Max Active Tis Per Dagrun"
          },
          "depends_on_past": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Depends On Past"
          },
          "disabled": {
            "type": "boolean",
            "title": "Disabled",
            "description": "Excluded from the generated DAG (kept on the canvas).",
            "default": false
          },
          "lineage": {
            "type": "string",
            "enum": [
              "inherit",
              "enabled",
              "disabled"
            ],
            "title": "Lineage",
            "description": "OpenLineage selective enable/disable for this task.",
            "default": "inherit"
          },
          "template_ref": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/TemplateRef"
              },
              {
                "type": "null"
              }
            ],
            "description": "Operator template (blueprint) this task was created from; validation enforces the template's locked fields. Not part of the generated DAG."
          },
          "kind": {
            "type": "string",
            "const": "python_task",
            "title": "Kind"
          },
          "decorator": {
            "type": "string",
            "enum": [
              "task",
              "branch",
              "short_circuit",
              "virtualenv",
              "external_python",
              "branch_virtualenv",
              "branch_external_python",
              "sensor",
              "bash",
              "docker",
              "kubernetes",
              "stub",
              "llm",
              "agent",
              "llm_branch",
              "llm_sql"
            ],
            "title": "Decorator",
            "default": "task"
          },
          "decorator_kwargs": {
            "patternProperties": {
              "^[A-Za-z_][A-Za-z0-9_]*$": {}
            },
            "propertyNames": {
              "maxLength": 100
            },
            "type": "object",
            "title": "Decorator Kwargs"
          },
          "function_name": {
            "type": "string",
            "maxLength": 100,
            "pattern": "^[A-Za-z_][A-Za-z0-9_]*$",
            "title": "Function Name"
          },
          "arguments": {
            "patternProperties": {
              "^[A-Za-z_][A-Za-z0-9_]*$": {}
            },
            "propertyNames": {
              "maxLength": 100
            },
            "type": "object",
            "title": "Arguments",
            "description": "Keyword arguments; values may be XCom references."
          },
          "extra_parameters": {
            "items": {
              "type": "string",
              "maxLength": 100,
              "pattern": "^[A-Za-z_][A-Za-z0-9_]*$"
            },
            "type": "array",
            "title": "Extra Parameters",
            "description": "Additional function parameters without a bound value (e.g. keys provided by expand_kwargs)."
          },
          "code": {
            "type": "string",
            "title": "Code",
            "description": "Function body (statements). Use `return` to push XCom."
          },
          "multiple_outputs": {
            "type": "boolean",
            "title": "Multiple Outputs",
            "default": false
          },
          "is_result": {
            "type": "boolean",
            "title": "Is Result",
            "description": "Airflow >= 3.3: mark as the DAG result (`@result`), returned by the dagRuns/{id}/wait API.",
            "default": false
          },
          "uses_loop_context": {
            "type": "boolean",
            "title": "Uses Loop Context",
            "description": "Inside a loop group: receive the `loop` context (index, previous, result, max_iterations) as a keyword-only parameter.",
            "default": false
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "id",
          "task_id",
          "kind",
          "function_name",
          "code"
        ],
        "title": "PythonTaskNode",
        "description": "A TaskFlow task whose body is user-supplied Python (privileged).\n\n``decorator`` selects ``@task``, ``@task.branch`` (return the downstream task id(s)\nto follow), ``@task.short_circuit`` (return falsy to skip downstream),\n``@task.virtualenv``, ``@task.sensor`` (return bool / PokeReturnValue),\n``@task.bash`` (return a command) and friends; ``decorator_kwargs`` are passed to it."
      },
      "QueueScheme": {
        "properties": {
          "scheme": {
            "type": "string",
            "title": "Scheme"
          },
          "provider": {
            "type": "string",
            "title": "Provider",
            "description": "Provider package implementing the scheme."
          },
          "available": {
            "type": "boolean",
            "title": "Available"
          },
          "provider_class": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Provider Class"
          },
          "trigger_class": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Trigger Class"
          },
          "kwargs_schema": {
            "additionalProperties": true,
            "type": "object",
            "title": "Kwargs Schema",
            "description": "JSON Schema of extra MessageQueueTrigger kwargs."
          }
        },
        "type": "object",
        "required": [
          "scheme",
          "provider",
          "available"
        ],
        "title": "QueueScheme"
      },
      "Readiness": {
        "properties": {
          "ready": {
            "type": "boolean",
            "title": "Ready"
          },
          "checks": {
            "additionalProperties": {
              "type": "string"
            },
            "type": "object",
            "title": "Checks"
          }
        },
        "type": "object",
        "required": [
          "ready",
          "checks"
        ],
        "title": "Readiness"
      },
      "RefreshRequest": {
        "properties": {
          "mode": {
            "type": "string",
            "enum": [
              "refresh",
              "rebuild"
            ],
            "title": "Mode",
            "description": "refresh: incremental (unchanged pages are skipped); rebuild: drop and re-index the selected sources.",
            "default": "refresh"
          },
          "sources": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array",
                "maxItems": 50
              },
              {
                "type": "null"
              }
            ],
            "title": "Sources",
            "description": "Source ids (default: every enabled source)."
          }
        },
        "type": "object",
        "title": "RefreshRequest"
      },
      "RemediationStep": {
        "properties": {
          "title": {
            "type": "string",
            "title": "Title"
          },
          "detail": {
            "type": "string",
            "title": "Detail",
            "default": ""
          },
          "kind": {
            "type": "string",
            "enum": [
              "spec",
              "code",
              "config",
              "airflow",
              "infrastructure",
              "other"
            ],
            "title": "Kind",
            "default": "other"
          }
        },
        "type": "object",
        "required": [
          "title"
        ],
        "title": "RemediationStep"
      },
      "ReplicaInfo": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "hostname": {
            "type": "string",
            "title": "Hostname"
          },
          "pid": {
            "type": "integer",
            "title": "Pid"
          },
          "version": {
            "type": "string",
            "title": "Version"
          },
          "mode": {
            "type": "string",
            "title": "Mode"
          },
          "started_at": {
            "type": "string",
            "title": "Started At"
          },
          "last_seen": {
            "type": "number",
            "title": "Last Seen"
          },
          "alive": {
            "type": "boolean",
            "title": "Alive"
          },
          "current": {
            "type": "boolean",
            "title": "Current",
            "default": false
          }
        },
        "type": "object",
        "required": [
          "id",
          "hostname",
          "pid",
          "version",
          "mode",
          "started_at",
          "last_seen",
          "alive"
        ],
        "title": "ReplicaInfo"
      },
      "RequestTokenHint": {
        "properties": {
          "provider": {
            "type": "string",
            "title": "Provider"
          },
          "token_type": {
            "type": "string",
            "title": "Token Type",
            "description": "Token kind to create on the host."
          },
          "scopes": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Scopes",
            "description": "Scopes/permissions needed."
          },
          "docs_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Docs Url"
          }
        },
        "type": "object",
        "required": [
          "provider",
          "token_type"
        ],
        "title": "RequestTokenHint",
        "description": "What kind of token the user should create on the git host."
      },
      "RequestTokenInfo": {
        "properties": {
          "mode": {
            "type": "string",
            "enum": [
              "off",
              "optional",
              "required"
            ],
            "title": "Mode",
            "description": "off: not accepted; optional: replaces the configured credentials when given; required: every git write needs one."
          },
          "header": {
            "type": "string",
            "title": "Header",
            "default": "X-AutoAir-Git-Token"
          },
          "reason": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Reason",
            "description": "Why tokens are off (global switch, forced connection)."
          },
          "hint": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/RequestTokenHint"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "type": "object",
        "required": [
          "mode"
        ],
        "title": "RequestTokenInfo",
        "description": "Whether (and how) deploys of a git target take a token typed by the user."
      },
      "RetryPolicySpec": {
        "properties": {
          "rules": {
            "items": {
              "$ref": "#/components/schemas/RetryRuleSpec"
            },
            "type": "array",
            "minItems": 1,
            "title": "Rules"
          },
          "default": {
            "type": "string",
            "enum": [
              "retry",
              "fail",
              "default"
            ],
            "title": "Default",
            "default": "default"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "rules"
        ],
        "title": "RetryPolicySpec",
        "description": "Airflow >= 3.3 ``ExceptionRetryPolicy``."
      },
      "RetryRuleSpec": {
        "properties": {
          "exception": {
            "type": "string",
            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(\\.[A-Za-z_][A-Za-z0-9_]*)+$",
            "title": "Exception",
            "description": "Dotted exception class path, e.g. builtins.ValueError or requests.exceptions.HTTPError"
          },
          "action": {
            "type": "string",
            "enum": [
              "retry",
              "fail",
              "default"
            ],
            "title": "Action",
            "default": "retry"
          },
          "retry_delay_seconds": {
            "anyOf": [
              {
                "type": "number",
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Retry Delay Seconds"
          },
          "reason": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Reason"
          },
          "match_subclasses": {
            "type": "boolean",
            "title": "Match Subclasses",
            "default": true
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "exception"
        ],
        "title": "RetryRuleSpec"
      },
      "Review": {
        "properties": {
          "timestamp": {
            "type": "string",
            "title": "Timestamp"
          },
          "user": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "User"
          },
          "etag": {
            "type": "string",
            "title": "Etag"
          },
          "verdict": {
            "type": "string",
            "title": "Verdict"
          },
          "comment": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Comment"
          }
        },
        "type": "object",
        "required": [
          "timestamp",
          "user",
          "etag",
          "verdict"
        ],
        "title": "Review"
      },
      "ReviewRequest": {
        "properties": {
          "etag": {
            "type": "string",
            "maxLength": 128,
            "minLength": 1,
            "title": "Etag",
            "description": "Reviewed spec version (etag): a stored version or a deploy proposal."
          },
          "verdict": {
            "type": "string",
            "enum": [
              "approve",
              "request_changes",
              "comment"
            ],
            "title": "Verdict",
            "default": "approve"
          },
          "comment": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 4000
              },
              {
                "type": "null"
              }
            ],
            "title": "Comment"
          }
        },
        "type": "object",
        "required": [
          "etag"
        ],
        "title": "ReviewRequest"
      },
      "ReviewRow": {
        "properties": {
          "dag_id": {
            "type": "string",
            "title": "Dag Id"
          },
          "etag": {
            "type": "string",
            "title": "Etag"
          },
          "user": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "User"
          },
          "verdict": {
            "type": "string",
            "title": "Verdict"
          },
          "comment": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Comment"
          },
          "timestamp": {
            "type": "string",
            "title": "Timestamp"
          }
        },
        "type": "object",
        "required": [
          "dag_id",
          "etag",
          "user",
          "verdict",
          "timestamp"
        ],
        "title": "ReviewRow"
      },
      "RuffDiagnostic": {
        "properties": {
          "code": {
            "type": "string",
            "title": "Code"
          },
          "message": {
            "type": "string",
            "title": "Message"
          },
          "line": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Line"
          },
          "fix": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Fix",
            "description": "ruff's suggested fix, when it has one."
          }
        },
        "type": "object",
        "required": [
          "code",
          "message"
        ],
        "title": "RuffDiagnostic"
      },
      "RulesRequest": {
        "properties": {
          "spec": {
            "$ref": "#/components/schemas/DagSpec",
            "description": "The DAG to check (as open in the editor)."
          }
        },
        "type": "object",
        "required": [
          "spec"
        ],
        "title": "RulesRequest"
      },
      "RulesUpdate": {
        "properties": {
          "content": {
            "type": "string",
            "maxLength": 50000,
            "title": "Content"
          },
          "enabled": {
            "type": "boolean",
            "title": "Enabled",
            "default": true
          }
        },
        "type": "object",
        "required": [
          "content"
        ],
        "title": "RulesUpdate"
      },
      "RunsOverlay": {
        "properties": {
          "run": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/DagRunInfo"
              },
              {
                "type": "null"
              }
            ]
          },
          "task_instances": {
            "items": {
              "$ref": "#/components/schemas/TaskInstanceInfo"
            },
            "type": "array",
            "title": "Task Instances"
          }
        },
        "type": "object",
        "required": [
          "run",
          "task_instances"
        ],
        "title": "RunsOverlay",
        "description": "Everything the canvas needs to paint a run: run + task instance states."
      },
      "SaveResult": {
        "properties": {
          "path": {
            "type": "string",
            "title": "Path",
            "description": "Path or URL of the main DAG file."
          },
          "etag": {
            "type": "string",
            "title": "Etag"
          },
          "version": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Version"
          },
          "pr_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Pr Url"
          },
          "branch": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Branch"
          },
          "message": {
            "type": "string",
            "title": "Message"
          }
        },
        "type": "object",
        "required": [
          "path",
          "etag",
          "message"
        ],
        "title": "SaveResult"
      },
      "SchedulingStateRequest": {
        "properties": {
          "state": {
            "type": "string",
            "enum": [
              "active",
              "draining",
              "paused"
            ],
            "title": "State"
          }
        },
        "type": "object",
        "required": [
          "state"
        ],
        "title": "SchedulingStateRequest"
      },
      "SeenUser": {
        "properties": {
          "user": {
            "type": "string",
            "title": "User"
          },
          "roles": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Roles",
            "description": "AutoAir roles when last seen."
          },
          "permissions": {
            "type": "integer",
            "title": "Permissions",
            "description": "Number of AutoAir permissions held.",
            "default": 0
          },
          "auth": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Auth"
          },
          "last_seen": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Last Seen"
          },
          "actions": {
            "type": "integer",
            "title": "Actions",
            "description": "Audit records (recent window).",
            "default": 0
          },
          "last_action": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Last Action"
          },
          "last_action_at": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Last Action At"
          }
        },
        "type": "object",
        "required": [
          "user"
        ],
        "title": "SeenUser"
      },
      "SessionInfo": {
        "properties": {
          "authenticated": {
            "type": "boolean",
            "title": "Authenticated"
          },
          "source": {
            "type": "string",
            "enum": [
              "cookie",
              "bearer",
              "none"
            ],
            "title": "Source",
            "default": "none"
          },
          "user": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "User"
          },
          "display_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Display Name"
          },
          "expires_at": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Expires At"
          },
          "expires_in": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Expires In",
            "description": "Seconds until expiry."
          },
          "verified": {
            "type": "boolean",
            "title": "Verified",
            "description": "Airflow confirmed the token (standalone verifier).",
            "default": false
          },
          "refreshable": {
            "type": "boolean",
            "title": "Refreshable",
            "description": "POST /auth/refresh can renew it (cookie sessions; bearer tokens from the password sign-in cannot be renewed without signing in again).",
            "default": false
          }
        },
        "type": "object",
        "required": [
          "authenticated"
        ],
        "title": "SessionInfo"
      },
      "ShellDiagnostic": {
        "properties": {
          "line": {
            "type": "integer",
            "title": "Line"
          },
          "column": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Column"
          },
          "end_line": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "End Line"
          },
          "end_column": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "End Column"
          },
          "severity": {
            "type": "string",
            "enum": [
              "error",
              "warning",
              "info"
            ],
            "title": "Severity"
          },
          "code": {
            "type": "string",
            "title": "Code"
          },
          "message": {
            "type": "string",
            "title": "Message"
          }
        },
        "type": "object",
        "required": [
          "line",
          "severity",
          "code",
          "message"
        ],
        "title": "ShellDiagnostic"
      },
      "ShellLintRequest": {
        "properties": {
          "code": {
            "type": "string",
            "maxLength": 10000000,
            "title": "Code"
          },
          "shell": {
            "type": "string",
            "enum": [
              "bash",
              "sh",
              "dash",
              "ksh"
            ],
            "title": "Shell",
            "default": "bash"
          }
        },
        "type": "object",
        "required": [
          "code"
        ],
        "title": "ShellLintRequest"
      },
      "ShellLintResult": {
        "properties": {
          "available": {
            "type": "boolean",
            "title": "Available",
            "description": "False when ShellCheck is not installed."
          },
          "diagnostics": {
            "items": {
              "$ref": "#/components/schemas/ShellDiagnostic"
            },
            "type": "array",
            "title": "Diagnostics"
          }
        },
        "type": "object",
        "required": [
          "available"
        ],
        "title": "ShellLintResult"
      },
      "SignatureInfo": {
        "properties": {
          "label": {
            "type": "string",
            "title": "Label"
          },
          "active_parameter": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Active Parameter"
          },
          "doc": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Doc"
          }
        },
        "type": "object",
        "required": [
          "label"
        ],
        "title": "SignatureInfo"
      },
      "SignatureList": {
        "properties": {
          "signatures": {
            "items": {
              "$ref": "#/components/schemas/SignatureInfo"
            },
            "type": "array",
            "title": "Signatures"
          }
        },
        "type": "object",
        "required": [
          "signatures"
        ],
        "title": "SignatureList"
      },
      "SourceBody": {
        "properties": {
          "source": {
            "type": "string",
            "maxLength": 100000000,
            "title": "Source"
          },
          "filename": {
            "type": "string",
            "pattern": "^[\\w.-]+\\.py$",
            "title": "Filename",
            "default": "dag.py"
          }
        },
        "type": "object",
        "required": [
          "source"
        ],
        "title": "SourceBody"
      },
      "SourceInfo": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "kind": {
            "type": "string",
            "title": "Kind"
          },
          "title": {
            "type": "string",
            "title": "Title"
          },
          "enabled": {
            "type": "boolean",
            "title": "Enabled"
          },
          "usable": {
            "type": "boolean",
            "title": "Usable",
            "description": "Can be read now (e.g. official needs kb.online)."
          },
          "reason": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Reason",
            "description": "Why it is not usable."
          },
          "reason_code": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Reason Code",
            "description": "Stable code of reason (disabled, air_gapped) for the UI's translation."
          },
          "url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Url"
          },
          "conn_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Conn Id"
          },
          "ref": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Ref"
          },
          "layout": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Layout"
          },
          "components": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Components"
          },
          "versions": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Versions"
          },
          "overridden": {
            "type": "boolean",
            "title": "Overridden",
            "description": "Changed in the admin panel.",
            "default": false
          },
          "pages": {
            "type": "integer",
            "title": "Pages",
            "default": 0
          }
        },
        "type": "object",
        "required": [
          "id",
          "kind",
          "title",
          "enabled",
          "usable"
        ],
        "title": "SourceInfo",
        "description": "A configured source with the admin overrides applied."
      },
      "SourceIssue": {
        "properties": {
          "code": {
            "type": "string",
            "title": "Code",
            "description": "unmappable, unsupported, risky, conflict, roundtrip, ..."
          },
          "message": {
            "type": "string",
            "title": "Message"
          },
          "task_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Task Id"
          }
        },
        "type": "object",
        "required": [
          "code",
          "message"
        ],
        "title": "SourceIssue"
      },
      "SourceOverride": {
        "properties": {
          "enabled": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Enabled"
          },
          "components": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array",
                "maxItems": 20
              },
              {
                "type": "null"
              }
            ],
            "title": "Components"
          },
          "versions": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array",
                "maxItems": 20
              },
              {
                "type": "null"
              }
            ],
            "title": "Versions"
          }
        },
        "type": "object",
        "title": "SourceOverride",
        "description": "Admin-panel changes of one source (``None`` keeps the configured value)."
      },
      "SourcePlan": {
        "properties": {
          "applicable": {
            "type": "boolean",
            "title": "Applicable",
            "description": "False for output modes other than python and for raw code DAGs (the source policy does not apply to them).",
            "default": true
          },
          "requested": {
            "type": "string",
            "title": "Requested",
            "description": "The spec's source.policy.",
            "default": "auto"
          },
          "policy": {
            "type": "string",
            "enum": [
              "generate",
              "preserve",
              "strict-preserve"
            ],
            "title": "Policy",
            "default": "generate"
          },
          "action": {
            "type": "string",
            "enum": [
              "generate",
              "preserve",
              "unchanged",
              "blocked",
              "refused",
              "not_applicable"
            ],
            "title": "Action",
            "default": "generate"
          },
          "target_state": {
            "type": "string",
            "enum": [
              "absent",
              "clean",
              "hand_written",
              "ejected",
              "foreign"
            ],
            "title": "Target State",
            "default": "absent"
          },
          "target_file": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Target File"
          },
          "base": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "target",
                  "source"
                ]
              },
              {
                "type": "null"
              }
            ],
            "title": "Base",
            "description": "The file a preserve deploy patched: the target's file or the hand-written source.code of the spec."
          },
          "diff": {
            "type": "string",
            "title": "Diff",
            "description": "Unified diff of the file in the target -> new.",
            "default": ""
          },
          "diff_truncated": {
            "type": "boolean",
            "title": "Diff Truncated",
            "default": false
          },
          "operations": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Operations"
          },
          "warnings": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Warnings"
          },
          "refusals": {
            "items": {
              "$ref": "#/components/schemas/SourceIssue"
            },
            "type": "array",
            "title": "Refusals"
          },
          "options": {
            "items": {
              "type": "string",
              "enum": [
                "preserve",
                "overwrite",
                "generate",
                "raw"
              ]
            },
            "type": "array",
            "title": "Options",
            "description": "What the user can do next: preserve (apply the change to the file in the target), overwrite (needs confirmation, 'deploy:overwrite_ejected' and preserve.allow_force_overwrite), generate (switch the DAG's source policy), raw (keep the file as a raw code DAG)."
          },
          "message": {
            "type": "string",
            "title": "Message",
            "default": ""
          },
          "target_sha": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Target Sha",
            "description": "sha256 of the DAG file in the target the plan was made from (empty: no file). Send it back as source_target_sha to deploy exactly what was previewed."
          },
          "content_hidden": {
            "type": "boolean",
            "title": "Content Hidden",
            "description": "The file in the target is a hand-written file AutoAir never wrote: its content (diff, file, current code) is not shown.",
            "default": false
          },
          "content": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Content",
            "description": "Source preview only: the complete DAG file the deploy would write (the code mode shows it for DAGs that keep their hand-written file)."
          },
          "current_code": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Current Code",
            "description": "The DAG file the change could not be applied to (the target's file or the spec's hand-written code), when the plan offers to keep it as a raw code DAG."
          }
        },
        "type": "object",
        "title": "SourcePlan",
        "description": "What a deploy writes as the DAG file and why (deploy result, source preview)."
      },
      "SourcePreviewRequest": {
        "properties": {
          "spec": {
            "$ref": "#/components/schemas/DagSpec"
          },
          "environment": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Environment"
          },
          "direct_push": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Direct Push",
            "description": "As in the deploy request (decides the git branch read)."
          },
          "source_resolution": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "preserve",
                  "overwrite"
                ]
              },
              {
                "type": "null"
              }
            ],
            "title": "Source Resolution",
            "description": "Preview the answer to an ejected file: preserve (patch it) or overwrite."
          }
        },
        "type": "object",
        "required": [
          "spec"
        ],
        "title": "SourcePreviewRequest"
      },
      "SourceRun": {
        "properties": {
          "source": {
            "type": "string",
            "title": "Source"
          },
          "state": {
            "type": "string",
            "enum": [
              "ok",
              "partial",
              "failed",
              "skipped"
            ],
            "title": "State",
            "default": "ok"
          },
          "detail": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Detail"
          },
          "units": {
            "type": "integer",
            "title": "Units",
            "default": 0
          },
          "pages_seen": {
            "type": "integer",
            "title": "Pages Seen",
            "default": 0
          },
          "pages_changed": {
            "type": "integer",
            "title": "Pages Changed",
            "default": 0
          },
          "pages_unchanged": {
            "type": "integer",
            "title": "Pages Unchanged",
            "default": 0
          },
          "pages_removed": {
            "type": "integer",
            "title": "Pages Removed",
            "default": 0
          },
          "pages_failed": {
            "type": "integer",
            "title": "Pages Failed",
            "default": 0
          },
          "chunks_written": {
            "type": "integer",
            "title": "Chunks Written",
            "default": 0
          }
        },
        "type": "object",
        "required": [
          "source"
        ],
        "title": "SourceRun",
        "description": "What the last refresh did with one source."
      },
      "SourceStatus": {
        "properties": {
          "name": {
            "type": "string",
            "title": "Name"
          },
          "url": {
            "type": "string",
            "title": "Url"
          },
          "ok": {
            "type": "boolean",
            "title": "Ok"
          },
          "verified": {
            "type": "boolean",
            "title": "Verified"
          },
          "error": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Error"
          },
          "entries": {
            "type": "integer",
            "title": "Entries",
            "default": 0
          }
        },
        "type": "object",
        "required": [
          "name",
          "url",
          "ok",
          "verified"
        ],
        "title": "SourceStatus"
      },
      "SpecDiff": {
        "properties": {
          "added_nodes": {
            "items": {
              "additionalProperties": true,
              "type": "object"
            },
            "type": "array",
            "title": "Added Nodes"
          },
          "removed_nodes": {
            "items": {
              "additionalProperties": true,
              "type": "object"
            },
            "type": "array",
            "title": "Removed Nodes"
          },
          "changed_nodes": {
            "items": {
              "$ref": "#/components/schemas/NodeChange"
            },
            "type": "array",
            "title": "Changed Nodes"
          },
          "added_edges": {
            "items": {
              "$ref": "#/components/schemas/EdgeRef"
            },
            "type": "array",
            "title": "Added Edges"
          },
          "removed_edges": {
            "items": {
              "$ref": "#/components/schemas/EdgeRef"
            },
            "type": "array",
            "title": "Removed Edges"
          },
          "changed_edges": {
            "items": {
              "$ref": "#/components/schemas/EdgeChange"
            },
            "type": "array",
            "title": "Changed Edges"
          },
          "changed_fields": {
            "items": {
              "$ref": "#/components/schemas/FieldChange"
            },
            "type": "array",
            "title": "Changed Fields",
            "description": "DAG-level fields (schedule, params, ...)."
          },
          "identical": {
            "type": "boolean",
            "title": "Identical",
            "default": true
          }
        },
        "type": "object",
        "title": "SpecDiff"
      },
      "SpecJsonBody": {
        "properties": {
          "source": {
            "type": "string",
            "maxLength": 100000000,
            "title": "Source",
            "description": "An exported .autoair.json document."
          }
        },
        "type": "object",
        "required": [
          "source"
        ],
        "title": "SpecJsonBody"
      },
      "SpecProblem": {
        "properties": {
          "severity": {
            "type": "string",
            "enum": [
              "error",
              "warning",
              "info"
            ],
            "title": "Severity"
          },
          "code": {
            "type": "string",
            "title": "Code"
          },
          "message": {
            "type": "string",
            "title": "Message"
          },
          "node_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Node Id"
          },
          "field": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Field"
          },
          "line": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Line"
          },
          "column": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Column"
          },
          "doc_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Doc Url",
            "description": "Documentation of the rule (e.g. ruff/ShellCheck rule page)."
          },
          "path": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Path"
          }
        },
        "type": "object",
        "required": [
          "severity",
          "code",
          "message"
        ],
        "title": "SpecProblem",
        "description": "A validation problem plus a JSON pointer into the submitted spec document."
      },
      "SpecSummary": {
        "properties": {
          "dag_id": {
            "type": "string",
            "title": "Dag Id"
          },
          "output_mode": {
            "type": "string",
            "title": "Output Mode"
          },
          "display_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Display Name"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "tags": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Tags",
            "default": []
          },
          "task_count": {
            "type": "integer",
            "title": "Task Count"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time",
            "title": "Updated At"
          },
          "dag_file": {
            "type": "string",
            "title": "Dag File"
          },
          "etag": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Etag"
          },
          "document_type": {
            "type": "string",
            "enum": [
              "spec",
              "raw"
            ],
            "title": "Document Type",
            "description": "spec: built in the visual editor (generated code); raw: a raw code DAG (hand-written file, DagSpec.raw_code).",
            "default": "spec"
          }
        },
        "type": "object",
        "required": [
          "dag_id",
          "output_mode",
          "task_count",
          "updated_at",
          "dag_file"
        ],
        "title": "SpecSummary"
      },
      "SsoInfo": {
        "properties": {
          "enabled": {
            "type": "boolean",
            "title": "Enabled",
            "description": "The Airflow UI session cookie is accepted."
          },
          "cookie_name": {
            "type": "string",
            "title": "Cookie Name"
          },
          "airflow_login_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Airflow Login Url",
            "description": "'Sign in with Airflow' (AutoAir route redirecting there)."
          },
          "refresh_margin_seconds": {
            "type": "integer",
            "title": "Refresh Margin Seconds"
          },
          "session_check_seconds": {
            "type": "integer",
            "title": "Session Check Seconds"
          },
          "propagate_logout": {
            "type": "boolean",
            "title": "Propagate Logout"
          }
        },
        "type": "object",
        "required": [
          "enabled",
          "cookie_name",
          "refresh_margin_seconds",
          "session_check_seconds",
          "propagate_logout"
        ],
        "title": "SsoInfo"
      },
      "StorageSettings": {
        "properties": {
          "mode": {
            "type": "string",
            "enum": [
              "local",
              "object",
              "git"
            ],
            "title": "Mode",
            "description": "Deploy target: a local folder, object storage (fsspec) or a git repository.",
            "default": "local"
          },
          "allowed_targets": {
            "items": {
              "type": "string",
              "enum": [
                "local",
                "object",
                "git"
              ]
            },
            "type": "array",
            "minItems": 1,
            "title": "Allowed Targets",
            "description": "Target kinds the deploy-target dialog/API offers and accepts, e.g. ['git'] (only repositories) or ['local'] (only the DAG folder). Admin policy: the UI cannot change it."
          },
          "local_path": {
            "anyOf": [
              {
                "type": "string",
                "format": "path"
              },
              {
                "type": "null"
              }
            ],
            "title": "Local Path",
            "description": "mode=local: folder written to (default: dags_folder/subfolder)."
          },
          "object_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Object Url",
            "description": "mode=object: fsspec URL of the bundle prefix.",
            "examples": [
              "s3://bucket/dags/autoair"
            ]
          },
          "storage_options": {
            "additionalProperties": true,
            "type": "object",
            "title": "Storage Options",
            "description": "mode=object: fsspec storage options (credentials, endpoint\u2026).",
            "secret": true
          },
          "history_limit": {
            "type": "integer",
            "minimum": 1.0,
            "title": "History Limit",
            "description": "Saved versions kept per DAG.",
            "default": 100
          },
          "object_lock_seconds": {
            "type": "number",
            "exclusiveMinimum": 0.0,
            "title": "Object Lock Seconds",
            "description": "mode=object: seconds a write lease of a DAG lasts. Writers of one DAG hold it (a document in AutoAir's state backend, shared by every replica with database.backend sqlite/postgresql) while they check base_etag and write, so two replicas never both win; a replica that died holding it blocks that DAG's deploys at most this long. Must exceed the longest save.",
            "default": 300.0
          },
          "object_lock_wait_seconds": {
            "type": "number",
            "minimum": 0.0,
            "title": "Object Lock Wait Seconds",
            "description": "mode=object: seconds a save waits for another writer's lease on the same DAG before it fails with a conflict (409).",
            "default": 30.0
          },
          "require_base_etag": {
            "type": "boolean",
            "title": "Require Base Etag",
            "description": "Overwriting or deleting an existing DAG spec needs the etag it was loaded with (REST: base_etag or If-Match on PUT, If-Match on DELETE, else HTTP 428 Precondition Required with the current etag; MCP save_dag_spec and delete_dag_spec: base_etag, else the call is refused with current_etag). false lets legacy API clients overwrite or delete without one (last writer wins). Creating a new DAG never needs an etag.",
            "default": true
          },
          "file_mode": {
            "type": "string",
            "pattern": "^0?[0-7]{3,4}$",
            "title": "File Mode",
            "description": "mode=local: permissions (octal) of written files.",
            "default": "0644"
          },
          "dir_mode": {
            "anyOf": [
              {
                "type": "string",
                "pattern": "^0?[0-7]{3,4}$"
              },
              {
                "type": "null"
              }
            ],
            "title": "Dir Mode",
            "description": "mode=local: permissions (octal) of created folders (default: umask)."
          },
          "temp_dir": {
            "anyOf": [
              {
                "type": "string",
                "format": "path"
              },
              {
                "type": "null"
              }
            ],
            "title": "Temp Dir",
            "description": "mode=local: folder for the temporary file of atomic writes (default: the target folder). Must be on the same file system, or writes stop being atomic."
          },
          "git": {
            "$ref": "#/components/schemas/GitStorageSettings"
          }
        },
        "type": "object",
        "title": "StorageSettings"
      },
      "StoreStats": {
        "properties": {
          "kind": {
            "type": "string",
            "title": "Kind"
          },
          "location": {
            "type": "string",
            "title": "Location",
            "description": "Where the index lives (no credentials)."
          },
          "ok": {
            "type": "boolean",
            "title": "Ok",
            "default": true
          },
          "error": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Error"
          },
          "pages": {
            "type": "integer",
            "title": "Pages",
            "default": 0
          },
          "chunks": {
            "type": "integer",
            "title": "Chunks",
            "default": 0
          },
          "vectors": {
            "type": "integer",
            "title": "Vectors",
            "default": 0
          },
          "embedding_model": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Embedding Model"
          },
          "by_component": {
            "additionalProperties": {
              "type": "integer"
            },
            "type": "object",
            "title": "By Component",
            "description": "Pages per component."
          },
          "by_source": {
            "additionalProperties": {
              "type": "integer"
            },
            "type": "object",
            "title": "By Source",
            "description": "Pages per source."
          },
          "versions": {
            "additionalProperties": {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            "type": "object",
            "title": "Versions",
            "description": "Versions indexed per component."
          }
        },
        "type": "object",
        "required": [
          "kind",
          "location"
        ],
        "title": "StoreStats"
      },
      "StoredSpecResponse": {
        "properties": {
          "spec": {
            "$ref": "#/components/schemas/DagSpec"
          },
          "etag": {
            "type": "string",
            "title": "Etag"
          },
          "version": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Version"
          },
          "pending_branch": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Pending Branch"
          },
          "pending_pr_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Pending Pr Url"
          }
        },
        "type": "object",
        "required": [
          "spec",
          "etag"
        ],
        "title": "StoredSpecResponse"
      },
      "TargetStatus": {
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "local",
              "object",
              "git"
            ],
            "title": "Kind"
          },
          "location": {
            "type": "string",
            "title": "Location"
          },
          "writable": {
            "type": "boolean",
            "title": "Writable"
          },
          "details": {
            "additionalProperties": true,
            "type": "object",
            "title": "Details"
          }
        },
        "type": "object",
        "required": [
          "kind",
          "location",
          "writable"
        ],
        "title": "TargetStatus"
      },
      "TaskCodeRequest": {
        "properties": {
          "description": {
            "type": "string",
            "maxLength": 20000,
            "minLength": 1,
            "title": "Description"
          },
          "spec": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/DagSpec"
              },
              {
                "type": "null"
              }
            ]
          },
          "node_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Node Id",
            "description": "python_task node to write for."
          },
          "existing_code": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 200000
              },
              {
                "type": "null"
              }
            ],
            "title": "Existing Code"
          },
          "model": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 200
              },
              {
                "type": "null"
              }
            ],
            "title": "Model",
            "description": "Model for this request (one of /ai/status `models`; default: configured)."
          }
        },
        "type": "object",
        "required": [
          "description"
        ],
        "title": "TaskCodeRequest"
      },
      "TaskCodeResult": {
        "properties": {
          "code": {
            "type": "string",
            "title": "Code",
            "description": "Function body."
          },
          "explanation": {
            "type": "string",
            "title": "Explanation",
            "default": ""
          },
          "requirements": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Requirements",
            "description": "pip packages needed."
          },
          "connections": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Connections",
            "description": "Airflow connections used."
          },
          "syntax_ok": {
            "type": "boolean",
            "title": "Syntax Ok",
            "default": true
          },
          "findings": {
            "items": {
              "$ref": "#/components/schemas/Finding"
            },
            "type": "array",
            "title": "Findings"
          },
          "model": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Model"
          },
          "usage": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Usage"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "type": "object",
        "required": [
          "code"
        ],
        "title": "TaskCodeResult"
      },
      "TaskDecoratorInfo": {
        "properties": {
          "name": {
            "type": "string",
            "title": "Name",
            "description": "Used as ``@task.<name>``."
          },
          "class_name": {
            "type": "string",
            "title": "Class Name",
            "description": "Dotted path of the decorator callable."
          },
          "provider": {
            "type": "string",
            "title": "Provider"
          },
          "provider_version": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Provider Version"
          },
          "summary": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Summary",
            "description": "First sentence of the docs."
          },
          "docstring": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Docstring",
            "description": "Docstring of the decorator (or of its decorated operator)."
          }
        },
        "type": "object",
        "required": [
          "name",
          "class_name",
          "provider"
        ],
        "title": "TaskDecoratorInfo"
      },
      "TaskGroupNode": {
        "properties": {
          "id": {
            "type": "string",
            "maxLength": 100,
            "minLength": 1,
            "pattern": "^[A-Za-z0-9_-]+$",
            "title": "Id"
          },
          "label": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 200
              },
              {
                "type": "null"
              }
            ],
            "title": "Label",
            "description": "Canvas label only."
          },
          "icon": {
            "anyOf": [
              {
                "type": "string",
                "pattern": "^(builtin|custom|package):[a-z0-9][a-z0-9-]{0,80}$"
              },
              {
                "type": "null"
              }
            ],
            "title": "Icon",
            "description": "Canvas icon only (builtin:<logo> or custom:<name>); overrides the default."
          },
          "parent_group": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 100,
                "minLength": 1,
                "pattern": "^[A-Za-z0-9_-]+$"
              },
              {
                "type": "null"
              }
            ],
            "title": "Parent Group",
            "description": "Id of a task_group node."
          },
          "position": {
            "$ref": "#/components/schemas/Position"
          },
          "kind": {
            "type": "string",
            "const": "task_group",
            "title": "Kind"
          },
          "group_id": {
            "type": "string",
            "maxLength": 250,
            "minLength": 1,
            "pattern": "^[A-Za-z0-9_.-]+$",
            "title": "Group Id"
          },
          "tooltip": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Tooltip"
          },
          "prefix_group_id": {
            "type": "boolean",
            "title": "Prefix Group Id",
            "default": true
          },
          "loop": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/LoopSpec"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "id",
          "kind",
          "group_id"
        ],
        "title": "TaskGroupNode"
      },
      "TaskInstanceInfo": {
        "properties": {
          "task_id": {
            "type": "string",
            "title": "Task Id"
          },
          "map_index": {
            "type": "integer",
            "title": "Map Index",
            "default": -1
          },
          "state": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "State"
          },
          "try_number": {
            "type": "integer",
            "title": "Try Number",
            "default": 0
          },
          "start_date": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Start Date"
          },
          "end_date": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "End Date"
          },
          "duration": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Duration"
          },
          "operator": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Operator"
          },
          "rendered_map_index": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Rendered Map Index"
          }
        },
        "type": "object",
        "required": [
          "task_id"
        ],
        "title": "TaskInstanceInfo"
      },
      "TaskStats": {
        "properties": {
          "task_id": {
            "type": "string",
            "title": "Task Id"
          },
          "samples": {
            "type": "integer",
            "title": "Samples",
            "default": 0
          },
          "success": {
            "type": "integer",
            "title": "Success",
            "default": 0
          },
          "failed": {
            "type": "integer",
            "title": "Failed",
            "default": 0
          },
          "retried_then_succeeded": {
            "type": "integer",
            "title": "Retried Then Succeeded",
            "default": 0
          },
          "p50_seconds": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "P50 Seconds"
          },
          "p95_seconds": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "P95 Seconds"
          },
          "max_seconds": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Max Seconds"
          }
        },
        "type": "object",
        "required": [
          "task_id"
        ],
        "title": "TaskStats"
      },
      "TaskTestResult": {
        "properties": {
          "task_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Task Id"
          },
          "state": {
            "type": "string",
            "enum": [
              "success",
              "failed",
              "skipped",
              "upstream_failed",
              "deferred",
              "timeout",
              "import_error",
              "not_found",
              "error"
            ],
            "title": "State"
          },
          "duration": {
            "type": "number",
            "title": "Duration",
            "description": "Seconds spent executing the task.",
            "default": 0.0
          },
          "log": {
            "type": "string",
            "title": "Log",
            "description": "Captured stdout/stderr/logging (truncated).",
            "default": ""
          },
          "return_value_repr": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Return Value Repr"
          },
          "return_value": {
            "title": "Return Value",
            "description": "Return value when JSON-serialisable."
          },
          "error": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Error"
          },
          "mapped": {
            "type": "boolean",
            "title": "Mapped",
            "description": "Mapped task; ran map_index 0 only.",
            "default": false
          },
          "skipped_downstream": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Skipped Downstream",
            "default": []
          },
          "xcom_pushes": {
            "additionalProperties": {
              "type": "string"
            },
            "type": "object",
            "title": "Xcom Pushes"
          },
          "where": {
            "type": "string",
            "title": "Where",
            "description": "Where the code ran: local (this server), validator (the validator service) or none (it did not run).",
            "readOnly": true
          },
          "process_isolated": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Process Isolated",
            "description": "Whether the run had its own PID namespace (runner.process_isolation); false: it ran with the audit hook only and could see other processes (not fully isolated), null: not known.",
            "readOnly": true
          }
        },
        "type": "object",
        "required": [
          "state",
          "where",
          "process_isolated"
        ],
        "title": "TaskTestResult"
      },
      "Template": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "title": {
            "type": "string",
            "title": "Title"
          },
          "description": {
            "type": "string",
            "title": "Description",
            "default": ""
          },
          "category": {
            "type": "string",
            "title": "Category",
            "default": "general"
          },
          "tags": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Tags",
            "default": []
          },
          "kind": {
            "type": "string",
            "enum": [
              "dag",
              "fragment",
              "operator"
            ],
            "title": "Kind"
          },
          "builtin": {
            "type": "boolean",
            "title": "Builtin"
          },
          "requires": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Requires",
            "description": "Provider packages needed."
          },
          "min_airflow": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Min Airflow",
            "description": "Minimum Airflow version."
          },
          "available": {
            "type": "boolean",
            "title": "Available",
            "default": true
          },
          "owner_team": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Owner Team",
            "description": "Team maintaining the template."
          },
          "version": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Version",
            "description": "Template version (operator templates: bumped on each save)."
          },
          "icon": {
            "anyOf": [
              {
                "type": "string",
                "pattern": "^(builtin|custom|package):[a-z0-9][a-z0-9-]{0,80}$"
              },
              {
                "type": "null"
              }
            ],
            "title": "Icon",
            "description": "Palette/canvas icon."
          },
          "operator_class": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Operator Class",
            "description": "Operator templates: the task type (operator class path, @task.<decorator> or custom handler)."
          },
          "docs_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Docs Url",
            "description": "Operator templates: a documentation link (http or https)."
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At",
            "description": "When this version was saved (UTC)."
          },
          "updated_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated By",
            "description": "Who saved this version."
          },
          "spec": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/DagSpec"
              },
              {
                "type": "null"
              }
            ]
          },
          "fragment": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Fragment"
              },
              {
                "type": "null"
              }
            ]
          },
          "blueprint": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/OperatorBlueprint"
              },
              {
                "type": "null"
              }
            ]
          },
          "etag": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Etag",
            "description": "Opaque version of the stored document: send it as `If-Match` to update or delete only if nobody changed the template since (409 otherwise)."
          }
        },
        "type": "object",
        "required": [
          "id",
          "title",
          "kind",
          "builtin"
        ],
        "title": "Template"
      },
      "TemplateInput": {
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[a-z0-9][a-z0-9_-]{0,80}$",
            "title": "Id"
          },
          "title": {
            "type": "string",
            "maxLength": 120,
            "minLength": 1,
            "title": "Title"
          },
          "description": {
            "type": "string",
            "title": "Description",
            "default": ""
          },
          "category": {
            "type": "string",
            "title": "Category",
            "default": "custom"
          },
          "tags": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Tags",
            "default": []
          },
          "kind": {
            "type": "string",
            "enum": [
              "dag",
              "fragment",
              "operator"
            ],
            "title": "Kind"
          },
          "owner_team": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 120
              },
              {
                "type": "null"
              }
            ],
            "title": "Owner Team"
          },
          "version": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 40
              },
              {
                "type": "null"
              }
            ],
            "title": "Version",
            "description": "Explicit version; empty bumps the previous numeric version (1, 2, \u2026)."
          },
          "icon": {
            "anyOf": [
              {
                "type": "string",
                "pattern": "^(builtin|custom|package):[a-z0-9][a-z0-9-]{0,80}$"
              },
              {
                "type": "null"
              }
            ],
            "title": "Icon"
          },
          "docs_url": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 500,
                "pattern": "^https?://\\S+$"
              },
              {
                "type": "null"
              }
            ],
            "title": "Docs Url"
          },
          "spec": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/DagSpec"
              },
              {
                "type": "null"
              }
            ]
          },
          "fragment": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Fragment"
              },
              {
                "type": "null"
              }
            ]
          },
          "blueprint": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/OperatorBlueprint"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "type": "object",
        "required": [
          "id",
          "title",
          "kind"
        ],
        "title": "TemplateInput"
      },
      "TemplateRef": {
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[a-z0-9][a-z0-9_-]{0,80}$",
            "title": "Id"
          },
          "version": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 40
              },
              {
                "type": "null"
              }
            ],
            "title": "Version"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "id"
        ],
        "title": "TemplateRef",
        "description": "The operator template (blueprint) a task was inserted from."
      },
      "TemplateSummary": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "title": {
            "type": "string",
            "title": "Title"
          },
          "description": {
            "type": "string",
            "title": "Description",
            "default": ""
          },
          "category": {
            "type": "string",
            "title": "Category",
            "default": "general"
          },
          "tags": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Tags",
            "default": []
          },
          "kind": {
            "type": "string",
            "enum": [
              "dag",
              "fragment",
              "operator"
            ],
            "title": "Kind"
          },
          "builtin": {
            "type": "boolean",
            "title": "Builtin"
          },
          "requires": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Requires",
            "description": "Provider packages needed."
          },
          "min_airflow": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Min Airflow",
            "description": "Minimum Airflow version."
          },
          "available": {
            "type": "boolean",
            "title": "Available",
            "default": true
          },
          "owner_team": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Owner Team",
            "description": "Team maintaining the template."
          },
          "version": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Version",
            "description": "Template version (operator templates: bumped on each save)."
          },
          "icon": {
            "anyOf": [
              {
                "type": "string",
                "pattern": "^(builtin|custom|package):[a-z0-9][a-z0-9-]{0,80}$"
              },
              {
                "type": "null"
              }
            ],
            "title": "Icon",
            "description": "Palette/canvas icon."
          },
          "operator_class": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Operator Class",
            "description": "Operator templates: the task type (operator class path, @task.<decorator> or custom handler)."
          },
          "docs_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Docs Url",
            "description": "Operator templates: a documentation link (http or https)."
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At",
            "description": "When this version was saved (UTC)."
          },
          "updated_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated By",
            "description": "Who saved this version."
          }
        },
        "type": "object",
        "required": [
          "id",
          "title",
          "kind",
          "builtin"
        ],
        "title": "TemplateSummary"
      },
      "TemplateVersionInfo": {
        "properties": {
          "version": {
            "type": "string",
            "title": "Version"
          },
          "title": {
            "type": "string",
            "title": "Title"
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At"
          },
          "updated_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated By"
          },
          "operator_class": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Operator Class"
          },
          "current": {
            "type": "boolean",
            "title": "Current",
            "description": "This is the version tasks are validated against."
          }
        },
        "type": "object",
        "required": [
          "version",
          "title",
          "current"
        ],
        "title": "TemplateVersionInfo",
        "description": "One stored version of an operator template (newest first in listings)."
      },
      "TestDagRequest": {
        "properties": {
          "spec": {
            "$ref": "#/components/schemas/DagSpec"
          },
          "conf": {
            "additionalProperties": true,
            "type": "object",
            "title": "Conf"
          },
          "mode": {
            "type": "string",
            "enum": [
              "memory",
              "db",
              "auto"
            ],
            "title": "Mode",
            "description": "memory: no metadata DB; db: dag.test() (writes a run to the DB; needs runner.allow_db_mode and admin:config); auto: db with fallback to memory when db is allowed for the caller, else memory.",
            "default": "memory"
          },
          "timeout": {
            "anyOf": [
              {
                "type": "number",
                "maximum": 86400.0,
                "exclusiveMinimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Timeout",
            "description": "Seconds (default AUTOAIR_RUNNER__DEFAULT_DAG_TIMEOUT, at most AUTOAIR_RUNNER__MAX_TIMEOUT)."
          }
        },
        "type": "object",
        "required": [
          "spec"
        ],
        "title": "TestDagRequest"
      },
      "TestRunInfo": {
        "properties": {
          "on_validator": {
            "type": "boolean",
            "title": "On Validator",
            "description": "Task and DAG test runs (mode memory) run on the validator service (validator.url and validator.test_runs), not on this host."
          },
          "db_mode_unavailable": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "disabled",
                  "admin_only"
                ]
              },
              {
                "type": "null"
              }
            ],
            "title": "Db Mode Unavailable",
            "description": "Why mode=db is not available: disabled (runner.allow_db_mode is off) or admin_only (it needs admin:config). Null: the caller may use it. mode=auto runs in memory whenever this is set."
          }
        },
        "type": "object",
        "required": [
          "on_validator"
        ],
        "title": "TestRunInfo",
        "description": "Where test runs execute and whether ``mode=db`` is available to the caller."
      },
      "TestTaskRequest": {
        "properties": {
          "spec": {
            "$ref": "#/components/schemas/DagSpec"
          },
          "task_node_id": {
            "type": "string",
            "title": "Task Node Id"
          },
          "conf": {
            "additionalProperties": true,
            "type": "object",
            "title": "Conf",
            "description": "dag_run.conf / params"
          },
          "mock_xcoms": {
            "additionalProperties": true,
            "type": "object",
            "title": "Mock Xcoms",
            "description": "Upstream node id -> value returned by xcom_pull (use '<node_id>:<key>' for non-default XCom keys)."
          },
          "timeout": {
            "anyOf": [
              {
                "type": "number",
                "maximum": 86400.0,
                "exclusiveMinimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Timeout",
            "description": "Seconds (default AUTOAIR_RUNNER__DEFAULT_TASK_TIMEOUT, at most AUTOAIR_RUNNER__MAX_TIMEOUT)."
          }
        },
        "type": "object",
        "required": [
          "spec",
          "task_node_id"
        ],
        "title": "TestTaskRequest"
      },
      "ThreadRename": {
        "properties": {
          "title": {
            "type": "string",
            "maxLength": 120,
            "minLength": 1,
            "title": "Title"
          }
        },
        "type": "object",
        "required": [
          "title"
        ],
        "title": "ThreadRename"
      },
      "ThreadSummary": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "mode": {
            "type": "string",
            "enum": [
              "developer",
              "admin"
            ],
            "title": "Mode"
          },
          "title": {
            "type": "string",
            "title": "Title"
          },
          "created_at": {
            "type": "string",
            "title": "Created At"
          },
          "updated_at": {
            "type": "string",
            "title": "Updated At"
          },
          "message_count": {
            "type": "integer",
            "title": "Message Count",
            "default": 0
          },
          "usage": {
            "$ref": "#/components/schemas/Usage"
          }
        },
        "type": "object",
        "required": [
          "id",
          "mode",
          "title",
          "created_at",
          "updated_at"
        ],
        "title": "ThreadSummary"
      },
      "ToolApprovalDecision": {
        "properties": {
          "decisions": {
            "items": {
              "$ref": "#/components/schemas/ToolDecision"
            },
            "type": "array",
            "maxItems": 50,
            "minItems": 1,
            "title": "Decisions",
            "description": "One decision per pending tool call (approve, or deny with an optional reason that is sent to the model)."
          }
        },
        "type": "object",
        "required": [
          "decisions"
        ],
        "title": "ToolApprovalDecision"
      },
      "ToolApprovalView": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "agent": {
            "type": "string",
            "enum": [
              "developer",
              "admin",
              "troubleshoot"
            ],
            "title": "Agent"
          },
          "status": {
            "type": "string",
            "enum": [
              "pending",
              "resuming",
              "resolved",
              "expired",
              "cancelled",
              "failed"
            ],
            "title": "Status",
            "default": "pending"
          },
          "created_at": {
            "type": "string",
            "title": "Created At"
          },
          "expires_at": {
            "type": "string",
            "title": "Expires At"
          },
          "calls": {
            "items": {
              "$ref": "#/components/schemas/PendingToolCall"
            },
            "type": "array",
            "title": "Calls"
          },
          "decisions": {
            "items": {
              "$ref": "#/components/schemas/ToolDecision"
            },
            "type": "array",
            "title": "Decisions"
          },
          "decided_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Decided By"
          },
          "decided_at": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Decided At"
          },
          "error": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Error",
            "description": "Why a resumed run failed."
          }
        },
        "type": "object",
        "required": [
          "id",
          "agent",
          "created_at",
          "expires_at"
        ],
        "title": "ToolApprovalView",
        "description": "A paused run's approval as chat messages and analyses carry it."
      },
      "ToolCallArguments": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "tool": {
            "type": "string",
            "title": "Tool"
          },
          "arguments": {
            "title": "Arguments"
          },
          "arguments_sha256": {
            "type": "string",
            "title": "Arguments Sha256",
            "description": "Send it back with an approval of the call."
          }
        },
        "type": "object",
        "required": [
          "id",
          "tool",
          "arguments_sha256"
        ],
        "title": "ToolCallArguments",
        "description": "A pending call's complete arguments (secrets masked, nothing cut)."
      },
      "ToolCallRecord": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "name": {
            "type": "string",
            "title": "Name"
          },
          "arguments": {
            "additionalProperties": true,
            "type": "object",
            "title": "Arguments"
          },
          "ok": {
            "type": "boolean",
            "title": "Ok",
            "default": true
          },
          "preview": {
            "type": "string",
            "title": "Preview",
            "default": ""
          },
          "duration_ms": {
            "type": "integer",
            "title": "Duration Ms",
            "default": 0
          }
        },
        "type": "object",
        "required": [
          "id",
          "name"
        ],
        "title": "ToolCallRecord"
      },
      "ToolDecision": {
        "properties": {
          "id": {
            "type": "string",
            "maxLength": 200,
            "title": "Id",
            "description": "Tool call id."
          },
          "approved": {
            "type": "boolean",
            "title": "Approved"
          },
          "reason": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 10000
              },
              {
                "type": "null"
              }
            ],
            "title": "Reason"
          },
          "arguments_sha256": {
            "anyOf": [
              {
                "type": "string",
                "pattern": "^[0-9a-f]{64}$"
              },
              {
                "type": "null"
              }
            ],
            "title": "Arguments Sha256",
            "description": "The arguments_sha256 of the call as shown; required to approve."
          }
        },
        "type": "object",
        "required": [
          "id",
          "approved"
        ],
        "title": "ToolDecision"
      },
      "ToolRun": {
        "properties": {
          "name": {
            "type": "string",
            "title": "Name"
          },
          "available": {
            "type": "boolean",
            "title": "Available",
            "description": "False when the tool is not installed on the server."
          },
          "ran": {
            "type": "boolean",
            "title": "Ran",
            "description": "True when the tool checked the code."
          },
          "note": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Note",
            "description": "Why the tool did not run / failed."
          }
        },
        "type": "object",
        "required": [
          "name",
          "available",
          "ran"
        ],
        "title": "ToolRun"
      },
      "TriggerRequest": {
        "properties": {
          "conf": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Conf"
          },
          "unpause": {
            "type": "boolean",
            "title": "Unpause",
            "default": true
          },
          "logical_date": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Logical Date",
            "description": "ISO datetime, 'now', or null for a run without logical date",
            "default": "now"
          },
          "partition_key": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Partition Key"
          },
          "note": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Note"
          }
        },
        "type": "object",
        "title": "TriggerRequest"
      },
      "TriggerResult": {
        "properties": {
          "dag_run_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Dag Run Id"
          },
          "state": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "State"
          }
        },
        "type": "object",
        "required": [
          "dag_run_id",
          "state"
        ],
        "title": "TriggerResult"
      },
      "TroubleshootAnalysis": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "user": {
            "type": "string",
            "title": "User"
          },
          "created_at": {
            "type": "string",
            "title": "Created At"
          },
          "dag_id": {
            "type": "string",
            "title": "Dag Id"
          },
          "run_id": {
            "type": "string",
            "title": "Run Id"
          },
          "task_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Task Id"
          },
          "map_index": {
            "type": "integer",
            "title": "Map Index",
            "default": -1
          },
          "question": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Question"
          },
          "rerun_of": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Rerun Of"
          },
          "scope": {
            "$ref": "#/components/schemas/TroubleshootScope"
          },
          "mcp": {
            "items": {
              "$ref": "#/components/schemas/McpSelection"
            },
            "type": "array",
            "title": "Mcp"
          },
          "run_state": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Run State"
          },
          "focus_tasks": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Focus Tasks"
          },
          "dag_version": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Dag Version"
          },
          "bundle_version": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Bundle Version"
          },
          "model": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Model"
          },
          "usage": {
            "$ref": "#/components/schemas/Usage"
          },
          "tools_used": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Tools Used"
          },
          "sources": {
            "items": {
              "$ref": "#/components/schemas/Citation"
            },
            "type": "array",
            "title": "Sources"
          },
          "steps": {
            "items": {
              "$ref": "#/components/schemas/AgentStep"
            },
            "type": "array",
            "title": "Steps"
          },
          "stopped": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Stopped"
          },
          "summary": {
            "type": "string",
            "title": "Summary",
            "default": ""
          },
          "hypotheses": {
            "items": {
              "$ref": "#/components/schemas/Hypothesis"
            },
            "type": "array",
            "title": "Hypotheses"
          },
          "remediation": {
            "items": {
              "$ref": "#/components/schemas/RemediationStep"
            },
            "type": "array",
            "title": "Remediation"
          },
          "config_changes": {
            "items": {
              "$ref": "#/components/schemas/ConfigChange"
            },
            "type": "array",
            "title": "Config Changes"
          },
          "airflow_actions": {
            "items": {
              "$ref": "#/components/schemas/AirflowAction"
            },
            "type": "array",
            "title": "Airflow Actions"
          },
          "actions_mode": {
            "type": "string",
            "enum": [
              "read_only",
              "hitl",
              "apply"
            ],
            "title": "Actions Mode",
            "description": "How the Airflow actions of this analysis run.",
            "default": "read_only"
          },
          "findings": {
            "items": {
              "$ref": "#/components/schemas/Finding"
            },
            "type": "array",
            "title": "Findings"
          },
          "base_spec": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/DagSpec"
              },
              {
                "type": "null"
              }
            ]
          },
          "proposed_spec": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/DagSpec"
              },
              {
                "type": "null"
              }
            ]
          },
          "proposed_ok": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Proposed Ok"
          },
          "problems": {
            "items": {
              "$ref": "#/components/schemas/SpecProblem"
            },
            "type": "array",
            "title": "Problems"
          },
          "skipped": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Skipped"
          },
          "code_before": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Code Before"
          },
          "code_after": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Code After"
          },
          "status": {
            "type": "string",
            "enum": [
              "proposed",
              "no_change",
              "approved",
              "rejected",
              "applied",
              "awaiting_approval"
            ],
            "title": "Status",
            "default": "no_change"
          },
          "decisions": {
            "items": {
              "$ref": "#/components/schemas/Decision"
            },
            "type": "array",
            "title": "Decisions"
          },
          "notes": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Notes"
          },
          "guardrails": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Guardrails"
          },
          "approvals": {
            "items": {
              "$ref": "#/components/schemas/ToolApprovalView"
            },
            "type": "array",
            "title": "Approvals",
            "description": "Tool approvals of the analysis run (the last one is current); status awaiting_approval while one is pending."
          }
        },
        "type": "object",
        "required": [
          "user",
          "dag_id",
          "run_id",
          "scope"
        ],
        "title": "TroubleshootAnalysis"
      },
      "TroubleshootOptions": {
        "properties": {
          "enabled": {
            "type": "boolean",
            "title": "Enabled"
          },
          "allowed": {
            "$ref": "#/components/schemas/TroubleshootScope",
            "description": "What the server allows at most."
          },
          "defaults": {
            "$ref": "#/components/schemas/TroubleshootScope"
          },
          "filesystem_roots": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Filesystem Roots"
          },
          "online_available": {
            "type": "boolean",
            "title": "Online Available",
            "default": false
          },
          "mcp_servers": {
            "items": {
              "$ref": "#/components/schemas/McpServerOption"
            },
            "type": "array",
            "title": "Mcp Servers"
          },
          "actions_mode": {
            "type": "string",
            "enum": [
              "read_only",
              "hitl",
              "apply"
            ],
            "title": "Actions Mode",
            "description": "The most permissive Airflow-action mode this caller may choose (ai.troubleshoot.airflow_actions; read_only without run:manage or features.runs).",
            "default": "read_only"
          },
          "allowed_actions": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Allowed Actions",
            "description": "Action types that may be executed."
          },
          "max_actions": {
            "type": "integer",
            "title": "Max Actions",
            "description": "Executable actions per analysis.",
            "default": 0
          }
        },
        "type": "object",
        "required": [
          "enabled",
          "allowed",
          "defaults"
        ],
        "title": "TroubleshootOptions"
      },
      "TroubleshootRequest": {
        "properties": {
          "dag_id": {
            "type": "string",
            "maxLength": 250,
            "minLength": 1,
            "title": "Dag Id"
          },
          "run_id": {
            "type": "string",
            "maxLength": 250,
            "minLength": 1,
            "title": "Run Id"
          },
          "task_id": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 250
              },
              {
                "type": "null"
              }
            ],
            "title": "Task Id",
            "description": "Focus task."
          },
          "map_index": {
            "type": "integer",
            "title": "Map Index",
            "default": -1
          },
          "try_number": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 1.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Try Number"
          },
          "spec": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/DagSpec"
              },
              {
                "type": "null"
              }
            ],
            "description": "The DAG open in the editor (default: the saved spec)."
          },
          "question": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 4000
              },
              {
                "type": "null"
              }
            ],
            "title": "Question"
          },
          "scope": {
            "$ref": "#/components/schemas/TroubleshootScope"
          },
          "mcp": {
            "items": {
              "$ref": "#/components/schemas/McpSelection"
            },
            "type": "array",
            "maxItems": 10,
            "title": "Mcp"
          },
          "model": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 200
              },
              {
                "type": "null"
              }
            ],
            "title": "Model"
          },
          "rerun_of": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 40
              },
              {
                "type": "null"
              }
            ],
            "title": "Rerun Of"
          },
          "airflow_actions": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "read_only",
                  "hitl",
                  "apply"
                ]
              },
              {
                "type": "null"
              }
            ],
            "title": "Airflow Actions",
            "description": "Mode for the proposed Airflow actions; only as permissive as ai.troubleshoot.airflow_actions (default: that setting)."
          }
        },
        "type": "object",
        "required": [
          "dag_id",
          "run_id"
        ],
        "title": "TroubleshootRequest"
      },
      "TroubleshootScope": {
        "properties": {
          "connections": {
            "type": "boolean",
            "title": "Connections",
            "default": true
          },
          "variables": {
            "type": "boolean",
            "title": "Variables",
            "default": true
          },
          "pools": {
            "type": "boolean",
            "title": "Pools",
            "default": true
          },
          "xcom_keys": {
            "type": "boolean",
            "title": "Xcom Keys",
            "default": true
          },
          "xcom_values": {
            "type": "boolean",
            "title": "Xcom Values",
            "default": false
          },
          "other_runs": {
            "type": "boolean",
            "title": "Other Runs",
            "default": true
          },
          "import_errors": {
            "type": "boolean",
            "title": "Import Errors",
            "default": true
          },
          "airflow_config": {
            "type": "boolean",
            "title": "Airflow Config",
            "default": false
          },
          "filesystem": {
            "type": "boolean",
            "title": "Filesystem",
            "default": false
          },
          "research": {
            "type": "boolean",
            "title": "Research",
            "default": true
          },
          "online": {
            "type": "boolean",
            "title": "Online",
            "default": false
          }
        },
        "type": "object",
        "title": "TroubleshootScope",
        "description": "What the agent may read (each also needs the server setting to allow it)."
      },
      "UpgradeReport": {
        "properties": {
          "dags": {
            "items": {
              "$ref": "#/components/schemas/DagUpgrade"
            },
            "type": "array",
            "title": "Dags"
          },
          "model": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Model"
          },
          "usage": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Usage"
              },
              {
                "type": "null"
              }
            ]
          },
          "notes": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Notes"
          }
        },
        "type": "object",
        "title": "UpgradeReport"
      },
      "UpgradeRequest": {
        "properties": {
          "spec": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/DagSpec"
              },
              {
                "type": "null"
              }
            ],
            "description": "Analyse this spec (the editor's)."
          },
          "dag_ids": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "maxItems": 500,
            "title": "Dag Ids",
            "description": "Saved DAGs."
          },
          "all": {
            "type": "boolean",
            "title": "All",
            "description": "Every saved AutoAir DAG.",
            "default": false
          },
          "use_ai": {
            "type": "boolean",
            "title": "Use Ai",
            "description": "Add an LLM pass (single DAG only).",
            "default": true
          },
          "model": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 200
              },
              {
                "type": "null"
              }
            ],
            "title": "Model"
          }
        },
        "type": "object",
        "title": "UpgradeRequest"
      },
      "UploadedFile": {
        "properties": {
          "path": {
            "type": "string",
            "maxLength": 1000,
            "minLength": 1,
            "title": "Path",
            "description": "Repository-relative path."
          },
          "source": {
            "type": "string",
            "title": "Source",
            "description": "File content."
          }
        },
        "type": "object",
        "required": [
          "path",
          "source"
        ],
        "title": "UploadedFile"
      },
      "Usage": {
        "properties": {
          "requests": {
            "type": "integer",
            "title": "Requests",
            "default": 0
          },
          "input_tokens": {
            "type": "integer",
            "title": "Input Tokens",
            "default": 0
          },
          "output_tokens": {
            "type": "integer",
            "title": "Output Tokens",
            "default": 0
          },
          "cache_read_tokens": {
            "type": "integer",
            "title": "Cache Read Tokens",
            "default": 0
          },
          "cache_write_tokens": {
            "type": "integer",
            "title": "Cache Write Tokens",
            "default": 0
          },
          "cost_usd": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Cost Usd",
            "description": "Known only when pricing is configured for the model."
          }
        },
        "type": "object",
        "title": "Usage",
        "description": "Tokens of one or more model calls. ``input_tokens`` excludes cached input."
      },
      "UsageRow": {
        "properties": {
          "user": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "User"
          },
          "provider": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Provider"
          },
          "model": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Model"
          },
          "requests": {
            "type": "integer",
            "title": "Requests",
            "default": 0
          },
          "input_tokens": {
            "type": "integer",
            "title": "Input Tokens",
            "default": 0
          },
          "output_tokens": {
            "type": "integer",
            "title": "Output Tokens",
            "default": 0
          },
          "cost_usd": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Cost Usd"
          },
          "errors": {
            "type": "integer",
            "title": "Errors",
            "default": 0
          }
        },
        "type": "object",
        "required": [
          "user"
        ],
        "title": "UsageRow"
      },
      "UserLlmPolicy": {
        "properties": {
          "mode": {
            "type": "string",
            "enum": [
              "central",
              "per_user",
              "both"
            ],
            "title": "Mode"
          },
          "providers": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Providers"
          },
          "models": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Models"
          },
          "base_urls": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Base Urls"
          },
          "conn_ids_allowed": {
            "type": "boolean",
            "title": "Conn Ids Allowed"
          }
        },
        "type": "object",
        "required": [
          "mode",
          "providers",
          "models",
          "base_urls",
          "conn_ids_allowed"
        ],
        "title": "UserLlmPolicy",
        "description": "What the UI may offer (from ``ai.user_llm``)."
      },
      "UserLlmUpdate": {
        "properties": {
          "provider": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "anthropic",
                  "openai",
                  "azure",
                  "gemini",
                  "google-cloud",
                  "ollama",
                  "bedrock",
                  "groq",
                  "mistral",
                  "cohere"
                ]
              },
              {
                "type": "null"
              }
            ],
            "title": "Provider"
          },
          "model": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 200
              },
              {
                "type": "null"
              }
            ],
            "title": "Model"
          },
          "base_url": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 500
              },
              {
                "type": "null"
              }
            ],
            "title": "Base Url"
          },
          "conn_id": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 250
              },
              {
                "type": "null"
              }
            ],
            "title": "Conn Id"
          },
          "api_key": {
            "anyOf": [
              {
                "type": "string",
                "format": "password",
                "writeOnly": true
              },
              {
                "type": "null"
              }
            ],
            "title": "Api Key",
            "description": "New API key; omit to keep the stored one."
          },
          "clear_api_key": {
            "type": "boolean",
            "title": "Clear Api Key",
            "default": false
          }
        },
        "type": "object",
        "title": "UserLlmUpdate"
      },
      "UserLlmView": {
        "properties": {
          "configured": {
            "type": "boolean",
            "title": "Configured",
            "default": false
          },
          "provider": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "anthropic",
                  "openai",
                  "azure",
                  "gemini",
                  "google-cloud",
                  "ollama",
                  "bedrock",
                  "groq",
                  "mistral",
                  "cohere"
                ]
              },
              {
                "type": "null"
              }
            ],
            "title": "Provider"
          },
          "model": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Model"
          },
          "base_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Base Url"
          },
          "conn_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Conn Id"
          },
          "api_key_set": {
            "type": "boolean",
            "title": "Api Key Set",
            "default": false
          },
          "api_key_last4": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Api Key Last4"
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At"
          }
        },
        "type": "object",
        "title": "UserLlmView",
        "description": "What the API returns (never the key)."
      },
      "UserModelState": {
        "properties": {
          "settings": {
            "$ref": "#/components/schemas/UserLlmView"
          },
          "policy": {
            "$ref": "#/components/schemas/UserLlmPolicy"
          }
        },
        "type": "object",
        "required": [
          "settings",
          "policy"
        ],
        "title": "UserModelState"
      },
      "ValidateDiagnostic": {
        "properties": {
          "line": {
            "type": "integer",
            "minimum": 1.0,
            "title": "Line",
            "description": "1-based line."
          },
          "column": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Column",
            "description": "1-based column."
          },
          "end_line": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "End Line"
          },
          "end_column": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "End Column"
          },
          "severity": {
            "type": "string",
            "enum": [
              "error",
              "warning",
              "info"
            ],
            "title": "Severity"
          },
          "message": {
            "type": "string",
            "title": "Message"
          },
          "code": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Code"
          },
          "source": {
            "type": "string",
            "title": "Source",
            "description": "Tool that reported it (ast, ruff, shellcheck, javac\u2026)."
          }
        },
        "type": "object",
        "required": [
          "line",
          "severity",
          "message",
          "source"
        ],
        "title": "ValidateDiagnostic"
      },
      "ValidateRequest": {
        "properties": {
          "language": {
            "type": "string",
            "enum": [
              "python",
              "json",
              "yaml",
              "bash",
              "sh",
              "sql",
              "go",
              "java",
              "javascript",
              "typescript",
              "markdown",
              "jinja",
              "text"
            ],
            "title": "Language"
          },
          "code": {
            "type": "string",
            "maxLength": 10000000,
            "title": "Code"
          },
          "python_mode": {
            "type": "string",
            "enum": [
              "module",
              "task_body"
            ],
            "title": "Python Mode",
            "description": "python only: task_body = the body of a @task function (dedented and wrapped in a function before checking).",
            "default": "module"
          }
        },
        "type": "object",
        "required": [
          "language",
          "code"
        ],
        "title": "ValidateRequest"
      },
      "ValidateResult": {
        "properties": {
          "language": {
            "type": "string",
            "enum": [
              "python",
              "json",
              "yaml",
              "bash",
              "sh",
              "sql",
              "go",
              "java",
              "javascript",
              "typescript",
              "markdown",
              "jinja",
              "text"
            ],
            "title": "Language"
          },
          "ok": {
            "type": "boolean",
            "title": "Ok",
            "description": "No error-severity diagnostic."
          },
          "validated": {
            "type": "boolean",
            "title": "Validated",
            "description": "At least one tool checked the code."
          },
          "tools": {
            "items": {
              "$ref": "#/components/schemas/ToolRun"
            },
            "type": "array",
            "title": "Tools"
          },
          "diagnostics": {
            "items": {
              "$ref": "#/components/schemas/ValidateDiagnostic"
            },
            "type": "array",
            "title": "Diagnostics"
          }
        },
        "type": "object",
        "required": [
          "language",
          "ok",
          "validated"
        ],
        "title": "ValidateResult"
      },
      "ValidationError": {
        "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"
      },
      "ValidationReport": {
        "properties": {
          "ok": {
            "type": "boolean",
            "title": "Ok"
          },
          "problems": {
            "items": {
              "$ref": "#/components/schemas/Problem"
            },
            "type": "array",
            "title": "Problems"
          },
          "import_check": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ImportCheckResult"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "type": "object",
        "required": [
          "ok",
          "problems"
        ],
        "title": "ValidationReport"
      },
      "VariableInfo": {
        "properties": {
          "key": {
            "type": "string",
            "title": "Key"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "team_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Team Name"
          }
        },
        "type": "object",
        "required": [
          "key"
        ],
        "title": "VariableInfo"
      },
      "VersionInfo": {
        "properties": {
          "version": {
            "type": "string",
            "title": "Version"
          },
          "timestamp": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Timestamp"
          },
          "author": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Author"
          },
          "message": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Message"
          },
          "etag": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Etag"
          }
        },
        "type": "object",
        "required": [
          "version"
        ],
        "title": "VersionInfo"
      },
      "WriteRequest": {
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "task_body",
              "inline_function",
              "bash",
              "sql",
              "operator_config",
              "custom_operator",
              "dag_spec"
            ],
            "title": "Kind"
          },
          "description": {
            "type": "string",
            "maxLength": 20000,
            "minLength": 1,
            "title": "Description"
          },
          "spec": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/DagSpec"
              },
              {
                "type": "null"
              }
            ],
            "description": "The DAG being edited, if any."
          },
          "node_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Node Id",
            "description": "Node the code is for."
          },
          "existing": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 200000
              },
              {
                "type": "null"
              }
            ],
            "title": "Existing"
          },
          "function_name": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 200
              },
              {
                "type": "null"
              }
            ],
            "title": "Function Name"
          },
          "arguments": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "maxItems": 50,
            "title": "Arguments"
          },
          "dialect": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 40
              },
              {
                "type": "null"
              }
            ],
            "title": "Dialect",
            "description": "SQL dialect."
          },
          "operator": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 300
              },
              {
                "type": "null"
              }
            ],
            "title": "Operator",
            "description": "Preferred operator."
          },
          "research": {
            "type": "boolean",
            "title": "Research",
            "description": "Add retrieved reference material.",
            "default": true
          },
          "model": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 200
              },
              {
                "type": "null"
              }
            ],
            "title": "Model"
          }
        },
        "type": "object",
        "required": [
          "kind",
          "description"
        ],
        "title": "WriteRequest"
      },
      "WriterIssue": {
        "properties": {
          "severity": {
            "type": "string",
            "enum": [
              "error",
              "warning",
              "info"
            ],
            "title": "Severity"
          },
          "source": {
            "type": "string",
            "title": "Source",
            "description": "syntax, ruff, shellcheck, imports, catalog, sql, policy\u2026"
          },
          "message": {
            "type": "string",
            "title": "Message"
          },
          "line": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Line"
          }
        },
        "type": "object",
        "required": [
          "severity",
          "source",
          "message"
        ],
        "title": "WriterIssue"
      },
      "WriterResult": {
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "task_body",
              "inline_function",
              "bash",
              "sql",
              "operator_config",
              "custom_operator",
              "dag_spec"
            ],
            "title": "Kind"
          },
          "ok": {
            "type": "boolean",
            "title": "Ok",
            "description": "True when the output passed every available check."
          },
          "language": {
            "type": "string",
            "title": "Language"
          },
          "code": {
            "type": "string",
            "title": "Code",
            "description": "Code / script / SQL / module text (or JSON for configs)."
          },
          "function_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Function Name"
          },
          "operator": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Operator"
          },
          "params": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Params"
          },
          "spec": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/DagSpec"
              },
              {
                "type": "null"
              }
            ]
          },
          "explanation": {
            "type": "string",
            "title": "Explanation",
            "default": ""
          },
          "requirements": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Requirements"
          },
          "connections": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Connections"
          },
          "issues": {
            "items": {
              "$ref": "#/components/schemas/WriterIssue"
            },
            "type": "array",
            "title": "Issues"
          },
          "findings": {
            "items": {
              "$ref": "#/components/schemas/Finding"
            },
            "type": "array",
            "title": "Findings"
          },
          "checks": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Checks",
            "description": "Checks that ran."
          },
          "rounds": {
            "type": "integer",
            "title": "Rounds",
            "default": 1
          },
          "model": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Model"
          },
          "usage": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Usage"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "type": "object",
        "required": [
          "kind",
          "ok",
          "language",
          "code"
        ],
        "title": "WriterResult"
      },
      "WritersInfo": {
        "properties": {
          "kinds": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Kinds"
          },
          "environment": {
            "$ref": "#/components/schemas/EnvironmentProfile"
          }
        },
        "type": "object",
        "required": [
          "kinds",
          "environment"
        ],
        "title": "WritersInfo"
      },
      "XComInfo": {
        "properties": {
          "key": {
            "type": "string",
            "title": "Key"
          },
          "map_index": {
            "type": "integer",
            "title": "Map Index",
            "default": -1
          },
          "value": {
            "title": "Value"
          }
        },
        "type": "object",
        "required": [
          "key"
        ],
        "title": "XComInfo"
      },
      "YamlBody": {
        "properties": {
          "source": {
            "type": "string",
            "maxLength": 100000000,
            "title": "Source"
          }
        },
        "type": "object",
        "required": [
          "source"
        ],
        "title": "YamlBody"
      },
      "YamlExport": {
        "properties": {
          "yaml": {
            "type": "string",
            "title": "Yaml"
          },
          "issues": {
            "items": {
              "$ref": "#/components/schemas/YamlIssue"
            },
            "type": "array",
            "title": "Issues"
          }
        },
        "type": "object",
        "required": [
          "yaml",
          "issues"
        ],
        "title": "YamlExport"
      },
      "YamlImportResult": {
        "properties": {
          "spec": {
            "$ref": "#/components/schemas/DagSpec"
          },
          "issues": {
            "items": {
              "$ref": "#/components/schemas/YamlIssue"
            },
            "type": "array",
            "title": "Issues"
          }
        },
        "type": "object",
        "required": [
          "spec",
          "issues"
        ],
        "title": "YamlImportResult"
      },
      "YamlIssue": {
        "properties": {
          "severity": {
            "type": "string",
            "title": "Severity"
          },
          "message": {
            "type": "string",
            "title": "Message"
          },
          "node_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Node Id"
          }
        },
        "type": "object",
        "required": [
          "severity",
          "message"
        ],
        "title": "YamlIssue"
      }
    }
  }
}
