korolevpavel/xbsl-ai-skills/xbsl-deploy
Claude Code and agent skill by korolevpavel/xbsl-ai-skills
- community
Checking that the SKILL.md file is still in the repository.
Используй этот скилл для любых операций с приложениями на платформе 1С:Предприятие.Элемент (1cmycloud.com): создать приложение, задеплоить ветку из внешнего git-репозитория (GitHub, GitLab и др.), обновить, проверить статус, запустить, остановить, удалить, принять изменения (merge). Вызывай скилл всякий раз, когда пользователь упоминает деплой, запуск, остановку или управление приложением на Элементе — даже если он не говорит явно "задеплой", а просто спрашивает "как дела с приложением" или "см…
Install
npx vskill@latest install korolevpavel/xbsl-ai-skills/xbsl-deploySKILL.md
Во всех командах ниже {python} означает python в Windows и python3 в macOS/Linux/WSL. Выбирай команду сразу по текущей ОС, не запускай оба варианта.
Деплой на 1С:Предприятие.Элемент
Справочник по API:references/endpoints.md— читай его если нужны детали по полям запросов/ответов.
Шаг 0: Загрузи переменные окружения
Перед любым обращением к API загрузи env vars. Выполни команду:
Если .env не найден — продолжай: нужные переменные могут быть уже заданы в системе.
Обязательные переменные: ELEMENT_BASE_URL, ELEMENT_CLIENT_ID, ELEMENT_CLIENT_SECRET. Если хотя бы одна отсутствует — сообщи пользователю и остановись.
Два вида веток: внешний git vs внутренний git платформы
В 1С:Элемент существуют два независимых механизма веток — не путай их:
| Внешний git (GitHub/GitLab) | Внутренний git платформы | ||
|---|---|---|---|
| Что это | Твой обычный git-репозиторий | Встроенная система групповой разработки платформы | |
| Как обновить приложение | sync-branch / кнопка «Загрузить из ветки» в IDE | Сценарий B (update-branch + restart) | |
| API | /console/ui/module/call (внутренний) | GET/POST /console/api/v2/branches | |
| Когда работает | Всегда (если репо доступен платформе) | Только если проект включил режим групповой разработки | |
| Ошибка если не поддерживается | — | 503 "does not use export branches" | |
| Merge изменений | Через git (PR/MR) | Сценарий G (merge-branch) | |
| Типичный сценарий | Деплой из GitHub на продакшн | Командная разработка задач внутри платформы (issue/CRM-1) |
Если получаешь 503 на `list-branches` / `get-branch` — проект работает через внешний git. Используй Сценарий I (путь 2: --from-branch) вместо Сценария B.
Шаг 1: Определи намерение
| Фраза пользователя | Сценарий | |
|---|---|---|
| создать / новое / задеплой с нуля / развернуть | A: Создать + задеплоить | |
| обновить / задеплой / загрузить ветку / редеплой | B: Обновить существующее | |
| статус / как дела / что с приложением / проверь | C: Проверить статус | |
| запусти / старт / включи | D: Запустить | |
| останови / стоп / выключи | E: Остановить | |
| удали / снести / delete / убери | F: Удалить | |
| принять изменения / смёрджи / merge | G: Merge ветки | |
| создать проект / загрузить сборку / новый проект из файла | H: Создать проект из сборки | |
| задеплой из исходников / собери и задеплой / deploy from source | I: Собрать .xasm и задеплоить | |
| sync-branch / обнови ветку в облаке / загрузить из ветки / pull из git | J: sync-branch с фолбэком на сборку | |
| версия технологии / какая платформа / обнови платформу / technology version | K: Версия технологии | |
| подключить / обновить / включить / выключить расширение | L: Управление расширением |
Шаг 2: Получи токен
Если ошибка — сообщи пользователю что нужно задать env vars: ELEMENT_BASE_URL, ELEMENT_CLIENT_ID, ELEMENT_CLIENT_SECRET.
Сценарий A: Создать новое приложение и задеплоить
По умолчанию: новое приложение привязывается к существующему проекту. Загрузка файла сборки для создания нового проекта — только если пользователь явно попросил («создать проект из сборки», «загрузить сборку» и т.п.) — тогда используй Сценарий H.
A0. Проверь вид проекта (если известна папка проекта)
Если пользователь указал локальную папку проекта — прочитай Проект.yaml и проверь ВидПроекта:
Если найдено ВидПроекта: Библиотека — остановись и сообщи пользователю:
Платформа не может развернуть библиотеку как самостоятельное приложение. Библиотека предназначена для подключения черезИмпортв другой проект, а не для деплоя.
Если найдено ВидПроекта: Расширение — перейди к сценарию L. Расширение подключается к существующему приложению и не создаёт отдельное приложение.
A1. Определи проект
Если ELEMENT_PROJECT_ID не задан — выведи список проектов и попроси пользователя выбрать:
Показывай только не удалённые ("deleted": false) проекты типа Application.
Сохрани выбранный project-id для следующих шагов.
A2. Определи space-id
Если ELEMENT_SPACE_ID не задан:
- Если пространство одно — используй его
idкакspace-id. Предложи пользователю сохранить в.env:ELEMENT_SPACE_ID=<id>. - Если пространств несколько — покажи список и спроси пользователя выбрать.
- Если пространств нет — сообщи пользователю, создать пространство нужно через веб-консоль.
A3. Создай приложение
Спроси имя приложения если не указано.
Если проект создан загрузкой сборки в сценарии H, используй id сборки из ответа upload-build как assembly-id. У нового проекта может ещё не быть сборки по умолчанию, поэтому передавай точную версию:
Для уже существующего проекта, когда конкретная сборка не выбрана, сохрани прежний вариант:
Сохрани id из ответа как app-id.
A4. Запусти приложение
A5. Жди Running
Опрашивай каждые 10 сек, до 5 мин:
Жди пока status == Running. Если status == Error — сообщи error пользователю и остановись. Если 5 мин прошло, а статус не Running — сообщи пользователю текущий статус и предложи проверить логи в консоли Элемента. После создания из сборки дополнительно проверь, что source.project-version-id совпадает с assembly-id из H4. Старый Running для другой сборки не доказывает успех новой публикации.
A6. Верни ссылку
Из последнего ответа get-app возьми поле uri и отправь пользователю.
Сценарий B: Обновить приложение из ветки
B1. Найди приложение
Используй ELEMENT_APP_ID или спроси имя и найди:
Сохрани id как app-id.
B2. Определи project-id
Используй ELEMENT_PROJECT_ID. Если не задан — извлеки из ответа B1: поле project.id в объекте приложения. Если поле project отсутствует или пустое:
Спроси пользователя выбрать проект. Сохрани как project-id.
B3. Создай дамп (страховка перед изменениями)
Дамп нужен как точка отката на случай проблем после деплоя.
Сохрани id из ответа как dump-id. Проверь статус сразу (без паузы), затем опрашивай каждые 3 сек (до 60 сек):
Жди пока status станет Done или Completed. Если дамп завершился ошибкой или не готов за 60 сек — остановись и сообщи пользователю. Не продолжай.
B4. Найди ветку
B5. Привяжи ветку к приложению (если нужно)
Если branch.application.id != app-id:
B6. Перезапусти (подхвати изменения из репозитория)
Сначала останови (если приложение не Stopped):
Жди Stopped (опрос каждые 10 сек, до 3 мин). Затем запусти:
B7. Жди Running → верни URL (как A5-A6)
Сценарий C: Статус приложения
Выведи пользователю:
status(Running / Stopped / Error / ...)uri— ссылка на приложениеerror— если естьcurrent-task— текущая задача если естьtechnology-version
Сценарий D: Запустить приложение
Жди Running (опрос каждые 10 сек, до 5 мин) → верни статус и ссылку. Если таймаут — сообщи текущий статус и предложи проверить логи в консоли Элемента.
Сценарий E: Остановить приложение
Жди Stopped (опрос каждые 10 сек, до 3 мин) → сообщи что остановлено. Если таймаут — сообщи текущий статус.
Сценарий F: Удалить приложение
Обязательно запроси подтверждение у пользователя перед любым удалением. Сообщи имя удаляемого объекта и что действие необратимо. Продолжай только после явного подтверждения («да», «удали», «confirm» и т.п.). Если пользователь не подтвердил — остановись.
Если приложение не Stopped:
Жди Stopped (опрос каждые 10 сек, до 3 мин). Затем:
Если ветка создавалась скиллом — предложи удалить и её. Удаляй ветку только после отдельного подтверждения:
Сценарий G: Принять изменения (merge ветки)
Если branch-id не известен — найди ветку. Для этого нужен project-id (из ELEMENT_PROJECT_ID или спроси пользователя через list-projects):
Затем выполни merge:
Сообщи результат.
Сценарий H: Создать проект из файла сборки
Проект на Элементе создаётся загрузкой бинарного файла сборки (.zip или артефакт компилятора). Без файла создать проект через API нельзя.
H1. Уточни параметры
Спроси пользователя:
- путь к файлу сборки (
--file) - имя ветки (
--branch-name), если нужно зафиксировать (иначе используетсяELEMENT_BRANCH) - хэш коммита и сообщение (
--commit-id,--commit-message) — опционально
H2. Определи space-id
Если ELEMENT_SPACE_ID не задан:
Если пространство одно — используй его автоматически.
H3. Выполни fail-closed проверку идентичности
При создании без project-id команда upload-build до бинарной загрузки автоматически:
- читает точную пару
Vendor + Nameиз корневогоAssembly.yaml; - получает список проектов через read-only
GET /projects; - для каждого активного проекта целевого пространства читает его сборки и
сравнивает project-developer + project-name как единую пару;
- использует строгое регистрозависимое сравнение без fuzzy-сопоставления,
нормализации или попытки вывести пару только из ProjectDto.name: в ProjectDto нет второй координаты identity — поставщика.
This is the start of the file. Read the full SKILL.md on GitHub.
Security
- Security scanPassed, 100 of 100Pattern checks on the skill's files.
- Model reviewNot runA model review is scheduled for the next rescan.
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingskills/xbsl-deploy/SKILL.md
Popularity
- 7-day trend score
- 0
Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/korolevpavel/xbsl-ai-skills/xbsl-deploy)