Initial commit to new repository

This commit is contained in:
2026-04-03 18:22:19 +09:00
commit 4458bb0f52
7672 changed files with 452440 additions and 0 deletions

View File

@@ -0,0 +1,95 @@
using System.Reflection;
using AxCopilot.Models;
using AxCopilot.Services.Agent;
using FluentAssertions;
using Xunit;
namespace AxCopilot.Tests.Services;
public class ContextCondenserTests
{
[Fact]
public void TruncateToolResults_PreservesMessageMetadataOnCompression()
{
var messages = new List<ChatMessage>
{
new()
{
Role = "assistant",
Content = "{\"type\":\"tool_result\",\"output\":\"" + new string('a', 4200) + "\"}",
Timestamp = new DateTime(2026, 4, 3, 1, 0, 0),
MetaKind = "tool_result",
MetaRunId = "run-1",
Feedback = "like",
AttachedFiles = [@"E:\sample\a.txt"],
Images =
[
new ImageAttachment
{
FileName = "image.png",
MimeType = "image/png",
Base64 = "AAA"
}
]
},
new() { Role = "user", Content = "recent-1" },
new() { Role = "assistant", Content = "recent-2" },
new() { Role = "user", Content = "recent-3" },
new() { Role = "assistant", Content = "recent-4" },
new() { Role = "user", Content = "recent-5" },
new() { Role = "assistant", Content = "recent-6" },
};
var changed = InvokePrivateStatic<bool>("TruncateToolResults", messages);
changed.Should().BeTrue();
messages[0].MetaKind.Should().Be("tool_result");
messages[0].MetaRunId.Should().Be("run-1");
messages[0].Feedback.Should().Be("like");
messages[0].AttachedFiles.Should().ContainSingle().Which.Should().Be(@"E:\sample\a.txt");
messages[0].Images.Should().ContainSingle();
messages[0].Images![0].FileName.Should().Be("image.png");
messages[0].Content.Length.Should().BeLessThan(4200);
}
[Fact]
public void TruncateToolResults_PreservesMetadataForLongAssistantMessage()
{
var messages = new List<ChatMessage>
{
new()
{
Role = "assistant",
Content = new string('b', 5000),
Timestamp = new DateTime(2026, 4, 3, 1, 5, 0),
MetaKind = "analysis",
MetaRunId = "run-2",
AttachedFiles = [@"E:\sample\b.txt"],
},
new() { Role = "user", Content = "recent-1" },
new() { Role = "assistant", Content = "recent-2" },
new() { Role = "user", Content = "recent-3" },
new() { Role = "assistant", Content = "recent-4" },
new() { Role = "user", Content = "recent-5" },
new() { Role = "assistant", Content = "recent-6" },
};
var changed = InvokePrivateStatic<bool>("TruncateToolResults", messages);
changed.Should().BeTrue();
messages[0].MetaKind.Should().Be("analysis");
messages[0].MetaRunId.Should().Be("run-2");
messages[0].AttachedFiles.Should().ContainSingle().Which.Should().Be(@"E:\sample\b.txt");
messages[0].Content.Length.Should().BeLessThan(5000);
}
private static T InvokePrivateStatic<T>(string methodName, params object?[] arguments)
{
var method = typeof(ContextCondenser).GetMethod(methodName, BindingFlags.NonPublic | BindingFlags.Static);
method.Should().NotBeNull();
var result = method!.Invoke(null, arguments);
result.Should().NotBeNull();
return (T)result!;
}
}