Актор действия: сессия — владелец, токен — агент (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.
root
committed
15 hours ago