Rod Boev
454371c466
fix( #3961 ): probe agent availability without polluting sys.modules
2026-06-20 21:32:13 -04:00
Rod Boev
1dbfddd5b8
fix( #3961 ): use find_spec to avoid sys.modules pollution from failed agent import
2026-06-20 21:26:50 -04:00
Rod Boev
466412a732
fix( #3961 ): clean up partial agent entry from sys.modules on ImportError
2026-06-20 21:18:57 -04:00
Rod Boev
58b50d243e
fix( #3961 ): close load_pool secret-scope bypass and extend subprocess env strip set
2026-06-20 20:50:13 -04:00
Rod Boev
c237946ea3
fix( #3961 ): keep mirrored worker env updates and pool helpers compatible
2026-06-20 20:01:58 -04:00
Rod Boev
62ff54d5da
fix( #3961 ): preserve live pool entry state outside readonly scopes
2026-06-20 19:58:04 -04:00
Rod Boev
44437f7a26
fix( #3961 ): fail closed for profile-scoped credential pool reads
2026-06-20 19:52:52 -04:00
Rod Boev
7a0d868635
Keep profile-scoped reads from falling back to server credentials
2026-06-20 03:37:35 -04:00
Rod Boev
6220cc95db
Keep readonly profile scoping alive without hermes-agent imports
2026-06-20 03:01:13 -04:00
Rod Boev
b59f58601e
fix( #3961 ): block process-env fallback in readonly profile scopes
2026-06-20 02:48:24 -04:00
Rod Boev
321090efcc
fix( #3961 ): preserve mirrored live-model profile reads
2026-06-20 02:33:54 -04:00
Rod Boev
846951304d
fix( #3961 ): route provider and model credential reads through the thread-local profile channel
2026-06-20 02:24:07 -04:00
nesquena-hermes
15fe6add30
stage #4524 : clarify 409-terminal (id-guarded, loading-cleared) + SSE-notify on expiry ( #4504 ) + v0.51.534 CHANGELOG
2026-06-20 05:36:56 +00:00
nesquena-hermes
90505c0a8e
stage #3285 : gateway restart from agent-health alert (POST /api/health/restart) + v0.51.533 CHANGELOG
2026-06-20 04:40:49 +00:00
nesquena-hermes
e1e2bbc7ef
fix(config): order ghost-home guard after ambient short-circuit ( #4516 Codex gate)
...
Codex SILENT finding: the new 'if not target.exists(): return {}' guard ran
BEFORE the ambient-resolver short-circuit, so a matching ambient profile home
whose directory does not physically exist (fresh install / monkeypatched cfg)
returned {} instead of deferring to get_config() — breaking in-memory overrides
and changing the default-profile missing-home path. Move the guard below the
ambient short-circuit; add a regression test (matching-but-nonexistent ambient
home still defers to get_config()).
2026-06-20 03:57:56 +00:00
nesquena-hermes
acd2c186ef
stage #4516 : apply config defaults to non-default profile reads ( #4465 / #4513 ) + v0.51.532 CHANGELOG
2026-06-20 03:51:55 +00:00
nesquena-hermes
a60ba78298
stage #4517 : plugins panel active-provider badge via is_active_provider ( #4496 ) + v0.51.531 CHANGELOG
2026-06-20 03:35:44 +00:00
nesquena-hermes
51e2fce823
stage #4522 : fix /api/profiles UnboundLocalError 500 (regression from v0.51.528) + v0.51.530 CHANGELOG
2026-06-20 03:18:33 +00:00
nesquena-hermes
0952fcc606
fix(routes): drop redundant local _is_isolated_profile_mode import ( #4454 gate)
...
The /api/profiles handler re-imported _is_isolated_profile_mode locally inside
handle_get, which made the name function-local for the ENTIRE handle_get scope
-> the earlier use at the /api/projects branch (routes.py:8000) hit
UnboundLocalError (F823), failing 6 test shards + lint. It's already a
module-level re-export (routes.py:429), so the local re-import is redundant;
removing it lets every in-function use resolve to the module global. Also drop
an unused 'from pathlib import Path' in the new #4449 state-dir test.
Co-authored-by: rodboev <rodboev@users.noreply.github.com>
2026-06-20 00:48:20 +00:00
Rod Boev
e77ca8dbac
fix( #2698 ): keep the pinned home across isolated fallbacks
2026-06-20 00:48:20 +00:00
Rod Boev
c7375c60c4
fix( #2698 ): clamp isolated profile lookups to the pinned home
2026-06-20 00:48:20 +00:00
Rod Boev
41f2015a32
fix( #2698 ): close isolated profile escape hatches
2026-06-20 00:48:20 +00:00
Rod Boev
f086158c10
fix( #2698 ): keep isolated deployments on their own state and profile roots
2026-06-20 00:48:19 +00:00
Rod Boev
c00bfab9f5
fix( #2698 ): keep isolated default-named profiles pinned
2026-06-20 00:48:19 +00:00
Rod Boev
498a5e73e3
fix( #2698 ): pin isolated runtime home to configured profile
2026-06-20 00:48:19 +00:00
Rod Boev
8da03dbbad
Use HERMES_HOME path directly for isolated profile home resolution
2026-06-20 00:48:19 +00:00
Rod Boev
0291af5f85
Derive isolated profile name from HERMES_HOME path, not process-level default
2026-06-20 00:48:19 +00:00
Rod Boev
a2ca2ff0c2
fix(profiles): snapshot HERMES_HOME at import time for isolation detection ( #2698 )
2026-06-20 00:48:19 +00:00
Rod Boev
35eced6f35
fix(profiles): broaden except clause and sanitize error in isolated mode ( #2698 )
2026-06-20 00:48:19 +00:00
Rod Boev
36dbe1a415
fix(profiles): return 403 for isolated-mode guards, fix fallback identity ( #2698 )
2026-06-20 00:48:19 +00:00
Rod Boev
963f7c3864
fix(profiles): honor isolated HERMES_HOME profile mode ( #2698 )
2026-06-20 00:48:19 +00:00
nesquena-hermes
9ade727e63
stage #4494 : expose built-in personalities in WebUI config ( #4465 ) + v0.51.525 CHANGELOG
2026-06-19 22:26:30 +00:00
nesquena-hermes
580a157ab1
stage #4447 : opt-in chunked SSE for buffering proxies ( #4447 ) + v0.51.524 CHANGELOG
2026-06-19 22:09:17 +00:00
nesquena-hermes
0fe707b2bf
fix(wiki): reject hardlinked page files in allowlist + read revalidation ( #4375 Codex gate)
...
Gate-found (Codex CORE, repro'd): a hardlink at a clean *.md page name can
carry an arbitrary inode (incl. one outside the wiki) through the O_NOFOLLOW +
inode-identity read check — O_NOFOLLOW does not block hardlinks. Reject any
page file with st_nlink > 1 in BOTH the allowlist walk and the read-path
revalidation. Pre-existing on master (the inode recapture predates this PR's
cache); closing it here while on the read path. +1 toothed regression test
(prime cache -> hardlink listed page to outside secret -> assert 404, no leak).
Co-authored-by: rodboev <rodboev@users.noreply.github.com>
2026-06-19 21:11:11 +00:00
Rod Boev
0c4894efe9
fix(wiki): lstat log fallback before reading headings ( #4375 )
2026-06-19 21:11:11 +00:00
Rod Boev
9242f1facb
fix(wiki): bind status metadata to verified file identities ( #4375 )
2026-06-19 21:11:10 +00:00
Rod Boev
82fd7d0166
fix(wiki): exclude unverified status-file metadata ( #4375 )
2026-06-19 21:11:10 +00:00
Rod Boev
8e4d390366
fix(wiki): reject post-snapshot metadata races ( #4375 )
2026-06-19 21:11:10 +00:00
Rod Boev
9a75a85d59
fix(wiki): keep status and browse metadata on verified identities ( #4375 )
2026-06-19 21:11:10 +00:00
Rod Boev
0542d91824
fix(wiki): recheck status reads against allowlisted identity ( #4375 )
2026-06-19 21:11:10 +00:00
Rod Boev
db0bcaae8f
fix(wiki): drop stale cached paths that no longer point to files ( #4375 )
2026-06-19 21:11:10 +00:00
Rod Boev
f93d1332df
fix(wiki): align browse and status with page-path rules ( #4375 )
2026-06-19 21:11:10 +00:00
Rod Boev
b93cd10b40
fix(wiki): reject non-listed Windows path aliases ( #4375 )
2026-06-19 21:11:10 +00:00
Rod Boev
10c8ae4e46
fix(wiki): reuse the checked page allowlist across wiki reads ( #4375 )
2026-06-19 21:11:10 +00:00
Rod Boev
22bfed43ac
fix(wiki): bind cached reads to the requested allowlisted page ( #4375 )
2026-06-19 21:11:10 +00:00
Rod Boev
1dd0b5bbcf
fix(wiki): keep cached reads inside their original section ( #4375 )
2026-06-19 21:11:10 +00:00
Rod Boev
e44fd2a6ac
fix(wiki): reassert cached read-path containment ( #4375 )
2026-06-19 21:11:10 +00:00
Rod Boev
3f6369ae5c
Address cross-provider review findings for browse-path resolve and test anchor
2026-06-19 21:11:10 +00:00
Rod Boev
46c3e495fc
perf(wiki): cache resolved page allowlist and document hardlink trust boundary ( #4375 )
2026-06-19 21:11:09 +00:00
nesquena-hermes
0c8e6ebf27
stage #4488 : scope live model provider keys ( #4488 ) [CHANGELOG pending post-4506]
2026-06-19 20:43:31 +00:00