Skip to content

feat(panel,host): a shown transcript tab hears its pages pushed, with no read loop - #4181

Merged
luke-agent[bot] merged 4 commits into
mainfrom
luke/transcript-push-window-main
Oct 20, 2026
Merged

luke-agent[bot] merged 4 commits into
mainfrom
luke/transcript-push-window-main

Conversation

@charleslpan

@charleslpan charleslpan commented Oct 20, 2026 •

Copy link
Copy Markdown
Contributor

The window half of making the agent transcript live on main. It's stacked on #4175 and replaces #3931, which was built on the old stack.

What changed

  • packages/panel/src/tasks/use-agent-transcript.ts: the hook takes a transcript key and a TranscriptFollower.
    • While the tab is shown it holds the transcript's stream open on the act port (codingAgents.transcript, from feat(host): a window follows an agent's transcript as a stream of pushed pages #4175), and closes it when hidden or unmounted.
    • Each pushed page joins the held messages by id. The read loop, the cursor and the read-through bookkeeping are gone.
    • A stream that won't open, or a failure page, sets failed. Try again opens the stream again, and the messages held stay meanwhile.
  • Tabs: the agent tab, the agent-worker tab and the task's planning-worker tab follow by key. The planning worker uses { kind: "taskWorker", taskId, callId }. CodingAgentsControl.transcripts is the window's follower.
  • Copy transcript: codingAgents.messages and tasks.messages with a callId stay, because Copy transcript reads them. The host's codingAgents.messages now answers at once through the service's wait=none read.
  • Host: the held read is retired: transcriptPast, readUntilSaid, TranscriptReads and the 20 s HOLD. So is followsAgent, which only the loop used.

Tests

  • New use-agent-transcript.test.ts:
    • A shown tab follows its transcript, joins its pages by id, and lets the stream go once hidden.
    • A failure offers Try again, which follows again while the held messages stay.
  • The tab tests that stubbed readTranscript now push pages through pushedTranscripts (#testing/tasks-control). The agent page test answers the stream with a generator.
  • Deleted, since they test the retired held read: four compose-coding-agents.test.ts tests, "a running agent's transcript is held open…", "a worker's transcript is followed under its own seal…", "a transcript the account does not reach is not found…" and "a read the service says only the clock may end…". feat(host): a window follows an agent's transcript as a stream of pushed pages #4175's follow tests cover the live behaviour.

Checks run locally

pnpm check:affected gets OOM-killed in the sandbox, so I ran its pieces one at a time:

  • repository-checks.sh, biome check ., oxlint, knip
  • tsc for host and panel
  • vitest for host and for panel's tasks and desktop (2115 tests)

What to check by hand (desktop and web)

  1. Running agent: show its tab. Lines land as it writes them, with no lag of about a second.
  2. Ended agent: show it. The whole transcript appears, and the spinner doesn't stay.
  3. Hide and show: switch tabs and come back. The transcript is complete, with no duplicated lines.
  4. Agent's worker: open a worker's tab. It fills in and keeps up.
  5. Planning worker: during a call, open one from the plan's work. It fills in.
  6. Web: the same agent tab in the web app updates live.
  7. Copy transcript: it still gives the full text.

Made with Luke

View guided diff Turn on auto-fix

@vercel

vercel Bot commented Oct 20, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
luke-web Ready Ready Preview Oct 20, 2026 10:08pm UTC

Request Review

devin-ai-integration[bot]

This comment was marked as resolved.

@luke-agent
luke-agent Bot force-pushed the luke/transcript-push-window-main branch from 2be6e09 to 5cb3495 Compare October 20, 2026 21:22
@luke-agent
luke-agent Bot force-pushed the luke/transcript-push-host-main branch from 29cfe7d to ee66ec2 Compare October 20, 2026 21:27
@luke-agent
luke-agent Bot force-pushed the luke/transcript-push-window-main branch from 5cb3495 to 1aa506e Compare October 20, 2026 21:27
@luke-agent
luke-agent Bot added this pull request to stack #4221 October 20, 2026 21:27
@luke-agent
luke-agent Bot force-pushed the luke/transcript-push-window-main branch from 1aa506e to a54dffc Compare October 20, 2026 21:35
@luke-agent
luke-agent Bot removed this pull request from stack #4221 October 20, 2026 21:45
Base automatically changed from luke/transcript-push-host-main to main October 20, 2026 21:53
charleslpan and others added 3 commits October 20, 2026 21:54
… no read loop

The tab of an agent, a worker, or a task's planning worker now holds its
transcript's stream (`codingAgents.transcript`) open while it is shown and
closes it when it is hidden. It joins each pushed page by message id, so
there's no read loop or cursor any more. A page that couldn't be read
offers Try again, which opens the stream again. `codingAgents.messages`
still serves Copy transcript, now as an at-once read. The host's held read
(`transcriptPast`) is retired, along with `followsAgent`, which only that
loop used.

Co-authored-by: luke-agent[bot] <339870089+luke-agent[bot]@users.noreply.github.com>
…ript follower

Co-authored-by: luke-agent[bot] <339870089+luke-agent[bot]@users.noreply.github.com>
…hat opens after its tab let go is closed

Co-authored-by: luke-agent[bot] <339870089+luke-agent[bot]@users.noreply.github.com>
devin-ai-integration[bot]

This comment was marked as resolved.

…d by no one

Co-authored-by: luke-agent[bot] <339870089+luke-agent[bot]@users.noreply.github.com>
@luke-agent
luke-agent Bot added this pull request to the merge queue Oct 20, 2026
Merged via the queue into main with commit 6f38bd4 Oct 20, 2026
12 checks passed
@luke-agent
luke-agent Bot deleted the luke/transcript-push-window-main branch October 20, 2026 22:17

This branch was successfully deployed

1 active deployment
Preview — 5eb5ace9 Deployed Oct 20, 2026 by vercel[bot]
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