Commit Graph

1222 Commits

Author SHA1 Message Date
nesquena-hermes 64c83e4932 Merge pull request #3029 2026-05-28 01:02:58 +00:00
nesquena-hermes d75bbfc90d Merge pull request #3028 2026-05-28 01:02:58 +00:00
nesquena-hermes 3560f37c8d Merge pull request #3027 2026-05-28 01:02:58 +00:00
nesquena-hermes 0c492e4eb1 Merge pull request #3003 2026-05-28 01:02:58 +00:00
ai-ag2026 0af58f2b82 feat: add session discoverability audit 2026-05-28 00:51:32 +02:00
ai-ag2026 9650b387fd fix: keep webui mirrored sessions out of cli filter 2026-05-28 00:51:12 +02:00
ai-ag2026 38905f335c fix: preserve messageful sidebar discoverability 2026-05-27 23:42:24 +02:00
AJV20 fb6dd28ac3 fix: cap custom models endpoint probes 2026-05-27 12:19:42 -04:00
george-andraws 541c064a72 fix(session): route messaging metadata loads through display merge
Use _merged_session_messages_for_display for is_messaging_session even in the
metadata-only (messages=0) path. This ensures message_count and last_message_at
match the full load path for Telegram / external messaging sessions that have
stitched or duplicate rows in state.db + sidecar.

Prevents spurious refresh loops, scroll resets, and open panel closures when
resuming cross-surface sessions in the WebUI.

No impact on CLI, non-messaging, or full-message paths. All 580 session tests pass.

Fixes the root cause identified in the SessionDB / render interaction changes.
2026-05-26 22:05:58 -07:00
nesquena-hermes 744c5d60c4 Merge pull request #2880 2026-05-27 04:40:11 +00:00
nesquena-hermes 7f66f72514 Merge pull request #2993
# Conflicts:
#	CHANGELOG.md
2026-05-27 03:25:04 +00:00
nesquena-hermes c208b710a4 Merge pull request #2996 2026-05-27 03:24:43 +00:00
nesquena-hermes 75cb7662d7 Merge pull request #2995 2026-05-27 03:24:43 +00:00
BonyFish ea3d4ec0b3 feat(cron): dynamic delivery options from API instead of hardcoded select
Replace the hardcoded 4-option deliver dropdown (local/discord/telegram/slack)
with a dynamic select populated from a new GET /api/crons/delivery-options
endpoint that reads _KNOWN_DELIVERY_PLATFORMS from hermes-agent.

Key changes:
- Add GET /api/crons/delivery-options endpoint returning all known platforms
- Frontend loads options asynchronously on first cron form open, with caching
- Enable deliver editing for existing jobs (was previously disabled)
- Include deliver in update payload when editing cron jobs
- Fallback to local-only if API unavailable
- Custom deliver values (e.g. feishu:oc_xxx) shown with * suffix
- Add cron_deliver_custom i18n key to all 12 locales
- Add 5 integration tests for the new endpoint
2026-05-27 10:58:49 +08:00
Frank Song 3a9948d6cf Fix streaming SessionDB profile path 2026-05-27 10:29:31 +08:00
Isla-Liu 20f49e7bda docs(config): address PR #2964 review nits
* Comment alongside _AUTH_FINGERPRINT_VOLATILE_KEYS notes client_secret
  is treated as rotation-only on purpose, not a model-cache
  differentiator (maintainer §Concerns 3).
* _write_auth docstring at tests/test_issue_t16551f61_auth_token_churn_
  fingerprint.py:108 now describes actual behavior (writes + monkeypatch,
  no sleep+restat) — Copilot r3302471228.

