using System.IO; using System.Text.Json; using System.Text.Json.Serialization; namespace AxCopilot.Services.Agent; internal static class TeamStore { private const string TeamRelativePath = ".ax/team.json"; internal sealed class Member { [JsonPropertyName("id")] public string Id { get; set; } = Guid.NewGuid().ToString("N"); [JsonPropertyName("name")] public string Name { get; set; } = ""; [JsonPropertyName("role")] public string Role { get; set; } = "worker"; [JsonPropertyName("createdAt")] public DateTime CreatedAt { get; set; } = DateTime.Now; } internal static string GetPath(string root) => Path.Combine(root, TeamRelativePath); internal static List Load(string root) { var path = GetPath(root); if (!File.Exists(path)) return []; try { var json = TextFileCodec.ReadAllText(path).Text; return JsonSerializer.Deserialize>(json) ?? []; } catch { return []; } } internal static void Save(string root, List members) { var path = GetPath(root); var dir = Path.GetDirectoryName(path); if (!string.IsNullOrWhiteSpace(dir) && !Directory.Exists(dir)) Directory.CreateDirectory(dir); File.WriteAllText(path, JsonSerializer.Serialize(members, new JsonSerializerOptions { WriteIndented = true }), TextFileCodec.Utf8NoBom); } }