@@ -364,7 +364,9 @@ func (a *sessionAgent) Run(ctx context.Context, call SessionAgentCall) (*fantasy
364364 Finished: false,
365365 }
366366 currentAssistant.AddToolCall(toolCall)
367− return a.messages.Update(genCtx, *currentAssistant)
367+ // Use parent ctx instead of genCtx to ensure the update succeeds
368+ // even if the request is canceled mid-stream
369+ return a.messages.Update(ctx, *currentAssistant)
368370 },
369371 OnRetry: func(err *fantasy.ProviderError, delay time.Duration) {
370372 // TODO: implement
@@ -378,11 +380,15 @@ func (a *sessionAgent) Run(ctx context.Context, call SessionAgentCall) (*fantasy
378380 Finished: true,
379381 }
380382 currentAssistant.AddToolCall(toolCall)
381− return a.messages.Update(genCtx, *currentAssistant)
383+ // Use parent ctx instead of genCtx to ensure the update succeeds
384+ // even if the request is canceled mid-stream
385+ return a.messages.Update(ctx, *currentAssistant)
382386 },
383387 OnToolResult: func(result fantasy.ToolResultContent) error {
384388 toolResult := a.convertToToolResult(result)
385− _, createMsgErr := a.messages.Create(genCtx, currentAssistant.SessionID, message.CreateMessageParams{
389+ // Use parent ctx instead of genCtx to ensure the message is created
390+ // even if the request is canceled mid-stream
391+ _, createMsgErr := a.messages.Create(ctx, currentAssistant.SessionID, message.CreateMessageParams{
386392 Role: message.Tool,
387393 Parts: []message.ContentPart{
388394 toolResult,
@@ -485,7 +491,7 @@ func (a *sessionAgent) Run(ctx context.Context, call SessionAgentCall) (*fantasy
485491 }
486492 content := "There was an error while executing the tool"
487493 if isCancelErr {
488− content = "Tool execution canceled by user"
494+ content = "Error: user cancelled assistant tool calling"
489495 } else if isPermissionErr {
490496 content = "User denied permission"
491497 }