2026-03-11 10:06:17 +01:00
|
|
|
<?xml version="1.0" encoding="UTF-8"?>
|
|
|
|
|
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
|
|
|
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
|
|
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
|
|
|
|
<modelVersion>4.0.0</modelVersion>
|
|
|
|
|
|
|
|
|
|
<parent>
|
2026-04-15 15:28:42 +02:00
|
|
|
<groupId>com.cameleer</groupId>
|
|
|
|
|
<artifactId>cameleer-server-parent</artifactId>
|
2026-03-11 10:06:17 +01:00
|
|
|
<version>1.0-SNAPSHOT</version>
|
|
|
|
|
</parent>
|
|
|
|
|
|
2026-04-15 15:28:42 +02:00
|
|
|
<artifactId>cameleer-server-app</artifactId>
|
|
|
|
|
<name>Cameleer Server App</name>
|
2026-03-11 10:06:17 +01:00
|
|
|
<description>Spring Boot web app with REST controllers and SSE</description>
|
|
|
|
|
|
|
|
|
|
<dependencies>
|
|
|
|
|
<dependency>
|
2026-04-15 15:28:42 +02:00
|
|
|
<groupId>com.cameleer</groupId>
|
|
|
|
|
<artifactId>cameleer-server-core</artifactId>
|
2026-03-11 10:06:17 +01:00
|
|
|
</dependency>
|
|
|
|
|
<dependency>
|
|
|
|
|
<groupId>org.springframework.boot</groupId>
|
|
|
|
|
<artifactId>spring-boot-starter-web</artifactId>
|
|
|
|
|
</dependency>
|
|
|
|
|
<dependency>
|
|
|
|
|
<groupId>org.springframework.boot</groupId>
|
|
|
|
|
<artifactId>spring-boot-starter-websocket</artifactId>
|
|
|
|
|
</dependency>
|
feat(01-01): add ClickHouse dependencies, Docker Compose, schema, and app config
- Add clickhouse-jdbc, springdoc-openapi, actuator, testcontainers deps
- Add slf4j-api to core module
- Create Docker Compose with ClickHouse service on ports 8123/9000
- Create ClickHouse DDL: route_executions, route_diagrams, agent_metrics
- Configure application.yml with datasource, ingestion buffer, springdoc
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 11:47:20 +01:00
|
|
|
<dependency>
|
|
|
|
|
<groupId>org.springframework.boot</groupId>
|
|
|
|
|
<artifactId>spring-boot-starter-actuator</artifactId>
|
|
|
|
|
</dependency>
|
feat: add Micrometer Prometheus metrics to server
Adds micrometer-registry-prometheus and exposes /api/v1/prometheus
endpoint (unauthenticated for scraping). ServerMetrics component
provides business metrics beyond default JVM/HTTP:
Gauges: agents by state, SSE connections, buffer depths (execution,
processor, log, metrics), accumulator pending exchanges.
Counters: ingestion drops (buffer_full, no_agent, no_identity),
agent transitions (went_stale, went_dead, recovered), deployment
outcomes (running, failed, degraded), auth failures (invalid_token,
revoked, oidc_rejected).
Timers: ClickHouse flush duration by type, deployment duration.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 18:23:27 +02:00
|
|
|
<dependency>
|
|
|
|
|
<groupId>io.micrometer</groupId>
|
|
|
|
|
<artifactId>micrometer-registry-prometheus</artifactId>
|
|
|
|
|
</dependency>
|
feat(01-01): add ClickHouse dependencies, Docker Compose, schema, and app config
- Add clickhouse-jdbc, springdoc-openapi, actuator, testcontainers deps
- Add slf4j-api to core module
- Create Docker Compose with ClickHouse service on ports 8123/9000
- Create ClickHouse DDL: route_executions, route_diagrams, agent_metrics
- Configure application.yml with datasource, ingestion buffer, springdoc
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 11:47:20 +01:00
|
|
|
<dependency>
|
|
|
|
|
<groupId>org.springframework.boot</groupId>
|
|
|
|
|
<artifactId>spring-boot-starter-jdbc</artifactId>
|
|
|
|
|
</dependency>
|
|
|
|
|
<dependency>
|
2026-03-16 18:13:45 +01:00
|
|
|
<groupId>org.postgresql</groupId>
|
|
|
|
|
<artifactId>postgresql</artifactId>
|
|
|
|
|
</dependency>
|
|
|
|
|
<dependency>
|
|
|
|
|
<groupId>org.flywaydb</groupId>
|
|
|
|
|
<artifactId>flyway-core</artifactId>
|
|
|
|
|
</dependency>
|
|
|
|
|
<dependency>
|
|
|
|
|
<groupId>org.flywaydb</groupId>
|
|
|
|
|
<artifactId>flyway-database-postgresql</artifactId>
|
|
|
|
|
</dependency>
|
2026-03-31 16:49:04 +02:00
|
|
|
<dependency>
|
|
|
|
|
<groupId>com.clickhouse</groupId>
|
|
|
|
|
<artifactId>clickhouse-jdbc</artifactId>
|
|
|
|
|
<version>0.9.7</version>
|
|
|
|
|
<classifier>all</classifier>
|
|
|
|
|
</dependency>
|
feat(01-01): add ClickHouse dependencies, Docker Compose, schema, and app config
- Add clickhouse-jdbc, springdoc-openapi, actuator, testcontainers deps
- Add slf4j-api to core module
- Create Docker Compose with ClickHouse service on ports 8123/9000
- Create ClickHouse DDL: route_executions, route_diagrams, agent_metrics
- Configure application.yml with datasource, ingestion buffer, springdoc
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 11:47:20 +01:00
|
|
|
<dependency>
|
|
|
|
|
<groupId>org.springdoc</groupId>
|
|
|
|
|
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
|
|
|
|
|
<version>2.8.6</version>
|
|
|
|
|
</dependency>
|
2026-03-11 16:04:32 +01:00
|
|
|
<dependency>
|
|
|
|
|
<groupId>org.eclipse.elk</groupId>
|
|
|
|
|
<artifactId>org.eclipse.elk.core</artifactId>
|
|
|
|
|
<version>0.11.0</version>
|
|
|
|
|
</dependency>
|
|
|
|
|
<dependency>
|
|
|
|
|
<groupId>org.eclipse.elk</groupId>
|
|
|
|
|
<artifactId>org.eclipse.elk.alg.layered</artifactId>
|
|
|
|
|
<version>0.11.0</version>
|
|
|
|
|
</dependency>
|
|
|
|
|
<dependency>
|
|
|
|
|
<groupId>org.jfree</groupId>
|
|
|
|
|
<artifactId>org.jfree.svg</artifactId>
|
|
|
|
|
<version>5.0.7</version>
|
|
|
|
|
</dependency>
|
feat(02-02): implement ELK diagram renderer with SVG/JSON content negotiation
- ElkDiagramRenderer: ELK layered layout (top-to-bottom) with JFreeSVG rendering
- Color-coded nodes: blue endpoints, green processors, red errors, purple EIPs, cyan cross-route
- Compound node support for CHOICE/SPLIT/TRY_CATCH swimlane groups
- DiagramRenderController: GET /api/v1/diagrams/{hash}/render with Accept header negotiation
- DiagramBeanConfig for Spring wiring
- 11 unit tests (layout, SVG structure, colors, compound nodes)
- 4 integration tests (SVG, JSON, 404, default format)
- Added xtext xbase lib dependency for ELK compatibility
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 16:17:13 +01:00
|
|
|
<dependency>
|
|
|
|
|
<groupId>org.eclipse.xtext</groupId>
|
|
|
|
|
<artifactId>org.eclipse.xtext.xbase.lib</artifactId>
|
|
|
|
|
<version>2.37.0</version>
|
|
|
|
|
</dependency>
|
2026-04-19 19:26:57 +02:00
|
|
|
<dependency>
|
|
|
|
|
<groupId>com.samskivert</groupId>
|
|
|
|
|
<artifactId>jmustache</artifactId>
|
|
|
|
|
<version>1.16</version>
|
|
|
|
|
</dependency>
|
2026-03-14 15:33:37 +01:00
|
|
|
<dependency>
|
|
|
|
|
<groupId>org.springframework.boot</groupId>
|
|
|
|
|
<artifactId>spring-boot-starter-validation</artifactId>
|
|
|
|
|
</dependency>
|
2026-03-11 19:58:59 +01:00
|
|
|
<dependency>
|
|
|
|
|
<groupId>org.springframework.boot</groupId>
|
|
|
|
|
<artifactId>spring-boot-starter-security</artifactId>
|
|
|
|
|
</dependency>
|
2026-04-05 13:06:53 +02:00
|
|
|
<dependency>
|
|
|
|
|
<groupId>org.springframework.boot</groupId>
|
|
|
|
|
<artifactId>spring-boot-starter-oauth2-resource-server</artifactId>
|
|
|
|
|
</dependency>
|
2026-03-11 19:58:59 +01:00
|
|
|
<dependency>
|
|
|
|
|
<groupId>com.nimbusds</groupId>
|
|
|
|
|
<artifactId>nimbus-jose-jwt</artifactId>
|
|
|
|
|
<version>9.47</version>
|
|
|
|
|
</dependency>
|
Add RBAC with role-based endpoint authorization and OIDC support
Implement three-phase security upgrade:
Phase 1 - RBAC: Extend JWT with roles claim, populate Spring
GrantedAuthority in filter, enforce role-based access (AGENT for
data/heartbeat/SSE, VIEWER+ for search/diagrams, OPERATOR+ for
commands, ADMIN for user management). Configurable JWT secret via
CAMELEER_JWT_SECRET env var for token persistence across restarts.
Phase 2 - User persistence: ClickHouse users table with
ReplacingMergeTree, UserRepository interface + ClickHouse impl,
UserAdminController for CRUD at /api/v1/admin/users. Local login
upserts user on each authentication.
Phase 3 - OIDC: Token exchange flow where SPA sends auth code,
server exchanges it server-side (keeping client_secret secure),
validates id_token via JWKS, resolves roles (DB override > OIDC
claim > default), issues internal JWT. Conditional on
CAMELEER_OIDC_ENABLED=true. Uses oauth2-oidc-sdk for standards
compliance.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-14 12:35:45 +01:00
|
|
|
<dependency>
|
|
|
|
|
<groupId>com.nimbusds</groupId>
|
|
|
|
|
<artifactId>oauth2-oidc-sdk</artifactId>
|
|
|
|
|
<version>11.23.1</version>
|
|
|
|
|
</dependency>
|
2026-03-11 10:06:17 +01:00
|
|
|
<dependency>
|
|
|
|
|
<groupId>org.springframework.boot</groupId>
|
|
|
|
|
<artifactId>spring-boot-starter-test</artifactId>
|
|
|
|
|
<scope>test</scope>
|
|
|
|
|
</dependency>
|
2026-03-11 19:58:59 +01:00
|
|
|
<dependency>
|
|
|
|
|
<groupId>org.springframework.security</groupId>
|
|
|
|
|
<artifactId>spring-security-test</artifactId>
|
|
|
|
|
<scope>test</scope>
|
|
|
|
|
</dependency>
|
feat(01-01): add ClickHouse dependencies, Docker Compose, schema, and app config
- Add clickhouse-jdbc, springdoc-openapi, actuator, testcontainers deps
- Add slf4j-api to core module
- Create Docker Compose with ClickHouse service on ports 8123/9000
- Create ClickHouse DDL: route_executions, route_diagrams, agent_metrics
- Configure application.yml with datasource, ingestion buffer, springdoc
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 11:47:20 +01:00
|
|
|
<dependency>
|
|
|
|
|
<groupId>org.testcontainers</groupId>
|
2026-03-16 18:56:13 +01:00
|
|
|
<artifactId>testcontainers-postgresql</artifactId>
|
|
|
|
|
<scope>test</scope>
|
|
|
|
|
</dependency>
|
|
|
|
|
<dependency>
|
|
|
|
|
<groupId>org.testcontainers</groupId>
|
|
|
|
|
<artifactId>testcontainers-junit-jupiter</artifactId>
|
2026-03-16 18:13:45 +01:00
|
|
|
<scope>test</scope>
|
|
|
|
|
</dependency>
|
2026-03-31 16:49:04 +02:00
|
|
|
<dependency>
|
|
|
|
|
<groupId>org.testcontainers</groupId>
|
|
|
|
|
<artifactId>testcontainers-clickhouse</artifactId>
|
|
|
|
|
<scope>test</scope>
|
|
|
|
|
</dependency>
|
2026-04-07 23:39:57 +02:00
|
|
|
<dependency>
|
|
|
|
|
<groupId>com.github.docker-java</groupId>
|
|
|
|
|
<artifactId>docker-java-core</artifactId>
|
|
|
|
|
<version>3.4.1</version>
|
|
|
|
|
</dependency>
|
|
|
|
|
<dependency>
|
|
|
|
|
<groupId>com.github.docker-java</groupId>
|
|
|
|
|
<artifactId>docker-java-transport-zerodep</artifactId>
|
|
|
|
|
<version>3.4.1</version>
|
|
|
|
|
</dependency>
|
feat(01-01): add ClickHouse dependencies, Docker Compose, schema, and app config
- Add clickhouse-jdbc, springdoc-openapi, actuator, testcontainers deps
- Add slf4j-api to core module
- Create Docker Compose with ClickHouse service on ports 8123/9000
- Create ClickHouse DDL: route_executions, route_diagrams, agent_metrics
- Configure application.yml with datasource, ingestion buffer, springdoc
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 11:47:20 +01:00
|
|
|
<dependency>
|
|
|
|
|
<groupId>org.awaitility</groupId>
|
|
|
|
|
<artifactId>awaitility</artifactId>
|
|
|
|
|
<scope>test</scope>
|
|
|
|
|
</dependency>
|
2026-04-19 16:03:56 +02:00
|
|
|
<dependency>
|
|
|
|
|
<groupId>org.wiremock</groupId>
|
|
|
|
|
<artifactId>wiremock-standalone</artifactId>
|
|
|
|
|
<version>3.9.1</version>
|
|
|
|
|
<scope>test</scope>
|
|
|
|
|
</dependency>
|
2026-03-11 10:06:17 +01:00
|
|
|
</dependencies>
|
|
|
|
|
|
|
|
|
|
<build>
|
|
|
|
|
<plugins>
|
|
|
|
|
<plugin>
|
|
|
|
|
<groupId>org.springframework.boot</groupId>
|
|
|
|
|
<artifactId>spring-boot-maven-plugin</artifactId>
|
|
|
|
|
</plugin>
|
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
|
|
|
<plugin>
|
|
|
|
|
<groupId>org.apache.maven.plugins</groupId>
|
|
|
|
|
<artifactId>maven-resources-plugin</artifactId>
|
|
|
|
|
<executions>
|
|
|
|
|
<execution>
|
|
|
|
|
<id>copy-ui-dist</id>
|
|
|
|
|
<phase>generate-resources</phase>
|
|
|
|
|
<goals>
|
|
|
|
|
<goal>copy-resources</goal>
|
|
|
|
|
</goals>
|
|
|
|
|
<configuration>
|
|
|
|
|
<outputDirectory>${project.build.directory}/classes/static</outputDirectory>
|
|
|
|
|
<resources>
|
|
|
|
|
<resource>
|
|
|
|
|
<directory>${project.basedir}/../ui/dist</directory>
|
|
|
|
|
<filtering>false</filtering>
|
|
|
|
|
</resource>
|
|
|
|
|
</resources>
|
|
|
|
|
</configuration>
|
|
|
|
|
</execution>
|
|
|
|
|
</executions>
|
|
|
|
|
</plugin>
|
2026-03-11 17:36:33 +01:00
|
|
|
<plugin>
|
|
|
|
|
<groupId>org.apache.maven.plugins</groupId>
|
|
|
|
|
<artifactId>maven-surefire-plugin</artifactId>
|
|
|
|
|
<configuration>
|
2026-04-23 10:48:34 +02:00
|
|
|
<forkCount>1C</forkCount>
|
|
|
|
|
<reuseForks>true</reuseForks>
|
2026-03-11 17:36:33 +01:00
|
|
|
</configuration>
|
|
|
|
|
</plugin>
|
|
|
|
|
<plugin>
|
|
|
|
|
<groupId>org.apache.maven.plugins</groupId>
|
|
|
|
|
<artifactId>maven-failsafe-plugin</artifactId>
|
|
|
|
|
<configuration>
|
|
|
|
|
<forkCount>1</forkCount>
|
2026-03-17 00:26:50 +01:00
|
|
|
<reuseForks>true</reuseForks>
|
2026-03-11 17:36:33 +01:00
|
|
|
</configuration>
|
|
|
|
|
<executions>
|
|
|
|
|
<execution>
|
|
|
|
|
<goals>
|
|
|
|
|
<goal>integration-test</goal>
|
|
|
|
|
<goal>verify</goal>
|
|
|
|
|
</goals>
|
|
|
|
|
</execution>
|
|
|
|
|
</executions>
|
|
|
|
|
</plugin>
|
2026-03-11 10:06:17 +01:00
|
|
|
</plugins>
|
|
|
|
|
</build>
|
|
|
|
|
</project>
|