Refs #2242. PR #2964 review.
2026-05-27 09:51:32 +08:00
george-andraws f1b04be8f7 Fix WebUI fallback provider chain merging 2026-05-26 17:51:49 -07:00
nesquena-hermes aa6cd48318 Merge pull request #2888
# Conflicts:
#	CHANGELOG.md
#	tests/test_webui_prefill_context.py
2026-05-27 00:38:24 +00:00
nesquena-hermes e0dfa0c586 Merge pull request #2792 2026-05-27 00:37:48 +00:00
nesquena-hermes 244258aa89 Merge pull request #2986 2026-05-27 00:19:00 +00:00
nesquena-hermes 2db584969c Merge pull request #2964 2026-05-27 00:19:00 +00:00
nesquena-hermes 80a9b0fa68 Merge pull request #2985
# Conflicts:
#	CHANGELOG.md
2026-05-27 00:03:02 +00:00
nesquena-hermes f3fbb49ce4 Merge pull request #2983
# Conflicts:
#	CHANGELOG.md
2026-05-27 00:02:47 +00:00
nesquena-hermes f061733c91 Merge pull request #2969
# Conflicts:
#	CHANGELOG.md
2026-05-27 00:02:32 +00:00
ai-ag2026 815df9de76 fix: vendor math and yaml assets for CSP 2026-05-26 23:49:02 +02:00
ai-ag2026 fceb255252 fix(session): anchor message windows on renderable tail rows 2026-05-26 23:37:08 +02:00
george-andraws 65cae8f1a5 Improve sidebar chat search highlighting 2026-05-26 14:17:59 -07:00
dobby-d-elf b74df67726 Make session index pruning explicit 2026-05-26 07:43:16 -06:00
Frank Song 2ff73c9954 Document truncation watermark metadata intent 2026-05-26 20:13:01 +08:00
Frank Song 9db0d6869a fix: keep session switch metadata non-blocking 2026-05-26 16:40:35 +08:00
Isla-Liu ecfa580660 fix(config): exclude credential-rotation fields from models-cache auth.json fingerprint
auth.json is rewritten by credential-pool/OAuth token refresh roughly every
14 minutes. _models_cache_source_fingerprint() hashed it via mtime/size
(#1699 _models_cache_file_fingerprint), so every token refresh churned the
fingerprint and the 24h /api/models cache was effectively dead -- the hot
GET /api/session?resolve_model=1 path paid a cold ~11.5s rebuild every few
minutes (RCA t_d127953d residual #2, t_16551f61).

Add _auth_store_semantic_fingerprint(): content-hash auth.json with a
DENY-list of known credential-rotation-only keys (access/refresh token,
expiry, per-credential status/telemetry, request_count, save updated_at)
stripped. Deny-list (not allow-list) is deliberate -- any unknown field, or
a real provider/endpoint/model-set change (active_provider, a new
credential_pool entry, base_url, source, label, auth_type, the providers{}
block, ...) stays in the fingerprint and still correctly busts the cache.
Conservative fallbacks: missing file -> marked; unreadable/corrupt ->
stat-based fallback (never less safe than pre-fix). config.yaml keeps the
cheap stat fingerprint (deliberate edits, no timer churn).

Bidirectional invariant regression test (non-tautological -- the
end-to-end churn test flips RED when the auth_json axis is reverted to
stat-based): token-only churn keeps fingerprint byte-identical AND keeps a
valid disk cache loadable; active_provider change / new credential_pool
entry / changed base_url each flip the fingerprint AND reject the stale
disk cache. Measured: 5/5 cold rebuilds per 5 refresh cycles -> 0/5.

Tests: 9 new pass; 28 adjacent (#1699/#1633/display-resolver) pass;
54 models_cache/fingerprint suite pass.
2026-05-26 12:46:59 +08:00
dobby-d-elf ca9e821b5e Reduce session index churn on chat start 2026-05-25 16:25:23 -06:00
george-andraws 0f388de09c fix duplicate chat upload filenames 2026-05-25 17:48:19 +00:00
nesquena-hermes 0c6af12723 Merge pull request #2933
# Conflicts:
#	CHANGELOG.md
2026-05-25 17:48:05 +00:00
nesquena-hermes c6869806f0 Merge pull request #2923
# Conflicts:
#	CHANGELOG.md
2026-05-25 17:47:23 +00:00
nesquena-hermes c2fc390723 Merge pull request #2915 2026-05-25 17:46:56 +00:00
nesquena-hermes f6dc7aad6f Merge pull request #2907 2026-05-25 17:17:44 +00:00
nesquena-hermes 68afa0e44a Merge pull request #2932
# Conflicts:
#	CHANGELOG.md
2026-05-25 17:17:44 +00:00
nesquena-hermes 0be9874549 Merge pull request #2918
# Conflicts:
#	CHANGELOG.md
2026-05-25 17:17:31 +00:00
nesquena-hermes 6eaddada93 Merge pull request #2934
# Conflicts:
#	CHANGELOG.md
2026-05-25 17:17:06 +00:00
nesquena-hermes 67b41b2b54 Merge pull request #2927 2026-05-25 17:02:02 +00:00
Rehan Khan 0db8f5ded4 fix(terminal): harden supervisor lifecycle and eliminate timeout race conditions
- Split timeout state from spawn completion using timed_out flag
- Ensure request.done represents only spawn completion
- Add per-request locking to enforce atomic lifecycle resolution
- Prevent late Popen results from mutating timed-out requests
- Reap abandoned subprocesses before terminal registry assignment
- Strengthen supervisor stability under repeated failure and mixed workloads
- Add regression coverage for timeout + race + failure scenarios
2026-05-25 20:45:17 +05:00
Frank Song aa6daf82f2 fix(gateway): treat active sessions as configured 2026-05-25 21:48:51 +08:00
Frank Song 524ed6cce3 fix(streaming): preserve profile env for checkpoints 2026-05-25 21:29:06 +08:00
Frank Song e265389116 perf(sessions): prime missing index in background 2026-05-25 21:21:20 +08:00
Frank Song 459286830b fix(session): preserve sidecar truncation boundary 2026-05-25 21:21:15 +08:00
carryzuo00 2881fcec89 fix(agent_health): detect profile-scoped gateway.pid for correct status
_gateway_root_pid_path() unconditionally returned <hermes_root>/gateway.pid.
Profile-scoped gateways (started with --profile <name> or via active_profile)
write their runtime files under <hermes_root>/profiles/<name>/ instead of the
root, so the root-level path never existed.

build_agent_health_payload() therefore always received a non-existent pid_path,
fell through to the stale root-level gateway_state.json, and returned alive=None.
This caused the cron/scheduled-jobs page to display "Gateway not configured" even
when a gateway was actively running.

Fix: after failing to find a root-level gateway.pid, fall back to the active
profile directory via get_active_hermes_home(). Root-level wins when it exists,
so deployments that do write there are unaffected. Errors from profile lookup are
swallowed and the root path is returned, preserving the previous safe default.

Adds five focused unit tests covering the new fallback, the priority rule, and
the error-handling path.
2026-05-25 10:35:37 +00:00
MinhoJJang d920d4222a Trim paginated session tool call payloads 2026-05-25 18:28:43 +09:00
Frank Song 89d8c3a94c fix: cap live tool prompt estimate per turn 2026-05-25 16:04:40 +08:00
fxd-jason dd09e1c2a8 Merge remote-tracking branch 'origin/master' into fix/compression-anchor-marker-based
# Conflicts:
#	tests/test_issue2028_compression_anchor_helpers.py
2026-05-25 15:23:17 +08:00