{
  "openapi": "3.0.3",
  "info": {
    "title": "eve-iac-agent HTTP API",
    "version": "v1",
    "description": "SDK-relevant JSON and console-stream operations on eve-iac-agent. Phase A goldens are the behavioral baseline. Omission is not encoded as OpenAPI default. The wire envelope is {ok, data?, error?, code?}; SDKs may unwrap later. POST /api/v1/browser-session and GET /browser/{token} are on the Go mux but are not Agent SDK ops.",
    "license": { "name": "AGPL-3.0-only" }
  },
  "servers": [{ "url": "/" }],
  "security": [{ "bearerAuth": [] }],
  "tags": [
    { "name": "session" },
    { "name": "catalog" },
    { "name": "authoring" },
    { "name": "projects" },
    { "name": "console" }
  ],
  "paths": {
    "/api/v1/health": {
      "get": {
        "operationId": "getHealth",
        "x-eve-iac-agentOp": "health",
        "tags": ["session"],
        "security": [],
        "responses": {
          "200": { "$ref": "#/components/responses/HealthOk" },
          "default": { "$ref": "#/components/responses/ErrorJSON" }
        }
      }
    },
    "/api/v1/login": {
      "post": {
        "operationId": "login",
        "x-eve-iac-agentOp": "login",
        "tags": ["session"],
        "security": [],
        "requestBody": {
          "required": true,
          "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LoginRequest" } } }
        },
        "responses": {
          "200": { "$ref": "#/components/responses/LoginOk" },
          "default": { "$ref": "#/components/responses/ErrorJSON" }
        }
      }
    },
    "/api/v1/logout": {
      "post": {
        "operationId": "logout",
        "x-eve-iac-agentOp": "logout",
        "tags": ["session"],
        "requestBody": {
          "required": true,
          "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LogoutRequest" } } }
        },
        "responses": {
          "200": { "$ref": "#/components/responses/StatusOk" },
          "default": { "$ref": "#/components/responses/ErrorJSON" }
        }
      }
    },
    "/api/v1/session": {
      "get": {
        "operationId": "getSession",
        "x-eve-iac-agentOp": "session",
        "tags": ["session"],
        "responses": {
          "200": { "$ref": "#/components/responses/SessionOk" },
          "default": { "$ref": "#/components/responses/ErrorJSON" }
        }
      }
    },
    "/api/v1/capabilities": {
      "get": {
        "operationId": "getCapabilities",
        "x-eve-iac-agentOp": "capabilities",
        "tags": ["session"],
        "responses": {
          "200": { "$ref": "#/components/responses/CapabilitiesOk" },
          "default": { "$ref": "#/components/responses/ErrorJSON" }
        }
      }
    },
    "/api/v1/templates": {
      "get": {
        "operationId": "listTemplates",
        "x-eve-iac-agentOp": "templates",
        "tags": ["catalog"],
        "parameters": [
          {
            "name": "provisioned",
            "in": "query",
            "required": false,
            "description": "Only the string true filters to provisioned templates. Omitted means all.",
            "schema": { "type": "string" }
          }
        ],
        "responses": {
          "200": { "$ref": "#/components/responses/TemplatesOk" },
          "default": { "$ref": "#/components/responses/ErrorJSON" }
        }
      }
    },
    "/api/v1/templates/{id}": {
      "get": {
        "operationId": "getTemplate",
        "x-eve-iac-agentOp": "template",
        "tags": ["catalog"],
        "parameters": [{ "$ref": "#/components/parameters/TemplateId" }],
        "responses": {
          "200": { "$ref": "#/components/responses/TemplateOk" },
          "default": { "$ref": "#/components/responses/ErrorJSON" }
        }
      }
    },
    "/api/v1/templates/{id}/images": {
      "get": {
        "operationId": "listTemplateImages",
        "x-eve-iac-agentOp": "templateImages",
        "tags": ["catalog"],
        "parameters": [{ "$ref": "#/components/parameters/TemplateId" }],
        "responses": {
          "200": { "$ref": "#/components/responses/TemplateImagesOk" },
          "default": { "$ref": "#/components/responses/ErrorJSON" }
        }
      }
    },
    "/api/v1/templates/{id}/attributes": {
      "get": {
        "operationId": "listTemplateAttributes",
        "x-eve-iac-agentOp": "templateAttributes",
        "tags": ["catalog"],
        "parameters": [{ "$ref": "#/components/parameters/TemplateId" }],
        "responses": {
          "200": { "$ref": "#/components/responses/TemplateAttributesOk" },
          "default": { "$ref": "#/components/responses/ErrorJSON" }
        }
      }
    },
    "/api/v1/network-types": {
      "get": {
        "operationId": "listNetworkTypes",
        "x-eve-iac-agentOp": "networkTypes",
        "tags": ["catalog"],
        "responses": {
          "200": { "$ref": "#/components/responses/NetworkTypesOk" },
          "default": { "$ref": "#/components/responses/ErrorJSON" }
        }
      }
    },
    "/api/v1/icons": {
      "get": {
        "operationId": "listIcons",
        "x-eve-iac-agentOp": "icons",
        "tags": ["catalog"],
        "responses": {
          "200": { "$ref": "#/components/responses/IconsOk" },
          "default": { "$ref": "#/components/responses/ErrorJSON" }
        }
      }
    },
    "/api/v1/authoring/link-completions": {
      "post": {
        "operationId": "completeLinkInterfaces",
        "x-eve-iac-agentOp": "linkCompletions",
        "tags": ["authoring"],
        "requestBody": {
          "required": true,
          "content": { "application/json": { "schema": { "$ref": "#/components/schemas/AuthoringPayload" } } }
        },
        "responses": {
          "200": { "$ref": "#/components/responses/LinkCompletionsOk" },
          "default": { "$ref": "#/components/responses/ErrorJSON" }
        }
      }
    },
    "/api/v1/authoring/interfaces": {
      "post": {
        "operationId": "previewInterfaces",
        "x-eve-iac-agentOp": "interfaces",
        "tags": ["authoring"],
        "requestBody": {
          "required": true,
          "content": { "application/json": { "schema": { "$ref": "#/components/schemas/AuthoringPayload" } } }
        },
        "responses": {
          "200": { "$ref": "#/components/responses/InterfacesPreviewOk" },
          "default": { "$ref": "#/components/responses/ErrorJSON" }
        }
      }
    },
    "/api/v1/projects/validate": {
      "post": {
        "operationId": "validateProject",
        "x-eve-iac-agentOp": "validate",
        "tags": ["projects"],
        "requestBody": {
          "required": true,
          "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ProjectPayload" } } }
        },
        "responses": {
          "200": { "$ref": "#/components/responses/ValidateOk" },
          "default": { "$ref": "#/components/responses/ErrorJSON" }
        }
      }
    },
    "/api/v1/projects/import": {
      "post": {
        "operationId": "importProject",
        "x-eve-iac-agentOp": "import",
        "tags": ["projects"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  { "$ref": "#/components/schemas/ProjectPayload" },
                  { "type": "object", "required": ["lab"] }
                ]
              }
            }
          }
        },
        "responses": {
          "200": { "$ref": "#/components/responses/ImportOk" },
          "default": { "$ref": "#/components/responses/ErrorJSON" }
        }
      }
    },
    "/api/v1/projects/deploy": {
      "post": {
        "operationId": "deployProject",
        "x-eve-iac-agentOp": "deploy",
        "tags": ["projects"],
        "requestBody": {
          "required": true,
          "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ProjectPayload" } } }
        },
        "responses": {
          "200": { "$ref": "#/components/responses/DeployOk" },
          "default": { "$ref": "#/components/responses/ErrorJSON" }
        }
      }
    },
    "/api/v1/projects/plan": {
      "post": {
        "operationId": "planProject",
        "x-eve-iac-agentOp": "plan",
        "tags": ["projects"],
        "requestBody": {
          "required": true,
          "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ProjectPayload" } } }
        },
        "responses": {
          "200": { "$ref": "#/components/responses/PlanOk" },
          "default": { "$ref": "#/components/responses/ErrorJSON" }
        }
      }
    },
    "/api/v1/projects/reconcile": {
      "post": {
        "operationId": "reconcileProject",
        "x-eve-iac-agentOp": "reconcile",
        "tags": ["projects"],
        "requestBody": {
          "required": true,
          "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ProjectPayload" } } }
        },
        "responses": {
          "200": { "$ref": "#/components/responses/ReconcileOk" },
          "default": { "$ref": "#/components/responses/ErrorJSON" }
        }
      }
    },
    "/api/v1/projects/destroy": {
      "post": {
        "operationId": "destroyProject",
        "x-eve-iac-agentOp": "destroy",
        "tags": ["projects"],
        "requestBody": {
          "required": true,
          "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ProjectPayload" } } }
        },
        "responses": {
          "200": { "$ref": "#/components/responses/DestroyOk" },
          "default": { "$ref": "#/components/responses/ErrorJSON" }
        }
      }
    },
    "/api/v1/projects/status": {
      "post": {
        "operationId": "getProjectStatus",
        "x-eve-iac-agentOp": "status",
        "tags": ["projects"],
        "requestBody": {
          "required": true,
          "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ProjectPayload" } } }
        },
        "responses": {
          "200": { "$ref": "#/components/responses/ProjectStatusOk" },
          "default": { "$ref": "#/components/responses/ErrorJSON" }
        }
      }
    },
    "/api/v1/projects/inspect": {
      "post": {
        "operationId": "inspectProject",
        "x-eve-iac-agentOp": "inspect",
        "tags": ["projects"],
        "requestBody": {
          "required": true,
          "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ProjectPayload" } } }
        },
        "responses": {
          "200": { "$ref": "#/components/responses/InspectOk" },
          "default": { "$ref": "#/components/responses/ErrorJSON" }
        }
      }
    },
    "/api/v1/projects/open": {
      "post": {
        "operationId": "openProject",
        "x-eve-iac-agentOp": "open",
        "tags": ["projects"],
        "requestBody": {
          "required": true,
          "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ProjectPayload" } } }
        },
        "responses": {
          "200": { "$ref": "#/components/responses/OpenOk" },
          "default": { "$ref": "#/components/responses/ErrorJSON" }
        }
      }
    },
    "/api/v1/projects/consoles": {
      "post": {
        "operationId": "listProjectConsoles",
        "x-eve-iac-agentOp": "consoles",
        "tags": ["console"],
        "requestBody": {
          "required": true,
          "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ProjectPayload" } } }
        },
        "responses": {
          "200": { "$ref": "#/components/responses/ConsolesOk" },
          "default": { "$ref": "#/components/responses/ErrorJSON" }
        }
      }
    },
    "/api/v1/projects/exec": {
      "post": {
        "operationId": "execProject",
        "x-eve-iac-agentOp": "exec",
        "tags": ["projects"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  { "$ref": "#/components/schemas/ProjectPayload" },
                  { "type": "object", "required": ["action"] }
                ]
              }
            }
          }
        },
        "responses": {
          "200": { "$ref": "#/components/responses/ExecOk" },
          "default": { "$ref": "#/components/responses/ErrorJSON" }
        }
      }
    },
    "/api/v1/console/exec": {
      "post": {
        "operationId": "execConsole",
        "x-eve-iac-agentOp": "consoleExec",
        "tags": ["console"],
        "requestBody": {
          "required": true,
          "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConsolePayload" } } }
        },
        "responses": {
          "200": { "$ref": "#/components/responses/ConsoleExecOk" },
          "default": { "$ref": "#/components/responses/ErrorJSON" }
        }
      }
    },
    "/api/v1/console/exec-many": {
      "post": {
        "operationId": "execConsoleMany",
        "x-eve-iac-agentOp": "consoleExecMany",
        "tags": ["console"],
        "requestBody": {
          "required": true,
          "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConsolePayload" } } }
        },
        "responses": {
          "200": { "$ref": "#/components/responses/ConsoleExecManyOk" },
          "default": { "$ref": "#/components/responses/ErrorJSON" }
        }
      }
    },
    "/api/v1/console/attach": {
      "post": {
        "operationId": "attachConsole",
        "x-eve-iac-agentOp": "consoleAttach",
        "tags": ["console"],
        "requestBody": {
          "required": true,
          "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConsolePayload" } } }
        },
        "responses": {
          "200": { "$ref": "#/components/responses/ConsoleAttachOk" },
          "default": { "$ref": "#/components/responses/ErrorJSON" }
        }
      }
    },
    "/api/v1/console/stream/{ticket}": {
      "get": {
        "operationId": "streamConsole",
        "x-eve-iac-agentOp": "consoleStream",
        "tags": ["console"],
        "parameters": [
          {
            "name": "ticket",
            "in": "path",
            "required": true,
            "description": "64-char lowercase hex ticket from attachConsole. Upgrade: eve-telnet is required. Success is 101, not JSON.",
            "schema": { "type": "string" }
          }
        ],
        "responses": {
          "101": {
            "description": "Switching Protocols. Raw eve-telnet byte stream. Not a JSON envelope."
          },
          "default": { "$ref": "#/components/responses/ErrorJSON" }
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "bearerAuth": {
        "type": "http",
        "scheme": "bearer",
        "description": "Opaque agent session id from login. Omitted when the client token is the empty string."
      }
    },
    "parameters": {
      "TemplateId": {
        "name": "id",
        "in": "path",
        "required": true,
        "schema": { "type": "string" }
      }
    },
    "responses": {
      "ErrorJSON": {
        "description": "JSON envelope with ok false. HTTP status is the transport code. code is an open string, not a closed enum.",
        "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorEnvelope" } } }
      },
      "HealthOk": { "description": "Health", "content": { "application/json": { "schema": { "allOf": [{ "$ref": "#/components/schemas/SuccessEnvelope" }, { "type": "object", "properties": { "data": { "$ref": "#/components/schemas/HealthData" } } }] } } } },
      "LoginOk": { "description": "Login", "content": { "application/json": { "schema": { "allOf": [{ "$ref": "#/components/schemas/SuccessEnvelope" }, { "type": "object", "properties": { "data": { "$ref": "#/components/schemas/LoginData" } } }] } } } },
      "StatusOk": { "description": "Status ok", "content": { "application/json": { "schema": { "allOf": [{ "$ref": "#/components/schemas/SuccessEnvelope" }, { "type": "object", "properties": { "data": { "$ref": "#/components/schemas/StatusOkData" } } }] } } } },
      "SessionOk": { "description": "Session", "content": { "application/json": { "schema": { "allOf": [{ "$ref": "#/components/schemas/SuccessEnvelope" }, { "type": "object", "properties": { "data": { "$ref": "#/components/schemas/SessionData" } } }] } } } },
      "CapabilitiesOk": { "description": "Capabilities", "content": { "application/json": { "schema": { "allOf": [{ "$ref": "#/components/schemas/SuccessEnvelope" }, { "type": "object", "properties": { "data": { "$ref": "#/components/schemas/CapabilitiesData" } } }] } } } },
      "TemplatesOk": { "description": "Templates", "content": { "application/json": { "schema": { "allOf": [{ "$ref": "#/components/schemas/SuccessEnvelope" }, { "type": "object", "properties": { "data": { "$ref": "#/components/schemas/TemplatesData" } } }] } } } },
      "TemplateOk": { "description": "Template", "content": { "application/json": { "schema": { "allOf": [{ "$ref": "#/components/schemas/SuccessEnvelope" }, { "type": "object", "properties": { "data": { "$ref": "#/components/schemas/TemplateDetail" } } }] } } } },
      "TemplateImagesOk": { "description": "Images", "content": { "application/json": { "schema": { "allOf": [{ "$ref": "#/components/schemas/SuccessEnvelope" }, { "type": "object", "properties": { "data": { "$ref": "#/components/schemas/TemplateImagesData" } } }] } } } },
      "TemplateAttributesOk": { "description": "Attributes", "content": { "application/json": { "schema": { "allOf": [{ "$ref": "#/components/schemas/SuccessEnvelope" }, { "type": "object", "properties": { "data": { "$ref": "#/components/schemas/TemplateAttributesData" } } }] } } } },
      "NetworkTypesOk": { "description": "Network types", "content": { "application/json": { "schema": { "allOf": [{ "$ref": "#/components/schemas/SuccessEnvelope" }, { "type": "object", "properties": { "data": { "$ref": "#/components/schemas/NetworkTypesData" } } }] } } } },
      "IconsOk": { "description": "Icons", "content": { "application/json": { "schema": { "allOf": [{ "$ref": "#/components/schemas/SuccessEnvelope" }, { "type": "object", "properties": { "data": { "$ref": "#/components/schemas/IconsData" } } }] } } } },
      "LinkCompletionsOk": { "description": "Link completions", "content": { "application/json": { "schema": { "allOf": [{ "$ref": "#/components/schemas/SuccessEnvelope" }, { "type": "object", "properties": { "data": { "$ref": "#/components/schemas/LinkCompletionsData" } } }] } } } },
      "InterfacesPreviewOk": { "description": "Interface preview", "content": { "application/json": { "schema": { "allOf": [{ "$ref": "#/components/schemas/SuccessEnvelope" }, { "type": "object", "properties": { "data": { "$ref": "#/components/schemas/InterfacesPreviewData" } } }] } } } },
      "ValidateOk": { "description": "Validate", "content": { "application/json": { "schema": { "allOf": [{ "$ref": "#/components/schemas/SuccessEnvelope" }, { "type": "object", "properties": { "data": { "$ref": "#/components/schemas/ValidateData" } } }] } } } },
      "ImportOk": { "description": "Import", "content": { "application/json": { "schema": { "allOf": [{ "$ref": "#/components/schemas/SuccessEnvelope" }, { "type": "object", "properties": { "data": { "$ref": "#/components/schemas/ImportData" } } }] } } } },
      "DeployOk": { "description": "Deploy", "content": { "application/json": { "schema": { "allOf": [{ "$ref": "#/components/schemas/SuccessEnvelope" }, { "type": "object", "properties": { "data": { "$ref": "#/components/schemas/DeployData" } } }] } } } },
      "PlanOk": { "description": "Plan", "content": { "application/json": { "schema": { "allOf": [{ "$ref": "#/components/schemas/SuccessEnvelope" }, { "type": "object", "properties": { "data": { "$ref": "#/components/schemas/PlanData" } } }] } } } },
      "ReconcileOk": { "description": "Reconcile", "content": { "application/json": { "schema": { "allOf": [{ "$ref": "#/components/schemas/SuccessEnvelope" }, { "type": "object", "properties": { "data": { "$ref": "#/components/schemas/ReconcileData" } } }] } } } },
      "DestroyOk": { "description": "Destroy", "content": { "application/json": { "schema": { "allOf": [{ "$ref": "#/components/schemas/SuccessEnvelope" }, { "type": "object", "properties": { "data": { "$ref": "#/components/schemas/DestroyData" } } }] } } } },
      "ProjectStatusOk": { "description": "Project status", "content": { "application/json": { "schema": { "allOf": [{ "$ref": "#/components/schemas/SuccessEnvelope" }, { "type": "object", "properties": { "data": { "$ref": "#/components/schemas/ProjectStatusData" } } }] } } } },
      "InspectOk": { "description": "Inspect", "content": { "application/json": { "schema": { "allOf": [{ "$ref": "#/components/schemas/SuccessEnvelope" }, { "type": "object", "properties": { "data": { "$ref": "#/components/schemas/InspectionData" } } }] } } } },
      "OpenOk": { "description": "Open lab", "content": { "application/json": { "schema": { "allOf": [{ "$ref": "#/components/schemas/SuccessEnvelope" }, { "type": "object", "properties": { "data": { "$ref": "#/components/schemas/OpenData" } } }] } } } },
      "ConsolesOk": { "description": "Consoles", "content": { "application/json": { "schema": { "allOf": [{ "$ref": "#/components/schemas/SuccessEnvelope" }, { "type": "object", "properties": { "data": { "$ref": "#/components/schemas/ConsolesData" } } }] } } } },
      "ExecOk": { "description": "Lifecycle exec", "content": { "application/json": { "schema": { "allOf": [{ "$ref": "#/components/schemas/SuccessEnvelope" }, { "type": "object", "properties": { "data": { "$ref": "#/components/schemas/BulkResult" } } }] } } } },
      "ConsoleExecOk": { "description": "Console exec", "content": { "application/json": { "schema": { "allOf": [{ "$ref": "#/components/schemas/SuccessEnvelope" }, { "type": "object", "properties": { "data": { "$ref": "#/components/schemas/ConsoleExecData" } } }] } } } },
      "ConsoleExecManyOk": { "description": "Console exec many", "content": { "application/json": { "schema": { "allOf": [{ "$ref": "#/components/schemas/SuccessEnvelope" }, { "type": "object", "properties": { "data": { "$ref": "#/components/schemas/ConsoleExecManyData" } } }] } } } },
      "ConsoleAttachOk": { "description": "Console attach", "content": { "application/json": { "schema": { "allOf": [{ "$ref": "#/components/schemas/SuccessEnvelope" }, { "type": "object", "properties": { "data": { "$ref": "#/components/schemas/ConsoleAttachData" } } }] } } } }
    },
    "schemas": {
      "LooseObject": {
        "type": "object",
        "additionalProperties": true
      },
      "ValidateData": {
        "type": "object",
        "required": ["status"],
        "additionalProperties": false,
        "properties": {
          "status": { "type": "string" }
        }
      },
      "BulkResult": {
        "type": "object",
        "required": ["requested", "started", "already_running", "already_starting", "stopped", "already_stopped", "wiped", "failed", "invalid"],
        "additionalProperties": false,
        "properties": {
          "requested": { "type": "integer" },
          "started": { "type": "integer" },
          "already_running": { "type": "integer" },
          "already_starting": { "type": "integer" },
          "stopped": { "type": "integer" },
          "already_stopped": { "type": "integer" },
          "wiped": { "type": "integer" },
          "failed": { "type": "integer" },
          "invalid": { "type": "integer" }
        }
      },
      "SuccessEnvelope": {
        "type": "object",
        "required": ["ok"],
        "additionalProperties": false,
        "properties": {
          "ok": { "type": "boolean" },
          "data": {},
          "error": { "type": "string" },
          "code": { "type": "string" }
        }
      },
      "ErrorEnvelope": {
        "type": "object",
        "required": ["ok"],
        "additionalProperties": false,
        "properties": {
          "ok": { "type": "boolean" },
          "error": { "type": "string" },
          "code": { "type": "string" },
          "data": {}
        }
      },
      "LoginRequest": {
        "type": "object",
        "required": ["username", "password"],
        "additionalProperties": false,
        "properties": {
          "username": { "type": "string" },
          "password": { "type": "string" }
        }
      },
      "LogoutRequest": {
        "type": "object",
        "additionalProperties": true
      },
      "ProjectPayload": {
        "type": "object",
        "additionalProperties": true,
        "description": "decodeProject body. Unknown fields are ignored. dir/out non-empty are rejected. Do not treat omitted optional fields as serialized defaults.",
        "properties": {
          "lab": { "type": "string" },
          "yaml": { "type": "string" },
          "files": { "type": "object", "additionalProperties": { "type": "string" } },
          "state": {},
          "source": {},
          "manifest": { "type": "string" },
          "prune": { "type": "boolean" },
          "wipe": { "type": "boolean" },
          "action": { "type": "string" },
          "node": { "type": "string" },
          "id": { "type": "integer" },
          "stopmode": { "type": "integer", "description": "0=graceful 1=poweroff 2=hibernate 3=auto. Omitted uses lifecycle.DefaultStopMode (3). Explicit 0 is graceful. No OpenAPI default." },
          "refresh": { "type": "boolean" },
          "replace": { "type": "boolean" },
          "plan_identity": { "type": "string" },
          "direction": { "type": "string", "description": "Wire string. Valid values are documented in semantics.yaml, not as an OpenAPI enum, so omitted vs to_eve vs empty vs invalid remain distinct on the wire." },
          "dir": { "type": "string" },
          "out": { "type": "string" }
        }
      },
      "AuthoringPayload": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "dir": { "type": "string" },
          "yaml": { "type": "string" },
          "node": { "type": "string" },
          "template": { "type": "string" },
          "attributes": { "type": "object", "additionalProperties": true },
          "excludeUsed": { "type": "boolean" },
          "eth_format": { "type": "string" }
        }
      },
      "ConsolePayload": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "lab": { "type": "string" },
          "yaml": { "type": "string" },
          "files": { "type": "object", "additionalProperties": { "type": "string" } },
          "state": {},
          "manifest": { "type": "string" },
          "node": { "type": "string" },
          "command": { "type": "string" },
          "timeout_ms": { "type": "integer" },
          "targets": { "type": "array", "items": { "$ref": "#/components/schemas/ConsoleTarget" } },
          "dir": { "type": "string" },
          "out": { "type": "string" }
        }
      },
      "ConsoleTarget": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "node": { "type": "string" },
          "command": { "type": "string" }
        }
      },
      "HealthData": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "status": { "type": "string" },
          "tls": { "type": "boolean" },
          "version": { "type": "string" }
        }
      },
      "LoginData": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "token": { "type": "string" },
          "username": { "type": "string" }
        }
      },
      "StatusOkData": {
        "type": "object",
        "additionalProperties": true,
        "properties": { "status": { "type": "string" } }
      },
      "SessionData": {
        "type": "object",
        "additionalProperties": true,
        "properties": { "username": { "type": "string" } }
      },
      "CapabilitiesData": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "eveReachable": { "type": "boolean" },
          "eveBaseUrl": { "type": "string" },
          "features": { "type": "object", "additionalProperties": { "type": "boolean" } },
          "projectModes": { "type": "object", "additionalProperties": { "$ref": "#/components/schemas/ProjectModeCaps" } }
        }
      },
      "ProjectModeCaps": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "inspect": { "type": "boolean" },
          "open": { "type": "boolean" },
          "console": { "type": "boolean" },
          "lifecycle": { "$ref": "#/components/schemas/LifecycleCaps" },
          "topology_mutation": { "type": "boolean" },
          "reconcile": { "type": "boolean" },
          "destroy": { "type": "boolean" },
          "presentation_restore": { "type": "boolean" },
          "source_mutation": { "type": "boolean" }
        }
      },
      "LifecycleCaps": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "start": { "type": "boolean" },
          "stop": { "type": "boolean" },
          "wipe": { "type": "boolean" }
        }
      },
      "Template": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "id": { "type": "string" },
          "description": { "type": "string" },
          "type": { "type": "string" },
          "provisioned": { "type": "boolean" },
          "configSupported": { "type": "boolean" }
        }
      },
      "TemplateDetail": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "id": { "type": "string" },
          "description": { "type": "string" },
          "type": { "type": "string" },
          "provisioned": { "type": "boolean" },
          "configSupported": { "type": "boolean" },
          "images": { "type": "array", "items": { "$ref": "#/components/schemas/TemplateImage" } },
          "default": { "type": "string" },
          "attributes": { "type": "array", "items": { "$ref": "#/components/schemas/TemplateAttribute" } }
        }
      },
      "TemplateImage": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "id": { "type": "string" },
          "available": { "type": "boolean" }
        }
      },
      "TemplateAttribute": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "name": { "type": "string" },
          "label": { "type": "string" },
          "kind": { "type": "string" },
          "group": { "type": "string" },
          "values": { "type": "array", "items": { "type": "string" } }
        }
      },
      "TemplatesData": {
        "type": "object",
        "additionalProperties": true,
        "properties": { "templates": { "type": "array", "items": { "$ref": "#/components/schemas/Template" } } }
      },
      "TemplateImagesData": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "template": { "type": "string" },
          "type": { "type": "string" },
          "provisioned": { "type": "boolean" },
          "default": { "type": "string" },
          "images": { "type": "array", "items": { "$ref": "#/components/schemas/TemplateImage" } }
        }
      },
      "TemplateAttributesData": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "template": { "type": "string" },
          "type": { "type": "string" },
          "attributes": { "type": "array", "items": { "$ref": "#/components/schemas/TemplateAttribute" } }
        }
      },
      "NetworkType": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "id": { "type": "string" },
          "label": { "type": "string" },
          "icon": { "type": "string" },
          "supported": { "type": "boolean" }
        }
      },
      "NetworkTypesData": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "types": { "type": "array", "items": { "$ref": "#/components/schemas/NetworkType" } },
          "natOnly": { "type": "boolean" }
        }
      },
      "Icon": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "id": { "type": "string" },
          "label": { "type": "string" }
        }
      },
      "IconsData": {
        "type": "object",
        "additionalProperties": true,
        "properties": { "icons": { "type": "array", "items": { "$ref": "#/components/schemas/Icon" } } }
      },
      "Iface": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "id": { "type": "integer" },
          "name": { "type": "string" },
          "type": { "type": "string" },
          "used": { "type": "boolean" }
        }
      },
      "LinkCompletionsData": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "node": { "type": "string" },
          "items": { "type": "array", "items": { "$ref": "#/components/schemas/Iface" } }
        }
      },
      "InterfacesPreviewData": {
        "type": "object",
        "additionalProperties": true,
        "properties": { "items": { "type": "array", "items": { "$ref": "#/components/schemas/Iface" } } }
      },
      "ImportData": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "name": { "type": "string" },
          "yaml": { "type": "string" },
          "files": { "type": "object", "additionalProperties": { "type": "string" } },
          "mode": { "type": "string" },
          "source_lab": { "type": "string" },
          "managed_lab": { "type": "string" },
          "lab": { "type": "string" },
          "state": {},
          "source": {}
        }
      },
      "DeployData": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "lab": { "type": "string" },
          "nodes": { "type": "integer" },
          "links": { "type": "integer" },
          "state": {},
          "unsupported": { "type": "array", "items": { "type": "string" } }
        }
      },
      "PlanSummary": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "creates": { "type": "integer" },
          "updates": { "type": "integer" },
          "deletes": { "type": "integer" },
          "blocked": { "type": "integer" }
        }
      },
      "PlanAction": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "op": { "type": "string" },
          "kind": { "type": "string" },
          "key": { "type": "string" },
          "side": { "type": "string" },
          "direction": { "type": "string" },
          "type": { "type": "string" },
          "applicable": { "type": "boolean" },
          "prune": { "type": "boolean" }
        }
      },
      "PlanData": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "lab": { "type": "string" },
          "exists": { "type": "boolean" },
          "summary": { "$ref": "#/components/schemas/PlanSummary" },
          "operations": { "type": "array", "items": { "$ref": "#/components/schemas/PlanAction" } },
          "actions": { "type": "array", "items": { "$ref": "#/components/schemas/PlanAction" } },
          "applicable": { "type": "boolean" },
          "blocked": { "type": "array", "items": { "$ref": "#/components/schemas/PlanAction" } },
          "text": { "type": "string" },
          "plan_identity": { "type": "string" },
          "locked": { "type": "boolean" },
          "lock": { "type": "integer" },
          "direction": { "type": "string" },
          "unsupported": { "type": "array", "items": { "type": "string" } }
        }
      },
      "ReconcileData": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "lab": { "type": "string" },
          "applied": { "type": "integer" },
          "skippedPrune": { "type": "integer" },
          "fullDeploy": { "type": "boolean" },
          "applicable": { "type": "boolean" },
          "summary": { "$ref": "#/components/schemas/PlanSummary" },
          "operations": { "type": "array", "items": { "$ref": "#/components/schemas/PlanAction" } },
          "blocked": { "type": "array", "items": { "$ref": "#/components/schemas/PlanAction" } },
          "direction": { "type": "string" },
          "state": {},
          "yaml": { "type": "string" },
          "files": { "type": "object", "additionalProperties": { "type": "string" } },
          "source": {},
          "manifest": { "type": "string" }
        }
      },
      "DestroyData": {
        "type": "object",
        "additionalProperties": true,
        "properties": { "lab": { "type": "string" } }
      },
      "ProjectStatusData": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "mode": { "type": "string" },
          "source_lab": { "nullable": true, "type": "string" },
          "managed_lab": { "nullable": true, "type": "string" },
          "runtime_lab": { "nullable": true, "type": "string" },
          "capabilities": { "$ref": "#/components/schemas/ProjectModeCaps" },
          "locked": { "type": "boolean" },
          "lock": { "type": "integer" }
        }
      },
      "InspectionData": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "observation": { "type": "boolean" },
          "desired_state": { "type": "boolean" },
          "mode": { "type": "string" },
          "source_lab": {},
          "managed_lab": {},
          "runtime_lab": { "type": "string" },
          "capabilities": { "$ref": "#/components/schemas/ProjectModeCaps" },
          "cached": { "type": "boolean" }
        }
      },
      "OpenData": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "url": { "type": "string" },
          "ttl": { "type": "integer" },
          "lab": { "type": "string" }
        }
      },
      "ConsoleRecord": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "id": { "type": "integer" },
          "key": { "type": "string" },
          "name": { "type": "string" },
          "template": { "type": "string" },
          "console": { "type": "string" },
          "status": { "type": "integer" },
          "url": { "type": "string" }
        }
      },
      "ConsolesData": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "lab": { "type": "string" },
          "html5": { "type": "boolean" },
          "consoles": { "type": "array", "items": { "$ref": "#/components/schemas/ConsoleRecord" } }
        }
      },
      "ConsoleExecData": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "node": { "type": "string" },
          "name": { "type": "string" },
          "console_type": { "type": "string" },
          "command": { "type": "string" },
          "output": { "type": "string" },
          "duration_ms": { "type": "integer" }
        }
      },
      "ConsoleExecManyData": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "results": {
            "type": "array",
            "items": { "allOf": [{ "$ref": "#/components/schemas/ConsoleExecData" }, { "type": "object", "additionalProperties": true, "properties": { "ok": { "type": "boolean" }, "code": { "type": "string" }, "error": { "type": "string" } } }] }
          }
        }
      },
      "ConsoleAttachData": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "node": { "type": "string" },
          "name": { "type": "string" },
          "console_type": { "type": "string" },
          "stream": { "type": "string" },
          "transport": { "type": "string", "enum": ["eve-telnet"] }
        }
      }
    }
  }
}
