From 103b14d1dfeba93ee71c1ed2f125b4689f503580 Mon Sep 17 00:00:00 2001 From: hsiegeln <37154749+hsiegeln@users.noreply.github.com> Date: Sat, 14 Mar 2026 14:24:33 +0100 Subject: [PATCH] Regenerate OpenAPI spec and TypeScript types from live server Co-Authored-By: Claude Opus 4.6 (1M context) --- ui/src/api/openapi.json | 1191 +------------------------- ui/src/api/schema.d.ts | 1755 ++++++++++++++++++++++++++++++++++----- 2 files changed, 1526 insertions(+), 1420 deletions(-) diff --git a/ui/src/api/openapi.json b/ui/src/api/openapi.json index 814f7318..17f3c836 100644 --- a/ui/src/api/openapi.json +++ b/ui/src/api/openapi.json @@ -1,1190 +1 @@ -{ - "openapi": "3.1.0", - "info": { - "title": "OpenAPI definition", - "version": "v0" - }, - "servers": [ - { - "url": "http://192.168.50.86:30081", - "description": "Generated server url" - } - ], - "tags": [ - { - "name": "Agent SSE", - "description": "Server-Sent Events endpoint for agent communication" - }, - { - "name": "Agent Commands", - "description": "Command push endpoints for agent communication" - }, - { - "name": "Agent Management", - "description": "Agent registration and lifecycle endpoints" - }, - { - "name": "Ingestion", - "description": "Data ingestion endpoints" - }, - { - "name": "Diagrams", - "description": "Diagram rendering endpoints" - }, - { - "name": "Detail", - "description": "Execution detail and processor snapshot endpoints" - }, - { - "name": "Search", - "description": "Transaction search endpoints" - } - ], - "paths": { - "/api/v1/search/executions": { - "get": { - "tags": [ - "Search" - ], - "summary": "Search executions with basic filters", - "operationId": "searchGet", - "parameters": [ - { - "name": "status", - "in": "query", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "timeFrom", - "in": "query", - "required": false, - "schema": { - "type": "string", - "format": "date-time" - } - }, - { - "name": "timeTo", - "in": "query", - "required": false, - "schema": { - "type": "string", - "format": "date-time" - } - }, - { - "name": "correlationId", - "in": "query", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "text", - "in": "query", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "routeId", - "in": "query", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "agentId", - "in": "query", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "processorType", - "in": "query", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "offset", - "in": "query", - "required": false, - "schema": { - "type": "integer", - "format": "int32", - "default": 0 - } - }, - { - "name": "limit", - "in": "query", - "required": false, - "schema": { - "type": "integer", - "format": "int32", - "default": 50 - } - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/SearchResultExecutionSummary" - } - } - } - } - } - }, - "post": { - "tags": [ - "Search" - ], - "summary": "Advanced search with all filters", - "operationId": "searchPost", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SearchRequest" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "OK", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/SearchResultExecutionSummary" - } - } - } - } - } - } - }, - "/api/v1/data/metrics": { - "post": { - "tags": [ - "Ingestion" - ], - "summary": "Ingest agent metrics", - "description": "Accepts an array of MetricsSnapshot objects", - "operationId": "ingestMetrics", - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "string" - } - } - }, - "required": true - }, - "responses": { - "202": { - "description": "Data accepted for processing" - }, - "503": { - "description": "Buffer full, retry later" - } - } - } - }, - "/api/v1/data/executions": { - "post": { - "tags": [ - "Ingestion" - ], - "summary": "Ingest route execution data", - "description": "Accepts a single RouteExecution or an array of RouteExecutions", - "operationId": "ingestExecutions", - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "string" - } - } - }, - "required": true - }, - "responses": { - "202": { - "description": "Data accepted for processing" - }, - "503": { - "description": "Buffer full, retry later" - } - } - } - }, - "/api/v1/data/diagrams": { - "post": { - "tags": [ - "Ingestion" - ], - "summary": "Ingest route diagram data", - "description": "Accepts a single RouteGraph or an array of RouteGraphs", - "operationId": "ingestDiagrams", - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "string" - } - } - }, - "required": true - }, - "responses": { - "202": { - "description": "Data accepted for processing" - }, - "503": { - "description": "Buffer full, retry later" - } - } - } - }, - "/api/v1/auth/refresh": { - "post": { - "tags": [ - "ui-auth-controller" - ], - "operationId": "refresh", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/RefreshRequest" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "OK", - "content": { - "*/*": { - "schema": { - "type": "object" - } - } - } - } - } - } - }, - "/api/v1/auth/login": { - "post": { - "tags": [ - "ui-auth-controller" - ], - "operationId": "login", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/LoginRequest" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "OK", - "content": { - "*/*": { - "schema": { - "type": "object" - } - } - } - } - } - } - }, - "/api/v1/agents/{id}/refresh": { - "post": { - "tags": [ - "Agent Management" - ], - "summary": "Refresh access token", - "description": "Issues a new access JWT from a valid refresh token", - "operationId": "refresh_1", - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "string" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "New access token issued", - "content": { - "*/*": { - "schema": { - "type": "string" - } - } - } - }, - "401": { - "description": "Invalid or expired refresh token", - "content": { - "*/*": { - "schema": { - "type": "string" - } - } - } - }, - "404": { - "description": "Agent not found", - "content": { - "*/*": { - "schema": { - "type": "string" - } - } - } - } - } - } - }, - "/api/v1/agents/{id}/heartbeat": { - "post": { - "tags": [ - "Agent Management" - ], - "summary": "Agent heartbeat ping", - "description": "Updates the agent's last heartbeat timestamp", - "operationId": "heartbeat", - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Heartbeat accepted" - }, - "404": { - "description": "Agent not registered" - } - } - } - }, - "/api/v1/agents/{id}/commands": { - "post": { - "tags": [ - "Agent Commands" - ], - "summary": "Send command to a specific agent", - "description": "Sends a config-update, deep-trace, or replay command to the specified agent", - "operationId": "sendCommand", - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "string" - } - } - }, - "required": true - }, - "responses": { - "202": { - "description": "Command accepted", - "content": { - "*/*": { - "schema": { - "type": "string" - } - } - } - }, - "400": { - "description": "Invalid command payload", - "content": { - "*/*": { - "schema": { - "type": "string" - } - } - } - }, - "404": { - "description": "Agent not registered", - "content": { - "*/*": { - "schema": { - "type": "string" - } - } - } - } - } - } - }, - "/api/v1/agents/{id}/commands/{commandId}/ack": { - "post": { - "tags": [ - "Agent Commands" - ], - "summary": "Acknowledge command receipt", - "description": "Agent acknowledges that it has received and processed a command", - "operationId": "acknowledgeCommand", - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "commandId", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Command acknowledged" - }, - "404": { - "description": "Command not found" - } - } - } - }, - "/api/v1/agents/register": { - "post": { - "tags": [ - "Agent Management" - ], - "summary": "Register an agent", - "description": "Registers a new agent or re-registers an existing one. Requires bootstrap token in Authorization header.", - "operationId": "register", - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "string" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "Agent registered successfully", - "content": { - "*/*": { - "schema": { - "type": "string" - } - } - } - }, - "400": { - "description": "Invalid registration payload", - "content": { - "*/*": { - "schema": { - "type": "string" - } - } - } - }, - "401": { - "description": "Missing or invalid bootstrap token", - "content": { - "*/*": { - "schema": { - "type": "string" - } - } - } - } - } - } - }, - "/api/v1/agents/groups/{group}/commands": { - "post": { - "tags": [ - "Agent Commands" - ], - "summary": "Send command to all agents in a group", - "description": "Sends a command to all LIVE agents in the specified group", - "operationId": "sendGroupCommand", - "parameters": [ - { - "name": "group", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "string" - } - } - }, - "required": true - }, - "responses": { - "202": { - "description": "Commands accepted", - "content": { - "*/*": { - "schema": { - "type": "string" - } - } - } - }, - "400": { - "description": "Invalid command payload", - "content": { - "*/*": { - "schema": { - "type": "string" - } - } - } - } - } - } - }, - "/api/v1/agents/commands": { - "post": { - "tags": [ - "Agent Commands" - ], - "summary": "Broadcast command to all live agents", - "description": "Sends a command to all agents currently in LIVE state", - "operationId": "broadcastCommand", - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "string" - } - } - }, - "required": true - }, - "responses": { - "202": { - "description": "Commands accepted", - "content": { - "*/*": { - "schema": { - "type": "string" - } - } - } - }, - "400": { - "description": "Invalid command payload", - "content": { - "*/*": { - "schema": { - "type": "string" - } - } - } - } - } - } - }, - "/api/v1/search/stats": { - "get": { - "tags": [ - "Search" - ], - "summary": "Aggregate execution stats (P99 latency, active count)", - "operationId": "stats", - "parameters": [ - { - "name": "from", - "in": "query", - "required": true, - "schema": { - "type": "string", - "format": "date-time" - } - }, - { - "name": "to", - "in": "query", - "required": false, - "schema": { - "type": "string", - "format": "date-time" - } - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ExecutionStats" - } - } - } - } - } - } - }, - "/api/v1/executions/{executionId}": { - "get": { - "tags": [ - "Detail" - ], - "summary": "Get execution detail with nested processor tree", - "operationId": "getDetail", - "parameters": [ - { - "name": "executionId", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ExecutionDetail" - } - } - } - } - } - } - }, - "/api/v1/executions/{executionId}/processors/{index}/snapshot": { - "get": { - "tags": [ - "Detail" - ], - "summary": "Get exchange snapshot for a specific processor", - "operationId": "getProcessorSnapshot", - "parameters": [ - { - "name": "executionId", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "index", - "in": "path", - "required": true, - "schema": { - "type": "integer", - "format": "int32" - } - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "*/*": { - "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } - } - } - } - } - } - } - }, - "/api/v1/diagrams/{contentHash}/render": { - "get": { - "tags": [ - "Diagrams" - ], - "summary": "Render a route diagram", - "description": "Returns SVG (default) or JSON layout based on Accept header", - "operationId": "renderDiagram", - "parameters": [ - { - "name": "contentHash", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Diagram rendered successfully", - "content": { - "*/*": { - "schema": { - "type": "object" - } - } - } - }, - "404": { - "description": "Diagram not found", - "content": { - "*/*": { - "schema": { - "type": "object" - } - } - } - } - } - } - }, - "/api/v1/agents": { - "get": { - "tags": [ - "Agent Management" - ], - "summary": "List all agents", - "description": "Returns all registered agents, optionally filtered by status", - "operationId": "listAgents", - "parameters": [ - { - "name": "status", - "in": "query", - "required": false, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Agent list returned", - "content": { - "*/*": { - "schema": { - "type": "string" - } - } - } - }, - "400": { - "description": "Invalid status filter", - "content": { - "*/*": { - "schema": { - "type": "string" - } - } - } - } - } - } - }, - "/api/v1/agents/{id}/events": { - "get": { - "tags": [ - "Agent SSE" - ], - "summary": "Open SSE event stream", - "description": "Opens a Server-Sent Events stream for the specified agent. Commands (config-update, deep-trace, replay) are pushed as events. Ping keepalive comments sent every 15 seconds.", - "operationId": "events", - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "Last-Event-ID", - "in": "header", - "description": "Last received event ID (no replay, acknowledged only)", - "required": false, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "SSE stream opened", - "content": { - "text/event-stream": { - "schema": { - "$ref": "#/components/schemas/SseEmitter" - } - } - } - }, - "404": { - "description": "Agent not registered", - "content": { - "text/event-stream": { - "schema": { - "$ref": "#/components/schemas/SseEmitter" - } - } - } - } - } - } - } - }, - "components": { - "schemas": { - "SearchRequest": { - "type": "object", - "properties": { - "status": { - "type": "string" - }, - "timeFrom": { - "type": "string", - "format": "date-time" - }, - "timeTo": { - "type": "string", - "format": "date-time" - }, - "durationMin": { - "type": "integer", - "format": "int64" - }, - "durationMax": { - "type": "integer", - "format": "int64" - }, - "correlationId": { - "type": "string" - }, - "text": { - "type": "string" - }, - "textInBody": { - "type": "string" - }, - "textInHeaders": { - "type": "string" - }, - "textInErrors": { - "type": "string" - }, - "routeId": { - "type": "string" - }, - "agentId": { - "type": "string" - }, - "processorType": { - "type": "string" - }, - "offset": { - "type": "integer", - "format": "int32" - }, - "limit": { - "type": "integer", - "format": "int32" - } - } - }, - "ExecutionSummary": { - "type": "object", - "properties": { - "executionId": { - "type": "string" - }, - "routeId": { - "type": "string" - }, - "agentId": { - "type": "string" - }, - "status": { - "type": "string" - }, - "startTime": { - "type": "string", - "format": "date-time" - }, - "endTime": { - "type": "string", - "format": "date-time" - }, - "durationMs": { - "type": "integer", - "format": "int64" - }, - "correlationId": { - "type": "string" - }, - "errorMessage": { - "type": "string" - }, - "diagramContentHash": { - "type": "string" - } - } - }, - "SearchResultExecutionSummary": { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ExecutionSummary" - } - }, - "total": { - "type": "integer", - "format": "int64" - }, - "offset": { - "type": "integer", - "format": "int32" - }, - "limit": { - "type": "integer", - "format": "int32" - } - } - }, - "RefreshRequest": { - "type": "object", - "properties": { - "refreshToken": { - "type": "string" - } - } - }, - "LoginRequest": { - "type": "object", - "properties": { - "username": { - "type": "string" - }, - "password": { - "type": "string" - } - } - }, - "ExecutionStats": { - "type": "object", - "properties": { - "totalCount": { - "type": "integer", - "format": "int64" - }, - "failedCount": { - "type": "integer", - "format": "int64" - }, - "avgDurationMs": { - "type": "integer", - "format": "int64" - }, - "p99LatencyMs": { - "type": "integer", - "format": "int64" - }, - "activeCount": { - "type": "integer", - "format": "int64" - }, - "totalToday": { - "type": "integer", - "format": "int64" - }, - "prevTotalCount": { - "type": "integer", - "format": "int64" - }, - "prevFailedCount": { - "type": "integer", - "format": "int64" - }, - "prevAvgDurationMs": { - "type": "integer", - "format": "int64" - }, - "prevP99LatencyMs": { - "type": "integer", - "format": "int64" - } - } - }, - "ExecutionDetail": { - "type": "object", - "properties": { - "executionId": { - "type": "string" - }, - "routeId": { - "type": "string" - }, - "agentId": { - "type": "string" - }, - "status": { - "type": "string" - }, - "startTime": { - "type": "string", - "format": "date-time" - }, - "endTime": { - "type": "string", - "format": "date-time" - }, - "durationMs": { - "type": "integer", - "format": "int64" - }, - "correlationId": { - "type": "string" - }, - "exchangeId": { - "type": "string" - }, - "errorMessage": { - "type": "string" - }, - "errorStackTrace": { - "type": "string" - }, - "diagramContentHash": { - "type": "string" - }, - "processors": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ProcessorNode" - } - } - } - }, - "ProcessorNode": { - "type": "object", - "properties": { - "processorId": { - "type": "string" - }, - "processorType": { - "type": "string" - }, - "status": { - "type": "string" - }, - "startTime": { - "type": "string", - "format": "date-time" - }, - "endTime": { - "type": "string", - "format": "date-time" - }, - "durationMs": { - "type": "integer", - "format": "int64" - }, - "diagramNodeId": { - "type": "string" - }, - "errorMessage": { - "type": "string" - }, - "errorStackTrace": { - "type": "string" - } - } - }, - "SseEmitter": { - "type": "object", - "properties": { - "timeout": { - "type": "integer", - "format": "int64" - } - } - } - } - } -} \ No newline at end of file +{"openapi":"3.1.0","info":{"title":"OpenAPI definition","version":"v0"},"servers":[{"url":"http://192.168.50.86:30081","description":"Generated server url"}],"tags":[{"name":"Agent SSE","description":"Server-Sent Events endpoint for agent communication"},{"name":"Agent Commands","description":"Command push endpoints for agent communication"},{"name":"User Admin","description":"User management (ADMIN only)"},{"name":"Agent Management","description":"Agent registration and lifecycle endpoints"},{"name":"Ingestion","description":"Data ingestion endpoints"},{"name":"OIDC Config Admin","description":"OIDC provider configuration (ADMIN only)"},{"name":"Diagrams","description":"Diagram rendering endpoints"},{"name":"Detail","description":"Execution detail and processor snapshot endpoints"},{"name":"Search","description":"Transaction search endpoints"}],"paths":{"/api/v1/admin/users/{userId}/roles":{"put":{"tags":["User Admin"],"summary":"Update user roles","operationId":"updateRoles","parameters":[{"name":"userId","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RolesRequest"}}},"required":true},"responses":{"200":{"description":"Roles updated"},"404":{"description":"User not found"}}}},"/api/v1/admin/oidc":{"get":{"tags":["OIDC Config Admin"],"summary":"Get OIDC configuration","operationId":"getConfig","responses":{"200":{"description":"Current OIDC configuration (client_secret masked)","content":{"*/*":{"schema":{"type":"object"}}}}}},"put":{"tags":["OIDC Config Admin"],"summary":"Save OIDC configuration","operationId":"saveConfig","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OidcConfigRequest"}}},"required":true},"responses":{"200":{"description":"Configuration saved","content":{"*/*":{"schema":{"type":"object"}}}},"400":{"description":"Invalid configuration","content":{"*/*":{"schema":{"type":"object"}}}}}},"delete":{"tags":["OIDC Config Admin"],"summary":"Delete OIDC configuration","operationId":"deleteConfig","responses":{"204":{"description":"Configuration deleted"}}}},"/api/v1/search/executions":{"get":{"tags":["Search"],"summary":"Search executions with basic filters","operationId":"searchGet","parameters":[{"name":"status","in":"query","required":false,"schema":{"type":"string"}},{"name":"timeFrom","in":"query","required":false,"schema":{"type":"string","format":"date-time"}},{"name":"timeTo","in":"query","required":false,"schema":{"type":"string","format":"date-time"}},{"name":"correlationId","in":"query","required":false,"schema":{"type":"string"}},{"name":"text","in":"query","required":false,"schema":{"type":"string"}},{"name":"routeId","in":"query","required":false,"schema":{"type":"string"}},{"name":"agentId","in":"query","required":false,"schema":{"type":"string"}},{"name":"processorType","in":"query","required":false,"schema":{"type":"string"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","format":"int32","default":0}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","format":"int32","default":50}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/SearchResultExecutionSummary"}}}}}},"post":{"tags":["Search"],"summary":"Advanced search with all filters","operationId":"searchPost","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/SearchResultExecutionSummary"}}}}}}},"/api/v1/data/metrics":{"post":{"tags":["Ingestion"],"summary":"Ingest agent metrics","description":"Accepts an array of MetricsSnapshot objects","operationId":"ingestMetrics","requestBody":{"content":{"application/json":{"schema":{"type":"string"}}},"required":true},"responses":{"202":{"description":"Data accepted for processing"},"503":{"description":"Buffer full, retry later"}}}},"/api/v1/data/executions":{"post":{"tags":["Ingestion"],"summary":"Ingest route execution data","description":"Accepts a single RouteExecution or an array of RouteExecutions","operationId":"ingestExecutions","requestBody":{"content":{"application/json":{"schema":{"type":"string"}}},"required":true},"responses":{"202":{"description":"Data accepted for processing"},"503":{"description":"Buffer full, retry later"}}}},"/api/v1/data/diagrams":{"post":{"tags":["Ingestion"],"summary":"Ingest route diagram data","description":"Accepts a single RouteGraph or an array of RouteGraphs","operationId":"ingestDiagrams","requestBody":{"content":{"application/json":{"schema":{"type":"string"}}},"required":true},"responses":{"202":{"description":"Data accepted for processing"},"503":{"description":"Buffer full, retry later"}}}},"/api/v1/auth/refresh":{"post":{"tags":["ui-auth-controller"],"operationId":"refresh","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RefreshRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object"}}}}}}},"/api/v1/auth/oidc/callback":{"post":{"tags":["oidc-auth-controller"],"operationId":"callback","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CallbackRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object"}}}}}}},"/api/v1/auth/login":{"post":{"tags":["ui-auth-controller"],"operationId":"login","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object"}}}}}}},"/api/v1/agents/{id}/refresh":{"post":{"tags":["Agent Management"],"summary":"Refresh access token","description":"Issues a new access JWT from a valid refresh token","operationId":"refresh_1","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"string"}}},"required":true},"responses":{"200":{"description":"New access token issued","content":{"*/*":{"schema":{"type":"string"}}}},"401":{"description":"Invalid or expired refresh token","content":{"*/*":{"schema":{"type":"string"}}}},"404":{"description":"Agent not found","content":{"*/*":{"schema":{"type":"string"}}}}}}},"/api/v1/agents/{id}/heartbeat":{"post":{"tags":["Agent Management"],"summary":"Agent heartbeat ping","description":"Updates the agent's last heartbeat timestamp","operationId":"heartbeat","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Heartbeat accepted"},"404":{"description":"Agent not registered"}}}},"/api/v1/agents/{id}/commands":{"post":{"tags":["Agent Commands"],"summary":"Send command to a specific agent","description":"Sends a config-update, deep-trace, or replay command to the specified agent","operationId":"sendCommand","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"string"}}},"required":true},"responses":{"202":{"description":"Command accepted","content":{"*/*":{"schema":{"type":"string"}}}},"400":{"description":"Invalid command payload","content":{"*/*":{"schema":{"type":"string"}}}},"404":{"description":"Agent not registered","content":{"*/*":{"schema":{"type":"string"}}}}}}},"/api/v1/agents/{id}/commands/{commandId}/ack":{"post":{"tags":["Agent Commands"],"summary":"Acknowledge command receipt","description":"Agent acknowledges that it has received and processed a command","operationId":"acknowledgeCommand","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"commandId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Command acknowledged"},"404":{"description":"Command not found"}}}},"/api/v1/agents/register":{"post":{"tags":["Agent Management"],"summary":"Register an agent","description":"Registers a new agent or re-registers an existing one. Requires bootstrap token in Authorization header.","operationId":"register","requestBody":{"content":{"application/json":{"schema":{"type":"string"}}},"required":true},"responses":{"200":{"description":"Agent registered successfully","content":{"*/*":{"schema":{"type":"string"}}}},"400":{"description":"Invalid registration payload","content":{"*/*":{"schema":{"type":"string"}}}},"401":{"description":"Missing or invalid bootstrap token","content":{"*/*":{"schema":{"type":"string"}}}}}}},"/api/v1/agents/groups/{group}/commands":{"post":{"tags":["Agent Commands"],"summary":"Send command to all agents in a group","description":"Sends a command to all LIVE agents in the specified group","operationId":"sendGroupCommand","parameters":[{"name":"group","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"string"}}},"required":true},"responses":{"202":{"description":"Commands accepted","content":{"*/*":{"schema":{"type":"string"}}}},"400":{"description":"Invalid command payload","content":{"*/*":{"schema":{"type":"string"}}}}}}},"/api/v1/agents/commands":{"post":{"tags":["Agent Commands"],"summary":"Broadcast command to all live agents","description":"Sends a command to all agents currently in LIVE state","operationId":"broadcastCommand","requestBody":{"content":{"application/json":{"schema":{"type":"string"}}},"required":true},"responses":{"202":{"description":"Commands accepted","content":{"*/*":{"schema":{"type":"string"}}}},"400":{"description":"Invalid command payload","content":{"*/*":{"schema":{"type":"string"}}}}}}},"/api/v1/admin/oidc/test":{"post":{"tags":["OIDC Config Admin"],"summary":"Test OIDC provider connectivity","operationId":"testConnection","responses":{"200":{"description":"Provider reachable","content":{"*/*":{"schema":{"type":"object"}}}},"400":{"description":"Provider unreachable or misconfigured","content":{"*/*":{"schema":{"type":"object"}}}}}}},"/api/v1/search/stats":{"get":{"tags":["Search"],"summary":"Aggregate execution stats (P99 latency, active count)","operationId":"stats","parameters":[{"name":"from","in":"query","required":true,"schema":{"type":"string","format":"date-time"}},{"name":"to","in":"query","required":false,"schema":{"type":"string","format":"date-time"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ExecutionStats"}}}}}}},"/api/v1/search/stats/timeseries":{"get":{"tags":["Search"],"summary":"Bucketed time-series stats over a time window","operationId":"timeseries","parameters":[{"name":"from","in":"query","required":true,"schema":{"type":"string","format":"date-time"}},{"name":"to","in":"query","required":false,"schema":{"type":"string","format":"date-time"}},{"name":"buckets","in":"query","required":false,"schema":{"type":"integer","format":"int32","default":24}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/StatsTimeseries"}}}}}}},"/api/v1/executions/{executionId}":{"get":{"tags":["Detail"],"summary":"Get execution detail with nested processor tree","operationId":"getDetail","parameters":[{"name":"executionId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ExecutionDetail"}}}}}}},"/api/v1/executions/{executionId}/processors/{index}/snapshot":{"get":{"tags":["Detail"],"summary":"Get exchange snapshot for a specific processor","operationId":"getProcessorSnapshot","parameters":[{"name":"executionId","in":"path","required":true,"schema":{"type":"string"}},{"name":"index","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object","additionalProperties":{"type":"string"}}}}}}}},"/api/v1/diagrams/{contentHash}/render":{"get":{"tags":["Diagrams"],"summary":"Render a route diagram","description":"Returns SVG (default) or JSON layout based on Accept header","operationId":"renderDiagram","parameters":[{"name":"contentHash","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Diagram rendered successfully","content":{"*/*":{"schema":{"type":"object"}}}},"404":{"description":"Diagram not found","content":{"*/*":{"schema":{"type":"object"}}}}}}},"/api/v1/auth/oidc/config":{"get":{"tags":["oidc-auth-controller"],"operationId":"getConfig_1","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object"}}}}}}},"/api/v1/agents":{"get":{"tags":["Agent Management"],"summary":"List all agents","description":"Returns all registered agents, optionally filtered by status","operationId":"listAgents","parameters":[{"name":"status","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Agent list returned","content":{"*/*":{"schema":{"type":"string"}}}},"400":{"description":"Invalid status filter","content":{"*/*":{"schema":{"type":"string"}}}}}}},"/api/v1/agents/{id}/events":{"get":{"tags":["Agent SSE"],"summary":"Open SSE event stream","description":"Opens a Server-Sent Events stream for the specified agent. Commands (config-update, deep-trace, replay) are pushed as events. Ping keepalive comments sent every 15 seconds.","operationId":"events","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"Last-Event-ID","in":"header","description":"Last received event ID (no replay, acknowledged only)","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"SSE stream opened","content":{"text/event-stream":{"schema":{"$ref":"#/components/schemas/SseEmitter"}}}},"404":{"description":"Agent not registered","content":{"text/event-stream":{"schema":{"$ref":"#/components/schemas/SseEmitter"}}}}}}},"/api/v1/admin/users":{"get":{"tags":["User Admin"],"summary":"List all users","operationId":"listUsers","responses":{"200":{"description":"User list returned","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/UserInfo"}}}}}}}},"/api/v1/admin/users/{userId}":{"get":{"tags":["User Admin"],"summary":"Get user by ID","operationId":"getUser","parameters":[{"name":"userId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"User found","content":{"*/*":{"schema":{"$ref":"#/components/schemas/UserInfo"}}}},"404":{"description":"User not found","content":{"*/*":{"schema":{"$ref":"#/components/schemas/UserInfo"}}}}}},"delete":{"tags":["User Admin"],"summary":"Delete user","operationId":"deleteUser","parameters":[{"name":"userId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"User deleted"}}}}},"components":{"schemas":{"RolesRequest":{"type":"object","properties":{"roles":{"type":"array","items":{"type":"string"}}}},"OidcConfigRequest":{"type":"object","properties":{"enabled":{"type":"boolean"},"issuerUri":{"type":"string"},"clientId":{"type":"string"},"clientSecret":{"type":"string"},"rolesClaim":{"type":"string"},"defaultRoles":{"type":"array","items":{"type":"string"}},"autoSignup":{"type":"boolean"}}},"SearchRequest":{"type":"object","properties":{"status":{"type":"string"},"timeFrom":{"type":"string","format":"date-time"},"timeTo":{"type":"string","format":"date-time"},"durationMin":{"type":"integer","format":"int64"},"durationMax":{"type":"integer","format":"int64"},"correlationId":{"type":"string"},"text":{"type":"string"},"textInBody":{"type":"string"},"textInHeaders":{"type":"string"},"textInErrors":{"type":"string"},"routeId":{"type":"string"},"agentId":{"type":"string"},"processorType":{"type":"string"},"offset":{"type":"integer","format":"int32"},"limit":{"type":"integer","format":"int32"}}},"ExecutionSummary":{"type":"object","properties":{"executionId":{"type":"string"},"routeId":{"type":"string"},"agentId":{"type":"string"},"status":{"type":"string"},"startTime":{"type":"string","format":"date-time"},"endTime":{"type":"string","format":"date-time"},"durationMs":{"type":"integer","format":"int64"},"correlationId":{"type":"string"},"errorMessage":{"type":"string"},"diagramContentHash":{"type":"string"}}},"SearchResultExecutionSummary":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/ExecutionSummary"}},"total":{"type":"integer","format":"int64"},"offset":{"type":"integer","format":"int32"},"limit":{"type":"integer","format":"int32"}}},"RefreshRequest":{"type":"object","properties":{"refreshToken":{"type":"string"}}},"CallbackRequest":{"type":"object","properties":{"code":{"type":"string"},"redirectUri":{"type":"string"}}},"LoginRequest":{"type":"object","properties":{"username":{"type":"string"},"password":{"type":"string"}}},"ExecutionStats":{"type":"object","properties":{"totalCount":{"type":"integer","format":"int64"},"failedCount":{"type":"integer","format":"int64"},"avgDurationMs":{"type":"integer","format":"int64"},"p99LatencyMs":{"type":"integer","format":"int64"},"activeCount":{"type":"integer","format":"int64"},"totalToday":{"type":"integer","format":"int64"},"prevTotalCount":{"type":"integer","format":"int64"},"prevFailedCount":{"type":"integer","format":"int64"},"prevAvgDurationMs":{"type":"integer","format":"int64"},"prevP99LatencyMs":{"type":"integer","format":"int64"}}},"StatsTimeseries":{"type":"object","properties":{"buckets":{"type":"array","items":{"$ref":"#/components/schemas/TimeseriesBucket"}}}},"TimeseriesBucket":{"type":"object","properties":{"time":{"type":"string","format":"date-time"},"totalCount":{"type":"integer","format":"int64"},"failedCount":{"type":"integer","format":"int64"},"avgDurationMs":{"type":"integer","format":"int64"},"p99DurationMs":{"type":"integer","format":"int64"},"activeCount":{"type":"integer","format":"int64"}}},"ExecutionDetail":{"type":"object","properties":{"executionId":{"type":"string"},"routeId":{"type":"string"},"agentId":{"type":"string"},"status":{"type":"string"},"startTime":{"type":"string","format":"date-time"},"endTime":{"type":"string","format":"date-time"},"durationMs":{"type":"integer","format":"int64"},"correlationId":{"type":"string"},"exchangeId":{"type":"string"},"errorMessage":{"type":"string"},"errorStackTrace":{"type":"string"},"diagramContentHash":{"type":"string"},"processors":{"type":"array","items":{"$ref":"#/components/schemas/ProcessorNode"}}}},"ProcessorNode":{"type":"object","properties":{"processorId":{"type":"string"},"processorType":{"type":"string"},"status":{"type":"string"},"startTime":{"type":"string","format":"date-time"},"endTime":{"type":"string","format":"date-time"},"durationMs":{"type":"integer","format":"int64"},"diagramNodeId":{"type":"string"},"errorMessage":{"type":"string"},"errorStackTrace":{"type":"string"}}},"SseEmitter":{"type":"object","properties":{"timeout":{"type":"integer","format":"int64"}}},"UserInfo":{"type":"object","properties":{"userId":{"type":"string"},"provider":{"type":"string"},"email":{"type":"string"},"displayName":{"type":"string"},"roles":{"type":"array","items":{"type":"string"}},"createdAt":{"type":"string","format":"date-time"}}}}}} \ No newline at end of file diff --git a/ui/src/api/schema.d.ts b/ui/src/api/schema.d.ts index 28b67f04..edb9fea5 100644 --- a/ui/src/api/schema.d.ts +++ b/ui/src/api/schema.d.ts @@ -1,256 +1,1551 @@ /** - * Types matching the cameleer3 server REST API (validated against live OpenAPI spec). - * Generated from: GET /api/v1/api-docs + * This file was auto-generated by openapi-typescript. + * Do not make direct changes to the file. */ export interface paths { - '/auth/login': { - post: { - requestBody: { - content: { - 'application/json': { - username: string; - password: string; - }; + "/api/v1/admin/users/{userId}/roles": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; }; - }; - responses: { - 200: { - content: { - 'application/json': { - accessToken: string; - refreshToken: string; + get?: never; + /** Update user roles */ + put: operations["updateRoles"]; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/admin/oidc": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Get OIDC configuration */ + get: operations["getConfig"]; + /** Save OIDC configuration */ + put: operations["saveConfig"]; + post?: never; + /** Delete OIDC configuration */ + delete: operations["deleteConfig"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/search/executions": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Search executions with basic filters */ + get: operations["searchGet"]; + put?: never; + /** Advanced search with all filters */ + post: operations["searchPost"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/data/metrics": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Ingest agent metrics + * @description Accepts an array of MetricsSnapshot objects + */ + post: operations["ingestMetrics"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/data/executions": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Ingest route execution data + * @description Accepts a single RouteExecution or an array of RouteExecutions + */ + post: operations["ingestExecutions"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/data/diagrams": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Ingest route diagram data + * @description Accepts a single RouteGraph or an array of RouteGraphs + */ + post: operations["ingestDiagrams"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/auth/refresh": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post: operations["refresh"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/auth/oidc/callback": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post: operations["callback"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/auth/login": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post: operations["login"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/agents/{id}/refresh": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Refresh access token + * @description Issues a new access JWT from a valid refresh token + */ + post: operations["refresh_1"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/agents/{id}/heartbeat": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Agent heartbeat ping + * @description Updates the agent's last heartbeat timestamp + */ + post: operations["heartbeat"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/agents/{id}/commands": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Send command to a specific agent + * @description Sends a config-update, deep-trace, or replay command to the specified agent + */ + post: operations["sendCommand"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/agents/{id}/commands/{commandId}/ack": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Acknowledge command receipt + * @description Agent acknowledges that it has received and processed a command + */ + post: operations["acknowledgeCommand"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/agents/register": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Register an agent + * @description Registers a new agent or re-registers an existing one. Requires bootstrap token in Authorization header. + */ + post: operations["register"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/agents/groups/{group}/commands": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Send command to all agents in a group + * @description Sends a command to all LIVE agents in the specified group + */ + post: operations["sendGroupCommand"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/agents/commands": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Broadcast command to all live agents + * @description Sends a command to all agents currently in LIVE state + */ + post: operations["broadcastCommand"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/admin/oidc/test": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Test OIDC provider connectivity */ + post: operations["testConnection"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/search/stats": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Aggregate execution stats (P99 latency, active count) */ + get: operations["stats"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/search/stats/timeseries": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Bucketed time-series stats over a time window */ + get: operations["timeseries"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/executions/{executionId}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Get execution detail with nested processor tree */ + get: operations["getDetail"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/executions/{executionId}/processors/{index}/snapshot": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Get exchange snapshot for a specific processor */ + get: operations["getProcessorSnapshot"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/diagrams/{contentHash}/render": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Render a route diagram + * @description Returns SVG (default) or JSON layout based on Accept header + */ + get: operations["renderDiagram"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/auth/oidc/config": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: operations["getConfig_1"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/agents": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List all agents + * @description Returns all registered agents, optionally filtered by status + */ + get: operations["listAgents"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/agents/{id}/events": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Open SSE event stream + * @description Opens a Server-Sent Events stream for the specified agent. Commands (config-update, deep-trace, replay) are pushed as events. Ping keepalive comments sent every 15 seconds. + */ + get: operations["events"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/admin/users": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** List all users */ + get: operations["listUsers"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/admin/users/{userId}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Get user by ID */ + get: operations["getUser"]; + put?: never; + post?: never; + /** Delete user */ + delete: operations["deleteUser"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; +} +export type webhooks = Record; +export interface components { + schemas: { + RolesRequest: { + roles?: string[]; + }; + OidcConfigRequest: { + enabled?: boolean; + issuerUri?: string; + clientId?: string; + clientSecret?: string; + rolesClaim?: string; + defaultRoles?: string[]; + autoSignup?: boolean; + }; + SearchRequest: { + status?: string; + /** Format: date-time */ + timeFrom?: string; + /** Format: date-time */ + timeTo?: string; + /** Format: int64 */ + durationMin?: number; + /** Format: int64 */ + durationMax?: number; + correlationId?: string; + text?: string; + textInBody?: string; + textInHeaders?: string; + textInErrors?: string; + routeId?: string; + agentId?: string; + processorType?: string; + /** Format: int32 */ + offset?: number; + /** Format: int32 */ + limit?: number; + }; + ExecutionSummary: { + executionId?: string; + routeId?: string; + agentId?: string; + status?: string; + /** Format: date-time */ + startTime?: string; + /** Format: date-time */ + endTime?: string; + /** Format: int64 */ + durationMs?: number; + correlationId?: string; + errorMessage?: string; + diagramContentHash?: string; + }; + SearchResultExecutionSummary: { + data?: components["schemas"]["ExecutionSummary"][]; + /** Format: int64 */ + total?: number; + /** Format: int32 */ + offset?: number; + /** Format: int32 */ + limit?: number; + }; + RefreshRequest: { + refreshToken?: string; + }; + CallbackRequest: { + code?: string; + redirectUri?: string; + }; + LoginRequest: { + username?: string; + password?: string; + }; + ExecutionStats: { + /** Format: int64 */ + totalCount?: number; + /** Format: int64 */ + failedCount?: number; + /** Format: int64 */ + avgDurationMs?: number; + /** Format: int64 */ + p99LatencyMs?: number; + /** Format: int64 */ + activeCount?: number; + /** Format: int64 */ + totalToday?: number; + /** Format: int64 */ + prevTotalCount?: number; + /** Format: int64 */ + prevFailedCount?: number; + /** Format: int64 */ + prevAvgDurationMs?: number; + /** Format: int64 */ + prevP99LatencyMs?: number; + }; + StatsTimeseries: { + buckets?: components["schemas"]["TimeseriesBucket"][]; + }; + TimeseriesBucket: { + /** Format: date-time */ + time?: string; + /** Format: int64 */ + totalCount?: number; + /** Format: int64 */ + failedCount?: number; + /** Format: int64 */ + avgDurationMs?: number; + /** Format: int64 */ + p99DurationMs?: number; + /** Format: int64 */ + activeCount?: number; + }; + ExecutionDetail: { + executionId?: string; + routeId?: string; + agentId?: string; + status?: string; + /** Format: date-time */ + startTime?: string; + /** Format: date-time */ + endTime?: string; + /** Format: int64 */ + durationMs?: number; + correlationId?: string; + exchangeId?: string; + errorMessage?: string; + errorStackTrace?: string; + diagramContentHash?: string; + processors?: components["schemas"]["ProcessorNode"][]; + }; + ProcessorNode: { + processorId?: string; + processorType?: string; + status?: string; + /** Format: date-time */ + startTime?: string; + /** Format: date-time */ + endTime?: string; + /** Format: int64 */ + durationMs?: number; + diagramNodeId?: string; + errorMessage?: string; + errorStackTrace?: string; + }; + SseEmitter: { + /** Format: int64 */ + timeout?: number; + }; + UserInfo: { + userId?: string; + provider?: string; + email?: string; + displayName?: string; + roles?: string[]; + /** Format: date-time */ + createdAt?: string; + }; + }; + responses: never; + parameters: never; + requestBodies: never; + headers: never; + pathItems: never; +} +export type $defs = Record; +export interface operations { + updateRoles: { + parameters: { + query?: never; + header?: never; + path: { + userId: string; }; - }; + cookie?: never; }; - 401: { content: { 'application/json': { message: string } } }; - }; - }; - }; - '/auth/refresh': { - post: { - requestBody: { - content: { - 'application/json': { - refreshToken: string; - }; - }; - }; - responses: { - 200: { - content: { - 'application/json': { - accessToken: string; - refreshToken: string; + requestBody: { + content: { + "application/json": components["schemas"]["RolesRequest"]; + }; + }; + responses: { + /** @description Roles updated */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description User not found */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; }; - }; }; - 401: { content: { 'application/json': { message: string } } }; - }; }; - }; - '/search/executions': { - post: { - requestBody: { - content: { - 'application/json': SearchRequest; + getConfig: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; }; - }; - responses: { - 200: { - content: { - 'application/json': SearchResponse; - }; + requestBody?: never; + responses: { + /** @description Current OIDC configuration (client_secret masked) */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": Record; + }; + }; }; - }; }; - }; - '/executions/{executionId}': { - get: { - parameters: { - path: { executionId: string }; - }; - responses: { - 200: { - content: { - 'application/json': ExecutionDetail; - }; + saveConfig: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["OidcConfigRequest"]; + }; + }; + responses: { + /** @description Configuration saved */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": Record; + }; + }; + /** @description Invalid configuration */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": Record; + }; + }; }; - 404: { content: { 'application/json': { message: string } } }; - }; }; - }; - '/executions/{executionId}/processors/{index}/snapshot': { - get: { - parameters: { - path: { executionId: string; index: number }; - }; - responses: { - 200: { - content: { - 'application/json': ProcessorSnapshot; - }; + deleteConfig: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Configuration deleted */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; }; - 404: { content: { 'application/json': { message: string } } }; - }; }; - }; - '/search/stats': { - get: { - parameters: { - query: { - from: string; - to?: string; + searchGet: { + parameters: { + query?: { + status?: string; + timeFrom?: string; + timeTo?: string; + correlationId?: string; + text?: string; + routeId?: string; + agentId?: string; + processorType?: string; + offset?: number; + limit?: number; + }; + header?: never; + path?: never; + cookie?: never; }; - }; - responses: { - 200: { - content: { - 'application/json': ExecutionStats; - }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["SearchResultExecutionSummary"]; + }; + }; }; - }; }; - }; - '/search/stats/timeseries': { - get: { - parameters: { - query: { - from: string; - to?: string; - buckets?: number; + searchPost: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; }; - }; - responses: { - 200: { - content: { - 'application/json': StatsTimeseries; - }; + requestBody: { + content: { + "application/json": components["schemas"]["SearchRequest"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["SearchResultExecutionSummary"]; + }; + }; }; - }; }; - }; - '/agents': { - get: { - parameters: { - query?: { status?: string }; - }; - responses: { - 200: { - content: { - 'application/json': AgentInstance[]; - }; + ingestMetrics: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": string; + }; + }; + responses: { + /** @description Data accepted for processing */ + 202: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Buffer full, retry later */ + 503: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + ingestExecutions: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": string; + }; + }; + responses: { + /** @description Data accepted for processing */ + 202: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Buffer full, retry later */ + 503: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + ingestDiagrams: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": string; + }; + }; + responses: { + /** @description Data accepted for processing */ + 202: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Buffer full, retry later */ + 503: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + refresh: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["RefreshRequest"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": Record; + }; + }; + }; + }; + callback: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["CallbackRequest"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": Record; + }; + }; + }; + }; + login: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["LoginRequest"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": Record; + }; + }; + }; + }; + refresh_1: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + "application/json": string; + }; + }; + responses: { + /** @description New access token issued */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": string; + }; + }; + /** @description Invalid or expired refresh token */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": string; + }; + }; + /** @description Agent not found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": string; + }; + }; + }; + }; + heartbeat: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Heartbeat accepted */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Agent not registered */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + sendCommand: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + "application/json": string; + }; + }; + responses: { + /** @description Command accepted */ + 202: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": string; + }; + }; + /** @description Invalid command payload */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": string; + }; + }; + /** @description Agent not registered */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": string; + }; + }; + }; + }; + acknowledgeCommand: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + commandId: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Command acknowledged */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Command not found */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + register: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": string; + }; + }; + responses: { + /** @description Agent registered successfully */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": string; + }; + }; + /** @description Invalid registration payload */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": string; + }; + }; + /** @description Missing or invalid bootstrap token */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": string; + }; + }; + }; + }; + sendGroupCommand: { + parameters: { + query?: never; + header?: never; + path: { + group: string; + }; + cookie?: never; + }; + requestBody: { + content: { + "application/json": string; + }; + }; + responses: { + /** @description Commands accepted */ + 202: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": string; + }; + }; + /** @description Invalid command payload */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": string; + }; + }; + }; + }; + broadcastCommand: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": string; + }; + }; + responses: { + /** @description Commands accepted */ + 202: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": string; + }; + }; + /** @description Invalid command payload */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": string; + }; + }; + }; + }; + testConnection: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Provider reachable */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": Record; + }; + }; + /** @description Provider unreachable or misconfigured */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": Record; + }; + }; + }; + }; + stats: { + parameters: { + query: { + from: string; + to?: string; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ExecutionStats"]; + }; + }; + }; + }; + timeseries: { + parameters: { + query: { + from: string; + to?: string; + buckets?: number; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["StatsTimeseries"]; + }; + }; + }; + }; + getDetail: { + parameters: { + query?: never; + header?: never; + path: { + executionId: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ExecutionDetail"]; + }; + }; + }; + }; + getProcessorSnapshot: { + parameters: { + query?: never; + header?: never; + path: { + executionId: string; + index: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": { + [key: string]: string; + }; + }; + }; + }; + }; + renderDiagram: { + parameters: { + query?: never; + header?: never; + path: { + contentHash: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Diagram rendered successfully */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": Record; + }; + }; + /** @description Diagram not found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": Record; + }; + }; + }; + }; + getConfig_1: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": Record; + }; + }; + }; + }; + listAgents: { + parameters: { + query?: { + status?: string; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Agent list returned */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": string; + }; + }; + /** @description Invalid status filter */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": string; + }; + }; + }; + }; + events: { + parameters: { + query?: never; + header?: { + /** @description Last received event ID (no replay, acknowledged only) */ + "Last-Event-ID"?: string; + }; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description SSE stream opened */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "text/event-stream": components["schemas"]["SseEmitter"]; + }; + }; + /** @description Agent not registered */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "text/event-stream": components["schemas"]["SseEmitter"]; + }; + }; + }; + }; + listUsers: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description User list returned */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["UserInfo"][]; + }; + }; + }; + }; + getUser: { + parameters: { + query?: never; + header?: never; + path: { + userId: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description User found */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["UserInfo"]; + }; + }; + /** @description User not found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["UserInfo"]; + }; + }; + }; + }; + deleteUser: { + parameters: { + query?: never; + header?: never; + path: { + userId: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description User deleted */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; }; - }; }; - }; -} - -export interface SearchRequest { - status?: string | null; - timeFrom?: string | null; - timeTo?: string | null; - durationMin?: number | null; - durationMax?: number | null; - correlationId?: string | null; - text?: string | null; - textInBody?: string | null; - textInHeaders?: string | null; - textInErrors?: string | null; - routeId?: string | null; - agentId?: string | null; - processorType?: string | null; - offset?: number; - limit?: number; -} - -export interface SearchResponse { - data: ExecutionSummary[]; - total: number; - offset: number; - limit: number; -} - -export interface ExecutionSummary { - executionId: string; - routeId: string; - agentId: string; - status: string; - startTime: string; - endTime: string | null; - durationMs: number; - correlationId: string | null; - errorMessage: string | null; - diagramContentHash: string | null; -} - -export interface ExecutionDetail { - executionId: string; - routeId: string; - agentId: string; - status: string; - startTime: string; - endTime: string | null; - durationMs: number; - correlationId: string | null; - exchangeId: string | null; - errorMessage: string | null; - errorStackTrace: string | null; - diagramContentHash: string | null; - processors: ProcessorNode[]; -} - -export interface ProcessorNode { - processorId: string; - processorType: string; - status: string; - startTime: string; - endTime: string | null; - durationMs: number; - diagramNodeId: string | null; - errorMessage: string | null; - errorStackTrace: string | null; - children: ProcessorNode[]; -} - -/** Processor snapshot is a flat key-value map (Map in Java) */ -export type ProcessorSnapshot = Record; - -export interface ExecutionStats { - totalCount: number; - failedCount: number; - avgDurationMs: number; - p99LatencyMs: number; - activeCount: number; - totalToday: number; - prevTotalCount: number; - prevFailedCount: number; - prevAvgDurationMs: number; - prevP99LatencyMs: number; -} - -export interface StatsTimeseries { - buckets: TimeseriesBucket[]; -} - -export interface TimeseriesBucket { - time: string; - totalCount: number; - failedCount: number; - avgDurationMs: number; - p99DurationMs: number; - activeCount: number; -} - -export interface AgentInstance { - id: string; - name: string; - group: string; - version: string; - routeIds: string[]; - capabilities: Record; - state: 'LIVE' | 'STALE' | 'DEAD'; - registeredAt: string; - lastHeartbeat: string; - staleTransitionTime: string | null; }