using System.IO; using System.Linq; using System.Text; using System.Text.Json; namespace AxCopilot.Services.Agent; public sealed class TaskGetTool : IAgentTool { public string Name => "task_get"; public string Description => "Get a task by id from the workspace task board."; public ToolParameterSchema Parameters => new() { Properties = new() { ["id"] = new() { Type = "integer", Description = "Task id" } }, Required = ["id"] }; public Task ExecuteAsync(JsonElement args, AgentContext context, CancellationToken ct = default) { if (!args.SafeTryGetProperty("id", out var idEl)) return Task.FromResult(ToolResult.Fail("id is required.")); if (string.IsNullOrWhiteSpace(context.WorkFolder) || !Directory.Exists(context.WorkFolder)) return Task.FromResult(ToolResult.Fail("valid WorkFolder is required.")); var id = idEl.GetInt32(); var task = TaskBoardStore.Load(context.WorkFolder).FirstOrDefault(t => t.Id == id); if (task == null) return Task.FromResult(ToolResult.Fail($"Task #{id} not found.")); var sb = new StringBuilder(); sb.AppendLine($"#{task.Id} {task.Title}"); sb.AppendLine($"status: {task.Status}"); sb.AppendLine($"priority: {task.Priority}"); if (!string.IsNullOrWhiteSpace(task.Description)) sb.AppendLine($"description: {task.Description}"); if (!string.IsNullOrWhiteSpace(task.Output)) sb.AppendLine($"output: {task.Output}"); sb.AppendLine($"updatedAt: {task.UpdatedAt:yyyy-MM-dd HH:mm:ss}"); return Task.FromResult(ToolResult.Ok(sb.ToString())); } }