using System.IO; using System.Text.Json; namespace AxCopilot.Services.Agent; public sealed class TaskCreateTool : IAgentTool { public string Name => "task_create"; public string Description => "Create a tracked task in the workspace task board (.ax/taskboard.json)."; public ToolParameterSchema Parameters => new() { Properties = new() { ["title"] = new() { Type = "string", Description = "Task title" }, ["description"] = new() { Type = "string", Description = "Task description (optional)" }, ["priority"] = new() { Type = "string", Description = "high | medium | low", Enum = ["high", "medium", "low"] }, }, Required = ["title"] }; public Task ExecuteAsync(JsonElement args, AgentContext context, CancellationToken ct = default) { var title = args.TryGetProperty("title", out var titleEl) ? (titleEl.GetString() ?? "").Trim() : ""; if (string.IsNullOrWhiteSpace(title)) return Task.FromResult(ToolResult.Fail("title is required.")); if (string.IsNullOrWhiteSpace(context.WorkFolder) || !Directory.Exists(context.WorkFolder)) return Task.FromResult(ToolResult.Fail("valid WorkFolder is required.")); var description = args.TryGetProperty("description", out var descEl) ? (descEl.GetString() ?? "").Trim() : ""; var priority = args.TryGetProperty("priority", out var priEl) ? (priEl.GetString() ?? "medium").Trim().ToLowerInvariant() : "medium"; if (!TaskBoardStore.IsValidPriority(priority)) priority = "medium"; var tasks = TaskBoardStore.Load(context.WorkFolder); var id = TaskBoardStore.NextId(tasks); tasks.Add(new TaskBoardStore.TaskItem { Id = id, Title = title, Description = description, Priority = priority, Status = "open", CreatedAt = DateTime.Now, UpdatedAt = DateTime.Now }); TaskBoardStore.Save(context.WorkFolder, tasks); return Task.FromResult(ToolResult.Ok($"Created task #{id}: {title} [{priority}]")); } }