Live replies in the TUI, clean agent log, scrollable panes, resume fixes - #52
Merged
Merged
Conversation
added 2 commits
September 23, 2026 23:44
…odel A resume of a live run started a second driver over the same branches, writing duplicate turns, and it took the config's default model rather than the run's, so every one of its calls went to an endpoint the run never used. The active slot is now claimed atomically before the driver spawns, the run row records the provider alias it was started on, and a resume with no model in the request picks that back up. The supervisor stream's branch is left for the stream to re-open instead of being driven as a beam branch.
…es by row Model calls stream when the endpoint supports it (:stream feature) and a run is watching: samizdat.llm.stream speaks HTTP/1.1 over the socket, hands each delta on, and folds the chunks back into the completion the adapters already parse. infer publishes the deltas on the event bus, throttled by gates.edn :delta-publish-ms, and the TUI draws the reply as it is written until the turn row replaces it. The TUI never parsed the JSON of pushed events, so a turn on the branch on screen never asked for a branch refresh and the conversation lagged until something else refreshed it. Fixed, which also feeds the activity pane from pushes. The agent log drops call markup and folds <think> blocks (fence/prose), renders replies as light markdown, and scrolls by rows through ftxui-jolt's :scroll pane: the wheel scrolls the pane under the pointer, PgUp/PgDn page the conversation, and the activity log scrolls too. The compose box has the focus at startup, runs to the right edge, and Enter starts a new run when the selected one has ended instead of sending a directive it would refuse.
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.
Resume no longer starts a second driver on a run this process is still running, and resumes on the run's own provider and model instead of the config default. That double driver is what made run 3020cbca look stuck: half its calls went to a local endpoint that was down.
Model calls stream when the endpoint supports it and a run is watching; the TUI shows the reply as it is written. The TUI also now parses pushed events, which it never did, so a finished turn refreshes the conversation right away.
The agent log drops tool-call markup, folds
<think>into the thinking fold, and renders markdown. Panes scroll by row (needs jlt-commons/ftxui-jolt#2). The input keeps focus, spans to the right edge, and Enter over an ended run starts a new one.