v0.19.0
Highlights
v0.19.0 is a feature release that builds on v0.18.0 with a big step up in the record, replay, and improve workflow plus a new framework adapter. You can now replay many executions in one call, structurally diff an original run against its replays checkpoint by checkpoint, select cohorts of executions to replay, and read named LLM cost and token metrics directly from execution statistics across the SDK, CLI, and MCP. This release also adds an experimental Google ADK adapter for recording and replaying Google Agent Development Kit agents, and a LangGraph replay and fork adapter that rebuilds a recorded LangGraph run from a captured trace. Note that replay's override API was redesigned around explicit override groups, which is a breaking change for code written against the earlier prototype.
Added
- Experimental Google ADK adapter (
KitaruADKRunner,KitaruADKModel,KitaruADKTool) with docs, direct and persisted-workflow examples, isolated no-dev contract and live smoke paths, explicit-wrappercallsmode, and tool-confirmation resume helpers. - Replay-mode detection helpers
kitaru.is_replay(),kitaru.get_replay_runtime_context(), andkitaru.ReplayRuntimeContext, so side-effectful checkpoints can guard their behavior during replay. - Named LLM cost and token metric shortcuts for execution statistics across the SDK, CLI, and MCP (
llm_total_tokens,llm_incurred_tokens,llm_display_cost,llm_estimated_cost). kitaru.diff(original, *executions)for per-checkpoint structural comparison between an original execution and its replays, auto-discovering replays viaoriginal_exec_idwhen omitted.- Unified multi-execution replay through
flow.replay([...], *, at=...),KitaruClient().executions.replay([...], ...), and multi-IDkitaru executions replay. Parents missing theatcheckpoint are skipped in collect mode and recorded inReplaySubmission.skipped. kitaru.diff_matrix(exec_ids)to diff many originals against their auto-discovered replays.- CLI commands
kitaru executions diffandkitaru executions diff-matrix, plus MCP toolskitaru_executions_diff,kitaru_executions_diff_matrix, and a unifiedkitaru_executions_replaythat takes explicit execution IDs. - Client-side cohort selection via
kitaru.cohort(...).resolve(),KitaruClient().executions.cohort(...), CLIkitaru executions cohort(dry-run selection), and MCPkitaru_executions_cohort. - A LangGraph replay and fork adapter (
kitaru.adapters.langgraph.replay) that reconstructs a recorded LangGraph run as a directed graph from a captured trace and forks it for replay, exposingKitaruReplayAgent,KitaruAdapter,import_langgraph_trace/import_trace, and graphedithelpers, with Langfuse and JSONL trace import sources. kitaru executions replaynow prints UI compare URLs (and includescompare_urlin JSON output) for the original execution versus the new replay.KITARU_UI_URLto override the dashboard base URL used for compare and execution deep links when the Kitaru frontend is hosted separately from the API server.
Changed
- Breaking: Redesigned the replay API.
flow.replay(...),KitaruClient().executions.replay(...), CLIkitaru executions replay, and MCPkitaru_executions_replaynow take the checkpoint selector asat=(previouslyfrom_=) with separate override groupsflow_overrides,checkpoint_overrides, andinvocation_overrides(previously a singleoverridesmap), and return a sharedReplaySubmissionresult model (previously aFlowHandle). Code written against the earlier replay signature needs updating. - Clarified Google ADK MCP docs around the safe subset: Kitaru can checkpoint a replay-safe ADK
BaseTool-like object wrapped withKitaruADKTool, but it does not restore ADK MCP processes, sessions, or hidden server state. - Refreshed the Google ADK dependency note:
google-adkstays out of the normal local and dev project environment until the full local server path is certified with the newer FastAPI and Starlette stack.
Fixed
- Kitaru terminal logs now rewrite ZenML's named pipeline completion message to
Flow `...` completed successfully., soPipeline `...` completed successfully.no longer leaks into flow output. - Replay checkpoint overrides now fan out across repeated adapter-generated model and tool calls, while suffixed selectors still target exactly one recorded call.
- Replay output overrides on terminal checkpoints now fail with a clearer error explaining that output replacement requires a downstream consumer.
- MCP replay now lets an omitted
on_erroruse the shared SDK default (failfor one parent,collectfor batches), andkitaru.diff()now scans up to 10,000 same-flow executions when auto-discovering replays before warning that older replays may require explicit IDs. - Unknown checkpoint override targets now give repeated-call guidance when a likely model or tool family exists, pointing users to family-level
checkpoint_overridesor one-callinvocation_overrides. - LangGraph replay import now raises a catchable Kitaru error instead of
SystemExitwhen Langfuse rows never arrive, and live forks support node callables that accept(state, config). KitaruClient.executions.replay()and the pipeline fallback replay path now wait for completion and run terminal LLM usage aggregation before returning, so replay executions exposellm_usage_summaryfor compare and outcomes views.- Cohort selection now hydrates list summaries when checking replay anchors, so
executions cohortmatches originals that only expose checkpoints onexecutions get. kitaru.diff()andkitaru executions diffnow emit one multi-execution compare URL when auto-discovering replays, not one pairwise URL per replay.- Replay planning now re-executes the full live tail after
atfor linear adapter call sequences that lack explicit DAG upstream edges (for example PydanticAIcallscheckpoints afterlookup_policy_tool). FlowHandle.wait()/.get()now return a flow's persisted output instead of raising an ambiguous-result error when an adapter produced several non-result model or tool checkpoints (the commoncheckpoint_strategy="calls"shape) or the flow has an explicit return value.- LLM usage summaries are normally written when executions finish, and
FlowHandle.wait()/.get()can populate missing summaries for older executions or executions where the finish-time summary was not written.
Security
- Raised the
pydantic-ai-slimlower bound and lockfile version to clear CVE-2026-48782.
Full Changelog: v0.18.0...v0.19.0