diff --git a/agent/response.go b/agent/response.go index 14c47226..94d42fdf 100644 --- a/agent/response.go +++ b/agent/response.go @@ -70,11 +70,17 @@ func (resp *Response) String() string { } var sb strings.Builder for _, msg := range resp.Messages { - for _, c := range msg.Contents { - if textContent, ok := c.(*message.TextContent); ok { - sb.WriteString(textContent.Text) - } + // msg.String() equals message.Contents.Text(), the per-message join. + // Add a newline separator between each non-empty message, matching + // .NET's ChatMessage list ConcatText / AgentResponse.Text. + t := msg.String() + if t == "" { + continue + } + if sb.Len() > 0 { + sb.WriteByte('\n') } + sb.WriteString(t) } return sb.String() } diff --git a/agent/response_test.go b/agent/response_test.go index f265c8d4..7f84960a 100644 --- a/agent/response_test.go +++ b/agent/response_test.go @@ -912,6 +912,47 @@ func TestResponse_ToUpdates_WithAdditionalPropertiesOnlyProducesSingleUpdate(t * } } +func TestResponse_String(t *testing.T) { + msg := func(texts ...string) *message.Message { + var contents message.Contents + for _, text := range texts { + contents = append(contents, &message.TextContent{Text: text}) + } + return &message.Message{Role: message.RoleAssistant, Contents: contents} + } + + tests := []struct { + name string + messages []*message.Message + want string + }{ + { + name: "two messages joined with newline", + messages: []*message.Message{msg("foo"), msg("Bar")}, + want: "foo\nBar", + }, + { + name: "empty middle message skipped without double newline", + messages: []*message.Message{msg("foo"), msg(""), msg("Bar")}, + want: "foo\nBar", + }, + { + name: "multiple text contents stay glued within a message", + messages: []*message.Message{msg("a", "b")}, + want: "ab", + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + resp := &agent.Response{Messages: tt.messages} + if got := resp.String(); got != tt.want { + t.Errorf("String() = %q, want %q", got, tt.want) + } + }) + } +} + func TestResponse_ToUpdates_PropagatesContinuationToken(t *testing.T) { resp := &agent.Response{ ContinuationToken: "tok-123",