rpi: почта — индекс/классы (mail), выгрузка писем Нели в Nelka/, gmail.modify; квота Gmail ~100 писем/мин
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
b69afd89a1
commit
d101f7093a
+7
-1
@@ -230,8 +230,14 @@ Docker CE 29.9 + Compose v5.6 из репо download.docker.com (в Debian ст
|
|||||||
|
|
||||||
- Скилл Astra **`google`** (`ruzzy/astra-bot`, `codex/skills/google/`): `gcal` (повестка, свободные окна, создать/перенести/изменить/удалить событие), `gmail` (**только чтение**: список/поиск, непрочитанные, письмо, вложения → `/tmp/astra-gmail/`), `google-auth` (вход/статус). На rpi: `/usr/local/bin/{gcal,gmail,google-auth}`, модуль `/usr/local/lib/astra-google/google_api.py` (только stdlib). Без подтверждения — `codex/rules/google.rules`.
|
- Скилл Astra **`google`** (`ruzzy/astra-bot`, `codex/skills/google/`): `gcal` (повестка, свободные окна, создать/перенести/изменить/удалить событие), `gmail` (**только чтение**: список/поиск, непрочитанные, письмо, вложения → `/tmp/astra-gmail/`), `google-auth` (вход/статус). На rpi: `/usr/local/bin/{gcal,gmail,google-auth}`, модуль `/usr/local/lib/astra-google/google_api.py` (только stdlib). Без подтверждения — `codex/rules/google.rules`.
|
||||||
- Аккаунт `ruslan.gilfanov@gmail.com`; OAuth-клиент Desktop в Google Cloud проекте `astra` (Calendar API + Gmail API), приложение опубликовано (In production, не проверено Google — для личного использования). Branding: домашняя `https://www.ruzzy.dev/astra/index.html`, политика `https://www.ruzzy.dev/astra/privacy.html` (fr1, `stacks/www-ruzzy/`), authorized domain `ruzzy.dev`, без логотипа (логотип требует верификации).
|
- Аккаунт `ruslan.gilfanov@gmail.com`; OAuth-клиент Desktop в Google Cloud проекте `astra` (Calendar API + Gmail API), приложение опубликовано (In production, не проверено Google — для личного использования). Branding: домашняя `https://www.ruzzy.dev/astra/index.html`, политика `https://www.ruzzy.dev/astra/privacy.html` (fr1, `stacks/www-ruzzy/`), authorized domain `ruzzy.dev`, без логотипа (логотип требует верификации).
|
||||||
- Права токена: `calendar` + `gmail.readonly`. Секреты — `/etc/astra-google/` (root:astra 2770; `client.json` 640, `token.json` 640 — refresh-токен), в git нет. Вход (PKCE, redirect `http://localhost`): `google-auth url` → «Разрешить» → адрес `http://localhost/?code=…` из браузера → `google-auth code 'АДРЕС'`. Отозвать — myaccount.google.com/permissions.
|
- Права токена: `calendar` + `gmail.modify` (с 2026-10-12 вместо `gmail.readonly` — ради «прочитано»; по правилам владельца других изменений почты нет, `gmail mark-read` — только по прямой просьбе, с кнопкой). Секреты — `/etc/astra-google/` (root:astra 2770; `client.json` 640, `token.json` 640 — refresh-токен), в git нет. Вход (PKCE, redirect `http://localhost`): `google-auth url` → «Разрешить» → адрес `http://localhost/?code=…` из браузера → `google-auth code 'АДРЕС'`. Отозвать — myaccount.google.com/permissions.
|
||||||
- Календари: личный (запись), «Семейная группа» (запись — только по явной просьбе), праздники Кипра (`ru.cy#holiday`, чтение; США убраны 2026-10-12), **рабочий `rgilfanov@walletteam.org` — только занятость** (freeBusyReader через `freeBusy`): админ walletteam запрещает внешний доступ к подробностям; обход (секретный iCal, копирование) — не делать. `gcal` пишет только в календари с ролью owner/writer.
|
- Календари: личный (запись), «Семейная группа» (запись — только по явной просьбе), праздники Кипра (`ru.cy#holiday`, чтение; США убраны 2026-10-12), **рабочий `rgilfanov@walletteam.org` — только занятость** (freeBusyReader через `freeBusy`): админ walletteam запрещает внешний доступ к подробностям; обход (секретный iCal, копирование) — не делать. `gcal` пишет только в календари с ролью owner/writer.
|
||||||
- **Правила записи (владелец 2026-10-12):** менять календарь по запросу могут владелец и Оля (`129703290`); `gcal` пишет **только в основной личный** и **только в свободное время** (add/move отказывают при пересечении с любым событием, включая рабочую занятость). Каждое изменение — с `--by <TG_ID>`; журнал `/var/lib/astra-google/changes.log`; изменения Оли → оповещение владельцу через очередь `/var/lib/astra-google/outbox/` (astra не видит токен бота; отправляет таймер root). Состояние — `/var/lib/astra-google/` (root:astra 2770).
|
- **Правила записи (владелец 2026-10-12):** менять календарь по запросу могут владелец и Оля (`129703290`); `gcal` пишет **только в основной личный** и **только в свободное время** (add/move отказывают при пересечении с любым событием, включая рабочую занятость). Каждое изменение — с `--by <TG_ID>`; журнал `/var/lib/astra-google/changes.log`; изменения Оли → оповещение владельцу через очередь `/var/lib/astra-google/outbox/` (astra не видит токен бота; отправляет таймер root). Состояние — `/var/lib/astra-google/` (root:astra 2770).
|
||||||
- **Напоминания владельцу** (только 607015): `gcal-remind.timer` (каждую минуту, root) — «⏰ Через 5 мин» для всех событий личного и семейного календарей (рабочая занятость и праздники — нет), дедуп `reminded.json`; `gcal-digest.timer` (10:00 Asia/Nicosia) — важные события завтра (врач/стоматолог/анализы/парикмахерская/поездки/рейсы/отели — по словам, или флаг `--important` в `extendedProperties.private.important`). Юниты — `codex/skills/google/systemd/` в astra-bot. Проверено 2026-10-12: тестовое событие от Оли → оповещение в 10:02 и напоминание за 5 мин в 10:03.
|
- **Напоминания владельцу** (только 607015): `gcal-remind.timer` (каждую минуту, root) — «⏰ Через 5 мин» для всех событий личного и семейного календарей (рабочая занятость и праздники — нет), дедуп `reminded.json`; `gcal-digest.timer` (10:00 Asia/Nicosia) — важные события завтра (врач/стоматолог/анализы/парикмахерская/поездки/рейсы/отели — по словам, или флаг `--important` в `extendedProperties.private.important`). Юниты — `codex/skills/google/systemd/` в astra-bot. Проверено 2026-10-12: тестовое событие от Оли → оповещение в 10:02 и напоминание за 5 мин в 10:03.
|
||||||
- Доступ: владелец — всё; Оля (`129703290`) — календарь (чтение, запись в личный в свободное время), почта закрыта; Поле — ни календарь, ни почту (правила в `codex/AGENTS.md`).
|
- Доступ: владелец — всё; Оля (`129703290`) — календарь (чтение, запись в личный в свободное время), почта закрыта; Поле — ни календарь, ни почту (правила в `codex/AGENTS.md`).
|
||||||
|
|
||||||
|
### Почта: индекс, классы, выгрузка в заметки (с 2026-10-12)
|
||||||
|
|
||||||
|
- Скилл **`mail`** (`codex/skills/mail/`), `/usr/local/bin/mail`: индекс «Входящих» и «Спама» в `/var/lib/astra-mail/mail.db` (SQLite + FTS5, astra 2770/660) — поиск по отправителю/теме/тексту/вложениям, классы **важное / обычное / рассылка / спам** с причиной (правила владельца → Gmail «Спам» → адресаты «Отправленных» и смысловые признаки → List-Unsubscribe/категории Gmail → обычное). В Gmail ничего не меняет.
|
||||||
|
- `mail-sync.timer` (astra, раз в 5 мин после окончания прошлого запуска): `history.list` по `historyId`; если история устарела — полная пересинхронизация. ⚠️ **Квота Gmail проекта `astra` — ~100 писем `messages.get(full)` в минуту** (замерено: 403 «Units per minute per user» после ~105 запросов) → скорость ≤ 1,5 запроса/с; первичная индексация ~12,4 тыс. писем ≈ 2+ часа (запущена 2026-10-12).
|
||||||
|
- **Выгрузка в заметки**: `mail export add АДРЕС ПАПКА` — письма адреса (вся почта) → заметки в `~astra/vault/ПАПКА/` (текст без изменений, вложения в `ПАПКА/attachments/<заметка>/`), проверка при каждом sync. Действует **nellka@inbox.ru → `Nelka/`** (193 письма 2014–2026, ~330 МБ вложений; Obsidian Sync принял, в т.ч. файлы > 5 МБ). Заметки попадают и в почасовой архив vault (`vault.git` → gitea).
|
||||||
|
|||||||
Reference in New Issue
Block a user