feat(tui): display authoritative Runlet source progress - #124
Merged
Conversation
Contributor
There was a problem hiding this comment.
The previously reported P2 shared-stderr lock contention remains unresolved. A stalled diagnostics reader can leave the progress writer holding the process-wide stderr lock, blocking synchronous event emission before tool outcomes return or child close requests are sent. The dependency update leaves these paths unchanged.
danielkov
enabled auto-merge (squash)
September 8, 2026 09:41
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.
Summary
Display Runlet call progress beside the exact source expression using authoritative runtime node IDs, source spans, and lifecycle events. Keep scripts neutral when attribution is absent, stale, incomplete, or inconsistent instead of reconstructing execution from tool names or descendant activity.
Motivation
The previous heuristic could make a dependent review subagent appear to be running based on the implementation agent's descendants. Runlet 0.6.0 now provides source-attributed progress, and the compose bridge preserves execution identity across the host boundary.
Impact
Inline annotations report observed call-instance counts at Unicode line/column ranges. Loops, retries, and multiple calls on one line remain distinct; structural evaluation is not presented as a spawned call. Auto-healed or mismatched source, missing sequences, conflicting duplicates, and interrupted observations lose their annotations rather than imply success.
Runtime events and forwarded child diagnostics use one bounded, nonblocking queue, so a stalled stderr writer cannot hold up tool completion or child cleanup. Authoritative-event loss invalidates runtime-derived UI state and shows an unavailable warning rather than retaining false activity; reset frames and independent child leases prevent stale state from surviving a stalled reader. Plain diagnostics remain best-effort: oversized lines are visibly truncated, and dropped output does not permanently silence later diagnostics.
Technical details
Exact ownership and bounded state
Events carry the exact parent compose call, execution incarnation, source digest, and ordered metadata. Unknown descendant owners are ignored. Retained source and node state are bounded, and top-level tool completion never fabricates node success.
Upstream dependency
Use published Runlet 0.6.0 and agentkit-tool-compose 0.10.11, which includes the merged compose bridge. The temporary compose Git patch is removed. Existing shared AgentKit package identities and other overrides are preserved; no unrelated package versions change.