Раздел: 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 GitLab | backend/internal/gitlab/ |
| REST-обработчики | backend/internal/handlers/gitlab/ |
| Подстановка креды и политика git | backend/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.