Для AI-агентов: markdown этой страницы — /docs-content/source-storage/registry.md индекс документации — /llms.txt

Реестр исходников и состояние портала

Где посмотреть все задепонированные снапшоты сразу — страница кабинета и её API-двойник GET /v1/me/sources. Плюс программная проверка того, включено ли сохранение исходников на портале.

Обзор хранилища и справочник эндпоинтов — Хранилище исходного кода.

Проверка состояния портала

GET /v1/me возвращает блок data.capabilities.apps.sourceStorage:

При включённом сохранении:

JSON
{
  "capabilities": {
    "apps": {
      "sourceStorage": {
        "enabled": true,
        "requiredBeforeDeploy": false,
        "automaticOnDeploy": true,
        "limits": {
          "maxBlobBytes": 524288000
        },
        "endpoint": "POST /v1/apps/:id/sources",
        "mcpToolName": "save_sources",
        "contentTypes": [
          "application/gzip",
          "application/x-tar",
          "application/zip",
          "application/octet-stream"
        ],
        "docs": "https://vibecode.bitrix24.tech/docs-content/source-storage.md"
      }
    }
  }
}

Вместе с лимитами блок отдаёт и указатели на способ сохранения: endpoint, mcpToolName, допустимые contentTypes и адрес этой документации.

Поле freshnessWindowMinutes приходит в этом блоке, только пока публикация проверяет возраст снапшота. Его отсутствие читается как «возраст не проверяется», поэтому по составу блока видно, какое правило действует для вашего портала.

При отключённом сохранении:

JSON
{
  "capabilities": {
    "apps": {
      "sourceStorage": {
        "enabled": false,
        "requiredBeforeDeploy": false,
        "automaticOnDeploy": false,
        "disabledBy": "platform",
        "readOperations": "available",
        "reactivation": {
          "scope": "platform",
          "permission": "platform admin"
        }
      }
    }
  }
}

Два набора полей взаимоисключающие: при enabled: false указателей на сохранение в блоке нет. Поле disabledBy"platform" (функция не включена на уровне платформы) или "portal" (владелец портала отключил). Поле readOperations: "available" означает, что список версий и скачивание остаются доступными даже при отключённом сохранении. Блок reactivation указывает, на каком уровне (платформа или портал) включается функция и какие права для этого нужны.

Отключение для портала

Владелец портала может отключить сохранение исходников через раздел администрирования (PATCH /api/admin/source-storage с телом { "sourceStorageEnabled": false }, требует сессии администратора). При отключении:

  • POST /v1/apps/:id/sources возвращает 200 { skipped: true, reason: "DISABLED_FOR_PORTAL" }.
  • POST /v1/apps/:id/publish не проверяет наличие снапшота.
  • GET /v1/apps/:id/sources продолжает возвращать ранее сохранённые версии.
  • GET /v1/apps/:id/sources/:versionId/download остаётся доступным.

История сохранений переживает повторное включение — ранее созданные версии остаются доступными.

Реестр исходников

Страница «Исходники приложений» доступна в личном кабинете через левое меню (иконка пакета). Она показывает сводный список всех задепонированных снапшотов — чтобы передать код новому разработчику или возобновить AI-сессию.

Кто что видит:

  • Участник портала (MEMBER) — только свои снапшоты (те, что он загружал).
  • Администратор портала (ADMIN) — все снапшоты портала, включая снапшоты других участников. Может скачать любой снапшот.

Как скачать:

  1. Откройте «Исходники приложений» в меню.
  2. Найдите нужную строку (сервер или приложение).
  3. В меню строки выберите «Скачать последнюю версию» — браузер загрузит архив.

У строк-приложений в меню строки есть пункт «История версий» — он открывает страницу истории версий приложения в разделе «Хранилище».

Примечание: страница работает независимо от того, включено ли депонирование на уровне платформы — исторические снапшоты доступны даже если новые сохранения временно отключены.

