@@ -363,6 +363,7 @@ func (a *agent) Run(ctx context.Context, sessionID string, content string, attac
365func (a *agent) processGeneration(ctx context.Context, sessionID, content string, attachmentParts []message.ContentPart) AgentEvent {
365func (a *agent) processGeneration(ctx context.Context, sessionID, content string, attachmentParts []message.ContentPart) AgentEvent {
366 // List existing messages; if none, start title generation asynchronously.
367 // List existing messages; if none, start title generation asynchronously.
367 msgs, err := a.messages.List(ctx, sessionID)
368 msgs, err := a.messages.List(ctx, sessionID)
368 if err != nil {
369 if err != nil {
@@ -421,7 +422,13 @@ func (a *agent) processGeneration(ctx context.Context, sessionID, content string
422 return a.err(fmt.Errorf("failed to process events: %w", err))
423 return a.err(fmt.Errorf("failed to process events: %w", err))
425+ if cfg.Options.Debug {
426+ seqId := (len(msgHistory) + 1) / 2
427+ toolResultFilepath := logging.WriteToolResultsJson(sessionID, seqId, toolResults)
428+ logging.Info("Result", "message", agentMessage.FinishReason(), "toolResults", "{}", "filepath", toolResultFilepath)
424− logging.Info("Result", "message", agentMessage.FinishReason(), "toolResults", toolResults)
430+ logging.Info("Result", "message", agentMessage.FinishReason(), "toolResults", toolResults)
425 if (agentMessage.FinishReason() == message.FinishReasonToolUse) && toolResults != nil {
432 if (agentMessage.FinishReason() == message.FinishReasonToolUse) && toolResults != nil {
426 // We are not done, we need to respond with the tool response
433 // We are not done, we need to respond with the tool response
427 msgHistory = append(msgHistory, agentMessage, *toolResults)
434 msgHistory = append(msgHistory, agentMessage, *toolResults)
@@ -445,6 +452,7 @@ func (a *agent) createUserMessage(ctx context.Context, sessionID, content string
447func (a *agent) streamAndHandleEvents(ctx context.Context, sessionID string, msgHistory []message.Message) (message.Message, *message.Message, error) {
454func (a *agent) streamAndHandleEvents(ctx context.Context, sessionID string, msgHistory []message.Message) (message.Message, *message.Message, error) {
455+ ctx = context.WithValue(ctx, tools.SessionIDContextKey, sessionID)
448 eventChan := a.provider.StreamResponse(ctx, msgHistory, a.tools)
456 eventChan := a.provider.StreamResponse(ctx, msgHistory, a.tools)
450 assistantMsg, err := a.messages.Create(ctx, sessionID, message.CreateMessageParams{
458 assistantMsg, err := a.messages.Create(ctx, sessionID, message.CreateMessageParams{
@@ -459,7 +467,6 @@ func (a *agent) streamAndHandleEvents(ctx context.Context, sessionID string, msg
460 // Add the session and message ID into the context if needed by tools.
468 // Add the session and message ID into the context if needed by tools.
461 ctx = context.WithValue(ctx, tools.MessageIDContextKey, assistantMsg.ID)
469 ctx = context.WithValue(ctx, tools.MessageIDContextKey, assistantMsg.ID)
462− ctx = context.WithValue(ctx, tools.SessionIDContextKey, sessionID)
464 // Process each event in the stream.
471 // Process each event in the stream.
465 for event := range eventChan {
472 for event := range eventChan {
@@ -491,10 +498,17 @@ func (a *agent) streamAndHandleEvents(ctx context.Context, sessionID string, msg
492 // Continue processing
499 // Continue processing
493 var tool tools.BaseTool
500 var tool tools.BaseTool
494− for _, availableTools := range a.tools {
501+ for _, availableTool := range a.tools {
495− if availableTools.Info().Name == toolCall.Name {
502+ if availableTool.Info().Name == toolCall.Name {
496− tool = availableTools
503+ tool = availableTool
506+ // Monkey patch for Copilot Sonnet-4 tool repetition obfuscation
507+ // if strings.HasPrefix(toolCall.Name, availableTool.Info().Name) &&
508+ // strings.HasPrefix(toolCall.Name, availableTool.Info().Name+availableTool.Info().Name) {
509+ // tool = availableTool
500 // Tool not found
514 // Tool not found
@@ -665,6 +679,7 @@ func (a *agent) Summarize(ctx context.Context, sessionID string) error {
665 a.Publish(pubsub.CreatedEvent, event)
679 a.Publish(pubsub.CreatedEvent, event)
682+ summarizeCtx = context.WithValue(summarizeCtx, tools.SessionIDContextKey, sessionID)
669 if len(msgs) == 0 {
684 if len(msgs) == 0 {
670 event = AgentEvent{
685 event = AgentEvent{