Skip to content
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
Show all changes
41 commits
Select commit Hold shift + click to select a range
4cfc24a
feat: add /welcome and /workforce SPA entry points
ginccc Jul 22, 2026
c0835c9
feat: EDDI 6.2.0 — /welcome + /workforce entry points, version bump
ginccc Jul 23, 2026
9f212a5
fix: address PR review — CSP inline script, unused path param
ginccc Jul 23, 2026
bf8860e
fix: address PR review round 2 — /index.html permit, unit tests
ginccc Jul 23, 2026
eb14c6f
fix: address PR review round 3 — null guards, meaningful tests
ginccc Jul 23, 2026
02b68ef
fix: tests match actual behavior — null-guard 500, delegation
ginccc Jul 23, 2026
545d512
fix: remove leading slash from getResourceAsStream, proper 200 tests
ginccc Jul 23, 2026
9973198
chore: update Manager UI assets (Manager@2fa96bb2)
ginccc Jul 23, 2026
e6f5e3e
Merge remote-tracking branch 'origin/main' into feat/v6.2.0-prep
ginccc Jul 23, 2026
a3f6d04
docs(readme): add HITL, attachments, group follow-up, error recovery,…
ginccc Jul 23, 2026
251fff1
chore(docker): bump ubi9/openjdk-25-runtime:1.24 to latest digest
ginccc Jul 23, 2026
896a49a
chore(deps): bump Quarkus 3.37.3 -> 3.37.4; reformat UI Javadoc
ginccc Jul 23, 2026
5dc45b3
chore: update Manager UI assets (Manager@c7066939)
ginccc Jul 24, 2026
0bb5657
chore: update Manager UI assets (Manager@2d93d0b4)
ginccc Jul 24, 2026
dbd6e8b
fix(llm,group): empty task results, maxTokens defaults, verification …
ginccc Jul 24, 2026
57c3640
fix(group): increase default agent timeout 60s -> 180s
ginccc Jul 24, 2026
cd05519
feat: add SSE heartbeat to log stream endpoint
ginccc Jul 24, 2026
8dfea73
chore: update Manager UI assets (Manager@7e2c7f7b)
ginccc Jul 24, 2026
702e2f7
fix: serialize SSE log events as JSON instead of toString()
ginccc Jul 24, 2026
43f4d6c
fix: serialize SSE log events as JSON, use injectable clock for heart…
ginccc Jul 24, 2026
46818d1
fix: constructor-based clock injection (CDI-safe), fix sendEvent cloc…
ginccc Jul 24, 2026
e79e644
fix: resolve printf-style %s in log messages, fix DeploymentInfo equa…
ginccc Jul 24, 2026
2925707
chore: update Chat UI assets (chat-ui@71fa395)
ginccc Jul 24, 2026
04e2e7b
chore: update Manager UI assets (Manager@c5cbf1de)
ginccc Jul 24, 2026
978d1b1
fix: format printf-style %s/%d patterns in BoundedLogStore when ExtLo…
ginccc Jul 24, 2026
fd6ece9
fix(memory): clean up ConversationDescriptors on permanent conversati…
ginccc Jul 24, 2026
27fbf18
chore: update Manager UI assets (Manager@99b20502)
ginccc Jul 26, 2026
0080444
test(ui): close entity streams in welcome/workforce resource tests
ginccc Jul 26, 2026
c54fa95
fix(attachments): keep uploaded files reachable after the turn they a…
ginccc Jul 26, 2026
14c7046
chore: update Manager UI assets (Manager@44a0e684)
ginccc Jul 26, 2026
4716d01
fix(ci): remove accidentally-committed langchain4j-mcp decompiled sou…
ginccc Jul 26, 2026
e721807
fix(attachments): make uploaded files usable for the whole conversation
ginccc Jul 26, 2026
a850731
fix(attachments): raise the text-extraction cap to match the tool-res…
ginccc Jul 27, 2026
7fd9ffb
fix: address review findings on the 6.2.0-prep branch
ginccc Jul 27, 2026
1ec89a3
fix(llm): stop a mistyped model parameter from failing every conversa…
ginccc Jul 27, 2026
196ab3a
fix(llm): assert the Anthropic maxTokens default through public API
ginccc Jul 27, 2026
8ca285c
fix(groups): stop a JSON null rendering as the literal word "null"
ginccc Jul 27, 2026
d71c0a1
fix(logs): widen printf detection; quiet the blank-output log
ginccc Jul 27, 2026
e566efc
chore: untrack local tooling and event material
ginccc Jul 27, 2026
a477492
docs(ui): explain the ignored localStorage failure in landing-redirect
ginccc Jul 27, 2026
bf3ea70
fix(llm): cover the Float parse sites the sweep missed; blank is absent
ginccc Jul 27, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/redhat-certify.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@ on:
workflow_dispatch:
inputs:
version:
description: "EDDI version (e.g. 6.1.2)"
description: "EDDI version (e.g. 6.2.0)"
required: true
default: "6.1.2"
default: "6.2.0"
release:
description: "Release number (e.g. 1, 2, 3)"
required: true
Expand Down
2 changes: 1 addition & 1 deletion docs/agent-father-deep-dive.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# The Agent Father: A Deep Dive

