feat: checkpoint-based state, breakpoint system, and multi-agent streaming fixes#186
Merged
cristipufu merged 4 commits intomainfrom Feb 20, 2026
Merged
feat: checkpoint-based state, breakpoint system, and multi-agent streaming fixes#186cristipufu merged 4 commits intomainfrom
cristipufu merged 4 commits intomainfrom
Conversation
…stem - Replace SqliteSessionStore with checkpoint-based persistence using the Agent Framework's CheckpointStorage protocol (SqliteCheckpointStorage, ScopedCheckpointStorage) - Add executor-level breakpoints that work with all agent types (RawAgent, Agent) by wrapping executor.execute() instead of using middleware - Fix concurrent breakpoint infinite loop by accumulating skip_nodes set across resumes instead of tracking a single skip_node - Fix wildcard breakpoint resolution for ["*"] list format from debug bridge - Fix spurious start executor STARTED events on breakpoint resume - Add HITL interrupt support, resumable storage with KV store, and session persistence via runtime_kv table - Update samples: replace quickstart-agent/multi-agent with quickstart-workflow/hitl-workflow/concurrent - Rewrite tests for checkpoint storage, streaming, and breakpoints (80 tests) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Handoff tools (handoff_to_<executor>) are already represented as edges between agent nodes, so showing them as tool nodes is redundant. Filter them out so the graph only shows non-handoff tools in tool nodes. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…ents are filtered The agent framework's Workflow filters output events to only include those from "output executors". In multi-agent workflows like GroupChat, participant agents are not output executors, so their tool call output events get dropped — causing missing tool state events in the runtime. Fall back to extracting tool events from executor_completed data when no output events were seen for that executor, with dedup tracking to avoid double-emitting in the normal (unfiltered) case. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
372f332 to
ebb332d
Compare
…topologies - Add checkpoint advancement detection to _get_breakpoint_skip() to correctly handle cyclic graphs (GroupChat, handoffs) where executors are visited on every cycle - Merge interrupt.py contents into breakpoints.py (AgentInterruptException, BreakpointMiddleware) - Add breakpoint integration tests for all sample topologies (group-chat, quickstart-workflow, concurrent, handoff, hitl-workflow) - Move agent-framework-orchestrations to main dependencies - Bump version to 0.0.5 - Fix all mypy errors across src and tests - Add LangChain integration to root README.md - Add .vscode/ to .gitignore Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
ebb332d to
99f4086
Compare
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.
Summary
feat: replace session-based state with checkpoints, add breakpoint system
feat: exclude handoff tools from graph tool nodes
fix: extract tool state events from executor_completed when output events are filtered
fix: resolve breakpoint infinite loop in debug streaming with cyclic topologies
_get_breakpoint_skip()to correctly handle cyclic graphs (GroupChat, handoffs) where executors are visited on every cycleinterrupt.pyintobreakpoints.py(AgentInterruptException, BreakpointMiddleware)Test plan
mypy --config-file pyproject.toml .→ 0 errorsruff check .→ 0 errors🤖 Generated with Claude Code