hermes-agent/tests/agent
ethernet c363db81e0
fix(desktop, ink): don't wipe messages before final message (#65919)
* fix(desktop): preserve interim assistant text wiped at message.complete

When the agent emits interim text (commentary alongside tool calls, or the
attempted final answer before a verify-on-stop nudge), all UI surfaces
streamed it live but then wiped it at message.complete — keeping only the
final response. The user saw text appear during inference, then disappear.

This is the complete fix across all three layers: agent core, gateway
transport, and all UI surfaces (desktop + Ink TUI).

The verify-on-stop and pre_verify paths flagged the assistant's attempted
final answer as _verification_stop_synthetic, suppressing it from both
state.db and the UI. The user only saw the terse post-verification reply.

Now the assistant response is real content: it's persisted to state.db and
emitted as an interim message via _emit_interim_assistant_message(force_display=True)
before the verification loop runs. Only the synthetic nudge messages keep
the synthetic flags. The turn finalizer drops nudges from live history and
compares content (not just role) to avoid duplicating a published candidate.
Message sequence repair collapses verification candidates in the
consecutive-assistant merge.

Wire agent.interim_assistant_callback both at construction (_agent_cbs())
and per-turn (defense-in-depth), emitting a new message.interim event with
{text, already_streamed}. Gated on display.interim_assistant_messages
(default true). Cleared in the finally block so a stale closure can't
fire on a later turn.

Add message.interim to the GatewayEventName union (apps/shared) and a
typed payload to the TUI's GatewayEvent discriminated union.

The TUI already had the segment-anchoring machinery (flushStreamingSegment +
finalTail) but had no handler for message.interim. Added recordInterimMessage
+ interimBoundaryIndex to seal segments mid-turn, and updated
recordMessageComplete to only dedupe segments after the interim boundary.

Replaced the fragile sealed-set approach with a proper interimBoundaryPending
state flag on ClientSessionState. finalizeInterimAssistantMessage finalizes
the streaming bubble in place (or creates a standalone one), rotates the
stream ID so next deltas create a new bubble, and sets the flag. When the
final text equals an already-sealed interim, they stay as distinct messages.

Extracted mergeFinalAssistantText() as a pure function in chat-messages.ts,
used by both completeAssistantMessage and finalizeInterimAssistantMessage.
Split the bidirectional dedup predicate: reasoning is a restatement only when
the final FULLY covers it. A short final ("Done.") no longer swallows a
longer reasoning block that merely starts with it.

Honor display.interim_assistant_messages (default true) across all layers:
the tui_gateway gates the callback, the desktop wires it to a nanostores
atom via use-hermes-config. Updated hermes_cli/config.py and
cli-config.yaml.example comments to document the Desktop behavior.

_split_segment_tokens now accepts posix=False and _find_ad_hoc_match tries
both posix modes so ad-hoc verification scripts with Windows backslash
paths are matched correctly. (response_previewed forwarding from #53553
is not included — our emit-interim + persist approach makes it unnecessary
since the attempted answer is now surfaced before the verification loop.)

- tsc: clean (desktop + TUI + shared)
- vitest desktop: 73/73 pass (7 interim-sealing + 5 mergeFinalAssistantText + 4 config atom)
- vitest TUI: 83/83 pass (4 new message.interim tests)
- python: 390 tests pass (340 tui_gateway + 33 verification/finalizer + 6 config gating + 3 evidence + 8 continuation budget)

Co-authored-by: Liam Zhang <yingliang-zhang@users.noreply.github.com>
Co-authored-by: Lucas D'Alessandro <lucasfdale@users.noreply.github.com>
Co-authored-by: Eric Manganaro <superposition@users.noreply.github.com>
Co-authored-by: sweetcornna <sweetcornna@users.noreply.github.com>
Co-authored-by: DECK6 <DECK6@users.noreply.github.com>
Co-authored-by: matantsevs <matantsevs@users.noreply.github.com>
Co-authored-by: gitcommit90 <gitcommit90@users.noreply.github.com>

* fix: prefix-match interim streamed content to avoid benign duplicate bubbles

_interim_content_was_streamed used exact equality (streamed == visible_content),
so a final response that was the streamed text plus a trailing delta — or a
partial stream before the verify nudge fired — failed the match and left
_response_was_previewed false. The turn then showed two bubbles (interim +
identical final) instead of settling the interim in place.

Relax to a prefix check (visible_content.startswith(streamed)) in both the
core match and the desktop's settle-in-place gate. The TUI already used
prefix matching via finalTail. The reverse direction (streamed longer than
final) is intentionally not matched — that could suppress a needed resend
in the gateway path where already_streamed=True calls on_segment_break().

* test(desktop): add partial-stream-then-nudge dedup edge case

Third edge case for the interim-sealing dedup: model streams part of its
answer via message.delta, verify nudge fires, interim seals the streamed
prefix, then the final response is the same text plus a trailing delta.
Asserts one bubble (not two) containing the full final text.

Acceptance protocol #2 — covers all three dedup edges:
  1. interim == final (existing)
  2. interim = strict prefix of final (existing)
  3. partial-stream-then-nudge (this commit)

