y83 code / инструмент

GitLab

Подключение к своему GitLab (gitlab.y83.ru) и публикация репозиториев прямо с телефона. Инструмент решает две задачи: git работает из приложения и из агента без ввода пароля, и при этом токен агенту не выдаётся — он остаётся на бэкенде.

раздел реестра
AI и агенты
код
980 строк в 3 файлах
документ
37-gitlab.md
Раздел: AI & Agents
Идентификатор: gitlab · Экран: ui/gitlab/GitLabScreen.kt (686) + GitLabHelp.kt (66) + GitLabViewModel.kt (228)
Снимок: 2026-10-14

Примечание: это единственный инструмент реестра, у которого не было своего
hub-дока. Страница собрана по коду и docs/tech/gitlab.md, поэтому в ней тот
же порядок разделов, что у остальных инструментов.

Что это

GitLab здесь источник правды для репозиториев: история уезжает с телефона, работа агента видна в интерфейсе, ветки и merge request — обычным git-флоу.

Экран и навигация

Маршрут — y83://gitlab → Screen.GitLab → GitLabScreen в MainRouter. Экран состоит из трёх частей:

  • терминальная шапка y83@gitlab с метой: адрес, «токен есть/нет», «проектов N»;
  • карточка подключения: адрес GitLab, токен, группа по умолчанию, проверка связи;
  • карточка публикации: папка проекта, имя, группа, видимость, replaceRemote;
  • список проектов, доступных токену, с поиском.

Кнопка «i» в шапке и в карточке подключения открывает инструкцию GitLabTokenHelpWindow: шаги под GitLab 17.10+/18 («аватар → Edit profile → Access → Personal access tokens → Generate token → Legacy token»), scope api, две приглушённые подсказки (нужен именно legacy-токен; путь для GitLab 16 и старше), заметка о том, что токен остаётся на бэкенде, и кнопка «Открыть страницу токенов».

Возможности (подробно)

Подключение

  • Конфиг: адрес GitLab, токен, группа по умолчанию (y83), видимость новых проектов.
  • Проверка токена запросом GET /api/v4/user — экран показывает, под кем токен, и запоминает имя пользователя.
  • В ответах токен не приходит: вместо него поле hasToken.

Публикация

  • Проект создаётся в GitLab, если его ещё нет, и переиспользуется, если он пустой.
  • origin ставится автоматически — URL руками не вводится.
  • Если origin уже ведёт в наш GitLab, репозиторий «усыновляется»: группа и имя берутся из URL, origin не меняется.
  • Если origin ведёт в чужой репозиторий, публикация отказывает с кодом origin_conflict, пока человек не подтвердит замену.
  • Если проект существует и непустой, приходит отказ project_exists с отчётом о нём; повтор с подтверждением пушит в него.
  • После push выставляется upstream: git push -u origin <branch>.
  • Репозитории с чужим origin (например, сторонние исходники) не трогаются: push в них не выполняется.

Работа из агента

  • Четыре инструмента MCP: gitlab_status, gitlab_projects, gitlab_publish, gitlab_git.
  • gitlab_git выполняет git с подстановкой креды — агент работает с репозиторием, не видя токена.
  • Из агента запрещены force-push, --mirror/--all, удаление веток, push в защищённые ветки, управление remotes и запись в глобальный git config.

Где в коде

СлойФайл
Конфиг и API GitLabbackend/internal/gitlab/
REST-обработчикиbackend/internal/handlers/gitlab/
Подстановка креды и политика gitbackend/internal/handlers/git/handler.go
Инструменты агентаbackend/internal/handlers/mcp/gitlab.go
Экранapp/src/main/java/com/y83/ws/ui/gitlab/

Данные и API

Секрет живёт в ~/.y83-ws/gitlab.json (права 0600) и доступен только бэкенду.

МетодПутьЧто делает
GET/api/v1/gitlab/configконфиг без токена (hasToken)
PUT/api/v1/gitlab/configсохранить адрес, токен, группу, видимость (пустой токен — не менять)
POST/api/v1/gitlab/testпроверка токена, запоминает имя пользователя
GET/api/v1/gitlab/projects?search=проекты, доступные токену
POST/api/v1/gitlab/publishпроект, origin и первый push

Ошибки приходят с HTTP 200 и полем ok: false — клиент проверяет именно ok.

Агент

  • gitlab_status — состояние интеграции: адрес, группа, есть ли токен, под кем проверен. Токен наружу не отдаётся.
  • gitlab_projects — список проектов токена с поиском.
  • gitlab_publish — публикация папки: проект, origin, первый push.
  • gitlab_git — git с подстановкой креды; политика ограничивает опасные операции.

Подводные камни

  • Креда скоупится на URL настроенного GitLab: чужой remote токена не получит. Если инстанс отвечает http_url_to_repo с другим хостом (внутренний external_url), push упадёт на could not read Username — «наш ли это origin» проверяется не только по хосту, но и запросом проекта по пути.
  • На сервере токен приходит по stdin в временный каталог 0600 и удаляется в той же ssh-команде: в ps и в логах секрета нет.
  • Если токена нет, git работает как раньше (GIT_TERMINAL_PROMPT=0) — интеграция ничего не ломает.
  • Нужен Personal Access Token со scope api: без него проект не создать.

Как обновлять

Источник правды — docs/tech/gitlab.md в репе проекта. При изменениях в backend/internal/handlers/gitlab или ui/gitlab сверять таблицу маршрутов и список инструментов агента; размеры кода в шапке считает tools/metrics.sh.

Источник: docs/project/hub/37-gitlab.md · AI и агенты · 980 строк в 3 файлах. Страница собирается из документации проекта при сборке сайта.