diff options
Diffstat (limited to 'src/Agent.Core/Runtime/AgentRuntime.cs')
| -rw-r--r-- | src/Agent.Core/Runtime/AgentRuntime.cs | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/src/Agent.Core/Runtime/AgentRuntime.cs b/src/Agent.Core/Runtime/AgentRuntime.cs index 5ca9d1c..676fe0d 100644 --- a/src/Agent.Core/Runtime/AgentRuntime.cs +++ b/src/Agent.Core/Runtime/AgentRuntime.cs @@ -303,7 +303,8 @@ public sealed class AgentRuntime(TaskRegistry registry, IOllamaClient ollama, Ag throw new PolicyDeniedException(toolResult.FailureFingerprint ?? $"policy:{call.Function.Name}:{toolResult.Output}", toolResult.Output, toolResult.ErrorCode ?? "policy_denied", toolResult.ErrorCategory, toolResult.TargetPath, toolResult.RequiredPermission, toolResult.Resolution); - failureFingerprint = toolResult.FailureFingerprint ?? failureFingerprint; + if (!toolResult.Success && !isMetadataTool) + failureFingerprint = toolResult.FailureFingerprint ?? failureFingerprint; messages.Add(new OllamaMessage("tool", toolResult.Output, ToolName: call.Function.Name)); } bool verified = plannerTask.RequiredTools.All(successfulRequiredTools.Contains) && (!requiresExternalEffect || externalEffectEvidence); @@ -527,12 +528,19 @@ public sealed class AgentRuntime(TaskRegistry registry, IOllamaClient ollama, Ag private string LocalizePolicyDenial(PolicyDeniedException error) { if (locale is null) return error.Message; + string resolutionKey = error.ErrorCategory switch + { + "filesystem" => "runtime.policy_resolution.filesystem", + "process" => "runtime.policy_resolution.process", + "network" => "runtime.policy_resolution.network", + _ => "runtime.policy_resolution.default" + }; return locale.Format("runtime.policy_denied", new Dictionary<string, object?> { ["code"] = error.ErrorCode, ["path"] = error.TargetPath ?? "-", ["permission"] = error.RequiredPermission ?? "-", - ["resolution"] = error.Resolution ?? "-" + ["resolution"] = locale.Get(resolutionKey) }); } |
