using System.Text.Json.Serialization; namespace LyricFlow.Core.Dtos; public record CapabilitiesDto( [property: JsonPropertyName("analysis")] bool Analysis, [property: JsonPropertyName("phonetics")] bool Phonetics, [property: JsonPropertyName("spellcheck")] bool Spellcheck, [property: JsonPropertyName("synonyms")] bool Synonyms, [property: JsonPropertyName("autocorrect")] bool Autocorrect, [property: JsonPropertyName("projects")] bool Projects, [property: JsonPropertyName("sessions")] bool Sessions, [property: JsonPropertyName("settings")] bool Settings, [property: JsonPropertyName("files")] bool Files, [property: JsonPropertyName("history")] bool History, [property: JsonPropertyName("scratchpad")] bool Scratchpad, [property: JsonPropertyName("has_cmudict")] bool HasCmudict, [property: JsonPropertyName("has_wordnet")] bool HasWordNet ); public record HealthDto( [property: JsonPropertyName("status")] string Status, [property: JsonPropertyName("version")] string Version, [property: JsonPropertyName("ready")] bool Ready, [property: JsonPropertyName("dictionary_count")] int DictionaryCount, [property: JsonPropertyName("capabilities")] CapabilitiesDto Capabilities ); public record ProjectStateDto( [property: JsonPropertyName("version")] int Version, [property: JsonPropertyName("name")] string Name, [property: JsonPropertyName("open_files")] List OpenFiles, [property: JsonPropertyName("active_file")] string? ActiveFile, [property: JsonPropertyName("cursor_positions")] Dictionary CursorPositions, [property: JsonPropertyName("scratchpad_open")] bool ScratchpadOpen ); public record SessionTabSnapshotDto( [property: JsonPropertyName("tab_id")] string TabId, [property: JsonPropertyName("file_path")] string? FilePath, [property: JsonPropertyName("display_name")] string DisplayName, [property: JsonPropertyName("content")] string Content, [property: JsonPropertyName("cursor_position")] int CursorPosition, [property: JsonPropertyName("is_dirty")] bool IsDirty, [property: JsonPropertyName("is_untitled")] bool IsUntitled, [property: JsonPropertyName("snapshot_mtime")] double? SnapshotMtime, [property: JsonPropertyName("workspace_root")] string? WorkspaceRoot, [property: JsonPropertyName("updated_at")] string UpdatedAt ); public record AppCorePreferencesDto( [property: JsonPropertyName("reopen_last_project")] bool ReopenLastProject, [property: JsonPropertyName("restore_unsaved_tabs")] bool RestoreUnsavedTabs, [property: JsonPropertyName("last_project_file")] string LastProjectFile ); public record FileReadResultDto( [property: JsonPropertyName("success")] bool Success, [property: JsonPropertyName("message")] string Message, [property: JsonPropertyName("content")] string? Content, [property: JsonPropertyName("path")] string? Path ); public record FileWriteResultDto( [property: JsonPropertyName("success")] bool Success, [property: JsonPropertyName("message")] string Message, [property: JsonPropertyName("path")] string? Path ); public record SnapshotDto( [property: JsonPropertyName("id")] int Id, [property: JsonPropertyName("file_path")] string FilePath, [property: JsonPropertyName("content")] string Content, [property: JsonPropertyName("timestamp")] double Timestamp ); public record CountDto( [property: JsonPropertyName("count")] int Count ); public record KnownWordDto( [property: JsonPropertyName("is_known")] bool IsKnown ); public record CandidateDto( [property: JsonPropertyName("candidate")] string? Candidate ); public record SuccessDto( [property: JsonPropertyName("success")] bool Success ); public record ScratchpadContentDto( [property: JsonPropertyName("content")] string Content ); public record RhymeGroupDto( [property: JsonPropertyName("word")] string Word, [property: JsonPropertyName("group")] int? Group ); public record SuggestionResponseDto( [property: JsonPropertyName("perfect")] List Perfect, [property: JsonPropertyName("slant")] List Slant ); public record SynonymResponseDto( [property: JsonPropertyName("synonyms")] List Synonyms, [property: JsonPropertyName("vibe")] List Vibe ); public record SpellingIssueDto( [property: JsonPropertyName("word")] string Word, [property: JsonPropertyName("normalized")] string Normalized, [property: JsonPropertyName("line")] int Line, [property: JsonPropertyName("suggestions")] List Suggestions );