Release exp-batch1: MIME safety (#6372), atomic config writes (#5797), ctl.sh foreign-instance guard (#5944)

This commit is contained in:
nesquena-hermes committed 2026-07-22 18:58:03 +00:00
1 parent cd9fd7a8e7
commit 35834d49de
1 file changed
+5 -1
+5 -1
View File
@@ -19,7 +19,11 @@
### Fixed
- **Alias-prefixed models now route to the right provider.** When you pick a namespaced model whose prefix is a provider *alias* (e.g. `z-ai/glm-5.2`, where `z-ai` is an alias of the canonical `zai`) under a different active provider, the WebUI resolver now canonicalizes the prefix before deciding whether to cross-route through OpenRouter — so it reaches OpenRouter instead of falling back to the stale configured provider (which produced auth/404 failures). The comparison canonicalizes both sides, so a model selected under an alias of its *own* provider is correctly treated as same-provider (not cross-routed), and OpenRouter selections like Qwen/xAI keep routing to OpenRouter. Thanks @webtecnica. (#6148, #6131)
- **TypeScript source files served from the workspace no longer risk same-origin script execution.** `.ts` and `.tsx` files fetched via the file-raw path are now served as `text/plain` instead of an executable content type, closing an XSS vector where a workspace `.ts` file could run inline in the browser. `.js`/`.jsx` remain `application/octet-stream` (non-executable) as before, and no other content-type contract changed. Thanks @webtecnica. (#6372, #6374)
- **`config.yaml` is now written atomically so a crash mid-write can't corrupt it.** Config saves (settings, onboarding, and profile writes) previously used an in-place write, so a crash, full disk, or power loss between open and full write could leave `config.yaml` truncated or empty. All config writers now route through a shared same-directory temp file → `fsync` → `os.replace`, preserving the file's existing permission mode and writing through symlinks. Thanks @ai-ag2026. (#5797, #5774)
- **`ctl.sh` no longer double-starts a WebUI that another supervisor already owns.** `ctl.sh start` now detects a systemd-managed instance or any live server already answering on the port (mirroring `server.py`'s own already-serving check) and refuses to spawn a duplicate, and `stop`/`status` correctly surface a running-but-unmanaged foreign instance instead of reporting "stopped." Normal managed start/stop/status is unchanged. Thanks @ai-ag2026. (#5944)
- **Per-model reasoning-effort metadata is now honored by the WebUI reasoning picker.** When resolving which reasoning modes a model exposes, a `models.<model>.reasoning_efforts` list (as Hermes Agent stores under `custom_providers[].models`) now takes precedence over the provider-wide `reasoning_efforts` list, falling back to the provider list and then heuristics. This lets a model with its own declared modes (e.g. an unrecognized custom model) expose them without a provider-wide override. Configs that only set a provider-level list are completely unaffected — output is byte-identical to before. Thanks @CharlesMcquade. (#6107)