,
diff --git a/rust/src/generated/session_events.rs b/rust/src/generated/session_events.rs
index a5b123d3b5..c2336aaf98 100644
--- a/rust/src/generated/session_events.rs
+++ b/rust/src/generated/session_events.rs
@@ -78,6 +78,42 @@ pub enum SessionEventType {
SessionCompactionComplete,
#[serde(rename = "session.task_complete")]
SessionTaskComplete,
+ ///
+ ///
+ ///
+ /// **Experimental.** This type is part of an experimental wire-protocol surface
+ /// and may change or be removed in future SDK or CLI releases.
+ ///
+ ///
+ #[serde(rename = "session.fusion_route_started")]
+ SessionFusionRouteStarted,
+ ///
+ ///
+ ///
+ /// **Experimental.** This type is part of an experimental wire-protocol surface
+ /// and may change or be removed in future SDK or CLI releases.
+ ///
+ ///
+ #[serde(rename = "session.fusion_route_failed")]
+ SessionFusionRouteFailed,
+ ///
+ ///
+ ///
+ /// **Experimental.** This type is part of an experimental wire-protocol surface
+ /// and may change or be removed in future SDK or CLI releases.
+ ///
+ ///
+ #[serde(rename = "session.fusion_resolved")]
+ SessionFusionResolved,
+ ///
+ ///
+ ///
+ /// **Experimental.** This type is part of an experimental wire-protocol surface
+ /// and may change or be removed in future SDK or CLI releases.
+ ///
+ ///
+ #[serde(rename = "session.fusion_completed")]
+ SessionFusionCompleted,
#[serde(rename = "user.message")]
UserMessage,
#[serde(rename = "pending_messages.modified")]
@@ -90,6 +126,33 @@ pub enum SessionEventType {
AgentInterrupted,
#[serde(rename = "assistant.intent")]
AssistantIntent,
+ ///
+ ///
+ ///
+ /// **Experimental.** This type is part of an experimental wire-protocol surface
+ /// and may change or be removed in future SDK or CLI releases.
+ ///
+ ///
+ #[serde(rename = "assistant.fusion_phase_started")]
+ AssistantFusionPhaseStarted,
+ ///
+ ///
+ ///
+ /// **Experimental.** This type is part of an experimental wire-protocol surface
+ /// and may change or be removed in future SDK or CLI releases.
+ ///
+ ///
+ #[serde(rename = "assistant.fusion_phase_completed")]
+ AssistantFusionPhaseCompleted,
+ ///
+ ///
+ ///
+ /// **Experimental.** This type is part of an experimental wire-protocol surface
+ /// and may change or be removed in future SDK or CLI releases.
+ ///
+ ///
+ #[serde(rename = "assistant.fusion_phase_failed")]
+ AssistantFusionPhaseFailed,
#[serde(rename = "assistant.server_tool_progress")]
AssistantServerToolProgress,
#[serde(rename = "assistant.reasoning")]
@@ -439,6 +502,42 @@ pub enum SessionEventData {
SessionCompactionComplete(SessionCompactionCompleteData),
#[serde(rename = "session.task_complete")]
SessionTaskComplete(SessionTaskCompleteData),
+ ///
+ ///
+ ///
+ /// **Experimental.** This type is part of an experimental wire-protocol surface
+ /// and may change or be removed in future SDK or CLI releases.
+ ///
+ ///
+ #[serde(rename = "session.fusion_route_started")]
+ SessionFusionRouteStarted(SessionFusionRouteStartedData),
+ ///
+ ///
+ ///
+ /// **Experimental.** This type is part of an experimental wire-protocol surface
+ /// and may change or be removed in future SDK or CLI releases.
+ ///
+ ///
+ #[serde(rename = "session.fusion_route_failed")]
+ SessionFusionRouteFailed(SessionFusionRouteFailedData),
+ ///
+ ///
+ ///
+ /// **Experimental.** This type is part of an experimental wire-protocol surface
+ /// and may change or be removed in future SDK or CLI releases.
+ ///
+ ///
+ #[serde(rename = "session.fusion_resolved")]
+ SessionFusionResolved(SessionFusionResolvedData),
+ ///
+ ///
+ ///
+ /// **Experimental.** This type is part of an experimental wire-protocol surface
+ /// and may change or be removed in future SDK or CLI releases.
+ ///
+ ///
+ #[serde(rename = "session.fusion_completed")]
+ SessionFusionCompleted(SessionFusionCompletedData),
#[serde(rename = "user.message")]
UserMessage(UserMessageData),
#[serde(rename = "pending_messages.modified")]
@@ -451,6 +550,33 @@ pub enum SessionEventData {
AgentInterrupted(AgentInterruptedData),
#[serde(rename = "assistant.intent")]
AssistantIntent(AssistantIntentData),
+ ///
+ ///
+ ///
+ /// **Experimental.** This type is part of an experimental wire-protocol surface
+ /// and may change or be removed in future SDK or CLI releases.
+ ///
+ ///
+ #[serde(rename = "assistant.fusion_phase_started")]
+ AssistantFusionPhaseStarted(AssistantFusionPhaseStartedData),
+ ///
+ ///
+ ///
+ /// **Experimental.** This type is part of an experimental wire-protocol surface
+ /// and may change or be removed in future SDK or CLI releases.
+ ///
+ ///
+ #[serde(rename = "assistant.fusion_phase_completed")]
+ AssistantFusionPhaseCompleted(AssistantFusionPhaseCompletedData),
+ ///
+ ///
+ ///
+ /// **Experimental.** This type is part of an experimental wire-protocol surface
+ /// and may change or be removed in future SDK or CLI releases.
+ ///
+ ///
+ #[serde(rename = "assistant.fusion_phase_failed")]
+ AssistantFusionPhaseFailed(AssistantFusionPhaseFailedData),
#[serde(rename = "assistant.server_tool_progress")]
AssistantServerToolProgress(AssistantServerToolProgressData),
#[serde(rename = "assistant.reasoning")]
@@ -1678,6 +1804,209 @@ pub struct SessionTaskCompleteData {
pub summary: Option,
}
+/// Session event "session.fusion_route_started". Experimental transient signal that HydraFusion routing has started for an eligible turn.
+///
+///
+///
+/// **Experimental.** This type is part of an experimental wire-protocol surface
+/// and may change or be removed in future SDK or CLI releases.
+///
+///
+#[derive(Debug, Clone, Default, Serialize, Deserialize)]
+#[serde(rename_all = "camelCase")]
+pub struct SessionFusionRouteStartedData {
+ /// Identifier for this routing attempt before a durable Fusion turn exists.
+ pub attempt_id: String,
+ /// HydraFusion routing policy requested for the turn.
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub policy: Option,
+ /// Synthetic HydraFusion model selected for the session.
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub synthetic_model: Option,
+ /// Kind of turn being routed.
+ pub turn_kind: FusionTurnKind,
+}
+
+/// Session event "session.fusion_route_failed". Experimental durable HydraFusion routing failure and the deterministic concrete fallback selected for the turn.
+///
+///
+///
+/// **Experimental.** This type is part of an experimental wire-protocol surface
+/// and may change or be removed in future SDK or CLI releases.
+///
+///
+#[derive(Debug, Clone, Default, Serialize, Deserialize)]
+#[serde(rename_all = "camelCase")]
+pub struct SessionFusionRouteFailedData {
+ /// Identifier of the routing attempt that failed.
+ pub attempt_id: String,
+ /// Provider or validation error detail, when available.
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub error_message: Option,
+ /// Concrete model selected as the deterministic fallback.
+ pub fallback_model: String,
+ /// HydraFusion routing policy requested for the turn.
+ pub policy: String,
+ /// Stable machine-readable reason for the routing failure.
+ pub reason: String,
+ /// Elapsed routing time in milliseconds before the failure.
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub routing_latency_ms: Option,
+ /// Synthetic HydraFusion model selected for the session.
+ pub synthetic_model: String,
+}
+
+/// Durable server recommendation for subsequent HydraFusion turns.
+///
+///
+///
+/// **Experimental.** This type is part of an experimental wire-protocol surface
+/// and may change or be removed in future SDK or CLI releases.
+///
+///
+#[derive(Debug, Clone, Default, Serialize, Deserialize)]
+#[serde(rename_all = "camelCase")]
+pub struct FusionFollowUpRecommendation {
+ /// Recommended routing action for the next compaction turn.
+ pub compaction_turn: FusionFollowUpAction,
+ /// Recommended routing action for the next user-message turn.
+ pub user_turn: FusionFollowUpAction,
+}
+
+/// Validated HydraFusion routing capability scores.
+///
+///
+///
+/// **Experimental.** This type is part of an experimental wire-protocol surface
+/// and may change or be removed in future SDK or CLI releases.
+///
+///
+#[derive(Debug, Clone, Default, Serialize, Deserialize)]
+#[serde(rename_all = "camelCase")]
+pub struct FusionScores {
+ /// Code-generation capability score returned by the authenticated router.
+ pub code_gen: f64,
+ /// Debugging capability score returned by the authenticated router.
+ pub debugging: f64,
+ /// Reasoning capability score returned by the authenticated router.
+ pub reasoning: f64,
+ /// Tool-use capability score returned by the authenticated router.
+ pub tool_use: f64,
+}
+
+/// Session event "session.fusion_resolved". Experimental durable validated HydraFusion route and turn policy.
+///
+///
+///
+/// **Experimental.** This type is part of an experimental wire-protocol surface
+/// and may change or be removed in future SDK or CLI releases.
+///
+///
+#[derive(Debug, Clone, Default, Serialize, Deserialize)]
+#[serde(rename_all = "camelCase")]
+pub struct SessionFusionResolvedData {
+ /// Version of the validated HydraFusion event contract.
+ pub contract_version: i64,
+ /// Concrete model used when the planned primary model cannot execute.
+ pub fallback_model: String,
+ /// Router recommendation controlling reuse or rerouting on later turns.
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub follow_up: Option,
+ /// Concrete model recommended for eligible follow-up turns.
+ pub follow_up_model: String,
+ /// Stable identifier for the resolved HydraFusion turn.
+ pub fusion_id: String,
+ /// Version of the executable model universe used for selection.
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub model_universe_version: Option,
+ /// Validated orchestration pattern selected for the turn.
+ pub pattern: FusionPattern,
+ /// Version of the validated execution-plan format.
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub plan_version: Option,
+ /// HydraFusion routing policy used to resolve the plan.
+ pub policy: String,
+ /// Version of the local routing policy.
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub policy_version: Option,
+ /// Concrete model selected for the primary solver phase.
+ pub primary_model: String,
+ /// Router implementation that supplied the plan.
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub route_source: Option,
+ /// Elapsed time in milliseconds required to resolve and validate the route.
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub routing_latency_ms: Option,
+ /// Identifier of the local policy rule that matched.
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub rule_id: Option,
+ /// Zero-based index of the local policy rule that matched.
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub rule_index: Option,
+ /// Human-readable name of the local policy rule that matched.
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub rule_name: Option,
+ /// Validated capability scores used to select the route.
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub scores: Option,
+ /// Concrete model selected for the review or judge phase, when required.
+ pub secondary_model: Option,
+ /// Synthetic HydraFusion model selected for the session.
+ pub synthetic_model: String,
+ /// Identifier of the session turn associated with the route.
+ pub turn_id: String,
+}
+
+/// Session event "session.fusion_completed". Experimental durable aggregate outcome of a HydraFusion turn.
+///
+///
+///
+/// **Experimental.** This type is part of an experimental wire-protocol surface
+/// and may change or be removed in future SDK or CLI releases.
+///
+///
+#[derive(Debug, Clone, Default, Serialize, Deserialize)]
+#[serde(rename_all = "camelCase")]
+pub struct SessionFusionCompletedData {
+ /// Total cached input tokens reported across all phases.
+ pub cached_tokens: i64,
+ /// Total tokens written to prompt cache across all phases.
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub cache_write_tokens: Option,
+ /// Idempotency identifier for the authoritative final commit.
+ pub commit_id: String,
+ /// Reason the turn used a degraded route, when applicable.
+ pub degraded_reason: Option,
+ /// Total elapsed execution time for the HydraFusion turn in milliseconds.
+ pub duration_ms: f64,
+ /// Concrete model that supplied the authoritative final content.
+ pub final_source_model: Option,
+ /// Phase whose output supplied the authoritative final content.
+ pub final_source_phase_id: Option,
+ /// Concrete model recommended for eligible follow-up turns.
+ pub follow_up_model: String,
+ /// Stable identifier for the completed HydraFusion turn.
+ pub fusion_id: String,
+ /// Total input tokens consumed across all phases.
+ pub input_tokens: i64,
+ /// Stable aggregate outcome of the HydraFusion turn.
+ pub outcome: String,
+ /// Total output tokens produced across all phases.
+ pub output_tokens: i64,
+ /// HydraFusion orchestration pattern executed for the turn.
+ pub pattern: FusionPattern,
+ /// Number of concrete phases attempted by the turn.
+ pub phase_count: i64,
+ /// Total concrete model requests made across all phases.
+ pub request_count: i64,
+ /// Synthetic HydraFusion model selected for the session.
+ pub synthetic_model: String,
+ /// Total normalized AI-unit cost reported across all phases, in nano-AIU.
+ pub total_nano_aiu: f64,
+ /// Identifier of the session turn associated with the completion.
+ pub turn_id: String,
+}
+
/// Session event "user.message". Payload of `user.message` with displayed and model-transformed content, attachments, source/delivery metadata, mode, and telemetry IDs.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
@@ -1802,6 +2131,163 @@ pub struct AssistantIntentData {
pub intent: String,
}
+/// Session event "assistant.fusion_phase_started". Experimental transient HydraFusion phase/model/role signal.
+///
+///
+///
+/// **Experimental.** This type is part of an experimental wire-protocol surface
+/// and may change or be removed in future SDK or CLI releases.
+///
+///
+#[derive(Debug, Clone, Default, Serialize, Deserialize)]
+#[serde(rename_all = "camelCase")]
+pub struct AssistantFusionPhaseStartedData {
+ /// Conversation scope in which the phase executes.
+ pub conversation_scope: FusionConversationScope,
+ /// Identifier of the HydraFusion turn containing the phase.
+ pub fusion_id: String,
+ /// Concrete model executing the phase.
+ pub model: String,
+ /// HydraFusion orchestration pattern containing the phase.
+ pub pattern: FusionPattern,
+ /// Stable identifier for the concrete phase.
+ pub phase_id: String,
+ /// Kind of phase being executed.
+ pub phase_kind: FusionPhaseKind,
+ /// Semantic role assigned to the phase.
+ pub role: String,
+}
+
+/// Internal durable terminal request staged by a HydraFusion phase until an idempotent final commit selects it.
+///
+///
+///
+/// **Experimental.** This type is part of an experimental wire-protocol surface
+/// and may change or be removed in future SDK or CLI releases.
+///
+///
+#[derive(Debug, Clone, Default, Serialize, Deserialize)]
+#[serde(rename_all = "camelCase")]
+pub(crate) struct FusionStagedTerminal {
+ pub arguments: String,
+ pub assistant_message: serde_json::Value,
+ pub phase_id: String,
+ pub tool_call_id: String,
+ pub tool_name: String,
+}
+
+/// Aggregate concrete-model usage for one HydraFusion phase.
+///
+///
+///
+/// **Experimental.** This type is part of an experimental wire-protocol surface
+/// and may change or be removed in future SDK or CLI releases.
+///
+///
+#[derive(Debug, Clone, Default, Serialize, Deserialize)]
+#[serde(rename_all = "camelCase")]
+pub struct FusionPhaseUsage {
+ /// Total cached input tokens reported for the phase.
+ pub cached_tokens: i64,
+ /// Total tokens written to prompt cache during the phase.
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub cache_write_tokens: Option,
+ /// Total input tokens consumed by the phase.
+ pub input_tokens: i64,
+ /// Total output tokens produced by the phase.
+ pub output_tokens: i64,
+ /// Number of concrete model requests made by the phase.
+ pub request_count: i64,
+ /// Total normalized AI-unit cost reported for the phase, in nano-AIU.
+ pub total_nano_aiu: f64,
+}
+
+/// Session event "assistant.fusion_phase_completed". Experimental durable HydraFusion phase output and lossless replay checkpoint.
+///
+///
+///
+/// **Experimental.** This type is part of an experimental wire-protocol surface
+/// and may change or be removed in future SDK or CLI releases.
+///
+///
+#[derive(Debug, Clone, Default, Serialize, Deserialize)]
+#[serde(rename_all = "camelCase")]
+pub struct AssistantFusionPhaseCompletedData {
+ /// Provider-normalized textual output produced by the phase.
+ pub content: String,
+ /// Conversation scope in which the phase executed.
+ pub conversation_scope: FusionConversationScope,
+ /// Elapsed execution time for the phase in milliseconds.
+ pub duration_ms: f64,
+ /// Identifier of the HydraFusion turn containing the phase.
+ pub fusion_id: String,
+ /// Concrete model that executed the phase.
+ pub model: String,
+ /// Stable identifier for the completed phase.
+ pub phase_id: String,
+ /// Kind of phase that completed.
+ pub phase_kind: FusionPhaseKind,
+ /// Exact provider-normalized message used to reconstruct canonical model history.
+ #[doc(hidden)]
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub(crate) projection_message: Option,
+ /// Projection action for the exact internal message.
+ #[doc(hidden)]
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub(crate) projection_mode: Option,
+ /// Semantic role assigned to the completed phase.
+ pub role: String,
+ /// Terminal request held outside canonical state until selected by the final commit.
+ #[doc(hidden)]
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub(crate) staged_terminal: Option,
+ /// Durable outcome status of the phase.
+ pub status: FusionPhaseStatus,
+ /// Aggregate concrete-model usage consumed by the phase.
+ pub usage: FusionPhaseUsage,
+ /// Structured judge or critic verdict, when the phase produces one.
+ pub verdict: Option,
+}
+
+/// Session event "assistant.fusion_phase_failed". Experimental durable typed HydraFusion phase failure and degradation transition.
+///
+///
+///
+/// **Experimental.** This type is part of an experimental wire-protocol surface
+/// and may change or be removed in future SDK or CLI releases.
+///
+///
+#[derive(Debug, Clone, Default, Serialize, Deserialize)]
+#[serde(rename_all = "camelCase")]
+pub struct AssistantFusionPhaseFailedData {
+ /// Conversation scope in which the phase executed.
+ pub conversation_scope: FusionConversationScope,
+ /// Identifier of the fallback phase used to continue the turn after degradation.
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub degraded_to_phase_id: Option,
+ /// Elapsed execution time before the phase failed, in milliseconds.
+ pub duration_ms: f64,
+ /// Provider or execution error detail, when available.
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub error_message: Option,
+ /// Identifier of the HydraFusion turn containing the phase.
+ pub fusion_id: String,
+ /// Concrete model that attempted the phase.
+ pub model: String,
+ /// Stable identifier for the failed phase.
+ pub phase_id: String,
+ /// Kind of phase that failed.
+ pub phase_kind: FusionPhaseKind,
+ /// Stable machine-readable reason for the phase failure.
+ pub reason: String,
+ /// Semantic role assigned to the failed phase.
+ pub role: String,
+ /// Durable outcome status of the phase.
+ pub status: FusionPhaseStatus,
+ /// Aggregate concrete-model usage consumed before the failure.
+ pub usage: FusionPhaseUsage,
+}
+
/// Session event "assistant.server_tool_progress". Live progress signal for a provider-hosted server tool (e.g. hosted web search) while it runs, before the finalized serverTools envelope lands on the terminal assistant.message
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
@@ -1947,6 +2433,48 @@ pub struct Citations {
pub spans: Vec,
}
+/// Experimental attribution linking an ordinary event to the HydraFusion turn, phase, and concrete source that produced it.
+///
+///
+///
+/// **Experimental.** This type is part of an experimental wire-protocol surface
+/// and may change or be removed in future SDK or CLI releases.
+///
+///
+#[derive(Debug, Clone, Default, Serialize, Deserialize)]
+#[serde(rename_all = "camelCase")]
+pub struct FusionAttribution {
+ /// Idempotency identifier for the authoritative commit, when the event belongs to the selected output.
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub commit_id: Option,
+ /// Conversation scope in which the concrete phase executed.
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub conversation_scope: Option,
+ /// Stable identifier for the HydraFusion turn that produced the event.
+ pub fusion_id: String,
+ /// HydraFusion orchestration pattern selected for the turn.
+ pub pattern: String,
+ /// Identifier of the concrete phase that produced the event.
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub phase_id: Option,
+ /// Kind of concrete phase that produced the event.
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub phase_kind: Option,
+ /// HydraFusion routing policy used for the turn.
+ pub policy: String,
+ /// Semantic role assigned to the concrete phase.
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub role: Option,
+ /// Concrete model that produced the attributed event.
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub source_model: Option,
+ /// Phase whose output supplied the authoritative content, when different from the executing phase.
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub source_phase_id: Option,
+ /// Synthetic HydraFusion model selected for the session.
+ pub synthetic_model: String,
+}
+
/// Neutral provider-tagged reasoning content blocks preserved verbatim for round-tripping
///
///
@@ -2051,6 +2579,16 @@ pub struct AssistantMessageData {
/// Encrypted reasoning content from OpenAI models. Session-bound and stripped on resume.
#[serde(skip_serializing_if = "Option::is_none")]
pub encrypted_content: Option
,
+ /// Experimental HydraFusion source attribution for this ordinary authoritative assistant message.
+ ///
+ ///
+ ///
+ /// **Experimental.** This type is part of an experimental wire-protocol surface
+ /// and may change or be removed in future SDK or CLI releases.
+ ///
+ ///
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub fusion: Option,
/// CAPI interaction ID for correlating this message with upstream telemetry
#[serde(skip_serializing_if = "Option::is_none")]
pub interaction_id: Option,
@@ -2277,6 +2815,16 @@ pub struct AssistantUsageData {
#[doc(hidden)]
#[serde(skip_serializing_if = "Option::is_none")]
pub(crate) frontier_source: Option,
+ /// Experimental HydraFusion attribution for this concrete model call's usage.
+ ///
+ ///
+ ///
+ /// **Experimental.** This type is part of an experimental wire-protocol surface
+ /// and may change or be removed in future SDK or CLI releases.
+ ///
+ ///
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub fusion: Option,
/// What initiated this API call (e.g., "sub-agent", "mcp-sampling"); absent for user-initiated calls
#[serde(skip_serializing_if = "Option::is_none")]
pub initiator: Option,
@@ -2494,6 +3042,16 @@ pub struct ModelCallFailureData {
/// Whether the failure originated from an API response or the request transport
#[serde(skip_serializing_if = "Option::is_none")]
pub failure_kind: Option,
+ /// Experimental HydraFusion attribution for this failed concrete model call.
+ ///
+ ///
+ ///
+ /// **Experimental.** This type is part of an experimental wire-protocol surface
+ /// and may change or be removed in future SDK or CLI releases.
+ ///
+ ///
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub fusion: Option,
/// What initiated this API call (e.g., "sub-agent", "mcp-sampling"); absent for user-initiated calls
#[serde(skip_serializing_if = "Option::is_none")]
pub initiator: Option,
@@ -2568,6 +3126,16 @@ pub struct ModelCallFinishedData {
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ModelCallStartData {
+ /// Experimental HydraFusion attribution for this concrete model call.
+ ///
+ ///
+ ///
+ /// **Experimental.** This type is part of an experimental wire-protocol surface
+ /// and may change or be removed in future SDK or CLI releases.
+ ///
+ ///
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub fusion: Option,
/// Model identifier used for this API call, when known
#[serde(skip_serializing_if = "Option::is_none")]
pub model: Option,
@@ -2665,6 +3233,16 @@ pub struct ToolExecutionStartData {
/// When true, the tool output should be displayed expanded (verbatim) in the CLI timeline
#[serde(skip_serializing_if = "Option::is_none")]
pub display_verbatim: Option,
+ /// Experimental HydraFusion attribution for this tool execution.
+ ///
+ ///
+ ///
+ /// **Experimental.** This type is part of an experimental wire-protocol surface
+ /// and may change or be removed in future SDK or CLI releases.
+ ///
+ ///
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub fusion: Option,
/// Name of the MCP server hosting this tool, when the tool is an MCP tool
#[serde(skip_serializing_if = "Option::is_none")]
pub mcp_server_name: Option,
@@ -2863,6 +3441,9 @@ pub struct ToolExecutionCompleteContentShellExit {
pub cwd: Option,
/// Exit code from the completed shell command
pub exit_code: i64,
+ /// Path reported in the shell session's filesystem namespace when shell output exceeded the configured large-output threshold.
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub output_file_path: Option,
/// Output associated with this shell command, if available. May be partial, truncated, or a preview; not guaranteed to be full output.
#[serde(skip_serializing_if = "Option::is_none")]
pub output_preview: Option,
@@ -3173,6 +3754,16 @@ pub struct ToolExecutionCompleteData {
/// Error details when the tool execution failed
#[serde(skip_serializing_if = "Option::is_none")]
pub error: Option,
+ /// Experimental HydraFusion attribution for this tool completion.
+ ///
+ ///
+ ///
+ /// **Experimental.** This type is part of an experimental wire-protocol surface
+ /// and may change or be removed in future SDK or CLI releases.
+ ///
+ ///
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub fusion: Option,
/// CAPI interaction ID for correlating this tool execution with upstream telemetry
#[serde(skip_serializing_if = "Option::is_none")]
pub interaction_id: Option,
@@ -5999,6 +6590,75 @@ pub enum TaskCompletionOutcome {
Unknown,
}
+/// Kind of turn for which HydraFusion routing is running.
+///
+///
+///
+/// **Experimental.** This type is part of an experimental wire-protocol surface
+/// and may change or be removed in future SDK or CLI releases.
+///
+///
+#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
+pub enum FusionTurnKind {
+ /// A user-message turn.
+ #[serde(rename = "user")]
+ User,
+ /// A conversation-compaction turn.
+ #[serde(rename = "compaction")]
+ Compaction,
+ /// Unknown variant for forward compatibility.
+ #[default]
+ #[serde(other)]
+ Unknown,
+}
+
+/// Server-recommended routing behavior for a later HydraFusion turn.
+///
+///
+///
+/// **Experimental.** This type is part of an experimental wire-protocol surface
+/// and may change or be removed in future SDK or CLI releases.
+///
+///
+#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
+pub enum FusionFollowUpAction {
+ /// Reuse the durable primary model without routing.
+ #[serde(rename = "reuse_primary")]
+ ReusePrimary,
+ /// Request a new routing decision.
+ #[serde(rename = "reroute")]
+ Reroute,
+ /// Unknown variant for forward compatibility.
+ #[default]
+ #[serde(other)]
+ Unknown,
+}
+
+/// Validated HydraFusion execution pattern.
+///
+///
+///
+/// **Experimental.** This type is part of an experimental wire-protocol surface
+/// and may change or be removed in future SDK or CLI releases.
+///
+///
+#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
+pub enum FusionPattern {
+ /// Run one primary solver phase.
+ #[serde(rename = "single")]
+ Single,
+ /// Run a primary phase, a judge, and an optional repair.
+ #[serde(rename = "cascade")]
+ Cascade,
+ /// Run a primary draft, a read-only critique, and a revision.
+ #[serde(rename = "critique")]
+ Critique,
+ /// Unknown variant for forward compatibility.
+ #[default]
+ #[serde(other)]
+ Unknown,
+}
+
/// The agent mode that was active when this message was sent
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub enum UserMessageAgentMode {
@@ -6089,6 +6749,115 @@ pub enum ModelCallFailureTransport {
Unknown,
}
+/// Conversation scope in which a HydraFusion phase executes.
+///
+///
+///
+/// **Experimental.** This type is part of an experimental wire-protocol surface
+/// and may change or be removed in future SDK or CLI releases.
+///
+///
+#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
+pub enum FusionConversationScope {
+ /// Canonical root conversation history.
+ #[serde(rename = "root")]
+ Root,
+ /// Isolated read-only review history that does not enter the root conversation.
+ #[serde(rename = "review")]
+ Review,
+ /// Unknown variant for forward compatibility.
+ #[default]
+ #[serde(other)]
+ Unknown,
+}
+
+/// HydraFusion phase kind.
+///
+///
+///
+/// **Experimental.** This type is part of an experimental wire-protocol surface
+/// and may change or be removed in future SDK or CLI releases.
+///
+///
+#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
+pub enum FusionPhaseKind {
+ /// Primary solver phase.
+ #[serde(rename = "primary")]
+ Primary,
+ /// Read-only cascade judge phase.
+ #[serde(rename = "judge")]
+ Judge,
+ /// Cascade repair phase.
+ #[serde(rename = "repair")]
+ Repair,
+ /// Initial critique-pattern draft phase.
+ #[serde(rename = "draft")]
+ Draft,
+ /// Read-only critique phase.
+ #[serde(rename = "critic")]
+ Critic,
+ /// Critique-pattern revision phase.
+ #[serde(rename = "revision")]
+ Revision,
+ /// Follow-up phase continuing from the resolved model.
+ #[serde(rename = "follow_up")]
+ FollowUp,
+ /// Unknown variant for forward compatibility.
+ #[default]
+ #[serde(other)]
+ Unknown,
+}
+
+/// How a durable phase checkpoint contributes its exact message to canonical root history.
+///
+///
+///
+/// **Experimental.** This type is part of an experimental wire-protocol surface
+/// and may change or be removed in future SDK or CLI releases.
+///
+///
+#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
+pub enum FusionProjectionMode {
+ /// Append the exact root message immediately.
+ #[serde(rename = "append")]
+ Append,
+ /// Hold a terminal message outside canonical history until the final commit selects it.
+ #[serde(rename = "staged")]
+ Staged,
+ /// Do not project the checkpoint into root history.
+ #[serde(rename = "none")]
+ None,
+ /// Unknown variant for forward compatibility.
+ #[default]
+ #[serde(other)]
+ Unknown,
+}
+
+/// Durable outcome status of a HydraFusion phase.
+///
+///
+///
+/// **Experimental.** This type is part of an experimental wire-protocol surface
+/// and may change or be removed in future SDK or CLI releases.
+///
+///
+#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
+pub enum FusionPhaseStatus {
+ /// The phase completed successfully.
+ #[serde(rename = "succeeded")]
+ Succeeded,
+ /// The phase failed.
+ #[serde(rename = "failed")]
+ Failed,
+ /// The phase was cancelled.
+ #[serde(rename = "cancelled")]
+ Cancelled,
+ /// Unknown variant for forward compatibility.
+ #[default]
+ #[serde(other)]
+ Unknown,
+}
+
/// Tool call type: "function" for standard tool calls, "custom" for grammar-based tool calls. Defaults to "function" when absent.
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub enum AssistantMessageToolRequestType {
diff --git a/test/harness/package-lock.json b/test/harness/package-lock.json
index 5566e2e34c..ddcf433694 100644
--- a/test/harness/package-lock.json
+++ b/test/harness/package-lock.json
@@ -9,7 +9,7 @@
"version": "1.0.0",
"license": "ISC",
"devDependencies": {
- "@github/copilot": "^1.0.81-11",
+ "@github/copilot": "^1.0.81-12",
"@modelcontextprotocol/sdk": "^1.26.0",
"@types/node": "^25.3.3",
"@types/node-forge": "^1.3.14",
@@ -472,8 +472,8 @@
}
},
"node_modules/@github/copilot": {
- "version": "1.0.81-11",
- "integrity": "sha512-F7hZ6G6fhWH4uq862mbs2JE3nL0KIVBOc94/EFOdEjux3oHUQst9a06gKibEJS6VRULaYTXzatA1EAgNC9dzFA==",
+ "version": "1.0.81-12",
+ "integrity": "sha512-Gs0LB6j8C2D02oagnBaX+g8U03ulT3utomXnW9TrZWdtY4JVMRIu20cr/aMkr24xATX9jUbPbTfGJAwzP7N/gA==",
"dev": true,
"license": "SEE LICENSE IN LICENSE.md",
"dependencies": {
@@ -483,19 +483,19 @@
"copilot": "npm-loader.js"
},
"optionalDependencies": {
- "@github/copilot-darwin-arm64": "1.0.81-11",
- "@github/copilot-darwin-x64": "1.0.81-11",
- "@github/copilot-linux-arm64": "1.0.81-11",
- "@github/copilot-linux-x64": "1.0.81-11",
- "@github/copilot-linuxmusl-arm64": "1.0.81-11",
- "@github/copilot-linuxmusl-x64": "1.0.81-11",
- "@github/copilot-win32-arm64": "1.0.81-11",
- "@github/copilot-win32-x64": "1.0.81-11"
+ "@github/copilot-darwin-arm64": "1.0.81-12",
+ "@github/copilot-darwin-x64": "1.0.81-12",
+ "@github/copilot-linux-arm64": "1.0.81-12",
+ "@github/copilot-linux-x64": "1.0.81-12",
+ "@github/copilot-linuxmusl-arm64": "1.0.81-12",
+ "@github/copilot-linuxmusl-x64": "1.0.81-12",
+ "@github/copilot-win32-arm64": "1.0.81-12",
+ "@github/copilot-win32-x64": "1.0.81-12"
}
},
"node_modules/@github/copilot-darwin-arm64": {
- "version": "1.0.81-11",
- "integrity": "sha512-3eLs71CLnJH9RNnESnv4esipZPeGXMlBxQeKXwZY+crwcW2RAR8YuovQyfoZ/5by1PLPbYrOjXNfQL6kXSisrA==",
+ "version": "1.0.81-12",
+ "integrity": "sha512-oaJHeCJpvr9ClfrnhFou2AZUd7SqxGrdCkBnVM1tYduUDPzb9xqdFsMcJn2g0hfPM1yO3khjWU6WQxmuQCyJnA==",
"cpu": [
"arm64"
],
@@ -510,8 +510,8 @@
}
},
"node_modules/@github/copilot-darwin-x64": {
- "version": "1.0.81-11",
- "integrity": "sha512-GdFLiUC8UL9k6K+woG8AyL3zBafd0Br1TIPDV5iiZsyBtTe4g67FjL7DGCYDt6AN9G43jWdK0M0InoNDVq1K1A==",
+ "version": "1.0.81-12",
+ "integrity": "sha512-lYyFpCEA/usTGJSKWx1X5U4a4DiJ9A1A7vXrE0uE+HjS/9eJE2NBR1z3fPUP0V8HL0JUqAsSdM6rPbFfiE1c+Q==",
"cpu": [
"x64"
],
@@ -526,8 +526,8 @@
}
},
"node_modules/@github/copilot-linux-arm64": {
- "version": "1.0.81-11",
- "integrity": "sha512-C4hcAow5CdaVJITbdtGqFgxWpW7TqwyCPNn8OtcbvdWeiKcfOBDrgkvbsezG98/5Ovs3HWxZRT4oZqCEmGF9Ww==",
+ "version": "1.0.81-12",
+ "integrity": "sha512-5jV7xuoqGndoQFxeM06IuEe4oEhY03PBIYyghvFVptQWY7Cj/Q3CMogIUaIQ+ugjuV8oRgBpm1JLJmr5Cw4FHA==",
"cpu": [
"arm64"
],
@@ -542,8 +542,8 @@
}
},
"node_modules/@github/copilot-linux-x64": {
- "version": "1.0.81-11",
- "integrity": "sha512-izu0PwWx+wL4zxacO6cd6r0zMMMQ3pTz+2euWcAd7HCJ/CIR6+YYfjU3TI3TPBZ9zDLZGoxHKYYPfJ1ZbSTzEg==",
+ "version": "1.0.81-12",
+ "integrity": "sha512-/P0SMTeHQoMlV7MX+GCvIkht2uXZkLroyFMGjum+pD8XG7AsN8aozjILd5+JFEr6uxyhqnPjSOWj/vjmzmMoDA==",
"cpu": [
"x64"
],
@@ -558,8 +558,8 @@
}
},
"node_modules/@github/copilot-linuxmusl-arm64": {
- "version": "1.0.81-11",
- "integrity": "sha512-uWGUjaxOSMu6dKFWcTvXGUUp76vC3OV7nlSupecRkQ7gA3OxdrrB8rXE5/leC606Hk6oe9Wl7wKCH9EwuZ6afg==",
+ "version": "1.0.81-12",
+ "integrity": "sha512-XN6rK+7nv6K7Hv/fIJ4Wma+FCZFff9KaH5wES2VhWSS4Xfd4QCZQuiIWGHSmdo1MKarqp0ngx9t2VAtDY7lr7Q==",
"cpu": [
"arm64"
],
@@ -574,8 +574,8 @@
}
},
"node_modules/@github/copilot-linuxmusl-x64": {
- "version": "1.0.81-11",
- "integrity": "sha512-BpWKd/iu1tTyuPR2zuPFs1pVOlley4yt/TXkn6/gVwt52VI0rUxEO+n77RVjDcyMxWaUApbad2VNRPIH77guCA==",
+ "version": "1.0.81-12",
+ "integrity": "sha512-UUyK6Ru8kejqtTMyiiFNTNVFEPk4Qx7kaIznBLRSrR1jgrmelGjTMT6bDUlNTzqWPclUjdWF5kmCmT+urvSuqg==",
"cpu": [
"x64"
],
@@ -590,8 +590,8 @@
}
},
"node_modules/@github/copilot-win32-arm64": {
- "version": "1.0.81-11",
- "integrity": "sha512-GOK3cACgD96m065uJxbgcXL7MQ1qm+wq1qtvGBpprY0r9wTYJG/rVCtayjYB6B57rnaBwPll3+PQ2J1qgfO57A==",
+ "version": "1.0.81-12",
+ "integrity": "sha512-ACx+faBJ/z9EzjLaZM+zEbB6+3wmj6nTjel0Q+VPD7eDhTwujSvfYGZ5nv2TMi1JN5NAua+HLE1MGhIdS1wJXw==",
"cpu": [
"arm64"
],
@@ -606,8 +606,8 @@
}
},
"node_modules/@github/copilot-win32-x64": {
- "version": "1.0.81-11",
- "integrity": "sha512-u4K6UU2iGQJqQwsdHNilJBwiaC48PfMsWVFnTSlJD5lCYp9zCk1odrvrcmB3ARYinE/IcXLUosiHaM/ChR/pdA==",
+ "version": "1.0.81-12",
+ "integrity": "sha512-m3D/9ww1laJLQahHUjd6e0c9ziikJuTPgSotJ0hFqXXkxacrxvAFAiWduhyeotl63IShMZk4M3jz59SHV9un9w==",
"cpu": [
"x64"
],
diff --git a/test/harness/package.json b/test/harness/package.json
index e8868750a0..97bb969666 100644
--- a/test/harness/package.json
+++ b/test/harness/package.json
@@ -14,7 +14,7 @@
"node": "^20.19.0 || >=22.12.0"
},
"devDependencies": {
- "@github/copilot": "^1.0.81-11",
+ "@github/copilot": "^1.0.81-12",
"@modelcontextprotocol/sdk": "^1.26.0",
"@types/node": "^25.3.3",
"@types/node-forge": "^1.3.14",
From c6b136fbfa6254fcee6a26a985ee3d2ea65b9aac Mon Sep 17 00:00:00 2001
From: Carlos Alexandro Becker
Date: Wed, 26 Aug 2026 19:39:45 -0300
Subject: [PATCH 2/3] test(dotnet): refresh view replay snapshots
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Signed-off-by: Carlos Alexandro Becker
---
test/snapshots/builtin_tools/should_create_a_new_file.yaml | 2 +-
.../builtin_tools/should_edit_a_file_successfully.yaml | 5 +----
.../builtin_tools/should_read_file_with_line_range.yaml | 6 +++---
.../should_use_client_cwd_for_default_workingdirectory.yaml | 2 +-
...events_in_correct_order_for_tool_using_conversation.yaml | 2 +-
...ould_emit_tool_execution_events_with_correct_fields.yaml | 2 +-
...reserve_message_order_in_getmessages_after_tool_use.yaml | 2 +-
...etooluse_and_posttooluse_hooks_for_single_tool_call.yaml | 2 +-
...uld_invoke_posttooluse_hook_after_model_runs_a_tool.yaml | 2 +-
...hould_invoke_pretooluse_hook_when_model_runs_a_tool.yaml | 2 +-
...ould_invoke_permission_handler_for_write_operations.yaml | 4 ++--
.../snapshots/session/should_send_with_file_attachment.yaml | 2 +-
.../session_config/should_accept_message_attachments.yaml | 2 +-
.../should_apply_workingdirectory_on_session_resume.yaml | 2 +-
.../should_use_workingdirectory_for_tool_execution.yaml | 2 +-
...ld_apply_transform_modifications_to_section_content.yaml | 2 +-
...uld_invoke_transform_callbacks_with_section_content.yaml | 2 +-
..._work_with_static_overrides_and_transforms_together.yaml | 2 +-
test/snapshots/tools/invokes_built_in_tools.yaml | 2 +-
19 files changed, 22 insertions(+), 25 deletions(-)
diff --git a/test/snapshots/builtin_tools/should_create_a_new_file.yaml b/test/snapshots/builtin_tools/should_create_a_new_file.yaml
index bf9288cf01..8afe8b38b6 100644
--- a/test/snapshots/builtin_tools/should_create_a_new_file.yaml
+++ b/test/snapshots/builtin_tools/should_create_a_new_file.yaml
@@ -54,6 +54,6 @@ conversations:
arguments: '{"path":"${workdir}/new_file.txt"}'
- role: tool
tool_call_id: toolcall_2
- content: 1. Created by test
+ content: Created by test
- role: assistant
content: ✓ Done! Created `new_file.txt` with content "Created by test" and confirmed the content matches.
diff --git a/test/snapshots/builtin_tools/should_edit_a_file_successfully.yaml b/test/snapshots/builtin_tools/should_edit_a_file_successfully.yaml
index 0f21418628..78ca3bbbc3 100644
--- a/test/snapshots/builtin_tools/should_edit_a_file_successfully.yaml
+++ b/test/snapshots/builtin_tools/should_edit_a_file_successfully.yaml
@@ -56,10 +56,7 @@ conversations:
arguments: '{"path":"${workdir}/edit_me.txt"}'
- role: tool
tool_call_id: toolcall_2
- content: |-
- 1. Hi Universe
- 2. Goodbye World
- 3.
+ content: "Hi Universe\nGoodbye World\n"
- role: assistant
content: |-
Done! The file now contains:
diff --git a/test/snapshots/builtin_tools/should_read_file_with_line_range.yaml b/test/snapshots/builtin_tools/should_read_file_with_line_range.yaml
index cd17d86708..601ae0f04c 100644
--- a/test/snapshots/builtin_tools/should_read_file_with_line_range.yaml
+++ b/test/snapshots/builtin_tools/should_read_file_with_line_range.yaml
@@ -45,9 +45,9 @@ conversations:
- role: tool
tool_call_id: toolcall_1
content: |-
- 2. line2
- 3. line3
- 4. line4
+ line2
+ line3
+ line4
- role: assistant
content: |-
Lines 2 through 4 of 'lines.txt' contain:
diff --git a/test/snapshots/client_options/should_use_client_cwd_for_default_workingdirectory.yaml b/test/snapshots/client_options/should_use_client_cwd_for_default_workingdirectory.yaml
index 6d9167e94a..469d091288 100644
--- a/test/snapshots/client_options/should_use_client_cwd_for_default_workingdirectory.yaml
+++ b/test/snapshots/client_options/should_use_client_cwd_for_default_workingdirectory.yaml
@@ -25,6 +25,6 @@ conversations:
task.
- role: tool
tool_call_id: toolcall_1
- content: 1. I am in the client cwd
+ content: I am in the client cwd
- role: assistant
content: 'The file `marker.txt` says: "I am in the client cwd"'
diff --git a/test/snapshots/event_fidelity/should_emit_events_in_correct_order_for_tool_using_conversation.yaml b/test/snapshots/event_fidelity/should_emit_events_in_correct_order_for_tool_using_conversation.yaml
index 8ce730f0fb..c8f272e6b9 100644
--- a/test/snapshots/event_fidelity/should_emit_events_in_correct_order_for_tool_using_conversation.yaml
+++ b/test/snapshots/event_fidelity/should_emit_events_in_correct_order_for_tool_using_conversation.yaml
@@ -44,7 +44,7 @@ conversations:
task.
- role: tool
tool_call_id: toolcall_1
- content: 1. Hello World
+ content: Hello World
- role: assistant
content: |-
The file 'hello.txt' contains:
diff --git a/test/snapshots/event_fidelity/should_emit_tool_execution_events_with_correct_fields.yaml b/test/snapshots/event_fidelity/should_emit_tool_execution_events_with_correct_fields.yaml
index a6583a15ec..46fd7715ab 100644
--- a/test/snapshots/event_fidelity/should_emit_tool_execution_events_with_correct_fields.yaml
+++ b/test/snapshots/event_fidelity/should_emit_tool_execution_events_with_correct_fields.yaml
@@ -44,7 +44,7 @@ conversations:
task.
- role: tool
tool_call_id: toolcall_1
- content: 1. test data
+ content: test data
- role: assistant
content: |-
The file `data.txt` contains:
diff --git a/test/snapshots/event_fidelity/should_preserve_message_order_in_getmessages_after_tool_use.yaml b/test/snapshots/event_fidelity/should_preserve_message_order_in_getmessages_after_tool_use.yaml
index 2799cdec61..1797cc16b1 100644
--- a/test/snapshots/event_fidelity/should_preserve_message_order_in_getmessages_after_tool_use.yaml
+++ b/test/snapshots/event_fidelity/should_preserve_message_order_in_getmessages_after_tool_use.yaml
@@ -15,6 +15,6 @@ conversations:
arguments: '{"path":"order.txt"}'
- role: tool
tool_call_id: toolcall_0
- content: 1. ORDER_CONTENT_42
+ content: ORDER_CONTENT_42
- role: assistant
content: The number in 'order.txt' is **42**.
diff --git a/test/snapshots/hooks/should_invoke_both_pretooluse_and_posttooluse_hooks_for_single_tool_call.yaml b/test/snapshots/hooks/should_invoke_both_pretooluse_and_posttooluse_hooks_for_single_tool_call.yaml
index 6a51857ab0..9ed9431545 100644
--- a/test/snapshots/hooks/should_invoke_both_pretooluse_and_posttooluse_hooks_for_single_tool_call.yaml
+++ b/test/snapshots/hooks/should_invoke_both_pretooluse_and_posttooluse_hooks_for_single_tool_call.yaml
@@ -44,7 +44,7 @@ conversations:
task.
- role: tool
tool_call_id: toolcall_1
- content: 1. Testing both hooks!
+ content: Testing both hooks!
- role: assistant
content: |-
The file **both.txt** contains:
diff --git a/test/snapshots/hooks/should_invoke_posttooluse_hook_after_model_runs_a_tool.yaml b/test/snapshots/hooks/should_invoke_posttooluse_hook_after_model_runs_a_tool.yaml
index 18b324f098..2a5f1ae446 100644
--- a/test/snapshots/hooks/should_invoke_posttooluse_hook_after_model_runs_a_tool.yaml
+++ b/test/snapshots/hooks/should_invoke_posttooluse_hook_after_model_runs_a_tool.yaml
@@ -44,7 +44,7 @@ conversations:
task.
- role: tool
tool_call_id: toolcall_1
- content: 1. World from the test!
+ content: World from the test!
- role: assistant
content: |-
The file `world.txt` contains:
diff --git a/test/snapshots/hooks/should_invoke_pretooluse_hook_when_model_runs_a_tool.yaml b/test/snapshots/hooks/should_invoke_pretooluse_hook_when_model_runs_a_tool.yaml
index 1ce0fe67a0..f695c60f3d 100644
--- a/test/snapshots/hooks/should_invoke_pretooluse_hook_when_model_runs_a_tool.yaml
+++ b/test/snapshots/hooks/should_invoke_pretooluse_hook_when_model_runs_a_tool.yaml
@@ -44,7 +44,7 @@ conversations:
task.
- role: tool
tool_call_id: toolcall_1
- content: 1. Hello from the test!
+ content: Hello from the test!
- role: assistant
content: |-
The file **hello.txt** contains:
diff --git a/test/snapshots/permissions/should_invoke_permission_handler_for_write_operations.yaml b/test/snapshots/permissions/should_invoke_permission_handler_for_write_operations.yaml
index a4ede6fcb1..3f05a8c6de 100644
--- a/test/snapshots/permissions/should_invoke_permission_handler_for_write_operations.yaml
+++ b/test/snapshots/permissions/should_invoke_permission_handler_for_write_operations.yaml
@@ -47,7 +47,7 @@ conversations:
task.
- role: tool
tool_call_id: toolcall_1
- content: 1. original content
+ content: original content
- role: assistant
content: "Now I'll replace 'original' with 'modified':"
- role: assistant
@@ -82,7 +82,7 @@ conversations:
task.
- role: tool
tool_call_id: toolcall_1
- content: 1. original content
+ content: original content
- role: assistant
content: "Now I'll replace 'original' with 'modified':"
tool_calls:
diff --git a/test/snapshots/session/should_send_with_file_attachment.yaml b/test/snapshots/session/should_send_with_file_attachment.yaml
index 23e05d946b..2e8e4d1d2d 100644
--- a/test/snapshots/session/should_send_with_file_attachment.yaml
+++ b/test/snapshots/session/should_send_with_file_attachment.yaml
@@ -58,7 +58,7 @@ conversations:
task.
- role: tool
tool_call_id: toolcall_1
- content: 1. FILE_ATTACHMENT_SENTINEL
+ content: FILE_ATTACHMENT_SENTINEL
- role: assistant
content: |-
The file contains:
diff --git a/test/snapshots/session_config/should_accept_message_attachments.yaml b/test/snapshots/session_config/should_accept_message_attachments.yaml
index e9fbabb05e..5525d1fb04 100644
--- a/test/snapshots/session_config/should_accept_message_attachments.yaml
+++ b/test/snapshots/session_config/should_accept_message_attachments.yaml
@@ -61,7 +61,7 @@ conversations:
task.
- role: tool
tool_call_id: toolcall_1
- content: 1. This file is attached
+ content: This file is attached
- role: assistant
content: |-
The attached file contains a single line of text that says: "This file is attached"
diff --git a/test/snapshots/session_config/should_apply_workingdirectory_on_session_resume.yaml b/test/snapshots/session_config/should_apply_workingdirectory_on_session_resume.yaml
index 52cc114f94..9d3dd78ff1 100644
--- a/test/snapshots/session_config/should_apply_workingdirectory_on_session_resume.yaml
+++ b/test/snapshots/session_config/should_apply_workingdirectory_on_session_resume.yaml
@@ -25,7 +25,7 @@ conversations:
task.
- role: tool
tool_call_id: toolcall_1
- content: 1. I am in the resume working directory
+ content: I am in the resume working directory
- role: assistant
content: |-
The file `resume-marker.txt` says:
diff --git a/test/snapshots/session_config/should_use_workingdirectory_for_tool_execution.yaml b/test/snapshots/session_config/should_use_workingdirectory_for_tool_execution.yaml
index 18dfab04e6..40000d491b 100644
--- a/test/snapshots/session_config/should_use_workingdirectory_for_tool_execution.yaml
+++ b/test/snapshots/session_config/should_use_workingdirectory_for_tool_execution.yaml
@@ -44,6 +44,6 @@ conversations:
task.
- role: tool
tool_call_id: toolcall_1
- content: 1. I am in the subdirectory
+ content: I am in the subdirectory
- role: assistant
content: 'The file marker.txt says: "I am in the subdirectory"'
diff --git a/test/snapshots/system_message_transform/should_apply_transform_modifications_to_section_content.yaml b/test/snapshots/system_message_transform/should_apply_transform_modifications_to_section_content.yaml
index 4b7c058b27..98e57919c6 100644
--- a/test/snapshots/system_message_transform/should_apply_transform_modifications_to_section_content.yaml
+++ b/test/snapshots/system_message_transform/should_apply_transform_modifications_to_section_content.yaml
@@ -26,7 +26,7 @@ conversations:
task.
- role: tool
tool_call_id: toolcall_1
- content: 1. Hello!
+ content: Hello!
- role: assistant
content: |-
The file **hello.txt** contains:
diff --git a/test/snapshots/system_message_transform/should_invoke_transform_callbacks_with_section_content.yaml b/test/snapshots/system_message_transform/should_invoke_transform_callbacks_with_section_content.yaml
index 0b1d9755f0..c54f25e2aa 100644
--- a/test/snapshots/system_message_transform/should_invoke_transform_callbacks_with_section_content.yaml
+++ b/test/snapshots/system_message_transform/should_invoke_transform_callbacks_with_section_content.yaml
@@ -47,6 +47,6 @@ conversations:
task.
- role: tool
tool_call_id: toolcall_1
- content: 1. Hello transform!
+ content: Hello transform!
- role: assistant
content: 'The file `test.txt` contains: **"Hello transform!"**'
diff --git a/test/snapshots/system_message_transform/should_work_with_static_overrides_and_transforms_together.yaml b/test/snapshots/system_message_transform/should_work_with_static_overrides_and_transforms_together.yaml
index 0681b569dd..32d6367390 100644
--- a/test/snapshots/system_message_transform/should_work_with_static_overrides_and_transforms_together.yaml
+++ b/test/snapshots/system_message_transform/should_work_with_static_overrides_and_transforms_together.yaml
@@ -47,7 +47,7 @@ conversations:
task.
- role: tool
tool_call_id: toolcall_1
- content: 1. Combo test!
+ content: Combo test!
- role: assistant
content: |-
The file `combo.txt` contains:
diff --git a/test/snapshots/tools/invokes_built_in_tools.yaml b/test/snapshots/tools/invokes_built_in_tools.yaml
index 068cc4accf..0fba134424 100644
--- a/test/snapshots/tools/invokes_built_in_tools.yaml
+++ b/test/snapshots/tools/invokes_built_in_tools.yaml
@@ -15,6 +15,6 @@ conversations:
arguments: '{"path":"${workdir}/README.md"}'
- role: tool
tool_call_id: toolcall_0
- content: "1. # ELIZA, the only chatbot you'll ever need"
+ content: "# ELIZA, the only chatbot you'll ever need"
- role: assistant
content: "The first line of README.md is: `# ELIZA, the only chatbot you'll ever need`"
From 924e4bfee662fdfef4c90f3266f06e5c113ba06b Mon Sep 17 00:00:00 2001
From: Carlos Alexandro Becker
Date: Wed, 26 Aug 2026 19:57:01 -0300
Subject: [PATCH 3/3] test: finish view replay snapshot migration
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Signed-off-by: Carlos Alexandro Becker
---
.../builtin_tools/should_edit_a_file_successfully.yaml | 4 +++-
.../hooks/invoke_both_hooks_for_single_tool_call.yaml | 2 +-
.../invoke_post_tool_use_hook_after_model_runs_a_tool.yaml | 2 +-
.../invoke_pre_tool_use_hook_when_model_runs_a_tool.yaml | 2 +-
...etooluse_and_posttooluse_hooks_for_a_single_tool_call.yaml | 2 +-
...should_handle_file_creation_then_reading_across_turns.yaml | 2 +-
.../should_use_tool_results_from_previous_turns.yaml | 4 ++--
.../permissions/permission_handler_for_write_operations.yaml | 4 ++--
...ooluse_and_posttooluse_hooks_for_sub_agent_tool_calls.yaml | 2 +-
9 files changed, 13 insertions(+), 11 deletions(-)
diff --git a/test/snapshots/builtin_tools/should_edit_a_file_successfully.yaml b/test/snapshots/builtin_tools/should_edit_a_file_successfully.yaml
index 78ca3bbbc3..3f4e986906 100644
--- a/test/snapshots/builtin_tools/should_edit_a_file_successfully.yaml
+++ b/test/snapshots/builtin_tools/should_edit_a_file_successfully.yaml
@@ -56,7 +56,9 @@ conversations:
arguments: '{"path":"${workdir}/edit_me.txt"}'
- role: tool
tool_call_id: toolcall_2
- content: "Hi Universe\nGoodbye World\n"
+ content: |-
+ Hi Universe
+ Goodbye World
- role: assistant
content: |-
Done! The file now contains:
diff --git a/test/snapshots/hooks/invoke_both_hooks_for_single_tool_call.yaml b/test/snapshots/hooks/invoke_both_hooks_for_single_tool_call.yaml
index 6a51857ab0..9ed9431545 100644
--- a/test/snapshots/hooks/invoke_both_hooks_for_single_tool_call.yaml
+++ b/test/snapshots/hooks/invoke_both_hooks_for_single_tool_call.yaml
@@ -44,7 +44,7 @@ conversations:
task.
- role: tool
tool_call_id: toolcall_1
- content: 1. Testing both hooks!
+ content: Testing both hooks!
- role: assistant
content: |-
The file **both.txt** contains:
diff --git a/test/snapshots/hooks/invoke_post_tool_use_hook_after_model_runs_a_tool.yaml b/test/snapshots/hooks/invoke_post_tool_use_hook_after_model_runs_a_tool.yaml
index 18b324f098..2a5f1ae446 100644
--- a/test/snapshots/hooks/invoke_post_tool_use_hook_after_model_runs_a_tool.yaml
+++ b/test/snapshots/hooks/invoke_post_tool_use_hook_after_model_runs_a_tool.yaml
@@ -44,7 +44,7 @@ conversations:
task.
- role: tool
tool_call_id: toolcall_1
- content: 1. World from the test!
+ content: World from the test!
- role: assistant
content: |-
The file `world.txt` contains:
diff --git a/test/snapshots/hooks/invoke_pre_tool_use_hook_when_model_runs_a_tool.yaml b/test/snapshots/hooks/invoke_pre_tool_use_hook_when_model_runs_a_tool.yaml
index 1ce0fe67a0..f695c60f3d 100644
--- a/test/snapshots/hooks/invoke_pre_tool_use_hook_when_model_runs_a_tool.yaml
+++ b/test/snapshots/hooks/invoke_pre_tool_use_hook_when_model_runs_a_tool.yaml
@@ -44,7 +44,7 @@ conversations:
task.
- role: tool
tool_call_id: toolcall_1
- content: 1. Hello from the test!
+ content: Hello from the test!
- role: assistant
content: |-
The file **hello.txt** contains:
diff --git a/test/snapshots/hooks/should_invoke_both_pretooluse_and_posttooluse_hooks_for_a_single_tool_call.yaml b/test/snapshots/hooks/should_invoke_both_pretooluse_and_posttooluse_hooks_for_a_single_tool_call.yaml
index 6a51857ab0..9ed9431545 100644
--- a/test/snapshots/hooks/should_invoke_both_pretooluse_and_posttooluse_hooks_for_a_single_tool_call.yaml
+++ b/test/snapshots/hooks/should_invoke_both_pretooluse_and_posttooluse_hooks_for_a_single_tool_call.yaml
@@ -44,7 +44,7 @@ conversations:
task.
- role: tool
tool_call_id: toolcall_1
- content: 1. Testing both hooks!
+ content: Testing both hooks!
- role: assistant
content: |-
The file **both.txt** contains:
diff --git a/test/snapshots/multi_turn/should_handle_file_creation_then_reading_across_turns.yaml b/test/snapshots/multi_turn/should_handle_file_creation_then_reading_across_turns.yaml
index 0d79c3e1ab..583366363a 100644
--- a/test/snapshots/multi_turn/should_handle_file_creation_then_reading_across_turns.yaml
+++ b/test/snapshots/multi_turn/should_handle_file_creation_then_reading_across_turns.yaml
@@ -83,7 +83,7 @@ conversations:
arguments: '{"path":"${workdir}/greeting.txt"}'
- role: tool
tool_call_id: toolcall_2
- content: 1. Hello from multi-turn test
+ content: Hello from multi-turn test
- role: assistant
content: |-
The exact contents of `greeting.txt` are:
diff --git a/test/snapshots/multi_turn/should_use_tool_results_from_previous_turns.yaml b/test/snapshots/multi_turn/should_use_tool_results_from_previous_turns.yaml
index b930bb46ac..96dc365c65 100644
--- a/test/snapshots/multi_turn/should_use_tool_results_from_previous_turns.yaml
+++ b/test/snapshots/multi_turn/should_use_tool_results_from_previous_turns.yaml
@@ -44,7 +44,7 @@ conversations:
task.
- role: tool
tool_call_id: toolcall_1
- content: 1. The magic number is 42.
+ content: The magic number is 42.
- role: assistant
content: The magic number is **42**.
- messages:
@@ -69,7 +69,7 @@ conversations:
content: Tool 'report_intent' does not exist.
- role: tool
tool_call_id: toolcall_1
- content: 1. The magic number is 42.
+ content: The magic number is 42.
- role: assistant
content: The magic number is **42**.
- role: user
diff --git a/test/snapshots/permissions/permission_handler_for_write_operations.yaml b/test/snapshots/permissions/permission_handler_for_write_operations.yaml
index a4ede6fcb1..3f05a8c6de 100644
--- a/test/snapshots/permissions/permission_handler_for_write_operations.yaml
+++ b/test/snapshots/permissions/permission_handler_for_write_operations.yaml
@@ -47,7 +47,7 @@ conversations:
task.
- role: tool
tool_call_id: toolcall_1
- content: 1. original content
+ content: original content
- role: assistant
content: "Now I'll replace 'original' with 'modified':"
- role: assistant
@@ -82,7 +82,7 @@ conversations:
task.
- role: tool
tool_call_id: toolcall_1
- content: 1. original content
+ content: original content
- role: assistant
content: "Now I'll replace 'original' with 'modified':"
tool_calls:
diff --git a/test/snapshots/subagent_hooks/should_invoke_pretooluse_and_posttooluse_hooks_for_sub_agent_tool_calls.yaml b/test/snapshots/subagent_hooks/should_invoke_pretooluse_and_posttooluse_hooks_for_sub_agent_tool_calls.yaml
index c905726ee3..f920f8705b 100644
--- a/test/snapshots/subagent_hooks/should_invoke_pretooluse_and_posttooluse_hooks_for_sub_agent_tool_calls.yaml
+++ b/test/snapshots/subagent_hooks/should_invoke_pretooluse_and_posttooluse_hooks_for_sub_agent_tool_calls.yaml
@@ -56,7 +56,7 @@ conversations:
arguments: '{"path":"${workdir}/subagent-test.txt"}'
- role: tool
tool_call_id: toolcall_0
- content: 1. Hello from subagent test!
+ content: Hello from subagent test!
- role: assistant
content: |-
The complete contents of the file "subagent-test.txt" are: