mirror of
https://github.com/alphaXiv/OpenResearch.git
synced 2026-11-11 09:59:34 +08:00
* Don't mint empty reasoning parts; fix tool-group rendering artifacts (v0.1.85) Fable's encrypted thinking streams empty thinking_delta events (payload in signature_delta) and per-block assistant events with thinking:"" — orx stored these as invisible empty reasoning parts, which split consecutive tool calls into single-row groups; an expanded singleton group then painted the identical tool line twice (summary + row). - claude.rs: skip empty stream deltas and empty thinking blocks (main loop and sub-agent routing) so empty parts are never created - ChatPanel renderParts: parts that render nothing no longer break a tool run (repairs already-stored transcripts) - ToolGroup: a single-tool group renders its ToolRow directly — no duplicate summary line; has-error color parity via styles.css - test: encrypted_thinking_mints_no_empty_reasoning_parts (captured live from the claude CLI) * Multi-tool group summary is always the count A running group is always expanded, so a summary echoing the running tool's line always sat directly above the identical row. 'Used N tools' never duplicates. Rebuilt ui/dist. * Review round: shared visibility predicate, sub-agent per-block offset fix, nits - ChatPanel: extract partIsVisible as the single invisible-part predicate, shared by messageHasVisibleContent and renderParts; renderParts now also skips resolved permission cards (Codex inlines them into the turn's parts, where they split tool runs the same way empty reasoning parts did) - SubagentTranscript: gate the empty state on rendered output, not raw part count, so stored all-invisible transcripts read as empty - claude.rs: guard empty text blocks like thinking blocks (both loops); comment accuracy passes (delta guard scope, cross-layer back-reference, ToolGroup doc, CSS child-combinator note) - apply_subagent_blocks: fix per-block offset semantics — .skip(start) treated the cumulative message offset as an index into this event's (single-element) array, silently dropping every sub-agent block after a message's first; now mirrors the main loop's start+n id shift. Caught by the new subagent_empty_thinking_mints_no_child_parts test; also added offset assertion comment