using AxCopilot.Services.Agent; using FluentAssertions; using Xunit; namespace AxCopilot.Tests.Services; public class AgentLoopDiagnosticsFormatterTests { [Fact] public void BuildCompactionCompleteMessage_ShouldIncludeStageSummaryAndSavedTokens() { var result = new ContextCompactionResult { BeforeTokens = 18_400, AfterTokens = 7_900, }; result.AppliedStages.Add("tool-result"); result.AppliedStages.Add("session-memory"); var message = AgentLoopDiagnosticsFormatter.BuildCompactionCompleteMessage(result); message.Should().Be("Context compaction complete: tool-result -> session-memory, saved 10.3K tokens"); } [Fact] public void BuildQueryViewSummary_ShouldIncludeWindowAndPreviewReuseMetrics() { var result = new AgentQueryContextWindowResult { Messages = new(), SourceMessageCount = 34, ViewMessageCount = 12, WindowStartIndex = 21, BoundaryApplied = true, ToolPairExpanded = true, PreservedToolPairCount = 2, TruncatedToolResultCount = 3, ReusedToolResultPreviewCount = 4, TokensBeforeBudget = 8_600, TokensAfterBudget = 6_100, }; var summary = AgentLoopDiagnosticsFormatter.BuildQueryViewSummary(result); summary.Should().Be("query-view 34->12, start=21, pairs=2, tool_result_budget=3, tool_result_preview_reuse=4, tokens 8600->6100"); } }