Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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.0)"
description: "EDDI version (e.g. 6.1.1)"
required: true
default: "6.1.0"
default: "6.1.1"
release:
description: "Release number (e.g. 1, 2, 3)"
required: true
Expand Down
58 changes: 58 additions & 0 deletions docs/changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,64 @@

---

## Swagger UI Overhaul, Manager Update & Version 6.1.1 (2026-06-23)

**Repo:** EDDI (`feat/swagger-ui-overhaul`)
**What changed:** Complete overhaul of Swagger UI, version bump to 6.1.1, Manager frontend asset update, and Docker base image bump.

### Tag Taxonomy (40 tags, 9 categories)

All `@Tag` annotations updated from flat names to category-based hierarchy (`Category / Subcategory`) for logical grouping in Swagger UI. The `@OpenAPIDefinition` tag array in `OpenApiConfig.java` defines the canonical taxonomy.

- **Agents**: Setup, Agents, Administration, Agent Groups
- **Configuration**: Workflows, LLM, Behavior Rules, Dictionary, Output, API Calls, MCP Calls, Properties, Prompt Snippets, Global Variables
- **Conversations**: Conversations, Group Conversations, Conversation Store, Attachments
- **Integrations**: A2A Protocol, Capability Registry, Channel Integrations, Slack Webhook
- **Knowledge & Memory**: RAG Knowledge Bases, RAG Ingestion, User Memory
- **Security**: Authentication, Secrets Vault, Audit Trail, GDPR / Privacy, Tenant Quotas
- **Administration**: Backup, Schedules, Coordinator Admin, Orphan Admin, Log Admin, Descriptors
- **Tools**: Tool History, Template Preview, Standalone NLP
- **UI**: Chat UI

All 49 REST interface `@Tag` annotations now include `description` attributes (SmallRye was silently dropping `@OpenAPIDefinition` descriptions when interface-level `@Tag` lacked one).

4 previously untagged endpoints received new `@Tag` annotations:
- `ILogoutEndpoint` → `Security / Authentication`
- `RestSlackWebhook` → `Integrations / Slack Webhook`
- `RestToolHistory` → `Tools / Tool History` (+ added missing `@ApplicationScoped`)
- `RestA2AEndpoint` → `Integrations / A2A Protocol` (capability endpoints tagged `Integrations / Capability Registry`)

### OpenApiTagSortFilter (new)

New `OASFilter` implementation (`OpenApiTagSortFilter.java`) sorts tags alphabetically at build time, producing stable ordering. Fixed `UnsupportedOperationException` caused by sorting SmallRye's unmodifiable tag list. Swagger UI config: `quarkus.swagger-ui.tags-sorter=alpha`, `quarkus.swagger-ui.theme=original`.

### Swagger UI Light/Dark Mode

Complete rewrite of `META-INF/branding/style.css` with proper dual-theme support:
- **Light mode** (default): white backgrounds, dark text, amber-600 (`#d97706`) accents
- **Dark mode** (lamp toggle → `html.dark-mode`): EDDI Manager palette — zinc-950 bg, zinc-900 surfaces, amber-500 accents
- Topbar stays dark (`#18181b`) in both modes for brand consistency with logo
- EDDI amber accents on Authorize, Execute, Explore, and Try-it-out buttons
- Version badge `6.1.1` with WCAG AAA contrast; OAS 3.1 badge demoted to subtle gray
- HTTP verb tinted operation blocks (blue GET, green POST, amber PUT, red DELETE, purple PATCH)
- Logo renamed `eddi-logo.png` → `logo.png` (Quarkus auto-detection convention)

### Version Bump → 6.1.1

Updated across: `pom.xml`, `application.properties` (×3 fields), `OpenApiConfig.java`, `Dockerfile`, `Chart.yaml`, `eddi-deployment.yaml`, `quickstart.yaml`, `redhat-certify.yml`.

### Docker Base Image

Bumped Red Hat UBI9 OpenJDK 25 runtime digest (`sha256:0f4e04...` → `sha256:2aed9f...`).

### Manager Frontend

Updated `manage.html` asset references to latest EDDI-Manager build. Removed old bundle artifacts (~4,000 lines of obsolete JS/CSS).

