hermes-agent/tests/run_agent
teknium1 cfd2a38223 fix(conversation): anchor the cwd staleness read to the host-info block
The whole-prompt scan for "Current working directory:" matched USER project
content, not just Hermes' own host-info line. The prompt embeds AGENTS.md /
CLAUDE.md / .cursorrules in the context tier, which sits AFTER the host-info
block, and line_value() takes the LAST match — so any project file containing
a line starting with that label won the scan.

The comparison then ran runtime state against project prose, a mismatch that
never clears: the stored prompt was rejected on EVERY turn, rebuilding the
system prompt each message and destroying the prefix cache for the whole
session. Strictly worse than the staleness the check exists to catch, and
invisible to CI because no test encoded the invariant.

"last match wins" was only ever safe because Model/Provider/Platform live in
the volatile tier at the very END of the prompt. The cwd line is the one field
read from the STABLE tier near the start, so it needs an anchored read:
locate Hermes' own "User home directory:" line and take the working-directory
line that follows it.

Verified against the real builder on a real AIAgent, not a stub:
  - stable cwd, clean project           -> prompt REUSED (0 rebuilds)
  - stable cwd, AGENTS.md naming the
    field                               -> prompt REUSED (was: rebuild/turn)
  - drifted cwd                         -> rebuilt
  - drifted cwd, AGENTS.md naming the
    NEW cwd                             -> rebuilt (prose can't mask drift)

Also re-verified no spurious rebuild across all five cwd-resolution paths
(pinned contextvar, TERMINAL_CWD, launch dir, symlinked workspace,
trailing-slash cwd).

The contributor's fixtures omitted the host-info anchor, so they silently
stopped exercising the cwd path once the read was anchored; reshaped them to
match real prompt structure via a _host_block() helper.
2026-07-25 19:25:34 -07:00
..
__init__.py
conftest.py
repro_48013_image_shrink_brick.py
test_413_compression.py fix(context_compression): roll back interrupted preflight state pollution 2026-07-23 16:38:06 -07:00
test_860_dedup.py
test_1630_context_overflow_loop.py
test_18028_content_policy_blocked.py
test_24996_fallback_exhaustion_cooldown.py
test_28161_anthropic_stream_pool_cleanup.py
test_31273_402_not_retried.py
test_32646_fallback_429_after_timeout.py
test_63425_credential_pool_auto_detect.py
test_66267_multimodal_interim.py
test_70773_shared_client_fd_corruption.py fix(agent): retire replaced shared OpenAI clients instead of cross-thread pool close 2026-07-24 16:04:48 -07:00
test_agent_guardrails.py
test_anthropic_prompt_cache_policy.py
test_anthropic_third_party_oauth_guard.py
test_anthropic_truncation_continuation.py
test_api_max_retries_config.py
test_async_httpx_del_neuter.py
test_auth_provider_failover.py
test_background_review.py
test_background_review_cache_parity.py
test_background_review_cost_controls.py
test_background_review_summary.py
test_background_review_toolset_restriction.py
test_callable_api_key.py
test_codex_app_server_compaction.py fix(desktop): synchronize context usage and compaction status 2026-07-22 16:58:58 -07:00
test_codex_app_server_integration.py
test_codex_multimodal_tool_result.py
test_codex_no_tools_nonetype.py
test_codex_silent_hang_hint.py
test_codex_xai_oauth_recovery.py fix(credential-pool): refresh the failing entry, not current(), on auth recovery 2026-07-23 07:33:25 -07:00
test_commit_memory_session_context_engine.py
test_compress_focus_plugin_fallback.py
test_compression_abort_state_reset.py test(compression): audit abort paths for per-attempt in-place state reset 2026-07-23 07:25:21 -07:00
test_compression_boundary.py
test_compression_boundary_hook.py fix(compression): recover rotated session lineage 2026-07-24 16:00:34 -07:00
test_compression_feasibility.py fix(compression): mirror the full trigger recomputation in the suggestion guard 2026-07-22 06:58:58 -07:00
test_compression_lock_defer.py fix(gateway): retry-next-message semantics for compression_deferred + regression suite 2026-07-23 16:23:57 -07:00
test_compression_persistence.py fix(conversation): anchor the cwd staleness read to the host-info block 2026-07-25 19:25:34 -07:00
test_compression_trigger_excludes_reasoning.py
test_compressor_fallback_update.py
test_concurrent_interrupt.py
test_context_token_tracking.py
test_conversation_fallback_state.py
test_copilot_native_vision_headers.py
test_create_openai_client_disables_sdk_retries.py
test_create_openai_client_kwargs_isolation.py
test_create_openai_client_proxy_env.py
test_create_openai_client_reuse.py
test_create_openai_client_ssl_verify.py
test_credential_pool_interrupt.py test: make interrupt-pool double's entries callable 2026-07-23 07:33:25 -07:00
test_credential_rotation_route_settings.py
test_credits_notices_toggle.py
test_custom_provider_extra_headers_client.py
test_deepseek_reasoning_content_echo.py
test_deepseek_v4_thinking_live.py
test_dict_tool_call_args.py
test_dropped_tool_call_recovery.py fix(agent): make dropped tool-call nudge pair ephemeral scaffolding 2026-07-24 15:56:39 -07:00
test_empty_response_recovery_persistence.py
test_exit_cleanup_interrupt.py
test_fallback_credential_isolation.py
test_fallback_reasoning_override.py
test_file_mutation_verifier.py
test_fireworks_live.py
test_identity_flush.py
test_image_rejection_fallback.py
test_image_shrink_recovery.py
test_in_place_compaction.py
test_infinite_compaction_loop.py
test_init_fallback_on_exhausted_pool.py
test_interactive_interrupt.py
test_interrupt_propagation.py
test_invalid_context_length_warning.py
test_iteration_budget_race.py
test_jsondecodeerror_retryable.py
test_last_reasoning_per_turn.py
test_lmstudio_load_mode.py
test_long_context_tier_429.py
test_malformed_tool_arguments.py
test_materialize_data_url_cleanup.py
test_memory_nudge_counter_hydration.py
test_memory_provider_init.py
test_memory_sync_interrupted.py
test_message_sequence_repair.py
test_moa_fanout_cadence.py feat(moa): add every_n fanout cadence with cached-guidance reuse 2026-07-23 17:50:40 -07:00
test_moa_loop_mode.py feat(moa): default advisor fanout to user_turn — the cheapest cadence 2026-07-23 21:07:18 -07:00
test_moa_privacy_filter.py feat(moa): add privacy redaction filter with display/full modes 2026-07-23 17:50:40 -07:00
test_moa_streaming.py
test_multimodal_tool_content_recovery.py
test_nonretryable_error_html_summary.py
test_notice_spine.py
test_nous_429_fallback_reentry.py
test_nous_fallback_unavailable.py
test_openai_client_lifecycle.py
test_partial_stream_finish_reason.py
test_per_model_compression_threshold.py fix: close review gaps for per-model threshold overrides (#63020) 2026-07-22 07:00:27 -07:00
test_per_model_threshold_init_ordering.py fix: close review gaps for per-model threshold overrides (#63020) 2026-07-22 07:00:27 -07:00
test_percentage_clamp.py
test_plugin_context_engine_init.py
test_post_tool_compression_attempt_cap.py fix(compression): unify the attempt cap across every compression site 2026-07-22 06:56:42 -07:00
test_pre_compress_memory_context.py
test_preflight_compression_cap_e2e.py fix(compression): unify the attempt cap across every compression site 2026-07-22 06:56:42 -07:00
test_primary_runtime_restore.py fix(agent): retire replaced shared OpenAI clients instead of cross-thread pool close 2026-07-24 16:04:48 -07:00
test_proactive_prune_loop_wiring.py feat(compression): prompt-cache reclaim gate + hardened wiring for proactive prune 2026-07-23 16:44:12 -07:00
test_provider_attribution_headers.py
test_provider_fallback.py test(fallback): cover xai-oauth → xai same-host same-model failover 2026-07-24 23:22:11 +05:30
test_provider_parity.py
test_real_interrupt_subagent.py
test_redirect_stdout_issue.py
test_repair_tool_call_arguments.py
test_repair_tool_call_name.py
test_retry_status_buffer.py
test_review_prompt_class_first.py
test_run_agent.py fix(agent): retire replaced shared OpenAI clients instead of cross-thread pool close 2026-07-24 16:04:48 -07:00
test_run_agent_codex_responses.py test: update credential-refresh tests for retire-not-close contract 2026-07-24 16:04:48 -07:00
test_run_agent_multimodal_prologue.py
test_sequential_chats_live.py
test_session_id_env.py
test_session_meta_filtering.py fix(timeline): persist typed display events (#69771) 2026-07-23 14:46:24 -04:00
test_session_reset_fix.py
test_session_source.py
test_steer.py feat(agent): add active-turn redirect core primitive 2026-07-22 12:02:40 -05:00
test_stream_drop_logging.py
test_stream_interrupt_retry.py
test_stream_single_writer_65991.py
test_stream_stale_breaker_reset.py
test_stream_stale_circuit_breaker.py
test_streaming.py fix(agent): close MoA stream on interrupt 2026-07-23 17:26:24 -07:00
test_streaming_tool_call_repair.py
test_strict_api_validation.py
test_strip_reasoning_tags_cli.py
test_summarize_api_error.py
test_switch_model_context.py
test_switch_model_fallback_prune.py
test_switch_model_pool_reload_52727.py
test_switch_model_reapplies_headers.py
test_switch_model_reasoning_override.py
test_switch_model_rollback.py
test_switch_model_stale_base_url.py
test_thinking_only_sanitizer.py
test_thinking_sig_recovery_persistence.py
test_tls_fd_recycle_corruption.py
test_token_persistence_non_cli.py
test_tool_arg_coercion.py
test_tool_batch_segmentation.py
test_tool_call_args_sanitizer.py
test_tool_call_guardrail_runtime.py
test_tool_call_incremental_persistence.py
test_tool_executor_contextvar_propagation.py
test_tool_name_db_persistence.py
test_turn_completion_explainer.py
test_unicode_ascii_codec.py
test_verification_continuation_budget.py
test_vision_aware_preprocessing.py
test_vision_tool_messages.py
test_wait_state_visibility.py