Skip to content
Merged
Show file tree
Hide file tree
Changes from all 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
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,10 @@ test-output.txt

# AI session files (keep locally, don't push)
.gemini/
.claude/

# Event/marketing material — kept locally, not part of the product
waic-2026/

eddi-audit-deadletter.jsonl

Expand Down
2 changes: 1 addition & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,7 @@ Follow this order unless the user explicitly requests something different.
| — | GDPR/CCPA Framework | Cascading erasure, data portability, Art. 18 restriction, per-category retention |
| — | Commit Flags | Strict write discipline for memory — uncommit failed task data, error digest injection |
| — | Template Preview | REST endpoint for previewing resolved system prompts with sample/live data |
| — | Test Coverage | 9,000+ tests, >90% instruction / >80% branch coverage, OpenSSF Gold compliance |
| — | Test Coverage | 12,000+ tests, >90% instruction / >80% branch coverage, OpenSSF Gold compliance |
| — | Security Hardening v6.0.2 | SSRF prevention, SafeHttpClient, auth guard, vault salt, security headers, CodeQL + Trivy CI |
| 9b | HITL Framework | Two human-approval gates (turn-level `PAUSE_CONVERSATION` + per-tool-call gating), timeout/no-progress policies, audit ledger, Slack + MCP approval surfaces, crash recovery — see [`docs/hitl.md`](docs/hitl.md) |

Expand Down
36 changes: 34 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

