diff --git a/CHANGELOG.md b/CHANGELOG.md index 225a63d..5f95425 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,29 @@ # Hermes Web UI -- Changelog +## [v0.50.96] — 2026-04-19 + +### Added +- **Three-container Docker Compose reference config** — new `docker-compose.three-container.yml` adds an agent + dashboard + WebUI configuration on a shared `hermes-net` bridge, with memory/CPU limits and localhost-only port bindings by default. + +### Fixed +- **Two-container compose: gateway port now exposed** — `127.0.0.1:8642:8642` added so the gateway is reachable from the host for debugging. Explicit `command: gateway run` replaces entrypoint defaults. +- **Workspace path expansion** — `${HERMES_WORKSPACE:-~/workspace}` uses tilde in the default value, which Docker Compose correctly expands. `docker-compose.yml` also fixed to use `${HERMES_WORKSPACE:-${HOME}/workspace}` instead of nesting workspace inside the hermes home dir. +- **`HERMES_WEBUI_STATE_DIR` default corrected** — `webui-mvp` → `webui`, matching the current default in `config.py`. Prevents silent state directory split for new deployments. +(PR #708) + +## [v0.50.95] — 2026-04-19 + +### Added +- **Full Russian (ru-RU) localization** — 389/389 English keys covered, Slavic plural forms correctly implemented, native Cyrillic characters throughout. Login page Russian added. Russian locale now leads all non-English locales on key coverage. (PR #713, credit: @DrMaks22 and @renheqiang) + +## [v0.50.92] — 2026-04-19 + +### Fixed +- **XML tool-call syntax no longer leaks into chat bubbles** — `` blocks stripped server-side in the streaming pipeline and client-side in both the live stream and history render. Fixes the default DeepSeek profile showing raw XML on starter prompts. (#702) +- **Workspace file panel shows an empty-state message** instead of a blank pane when no workspace is configured or the directory is empty. (#703) +- **Notification settings description uses "app" instead of "tab"** — more accurate for native Mac app users. (#704) +(PR #712) + ## [v0.50.94] — 2026-04-19 ### Fixed diff --git a/docker-compose.three-container.yml b/docker-compose.three-container.yml new file mode 100644 index 0000000..34e1aed --- /dev/null +++ b/docker-compose.three-container.yml @@ -0,0 +1,105 @@ +# Three-container Docker Compose: Hermes Agent + Dashboard + WebUI +# +# This extends the two-container setup with the Hermes Dashboard for +# monitoring agent activity, sessions, and resource usage. +# +# Usage: +# docker compose -f docker-compose.three-container.yml up -d +# +# Services: +# hermes-agent — gateway API on port 8642 (CLI, Telegram, cron, tools) +# hermes-dashboard — monitoring dashboard on port 9119 +# hermes-webui — browser chat interface on port 8787 +# +# All three share the same hermes-home volume so config, sessions, +# skills, and memory are consistent across all surfaces. + +services: + hermes-agent: + image: nousresearch/hermes-agent:latest + container_name: hermes-agent + command: gateway run + ports: + - "127.0.0.1:8642:8642" + volumes: + # Persist config, state, sessions, skills, memory across restarts + - hermes-home:/root/.hermes + # Expose agent source so the WebUI can install dependencies from it + - hermes-agent-src:/opt/hermes + environment: + - HERMES_HOME=/root/.hermes + restart: unless-stopped + deploy: + resources: + limits: + memory: 4G + cpus: "2.0" + networks: + - hermes-net + + hermes-dashboard: + image: nousresearch/hermes-agent:latest + container_name: hermes-dashboard + command: dashboard --host 0.0.0.0 --insecure + ports: + - "127.0.0.1:9119:9119" + volumes: + - hermes-home:/root/.hermes + environment: + - HERMES_HOME=/root/.hermes + # Dashboard connects to the gateway for health/session data + - GATEWAY_HEALTH_URL=http://hermes-agent:8642 + depends_on: + - hermes-agent + restart: unless-stopped + deploy: + resources: + limits: + memory: 512M + cpus: "0.5" + networks: + - hermes-net + + hermes-webui: + image: ghcr.io/nesquena/hermes-webui:latest + container_name: hermes-webui + depends_on: + - hermes-agent + ports: + # Expose on localhost only. Remove 127.0.0.1: to expose on all interfaces + # (set HERMES_WEBUI_PASSWORD if doing so). + - "127.0.0.1:8787:8787" + volumes: + # Same hermes home as the agent — shares config, sessions, state + - hermes-home:/home/hermeswebui/.hermes + # Agent source mounted where docker_init.bash expects it. + # At startup the init script runs: + # uv pip install /home/hermeswebui/.hermes/hermes-agent + # which installs the agent and all its Python dependencies. + - hermes-agent-src:/home/hermeswebui/.hermes/hermes-agent + # Workspace directory — browse and edit files from the WebUI. + # Adapt the host path to your project directory. + - ${HERMES_WORKSPACE:-~/workspace}:/workspace + environment: + - HERMES_WEBUI_HOST=0.0.0.0 + - HERMES_WEBUI_PORT=8787 + - HERMES_WEBUI_STATE_DIR=/home/hermeswebui/.hermes/webui + # Match your host user's UID/GID for correct file permissions. + # Run `id -u` and `id -g` to find your values. + # On macOS, UIDs start at 501 (not 1000) — set these in a .env file: + # echo "UID=$(id -u)" >> .env && echo "GID=$(id -g)" >> .env + - WANTED_UID=${UID:-1000} + - WANTED_GID=${GID:-1000} + # Optional: set a password for remote access + # - HERMES_WEBUI_PASSWORD=your-secret-password + restart: unless-stopped + networks: + - hermes-net + +networks: + hermes-net: + driver: bridge + +volumes: + hermes-home: + hermes-agent-src: diff --git a/docker-compose.two-container.yml b/docker-compose.two-container.yml index 3d6360b..af4eb63 100644 --- a/docker-compose.two-container.yml +++ b/docker-compose.two-container.yml @@ -15,6 +15,12 @@ services: hermes-agent: image: nousresearch/hermes-agent:latest container_name: hermes-agent + command: gateway run + ports: + # Gateway API — exposed on localhost only. + # Other containers on hermes-net reach it via http://hermes-agent:8642. + # Remove 127.0.0.1: to expose on the host network (e.g. for remote clients). + - "127.0.0.1:8642:8642" volumes: # Persist config, state, sessions, skills, memory across restarts - hermes-home:/root/.hermes @@ -23,6 +29,8 @@ services: environment: - HERMES_HOME=/root/.hermes restart: unless-stopped + networks: + - hermes-net hermes-webui: image: ghcr.io/nesquena/hermes-webui:latest @@ -41,19 +49,29 @@ services: - hermes-agent-src:/home/hermeswebui/.hermes/hermes-agent # Workspace directory — browse and edit files from the WebUI. # Adapt the host path to your project directory. - - ~/workspace:/workspace + # Override with: HERMES_WORKSPACE=/your/path docker compose up + - ${HERMES_WORKSPACE:-~/workspace}:/workspace environment: - HERMES_WEBUI_HOST=0.0.0.0 - HERMES_WEBUI_PORT=8787 - - HERMES_WEBUI_STATE_DIR=/home/hermeswebui/.hermes/webui-mvp + - HERMES_WEBUI_STATE_DIR=/home/hermeswebui/.hermes/webui # Match your host user's UID/GID for correct file permissions. # In two-container setups the WebUI auto-detects UID/GID from the shared # hermes-home volume, but you can override explicitly if needed (#668): + # Run `id -u` and `id -g` to find your values. + # On macOS, UIDs start at 501 — set these in a .env file: + # echo "UID=$(id -u)" >> .env && echo "GID=$(id -g)" >> .env - WANTED_UID=${UID:-1000} - WANTED_GID=${GID:-1000} # Optional: set a password for remote access - # - HERMES_WEBUI_PASSWORD=your-secret-password + # - HERMES_WEBUI_PASSWORD=*** restart: unless-stopped + networks: + - hermes-net + +networks: + hermes-net: + driver: bridge volumes: hermes-home: diff --git a/docker-compose.yml b/docker-compose.yml index 69f1699..d9e71df 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -15,7 +15,7 @@ services: # macOS note: set UID and GID below to match your user ID (run `id -u` and `id -g`). - ${HERMES_HOME:-${HOME}/.hermes}:/home/hermeswebui/.hermes # Your workspace directory shown on first launch (adapt if yours is different, the container will use the mounted /workspace) - - ${HERMES_HOME:-${HOME}}/workspace:/workspace + - ${HERMES_WORKSPACE:-${HOME}/workspace}:/workspace environment: # Set to your host user ID: run `id -u` and `id -g` to find them. # On macOS, UIDs start at 501 (not 1000), so set UID and GID in a .env file: @@ -27,8 +27,8 @@ services: # Required: bind address and port - HERMES_WEBUI_HOST=0.0.0.0 - HERMES_WEBUI_PORT=8787 - # Where to store sessions, workspaces, and other state (default: ~/.hermes/webui-mvp) - - HERMES_WEBUI_STATE_DIR=/home/hermeswebui/.hermes/webui-mvp + # Where to store sessions, workspaces, and other state (default: ~/.hermes/webui) + - HERMES_WEBUI_STATE_DIR=/home/hermeswebui/.hermes/webui # Default workspace directory shown on first launch # - HERMES_WEBUI_DEFAULT_WORKSPACE=/workspace # Optional: set a password for remote access