Files
hado/README.md

62 lines
3.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Hado — 波 · ядро умных уведомлений
Сервисы пушат события с датой, ядро само считает каскад напоминаний, окна и
доставляет туда, где ты сейчас доступен (веб, Telegram, webhook/Home Assistant).
Спека: `docs/superpowers/specs/2026-09-03-hado-core-design.md`.
## Dev
```bash
cp core/.env.example core/.env
docker compose up -d --build
docker compose exec app php artisan key:generate
docker compose exec app php artisan migrate
docker compose exec app php artisan hado:source:create docs # токен печатается один раз
```
- http://localhost:8080/ — инбокс. В проде пользователь приходит в заголовке `X-Remote-User`
от хаба; локально поставь `HADO_DEV_USER=nikita` в `core/.env` (работает только при
`APP_ENV=local`) и открывай в браузере без заголовков.
- `PUT /api/events` с `Authorization: Bearer <токен>` — см. спеку §5
Тесты локально: `cd core && php artisan test` (SQLite in-memory, нужны расширения
`pdo_sqlite`, `intl` в php.ini). Стиль: `vendor/bin/pint`.
## Telegram
1. Создай бота у @BotFather, положи токен и username в `core/.env`.
2. Придумай `TELEGRAM_WEBHOOK_SECRET`, зарегистрируй webhook:
`curl "https://api.telegram.org/bot<TOKEN>/setWebhook?url=https://hado.<домен>/hooks/telegram&secret_token=<SECRET>"`
3. В инбоксе «Подключить Telegram» → отправь боту `/start <код>`.
## MCP (агент)
Нейросеть работает с инбоксом через MCP-сервер внутри ядра (`laravel/mcp`, `POST /mcp`).
Спека: `docs/superpowers/specs/2026-09-05-hado-mcp-design.md`.
```bash
docker compose exec app php artisan hado:agent:token nikita # токен печатается один раз; повторный вызов перевыпускает, --revoke отзывает
claude mcp add --transport http hado https://hado.<домен>/mcp --header "Authorization: Bearer hado_agent_…"
```
Агент видит все события пользователя и закрывает любые (`mark_done`, `mark_ack`), а создаёт,
правит и снимает только свои — от источника `manual`, как кнопка «Добавить» в инбоксе
(`editable: true` в ответах).
## Home Assistant
В инбоксе добавь webhook-канал: `deliver_url` — HA webhook-триггер
(`https://ha/api/webhook/<id>`), `presence_url` — любой URL, отвечающий
`{"present": true|false}` (например, template-сенсор через REST API или Node-RED).
Автоматизация в HA получает JSON `{event, actions}` и может дёрнуть `actions.done`
POST-ом без авторизации.
## Прод
`core/Dockerfile` (serversideup/php), compose с `scheduler` и `worker`, Caddy —
`deploy/Caddyfile.snippet` в хаб sekai.
Compose в репозитории — dev-стек (`Dockerfile.dev`, `artisan serve`); прод-сборка
через `core/Dockerfile` (serversideup/php) описана, но не проверена — отдельный шаг
перед деплоем.