**Version: 6.0.0**
**Version: 6.2.0**

## Overview

Expand Down
2 changes: 1 addition & 1 deletion docs/agent-father-langchain-tools-guide.md
Original file line number Diff line number Diff line change
Expand Up @@ -341,5 +341,5 @@ When Agent Father creates the langchain configuration, it generates:
---

**Last Updated:** March 2026
**EDDI Version:** 6.0.0
**EDDI Version:** 6.2.0
**Agent Father Version:** 3.0.1
2 changes: 1 addition & 1 deletion docs/agent-manager-gui.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Agent Manager Dashboard

**Version: 6.0.0**
**Version: 6.2.0**

## Overview

Expand Down
2 changes: 1 addition & 1 deletion docs/architecture.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# EDDI Architecture

**Version: 6.1.2**
**Version: 6.2.0**

This document provides a comprehensive overview of EDDI's architecture, design principles, and internal workflow.

Expand Down
2 changes: 1 addition & 1 deletion docs/conversation-memory.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Conversation Memory and State Management

**Version: 6.0.0**
**Version: 6.2.0**

## Overview

Expand Down
2 changes: 1 addition & 1 deletion docs/developer-quickstart.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Developer Quickstart Guide

**Version: 6.0.0**
**Version: 6.2.0**

This guide helps developers quickly understand EDDI's architecture and start building agents.

Expand Down
2 changes: 1 addition & 1 deletion docs/getting-started.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Getting started

**Version: 6.0.0**
**Version: 6.2.0**

Welcome to **EDDI**!

Expand Down
2 changes: 1 addition & 1 deletion docs/langchain.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# LLM Integration

**Version: 6.0.0**
**Version: 6.2.0**

## Overview

Expand Down
2 changes: 1 addition & 1 deletion docs/properties.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Properties

**Version: 6.0.0**
**Version: 6.2.0**

## Overview

Expand Down
2 changes: 1 addition & 1 deletion docs/putting-it-all-together.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Putting It All Together

**Version: 6.0.0**
**Version: 6.2.0**

This guide shows how all of EDDI's components work together to create a complete, functional agent. We'll build a real-world example step-by-step, explaining how each piece connects.

Expand Down
4 changes: 2 additions & 2 deletions docs/redhat-openshift.md
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ The certification release process is fully automated:

To trigger a certification release, go to **Actions → Red Hat Certification Release → Run workflow** and provide:

