diff --git a/CHANGELOG.md b/CHANGELOG.md index a9941c8..25609b9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,18 @@ --- +## [v0.45.0] — 2026-04-10 + +### Features +- **Custom endpoint fields in new profile form** (PR #233, fixes #170): The New Profile form now accepts optional Base URL and API key fields. When provided, both are written into the new profile's `config.yaml` under the `model` section, enabling local-endpoint setups (Ollama, LMStudio, etc.) to be configured in one step without editing YAML manually. The write is a no-op when both fields are left blank, so existing profile creation behavior is unchanged. + - `api/profiles.py` — `_write_endpoint_to_config()` merges `base_url`/`api_key` into `config.yaml` using `yaml.safe_load` + `yaml.dump`, preserving any existing keys + - `api/routes.py` — accepts `base_url` and `api_key` from POST body; validates that `base_url`, if provided, starts with `http://` or `https://` (returns 400 for invalid schemes) + - `static/index.html` — two new inputs added to the New Profile form: Base URL (with `http://localhost:11434` placeholder) and API key (password type) + - `static/panels.js` — `submitProfileCreate()` reads both fields, validates URL format client-side before sending, and includes them in the create payload; `toggleProfileForm()` clears them on cancel + - 9 tests in `tests/test_sprint31.py` covering: config write (base_url, api_key, both, merge, no-op), route acceptance, profile path in response, and invalid-scheme rejection + +**604 tests (up from 595)** + ## [v0.44.1] — 2026-04-10 - **Unskip 16 approval tests** (PR #231): `test_approval_unblock.py` was importing `has_pending` and `pop_pending` from `tools.approval`, which the agent module had removed. The import failure tripped the `APPROVAL_AVAILABLE` guard and skipped all 16 tests in the file. Neither symbol was used in any test body. Removing the stale imports restores **595/595 passing, 0 skipped**. diff --git a/README.md b/README.md index bb2d51e..a6be4e0 100644 --- a/README.md +++ b/README.md @@ -358,6 +358,7 @@ across 23 test files. - Gateway status dots (green = running), model info, skill count per profile - Profiles management panel -- create, switch, and delete profiles from the sidebar - Clone config from active profile on create +- Optional custom endpoint fields on create -- Base URL and API key written into the profile's `config.yaml` at creation time, so Ollama, LMStudio, and other local endpoints can be configured without editing files manually - Seamless switching -- no server restart; reloads config, skills, memory, cron, models - Per-session profile tracking (records which profile was active at creation) diff --git a/ROADMAP.md b/ROADMAP.md index d0b321d..2adee95 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -3,7 +3,7 @@ > 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: v0.44.0 (April 10, 2026) — 595 tests, 579 passing +> Last updated: v0.45.0 (April 10, 2026) — 604 tests, 604 passing > Tests: 499 total (499 passing, 0 failures) > Source: / @@ -41,6 +41,7 @@ | Sprint 22 | Multi-profile support | Profile picker, management panel, seamless switching, per-session tracking (#28) | 415 | | Sprint 23 | Agentic transparency | Token/cost display, subagent cards, skill picker in cron, skill linked files, workspace tree persistence, timestamp fixes | 424 | | v0.44.0 patch | Fix batch: approval card, login CSP, update diagnostics, Lucide icons | PRs #221 #225 #226 #227 #228 | 579 | +| v0.45.0 | Custom endpoint in new profile form | Base URL + API key fields; server-side URL validation; config.yaml merge; 9 new tests (PR #233, fixes #170) | 604 | | v0.32 | Auto-compaction handling | Compression detection, /compact command, real context window indicator | 424 | | v0.33 | /insights sync | Opt-in state.db sync so `hermes /insights` includes WebUI sessions | 424 | | v0.34 | Sprint 26 — Pluggable themes | Dark, Light, Slate, Solarized, Monokai, Nord; settings unsaved-changes guard; /theme command | 433 | diff --git a/SPRINTS.md b/SPRINTS.md index 0329475..e2d115f 100644 --- a/SPRINTS.md +++ b/SPRINTS.md @@ -1163,8 +1163,8 @@ New test cases in `tests/test_sprint26.py`: --- -*Last updated: April 8, 2026* -*Current version: v0.39.0 | 499 tests* +*Last updated: April 10, 2026* +*Current version: v0.45.0 | 604 tests* *Next sprint: Sprint 24 (Web Polish + Bug Fix Pass)* *Horizon sprint: Sprint 25 (macOS Desktop Application)* *Docs sweep policy: update markdown proactively during PR reviews and after significant releases* diff --git a/TESTING.md b/TESTING.md index f044d12..59c4855 100644 --- a/TESTING.md +++ b/TESTING.md @@ -8,7 +8,7 @@ > Prerequisites: SSH tunnel is active on port 8786. Open http://localhost:8786 in browser. > Server health check: curl http://127.0.0.1:8786/health should return {"status":"ok"}. > -> Automated tests: 595 total (595 passing, 0 skipped, 0 known failures) +> Automated tests: 604 total (604 passing, 0 skipped, 0 known failures) > Run: `pytest tests/ -v --timeout=60` --- diff --git a/static/index.html b/static/index.html index fd0d97e..233fb7b 100644 --- a/static/index.html +++ b/static/index.html @@ -14,7 +14,7 @@