summaryrefslogtreecommitdiff
path: root/tests/Agent.Core.Tests/ObservabilityTests.cs
diff options
context:
space:
mode:
authortanaka takashi <isazaka@gmail.com>2026-08-11 21:44:53 +0900
committertanaka takashi <isazaka@gmail.com>2026-08-11 21:44:53 +0900
commit6c3458a5ec37a5b69957ad17c84de58984698f25 (patch)
treebe5c5716e7488fcf1bc1a58de0ded0b9238f34cb /tests/Agent.Core.Tests/ObservabilityTests.cs
parentb5ccecca01007f2a2459265df6d749fbfd31aa84 (diff)
Audit and align v1 runtime design
Diffstat (limited to 'tests/Agent.Core.Tests/ObservabilityTests.cs')
-rw-r--r--tests/Agent.Core.Tests/ObservabilityTests.cs56
1 files changed, 56 insertions, 0 deletions
diff --git a/tests/Agent.Core.Tests/ObservabilityTests.cs b/tests/Agent.Core.Tests/ObservabilityTests.cs
index c259eb0..8231ab9 100644
--- a/tests/Agent.Core.Tests/ObservabilityTests.cs
+++ b/tests/Agent.Core.Tests/ObservabilityTests.cs
@@ -1,14 +1,70 @@
using Agent.App.Logging;
using Agent.Core.Localization;
+using Agent.Core.Ollama;
+using Agent.Core.Runtime;
+using Agent.Core.Tools;
using Agent.Mcp;
using System.Diagnostics;
using System.Text;
+using System.Text.Json;
namespace Agent.Core.Tests;
public sealed class ObservabilityTests
{
[Fact]
+ public void Llm_log_carries_correlation_usage_and_tool_iteration_fields()
+ {
+ using var directory = new TestDirectory();
+ Guid sessionId = Guid.NewGuid();
+ Guid taskId = Guid.NewGuid();
+ Guid plannerTaskId = Guid.NewGuid();
+ Guid callId = Guid.NewGuid();
+ var context = new AgentLlmCallContext(callId, sessionId, taskId, plannerTaskId, "replan", 7, 2, "model-a");
+ using (var observer = new JsonLinesRuntimeObserver(directory.Path, 1024 * 1024, 2))
+ {
+ observer.LlmRequest(context, [new OllamaMessage("user", "request")]);
+ observer.LlmResponse(context, new OllamaResult("response", 11, 13));
+ observer.ToolResult(context, "file_read", new ToolExecutionResult(true, "ok", false));
+ observer.LlmFailure(context, "planning_failed", "invalid plan");
+ }
+
+ JsonElement[] entries = File.ReadLines(Path.Combine(directory.Path, "llm.jsonl"))
+ .Select(static line => JsonDocument.Parse(line).RootElement.Clone()).ToArray();
+ Assert.Equal(4, entries.Length);
+ Assert.All(entries, entry =>
+ {
+ Assert.Equal(callId, entry.GetProperty("call_id").GetGuid());
+ Assert.Equal(taskId, entry.GetProperty("task_id").GetGuid());
+ Assert.Equal(sessionId, entry.GetProperty("session_id").GetGuid());
+ Assert.Equal(plannerTaskId, entry.GetProperty("planner_task_id").GetGuid());
+ Assert.Equal(7, entry.GetProperty("iteration").GetInt32());
+ Assert.Equal(2, entry.GetProperty("replan").GetInt32());
+ });
+ Assert.Equal(11, entries[1].GetProperty("input_tokens").GetInt64());
+ Assert.Equal("file_read", entries[2].GetProperty("tool_name").GetString());
+ Assert.Equal("llm.failure", entries[3].GetProperty("event_name").GetString());
+ Assert.Equal("planning_failed", entries[3].GetProperty("error_code").GetString());
+ }
+
+ [Fact]
+ public void Read_agent_log_script_exposes_read_only_filters()
+ {
+ DirectoryInfo? root = new(AppContext.BaseDirectory);
+ while (root is not null && !File.Exists(Path.Combine(root.FullName, "scripts", "Read-AgentLog.ps1"))) root = root.Parent;
+ Assert.NotNull(root);
+ string scriptPath = Path.Combine(root!.FullName, "scripts", "Read-AgentLog.ps1");
+ string script = File.ReadAllText(scriptPath);
+ Assert.Contains("[string]$TaskId", script, StringComparison.Ordinal);
+ Assert.Contains("[string]$SessionId", script, StringComparison.Ordinal);
+ Assert.Contains("[string]$Event", script, StringComparison.Ordinal);
+ Assert.Contains("[string]$CallId", script, StringComparison.Ordinal);
+ Assert.Contains("[int]$Tail", script, StringComparison.Ordinal);
+ Assert.DoesNotContain("Set-Content", script, StringComparison.OrdinalIgnoreCase);
+ Assert.DoesNotContain("Remove-Item", script, StringComparison.OrdinalIgnoreCase);
+ }
+
+ [Fact]
public void Ready_is_always_visible_even_when_log_threshold_is_fatal()
{
using var directory = new TestDirectory();