Add Cache-Control: no-cache to RSS feed requests
Details
The HttpClient wasn't sending cache-control headers, so intermediate
proxies and CDNs could serve stale feed responses indefinitely. Adding
no-cache ensures the origin is always revalidated on refresh.
Fix category submenu: dynamic categories, correct dialog text
Details
- Replace hardcoded category list with dynamic submenu built on open,
merging 5 default categories with any custom categories from feeds
- Rename "Custom..." to "Create New Category..." with dialog title
"Create a New Category" and button "Create"
- Submenu now rebuilds each time it opens so new custom categories
appear immediately
Reorder RSS list items: single-line title, tags, then date
Details
Title is now single-line with ellipsis truncation on overflow.
Layout order changed from title/date/tags to title/tags/date
for better scannability.
Show timestamp in article detail date display
Details
Date now shows "February 28, 2026 ยท 12:29 PM" instead of just
"February 28, 2026" in the article detail pane.
Add ProseMirror JSON-to-markdown normalization and strengthen slot descriptors
Details
NormalizeContentFromJson intercepts ProseMirror-style JSON documents
({"type": "doc", "content": [...]}) that the AI hallucinates instead
of markdown text, converting them back to markdown before block
parsing. Handles headings, paragraphs, bullet/ordered lists, code
blocks, blockquotes, tables, and horizontal rules via recursive node
tree extraction.
Intent slot descriptors for notes.create_note and notes.update_note
now explicitly warn against JSON document objects in the content slot.
10 new NUnit tests cover plain markdown passthrough, ProseMirror doc
conversion, tables, bullets, code blocks, mixed types, invalid JSON,
non-document JSON, empty strings, and deeply nested table cells.
Get notified about new releases