From 6dc8f8e9c031ff0a6f66e9fe713f9cce1cf9bf0d Mon Sep 17 00:00:00 2001 From: Teknium Date: Mon, 13 Apr 2026 23:20:02 -0700 Subject: [PATCH] feat(skin): add warm-lightmode skin from PR #4811 Add a second light-mode skin option with warm brown/parchment tones, adapted from ygd58's contribution in PR #4811. Includes completion menu and status bar color keys for full light-terminal support. Co-authored-by: buray <78954051+ygd58@users.noreply.github.com> --- hermes_cli/skin_engine.py | 38 +++++++++++++++++++++++ tests/hermes_cli/test_skin_engine.py | 9 ++++++ website/docs/user-guide/features/skins.md | 1 + 3 files changed, 48 insertions(+) diff --git a/hermes_cli/skin_engine.py b/hermes_cli/skin_engine.py index 1555a7a8..b992ada0 100644 --- a/hermes_cli/skin_engine.py +++ b/hermes_cli/skin_engine.py @@ -94,6 +94,7 @@ BUILT-IN SKINS - ``mono`` — Clean grayscale monochrome - ``slate`` — Cool blue developer-focused theme - ``daylight`` — Light background theme with dark text and blue accents +- ``warm-lightmode`` — Warm brown/gold text for light terminal backgrounds USER SKINS ========== @@ -348,6 +349,43 @@ _BUILTIN_SKINS: Dict[str, Dict[str, Any]] = { }, "tool_prefix": "│", }, + "warm-lightmode": { + "name": "warm-lightmode", + "description": "Warm light mode — dark brown/gold text for light terminal backgrounds", + "colors": { + "banner_border": "#8B6914", + "banner_title": "#5C3D11", + "banner_accent": "#8B4513", + "banner_dim": "#8B7355", + "banner_text": "#2C1810", + "ui_accent": "#8B4513", + "ui_label": "#5C3D11", + "ui_ok": "#2E7D32", + "ui_error": "#C62828", + "ui_warn": "#E65100", + "prompt": "#2C1810", + "input_rule": "#8B6914", + "response_border": "#8B6914", + "session_label": "#5C3D11", + "session_border": "#A0845C", + "status_bar_bg": "#F5F0E8", + "voice_status_bg": "#F5F0E8", + "completion_menu_bg": "#F5EFE0", + "completion_menu_current_bg": "#E8DCC8", + "completion_menu_meta_bg": "#F0E8D8", + "completion_menu_meta_current_bg": "#DFCFB0", + }, + "spinner": {}, + "branding": { + "agent_name": "Hermes Agent", + "welcome": "Welcome to Hermes Agent! Type your message or /help for commands.", + "goodbye": "Goodbye! \u2695", + "response_label": " \u2695 Hermes ", + "prompt_symbol": "\u276f ", + "help_header": "(^_^)? Available Commands", + }, + "tool_prefix": "\u250a", + }, "poseidon": { "name": "poseidon", "description": "Ocean-god theme — deep blue and seafoam", diff --git a/tests/hermes_cli/test_skin_engine.py b/tests/hermes_cli/test_skin_engine.py index 2a320d8d..aadcde3a 100644 --- a/tests/hermes_cli/test_skin_engine.py +++ b/tests/hermes_cli/test_skin_engine.py @@ -92,6 +92,14 @@ class TestBuiltinSkins: assert skin.get_color("completion_menu_meta_bg") == "#EEF2FF" assert skin.get_color("completion_menu_meta_current_bg") == "#BFDBFE" + def test_warm_lightmode_skin_loads(self): + from hermes_cli.skin_engine import load_skin + + skin = load_skin("warm-lightmode") + assert skin.name == "warm-lightmode" + assert skin.get_color("banner_text") == "#2C1810" + assert skin.get_color("completion_menu_bg") == "#F5EFE0" + def test_unknown_skin_falls_back_to_default(self): from hermes_cli.skin_engine import load_skin skin = load_skin("nonexistent_skin_xyz") @@ -129,6 +137,7 @@ class TestSkinManagement: assert "mono" in names assert "slate" in names assert "daylight" in names + assert "warm-lightmode" in names for s in skins: assert "source" in s assert s["source"] == "builtin" diff --git a/website/docs/user-guide/features/skins.md b/website/docs/user-guide/features/skins.md index 6f11ae3c..793040c8 100644 --- a/website/docs/user-guide/features/skins.md +++ b/website/docs/user-guide/features/skins.md @@ -37,6 +37,7 @@ display: | `mono` | Monochrome — clean grayscale | `Hermes Agent` | All grays — no color. Borders are `#555555`, text is `#c9d1d9`. Ideal for minimal terminal setups or screen recordings. | | `slate` | Cool blue — developer-focused | `Hermes Agent` | Royal blue borders (`#4169e1`), soft blue text. Calm and professional. No custom spinner — uses default faces. | | `daylight` | Light theme for bright terminals with dark text and cool blue accents | `Hermes Agent` | Designed for white or bright terminals. Dark slate text with blue borders, pale status surfaces, and a light completion menu that stays readable in light terminal profiles. | +| `warm-lightmode` | Warm brown/gold text for light terminal backgrounds | `Hermes Agent` | Warm parchment tones for light terminals. Dark brown text with saddle-brown accents, cream-colored status surfaces. An earthy alternative to the cooler daylight theme. | | `poseidon` | Ocean-god theme — deep blue and seafoam | `Poseidon Agent` | Deep blue to seafoam gradient. Ocean-themed spinners ("charting currents", "sounding the depth"). Trident ASCII art banner. | | `sisyphus` | Sisyphean theme — austere grayscale with persistence | `Sisyphus Agent` | Light grays with stark contrast. Boulder-themed spinners ("pushing uphill", "resetting the boulder", "enduring the loop"). Boulder-and-hill ASCII art banner. | | `charizard` | Volcanic theme — burnt orange and ember | `Charizard Agent` | Warm burnt orange to ember gradient. Fire-themed spinners ("banking into the draft", "measuring burn"). Dragon-silhouette ASCII art banner. |