Перейти к содержанию

Вход на сайте

Вход создаёт браузерную сессию в защищённой HttpOnly cookie. Провайдеры — Google и GitHub. Поля пароля и magic-link email нет.

Второй путь привязывает CLI-устройство к тому же аккаунту: CLI печатает код пользователя, вы одобряете его на сайте, CLI завершает.

URL и кто их видит

Проекция URL Кому видно
Human /{locale}/login всем
Machine /{locale}/ai/login всем
Одобрение устройства /{locale}/device-login после входа, чтобы одобрить
Устройства (та же форма) /{locale}/devices после входа

returnTo должен начинаться с /. Всё остальное игнорируется, и посадка по умолчанию — /{locale}/account. Защищённые страницы отправляют сюда с returnTo, равным пути, который они хотели.

reason=session_expired показывает Сессия истекла. Войдите снова. status=error|cancel|conflict соответствует Ошибка входа, Вход отменён или сообщению, что идентичность уже привязана.

/login может открыть кто угодно. /device-login без сессии показывает Сначала войдите, затем подтвердите код устройства. и кнопку назад ко входу, сохраняя user_code.

Для чего этот экран

Вход нужен, чтобы:

  • начать OAuth Google или GitHub для браузера;
  • восстановиться после истекшей cookie;
  • скопировать команду входа CLI для устройства.

/device-login или Устройства нужны, чтобы ввести код, который напечатал CLI. Онбординг — если аккаунт новый и всё ещё onboarding_pending.

Вход не:

  • сливает два существующих аккаунта (конфликт — отказ);
  • создаёт локальную идентичность устройства (device init только в CLI);
  • хранит токен провайдера в localStorage;
  • входит в харнесс (сессии Claude Code / Codex / Grok Build не связаны).

Что на экране

Элемент Подпись Эффект
Заголовок Вход —
Подзаголовок Войдите через поддерживаемого провайдера. Сессия хранится в защищённой HttpOnly cookie. —
Google Войти через Google /v1/auth/google/login?client=web&return_to=…
GitHub Войти через GitHub /v1/auth/github/login?client=web&return_to=…
Копия CLI Войти с устройства через CLI ai-stp task start --intent account --idempotency-key account-session-01 --json

В mock/e2e кнопки POST в mock-действие вместо API. ?debug=1 с моками добавляет дополнительные симуляторы ошибки/отмены. Этот гейт не часть production.

OAuth — same-origin /v1/auth/… (в разработке переписывается на API). Callback ставит session cookie. Step-up привязка второго провайдера к существующему аккаунту — /v1/auth/link/{provider} из Аккаунта, не эта страница.

Код устройства

Поля /device-login:

Поле Подпись
Код пользователя Код пользователя
Отправка Подтвердить устройство

Ошибки: unknown (введите заново), expired (продолжите ту же account-задачу), resolved (уже использован), csrf (перезагрузите), failed (повторите). Успех: Устройство подтверждено — вернитесь в CLI; опрос должен завершиться.

Human / Machine: machine-вход — заголовок, подзаголовок, повседневный account start как блок кода и ссылка на каталог.

Соответствующие команды CLI

Повседневный вход — intent account:

ai-stp task start --intent account --idempotency-key account-session-01 --json

Expert leaves (auth login / complete / logout) — если незавершённый device code уже есть:

ai-stp auth login --provider github --json
ai-stp auth login --provider google --json
ai-stp auth complete --json
ai-stp auth status --json
ai-stp auth logout --json
ai-stp link web --json

--provider обязателен и закрыт значениями github и google. auth login начинает поток и печатает код для одобрения. auth complete завершает, когда вы одобрили. auth status сообщает local-only, authenticated, expired или revoked. auth logout завершает облачную сессию и сохраняет локальные данные. link web печатает канонический URL сайта.

Команды ai-stp auth device нет. Сайт копирует account start, не выдуманный leaf. Следуйте CLI.

Идентичность устройства на машине отдельна:

ai-stp device init --json
ai-stp device show --json

device init не входит. auth login не создаёт устройство. Обычно нужны оба, в этом порядке, на новой установке.

Тупики

Что видно Что это значит Что делать
Ошибка входа ошибка OAuth повторите того же провайдера
Вход отменён вы прервали у провайдера повторите или выберите другого
Эта идентичность уже привязана к другому аккаунту слияние отказано используйте аккаунт, которому она уже принадлежит
Сессия истекла устаревшая cookie войти; returnTo сохранён
Нужен вход на device-login нет браузерной сессии войдите, код сохраняется
Неизвестный код опечатка введите заново; не добавляйте пробелы
Код истёк / уже использован продолжите ту же account-задачу ai-stp task start --intent account --idempotency-key account-session-01 --json
Отправили на онбординг новый аккаунт примите две редакции
Конфликт при привязке этот Google/GitHub на другом аккаунте сначала отвяжите там; слияния нет

Никогда не кладите код пользователя в тикет, скриншот публичного issue или паспорт.

Связанные страницы

Нужен ли Вход, чтобы читать каталог?

Нет. Анонимные чтения каталога работают в браузере и как ai-stp registry search --json. Вход нужен для лайков, жалоб, устройств, объектов, грантов и confirm публикации.