feat: Wave 5 Python parity — outlook COM + time tracker
Some checks are pending
Python CI / pytest (ubuntu-latest) (push) Waiting to run
Python CI / pytest (windows-latest) (push) Waiting to run
Python CI / ruff (push) Waiting to run

Outlook COM (`outlook_handlers.py`, agent):
- 4 handlers mirroring Rust pack: unread_count, latest, send_clipboard,
  summarize_inbox. Uses `win32com.client` with lazy import so the module
  loads even when pywin32 is missing — handlers degrade gracefully and
  speak a "Outlook недоступен" reply.
- `requirements.txt`: pywin32>=305 (optional).
- 7 unit tests mock `_outlook_session` via unittest.mock.

Time tracker (`time_tracker_handlers.py`, agent):
- 5 handlers: start, stop, today, week, reset. JSON store at
  `<here>/time_tracker.json`, atomic write-then-rename.
- Same shape as the Rust pack's `jarvis.state` blob: current_session_start
  + sessions[{start,end}]. Local-calendar today boundary.
- Full Russian pluralisation (час/часа/часов, минута/минуты/минут).
- 14 unit tests using the existing `isolated_state` fixture in conftest.py.

`extensions.py` + `main.py`: imports + 9 new proxy do_* functions + 9
new dispatch elifs. `commands.yaml`: 9 new entries.

Tests: 60 → 81 (+14 tracker + 7 outlook).
This commit is contained in:
Bossiara13 2026-05-16 14:34:44 +03:00
parent 45d9425ed7
commit 5265cb0fbe
8 changed files with 971 additions and 0 deletions

View file

@ -1549,3 +1549,78 @@ personality_tony_quote:
- процитируй железного человека
- цитата старка
action: {type: personality_tony_quote}
tracker_start:
phrases:
- начни отсчёт
- начни отсчет
- запусти трекер
- я начинаю работу
- начало рабочего дня
action: {type: tracker_start}
tracker_stop:
phrases:
- закончи отсчёт
- закончи отсчет
- останови трекер
- я закончил работу
- конец рабочего дня
action: {type: tracker_stop}
tracker_today:
phrases:
- сколько я работаю сегодня
- сколько отработал сегодня
- сколько часов сегодня
- сколько времени за сегодня
action: {type: tracker_today}
tracker_week:
phrases:
- сколько на этой неделе
- сколько отработал на неделе
- часы за неделю
- статистика за неделю
action: {type: tracker_week}
tracker_reset:
phrases:
- сбрось трекер
- обнули трекер
- очисти трекер
- сбрось отсчёт
action: {type: tracker_reset}
outlook_unread_count:
phrases:
- сколько у меня непрочитанных писем
- сколько непрочитанных писем
- проверь почту
- проверь outlook
- сколько новых писем
action: {type: outlook_unread_count}
outlook_latest:
phrases:
- прочитай последнее письмо
- что в последнем письме
- последнее письмо
- покажи последнее письмо
action: {type: outlook_latest}
outlook_send_clipboard:
phrases:
- отправь письмо
- отправь почту
- напиши письмо
- отправь это
action: {type: outlook_send_clipboard}
outlook_summarize_inbox:
phrases:
- коротко расскажи про инбокс
- расскажи что в инбоксе
- сделай саммари инбокса
- что нового в почте
action: {type: outlook_summarize_inbox}