Skip to content

6.1.0

Choose a tag to compare

@ginccc ginccc released this 03 Jun 21:10
0f40181

πŸš€ 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.yml for 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 (globalvariables collection) and PostgreSQL (global_variables table).
  • 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: maxSummarizationCalls and maxCostPerRun (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 ChannelIntegrationConfiguration resource β€” 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_mention in DMs β€” channel_type: "im" is now detected and routed correctly.
  • Startup migration: Automatic, non-destructive migration of legacy ChannelConnector configs 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_robin strategy (replaced broken shuffle), 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 summarize truncation strategy routes oversized responses through a cheaper model (configurable via summarizerModel), inheriting the parent task's full provider context. 6-point fallback chain degrades gracefully to truncation on any failure.
  • Lazy tool discovery: DiscoverToolsTool meta-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 requirePeerVerification is 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 PathNavigator and MatchingUtilities β€” 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 LogSanitizer applied across 17+ files, handling \r, \n, \t, and Unicode line separators.
  • Array bounds & arithmetic overflow: Guards added to CronDescriber, RestConversationStore, DescriptorStore pagination.
  • TOCTOU quota fix: tryAddCost() boundary aligned with checkCostBudget(). Quota acquisition moved after all validation checks.
  • Fail-closed cost accounting: PostgresTenantQuotaStore.tryAddCost() now returns DENIED on SQL failure instead of OK.

Governance

  • Added GOVERNANCE.md with code review standards and CODEOWNERS.
  • Force-push prohibition enforced via .githooks/pre-push hook.
  • RHEL/OpenShift certification documentation rewritten.

🐞 Bug Fixes

  • Docker Compose startup crash β€” Non-auth compose files were missing EDDI_SECURITY_ALLOW_UNAUTHENTICATED=true, causing AuthStartupGuard to 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 | iex failures caused by block comments and [CmdletBinding()] in expression parser context. Switched to download-and-execute pattern.
  • Boolean matching guard β€” MatchingUtilities now guards the Boolean branch behind an existence check.
  • MongoDB healthcheck β€” Docker Compose now uses authenticated MongoDB healthcheck.
  • MigrationLogStore injection β€” Migration classes now inject the IMigrationLogStore interface instead of the concrete MongoDB class, fixing failures in the PostgreSQL profile.
  • Property scope loss on rollback β€” MemoryCheckpoint now preserves the full Property object (scope, visibility) instead of flattening to raw values.
  • Tenant signing key mismatch β€” GroupConversationService.sign() now uses defaultTenantId instead of gc.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-audience mapper so tokens include the backend audience claim; injected a runtime __auth_config__.js endpoint so the Manager UI auto-discovers Keycloak URL, realm, and client ID without build-time config; widened CSP connect-src to 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_resource for langchain configs (missing @JsonProperty), group discussion returning raw metadata instead of agent output, list_conversations agent filter using wrong accessor, read_conversation_log NPE on null log size, delete_agent_trigger returning 200 for missing resources, chat_managed reusing stale triggers after conversation deletion, version=0 resolution not delegating to getCurrentResourceId, returningFields filter being silently ignored, chat_managed blocking 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 syncDescriptor using bare "version" string instead of the versionQueryParam constant, 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-check workflow 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 @QuarkusTest coverage via quarkus-jacoco.
  • mise task 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) and MatchingUtilities (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 ChannelIntegrationConfiguration resource.
  • Global Variables Admin β€” Manage deployment-wide vars variables 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 outputDimensionality parameter 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 version parameter (400 errors).
  • Aligned vault reference prefix from eddivault: to canonical vault: 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.