---------

Co-authored-by: Liam Zhang <yingliang-zhang@users.noreply.github.com>
Co-authored-by: Lucas D'Alessandro <lucasfdale@users.noreply.github.com>
Co-authored-by: Eric Manganaro <superposition@users.noreply.github.com>
Co-authored-by: sweetcornna <sweetcornna@users.noreply.github.com>
Co-authored-by: DECK6 <DECK6@users.noreply.github.com>
Co-authored-by: matantsevs <matantsevs@users.noreply.github.com>
Co-authored-by: gitcommit90 <gitcommit90@users.noreply.github.com>
2026-07-20 11:42:29 -04:00
..
lsp feat(lsp): add PowerShellEditorServices language server (#55930) 2026-06-30 16:22:18 -07:00
transports fix(codex): harden final cache-key boundaries 2026-07-17 13:48:41 -07:00
__init__.py test: add unit tests for 8 modules (batch 2) 2026-02-26 13:54:20 +03:00
test_account_usage.py feat(codex): redeem banked usage-limit resets via /usage reset (#64280) 2026-07-14 03:23:19 -07:00
test_anthropic_adapter.py feat(agent): adaptive thinking for Kimi-family Anthropic endpoints 2026-07-19 12:21:59 -07:00
test_anthropic_billing_guidance.py feat(classifier): Anthropic-specific guidance for subscription exhaustion 2026-07-01 01:36:34 -07:00
test_anthropic_keychain.py fix(anthropic): adopt Claude Code's already-refreshed token before racing refresh 2026-06-27 19:14:43 -07:00
test_anthropic_kimi_signed_thinking_replay.py fix(anthropic): preserve thinking blocks on Kimi-family endpoints on replay 2026-07-19 01:53:01 -07:00
test_anthropic_kwargs_sanitize.py fix(anthropic): strip Responses-only kwargs before Messages SDK call (#31673) (#42155) 2026-06-08 09:36:38 -07:00
test_anthropic_mcp_prefix_strip.py fix(anthropic): also normalize MCP-server tool names to mcp__ on OAuth wire 2026-06-17 13:20:29 +05:30
test_anthropic_oauth_pkce.py test(anthropic-oauth): cover login token-endpoint host + fallback 2026-06-23 23:59:40 -07:00
test_anthropic_oauth_ua_prefix.py fix(anthropic): OAuth token endpoint UA must not be claude-code/ (login 429, #48534) 2026-07-04 15:16:13 +05:30
test_anthropic_output_field_leak.py fix(anthropic): strip output-only SDK fields from replayed content blocks 2026-06-10 20:45:16 -07:00
test_anthropic_thinking_block_order.py refactor: keep anthropic_content_blocks in-memory only (no state.db column) 2026-06-10 20:45:16 -07:00
test_api_content_sidecar.py feat(cache): persist the exact bytes sent to the API in an api_content sidecar 2026-07-19 08:25:35 +05:30
test_arcee_trinity_overrides.py fix(compression): keep Codex gpt-5.5 autoraise from lowering a higher threshold 2026-07-06 12:46:20 -07:00
test_async_utils.py fix(ci): rip out some xdist legacy stuff... how did these ever work?? 2026-06-26 19:15:18 -07:00
test_auxiliary_anthropic_pool_fallback_regression.py fix(auxiliary): fall back to token resolver when anthropic pool has no usable entry 2026-07-04 15:44:50 -07:00
test_auxiliary_client.py feat(analytics): record auxiliary model usage per task in session accounting (#65537) 2026-07-16 04:23:12 -07:00
test_auxiliary_client_anthropic_custom.py fix(anthropic): complete third-party Anthropic-compatible provider support (#12846) 2026-04-19 22:43:09 -07:00
test_auxiliary_client_azure_foundry.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_auxiliary_client_base_url_host_validation_52608.py fix(auxiliary): gate Anthropic base_url override on Anthropic-compatible host (#52608) 2026-06-26 11:21:05 +05:30
test_auxiliary_client_bootstrap_skew.py fix(auxiliary_client): warn once + regression tests for bootstrap version skew 2026-07-15 07:47:18 -07:00
test_auxiliary_client_proxy_env.py test(auxiliary): cover env-only proxy policy for auxiliary clients (#53702) 2026-06-27 21:22:49 -07:00
test_auxiliary_client_resolve_dedup.py fix(auxiliary_client): demote the 2 sibling routing fall-throughs too (review) 2026-07-01 17:00:30 +05:30
test_auxiliary_client_ssl_verify.py fix(agent): honor custom CA certs on aux client + harden TLS resolution 2026-07-02 04:51:56 +05:30
test_auxiliary_client_xai_oauth_recovery.py fix(auxiliary): detect xAI OAuth 403 bad-credentials as auth error 2026-05-29 00:28:02 -07:00
test_auxiliary_compression_timeout_floor.py feat(analytics): record auxiliary model usage per task in session accounting (#65537) 2026-07-16 04:23:12 -07:00
test_auxiliary_config_bridge.py fix(vision): cap vision_analyze fan-out concurrency process-wide 2026-06-29 01:27:10 -07:00
test_auxiliary_main_first.py feat(compression): extend Codex 272K compaction autoraise to gpt-5.4 2026-07-06 12:46:20 -07:00
test_auxiliary_named_custom_providers.py fix(auxiliary): reuse main_runtime credentials for named custom providers 2026-07-05 19:23:26 -07:00
test_auxiliary_runtime_cache_key.py fix(auxiliary): scope runtime state to each turn 2026-07-17 09:08:30 -07:00
test_auxiliary_transient_retry.py fix(auxiliary): retry transient blips harder + isolate client cache per model (#56889) 2026-07-02 01:09:37 -07:00
test_auxiliary_transport_autodetect.py fix(providers): support anthropic proxy v1 endpoints 2026-06-14 02:09:16 -07:00
test_auxiliary_user_default_headers.py fix(aux): honor model.default_headers on auxiliary client too (#40033) 2026-06-07 02:02:40 -07:00
test_azure_identity_adapter.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_bedrock_1m_context.py feat(azure-foundry): add Microsoft Entra ID auth 2026-05-18 10:14:38 -07:00
test_bedrock_adapter.py fix: reconcile probe cache with stale-entry invalidation + stale test fixtures 2026-07-20 05:49:44 -07:00
test_bedrock_empty_text_blocks.py fix(bedrock): use non-whitespace placeholder for empty text blocks 2026-07-20 03:27:38 -07:00
test_bedrock_integration.py fix: normalize string stop + surface dropped stream/tool_choice in Converse shim 2026-07-08 01:51:05 +05:30
test_bedrock_interrupt_post_worker.py fix(streaming): Bedrock liveness watchdog (into #58962 breaker) + finite local timeout 2026-07-18 19:38:21 +05:30
test_billing_usage.py feat(tui+cli): change your Nous plan from the terminal (/subscription, /topup, terminal-billing UX) (#51639) 2026-07-18 14:30:24 +05:30
test_billing_view.py feat(tui+cli): change your Nous plan from the terminal (/subscription, /topup, terminal-billing UX) (#51639) 2026-07-18 14:30:24 +05:30
test_bounded_response.py fix(agents): bound streaming error-response body reads 2026-07-05 14:00:20 -07:00
test_cascading_interrupt_6600.py fix(agent): request-local Anthropic clients so the stale/interrupt watchdog never corrupts SQLite (#67142) 2026-07-18 21:20:48 -04:00
test_chat_completion_helpers_provider_sort.py fix(agent): validate OpenRouter provider sort before request dispatch 2026-06-27 11:43:08 -07:00
test_close_interrupted_tool_sequence.py fix(agent): close tool-call sequence on all interrupt aborts, not just finalize_turn 2026-06-25 12:24:34 -05:00
test_codex_app_server_event_bridge.py feat(codex): webSearch bubbles + bare hermes-tools names in app-server bridge 2026-07-17 06:49:47 -07:00
test_codex_app_server_persist.py fix+test(codex): self-persist projected turns; keep agent_persisted=True 2026-07-01 17:08:59 +05:30
test_codex_cloudflare_headers.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_codex_gpt55_autoraise_notice.py fix(agent): dedupe Codex gpt-5.5 autoraise notice across agent inits 2026-07-06 12:46:20 -07:00
test_codex_responses_adapter.py fix(agent): treat Codex incomplete content filter as refusal 2026-07-15 09:47:37 -07:00
test_codex_runtime_live_events.py feat(codex): stream live app-server events to TUI/desktop tool cards 2026-07-17 13:44:12 -07:00
test_codex_ttfb_watchdog.py fix(agent): harden non-finite wait recovery 2026-07-17 04:46:59 -07:00
test_coding_context.py feat(agent): add configurable coding_instructions 2026-06-30 00:59:59 -05:00
test_compaction_anti_thrash.py fix(context): persist fallback compaction breaker 2026-07-14 02:19:40 +05:30
test_compress_focus.py test(compaction): initialize anti-thrash fixture state 2026-07-11 22:59:49 +05:30
test_compressed_summary_metadata.py test: compressed-summary metadata flag set in-process, stripped on wire 2026-06-12 16:47:15 -07:00
test_compression_concurrent_fork.py fix(compression): detect semantic no-op results 2026-07-20 02:25:57 -07:00
test_compression_count_warning_36908.py fix(agent): route repeated-compression warning through _emit_status (#36908) 2026-06-21 11:34:47 -07:00
test_compression_fallback_budget.py fix(compression): give fallback candidates their own timeout budget + escalate repeat-timeout cooldowns (#65143) 2026-07-15 12:28:09 -07:00
test_compression_interrupt_protection.py fix(compression): protect the summary call from mid-flight interrupts 2026-06-20 21:32:30 -07:00
test_compression_logging_session_context.py test(compression): pin rotation-fallback tests to in_place=False ahead of default flip 2026-06-25 12:56:05 -07:00
test_compression_progress.py fix(agent): align preflight token-progress floor to 5% (#23767, #39548) 2026-06-22 15:51:52 +05:30
test_compression_rotation_state.py perf(compression): skip durable refresh for in-memory-only blocks 2026-07-19 13:16:52 +05:30
test_compression_small_ctx_threshold_floor.py fix(compression): stop compaction thrash — 75% trigger floor under 512K, no summary output cap, reasoning-trace exclusion (#60989) 2026-07-08 11:56:17 -07:00
test_compressor_assistant_tail_anchor.py fix(compaction): detect and strip merge-into-tail summaries past the delimiter 2026-07-01 18:23:01 +05:30
test_compressor_historical_media.py Port from Kilo-Org/kilocode#9434: strip historical media after compression (#27189) 2026-05-16 17:18:25 -07:00
test_compressor_image_tokens.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_compressor_media_stripping.py feat(compressor): keep image URLs and unknown-part markers in summarizer serialization 2026-07-15 09:47:04 -07:00
test_compressor_tail_cut_tool_pair_floor.py fix(compression): stop the progress floor from splitting a tool group 2026-07-20 11:58:50 +05:30
test_compressor_tool_call_budget.py fix(compressor): count tool_call envelope in tail-budget token estimate (#28053) 2026-06-22 16:26:56 +05:30
test_compressor_zero_user_guard.py test(compressor): drop source-string guardrail tests 2026-07-05 21:42:19 +05:30
test_context_breakdown.py feat(desktop): add context usage breakdown popover 2026-06-29 09:18:10 -04:00
test_context_compressor.py fix(compression): keep anchor restoration alternation-safe and grounding scaffolding-proof 2026-07-19 08:55:08 +05:30
test_context_compressor_cross_session_guard.py fix(compression): guard against cross-session stale _previous_summary contamination 2026-06-07 22:09:45 -07:00
test_context_compressor_session_end_clears_state.py fix(compression): clear all per-session state in on_session_end, not just _previous_summary 2026-07-01 02:48:32 -07:00
test_context_compressor_summary_continuity.py fix(agent): harden pre-compress context handoff 2026-07-20 02:25:57 -07:00
test_context_compressor_temporal_anchoring.py fix(agent): frame compaction handoff sections as historical context 2026-06-11 13:57:13 -07:00
test_context_engine.py fix(context): clamp -1 post-compression sentinel in sibling status paths 2026-07-01 13:36:50 +05:30
test_context_engine_host_contract.py fix(context): persist fallback compaction breaker 2026-07-14 02:19:40 +05:30
test_context_references.py fix(security): anchor @file context refs to canonical read deny-list 2026-07-01 02:43:49 -07:00
test_context_refs_concurrent.py perf(context-refs): expand @-references concurrently 2026-06-30 00:19:49 -07:00
test_copilot_acp_client.py fix(file-safety): distinguish safe-root write denial from credential blocks 2026-07-14 17:09:40 +05:30
test_copilot_acp_deprecation.py fix(copilot-acp): tighten deprecation detection + sharpen GitHub Models 413 hint 2026-05-16 02:24:48 -07:00
test_credential_pool.py fix(auth): make xAI OAuth pools multi-account resilient 2026-07-17 11:37:25 +05:30
test_credential_pool_no_entries_log_throttle.py fix(credential-pool): throttle "no available entries" log to stop Windows log-lock storm (contributes to #62698) (#66338) 2026-07-17 13:08:46 -04:00
test_credential_pool_oat_authtype.py fix(auth): centralize pool auth normalization 2026-07-13 23:20:48 +05:30
test_credential_pool_oauth_writethrough.py fix(auth): enforce complete fallback routes 2026-07-16 06:14:56 -07:00
test_credential_pool_provider_boundary.py fix(auth): enforce credential pool provider boundaries (#63048) 2026-07-12 03:00:53 -07:00
test_credential_pool_routing.py fix(auth): make xAI OAuth pools multi-account resilient 2026-07-17 11:37:25 +05:30
test_credits_cold_start.py fix(credits): suppress usage gauge when top-up funds exist + add display.credits_notices toggle (#44716) 2026-06-12 01:06:46 -07:00
test_credits_fixture_snapshot.py feat(credits): usage-aware credits — in-session notices, /usage view, dev readout (#40011) 2026-06-06 13:18:18 +05:30
test_credits_policy.py feat(tui+cli): change your Nous plan from the terminal (/subscription, /topup, terminal-billing UX) (#51639) 2026-07-18 14:30:24 +05:30
test_credits_tracker.py feat(credits): usage-aware credits — in-session notices, /usage view, dev readout (#40011) 2026-06-06 13:18:18 +05:30
test_credits_view.py feat(tui+cli): change your Nous plan from the terminal (/subscription, /topup, terminal-billing UX) (#51639) 2026-07-18 14:30:24 +05:30
test_cron_inline_api_call_62151.py fix(cron): scope inline calls to reported transport 2026-07-11 11:07:34 +05:30
test_crossloop_client_cache.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_curator.py fix(runtime): preserve resolved fork metadata 2026-07-10 18:32:32 +05:30
test_curator_activity.py fix: use skill activity in curator status 2026-04-30 10:31:47 -07:00
test_curator_backup.py fix(cron): widen UTF-8 BOM tolerance to backup/curator jobs.json readers 2026-07-18 02:31:20 -07:00
test_curator_classification.py fix: remove dead f-string prefixes via ruff F541 (216 sites) (#52336) 2026-07-05 13:42:46 -07:00
test_curator_reports.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_custom_pool_mismatch_guard.py fix(agent): don't treat custom:<name> pools as cross-provider mismatch (#45289) 2026-06-13 02:01:09 -07:00
test_custom_provider_extra_body.py fix: handle named custom providers and Z.AI overload retries 2026-06-25 00:17:17 -07:00
test_custom_provider_extra_body_matching.py fix(agent): honor custom-provider extra_body for multi-model catalogs 2026-07-12 23:30:52 -07:00
test_custom_providers_vision.py fix(vision): honor custom_providers per-model supports_vision (#41036) 2026-06-07 21:50:57 -07:00
test_deepseek_anthropic_thinking.py chore: ruff auto-fix PLR6201 resweep — tuple → set in membership tests (#27355) 2026-05-17 02:29:41 -07:00
test_direct_provider_url_detection.py fix: restrict provider URL detection to exact hostname matches 2026-04-20 22:14:29 -07:00
test_display.py feat(gateway): live per-tool status line on Slack 2026-07-18 12:28:59 -07:00
test_display_emoji.py feat(tools): centralize tool emoji metadata in registry + skin integration 2026-03-15 20:21:21 -07:00
test_display_todo_progress.py fix(web): harden extract input and display boundaries 2026-07-10 19:14:06 +05:30
test_display_tool_failure.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_empty_tool_name_loop_dampening.py fix(agent): execute valid tool calls in mixed batches with invalid names (#66317) 2026-07-17 06:48:42 -07:00
test_error_classifier.py test(error_classifier): cover empty-response max_tokens misclassification 2026-07-18 12:54:58 -07:00
test_external_skills.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_external_skills_dirs_cache.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_failover_identity.py fix(agent): keep system-prompt model identity in sync across provider failover 2026-06-20 10:46:01 -07:00
test_file_safety.py fix(file): block credential paths from search results 2026-07-01 01:02:35 -07:00
test_file_safety_container_mirror.py fix(file-safety): extend sandbox-mirror guard to cover inner-container path (#32049) (#32407) 2026-06-02 14:03:37 +10:00
test_file_safety_credentials.py refactor(terminal,file-tools): delete legacy env-side cwd tracking (step 4) 2026-07-16 00:18:38 -07:00
test_file_safety_cross_profile.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_file_safety_sandbox_mirror.py fix(file-safety): add sandbox-mirror soft guard for writes to per-task .hermes mirrors (#32213) 2026-06-02 11:29:24 +10:00
test_file_safety_session_state.py test(file-safety): unbreak session-snapshot suite; de-flake fixture to env-var resolution (#66293) 2026-07-17 05:45:12 -07:00
test_gateway_turn_sidecar.py perf(gateway): byte-stable session context prompts 2026-07-19 14:58:59 +05:30
test_gemini_fast_fallback.py chore(providers): remove dead cloudcode-pa quota-fallback branches (#51489) 2026-07-05 13:44:33 -07:00
test_gemini_free_tier_gate.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_gemini_native_adapter.py feat(gemini): improve request context for support and compatibility 2026-07-13 22:26:19 -07:00
test_gemini_schema.py fix(gemini): prune required entries missing from properties in tool schemas 2026-07-17 04:54:06 -07:00
test_i18n.py fix(packaging): ship locales/ i18n catalogs in wheel, sdist, and Nix (#38383) 2026-06-03 12:00:27 -07:00
test_image_gen_registry.py feat(plugins): pluggable image_gen backends + OpenAI provider (#13799) 2026-04-21 21:30:10 -07:00
test_image_routing.py Guard native image routing with file safety 2026-07-05 03:15:03 -07:00
test_insights.py fix(insights): harden per-route usage attribution 2026-07-11 05:59:42 -07:00
test_intent_ack_continuation.py fix(agent): flatten multi-part user_message in codex intermediate-ack detector 2026-06-30 03:20:11 -07:00
test_jiter_preload.py fix(agent): preload jiter native parser 2026-05-28 00:20:11 -07:00
test_kanban_stop.py follow-up: integrate agent nudge + dispatcher retry docs and tests 2026-07-14 16:47:33 +05:30
test_kimi_coding_anthropic_thinking.py feat(agent): adaptive thinking for Kimi-family Anthropic endpoints 2026-07-19 12:21:59 -07:00
test_last_total_tokens.py fix(compressor): ABC compliance — total_tokens, api_mode, logger consistency 2026-05-23 17:38:19 -07:00
test_learn_prompt.py fix(learn): honor requirements mixed with sources in /learn requests (#55956) 2026-06-30 16:56:01 -07:00
test_learning_graph.py fix(learning_graph): guard non-dict metadata so /journey can't crash 2026-07-01 16:25:48 -05:00
test_learning_graph_render.py fix(journey): swap skill/memory inks so drillable rows read as clickable 2026-06-30 11:54:16 -05:00
test_learning_mutations.py test(journey): lock memory write format-parity with the memory tool 2026-06-30 15:16:25 -05:00
test_lmstudio_reasoning.py fix(lmstudio): clamp max/ultra reasoning effort to LM Studio's ceiling 2026-07-16 07:57:51 -07:00
test_local_stream_timeout.py fix(local): recognize unqualified hostnames as local endpoints (#9248) 2026-06-05 10:18:10 +10:00
test_manual_compression_feedback.py fix(context): harden compression failure feedback 2026-07-16 14:34:03 +05:30
test_markdown_tables.py fix: remove dead f-string prefixes via ruff F541 (216 sites) (#52336) 2026-07-05 13:42:46 -07:00
test_memory_async_sync.py fix(memory): drain queued writes on shutdown 2026-07-17 04:55:58 -07:00
test_memory_boundary_commit.py fix: serialize /new end→switch boundary on the memory manager worker 2026-07-09 03:21:54 +05:30
test_memory_provider.py fix(memory): align external prefetch guard with fail-open contracts 2026-07-16 12:48:48 -07:00
test_memory_session_switch.py fix(memory): run end-of-turn sync off the turn thread (#41945) 2026-06-08 02:18:59 -07:00
test_memory_skill_scaffolding.py fix(memory): strip skill scaffolding for all providers, not just openviking 2026-06-16 10:37:37 -07:00
test_memory_user_id.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_memory_write_bridge.py refactor(memory): move write-mirror gating behind MemoryManager interface 2026-06-22 07:00:42 -07:00
test_message_content.py fix(openviking): preserve structured sync attribution 2026-06-19 15:23:41 +08:00
test_minimax_auxiliary_url.py fix: provider/model resolution — salvage 4 PRs + MiniMax aux URL fix (#5983) 2026-04-07 22:23:28 -07:00
test_minimax_provider.py feat(models): add Claude Sonnet 5 support 2026-07-20 02:25:44 -07:00
test_moa_aggregator_cache_control.py fix(moa): apply prompt-caching decoration to the aggregator's one-shot synthesis call 2026-07-04 20:59:02 +05:30
test_moa_aggregator_cost_slot.py fix(moa): price aggregator turn at its real model so session cost isn't advisor-only (#56394) 2026-07-01 06:02:33 -07:00
test_moa_reasoning_effort.py fix(moa): aggregator resolves reasoning like an acting model when slot is unset (#64756) 2026-07-15 00:11:04 -07:00
test_moa_slot_api_mode.py fix(moa): propagate api_mode from slot runtime to call_llm 2026-06-30 03:39:50 -07:00
test_moa_switch_api_mode.py fix(moa): pin chat_completions on live switch to a MoA preset 2026-06-30 03:39:50 -07:00
test_moa_trace_streamed_capture.py fix(moa): capture streamed aggregator output into full-turn traces (#56312) 2026-07-01 04:07:46 -07:00
test_model_extra_type_guard.py test+chore: real-path regression test for #15157 model_extra guard + AUTHOR_MAP 2026-06-30 03:27:12 -07:00
test_model_metadata.py fix(bedrock): add Fable + Claude 4.6/4.7/4.8 1M entries to context table, drop stale cached values 2026-07-20 05:38:55 -07:00
test_model_metadata_local_ctx.py fix(model_metadata): widen localhost->IPv4 rewrite to all sibling probe sites 2026-07-09 14:08:44 +05:30
test_model_metadata_ssl.py fix(auth): honor SSL CA env vars across httpx + requests callsites 2026-04-24 03:00:33 -07:00
test_models_dev.py test: remove low-value model-catalog mirror tests 2026-05-29 23:45:05 -07:00
test_moonshot_schema.py fix(moonshot): handle union type arrays in tool schemas 2026-06-13 05:51:41 -07:00
test_non_stream_stale_timeout.py test(codex): cover gateway-scale stale timeout floor and TTFB gate 2026-07-02 17:05:05 +05:30
test_none_deref_guards.py fix: widen None-deref guards to config-derived sibling sites + tests 2026-07-09 21:10:07 -07:00
test_nous_credits_gauge.py feat(credits): usage-aware credits — in-session notices, /usage view, dev readout (#40011) 2026-06-06 13:18:18 +05:30
test_nous_credits_snapshot.py feat(tui+cli): change your Nous plan from the terminal (/subscription, /topup, terminal-billing UX) (#51639) 2026-07-18 14:30:24 +05:30
test_nous_oauth_401_guidance.py feat(cli): make hermes portal the human-readable Portal onboarding alias 2026-06-04 01:19:28 +05:30
test_nous_rate_guard.py fix(nous): don't trip cross-session rate breaker on upstream-capacity 429s (#15898) 2026-04-26 04:53:42 -07:00
test_onboarding.py feat(onboarding): opt-in structured profile-build path on first contact (#41114) 2026-06-07 08:36:48 -07:00
test_oneshot.py feat(agent): one-shot LLM helper + llm.oneshot gateway RPC (#51261) 2026-06-23 08:01:50 +00:00
test_openrouter_response_cache.py fix(openrouter): use canonical X-Title attribution header 2026-05-05 10:13:34 -07:00
test_pet_engine.py fix(pet): snap kitty frames to whole cells 2026-06-30 15:41:44 -05:00
test_pet_generate.py test(pets): make slow pet generation suite opt-in 2026-06-25 00:44:53 -05:00
test_platform_hint_desktop.py fix(agent): tag desktop chat sessions as desktop 2026-07-08 06:18:18 -07:00
test_platform_hint_overrides.py feat(prompt): configurable per-platform system-prompt hint overrides 2026-06-18 14:28:01 -07:00
test_plugin_llm.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_portal_tags.py feat(portal): ambient conversation context entangles aux/MoA/delegate calls 2026-07-16 01:13:43 -07:00
test_pre_compress_memory_context.py fix(redaction): normalize URL credential key aliases 2026-07-20 02:25:57 -07:00
test_preflight_compression_gate.py fix(agent): trigger preflight compression on few-but-huge sessions (#27405) 2026-06-25 01:20:23 +05:30
test_probe_cache_followups.py fix(model_metadata): address Phase-2 review findings on probe caches 2026-07-09 14:08:44 +05:30
test_prompt_builder.py fix: tolerate UTF-8 BOM in cron jobs.json and context files 2026-07-18 02:31:20 -07:00
test_prompt_caching.py refactor(salvage): scope #40632 to the two live copy-on-write sites 2026-07-09 14:35:14 +05:30
test_proxy_and_url_validation.py fix(agent): normalize socks:// env proxies for httpx/anthropic 2026-04-21 05:52:46 -07:00
test_rate_limit_tracker.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_reactions.py feat(agent): core affection reaction detector + reaction_callback 2026-07-10 05:41:59 -05:00
test_reasoning_stale_timeout_floor.py feat(x_search): default model grok-4.20-reasoning -> grok-4.5 (#67719) 2026-07-19 16:32:20 -07:00
test_redact.py fix(redaction): cover strict URL reference forms 2026-07-20 02:25:57 -07:00
test_replay_cleanup.py fix(agent): preserve none vs unknown tool effects (#61783) 2026-07-11 05:41:58 -07:00
test_restore_primary_pool_reselect.py fix(pool): re-select from credential pool on primary runtime restore 2026-06-27 20:04:45 -07:00
test_resume_stale_active_task.py fix(agent): strengthen compression preamble against stale task execution (#41607) 2026-06-11 13:57:13 -07:00
test_runtime_cwd.py fix(agent): scope install-tree guard to fallback-picked cwds, allow cli/tui in-tree dev 2026-07-16 04:32:23 -07:00
test_save_url_image.py fix(image_gen): cache xAI ephemeral URL responses to disk (#26942) (#31759) 2026-05-24 18:10:47 -07:00
test_secret_scope.py feat(gateway): multiplex phase 2 — fail-closed profile credential isolation (Workstream A) 2026-06-19 07:34:15 -07:00
test_set_runtime_main_custom_provider.py fix(auxiliary): apply review fixes to #36043 — guard named-custom routing, drop dead key assignment, tighten Palantir host match 2026-07-16 07:28:07 -07:00
test_shell_hooks.py feat(agent): add pre_verify hook and verify-on-stop coding guidance 2026-06-30 00:59:29 -05:00
test_shell_hooks_consent.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_skill_bundles.py fix(gateway): apply platform-disabled skill gate to bundle invocations (#59156) 2026-07-05 14:48:11 -07:00
test_skill_commands.py fix(skills): guard skill slash commands against core-command and slug collisions 2026-07-14 16:41:21 +05:30
test_skill_commands_reload.py fix(ci): rip out some xdist legacy stuff... how did these ever work?? 2026-06-26 19:15:18 -07:00
test_skill_utils.py fix: widen UTF-8 BOM tolerance to all sibling frontmatter parsers 2026-07-17 04:52:02 -07:00
test_ssl_ca_guard.py fix(ssl): align guard docs and escape hatch 2026-06-13 21:14:32 -07:00
test_ssl_verify.py feat(agent): add resolve_httpx_verify for custom CA bundle TLS 2026-07-02 04:51:56 +05:30
test_stream_read_timeout_floor.py fix(streaming): stop socket read timeout from preempting stale-stream detector (#43570) 2026-06-10 20:21:38 -05:00
test_stream_single_writer_guard.py fix(streaming): make the single-writer fence best-effort so a missing guard can't crash a turn (#66448) 2026-07-17 18:31:09 +00:00
test_streaming_context_scrubber.py 🐛 fix(memory): require newline after context tag 2026-05-18 10:53:08 -07:00
test_subagent_progress.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_subagent_stop_hook.py feat: shell hooks — wire shell scripts as Hermes hook callbacks 2026-04-20 20:53:51 -07:00
test_subdirectory_hints.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_subdirectory_hints_tilde.py fix(subdirectory_hints): catch RuntimeError from Path.expanduser() 2026-07-01 04:55:15 -07:00
test_subscription_view.py feat(tui+cli): change your Nous plan from the terminal (/subscription, /topup, terminal-billing UX) (#51639) 2026-07-18 14:30:24 +05:30
test_summarize_tool_result_type_safety.py fix: harden remaining display-layer surfaces against non-string tool args 2026-07-15 00:10:22 -07:00
test_summary_prefix_semantics.py fix(agent): freeze carveout-era SUMMARY_PREFIX for renormalization 2026-06-11 13:57:13 -07:00
test_summary_prefix_tool_use.py fix(compression): affirm tool use stays active in the compaction handoff prefix (#66291) 2026-07-17 06:49:42 -07:00
test_system_prompt.py fix(agent): scope install-tree guard to fallback-picked cwds, allow cli/tui in-tree dev 2026-07-16 04:32:23 -07:00
test_system_prompt_restore.py fix(desktop): keep live model switch metadata truthful 2026-06-16 09:50:17 -05:00
test_think_scrubber.py test(agent): cover think scrubber leak after flush-then-retry 2026-07-16 01:07:29 +05:30
test_thinking_timeout_guidance.py fix(agent): detect thinking-timeout for reasoning models and surface actionable guidance instead of misleading file-write advice 2026-06-25 19:00:48 -07:00
test_thread_scoped_output.py fix(ci): make tests, workflows, and attribution reliable under load (#66373) 2026-07-17 20:55:24 +00:00
test_title_generator.py fix(ci): make tests, workflows, and attribution reliable under load (#66373) 2026-07-17 20:55:24 +00:00
test_tool_call_arg_no_redaction.py fix(agent): stop redacting tool-call args in history; fix auth-header quote-eating 2026-06-28 02:44:06 -07:00
test_tool_dispatch_helpers.py fix(agent): preserve none vs unknown tool effects (#61783) 2026-07-11 05:41:58 -07:00
test_tool_guardrails.py fix(agent): tolerate lone UTF-16 surrogates in tool-guardrail hashing 2026-07-18 02:08:39 -07:00
test_tool_result_classification.py fix(agent): preserve none vs unknown tool effects (#61783) 2026-07-11 05:41:58 -07:00
test_trace_upload.py feat(sessions): trace export + HF upload via 'sessions export --format trace' (#60507) 2026-07-07 15:12:49 -07:00
test_transcription_registry.py fix(deepinfra): harden multimodal provider routing 2026-07-14 02:59:39 +05:30
test_tts_registry.py feat(tts): add register_tts_provider() plugin hook (closes #30398) 2026-05-24 18:04:54 -07:00
test_turn_context.py fix(auxiliary): sync runtime after fallback restoration 2026-07-17 09:08:30 -07:00
test_turn_finalizer_cleanup_guard.py fix(agent): complete final text on last turn 2026-06-22 13:57:59 -07:00
test_turn_finalizer_final_response_persistence.py refactor(turn_finalizer): extract _is_pure_tool_call_tail, fix SQLite durability 2026-07-19 07:27:10 +05:30
test_turn_finalizer_interrupt_alternation.py test(agent): cover interrupt tool-tail alternation close (#48879) 2026-06-23 23:52:28 -07:00
test_turn_finalizer_iteration_limit_exit.py fix(desktop, ink): don't wipe messages before final message (#65919) 2026-07-20 11:42:29 -04:00
test_turn_overlap_tripwire.py fix: exempt persist-disabled review forks from the session-scoped tripwire 2026-07-19 01:09:29 -07:00
test_turn_retry_state.py feat(vertex): add Google Vertex AI provider for Gemini (OAuth2) 2026-07-01 05:25:33 -07:00
test_unsupported_parameter_retry.py feat(analytics): record auxiliary model usage per task in session accounting (#65537) 2026-07-16 04:23:12 -07:00
test_unsupported_temperature_retry.py feat(analytics): record auxiliary model usage per task in session accounting (#65537) 2026-07-16 04:23:12 -07:00
test_usage_pricing.py fix(pricing): strip apac./au. Bedrock region prefixes so cost isn't unknown 2026-07-20 05:38:45 -07:00
test_verification_evidence.py fix(desktop, ink): don't wipe messages before final message (#65919) 2026-07-20 11:42:29 -04:00
test_verification_stop.py fix(approval): allow verifier temp cleanup 2026-07-12 04:32:52 -07:00
test_verification_stop_caching.py fix(desktop, ink): don't wipe messages before final message (#65919) 2026-07-20 11:42:29 -04:00
test_verify_hooks.py feat(agent): add pre_verify hook and verify-on-stop coding guidance 2026-06-30 00:59:29 -05:00
test_vertex_adapter.py security(vertex): route credential/project/region resolution through the profile secret scope 2026-07-02 06:07:56 +05:30
test_video_gen_registry.py fix(deepinfra): harden multimodal provider routing 2026-07-14 02:59:39 +05:30
test_vision_resolved_args.py fix(vision): preserve explicit provider auth with custom base_url 2026-05-04 05:05:43 -07:00
test_vision_routing_31179.py fix(vision): route auxiliary.vision.provider=openai to api.openai.com, skip text-only main (#31452) 2026-05-24 15:01:28 -07:00