Conversation
Three related rendering bugs are addressed in `TurnView` and the `TurnCoordinator`: 1. **Unclosed structured fences.** A conversation ending on a `ChatResponse::Structured` would print an opening ` ```json ` with no matching close. `flush()` only drained the chat sub-renderer; the structured renderer was left open. Content boundaries (`begin_turn`, `render_user_request`, `render_chat_response`, `enter_tool_call`, `reconfigure`) now each call `structured.flush()` before proceeding, and the top-level `flush()` (formerly `flush_all()`) closes both renderers. The old `flush()` (chat-only) is removed; `flush_all()` is renamed to `flush()`. 2. **Missing assistant header after Continue-before-first-chunk.** `reset_for_continuation` unconditionally set `assistant_header_rendered = true`, so if the user interrupted before any chunk arrived the flag was forced on and the resumed output had no `── jp …` boundary. The flag is now left as-is; if no header had been emitted yet it stays `false` and the next assistant event renders one normally. 3. **Missing user header on Reply interrupt (live vs replay gap).** When the user replied mid-stream, the new `ChatRequest` was pushed to the conversation but never rendered in live mode, so the terminal showed no `── alice …` boundary. `coordinator.rs` now calls `view.render_user_request()` before pushing the event, matching what replay emits. Signed-off-by: Jean Mertz <git@jeanmertz.com>
When `build_execution_plan` encountered a `ToolCallRequest` with no matching pending entry, it pushed the request into `orphaned` as a bare `ToolCallRequest`. The caller in `turn_loop` then synthesized an error response and assigned it an index of `approved.len() + pre_resolved.len()` — effectively appending it at the end regardless of where the request appeared in the stream. Because `commit_tool_responses` sorts responses by index before persisting them, this caused any orphaned response to land after all non-orphaned responses, breaking document order in the stored conversation. The fix threads the document-order index through the orphaned path: `orphaned` is now `Vec<(usize, ToolCallRequest)>` and `build_execution_plan` populates the index from the same loop counter used for `PlanItem`. The `turn_loop` destructs the pair and uses the carried index directly when building the `pre_resolved` entry, removing the incorrect append-to-end calculation entirely. Also removes two stale references to internal Bear notes from code comments. Signed-off-by: Jean Mertz <git@jeanmertz.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.
When
build_execution_planencountered aToolCallRequestwith no matching pending entry, it pushed the request intoorphanedas a bareToolCallRequest. The caller inturn_loopthen synthesized an error response and assigned it an index ofapproved.len() + pre_resolved.len()— effectively appending it at the end regardless of where the request appeared in the stream.Because
commit_tool_responsessorts responses by index before persisting them, this caused any orphaned response to land after all non-orphaned responses, breaking document order in the stored conversation.The fix threads the document-order index through the orphaned path:
orphanedis nowVec<(usize, ToolCallRequest)>andbuild_execution_planpopulates the index from the same loop counter used forPlanItem. Theturn_loopdestructs the pair and uses the carried index directly when building thepre_resolvedentry, removing the incorrect append-to-end calculation entirely.Also removes two stale references to internal Bear notes from code comments.