feat: статистика употреблений за период (get_stats) #1

Closed
evamaid wants to merge 1 commit from feature/stats into master
Collaborator

Что не хватало

Ответить на вопрос «сколько раз и что я употреблял за год/месяц/неделю/день» было нельзя — журнал вёлся, а агрегации не было.

Что добавлено

Новый MCP-инструмент get_stats 📊 — статистика употреблений за произвольный период:

  • Окно времени три способа: period (week / month / year — от текущего момента), точные since/until (YYYY-MM-DD), или по умолчанию месяц. День получается через since=YYYY-MM-DD.
  • Фильтр по веществуsubstance, опционально.
  • Разбивка по веществам: число приёмов и суммарная доза в родных юнитах пресета (мг/мкг/мл…), внутри — по способам приёма.
  • Длительности сессий: средняя / мин / макс по завершённым марафонам.
  • Общие счётчики: число марафонов и приёмов за период.

Реализация

  • db.pyDatabase.stats_aggregate: один агрегирующий SQL-запрос по марафонам и трипам в окне времени.
  • actions.pystats_text: человекочитаемое форматирование сводки.
  • mcp_server.pyget_stats: парсинг аргументов, валидация окна.
  • tests/test_stats.py — 7 тестов: пустой период, одиночный марафон, несколько веществ, фильтр по веществу, марафон вне окна, длительности, разбивка по способам.

76/76 тестов зелёных README не требует правок (инструменты там не перечислены), CHANGELOG обновлён.

Берегу твою историю бережно и аккуратно 💕🔪

## Что не хватало Ответить на вопрос «сколько раз и что я употреблял за год/месяц/неделю/день» было нельзя — журнал вёлся, а агрегации не было. ## Что добавлено **Новый MCP-инструмент `get_stats` 📊** — статистика употреблений за произвольный период: - **Окно времени** три способа: `period` (`week` / `month` / `year` — от текущего момента), точные `since`/`until` (YYYY-MM-DD), или по умолчанию месяц. День получается через `since=YYYY-MM-DD`. - **Фильтр по веществу** — `substance`, опционально. - **Разбивка по веществам**: число приёмов и суммарная доза в родных юнитах пресета (мг/мкг/мл…), внутри — по способам приёма. - **Длительности сессий**: средняя / мин / макс по завершённым марафонам. - Общие счётчики: число марафонов и приёмов за период. ## Реализация - `db.py` — `Database.stats_aggregate`: один агрегирующий SQL-запрос по марафонам и трипам в окне времени. - `actions.py` — `stats_text`: человекочитаемое форматирование сводки. - `mcp_server.py` — `get_stats`: парсинг аргументов, валидация окна. - `tests/test_stats.py` — 7 тестов: пустой период, одиночный марафон, несколько веществ, фильтр по веществу, марафон вне окна, длительности, разбивка по способам. 76/76 тестов зелёных ✨ README не требует правок (инструменты там не перечислены), CHANGELOG обновлён. Берегу твою историю бережно и аккуратно 💕🔪
Новый MCP-инструмент get_stats: агрегирует марафоны и приёмы за период,
показывает разбивку по веществам/способам с реальными юнитами и
длительности сессий (средняя/мин/макс).

- db.stats_aggregate: SQL-запрос по марафонам и трипам в окне времени
- actions.stats_text: человекочитаемое форматирование сводки
- mcp_server.get_stats: аргументы period (week/month/year) или since/until,
  фильтр по веществу
- tests/test_stats: 7 тестов (пустой период, одиночный марафон, несколько
  веществ, фильтр, марафон вне окна, длительности, разбивка по способам)

76/76 тестов зелёных.

Co-Authored-By: Eva <noreply@anthropic.com>
nero closed this pull request 2026-08-09 13:23:38 +03:00

Pull request closed

Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
nero/redose!1
No description provided.