Commit Graph
2273 Commits
Author SHA1 Message Date
Michael Lam 2fdc1d99e2 fix: expand legacy Hermes CLI toolset alias 2026-05-15 13:08:22 -07:00
nesquena-hermes 2170846031 Merge pull request #2320 from nesquena/stage-360
stage-360: 3-PR streaming-lane batch — stream completion recovery + profile-scoped aux routing + workspace panel polish (with _ENV_LOCK architectural fix)
2026-05-15 12:11:59 -07:00
Hermes Agent a8a27eeb7d stage-360: Opus follow-up — update _ENV_LOCK docstring to reflect narrow-lock semantics
Opus stage-360 review caught that the docstring at api/streaming.py:40-43
said 'around the entire agent run' which is no longer accurate after the
narrow-lock refactor. The lock is now held only briefly for the env-mutation
critical section; the agent runs outside the lock and the finally block
re-acquires to atomically restore env vars.

Docstring now points to both narrow-lock implementations as references:
- _run_agent_streaming at line ~2719 (the original pattern)
- profile_env_for_background_worker at api/profiles.py:715 (added stage-360)
2026-05-15 19:05:37 +00:00
Hermes Agent 803ab170d8 stage-360: align test_sprint29::TestENVLock with non-reentrant invariant from QA
#2299 added test_env_lock_importable_from_streaming asserting reentrance,
which contradicts the architectural invariant enforced by QA
test_env_lock_is_non_reentrant. The QA test wins because the non-reentrant
property is what makes _ENV_LOCK catch deadlock bugs early.

Updated the new test to assert NON-reentrance to match the actual lock
type (threading.Lock) and the QA invariant.
2026-05-15 17:12:29 +00:00
Hermes Agent fb0e664a10 stage-360 maintainer fix: narrow _ENV_LOCK to env mutation only in profile_env_for_background_worker
#2299 introduced profile_env_for_background_worker() in api/profiles.py and
changed _ENV_LOCK from threading.Lock() to threading.RLock(). Both changes
were incorrect:

1. RLock masked rather than fixed the underlying deadlock. The QA
   test_env_lock_is_non_reentrant test exists precisely to enforce
   non-reentrance — RLock would let a single thread hold _ENV_LOCK across
   nested critical sections, which hides bugs while still allowing
   different-thread races.

2. The original context manager held _ENV_LOCK for the ENTIRE 'yield'
   duration, meaning the lock was held for the full background worker's
   runtime (title generation, compression, update summary — possibly
   many seconds). That blocked ALL other sessions on _ENV_LOCK, which
   the QA test_third_message_completes runtime test caught as a timeout
   on the third sequential message.

Fix: mirror the narrow-lock pattern from _run_agent_streaming:
  - Acquire _ENV_LOCK only for env mutation (set runtime_env + patch
    skill modules)
  - Release immediately, yield to worker (no lock held)
  - Reacquire in finally to restore env + skill modules

