Files
cameleer-server/ui/src/api/openapi.json
hsiegeln 7778793e7b
All checks were successful
CI / build (push) Successful in 1m10s
CI / docker (push) Successful in 1m3s
CI / deploy (push) Successful in 31s
Add route diagram page with execution overlay and group-aware APIs
Backend: Add group filtering to agent list, search, stats, and timeseries
endpoints. Add diagram lookup by group+routeId. Resolve application group
to agent IDs server-side for ClickHouse IN-clause queries.

Frontend: New route detail page at /apps/{group}/routes/{routeId} with
three tabs (Diagram, Performance, Processor Tree). SVG diagram rendering
with panzoom, execution overlay (glow effects, duration/sequence badges,
flow particles, minimap), and processor detail panel. uPlot charts for
performance tab replacing old SVG sparklines. Ctrl+Click from
ExecutionExplorer navigates to route diagram with overlay.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-14 21:35:42 +01:00

2350 lines
56 KiB
JSON

{
"openapi": "3.1.0",
"info": {
"title": "Cameleer3 Server API",
"version": "1.0"
},
"servers": [],
"security": [
{
"bearer": []
}
],
"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": "Authentication",
"description": "Login and token refresh 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": {
"/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"
}
}
}
},
"/admin/oidc": {
"get": {
"tags": [
"OIDC Config Admin"
],
"summary": "Get OIDC configuration",
"operationId": "getConfig",
"responses": {
"200": {
"description": "Current OIDC configuration (client_secret masked)",
"content": {
"*/*": {
"schema": {
"$ref": "#/components/schemas/OidcAdminConfigResponse"
}
}
}
}
}
},
"put": {
"tags": [
"OIDC Config Admin"
],
"summary": "Save OIDC configuration",
"operationId": "saveConfig",
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/OidcAdminConfigRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "Configuration saved",
"content": {
"*/*": {
"schema": {
"$ref": "#/components/schemas/OidcAdminConfigResponse"
}
}
}
},
"400": {
"description": "Invalid configuration",
"content": {
"*/*": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
}
}
}
}
}
},
"delete": {
"tags": [
"OIDC Config Admin"
],
"summary": "Delete OIDC configuration",
"operationId": "deleteConfig",
"responses": {
"204": {
"description": "Configuration deleted"
}
}
}
},
"/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": "group",
"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
}
},
{
"name": "sortField",
"in": "query",
"required": false,
"schema": {
"type": "string"
}
},
{
"name": "sortDir",
"in": "query",
"required": false,
"schema": {
"type": "string"
}
}
],
"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"
}
}
}
}
}
}
},
"/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"
}
}
}
},
"/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"
}
}
}
},
"/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"
}
}
}
},
"/auth/refresh": {
"post": {
"tags": [
"Authentication"
],
"summary": "Refresh access token",
"operationId": "refresh",
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/RefreshRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "Token refreshed",
"content": {
"*/*": {
"schema": {
"$ref": "#/components/schemas/AuthTokenResponse"
}
}
}
},
"401": {
"description": "Invalid refresh token",
"content": {
"*/*": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
}
}
}
}
}
}
},
"/auth/oidc/callback": {
"post": {
"tags": [
"Authentication"
],
"summary": "Exchange OIDC authorization code for JWTs",
"operationId": "callback",
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CallbackRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "Authentication successful",
"content": {
"*/*": {
"schema": {
"$ref": "#/components/schemas/AuthTokenResponse"
}
}
}
},
"401": {
"description": "OIDC authentication failed",
"content": {
"*/*": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
}
}
}
},
"403": {
"description": "Account not provisioned",
"content": {
"*/*": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
}
}
}
},
"404": {
"description": "OIDC not configured or disabled",
"content": {
"*/*": {
"schema": {
"$ref": "#/components/schemas/AuthTokenResponse"
}
}
}
}
}
}
},
"/auth/login": {
"post": {
"tags": [
"Authentication"
],
"summary": "Login with local credentials",
"operationId": "login",
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/LoginRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "Login successful",
"content": {
"*/*": {
"schema": {
"$ref": "#/components/schemas/AuthTokenResponse"
}
}
}
},
"401": {
"description": "Invalid credentials",
"content": {
"*/*": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
}
}
}
}
}
}
},
"/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": {
"$ref": "#/components/schemas/AgentRefreshRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "New access token issued",
"content": {
"*/*": {
"schema": {
"$ref": "#/components/schemas/AgentRefreshResponse"
}
}
}
},
"401": {
"description": "Invalid or expired refresh token",
"content": {
"*/*": {
"schema": {
"$ref": "#/components/schemas/AgentRefreshResponse"
}
}
}
},
"404": {
"description": "Agent not found",
"content": {
"*/*": {
"schema": {
"$ref": "#/components/schemas/AgentRefreshResponse"
}
}
}
}
}
}
},
"/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"
}
}
}
},
"/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": {
"$ref": "#/components/schemas/CommandRequest"
}
}
},
"required": true
},
"responses": {
"202": {
"description": "Command accepted",
"content": {
"*/*": {
"schema": {
"$ref": "#/components/schemas/CommandSingleResponse"
}
}
}
},
"400": {
"description": "Invalid command payload",
"content": {
"*/*": {
"schema": {
"$ref": "#/components/schemas/CommandSingleResponse"
}
}
}
},
"404": {
"description": "Agent not registered",
"content": {
"*/*": {
"schema": {
"$ref": "#/components/schemas/CommandSingleResponse"
}
}
}
}
}
}
},
"/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"
}
}
}
},
"/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": {
"$ref": "#/components/schemas/AgentRegistrationRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "Agent registered successfully",
"content": {
"*/*": {
"schema": {
"$ref": "#/components/schemas/AgentRegistrationResponse"
}
}
}
},
"400": {
"description": "Invalid registration payload",
"content": {
"*/*": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
}
}
}
},
"401": {
"description": "Missing or invalid bootstrap token",
"content": {
"*/*": {
"schema": {
"$ref": "#/components/schemas/AgentRegistrationResponse"
}
}
}
}
}
}
},
"/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": {
"$ref": "#/components/schemas/CommandRequest"
}
}
},
"required": true
},
"responses": {
"202": {
"description": "Commands accepted",
"content": {
"*/*": {
"schema": {
"$ref": "#/components/schemas/CommandBroadcastResponse"
}
}
}
},
"400": {
"description": "Invalid command payload",
"content": {
"*/*": {
"schema": {
"$ref": "#/components/schemas/CommandBroadcastResponse"
}
}
}
}
}
}
},
"/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": {
"$ref": "#/components/schemas/CommandRequest"
}
}
},
"required": true
},
"responses": {
"202": {
"description": "Commands accepted",
"content": {
"*/*": {
"schema": {
"$ref": "#/components/schemas/CommandBroadcastResponse"
}
}
}
},
"400": {
"description": "Invalid command payload",
"content": {
"*/*": {
"schema": {
"$ref": "#/components/schemas/CommandBroadcastResponse"
}
}
}
}
}
}
},
"/admin/oidc/test": {
"post": {
"tags": [
"OIDC Config Admin"
],
"summary": "Test OIDC provider connectivity",
"operationId": "testConnection",
"responses": {
"200": {
"description": "Provider reachable",
"content": {
"*/*": {
"schema": {
"$ref": "#/components/schemas/OidcTestResult"
}
}
}
},
"400": {
"description": "Provider unreachable or misconfigured",
"content": {
"*/*": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
}
}
}
}
}
}
},
"/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"
}
},
{
"name": "routeId",
"in": "query",
"required": false,
"schema": {
"type": "string"
}
},
{
"name": "group",
"in": "query",
"required": false,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"*/*": {
"schema": {
"$ref": "#/components/schemas/ExecutionStats"
}
}
}
}
}
}
},
"/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
}
},
{
"name": "routeId",
"in": "query",
"required": false,
"schema": {
"type": "string"
}
},
{
"name": "group",
"in": "query",
"required": false,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"*/*": {
"schema": {
"$ref": "#/components/schemas/StatsTimeseries"
}
}
}
}
}
}
},
"/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": "Execution detail found",
"content": {
"*/*": {
"schema": {
"$ref": "#/components/schemas/ExecutionDetail"
}
}
}
},
"404": {
"description": "Execution not found",
"content": {
"*/*": {
"schema": {
"$ref": "#/components/schemas/ExecutionDetail"
}
}
}
}
}
}
},
"/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": "Snapshot data",
"content": {
"*/*": {
"schema": {
"type": "object",
"additionalProperties": {
"type": "string"
}
}
}
}
},
"404": {
"description": "Snapshot not found",
"content": {
"*/*": {
"schema": {
"type": "object",
"additionalProperties": {
"type": "string"
}
}
}
}
}
}
}
},
"/diagrams": {
"get": {
"tags": [
"Diagrams"
],
"summary": "Find diagram by application group and route ID",
"description": "Resolves group to agent IDs and finds the latest diagram for the route",
"operationId": "findByGroupAndRoute",
"parameters": [
{
"name": "group",
"in": "query",
"required": true,
"schema": {
"type": "string"
}
},
{
"name": "routeId",
"in": "query",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "Diagram layout returned",
"content": {
"*/*": {
"schema": {
"$ref": "#/components/schemas/DiagramLayout"
}
}
}
},
"404": {
"description": "No diagram found for the given group and route"
}
}
}
},
"/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": {
"image/svg+xml": {
"schema": {
"type": "string"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/DiagramLayout"
}
}
}
},
"404": {
"description": "Diagram not found",
"content": {
"*/*": {
"schema": {
"type": "object"
}
}
}
}
}
}
},
"/auth/oidc/config": {
"get": {
"tags": [
"Authentication"
],
"summary": "Get OIDC config for SPA login flow",
"operationId": "getConfig_1",
"responses": {
"200": {
"description": "OIDC configuration",
"content": {
"*/*": {
"schema": {
"$ref": "#/components/schemas/OidcPublicConfigResponse"
}
}
}
},
"404": {
"description": "OIDC not configured or disabled",
"content": {
"*/*": {
"schema": {
"$ref": "#/components/schemas/OidcPublicConfigResponse"
}
}
}
},
"500": {
"description": "Failed to retrieve OIDC provider metadata",
"content": {
"*/*": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
}
}
}
}
}
}
},
"/agents": {
"get": {
"tags": [
"Agent Management"
],
"summary": "List all agents",
"description": "Returns all registered agents, optionally filtered by status and/or group",
"operationId": "listAgents",
"parameters": [
{
"name": "status",
"in": "query",
"required": false,
"schema": {
"type": "string"
}
},
{
"name": "group",
"in": "query",
"required": false,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "Agent list returned",
"content": {
"*/*": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/AgentInstanceResponse"
}
}
}
}
},
"400": {
"description": "Invalid status filter",
"content": {
"*/*": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
}
}
}
}
}
}
},
"/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"
}
}
}
}
}
}
},
"/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"
}
}
}
}
}
}
}
},
"/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"
}
}
}
},
"OidcAdminConfigRequest": {
"type": "object",
"description": "OIDC configuration update request",
"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"
},
"displayNameClaim": {
"type": "string"
}
}
},
"ErrorResponse": {
"type": "object",
"description": "Error response",
"properties": {
"message": {
"type": "string"
}
},
"required": [
"message"
]
},
"OidcAdminConfigResponse": {
"type": "object",
"description": "OIDC configuration for admin management",
"properties": {
"configured": {
"type": "boolean"
},
"enabled": {
"type": "boolean"
},
"issuerUri": {
"type": "string"
},
"clientId": {
"type": "string"
},
"clientSecretSet": {
"type": "boolean"
},
"rolesClaim": {
"type": "string"
},
"defaultRoles": {
"type": "array",
"items": {
"type": "string"
}
},
"autoSignup": {
"type": "boolean"
},
"displayNameClaim": {
"type": "string"
}
}
},
"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"
},
"group": {
"type": "string"
},
"agentIds": {
"type": "array",
"items": {
"type": "string"
}
},
"offset": {
"type": "integer",
"format": "int32"
},
"limit": {
"type": "integer",
"format": "int32"
},
"sortField": {
"type": "string"
},
"sortDir": {
"type": "string"
}
}
},
"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"
}
},
"required": [
"agentId",
"correlationId",
"diagramContentHash",
"durationMs",
"endTime",
"errorMessage",
"executionId",
"routeId",
"startTime",
"status"
]
},
"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"
}
},
"required": [
"data",
"limit",
"offset",
"total"
]
},
"RefreshRequest": {
"type": "object",
"properties": {
"refreshToken": {
"type": "string"
}
}
},
"AuthTokenResponse": {
"type": "object",
"description": "JWT token pair",
"properties": {
"accessToken": {
"type": "string"
},
"refreshToken": {
"type": "string"
},
"displayName": {
"type": "string"
},
"idToken": {
"type": "string",
"description": "OIDC id_token for end-session logout (only present after OIDC login)"
}
},
"required": [
"accessToken",
"refreshToken",
"displayName"
]
},
"CallbackRequest": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"redirectUri": {
"type": "string"
}
}
},
"LoginRequest": {
"type": "object",
"properties": {
"username": {
"type": "string"
},
"password": {
"type": "string"
}
}
},
"AgentRefreshRequest": {
"type": "object",
"description": "Agent token refresh request",
"properties": {
"refreshToken": {
"type": "string"
}
},
"required": [
"refreshToken"
]
},
"AgentRefreshResponse": {
"type": "object",
"description": "Refreshed access token",
"properties": {
"accessToken": {
"type": "string"
}
},
"required": [
"accessToken"
]
},
"CommandRequest": {
"type": "object",
"description": "Command to send to agent(s)",
"properties": {
"type": {
"type": "string",
"description": "Command type: config-update, deep-trace, or replay"
},
"payload": {
"type": "object",
"description": "Command payload JSON"
}
},
"required": [
"type"
]
},
"CommandSingleResponse": {
"type": "object",
"description": "Result of sending a command to a single agent",
"properties": {
"commandId": {
"type": "string"
},
"status": {
"type": "string"
}
},
"required": [
"commandId",
"status"
]
},
"AgentRegistrationRequest": {
"type": "object",
"description": "Agent registration payload",
"properties": {
"agentId": {
"type": "string"
},
"name": {
"type": "string"
},
"group": {
"type": "string",
"default": "default"
},
"version": {
"type": "string"
},
"routeIds": {
"type": "array",
"items": {
"type": "string"
}
},
"capabilities": {
"type": "object",
"additionalProperties": {
"type": "object"
}
}
},
"required": [
"agentId",
"name"
]
},
"AgentRegistrationResponse": {
"type": "object",
"description": "Agent registration result with JWT tokens and SSE endpoint",
"properties": {
"agentId": {
"type": "string"
},
"sseEndpoint": {
"type": "string"
},
"heartbeatIntervalMs": {
"type": "integer",
"format": "int64"
},
"serverPublicKey": {
"type": "string"
},
"accessToken": {
"type": "string"
},
"refreshToken": {
"type": "string"
}
},
"required": [
"accessToken",
"agentId",
"refreshToken",
"serverPublicKey",
"sseEndpoint"
]
},
"CommandBroadcastResponse": {
"type": "object",
"description": "Result of broadcasting a command to multiple agents",
"properties": {
"commandIds": {
"type": "array",
"items": {
"type": "string"
}
},
"targetCount": {
"type": "integer",
"format": "int32"
}
},
"required": [
"commandIds"
]
},
"OidcTestResult": {
"type": "object",
"description": "OIDC provider connectivity test result",
"properties": {
"status": {
"type": "string"
},
"authorizationEndpoint": {
"type": "string"
}
},
"required": [
"authorizationEndpoint",
"status"
]
},
"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"
}
},
"required": [
"activeCount",
"avgDurationMs",
"failedCount",
"p99LatencyMs",
"prevAvgDurationMs",
"prevFailedCount",
"prevP99LatencyMs",
"prevTotalCount",
"totalCount",
"totalToday"
]
},
"StatsTimeseries": {
"type": "object",
"properties": {
"buckets": {
"type": "array",
"items": {
"$ref": "#/components/schemas/TimeseriesBucket"
}
}
},
"required": [
"buckets"
]
},
"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"
}
},
"required": [
"activeCount",
"avgDurationMs",
"failedCount",
"p99DurationMs",
"time",
"totalCount"
]
},
"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"
}
}
},
"required": [
"agentId",
"correlationId",
"diagramContentHash",
"durationMs",
"endTime",
"errorMessage",
"errorStackTrace",
"exchangeId",
"executionId",
"processors",
"routeId",
"startTime",
"status"
]
},
"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"
},
"children": {
"type": "array",
"items": {
"$ref": "#/components/schemas/ProcessorNode"
}
}
},
"required": [
"children",
"diagramNodeId",
"durationMs",
"endTime",
"errorMessage",
"errorStackTrace",
"processorId",
"processorType",
"startTime",
"status"
]
},
"DiagramLayout": {
"type": "object",
"properties": {
"width": {
"type": "number",
"format": "double"
},
"height": {
"type": "number",
"format": "double"
},
"nodes": {
"type": "array",
"items": {
"$ref": "#/components/schemas/PositionedNode"
}
},
"edges": {
"type": "array",
"items": {
"$ref": "#/components/schemas/PositionedEdge"
}
}
}
},
"PositionedEdge": {
"type": "object",
"properties": {
"sourceId": {
"type": "string"
},
"targetId": {
"type": "string"
},
"label": {
"type": "string"
},
"points": {
"type": "array",
"items": {
"type": "array",
"items": {
"type": "number",
"format": "double"
}
}
}
}
},
"PositionedNode": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"label": {
"type": "string"
},
"type": {
"type": "string"
},
"x": {
"type": "number",
"format": "double"
},
"y": {
"type": "number",
"format": "double"
},
"width": {
"type": "number",
"format": "double"
},
"height": {
"type": "number",
"format": "double"
},
"children": {
"type": "array",
"items": {
"$ref": "#/components/schemas/PositionedNode"
}
}
}
},
"OidcPublicConfigResponse": {
"type": "object",
"description": "OIDC configuration for SPA login flow",
"properties": {
"issuer": {
"type": "string"
},
"clientId": {
"type": "string"
},
"authorizationEndpoint": {
"type": "string"
},
"endSessionEndpoint": {
"type": "string",
"description": "Present if the provider supports RP-initiated logout"
}
},
"required": [
"authorizationEndpoint",
"clientId",
"issuer"
]
},
"AgentInstanceResponse": {
"type": "object",
"description": "Agent instance summary",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"group": {
"type": "string"
},
"status": {
"type": "string"
},
"routeIds": {
"type": "array",
"items": {
"type": "string"
}
},
"registeredAt": {
"type": "string",
"format": "date-time"
},
"lastHeartbeat": {
"type": "string",
"format": "date-time"
}
},
"required": [
"group",
"id",
"lastHeartbeat",
"name",
"registeredAt",
"routeIds",
"status"
]
},
"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"
}
},
"required": [
"createdAt",
"displayName",
"email",
"provider",
"roles",
"userId"
]
}
},
"securitySchemes": {
"bearer": {
"type": "http",
"scheme": "bearer",
"bearerFormat": "JWT"
}
}
}
}