V17 / d6d373561692
WorkspaceTool.cs
Lilith/Core/Workspace/WorkspaceTool.cs
Unchanged from the preceding versionCS
using System.Text.Json;
using Lilith.Core.Tools;
namespace Lilith.Core.Workspace;
internal sealed class WorkspaceTool(WorkspaceSession session, string operation, IReadOnlyDictionary<string, string> inputs, Action<WorkspaceResult> completed) : ITurnResultTool
{
public string Name => "workspace_" + operation + "_operation";
public string Description => "Perform the scenario's " + operation + " operation. Use the declared scenario inputs exactly. Returns a verified storage result. Never invent completion.";
public TimeSpan ExecutionTimeout => TimeSpan.FromSeconds(30);
public JsonElement Parameters => JsonSerializer.SerializeToElement(new { type = "object", properties = new { }, additionalProperties = false });
public async Task<string> ExecuteAsync(JsonElement arguments, CancellationToken cancellationToken = default) =>
(await ExecuteResultAsync(arguments, cancellationToken)).Content;
public async Task<ToolExecutionResult> ExecuteResultAsync(JsonElement arguments, CancellationToken cancellationToken)
{
if (arguments.ValueKind != JsonValueKind.Object || arguments.EnumerateObject().Any()) throw new ArgumentException("Workspace tools take no arguments; values are bound to the scenario inputs.");
string Get(string name) => inputs.GetValueOrDefault(name, "");
if (!int.TryParse(Get("offset").Length == 0 ? "0" : Get("offset"), out int offset)) throw new ArgumentException("Invalid offset.");
var request = new WorkspaceRequest(operation, Get("path"), Get("content"), Get("destination"), Get("query"), Get("bin_id"), offset);
var result = await session.ExecuteAsync(request, cancellationToken);
completed(result);
string json = JsonSerializer.Serialize(result);
return new(json, json);
}
internal static readonly string[] Operations = ["save", "mkdir", "move", "bin", "restore", "search", "read", "list", "bin_list", "pending", "approve"];
internal static string? Operation(string name) => Operations.FirstOrDefault(op => name == "workspace_" + op + "_operation");
}