From dce29c181f183e6f3d6021b320fc0e21f244faed Mon Sep 17 00:00:00 2001 From: afjcjsbx Date: Fri, 24 Apr 2026 18:21:01 +0200 Subject: [PATCH] fix lint --- web/backend/api/session.go | 34 ++++++++++++++++++++++++++++----- web/backend/api/session_test.go | 11 ++++++++--- 2 files changed, 37 insertions(+), 8 deletions(-) diff --git a/web/backend/api/session.go b/web/backend/api/session.go index 6ac1eb988..85f928ec6 100644 --- a/web/backend/api/session.go +++ b/web/backend/api/session.go @@ -2,6 +2,7 @@ package api import ( "bufio" + "bytes" "encoding/json" "errors" "net/http" @@ -593,7 +594,15 @@ func toolSummaryContainsContent(summary, content string) bool { } _, body, hasBody := strings.Cut(summary, "\n") - return hasBody && strings.TrimSpace(body) == content + if !hasBody { + return false + } + body = strings.TrimSpace(body) + if body == content { + return true + } + firstSection, _, _ := strings.Cut(body, "\n```") + return strings.TrimSpace(firstSection) == content } func sessionAttachments(msg providers.Message) []sessionChatAttachment { @@ -714,7 +723,8 @@ func visibleAssistantToolSummaryMessages( Role: "assistant", Content: utils.FormatToolFeedbackMessage( name, - visibleAssistantToolSummaryText(tc, toolFeedbackMaxArgsLength), + visibleAssistantToolFeedbackExplanation(tc, toolFeedbackMaxArgsLength), + visibleAssistantToolArgsPreview(tc, toolFeedbackMaxArgsLength), ), }) } @@ -722,7 +732,7 @@ func visibleAssistantToolSummaryMessages( return messages } -func visibleAssistantToolSummaryText( +func visibleAssistantToolFeedbackExplanation( tc providers.ToolCall, toolFeedbackMaxArgsLength int, ) string { @@ -731,18 +741,32 @@ func visibleAssistantToolSummaryText( return utils.Truncate(explanation, toolFeedbackMaxArgsLength) } } + return "" +} +func visibleAssistantToolArgsPreview( + tc providers.ToolCall, + toolFeedbackMaxArgsLength int, +) string { argsJSON := "" if tc.Function != nil { argsJSON = tc.Function.Arguments } if strings.TrimSpace(argsJSON) == "" && len(tc.Arguments) > 0 { - if encodedArgs, err := json.Marshal(tc.Arguments); err == nil { + if encodedArgs, err := json.MarshalIndent(tc.Arguments, "", " "); err == nil { argsJSON = string(encodedArgs) } } + argsJSON = strings.TrimSpace(argsJSON) + if argsJSON == "" { + return "" + } + var pretty bytes.Buffer + if err := json.Indent(&pretty, []byte(argsJSON), "", " "); err == nil { + argsJSON = pretty.String() + } - return utils.Truncate(strings.TrimSpace(argsJSON), toolFeedbackMaxArgsLength) + return utils.Truncate(argsJSON, toolFeedbackMaxArgsLength) } func visibleAssistantToolMessages(toolCalls []providers.ToolCall) []sessionChatMessage { diff --git a/web/backend/api/session_test.go b/web/backend/api/session_test.go index 6afb8a94f..428c565a8 100644 --- a/web/backend/api/session_test.go +++ b/web/backend/api/session_test.go @@ -1056,8 +1056,11 @@ func TestHandleGetSession_UsesConfiguredToolFeedbackMaxArgsLength(t *testing.T) if !strings.Contains(resp.Messages[1].Content, wantPreview) { t.Fatalf("tool summary = %q, want preview %q", resp.Messages[1].Content, wantPreview) } - if strings.Contains(resp.Messages[1].Content, argsJSON) { - t.Fatalf("tool summary = %q, expected configured truncation", resp.Messages[1].Content) + wantArgsPreview := visibleAssistantToolArgsPreview(providers.ToolCall{ + Function: &providers.FunctionCall{Arguments: argsJSON}, + }, 20) + if !strings.Contains(resp.Messages[1].Content, wantArgsPreview) { + t.Fatalf("tool summary = %q, want args preview %q", resp.Messages[1].Content, wantArgsPreview) } if !strings.Contains(resp.Messages[1].Content, "`read_file`") { t.Fatalf("tool summary = %q, want read_file summary", resp.Messages[1].Content) @@ -1132,7 +1135,9 @@ func TestHandleGetSession_FallsBackToLegacyToolArgumentsWhenExplanationMissing(t t.Fatalf("len(resp.Messages) = %d, want at least 2", len(resp.Messages)) } - wantPreview := utils.Truncate(argsJSON, 20) + wantPreview := visibleAssistantToolArgsPreview(providers.ToolCall{ + Function: &providers.FunctionCall{Arguments: argsJSON}, + }, 20) if !strings.Contains(resp.Messages[1].Content, "`read_file`") { t.Fatalf("tool summary = %q, want read_file summary", resp.Messages[1].Content) }