using System.IO; using System.Linq; using System.Text.Json; namespace AxCopilot.Services.Agent; public sealed class TeamDeleteTool : IAgentTool { public string Name => "team_delete"; public string Description => "Delete a teammate by id or name from local team board."; public ToolParameterSchema Parameters => new() { Properties = new() { ["id"] = new() { Type = "string", Description = "Member id." }, ["name"] = new() { Type = "string", Description = "Member 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 members = TeamStore.Load(context.WorkFolder); var removed = members.RemoveAll(m => (!string.IsNullOrWhiteSpace(id) && string.Equals(m.Id, id, StringComparison.OrdinalIgnoreCase)) || (!string.IsNullOrWhiteSpace(name) && string.Equals(m.Name, name, StringComparison.OrdinalIgnoreCase))); TeamStore.Save(context.WorkFolder, members); return Task.FromResult(ToolResult.Ok(removed > 0 ? $"Deleted {removed} team member(s)." : "No matching member found.")); } }