Commit Graph

3269 Commits

Author SHA1 Message Date
nesquena-hermes 0a2dabc730 stage-batch36: tighten #3064 MEDIA: token gate to non-user-role messages
Per Opus advisor on stage-batch36: skip role='user' messages in
_session_media_token_allows_image_path so a user-injected MEDIA: token
cannot mint an allow-list entry for the user's own request. Preserves
the original use case (assistant/tool emitted artifacts outside the
active workspace) while making the implicit threat model explicit.

Defense-in-depth — the single-user WebUI scope means same-origin user
input already had the same effective access, but multi-user / shared
WebUI deployments would benefit from the restriction.
2026-05-28 18:20:25 +00:00
nesquena-hermes 371f77c9b9 stage-batch36: stamp v0.51.154 / Release DZ
9-PR medium-risk cleanup:
- #3037 routes.py: argv-style prefill hook + env-var override for notes drawer
- #3046 models.py: compression parent not repaired as stale interrupted turn
- #3048 session_discoverability.py: --repair-safe CLI with default dry-run
- #3053 ui.js: streaming KaTeX guard for parser-owned equations
- #3059 models.py: empty partial activity rows excluded from sidebar recency
- #3060 profiles.py: API key writes to .env (chmod 600), not config.yaml
- #3064 routes.py: MEDIA: image tokens allow exact session-referenced paths
- #3069 models.py: cron sessions with project_id surface via Cron Jobs chip
- #3077 gateway_chat.py: HTTP 401 maps to gateway_auth_error event
2026-05-28 18:04:24 +00:00
nesquena-hermes a3fc305aeb Merge PR #3077
# Conflicts:
#	CHANGELOG.md
#	tests/test_webui_gateway_chat_backend.py
2026-05-28 17:47:56 +00:00
nesquena-hermes 1c89c7d327 Merge PR #3064
# Conflicts:
#	CHANGELOG.md
2026-05-28 17:47:35 +00:00
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 83f8080103 Merge PR #3053
# 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 b103f4ad68 Merge pull request #3081 from nesquena/release/stage-batch35
stage-batch35: v0.51.153 / Release DY — 11-PR low-risk cleanup
v0.51.153
2026-05-28 10:46:25 -07:00
nesquena-hermes 95aa69f951 stage-batch35: stamp v0.51.153 / Release DY
11-PR low-risk cleanup:
- #3043 openai-codex models.dev reasoning passes xhigh
- #3044 reset _messagesTruncated on new session
- #3047 discoverability: api lineage representative for stale CLI flag
- #3049 title-language detection threshold + English false-positive fix
- #3051 docker docs: sudo compose + Linux host-gateway
- #3054 SSE reconnect: visible-but-unfocused current pane
- #3055 fallback title: drop German-only Session Bilder case
- #3056 title prompt: language-neutral instruction
- #3070 /api/upload reports actual stored filename
- #3071 clarify SSE fallback preserves owner session id
- #3072 gateway-chat forwards image attachments as image_url parts
2026-05-28 16:13:58 +00:00
nesquena-hermes 34d7585bb7 Merge PR #3051
# Conflicts:
#	CHANGELOG.md
2026-05-28 16:11:17 +00:00
nesquena-hermes 4058c741b6 Merge PR #3072
# Conflicts:
#	CHANGELOG.md
2026-05-28 16:11:16 +00:00
nesquena-hermes 2107160bf7 Merge PR #3054
# 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 2443db60b6 Merge PR #3071
# Conflicts:
#	CHANGELOG.md
2026-05-28 16:11:15 +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
nesquena-hermes fa34c7220d Merge PR #3044 2026-05-28 16:09:44 +00:00
AJV20 923b719ed1 fix: surface gateway auth errors in browser 2026-05-28 11:12:58 -04:00
AJV20 790fc70e87 test: keep bare git fixtures on master 2026-05-28 10:37:38 -04:00
AJV20 8e6ed66815 fix: clarify gateway chat auth errors 2026-05-28 09:59:35 -04:00
AJV20 04e0f905dd test: force master in git workspace fixtures 2026-05-28 09:50:07 -04:00
AJV20 cbd3704a7f fix: preserve literal prefill script paths 2026-05-28 09:31:07 -04:00
AJV20 e4ef50a0da test: cover provider-neutral notes sources 2026-05-28 09:26:09 -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 0f26b99a11 fix: preserve clarify fallback ownership 2026-05-28 08:35:26 -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
Frank Song 10573ab8aa Fix session media image rendering 2026-05-28 18:05:01 +08:00
gavinssr d77e8f0445 test: update _write_endpoint_to_config tests for api_key→.env migration
- test_writes_api_key: now asserts no-op (no config.yaml created)
  since api_key-only is no longer a valid use case
- test_writes_both: asserts api_key is NOT written to config.yaml
2026-05-28 16:07:13 +08:00
ai-ag2026 821d4a7fa4 test: keep redaction fixture visible in session index 2026-05-28 09:52:42 +02: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 c197e0c091 fix: allow current-pane SSE reconnect when unfocused 2026-05-28 09:02:06 +02:00
ai-ag2026 2ee249112a fix: defer streaming KaTeX for pending equations 2026-05-28 08:56:34 +02:00
ai-ag2026 eb8ecb2e61 docs: clarify Docker localhost and sudo compose setup 2026-05-28 08:39: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