using System.IO; using System.Text.Json; namespace AxCopilot.Services.Agent; public sealed class CronDeleteTool : IAgentTool { public string Name => "cron_delete"; public string Description => "Delete a local cron-like job descriptor by id or name."; public ToolParameterSchema Parameters => new() { Properties = new() { ["id"] = new() { Type = "string", Description = "Job id." }, ["name"] = new() { Type = "string", Description = "Job name (fallback)." } }, Required = [] }; public Task ExecuteAsync(JsonElement args, AgentContext context, CancellationToken ct = default) { if (string.IsNullOrWhiteSpace(context.WorkFolder) || !Directory.Exists(context.WorkFolder)) return Task.FromResult(ToolResult.Fail("valid WorkFolder is required.")); var id = args.TryGetProperty("id", out var idEl) ? (idEl.GetString() ?? "").Trim() : ""; var name = args.TryGetProperty("name", out var nameEl) ? (nameEl.GetString() ?? "").Trim() : ""; if (string.IsNullOrWhiteSpace(id) && string.IsNullOrWhiteSpace(name)) return Task.FromResult(ToolResult.Fail("id or name is required.")); var jobs = CronStore.Load(context.WorkFolder); var removed = jobs.RemoveAll(j => (!string.IsNullOrWhiteSpace(id) && string.Equals(j.Id, id, StringComparison.OrdinalIgnoreCase)) || (!string.IsNullOrWhiteSpace(name) && string.Equals(j.Name, name, StringComparison.OrdinalIgnoreCase))); CronStore.Save(context.WorkFolder, jobs); return Task.FromResult(ToolResult.Ok(removed > 0 ? $"Deleted {removed} cron job(s)." : "No matching cron job found.")); } }