**Files changed:** 100 files, +1,107 / −4,041 lines

---

## 📦 Safe Dependency Bumps (2026-06-19)

**Repo:** EDDI (`chore/bump-safe-deps`)
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.0"
appVersion: "6.1.1"
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.0"
app.kubernetes.io/version: "6.1.1"
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.0"
app.kubernetes.io/version: "6.1.1"
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.0"
app.kubernetes.io/version: "6.1.1"
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.0"
app.kubernetes.io/version: "6.1.1"
app.kubernetes.io/component: server
app.kubernetes.io/part-of: eddi
annotations:
Expand Down
2 changes: 1 addition & 1 deletion 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.0</version>
<version>6.1.1</version>
<properties>
<compiler-plugin.version>3.15.0</compiler-plugin.version>
<maven.compiler.source>25</maven.compiler.source>
Expand Down
4 changes: 2 additions & 2 deletions src/main/docker/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -78,10 +78,10 @@
# accessed directly. (example: "foo.example.com,bar.example.com")
#
###
FROM registry.access.redhat.com/ubi9/openjdk-25-runtime:1.24@sha256:0f4e0418d97fdf5d825b26660f6609ca6760f98ba92a5a31f2208c89270a19d5
FROM registry.access.redhat.com/ubi9/openjdk-25-runtime:1.24@sha256:2aed9f3a5fac4def355ac36d5c59c7a3067857da424adaa9c6929ff71310467e

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔒 Security & Privacy | 🔴 Critical

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Verify Red Hat UBI9 OpenJDK 25 base image digest and check for CVEs

IMAGE="registry.access.redhat.com/ubi9/openjdk-25-runtime:1.24@sha256:2aed9f3a5fac4def355ac36d5c59c7a3067857da424adaa9c6929ff71310467e"

echo "=== Verifying digest pulls successfully ==="
docker manifest inspect "${IMAGE}" 2>&1 | head -20

echo ""
echo "=== Checking Red Hat security advisories ==="
# Query Red Hat security data API for UBI9 OpenJDK 25
curl -s "https://access.redhat.com/labs/securitydataapi/cve.json?product=Red%20Hat%20Enterprise%20Linux%209&package=openjdk" | \
  jq -r '.[] | select(.severity == "Critical" or .severity == "Important") | "\(.CVE) - \(.severity) - \(.bugzilla_description // "No description")"' | \
  head -10

echo ""
echo "=== GitHub Security Advisories check ==="
gh api graphql -f query='
{
  securityVulnerabilities(first: 5, ecosystem: MAVEN, package: "openjdk") {
    nodes {
      advisory {
        summary
        severity
        publishedAt
      }
      vulnerableVersionRange
    }
  }
}'

Repository: labsai/EDDI

Length of output: 427


🌐 Web query:

UBI9 OpenJDK 25 runtime registry.access.redhat.com ubi9/openjdk-25-runtime:1.24 digest sha256:2aed9f3a5fac4def355ac36d5c59c7a3067857da424adaa9c6929ff71310467e

💡 Result:

The container image registry.access.redhat.com/ubi9/openjdk-25-runtime:1.24 is an official Red Hat Universal Base Image (UBI) 9 runtime image for OpenJDK 25 [1][2][3][4]. Regarding the specific digest you provided (sha256:2aed9f3a5fac4def355ac36d5c59c7a3067857da424adaa9c6929ff71310467e): According to official Red Hat advisory records (such as RHBA-2026:1458), this specific digest does not appear in the lists of confirmed, released container image digests for the ubi9/openjdk-25-runtime image [5]. Official Red Hat container images are periodically updated with new digests as part of regular errata and security patching processes [6][5]. If you are attempting to pull this specific image, it is recommended to verify the tag and digest directly against the Red Hat Ecosystem Catalog to ensure you are using a trusted, supported version [1]. You can inspect the latest digests for this image by using the skopeo or podman command-line tools to query the Red Hat registry [1].

Citations:


🌐 Web query:

Red Hat UBI9 OpenJDK 25 runtime CVE vulnerabilities security advisories

💡 Result:

