fix(desktop): keep clarify answerable across reconnect/hydration + tool-progress off - #69795
Merged
Merged
Conversation
Re-authored onto the current use-message-stream/gateway-event.ts (the original patched the pre-split use-message-stream.ts). When the tool.start row that normally mounts the inline clarify UI is missed (stream reconnect / hydration race), upsert a stable pending clarify tool row from clarify.request itself so the prompt stays answerable; a real tool.start/complete with the same request id merges rather than duplicates. Co-authored-by: 정수환 <centerid@naver.com>
Attribution mapping for the salvaged #47544 commit.
This was referenced Jul 23, 2026
Contributor
૮ >ﻌ< ა ci reviewran on 6adeb8e ℹ️ InfoDesktop E2E visual evidence · View test artifacts · View job1 visual diff. inline evidence is publishing... |
…uplicate The hydrated row (from clarify.request's request_id) and the real tool.start row (the model's tool_call_id) have different ids, so id-only matching appended a second clarify card in the normal path (caught by the BLOCKING_CLARIFY e2e: 'question' resolved to 2 elements). Add 'question' to the tool match-value keys so a clarify upsert merges into the existing pending clarify row regardless of id (same request<->args correlation ClarifyToolPending already uses); when no row exists yet (reconnect/hydration) it still creates one.
randlee
pushed a commit
to randlee/hermes-agent
that referenced
this pull request
Aug 11, 2026
…ol-progress off (NousResearch#69795) * fix(desktop): keep clarify lifecycle when tool progress is off * fix(desktop): render clarify prompt from the request event Re-authored onto the current use-message-stream/gateway-event.ts (the original patched the pre-split use-message-stream.ts). When the tool.start row that normally mounts the inline clarify UI is missed (stream reconnect / hydration race), upsert a stable pending clarify tool row from clarify.request itself so the prompt stays answerable; a real tool.start/complete with the same request id merges rather than duplicates. Co-authored-by: 정수환 <centerid@naver.com> * chore(contributors): map centerid@naver.com -> lidises Attribution mapping for the salvaged NousResearch#47544 commit. * fix(desktop): correlate clarify rows by question so hydration can't duplicate The hydrated row (from clarify.request's request_id) and the real tool.start row (the model's tool_call_id) have different ids, so id-only matching appended a second clarify card in the normal path (caught by the BLOCKING_CLARIFY e2e: 'question' resolved to 2 elements). Add 'question' to the tool match-value keys so a clarify upsert merges into the existing pending clarify row regardless of id (same request<->args correlation ClarifyToolPending already uses); when no row exists yet (reconnect/hydration) it still creates one. --------- Co-authored-by: 정수환 <centerid@naver.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Salvages #47544 by @lidises (정수환). The original patched the pre-split
use-message-stream.ts; the TS half is re-authored onto the currentuse-message-stream/gateway-event.ts. The Python half is cherry-pickedverbatim (authorship preserved).
Two clarify-blocking races this closes
Reconnect / hydration race (TS). The inline clarify UI normally mounts
from the
tool.startrow. If that row is missed on a stream reconnect, thesidebar shows "needs input" but the transcript has nowhere to render the
choices — the agent blocks on
clarify.respondforever. We now upsert astable pending clarify tool row directly from
clarify.request(keyed onthe request id, so a later real
tool.start/completemerges rather thanduplicates).
Tool-progress = off (Python). When a session has tool progress
disabled,
clarify's lifecycle events were suppressed like ordinary toolchrome, again leaving only the sidebar dot.
_tool_lifecycle_required_for_uiwhitelists
clarifyso itstool.start/tool.completealways emit;non-interactive tools (e.g.
terminal) stay hidden.Tests
clarify-hydration.test.tsx— new: dispatchesclarify.requestthrough thereal
useMessageStreamand asserts an answerable clarify row appears, andthat a same-id
tool.startmerges (no duplicate).tests/test_tui_gateway_server.py— clarify lifecycle emits with progressoff; a non-interactive tool stays hidden.
One of the clarify "renders with no selectable choices" triggers (family: #69122).
Supersedes #47544.
Co-authored-by: 정수환 centerid@naver.com