Skip to content

feat(host): a workspace's chat is followed over Neon Realtime and streamed to the panels that draw it - #3923

Merged
luke-agent[bot] merged 1 commit into
mainfrom
luke/chat-live-follow
Oct 21, 2026
Merged

luke-agent[bot] merged 1 commit into
mainfrom
luke/chat-live-follow

Conversation

@charleslpan

@charleslpan charleslpan commented Oct 19, 2026 •

Copy link
Copy Markdown
Contributor

Part of making workspace chat live over Neon Realtime. Stacked on #3916. One change: the host follows a workspace's chat and streams it to the panels that draw it.

What changes

Act port

  • New codingAgents.chatFollow procedure that returns a stream (oRPC eventIterator), following feat(host): a window follows an agent's transcript as a stream of pushed pages #4175's transcript pattern.
  • A panel follows a chat by keeping that stream open:
    • the host starts following the chat when the first stream opens
    • every change goes to every open stream of that chat
    • the host stops following when the last stream closes
  • A window and a web tab use the same procedure, so the web tab needs no code of its own. The chat isn't app state, so it isn't pushed through push.stream.

Host

  • chat-follow.ts:
  • Failures:
    • a join or seal that goes unanswered is reported as unanswered and retried after 5 s
    • a chat that isn't found is reported as such, and the follow ends
    • signed out ends the follow
    • signing out lets every follow go
  • New gateway methods codingAgents.chatFollow and codingAgents.chatUnfollow, and a new chat.changed event.

Nothing in the window moves onto this yet. That's #3928.

Tests

  • compose-coding-agents.test.ts:
    • joins, then seals for the signed-in account, then subscribes every part
    • each change goes out whole, in the held read's order, with no sealed statement
    • unanswered is reported and retried, not found ends the follow
    • unfollow, sign-out, and the closed gate end it too
  • agent-inbox-procedures.test.ts:
    • two panel streams share one follow, and each hears only its own chat
    • the follow is let go when the last stream closes
    • the voice window is refused
  • New goldens for codingAgentChatFollowParamsSchema and codingAgentChatChangedSchema.
  • Checks run one at a time on the stack's top: tsc for each touched package, biome, oxlint, knip, discarded-effect, the repository checks, and the affected vitest suites.

@vercel

vercel Bot commented Oct 19, 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 21, 2026 2:53am UTC

Request Review

@luke-agent
luke-agent Bot force-pushed the luke/chat-live-statements branch from 05d95d7 to c510534 Compare October 20, 2026 01:34
@luke-agent
luke-agent Bot force-pushed the luke/chat-live-follow branch from 853b29c to eca66d6 Compare October 20, 2026 01:34
@luke-agent
luke-agent Bot force-pushed the luke/chat-live-statements branch from c510534 to 6fc54b5 Compare October 20, 2026 01:49
@luke-agent
luke-agent Bot force-pushed the luke/chat-live-follow branch from eca66d6 to 719d9b6 Compare October 20, 2026 01:50
@luke-agent
luke-agent Bot force-pushed the luke/chat-live-statements branch from 6fc54b5 to 254291f Compare October 20, 2026 03:08
@luke-agent
luke-agent Bot force-pushed the luke/chat-live-follow branch from 719d9b6 to 585cf83 Compare October 20, 2026 03:08
@luke-agent
luke-agent Bot force-pushed the luke/chat-live-follow branch from 585cf83 to 9597028 Compare October 20, 2026 22:07
@luke-agent
luke-agent Bot force-pushed the luke/chat-live-statements branch from 254291f to 0aae577 Compare October 20, 2026 22:07
@luke-agent
luke-agent Bot changed the base branch from luke/chat-live-statements to luke/chat-write-txid October 20, 2026 22:08
@luke-agent luke-agent Bot changed the title feat(host,desktop): a workspace's chat is followed over Neon Realtime and pushed to the panels that draw it feat(host): a workspace's chat is followed over Neon Realtime and streamed to the panels that draw it Oct 20, 2026
@luke-agent
luke-agent Bot force-pushed the luke/chat-live-follow branch from 9597028 to 3a8dcc0 Compare October 20, 2026 23:29
@luke-agent
luke-agent Bot changed the base branch from luke/chat-write-txid to luke/chat-live-statements October 20, 2026 23:29
@luke-agent
luke-agent Bot marked this pull request as ready for review October 20, 2026 23:43
devin-ai-integration[bot]

This comment was marked as resolved.

devin-ai-integration[bot]

This comment was marked as resolved.

…eamed to the panels that draw it

A panel follows a workspace's chat by holding open a stream on its act
port (codingAgents.chatFollow, an event iterator), as a transcript is
followed: the host follows the chat on the first stream of it and lets it
go with the last, and every change reaches every stream of it, in a window
or a web tab alike. The host's follow (chat-follow.ts) joins the chat once,
seals live.workspaceChat, follows its parts with liveRows (polled while
Realtime fails it), and tells each change whole as chat.changed, never a
sealed statement. A join or seal unanswered is told unanswered and tried
again after five seconds; a chat not found is told so and let go; a
sign-out lets every follow go.

Nothing in the window moves onto it yet; the held read stays.

Co-authored-by: luke-agent[bot] <339870089+luke-agent[bot]@users.noreply.github.com>
@luke-agent
luke-agent Bot force-pushed the luke/chat-live-follow branch from a36b6ec to 05a30ee Compare October 21, 2026 02:49
@luke-agent
luke-agent Bot added this pull request to the merge queue Oct 21, 2026
Merged via the queue into main with commit 7522c86 Oct 21, 2026
13 checks passed
@luke-agent
luke-agent Bot deleted the luke/chat-live-follow branch October 21, 2026 03:12

This branch was successfully deployed

1 active deployment
Preview — 05a30ee4 Deployed Oct 21, 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