Restored _ENV_LOCK back to threading.Lock(). All 20 QA tests now pass,
including test_third_message_completes (was timing out, now 35s).
2026-05-15 17:11:45 +00:00
Hermes Agent f1bb73a7f2 docs: CHANGELOG stage-360 — close v0.51.66 (stage-359), open Unreleased for 3-PR stage-360 batch 2026-05-15 16:16:50 +00:00
Hermes Agent 3b05929f1a Merge pull request #2299 into stage-360
Fix profile-scoped auxiliary routing for background workers (starship-s)
2026-05-15 16:15:39 +00:00
Hermes Agent b2ebbebf01 Merge pull request #2279 into stage-360
Fix WebUI stream completion recovery gaps (franksong2702, closes #2262 + #2168)
2026-05-15 16:15:38 +00:00
Hermes Agent 36d82f1aa1 Merge pull request #2306 into stage-360
Fix iPhone PWA mobile shell and workspace header layout — workspace panel polish + test cleanup (dobby-d-elf, follow-up to stage-359 #2306)
2026-05-15 16:15:36 +00:00
dobby-d-elf fe1689caef style: remove opacity from .close-preview so X button matches other panel icons 2026-05-15 09:43:18 -06:00
dobby-d-elf 0f86030f5f fix: single close button on workspace panel, tooltip → 'Close'
- Remove duplicate mobile-close-btn from HTML
- Remove dead .mobile-close-btn CSS rules; unhide .close-preview at all viewports
- Change btnClearPreview tooltip from 'Hide workspace panel' to 'Close'
- Update tests across test_sprint41.py, test_sprint44.py, test_issue781.py,
  and test_mobile_layout.py to match new single-button model
2026-05-15 09:43:18 -06:00
dobby-d-elf acce80a50a fix workspace panel header test syntax 2026-05-15 09:43:18 -06:00
dobby-d-elf 0e9017a665 refine workspace panel header layout 2026-05-15 09:43:18 -06:00
nesquena-hermes 6f22fe567c Merge pull request #2311 from nesquena/stage-359
stage-359: 17-PR safe-lane batch — Docker fixes + UI polish + compression snapshot improvements + i18n parity + profile validation
2026-05-15 08:31:38 -07:00
Hermes Agent 75a2464821 stage-359: apply Opus SHOULD-FIX — symmetric runtime-field clearing on snapshot load-and-mark path 2026-05-15 15:27:24 +00:00
Hermes Agent 4c102eaad5 docs: CHANGELOG stage-359 — close v0.51.65 (stage-358), open Unreleased for 17-PR stage-359 with proper attribution 2026-05-15 15:10:39 +00:00
Hermes Agent fb8b91019e Merge pull request #2295 into stage-359
fix: clear runtime fields on compression snapshots (ai-ag2026)

# Conflicts:
#	CHANGELOG.md
#	api/streaming.py
2026-05-15 15:06:35 +00:00
Hermes Agent 4826a31fbc Merge pull request #2285 into stage-359
fix: hide pre-compression snapshots from sidebar (dso2ng, refs #2230)

# Conflicts:
#	CHANGELOG.md
2026-05-15 14:55:19 +00:00
Hermes Agent 90fd16e273 Merge pull request #2306 into stage-359
Fix iPhone PWA mobile shell and workspace header layout (dobby-d-elf, regression fix for #2238)
2026-05-15 14:55:17 +00:00
Hermes Agent d510b8d2d5 Merge pull request #2303 into stage-359
Add assistant question jump buttons (franksong2702, fixes #2246)

# Conflicts:
#	CHANGELOG.md
2026-05-15 14:55:15 +00:00
Hermes Agent f7d98cdf3f Merge pull request #2301 into stage-359
Add cron detail expansion controls (franksong2702, fixes #2289)
2026-05-15 14:55:13 +00:00
Hermes Agent b28a132f91 Merge pull request #2296 into stage-359
fix: align offline banner with active theme palette (Jordan-SkyLF)

# Conflicts:
#	CHANGELOG.md
2026-05-15 14:55:12 +00:00
Hermes Agent ad76db8651 Merge pull request #2291 into stage-359
feat: add Nous Research skin (linuxid10t)
2026-05-15 14:55:10 +00:00
Hermes Agent 8e610ce790 Merge pull request #2288 into stage-359
fix: prevent theme reset on refresh when autosave failed (linuxid10t)
2026-05-15 14:55:09 +00:00
Hermes Agent 49597df554 Merge pull request #2302 into stage-359
Validate profile model selections (franksong2702, refs #749 follow-up)

# Conflicts:
#	CHANGELOG.md
2026-05-15 14:55:08 +00:00
Hermes Agent 4365758a78 Merge pull request #2287 into stage-359
feat: make upload size limit runtime-configurable (mslovy, refs #2284)
2026-05-15 14:55:06 +00:00
Hermes Agent 7d10539852 Merge pull request #2282 into stage-359
Keep unknown update summary bullets (franksong2702, refs #2264)

# Conflicts:
#	CHANGELOG.md
2026-05-15 14:55:05 +00:00
Hermes Agent e960285d55 Merge pull request #2281 into stage-359
Classify onboarding DNS probe failures consistently (franksong2702, refs #2260)

# Conflicts:
#	CHANGELOG.md
2026-05-15 14:55:03 +00:00
Hermes Agent 32c1e8319c Merge pull request #2280 into stage-359
Fix settings i18n parity coverage (franksong2702, closes #2276)
2026-05-15 14:55:02 +00:00
Hermes Agent b01fb0e7ff Merge pull request #2275 into stage-359
fix: load CLI continuation session transcripts (ai-ag2026)
2026-05-15 14:55:01 +00:00
Hermes Agent 29db680f0a Merge pull request #2293 into stage-359
Skip agent git objects during Docker chown (franksong2702, refs #2237)
2026-05-15 14:54:59 +00:00
Hermes Agent 4dcf523f0c Merge pull request #2300 into stage-359
Tighten silent failure shrink detection (franksong2702, refs #2240)
2026-05-15 14:54:58 +00:00
Hermes Agent adbbf0e507 Merge pull request #2277 into stage-359
fix: support rootless container runtimes (eleboucher)
2026-05-15 14:54:56 +00:00
dobby-d-elf 256b9d6294 fix: restore iPhone PWA mobile workspace layout 2026-05-15 08:14:53 -06:00
Frank Song 05a5ed5af1 Add assistant question jump buttons 2026-05-15 19:39:27 +08:00
Frank Song 1fb047b51a Validate profile model selections 2026-05-15 18:36:38 +08:00
starship-s abb6057304 test(profiles): keep profile module reloads isolated 2026-05-15 04:14:09 -06:00
Frank Song 079d6b4e86 Add cron detail expansion controls 2026-05-15 18:04:53 +08:00
Frank Song cadcf983d5 Tighten silent failure shrink detection 2026-05-15 18:04:53 +08:00
starship-s 4ffecdd7c9 refactor(profiles): consolidate background profile env 2026-05-15 03:58:40 -06:00
Dennis Soong eb31b4ed1e test: tighten compression snapshot preservation coverage 2026-05-15 17:31:37 +08:00
starship-s f38c70415f test(profiles): allow reentrant env lock 2026-05-15 03:09:16 -06:00
starship-s aa1c7c24f4 fix(profiles): route background aux workers via session profile 2026-05-15 03:02:42 -06:00
Jordan SkyLF fb869bbeb3 Add offline banner comparison screenshots 2026-05-15 01:51:35 -07:00
Jordan SkyLF 2601d41149 Add offline banner theme screenshots 2026-05-15 01:03:48 -07:00
Jordan SkyLF b7f8b97e76 Fix offline banner warning theme colors 2026-05-15 00:40:21 -07:00
ai-ag2026 3a4259476d fix: clear runtime fields on compression snapshots 2026-05-15 09:20:19 +02:00
Frank Song a90c0f6782 Skip agent git objects during Docker chown 2026-05-15 13:50:36 +08:00
linuxid10t b2d4f13c5b feat: add Nous Research skin
Adds a cold steel-blue/monospace skin inspired by nousresearch.com:
- Steel-blue accent (#4682B4) replacing warm gold
- Monospace typography (SF Mono, Roboto Mono, Courier New)
- Sharp corners, technical dashed borders
- Dark navy palette (#0A0E14) for dark mode

Files changed:
- static/style.css — Nous skin CSS variables and component overrides
- static/boot.js — Nous skin entry in _SKINS array
- static/index.html — nous in inline skin validation list
- api/config.py — nous + sienna in server-side _SETTINGS_SKIN_VALUES
2026-05-15 00:28:34 -05:00
linuxid10t 45fe6294f9 fix: prevent theme reset on refresh when autosave failed
The boot IIFE unconditionally overwrote localStorage with whatever
settings.json had on the server.  If the appearance autosave POST
ever failed (network glitch, transient error) the next page load
would revert the user's chosen theme/skin to the server's stale
defaults.

Fix: reconcile localStorage against the server on boot.  When
localStorage carries a non-default skin or system theme (the user
explicitly chose something), localStorage wins and the fix pushes
those values back to the server.  When localStorage is at defaults
(new browser / first visit), the server still wins.

Tested scenarios:
- User chose non-default skin, autosave failed → preserved + reconciled
- New browser, server has non-default skin → server value applied
- Normal use (autosave works) → unchanged behavior
2026-05-14 23:52:57 -05:00