feat: MCP profile tools; ProfileUpdater/ProfilePresenter shared with /me; docs and Caddy snippet for /mcp
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BCrwHHnGCB5XH968Nxokqw
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
# Hado MCP — агент как хозяин инбокса
|
||||
|
||||
Дата: 2026-09-05. Статус: согласован в брейншторме, ждёт ревью.
|
||||
Дата: 2026-09-05. Статус: реализована (laravel/mcp 0.9.4).
|
||||
Дополняет `2026-09-03-hado-core-design.md`: добавляет четвёртый вход в §11 и
|
||||
новый путь в §12. Ядро, модель данных и контракт клиентов не меняются.
|
||||
|
||||
@@ -45,22 +45,34 @@ Node-сервис по образцу `enso_mcp`: второй контейне
|
||||
|
||||
```
|
||||
app/Mcp/HadoServer.php — сервер: имя, instructions, список тулов
|
||||
app/Mcp/Tools/AgentTool.php — база: пользователь токена, своё событие по id
|
||||
app/Mcp/Tools/ListEvents.php
|
||||
app/Mcp/Tools/GetEvent.php
|
||||
app/Mcp/Tools/CreateEvent.php
|
||||
app/Mcp/Tools/CreateEvent.php — схема и форма полей события, общие с UpdateEvent
|
||||
app/Mcp/Tools/UpdateEvent.php
|
||||
app/Mcp/Tools/DeleteEvent.php
|
||||
app/Mcp/Tools/MarkDone.php
|
||||
app/Mcp/Tools/MarkAck.php
|
||||
app/Mcp/Tools/GetProfile.php
|
||||
app/Mcp/Tools/UpdateProfile.php
|
||||
app/Mcp/EventPresenter.php — представление события для агента (§6)
|
||||
app/Http/Middleware/AuthenticateAgent.php
|
||||
app/Models/AgentToken.php
|
||||
app/Console/Commands/AgentToken.php
|
||||
app/Console/Commands/AgentTokenCommand.php
|
||||
routes/ai.php — Mcp::web('/mcp', HadoServer::class)
|
||||
```
|
||||
|
||||
Общее с инбоксом и `/api` живёт вне `app/Mcp/` — это те же классы, что используют
|
||||
контроллеры, не копии:
|
||||
|
||||
```
|
||||
app/Presenters/EventPresenter.php — forClient (/api, webhook), forUser (+source, editable), closedAs, dueAt
|
||||
app/Presenters/ProfilePresenter.php
|
||||
app/Ingest/ManualEvents.php — create / update / withdraw событий источника manual
|
||||
app/Ingest/EventRules.php — правила одного события (§5): и для пачки /api, и для manual
|
||||
app/Users/ProfileUpdater.php — пояс и тихие часы: PATCH /me и update_profile
|
||||
app/Models/User.php — ownEvent(id), liveEvents(states), archive()
|
||||
```
|
||||
|
||||
Риск: пакет должен встать на Laravel 13 (`laravel/framework ^13.17`). Проверяется
|
||||
первым шагом реализации; если не встаёт — стоп и возврат к обсуждению, а не
|
||||
самодельный транспорт.
|
||||
@@ -139,7 +151,7 @@ Middleware `AuthenticateAgent` (алиас `auth.agent`): читает `bearerTo
|
||||
| `subtitle` | string ≤200, optional | |
|
||||
| `fire_at` | date, optional | день старта подготовки; по умолчанию — за 30 дней до дня срока, как у кнопки инбокса |
|
||||
| `after_due` | `keep`/`expire`, default `keep` | как у кнопки инбокса |
|
||||
| `done_label` | string ≤40, optional | подпись кнопки, по умолчанию «Сделано» |
|
||||
| `done_label` | string ≤64, optional | подпись кнопки, по умолчанию «Сделано»; лимит тот же, что у клиентов |
|
||||
| `deep_link` | string, optional | куда вести из напоминания |
|
||||
|
||||
Реализация: `Source::firstOrCreate(['name' => 'manual'])` → `EventUpserter::upsert`
|
||||
|
||||
Reference in New Issue
Block a user