Работа с Agent Registry
Просмотр каталога, фильтрация, поиск и безопасный переход к вызову агента.
Назначение каталога
Agent Registry отображает список агентов, автоматически обнаруженных в Kubernetes.
Каталог возвращает только активные записи. Пользователь видит те из них,
для которых авторизационное ядро подтвердило право просмотра agent#view.
Создать, изменить, удалить, развернуть или вызвать агента через API каталога нельзя: состояние формируется из наблюдения, а вызов выполняется через Platform Agent Gateway.
Вход
Для входа откройте в браузере URL Swagger UI, нажмите Authorize и выберите
oauth2Password и введите логин и пароль вашей учетной записи.
Базовый путь интерфейса — /api/v2. Для защищенных операций
требуется удостоверение OIDC/JWT (Bearer); каждый ответ содержит
traceId для диагностики.
Просмотр списка
Выполните GET /api/v2/agents?limit=20. Ответ содержит только активные
записи (lifecycleStatus = active), видимые через agent#view.
Каждая запись содержит безопасные сведения об агенте, выбранной версии, протоколе,
состоянии и владельце.
Доступные фильтры:
| Параметр | Значение |
|---|---|
protocol | Массив: a2a, mcp |
implementationType | Массив: sdk, low-code. Только low-code — объявленный R2-адаптер публикации |
ownerType | principal или service; должен передаваться вместе с ownerIssuer и ownerSubject |
ownerIssuer | URI издателя неизменяемой идентичности; вместе с ownerType и ownerSubject |
ownerSubject | Неизменяемый subject у издателя; вместе с ownerType и ownerIssuer |
cursor | Непрозрачный курсор для постраничной навигации |
limit | 1–100, по умолчанию 20 |
Протокол и тип реализации применяются независимо и совместно. Например, служба
MCP может иметь тип low-code, а агент A2A — тип sdk.
Значение mcp — это протокол, а не тип реализации.
Курсор:
- зашифрован и защищен от изменения;
- связан с вашим удостоверением и полным набором фильтров;
- не содержит количество скрытых объектов;
- становится недействительным после ротации ключа;
- при ошибке возвращает
cursor_invalidи не открывает страницу без фильтров.
Не переносите курсор в запрос другого пользователя и не изменяйте фильтры между страницами. Не передавайте идентификатор пользователя и готовое решение о правах в параметрах запроса.
Пример:
GET /api/v2/agents?protocol=a2a&implementationType=low-code&ownerType=principal&ownerIssuer=https%3A%2F%2Fidp.platform&ownerSubject=user-123&limit=20 Authorization: Bearer <platform-token>
Просмотр одной записи
GET /api/v2/agents/{agentId} принимает непрозрачный UUID.
Запросы к отсутствующему и недоступному агенту возвращают одинаковый ответ 404.
Это защищает сам факт существования агента.
Ответ может содержать:
- безопасное имя и описание;
- идентификаторы агента и выбранной версии;
- владельца, рабочую область и состояние;
- протокол и тип реализации;
- проверенные навыки или безопасные метаданные MCP;
- канонический интерфейс вызова, если пользователь имеет право.
Ответ не содержит внутренний адрес Service или Pod, адрес получения карточки, полную исходную карточку, закрытые диагностические данные и учетные данные.
Поле интерфейса вызова возвращается только когда:
- выбранная версия агента готова;
- отношения доступа согласованы;
- публичный маршрут принят и связан с текущей службой Kubernetes;
- пользователь имеет право на вызов.
Поиск
POST /api/v2/agents/search принимает текст запроса, рабочую
область, необязательный профиль, фильтры протокола и типа реализации,
максимальное число результатов topK и необязательный более строгий
порог minScore. Поля userId, роли и готовое решение о
доступе запрещены — доступ к каждому кандидату проверяется платформой.
Поиск объединяет смысловое и лексическое совпадение. Смысловая и лексическая
оценки не обходят проверку прав: каждый кандидат фильтруется через
agent#view, а в ответ попадают только разрешенные совпадения выше
порога. Если подходящих и разрешенных агентов нет, корректный ответ содержит
200 и пустой массив matches.
Краткий пример формы запроса:
{
"query": "агент для подготовки краткого изложения",
"workspaceId": "workspace-1",
"protocols": ["a2a"],
"implementationTypes": ["low-code"],
"topK": 10
}Текст запроса не сохраняется в журналах и телеметрии.
Переход к вызову
Если в записи есть интерфейс, его форма содержит:
| Поле | Значение |
|---|---|
url | Канонический HTTPS-адрес Platform Agent Gateway для конкретного агента и версии |
protocolBinding | Принятая привязка A2A HTTP+JSON или MCP Streamable HTTP |
exposure | public_gateway |
authorization | platform_oidc_spicedb |
Используйте только URL из этой формы, без подмены агента, версии или
внутренней службы через заголовок, параметр или тело. Вызов проходит через
Platform Agent Gateway, который повторно проверяет токен и право на вызов
агента agent#invoke, затем заменяет исходный пользовательский
токен на короткоживущее удостоверение, связанное с конкретным агентом.
Известный URL без права не позволяет обойти шлюз.
Состояния агента
В каталоге вы увидите только записи в состоянии active.
Полное значение всех состояний:
| Состояние | Значение для пользователя |
|---|---|
active | Версия прошла проверку и может быть показана при наличии прав |
degraded | Агент существует, но нет пригодного эндпоинта; запись скрыта из каталога, вызов недоступен |
removed | Агент подтвержденно удален; запись отсутствует в обычной выдаче |
rejected | Карточка или описание агента не прошли проверку; запись не активируется |
Информация: В процессе обнаружения агента допустима кратковременная потеря его готовности.
Ошибки
Ответ об ошибке содержит код, сообщение, traceId и детали.
Коды ошибок:
| HTTP | Класс ошибки |
|---|---|
| 400 или 422 | Неверная форма, фильтр, курсор или детерминированная проверка |
| 401 | Удостоверение отсутствует, недействительно или просрочено |
| 403 | Подтвержденному субъекту запрещена команда или диагностика |
| 404 | Агент отсутствует либо намеренно скрыт |
| 409 | Конфликт неизменяемой идентичности или жизненного цикла |
| 429 | Превышено принятое ограничение частоты или параллельности |
| 503 | Недоступна авторизация, векторизация или поиск |
| 504 | Внешняя зависимость не ответила за установленное время |
| 500 | Непредвиденная ошибка с очищенным сообщением |
Пример формы ошибки:
{
"error": {
"code": "authorization_unavailable",
"message": "Authorization service is temporarily unavailable",
"traceId": "4bf92f3577b34da6a3ce929d0e0e4736",
"details": []
}
}Что делать:
400/422— исправьте запрос; не повторяйте без изменения параметров;401— повторно войдите;403— обратитесь к владельцу доступа;404— проверьте UUID и рабочую область; система не раскрывает, отсутствует агент или скрыт;429— повторите с задержкой, соблюдая заголовок ограничения, если он возвращен;503— просмотр списка и одной записи может работать при отказе поиска; повторите поиск после восстановления;504— повторите операцию чтения.
Ошибка не раскрывает стек, токен, внутренний URL, текст запроса или карточки и существование запрещенного кандидата.
При обращении в поддержку передавайте traceId, время, HTTP-код и
идентификатор агента.
Важно: Не передавайте токен, текст закрытого запроса, внутренний адрес и полное содержимое карточки.