From 178251a5c0033c6ad8de0e9f6698bf829a6a2f10 Mon Sep 17 00:00:00 2001 From: Hermes Agent Date: Wed, 15 Apr 2026 07:52:23 +0000 Subject: [PATCH] chore: bump version to v0.50.47, update CHANGELOG --- CHANGELOG.md | 51 +++++++++++++++++++++++++++++++++++++++++++++++ static/index.html | 2 +- 2 files changed, 52 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 903af9b..8c41f54 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,56 @@ # Hermes Web UI -- Changelog +## [v0.50.47] fix/feat: batch fixes — root workspace, custom providers, cron cache, system theme + +Synthesized from PRs #506, #507, #508, #509, #510, #514, #515, #519, #521. + +### Fixes + +**Allow /root as a workspace path** (PRs #510, #521 by @ccqqlo) +Removes `/root` from `_BLOCKED_SYSTEM_ROOTS` in `api/workspace.py`, so +deployments running as root (Docker, VPS) can set `/root` as their workspace +without a "system directory" rejection. + +**Guard against split on missing [Attached files:]** (PR #521 by @ccqqlo) +`base_text` extraction in `api/streaming.py` now guards: `msg_text.split(...)[0] +if ... in msg_text else msg_text`. Previously split on the empty case returned +an empty string, causing attachment-matching to silently fail on messages with +no attachments. + +**custom_providers models visible regardless of active provider** (#515, #519 by @shruggr, @cloudyun888) +`get_available_models()` in `api/config.py` no longer discards the 'custom' +provider from `detected_providers` when the user has `custom_providers` entries +in `config.yaml`. Previously, switching active_provider away from 'custom' +hid all custom model definitions from the picker. + +**Cron skill picker cache invalidated on form open and skill save** (PRs #507, #508 by @armorbreak001) +`toggleCronForm()` now unconditionally nulls `_cronSkillsCache` before fetching, +so skills created in the same session appear immediately. `submitSkillSave()` also +nulls `_cronSkillsCache` after a successful write, mirroring the existing +`_skillsData = null` pattern. Fixes #502. + +### Features + +**System (auto) theme following OS prefers-color-scheme** (#504 / PRs #506, #509, #514 by @armorbreak001, @cloudyun888) +New "System (auto)" option in the theme picker follows the OS dark/light preference +via `window.matchMedia`. Changes: +- `static/boot.js`: `_applyTheme(name)` helper resolves 'system' via matchMedia, + sets `data-theme`, and registers a MQ change listener for live OS tracking. + `loadSettings()` calls `_applyTheme()` instead of direct assignment. +- `static/index.html`: flicker-prevention script resolves 'system' before first + paint. Adds "System (auto)" as first theme option. onchange calls `_applyTheme()`. +- `static/commands.js`: adds 'system' to valid `/theme` names. +- `static/panels.js`: `_settingsThemeOnOpen` reads from localStorage (preserves + 'system' string). `_revertSettingsPreview` calls `_applyTheme()`. +- `static/i18n.js`: cmd_theme description lists 'system' first in all 5 locales. + +### Tests + +22 new tests in `tests/test_batch_fixes.py`. + +Total tests: 1268 (was 1246) + + ## [v0.50.46] feat: clarify dialog flow and refresh recovery (#520) Adds a full clarify dialog UX for interactive agent questions — modeled after diff --git a/static/index.html b/static/index.html index 2ada45b..0ba9065 100644 --- a/static/index.html +++ b/static/index.html @@ -552,7 +552,7 @@
System
Instance version and access controls.
- v0.50.46 + v0.50.47