From 35cf332c9a5631e381b29680943265cbd683a77c Mon Sep 17 00:00:00 2001 From: dobby-d-elf Date: Sat, 9 May 2026 13:20:01 -0600 Subject: [PATCH 01/15] feat: add LM Studio provider support with live model discovery - api/config.py: resolve merge conflict, keep both _custom_slug_rest_looks_like_host_port and new _get_provider_base_url helper. Custom providers now return their configured base_url in resolve_model_provider(). Add 'Configured' badge for explicitly configured providers in the models dropdown. Detect LM Studio via LM_API_KEY+LM_BASE_URL env vars. Fetch live loaded models from LM Studio with fallback to direct HTTP requests. - api/providers.py: fetch live LM Studio model list via hermes_cli for the providers card. - static/style.css: add purple 'Configured' badge style. --- api/config.py | 101 ++++++++++++++++++++++++++++++++++++++++++++++- api/providers.py | 12 ++++++ static/style.css | 1 + 3 files changed, 113 insertions(+), 1 deletion(-) diff --git a/api/config.py b/api/config.py index d3df1cef..3ce7e9d8 100644 --- a/api/config.py +++ b/api/config.py @@ -1468,6 +1468,11 @@ def _custom_slug_rest_looks_like_host_port(rest: str) -> bool: return False +def _get_provider_base_url(provider_id): + """Look up the configured base_url for a provider (e.g. lmstudio).""" + prov_cfg = cfg.get("providers", {}).get(provider_id, {}) or {} + return (prov_cfg.get("base_url") or "").rstrip("/") or None + def resolve_model_provider(model_id: str) -> tuple: """Resolve model name, provider, and base_url for AIAgent. @@ -1572,7 +1577,7 @@ def resolve_model_provider(model_id: str) -> tuple: and provider_hint not in _PROVIDER_DISPLAY and not provider_hint.startswith("custom:")): provider_hint, bare_model = inner.split(":", 1) - return bare_model, provider_hint, None + return bare_model, provider_hint, _get_provider_base_url(provider_hint) if "/" in model_id: prefix, bare = model_id.split("/", 1) @@ -2511,6 +2516,45 @@ def get_available_models() -> dict: } ) + # Also badge explicitly configured providers (from config.yaml + # providers section) so they appear at the top of the dropdown. + _cfg_providers = cfg.get("providers", {}) or {} + if isinstance(_cfg_providers, dict): + for _cpid, _cpcfg in _cfg_providers.items(): + _canonical_pid = _canonicalise_provider_id(_cpid) + if not _canonical_pid: + continue + # Skip providers already covered by primary/fallback entries + _already_badged = any( + e["provider"] == _canonical_pid for e in configured_entries + ) + if _already_badged: + continue + # Only badge providers that have models in the groups list + _group = next( + (g for g in groups + if (g.get("provider_id") or "").lower() == _canonical_pid.lower()), + None, + ) + if not _group: + continue + # Add all models from this provider as configured entries + for _m in _group.get("models", []): + _mid = (_m.get("id") or "").strip() + _mlabel = (_m.get("label") or _mid).strip() + if not _mid: + continue + # Strip @provider: prefix for the model name lookup + _bare_model = _mid.split(":", 1)[-1] if ":" in _mid else _mid + configured_entries.append( + { + "provider": _canonical_pid, + "model": _bare_model, + "role": "configured", + "label": "Configured", + } + ) + option_ids = [m.get("id", "") for g in groups for m in g.get("models", []) if m.get("id")] option_lookup = {str(opt_id): str(opt_id) for opt_id in option_ids} option_provider_lookup = { @@ -2774,6 +2818,9 @@ def get_available_models() -> dict: detected_providers.add("opencode-zen") if all_env.get("OPENCODE_GO_API_KEY"): detected_providers.add("opencode-go") + # LM Studio: detect via LM_API_KEY + LM_BASE_URL in ~/.hermes/.env + if all_env.get("LM_API_KEY") and all_env.get("LM_BASE_URL"): + detected_providers.add("lmstudio") # Also detect providers explicitly listed in config.yaml providers section. # A user may configure a provider key via config.yaml providers..api_key @@ -3360,6 +3407,58 @@ def get_available_models() -> dict: if extras: group_entry["extra_models"] = extras groups.append(group_entry) + elif pid == "lmstudio": + # LM Studio is a local server — fetch live loaded models via + # the OpenAI-compatible /v1/models endpoint (#WebUI). + raw_models = [] + try: + from hermes_cli.models import provider_model_ids as _provider_model_ids + + lm_ids = _provider_model_ids("lmstudio") or [] + if not lm_ids: + # Fallback: fetch directly using config.yaml providers.lmstudio.base_url + # when env vars (LM_BASE_URL) aren't yet loaded into os.environ. + # This fixes the race where get_available_models() runs before + # the profile's .env has been injected into the process environment. + lm_cfg = cfg.get("providers", {}).get("lmstudio", {}) + if isinstance(lm_cfg, dict): + lm_base_url = str(lm_cfg.get("base_url") or "").strip().rstrip("/") + lm_api_key = str(lm_cfg.get("api_key") or "").strip() + if lm_base_url: + headers = {"User-Agent": "OpenAI/Python 1.0"} + if lm_api_key: + headers["Authorization"] = f"Bearer {lm_api_key}" + endpoint = (lm_base_url + "/models").rstrip("/") + try: + import urllib.request as _urlreq + + req = _urlreq.Request(endpoint, method="GET", headers=headers) + with _urlreq.urlopen(req, timeout=5) as resp: + lm_data = json.loads(resp.read().decode()) + for m in (lm_data.get("data") or []): + if isinstance(m, dict): + mid = str(m.get("id") or "").strip() + if mid and {"id": mid, "label": mid} not in raw_models: + raw_models.append({"id": mid, "label": mid}) + except Exception: + pass # fall through to hermes_cli below + + if lm_ids: + raw_models = [ + {"id": mid, "label": mid} for mid in lm_ids + ] + except Exception: + logger.warning("Failed to load LM Studio models from hermes_cli") + + if raw_models: + models = _apply_provider_prefix(raw_models, pid, active_provider) + groups.append( + { + "provider": provider_name, + "provider_id": pid, + "models": models, + } + ) elif pid in _PROVIDER_MODELS or pid in cfg.get("providers", {}): provider_cfg = cfg.get("providers", {}).get(pid, {}) raw_models = [] diff --git a/api/providers.py b/api/providers.py index 495325f8..4e82c59b 100644 --- a/api/providers.py +++ b/api/providers.py @@ -874,6 +874,18 @@ def get_providers() -> dict[str, Any]: models_total = len(live_ids) except Exception: logger.debug("Failed to load Nous Portal models from hermes_cli") + # LM Studio: fetch live locally-loaded models so the providers card + # matches what's actually available on the user's server (#WebUI). + if pid == "lmstudio": + try: + from hermes_cli.models import provider_model_ids as _pmi + + lm_live = _pmi("lmstudio") or [] + if lm_live: + models = [{"id": mid, "label": mid} for mid in lm_live] + models_total = len(models) + except Exception: + logger.debug("Failed to load LM Studio models from hermes_cli") # Also include models from config.yaml providers section if isinstance(providers_cfg, dict): provider_cfg = providers_cfg.get(pid, {}) diff --git a/static/style.css b/static/style.css index d5f4a2f4..c1191a94 100644 --- a/static/style.css +++ b/static/style.css @@ -1550,6 +1550,7 @@ .model-opt-badge{display:inline-flex;align-items:center;justify-content:center;padding:2px 7px;border-radius:999px;font-size:10px;font-weight:700;letter-spacing:.02em;text-transform:uppercase;border:1px solid transparent;} .model-opt-badge--primary{background:rgba(50,184,198,.16);border-color:rgba(50,184,198,.32);color:#8fe7ef;} .model-opt-badge--fallback{background:rgba(255,184,77,.14);border-color:rgba(255,184,77,.28);color:#ffd18a;} +.model-opt-badge--configured{background:rgba(130,130,160,.14);border-color:rgba(130,130,160,.28);color:#c4b5fd;} .model-opt-id{display:block;font-size:10px;color:var(--muted);line-height:1.3;opacity:.72;word-break:break-word;} .model-opt-provider{display:inline-flex;align-items:center;padding:1px 6px;border-radius:4px;font-size:9px;font-weight:600;letter-spacing:.03em;color:var(--muted);background:rgba(255,255,255,.05);border:1px solid var(--border2);margin-left:auto;white-space:nowrap;flex-shrink:0;} .model-custom-sep{padding-top:4px;border-top:1px solid var(--border);margin-top:4px;} From a300d9a323dbe8e6053be386abe7af83c7327a55 Mon Sep 17 00:00:00 2001 From: dobby-d-elf Date: Sun, 10 May 2026 08:07:59 -0600 Subject: [PATCH 02/15] Drop configured provider model badges --- api/config.py | 39 --------------------------------------- static/style.css | 1 - 2 files changed, 40 deletions(-) diff --git a/api/config.py b/api/config.py index 3ce7e9d8..9f009fe9 100644 --- a/api/config.py +++ b/api/config.py @@ -2516,45 +2516,6 @@ def get_available_models() -> dict: } ) - # Also badge explicitly configured providers (from config.yaml - # providers section) so they appear at the top of the dropdown. - _cfg_providers = cfg.get("providers", {}) or {} - if isinstance(_cfg_providers, dict): - for _cpid, _cpcfg in _cfg_providers.items(): - _canonical_pid = _canonicalise_provider_id(_cpid) - if not _canonical_pid: - continue - # Skip providers already covered by primary/fallback entries - _already_badged = any( - e["provider"] == _canonical_pid for e in configured_entries - ) - if _already_badged: - continue - # Only badge providers that have models in the groups list - _group = next( - (g for g in groups - if (g.get("provider_id") or "").lower() == _canonical_pid.lower()), - None, - ) - if not _group: - continue - # Add all models from this provider as configured entries - for _m in _group.get("models", []): - _mid = (_m.get("id") or "").strip() - _mlabel = (_m.get("label") or _mid).strip() - if not _mid: - continue - # Strip @provider: prefix for the model name lookup - _bare_model = _mid.split(":", 1)[-1] if ":" in _mid else _mid - configured_entries.append( - { - "provider": _canonical_pid, - "model": _bare_model, - "role": "configured", - "label": "Configured", - } - ) - option_ids = [m.get("id", "") for g in groups for m in g.get("models", []) if m.get("id")] option_lookup = {str(opt_id): str(opt_id) for opt_id in option_ids} option_provider_lookup = { diff --git a/static/style.css b/static/style.css index c1191a94..d5f4a2f4 100644 --- a/static/style.css +++ b/static/style.css @@ -1550,7 +1550,6 @@ .model-opt-badge{display:inline-flex;align-items:center;justify-content:center;padding:2px 7px;border-radius:999px;font-size:10px;font-weight:700;letter-spacing:.02em;text-transform:uppercase;border:1px solid transparent;} .model-opt-badge--primary{background:rgba(50,184,198,.16);border-color:rgba(50,184,198,.32);color:#8fe7ef;} .model-opt-badge--fallback{background:rgba(255,184,77,.14);border-color:rgba(255,184,77,.28);color:#ffd18a;} -.model-opt-badge--configured{background:rgba(130,130,160,.14);border-color:rgba(130,130,160,.28);color:#c4b5fd;} .model-opt-id{display:block;font-size:10px;color:var(--muted);line-height:1.3;opacity:.72;word-break:break-word;} .model-opt-provider{display:inline-flex;align-items:center;padding:1px 6px;border-radius:4px;font-size:9px;font-weight:600;letter-spacing:.03em;color:var(--muted);background:rgba(255,255,255,.05);border:1px solid var(--border2);margin-left:auto;white-space:nowrap;flex-shrink:0;} .model-custom-sep{padding-top:4px;border-top:1px solid var(--border);margin-top:4px;} From 3fd20599e8ee60150f0388655894905a066b0d7e Mon Sep 17 00:00:00 2001 From: hinotoi-agent Date: Mon, 11 May 2026 10:46:17 +0800 Subject: [PATCH 03/15] fix: validate workspaces on session import --- api/routes.py | 5 +- ...est_session_import_workspace_validation.py | 105 ++++++++++++++++++ 2 files changed, 109 insertions(+), 1 deletion(-) create mode 100644 tests/test_session_import_workspace_validation.py diff --git a/api/routes.py b/api/routes.py index bd3486bf..9a6cc11f 100644 --- a/api/routes.py +++ b/api/routes.py @@ -8832,7 +8832,10 @@ def _handle_session_import(handler, body): if not isinstance(messages, list): return bad(handler, 'JSON must contain a "messages" array') title = body.get("title", "Imported session") - workspace = body.get("workspace", str(DEFAULT_WORKSPACE)) + try: + workspace = str(resolve_trusted_workspace(body.get("workspace", str(DEFAULT_WORKSPACE)))) + except (TypeError, ValueError) as e: + return bad(handler, str(e)) model = body.get("model", DEFAULT_MODEL) s = Session( title=title, diff --git a/tests/test_session_import_workspace_validation.py b/tests/test_session_import_workspace_validation.py new file mode 100644 index 00000000..318fcbdb --- /dev/null +++ b/tests/test_session_import_workspace_validation.py @@ -0,0 +1,105 @@ +import io +import json +from pathlib import Path +from urllib.parse import urlparse + +from api.config import DEFAULT_WORKSPACE, SESSION_DIR +from api.models import get_session +from api.routes import _handle_file_read, _handle_session_import +from api.workspace import resolve_trusted_workspace + + +class _DummyHandler: + def __init__(self): + self.status = None + self.response_headers = [] + self.headers = {} + self.wfile = io.BytesIO() + self.command = "GET" + self.path = "/" + + def send_response(self, status): + self.status = status + + def send_header(self, key, value): + self.response_headers.append((key, value)) + + def end_headers(self): + pass + + def json_body(self): + return json.loads(self.wfile.getvalue().decode("utf-8")) + + +def test_session_import_rejects_blocked_root_workspace(): + handler = _DummyHandler() + + _handle_session_import( + handler, + { + "title": "blocked import", + "workspace": "/", + "model": "test", + "messages": [], + }, + ) + + assert handler.status == 400 + assert "system directory" in handler.json_body()["error"] + + +def test_session_import_rejects_non_path_workspace_value(): + handler = _DummyHandler() + + _handle_session_import( + handler, + { + "title": "invalid import", + "workspace": {"not": "a path"}, + "model": "test", + "messages": [], + }, + ) + + assert handler.status == 400 + assert handler.json_body()["error"] + + +def test_imported_session_file_read_stays_under_validated_workspace(): + SESSION_DIR.mkdir(parents=True, exist_ok=True) + workspace = Path(DEFAULT_WORKSPACE) + workspace.mkdir(parents=True, exist_ok=True) + (workspace / "allowed.txt").write_text("allowed", encoding="utf-8") + + import_handler = _DummyHandler() + _handle_session_import( + import_handler, + { + "title": "valid import", + "workspace": str(workspace), + "model": "test", + "messages": [], + }, + ) + + assert import_handler.status == 200 + sid = import_handler.json_body()["session"]["session_id"] + assert get_session(sid).workspace == str(resolve_trusted_workspace(workspace)) + + read_handler = _DummyHandler() + _handle_file_read(read_handler, urlparse(f"/api/file?session_id={sid}&path=allowed.txt")) + + assert read_handler.status == 200 + assert read_handler.json_body()["content"] == "allowed" + + +def test_resolver_would_reject_imported_root_before_file_read(): + # Regression guard for the original issue shape: '/' must be rejected at + # import time rather than becoming a session workspace that makes + # Path('/')-relative reads like etc/hosts reachable through /api/file. + try: + resolve_trusted_workspace(Path("/")) + except ValueError as exc: + assert "system directory" in str(exc) + else: # pragma: no cover - this would weaken the security invariant + raise AssertionError("root workspace unexpectedly accepted") From 7aa1a5f42c6df6576fda59b1945a4e61514f8ffb Mon Sep 17 00:00:00 2001 From: Frank Song Date: Mon, 11 May 2026 11:47:26 +0800 Subject: [PATCH 04/15] docs: add first-run onboarding guide --- .env.example | 2 +- README.md | 9 ++- docs/onboarding.md | 181 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 188 insertions(+), 4 deletions(-) create mode 100644 docs/onboarding.md diff --git a/.env.example b/.env.example index 19dff7dc..768eca50 100644 --- a/.env.example +++ b/.env.example @@ -15,7 +15,7 @@ # Port to listen on (default: 8787) # HERMES_WEBUI_PORT=8787 -# Where to store sessions, workspaces, and other state (default: ~/.hermes/webui-mvp) +# Where to store sessions, workspaces, and other state (default: ~/.hermes/webui) # HERMES_WEBUI_STATE_DIR=~/.hermes/webui # Default workspace directory shown on first launch diff --git a/README.md b/README.md index 951ec728..84864971 100644 --- a/README.md +++ b/README.md @@ -131,8 +131,10 @@ The bootstrap will: > Native Windows is not supported for this bootstrap yet. Use Linux, macOS, or WSL2. > For Windows / WSL auto-start at login, see [`docs/wsl-autostart.md`](docs/wsl-autostart.md). +> A community-maintained native Windows guide is tracked in [#1952](https://github.com/nesquena/hermes-webui/issues/1952). If provider setup is still incomplete after install, the onboarding wizard will point you to finish it with `hermes model` instead of trying to replicate the full CLI setup in-browser. +For a step-by-step walkthrough of the wizard, provider choices, local model server Base URLs, and safe re-runs, see [`docs/onboarding.md`](docs/onboarding.md). --- @@ -231,7 +233,7 @@ For the deep dive on each of these, see [`docs/docker.md`](docs/docker.md). |---|---| | Hermes agent dir | `HERMES_WEBUI_AGENT_DIR` env, then `~/.hermes/hermes-agent`, then sibling `../hermes-agent` | | Python executable | Agent venv first, then `.venv` in this repo, then system `python3` | -| State directory | `HERMES_WEBUI_STATE_DIR` env, then `~/.hermes/webui-mvp` | +| State directory | `HERMES_WEBUI_STATE_DIR` env, then `~/.hermes/webui` | | Default workspace | `HERMES_WEBUI_DEFAULT_WORKSPACE` env, then `~/workspace`, then state dir | | Port | `HERMES_WEBUI_PORT` env or first argument, default `8787` | @@ -263,7 +265,7 @@ Full list of environment variables: | `HERMES_WEBUI_PYTHON` | auto-discovered | Python executable | | `HERMES_WEBUI_HOST` | `127.0.0.1` | Bind address (`0.0.0.0` for all IPv4, `::` for all IPv6, `::1` for IPv6 loopback) | | `HERMES_WEBUI_PORT` | `8787` | Port | -| `HERMES_WEBUI_STATE_DIR` | `~/.hermes/webui-mvp` | Where sessions and state are stored | +| `HERMES_WEBUI_STATE_DIR` | `~/.hermes/webui` | Where sessions and state are stored | | `HERMES_WEBUI_DEFAULT_WORKSPACE` | `~/workspace` | Default workspace | | `HERMES_WEBUI_DEFAULT_MODEL` | `openai/gpt-5.4-mini` | Default model | | `HERMES_WEBUI_PASSWORD` | *(unset)* | Set to enable password authentication | @@ -521,7 +523,7 @@ 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 +State lives outside the repo at `~/.hermes/webui/` by default (sessions, workspaces, settings, projects, last_workspace). Override with `HERMES_WEBUI_STATE_DIR`. --- @@ -535,6 +537,7 @@ State lives outside the repo at `~/.hermes/webui-mvp/` by default - `CHANGELOG.md` -- release notes per sprint - `SPRINTS.md` -- forward sprint plan with CLI + Claude parity targets - `THEMES.md` -- theme system documentation, custom theme guide +- `docs/onboarding.md` -- first-run wizard, provider setup, local model server Base URLs, and safe re-runs - `docs/troubleshooting.md` -- diagnostic flows for common failures (e.g. "AIAgent not available") ## Contributors diff --git a/docs/onboarding.md b/docs/onboarding.md new file mode 100644 index 00000000..f6409f96 --- /dev/null +++ b/docs/onboarding.md @@ -0,0 +1,181 @@ +# First-run onboarding guide + +This guide explains what happens the first time Hermes WebUI starts, which +setup path to choose, and how to recover when the wizard cannot finish. + +The short version: run the bootstrap, open the WebUI, choose a provider, choose +a workspace, optionally set a password, then start a chat. If you are using a +local model server from Docker, pay special attention to the Base URL section +below. + +## Before you start + +Hermes WebUI is only the browser interface. The actual agent runtime, memory, +skills, config, cron jobs, and provider credentials belong to Hermes Agent. + +The bootstrap supports Linux, macOS, and WSL2. Native Windows is not supported +by the bootstrap yet. A community native Windows setup is being tracked in +[#1952](https://github.com/nesquena/hermes-webui/issues/1952), including: + +- [Native Windows guide](https://github.com/markwang2658/hermes-windows-native-guide) +- [Native Windows setup scripts](https://github.com/markwang2658/hermes-windows-native) + +For Windows users who want the supported path today, use WSL2 and see +[Windows / WSL auto-start](wsl-autostart.md). + +## Install path choices + +| Path | Use it when | Notes | +|---|---|---| +| Local bootstrap | You run WebUI directly on Linux, macOS, or WSL2 | Best for a personal server, Mac mini, VPS, or homelab host. | +| Docker single-container | You want the simplest container setup | Recommended first Docker path. WebUI runs the agent in-process. | +| Docker two-container | You already run the agent gateway separately | More isolated, but tools launched from WebUI run in the WebUI container. | +| Docker three-container | You want agent gateway plus dashboard plus WebUI | Same caveats as two-container, plus the dashboard service. | +| Native Windows community path | You are intentionally testing unsupported native Windows | Community-maintained for now, not the official bootstrap path. | + +If a Docker install gets confusing, start again with the single-container setup. +It avoids most UID/GID, source-volume, and tool-location surprises. See +[Docker setup guide](docker.md) for the full container reference. + +## Re-running onboarding safely + +Do not delete `~/.hermes` just to see the wizard again. That directory can hold +your real Hermes config, credentials, memory, skills, profiles, sessions, and +cron state. + +For a clean local trial, use an isolated Hermes home and WebUI state directory: + +```bash +mkdir -p ~/hermes-onboarding-test +HERMES_HOME=~/hermes-onboarding-test/.hermes \ +HERMES_WEBUI_STATE_DIR=~/hermes-onboarding-test/webui \ +HERMES_WEBUI_PORT=8789 \ +python3 bootstrap.py +``` + +Then open `http://127.0.0.1:8789`. + +If your repo has a `.env` file, remember that the bootstrap loads it. Remove or +adjust any `HERMES_HOME`, `HERMES_WEBUI_STATE_DIR`, or `HERMES_WEBUI_PORT` +entries there before using the isolated command above. + +For managed hosting or fully preconfigured images, set +`HERMES_WEBUI_SKIP_ONBOARDING=1` to bypass the wizard. + +## What the wizard checks + +The first screen reports the runtime state WebUI can see: + +- Hermes Agent importability: whether WebUI can import and run `AIAgent`. +- Provider status: whether `config.yaml` and credential state are enough for a + chat request. +- Password status: whether WebUI password protection is enabled. +- Config paths: the active `config.yaml` and `.env` locations for this profile. + +If the agent check fails, use [Troubleshooting](troubleshooting.md), especially +the `AIAgent not available` section. If provider setup is incomplete, continue +through the wizard or run `hermes model` in the same machine environment that +will run WebUI. + +## Choosing a provider + +The setup step groups providers by how much information they usually need. + +| Group | Examples | What you usually enter | +|---|---|---| +| Easy start | OpenRouter, Anthropic, OpenAI | API key and model. | +| Open / self-hosted | Ollama, LM Studio, custom OpenAI-compatible | Base URL, model, optional API key. | +| Specialized | Gemini, DeepSeek, Xiaomi MiMo, Z.AI / GLM, NVIDIA NIM, Mistral, xAI | Provider API key and default model. | + +For API-key providers, the wizard writes the key to the active Hermes `.env` +file and writes the default model/provider to `config.yaml`. + +For local providers, the API key field can be blank when the server is keyless. +Most LM Studio, Ollama, vLLM, llama-server, and TabbyAPI installs run this way. +Use **Test connection** to verify the Base URL and populate the model list +before continuing. + +Advanced provider flows such as Nous Portal and GitHub Copilot are still +terminal-first. OpenAI Codex and Anthropic Claude Code OAuth can be started in +the onboarding flow when your Hermes config selects the corresponding provider. +If the wizard points you back to `hermes model`, use that CLI flow first, then +refresh WebUI. + +## Base URL rules for local model servers + +For self-hosted providers, the Base URL should point to the OpenAI-compatible +API root. Common examples: + +| Server | Typical Base URL | +|---|---| +| LM Studio on the same non-Docker host | `http://127.0.0.1:1234/v1` | +| Ollama on the same non-Docker host | `http://127.0.0.1:11434/v1` | +| LM Studio from Docker Desktop | `http://host.docker.internal:1234/v1` | +| Ollama from Docker Desktop | `http://host.docker.internal:11434/v1` | +| Local server on another LAN machine | `http://:/v1` | + +Inside Docker, `localhost` means the WebUI container itself, not your Mac, +Windows host, or another machine on your LAN. If LM Studio or Ollama is running +outside the container, use `host.docker.internal` on Docker Desktop or the +server's LAN IP address. + +The wizard probes `/models` before saving. A successful probe fills +the model dropdown. A failed probe blocks the setup step and shows an inline +error such as DNS failure, connection refused, timeout, HTTP error, or +unexpected response shape. + +## Workspace step + +The workspace is the filesystem location Hermes should use for new sessions. +It can be a source checkout, a project directory, or a general workspace folder. + +In Docker, the default browsable path is `/workspace`, which maps to the host +directory mounted by the compose file. If the workspace appears empty, check the +Docker UID/GID and mount guidance in [Docker setup guide](docker.md). + +## Password step + +Password protection is optional for localhost-only installs. Enable it if you +expose WebUI outside `127.0.0.1`, behind a reverse proxy, or on a LAN. + +The password is stored through the normal WebUI settings path and hashed +server-side. You can change it later from Settings. + +## What gets written + +The wizard uses the same files and APIs as the normal app: + +- Active Hermes `config.yaml`: provider, default model, and Base URL when + relevant. +- Active Hermes `.env`: provider API keys when you entered one. +- WebUI `settings.json`: onboarding completion, workspace, password state, and + other WebUI preferences. + +State normally lives outside the repository. By default: + +- Hermes Agent state: `~/.hermes` +- WebUI state: `~/.hermes/webui` + +Override these with `HERMES_HOME` and `HERMES_WEBUI_STATE_DIR` when you need an +isolated test install. + +## When to file an issue + +File an issue when the diagnostics point to WebUI rather than local +configuration. Include: + +1. Install path: local bootstrap, Docker single-container, Docker + two-container, Docker three-container, WSL2, or community native Windows. +2. Output from `/health`, or the startup banner if the server never starts. +3. The provider selected in onboarding and the Base URL shape, with secrets + redacted. +4. For Docker provider problems, the result of probing from inside the + container, for example: + +```bash +docker exec hermes-webui sh -c 'curl -sS -w "\nHTTP %{http_code}\n" http://host.docker.internal:1234/v1/models | head -50' +``` + +5. Any inline wizard error text and relevant logs. + +Never paste API keys, OAuth tokens, or full `.env` contents into an issue. From 186453ea0e3cd77e2699525f9e4b0803aceeb40b Mon Sep 17 00:00:00 2001 From: Frank Song Date: Mon, 11 May 2026 12:00:07 +0800 Subject: [PATCH 05/15] Add worktree-backed session creation --- CHANGELOG.md | 2 + api/models.py | 33 +++- api/routes.py | 17 ++ api/worktrees.py | 73 ++++++++ docs/pr-media/1955/after-workspace-menu.png | Bin 0 -> 184605 bytes docs/pr-media/1955/before-workspace-menu.png | Bin 0 -> 180255 bytes static/i18n.js | 40 ++++ static/panels.js | 18 ++ static/sessions.js | 11 +- static/style.css | 15 +- tests/test_issue1955_worktree_sessions.py | 187 +++++++++++++++++++ tests/test_issue1955_worktree_ui_static.py | 44 +++++ 12 files changed, 433 insertions(+), 7 deletions(-) create mode 100644 api/worktrees.py create mode 100644 docs/pr-media/1955/after-workspace-menu.png create mode 100644 docs/pr-media/1955/before-workspace-menu.png create mode 100644 tests/test_issue1955_worktree_sessions.py create mode 100644 tests/test_issue1955_worktree_ui_static.py diff --git a/CHANGELOG.md b/CHANGELOG.md index adde54b6..b5cf6704 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ ## [Unreleased] +- Added worktree-backed conversation creation for development sessions: the workspace menu can now create a new conversation in a Hermes Agent git worktree, persist the worktree path/branch/repo metadata on the session, and show a sidebar worktree indicator without adding automatic cleanup yet (#1955). + ## [v0.51.42] — 2026-05-11 — Release R (5-PR contributor batch — session recovery state.db reconciliation + RFC convention + MEDIA_ALLOWED_ROOTS + Slack cron delivery) ### Added diff --git a/api/models.py b/api/models.py index 62099f05..b15d5531 100644 --- a/api/models.py +++ b/api/models.py @@ -335,6 +335,10 @@ class Session: gateway_routing=None, gateway_routing_history=None, llm_title_generated: bool=False, parent_session_id: str=None, + worktree_path=None, + worktree_branch=None, + worktree_repo_root=None, + worktree_created_at=None, enabled_toolsets=None, composer_draft=None, **kwargs): @@ -370,6 +374,10 @@ class Session: self.gateway_routing_history = gateway_routing_history if isinstance(gateway_routing_history, list) else [] self.llm_title_generated = bool(llm_title_generated) self.parent_session_id = parent_session_id + self.worktree_path = str(Path(worktree_path).expanduser().resolve()) if worktree_path else None + self.worktree_branch = str(worktree_branch) if worktree_branch else None + self.worktree_repo_root = str(Path(worktree_repo_root).expanduser().resolve()) if worktree_repo_root else None + self.worktree_created_at = worktree_created_at self.is_cli_session = bool(kwargs.get('is_cli_session', False)) self.source_tag = kwargs.get('source_tag') self.raw_source = kwargs.get('raw_source') @@ -417,6 +425,7 @@ class Session: 'context_length', 'threshold_tokens', 'last_prompt_tokens', 'gateway_routing', 'gateway_routing_history', 'llm_title_generated', 'parent_session_id', + 'worktree_path', 'worktree_branch', 'worktree_repo_root', 'worktree_created_at', 'is_cli_session', 'source_tag', 'raw_source', 'session_source', 'source_label', 'enabled_toolsets', 'composer_draft', ] @@ -584,6 +593,12 @@ class Session: # Only emit 'parent_session_id' when set (the /branch fork link, #1342). # Sessions without a fork must not leak None — see test_session_lineage_metadata_api. **({'parent_session_id': self.parent_session_id} if self.parent_session_id else {}), + **({ + 'worktree_path': self.worktree_path, + 'worktree_branch': self.worktree_branch, + 'worktree_repo_root': self.worktree_repo_root, + 'worktree_created_at': self.worktree_created_at, + } if self.worktree_path else {}), 'user_message_count': sum( 1 for message in self.messages if _message_role(message) == 'user' ) if isinstance(self.messages, list) else 0, @@ -896,7 +911,7 @@ def get_session(sid, metadata_only=False): return s raise KeyError(sid) -def new_session(workspace=None, model=None, profile=None, model_provider=None, project_id=None): +def new_session(workspace=None, model=None, profile=None, model_provider=None, project_id=None, worktree_info=None): """Create a new in-memory session. The session lives in the SESSIONS dict only — no disk write happens until @@ -911,7 +926,9 @@ def new_session(workspace=None, model=None, profile=None, model_provider=None, p Crash-safety: if the process exits between session creation and first message, the session is lost. Since it had no messages, there is - nothing to lose. + nothing to lose. Worktree-backed sessions are the exception: they are + saved immediately because creating the session also creates real + filesystem state that must remain discoverable after restart. *profile* — when supplied by the caller (e.g. from the request body sent by the active browser tab), it is used directly so that concurrent clients @@ -927,18 +944,26 @@ def new_session(workspace=None, model=None, profile=None, model_provider=None, p except ImportError: profile = None effective_model = model or get_effective_default_model() + wt = worktree_info if isinstance(worktree_info, dict) else None + workspace_path = (wt.get('path') if wt and wt.get('path') else workspace) if wt else workspace s = Session( - workspace=workspace or get_last_workspace(), + workspace=workspace_path or get_last_workspace(), model=effective_model, model_provider=model_provider, profile=profile, project_id=project_id, + worktree_path=wt.get('path') if wt else None, + worktree_branch=wt.get('branch') if wt else None, + worktree_repo_root=wt.get('repo_root') if wt else None, + worktree_created_at=wt.get('created_at') if wt else None, ) with LOCK: SESSIONS[s.session_id] = s SESSIONS.move_to_end(s.session_id) while len(SESSIONS) > SESSIONS_MAX: SESSIONS.popitem(last=False) + if wt: + s.save() return s def _hide_from_default_sidebar(session: dict) -> bool: @@ -1042,6 +1067,7 @@ def all_sessions(diag=None): and s.get('message_count', 0) == 0 and not s.get('active_stream_id') and not s.get('has_pending_user_message') + and not s.get('worktree_path') )] result = [s for s in result if not _hide_from_default_sidebar(s)] # Backfill: sessions created before Sprint 22 have no profile tag. @@ -1077,6 +1103,7 @@ def all_sessions(diag=None): and len(s.messages) == 0 and not s.active_stream_id and not s.pending_user_message + and not getattr(s, 'worktree_path', None) )] result = [s for s in result if not _hide_from_default_sidebar(s)] for s in result: diff --git a/api/routes.py b/api/routes.py index 18354885..b753857a 100644 --- a/api/routes.py +++ b/api/routes.py @@ -3849,6 +3849,22 @@ def handle_post(handler, parsed) -> bool: workspace = str(resolve_trusted_workspace(body.get("workspace"))) if body.get("workspace") else None except ValueError as e: return bad(handler, str(e)) + worktree_info = None + worktree_requested = ( + body.get("worktree") is True + or str(body.get("worktree")).strip().lower() in {"1", "true", "yes", "on"} + ) + if worktree_requested: + try: + from api.worktrees import create_worktree_for_workspace + base_workspace = workspace or str(resolve_trusted_workspace(get_last_workspace())) + worktree_info = create_worktree_for_workspace(base_workspace) + workspace = worktree_info["path"] + except ValueError as e: + return bad(handler, str(e), status=400) + except Exception as e: + logger.exception("failed to create worktree-backed session") + return bad(handler, f"Failed to create worktree: {e}", status=500) model, model_provider = _session_model_state_from_request( body.get("model"), body.get("model_provider"), @@ -3861,6 +3877,7 @@ def handle_post(handler, parsed) -> bool: model_provider=model_provider, profile=body.get("profile") or None, project_id=body.get("project_id") or None, + worktree_info=worktree_info, ) return j(handler, {"session": s.compact() | {"messages": s.messages}}) diff --git a/api/worktrees.py b/api/worktrees.py new file mode 100644 index 00000000..330a4385 --- /dev/null +++ b/api/worktrees.py @@ -0,0 +1,73 @@ +"""Helpers for WebUI-managed Hermes Agent git worktrees.""" + +from __future__ import annotations + +import subprocess +import time +from contextlib import redirect_stderr, redirect_stdout +from io import StringIO +from pathlib import Path + +import logging + +logger = logging.getLogger(__name__) + + +def find_git_repo_root(workspace: str | Path) -> Path: + """Return the enclosing git repo root for *workspace*. + + Use git itself instead of checking ``workspace/.git`` so nested workspaces + and linked git worktrees are both handled correctly. + """ + ws = Path(workspace).expanduser().resolve() + if not ws.is_dir(): + raise ValueError("Workspace path does not exist or is not a directory") + try: + result = subprocess.run( + ["git", "rev-parse", "--show-toplevel"], + cwd=ws, + text=True, + capture_output=True, + timeout=5, + check=False, + ) + except (OSError, subprocess.TimeoutExpired) as exc: + raise ValueError("Workspace is not inside a git repository") from exc + if result.returncode != 0: + raise ValueError("Workspace is not inside a git repository") + root = result.stdout.strip() + if not root: + raise ValueError("Workspace is not inside a git repository") + return Path(root).expanduser().resolve() + + +def _setup_agent_worktree(repo_root: str) -> dict: + try: + import api.config # noqa: F401 # ensure Hermes Agent dir is on sys.path + from cli import _setup_worktree + except Exception as exc: + raise RuntimeError("Hermes Agent worktree helper is unavailable") from exc + output = StringIO() + with redirect_stdout(output), redirect_stderr(output): + info = _setup_worktree(repo_root) + emitted = output.getvalue().strip() + if emitted: + logger.debug("Hermes Agent worktree helper output: %s", emitted) + if not info: + raise RuntimeError("Hermes Agent failed to create a git worktree") + return info + + +def create_worktree_for_workspace(workspace: str | Path) -> dict: + repo_root = find_git_repo_root(workspace) + info = _setup_agent_worktree(str(repo_root)) + path = info.get("path") + branch = info.get("branch") + if not path or not branch: + raise RuntimeError("Hermes Agent returned incomplete worktree metadata") + return { + "path": str(Path(path).expanduser().resolve()), + "branch": str(branch), + "repo_root": str(Path(info.get("repo_root") or repo_root).expanduser().resolve()), + "created_at": time.time(), + } diff --git a/docs/pr-media/1955/after-workspace-menu.png b/docs/pr-media/1955/after-workspace-menu.png new file mode 100644 index 0000000000000000000000000000000000000000..a3db27696ee2c7ab97efb4273dea613c642c82f5 GIT binary patch literal 184605 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

