Catch agent errors and emit response.failed with real error message

Previously, unhandled exceptions from agent execution would bubble up
to the SDK orchestrator, which emits a generic 'An internal server
error occurred.' message — hiding the actual cause (e.g., 401 auth
failures, model not found, etc.).

Now AgentFrameworkResponseHandler catches non-cancellation exceptions
and emits a proper response.failed event containing the real error
message, making it visible to clients and in logs.

OperationCanceledException still propagates for proper cancellation
handling by the SDK.

Also bumps package version to 0.9.0-hosted.260403.2.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
alliscode
2026-04-03 11:17:21 -07:00
co-authored by Copilot
parent 21dc5311be
commit eb67379033
4 changed files with 35 additions and 9 deletions
@@ -95,6 +95,7 @@ public class AgentFrameworkResponseHandler : ResponseHandler
while (true)
{
bool shutdownDetected = false;
ResponseStreamEvent? failedEvent = null;
ResponseStreamEvent? evt = null;
try
{
@@ -109,6 +110,26 @@ public class AgentFrameworkResponseHandler : ResponseHandler
{
shutdownDetected = true;
}
catch (Exception ex) when (ex is not OperationCanceledException && !emittedTerminal)
{
// Catch agent execution errors and emit a proper failed event
// with the real error message instead of letting the SDK emit
// a generic "An internal server error occurred."
if (this._logger.IsEnabled(LogLevel.Error))
{
this._logger.LogError(ex, "Agent execution failed for response {ResponseId}.", context.ResponseId);
}
failedEvent = stream.EmitFailed(
ResponseErrorCode.ServerError,
ex.Message);
}
if (failedEvent is not null)
{
yield return failedEvent;
yield break;
}
if (shutdownDetected)
{