summaryrefslogtreecommitdiff
path: root/src/Agent.Windows/Tools/WindowsToolBackend.cs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Agent.Windows/Tools/WindowsToolBackend.cs')
-rw-r--r--src/Agent.Windows/Tools/WindowsToolBackend.cs29
1 files changed, 18 insertions, 11 deletions
diff --git a/src/Agent.Windows/Tools/WindowsToolBackend.cs b/src/Agent.Windows/Tools/WindowsToolBackend.cs
index 936bcbd..6e62d3d 100644
--- a/src/Agent.Windows/Tools/WindowsToolBackend.cs
+++ b/src/Agent.Windows/Tools/WindowsToolBackend.cs
@@ -31,14 +31,14 @@ public sealed class WindowsToolBackend(WindowsSandboxSettings settings, ISecurit
private readonly ExecutablePolicy _executables = new(settings.Executables, settings.AllowShell);
private readonly ITaskUpdateHandler _taskUpdates = taskUpdates ?? new TaskGraphToolHandler();
- public async Task BeginTaskAsync(Guid taskId, CancellationToken cancellationToken)
+ public async Task BeginTaskAsync(Guid taskId, Guid sessionId, CancellationToken cancellationToken)
{
if (_contexts.Count != 0) throw new InvalidOperationException("Only one Task Resource scope may be active.");
AppContainerProfile profile = AppContainerProfile.EnsureFixed();
TaskResourceJournal journal = TaskResourceJournal.Create(settings.JournalDirectory, taskId);
var acl = new TaskAclManager(profile.Sid, audit, journal);
var context = new TaskContext(journal, acl);
- _taskUpdates.BeginTask(taskId);
+ _taskUpdates.BeginTask(taskId, sessionId);
try
{
foreach ((string path, FileCapability capabilities) in settings.Files
@@ -71,16 +71,23 @@ public sealed class WindowsToolBackend(WindowsSandboxSettings settings, ISecurit
public Task<ToolExecutionResult> ExecuteAsync(Guid taskId, string toolName, JsonElement arguments, CancellationToken cancellationToken)
{
TaskContext context = Get(taskId);
- return toolName switch
+ try
{
- "file_search" => Task.FromResult(Search(arguments)),
- "file_read" => Task.FromResult(Read(arguments)),
- "file_edit" => Task.FromResult(Edit(context, arguments)),
- "process_run" => Task.FromResult(RunProcess(taskId, arguments)),
- "task_update" => Task.FromResult(_taskUpdates.Execute(taskId, arguments)),
- "dir" => Task.FromResult(DirectoryOp(context, arguments)),
- _ => throw new ToolValidationException($"Unknown internal tool '{toolName}'.")
- };
+ return toolName switch
+ {
+ "file_search" => Task.FromResult(Search(arguments)),
+ "file_read" => Task.FromResult(Read(arguments)),
+ "file_edit" => Task.FromResult(Edit(context, arguments)),
+ "process_run" => Task.FromResult(RunProcess(taskId, arguments)),
+ "task_update" => Task.FromResult(_taskUpdates.Execute(taskId, arguments)),
+ "dir" => Task.FromResult(DirectoryOp(context, arguments)),
+ _ => throw new ToolValidationException($"Unknown internal tool '{toolName}'.")
+ };
+ }
+ catch (SandboxPolicyException ex)
+ {
+ return Task.FromResult(new ToolExecutionResult(false, ex.Message, false, $"{toolName}:SandboxPolicyException:{ex.Message}", RetryAllowed: false));
+ }
}
public async Task EndTaskAsync(Guid taskId, bool success, CancellationToken cancellationToken)