|
Актор действия: сессия — владелец, токен — агент (0.85)
- app/actor.py: Actor (kind, name, via, token_id, owner_name) — кто и через что сделал. Bearer-токен по умолчанию даёт агентский актор: иначе действие ИИ-агента в базе неотличимо от действия браузерного расширения, а оба ходят одним токеном владельца. declares_user() читает заголовок X-Actor: user; declaring_user() превращает агентский актор во владельческий, сохраняя канал — в журнале читается «я, но действие пришло от агента». Нет сведений о токене (тесты подменяют авторизацию) — актор владельца: агентских полномочий ни у кого нет. - dependencies.user_from_bearer выбирает строку токена целиком (id, label, имя владельца — OUTER JOIN, строки users может не быть) и кладёт актора в request.state. require_user для сессии SSO кладёт актора-владельца с именем из профиля. Новые actor_of() и ActorDep рядом с UserIdDep: зависимость объявлена после require_user, поэтому 401 приходит раньше, чем кто-либо спросит «кто действует». - main.McpAuthMiddleware: тот же выбор строки токена для /mcp, актор всегда агентский — объявить действие владельца тул может только своим аргументом is_user, а не заголовком запроса. ТЗ 0.85. |
|---|
|
|
| backend/app/actor.py 0 → 100644 |
|---|
| backend/app/dependencies.py |
|---|
| backend/app/main.py |
|---|