hermes-agent/tests/agent
devorun 6f0ecf37da fix(redact): mask all Authorization schemes and x-api-key style headers
Secret redaction only matched `Authorization: Bearer <token>`. Other auth
headers passed through verbatim into logs, tool output, and transcripts:

- `Authorization: Basic <base64>` — leaks base64(user:password)
- `Authorization: token <pat>` / any non-Bearer scheme
- `Proxy-Authorization: ...`
- `x-api-key: <key>` (Anthropic and many providers) and `api-key`,
  `x-goog-api-key`, `x-auth-token`, `x-access-token`, ... — opaque values with
  no known vendor prefix were caught by nothing

A logged request or an echoed `curl -H "x-api-key: ..."` command therefore
leaked live credentials.

Generalize the Authorization rule to mask the credential for any scheme (and
Proxy-Authorization) while preserving the header name and scheme word for
debuggability, and add an api-key header rule for the single-opaque-value
headers. Bearer behavior is unchanged; plain prose containing the word
"authorization" (no colon-delimited value) is left untouched.

Adds regression tests for Basic/token/Proxy auth and the x-api-key/api-key
headers, including inside a curl command.
2026-06-21 14:08:06 -07:00
..
lsp
…
transports
…
__init__.py
…
test_anthropic_adapter.py
…
test_anthropic_keychain.py
…
test_anthropic_kwargs_sanitize.py
…
test_anthropic_mcp_prefix_strip.py
…
test_anthropic_oauth_pkce.py
…
test_anthropic_output_field_leak.py
…
test_anthropic_thinking_block_order.py
…
test_arcee_trinity_overrides.py
…
test_async_utils.py
…
test_auxiliary_client.py
…
test_auxiliary_client_anthropic_custom.py
…
test_auxiliary_client_azure_foundry.py
…
test_auxiliary_client_xai_oauth_recovery.py
…
test_auxiliary_config_bridge.py
…
test_auxiliary_main_first.py
…
test_auxiliary_named_custom_providers.py
…
test_auxiliary_transport_autodetect.py
…
test_auxiliary_user_default_headers.py
…
test_azure_identity_adapter.py
…
test_bedrock_1m_context.py
…
test_bedrock_adapter.py
…
test_bedrock_integration.py
…
test_billing_view.py
…
test_cascading_interrupt_6600.py
…
test_codex_cloudflare_headers.py
…
test_codex_responses_adapter.py
…
test_codex_ttfb_watchdog.py
…
test_coding_context.py
…
test_compress_focus.py
…
test_compressed_summary_metadata.py
…
test_compression_concurrent_fork.py
…
test_compression_count_warning_36908.py
…
test_compression_interrupt_protection.py
…
test_compression_logging_session_context.py
…
test_compression_rotation_state.py
…
test_compressor_assistant_tail_anchor.py
…
test_compressor_historical_media.py
…
test_compressor_image_tokens.py
…
test_compressor_media_stripping.py
…
test_context_compressor.py
…
test_context_compressor_cross_session_guard.py
…
test_context_compressor_summary_continuity.py
…
test_context_compressor_temporal_anchoring.py
…
test_context_engine.py
…
test_context_engine_host_contract.py
…
test_context_references.py
…
test_copilot_acp_client.py
…
test_copilot_acp_deprecation.py
…
test_credential_pool.py
…
test_credential_pool_routing.py
…
test_credits_cold_start.py
…
test_credits_fixture_snapshot.py
…
test_credits_policy.py
…
test_credits_tracker.py
…
test_credits_view.py
…
test_crossloop_client_cache.py
…
test_curator.py
…
test_curator_activity.py
…
test_curator_backup.py
…
test_curator_classification.py
…
test_curator_reports.py
…
test_custom_pool_mismatch_guard.py
…
test_custom_provider_extra_body.py
…
test_custom_providers_vision.py
…
test_deepseek_anthropic_thinking.py
…
test_direct_provider_url_detection.py
…
test_display.py
…
test_display_emoji.py
…
test_display_todo_progress.py
…
test_display_tool_failure.py
…
test_empty_tool_name_loop_dampening.py
…
test_error_classifier.py
…
test_external_skills.py
…
test_external_skills_dirs_cache.py
…
test_failover_identity.py
…
test_file_safety.py
…
test_file_safety_container_mirror.py
…
test_file_safety_credentials.py
…
test_file_safety_cross_profile.py
…
test_file_safety_sandbox_mirror.py
…
test_gemini_cloudcode.py
…
test_gemini_fast_fallback.py
…
test_gemini_free_tier_gate.py
…
test_gemini_native_adapter.py
…
test_gemini_schema.py
…
test_i18n.py
…
test_image_gen_registry.py
…
test_image_routing.py
…
test_insights.py
…
test_jiter_preload.py
…
test_kimi_coding_anthropic_thinking.py
…
test_last_total_tokens.py
…
test_local_stream_timeout.py
…
test_markdown_tables.py
…
test_memory_async_sync.py
…
test_memory_provider.py
…
test_memory_session_switch.py
…
test_memory_skill_scaffolding.py
…
test_memory_user_id.py
…
test_message_content.py
…
test_minimax_auxiliary_url.py
…
test_minimax_provider.py
…
test_model_metadata.py
…
test_model_metadata_local_ctx.py
…
test_model_metadata_ssl.py
…
test_models_dev.py
…
test_moonshot_schema.py
…
test_non_stream_stale_timeout.py
…
test_nous_credits_gauge.py
…
test_nous_credits_snapshot.py
…
test_nous_oauth_401_guidance.py
…
test_nous_rate_guard.py
…
test_onboarding.py
…
test_openrouter_response_cache.py
…
test_platform_hint_overrides.py
…
test_plugin_llm.py
…
test_portal_tags.py
…
test_prompt_builder.py
…
test_prompt_caching.py
…
test_proxy_and_url_validation.py
…
test_rate_limit_tracker.py
…
test_redact.py
…
test_resume_stale_active_task.py
…
test_runtime_cwd.py
…
test_save_url_image.py
…
test_secret_scope.py
…
test_set_runtime_main_custom_provider.py
…
test_shell_hooks.py
…
test_shell_hooks_consent.py
…
test_skill_bundles.py
…
test_skill_commands.py
…
test_skill_commands_reload.py
…
test_skill_utils.py
…
test_ssl_ca_guard.py
…
test_stream_read_timeout_floor.py
…
test_streaming_context_scrubber.py
…
test_subagent_progress.py
…
test_subagent_stop_hook.py
…
test_subdirectory_hints.py
…
test_summary_prefix_semantics.py
…
test_system_prompt.py
…
test_system_prompt_restore.py
…
test_think_scrubber.py
…
test_title_generator.py
…
test_tool_dispatch_helpers.py
…
test_tool_guardrails.py
…
test_tool_result_classification.py
…
test_transcription_registry.py
…
test_tts_registry.py
…
test_turn_context.py
…
test_turn_finalizer_cleanup_guard.py
…
test_turn_retry_state.py
…
test_unsupported_parameter_retry.py
…
test_unsupported_temperature_retry.py
…
test_usage_pricing.py
…
test_video_gen_registry.py
…
test_vision_resolved_args.py
…
test_vision_routing_31179.py
…