[![OpenSSF Best Practices](https://www.bestpractices.dev/projects/12355/badge?v=2)](https://www.bestpractices.dev/projects/12355) [![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/labsai/EDDI/badge)](https://securityscorecards.dev/viewer/?uri=github.com/labsai/EDDI) [![Codacy Badge](https://app.codacy.com/project/badge/Grade/2c5d183d4bd24dbaa77427cfbf5d4074)](https://app.codacy.com/organizations/gh/labsai/dashboard?utm_source=github.com&utm_medium=referral&utm_content=labsai/EDDI&utm_campaign=Badge_Grade)

[![CI](https://github.com/labsai/EDDI/actions/workflows/ci.yml/badge.svg)](https://github.com/labsai/EDDI/actions/workflows/ci.yml) [![CodeQL](https://github.com/labsai/EDDI/actions/workflows/codeql.yml/badge.svg)](https://github.com/labsai/EDDI/actions/workflows/codeql.yml) ![Tests](https://img.shields.io/badge/tests-9%2C000%2B-brightgreen) ![Coverage](https://img.shields.io/badge/coverage-%3E90%25-brightgreen)
[![CI](https://github.com/labsai/EDDI/actions/workflows/ci.yml/badge.svg)](https://github.com/labsai/EDDI/actions/workflows/ci.yml) [![CodeQL](https://github.com/labsai/EDDI/actions/workflows/codeql.yml/badge.svg)](https://github.com/labsai/EDDI/actions/workflows/codeql.yml) ![Tests](https://img.shields.io/badge/tests-11%2C000%2B-brightgreen) ![Coverage](https://img.shields.io/badge/coverage-%3E90%25-brightgreen)

[![Docker Pulls](https://img.shields.io/docker/pulls/labsai/eddi)](https://hub.docker.com/r/labsai/eddi) [![Latest Release](https://img.shields.io/github/v/release/labsai/EDDI?label=latest&color=blue)](https://github.com/labsai/EDDI/releases) [![Repository: AI Ready](https://img.shields.io/badge/Repository-AI_Ready-blueviolet?logo=robot)](AGENTS.md)

Expand Down Expand Up @@ -249,6 +249,7 @@ Most multi-agent frameworks (LangGraph, CrewAI, AutoGen) are Python/Node librari

- 🔀 **Intelligent Routing** — Direct conversations to different agents based on context, rules, and intent
- 🗣️ **Group Conversations** — Multi-agent debates with 6 built-in discussion styles: Round Table, Peer Review, Devil's Advocate, Delphi, Debate, and Task Force
- 🔄 **Follow-up & Continue** — After a group discussion completes, follow up with any specific member agent or continue all phases with a new question — agents retain full context across rounds
- 💬 **Slack Integration** — Deploy agents to Slack channels and run multi-agent debates directly in threads
- 🪆 **Nested Groups** — Compose groups of groups for tournament brackets, red-team vs blue-team, and panel reviews
- 🤖 **Dynamic Agents** — Create, recruit, and delegate to new agents at runtime during group discussions with configurable guardrails
Expand All @@ -265,6 +266,11 @@ Most multi-agent frameworks (LangGraph, CrewAI, AutoGen) are Python/Node librari
| **Self-Hosted** | Ollama · Jlama · Hugging Face |
| **Compatible** | Any OpenAI-compatible endpoint (DeepSeek, Cohere, etc.) via `baseUrl` |

- 🔀 **Multi-Model Cascading** — Start with cheap/fast models, escalate to powerful ones based on confidence ([details](#-smart-model-cascading))
- 📋 **JSON Response Mode** — `jsonResponseFormat` policy (`auto` | `on` | `off`) negotiates structured JSON output across all execution paths with provider-aware rules
- 🔧 **Tool Calling** — Native function/tool calling across all providers that support it
- 🗄️ **Tool Result Caching** — Per-tool cache scoping (`GLOBAL`, `USER`, `CONVERSATION`) to avoid redundant calls; fail-safe to `USER` on misconfiguration

### 🔗 Standards & Interoperability

EDDI implements open standards — not proprietary APIs:
Expand All @@ -286,12 +292,13 @@ EDDI implements open standards — not proprietary APIs:
- 📝 **Rolling Summary** — Incremental LLM-powered summarization of older turns with a **Conversation Recall Tool** for drill-back into compressed history
- 🔧 **Property Extraction** — Config-driven slot-filling with `longTerm` / `conversation` / `step` scoping — EDDI's importance extraction mechanism
- 🛡️ **Memory Policy (Commit Flags)** — Strict write discipline marks failed task output as uncommitted (hidden from LLM context) and injects concise error digests for graceful degradation
- 🧹 **Tool Context Ceiling** — `maxToolContextTokens` caps tool output within a single turn (default 60k tokens), evicting oldest tool exchanges to prevent provider context-window errors while preserving tool-call pairing
- 🔄 **Conversation State** — Full history with undo/redo support

### 📚 RAG (Retrieval-Augmented Generation)

- 📦 **7 Embedding Providers** — OpenAI, Ollama, Azure OpenAI, Mistral, Bedrock, Cohere, Vertex AI
- 🗄️ **5 Vector Stores** — pgvector, In-Memory, MongoDB Atlas, Elasticsearch, Qdrant
- 🗄️ **6 Vector Stores** — pgvector, Chroma, In-Memory, MongoDB Atlas, Elasticsearch, Qdrant
- 🌐 **httpCall RAG** — Zero-infrastructure RAG via any search API (BM25, Elasticsearch, custom)
- 📥 **REST Ingestion API** — Async document ingestion with status tracking

Expand All @@ -310,6 +317,17 @@ EDDI implements open standards — not proprietary APIs:
| 🔙 **Conversation Recall** | Drill back into summarized conversation history |
| 📎 **Multimodal Attachments** | Image, PDF, audio, and video input with MIME-based routing |

### 📎 Multimodal Attachments

- 📤 **3 Input Paths** — URL reference, base64 inline, or file upload (`POST /conversations/{id}/attachments` with multipart/form-data)
- 🗄️ **DB-Agnostic Storage** — GridFS (MongoDB) or bytea (PostgreSQL) via `IAttachmentStore` SPI with grant-based access control and per-tenant quotas
- 📄 **Hybrid PDF Extraction** — PDFs are auto-extracted to text (shared `AttachmentTextExtractor`) and forwarded as inline context to any LLM, not just vision models
- 🔍 **readAttachment Tool** — Agents can recall attachments from earlier turns in multi-turn conversations
- 🧠 **Model Capability Gating** — `ModelCapabilityService` routes images to vision-capable LLMs and falls back to text metadata for others
- 🔀 **Content-Type Routing** — `contentTypeMatcher` behavior rule condition routes `image/*`, `application/pdf`, etc. to different workflows
- 👥 **Group Parity** — Attachments fan out with grant injection so group member agents can access the original user's files
- 🗑️ **GDPR Cleanup** — `deleteByConversation()` cascades to attachment storage when conversations are erased

### ⏰ Scheduled Execution & Heartbeats

- 🫀 **Heartbeat Triggers** — Periodic agent wake-ups at configurable intervals for proactive behavior (inspired by [OpenClaw's](https://openclaw.ai) heartbeat architecture)
Expand All @@ -324,6 +342,18 @@ EDDI implements open standards — not proprietary APIs:
- 📊 **4 Confidence Strategies** — Structured output, heuristic, judge model, or none
- 💰 **Per-Conversation Budgets** — Automatic cost tracking with budget caps and eviction
- 🏢 **Tenant Cost Ceilings** — Monthly cost budgets per tenant with automatic enforcement
- 🔢 **Tenant Agent Quotas** — `maxAgentsPerTenant` enforcement on agent deployment

### ✋ Human-in-the-Loop Governance

- 🚦 **Turn-Level Approval** — `PAUSE_CONVERSATION` action halts the entire pipeline; new user input returns `409 Conflict` until a human resumes
- 🔧 **Per-Tool-Call Gating** — Individual tool invocations can require human approval before execution, with glob-pattern allow/exempt lists across built-in, HTTP, MCP, A2A, dynamic, and memory tools
- 👥 **Group Phase Approval** — Multi-agent discussion phases can require human sign-off at `PHASE` or `TASK` granularity
- ⏱️ **Timeout Policies** — `WAIT_INDEFINITELY`, `AUTO_APPROVE`, `AUTO_REJECT`, or `ABORT` when humans don't respond in time
- 🔁 **No-Progress Guard** — Detects infinite approval loops (identical pause fingerprints after automated decisions) and breaks the cycle
- 💬 **Slack Approvals** — Interactive Block Kit cards with redacted argument previews and approver whitelists
- 🔌 **MCP Approvals** — External clients can list pending approvals and approve/reject via MCP tools
- 🔄 **Crash Recovery** — Pending approvals survive server restarts; timeout timers are re-armed automatically

### 🔐 Enterprise Security & Compliance

Expand Down Expand Up @@ -376,6 +406,7 @@ EDDI implements open standards — not proprietary APIs:
- 🔭 **OpenTelemetry Tracing** — Per-task distributed traces via OTLP (Jaeger, Tempo, Datadog). Every pipeline task emits spans with `task.id`, `task.type`, `conversation.id`, and `agent.id`
- 🩺 **Health Checks** — Liveness & readiness probes at `/q/health/live` and `/q/health/ready`
- 🔄 **NATS JetStream** — Async event bus for distributed processing
- 🛟 **Error Handling & Recovery** — Automatic retry with exponential backoff, MCP circuit breakers (3 failures / 60s cooldown), LLM response validation (`onEmpty` / `onTruncation` / `onRefusal`), streaming timeout retry, and admin endpoint to reset stuck conversations
- ⚡ **Virtual Threads** — Java 25 virtual threads for true OS-level concurrency (no Python GIL or Node.js event loop bottleneck)
- 🗃️ **DB-Agnostic** — Choose MongoDB or PostgreSQL; switch with one env var. Single Docker image for both
- 🏗️ **Red Hat Certified** — Container certification with automated preflight checks in CI/CD
Expand Down Expand Up @@ -411,6 +442,7 @@ EDDI implements open standards — not proprietary APIs:
| **[User Memory](docs/user-memory.md)** | Cross-conversation fact retention |
| **[Memory Policy](docs/memory-policy.md)** | Commit flags and strict write discipline |
| **[Model Cascading](docs/model-cascade.md)** | Cost-optimized multi-model routing |
| **[Human-in-the-Loop](docs/hitl.md)** | Approval gates, timeout policies, Slack & MCP surfaces |
| **[Scheduling & Heartbeats](docs/scheduling.md)** | Cron schedules, heartbeats, dream consolidation |
| **[Agent Sync](docs/agent-sync-guide.md)** | Live instance-to-instance sync and upgrade imports |
| **[Import / Export](docs/import-export-an-agent.md)** | ZIP-based agent portability and merge |
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 @@ -386,5 +386,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
Loading
Loading