Сводный реестр исходников — `GET /v1/me/sources`

API-двойник страницы кабинета «Исходники приложений». Возвращает список владельцев снапшотов исходников (серверов и legacy-приложений) по всему, чем владеет вызывающий ключ. Ключ администратора аккаунта (ADMIN) видит весь аккаунт.

Требует портального ключа API. Менеджмент-ключ или ключ без привязки к порталу → 403 PORTAL_KEY_REQUIRED.

Параметры запроса

Параметр Тип По умолчанию Описание
page number 1 Номер страницы.
limit number 25 Размер страницы, максимум 100.
search string Фильтр по названию / имени сервера / имени владельца.

Ответ

HTTP 200:

JSON
{
  "success": true,
  "data": [
    {
      "kind": "server",
      "ownerKey": "8de64f8d-...",
      "title": "Prod",
      "server": {
        "id": "8de64f8d-...",
        "name": "srv-prod",
        "displayName": "Prod",
        "mode": "blackhole",
        "status": "sleeping",
        "blackholeStatus": "DISCONNECTED",
        "deleted": false
      },
      "app": null,
      "user": { "id": "8f1a2b3c-...", "name": "Alex" },
      "latestVersionId": "v4",
      "latestSavedAt": "2026-05-21T10:15:30.000Z",
      "versionsCount": 4,
      "totalSizeBytes": 552960,
      "reachableViaApi": true,
      "listEndpoint": "/v1/infra/servers/8de64f8d-.../sources",
      "latestDownloadEndpoint": "/v1/infra/servers/8de64f8d-.../sources/v4/download"
    }
  ],
  "total": 1,
  "page": 1,
  "limit": 25
}

Поля строки

Поле Тип Описание
kind string server или legacy-app.
ownerKey string Идентификатор владельца строки: id сервера (kind: server) или id приложения (kind: legacy-app).
title string Отображаемое название (сервер или приложение).
server object | null Для kind: server: id, name, displayName, mode, status (в нижнем регистре), blackholeStatus, deleted. Иначе null.
app object | null Для kind: legacy-app: id, title. Иначе null.
user object | null Владелец: id, name. Может быть null.
latestVersionId string Идентификатор самой свежей версии (vN).
latestSavedAt string Время сохранения последней версии (ISO 8601).
versionsCount number Количество версий.
totalSizeBytes number Суммарный размер архивов в байтах.
reachableViaApi boolean Доступна ли запись через V1-эндпоинты (см. ниже).
listEndpoint string | null Готовый путь для получения списка версий владельца, либо null.
latestDownloadEndpoint string | null Готовый путь для скачивания последней версии, либо null.
  • reachableViaApi. Значение false — у сервера, чей управляющий ключ был удалён, это осиротевшая запись, и у мягко удалённого legacy-приложения. У таких строк listEndpoint и latestDownloadEndpoint равны null. Строка всё равно попадает в список для видимости, но детальный переход по V1 на этого владельца вернёт 404. Мягко удалённый сервер остаётся true: чтение и очистка его версий работают — Версии удалённого сервера.
  • Статус сервера. Для сервера Black Hole значение status: "sleeping" — это нормальное «припаркованное» состояние (сервер просыпается по требованию), а не сбой. Сопоставляйте его с blackholeStatus, чтобы отличить «припаркован, проснётся по требованию» от реальной проблемы. Значение — статус из БД, поддерживаемый флот-поллером (согласуется не мгновенно, ~15 с), а не результат живой сверки с провайдером.
  • Отличие от GET /v1/infra/servers. Тот список ограничен строго серверами вызывающего ключа, поэтому сервер, привязанный к другому ключу того же владельца, там отсутствует, но присутствует в этом реестре.

Коды ошибок

HTTP Код Когда возвращается
403 PORTAL_KEY_REQUIRED Ключ не привязан к порталу — менеджмент-ключ реестр не читает.

Полный справочник кодов — Коды ошибок.

Смотрите также