- `version` — EDDI version (e.g., `6.1.0`)
- `version` — EDDI version (e.g., `6.2.0`)
- `release` — Incremental release number (e.g., `1`, `2`, `3`)
- `submit` — Whether to submit results to Red Hat (`true`/`false`)
- `registry` — Target registry (`docker.io` or `quay.io`)
Expand Down Expand Up @@ -171,5 +171,5 @@ For production deployments with MongoDB:
docker run -d \
-p 7070:7070 \
-e QUARKUS_MONGODB_CONNECTION_STRING=mongodb://mongo:27017 \
labsai/eddi:6.1.0
labsai/eddi:6.2.0
```
2 changes: 1 addition & 1 deletion docs/security.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Security

**Version: 6.0.0**
**Version: 6.2.0**

This document describes the security measures applied to EDDI's AI Agent Tooling system, particularly for tools that execute in response to LLM-generated arguments, as well as the Keycloak-based authentication layer.

Expand Down
2 changes: 1 addition & 1 deletion helm/eddi/Chart.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ description: >-
and integrate with LLM providers via a unified REST API.
type: application
version: 1.0.0
appVersion: "6.1.2"
appVersion: "6.2.0"
home: https://eddi.labs.ai
sources:
- https://github.com/labsai/EDDI
Expand Down
4 changes: 2 additions & 2 deletions k8s/base/eddi-deployment.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ metadata:
name: eddi
labels:
app.kubernetes.io/name: eddi
app.kubernetes.io/version: "6.1.2"
app.kubernetes.io/version: "6.2.0"
Comment thread
ginccc marked this conversation as resolved.
app.kubernetes.io/component: server
app.kubernetes.io/part-of: eddi
spec:
Expand All @@ -23,7 +23,7 @@ spec:
metadata:
labels:
app.kubernetes.io/name: eddi
app.kubernetes.io/version: "6.1.2"
app.kubernetes.io/version: "6.2.0"
app.kubernetes.io/component: server
app.kubernetes.io/part-of: eddi
annotations:
Expand Down
4 changes: 2 additions & 2 deletions k8s/quickstart.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -169,7 +169,7 @@ metadata:
namespace: eddi
labels:
app.kubernetes.io/name: eddi
app.kubernetes.io/version: "6.1.2"
app.kubernetes.io/version: "6.2.0"
app.kubernetes.io/component: server
app.kubernetes.io/part-of: eddi
spec:
Expand All @@ -187,7 +187,7 @@ spec:
metadata:
labels:
app.kubernetes.io/name: eddi
app.kubernetes.io/version: "6.1.2"
app.kubernetes.io/version: "6.2.0"
app.kubernetes.io/component: server
app.kubernetes.io/part-of: eddi
annotations:
Expand Down
25 changes: 13 additions & 12 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>ai.labs</groupId>
<artifactId>eddi</artifactId>
<version>6.1.2</version>
<version>6.2.0</version>
<properties>
<compiler-plugin.version>3.15.0</compiler-plugin.version>
<maven.compiler.source>25</maven.compiler.source>
Expand All @@ -20,10 +20,10 @@
<langchain4j-beta.version>1.18.0-beta28</langchain4j-beta.version>
<langchain4j.version>1.18.0</langchain4j.version>
<langchain4j-libs.version>1.18.0</langchain4j-libs.version>
<jandex-maven-plugin.version>3.5.3</jandex-maven-plugin.version>
<jandex-maven-plugin.version>3.6.0</jandex-maven-plugin.version>
<maven.compiler.parameters>true</maven.compiler.parameters>
<surefire-plugin.version>3.5.5</surefire-plugin.version>
<failsafe-plugin.version>3.5.5</failsafe-plugin.version>
<surefire-plugin.version>3.5.6</surefire-plugin.version>
<failsafe-plugin.version>3.5.6</failsafe-plugin.version>
Comment on lines -14 to +26
<failsafe.useModulePath>false</failsafe.useModulePath>
<war-plugin.version>3.4.0</war-plugin.version>
<quarkus-mcp-server.version>1.13.1</quarkus-mcp-server.version>
Expand Down Expand Up @@ -56,12 +56,13 @@
<artifactId>reactor-netty-http</artifactId>
<version>1.2.8</version>
</dependency>
<!-- Override postgresql to fix CVE-2026-42198 (client-side DoS via SCRAM iteration count).
Vulnerable: 42.2.0–42.7.10. Pulled by langchain4j-pgvector (42.7.7) and Quarkus BOM. -->
<!-- Override postgresql to fix CVE-2026-42198 (SCRAM iteration count DoS, ≤42.7.10)
and CVE-2026-54291 (auth downgrade, ≤42.7.11).
Pulled by langchain4j-pgvector (42.7.7) and Quarkus BOM. -->
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.7.11</version>
<version>42.7.13</version>
</dependency>
</dependencies>
</dependencyManagement>
Expand Down Expand Up @@ -266,7 +267,7 @@
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>3.0.7</version>
<version>3.0.8</version>
</dependency>
<dependency>
<groupId>org.jsoup</groupId>
Expand All @@ -285,7 +286,7 @@
<dependency>
<groupId>io.swagger.core.v3</groupId>
<artifactId>swagger-annotations</artifactId>
<version>2.2.50</version>
<version>2.2.52</version>
</dependency>
<dependency>
<groupId>de.undercouch</groupId>
Expand Down Expand Up @@ -425,7 +426,7 @@
<dependency>
<groupId>io.nats</groupId>
<artifactId>jnats</artifactId>
<version>2.25.3</version>
<version>2.26.0</version>
</dependency>
<!-- PostgreSQL JDBC driver + Agroal connection pool (Phase 6.31) -->
<dependency>
Expand All @@ -446,7 +447,7 @@
<dependency>
<groupId>io.swagger.parser.v3</groupId>
<artifactId>swagger-parser</artifactId>
<version>2.1.44</version>
<version>2.1.45</version>
</dependency>

</dependencies>
Expand Down Expand Up @@ -615,7 +616,7 @@
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.14</version>
<version>0.8.15</version>
<!-- Plugin-level excludes: applied to report AND check goals.
Excludes CDI bootstrap wiring, external integration adapters,
REST client libraries, and import/export services that require
Expand Down
2 changes: 1 addition & 1 deletion src/main/docker/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@
FROM registry.access.redhat.com/ubi9/openjdk-25-runtime:1.24@sha256:2aed9f3a5fac4def355ac36d5c59c7a3067857da424adaa9c6929ff71310467e

### Red Hat Container Certification — required labels
ARG EDDI_VERSION=6.1.2
ARG EDDI_VERSION=6.2.0
ARG EDDI_RELEASE=1

LABEL name="labsai/eddi" \
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/ai/labs/eddi/configs/OpenApiConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
*
* @since 6.0.0
*/
@OpenAPIDefinition(info = @Info(title = "EDDI API", version = "6.1.2"), tags = {
@OpenAPIDefinition(info = @Info(title = "EDDI API", version = "6.2.0"), tags = {
// ── Agents ───────────────────────────────────────────────────────
@Tag(name = "Agents", description = "Agent configuration CRUD"),
@Tag(name = "Agents / Administration", description = "Deploy, undeploy, trigger, and monitor agents"),
Expand Down
33 changes: 33 additions & 0 deletions src/main/java/ai/labs/eddi/ui/IRestWelcomeResource.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
/*
* Copyright EDDI contributors
* SPDX-License-Identifier: Apache-2.0
*/
package ai.labs.eddi.ui;

import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.core.MediaType;
import jakarta.ws.rs.core.Response;
import org.eclipse.microprofile.openapi.annotations.Operation;
import org.jboss.resteasy.reactive.Cache;

/**
* Serves the welcome/landing page SPA shell.
* Users pick between Manager and Workforce here.
*/
@Path("/welcome")
@Produces(MediaType.TEXT_HTML)
public interface IRestWelcomeResource {

@GET
@Cache(noCache = true, mustRevalidate = true)
@Operation(hidden = true)
Response viewDefault();

@GET
@Cache(noCache = true, mustRevalidate = true)
@Path("{path:.*}")
@Operation(hidden = true)
Response viewHtml();
}
33 changes: 33 additions & 0 deletions src/main/java/ai/labs/eddi/ui/IRestWorkforceResource.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
/*
* Copyright EDDI contributors
* SPDX-License-Identifier: Apache-2.0
*/
package ai.labs.eddi.ui;

import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.core.MediaType;
import jakarta.ws.rs.core.Response;
import org.eclipse.microprofile.openapi.annotations.Operation;
import org.jboss.resteasy.reactive.Cache;

/**
* Serves the workforce SPA shell.
* Multi-agent collaboration workspace.
*/
@Path("/workforce")
@Produces(MediaType.TEXT_HTML)
public interface IRestWorkforceResource {

@GET
@Cache(noCache = true, mustRevalidate = true)
@Operation(hidden = true)
Response viewDefault();

@GET
@Cache(noCache = true, mustRevalidate = true)
@Path("{path:.*}")
@Operation(hidden = true)
Response viewHtml();
}
28 changes: 28 additions & 0 deletions src/main/java/ai/labs/eddi/ui/RestWelcomeResource.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
/*
* Copyright EDDI contributors
* SPDX-License-Identifier: Apache-2.0
*/
package ai.labs.eddi.ui;

import jakarta.enterprise.context.ApplicationScoped;
import jakarta.ws.rs.core.Response;

import static ai.labs.eddi.utils.RuntimeUtilities.getResourceAsStream;

/**
* Serves welcome.html for all /welcome/** paths.
* React Router handles client-side routing from there.
*/
@ApplicationScoped
public class RestWelcomeResource implements IRestWelcomeResource {

@Override
public Response viewDefault() {
return viewHtml();
}

@Override
public Response viewHtml() {
return Response.ok(getResourceAsStream("/META-INF/resources/welcome.html")).build();
}
Comment thread
ginccc marked this conversation as resolved.
Comment thread
Copilot marked this conversation as resolved.
Comment thread
Copilot marked this conversation as resolved.
}
28 changes: 28 additions & 0 deletions src/main/java/ai/labs/eddi/ui/RestWorkforceResource.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
/*
* Copyright EDDI contributors
* SPDX-License-Identifier: Apache-2.0
*/
package ai.labs.eddi.ui;

import jakarta.enterprise.context.ApplicationScoped;
import jakarta.ws.rs.core.Response;

import static ai.labs.eddi.utils.RuntimeUtilities.getResourceAsStream;

/**
* Serves workforce.html for all /workforce/** paths.
* React Router handles client-side routing from there.
*/
@ApplicationScoped
public class RestWorkforceResource implements IRestWorkforceResource {

@Override
public Response viewDefault() {
return viewHtml();
}

@Override
public Response viewHtml() {
return Response.ok(getResourceAsStream("/META-INF/resources/workforce.html")).build();
}
Comment thread
ginccc marked this conversation as resolved.
Comment thread
Copilot marked this conversation as resolved.
Comment thread
Copilot marked this conversation as resolved.
}
4 changes: 2 additions & 2 deletions src/main/resources/META-INF/resources/chat.html
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,8 @@
url('/fonts/noto-sans-v36-cyrillic_cyrillic-ext_devanagari_greek_greek-ext_latin_latin-ext_vietnamese-500.ttf') format('truetype');
}
</style>
<script type="module" crossorigin src="/scripts/js/chat-ui.DkbQxm6F.js"></script>
<link rel="stylesheet" crossorigin href="/scripts/css/chat-ui.CN68VwV9.css">
<script type="module" crossorigin src="/scripts/js/chat-ui.p4wYUapg.js"></script>
<link rel="stylesheet" crossorigin href="/scripts/css/chat-ui.D213XXZR.css">
Comment thread
ginccc marked this conversation as resolved.
</head>
<body>
<div id="root"></div>
Expand Down
Loading
Loading