R-package-update-check — Еженедельный дайджест новых пакетов CRAN
Агент собирает список пакетов, впервые опубликованных на CRAN за последние 7
дней, формирует человекочитаемые описания каждого пакета и сохраняет результат
в виде .md файла.
Источники данных
- CRAN /web/packages/available_packages_by_date.html — страница с датами
первой публикации.
URL:
https://cran.r-project.org/web/packages/available_packages_by_date.html - crandb API (основной):
https://crandb.r-pkg.org/{pkg}— JSON с полями Title, Description, Author, License, Imports и др. - CRAN DESCRIPTION-файл (резервный):
https://cran.r-project.org/web/packages/{pkg}/DESCRIPTION
Алгоритм выполнения
Шаг 1 — Получить список новых пакетов
Загрузи страницу с датами публикаций и отфильтруй пакеты, у которых дата
первого появления попадает в диапазон [сегодня − 7 дней, сегодня].
# Пример парсинга в R
url <- "https://cran.r-project.org/web/packages/available_packages_by_date.html"
page <- rvest::read_html(url)
tbl <- rvest::html_table(page)[[1]]
new_pkgs <- tbl[as.Date(tbl$Date) >= Sys.Date() - 7, ]
Если R недоступен — используй web_fetch + парсинг HTML напрямую.
Шаг 2 — Получить метаданные каждого пакета
Для каждого пакета из списка обратись к crandb API:
GET https://crandb.r-pkg.org/<pkg_name>
Извлеки поля: Title, Description, Author, Maintainer, License,
Imports, Suggests, URL.
При ошибке 404 — пробуй DESCRIPTION-файл напрямую:
https://cran.r-project.org/web/packages/<pkg>/DESCRIPTION
Шаг 3 — Сформировать Markdown-описание каждого пакета
Для каждого пакета используй строго этот шаблон:
### {Название пакета} ({версия})
**Что делает:** {1–2 предложения, суть пакета простым языком}
**Область применения:** {тег: статистика / визуализация / машинное обучение /
работа с данными / веб / биоинформатика / утилиты / другое}
**Зависимости:** {основные импорты через запятую, не более 5}
**Лицензия:** {лицензия}
**Автор/мейнтейнер:** {имя}
**Ссылка:** https://cran.r-project.org/package={pkg}
Описание «Что делает» — на языке пользователя, простым языком. Не копируй дословно поле Description из DESCRIPTION — перефразируй.
Шаг 4 — Собрать и сохранить итоговый .md файл
Структура файла
# Новые пакеты CRAN: {дата_начала} — {дата_конца}
> Дайджест сформирован автоматически агентом Hermes.
> Всего новых пакетов за период: {N}
## Содержание по категориям
- Статистика: {n}
- Визуализация: {n}
- Машинное обучение: {n}
- Работа с данными: {n}
- Биоинформатика: {n}
- Утилиты: {n}
- Другое: {n}
---
## Пакеты
{блоки пакетов, сгруппированные по категории, внутри категории — по алфавиту}
---
*Источник: [CRAN](https://cran.r-project.org) /
[crandb](https://crandb.r-pkg.org)*
Имя файла
Формат: cran-digest-{YYYY-MM-DD}.md, где дата — последний день периода
(обычно сегодня).
Пример: cran-digest-2025-06-13.md
Сохранение и передача файла
- Определи рабочую директорию агента: используй переменную окружения
$PWDили выполниos.getcwd()/getwd()— это и есть целевая папка. Никогда не используй захардкоженный путь вроде/mnt/user-data/outputs/. - Запишь файл в определённую рабочую директорию:
{рабочая_директория}/cran-digest-{YYYY-MM-DD}.md - Вызови
present_filesс полным путём к файлу, чтобы пользователь мог его скачать. - В чат выведи краткое резюме: количество пакетов, топ-3 категории.
Параметры запуска
Пользователь может уточнить запрос — учитывай эти параметры без переспросов:
| Параметр | По умолчанию | Пример запроса |
|---|---|---|
| Период | 7 дней | «за последние 14 дней» |
| Язык описаний | Язык запроса | «описания на английском» |
| Фильтр по теме | нет | «только пакеты для визуализации» |
| Имя файла | авто по дате | «сохрани как weekly-cran.md» |
| Макс. пакетов | все | «топ-20 самых интересных» |
Приоритеты при большом числе пакетов
Если пакетов больше 30 и пользователь не просил полный список:
- Предупреди о числе пакетов одной фразой.
- Предложи три варианта: показать все / только топ-N / отфильтровать по теме.
- При выборе «топ-N» — приоритизируй пакеты с наибольшим числом зависимостей (признак востребованности) или с наиболее содержательным Description.
Обработка ошибок
| Ситуация | Действие |
|---|---|
| crandb недоступен | Переключись на DESCRIPTION-файл с CRAN |
| Пакет archived / исчез со страницы | Пропусти, упомяни в сноске файла |
| Пустое поле Description | Напиши «Описание недоступно», дай ссылку на CRAN |
| Сетевой таймаут | Повтори 2 раза с паузой, затем пропусти пакет |
Пример минимального вызова
«Покажи новые пакеты CRAN за эту неделю»
Агент без дополнительных вопросов:
- Определяет диапазон дат (сегодня − 7 дней).
- Получает список новых пакетов.
- Формирует описания.
- Сохраняет
cran-digest-{сегодня}.mdв outputs. - Вызывает
present_files— пользователь получает ссылку на скачивание. - В чат выводит: «Готово. Найдено X пакетов. Файл сохранён.»