Files
Nexus.Reader/src/NexusReader.Application/Queries/Reader/LocalEpubMetadata.cs
T
Antigravity 541e9e1fb5 feat(ai-ux): deduplicate AI queries, handle ServiceUnavailable retries, and optimize reader canvas graph prerendering (#44)
This Pull Request encapsulates all outstanding AI, Blazor InteractiveAuto lifecycle, pgvector, and Firefox authorization/session compatibility fixes.

### Key Accomplishments:
1. **Concurrent Request Deduplication (Option B):** Implemented a thread-safe active task registry in `KnowledgeService` that groups concurrent graph extraction queries for the same content, preventing duplicate AI calls completely.
2. **Resilience Strategy for Downstream Demands:** Extended the `ai-retry` resilience pipeline to automatically intercept and retry on temporary Google API `503 ServiceUnavailable` / `high demand` spikes.
3. **Interactive Graph Generation Guard (Option A):** Prevented server-side prerender-phase graph requests in the reader canvas component.
4. **Firefox Compatibility & Cookie Handler:** Implemented an authentication endpoint and hybrid hidden-form submission flow to solve login, registration, and logout redirections and cookies securely.
5. **Autoscrolling & Graph Exclusions:** Added concept-to-block smooth scrolling, active block badging, and filtered out markdown code blocks from being extracted as nodes.

All unit tests compiled and passed 100% cleanly.

---------

Co-authored-by: Marek Jasiński <jasins.marek@gmail.com>
Reviewed-on: #44
Co-authored-by: Antigravity <antigravity@google.com>
Co-committed-by: Antigravity <antigravity@google.com>
2026-05-18 17:53:36 +00:00

28 lines
693 B
C#

namespace NexusReader.Application.Queries.Reader;
/// <summary>
/// Represents metadata extracted from a local EPUB file.
/// </summary>
public record LocalEpubMetadata
{
/// <summary>
/// The title of the book.
/// </summary>
public string Title { get; set; } = string.Empty;
/// <summary>
/// The author(s) of the book.
/// </summary>
public string Author { get; set; } = string.Empty;
/// <summary>
/// The raw bytes of the cover image, if available.
/// </summary>
public byte[]? CoverImage { get; set; }
/// <summary>
/// The description or summary of the book.
/// </summary>
public string? Description { get; set; }
}