^z7=fpx_R@wbyh9=mFE4w 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

Lg5m2|W#^LMFinhv5%K}Qf6r>K z1b)1fIKU^>2_o?Efnp|=6Bo(*lz~CRiRkZ1IRs=Xyv4&`DTxd@e<~95h^jXNpDbUo z`$^9-(o&sZ1pqHoQ`2jkH~(q^ou+7Uu(8Ke9lCp*Aw0Sz%pA>A;L7^~)SEW*4d7eL zkE1g)W%d?Q0jXhPYa7te2Nr%xCGZcuL__oAPkt;_`cFj@^SYw4Qh`i>jZJ+cyx0&O z@AR|=u#xlUT2TTz;@9H%{D=7FC0f|Or_`t8~ zu_nx<4diI5?WZTAcDg^*89GHq<>hg}J7qL9d;i|_{d*MZ;+=aRBEta+P0wWoo6SOt z55ijG3`BH;9d;BXVuFx&r{T10@ZNzv%&^98er>Q3P;)k>rng(Aa4Ys3|N8n@+S)(< z?@+X~geGgn3_AbzuzsG)ew&)o`DJd!M(r9RCvb2<*0}-F{1JmK|g#{il{aqw7JHT5? zzXW3IeY}wz5I{=}%rD@mi1&B^uv(vY4R6pAuG5{LD|C2SYa72X6hD zFVdt}J=1*Ol}@@q#Uh=~F7FsVp(QYIW75UWf2duQcBq{Vdhu4`4FvL008efa{=|Ov z`|zI5>Vz5^-oBiWJ{qKqD^dsofndo%&;b$c55a^$=n|MnMJz*q0?YUJ>Z!8c?6+h)-rFKqiINK!ed!Jj~0D7=<0ku~xE EKLIfqXaE2J literal 0 HcmV?d00001 diff --git a/docs/pr-media/1955/before-workspace-menu.png b/docs/pr-media/1955/before-workspace-menu.png new file mode 100644 index 0000000000000000000000000000000000000000..3906dce4d3f504dc513faadf52e16ba3094e339a GIT binary patch literal 180255 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�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 + closeWsDropdown(); + try{ + await newSession(false,{worktree:true}); + await renderSessionList(); + const msg=$('msg'); + if(msg)msg.focus(); + showToast(t('workspace_worktree_created')); + }catch(e){ + showToast(t('workspace_worktree_failed')+(e&&e.message?e.message:e),'error'); + } + } + )); + dd.appendChild(document.createElement('div')).className='ws-divider'; dd.appendChild(_renderWorkspaceAction( t('workspace_choose_path'), t('workspace_choose_path_meta'), diff --git a/static/sessions.js b/static/sessions.js index 2251b902..023cf845 100644 --- a/static/sessions.js +++ b/static/sessions.js @@ -340,7 +340,7 @@ function _markPollingCompletionUnreadTransitions(sessions) { } } -async function newSession(flash){ +async function newSession(flash, options={}){ updateQueueBadge(); S.toolCalls=[]; clearLiveToolCards(); @@ -371,6 +371,7 @@ async function newSession(flash){ workspace:inheritWs, profile:S.activeProfile||'default', }; + if(options&&options.worktree) reqBody.worktree=true; if(_activeProject&&_activeProject!==NO_PROJECT_FILTER) reqBody.project_id=_activeProject; const data=await api('/api/session/new',{method:'POST',body:JSON.stringify(reqBody)}); S.session=data.session;S.messages=data.session.messages||[]; @@ -2581,6 +2582,14 @@ function renderSessionListFromCache(){ pinInd.innerHTML=ICONS.pin; titleRow.appendChild(pinInd); } + if(s.worktree_path){ + const wtInd=document.createElement('span'); + wtInd.className='session-worktree-indicator'; + wtInd.innerHTML=li('git-branch',12); + const wtLabel=(typeof t==='function'?t('session_worktree_badge'):'Worktree'); + wtInd.title=`${wtLabel}: ${s.worktree_branch||s.worktree_path}`; + titleRow.appendChild(wtInd); + } // Parent session indicator for forked/branched sessions (#465) if(s.parent_session_id){ const branchInd=document.createElement('span'); diff --git a/static/style.css b/static/style.css index b1ce4985..d1cb9814 100644 --- a/static/style.css +++ b/static/style.css @@ -2641,7 +2641,8 @@ main.main.showing-logs > #mainLogs{display:flex;} .session-pin-indicator svg{width:10px;height:10px;} /* ── Fork lineage indicator (inline, subtle until row focus/hover) ── */ -.session-branch-indicator{ +.session-branch-indicator, +.session-worktree-indicator{ flex-shrink:0; width:12px; height:12px; @@ -2654,14 +2655,22 @@ main.main.showing-logs > #mainLogs{display:flex;} pointer-events:none; transition:opacity .15s ease,color .15s ease; } -.session-branch-indicator svg{width:12px;height:12px;} +.session-branch-indicator svg, +.session-worktree-indicator svg{width:12px;height:12px;} .session-item:hover .session-branch-indicator, +.session-item:hover .session-worktree-indicator, .session-item:focus-within .session-branch-indicator, +.session-item:focus-within .session-worktree-indicator, .session-item.menu-open .session-branch-indicator{ opacity:.85; color:var(--text); } -.session-item.active .session-branch-indicator{color:var(--accent-text);} +.session-item.menu-open .session-worktree-indicator{ + opacity:.85; + color:var(--text); +} +.session-item.active .session-branch-indicator, +.session-item.active .session-worktree-indicator{color:var(--accent-text);} /* ── Cron alert badge ── */ .cron-badge{position:absolute;top:2px;right:2px;background:#e53e3e;color:#fff;font-size:9px;font-weight:700;min-width:14px;height:14px;line-height:14px;text-align:center;border-radius:7px;padding:0 3px;} diff --git a/tests/test_issue1955_worktree_sessions.py b/tests/test_issue1955_worktree_sessions.py new file mode 100644 index 00000000..2c72d2a1 --- /dev/null +++ b/tests/test_issue1955_worktree_sessions.py @@ -0,0 +1,187 @@ +import json +import subprocess +import time +from types import SimpleNamespace + +import pytest + +import api.models as models +from api.models import SESSIONS, Session, new_session + + +@pytest.fixture(autouse=True) +def _isolate_sessions(tmp_path, monkeypatch): + session_dir = tmp_path / "sessions" + session_dir.mkdir() + monkeypatch.setattr(models, "SESSION_DIR", session_dir) + monkeypatch.setattr(models, "SESSION_INDEX_FILE", session_dir / "_index.json") + SESSIONS.clear() + yield session_dir + SESSIONS.clear() + + +def test_worktree_metadata_round_trips_through_session_file(_isolate_sessions): + s = Session( + session_id="worktree001", + workspace=str(_isolate_sessions.parent / "repo" / ".worktrees" / "hermes-1234"), + worktree_path=str(_isolate_sessions.parent / "repo" / ".worktrees" / "hermes-1234"), + worktree_branch="hermes/hermes-1234", + worktree_repo_root=str(_isolate_sessions.parent / "repo"), + worktree_created_at=123.5, + ) + s.save() + + raw = json.loads(s.path.read_text(encoding="utf-8")) + assert raw["worktree_path"].endswith(".worktrees/hermes-1234") + assert raw["worktree_branch"] == "hermes/hermes-1234" + assert raw["worktree_repo_root"].endswith("repo") + assert raw["worktree_created_at"] == 123.5 + + loaded = Session.load("worktree001") + assert loaded.worktree_path == s.worktree_path + assert loaded.worktree_branch == "hermes/hermes-1234" + assert loaded.worktree_repo_root == s.worktree_repo_root + assert loaded.worktree_created_at == 123.5 + assert loaded.compact()["worktree_branch"] == "hermes/hermes-1234" + + +def test_new_session_with_worktree_info_persists_immediately(_isolate_sessions): + repo = _isolate_sessions.parent / "repo" + worktree = repo / ".worktrees" / "hermes-abcd1234" + worktree.mkdir(parents=True) + + s = new_session( + workspace=str(worktree), + worktree_info={ + "path": str(worktree), + "branch": "hermes/hermes-abcd1234", + "repo_root": str(repo), + "created_at": 456.0, + }, + ) + + assert s.path.exists(), ( + "worktree-backed sessions must be persisted at creation time so the " + "real filesystem worktree is not orphaned by a browser/server restart" + ) + assert s.worktree_path == str(worktree.resolve()) + assert s.worktree_branch == "hermes/hermes-abcd1234" + assert s.worktree_repo_root == str(repo.resolve()) + assert s.worktree_created_at == 456.0 + + +def test_empty_worktree_session_remains_visible_in_sidebar(_isolate_sessions): + repo = _isolate_sessions.parent / "repo" + worktree = repo / ".worktrees" / "hermes-visible" + worktree.mkdir(parents=True) + + s = new_session( + workspace=str(worktree), + worktree_info={ + "path": str(worktree), + "branch": "hermes/hermes-visible", + "repo_root": str(repo), + "created_at": 789.0, + }, + ) + + ids = {row["session_id"] for row in models.all_sessions()} + assert s.session_id in ids, ( + "worktree-backed sessions represent real filesystem state immediately " + "and must survive the empty-session sidebar filter" + ) + + +def test_find_git_repo_root_uses_git_from_nested_workspace(tmp_path): + from api.worktrees import find_git_repo_root + + repo = tmp_path / "repo" + nested = repo / "apps" / "web" + nested.mkdir(parents=True) + subprocess.run(["git", "init"], cwd=repo, check=True, capture_output=True) + + assert find_git_repo_root(nested) == repo.resolve() + + +def test_find_git_repo_root_rejects_non_git_workspace(tmp_path): + from api.worktrees import find_git_repo_root + + with pytest.raises(ValueError, match="not inside a git repository"): + find_git_repo_root(tmp_path) + + +def test_create_worktree_for_workspace_calls_agent_setup_with_repo_root(tmp_path, monkeypatch): + import api.worktrees as worktrees + + repo = tmp_path / "repo" + nested = repo / "src" + nested.mkdir(parents=True) + subprocess.run(["git", "init"], cwd=repo, check=True, capture_output=True) + seen = {} + + def fake_setup(repo_root): + seen["repo_root"] = repo_root + return { + "path": str(repo / ".worktrees" / "hermes-test"), + "branch": "hermes/hermes-test", + "repo_root": str(repo), + } + + monkeypatch.setattr(worktrees, "_setup_agent_worktree", fake_setup) + now = time.time() + + info = worktrees.create_worktree_for_workspace(nested) + + assert seen["repo_root"] == str(repo.resolve()) + assert info["path"].endswith(".worktrees/hermes-test") + assert info["branch"] == "hermes/hermes-test" + assert info["repo_root"] == str(repo.resolve()) + assert info["created_at"] >= now + + +def test_session_new_route_creates_worktree_backed_session(tmp_path, monkeypatch): + import api.routes as routes + import api.worktrees as worktrees + + repo = tmp_path / "repo" + worktree = repo / ".worktrees" / "hermes-route" + repo.mkdir() + worktree.mkdir(parents=True) + + monkeypatch.setattr(routes, "_check_csrf", lambda handler: True) + monkeypatch.setattr( + routes, + "read_body", + lambda handler: { + "workspace": str(repo), + "worktree": True, + "profile": "default", + }, + ) + monkeypatch.setattr(routes, "resolve_trusted_workspace", lambda raw: repo if raw == str(repo) else raw) + monkeypatch.setattr( + worktrees, + "create_worktree_for_workspace", + lambda workspace: { + "path": str(worktree), + "branch": "hermes/hermes-route", + "repo_root": str(repo), + "created_at": 321.0, + }, + ) + captured = {} + monkeypatch.setattr( + routes, + "j", + lambda handler, payload, status=200, extra_headers=None: captured.update( + payload=payload, + status=status, + ) or True, + ) + + assert routes.handle_post(object(), SimpleNamespace(path="/api/session/new")) is True + assert captured["status"] == 200 + session = captured["payload"]["session"] + assert session["workspace"] == str(worktree.resolve()) + assert session["worktree_path"] == str(worktree.resolve()) + assert session["worktree_branch"] == "hermes/hermes-route" diff --git a/tests/test_issue1955_worktree_ui_static.py b/tests/test_issue1955_worktree_ui_static.py new file mode 100644 index 00000000..d160d5a8 --- /dev/null +++ b/tests/test_issue1955_worktree_ui_static.py @@ -0,0 +1,44 @@ +from pathlib import Path + + +ROOT = Path(__file__).resolve().parents[1] + + +def read(path): + return (ROOT / path).read_text(encoding="utf-8") + + +def test_session_new_route_accepts_worktree_flag_and_uses_worktree_info(): + src = read("api/routes.py") + assert "create_worktree_for_workspace" in src + assert 'body.get("worktree")' in src or "body.get('worktree')" in src + assert "worktree_info=" in src + + +def test_new_session_request_can_include_worktree_flag(): + src = read("static/sessions.js") + assert "async function newSession(flash, options={})" in src + assert "reqBody.worktree=true" in src + + +def test_workspace_dropdown_exposes_new_worktree_conversation_action(): + src = read("static/panels.js") + assert "workspace_new_worktree_conversation" in src + assert "workspace_new_worktree_conversation_meta" in src + assert "newSession(false,{worktree:true})" in src + assert "li('git-branch',12)" in src + + +def test_session_sidebar_renders_worktree_indicator(): + src = read("static/sessions.js") + assert "session-worktree-indicator" in src + assert "s.worktree_path" in src + assert "s.worktree_branch" in src + + +def test_worktree_indicator_styles_and_i18n_exist(): + css = read("static/style.css") + i18n = read("static/i18n.js") + assert ".session-worktree-indicator" in css + assert "workspace_new_worktree_conversation" in i18n + assert "session_worktree_badge" in i18n From db6857ba8689f4fe1748fc8d4b27231cf5677537 Mon Sep 17 00:00:00 2001 From: Frank Song Date: Mon, 11 May 2026 12:51:57 +0800 Subject: [PATCH 06/15] Address worktree session review notes --- CHANGELOG.md | 2 +- api/routes.py | 8 ++-- tests/test_issue1955_worktree_sessions.py | 54 +++++++++++++++++++++++ 3 files changed, 60 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b5cf6704..77b9db52 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,7 @@ ## [Unreleased] -- Added worktree-backed conversation creation for development sessions: the workspace menu can now create a new conversation in a Hermes Agent git worktree, persist the worktree path/branch/repo metadata on the session, and show a sidebar worktree indicator without adding automatic cleanup yet (#1955). +- Added worktree-backed conversation creation for development sessions: the workspace menu can now create a new conversation in a Hermes Agent git worktree, persist the worktree path/branch/repo metadata on the session, and show a sidebar worktree indicator without adding automatic cleanup yet. The underlying Agent helper may add `.worktrees/` to the repository `.gitignore` the first time a worktree is created for that repo (#1955). ## [v0.51.42] — 2026-05-11 — Release R (5-PR contributor batch — session recovery state.db reconciliation + RFC convention + MEDIA_ALLOWED_ROOTS + Slack cron delivery) diff --git a/api/routes.py b/api/routes.py index b753857a..f6908a9b 100644 --- a/api/routes.py +++ b/api/routes.py @@ -3847,7 +3847,7 @@ def handle_post(handler, parsed) -> bool: if parsed.path == "/api/session/new": try: workspace = str(resolve_trusted_workspace(body.get("workspace"))) if body.get("workspace") else None - except ValueError as e: + except (TypeError, ValueError) as e: return bad(handler, str(e)) worktree_info = None worktree_requested = ( @@ -3857,10 +3857,12 @@ def handle_post(handler, parsed) -> bool: if worktree_requested: try: from api.worktrees import create_worktree_for_workspace - base_workspace = workspace or str(resolve_trusted_workspace(get_last_workspace())) + base_workspace = workspace + if not base_workspace: + base_workspace = str(resolve_trusted_workspace(get_last_workspace())) worktree_info = create_worktree_for_workspace(base_workspace) workspace = worktree_info["path"] - except ValueError as e: + except (TypeError, ValueError) as e: return bad(handler, str(e), status=400) except Exception as e: logger.exception("failed to create worktree-backed session") diff --git a/tests/test_issue1955_worktree_sessions.py b/tests/test_issue1955_worktree_sessions.py index 2c72d2a1..c1c623e7 100644 --- a/tests/test_issue1955_worktree_sessions.py +++ b/tests/test_issue1955_worktree_sessions.py @@ -185,3 +185,57 @@ def test_session_new_route_creates_worktree_backed_session(tmp_path, monkeypatch assert session["workspace"] == str(worktree.resolve()) assert session["worktree_path"] == str(worktree.resolve()) assert session["worktree_branch"] == "hermes/hermes-route" + + +def test_session_new_worktree_fallback_workspace_is_resolved(tmp_path, monkeypatch): + import api.routes as routes + import api.worktrees as worktrees + + repo = tmp_path / "repo" + worktree = repo / ".worktrees" / "hermes-route" + repo.mkdir() + worktree.mkdir(parents=True) + seen = {"resolved": []} + + monkeypatch.setattr(routes, "_check_csrf", lambda handler: True) + monkeypatch.setattr( + routes, + "read_body", + lambda handler: { + "worktree": True, + "profile": "default", + }, + ) + monkeypatch.setattr(routes, "get_last_workspace", lambda: str(repo)) + + def fake_resolve(raw): + seen["resolved"].append(raw) + return repo + + monkeypatch.setattr(routes, "resolve_trusted_workspace", fake_resolve) + monkeypatch.setattr( + worktrees, + "create_worktree_for_workspace", + lambda workspace: { + "path": str(worktree), + "branch": "hermes/hermes-route", + "repo_root": str(repo), + "created_at": 321.0, + }, + ) + captured = {} + monkeypatch.setattr( + routes, + "j", + lambda handler, payload, status=200, extra_headers=None: captured.update( + payload=payload, + status=status, + ) or True, + ) + + assert routes.handle_post(object(), SimpleNamespace(path="/api/session/new")) is True + + assert seen["resolved"] == [str(repo)] + assert captured["status"] == 200 + session = captured["payload"]["session"] + assert session["workspace"] == str(worktree.resolve()) From 5a445e756272066679f75f17b6ae86bc956f8283 Mon Sep 17 00:00:00 2001 From: Frank Song Date: Mon, 11 May 2026 13:06:11 +0800 Subject: [PATCH 07/15] Fix duplicate assistant transcript merge --- CHANGELOG.md | 2 ++ api/streaming.py | 12 +++++++ tests/test_session_save_mode.py | 63 +++++++++++++++++++++++++++++++++ 3 files changed, 77 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 629543fc..366f2d7f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ ## [Unreleased] +- Fixed duplicate assistant messages in browser chat transcripts by ignoring adjacent assistant replay duplicates during server-side result merge while preserving identical assistant text across separate user turns (#2051). + ## [v0.51.43] — 2026-05-11 — Release S (fused community PR — desktop sidebar collapse) ### Added diff --git a/api/streaming.py b/api/streaming.py index 7b29cd1e..565a454e 100644 --- a/api/streaming.py +++ b/api/streaming.py @@ -1753,6 +1753,18 @@ def _merge_display_messages_after_agent_result(previous_display, previous_contex # in result_messages, keep the durable checkpoint and append only # the assistant/tool delta. continue + if ( + key is not None + and isinstance(msg, dict) + and msg.get('role') == 'assistant' + and merged + and _message_identity(merged[-1]) == key + ): + # Some provider/result replay paths can include the same assistant + # message twice in the current delta. Treat only adjacent identity + # matches as replay duplicates so identical answers in separate + # user turns remain visible. + continue if _is_context_compression_marker(msg) and key is not None and key in seen: continue display_msg = msg diff --git a/tests/test_session_save_mode.py b/tests/test_session_save_mode.py index 71c06753..836fca88 100644 --- a/tests/test_session_save_mode.py +++ b/tests/test_session_save_mode.py @@ -159,6 +159,69 @@ def test_deferred_turn_is_materialized_when_agent_returns_assistant_only_delta() assert [m["content"] for m in merged[-2:]] == ["latest prompt", "current answer"] +def test_duplicate_assistant_delta_is_not_persisted_twice(): + """Provider/result merge replay must not duplicate the same assistant bubble.""" + previous_display = [ + {"role": "user", "content": "older prompt"}, + {"role": "assistant", "content": "older answer"}, + ] + previous_context = list(previous_display) + result_messages = previous_context + [ + {"role": "user", "content": "latest prompt"}, + {"role": "assistant", "content": "current answer"}, + {"role": "assistant", "content": "current answer"}, + ] + + merged = streaming._merge_display_messages_after_agent_result( + previous_display=previous_display, + previous_context=previous_context, + result_messages=result_messages, + msg_text="latest prompt", + ) + + assert [m["role"] for m in merged] == [ + "user", + "assistant", + "user", + "assistant", + ] + assert [m["content"] for m in merged[-2:]] == ["latest prompt", "current answer"] + assert ( + sum( + 1 + for m in merged + if m.get("role") == "assistant" and m.get("content") == "current answer" + ) + == 1 + ) + + +def test_same_assistant_text_across_different_turns_is_preserved(): + previous_display = [ + {"role": "user", "content": "first prompt"}, + {"role": "assistant", "content": "same answer"}, + ] + previous_context = list(previous_display) + result_messages = previous_context + [ + {"role": "user", "content": "second prompt"}, + {"role": "assistant", "content": "same answer"}, + ] + + merged = streaming._merge_display_messages_after_agent_result( + previous_display=previous_display, + previous_context=previous_context, + result_messages=result_messages, + msg_text="second prompt", + ) + + assert [m["content"] for m in merged] == [ + "first prompt", + "same answer", + "second prompt", + "same answer", + ] + + def test_llm_title_generated_survives_save_and_load(_isolate_state): s = Session( session_id="generated_title", From a6174d08db5d0e3b6225e5d2921902a79dd20306 Mon Sep 17 00:00:00 2001 From: nesquena-hermes Date: Mon, 11 May 2026 05:59:42 +0000 Subject: [PATCH 08/15] =?UTF-8?q?test(infra):=20hermetic=20network=20isola?= =?UTF-8?q?tion=20=E2=80=94=20block=20all=20outbound=20from=20tests?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Tests should not reach the public internet. Before this commit, an accidentally-leaking outbound socket from the test_server fixture (real TLS handshakes to Anthropic / Amazon / OpenRouter, sometimes triggered by SDK-init paths that found a credential the credential-strip allowlist missed) was adding 60+s of wall-time to a 100s test run and creating a class of flaky failures. This installs a default-deny socket-block at two layers: 1. Pytest process, via tests/conftest.py module-level monkey-patch on socket.create_connection + socket.socket.connect. Loopback / RFC1918 private / link-local / RFC2606 reserved-TLD destinations pass through; anything else raises OSError("hermes test network isolation: outbound to ... blocked"). Tests that legitimately need real outbound opt back in via the new `allow_outbound_network` fixture (no current callers). 2. Test_server subprocess (server.py), via a HERMES_WEBUI_TEST_NETWORK_BLOCK=1 environment-variable-gated guard at the top of server.py. tests/conftest.py sets the env var on every test_server spawn. Without this, the subprocess could make outbound that the pytest-side block can't see (which is exactly what was happening — verified via `ss -tnp` showing the server.py child with established ESTAB sockets to [2607:6bc0::10]:443). In production the env var is unset, so the guard is a no-op. Companion changes: - test_dns_resolution_failure refactored to mock socket.getaddrinfo raising gaierror, instead of relying on a real DNS lookup of a *.invalid hostname. The test was the one outlier that genuinely exercised real DNS; mocking matches what every other probe-error test in the same file already does. - New tests/test_conftest_network_isolation.py with 9 adversarial tests proving the block fires for public IPs (including the exact Anthropic IPv6 and Amazon IPv4 destinations we observed leaking), the allow-list passes loopback / RFC1918 / link-local / reserved-TLDs, and the opt-in fixture re-enables real outbound when needed. Test suite: 5,120 → 5,192 (+72 net new from this commit + the regression tests in the companion commits). Wall time: 161s → 95s on the same hardware. No remaining outbound from any test path. --- server.py | 84 ++++++++++++++ tests/conftest.py | 138 +++++++++++++++++++++++ tests/test_conftest_network_isolation.py | 116 +++++++++++++++++++ tests/test_issue1499_onboarding_probe.py | 16 ++- 4 files changed, 352 insertions(+), 2 deletions(-) create mode 100644 tests/test_conftest_network_isolation.py diff --git a/server.py b/server.py index bbaf1cb8..15b59630 100644 --- a/server.py +++ b/server.py @@ -4,12 +4,96 @@ Thin routing shell: imports Handler, delegates to api/routes.py, runs server. All business logic lives in api/*. """ import logging +import os import socket import sys import time import traceback from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer +# ── Test-mode network isolation ───────────────────────────────────────────── +# When `HERMES_WEBUI_TEST_NETWORK_BLOCK=1` is set in the environment, refuse +# outbound socket connections to anything that is not loopback / RFC1918 / +# link-local / reserved-TLD. This catches accidental real outbound (forgotten +# mocks, leaked credentials triggering SDK init, new code paths bypassing an +# existing mock) so the test suite stays hermetic and fast. +# +# tests/conftest.py sets this env var on every test_server subprocess so the +# server.py-side network isolation matches the pytest-process-side isolation +# already installed there. +# +# A test that legitimately needs real outbound spawns the server with the env +# var unset (no current callers — every test_server-using test should be +# mockable). +if os.environ.get("HERMES_WEBUI_TEST_NETWORK_BLOCK", "").strip() in ("1", "true", "yes"): + _REAL_CREATE_CONN = socket.create_connection + _REAL_SOCK_CONNECT = socket.socket.connect + + def _addr_is_local(host): + if not isinstance(host, str): + return False + h = host.strip().lower() + if not h: + return False + if h in ("::1", "0:0:0:0:0:0:0:1") or h.startswith("fe80:") or h.startswith("fc") or h.startswith("fd"): + return True + if h == "localhost" or h.endswith(".localhost"): + return True + if h.endswith(".local") or h.endswith(".test") or h.endswith(".invalid"): + return True + if h == "example.com" or h.endswith(".example.com"): + return True + if h == "example.net" or h.endswith(".example.net"): + return True + if h == "example.org" or h.endswith(".example.org"): + return True + if h.endswith(".example"): + return True + if h and h[0].isdigit() and h.count(".") == 3: + try: + o1, o2, o3, o4 = [int(p) for p in h.split(".")] + except ValueError: + return False + if o1 == 127: + return True + if o1 == 10: + return True + if o1 == 192 and o2 == 168: + return True + if o1 == 172 and 16 <= o2 <= 31: + return True + if o1 == 169 and o2 == 254: + return True + if o1 == 203 and o2 == 0 and o3 == 113: + return True + return False + + def _blocked_create_connection(address, *a, **kw): + try: + host = address[0] + except (TypeError, IndexError): + host = "" + if _addr_is_local(host): + return _REAL_CREATE_CONN(address, *a, **kw) + raise OSError( + f"hermes test network isolation (server.py): outbound to {address!r} blocked" + ) + + def _blocked_socket_connect(self, address): + try: + host = address[0] + except (TypeError, IndexError): + host = "" + if _addr_is_local(host): + return _REAL_SOCK_CONNECT(self, address) + raise OSError( + f"hermes test network isolation (server.py): socket.connect to {address!r} blocked" + ) + + socket.create_connection = _blocked_create_connection + socket.socket.connect = _blocked_socket_connect + + try: import resource except ImportError: # pragma: no cover - resource is Unix-only diff --git a/tests/conftest.py b/tests/conftest.py index 4a9ac293..503185b8 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -171,6 +171,138 @@ def pytest_configure(config): # imports trigger botocore initialisation. os.environ.setdefault("AWS_EC2_METADATA_DISABLED", "true") +# ── Hermetic network isolation ───────────────────────────────────────────── +# Tests must not reach the public internet. Outbound to Anthropic / OpenAI / +# Amazon / OpenRouter / etc. is forbidden by default. The test suite already +# mocks every legitimate outbound (probe_provider_endpoint, get_available_models, +# urlopen calls inside api/config.py), so a real outbound socket is either a +# missing mock, a leaked credential triggering an SDK init, or an unintended +# regression like the one PR #1970 introduced where a new code path bypassed +# an existing mock and tried to hit the real LM Studio host. +# +# This module-level monkey-patch wraps socket.create_connection so any +# non-loopback / non-RFC1918 / non-link-local / non-TEST-NET destination +# raises OSError("hermes test network isolation"). Tests that deliberately +# attempt outbound (only test_dns_resolution_failure today) opt back in +# explicitly via the `allow_outbound_network` fixture below. +# +# Allowed destinations (silent pass-through): +# - 127.0.0.0/8 loopback +# - ::1 IPv6 loopback +# - 192.168.0.0/16 RFC1918 private +# - 10.0.0.0/8 RFC1918 private +# - 172.16.0.0/12 RFC1918 private (16-31) +# - 169.254.0.0/16 link-local (covers IMDS — already separately blocked +# by AWS_EC2_METADATA_DISABLED, but allowed at the socket +# layer because IMDS-using tests mock the response) +# - 203.0.113.0/24 RFC5737 TEST-NET-3 (used as documentation IPs in tests) +# - hostnames `localhost`, `*.local`, `*.test`, `*.example`, `*.example.com` +# `*.example.net`, `*.example.org`, `*.invalid` (RFC2606/6761 reserved) +# +# A test that opts in via the `allow_outbound_network` fixture sees the real +# socket.create_connection. +import socket as _hermes_test_socket +_REAL_CREATE_CONNECTION = _hermes_test_socket.create_connection +_REAL_SOCKET_CONNECT = _hermes_test_socket.socket.connect + +_ALLOW_OUTBOUND = False # toggled by the allow_outbound_network fixture + + +def _hermes_addr_is_local(host: str) -> bool: + """Return True for loopback / RFC1918 / link-local / reserved-TLD hosts.""" + if not isinstance(host, str): + return False + h = host.strip().lower() + if not h: + return False + # IPv6 loopback / link-local + if h in ('::1', '0:0:0:0:0:0:0:1') or h.startswith('fe80:') or h.startswith('fc') or h.startswith('fd'): + return True + # Hostname allow-list (RFC2606/6761 reserved TLDs + localhost) + if h == 'localhost' or h.endswith('.localhost'): + return True + if h.endswith('.local') or h.endswith('.test') or h.endswith('.invalid'): + return True + if h == 'example.com' or h.endswith('.example.com'): + return True + if h == 'example.net' or h.endswith('.example.net'): + return True + if h == 'example.org' or h.endswith('.example.org'): + return True + if h.endswith('.example'): + return True + # IPv4 — parse octets if it looks like a dotted quad + if h[0].isdigit() and h.count('.') == 3: + try: + o1, o2, o3, o4 = [int(p) for p in h.split('.')] + except ValueError: + return False + if o1 == 127: # loopback + return True + if o1 == 10: # RFC1918 10.0.0.0/8 + return True + if o1 == 192 and o2 == 168: # RFC1918 192.168.0.0/16 + return True + if o1 == 172 and 16 <= o2 <= 31: # RFC1918 172.16.0.0/12 + return True + if o1 == 169 and o2 == 254: # link-local 169.254.0.0/16 + return True + if o1 == 203 and o2 == 0 and o3 == 113: # RFC5737 TEST-NET-3 + return True + return False + + +def _hermes_blocked_create_connection(address, *a, **kw): + if _ALLOW_OUTBOUND: + return _REAL_CREATE_CONNECTION(address, *a, **kw) + try: + host = address[0] + except (TypeError, IndexError): + host = "" + if _hermes_addr_is_local(host): + return _REAL_CREATE_CONNECTION(address, *a, **kw) + raise OSError( + f"hermes test network isolation: outbound socket to {address!r} is blocked. " + f"Tests should mock urllib.request.urlopen / requests / socket.create_connection. " + f"If a test genuinely needs real outbound, request the allow_outbound_network fixture." + ) + + +def _hermes_blocked_socket_connect(self, address): + if _ALLOW_OUTBOUND: + return _REAL_SOCKET_CONNECT(self, address) + try: + host = address[0] + except (TypeError, IndexError): + host = "" + if _hermes_addr_is_local(host): + return _REAL_SOCKET_CONNECT(self, address) + raise OSError( + f"hermes test network isolation: socket.connect to {address!r} is blocked." + ) + + +_hermes_test_socket.create_connection = _hermes_blocked_create_connection +_hermes_test_socket.socket.connect = _hermes_blocked_socket_connect + + +@pytest.fixture +def allow_outbound_network(): + """Opt-in to real outbound network for the duration of one test. + + Use sparingly. Today only `test_dns_resolution_failure` needs this — + it intentionally exercises a real DNS lookup on a reserved-TLD hostname + to verify the probe maps `socket.gaierror` to `error='dns'`. + """ + global _ALLOW_OUTBOUND + _ALLOW_OUTBOUND = True + try: + yield + finally: + _ALLOW_OUTBOUND = False + + + # ── Environment isolation for tests ──────────────────────────────────────── # HERMES_WEBUI_SKIP_ONBOARDING is set by hosting providers (e.g. Agent37) and @@ -365,6 +497,12 @@ def test_server(): # at module level above for the pytest process, but make it explicit here # so it's never accidentally cleared by an env.update later). env["AWS_EC2_METADATA_DISABLED"] = "true" + # Activate the same network-isolation block in the test_server subprocess + # that conftest.py installs in the pytest process. server.py reads this + # env var at import time and installs an identical socket-block guard. + # Without this, the subprocess can make outbound requests that the + # pytest-side block can't see. + env["HERMES_WEBUI_TEST_NETWORK_BLOCK"] = "1" env.update({ "HERMES_WEBUI_PORT": str(TEST_PORT), "HERMES_WEBUI_HOST": "127.0.0.1", diff --git a/tests/test_conftest_network_isolation.py b/tests/test_conftest_network_isolation.py new file mode 100644 index 00000000..94d47d07 --- /dev/null +++ b/tests/test_conftest_network_isolation.py @@ -0,0 +1,116 @@ +"""Adversarial test for the network-isolation fixture in conftest.py. + +The autouse module-level monkey-patch in tests/conftest.py wraps +socket.create_connection so that any non-loopback / non-RFC1918 / non-link-local +destination raises OSError. This file proves: + + 1. The block actually fires for outbound to a real public IP. + 2. Loopback / RFC1918 / link-local / reserved-TLD destinations pass through. + 3. The `allow_outbound_network` fixture re-enables real network for tests + that legitimately need it. + +Without this enforcement, a test that accidentally calls real outbound +(forgotten mock, leaked credential triggering an SDK initialisation, new +code path bypassing an existing mock) can leak production credentials, +slow the test suite into 10-minute waits on TLS handshakes, and produce +flaky failures depending on whether the destination is reachable. +""" +from __future__ import annotations + +import socket +import pytest + + +def test_outbound_to_public_ipv4_is_blocked(): + """Attempting to connect to a public IP must raise OSError.""" + with pytest.raises(OSError, match="hermes test network isolation"): + # 8.8.8.8 (Google DNS) is a stable real public IPv4. + # If we accidentally connect, the test goes to 53/tcp which is + # genuinely listening — so the block is what stops us, not lack of + # destination. + socket.create_connection(("8.8.8.8", 53), timeout=1) + + +def test_outbound_to_anthropic_ipv6_is_blocked(): + """The exact destination we observed leaking from earlier pytest runs.""" + with pytest.raises(OSError, match="hermes test network isolation"): + socket.create_connection(("2607:6bc0::10", 443), timeout=1) + + +def test_outbound_to_amazon_is_blocked(): + """AWS endpoints (botocore / bedrock) must not reach the real service.""" + with pytest.raises(OSError, match="hermes test network isolation"): + socket.create_connection(("3.173.21.63", 443), timeout=1) + + +def test_loopback_v4_is_allowed(): + """127.0.0.1 must continue to work — test_server fixture depends on it.""" + # Listen on a temporary port + connect via the wrapped create_connection. + listener = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + listener.bind(("127.0.0.1", 0)) + port = listener.getsockname()[1] + listener.listen(1) + try: + client = socket.create_connection(("127.0.0.1", port), timeout=1) + client.close() + finally: + listener.close() + + +def test_rfc1918_private_ipv4_is_allowed(): + """RFC1918 (10/8, 172.16/12, 192.168/16) must pass — devs run LM Studio + on their LAN. The block only refuses non-RFC1918 + non-loopback.""" + import tests.conftest as _conftest + # Direct unit test on the predicate so we don't have to start a real listener + # in a private-IP subnet just to prove this. + assert _conftest._hermes_addr_is_local("10.0.0.5") is True + assert _conftest._hermes_addr_is_local("172.16.5.1") is True + assert _conftest._hermes_addr_is_local("172.31.255.254") is True + assert _conftest._hermes_addr_is_local("192.168.1.22") is True + + +def test_link_local_is_allowed(): + """169.254.0.0/16 (link-local / IMDS) — AWS_EC2_METADATA_DISABLED already + short-circuits the actual probe but the socket layer allows it.""" + import tests.conftest as _conftest + assert _conftest._hermes_addr_is_local("169.254.169.254") is True + + +def test_reserved_tlds_are_allowed(): + """RFC 2606/6761 reserved TLDs — used as documentation hostnames in tests + (e.g. example.com, test-host.invalid).""" + import tests.conftest as _conftest + assert _conftest._hermes_addr_is_local("example.com") is True + assert _conftest._hermes_addr_is_local("my-mac.tailnet.example") is True + assert _conftest._hermes_addr_is_local("anything.invalid") is True + assert _conftest._hermes_addr_is_local("test-host.test") is True + assert _conftest._hermes_addr_is_local("printer.local") is True + assert _conftest._hermes_addr_is_local("localhost") is True + + +def test_public_ipv4_is_blocked(): + """Public IPs must NOT be treated as local.""" + import tests.conftest as _conftest + assert _conftest._hermes_addr_is_local("8.8.8.8") is False + assert _conftest._hermes_addr_is_local("1.1.1.1") is False + assert _conftest._hermes_addr_is_local("203.0.113.0") is True # TEST-NET-3 + assert _conftest._hermes_addr_is_local("204.0.113.0") is False # outside + + +def test_allow_outbound_network_fixture_unblocks(allow_outbound_network): + """When a test opts in to the fixture, real outbound works again.""" + # We use a real DNS lookup to a reserved invalid TLD — the fixture should + # let us BYPASS the block, and the real DNS will fail with gaierror. The + # difference: pre-fixture, our wrapper raises OSError("hermes test network + # isolation"). With fixture, we get the real gaierror or a connect error, + # not our wrapper's message. + with pytest.raises((OSError, socket.gaierror)) as exc_info: + socket.create_connection( + ("this-definitely-cannot-resolve-zxq987.invalid", 443), + timeout=1, + ) + msg = str(exc_info.value) + # Must NOT be our wrapper's message. + assert "hermes test network isolation" not in msg, ( + f"allow_outbound_network fixture should disable the block, but got: {msg}" + ) diff --git a/tests/test_issue1499_onboarding_probe.py b/tests/test_issue1499_onboarding_probe.py index f63d3b40..2adefcb1 100644 --- a/tests/test_issue1499_onboarding_probe.py +++ b/tests/test_issue1499_onboarding_probe.py @@ -154,9 +154,21 @@ class TestIssue1499OnboardingProbe: assert r["ok"] is False assert r["error"] == "invalid_url" - def test_dns_resolution_failure(self): - """Unresolvable hostname → error='dns'.""" + def test_dns_resolution_failure(self, monkeypatch): + """Unresolvable hostname → error='dns'. + + Mocked at `socket.getaddrinfo` so this test is hermetic — no real DNS + lookup leaves the test process. The reserved `.invalid` TLD (RFC2606) + is still used as the hostname so anyone reading the test sees the + intent; the failure is forced via `socket.gaierror` from the mock. + """ + import socket from api.onboarding import probe_provider_endpoint + + def _raise_gaierror(*_args, **_kwargs): + raise socket.gaierror(-2, "Name or service not known") + + monkeypatch.setattr(socket, "getaddrinfo", _raise_gaierror) r = probe_provider_endpoint( "lmstudio", "http://this-host-definitely-does-not-exist-zxq987.invalid:1234/v1", From 2ca220eec07dbaaac588767014bd3e256ae40f1d Mon Sep 17 00:00:00 2001 From: nesquena-hermes Date: Mon, 11 May 2026 05:59:59 +0000 Subject: [PATCH 09/15] fix(config): PR #1970 lmstudio branch must honor cfg.model.base_url fallback MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PR #1970 added a dedicated `elif pid == "lmstudio":` branch in `get_available_models()` that fetches the live /v1/models list when the hermes_cli helper doesn't have ids cached. The fallback path inside that branch only looked at `cfg["providers"]["lmstudio"]["base_url"]`, missing the historical config shape where the URL lives under `cfg["model"]`: model: provider: lmstudio base_url: http://192.168.1.22:1234/v1 ← here, not under providers.lmstudio providers: lmstudio: api_key: local-key 3 pre-existing tests in tests/test_issue1527_lmstudio_base_url_classification broke on stage-337 because of this — they passed on master, failed after the PR #1970 merge. The simpler fix is to enhance the already-introduced `_get_provider_base_url()` helper so it falls back to `cfg["model"]["base_url"]` when `cfg["model"]["provider"] == provider_id`, then use the helper inside the lmstudio branch instead of a direct lookup. This keeps the previous behaviour (where the generic configured-provider branch handled lmstudio via the model block) while preserving PR #1970's live-discovery additions. Belt-and-suspenders: `_get_provider_base_url()` explicitly does NOT inherit model.base_url for providers other than the active one — if a user's config says `model.provider: anthropic` and they have `providers.openai` configured without a base_url, openai must still resolve to None (use SDK default), not to the anthropic proxy URL. 6 new regression tests in tests/test_pr1970_lmstudio_base_url_fallback.py lock the two-location lookup, the precedence rule (explicit providers entry wins over model fallback), trailing-slash stripping, and the negative case (model.base_url MUST NOT leak to non-active providers). All 51 tests in the existing model-resolver + custom-provider banks still pass. Caught by maintainer review on stage-337 (full pytest with the new network isolation in place surfaced the regression that the fork-CI mock-server path would have hidden). --- api/config.py | 28 +++- .../test_pr1970_lmstudio_base_url_fallback.py | 127 ++++++++++++++++++ 2 files changed, 152 insertions(+), 3 deletions(-) create mode 100644 tests/test_pr1970_lmstudio_base_url_fallback.py diff --git a/api/config.py b/api/config.py index c3c87f4b..ab304318 100644 --- a/api/config.py +++ b/api/config.py @@ -1480,9 +1480,31 @@ def _custom_slug_rest_looks_like_host_port(rest: str) -> bool: def _get_provider_base_url(provider_id): - """Look up the configured base_url for a provider (e.g. lmstudio).""" + """Look up the configured base_url for a provider (e.g. lmstudio). + + Checks two locations, in order: + 1. ``cfg["providers"][]["base_url"]`` — the explicit + per-provider override. + 2. ``cfg["model"]["base_url"]`` — falls back here when + ``cfg["model"]["provider"] == provider_id``. This is the historical + shape (the model block carries both the active provider AND the + base URL for that provider in a single record). + + Returns the URL stripped of trailing ``/`` if configured, otherwise None. + """ prov_cfg = cfg.get("providers", {}).get(provider_id, {}) or {} - return (prov_cfg.get("base_url") or "").rstrip("/") or None + explicit = (prov_cfg.get("base_url") or "").strip().rstrip("/") + if explicit: + return explicit + model_cfg = cfg.get("model", {}) or {} + if isinstance(model_cfg, dict): + model_provider = str(model_cfg.get("provider") or "").strip().lower() + if model_provider == str(provider_id).strip().lower(): + model_base = (model_cfg.get("base_url") or "").strip().rstrip("/") + if model_base: + return model_base + return None + def resolve_model_provider(model_id: str) -> tuple: """Resolve model name, provider, and base_url for AIAgent. @@ -3415,7 +3437,7 @@ def get_available_models() -> dict: # the profile's .env has been injected into the process environment. lm_cfg = cfg.get("providers", {}).get("lmstudio", {}) if isinstance(lm_cfg, dict): - lm_base_url = str(lm_cfg.get("base_url") or "").strip().rstrip("/") + lm_base_url = _get_provider_base_url("lmstudio") or "" lm_api_key = str(lm_cfg.get("api_key") or "").strip() if lm_base_url: headers = {"User-Agent": "OpenAI/Python 1.0"} diff --git a/tests/test_pr1970_lmstudio_base_url_fallback.py b/tests/test_pr1970_lmstudio_base_url_fallback.py new file mode 100644 index 00000000..a93d030c --- /dev/null +++ b/tests/test_pr1970_lmstudio_base_url_fallback.py @@ -0,0 +1,127 @@ +"""Regression for PR #1970 LM Studio provider × cfg.model.base_url shape. + +PR #1970 added `_get_provider_base_url()` + a dedicated lmstudio branch in +`get_available_models()` for fetching live loaded models via the OpenAI-compatible +/v1/models endpoint. + +The initial implementation only looked at `cfg["providers"]["lmstudio"]["base_url"]`, +missing the historical shape where users put `base_url` under `cfg["model"]` +(when `cfg["model"]["provider"] == "lmstudio"`). That shape is what +`tests/test_issue1527_lmstudio_base_url_classification.py` covers and what real +users have in their config.yaml — 3 pre-existing tests started failing on stage-337 +because of this gap. + +This regression test pins the helper's two-location lookup so a future change +can't accidentally drop the model.base_url fallback again. +""" +from __future__ import annotations + +import api.config as config + + +class _RestoreCfg: + """Context manager: snapshot cfg, restore on exit (test isolation).""" + + def __enter__(self): + import copy + self._snapshot = copy.deepcopy(config.cfg) + return self + + def __exit__(self, *exc): + config.cfg.clear() + config.cfg.update(self._snapshot) + + +def test_get_provider_base_url_finds_explicit_providers_entry(): + """When providers..base_url is set, return that value.""" + with _RestoreCfg(): + config.cfg.clear() + config.cfg.update({ + "providers": { + "lmstudio": {"base_url": "http://10.0.0.5:1234/v1", "api_key": "x"}, + }, + }) + assert config._get_provider_base_url("lmstudio") == "http://10.0.0.5:1234/v1" + + +def test_get_provider_base_url_strips_trailing_slash(): + with _RestoreCfg(): + config.cfg.clear() + config.cfg.update({ + "providers": { + "lmstudio": {"base_url": "http://10.0.0.5:1234/v1/", "api_key": "x"}, + }, + }) + assert config._get_provider_base_url("lmstudio") == "http://10.0.0.5:1234/v1" + + +def test_get_provider_base_url_falls_back_to_model_base_url(): + """When providers..base_url is unset but cfg.model.base_url is set + AND cfg.model.provider matches, the helper returns model.base_url.""" + with _RestoreCfg(): + config.cfg.clear() + config.cfg.update({ + "model": { + "provider": "lmstudio", + "base_url": "http://192.168.1.22:1234/v1", + "default": "qwen3.6-35b-a3b@q6_k", + }, + "providers": { + "lmstudio": {"api_key": "local-key"}, # no base_url here + }, + }) + # Was returning None before the fix — the regression that broke + # test_issue1527_lmstudio_base_url_classification. + assert config._get_provider_base_url("lmstudio") == "http://192.168.1.22:1234/v1" + + +def test_get_provider_base_url_returns_none_when_unconfigured(): + """Unconfigured provider returns None (sentinel for 'use SDK default').""" + with _RestoreCfg(): + config.cfg.clear() + config.cfg.update({"providers": {}}) + assert config._get_provider_base_url("openai") is None + assert config._get_provider_base_url("anthropic") is None + assert config._get_provider_base_url("lmstudio") is None + + +def test_get_provider_base_url_model_block_only_matches_active_provider(): + """cfg.model.base_url must NOT leak to providers other than cfg.model.provider. + + If model.provider is anthropic but providers.openai exists without base_url, + _get_provider_base_url("openai") must still return None — otherwise we'd + silently rewrite the OpenAI SDK target to an Anthropic endpoint URL. + """ + with _RestoreCfg(): + config.cfg.clear() + config.cfg.update({ + "model": { + "provider": "anthropic", + "base_url": "https://my-anthropic-proxy.example.com/v1", + }, + "providers": { + "openai": {"api_key": "ok"}, # no base_url + "anthropic": {"api_key": "ak"}, # no base_url + }, + }) + # Active provider gets the model.base_url fallback. + assert config._get_provider_base_url("anthropic") == "https://my-anthropic-proxy.example.com/v1" + # OpenAI must NOT inherit it. + assert config._get_provider_base_url("openai") is None + + +def test_get_provider_base_url_explicit_wins_over_model_fallback(): + """If both providers..base_url AND cfg.model.base_url are set with matching + provider, the explicit providers entry wins.""" + with _RestoreCfg(): + config.cfg.clear() + config.cfg.update({ + "model": { + "provider": "lmstudio", + "base_url": "http://wrong:1234/v1", + }, + "providers": { + "lmstudio": {"base_url": "http://correct:1234/v1", "api_key": "x"}, + }, + }) + assert config._get_provider_base_url("lmstudio") == "http://correct:1234/v1" From 12cef733e33d04d200a1f13f10ca183fd96869ad Mon Sep 17 00:00:00 2001 From: nesquena-hermes Date: Mon, 11 May 2026 06:00:13 +0000 Subject: [PATCH 10/15] fix(recovery): preserve worktree metadata + workspace + message_count on state.db sidecar rebuild MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PR #2053 added worktree-backed session creation. PR #2041 (shipped in v0.51.42) added state.db sidecar reconciliation that rebuilds a missing .json sidecar from the canonical state.db row when the JSON file is gone (failed save, manual rm, restore-from-backup with mismatched dirs). The two interact silently. `_state_db_row_to_sidecar()` was hard-coding `'workspace': ''` and never propagating the four worktree_* fields from the row to the rebuilt sidecar dict. So a worktree-backed session that loses its sidecar and gets rebuilt from state.db: - loses `worktree_path` → matches the empty-session sidebar filter at `api/models.py:1067/1107` (which spares worktree-backed empty sessions via `not s.get('worktree_path')`) → session disappears from the sidebar even though the worktree directory still exists on disk. - loses `workspace` → downstream tools (terminal panels, file pickers that use `s.workspace`) operate on empty string instead of the original worktree path. - always reports `message_count == 0` → contributes to the empty-session filter even for sessions that have messages in `state.db.messages`. Fix: 1. `_read_state_db_missing_sidecar_rows()` SELECT now includes `workspace, worktree_path, worktree_branch, worktree_repo_root, worktree_created_at, message_count` (each gated by `_sql_optional_col()` so older state.db schemas without those columns continue to work — recovery degrades gracefully rather than 500ing). 2. `_state_db_row_to_sidecar()` propagates each field. workspace comes from the row if it's a string, otherwise '' (matching pre-fix behavior for non-worktree sessions). message_count comes from the row if it's an int, otherwise falls back to `len(messages)` so the rebuilt sidecar always has a coherent count. 3 new regression tests in tests/test_state_db_worktree_recovery.py exercise: - worktree session with messages → all four worktree_* fields preserved. - non-worktree session → worktree_* fields all None (no spurious propagation), workspace=''. - empty worktree session (the worst case) → confirms the rebuilt sidecar does NOT match the empty-session-exempt filter, so it stays visible in the sidebar. Caught by Opus advisor during stage-337 review (the cross-PR interaction between #2053 and the previously-shipped #2041 wasn't exercised by either PR's individual test suite). --- api/session_recovery.py | 17 ++- tests/test_state_db_worktree_recovery.py | 128 +++++++++++++++++++++++ 2 files changed, 143 insertions(+), 2 deletions(-) create mode 100644 tests/test_state_db_worktree_recovery.py diff --git a/api/session_recovery.py b/api/session_recovery.py index 0e93033a..62f74026 100644 --- a/api/session_recovery.py +++ b/api/session_recovery.py @@ -193,11 +193,18 @@ def _read_state_db_missing_sidecar_rows(session_dir: Path, state_db_path: Path | started_expr = _sql_optional_col('started_at', session_cols, '0') parent_expr = _sql_optional_col('parent_session_id', session_cols) msg_count_expr = _sql_optional_col('message_count', session_cols, '0') + workspace_expr = _sql_optional_col('workspace', session_cols) + worktree_path_expr = _sql_optional_col('worktree_path', session_cols) + worktree_branch_expr = _sql_optional_col('worktree_branch', session_cols) + worktree_repo_root_expr = _sql_optional_col('worktree_repo_root', session_cols) + worktree_created_at_expr = _sql_optional_col('worktree_created_at', session_cols) rows = [] for row in conn.execute( f""" SELECT id, source, {title_expr}, {model_expr}, {started_expr}, - {parent_expr}, {msg_count_expr} + {parent_expr}, {msg_count_expr}, {workspace_expr}, + {worktree_path_expr}, {worktree_branch_expr}, + {worktree_repo_root_expr}, {worktree_created_at_expr} FROM sessions WHERE source = 'webui' ORDER BY COALESCE(started_at, 0) DESC @@ -250,10 +257,16 @@ def _state_db_row_to_sidecar(row: dict) -> dict: started_at = row.get('started_at') or 0 messages = row.get('messages') if isinstance(row.get('messages'), list) else [] last_ts = messages[-1].get('timestamp') if messages and isinstance(messages[-1], dict) else started_at + workspace_value = row.get('workspace') or '' return { 'session_id': row.get('id'), 'title': row.get('title') or 'Recovered WebUI Session', - 'workspace': '', + 'workspace': workspace_value if isinstance(workspace_value, str) else '', + 'message_count': row.get('message_count') if isinstance(row.get('message_count'), int) else len(messages), + 'worktree_path': row.get('worktree_path') or None, + 'worktree_branch': row.get('worktree_branch') or None, + 'worktree_repo_root': row.get('worktree_repo_root') or None, + 'worktree_created_at': row.get('worktree_created_at') or None, 'model': row.get('model') or 'unknown', 'model_provider': None, 'created_at': started_at, diff --git a/tests/test_state_db_worktree_recovery.py b/tests/test_state_db_worktree_recovery.py new file mode 100644 index 00000000..dc6993db --- /dev/null +++ b/tests/test_state_db_worktree_recovery.py @@ -0,0 +1,128 @@ +"""Regression for state.db × worktree-backed session recovery. + +PR #2053 added worktree-backed session creation. PR #2041 added state.db +sidecar reconciliation. When a worktree-backed session's JSON sidecar is +lost (failed save, manual rm, restore-from-backup) and state.db is the only +source of truth, the recovery path must rebuild a sidecar that preserves +the worktree_* fields. Without that, the sidebar exempt-empty filter at +api/models.py:1067/1107 (which spares worktree-backed empty sessions) sees +no worktree_path on the rebuilt session and silently filters it out — the +session vanishes from the sidebar even though the worktree directory still +exists on disk. + +Caught by Opus advisor on stage-337 review. +""" +from __future__ import annotations + +from api.session_recovery import _state_db_row_to_sidecar + + +def test_state_db_recovery_preserves_worktree_metadata(): + """Recovered sidecar must keep worktree_path / worktree_branch / repo_root.""" + row = { + "id": "abc123", + "source": "webui", + "title": "My worktree session", + "model": "anthropic/claude-3-opus", + "started_at": 1700000000, + "parent_session_id": None, + "message_count": 3, + "messages": [ + {"role": "user", "content": "hello", "timestamp": 1700000001}, + {"role": "assistant", "content": "hi", "timestamp": 1700000002}, + {"role": "user", "content": "more", "timestamp": 1700000003}, + ], + "workspace": "/home/user/proj/.worktrees/hermes-1234", + "worktree_path": "/home/user/proj/.worktrees/hermes-1234", + "worktree_branch": "hermes/abc123", + "worktree_repo_root": "/home/user/proj", + "worktree_created_at": 1700000000, + } + + sidecar = _state_db_row_to_sidecar(row) + + assert sidecar["session_id"] == "abc123" + assert sidecar["title"] == "My worktree session" + # The four worktree_* fields must survive the rebuild — without them the + # sidebar filter at api/models.py:1067 hides the session. + assert sidecar["worktree_path"] == "/home/user/proj/.worktrees/hermes-1234" + assert sidecar["worktree_branch"] == "hermes/abc123" + assert sidecar["worktree_repo_root"] == "/home/user/proj" + assert sidecar["worktree_created_at"] == 1700000000 + # Workspace must round-trip from the row so terminal panels / file pickers + # operate on the correct path, not on empty string. + assert sidecar["workspace"] == "/home/user/proj/.worktrees/hermes-1234" + # message_count must come from the row so the sidebar exempt-empty filter + # accepts message-bearing sessions (was hard-coded 0 pre-fix). + assert sidecar["message_count"] == 3 + + +def test_state_db_recovery_non_worktree_session_unaffected(): + """A normal (non-worktree) session recovers exactly as before — None worktree fields.""" + row = { + "id": "xyz789", + "source": "webui", + "title": "Normal chat", + "model": "openai/gpt-4", + "started_at": 1700000000, + "parent_session_id": None, + "message_count": 1, + "messages": [{"role": "user", "content": "hello"}], + # No workspace, no worktree_* fields on the row. + } + + sidecar = _state_db_row_to_sidecar(row) + + assert sidecar["worktree_path"] is None + assert sidecar["worktree_branch"] is None + assert sidecar["worktree_repo_root"] is None + assert sidecar["worktree_created_at"] is None + assert sidecar["workspace"] == "" + assert sidecar["message_count"] == 1 + + +def test_state_db_recovery_zero_message_worktree_session_visible_in_sidebar(): + """An empty worktree-backed session recovered from state.db must NOT be + silently filtered from the sidebar by the empty-session-exempt rule. + + Pre-fix: the recovery rebuilt a sidecar with no worktree_path → matched the + empty-session filter → session disappeared from the sidebar even though + the worktree directory still existed on disk. Now that worktree_path is + propagated, the exemption clause at api/models.py:1070 fires. + """ + row = { + "id": "empty-worktree-abc", + "source": "webui", + "title": "Untitled", # default before any user message + "model": "anthropic/claude-3-opus", + "started_at": 1700000000, + "parent_session_id": None, + "message_count": 0, + "messages": [], + "workspace": "/home/user/proj/.worktrees/hermes-empty", + "worktree_path": "/home/user/proj/.worktrees/hermes-empty", + "worktree_branch": "hermes/empty", + "worktree_repo_root": "/home/user/proj", + "worktree_created_at": 1700000000, + } + + sidecar = _state_db_row_to_sidecar(row) + + # The compact() shape used in sidebar filtering is roughly the sidecar dict + # with selected keys. The filter at api/models.py:1067 checks: + # title == 'Untitled' and message_count == 0 and not active_stream_id + # and not has_pending_user_message and not worktree_path + # Pre-fix all 5 clauses matched → exempted FROM the result (i.e., hidden). + # Post-fix the worktree_path clause is truthy, so the session SHOULD render. + is_hidden_by_empty_filter = ( + sidecar.get("title", "Untitled") == "Untitled" + and sidecar.get("message_count", 0) == 0 + and not sidecar.get("active_stream_id") + and not sidecar.get("pending_user_message") + and not sidecar.get("worktree_path") + ) + assert not is_hidden_by_empty_filter, ( + "Worktree session was hidden by the empty-session exempt filter; " + "worktree_path must be propagated through state.db recovery so the " + "exempt clause in api/models.py:1070 does NOT match for this session." + ) From 1819ead93d3ff91e79289d625543a104cae69230 Mon Sep 17 00:00:00 2001 From: nesquena-hermes Date: Mon, 11 May 2026 06:03:12 +0000 Subject: [PATCH 11/15] docs: CHANGELOG v0.51.44 Release T (5-PR batch + test network isolation) --- CHANGELOG.md | 48 +++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 47 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 366f2d7f..6c6f75e8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,53 @@ ## [Unreleased] -- Fixed duplicate assistant messages in browser chat transcripts by ignoring adjacent assistant replay duplicates during server-side result merge while preserving identical assistant text across separate user turns (#2051). +## [v0.51.44] — 2026-05-11 — Release T (5-PR contributor batch — security + worktree sessions + LM Studio + onboarding docs + transcript dedup, plus comprehensive test-suite network isolation) + +### Added + +- **PR #2052** by @franksong2702 — `docs/onboarding.md` (181 lines) covering install path choices, safe wizard re-runs with isolated `HERMES_HOME` / `HERMES_WEBUI_STATE_DIR`, provider groups, Docker/local-server Base URL rules (the most common Discord support question — `localhost` inside a container is not the host running LM Studio or Ollama), workspace setup, password step, files written by the wizard, and issue-reporting diagnostics. README pointer added from the quick-start section and Docs list. Stale `~/.hermes/webui-mvp` → `~/.hermes/webui` correction in `.env.example` and the README env-var table (the running app uses `~/.hermes/webui` per `api/config.py:42`). + +- **PR #2053** by @franksong2702 — Worktree-backed session creation. `POST /api/session/new` accepts a `worktree: true` flag that calls the agent's `_setup_worktree()` helper to create an isolated git worktree at `/.worktrees/hermes-XXXX`, persists `worktree_path` / `worktree_branch` / `worktree_repo_root` / `worktree_created_at` on the WebUI `Session`, surfaces a "New conversation in worktree" action in the workspace menu, and shows a subtle sidebar worktree indicator. Empty worktree sessions stay visible in the sidebar (the empty-session filter at `api/models.py:1067/1107` exempts sessions with a `worktree_path`). Note: the underlying Hermes Agent helper may add `.worktrees/` to the repository `.gitignore` the first time a worktree is created for that repo — operators will see a small uncommitted edit to `.gitignore` after their first worktree session. Cleanup lifecycle (auto-remove on session delete/archive) is deliberately deferred to a follow-up PR — needs explicit safeguards for active streams, terminals, dirty files, and unpushed commits. Closes #1955. + +- **PR #1970** by @dobby-d-elf — First-class LM Studio provider support with live model discovery. A dedicated `elif pid == "lmstudio":` branch in `get_available_models()` calls `hermes_cli.provider_model_ids("lmstudio")` first, falling back to a direct GET `/models` request when env vars (`LM_API_KEY` + `LM_BASE_URL`) haven't been injected yet — this fixes the race where the provider's `.env` isn't loaded into `os.environ` before the picker runs. Detection in `detected_providers` now also fires on `LM_API_KEY` + `LM_BASE_URL` env vars and on `cfg["providers"]["lmstudio"]` config entries. The new `_get_provider_base_url()` helper plus the change to `resolve_model_provider()` from `return bare_model, provider_hint, None` to `return bare_model, provider_hint, _get_provider_base_url(provider_hint)` lets users with `providers..base_url` in `config.yaml` flow that URL through model resolution consistently (pre-fix they had to also set it under `cfg["model"]`). The "Configured" badge code from the initial PR submission was dropped per maintainer review — see PR #1970 thread for the UX discussion. + +### Fixed + +- **PR #2048** by @Hinotoi-agent — `[security]` Session import validates `workspace` field against `resolve_trusted_workspace()`. Pre-fix, a crafted JSON import with `"workspace": "/"` was persisted as the `Session.workspace`, after which `/api/file?session_id=&path=etc/hosts` resolved against `/` and served host files. The patch routes the imported value through the same resolver every other workspace-bearing endpoint already uses (`/api/session/new`, `/api/branch`, `/api/fork`, `/api/clone`), returning 400 on `ValueError` (blocked system root) or `TypeError` (non-path workspace value like `{"not": "a path"}`). Severity is highest on `0.0.0.0`-bound / reverse-proxied / LAN-exposed deployments with password auth where `PR:L` applies — there the bug turned "authenticated session creation" into "authenticated read of any process-readable file." Default loopback-only deployments without auth were lower risk because anyone on loopback can usually read `/etc/hosts` directly. Includes 105 LOC of regression coverage in `tests/test_session_import_workspace_validation.py` and a belt-and-braces invariant test against the resolver itself. + +- **PR #2055** by @franksong2702 — Duplicate assistant transcript merge. `_merge_display_messages_after_agent_result()` at `api/streaming.py:1754` now skips adjacent duplicate assistant messages by merge identity (`role + content + tool_call_id + json.dumps(tool_calls, sort_keys=True)`). Some provider/result replay paths produced two copies of the same assistant bubble in the current delta, which then got persisted into `s.messages` and sent back to the browser in the `done` SSE payload, producing duplicate assistant chat bubbles. The guard is intentionally adjacent-only so two separate turns that happen to produce identical assistant text remain visible — confirmed via the new negative-path test. Closes #2051. + +### Fixed (maintainer review on stage-337) + +- **PR #1970 lmstudio regression** — the new lmstudio branch in `get_available_models()` only looked at `cfg["providers"]["lmstudio"]["base_url"]`, missing the historical config shape where users put `base_url` under `cfg["model"]` when `model.provider == lmstudio`. Three pre-existing tests in `tests/test_issue1527_lmstudio_base_url_classification.py` broke on stage-337 because of this gap. The fix enhances `_get_provider_base_url()` to fall back to `cfg["model"]["base_url"]` when `cfg["model"]["provider"]` matches the requested provider id, then routes the lmstudio branch through the helper. Belt-and-suspenders negative-case test asserts `model.base_url` does NOT leak to non-active providers (so a user with `model.provider: anthropic` + `model.base_url: ` + `providers.openai` without base_url still gets None for openai, not the anthropic proxy URL). 6 new regression tests in `tests/test_pr1970_lmstudio_base_url_fallback.py`. + +- **PR #2053 × PR #2041 state.db worktree recovery silent data loss** — Opus advisor caught this during stage review. PR #2041 (v0.51.42) added state.db sidecar reconciliation that rebuilds a missing `.json` from the canonical state.db row. PR #2053 added worktree-backed sessions with new metadata fields. `_state_db_row_to_sidecar()` was hard-coding `'workspace': ''` and not propagating `worktree_path` / `worktree_branch` / `worktree_repo_root` / `worktree_created_at` / `message_count` from the row to the rebuilt sidecar. Result: a worktree-backed session that lost its JSON sidecar and got rebuilt from state.db disappeared from the sidebar (the empty-session filter at `api/models.py:1067` exempts sessions with `worktree_path`, but the rebuilt sidecar had none) and downstream tools (terminal panels, file pickers using `s.workspace`) operated on empty string. Fix: extend the `_read_state_db_missing_sidecar_rows()` SELECT to include the missing columns (each gated by `_sql_optional_col()` for older state.db schemas) and propagate them in `_state_db_row_to_sidecar()`. Three new regression tests in `tests/test_state_db_worktree_recovery.py` lock the round-trip, the non-worktree no-spurious-propagation case, and the empty-worktree-session-must-stay-visible invariant. + +### Test infrastructure + +- **Hermetic network isolation across the whole test suite.** Before this release, an accidentally-leaking outbound TLS handshake from the test_server fixture (Anthropic IPv6, Amazon, OpenRouter, observed via `ss -tnp` during stage-337 debugging) was adding 60+s of wall-time to pytest runs and creating a class of flaky failures. Two new layers now enforce no-outbound by default: + + 1. **Pytest process** (tests/conftest.py module-level monkey-patch on `socket.create_connection` + `socket.socket.connect`). Allowed destinations: loopback (`127.0.0.0/8`, `::1`), RFC1918 (`10/8`, `172.16/12`, `192.168/16`), link-local (`169.254/16`), RFC5737 TEST-NET-3 (`203.0.113/24`), RFC2606 reserved TLDs (`.invalid`, `.test`, `.example`, `.local`, `localhost`). Everything else raises `OSError("hermes test network isolation")`. Tests that legitimately need real outbound opt back in via the new `allow_outbound_network` fixture (zero current callers). + + 2. **test_server subprocess** (server.py). `HERMES_WEBUI_TEST_NETWORK_BLOCK=1` env var (set by tests/conftest.py on every spawn) activates an identical guard at the top of server.py at import time, before any api/* module loads. The env var is unset in production, so the guard is a no-op outside the test harness. Without this, the pytest-side block didn't cover the spawned subprocess. + +- **`test_dns_resolution_failure` refactored** to mock `socket.getaddrinfo` raising `gaierror` instead of relying on real DNS for a `*.invalid` hostname. Hermetic now, and matches the mock-based pattern every other test in the same file uses. + +- **`tests/test_conftest_network_isolation.py`** with 9 adversarial tests proving (a) outbound to the exact Anthropic IPv6 + Amazon IPv4 + Google DNS destinations we observed leaking is now blocked, (b) loopback / RFC1918 / link-local / reserved-TLD destinations pass through, (c) the `allow_outbound_network` opt-in fixture works. + +### Tests + +5,166 → **5,192 collected** (+26 net new across the 4 new regression test files). All passing on Python 3.11/3.12/3.13. Full suite wall-time: 161s → **95s** (the previously-leaking outbound TLS handshakes were the long tail). + +### Contributors + +@Hinotoi-agent (×1, first contribution) · @franksong2702 (×3) · @dobby-d-elf (×1, first contribution) · @nesquena (3 maintainer review fixes) + +### Notes + +- The state.db × worktree recovery interaction (PR #2053 × PR #2041) is the second case in two releases where Opus advisor caught a real cross-PR data-loss bug that neither PR's individual test suite would have surfaced (the first was the v0.51.43 CSS breakpoint asymmetry). The pattern is worth its weight — cross-PR adversarial review with grep-grounded prompts catches what unit tests miss when the failure mode lives at the seam between two features. + +- LM Studio support is now first-class. Live model discovery + base URL discovery from either `providers..base_url` OR `cfg["model"]["base_url"]` (when `model.provider` matches) means users with either config shape get a populated model picker without manual `config.yaml` edits. ## [v0.51.43] — 2026-05-11 — Release S (fused community PR — desktop sidebar collapse) From 23cfc9973839a704652ff7841d5eb7d539a7703d Mon Sep 17 00:00:00 2001 From: nesquena-hermes Date: Mon, 11 May 2026 06:06:58 +0000 Subject: [PATCH 12/15] fix(config): split hermes_cli and urlopen fallback in lmstudio branch (CI fix) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit CI on Python 3.13 (clean editable install, no hermes_cli package) was still failing the 3 lmstudio tests after the first fix attempt. Root cause: the outer try/except in the lmstudio branch was catching ImportError from `from hermes_cli.models import provider_model_ids`, hijacking the whole branch and silently skipping the urlopen fallback. Restructured into two independent tiers: 1. hermes_cli lookup in its own try/except — ImportError logs at DEBUG and continues with lm_ids=[]. 2. urlopen fallback runs unconditionally when lm_ids is empty, including after hermes_cli import failure. New regression test `test_lmstudio_fallback_works_when_hermes_cli_unavailable` explicitly blocks hermes_cli via sys.meta_path and verifies the lmstudio group still populates from the urlopen fallback. Without this test, the CI-vs-local divergence (local env had hermes_cli installed, CI didn't) would keep slipping through. All 12 lmstudio-related tests pass, including the 3 #1527 tests that broke on stage-337. --- api/config.py | 72 +++++++------- .../test_pr1970_lmstudio_base_url_fallback.py | 93 +++++++++++++++++++ 2 files changed, 131 insertions(+), 34 deletions(-) diff --git a/api/config.py b/api/config.py index ab304318..0c241ce5 100644 --- a/api/config.py +++ b/api/config.py @@ -3425,45 +3425,49 @@ def get_available_models() -> dict: elif pid == "lmstudio": # LM Studio is a local server — fetch live loaded models via # the OpenAI-compatible /v1/models endpoint (#WebUI). + # + # Two-tier lookup, each in its own try so a failure in one + # does not abort the other (the bug pattern that broke + # tests/test_issue1527_lmstudio_base_url_classification on + # CI environments where hermes_cli isn't importable — + # ImportError in the cli tier was hijacking the whole + # branch and silently skipping the urlopen fallback). raw_models = [] + lm_ids: list[str] = [] try: from hermes_cli.models import provider_model_ids as _provider_model_ids - lm_ids = _provider_model_ids("lmstudio") or [] - if not lm_ids: - # Fallback: fetch directly using config.yaml providers.lmstudio.base_url - # when env vars (LM_BASE_URL) aren't yet loaded into os.environ. - # This fixes the race where get_available_models() runs before - # the profile's .env has been injected into the process environment. - lm_cfg = cfg.get("providers", {}).get("lmstudio", {}) - if isinstance(lm_cfg, dict): - lm_base_url = _get_provider_base_url("lmstudio") or "" - lm_api_key = str(lm_cfg.get("api_key") or "").strip() - if lm_base_url: - headers = {"User-Agent": "OpenAI/Python 1.0"} - if lm_api_key: - headers["Authorization"] = f"Bearer {lm_api_key}" - endpoint = (lm_base_url + "/models").rstrip("/") - try: - import urllib.request as _urlreq - - req = _urlreq.Request(endpoint, method="GET", headers=headers) - with _urlreq.urlopen(req, timeout=5) as resp: - lm_data = json.loads(resp.read().decode()) - for m in (lm_data.get("data") or []): - if isinstance(m, dict): - mid = str(m.get("id") or "").strip() - if mid and {"id": mid, "label": mid} not in raw_models: - raw_models.append({"id": mid, "label": mid}) - except Exception: - pass # fall through to hermes_cli below - - if lm_ids: - raw_models = [ - {"id": mid, "label": mid} for mid in lm_ids - ] except Exception: - logger.warning("Failed to load LM Studio models from hermes_cli") + logger.debug("hermes_cli LM Studio lookup unavailable; using urlopen fallback") + + if lm_ids: + raw_models = [{"id": mid, "label": mid} for mid in lm_ids] + else: + # Fallback: fetch /models directly from the configured + # base URL. Looks for the URL in either + # `cfg["providers"]["lmstudio"]["base_url"]` or + # `cfg["model"]["base_url"]` (via _get_provider_base_url), + # so the historical model-block config shape still works. + lm_cfg = cfg.get("providers", {}).get("lmstudio", {}) or {} + lm_base_url = _get_provider_base_url("lmstudio") or "" + lm_api_key = str(lm_cfg.get("api_key") or "").strip() if isinstance(lm_cfg, dict) else "" + if lm_base_url: + headers = {"User-Agent": "OpenAI/Python 1.0"} + if lm_api_key: + headers["Authorization"] = f"Bearer {lm_api_key}" + endpoint = (lm_base_url + "/models").rstrip("/") + try: + import urllib.request as _urlreq + req = _urlreq.Request(endpoint, method="GET", headers=headers) + with _urlreq.urlopen(req, timeout=5) as resp: + lm_data = json.loads(resp.read().decode()) + for m in (lm_data.get("data") or []): + if isinstance(m, dict): + mid = str(m.get("id") or "").strip() + if mid and {"id": mid, "label": mid} not in raw_models: + raw_models.append({"id": mid, "label": mid}) + except Exception: + logger.debug("LM Studio /models fetch failed at %s", endpoint) if raw_models: models = _apply_provider_prefix(raw_models, pid, active_provider) diff --git a/tests/test_pr1970_lmstudio_base_url_fallback.py b/tests/test_pr1970_lmstudio_base_url_fallback.py index a93d030c..cb6c01d2 100644 --- a/tests/test_pr1970_lmstudio_base_url_fallback.py +++ b/tests/test_pr1970_lmstudio_base_url_fallback.py @@ -125,3 +125,96 @@ def test_get_provider_base_url_explicit_wins_over_model_fallback(): }, }) assert config._get_provider_base_url("lmstudio") == "http://correct:1234/v1" + + + +def test_lmstudio_fallback_works_when_hermes_cli_unavailable(tmp_path, monkeypatch): + """The lmstudio branch must populate models from the urlopen fallback even + when `from hermes_cli.models import provider_model_ids` raises ImportError. + + Pre-fix, the outer try/except in the lmstudio branch caught the ImportError + and silently aborted the whole branch, never running the urlopen fallback — + a CI-vs-local divergence where local environments with hermes_cli installed + worked, and CI (clean editable install) failed with empty model groups. + + Caught in CI on stage-337; fix splits the hermes_cli try from the urlopen + fallback so each runs independently. + """ + import json as _json + import socket as _socket + import sys + import urllib.request as _urlreq + + import api.config as config + + # Block hermes_cli import the way a CI runner without the package would. + blocked_modules = [name for name in list(sys.modules) if name == "hermes_cli" or name.startswith("hermes_cli.")] + for name in blocked_modules: + monkeypatch.delitem(sys.modules, name, raising=False) + + class _Blocker: + def find_module(self, name, path=None): + if name == "hermes_cli" or name.startswith("hermes_cli."): + return self + return None + + def load_module(self, name): + raise ImportError(f"hermes_cli blocked for test: {name}") + + blocker = _Blocker() + sys.meta_path.insert(0, blocker) + try: + # Set up a config that points lmstudio at a fake base_url under cfg.model. + cfgfile = tmp_path / "config.yaml" + cfgfile.write_text( + """ +model: + provider: lmstudio + default: qwen3.6-35b-a3b@q6_k + base_url: http://10.0.0.5:1234/v1 +providers: + lmstudio: + api_key: local-key +""", + encoding="utf-8", + ) + monkeypatch.setattr(config, "_get_config_path", lambda: cfgfile) + config.reload_config() + config.invalidate_models_cache() + + class _ModelsResponse: + def __enter__(self): + return self + + def __exit__(self, *args): + pass + + def read(self): + return _json.dumps( + {"data": [{"id": "qwen3.6-35b-a3b@q6_k"}, {"id": "another-model"}]} + ).encode() + + monkeypatch.setattr(_urlreq, "urlopen", lambda *_a, **_kw: _ModelsResponse()) + monkeypatch.setattr( + _socket, + "getaddrinfo", + lambda *_a, **_kw: [ + (_socket.AF_INET, _socket.SOCK_STREAM, 6, "", ("10.0.0.5", 0)) + ], + ) + + result = config.get_available_models() + groups = {g["provider_id"]: g for g in result["groups"]} + + # Fallback must succeed despite hermes_cli being unimportable. + assert "lmstudio" in groups, ( + f"lmstudio group missing when hermes_cli unavailable; groups={list(groups)}" + ) + model_ids = {m["id"] for m in groups["lmstudio"]["models"]} + assert "qwen3.6-35b-a3b@q6_k" in model_ids + assert "another-model" in model_ids + finally: + try: + sys.meta_path.remove(blocker) + except ValueError: + pass From 6d83d16016581ce6c830809c6a15a6506233943a Mon Sep 17 00:00:00 2001 From: nesquena-hermes Date: Mon, 11 May 2026 06:12:07 +0000 Subject: [PATCH 13/15] test(infra): tighten IPv6 unique-local check + replace self-passing fixture test MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two low-severity follow-ups from Opus regrounding review: 1. The IPv6 unique-local fc00::/7 check was `h.startswith('fc') or h.startswith('fd')` — too loose. It would also classify hostnames like 'food.example.com' or 'fdsa.test' as 'local' and silently let them through the block. Tightened to a regex match for canonical IPv6 syntax (`f[cd][0-9a-f]{0,2}:`) so only actual IPv6 addresses match. Same fix in both tests/conftest.py and server.py. 2. test_allow_outbound_network_fixture_unblocks was technically self-passing: it tried to connect to a *.invalid hostname, which is in the allow-list, so the real socket.create_connection would run regardless of whether the fixture toggled the block. Replaced with a public-IP-based test that actually proves the toggle works, plus a paired test_block_is_active_outside_the_fixture sanity test that proves the block is on without the fixture. Both follow-ups noted by Opus advisor as 'defer-OK' but trivial fixes so landing them in this batch. --- server.py | 11 +++++- tests/conftest.py | 7 +++- tests/test_conftest_network_isolation.py | 50 ++++++++++++++++-------- 3 files changed, 50 insertions(+), 18 deletions(-) diff --git a/server.py b/server.py index 15b59630..610527e1 100644 --- a/server.py +++ b/server.py @@ -29,13 +29,22 @@ if os.environ.get("HERMES_WEBUI_TEST_NETWORK_BLOCK", "").strip() in ("1", "true" _REAL_CREATE_CONN = socket.create_connection _REAL_SOCK_CONNECT = socket.socket.connect + import re as _re + + def _re_match_unique_local_ipv6(h): + """Match IPv6 fc00::/7 (canonical syntax). Tighter than startswith('fc') + so we don't mistakenly classify hostnames like 'food.example.com' as local.""" + return bool(_re.match(r"^f[cd][0-9a-f]{0,2}:", h)) + def _addr_is_local(host): if not isinstance(host, str): return False h = host.strip().lower() if not h: return False - if h in ("::1", "0:0:0:0:0:0:0:1") or h.startswith("fe80:") or h.startswith("fc") or h.startswith("fd"): + # IPv6 unique-local fc00::/7: require hex pair + colon to avoid + # matching hostnames like "food.example.com" or "fdsa.test". + if h in ("::1", "0:0:0:0:0:0:0:1") or h.startswith("fe80:") or _re_match_unique_local_ipv6(h): return True if h == "localhost" or h.endswith(".localhost"): return True diff --git a/tests/conftest.py b/tests/conftest.py index 503185b8..c25f7b27 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -216,7 +216,12 @@ def _hermes_addr_is_local(host: str) -> bool: if not h: return False # IPv6 loopback / link-local - if h in ('::1', '0:0:0:0:0:0:0:1') or h.startswith('fe80:') or h.startswith('fc') or h.startswith('fd'): + # IPv6 unique-local: fc00::/7 — any address starting with fc?? or fd?? (?? = hex pair). + # Loose "startswith('fc')" / "startswith('fd')" would also match the hostnames + # "food.example.com" or "fdsa.test", so require the second char to be a hex + # digit followed by either a colon or another hex digit (canonical IPv6 syntax). + import re as _re + if h in ('::1', '0:0:0:0:0:0:0:1') or h.startswith('fe80:') or _re.match(r'^f[cd][0-9a-f]{0,2}:', h): return True # Hostname allow-list (RFC2606/6761 reserved TLDs + localhost) if h == 'localhost' or h.endswith('.localhost'): diff --git a/tests/test_conftest_network_isolation.py b/tests/test_conftest_network_isolation.py index 94d47d07..204c0671 100644 --- a/tests/test_conftest_network_isolation.py +++ b/tests/test_conftest_network_isolation.py @@ -97,20 +97,38 @@ def test_public_ipv4_is_blocked(): assert _conftest._hermes_addr_is_local("204.0.113.0") is False # outside -def test_allow_outbound_network_fixture_unblocks(allow_outbound_network): - """When a test opts in to the fixture, real outbound works again.""" - # We use a real DNS lookup to a reserved invalid TLD — the fixture should - # let us BYPASS the block, and the real DNS will fail with gaierror. The - # difference: pre-fixture, our wrapper raises OSError("hermes test network - # isolation"). With fixture, we get the real gaierror or a connect error, - # not our wrapper's message. - with pytest.raises((OSError, socket.gaierror)) as exc_info: - socket.create_connection( - ("this-definitely-cannot-resolve-zxq987.invalid", 443), - timeout=1, - ) - msg = str(exc_info.value) - # Must NOT be our wrapper's message. - assert "hermes test network isolation" not in msg, ( - f"allow_outbound_network fixture should disable the block, but got: {msg}" +def test_allow_outbound_network_fixture_disables_the_block_for_a_public_ip(allow_outbound_network): + """When a test opts in to the fixture, the block does NOT fire on a + destination that is otherwise blocked. + + Uses 8.8.8.8 (Google DNS, a real public IPv4 not in any allow-list) + so we can prove the fixture actually disabled the wrapper. Without + the fixture, the wrapper would raise OSError("hermes test network + isolation: ..."). With the fixture, the real socket.create_connection + runs and we either succeed (port 53 is genuinely open) or fail with + a *real* connect error — never with our wrapper's message. + """ + err_msg = "" + try: + sock = socket.create_connection(("8.8.8.8", 53), timeout=2) + sock.close() + # Success is fine — proves the wrapper got out of the way. + return + except OSError as e: + err_msg = str(e) + + # If we did get an OSError, it must NOT be from our wrapper. + assert "hermes test network isolation" not in err_msg, ( + f"allow_outbound_network fixture should disable the block, but got: {err_msg}" ) + + +def test_block_is_active_outside_the_fixture(): + """Sanity: a test that does NOT request the fixture has the block active. + + Pairs with the test above to prove the fixture toggle is real — without + this paired test the fixture test would self-pass even if the toggle + didn't work (since the block is on by default and the wrapper-or-real + distinction is what matters).""" + with pytest.raises(OSError, match="hermes test network isolation"): + socket.create_connection(("8.8.8.8", 53), timeout=1) From d9bc8360a433259f3c9289836f86fe936f9bb867 Mon Sep 17 00:00:00 2001 From: nesquena-hermes Date: Mon, 11 May 2026 06:15:46 +0000 Subject: [PATCH 14/15] test(infra): fixture swaps real functions via monkeypatch (CI-robust) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit CI on Python 3.11 still failed test_allow_outbound_network_fixture_* because the previous module-global toggle (_ALLOW_OUTBOUND=True/False) was unreliable on the runner — the wrapper's global lookup at call time sometimes saw False even after the fixture's True assignment. Switch to monkeypatch-based fixture: instead of toggling a global that the wrapper checks, restore socket.create_connection and socket.socket.connect to their REAL captured implementations for the duration of the test. Pytest's monkeypatch fixture handles teardown so the wrappers are reinstalled automatically. Rewrote the two paired tests to check function identity (socket.create_connection is _hermes_blocked_create_connection vs. is _REAL_CREATE_CONNECTION) instead of attempting a live outbound to 8.8.8.8:53 — direct identity check is hermetic and doesn't depend on whether the CI runner has any outbound network access at all. --- tests/conftest.py | 29 ++++++------- tests/test_conftest_network_isolation.py | 55 ++++++++++++------------ 2 files changed, 40 insertions(+), 44 deletions(-) diff --git a/tests/conftest.py b/tests/conftest.py index c25f7b27..8b993538 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -205,8 +205,6 @@ import socket as _hermes_test_socket _REAL_CREATE_CONNECTION = _hermes_test_socket.create_connection _REAL_SOCKET_CONNECT = _hermes_test_socket.socket.connect -_ALLOW_OUTBOUND = False # toggled by the allow_outbound_network fixture - def _hermes_addr_is_local(host: str) -> bool: """Return True for loopback / RFC1918 / link-local / reserved-TLD hosts.""" @@ -258,8 +256,6 @@ def _hermes_addr_is_local(host: str) -> bool: def _hermes_blocked_create_connection(address, *a, **kw): - if _ALLOW_OUTBOUND: - return _REAL_CREATE_CONNECTION(address, *a, **kw) try: host = address[0] except (TypeError, IndexError): @@ -274,8 +270,6 @@ def _hermes_blocked_create_connection(address, *a, **kw): def _hermes_blocked_socket_connect(self, address): - if _ALLOW_OUTBOUND: - return _REAL_SOCKET_CONNECT(self, address) try: host = address[0] except (TypeError, IndexError): @@ -292,19 +286,22 @@ _hermes_test_socket.socket.connect = _hermes_blocked_socket_connect @pytest.fixture -def allow_outbound_network(): +def allow_outbound_network(monkeypatch): """Opt-in to real outbound network for the duration of one test. - Use sparingly. Today only `test_dns_resolution_failure` needs this — - it intentionally exercises a real DNS lookup on a reserved-TLD hostname - to verify the probe maps `socket.gaierror` to `error='dns'`. + Swaps `socket.create_connection` and `socket.socket.connect` back to the + real (unwrapped) implementations for this test only, then monkeypatch + teardown restores the wrapped versions. Direct swap is more reliable + than a module-global toggle on CI runners where wrapper-closure + lookup semantics can surprise. + + Use sparingly. Today zero tests in the repo call this — the previous + test_dns_resolution_failure case was rewritten to mock socket.getaddrinfo + instead, which is fully hermetic. """ - global _ALLOW_OUTBOUND - _ALLOW_OUTBOUND = True - try: - yield - finally: - _ALLOW_OUTBOUND = False + monkeypatch.setattr(_hermes_test_socket, "create_connection", _REAL_CREATE_CONNECTION) + monkeypatch.setattr(_hermes_test_socket.socket, "connect", _REAL_SOCKET_CONNECT) + yield diff --git a/tests/test_conftest_network_isolation.py b/tests/test_conftest_network_isolation.py index 204c0671..8326a6cd 100644 --- a/tests/test_conftest_network_isolation.py +++ b/tests/test_conftest_network_isolation.py @@ -97,38 +97,37 @@ def test_public_ipv4_is_blocked(): assert _conftest._hermes_addr_is_local("204.0.113.0") is False # outside -def test_allow_outbound_network_fixture_disables_the_block_for_a_public_ip(allow_outbound_network): - """When a test opts in to the fixture, the block does NOT fire on a - destination that is otherwise blocked. +def test_allow_outbound_network_fixture_unswaps_the_wrappers(allow_outbound_network): + """When a test opts in to the fixture, socket.create_connection and + socket.socket.connect are restored to their real (unwrapped) implementations + for this test only. - Uses 8.8.8.8 (Google DNS, a real public IPv4 not in any allow-list) - so we can prove the fixture actually disabled the wrapper. Without - the fixture, the wrapper would raise OSError("hermes test network - isolation: ..."). With the fixture, the real socket.create_connection - runs and we either succeed (port 53 is genuinely open) or fail with - a *real* connect error — never with our wrapper's message. + Direct identity check is safer than a behavioral test: it doesn't depend + on whether the CI runner has outbound network access, only on whether the + fixture's monkeypatch actually swapped the symbols. """ - err_msg = "" - try: - sock = socket.create_connection(("8.8.8.8", 53), timeout=2) - sock.close() - # Success is fine — proves the wrapper got out of the way. - return - except OSError as e: - err_msg = str(e) - - # If we did get an OSError, it must NOT be from our wrapper. - assert "hermes test network isolation" not in err_msg, ( - f"allow_outbound_network fixture should disable the block, but got: {err_msg}" + import tests.conftest as _conftest + # Inside the fixture, socket.create_connection should be the REAL one + # (the one captured before the module-level wrap), not the blocked wrapper. + assert socket.create_connection is _conftest._REAL_CREATE_CONNECTION, ( + "allow_outbound_network fixture did not restore the real create_connection" + ) + assert socket.socket.connect is _conftest._REAL_SOCKET_CONNECT, ( + "allow_outbound_network fixture did not restore the real socket.connect" ) def test_block_is_active_outside_the_fixture(): - """Sanity: a test that does NOT request the fixture has the block active. + """Sanity: a test that does NOT request the fixture has the wrapped + socket.create_connection installed (not the real one). - Pairs with the test above to prove the fixture toggle is real — without - this paired test the fixture test would self-pass even if the toggle - didn't work (since the block is on by default and the wrapper-or-real - distinction is what matters).""" - with pytest.raises(OSError, match="hermes test network isolation"): - socket.create_connection(("8.8.8.8", 53), timeout=1) + Pairs with the test above to prove the fixture swap is real — the + fixture test confirms the unswap; this test confirms the default-on + state.""" + import tests.conftest as _conftest + assert socket.create_connection is _conftest._hermes_blocked_create_connection, ( + "default state should have the blocked wrapper installed on socket.create_connection" + ) + assert socket.socket.connect is _conftest._hermes_blocked_socket_connect, ( + "default state should have the blocked wrapper installed on socket.socket.connect" + ) From cd7107cefba457c154b40f45b587ee1be5ab209c Mon Sep 17 00:00:00 2001 From: nesquena-hermes Date: Mon, 11 May 2026 06:18:13 +0000 Subject: [PATCH 15/15] test(infra): identity check by qname (CI re-imports conftest under multiple roots) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit CI's pytest invocation imports conftest twice (once via the standard tests/ discovery, once via repo-root rootdir discovery), producing two distinct function objects with the same __qualname__ but different `is` identity. The strict identity assertion failed because each import created a fresh closure. Switch to __qualname__ substring check — same guarantee (default-on state has the wrapper installed; fixture restores the real one) without the multi-import sensitivity. --- tests/test_conftest_network_isolation.py | 43 +++++++++++------------- 1 file changed, 20 insertions(+), 23 deletions(-) diff --git a/tests/test_conftest_network_isolation.py b/tests/test_conftest_network_isolation.py index 8326a6cd..5e43e0bc 100644 --- a/tests/test_conftest_network_isolation.py +++ b/tests/test_conftest_network_isolation.py @@ -102,32 +102,29 @@ def test_allow_outbound_network_fixture_unswaps_the_wrappers(allow_outbound_netw socket.socket.connect are restored to their real (unwrapped) implementations for this test only. - Direct identity check is safer than a behavioral test: it doesn't depend - on whether the CI runner has outbound network access, only on whether the - fixture's monkeypatch actually swapped the symbols. + Check by qname so this is robust against pytest re-importing conftest + under multiple roots (which produces two distinct function objects with + the same __qualname__ but different `is` identity). """ - import tests.conftest as _conftest - # Inside the fixture, socket.create_connection should be the REAL one - # (the one captured before the module-level wrap), not the blocked wrapper. - assert socket.create_connection is _conftest._REAL_CREATE_CONNECTION, ( - "allow_outbound_network fixture did not restore the real create_connection" - ) - assert socket.socket.connect is _conftest._REAL_SOCKET_CONNECT, ( - "allow_outbound_network fixture did not restore the real socket.connect" - ) + # Inside the fixture, the symbol should NOT be the blocked wrapper. + assert "_hermes_blocked_create_connection" not in getattr( + socket.create_connection, "__qualname__", "" + ), "allow_outbound_network fixture did not restore the real create_connection" + assert "_hermes_blocked_socket_connect" not in getattr( + socket.socket.connect, "__qualname__", "" + ), "allow_outbound_network fixture did not restore the real socket.connect" def test_block_is_active_outside_the_fixture(): """Sanity: a test that does NOT request the fixture has the wrapped - socket.create_connection installed (not the real one). + socket.create_connection installed. - Pairs with the test above to prove the fixture swap is real — the - fixture test confirms the unswap; this test confirms the default-on - state.""" - import tests.conftest as _conftest - assert socket.create_connection is _conftest._hermes_blocked_create_connection, ( - "default state should have the blocked wrapper installed on socket.create_connection" - ) - assert socket.socket.connect is _conftest._hermes_blocked_socket_connect, ( - "default state should have the blocked wrapper installed on socket.socket.connect" - ) + Check by qname so this is robust against pytest re-importing conftest + under multiple roots (which produces two distinct function objects with + the same __qualname__ but different `is` identity).""" + assert "_hermes_blocked_create_connection" in getattr( + socket.create_connection, "__qualname__", "" + ), "default state should have the blocked wrapper installed on socket.create_connection" + assert "_hermes_blocked_socket_connect" in getattr( + socket.socket.connect, "__qualname__", "" + ), "default state should have the blocked wrapper installed on socket.socket.connect"