Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
124 commits
Select commit Hold shift + click to select a range
7b5603e
test(coverage): add 18 new unit test suites for Tier 1 & 2 packages
ginccc Apr 19, 2026
646d325
test(coverage): add model/config/engine test suites (batch 2)
ginccc Apr 19, 2026
1f1de99
test(coverage): add rule conditions, LLM model, and dependency tests …
ginccc Apr 19, 2026
df0ab9f
test(coverage): add A2A, tenancy, schedule, rule conditions, tool mod…
ginccc Apr 19, 2026
27bdd4b
test(coverage): add AgentConfig, DictionaryConfig, RuleGroup model te…
ginccc Apr 19, 2026
dfa5db3
test(coverage): add AgentCardService, ContextLogger, SimpleDocDescrip…
ginccc Apr 19, 2026
8b3a66a
test(coverage): add LlmConfiguration nested model tests (batch 7)
ginccc Apr 19, 2026
6a9bab3
test(coverage): add small model batch tests (batch 8)
ginccc Apr 19, 2026
9f690b8
test(coverage): add RuleDeserialization tests (batch 9)
ginccc Apr 19, 2026
6eb3adf
test(coverage): add Rule and RulesEvaluator tests (batch 10)
ginccc Apr 19, 2026
049a09f
docs(changelog): update changelog with test coverage batches 6-10
ginccc Apr 19, 2026
a874b47
test(coverage): add unit tests for output models, engine models, PreP…
ginccc Apr 19, 2026
f66c531
test(coverage): add tests for McpCallsConfig, IdSerializer, IdDeseria…
ginccc Apr 19, 2026
d6572e8
chore(docs): update changelog with batches 11-12 coverage progress (5…
ginccc Apr 19, 2026
243af32
test(coverage): add tests for McpMemoryTools, EddiChatMemoryStore, Ca…
ginccc Apr 19, 2026
1332aa2
test(coverage): add tests for NLP, migrations, and engine models
ginccc Apr 19, 2026
8d13f67
chore(docs): update changelog with batches 13-14 coverage progress (5…
ginccc Apr 19, 2026
cf05d0b
refactor(tools): replace hand-rolled JSON parsing with Jackson Object…
ginccc Apr 20, 2026
1d7576e
test(coverage): fix TestMemoryFactory MemoryKey stubs, rewrite ToolCa…
ginccc Apr 20, 2026
15a03f0
test(coverage): add AuditHmacTest, LanguageUtilitiesTest, VaultSaltMa…
ginccc Apr 20, 2026
793a405
test(coverage): add LanguageModelBuildersTest for 6 LLM providers (11…
ginccc Apr 20, 2026
b76c663
chore(docs): update changelog with batches 19-21 coverage progress (5…
ginccc Apr 20, 2026
12247ff
test(coverage): expand LanguageModelBuildersTest with Gemini + Bedroc…
ginccc Apr 20, 2026
57d2b23
test(coverage): add StringTemplateExtensionsTest (34 tests covering a…
ginccc Apr 20, 2026
e3cf912
test(coverage): add DataFactoryTest + ApiCallsTaskTest (18 new tests)
ginccc Apr 20, 2026
b70e45a
chore(docs): update changelog with batches 19-24 coverage progress (5…
ginccc Apr 20, 2026
b8af6e9
refactor(tests): code review cleanup β€” remove unused imports, dedupli…
ginccc Apr 20, 2026
cf01ef6
test(coverage): add 72 new unit tests for LlmTask, LifecycleManager, …
ginccc Apr 20, 2026
0b3678a
test(coverage): add InputParser and Conversation unit tests
ginccc Apr 20, 2026
a12f606
test(coverage): add AgentDeploymentManagement and MatchMatrix unit tests
ginccc Apr 20, 2026
44ae806
docs: update changelog with batches 25-26
ginccc Apr 20, 2026
1021888
test(coverage): add LegacyPathRewriteFilter and ExpressionProvider un…
ginccc Apr 20, 2026
8b3f14c
test(coverage): add IterationCounter unit tests
ginccc Apr 20, 2026
20cf3bb
docs: update changelog with batches 27-28
ginccc Apr 20, 2026
3d05dfc
test(coverage): add Permutation and SetupResult unit tests
ginccc Apr 20, 2026
0cb8977
fix(tests): strengthen weak assertions from code review
ginccc Apr 20, 2026
a847cd5
test(engine): expand unit tests for MemoryItemConverter, LifecycleMan…
ginccc Apr 20, 2026
c16c5c3
test(postgres): add PostgresTestBase + PostgresSecretPersistenceIT (1…
ginccc Apr 20, 2026
f7431d1
test(postgres): add PostgresAuditStoreIT + PostgresResourceStorageIT …
ginccc Apr 20, 2026
430c495
test(postgres,memory): add PostgresUserMemoryStoreIT (18 tests) + Con…
ginccc Apr 20, 2026
6468d1e
fix(tests): code review β€” strengthen assertions, remove unused import…
ginccc Apr 20, 2026
af92f04
test(postgres): add PostgresScheduleStoreIT β€” 24 tests covering full …
ginccc Apr 20, 2026
122f1d3
docs: update changelog with Batch 5 ScheduleStoreIT + code review fixes
ginccc Apr 20, 2026
bdbc1e2
test(postgres): add ConversationMemoryStoreIT (14), DeploymentStorage…
ginccc Apr 20, 2026
1499906
test(postgres): add AgentTriggerStoreIT (8), UserConversationStoreIT …
ginccc Apr 20, 2026
a28f084
docs: update changelog with Batches 6-7 β€” full Postgres adapter IT co…
ginccc Apr 20, 2026
aa23251
test(mongo): add Mongo adapter ITs β€” MongoScheduleStore (21), MongoSe…
ginccc Apr 20, 2026
608912a
fix(jacoco): add quarkus-jacoco extension and include jacoco-quarkus.…
ginccc Apr 20, 2026
317b317
docs: update changelog with MongoDB adapter ITs and JaCoCo coverage fix
ginccc Apr 20, 2026
31fe80a
refactor(test): code review fixes + CI coverage summary
ginccc Apr 20, 2026
9fd2a16
docs: update test counts to 4,100+ (3,500+ UT + 550+ IT)
ginccc Apr 20, 2026
75a6427
refactor(test): remove unnecessary @SuppressWarnings and unused variable
ginccc Apr 20, 2026
3340192
test(coverage): batch 1 - zero-coverage packages (80 new tests)
ginccc Apr 21, 2026
9f4feb4
test(coverage): batch 2 - engine.internal REST endpoints (45 new tests)
ginccc Apr 21, 2026
b3c8627
test(coverage): batch 3 - workflow traversal, coordinator, logs, agen…
ginccc Apr 21, 2026
7c19ac0
test(coverage): batch 4 - DocumentDescriptorFilter (17 new tests)
ginccc Apr 21, 2026
2b332bf
test(coverage): batch 5 - ResourceClientLibrary (16 new tests)
ginccc Apr 21, 2026
7fc9122
test(coverage): batch 6 - RestConversationStore (13 new tests)
ginccc Apr 21, 2026
dc1eac3
chore(coverage): raise JaCoCo gates to 90% instruction / 80% branch
ginccc Apr 21, 2026
527974e
test(coverage): batch 7 - RestAgentGroupStore (9 new tests)
ginccc Apr 21, 2026
0009641
test(coverage): batch 8 - RestOutputStore (11 new tests)
ginccc Apr 21, 2026
55be541
docs(changelog): add batches 5-8 + JaCoCo gates entry
ginccc Apr 21, 2026
b4b7754
test(coverage): batch 9 - RestDictionaryStore + RestMcpCallsStore (18…
ginccc Apr 21, 2026
62a2d25
test(coverage): batch 10 - RestApiCallsStore + RestLlmStore + RestPro…
ginccc Apr 21, 2026
0782e0b
test(coverage): batch 11 - RestRuleSetStore + RestParserStore (13 new…
ginccc Apr 21, 2026
f911d0a
chore(test): code review cleanup β€” unused imports, field-level mock
ginccc Apr 21, 2026
6b7cfe1
fix(test): code review fixes + lower jacoco thresholds
ginccc Apr 21, 2026
d13991e
docs: update changelog for code review fixes and jacoco threshold adj…
ginccc Apr 21, 2026
94534f2
fix(test): harden assertions, inject ObjectMapper, fix limit bug
ginccc Apr 21, 2026
e555231
test(coverage): Batch 1-2 β€” HttpClientWrapper (37 tests) + tool exten…
ginccc Apr 21, 2026
693734c
test(coverage): Batch 4 β€” PrePostUtils extended (17 tests, +8 new)
ginccc Apr 21, 2026
8fb261c
test(coverage): Batch 5 β€” LlmConfiguration model (34 tests), PdfReade…
ginccc Apr 21, 2026
2151dcb
test(coverage): Batch 6 β€” model tests: SimpleConversationMemorySnapsh…
ginccc Apr 21, 2026
678733f
test(coverage): Batch 7 β€” EddiTemplateExtensions (19 tests), MemoryKe…
ginccc Apr 21, 2026
e0927e5
test(coverage): Batch 8 β€” TenantUsageCounters (8), ComplianceStartupC…
ginccc Apr 21, 2026
69273fd
test(coverage): Batch 9 β€” ConversationLog (26), McpCall (3), ApiCall (3)
ginccc Apr 21, 2026
47e0fef
test(coverage): Batch 10 β€” MongoAuditStoreIT (16), MongoConversationM…
ginccc Apr 21, 2026
0937a8f
test(coverage): Batch 11 β€” RestImportService helpers (22), CallbackMa…
ginccc Apr 21, 2026
26eca4a
chore(coverage): raise JaCoCo thresholds β€” Step 1: instruction 50β†’55%…
ginccc Apr 21, 2026
495808a
refactor(test): rename 20 datastore *IT β†’ *Test β€” Testcontainers test…
ginccc Apr 21, 2026
6f48a5e
chore(coverage): Step 2 β€” JaCoCo 70/58 with CDI-wiring exclusions (ac…
ginccc Apr 21, 2026
c9d248b
chore(coverage): honest thresholds 65/55 with minimal defensible excl…
ginccc Apr 21, 2026
14b5bc0
feat(coverage): two-tier JaCoCo gates β€” 65/55 surefire + 65/55 merged…
ginccc Apr 21, 2026
eaa4a8c
chore(ci): add version comment to pinned upload-artifact hash
ginccc Apr 21, 2026
423bf76
docs(changelog): document two-tier JaCoCo gate architecture
ginccc Apr 21, 2026
9f2d2e3
fix(test): remove duplicate OutputGenerationTaskTest and McpCallsTask…
ginccc Apr 21, 2026
ee2551a
refactor(httpclient): make utility methods package-private, remove re…
ginccc Apr 21, 2026
553a689
refactor(llm): convert RestToolHistory to constructor injection
ginccc Apr 21, 2026
71429ca
chore(test): trim low-value getter/setter tests from EngineModelsTest
ginccc Apr 21, 2026
fb21ab6
fix(build): add --enable-native-access for JDK 25 JNA compatibility
ginccc Apr 21, 2026
4120533
feat(ci): enhance coverage output with instruction/method metrics and…
ginccc Apr 21, 2026
a31d780
test(coverage): expand engine.internal and apicalls.impl test suites
ginccc Apr 21, 2026
47fd9e1
test(coverage): expand engine.internal REST adapter test suites
ginccc Apr 21, 2026
491ec14
test(coverage): expand RestAgentAdministration, RestLogAdmin, RestCoo…
ginccc Apr 21, 2026
ffb58a9
chore(review): code review cleanup for test suites
ginccc Apr 21, 2026
6d95403
test(backup): add unit tests for RestImportService and expand RestExp…
ginccc Apr 21, 2026
ac00f8b
test(coverage): expand branch coverage for llm, datastore, migration …
ginccc Apr 21, 2026
e06b4f3
test(tools): add extended WebScraperTool + WeatherTool tests with moc…
ginccc Apr 21, 2026
a064b00
test(runtime): add 31 extended Conversation tests covering type dispa…
ginccc Apr 21, 2026
c9571f8
chore(review): fix code review findings + update README badges to 4,6…
ginccc Apr 21, 2026
bab1a0e
test(engine+llm): extended unit tests for engine.internal and modules…
ginccc Apr 22, 2026
1746d30
test(engine+llm): SSE streaming handler + multimodal enhancer coverag…
ginccc Apr 22, 2026
b47b838
test(runtime): AgentDeploymentManagement + DeploymentListener coverag…
ginccc Apr 22, 2026
0df5a78
test(llm): ConfidenceEvaluator judge model + DateTimeTool branch cove…
ginccc Apr 22, 2026
cd4e219
test(engine): exception mappers, WorkflowFactory, CronDescriber coverage
ginccc Apr 22, 2026
6e8e4fa
test(engine): readiness, CacheFactory, WebSearchTool formatting coverage
ginccc Apr 22, 2026
3d9cfd3
test(tools): ToolExecutionService, readiness, CacheFactory, WebSearch…
ginccc Apr 22, 2026
5920a1b
test(modules): rule conditions, NLP providers, Value, EddiChatMemoryS…
ginccc Apr 22, 2026
9ffdfef
docs(changelog): session 3 coverage hardening summary
ginccc Apr 22, 2026
3e710ae
test(integration): config-driven agent ITs for LLM, HTTP, PropertySet…
ginccc Apr 22, 2026
2c6b64d
fix(ci): suppress SIGPIPE broken pipe in coverage summary sort|head p…
ginccc Apr 22, 2026
331cba6
fix(groups,metrics): descriptor sync race + Prometheus tag collision
ginccc Apr 22, 2026
d49093f
fix(ci): split JaCoCo reports into UT-only, IT-only, and merged
ginccc Apr 22, 2026
9b8da05
fix(style): rename _event parameter and wrap CSP header line
ginccc Apr 22, 2026
522f739
test(coverage): harden migration, datastore, and backup coverage [ski…
ginccc Apr 22, 2026
6dcfe58
fix(test): resolve code quality findings in MigrationManagerTest and …
ginccc Apr 22, 2026
c9412f0
feat(security): add CI/CD security scanning, fuzzing, and PathNavigat…
ginccc Apr 22, 2026
51adc5d
fix(review): address Copilot PR review findings β€” sort-before-limit, …
ginccc Apr 22, 2026
8c06d5a
test(review): address additional Copilot PR review findings
ginccc Apr 22, 2026
7dd0fde
fix(tests): resolve failing tests and stabilize test suite
ginccc Apr 22, 2026
d7a99a4
chore(ci): fix gitleaks license injection and adjust jacoco coverage …
ginccc Apr 22, 2026
6a8e020
chore(ci): consolidate coverage gate to merged UT+IT and fix broken pipe
ginccc Apr 22, 2026
86b3a26
docs(changelog): document coverage gate consolidation and broken pipe…
ginccc Apr 22, 2026
0606d42
fix(metrics): remove redundant aggregate counter causing Prometheus t…
ginccc Apr 22, 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
329 changes: 323 additions & 6 deletions .github/workflows/ci.yml

Large diffs are not rendered by default.

15 changes: 7 additions & 8 deletions .github/workflows/codeql.yml
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
name: CodeQL
name: "CodeQL (Scheduled)"

# Schedule-only: weekly deep scan with latest CodeQL rules.
# Push/PR analysis is handled by the main ci.yml workflow.
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
schedule:
- cron: '0 6 * * 1' # Weekly on Monday at 06:00 UTC

Expand Down Expand Up @@ -37,17 +35,18 @@ jobs:
cache: maven

- name: Initialize CodeQL
uses: github/codeql-action/init@c10b8064de6f491fea524254123dbe5e09572f13 # v4
uses: github/codeql-action/init@ce64ddcb0d8d890d2df4a9d1c04ff297367dea2a # v3
with:
languages: ${{ matrix.language }}
queries: security-extended

- name: Set execute permission for mvnw
run: chmod +x mvnw

- name: Build
run: ./mvnw clean compile -DskipTests -B
run: ./mvnw clean compile -DskipTests -B --no-transfer-progress

- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@c10b8064de6f491fea524254123dbe5e09572f13 # v4
uses: github/codeql-action/analyze@ce64ddcb0d8d890d2df4a9d1c04ff297367dea2a # v3
with:
category: "/language:${{ matrix.language }}"
88 changes: 86 additions & 2 deletions .github/workflows/docker-pull-notify.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ name: Project Metrics Tracker
on:
schedule:
- cron: '*/15 * * * *' # every 15 min β€” collect metrics + push to analytics
- cron: '0 18 * * *' # daily β€” 6pm UTC, digest (only if activity)
- cron: '0 9 * * 0' # weekly β€” Sunday 9am UTC, Slack digest
workflow_dispatch:
inputs:
Expand Down Expand Up @@ -40,11 +41,14 @@ jobs:
echo "week_docker=$(jq -r '.week_docker // 0' metrics.json)" >> "$GITHUB_OUTPUT"
echo "week_stars=$(jq -r '.week_stars // 0' metrics.json)" >> "$GITHUB_OUTPUT"
echo "week_forks=$(jq -r '.week_forks // 0' metrics.json)" >> "$GITHUB_OUTPUT"
echo "day_docker=$(jq -r '.day_docker // 0' metrics.json)" >> "$GITHUB_OUTPUT"
echo "day_stars=$(jq -r '.day_stars // 0' metrics.json)" >> "$GITHUB_OUTPUT"
echo "day_forks=$(jq -r '.day_forks // 0' metrics.json)" >> "$GITHUB_OUTPUT"
echo "last_milestone=$(jq -r '.last_milestone // 0' metrics.json)" >> "$GITHUB_OUTPUT"
echo "has_data=true" >> "$GITHUB_OUTPUT"
else
echo "has_data=false" >> "$GITHUB_OUTPUT"
for key in docker_pulls stars forks week_docker week_stars week_forks last_milestone; do
for key in docker_pulls stars forks week_docker week_stars week_forks day_docker day_stars day_forks last_milestone; do
echo "${key}=0" >> "$GITHUB_OUTPUT"
done
fi
Expand Down Expand Up @@ -259,10 +263,72 @@ jobs:
]
}"

# ── Daily digest (only if activity) ──────────────────────
- name: Daily digest
if: >-
github.event.schedule == '0 18 * * *'
&& steps.prev.outputs.has_data == 'true'
continue-on-error: true
env:
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }}
run: |
if [ -z "$SLACK_WEBHOOK" ]; then
echo "No SLACK_WEBHOOK_URL configured, skipping"
exit 0
fi

PULLS=${{ steps.docker.outputs.pulls }}
STARS=${{ steps.github.outputs.stars }}
FORKS=${{ steps.github.outputs.forks }}
VIEWS=${{ steps.traffic.outputs.views }}
CLONES=${{ steps.traffic.outputs.clones }}

DAY_PULL_DIFF=$(( PULLS - ${{ steps.prev.outputs.day_docker }} ))
DAY_STAR_DIFF=$(( STARS - ${{ steps.prev.outputs.day_stars }} ))
DAY_FORK_DIFF=$(( FORKS - ${{ steps.prev.outputs.day_forks }} ))

# Only send if something actually changed today
if [ "$DAY_PULL_DIFF" -eq 0 ] && [ "$DAY_STAR_DIFF" -eq 0 ] && [ "$DAY_FORK_DIFF" -eq 0 ]; then
echo "No daily activity β€” skipping digest"
exit 0
fi

# Build sign prefixes
pull_sign=""; [ "$DAY_PULL_DIFF" -gt 0 ] && pull_sign="+"
star_sign=""; [ "$DAY_STAR_DIFF" -gt 0 ] && star_sign="+"
fork_sign=""; [ "$DAY_FORK_DIFF" -gt 0 ] && fork_sign="+"

PULLS_FMT=$(printf "%'d" "$PULLS")

curl -sf -X POST "$SLACK_WEBHOOK" \
-H 'Content-type: application/json' \
-d "{
\"blocks\": [
{
\"type\": \"header\",
\"text\": { \"type\": \"plain_text\", \"text\": \"πŸ“ˆ EDDI Daily Update\", \"emoji\": true }
},
{
\"type\": \"section\",
\"text\": {
\"type\": \"mrkdwn\",
\"text\": \"🐳 *Pulls:* ${PULLS_FMT} (${pull_sign}${DAY_PULL_DIFF}) · ⭐ *Stars:* ${STARS} (${star_sign}${DAY_STAR_DIFF}) · 🍴 *Forks:* ${FORKS} (${fork_sign}${DAY_FORK_DIFF})\"
}
},
{
\"type\": \"context\",
\"elements\": [
{ \"type\": \"mrkdwn\", \"text\": \"πŸ‘€ Views: ${VIEWS} Β· πŸ“₯ Clones: ${CLONES} Β· <https://github.com/labsai/EDDI|GitHub>\" }
]
}
]
}"

# ── Save updated metrics ────────────────────────────────
- name: Build metrics snapshot
run: |
IS_WEEKLY="${{ github.event.schedule == '0 9 * * 0' || github.event.inputs.force_digest == 'true' }}"
IS_DAILY="${{ github.event.schedule == '0 18 * * *' }}"

# On weekly digest, reset the week baseline
if [ "$IS_WEEKLY" = "true" ]; then
Expand All @@ -275,10 +341,24 @@ jobs:
WEEK_FORKS=${{ steps.prev.outputs.week_forks }}
fi

# First run: initialize week baseline
# On daily digest (or weekly), reset the day baseline
if [ "$IS_DAILY" = "true" ] || [ "$IS_WEEKLY" = "true" ]; then
DAY_DOCKER=${{ steps.docker.outputs.pulls }}
DAY_STARS=${{ steps.github.outputs.stars }}
DAY_FORKS=${{ steps.github.outputs.forks }}
else
DAY_DOCKER=${{ steps.prev.outputs.day_docker }}
DAY_STARS=${{ steps.prev.outputs.day_stars }}
DAY_FORKS=${{ steps.prev.outputs.day_forks }}
fi

# First run: initialize baselines
[ "$WEEK_DOCKER" = "0" ] && WEEK_DOCKER=${{ steps.docker.outputs.pulls }}
[ "$WEEK_STARS" = "0" ] && WEEK_STARS=${{ steps.github.outputs.stars }}
[ "$WEEK_FORKS" = "0" ] && WEEK_FORKS=${{ steps.github.outputs.forks }}
[ "$DAY_DOCKER" = "0" ] && DAY_DOCKER=${{ steps.docker.outputs.pulls }}
[ "$DAY_STARS" = "0" ] && DAY_STARS=${{ steps.github.outputs.stars }}
[ "$DAY_FORKS" = "0" ] && DAY_FORKS=${{ steps.github.outputs.forks }}

# Current milestone marker
CURRENT_MS=$(( ${{ steps.docker.outputs.pulls }} / 10000 * 10000 ))
Expand All @@ -290,9 +370,13 @@ jobs:
--argjson week_docker "$WEEK_DOCKER" \
--argjson week_stars "$WEEK_STARS" \
--argjson week_forks "$WEEK_FORKS" \
--argjson day_docker "$DAY_DOCKER" \
--argjson day_stars "$DAY_STARS" \
--argjson day_forks "$DAY_FORKS" \
--argjson last_milestone "$CURRENT_MS" \
'{docker_pulls: $docker_pulls, stars: $stars, forks: $forks,
week_docker: $week_docker, week_stars: $week_stars, week_forks: $week_forks,
day_docker: $day_docker, day_stars: $day_stars, day_forks: $day_forks,
last_milestone: $last_milestone}' > metrics.json

echo "Saved metrics:"
Expand Down
13 changes: 13 additions & 0 deletions .gitleaksignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# Gitleaks Ignore File
# ─────────────────────────────────────────────────────────────────
# Add fingerprints here to suppress known false positives.
# Each entry must be justified with a comment explaining why.
#
# To get a fingerprint, run: gitleaks detect --report-format json
# and copy the "Fingerprint" field from the finding.
#
# Format:
# <fingerprint> # <reason for suppression>
#
# Review this file periodically to ensure suppressions are still valid.
# ─────────────────────────────────────────────────────────────────
15 changes: 15 additions & 0 deletions .trivyignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# Trivy Ignore File
# ─────────────────────────────────────────────────────────────────
# Add CVE IDs here to suppress known false positives or accepted risks.
# Each entry must be justified with a comment explaining why.
#
# Format:
# # <reason for suppression>
# CVE-YYYY-NNNNN
#
# Example:
# # Disputed CVE β€” no actual impact in our usage of library X
# CVE-2024-99999
#
# Review this file periodically to ensure suppressions are still valid.
# ─────────────────────────────────────────────────────────────────
2 changes: 1 addition & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,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 |
| β€” | RC2 Hardening | 2,000+ unit tests, 250+ integration tests, branding overhaul, rules deserialization fix |
| β€” | RC2 Hardening | 3,500+ unit tests, 550+ integration tests, branding overhaul, rules deserialization fix |
| β€” | Security Hardening v6.0.2 | SSRF prevention, SafeHttpClient, auth guard, vault salt, security headers, CodeQL + Trivy CI |

### In Progress / Upcoming
Expand Down
17 changes: 12 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@

# E.D.D.I β€” Multi-Agent Orchestration Middleware for Conversational AI

[![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) [![OpenSSF Best Practices](https://www.bestpractices.dev/projects/12355/badge)](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) ![Tests](https://img.shields.io/badge/tests-2%2C400%2B-brightgreen)
[![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) [![OpenSSF Best Practices](https://www.bestpractices.dev/projects/12355/badge)](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)

[![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)
[![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-4%2C600%2B-brightgreen) ![Coverage](https://img.shields.io/badge/coverage-%3E80%25-brightgreen)

[![Docker Pulls](https://img.shields.io/docker/pulls/labsai/eddi)](https://hub.docker.com/r/labsai/eddi) [![Repository: AI Ready](https://img.shields.io/badge/Repository-AI_Ready-blueviolet?logo=robot)](AGENTS.md)

Expand Down Expand Up @@ -607,9 +607,16 @@ EDDI ships with security-by-default for production deployments:
- **Secrets encrypted at rest** β€” Envelope encryption (PBKDF2 β†’ AES-256-GCM) with per-deployment salt. Never plaintext in DB
- **SSRF protection** β€” All LLM tool HTTP calls go through `SafeHttpClient` with private IP blocking, redirect validation, and scheme enforcement
- **Security headers** β€” `X-Content-Type-Options`, `X-Frame-Options`, `Content-Security-Policy` configured out of the box
- **CI scanning** β€” CodeQL (semantic analysis) + Trivy (CVE scanning) + dependency review on every PR

For vulnerability reports, see our [Security Policy](SECURITY.md). For architecture details, see [Security Architecture](docs/architecture.md#security-architecture).
- **CI/CD security gates** β€” Every push/PR is scanned by:
- **CodeQL** β€” Semantic SAST analysis with `security-extended` queries
- **Trivy** β€” CVE scanning for both filesystem dependencies and Docker images (blocking on CRITICAL/HIGH)
- **Gitleaks** β€” Git history scanning to prevent secret/credential leakage
- **ZAP** β€” DAST API scanning against the live Docker image (report-only)
- **CycloneDX** β€” SBOM generation for supply chain transparency
- **Jazzer** β€” Coverage-guided fuzz testing for security-critical parsers (PathNavigator, MatchingUtilities)
- All actions SHA-pinned to prevent supply-chain attacks

For vulnerability reports, see our [Security Policy](SECURITY.md). For architecture details, see [Security Architecture](docs/security.md).

## πŸ“œ Code of Conduct

Expand Down
Loading
Loading