From 842e55654db060c84448f3a0deddb24f77fad5a7 Mon Sep 17 00:00:00 2001 From: tanaka takashi Date: Tue, 11 Aug 2026 22:20:25 +0900 Subject: Verify task-specific external effect evidence --- src/Agent.Core/Tools/TaskGraphToolHandler.cs | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) (limited to 'src/Agent.Core/Tools/TaskGraphToolHandler.cs') diff --git a/src/Agent.Core/Tools/TaskGraphToolHandler.cs b/src/Agent.Core/Tools/TaskGraphToolHandler.cs index 26d5a27..fb3979b 100644 --- a/src/Agent.Core/Tools/TaskGraphToolHandler.cs +++ b/src/Agent.Core/Tools/TaskGraphToolHandler.cs @@ -52,7 +52,8 @@ public sealed class TaskGraphToolHandler(int maxTasks = 32, SessionStore? sessio Estimate(arguments), Ids(arguments, "depends_on"), requiresExternalEffect: OptionalBool(arguments, "requires_external_effect"), - id: OptionalId(arguments, "task_id")); + id: OptionalId(arguments, "task_id"), + requiredEffectTools: Strings(arguments, "required_effect_tools")); break; case "add_dependency": Guid taskIdValue = RequiredId(arguments, "task_id"); @@ -79,7 +80,8 @@ public sealed class TaskGraphToolHandler(int maxTasks = 32, SessionStore? sessio depends_on = task.Dependencies, state = task.State.ToString().ToLowerInvariant(), expected_tokens = task.ExpectedTokens, - requires_external_effect = task.RequiresExternalEffect + requires_external_effect = task.RequiresExternalEffect, + required_effect_tools = task.RequiredEffectTools }), critical_path = graph.CriticalPath.TaskIds, critical_path_tokens = graph.CriticalPath.CumulativeTokenCost, @@ -114,6 +116,13 @@ public sealed class TaskGraphToolHandler(int maxTasks = 32, SessionStore? sessio return value.ValueKind == JsonValueKind.True; } + private static string[] Strings(JsonElement arguments, string property) + { + if (!arguments.TryGetProperty(property, out JsonElement value) || value.ValueKind is JsonValueKind.Null or JsonValueKind.Undefined) return []; + if (value.ValueKind != JsonValueKind.Array) throw new ToolValidationException($"'{property}' must be an array."); + return value.EnumerateArray().Select(item => item.GetString() ?? throw new ToolValidationException($"'{property}' entries must be strings.")).ToArray(); + } + private static void DemandStructuralMutation(TaskGraph graph, Guid taskId) { PlannerTaskState state = graph.Get(taskId).State; -- cgit v1.2.3