From 351202e1bbb5b1dbb893634e1bdbbab57b245728 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 8 Apr 2026 19:20:48 +0000 Subject: [PATCH 1/3] Initial plan From f5ef6e761f23b1750cfb22b36e491cfc8af76f47 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 8 Apr 2026 19:36:54 +0000 Subject: [PATCH 2/3] Add WorkflowErrorEvent and ExecutorFailedEvent error checking to all workflow samples Agent-Logs-Url: https://github.com/microsoft/agent-framework/sessions/c5d77400-d7ed-4fbe-9103-f5d74aabcf2b Co-authored-by: lokitoth <6936551+lokitoth@users.noreply.github.com> --- .../Agents/FoundryAgent/Program.cs | 12 ++++++++ .../Agents/GroupChatToolApproval/Program.cs | 12 ++++++++ .../CheckpointAndRehydrate/Program.cs | 28 +++++++++++++++++++ .../Checkpoint/CheckpointAndResume/Program.cs | 28 +++++++++++++++++++ .../CheckpointWithHumanInTheLoop/Program.cs | 20 +++++++++++++ .../Concurrent/MapReduce/Program.cs | 12 ++++++++ .../01_EdgeCondition/Program.cs | 12 ++++++++ .../ConditionalEdges/02_SwitchCase/Program.cs | 12 ++++++++ .../03_MultiSelection/Program.cs | 14 ++++++++++ .../HumanInTheLoopBasic/Program.cs | 12 ++++++++ dotnet/samples/03-workflows/Loop/Program.cs | 12 ++++++++ .../ApplicationInsights/Program.cs | 12 ++++++++ .../Observability/AspireDashboard/Program.cs | 12 ++++++++ .../03-workflows/SharedStates/Program.cs | 12 ++++++++ .../_StartHere/01_Streaming/Program.cs | 12 ++++++++ .../02_AgentsInWorkflows/Program.cs | 12 ++++++++ .../03_AgentWorkflowPatterns/Program.cs | 12 ++++++++ .../_StartHere/05_SubWorkflows/Program.cs | 12 ++++++++ .../Program.cs | 12 ++++++++ .../07_WriterCriticWorkflow/Program.cs | 12 ++++++++ 20 files changed, 282 insertions(+) diff --git a/dotnet/samples/03-workflows/Agents/FoundryAgent/Program.cs b/dotnet/samples/03-workflows/Agents/FoundryAgent/Program.cs index cab2e0162d..91d52398f9 100644 --- a/dotnet/samples/03-workflows/Agents/FoundryAgent/Program.cs +++ b/dotnet/samples/03-workflows/Agents/FoundryAgent/Program.cs @@ -53,6 +53,18 @@ private static async Task Main() { Console.WriteLine($"{executorComplete.ExecutorId}: {executorComplete.Data}"); } + else if (evt is WorkflowErrorEvent workflowError) + { + Console.ForegroundColor = ConsoleColor.Red; + Console.Error.WriteLine(workflowError.Exception?.ToString() ?? "Unknown workflow error occurred."); + Console.ResetColor(); + } + else if (evt is ExecutorFailedEvent executorFailed) + { + Console.ForegroundColor = ConsoleColor.Red; + Console.Error.WriteLine($"Executor '{executorFailed.ExecutorId}' failed with {(executorFailed.Data == null ? "unknown error" : $"exception {executorFailed.Data}")}."); + Console.ResetColor(); + } } } finally diff --git a/dotnet/samples/03-workflows/Agents/GroupChatToolApproval/Program.cs b/dotnet/samples/03-workflows/Agents/GroupChatToolApproval/Program.cs index 0b6b821f9f..c6d41b031b 100644 --- a/dotnet/samples/03-workflows/Agents/GroupChatToolApproval/Program.cs +++ b/dotnet/samples/03-workflows/Agents/GroupChatToolApproval/Program.cs @@ -134,6 +134,18 @@ private static async Task Main() break; } + + case WorkflowErrorEvent workflowError: + Console.ForegroundColor = ConsoleColor.Red; + Console.Error.WriteLine(workflowError.Exception?.ToString() ?? "Unknown workflow error occurred."); + Console.ResetColor(); + break; + + case ExecutorFailedEvent executorFailed: + Console.ForegroundColor = ConsoleColor.Red; + Console.Error.WriteLine($"Executor '{executorFailed.ExecutorId}' failed with {(executorFailed.Data == null ? "unknown error" : $"exception {executorFailed.Data}")}."); + Console.ResetColor(); + break; } } diff --git a/dotnet/samples/03-workflows/Checkpoint/CheckpointAndRehydrate/Program.cs b/dotnet/samples/03-workflows/Checkpoint/CheckpointAndRehydrate/Program.cs index 7bc5621fbe..e2b4a25036 100644 --- a/dotnet/samples/03-workflows/Checkpoint/CheckpointAndRehydrate/Program.cs +++ b/dotnet/samples/03-workflows/Checkpoint/CheckpointAndRehydrate/Program.cs @@ -58,6 +58,20 @@ private static async Task Main() { Console.WriteLine($"Workflow completed with result: {outputEvent.Data}"); } + + if (evt is WorkflowErrorEvent workflowError) + { + Console.ForegroundColor = ConsoleColor.Red; + Console.Error.WriteLine(workflowError.Exception?.ToString() ?? "Unknown workflow error occurred."); + Console.ResetColor(); + } + + if (evt is ExecutorFailedEvent executorFailed) + { + Console.ForegroundColor = ConsoleColor.Red; + Console.Error.WriteLine($"Executor '{executorFailed.ExecutorId}' failed with {(executorFailed.Data == null ? "unknown error" : $"exception {executorFailed.Data}")}."); + Console.ResetColor(); + } } if (checkpoints.Count == 0) @@ -86,6 +100,20 @@ private static async Task Main() { Console.WriteLine($"Workflow completed with result: {workflowOutputEvt.Data}"); } + + if (evt is WorkflowErrorEvent workflowError) + { + Console.ForegroundColor = ConsoleColor.Red; + Console.Error.WriteLine(workflowError.Exception?.ToString() ?? "Unknown workflow error occurred."); + Console.ResetColor(); + } + + if (evt is ExecutorFailedEvent executorFailed) + { + Console.ForegroundColor = ConsoleColor.Red; + Console.Error.WriteLine($"Executor '{executorFailed.ExecutorId}' failed with {(executorFailed.Data == null ? "unknown error" : $"exception {executorFailed.Data}")}."); + Console.ResetColor(); + } } } } diff --git a/dotnet/samples/03-workflows/Checkpoint/CheckpointAndResume/Program.cs b/dotnet/samples/03-workflows/Checkpoint/CheckpointAndResume/Program.cs index 07be486620..5dcf524dc6 100644 --- a/dotnet/samples/03-workflows/Checkpoint/CheckpointAndResume/Program.cs +++ b/dotnet/samples/03-workflows/Checkpoint/CheckpointAndResume/Program.cs @@ -55,6 +55,20 @@ private static async Task Main() { Console.WriteLine($"Workflow completed with result: {workflowOutputEvt.Data}"); } + + if (evt is WorkflowErrorEvent workflowError) + { + Console.ForegroundColor = ConsoleColor.Red; + Console.Error.WriteLine(workflowError.Exception?.ToString() ?? "Unknown workflow error occurred."); + Console.ResetColor(); + } + + if (evt is ExecutorFailedEvent executorFailed) + { + Console.ForegroundColor = ConsoleColor.Red; + Console.Error.WriteLine($"Executor '{executorFailed.ExecutorId}' failed with {(executorFailed.Data == null ? "unknown error" : $"exception {executorFailed.Data}")}."); + Console.ResetColor(); + } } if (checkpoints.Count == 0) @@ -80,6 +94,20 @@ private static async Task Main() { Console.WriteLine($"Workflow completed with result: {workflowOutputEvt.Data}"); } + + if (evt is WorkflowErrorEvent workflowError) + { + Console.ForegroundColor = ConsoleColor.Red; + Console.Error.WriteLine(workflowError.Exception?.ToString() ?? "Unknown workflow error occurred."); + Console.ResetColor(); + } + + if (evt is ExecutorFailedEvent executorFailed) + { + Console.ForegroundColor = ConsoleColor.Red; + Console.Error.WriteLine($"Executor '{executorFailed.ExecutorId}' failed with {(executorFailed.Data == null ? "unknown error" : $"exception {executorFailed.Data}")}."); + Console.ResetColor(); + } } } } diff --git a/dotnet/samples/03-workflows/Checkpoint/CheckpointWithHumanInTheLoop/Program.cs b/dotnet/samples/03-workflows/Checkpoint/CheckpointWithHumanInTheLoop/Program.cs index 56b4da9911..4dcf097468 100644 --- a/dotnet/samples/03-workflows/Checkpoint/CheckpointWithHumanInTheLoop/Program.cs +++ b/dotnet/samples/03-workflows/Checkpoint/CheckpointWithHumanInTheLoop/Program.cs @@ -62,6 +62,16 @@ private static async Task Main() case WorkflowOutputEvent workflowOutputEvt: Console.WriteLine($"Workflow completed with result: {workflowOutputEvt.Data}"); break; + case WorkflowErrorEvent workflowError: + Console.ForegroundColor = ConsoleColor.Red; + Console.Error.WriteLine(workflowError.Exception?.ToString() ?? "Unknown workflow error occurred."); + Console.ResetColor(); + break; + case ExecutorFailedEvent executorFailed: + Console.ForegroundColor = ConsoleColor.Red; + Console.Error.WriteLine($"Executor '{executorFailed.ExecutorId}' failed with {(executorFailed.Data == null ? "unknown error" : $"exception {executorFailed.Data}")}."); + Console.ResetColor(); + break; } } @@ -92,6 +102,16 @@ private static async Task Main() case WorkflowOutputEvent workflowOutputEvt: Console.WriteLine($"Workflow completed with result: {workflowOutputEvt.Data}"); break; + case WorkflowErrorEvent workflowError: + Console.ForegroundColor = ConsoleColor.Red; + Console.Error.WriteLine(workflowError.Exception?.ToString() ?? "Unknown workflow error occurred."); + Console.ResetColor(); + break; + case ExecutorFailedEvent executorFailed: + Console.ForegroundColor = ConsoleColor.Red; + Console.Error.WriteLine($"Executor '{executorFailed.ExecutorId}' failed with {(executorFailed.Data == null ? "unknown error" : $"exception {executorFailed.Data}")}."); + Console.ResetColor(); + break; } } } diff --git a/dotnet/samples/03-workflows/Concurrent/MapReduce/Program.cs b/dotnet/samples/03-workflows/Concurrent/MapReduce/Program.cs index 9049bde982..5d7ab5b688 100644 --- a/dotnet/samples/03-workflows/Concurrent/MapReduce/Program.cs +++ b/dotnet/samples/03-workflows/Concurrent/MapReduce/Program.cs @@ -119,6 +119,18 @@ private static async Task RunWorkflowAsync(Workflow workflow) } } } + else if (evt is WorkflowErrorEvent workflowError) + { + Console.ForegroundColor = ConsoleColor.Red; + Console.Error.WriteLine(workflowError.Exception?.ToString() ?? "Unknown workflow error occurred."); + Console.ResetColor(); + } + else if (evt is ExecutorFailedEvent executorFailed) + { + Console.ForegroundColor = ConsoleColor.Red; + Console.Error.WriteLine($"Executor '{executorFailed.ExecutorId}' failed with {(executorFailed.Data == null ? "unknown error" : $"exception {executorFailed.Data}")}."); + Console.ResetColor(); + } } } } diff --git a/dotnet/samples/03-workflows/ConditionalEdges/01_EdgeCondition/Program.cs b/dotnet/samples/03-workflows/ConditionalEdges/01_EdgeCondition/Program.cs index 370011d80f..57a026b4a5 100644 --- a/dotnet/samples/03-workflows/ConditionalEdges/01_EdgeCondition/Program.cs +++ b/dotnet/samples/03-workflows/ConditionalEdges/01_EdgeCondition/Program.cs @@ -69,6 +69,18 @@ private static async Task Main() { Console.WriteLine($"{outputEvent}"); } + else if (evt is WorkflowErrorEvent workflowError) + { + Console.ForegroundColor = ConsoleColor.Red; + Console.Error.WriteLine(workflowError.Exception?.ToString() ?? "Unknown workflow error occurred."); + Console.ResetColor(); + } + else if (evt is ExecutorFailedEvent executorFailed) + { + Console.ForegroundColor = ConsoleColor.Red; + Console.Error.WriteLine($"Executor '{executorFailed.ExecutorId}' failed with {(executorFailed.Data == null ? "unknown error" : $"exception {executorFailed.Data}")}."); + Console.ResetColor(); + } } } diff --git a/dotnet/samples/03-workflows/ConditionalEdges/02_SwitchCase/Program.cs b/dotnet/samples/03-workflows/ConditionalEdges/02_SwitchCase/Program.cs index 4e85039af8..9b1a8d3d05 100644 --- a/dotnet/samples/03-workflows/ConditionalEdges/02_SwitchCase/Program.cs +++ b/dotnet/samples/03-workflows/ConditionalEdges/02_SwitchCase/Program.cs @@ -85,6 +85,18 @@ private static async Task Main() { Console.WriteLine($"{outputEvent}"); } + else if (evt is WorkflowErrorEvent workflowError) + { + Console.ForegroundColor = ConsoleColor.Red; + Console.Error.WriteLine(workflowError.Exception?.ToString() ?? "Unknown workflow error occurred."); + Console.ResetColor(); + } + else if (evt is ExecutorFailedEvent executorFailed) + { + Console.ForegroundColor = ConsoleColor.Red; + Console.Error.WriteLine($"Executor '{executorFailed.ExecutorId}' failed with {(executorFailed.Data == null ? "unknown error" : $"exception {executorFailed.Data}")}."); + Console.ResetColor(); + } } } diff --git a/dotnet/samples/03-workflows/ConditionalEdges/03_MultiSelection/Program.cs b/dotnet/samples/03-workflows/ConditionalEdges/03_MultiSelection/Program.cs index 3dfb13bf60..f74a1aabe0 100644 --- a/dotnet/samples/03-workflows/ConditionalEdges/03_MultiSelection/Program.cs +++ b/dotnet/samples/03-workflows/ConditionalEdges/03_MultiSelection/Program.cs @@ -98,6 +98,20 @@ private static async Task Main() { Console.WriteLine($"{databaseEvent}"); } + + if (evt is WorkflowErrorEvent workflowError) + { + Console.ForegroundColor = ConsoleColor.Red; + Console.Error.WriteLine(workflowError.Exception?.ToString() ?? "Unknown workflow error occurred."); + Console.ResetColor(); + } + + if (evt is ExecutorFailedEvent executorFailed) + { + Console.ForegroundColor = ConsoleColor.Red; + Console.Error.WriteLine($"Executor '{executorFailed.ExecutorId}' failed with {(executorFailed.Data == null ? "unknown error" : $"exception {executorFailed.Data}")}."); + Console.ResetColor(); + } } } diff --git a/dotnet/samples/03-workflows/HumanInTheLoop/HumanInTheLoopBasic/Program.cs b/dotnet/samples/03-workflows/HumanInTheLoop/HumanInTheLoopBasic/Program.cs index 0b85757435..30a53c771f 100644 --- a/dotnet/samples/03-workflows/HumanInTheLoop/HumanInTheLoopBasic/Program.cs +++ b/dotnet/samples/03-workflows/HumanInTheLoop/HumanInTheLoopBasic/Program.cs @@ -42,6 +42,18 @@ private static async Task Main() // The workflow has yielded output Console.WriteLine($"Workflow completed with result: {outputEvt.Data}"); return; + + case WorkflowErrorEvent workflowError: + Console.ForegroundColor = ConsoleColor.Red; + Console.Error.WriteLine(workflowError.Exception?.ToString() ?? "Unknown workflow error occurred."); + Console.ResetColor(); + return; + + case ExecutorFailedEvent executorFailed: + Console.ForegroundColor = ConsoleColor.Red; + Console.Error.WriteLine($"Executor '{executorFailed.ExecutorId}' failed with {(executorFailed.Data == null ? "unknown error" : $"exception {executorFailed.Data}")}."); + Console.ResetColor(); + break; } } } diff --git a/dotnet/samples/03-workflows/Loop/Program.cs b/dotnet/samples/03-workflows/Loop/Program.cs index dba811d84c..3631eebe32 100644 --- a/dotnet/samples/03-workflows/Loop/Program.cs +++ b/dotnet/samples/03-workflows/Loop/Program.cs @@ -39,6 +39,18 @@ private static async Task Main() { Console.WriteLine($"Result: {outputEvent}"); } + else if (evt is WorkflowErrorEvent workflowError) + { + Console.ForegroundColor = ConsoleColor.Red; + Console.Error.WriteLine(workflowError.Exception?.ToString() ?? "Unknown workflow error occurred."); + Console.ResetColor(); + } + else if (evt is ExecutorFailedEvent executorFailed) + { + Console.ForegroundColor = ConsoleColor.Red; + Console.Error.WriteLine($"Executor '{executorFailed.ExecutorId}' failed with {(executorFailed.Data == null ? "unknown error" : $"exception {executorFailed.Data}")}."); + Console.ResetColor(); + } } } } diff --git a/dotnet/samples/03-workflows/Observability/ApplicationInsights/Program.cs b/dotnet/samples/03-workflows/Observability/ApplicationInsights/Program.cs index a05a5cddf6..3d8d61b8a4 100644 --- a/dotnet/samples/03-workflows/Observability/ApplicationInsights/Program.cs +++ b/dotnet/samples/03-workflows/Observability/ApplicationInsights/Program.cs @@ -67,6 +67,18 @@ private static async Task Main() { Console.WriteLine($"{executorComplete.ExecutorId}: {executorComplete.Data}"); } + else if (evt is WorkflowErrorEvent workflowError) + { + Console.ForegroundColor = ConsoleColor.Red; + Console.Error.WriteLine(workflowError.Exception?.ToString() ?? "Unknown workflow error occurred."); + Console.ResetColor(); + } + else if (evt is ExecutorFailedEvent executorFailed) + { + Console.ForegroundColor = ConsoleColor.Red; + Console.Error.WriteLine($"Executor '{executorFailed.ExecutorId}' failed with {(executorFailed.Data == null ? "unknown error" : $"exception {executorFailed.Data}")}."); + Console.ResetColor(); + } } } } diff --git a/dotnet/samples/03-workflows/Observability/AspireDashboard/Program.cs b/dotnet/samples/03-workflows/Observability/AspireDashboard/Program.cs index 23fcfe5f4e..9e5a396656 100644 --- a/dotnet/samples/03-workflows/Observability/AspireDashboard/Program.cs +++ b/dotnet/samples/03-workflows/Observability/AspireDashboard/Program.cs @@ -69,6 +69,18 @@ private static async Task Main() { Console.WriteLine($"{executorComplete.ExecutorId}: {executorComplete.Data}"); } + else if (evt is WorkflowErrorEvent workflowError) + { + Console.ForegroundColor = ConsoleColor.Red; + Console.Error.WriteLine(workflowError.Exception?.ToString() ?? "Unknown workflow error occurred."); + Console.ResetColor(); + } + else if (evt is ExecutorFailedEvent executorFailed) + { + Console.ForegroundColor = ConsoleColor.Red; + Console.Error.WriteLine($"Executor '{executorFailed.ExecutorId}' failed with {(executorFailed.Data == null ? "unknown error" : $"exception {executorFailed.Data}")}."); + Console.ResetColor(); + } } } } diff --git a/dotnet/samples/03-workflows/SharedStates/Program.cs b/dotnet/samples/03-workflows/SharedStates/Program.cs index ebe3aaeb3b..c8532676e6 100644 --- a/dotnet/samples/03-workflows/SharedStates/Program.cs +++ b/dotnet/samples/03-workflows/SharedStates/Program.cs @@ -39,6 +39,18 @@ private static async Task Main() { Console.WriteLine(outputEvent.Data); } + else if (evt is WorkflowErrorEvent workflowError) + { + Console.ForegroundColor = ConsoleColor.Red; + Console.Error.WriteLine(workflowError.Exception?.ToString() ?? "Unknown workflow error occurred."); + Console.ResetColor(); + } + else if (evt is ExecutorFailedEvent executorFailed) + { + Console.ForegroundColor = ConsoleColor.Red; + Console.Error.WriteLine($"Executor '{executorFailed.ExecutorId}' failed with {(executorFailed.Data == null ? "unknown error" : $"exception {executorFailed.Data}")}."); + Console.ResetColor(); + } } } } diff --git a/dotnet/samples/03-workflows/_StartHere/01_Streaming/Program.cs b/dotnet/samples/03-workflows/_StartHere/01_Streaming/Program.cs index 81ca2f3276..6193d1c8f6 100644 --- a/dotnet/samples/03-workflows/_StartHere/01_Streaming/Program.cs +++ b/dotnet/samples/03-workflows/_StartHere/01_Streaming/Program.cs @@ -35,6 +35,18 @@ private static async Task Main() { Console.WriteLine($"{executorCompleted.ExecutorId}: {executorCompleted.Data}"); } + else if (evt is WorkflowErrorEvent workflowError) + { + Console.ForegroundColor = ConsoleColor.Red; + Console.Error.WriteLine(workflowError.Exception?.ToString() ?? "Unknown workflow error occurred."); + Console.ResetColor(); + } + else if (evt is ExecutorFailedEvent executorFailed) + { + Console.ForegroundColor = ConsoleColor.Red; + Console.Error.WriteLine($"Executor '{executorFailed.ExecutorId}' failed with {(executorFailed.Data == null ? "unknown error" : $"exception {executorFailed.Data}")}."); + Console.ResetColor(); + } } } } diff --git a/dotnet/samples/03-workflows/_StartHere/02_AgentsInWorkflows/Program.cs b/dotnet/samples/03-workflows/_StartHere/02_AgentsInWorkflows/Program.cs index d0bc5d4749..eee12e03ef 100644 --- a/dotnet/samples/03-workflows/_StartHere/02_AgentsInWorkflows/Program.cs +++ b/dotnet/samples/03-workflows/_StartHere/02_AgentsInWorkflows/Program.cs @@ -56,6 +56,18 @@ private static async Task Main() { Console.WriteLine($"{executorComplete.ExecutorId}: {executorComplete.Data}"); } + else if (evt is WorkflowErrorEvent workflowError) + { + Console.ForegroundColor = ConsoleColor.Red; + Console.Error.WriteLine(workflowError.Exception?.ToString() ?? "Unknown workflow error occurred."); + Console.ResetColor(); + } + else if (evt is ExecutorFailedEvent executorFailed) + { + Console.ForegroundColor = ConsoleColor.Red; + Console.Error.WriteLine($"Executor '{executorFailed.ExecutorId}' failed with {(executorFailed.Data == null ? "unknown error" : $"exception {executorFailed.Data}")}."); + Console.ResetColor(); + } } } diff --git a/dotnet/samples/03-workflows/_StartHere/03_AgentWorkflowPatterns/Program.cs b/dotnet/samples/03-workflows/_StartHere/03_AgentWorkflowPatterns/Program.cs index 7e6fb55be7..ddead5023f 100644 --- a/dotnet/samples/03-workflows/_StartHere/03_AgentWorkflowPatterns/Program.cs +++ b/dotnet/samples/03-workflows/_StartHere/03_AgentWorkflowPatterns/Program.cs @@ -111,6 +111,18 @@ static async Task> RunWorkflowAsync(Workflow workflow, List>()!; } + else if (evt is WorkflowErrorEvent workflowError) + { + Console.ForegroundColor = ConsoleColor.Red; + Console.Error.WriteLine(workflowError.Exception?.ToString() ?? "Unknown workflow error occurred."); + Console.ResetColor(); + } + else if (evt is ExecutorFailedEvent executorFailed) + { + Console.ForegroundColor = ConsoleColor.Red; + Console.Error.WriteLine($"Executor '{executorFailed.ExecutorId}' failed with {(executorFailed.Data == null ? "unknown error" : $"exception {executorFailed.Data}")}."); + Console.ResetColor(); + } } return []; diff --git a/dotnet/samples/03-workflows/_StartHere/05_SubWorkflows/Program.cs b/dotnet/samples/03-workflows/_StartHere/05_SubWorkflows/Program.cs index 7f9980e047..05b0db7f0d 100644 --- a/dotnet/samples/03-workflows/_StartHere/05_SubWorkflows/Program.cs +++ b/dotnet/samples/03-workflows/_StartHere/05_SubWorkflows/Program.cs @@ -74,6 +74,18 @@ private static async Task Main() Console.WriteLine($"Final Output: {output.Data}"); Console.ResetColor(); } + else if (evt is WorkflowErrorEvent workflowError) + { + Console.ForegroundColor = ConsoleColor.Red; + Console.Error.WriteLine(workflowError.Exception?.ToString() ?? "Unknown workflow error occurred."); + Console.ResetColor(); + } + else if (evt is ExecutorFailedEvent executorFailed) + { + Console.ForegroundColor = ConsoleColor.Red; + Console.Error.WriteLine($"Executor '{executorFailed.ExecutorId}' failed with {(executorFailed.Data == null ? "unknown error" : $"exception {executorFailed.Data}")}."); + Console.ResetColor(); + } } // Optional: Visualize the workflow structure - Note that sub-workflows are not rendered diff --git a/dotnet/samples/03-workflows/_StartHere/06_MixedWorkflowAgentsAndExecutors/Program.cs b/dotnet/samples/03-workflows/_StartHere/06_MixedWorkflowAgentsAndExecutors/Program.cs index 2359a1f10e..64993b1590 100644 --- a/dotnet/samples/03-workflows/_StartHere/06_MixedWorkflowAgentsAndExecutors/Program.cs +++ b/dotnet/samples/03-workflows/_StartHere/06_MixedWorkflowAgentsAndExecutors/Program.cs @@ -156,6 +156,18 @@ private static async Task ExecuteWorkflowAsync(Workflow workflow, string input) case WorkflowOutputEvent: // Workflow completed - final output already printed by FinalOutputExecutor break; + + case WorkflowErrorEvent workflowError: + Console.ForegroundColor = ConsoleColor.Red; + Console.Error.WriteLine(workflowError.Exception?.ToString() ?? "Unknown workflow error occurred."); + Console.ResetColor(); + break; + + case ExecutorFailedEvent executorFailed: + Console.ForegroundColor = ConsoleColor.Red; + Console.Error.WriteLine($"Executor '{executorFailed.ExecutorId}' failed with {(executorFailed.Data == null ? "unknown error" : $"exception {executorFailed.Data}")}."); + Console.ResetColor(); + break; } } } diff --git a/dotnet/samples/03-workflows/_StartHere/07_WriterCriticWorkflow/Program.cs b/dotnet/samples/03-workflows/_StartHere/07_WriterCriticWorkflow/Program.cs index 0d8ffbf1cf..4665f09f6f 100644 --- a/dotnet/samples/03-workflows/_StartHere/07_WriterCriticWorkflow/Program.cs +++ b/dotnet/samples/03-workflows/_StartHere/07_WriterCriticWorkflow/Program.cs @@ -115,6 +115,18 @@ private static async Task ExecuteWorkflowAsync(Workflow workflow, string input) Console.WriteLine(); Console.WriteLine(new string('=', 80)); break; + + case WorkflowErrorEvent workflowError: + Console.ForegroundColor = ConsoleColor.Red; + Console.Error.WriteLine(workflowError.Exception?.ToString() ?? "Unknown workflow error occurred."); + Console.ResetColor(); + break; + + case ExecutorFailedEvent executorFailed: + Console.ForegroundColor = ConsoleColor.Red; + Console.Error.WriteLine($"Executor '{executorFailed.ExecutorId}' failed with {(executorFailed.Data == null ? "unknown error" : $"exception {executorFailed.Data}")}."); + Console.ResetColor(); + break; } } } From 61fc80178fe6026668026dc7d9c933c134a1d447 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 8 Apr 2026 19:42:33 +0000 Subject: [PATCH 3/3] Fix if/else if consistency for error event handlers per code review feedback Agent-Logs-Url: https://github.com/microsoft/agent-framework/sessions/c5d77400-d7ed-4fbe-9103-f5d74aabcf2b Co-authored-by: lokitoth <6936551+lokitoth@users.noreply.github.com> --- .../Checkpoint/CheckpointAndRehydrate/Program.cs | 6 ++---- .../03-workflows/Checkpoint/CheckpointAndResume/Program.cs | 6 ++---- .../ConditionalEdges/03_MultiSelection/Program.cs | 3 +-- 3 files changed, 5 insertions(+), 10 deletions(-) diff --git a/dotnet/samples/03-workflows/Checkpoint/CheckpointAndRehydrate/Program.cs b/dotnet/samples/03-workflows/Checkpoint/CheckpointAndRehydrate/Program.cs index e2b4a25036..49752e256d 100644 --- a/dotnet/samples/03-workflows/Checkpoint/CheckpointAndRehydrate/Program.cs +++ b/dotnet/samples/03-workflows/Checkpoint/CheckpointAndRehydrate/Program.cs @@ -65,8 +65,7 @@ private static async Task Main() Console.Error.WriteLine(workflowError.Exception?.ToString() ?? "Unknown workflow error occurred."); Console.ResetColor(); } - - if (evt is ExecutorFailedEvent executorFailed) + else if (evt is ExecutorFailedEvent executorFailed) { Console.ForegroundColor = ConsoleColor.Red; Console.Error.WriteLine($"Executor '{executorFailed.ExecutorId}' failed with {(executorFailed.Data == null ? "unknown error" : $"exception {executorFailed.Data}")}."); @@ -107,8 +106,7 @@ private static async Task Main() Console.Error.WriteLine(workflowError.Exception?.ToString() ?? "Unknown workflow error occurred."); Console.ResetColor(); } - - if (evt is ExecutorFailedEvent executorFailed) + else if (evt is ExecutorFailedEvent executorFailed) { Console.ForegroundColor = ConsoleColor.Red; Console.Error.WriteLine($"Executor '{executorFailed.ExecutorId}' failed with {(executorFailed.Data == null ? "unknown error" : $"exception {executorFailed.Data}")}."); diff --git a/dotnet/samples/03-workflows/Checkpoint/CheckpointAndResume/Program.cs b/dotnet/samples/03-workflows/Checkpoint/CheckpointAndResume/Program.cs index 5dcf524dc6..510fb9f345 100644 --- a/dotnet/samples/03-workflows/Checkpoint/CheckpointAndResume/Program.cs +++ b/dotnet/samples/03-workflows/Checkpoint/CheckpointAndResume/Program.cs @@ -62,8 +62,7 @@ private static async Task Main() Console.Error.WriteLine(workflowError.Exception?.ToString() ?? "Unknown workflow error occurred."); Console.ResetColor(); } - - if (evt is ExecutorFailedEvent executorFailed) + else if (evt is ExecutorFailedEvent executorFailed) { Console.ForegroundColor = ConsoleColor.Red; Console.Error.WriteLine($"Executor '{executorFailed.ExecutorId}' failed with {(executorFailed.Data == null ? "unknown error" : $"exception {executorFailed.Data}")}."); @@ -101,8 +100,7 @@ private static async Task Main() Console.Error.WriteLine(workflowError.Exception?.ToString() ?? "Unknown workflow error occurred."); Console.ResetColor(); } - - if (evt is ExecutorFailedEvent executorFailed) + else if (evt is ExecutorFailedEvent executorFailed) { Console.ForegroundColor = ConsoleColor.Red; Console.Error.WriteLine($"Executor '{executorFailed.ExecutorId}' failed with {(executorFailed.Data == null ? "unknown error" : $"exception {executorFailed.Data}")}."); diff --git a/dotnet/samples/03-workflows/ConditionalEdges/03_MultiSelection/Program.cs b/dotnet/samples/03-workflows/ConditionalEdges/03_MultiSelection/Program.cs index f74a1aabe0..6eac1cbcd9 100644 --- a/dotnet/samples/03-workflows/ConditionalEdges/03_MultiSelection/Program.cs +++ b/dotnet/samples/03-workflows/ConditionalEdges/03_MultiSelection/Program.cs @@ -105,8 +105,7 @@ private static async Task Main() Console.Error.WriteLine(workflowError.Exception?.ToString() ?? "Unknown workflow error occurred."); Console.ResetColor(); } - - if (evt is ExecutorFailedEvent executorFailed) + else if (evt is ExecutorFailedEvent executorFailed) { Console.ForegroundColor = ConsoleColor.Red; Console.Error.WriteLine($"Executor '{executorFailed.ExecutorId}' failed with {(executorFailed.Data == null ? "unknown error" : $"exception {executorFailed.Data}")}.");