Files
vesti/openspec/changes/extract-post-sources/proposal.md
T

2.5 KiB
Raw Blame History

extract-post-sources

Извлечение источников новостей из текста постов (TG-каналы/сайты) и быстрое добавление в реестр.

Why

Пользователь: нужно извлекать источники новостей из полученных постов (каналы/сайты, откуда пришли новости), чтобы в следующий раз забирать новости напрямую из источника. Сейчас ссылки в тексте постов никак не используются: всё приходит из sources.yaml, а репосты/упоминания других каналов и сайтов теряются.

What Changes

  • sources/extract.py (новый): extract_sources_from_text(text) -> list[dict] — находит в тексте ссылки на TG-каналы (t.me/handle, @handle, t.me/s/handle) и внешние сайты (https://domain), исключает ссылки на сам пост (t.me/channel/postid), дедуплицирует. Ограничение: не более 5 найденных на пост (шум).
  • web/app.py:
    • helper _post_sources(post) → список {kind, address, slug_hint, known} для карточки (known = slug_hint уже есть в sources).
    • В render candidates/selected передаёт post_sources.
    • POST /sources/add-from-post: {address} → parse_address + add_or_update_source (переиспользует существующий CRUD). Возвращает redirect на ту же страницу с did-сообщением.
  • web/templates/candidates.html / selected.html: блок «🌐 Источники из поста» под бейджами: для каждого найденного — @handle / domain, бейдж «в реестре» или кнопка «➕».

Impact

  • В карточках кандидатов/отобранных видны ссылки на внешние каналы/сайты из текста.
  • Один клик — добавить источник в реестр (yaml + БД, как ручное добавление).
  • Никаких LLM-вызовов — regex-извлечение, бесплатно. Дообогащение модели для одобренных — отдельная задача (по кнопке, экономия токенов).