# R-package-update-check

> Агент для автоматического сбора и описания новых пакетов CRAN за последнюю неделю. Используй этот навык когда пользователь просит: найти новые пакеты CRAN, сделать дайджест/обзор новинок CRAN, описать пакеты R за неделю, подготовить еженедельную сводку CRAN, или упоминает "hermes", "CRAN digest", "новые R-пакеты". Также триггерится при задачах мониторинга CRAN, составления бюллетеня или рассылки по новым пакетам R. Результат всегда оформляется и сохраняется как .md файл — используй этот навык всякий раз, когда нужен структурированный Markdown-дайджест пакетов CRAN.

- Skill: `neonsalamander/r-package-update-check` (Agent Skill)
- Install (CLI): `npx skillmds@latest add neonsalamander/r-package-update-check`
- Raw SKILL.md: https://api.skillmd.com/api/skills/neonsalamander/r-package-update-check/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Docs & Writing
- Author: NeonSalamander (https://skillmd.com/u/neonsalamander)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/neonsalamander/r-package-update-check

---


# R-package-update-check — Еженедельный дайджест новых пакетов CRAN

Агент собирает список пакетов, впервые опубликованных на CRAN за последние 7
дней, формирует человекочитаемые описания каждого пакета и **сохраняет результат
в виде `.md` файла**.

---

## Источники данных

1. **CRAN /web/packages/available_packages_by_date.html** — страница с датами
   первой публикации.
   URL: `https://cran.r-project.org/web/packages/available_packages_by_date.html`
2. **crandb API** (основной): `https://crandb.r-pkg.org/{pkg}` — JSON с полями
   Title, Description, Author, License, Imports и др.
3. **CRAN DESCRIPTION-файл** (резервный):
   `https://cran.r-project.org/web/packages/{pkg}/DESCRIPTION`

---

## Алгоритм выполнения

### Шаг 1 — Получить список новых пакетов

Загрузи страницу с датами публикаций и отфильтруй пакеты, у которых дата
первого появления попадает в диапазон `[сегодня − 7 дней, сегодня]`.

```r
# Пример парсинга в 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-описание каждого пакета

Для каждого пакета используй строго этот шаблон:

```markdown
### {Название пакета} ({версия})

**Что делает:** {1–2 предложения, суть пакета простым языком}

**Область применения:** {тег: статистика / визуализация / машинное обучение /
работа с данными / веб / биоинформатика / утилиты / другое}

**Зависимости:** {основные импорты через запятую, не более 5}

**Лицензия:** {лицензия}

**Автор/мейнтейнер:** {имя}

**Ссылка:** https://cran.r-project.org/package={pkg}
```

Описание «Что делает» — на языке пользователя, простым языком. Не копируй
дословно поле Description из DESCRIPTION — перефразируй.

### Шаг 4 — Собрать и сохранить итоговый .md файл

#### Структура файла

```markdown
# Новые пакеты 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`

#### Сохранение и передача файла

1. Определи рабочую директорию агента: используй переменную окружения `$PWD`
   или выполни `os.getcwd()` / `getwd()` — это и есть целевая папка.
   Никогда не используй захардкоженный путь вроде `/mnt/user-data/outputs/`.
2. Запишь файл в определённую рабочую директорию:
   `{рабочая_директория}/cran-digest-{YYYY-MM-DD}.md`
3. Вызови `present_files` с полным путём к файлу, чтобы пользователь мог его скачать.
4. В чат выведи краткое резюме: количество пакетов, топ-3 категории.

---

## Параметры запуска

Пользователь может уточнить запрос — учитывай эти параметры без переспросов:

| Параметр          | По умолчанию     | Пример запроса                        |
|-------------------|------------------|---------------------------------------|
| Период            | 7 дней           | «за последние 14 дней»                |
| Язык описаний     | Язык запроса     | «описания на английском»              |
| Фильтр по теме    | нет              | «только пакеты для визуализации»      |
| Имя файла         | авто по дате     | «сохрани как weekly-cran.md»          |
| Макс. пакетов     | все              | «топ-20 самых интересных»             |

---

## Приоритеты при большом числе пакетов

Если пакетов больше 30 и пользователь не просил полный список:

1. Предупреди о числе пакетов одной фразой.
2. Предложи три варианта: показать все / только топ-N / отфильтровать по теме.
3. При выборе «топ-N» — приоритизируй пакеты с наибольшим числом зависимостей
   (признак востребованности) или с наиболее содержательным Description.

---

## Обработка ошибок

| Ситуация                         | Действие                                              |
|----------------------------------|-------------------------------------------------------|
| crandb недоступен                | Переключись на DESCRIPTION-файл с CRAN                |
| Пакет archived / исчез со страницы | Пропусти, упомяни в сноске файла                   |
| Пустое поле Description          | Напиши «Описание недоступно», дай ссылку на CRAN      |
| Сетевой таймаут                  | Повтори 2 раза с паузой, затем пропусти пакет         |

---

## Пример минимального вызова

> «Покажи новые пакеты CRAN за эту неделю»

Агент без дополнительных вопросов:

1. Определяет диапазон дат (сегодня − 7 дней).
2. Получает список новых пакетов.
3. Формирует описания.
4. Сохраняет `cran-digest-{сегодня}.md` в outputs.
5. Вызывает `present_files` — пользователь получает ссылку на скачивание.
6. В чат выводит: «Готово. Найдено X пакетов. Файл сохранён.»

