Commit Graph

1759 Commits

Author SHA1 Message Date
ai-ag2026 eb8ecb2e61 docs: clarify Docker localhost and sudo compose setup 2026-05-28 08:39:59 +02:00
AJV20 83cc12b0bf feat: add optional gateway-backed WebUI chat (#3021)
Squash-merged pr-3021 into stage-batch34. Default-off bridge to Hermes Gateway API server via HERMES_WEBUI_CHAT_BACKEND=gateway.
2026-05-28 03:27:07 +00:00
nesquena-hermes 7cbc5c1d89 test(stage-batch33): scope test_issue2540 urlopen recorder to broken.example
Pre-existing failure on master: the test assumed only the broken-proxy /v1/models call would route through fake_urlopen, but get_available_models() also probes the Copilot internal v2 token endpoint (10.0s timeout) and OpenRouter free-tier discovery (8.0s), which now pollute the recorded timeout list.

Fix narrows the recorder to the broken-proxy endpoint only. The contract being pinned (broken-proxy probe uses CUSTOM_MODELS_ENDPOINT_TIMEOUT_SECONDS, not the urllib default 10) is unchanged.

Caught by stage-batch33 sequential pytest gate.
2026-05-28 02:57:04 +00:00
Florian Krause 8408a3dd22 fix: reattach SSE on session-switch return + close leaked stream connections (#2925)
Squash-merged pr-2925 into stage-batch33. Closes #2924.
2026-05-28 02:48:17 +00:00
ai-ag2026 ad564f2cde fix: keep generated titles in conversation language (#2984)
Squash-merged pr-2984 into stage-batch33.
2026-05-28 02:47:40 +00:00
nesquena-hermes 424a55036f Merge pull request #3017 2026-05-28 02:16:34 +00:00
nesquena-hermes c1942a1cd8 fix(sessions): widen #3023 to all 5 session-id validators via shared is_safe_session_id helper
PR #3023 only updated Session.load() and Session.load_metadata_only(), leaving
three sibling validators (Session-internal _repair_stale_pending and the
/api/session/worktree/remove + /api/session/delete route handlers) still
gated on the old lowercase-only character set.  That would have shipped a
confusing UX where api-* and reachy-voice-* sessions could be loaded into
the sidebar but rejected with HTTP 400 on delete or worktree removal.

This commit factors the validation into a single is_safe_session_id helper
in api.models and updates all five call sites to use it.  Adds regression
coverage in tests/test_issue3023_safe_session_id_validators.py for both
the helper itself and a repo-wide guarantee that no narrow lowercase-only
magic string survives.

Closes the follow-up flagged by the parallel reviewer agent on #3023.
2026-05-28 02:09:05 +00:00
nesquena-hermes d76e23a9f2 Merge pull request #3009
# Conflicts:
#	CHANGELOG.md
2026-05-28 02:06:21 +00:00
nesquena-hermes 3cb2bd08fb Merge pull request #3023 2026-05-28 01:58:34 +00:00
nesquena-hermes 7006bb5c7a Merge pull request #3008 2026-05-28 01:43:22 +00:00
AJV20 25f8e100ec Merge origin/master into prefill context fix 2026-05-27 21:30:22 -04:00
nesquena-hermes 0614ca63d8 Merge pull request #3010 2026-05-28 01:24:17 +00:00
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
nesquena-hermes 43cdd7cc37 Merge pull request #3025
# Conflicts:
#	CHANGELOG.md
2026-05-28 01:02:57 +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
ai-ag2026 3b93345487 fix(sessions): allow hyphenated session ids 2026-05-27 16:18:41 +02:00
sunilkumarvalmiki b14ef7735f Fix workspace save icon contrast 2026-05-27 19:17:46 +05:30
BonyFish dc1e369f89 fix: remove webui-side writer to avoid conflict with agent
The .usage.json file is owned by hermes-agent (tools/skill_usage.py).
This change removes the webui-side increment logic to avoid:

1. File ownership conflict - both writing to same file
2. Schema mismatch - agent uses ISO strings, webui used floats
3. Concurrency issues - agent uses fcntl locks, webui had no locking
4. Double-counting - agent already increments counters server-side

Changes:
- api/skill_usage.py: keep only read_skill_usage(), remove increment functions
- api/streaming.py: remove skill usage counter hook
- api/routes.py: adapt response to pass through agent's format as-is,
  with defensive coercion for None values and metadata preservation
- tests/test_skill_usage.py: remove increment tests (17→7 cases)
2026-05-27 20:57:32 +08:00
Hermes Agent 74fe79ddc6 fix(reasoning): use agent metadata for effort support 2026-05-27 03:54:45 -06:00
ai-ag2026 ffd9f337b1 fix(chat): scope settled stream cleanup to source 2026-05-27 09:10:43 +02:00
AJV20 2a96b2acc2 fix: wrap WebUI script prefill text as user context 2026-05-27 03:09:01 -04:00
BonyFish 3a676b704a feat: add skill usage counter to insights page
- Add api/skill_usage.py for .usage.json read/write with atomic updates
- Track skill_view (view_count), skill_manage (use_count), skill_patch
  (patch_count) invocations per SSE stream completion
- Add GET /api/skills/usage endpoint returning per-skill usage stats
- Render Skill Usage card in Insights panel after LLM Wiki card
- Add i18n keys for en, zh, zh-Hant, ja, it locales
- Add 17 tests covering read/increment logic, API route, and streaming hook
2026-05-27 14:44:28 +08: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 716a93a77d Merge pull request #3001
# Conflicts:
#	CHANGELOG.md
2026-05-27 04:56:49 +00:00
nesquena-hermes a8e2279d73 stage-batch26: skip test_terminal_survives_short_lived_request_thread (timing flaky)
The 7 other tests in this file deterministically cover the supervisor invariants
(concurrent spawn, timeout-race reap, Popen-failure recovery, supervisor singleton).
This 1 test depends on bash prompt rendering + printf execution echoing through
the PTY within a 1s deadline, which is timing-flaky in non-tty CI.
2026-05-27 04:48:21 +00:00
nesquena-hermes 744c5d60c4 Merge pull request #2880 2026-05-27 04:40:11 +00:00
Frank Song 8ab9235e00 Preserve server running state in sidebar merge 2026-05-27 12:29:57 +08:00
nesquena-hermes 540993ccaf Merge pull request #2938
# Conflicts:
#	CHANGELOG.md
2026-05-27 04:21:45 +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 0ce1f9e8ed Update SessionDB injection invariant 2026-05-27 10:38:40 +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 2d7d2cb31d Merge pull request #2958
# Conflicts:
#	CHANGELOG.md
2026-05-27 00:38:58 +00:00
nesquena-hermes ad4a4e2d62 Merge pull request #2506
# Conflicts:
#	CHANGELOG.md
2026-05-27 00:38:40 +00: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 6c619f9e81 Merge pull request #2970 2026-05-27 00:19:20 +00:00
nesquena-hermes 858a250319 Merge pull request #2899 2026-05-27 00:19:20 +00:00
nesquena-hermes 52e785a2d8 Merge pull request #2902
# Conflicts:
#	CHANGELOG.md
2026-05-27 00:19:20 +00:00
nesquena-hermes 244258aa89 Merge pull request #2986 2026-05-27 00:19:00 +00:00