Commit Graph

1267 Commits

Author SHA1 Message Date
nesquena-hermes 4412aea9e8 Merge PR #3059
# Conflicts:
#	CHANGELOG.md
2026-05-28 17:47:34 +00:00
nesquena-hermes 921b94a287 Merge PR #3046
# Conflicts:
#	CHANGELOG.md
2026-05-28 17:47:34 +00:00
nesquena-hermes c642c1e438 Merge PR #3069
# Conflicts:
#	CHANGELOG.md
2026-05-28 17:47:34 +00:00
nesquena-hermes 11ea6c3023 Merge PR #3060 2026-05-28 17:47:33 +00:00
nesquena-hermes 007ba46c3f Merge PR #3048
# Conflicts:
#	CHANGELOG.md
2026-05-28 17:47:33 +00:00
nesquena-hermes dc5b4b1697 Merge PR #3037
# Conflicts:
#	CHANGELOG.md
2026-05-28 17:47:33 +00:00
nesquena-hermes 4058c741b6 Merge PR #3072
# Conflicts:
#	CHANGELOG.md
2026-05-28 16:11:16 +00:00
nesquena-hermes 50a0d254a3 Merge PR #3047
# Conflicts:
#	CHANGELOG.md
2026-05-28 16:11:16 +00:00
nesquena-hermes 167ed85e8e Merge PR #3070
# Conflicts:
#	CHANGELOG.md
2026-05-28 16:11:16 +00:00
nesquena-hermes d446a6c304 Merge PR #3049
# Conflicts:
#	CHANGELOG.md
2026-05-28 16:10:49 +00:00
nesquena-hermes 0fd12b2365 Merge PR #3056
# Conflicts:
#	CHANGELOG.md
2026-05-28 16:10:12 +00:00
nesquena-hermes 0147f05c0d Merge PR #3055 2026-05-28 16:09:47 +00:00
nesquena-hermes b77398abbf Merge PR #3043 2026-05-28 16:09:45 +00:00
AJV20 cbd3704a7f fix: preserve literal prefill script paths 2026-05-28 09:31:07 -04:00
ai-ag2026 3469a2f898 fix: avoid interruption marker for completed journal runs 2026-05-28 15:19:09 +02:00
AJV20 3f22902423 fix: forward gateway image attachments 2026-05-28 08:40:51 -04:00
AJV20 0458a0a065 fix: report stored upload filenames 2026-05-28 08:33:50 -04:00
AJV20 9e69db9920 fix: show cron sessions in project filter 2026-05-28 08:10:15 -04:00
AJV20 1b5e6f6fae fix: mirror WebUI prefill env for AI-recent notes 2026-05-28 07:19:31 -04:00
gavinssr 9e5403994c fix(profiles): write API key to .env instead of config.yaml on profile creation
When a user creates a profile through the WebUI and supplies an API key,
the key was written to config.yaml under model.api_key. However, Hermes
Agent's provider layer reads keys from environment variables (.env), not
from config.yaml — making the key invisible to the actual LLM provider.

Additionally, hermes profile show reports .env: not configured when no
.env file exists, regardless of config.yaml contents, giving users the
false impression that their API key was not saved.

Changes:
- Add _PROVIDER_ENV_MAP to resolve provider IDs to .env variable names
  (kimi-coding → KIMI_API_KEY, deepseek → DEEPSEEK_API_KEY, etc.)
- Add _write_api_key_to_dotenv() that writes the key to the profile's
  .env file under the correct provider-specific variable
- Add _upsert_dotenv_line() helper for idempotent KEY=value writes
- Remove api_key writing from _write_endpoint_to_config()
- Wire _write_api_key_to_dotenv() into create_profile_api()

Fixes: profile created via WebUI shows .env: not configured despite
        correct API key being entered in the form.
2026-05-28 15:45:17 +08:00
ai-ag2026 ce59e7ca20 fix: defer stale stream repair for active workers 2026-05-28 09:33:40 +02:00
Frank Song 9190ab4449 Fix empty partial activity tail recency 2026-05-28 15:30:49 +08:00
ai-ag2026 62efbfb13f fix: use generic title language prompt 2026-05-28 09:14:46 +02:00
ai-ag2026 b046cb42c3 fix: remove German-only fallback title override 2026-05-28 09:09:59 +02:00
ai-ag2026 2aeebf56ac fix: tighten title language detection 2026-05-28 08:21:58 +02:00
ai-ag2026 f879fd6bc3 fix: add dry-run discoverability safe repair 2026-05-28 08:19:49 +02:00
ai-ag2026 bd8fd22d81 fix: show lineage representative in discoverability audit 2026-05-28 08:13:35 +02:00
ai-ag2026 5f42e87aa9 fix: skip stale repair for compression parents 2026-05-28 08:02:24 +02:00
AJV20 571bb1010d Merge remote-tracking branch 'origin/master' into webui-context-prefill-status
# Conflicts:
#	CHANGELOG.md
2026-05-28 00:57:34 -04:00
Hermes Agent b2220a54b5 fix: route openai-codex through models.dev so GPT-5.5 exposes xhigh
- Remove openai-codex special case that called github_model_reasoning_efforts()
- Codex now falls through to _models_dev_reasoning_efforts() (full efforts)
- GitHub/Copilot still use the GitHub helper (caps at high)
- Added regression tests for both behaviors
2026-05-27 21:38:06 -06: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
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
AJV20 8757a8fbf6 fix: align AI-recent notes with WebUI prefill hook 2026-05-27 22:44:55 -04: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 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
ai-ag2026 3b93345487 fix(sessions): allow hyphenated session ids 2026-05-27 16:18:41 +02:00
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