Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BCrwHHnGCB5XH968Nxokqw
62 lines
3.4 KiB
Markdown
62 lines
3.4 KiB
Markdown
# 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) описана, но не проверена — отдельный шаг
|
||
перед деплоем.
|