Skip to content

feat(agent-stream): thinking and tool streaming for chat and canvas#5671

Open
BillLeoutsakosvl346 wants to merge 13 commits into
stagingfrom
agent-stream-events
Open

feat(agent-stream): thinking and tool streaming for chat and canvas#5671
BillLeoutsakosvl346 wants to merge 13 commits into
stagingfrom
agent-stream-events

Conversation

@BillLeoutsakosvl346

@BillLeoutsakosvl346 BillLeoutsakosvl346 commented Jul 14, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Adds agent-events-v1 streaming for live thinking + tool lifecycle across Anthropic, Gemini, Bedrock, DeepSeek/Groq (openai-compat), with dual-gated deployed-chat SSE and canvas console chrome.
  • Wires DeepSeek/Groq/OpenAI reasoning request knobs, tool-loop reasoning round-trip, timeout/user abort semantics, and /api/providers byte projection for object streams.
  • Ships ChatGPT-like thinking chrome (fixed scroll pane, follow-to-bottom, auto-collapse when the answer starts) plus includeThinking chat policy/migration/docs.

Test plan

  • Deployed chat with Include thinking on + Anthropic/Gemini reasoning model: thinking streams in fixed pane, collapses when answer starts, tools show as chips
  • DeepSeek chat/reasoner and Groq gpt-oss with thinking/effort: thinking events appear; forced tools still complete
  • OpenAI reasoning model with effort auto: summaries still stream
  • Canvas run with thinking model: console shows thinking/tools; Stop soft-completes without a scary failed agent block; timeout still fails the block
  • Legacy client without protocol header: byte-identical SSE (no thinking frames)
  • bun run test / vitest for agent-stream, providers, streaming, chat hook suites

Made with Cursor

… and canvas

Ship the agent-events-v1 protocol with provider tool loops, dual-gated chat thinking, DeepSeek/Groq/OpenAI reasoning wiring, and ChatGPT-like thinking chrome.

Co-authored-by: Cursor <cursoragent@cursor.com>
@greptile-apps

greptile-apps Bot commented Jul 14, 2026

Copy link
Copy Markdown
Contributor

Too many files changed for review. (132 files found, 100 file limit)

Bypass the limit by tagging @greptile-apps to review.

@vercel

vercel Bot commented Jul 14, 2026

Copy link
Copy Markdown

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

1 Skipped Deployment
Project Deployment Actions Updated (UTC)
docs Skipped Skipped Jul 14, 2026 4:22pm

Request Review

Comment thread apps/sim/app/(interfaces)/chat/hooks/use-chat-streaming.ts
Biome was failing CI on migrations/meta/0261_snapshot.json. Also settle
assistant streaming/tool flags when SSE ends without a terminal frame,
without clobbering Stop's finalized content.

Co-authored-by: Cursor <cursoragent@cursor.com>
Auto-format the sim package for CI lint:check, and repair the Anthropic
streaming tool-loop payload after an unsafe delete-to-undefined rewrite.

Co-authored-by: Cursor <cursoragent@cursor.com>
Comment thread apps/sim/providers/stream-pump.ts
…journal test

Treat AbortError from reader.cancel as a cancelled pump result so soft-complete
retains answerText. Point the workspace storage migration journal assertion at
0261_chat_include_thinking.

Co-authored-by: Cursor <cursoragent@cursor.com>
Comment thread apps/sim/app/(interfaces)/chat/hooks/use-chat-streaming.ts
Ignore terminal SSE error frames after the user aborts so
"Client cancelled request" cannot overwrite "Response stopped by user".

Co-authored-by: Cursor <cursoragent@cursor.com>
… scroll

Add left-to-right shimmer on live thinking label/body, keep scroll working by
shimmering an inner node, and follow the answer only while near the bottom.

Co-authored-by: Cursor <cursoragent@cursor.com>
Comment thread apps/sim/providers/stream-pump.ts
Comment thread apps/sim/executor/execution/block-executor.ts
…ts only

Abort the agent stream pump when the projected HTTP body is cancelled so
provider work does not continue after disconnect. Limit AbortError soft-success
to Agent blocks so Function/HTTP cancels still fail in logs.

Co-authored-by: Cursor <cursoragent@cursor.com>
streamConfig: {
selectedOutputs: persistedSnapshot.selectedOutputs,
timeoutMs: preprocessResult.executionTimeout?.sync,
includeThinking: persistedSnapshot.metadata.includeThinking === true,

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Pause snapshot drops thinking flag

Medium Severity

Paused chat runs that had Include thinking enabled lose includeThinking when the pause snapshot is serialized. Stream resume then always passes includeThinking: false into createStreamingResponse, so thinking and tool SSE frames stay off even when the client sends agent-events-v1.

Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit eac2a22. Configure here.

Paused chat runs with Include thinking enabled were dropping the flag when
serializing the pause snapshot, so resume always rebuilt streams without
thinking/tool SSE frames.

Co-authored-by: Cursor <cursoragent@cursor.com>
Comment thread apps/sim/executor/execution/block-executor.ts
Persist pump answerText onto the streaming execution before throwing on
timeout, and carry that partial content into the failed block output so
logs match what the client already saw.

Co-authored-by: Cursor <cursoragent@cursor.com>
Match thinking UX: open while tools run, collapse when finished, and keep
the panel open only if the user manually reopens it.

Co-authored-by: Cursor <cursoragent@cursor.com>
Clear agentStreamActive and settle running tool chips when blocks error,
timeouts cancel runs, or execution ends without stream:done so the output
panel does not stay on live Thinking/Using tools chrome.

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Cursor Bugbot has reviewed your changes using default effort and found 1 potential issue.

There are 2 total unresolved issues (including 1 from previous review).

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit ce3737b. Configure here.

Pause can interrupt a tool loop without tool end events; settling those
chips as success incorrectly showed unfinished tools as complete.

Co-authored-by: Cursor <cursoragent@cursor.com>
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