Add a RunBlocked AgentEvent to signal that a run is blocked on hooks#193
Merged
Conversation
A run is blocked when at least one hook is pending, no model stream is producing events, and every in-flight tool call is suspended awaiting a hook. This could be potentially useful in a bunch of cases, but the directly inciting one is for seal, which is workflow based but talks to the useChat API. useChat expects the stream to get stopped when a run is blocked. We add a RunStateTracker to process the event stream to detect these events and emit transitions. We add a `tool_call_id` to HookPart to support directly matching hooks with tool calls. We were already extracting this from the name in the UI adapters so this is strictly more principled than that.
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
anbuzin
approved these changes
Jul 8, 2026
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.
A run is blocked when at least one hook is pending, no model stream is
producing events, and every in-flight tool call is suspended awaiting a
hook.
This could be potentially useful in a bunch of cases, but the directly
inciting one is for seal, which is workflow based but talks to the
useChat API. useChat expects the stream to get stopped when a run is
blocked.
We add a RunStateTracker to process the event stream to detect these
events and emit transitions.
We add a
tool_call_idto HookPart to support directly matching hookswith tool calls. We were already extracting this from the name in the
UI adapters so this is strictly more principled than that.