Skip to content

Tags: lost9999/hermes-webui

Tags

v0.50.239

Toggle v0.50.239's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
release: v0.50.239

h4-h6 heading fix. Approved by @nesquena. Tests: 3064 passed.

v0.50.238

Toggle v0.50.238's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
release: v0.50.238

Batch release — 12 PRs. Approved by @nesquena. Tests: 3061 passed.

v0.50.237

Toggle v0.50.237's commit message
fix+feat: batch v0.50.237 — 21 PRs (embedded terminal, JSON/diff view…

…ers, MCP UI, cron tracking, workspace CRUD, archive upload, DeepSeek V4, NVIDIA NIM, security fixes) (nesquena#1243)

v0.50.236

Toggle v0.50.236's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
fix+feat: batch v0.50.236 — OAuth providers fix, profile switch UX, Y…

…OLO mode (nesquena#1211)

fix+feat: batch v0.50.236 — OAuth providers fix, profile switch UX, YOLO mode (nesquena#1211)

Merges PRs nesquena#1208, nesquena#1209, nesquena#1210 (nesquena#1152 rebased):

- fix(providers): OAuth provider cards show correct Configured status in Settings.
  get_providers() was discarding has_key=True from _provider_has_key() for OAuth
  providers, hiding config.yaml tokens. Also fixed filter excluding all OAuth providers
  from the Settings panel. Surfaces auth_error string. (closes nesquena#1202)

- ux(profiles): profile chip shows spinner and new name immediately on switch.
  Optimistic name update + .switching CSS class + chip disabled + finally cleanup.
  populateModelDropdown() and loadWorkspaceList() now parallelized via Promise.all.

- feat: YOLO mode toggle — skip all approvals per session.
  /yolo slash command, "Skip all this session" button on approval cards,
  amber ⚡ pill indicator in composer footer. Session-scoped, in-memory.
  Full i18n: en, ru, es, de, zh, ko, zh-Hant. (closes nesquena#467)
  Original author: @bergeouss (PR nesquena#1152)

Tests: 2837 passed (+50 new tests vs previous release)
QA harness: 20/20 passed + all browser API checks passed

v0.50.235

Toggle v0.50.235's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
fix: batch v0.50.234-235 — XSS hardening, workspace validation, profi…

…le switch fixes (nesquena#1206)

fix: batch v0.50.234-235 — XSS hardening, workspace validation, profile switch fixes

v0.50.235 (nesquena#1203 — profile switch workspace/model/chip, 3 bugs + flaky test):
- switch_profile now reads target profile's workspace directly (thread-local bypass)
- invalidate_models_cache() after profile switch (model dropdown staleness)
- syncTopbar() updates chip before early-return (no-session path)

v0.50.234 (nesquena#1201/nesquena#1205 — XSS hardening + workspace security):
- renderMd() full HTML attribute sanitizer replacing tag-name-only allowlist
- Delegated image lightbox (removes all inline onclick)
- macOS /etc → /private/etc symlink bypass fixed
- /System /Library added to blocked workspace roots
- Legacy /api/chat workspace trust gap closed

Both PRs independently reviewed. 2787/2787 tests. QA harness 20/20 + 11/11 API checks.

Co-authored-by: Brendan Schmid <bschmidy10@Wilson.bschmidy10>
Co-authored-by: Nathan Esquenazi <nesquena@gmail.com>

v0.50.233

Toggle v0.50.233's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
fix(workspace): Allow /var/home workspaces (nesquena#1199)

fix(workspace): Allow /var/home workspaces (nesquena#1199)

Carries code from @frap129's PR nesquena#1199. On systemd-homed (Fedora/RHEL),
home lives under /var/home/<user> — blocked by _is_blocked_system_path
because /var is in the blocked roots list. Fix: trust any path under
Path.home() as long as home != /. Also adds symmetric early-return
in validate_workspace_to_add.

2764 tests pass.

Co-authored-by: Joe Maples <joe@maples.dev>

v0.50.232

Toggle v0.50.232's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
fix: batch v0.50.232 — fuzzy match, codex detection, workspace reload…

…, timestamp sync (nesquena#1198)

Batch release v0.50.232 — 4 fixes.

## PRs included

| PR | Author | Fix |
|---|---|---|
| nesquena#1192 | @nesquena-hermes | Model chip fuzzy-match false positive (nesquena#1188) |
| nesquena#1193 | @nesquena-hermes | openai-codex not detected in model picker (nesquena#1189) |
| nesquena#1196 | @nesquena-hermes | Workspace files blank after second empty-session reload |
| nesquena#1197 | @bergeouss | Session timestamps wrong with server/client clock drift (nesquena#1144) |

All four PRs independently reviewed and approved by @nesquena.

## Integration fixes applied

**nesquena#1193:** Updated misleading comment — `OPENAI_API_KEY` does NOT authenticate the default Codex OAuth endpoint (that uses `chatgpt.com/backend-api/codex` and requires a separate OAuth flow). The comment now accurately states the known limitation. Also replaced a fragile 400-char source-scan test with an isolation-safe unit test. Note: OAuth-authenticated users already get detected via `hermes_cli.auth` — this fix only addresses the env-var fallback path.

## Test results

**2764 passed, 2 skipped** (macOS-only workspace tests). Browser QA: **21/21**. `/api/sessions` confirmed returning `server_time` and `server_tz` fields.

v0.50.231

Toggle v0.50.231's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
fix: batch v0.50.231 — macOS symlink bypass, workspace panel, fenced …

…code leak (nesquena#1194)

Batch release v0.50.231 — 3 fixes.

## PRs included

| PR | Author | Fix |
|---|---|---|
| nesquena#1186 | @nesquena (Claude Code) | macOS `/etc` symlink bypass in workspace blocked-roots |
| nesquena#1187 | @nesquena-hermes | Workspace panel stuck closed after empty-session reload |
| nesquena#1190 | @bergeouss | Fenced code content leaking into markdown passes (nesquena#1154) |

All three PRs were independently reviewed and approved by @nesquena.

## Test results

**2729 passed, 2 skipped** (2 macOS-only tests correctly skipped on Linux). Browser QA: **21/21**.

## Key fix notes

**nesquena#1186:** `_workspace_blocked_roots()` now returns both literal and `Path.resolve()` forms of each blocked root. macOS symlinks (`/etc → /private/etc`) previously let a resolved candidate slip past the literal check. New `_is_blocked_system_path()` helper with `/var/folders` and `/var/tmp` carve-outs for pytest temp dirs.

**nesquena#1187:** Regression from nesquena#1182 — `syncWorkspacePanelState()` force-closed on any no-session state. Now only closes in `'preview'` mode. Both boot paths restore localStorage panel pref before sync.

**nesquena#1190:** Fenced code blocks are now stashed as `\x00P<n>\x00` tokens through ALL markdown passes (list/heading/table regexes), restored at the very end. Previously, diff hunks and markdown headings inside code blocks triggered those regexes, injecting `<ul>/<li>/<h>` tags that broke `</pre>` closure.

v0.50.230

Toggle v0.50.230's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
fix(models): defer first save() until session has real state (v0.50.2…

…30) (nesquena#1185)

Merged as v0.50.230. 2685 tests passing. Browser QA 21/21.

Closes the orphan-files leg of nesquena#1171. `new_session()` no longer writes an empty session to disk — the first disk write is deferred until the session has real state. Verified live: `POST /api/session/new` creates no `.json` file; session is findable by GET from in-memory SESSIONS dict.

Attribution: original PR nesquena#1184 by @nesquena (Claude Code).

v0.50.229

Toggle v0.50.229's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
fix: batch v0.50.229 — session perf, ephemeral sessions, iOS zoom (ne…

…squena#1183)

Merged as v0.50.229. 2678 tests passing. Browser QA 21/21.

All three PRs were independently reviewed and approved by @nesquena with reviewer commits pulled in:
- nesquena#1181 (nesquena#1158): `d974388` (stale-response race in _loadOlderMessages)
- nesquena#1182: `7e20006` (full-scan fallback path consistency)
- nesquena#1180: `a5ad154` (regression test for iOS zoom threshold)

Thanks @jasonjcwu (nesquena#1158)!