Skip to content

feat(tui): display authoritative Runlet source progress - #124

Merged
danielkov merged 4 commits into
mainfrom
feat/authoritative-runlet-progress
Sep 8, 2026
Merged

feat(tui): display authoritative Runlet source progress#124
danielkov merged 4 commits into
mainfrom
feat/authoritative-runlet-progress

Conversation

@danielkov

@danielkov danielkov commented Sep 8, 2026

Copy link
Copy Markdown
Contributor

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.

@kit-code-agent kit-code-agent Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The new progress transport can still block tool completion and child cleanup through the shared stderr lock when the diagnostics reader stalls.

Comment thread src/runlet_progress/transport.rs Outdated

@kit-code-agent kit-code-agent Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

@kit-code-agent kit-code-agent Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Runtime lease expiry is not scheduled while the TUI is idle, so a stalled diagnostics writer can leave runtime-derived state displayed as known indefinitely.

Comment thread src/tui/app.rs

@kit-code-agent kit-code-agent Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No issues found. The changes look good to merge.

@danielkov
danielkov enabled auto-merge (squash) September 8, 2026 09:41
@danielkov
danielkov merged commit 82a84b8 into main Sep 8, 2026
4 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