Red Hat provides official Universal Base Image (UBI) 9 container images for OpenJDK 25, including both full JDK and runtime-only variants [1][2][3][4]. These images are available through the Red Hat Ecosystem Catalog and are maintained as part of Red Hat's containerized middleware portfolio [1][2][5]. Security and bug fix updates for these images are issued through Red Hat's standard advisory channels. Because container images are periodically updated to include the latest patches, users are advised to use the most recent image tags and regularly rebuild their dependent applications [6][7][8]. For security-specific information, Red Hat publishes Security Advisories (RHSA) when vulnerabilities are identified and patched within the OpenJDK packages [9][10]. As of June 2026, recent security updates for OpenJDK 25 have addressed multiple vulnerabilities, including issues related to cryptography, TLS handling, and third-party library dependencies (such as libpng and giflib) [9]. Users should monitor the Red Hat Errata and Security Data pages for their specific environment to track new CVEs and available patches [9][10]. Key resources for tracking and managing these updates include: - Red Hat Ecosystem Catalog: The official source for discovering and pulling verified UBI-based OpenJDK images [1][2]. - Red Hat Errata (RHSA/RHBA): The definitive source for security advisories and bug fixes [6][9]. - Red Hat OpenJDK Container Documentation: Provides configuration details and image metadata [5].

Citations:


🌐 Web query:

registry.access.redhat.com ubi9/openjdk-25-runtime:1.24 Red Hat official image

💡 Result:

The image registry.access.redhat.com/ubi9/openjdk-25-runtime:1.24 is an official Red Hat container image [1]. It is based on the Red Hat Universal Base Image 9 (UBI9) and is designed to provide a runtime environment for Java applications using OpenJDK 25 [1][2]. Key details about this image: - Purpose: It provides a hardened, enterprise-ready environment specifically for running Java applications (fat-jar and flat classpath) [2]. - Base Layer: The image is built upon the Red Hat UBI9 minimal image [2]. - Maintenance: It is part of the Red Hat OpenJDK container images project, with documentation and source code maintained in the Red Hat OpenJDK GitHub repository [2][3][4]. - Usage: The image is widely recognized in ecosystems such as Quarkus, where it serves as a default base image for containerizing Java applications built with OpenJDK 25 or higher [5]. - Versioning: The 1.24 tag refers to the version of the container image build, and it may receive periodic updates to the underlying packages (represented by longer tag suffixes) [2][6]. You can find the official catalog entry and further documentation through the Red Hat Ecosystem Catalog and the dedicated project documentation pages [1][3].

Citations:


The specified digest does not exist in official Red Hat records and must be replaced with a valid digest.

The digest sha256:2aed9f3a5fac4def355ac36d5c59c7a3067857da424adaa9c6929ff71310467e for registry.access.redhat.com/ubi9/openjdk-25-runtime:1.24 does not appear in the confirmed, released container image digests according to Red Hat advisory RHBA-2026:1458. Using an unverified or non-existent digest violates OpenSSF supply-chain compliance. Verify the correct digest by querying the Red Hat Ecosystem Catalog directly with skopeo inspect docker://registry.access.redhat.com/ubi9/openjdk-25-runtime:1.24 and update the FROM directive with the official digest.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/main/docker/Dockerfile` at line 81, The Docker FROM directive uses an
invalid or unverified digest for the UBI9 OpenJDK 25 runtime image that does not
exist in official Red Hat records. Replace the current digest in the FROM
statement (the sha256 hash following the @ symbol) with the correct and verified
digest by querying the Red Hat Ecosystem Catalog using the skopeo inspect
command as specified in the comment. Ensure the final FROM directive contains
the official validated digest from Red Hat's released container image records.


### Red Hat Container Certification — required labels
ARG EDDI_VERSION=6.1.0
ARG EDDI_VERSION=6.1.1
ARG EDDI_RELEASE=1

