docs: update all markdown to v0.28.1 state
- README: add GHCR pre-built images to Docker section, update line counts and test count (426 tests, 22 files), add CI/CD to architecture tree - ROADMAP: update header to v0.28.1/426 tests, mark all user-requested features as shipped, collapse completed Waves 3-7 into summary table, update architecture line counts, add CI/CD row - CHANGELOG: add v0.28.1 entry for CI pipeline + multi-arch Docker builds, update footer version - SPRINTS: update header and footer to v0.28.1 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
15
CHANGELOG.md
15
CHANGELOG.md
@@ -5,6 +5,19 @@
|
||||
|
||||
---
|
||||
|
||||
## [v0.28.1] CI Pipeline + Multi-Arch Docker Builds
|
||||
*April 3, 2026 | 426 tests*
|
||||
|
||||
### Features
|
||||
- **GitHub Actions CI.** New workflow triggers on tag push (`v*`). Builds
|
||||
multi-arch Docker images (linux/amd64 + linux/arm64), pushes to
|
||||
`ghcr.io/nesquena/hermes-webui`, and creates a GitHub Release with
|
||||
auto-generated release notes. Uses GHA layer caching for fast rebuilds.
|
||||
- **Pre-built container images.** Users can now `docker pull ghcr.io/nesquena/hermes-webui:latest`
|
||||
instead of building locally.
|
||||
|
||||
---
|
||||
|
||||
## [v0.27] Profile Creation Fallback for Docker (Issue #44)
|
||||
*April 3, 2026 | 426 tests*
|
||||
|
||||
@@ -904,4 +917,4 @@ Three-panel layout: sessions sidebar, chat area, workspace panel.
|
||||
|
||||
---
|
||||
|
||||
*Last updated: v0.27, April 3, 2026 | Tests: 426*
|
||||
*Last updated: v0.28.1, April 3, 2026 | Tests: 426*
|
||||
|
||||
42
README.md
42
README.md
@@ -37,17 +37,24 @@ That is it. The script will:
|
||||
|
||||
## Docker
|
||||
|
||||
Run with Docker Compose (recommended):
|
||||
**Pre-built images** (amd64 + arm64) are published to GHCR on every release:
|
||||
|
||||
```bash
|
||||
docker pull ghcr.io/nesquena/hermes-webui:latest
|
||||
docker run -d -p 8787:8787 -v ~/.hermes:/root/.hermes ghcr.io/nesquena/hermes-webui:latest
|
||||
```
|
||||
|
||||
Or run with Docker Compose (recommended):
|
||||
|
||||
```bash
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
Or build and run manually:
|
||||
Or build locally:
|
||||
|
||||
```bash
|
||||
docker build -t hermes-webui .
|
||||
docker run -d -p 8787:8787 -v ~/.hermes:/root/.hermes:ro hermes-webui
|
||||
docker run -d -p 8787:8787 -v ~/.hermes:/root/.hermes hermes-webui
|
||||
```
|
||||
|
||||
Open http://localhost:8787 in your browser.
|
||||
@@ -55,7 +62,7 @@ Open http://localhost:8787 in your browser.
|
||||
To enable password protection:
|
||||
|
||||
```bash
|
||||
docker run -d -p 8787:8787 -e HERMES_WEBUI_PASSWORD=your-secret -v ~/.hermes:/root/.hermes:ro hermes-webui
|
||||
docker run -d -p 8787:8787 -e HERMES_WEBUI_PASSWORD=your-secret -v ~/.hermes:/root/.hermes ghcr.io/nesquena/hermes-webui:latest
|
||||
```
|
||||
|
||||
Session data persists in a named volume (`hermes-data`) across restarts.
|
||||
@@ -169,8 +176,8 @@ Or using the agent venv explicitly:
|
||||
```
|
||||
|
||||
Tests run against an isolated server on port 8788 with a separate state directory.
|
||||
Production data and real cron jobs are never touched. Current count: **415 tests**
|
||||
across 21 test files.
|
||||
Production data and real cron jobs are never touched. Current count: **426 tests**
|
||||
across 22 test files.
|
||||
|
||||
---
|
||||
|
||||
@@ -277,30 +284,31 @@ across 21 test files.
|
||||
server.py HTTP routing shell + auth middleware (~81 lines)
|
||||
api/
|
||||
auth.py Optional password authentication, signed cookies (~149 lines)
|
||||
config.py Discovery, globals, model detection, reloadable config (~701 lines)
|
||||
config.py Discovery, globals, model detection, reloadable config (~702 lines)
|
||||
helpers.py HTTP helpers, security headers (~71 lines)
|
||||
models.py Session model + CRUD (~137 lines)
|
||||
profiles.py Profile state management, hermes_cli wrapper (~246 lines)
|
||||
models.py Session model + CRUD (~146 lines)
|
||||
profiles.py Profile state management, hermes_cli wrapper (~366 lines)
|
||||
routes.py All GET + POST route handlers (~1180 lines)
|
||||
streaming.py SSE engine, run_agent, cancel support (~236 lines)
|
||||
streaming.py SSE engine, run_agent, cancel support (~272 lines)
|
||||
upload.py Multipart parser, file upload handler (~78 lines)
|
||||
workspace.py File ops, workspace helpers (~77 lines)
|
||||
workspace.py File ops, workspace helpers (~245 lines)
|
||||
static/
|
||||
index.html HTML template (~364 lines)
|
||||
style.css All CSS incl. mobile responsive (~670 lines)
|
||||
ui.js DOM helpers, renderMd, tool cards, file tree (~977 lines)
|
||||
workspace.js File preview, file ops (~185 lines)
|
||||
sessions.js Session CRUD, list rendering, search (~533 lines)
|
||||
messages.js send(), SSE handlers, approval, transcript (~297 lines)
|
||||
panels.js Cron, skills, memory, profiles, settings (~974 lines)
|
||||
ui.js DOM helpers, renderMd, tool cards, file tree (~1002 lines)
|
||||
workspace.js File preview, file ops (~191 lines)
|
||||
sessions.js Session CRUD, list rendering, search (~556 lines)
|
||||
messages.js send(), SSE handlers, approval, transcript (~337 lines)
|
||||
panels.js Cron, skills, memory, profiles, settings (~1030 lines)
|
||||
commands.js Slash command autocomplete (~156 lines)
|
||||
boot.js Mobile nav, voice input, boot IIFE (~338 lines)
|
||||
tests/
|
||||
conftest.py Isolated test server (port 8788)
|
||||
test_sprint{1-20b}.py 21 test files, 415 test functions
|
||||
test_sprint{1-23}.py 22 test files, 426 test functions
|
||||
test_regressions.py Permanent regression gate (23 tests)
|
||||
Dockerfile python:3.12-slim container image
|
||||
docker-compose.yml Compose with named volume and optional auth
|
||||
.github/workflows/ CI: multi-arch Docker build + GitHub Release on tag
|
||||
```
|
||||
|
||||
State lives outside the repo at `~/.hermes/webui-mvp/` by default
|
||||
|
||||
116
ROADMAP.md
116
ROADMAP.md
@@ -3,8 +3,8 @@
|
||||
> Goal: Full 1:1 parity with the Hermes CLI experience via a clean dark web UI.
|
||||
> Everything you can do from the CLI terminal, you can do from this UI.
|
||||
>
|
||||
> Last updated: Sprint 22 / v0.24 (April 3, 2026)
|
||||
> Tests: 415 total (392 passing, 23 pre-existing failures)
|
||||
> Last updated: v0.28.1 (April 3, 2026)
|
||||
> Tests: 426 total (403 passing, 23 pre-existing failures)
|
||||
> Source: <repo>/
|
||||
|
||||
---
|
||||
@@ -46,11 +46,12 @@
|
||||
|
||||
| Layer | Location | Status |
|
||||
|-------|----------|--------|
|
||||
| Python server | <repo>/server.py (~81 lines) + api/ modules (~2876 lines) | Thin shell + auth middleware + business logic in api/ |
|
||||
| Python server | <repo>/server.py (~81 lines) + api/ modules (~3210 lines) | Thin shell + auth middleware + business logic in api/ |
|
||||
| HTML template | <repo>/static/index.html (~364 lines) | Served from disk |
|
||||
| CSS | <repo>/static/style.css (~670 lines) | Served from disk, incl. mobile responsive |
|
||||
| JavaScript | <repo>/static/{ui,workspace,sessions,messages,panels,boot,commands}.js | 7 modules, ~3460 lines total |
|
||||
| Docker | Dockerfile, docker-compose.yml, .dockerignore | python:3.12-slim, named volume |
|
||||
| JavaScript | <repo>/static/{ui,workspace,sessions,messages,panels,boot,commands}.js | 7 modules, ~3610 lines total |
|
||||
| Docker | Dockerfile, docker-compose.yml, .dockerignore | python:3.12-slim, multi-arch (amd64+arm64) |
|
||||
| CI/CD | .github/workflows/release.yml | Auto-release + GHCR publish on tag push |
|
||||
| Runtime state | ~/.hermes/webui-mvp/sessions/ | Session JSON files |
|
||||
| Test server | Port 8788, state dir ~/.hermes/webui-mvp-test/ | Isolated, wiped per run |
|
||||
| Production server | Port 8787 | SSH tunnel from Mac |
|
||||
@@ -273,96 +274,29 @@ Enter saves, Escape cancels. Topbar updates immediately.
|
||||
|
||||
---
|
||||
|
||||
## Wave 3: Power Features and Developer Experience
|
||||
## Completed Waves (Summary)
|
||||
|
||||
### Sprint 3.1: Tool Call Visibility Inline
|
||||
Show tool calls as collapsible cards in the conversation.
|
||||
Collapsed: tool name badge + one-line preview. Expanded: full args + result.
|
||||
|
||||
### Sprint 3.2: Multi-Model Expansion
|
||||
Add more models. Group by provider. Model info tooltip on hover.
|
||||
(Partially done: 10 models in dropdown from Sprint 1.)
|
||||
|
||||
### Sprint 3.2b: Resizable Panel Widths (COMPLETE Sprint 6)
|
||||
Both sidebar and workspace panel are drag-resizable with localStorage persistence.
|
||||
|
||||
### Sprint 3.3: Workspace File Actions
|
||||
- [x] Rename file (inline, double-click) (Sprint 14)
|
||||
- [x] Create folder (Sprint 14)
|
||||
- [x] Syntax highlighted code preview (Prism.js)
|
||||
|
||||
### Sprint 3.4: Conversation Controls
|
||||
- [x] Copy message (Sprint 5)
|
||||
- [x] Edit last user message + regenerate
|
||||
- [x] Regenerate last assistant response
|
||||
- [x] Clear conversation (wipe messages, keep session)
|
||||
|
||||
---
|
||||
|
||||
## Wave 4: Settings, Configuration, Notifications
|
||||
|
||||
### Sprint 4.1: Settings Panel
|
||||
Full settings overlay: default model, default workspace, enabled toolsets, config viewer.
|
||||
|
||||
### Sprint 4.2: Notification Panel
|
||||
Bell icon with unread count. SSE endpoint for cron completions and errors. Toast pop-ups.
|
||||
|
||||
### Sprint 4.3: Delivery Target Config
|
||||
Configure and test-ping delivery targets (Discord, Telegram, Slack, email) for cron jobs.
|
||||
|
||||
---
|
||||
|
||||
## Wave 5: Honcho Integration and Long-term Memory
|
||||
|
||||
### Sprint 5.1: Honcho Memory Panel
|
||||
User representation panel, cross-session context, Honcho search, memory write.
|
||||
|
||||
### Sprint 5.2: Session Continuity Features
|
||||
"What were we working on?" button, session tags, session archive.
|
||||
|
||||
---
|
||||
|
||||
## Wave 6: Realtime and Agentic Features
|
||||
|
||||
### Sprint 6.1: Background Task Monitor
|
||||
Live list of running agent threads. Cancel button. Queue visibility.
|
||||
|
||||
### Sprint 6.2: Subagent Delegation Cards
|
||||
When delegate_task fires, show subagent progress inline in chat.
|
||||
|
||||
### Sprint 6.3: Code Execution Panel
|
||||
Jupyter-style inline code cell. Stateful kernel per session.
|
||||
|
||||
### Sprint 6.4: Voice Mode
|
||||
Push-to-talk mic button. Whisper transcription. Optional TTS playback.
|
||||
|
||||
---
|
||||
|
||||
## Wave 7: Production Hardening and Mobile
|
||||
|
||||
### Sprint 7.1: Authentication
|
||||
HERMES_WEBUI_PASSWORD env var gate. Signed cookie. Login page.
|
||||
|
||||
### Sprint 7.2: HTTPS and Reverse Proxy
|
||||
Nginx + Let's Encrypt. CORS headers for external domain.
|
||||
|
||||
### Sprint 7.3: Mobile Responsive Layout
|
||||
Collapsible sidebar hamburger. Touch-friendly controls. Swipe gestures.
|
||||
|
||||
### Sprint 7.4: Performance and Scale
|
||||
Virtual scroll for session/message lists. Incremental message loading.
|
||||
| Wave | Theme | Key Deliverables |
|
||||
|------|-------|-----------------|
|
||||
| Wave 2 | Full CRUD + Interaction | Cron/skill/memory CRUD, session search, workspace management, session rename |
|
||||
| Wave 3 | Power Features | Tool call cards, multi-model dropdown, resizable panels, file actions, conversation controls |
|
||||
| Wave 4 | Settings + Notifications | Settings panel, cron alerts, background error banner |
|
||||
| Wave 5 | Session Continuity | Session tags, archive, projects/folders |
|
||||
| Wave 6 | Agentic Features | Background task cancel, voice input (Web Speech API) |
|
||||
| Wave 7 | Production Hardening | Password auth, security headers, mobile responsive, Docker + GHCR CI |
|
||||
|
||||
---
|
||||
|
||||
## User Requested Features
|
||||
|
||||
Community-requested enhancements tracked from GitHub issues.
|
||||
Community-requested enhancements tracked from GitHub issues. All shipped.
|
||||
|
||||
| Feature | Issue | Description | Complexity |
|
||||
|---------|-------|-------------|-----------|
|
||||
| Workspace tree view | #22 | Accordion/tree view for workspace file browser instead of flat list. Lazy-load subdirectories on expand, no backend changes needed. | Medium |
|
||||
| Docker container | #7 | Docker Compose setup with separate hermes-agent and hermes-webui containers, multi-arch (amd64 + arm64), volume mounts for config. | Medium-High |
|
||||
| Authentication | #23 | Password gate via `HERMES_WEBUI_PASSWORD` env var, login page, signed cookie. Already planned in Sprint 7.1. | Low-Medium |
|
||||
| Send key / personalization | #26 | Toggle send key (Enter vs Ctrl/Cmd+Enter) and queue vs interrupt mode as global settings. | Low |
|
||||
| Multi-profile support | #28 | Profile management UI: create, delete, switch, configure agent profiles. | Medium |
|
||||
| Mobile responsive UI | #21 | Hamburger menu, slide-out sidebar drawer, touch-friendly controls. Already planned in Sprint 7.3. | Medium-High |
|
||||
| Feature | Issue | Shipped | Sprint |
|
||||
|---------|-------|---------|--------|
|
||||
| Workspace tree view | #22 | Done | Sprint 18 |
|
||||
| Docker container + GHCR images | #7 | Done | Sprint 21 + v0.28.1 CI |
|
||||
| Authentication | #23 | Done | Sprint 19 |
|
||||
| Send key / personalization | #26 | Done | Sprint 17 |
|
||||
| Multi-profile support | #28 | Done | Sprint 22 |
|
||||
| Mobile responsive UI | #21 | Done | Sprint 21 |
|
||||
| Profile creation in Docker | #44 | Done | v0.27 |
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Hermes Web UI -- Forward Sprint Plan
|
||||
|
||||
> Current state: v0.27 | 426 tests | Daily driver ready
|
||||
> Current state: v0.28.1 | 426 tests | Daily driver ready
|
||||
> This document plans the path from here to two targets:
|
||||
>
|
||||
> Target A: 1:1 feature parity with the Hermes CLI (everything you can do from the
|
||||
@@ -663,5 +663,5 @@ and switchToProfile() didn't refresh workspaces or sessions.
|
||||
---
|
||||
|
||||
*Last updated: April 3, 2026*
|
||||
*Current version: v0.27 | 426 tests*
|
||||
*Current version: v0.28.1 | 426 tests*
|
||||
*Next sprint: Sprint 24 (Desktop Application)*
|
||||
|
||||
Reference in New Issue
Block a user