hermes-agent/tests/plugins
爪爪 5ea3abc3b3 fix(openviking): match tenant-header errors structurally instead of hard-coding strings
The _needs_trusted_identity_retry method was hard-coding specific
server-side error strings to detect when a request failed due to
missing X-OpenViking-Account / X-OpenViking-User headers.  Each new
server-side error variant required another string added to the client.

Replace the string enumeration with a structural match: the error
message mentions one of the tenant headers AND the HTTP status is 400.
This covers all current error variants:

  - "Trusted mode requests must include X-OpenViking-Account and User"
  - "ROOT requests to tenant-scoped APIs must include X-OpenViking-Account"
  - "Trusted mode requests must include X-OpenViking-Account."
  - "Trusted mode requests must include X-OpenViking-User."

The 400 status guard avoids false-positives on 403 errors such as
"USER API keys cannot override X-OpenViking-User", which must not
trigger a retry.

All 176 existing tests pass.

(cherry picked from commit 5a24d6766c)
2026-07-24 13:00:53 +05:30
..
browser
dashboard_auth feat(dashboard_auth): support confidential clients (client_secret) in self-hosted OIDC (#55344) 2026-06-30 13:32:51 +10:00
image_gen fix(deepinfra): harden multimodal provider routing 2026-07-14 02:59:39 +05:30
memory fix(openviking): match tenant-header errors structurally instead of hard-coding strings 2026-07-24 13:00:53 +05:30
model_providers feat(kimi): discover K3 on coding endpoint 2026-07-16 13:33:02 -07:00
platforms/photon test(photon): cover hidden Windows sidecar spawns 2026-07-16 01:03:43 -07:00
transcription
tts
video_gen fix(video-gen): omit duration for range-based FAL families when unspecified 2026-07-16 04:24:10 -07:00
web
__init__.py
test_achievements_plugin.py
test_chronos_cron.py fix(cron): avoid provider package shadowing core cron 2026-06-23 23:39:22 -07:00
test_chronos_verify.py fix(cron/chronos): cache PyJWKClient across fires to stop JWKS fetch storm (#64641) 2026-07-15 09:27:35 +10:00
test_discord_runtime_failure.py
test_disk_cleanup_plugin.py fix: protect cron output root from cleanup 2026-07-01 15:42:04 +05:30
test_google_meet_audio.py
test_google_meet_node.py
test_google_meet_plugin.py test(google_meet): assert ladder-based dependency install instead of bespoke pip argv 2026-07-07 04:09:35 -07:00
test_google_meet_realtime.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_hindsight_health_grace_timeout.py feat(hindsight): configurable embedded daemon health grace timeout (#50341) 2026-06-21 12:20:53 -07:00
test_hindsight_root_guard.py fix(hindsight): skip local_embedded daemon when running as root 2026-06-21 11:47:02 -07:00
test_kanban_attachments.py feat(kanban): attachment toolset + CLI to match the dashboard surface 2026-07-16 07:33:14 -07:00
test_kanban_dashboard_plugin.py feat(kanban): modal create-task dialog, editable board project directory, comment workflow hint (#66333) 2026-07-17 07:23:54 -07:00
test_kanban_model_override.py feat(kanban): per-task model dropdown — set/override worker model+provider from the board (#69876) 2026-07-22 22:23:24 -07:00
test_kanban_worker_runs.py
test_langfuse_plugin.py
test_nemo_relay_plugin.py fix(nemo-relay): align dynamic plugin configuration 2026-07-13 17:01:08 -06:00
test_plugin_dashboard_auth_contract.py
test_raft_check_fn_silent.py
test_retaindb_plugin.py
test_security_guidance_plugin.py
test_teams_pipeline_plugin.py fix(teams-pipeline): reject dot-only recording display_name 2026-07-01 02:03:48 -07:00