Skip to content

Live replies in the TUI, clean agent log, scrollable panes, resume fixes - #52

Merged
yogthos merged 2 commits into
mainfrom
live-tui-resume-fixes
Sep 24, 2026
Merged

yogthos merged 2 commits into
mainfrom
live-tui-resume-fixes

Conversation

@yogthos

@yogthos yogthos commented Sep 24, 2026

Copy link
Copy Markdown
Owner

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.

Yogthos 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.
@yogthos
yogthos merged commit a87fbb7 into main Sep 24, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant