Add React UI with Execution Explorer, auth, and standalone deployment
- Scaffold Vite + React + TypeScript frontend in ui/ with full design
system (dark/light themes) matching the HTML mockups
- Implement Execution Explorer page: search filters, results table with
expandable processor tree and exchange detail sidebar, pagination
- Add UI authentication: UiAuthController (login/refresh endpoints),
JWT filter handles ui: subject prefix, CORS configuration
- Shared components: StatusPill, DurationBar, StatCard, AppBadge,
FilterChip, Pagination — all using CSS Modules with design tokens
- API client layer: openapi-fetch with auth middleware, TanStack Query
hooks for search/detail/snapshot queries, Zustand for state
- Standalone deployment: Nginx Dockerfile, K8s Deployment + ConfigMap +
NodePort (30080), runtime config.js for API base URL
- Embedded mode: maven-resources-plugin copies ui/dist into JAR static
resources, SPA forward controller for client-side routing
- CI/CD: UI build step, Docker build/push for server-ui image, K8s
deploy step for UI, UI credential secrets
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 13:59:22 +01:00
|
|
|
/**
|
2026-03-14 14:24:33 +01:00
|
|
|
* This file was auto-generated by openapi-typescript.
|
|
|
|
|
* Do not make direct changes to the file.
|
Add React UI with Execution Explorer, auth, and standalone deployment
- Scaffold Vite + React + TypeScript frontend in ui/ with full design
system (dark/light themes) matching the HTML mockups
- Implement Execution Explorer page: search filters, results table with
expandable processor tree and exchange detail sidebar, pagination
- Add UI authentication: UiAuthController (login/refresh endpoints),
JWT filter handles ui: subject prefix, CORS configuration
- Shared components: StatusPill, DurationBar, StatCard, AppBadge,
FilterChip, Pagination — all using CSS Modules with design tokens
- API client layer: openapi-fetch with auth middleware, TanStack Query
hooks for search/detail/snapshot queries, Zustand for state
- Standalone deployment: Nginx Dockerfile, K8s Deployment + ConfigMap +
NodePort (30080), runtime config.js for API base URL
- Embedded mode: maven-resources-plugin copies ui/dist into JAR static
resources, SPA forward controller for client-side routing
- CI/CD: UI build step, Docker build/push for server-ui image, K8s
deploy step for UI, UI credential secrets
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 13:59:22 +01:00
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
export interface paths {
|
2026-03-14 14:43:18 +01:00
|
|
|
"/admin/users/{userId}/roles": {
|
2026-03-14 14:24:33 +01:00
|
|
|
parameters: {
|
|
|
|
|
query?: never;
|
|
|
|
|
header?: never;
|
|
|
|
|
path?: never;
|
|
|
|
|
cookie?: never;
|
|
|
|
|
};
|
|
|
|
|
get?: never;
|
|
|
|
|
/** Update user roles */
|
|
|
|
|
put: operations["updateRoles"];
|
|
|
|
|
post?: never;
|
|
|
|
|
delete?: never;
|
|
|
|
|
options?: never;
|
|
|
|
|
head?: never;
|
|
|
|
|
patch?: never;
|
|
|
|
|
trace?: never;
|
|
|
|
|
};
|
2026-03-14 14:43:18 +01:00
|
|
|
"/admin/oidc": {
|
2026-03-14 14:24:33 +01:00
|
|
|
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;
|
|
|
|
|
};
|
2026-03-14 14:43:18 +01:00
|
|
|
"/search/executions": {
|
2026-03-14 14:24:33 +01:00
|
|
|
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;
|
|
|
|
|
};
|
2026-03-14 14:43:18 +01:00
|
|
|
"/data/metrics": {
|
2026-03-14 14:24:33 +01:00
|
|
|
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;
|
|
|
|
|
};
|
2026-03-14 14:43:18 +01:00
|
|
|
"/data/executions": {
|
2026-03-14 14:24:33 +01:00
|
|
|
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;
|
|
|
|
|
};
|
2026-03-14 14:43:18 +01:00
|
|
|
"/data/diagrams": {
|
2026-03-14 14:24:33 +01:00
|
|
|
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;
|
|
|
|
|
};
|
2026-03-14 14:43:18 +01:00
|
|
|
"/auth/refresh": {
|
2026-03-14 14:24:33 +01:00
|
|
|
parameters: {
|
|
|
|
|
query?: never;
|
|
|
|
|
header?: never;
|
|
|
|
|
path?: never;
|
|
|
|
|
cookie?: never;
|
|
|
|
|
};
|
|
|
|
|
get?: never;
|
|
|
|
|
put?: never;
|
2026-03-14 15:33:37 +01:00
|
|
|
/** Refresh access token */
|
2026-03-14 14:24:33 +01:00
|
|
|
post: operations["refresh"];
|
|
|
|
|
delete?: never;
|
|
|
|
|
options?: never;
|
|
|
|
|
head?: never;
|
|
|
|
|
patch?: never;
|
|
|
|
|
trace?: never;
|
|
|
|
|
};
|
2026-03-14 14:43:18 +01:00
|
|
|
"/auth/oidc/callback": {
|
2026-03-14 14:24:33 +01:00
|
|
|
parameters: {
|
|
|
|
|
query?: never;
|
|
|
|
|
header?: never;
|
|
|
|
|
path?: never;
|
|
|
|
|
cookie?: never;
|
|
|
|
|
};
|
|
|
|
|
get?: never;
|
|
|
|
|
put?: never;
|
2026-03-14 15:33:37 +01:00
|
|
|
/** Exchange OIDC authorization code for JWTs */
|
2026-03-14 14:24:33 +01:00
|
|
|
post: operations["callback"];
|
|
|
|
|
delete?: never;
|
|
|
|
|
options?: never;
|
|
|
|
|
head?: never;
|
|
|
|
|
patch?: never;
|
|
|
|
|
trace?: never;
|
|
|
|
|
};
|
2026-03-14 14:43:18 +01:00
|
|
|
"/auth/login": {
|
2026-03-14 14:24:33 +01:00
|
|
|
parameters: {
|
|
|
|
|
query?: never;
|
|
|
|
|
header?: never;
|
|
|
|
|
path?: never;
|
|
|
|
|
cookie?: never;
|
|
|
|
|
};
|
|
|
|
|
get?: never;
|
|
|
|
|
put?: never;
|
2026-03-14 15:33:37 +01:00
|
|
|
/** Login with local credentials */
|
2026-03-14 14:24:33 +01:00
|
|
|
post: operations["login"];
|
|
|
|
|
delete?: never;
|
|
|
|
|
options?: never;
|
|
|
|
|
head?: never;
|
|
|
|
|
patch?: never;
|
|
|
|
|
trace?: never;
|
|
|
|
|
};
|
2026-03-14 14:43:18 +01:00
|
|
|
"/agents/{id}/refresh": {
|
2026-03-14 14:24:33 +01:00
|
|
|
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;
|
|
|
|
|
};
|
2026-03-14 14:43:18 +01:00
|
|
|
"/agents/{id}/heartbeat": {
|
2026-03-14 14:24:33 +01:00
|
|
|
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;
|
|
|
|
|
};
|
2026-03-14 14:43:18 +01:00
|
|
|
"/agents/{id}/commands": {
|
2026-03-14 14:24:33 +01:00
|
|
|
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;
|
|
|
|
|
};
|
2026-03-14 14:43:18 +01:00
|
|
|
"/agents/{id}/commands/{commandId}/ack": {
|
2026-03-14 14:24:33 +01:00
|
|
|
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;
|
|
|
|
|
};
|
2026-03-14 14:43:18 +01:00
|
|
|
"/agents/register": {
|
2026-03-14 14:24:33 +01:00
|
|
|
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;
|
|
|
|
|
};
|
2026-03-14 14:43:18 +01:00
|
|
|
"/agents/groups/{group}/commands": {
|
2026-03-14 14:24:33 +01:00
|
|
|
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;
|
|
|
|
|
};
|
2026-03-14 14:43:18 +01:00
|
|
|
"/agents/commands": {
|
2026-03-14 14:24:33 +01:00
|
|
|
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;
|
|
|
|
|
};
|
2026-03-14 14:43:18 +01:00
|
|
|
"/admin/oidc/test": {
|
2026-03-14 14:24:33 +01:00
|
|
|
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;
|
|
|
|
|
};
|
2026-03-14 14:43:18 +01:00
|
|
|
"/search/stats": {
|
2026-03-14 14:24:33 +01:00
|
|
|
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;
|
|
|
|
|
};
|
2026-03-14 14:43:18 +01:00
|
|
|
"/search/stats/timeseries": {
|
2026-03-14 14:24:33 +01:00
|
|
|
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;
|
|
|
|
|
};
|
2026-03-14 14:43:18 +01:00
|
|
|
"/executions/{executionId}": {
|
2026-03-14 14:24:33 +01:00
|
|
|
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;
|
|
|
|
|
};
|
2026-03-14 14:43:18 +01:00
|
|
|
"/executions/{executionId}/processors/{index}/snapshot": {
|
2026-03-14 14:24:33 +01:00
|
|
|
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;
|
|
|
|
|
};
|
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
|
|
|
"/diagrams": {
|
|
|
|
|
parameters: {
|
|
|
|
|
query?: never;
|
|
|
|
|
header?: never;
|
|
|
|
|
path?: never;
|
|
|
|
|
cookie?: never;
|
|
|
|
|
};
|
|
|
|
|
/**
|
|
|
|
|
* Find diagram by application group and route ID
|
|
|
|
|
* @description Resolves group to agent IDs and finds the latest diagram for the route
|
|
|
|
|
*/
|
|
|
|
|
get: operations["findByGroupAndRoute"];
|
|
|
|
|
put?: never;
|
|
|
|
|
post?: never;
|
|
|
|
|
delete?: never;
|
|
|
|
|
options?: never;
|
|
|
|
|
head?: never;
|
|
|
|
|
patch?: never;
|
|
|
|
|
trace?: never;
|
|
|
|
|
};
|
2026-03-14 14:43:18 +01:00
|
|
|
"/diagrams/{contentHash}/render": {
|
2026-03-14 14:24:33 +01:00
|
|
|
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;
|
|
|
|
|
};
|
2026-03-14 14:43:18 +01:00
|
|
|
"/auth/oidc/config": {
|
2026-03-14 14:24:33 +01:00
|
|
|
parameters: {
|
|
|
|
|
query?: never;
|
|
|
|
|
header?: never;
|
|
|
|
|
path?: never;
|
|
|
|
|
cookie?: never;
|
|
|
|
|
};
|
2026-03-14 15:33:37 +01:00
|
|
|
/** Get OIDC config for SPA login flow */
|
2026-03-14 14:24:33 +01:00
|
|
|
get: operations["getConfig_1"];
|
|
|
|
|
put?: never;
|
|
|
|
|
post?: never;
|
|
|
|
|
delete?: never;
|
|
|
|
|
options?: never;
|
|
|
|
|
head?: never;
|
|
|
|
|
patch?: never;
|
|
|
|
|
trace?: never;
|
|
|
|
|
};
|
2026-03-14 14:43:18 +01:00
|
|
|
"/agents": {
|
2026-03-14 14:24:33 +01:00
|
|
|
parameters: {
|
|
|
|
|
query?: never;
|
|
|
|
|
header?: never;
|
|
|
|
|
path?: never;
|
|
|
|
|
cookie?: never;
|
|
|
|
|
};
|
|
|
|
|
/**
|
|
|
|
|
* List all agents
|
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
|
|
|
* @description Returns all registered agents, optionally filtered by status and/or group
|
2026-03-14 14:24:33 +01:00
|
|
|
*/
|
|
|
|
|
get: operations["listAgents"];
|
|
|
|
|
put?: never;
|
|
|
|
|
post?: never;
|
|
|
|
|
delete?: never;
|
|
|
|
|
options?: never;
|
|
|
|
|
head?: never;
|
|
|
|
|
patch?: never;
|
|
|
|
|
trace?: never;
|
|
|
|
|
};
|
2026-03-14 14:43:18 +01:00
|
|
|
"/agents/{id}/events": {
|
2026-03-14 14:24:33 +01:00
|
|
|
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;
|
|
|
|
|
};
|
2026-03-14 14:43:18 +01:00
|
|
|
"/admin/users": {
|
2026-03-14 14:24:33 +01:00
|
|
|
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;
|
|
|
|
|
};
|
2026-03-14 14:43:18 +01:00
|
|
|
"/admin/users/{userId}": {
|
2026-03-14 14:24:33 +01:00
|
|
|
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;
|
|
|
|
|
};
|
2026-03-13 18:20:08 +01:00
|
|
|
}
|
2026-03-14 14:24:33 +01:00
|
|
|
export type webhooks = Record<string, never>;
|
|
|
|
|
export interface components {
|
|
|
|
|
schemas: {
|
|
|
|
|
RolesRequest: {
|
|
|
|
|
roles?: string[];
|
|
|
|
|
};
|
2026-03-14 15:33:37 +01:00
|
|
|
/** @description OIDC configuration update request */
|
|
|
|
|
OidcAdminConfigRequest: {
|
2026-03-14 14:24:33 +01:00
|
|
|
enabled?: boolean;
|
|
|
|
|
issuerUri?: string;
|
|
|
|
|
clientId?: string;
|
|
|
|
|
clientSecret?: string;
|
|
|
|
|
rolesClaim?: string;
|
|
|
|
|
defaultRoles?: string[];
|
|
|
|
|
autoSignup?: boolean;
|
2026-03-14 16:09:24 +01:00
|
|
|
displayNameClaim?: string;
|
2026-03-14 14:24:33 +01:00
|
|
|
};
|
2026-03-14 15:33:37 +01:00
|
|
|
/** @description Error response */
|
|
|
|
|
ErrorResponse: {
|
|
|
|
|
message: string;
|
|
|
|
|
};
|
|
|
|
|
/** @description OIDC configuration for admin management */
|
|
|
|
|
OidcAdminConfigResponse: {
|
|
|
|
|
configured?: boolean;
|
|
|
|
|
enabled?: boolean;
|
|
|
|
|
issuerUri?: string;
|
|
|
|
|
clientId?: string;
|
|
|
|
|
clientSecretSet?: boolean;
|
|
|
|
|
rolesClaim?: string;
|
|
|
|
|
defaultRoles?: string[];
|
|
|
|
|
autoSignup?: boolean;
|
2026-03-14 16:09:24 +01:00
|
|
|
displayNameClaim?: string;
|
2026-03-14 15:33:37 +01:00
|
|
|
};
|
2026-03-14 14:24:33 +01:00
|
|
|
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;
|
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
|
|
|
group?: string;
|
|
|
|
|
agentIds?: string[];
|
2026-03-14 14:24:33 +01:00
|
|
|
/** Format: int32 */
|
|
|
|
|
offset?: number;
|
|
|
|
|
/** Format: int32 */
|
|
|
|
|
limit?: number;
|
2026-03-14 19:34:22 +01:00
|
|
|
sortField?: string;
|
|
|
|
|
sortDir?: string;
|
2026-03-14 14:24:33 +01:00
|
|
|
};
|
|
|
|
|
ExecutionSummary: {
|
2026-03-14 15:33:37 +01:00
|
|
|
executionId: string;
|
|
|
|
|
routeId: string;
|
|
|
|
|
agentId: string;
|
|
|
|
|
status: string;
|
2026-03-14 14:24:33 +01:00
|
|
|
/** Format: date-time */
|
2026-03-14 15:33:37 +01:00
|
|
|
startTime: string;
|
2026-03-14 14:24:33 +01:00
|
|
|
/** Format: date-time */
|
2026-03-14 15:33:37 +01:00
|
|
|
endTime: string;
|
2026-03-14 14:24:33 +01:00
|
|
|
/** Format: int64 */
|
2026-03-14 15:33:37 +01:00
|
|
|
durationMs: number;
|
|
|
|
|
correlationId: string;
|
|
|
|
|
errorMessage: string;
|
|
|
|
|
diagramContentHash: string;
|
2026-03-14 14:24:33 +01:00
|
|
|
};
|
|
|
|
|
SearchResultExecutionSummary: {
|
2026-03-14 15:33:37 +01:00
|
|
|
data: components["schemas"]["ExecutionSummary"][];
|
2026-03-14 14:24:33 +01:00
|
|
|
/** Format: int64 */
|
2026-03-14 15:33:37 +01:00
|
|
|
total: number;
|
2026-03-14 14:24:33 +01:00
|
|
|
/** Format: int32 */
|
2026-03-14 15:33:37 +01:00
|
|
|
offset: number;
|
2026-03-14 14:24:33 +01:00
|
|
|
/** Format: int32 */
|
2026-03-14 15:33:37 +01:00
|
|
|
limit: number;
|
2026-03-14 14:24:33 +01:00
|
|
|
};
|
|
|
|
|
RefreshRequest: {
|
|
|
|
|
refreshToken?: string;
|
|
|
|
|
};
|
2026-03-14 15:33:37 +01:00
|
|
|
/** @description JWT token pair */
|
|
|
|
|
AuthTokenResponse: {
|
|
|
|
|
accessToken: string;
|
|
|
|
|
refreshToken: string;
|
2026-03-14 16:09:24 +01:00
|
|
|
displayName: string;
|
2026-03-14 16:14:07 +01:00
|
|
|
/** @description OIDC id_token for end-session logout (only present after OIDC login) */
|
|
|
|
|
idToken?: string;
|
2026-03-14 15:33:37 +01:00
|
|
|
};
|
2026-03-14 14:24:33 +01:00
|
|
|
CallbackRequest: {
|
|
|
|
|
code?: string;
|
|
|
|
|
redirectUri?: string;
|
|
|
|
|
};
|
|
|
|
|
LoginRequest: {
|
|
|
|
|
username?: string;
|
|
|
|
|
password?: string;
|
|
|
|
|
};
|
2026-03-14 15:33:37 +01:00
|
|
|
/** @description Agent token refresh request */
|
|
|
|
|
AgentRefreshRequest: {
|
|
|
|
|
refreshToken: string;
|
|
|
|
|
};
|
|
|
|
|
/** @description Refreshed access token */
|
|
|
|
|
AgentRefreshResponse: {
|
|
|
|
|
accessToken: string;
|
|
|
|
|
};
|
|
|
|
|
/** @description Command to send to agent(s) */
|
|
|
|
|
CommandRequest: {
|
|
|
|
|
/** @description Command type: config-update, deep-trace, or replay */
|
|
|
|
|
type: string;
|
|
|
|
|
/** @description Command payload JSON */
|
|
|
|
|
payload?: Record<string, never>;
|
|
|
|
|
};
|
|
|
|
|
/** @description Result of sending a command to a single agent */
|
|
|
|
|
CommandSingleResponse: {
|
|
|
|
|
commandId: string;
|
|
|
|
|
status: string;
|
|
|
|
|
};
|
|
|
|
|
/** @description Agent registration payload */
|
|
|
|
|
AgentRegistrationRequest: {
|
|
|
|
|
agentId: string;
|
|
|
|
|
name: string;
|
|
|
|
|
/** @default default */
|
|
|
|
|
group: string;
|
|
|
|
|
version?: string;
|
|
|
|
|
routeIds?: string[];
|
|
|
|
|
capabilities?: {
|
|
|
|
|
[key: string]: Record<string, never>;
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
/** @description Agent registration result with JWT tokens and SSE endpoint */
|
|
|
|
|
AgentRegistrationResponse: {
|
|
|
|
|
agentId: string;
|
|
|
|
|
sseEndpoint: string;
|
|
|
|
|
/** Format: int64 */
|
|
|
|
|
heartbeatIntervalMs?: number;
|
|
|
|
|
serverPublicKey: string;
|
|
|
|
|
accessToken: string;
|
|
|
|
|
refreshToken: string;
|
|
|
|
|
};
|
|
|
|
|
/** @description Result of broadcasting a command to multiple agents */
|
|
|
|
|
CommandBroadcastResponse: {
|
|
|
|
|
commandIds: string[];
|
|
|
|
|
/** Format: int32 */
|
|
|
|
|
targetCount?: number;
|
|
|
|
|
};
|
|
|
|
|
/** @description OIDC provider connectivity test result */
|
|
|
|
|
OidcTestResult: {
|
|
|
|
|
status: string;
|
|
|
|
|
authorizationEndpoint: string;
|
|
|
|
|
};
|
2026-03-14 14:24:33 +01:00
|
|
|
ExecutionStats: {
|
|
|
|
|
/** Format: int64 */
|
2026-03-14 15:33:37 +01:00
|
|
|
totalCount: number;
|
2026-03-14 14:24:33 +01:00
|
|
|
/** Format: int64 */
|
2026-03-14 15:33:37 +01:00
|
|
|
failedCount: number;
|
2026-03-14 14:24:33 +01:00
|
|
|
/** Format: int64 */
|
2026-03-14 15:33:37 +01:00
|
|
|
avgDurationMs: number;
|
2026-03-14 14:24:33 +01:00
|
|
|
/** Format: int64 */
|
2026-03-14 15:33:37 +01:00
|
|
|
p99LatencyMs: number;
|
2026-03-14 14:24:33 +01:00
|
|
|
/** Format: int64 */
|
2026-03-14 15:33:37 +01:00
|
|
|
activeCount: number;
|
2026-03-14 14:24:33 +01:00
|
|
|
/** Format: int64 */
|
2026-03-14 15:33:37 +01:00
|
|
|
totalToday: number;
|
2026-03-14 14:24:33 +01:00
|
|
|
/** Format: int64 */
|
2026-03-14 15:33:37 +01:00
|
|
|
prevTotalCount: number;
|
2026-03-14 14:24:33 +01:00
|
|
|
/** Format: int64 */
|
2026-03-14 15:33:37 +01:00
|
|
|
prevFailedCount: number;
|
2026-03-14 14:24:33 +01:00
|
|
|
/** Format: int64 */
|
2026-03-14 15:33:37 +01:00
|
|
|
prevAvgDurationMs: number;
|
2026-03-14 14:24:33 +01:00
|
|
|
/** Format: int64 */
|
2026-03-14 15:33:37 +01:00
|
|
|
prevP99LatencyMs: number;
|
2026-03-14 14:24:33 +01:00
|
|
|
};
|
|
|
|
|
StatsTimeseries: {
|
2026-03-14 15:33:37 +01:00
|
|
|
buckets: components["schemas"]["TimeseriesBucket"][];
|
2026-03-14 14:24:33 +01:00
|
|
|
};
|
|
|
|
|
TimeseriesBucket: {
|
|
|
|
|
/** Format: date-time */
|
2026-03-14 15:33:37 +01:00
|
|
|
time: string;
|
2026-03-14 14:24:33 +01:00
|
|
|
/** Format: int64 */
|
2026-03-14 15:33:37 +01:00
|
|
|
totalCount: number;
|
2026-03-14 14:24:33 +01:00
|
|
|
/** Format: int64 */
|
2026-03-14 15:33:37 +01:00
|
|
|
failedCount: number;
|
2026-03-14 14:24:33 +01:00
|
|
|
/** Format: int64 */
|
2026-03-14 15:33:37 +01:00
|
|
|
avgDurationMs: number;
|
2026-03-14 14:24:33 +01:00
|
|
|
/** Format: int64 */
|
2026-03-14 15:33:37 +01:00
|
|
|
p99DurationMs: number;
|
2026-03-14 14:24:33 +01:00
|
|
|
/** Format: int64 */
|
2026-03-14 15:33:37 +01:00
|
|
|
activeCount: number;
|
2026-03-14 14:24:33 +01:00
|
|
|
};
|
|
|
|
|
ExecutionDetail: {
|
2026-03-14 15:33:37 +01:00
|
|
|
executionId: string;
|
|
|
|
|
routeId: string;
|
|
|
|
|
agentId: string;
|
|
|
|
|
status: string;
|
2026-03-14 14:24:33 +01:00
|
|
|
/** Format: date-time */
|
2026-03-14 15:33:37 +01:00
|
|
|
startTime: string;
|
2026-03-14 14:24:33 +01:00
|
|
|
/** Format: date-time */
|
2026-03-14 15:33:37 +01:00
|
|
|
endTime: string;
|
2026-03-14 14:24:33 +01:00
|
|
|
/** Format: int64 */
|
2026-03-14 15:33:37 +01:00
|
|
|
durationMs: number;
|
|
|
|
|
correlationId: string;
|
|
|
|
|
exchangeId: string;
|
|
|
|
|
errorMessage: string;
|
|
|
|
|
errorStackTrace: string;
|
|
|
|
|
diagramContentHash: string;
|
|
|
|
|
processors: components["schemas"]["ProcessorNode"][];
|
2026-03-14 14:24:33 +01:00
|
|
|
};
|
|
|
|
|
ProcessorNode: {
|
2026-03-14 15:33:37 +01:00
|
|
|
processorId: string;
|
|
|
|
|
processorType: string;
|
|
|
|
|
status: string;
|
2026-03-14 14:24:33 +01:00
|
|
|
/** Format: date-time */
|
2026-03-14 15:33:37 +01:00
|
|
|
startTime: string;
|
2026-03-14 14:24:33 +01:00
|
|
|
/** Format: date-time */
|
2026-03-14 15:33:37 +01:00
|
|
|
endTime: string;
|
2026-03-14 14:24:33 +01:00
|
|
|
/** Format: int64 */
|
2026-03-14 15:33:37 +01:00
|
|
|
durationMs: number;
|
|
|
|
|
diagramNodeId: string;
|
|
|
|
|
errorMessage: string;
|
|
|
|
|
errorStackTrace: string;
|
|
|
|
|
children: components["schemas"]["ProcessorNode"][];
|
|
|
|
|
};
|
|
|
|
|
DiagramLayout: {
|
|
|
|
|
/** Format: double */
|
|
|
|
|
width?: number;
|
|
|
|
|
/** Format: double */
|
|
|
|
|
height?: number;
|
|
|
|
|
nodes?: components["schemas"]["PositionedNode"][];
|
|
|
|
|
edges?: components["schemas"]["PositionedEdge"][];
|
|
|
|
|
};
|
|
|
|
|
PositionedEdge: {
|
|
|
|
|
sourceId?: string;
|
|
|
|
|
targetId?: string;
|
|
|
|
|
label?: string;
|
|
|
|
|
points?: number[][];
|
|
|
|
|
};
|
|
|
|
|
PositionedNode: {
|
|
|
|
|
id?: string;
|
|
|
|
|
label?: string;
|
|
|
|
|
type?: string;
|
|
|
|
|
/** Format: double */
|
|
|
|
|
x?: number;
|
|
|
|
|
/** Format: double */
|
|
|
|
|
y?: number;
|
|
|
|
|
/** Format: double */
|
|
|
|
|
width?: number;
|
|
|
|
|
/** Format: double */
|
|
|
|
|
height?: number;
|
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
|
|
|
children?: components["schemas"]["PositionedNode"][];
|
2026-03-14 15:33:37 +01:00
|
|
|
};
|
|
|
|
|
/** @description OIDC configuration for SPA login flow */
|
|
|
|
|
OidcPublicConfigResponse: {
|
|
|
|
|
issuer: string;
|
|
|
|
|
clientId: string;
|
|
|
|
|
authorizationEndpoint: string;
|
|
|
|
|
/** @description Present if the provider supports RP-initiated logout */
|
|
|
|
|
endSessionEndpoint?: string;
|
|
|
|
|
};
|
|
|
|
|
/** @description Agent instance summary */
|
|
|
|
|
AgentInstanceResponse: {
|
|
|
|
|
id: string;
|
|
|
|
|
name: string;
|
|
|
|
|
group: string;
|
|
|
|
|
status: string;
|
|
|
|
|
routeIds: string[];
|
|
|
|
|
/** Format: date-time */
|
|
|
|
|
registeredAt: string;
|
|
|
|
|
/** Format: date-time */
|
|
|
|
|
lastHeartbeat: string;
|
2026-03-14 14:24:33 +01:00
|
|
|
};
|
|
|
|
|
SseEmitter: {
|
|
|
|
|
/** Format: int64 */
|
|
|
|
|
timeout?: number;
|
|
|
|
|
};
|
|
|
|
|
UserInfo: {
|
2026-03-14 15:33:37 +01:00
|
|
|
userId: string;
|
|
|
|
|
provider: string;
|
|
|
|
|
email: string;
|
|
|
|
|
displayName: string;
|
|
|
|
|
roles: string[];
|
2026-03-14 14:24:33 +01:00
|
|
|
/** Format: date-time */
|
2026-03-14 15:33:37 +01:00
|
|
|
createdAt: string;
|
2026-03-14 14:24:33 +01:00
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
responses: never;
|
|
|
|
|
parameters: never;
|
|
|
|
|
requestBodies: never;
|
|
|
|
|
headers: never;
|
|
|
|
|
pathItems: never;
|
2026-03-13 18:20:08 +01:00
|
|
|
}
|
2026-03-14 14:24:33 +01:00
|
|
|
export type $defs = Record<string, never>;
|
|
|
|
|
export interface operations {
|
|
|
|
|
updateRoles: {
|
|
|
|
|
parameters: {
|
|
|
|
|
query?: never;
|
|
|
|
|
header?: never;
|
|
|
|
|
path: {
|
|
|
|
|
userId: string;
|
|
|
|
|
};
|
|
|
|
|
cookie?: never;
|
|
|
|
|
};
|
|
|
|
|
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;
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
getConfig: {
|
|
|
|
|
parameters: {
|
|
|
|
|
query?: never;
|
|
|
|
|
header?: never;
|
|
|
|
|
path?: never;
|
|
|
|
|
cookie?: never;
|
|
|
|
|
};
|
|
|
|
|
requestBody?: never;
|
|
|
|
|
responses: {
|
|
|
|
|
/** @description Current OIDC configuration (client_secret masked) */
|
|
|
|
|
200: {
|
|
|
|
|
headers: {
|
|
|
|
|
[name: string]: unknown;
|
|
|
|
|
};
|
|
|
|
|
content: {
|
2026-03-14 15:33:37 +01:00
|
|
|
"*/*": components["schemas"]["OidcAdminConfigResponse"];
|
2026-03-14 14:24:33 +01:00
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
saveConfig: {
|
|
|
|
|
parameters: {
|
|
|
|
|
query?: never;
|
|
|
|
|
header?: never;
|
|
|
|
|
path?: never;
|
|
|
|
|
cookie?: never;
|
|
|
|
|
};
|
|
|
|
|
requestBody: {
|
|
|
|
|
content: {
|
2026-03-14 15:33:37 +01:00
|
|
|
"application/json": components["schemas"]["OidcAdminConfigRequest"];
|
2026-03-14 14:24:33 +01:00
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
responses: {
|
|
|
|
|
/** @description Configuration saved */
|
|
|
|
|
200: {
|
|
|
|
|
headers: {
|
|
|
|
|
[name: string]: unknown;
|
|
|
|
|
};
|
|
|
|
|
content: {
|
2026-03-14 15:33:37 +01:00
|
|
|
"*/*": components["schemas"]["OidcAdminConfigResponse"];
|
2026-03-14 14:24:33 +01:00
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
/** @description Invalid configuration */
|
|
|
|
|
400: {
|
|
|
|
|
headers: {
|
|
|
|
|
[name: string]: unknown;
|
|
|
|
|
};
|
|
|
|
|
content: {
|
2026-03-14 15:33:37 +01:00
|
|
|
"*/*": components["schemas"]["ErrorResponse"];
|
2026-03-14 14:24:33 +01:00
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
deleteConfig: {
|
|
|
|
|
parameters: {
|
|
|
|
|
query?: never;
|
|
|
|
|
header?: never;
|
|
|
|
|
path?: never;
|
|
|
|
|
cookie?: never;
|
|
|
|
|
};
|
|
|
|
|
requestBody?: never;
|
|
|
|
|
responses: {
|
|
|
|
|
/** @description Configuration deleted */
|
|
|
|
|
204: {
|
|
|
|
|
headers: {
|
|
|
|
|
[name: string]: unknown;
|
|
|
|
|
};
|
|
|
|
|
content?: never;
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
searchGet: {
|
|
|
|
|
parameters: {
|
|
|
|
|
query?: {
|
|
|
|
|
status?: string;
|
|
|
|
|
timeFrom?: string;
|
|
|
|
|
timeTo?: string;
|
|
|
|
|
correlationId?: string;
|
|
|
|
|
text?: string;
|
|
|
|
|
routeId?: string;
|
|
|
|
|
agentId?: string;
|
|
|
|
|
processorType?: string;
|
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
|
|
|
group?: string;
|
2026-03-14 14:24:33 +01:00
|
|
|
offset?: number;
|
|
|
|
|
limit?: number;
|
2026-03-14 19:34:22 +01:00
|
|
|
sortField?: string;
|
|
|
|
|
sortDir?: string;
|
2026-03-14 14:24:33 +01:00
|
|
|
};
|
|
|
|
|
header?: never;
|
|
|
|
|
path?: never;
|
|
|
|
|
cookie?: never;
|
|
|
|
|
};
|
|
|
|
|
requestBody?: never;
|
|
|
|
|
responses: {
|
|
|
|
|
/** @description OK */
|
|
|
|
|
200: {
|
|
|
|
|
headers: {
|
|
|
|
|
[name: string]: unknown;
|
|
|
|
|
};
|
|
|
|
|
content: {
|
|
|
|
|
"*/*": components["schemas"]["SearchResultExecutionSummary"];
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
searchPost: {
|
|
|
|
|
parameters: {
|
|
|
|
|
query?: never;
|
|
|
|
|
header?: never;
|
|
|
|
|
path?: never;
|
|
|
|
|
cookie?: never;
|
|
|
|
|
};
|
|
|
|
|
requestBody: {
|
|
|
|
|
content: {
|
|
|
|
|
"application/json": components["schemas"]["SearchRequest"];
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
responses: {
|
|
|
|
|
/** @description OK */
|
|
|
|
|
200: {
|
|
|
|
|
headers: {
|
|
|
|
|
[name: string]: unknown;
|
|
|
|
|
};
|
|
|
|
|
content: {
|
|
|
|
|
"*/*": components["schemas"]["SearchResultExecutionSummary"];
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
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: {
|
2026-03-14 15:33:37 +01:00
|
|
|
/** @description Token refreshed */
|
2026-03-14 14:24:33 +01:00
|
|
|
200: {
|
|
|
|
|
headers: {
|
|
|
|
|
[name: string]: unknown;
|
|
|
|
|
};
|
|
|
|
|
content: {
|
2026-03-14 15:33:37 +01:00
|
|
|
"*/*": components["schemas"]["AuthTokenResponse"];
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
/** @description Invalid refresh token */
|
|
|
|
|
401: {
|
|
|
|
|
headers: {
|
|
|
|
|
[name: string]: unknown;
|
|
|
|
|
};
|
|
|
|
|
content: {
|
|
|
|
|
"*/*": components["schemas"]["ErrorResponse"];
|
2026-03-14 14:24:33 +01:00
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
callback: {
|
|
|
|
|
parameters: {
|
|
|
|
|
query?: never;
|
|
|
|
|
header?: never;
|
|
|
|
|
path?: never;
|
|
|
|
|
cookie?: never;
|
|
|
|
|
};
|
|
|
|
|
requestBody: {
|
|
|
|
|
content: {
|
|
|
|
|
"application/json": components["schemas"]["CallbackRequest"];
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
responses: {
|
2026-03-14 15:33:37 +01:00
|
|
|
/** @description Authentication successful */
|
2026-03-14 14:24:33 +01:00
|
|
|
200: {
|
|
|
|
|
headers: {
|
|
|
|
|
[name: string]: unknown;
|
|
|
|
|
};
|
|
|
|
|
content: {
|
2026-03-14 15:33:37 +01:00
|
|
|
"*/*": components["schemas"]["AuthTokenResponse"];
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
/** @description OIDC authentication failed */
|
|
|
|
|
401: {
|
|
|
|
|
headers: {
|
|
|
|
|
[name: string]: unknown;
|
|
|
|
|
};
|
|
|
|
|
content: {
|
|
|
|
|
"*/*": components["schemas"]["ErrorResponse"];
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
/** @description Account not provisioned */
|
|
|
|
|
403: {
|
|
|
|
|
headers: {
|
|
|
|
|
[name: string]: unknown;
|
|
|
|
|
};
|
|
|
|
|
content: {
|
|
|
|
|
"*/*": components["schemas"]["ErrorResponse"];
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
/** @description OIDC not configured or disabled */
|
|
|
|
|
404: {
|
|
|
|
|
headers: {
|
|
|
|
|
[name: string]: unknown;
|
|
|
|
|
};
|
|
|
|
|
content: {
|
|
|
|
|
"*/*": components["schemas"]["AuthTokenResponse"];
|
2026-03-14 14:24:33 +01:00
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
login: {
|
|
|
|
|
parameters: {
|
|
|
|
|
query?: never;
|
|
|
|
|
header?: never;
|
|
|
|
|
path?: never;
|
|
|
|
|
cookie?: never;
|
|
|
|
|
};
|
|
|
|
|
requestBody: {
|
|
|
|
|
content: {
|
|
|
|
|
"application/json": components["schemas"]["LoginRequest"];
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
responses: {
|
2026-03-14 15:33:37 +01:00
|
|
|
/** @description Login successful */
|
2026-03-14 14:24:33 +01:00
|
|
|
200: {
|
|
|
|
|
headers: {
|
|
|
|
|
[name: string]: unknown;
|
|
|
|
|
};
|
|
|
|
|
content: {
|
2026-03-14 15:33:37 +01:00
|
|
|
"*/*": components["schemas"]["AuthTokenResponse"];
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
/** @description Invalid credentials */
|
|
|
|
|
401: {
|
|
|
|
|
headers: {
|
|
|
|
|
[name: string]: unknown;
|
|
|
|
|
};
|
|
|
|
|
content: {
|
|
|
|
|
"*/*": components["schemas"]["ErrorResponse"];
|
2026-03-14 14:24:33 +01:00
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
refresh_1: {
|
|
|
|
|
parameters: {
|
|
|
|
|
query?: never;
|
|
|
|
|
header?: never;
|
|
|
|
|
path: {
|
|
|
|
|
id: string;
|
|
|
|
|
};
|
|
|
|
|
cookie?: never;
|
|
|
|
|
};
|
|
|
|
|
requestBody: {
|
|
|
|
|
content: {
|
2026-03-14 15:33:37 +01:00
|
|
|
"application/json": components["schemas"]["AgentRefreshRequest"];
|
2026-03-14 14:24:33 +01:00
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
responses: {
|
|
|
|
|
/** @description New access token issued */
|
|
|
|
|
200: {
|
|
|
|
|
headers: {
|
|
|
|
|
[name: string]: unknown;
|
|
|
|
|
};
|
|
|
|
|
content: {
|
2026-03-14 15:33:37 +01:00
|
|
|
"*/*": components["schemas"]["AgentRefreshResponse"];
|
2026-03-14 14:24:33 +01:00
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
/** @description Invalid or expired refresh token */
|
|
|
|
|
401: {
|
|
|
|
|
headers: {
|
|
|
|
|
[name: string]: unknown;
|
|
|
|
|
};
|
|
|
|
|
content: {
|
2026-03-14 15:33:37 +01:00
|
|
|
"*/*": components["schemas"]["AgentRefreshResponse"];
|
2026-03-14 14:24:33 +01:00
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
/** @description Agent not found */
|
|
|
|
|
404: {
|
|
|
|
|
headers: {
|
|
|
|
|
[name: string]: unknown;
|
|
|
|
|
};
|
|
|
|
|
content: {
|
2026-03-14 15:33:37 +01:00
|
|
|
"*/*": components["schemas"]["AgentRefreshResponse"];
|
2026-03-14 14:24:33 +01:00
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
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: {
|
2026-03-14 15:33:37 +01:00
|
|
|
"application/json": components["schemas"]["CommandRequest"];
|
2026-03-14 14:24:33 +01:00
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
responses: {
|
|
|
|
|
/** @description Command accepted */
|
|
|
|
|
202: {
|
|
|
|
|
headers: {
|
|
|
|
|
[name: string]: unknown;
|
|
|
|
|
};
|
|
|
|
|
content: {
|
2026-03-14 15:33:37 +01:00
|
|
|
"*/*": components["schemas"]["CommandSingleResponse"];
|
2026-03-14 14:24:33 +01:00
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
/** @description Invalid command payload */
|
|
|
|
|
400: {
|
|
|
|
|
headers: {
|
|
|
|
|
[name: string]: unknown;
|
|
|
|
|
};
|
|
|
|
|
content: {
|
2026-03-14 15:33:37 +01:00
|
|
|
"*/*": components["schemas"]["CommandSingleResponse"];
|
2026-03-14 14:24:33 +01:00
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
/** @description Agent not registered */
|
|
|
|
|
404: {
|
|
|
|
|
headers: {
|
|
|
|
|
[name: string]: unknown;
|
|
|
|
|
};
|
|
|
|
|
content: {
|
2026-03-14 15:33:37 +01:00
|
|
|
"*/*": components["schemas"]["CommandSingleResponse"];
|
2026-03-14 14:24:33 +01:00
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
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: {
|
2026-03-14 15:33:37 +01:00
|
|
|
"application/json": components["schemas"]["AgentRegistrationRequest"];
|
2026-03-14 14:24:33 +01:00
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
responses: {
|
|
|
|
|
/** @description Agent registered successfully */
|
|
|
|
|
200: {
|
|
|
|
|
headers: {
|
|
|
|
|
[name: string]: unknown;
|
|
|
|
|
};
|
|
|
|
|
content: {
|
2026-03-14 15:33:37 +01:00
|
|
|
"*/*": components["schemas"]["AgentRegistrationResponse"];
|
2026-03-14 14:24:33 +01:00
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
/** @description Invalid registration payload */
|
|
|
|
|
400: {
|
|
|
|
|
headers: {
|
|
|
|
|
[name: string]: unknown;
|
|
|
|
|
};
|
|
|
|
|
content: {
|
2026-03-14 15:33:37 +01:00
|
|
|
"*/*": components["schemas"]["ErrorResponse"];
|
2026-03-14 14:24:33 +01:00
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
/** @description Missing or invalid bootstrap token */
|
|
|
|
|
401: {
|
|
|
|
|
headers: {
|
|
|
|
|
[name: string]: unknown;
|
|
|
|
|
};
|
|
|
|
|
content: {
|
2026-03-14 15:33:37 +01:00
|
|
|
"*/*": components["schemas"]["AgentRegistrationResponse"];
|
2026-03-14 14:24:33 +01:00
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
sendGroupCommand: {
|
|
|
|
|
parameters: {
|
|
|
|
|
query?: never;
|
|
|
|
|
header?: never;
|
|
|
|
|
path: {
|
|
|
|
|
group: string;
|
|
|
|
|
};
|
|
|
|
|
cookie?: never;
|
|
|
|
|
};
|
|
|
|
|
requestBody: {
|
|
|
|
|
content: {
|
2026-03-14 15:33:37 +01:00
|
|
|
"application/json": components["schemas"]["CommandRequest"];
|
2026-03-14 14:24:33 +01:00
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
responses: {
|
|
|
|
|
/** @description Commands accepted */
|
|
|
|
|
202: {
|
|
|
|
|
headers: {
|
|
|
|
|
[name: string]: unknown;
|
|
|
|
|
};
|
|
|
|
|
content: {
|
2026-03-14 15:33:37 +01:00
|
|
|
"*/*": components["schemas"]["CommandBroadcastResponse"];
|
2026-03-14 14:24:33 +01:00
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
/** @description Invalid command payload */
|
|
|
|
|
400: {
|
|
|
|
|
headers: {
|
|
|
|
|
[name: string]: unknown;
|
|
|
|
|
};
|
|
|
|
|
content: {
|
2026-03-14 15:33:37 +01:00
|
|
|
"*/*": components["schemas"]["CommandBroadcastResponse"];
|
2026-03-14 14:24:33 +01:00
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
broadcastCommand: {
|
|
|
|
|
parameters: {
|
|
|
|
|
query?: never;
|
|
|
|
|
header?: never;
|
|
|
|
|
path?: never;
|
|
|
|
|
cookie?: never;
|
|
|
|
|
};
|
|
|
|
|
requestBody: {
|
|
|
|
|
content: {
|
2026-03-14 15:33:37 +01:00
|
|
|
"application/json": components["schemas"]["CommandRequest"];
|
2026-03-14 14:24:33 +01:00
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
responses: {
|
|
|
|
|
/** @description Commands accepted */
|
|
|
|
|
202: {
|
|
|
|
|
headers: {
|
|
|
|
|
[name: string]: unknown;
|
|
|
|
|
};
|
|
|
|
|
content: {
|
2026-03-14 15:33:37 +01:00
|
|
|
"*/*": components["schemas"]["CommandBroadcastResponse"];
|
2026-03-14 14:24:33 +01:00
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
/** @description Invalid command payload */
|
|
|
|
|
400: {
|
|
|
|
|
headers: {
|
|
|
|
|
[name: string]: unknown;
|
|
|
|
|
};
|
|
|
|
|
content: {
|
2026-03-14 15:33:37 +01:00
|
|
|
"*/*": components["schemas"]["CommandBroadcastResponse"];
|
2026-03-14 14:24:33 +01:00
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
testConnection: {
|
|
|
|
|
parameters: {
|
|
|
|
|
query?: never;
|
|
|
|
|
header?: never;
|
|
|
|
|
path?: never;
|
|
|
|
|
cookie?: never;
|
|
|
|
|
};
|
|
|
|
|
requestBody?: never;
|
|
|
|
|
responses: {
|
|
|
|
|
/** @description Provider reachable */
|
|
|
|
|
200: {
|
|
|
|
|
headers: {
|
|
|
|
|
[name: string]: unknown;
|
|
|
|
|
};
|
|
|
|
|
content: {
|
2026-03-14 15:33:37 +01:00
|
|
|
"*/*": components["schemas"]["OidcTestResult"];
|
2026-03-14 14:24:33 +01:00
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
/** @description Provider unreachable or misconfigured */
|
|
|
|
|
400: {
|
|
|
|
|
headers: {
|
|
|
|
|
[name: string]: unknown;
|
|
|
|
|
};
|
|
|
|
|
content: {
|
2026-03-14 15:33:37 +01:00
|
|
|
"*/*": components["schemas"]["ErrorResponse"];
|
2026-03-14 14:24:33 +01:00
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
stats: {
|
|
|
|
|
parameters: {
|
|
|
|
|
query: {
|
|
|
|
|
from: string;
|
|
|
|
|
to?: string;
|
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
|
|
|
routeId?: string;
|
|
|
|
|
group?: string;
|
2026-03-14 14:24:33 +01:00
|
|
|
};
|
|
|
|
|
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;
|
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
|
|
|
routeId?: string;
|
|
|
|
|
group?: string;
|
2026-03-14 14:24:33 +01:00
|
|
|
};
|
|
|
|
|
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: {
|
2026-03-14 15:33:37 +01:00
|
|
|
/** @description Execution detail found */
|
2026-03-14 14:24:33 +01:00
|
|
|
200: {
|
|
|
|
|
headers: {
|
|
|
|
|
[name: string]: unknown;
|
|
|
|
|
};
|
|
|
|
|
content: {
|
|
|
|
|
"*/*": components["schemas"]["ExecutionDetail"];
|
|
|
|
|
};
|
|
|
|
|
};
|
2026-03-14 15:33:37 +01:00
|
|
|
/** @description Execution not found */
|
|
|
|
|
404: {
|
|
|
|
|
headers: {
|
|
|
|
|
[name: string]: unknown;
|
|
|
|
|
};
|
|
|
|
|
content: {
|
|
|
|
|
"*/*": components["schemas"]["ExecutionDetail"];
|
|
|
|
|
};
|
|
|
|
|
};
|
2026-03-14 14:24:33 +01:00
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
getProcessorSnapshot: {
|
|
|
|
|
parameters: {
|
|
|
|
|
query?: never;
|
|
|
|
|
header?: never;
|
|
|
|
|
path: {
|
|
|
|
|
executionId: string;
|
|
|
|
|
index: number;
|
|
|
|
|
};
|
|
|
|
|
cookie?: never;
|
|
|
|
|
};
|
|
|
|
|
requestBody?: never;
|
|
|
|
|
responses: {
|
2026-03-14 15:33:37 +01:00
|
|
|
/** @description Snapshot data */
|
2026-03-14 14:24:33 +01:00
|
|
|
200: {
|
|
|
|
|
headers: {
|
|
|
|
|
[name: string]: unknown;
|
|
|
|
|
};
|
|
|
|
|
content: {
|
|
|
|
|
"*/*": {
|
|
|
|
|
[key: string]: string;
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
};
|
2026-03-14 15:33:37 +01:00
|
|
|
/** @description Snapshot not found */
|
|
|
|
|
404: {
|
|
|
|
|
headers: {
|
|
|
|
|
[name: string]: unknown;
|
|
|
|
|
};
|
|
|
|
|
content: {
|
|
|
|
|
"*/*": {
|
|
|
|
|
[key: string]: string;
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
};
|
2026-03-14 14:24:33 +01:00
|
|
|
};
|
|
|
|
|
};
|
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
|
|
|
findByGroupAndRoute: {
|
|
|
|
|
parameters: {
|
|
|
|
|
query: {
|
|
|
|
|
group: string;
|
|
|
|
|
routeId: string;
|
|
|
|
|
};
|
|
|
|
|
header?: never;
|
|
|
|
|
path?: never;
|
|
|
|
|
cookie?: never;
|
|
|
|
|
};
|
|
|
|
|
requestBody?: never;
|
|
|
|
|
responses: {
|
|
|
|
|
/** @description Diagram layout returned */
|
|
|
|
|
200: {
|
|
|
|
|
headers: {
|
|
|
|
|
[name: string]: unknown;
|
|
|
|
|
};
|
|
|
|
|
content: {
|
|
|
|
|
"*/*": components["schemas"]["DiagramLayout"];
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
/** @description No diagram found for the given group and route */
|
|
|
|
|
404: {
|
|
|
|
|
headers: {
|
|
|
|
|
[name: string]: unknown;
|
|
|
|
|
};
|
|
|
|
|
content?: never;
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
};
|
2026-03-14 14:24:33 +01:00
|
|
|
renderDiagram: {
|
|
|
|
|
parameters: {
|
|
|
|
|
query?: never;
|
|
|
|
|
header?: never;
|
|
|
|
|
path: {
|
|
|
|
|
contentHash: string;
|
|
|
|
|
};
|
|
|
|
|
cookie?: never;
|
|
|
|
|
};
|
|
|
|
|
requestBody?: never;
|
|
|
|
|
responses: {
|
|
|
|
|
/** @description Diagram rendered successfully */
|
|
|
|
|
200: {
|
|
|
|
|
headers: {
|
|
|
|
|
[name: string]: unknown;
|
|
|
|
|
};
|
|
|
|
|
content: {
|
2026-03-14 15:33:37 +01:00
|
|
|
"image/svg+xml": string;
|
|
|
|
|
"application/json": components["schemas"]["DiagramLayout"];
|
2026-03-14 14:24:33 +01:00
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
/** @description Diagram not found */
|
|
|
|
|
404: {
|
|
|
|
|
headers: {
|
|
|
|
|
[name: string]: unknown;
|
|
|
|
|
};
|
|
|
|
|
content: {
|
|
|
|
|
"*/*": Record<string, never>;
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
getConfig_1: {
|
|
|
|
|
parameters: {
|
|
|
|
|
query?: never;
|
|
|
|
|
header?: never;
|
|
|
|
|
path?: never;
|
|
|
|
|
cookie?: never;
|
|
|
|
|
};
|
|
|
|
|
requestBody?: never;
|
|
|
|
|
responses: {
|
2026-03-14 15:33:37 +01:00
|
|
|
/** @description OIDC configuration */
|
2026-03-14 14:24:33 +01:00
|
|
|
200: {
|
|
|
|
|
headers: {
|
|
|
|
|
[name: string]: unknown;
|
|
|
|
|
};
|
|
|
|
|
content: {
|
2026-03-14 15:33:37 +01:00
|
|
|
"*/*": components["schemas"]["OidcPublicConfigResponse"];
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
/** @description OIDC not configured or disabled */
|
|
|
|
|
404: {
|
|
|
|
|
headers: {
|
|
|
|
|
[name: string]: unknown;
|
|
|
|
|
};
|
|
|
|
|
content: {
|
|
|
|
|
"*/*": components["schemas"]["OidcPublicConfigResponse"];
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
/** @description Failed to retrieve OIDC provider metadata */
|
|
|
|
|
500: {
|
|
|
|
|
headers: {
|
|
|
|
|
[name: string]: unknown;
|
|
|
|
|
};
|
|
|
|
|
content: {
|
|
|
|
|
"*/*": components["schemas"]["ErrorResponse"];
|
2026-03-14 14:24:33 +01:00
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
listAgents: {
|
|
|
|
|
parameters: {
|
|
|
|
|
query?: {
|
|
|
|
|
status?: string;
|
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
|
|
|
group?: string;
|
2026-03-14 14:24:33 +01:00
|
|
|
};
|
|
|
|
|
header?: never;
|
|
|
|
|
path?: never;
|
|
|
|
|
cookie?: never;
|
|
|
|
|
};
|
|
|
|
|
requestBody?: never;
|
|
|
|
|
responses: {
|
|
|
|
|
/** @description Agent list returned */
|
|
|
|
|
200: {
|
|
|
|
|
headers: {
|
|
|
|
|
[name: string]: unknown;
|
|
|
|
|
};
|
|
|
|
|
content: {
|
2026-03-14 15:33:37 +01:00
|
|
|
"*/*": components["schemas"]["AgentInstanceResponse"][];
|
2026-03-14 14:24:33 +01:00
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
/** @description Invalid status filter */
|
|
|
|
|
400: {
|
|
|
|
|
headers: {
|
|
|
|
|
[name: string]: unknown;
|
|
|
|
|
};
|
|
|
|
|
content: {
|
2026-03-14 15:33:37 +01:00
|
|
|
"*/*": components["schemas"]["ErrorResponse"];
|
2026-03-14 14:24:33 +01:00
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
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;
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
};
|
Add React UI with Execution Explorer, auth, and standalone deployment
- Scaffold Vite + React + TypeScript frontend in ui/ with full design
system (dark/light themes) matching the HTML mockups
- Implement Execution Explorer page: search filters, results table with
expandable processor tree and exchange detail sidebar, pagination
- Add UI authentication: UiAuthController (login/refresh endpoints),
JWT filter handles ui: subject prefix, CORS configuration
- Shared components: StatusPill, DurationBar, StatCard, AppBadge,
FilterChip, Pagination — all using CSS Modules with design tokens
- API client layer: openapi-fetch with auth middleware, TanStack Query
hooks for search/detail/snapshot queries, Zustand for state
- Standalone deployment: Nginx Dockerfile, K8s Deployment + ConfigMap +
NodePort (30080), runtime config.js for API base URL
- Embedded mode: maven-resources-plugin copies ui/dist into JAR static
resources, SPA forward controller for client-side routing
- CI/CD: UI build step, Docker build/push for server-ui image, K8s
deploy step for UI, UI credential secrets
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 13:59:22 +01:00
|
|
|
}
|