LABEL name="labsai/eddi" \
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
* @author ginccc
*/
@Path("/backup/export")
@Tag(name = "Backup")
@Tag(name = "Operations / Backup", description = "Import and export agents as zip files")
@RolesAllowed({"eddi-admin", "eddi-editor"})
public interface IRestExportService {
@GET
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
* @author ginccc
*/
@Path("backup/import")
@Tag(name = "Backup")
@Tag(name = "Operations / Backup", description = "Import and export agents as zip files")
@RolesAllowed({"eddi-admin", "eddi-editor"})
public interface IRestImportService {
@POST
Expand Down
75 changes: 49 additions & 26 deletions src/main/java/ai/labs/eddi/configs/OpenApiConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,32 +19,55 @@
*
* @since 6.0.0
*/
@OpenAPIDefinition(info = @Info(title = "EDDI API", version = "6.0.0"), tags = {
@Tag(name = "Agent Setup", description = "One-command agent creation and deployment"),
@Tag(name = "Conversations", description = "Start, talk to, stream, undo/redo, and manage conversations"),
@Tag(name = "Group Conversations", description = "Multi-agent group discussion orchestration"),
@Tag(name = "Conversation Store", description = "Query, delete, and manage conversation history"),
@OpenAPIDefinition(info = @Info(title = "EDDI API", version = "6.1.1"), tags = {
// ── Agents ───────────────────────────────────────────────────────
@Tag(name = "Agents", description = "Agent configuration CRUD"),
@Tag(name = "Agent Administration", description = "Deploy, undeploy, trigger, and monitor agents"),
@Tag(name = "Workflows", description = "Workflow pipeline configuration and available steps"),
@Tag(name = "LLM Configuration", description = "LLM provider and model settings"),
@Tag(name = "Behavior Rules", description = "Behavior rule evaluation configuration"),
@Tag(name = "Dictionary", description = "Dictionary, expressions, and actions for NLP"),
@Tag(name = "Output", description = "Output template configuration and action keys"),
@Tag(name = "API Calls", description = "HTTP API call definitions for tool use"),
@Tag(name = "Properties", description = "User property storage and setter configuration"),
@Tag(name = "Agent Groups", description = "Agent group configuration for multi-agent debates"),
@Tag(name = "Backup", description = "Import and export agents as zip files"),
@Tag(name = "Schedules", description = "Scheduled agent triggers (heartbeat, cron)"),
@Tag(name = "Secrets Vault", description = "Encrypted secret storage and management"),
@Tag(name = "Tenant Quotas", description = "Per-tenant rate limits and usage metering"),
@Tag(name = "Audit Trail", description = "Immutable audit ledger queries"),
@Tag(name = "GDPR / Privacy", description = "User data erasure and export for GDPR/CCPA compliance"),
@Tag(name = "Coordinator Admin", description = "Conversation coordinator monitoring and dead letters"),
@Tag(name = "Orphan Admin", description = "Detect and clean up orphaned resources"),
@Tag(name = "Log Admin", description = "Real-time log streaming and historical queries"),
@Tag(name = "Descriptors", description = "Cross-resource document descriptor management"),
@Tag(name = "Standalone NLP", description = "Standalone semantic parser"),
@Tag(name = "Chat UI", description = "Embedded responsive chat window")})
@Tag(name = "Agents / Administration", description = "Deploy, undeploy, trigger, and monitor agents"),
@Tag(name = "Agents / Groups", description = "Agent group configuration for multi-agent debates"),
@Tag(name = "Agents / Setup", description = "One-command agent creation and deployment"),
// ── Configuration ───────────────────────────────────────────────
@Tag(name = "Configuration / API Calls", description = "HTTP API call definitions for tool use"),
@Tag(name = "Configuration / Behavior Rules", description = "Behavior rule evaluation configuration"),
@Tag(name = "Configuration / Dictionary", description = "Dictionary, expressions, and actions for NLP"),
@Tag(name = "Configuration / Global Variables", description = "Deployment-wide configuration variables"),
@Tag(name = "Configuration / LLM", description = "LLM provider and model settings"),
@Tag(name = "Configuration / MCP Calls", description = "MCP server call definitions for tool use"),
@Tag(name = "Configuration / Output", description = "Output template configuration and action keys"),
@Tag(name = "Configuration / Prompt Snippets", description = "Reusable system prompt building blocks"),
@Tag(name = "Configuration / Properties", description = "User property storage and setter configuration"),
@Tag(name = "Configuration / Workflows", description = "Workflow pipeline configuration and available steps"),
// ── Conversations ───────────────────────────────────────────────
@Tag(name = "Conversations", description = "Start, talk to, stream, undo/redo, and manage conversations"),
@Tag(name = "Conversations / Attachments", description = "Upload and manage binary conversation attachments"),
@Tag(name = "Conversations / Groups", description = "Multi-agent group discussion orchestration"),
@Tag(name = "Conversations / Store", description = "Query, delete, and manage conversation history"),
// ── Integrations ────────────────────────────────────────────────
@Tag(name = "Integrations / A2A Protocol", description = "Agent-to-Agent protocol endpoints"),
@Tag(name = "Integrations / Capability Registry", description = "A2A agent capability discovery"),
@Tag(name = "Integrations / Channels", description = "Channel integration configuration (Slack, Teams, etc.)"),
@Tag(name = "Integrations / Slack Webhook", description = "Slack Events API webhook receiver"),
// ── Knowledge ───────────────────────────────────────────────────
@Tag(name = "Knowledge / RAG Ingestion", description = "RAG document ingestion and indexing"),
@Tag(name = "Knowledge / RAG Stores", description = "RAG knowledge base configuration"),
@Tag(name = "Knowledge / User Memory", description = "Persistent user memory management"),
// ── Operations ──────────────────────────────────────────────────
@Tag(name = "Operations / Backup", description = "Import and export agents as zip files"),
@Tag(name = "Operations / Coordinator", description = "Conversation coordinator monitoring and dead letters"),
@Tag(name = "Operations / Descriptors", description = "Cross-resource document descriptor management"),
@Tag(name = "Operations / Logs", description = "Real-time log streaming and historical queries"),
@Tag(name = "Operations / Orphans", description = "Detect and clean up orphaned resources"),
@Tag(name = "Operations / Schedules", description = "Scheduled agent triggers (heartbeat, cron)"),
// ── Security ────────────────────────────────────────────────────
@Tag(name = "Security / Audit Trail", description = "Immutable audit ledger queries"),
@Tag(name = "Security / Authentication", description = "Authentication status and session management"),
@Tag(name = "Security / GDPR / Privacy", description = "User data erasure and export for GDPR/CCPA compliance"),
@Tag(name = "Security / Secrets Vault", description = "Encrypted secret storage and management"),
@Tag(name = "Security / Tenant Quotas", description = "Per-tenant rate limits and usage metering"),
// ── Tools ───────────────────────────────────────────────────────
@Tag(name = "Tools / NLP", description = "Standalone semantic parser"),
@Tag(name = "Tools / Template Preview", description = "Preview resolved system prompts with sample data"),
@Tag(name = "Tools / Tool History", description = "Tool execution history, cache, rate limits, and cost tracking"),
// ── UI ──────────────────────────────────────────────────────────
@Tag(name = "UI / Chat", description = "Embedded responsive chat window")})
public class OpenApiConfig {
}
31 changes: 31 additions & 0 deletions src/main/java/ai/labs/eddi/configs/OpenApiTagSortFilter.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
/*
* Copyright EDDI contributors
* SPDX-License-Identifier: Apache-2.0
*/
package ai.labs.eddi.configs;

import io.quarkus.smallrye.openapi.OpenApiFilter;
import org.eclipse.microprofile.openapi.OASFilter;
import org.eclipse.microprofile.openapi.models.OpenAPI;

import java.util.Comparator;

/**
* Sorts OpenAPI tags alphabetically at build time, producing a stable,
* logically grouped order in Swagger UI and all API consumers.
*
* @since 6.1.1
*/
@OpenApiFilter(OpenApiFilter.RunStage.BUILD)
public class OpenApiTagSortFilter implements OASFilter {

@Override
public void filterOpenAPI(OpenAPI openAPI) {
if (openAPI.getTags() != null) {
var sorted = new java.util.ArrayList<>(openAPI.getTags());
sorted.sort(Comparator.comparing(
org.eclipse.microprofile.openapi.models.tags.Tag::getName));
openAPI.setTags(sorted);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
* @since 6.0.0
*/
@Path("/administration/orphans")
@Tag(name = "Orphan Admin")
@Tag(name = "Operations / Orphans", description = "Detect and clean up orphaned resources")
@RolesAllowed("eddi-admin")
public interface IRestOrphanAdmin {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
* @author ginccc
*/
@Path("/agentstore/agents")
@Tag(name = "Agents")
@Tag(name = "Agents", description = "Agent configuration CRUD")
@RolesAllowed({"eddi-admin", "eddi-editor"})
public interface IRestAgentStore extends IRestVersionInfo {
String resourceURI = "eddi://ai.labs.agent/agentstore/agents/";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
* @since 6.0.0
*/
@Path("/capabilities")
@Tag(name = "06. Capability Registry", description = "A2A agent capability discovery")
@Tag(name = "Integrations / Capability Registry", description = "A2A agent capability discovery")
public interface IRestCapabilityRegistry {

@GET
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
* @author ginccc
*/
@Path("/apicallstore/apicalls")
@Tag(name = "API Calls")
@Tag(name = "Configuration / API Calls", description = "HTTP API call definitions for tool use")
@RolesAllowed({"eddi-admin", "eddi-editor"})
public interface IRestApiCallsStore extends IRestVersionInfo {
String resourceBaseType = "eddi://ai.labs.apicalls";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
* @since 6.1.0
*/
@Path("/channelstore/channels")
@Tag(name = "Channel Integrations")
@Tag(name = "Integrations / Channels", description = "Channel integration configuration (Slack, Teams, etc.)")
@RolesAllowed({"eddi-admin", "eddi-editor"})
public interface IRestChannelIntegrationStore extends IRestVersionInfo {
String resourceBaseType = "eddi://ai.labs.channel";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
* @author ginccc
*/
@Path("/deploymentstore/deployments")
@Tag(name = "Agent Administration")
@Tag(name = "Agents / Administration", description = "Deploy, undeploy, trigger, and monitor agents")
@RolesAllowed({"eddi-admin", "eddi-editor"})
public interface IRestDeploymentStore {
@GET
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
* @author ginccc
*/
@Path("/descriptorstore/descriptors")
@Tag(name = "Descriptors")
@Tag(name = "Operations / Descriptors", description = "Cross-resource document descriptor management")
@RolesAllowed({"eddi-admin", "eddi-editor"})
public interface IRestDocumentDescriptorStore {
String DESCRIPTOR_STORE_PATH = "/descriptorstore/descriptors/";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
* @author ginccc
*/
@Path("/actions")
@Tag(name = "Dictionary")
@Tag(name = "Configuration / Dictionary", description = "Dictionary, expressions, and actions for NLP")
public interface IRestAction {
@GET
@Produces(MediaType.APPLICATION_JSON)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
* @author ginccc
*/
@Path("/dictionarystore/dictionaries")
@Tag(name = "Dictionary")
@Tag(name = "Configuration / Dictionary", description = "Dictionary, expressions, and actions for NLP")
@RolesAllowed({"eddi-admin", "eddi-editor"})
public interface IRestDictionaryStore extends IRestVersionInfo {
String resourceURI = "eddi://ai.labs.dictionary/dictionarystore/dictionaries/";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
* @author ginccc
*/
@Path("/expressions")
@Tag(name = "Dictionary")
@Tag(name = "Configuration / Dictionary", description = "Dictionary, expressions, and actions for NLP")
public interface IRestExpression {
@GET
@Produces(MediaType.APPLICATION_JSON)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
* @author ginccc
*/
@Path("/groupstore/groups")
@Tag(name = "Agent Groups")
@Tag(name = "Agents / Groups", description = "Agent group configuration for multi-agent debates")
@RolesAllowed({"eddi-admin", "eddi-editor"})
public interface IRestAgentGroupStore extends IRestVersionInfo {
String resourceBaseType = "eddi://ai.labs.group";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
* @author ginccc
*/
@Path("/llmstore/llms")
@Tag(name = "LLM Configuration")
@Tag(name = "Configuration / LLM", description = "LLM provider and model settings")
@RolesAllowed({"eddi-admin", "eddi-editor"})
public interface IRestLlmStore extends IRestVersionInfo {
String resourceBaseType = "eddi://ai.labs.llm";
Expand Down
Loading
Loading