v0.11.0: Docs, export, and GUI enhancements
Summary
Bundles the docs/TODO.md work (adopted into docs/plans/20260530-docs-export-gui-enhancements.md, executed via ralphex, then extended with follow-up fixes). Clearer docs, richer HTML/PDF exports, a more informative GUI, installable agent plugins, and a round of render bug fixes — without changing JSON/TXT output.
Changes
Docs
- Reorder README (Usage above Installation); document GUI chat identifiers (Saved Messages, private group).
HTML/PDF export (#80)
- Inline entity formatting (bold/italic/underline/strikethrough/code/links) in HTML and PDF via
format_entities; href scheme allowlist dropsjavascript:. - Reply anchors + thread headers (HTML); reply citations to a topic root are suppressed (the header already names it).
- PDF Cyrillic monospace fix: code/
prespans use a registered Unicode mono font (DejaVu/Noto/Liberation/Consolas) instead of Courier.
HTML export — forum topics
- Forum topic names: headers/tabs use the real topic title (
MessageActionTopicCreate, or fetched at download time) instead of a message's first line. - Topic tabs: default All + one tab per forum topic that filters the view; client-side, non-forum chats render no tabs.
- Forum-only gating: topic headers/tabs appear only in forum supergroups — private chats and regular groups render replies as inline citations, no topic separators.
- Windowed forum downloads (e.g.
--last-days): group by the real forum topic id (not the reply chain) and fetch topic titles at download time, so topics stay intact and named even when their topic-create messages fall outside the window. - Discussion sub-threads (
reply_to_top_idwithoutforum_topic) correctly fold into General instead of becoming bogusThread #<id>topics. - Anchor scrolling: header is
staticand bubbles usescroll-margin-topso jumping to a message no longer hides it behind the sticky tabs.
GUI
- Structured progress events (media current/total, per-file, last-message date) consumed by the GUI instead of scraping log text.
- Windows auto-update: core checker + Settings "Check updates" button that swaps to "Download" when an update is available.
- Gray unchecked checkboxes matching the input background.
- Chat-field help hint: an ⓘ tooltip + a collapsible "How to fill this?" block listing accepted identifiers (Saved Messages =
me, @username/link, private/by id, phone,folder:Name,.jsonexport). Toggleable viagui_chat_hint_tooltip/gui_chat_hint_help.
Media
--mediasummary: count + total size, downloaded vs cached, average MB/sec (downloaded-only), and retry stats.
Agent plugins (Claude / Cursor / Codex)
- Installable per agent, generated from one source of truth (
skills/telegram-download-chat/SKILL.md) byscripts/gen_agent_plugins.py:.claude-plugin/manifests,.cursor/rules/*.mdc,.codex/prompts/*.md. A pytest fails if they drift.
Tests
- Opt-in e2e export validation against the live test group: clean download (
--overwrite) with--media, render HTML/PDF, assert inline formatting, reply anchors, topic names/tabs, reposts, and downloaded media.
Testing
pytest: 282 passed, 9 skipped (skips are the opt-in e2e + auth tests);black/isortclean.- Live e2e: 8 passed; forum topic-id fix also verified live on a real windowed forum download (real topic names + tabs, no
Thread #<id>leftovers).
Closes #80
🤖 Generated with Claude Code