6.1.0
π EDDI v6.1.0 Release Notes β 2026-06-03
EDDI v6.1.0 is our biggest release since the v6.0 launch. It delivers major new capabilities β ChromaDB vector store support, multimodal attachments, LLM-driven memory summarization, a fleet-wide Global Variable Store, and a completely rearchitected channel integration system β alongside deep security hardening, supply-chain compliance, and a test suite that has more than doubled in size.
β¨ New Features
ποΈ ChromaDB & Gemini Embedding Support
Contributed by @niedch β thank you! π
- ChromaDB is now a fully supported vector database backend for RAG, joining pgvector, MongoDB Atlas, Elasticsearch, and Qdrant. Includes
docker-compose.chroma.ymlfor local development. - Gemini Embedding Model added as a natively supported embedding provider.
βοΈ Global Variable Store (vars)
A new non-encrypted, deployment-wide key-value store for runtime configuration. Change operational values β LLM models, API endpoints, feature flags, temperatures β across all agents simultaneously without redeployment.
- Dual-backend persistence: MongoDB (
globalvariablescollection) and PostgreSQL (global_variablestable). - Late-binding resolution via
${vars:key}in any template or config field, resolved at runtime alongside${vault:key}. - Full REST CRUD API with tenant isolation.
- Template-layer access via
{{vars.key}}in system prompts and HTTP call templates.
π Multimodal Attachments
Added end-to-end support for file attachments in conversations:
- Dual-backend storage: PostgreSQL (BYTEA) and MongoDB (GridFS) with configurable size caps (default 20MB).
- Magic-byte MIME validation for 14 file types without external dependencies.
- LLM forwarding: Images are automatically converted to base64 data URIs for maximum provider compatibility. Oversized images (>10MB) gracefully degrade to text placeholders.
- GDPR-compliant: Cross-conversation access denied by design; cascading erasure support.
π§ DreamService β LLM-Driven Memory Summarization
A config-driven memory consolidation engine that compresses related user memory entries during scheduled "dream" cycles.
- Configurable grouping by category or agent provenance, with multi-agent visibility upgrades.
- Cost-bounded:
maxSummarizationCallsandmaxCostPerRun(default $0.50) prevent runaway LLM spend. - Safety guarantees: Insert-before-delete pattern with rollback on partial failure. LLM errors or garbage output skip the group and leave originals untouched.
- LLM output guardrails: Rejects blank keys/values, truncates to safe limits, caps result count.
π¬ Channel Integrations & Slack
Completely rearchitected channel integration system, decoupled from agent configurations:
- Standalone
ChannelIntegrationConfigurationresource β first-class versioned MongoDB document with platform credentials, targets, and trigger keywords. - Multi-target routing: Multiple agents or groups on a single Slack channel, with deterministic colon-required triggers (e.g.,
architect: question). - Thread target locking: First message in a thread locks the target, preventing jarring mid-conversation switches.
- Direct Message support: Slack never fires
app_mentionin DMs βchannel_type: "im"is now detected and routed correctly. - Startup migration: Automatic, non-destructive migration of legacy
ChannelConnectorconfigs on first boot. - MCP admin tools: 6 new tools for managing integrations programmatically.
π‘οΈ Agentic Safety & Orchestration
- Behavioral Counterweights: Config-driven safety injection into LLM system prompts with preset levels (
cautious,strict) and customizable instructions. Strict auto-downgrades to cautious for scheduled agents. - Identity Masking: Prepends identity concealment rules to system prompts, independent of counterweights.
- Session Checkpoints: Memory checkpoint and rollback service with type-aware property restoration, auto-pruning, and Micrometer metrics. Dual-backend (MongoDB + PostgreSQL).
- A2A Capability Registry: Deterministic
round_robinstrategy (replaced brokenshuffle), public discovery endpoints, audit trail for capability selections, miss/strategy metrics.
π§ Tool Response Management
- Paginated responses: Oversized tool output is split into retrievable pages via
FetchToolResponsePageTool, enabling the LLM to navigate large results. - LLM summarization: New
summarizetruncation strategy routes oversized responses through a cheaper model (configurable viasummarizerModel), inheriting the parent task's full provider context. 6-point fallback chain degrades gracefully to truncation on any failure. - Lazy tool discovery:
DiscoverToolsToolmeta-tool allows the LLM to discover available tools by category/keyword instead of receiving all schemas upfront, reducing context window overhead.
π Security & Compliance
Cryptographic Agent Identity
- End-to-end Ed25519 signing of group conversation transcript entries with versioned key rotation.
- Nonce-based replay protection (Caffeine-backed, 5min TTL, 30s clock-skew tolerance).
- Fail-safe design: Signing failures discard the broken signature and fall back to unsigned entries, rather than persisting corrupt data.
- Peer verification: Receiving agents can verify prior speakers' signatures when
requirePeerVerificationis enabled.
Supply Chain & Infrastructure Security
- Docker image signing with Sigstore cosign (keyless OIDC) on every release.
- SLSA provenance attestation pushed to Docker Hub alongside images.
- ClusterFuzzLite continuous fuzzing for
PathNavigatorandMatchingUtilitiesβ security-critical input parsers. - Trivy image scanning gates Docker push on CRITICAL CVEs.
- Gitleaks secret scanning in CI.
- CycloneDX SBOM generation for EU AI Act compliance.
- SPDX copyright headers added to all 1,089 Java source files.
Vulnerability Fixes
- CVE-2026-42198: Pinned PostgreSQL JDBC driver to
42.7.11(CVSS 7.5 High β SCRAM iteration count DoS). - Log injection (CWE-117): Centralized
LogSanitizerapplied across 17+ files, handling\r,\n,\t, and Unicode line separators. - Array bounds & arithmetic overflow: Guards added to
CronDescriber,RestConversationStore,DescriptorStorepagination. - TOCTOU quota fix:
tryAddCost()boundary aligned withcheckCostBudget(). Quota acquisition moved after all validation checks. - Fail-closed cost accounting:
PostgresTenantQuotaStore.tryAddCost()now returnsDENIEDon SQL failure instead ofOK.
Governance
- Added
GOVERNANCE.mdwith code review standards andCODEOWNERS. - Force-push prohibition enforced via
.githooks/pre-pushhook. - RHEL/OpenShift certification documentation rewritten.
π Bug Fixes
- Docker Compose startup crash β Non-auth compose files were missing
EDDI_SECURITY_ALLOW_UNAUTHENTICATED=true, causingAuthStartupGuardto block startup. - Template error messages β Errors now include the failing parameter key, the Qute engine's specific cause, and a preview of the template, instead of a generic message.
- PowerShell install script β Fixed
iwr | iexfailures caused by block comments and[CmdletBinding()]in expression parser context. Switched to download-and-execute pattern. - Boolean matching guard β
MatchingUtilitiesnow guards the Boolean branch behind an existence check. - MongoDB healthcheck β Docker Compose now uses authenticated MongoDB healthcheck.
- MigrationLogStore injection β Migration classes now inject the
IMigrationLogStoreinterface instead of the concrete MongoDB class, fixing failures in the PostgreSQL profile. - Property scope loss on rollback β
MemoryCheckpointnow preserves the fullPropertyobject (scope, visibility) instead of flattening to raw values. - Tenant signing key mismatch β
GroupConversationService.sign()now usesdefaultTenantIdinstead ofgc.getUserId()for private key lookup. - Late-binding prefixes β Renamed
${eddivar:...}β${vars:...}and${eddivault:...}β${vault:...}with backward-compatible dual-pattern regex. - Tenant Quota persistence β Quota stores upgraded from in-memory only to durable MongoDB and PostgreSQL backends. Restarts no longer reset quota counters.
- Extension endpoint URI wrapping β Task type identifiers are now wrapped in a URI to clarify whether the full URI or just the identifier should be used (contributed by @niedch).
- V1 support removed β Cleaned up legacy V1 code paths and set proper default values.
- Keycloak auth integration overhaul β Added
eddi-backend-audiencemapper so tokens include the backend audience claim; injected a runtime__auth_config__.jsendpoint so the Manager UI auto-discovers Keycloak URL, realm, and client ID without build-time config; widened CSPconnect-srcto allow Keycloak origins; set default user passwords to non-temporary; added static asset permit paths for new branding files (contributed by @rolandpickl). - MCP endpoint audit β 13 fixes β Comprehensive audit of all MCP tool endpoints uncovered and fixed: empty
read_resourcefor langchain configs (missing@JsonProperty), group discussion returning raw metadata instead of agent output,list_conversationsagent filter using wrong accessor,read_conversation_logNPE on null log size,delete_agent_triggerreturning 200 for missing resources,chat_managedreusing stale triggers after conversation deletion,version=0resolution not delegating togetCurrentResourceId,returningFieldsfilter being silently ignored,chat_managedblocking the event loop (missing@Blocking), and group discussion error state not surfacing as transcript content. 19+ regression tests added across 5 new test files. - Agent Sync version URI β Fixed
syncDescriptorusing bare"version"string instead of theversionQueryParamconstant, causing version to be concatenated into the path segment (groups/IDversion1) instead of the correct query parameter form (groups/ID?version=1).
π³ CI/CD & Infrastructure
- Red Hat preflight auto-submission on release tags.
- Base image scanning β Trivy advisory scans + scheduled
base-image-checkworkflow with PR deduplication. - Dependabot digest monitoring for Docker base images.
- Slack CI notifications β Fixed false-positive deltas from stale/missing baselines. Daily and weekly digests now operate on independent baselines with views/clones delta tracking.
- Coverage reporting β Per-session breakdowns (UT-only, IT-only, merged) with accurate
@QuarkusTestcoverage viaquarkus-jacoco. misetask runner β Added configuration for streamlined local development and service orchestration (contributed by @niedch).- OpenSSF Scorecard improvements β Achieved Silver level; pinned all CI action dependencies.
π§ͺ Testing
Test count grew from ~3,500 to 5,500+ across this release cycle.
- Unit tests: 28 batches covering models, services, NLP, rules engine, MCP tools, security utilities, and provider builders.
- Integration tests: Full Testcontainers coverage for all PostgreSQL and MongoDB adapter stores (~150 ITs).
- Fuzz tests: Jazzer harnesses for
PathNavigator(3 targets + 8 regressions) andMatchingUtilities(2 targets + 9 regressions). - JaCoCo CI gates: Two-tier enforcement (UT-only + merged UT+IT) at 70% instruction / 60% branch.
π¦ Dependency Upgrades
| Dependency | Previous (v6.0.2) | New (v6.1.0) |
|---|---|---|
| Quarkus | 3.34.5 | 3.35.4 |
| LangChain4j | 1.13.0 | 1.15.1 |
| LangChain4j Beta | 1.13.0-beta23 | 1.15.1-beta25 |
| LangChain4j Community | 1.13.0-beta23 | 1.15.0-beta25 |
| Quarkus MCP Server HTTP | 1.11.1 | 1.12.1 |
| PostgreSQL JDBC | 42.7.10 | 42.7.11 |
| jsoup | 1.22.1 | 1.22.2 |
| Swagger Annotations | 2.2.48 | 2.2.50 |
| Swagger Parser | 2.1.40 | 2.1.42 |
| NATS (jnats) | 2.25.2 | 2.25.3 |
| Maven Enforcer Plugin | 3.5.0 | 3.6.3 |
π₯οΈ EDDI Manager (Admin Dashboard)
The Manager UI ships alongside EDDI and has received significant updates to support the new backend capabilities.
New Pages
- Channel Integration Management β Full CRUD UI for configuring multi-target channel integrations (Slack, Teams, etc.), with status indicators, search, filtering, and a create dialog. Pairs with the backend's new
ChannelIntegrationConfigurationresource. - Global Variables Admin β Manage deployment-wide
varsvariables with inline editing, create/delete dialogs, and tenant-scoped API paths. - Capability Registry Dashboard β Browse, search, and manage A2A capability registrations with security flag toggles and summary statistics.
Agentic Configuration UI
New configuration sections added to the LLM Editor and Agent Config for fine-grained control over:
- Counterweights β tool-call balancing to prevent runaway loops
- Identity Masking β anonymize agent identities in multi-agent conversations
- Session Management β control session forking, memory isolation, and context windows
- Truncation Strategy β configurable context window management and history pruning
RAG Editor Updates
- Added Gemini as an embedding provider option and ChromaDB as a vector store backend.
- New
outputDimensionalityparameter for embedding model configuration.
SSE Streaming Overhaul
A comprehensive reliability pass on the Server-Sent Events infrastructure used by Chat, Logs, and the Live Debugger:
- Fixed a cross-chunk parsing bug where events split across TCP frames were silently dropped.
- Fixed reconnect timer leaks causing duplicate connections on rapid page transitions.
- Added auth token injection for SSE connections (previously unauthenticated).
Additional Fixes
- Fixed group CRUD operations missing required
versionparameter (400 errors). - Aligned vault reference prefix from
eddivault:to canonicalvault:across the UI. - Corrected type definitions for cost dashboard, tool metrics, and coordinator APIs to match backend response shapes.
- Updated i18n across all 11 locales and added 12 new test suites.
Thank you to all contributors who helped make v6.1.0 our most robust release yet β special thanks to @niedch for the ChromaDB, Gemini Embedding, and extension endpoint contributions, and to @rolandpickl for the Keycloak auth and install script overhaul.