| name | sdd:repo |
| workflow_step | 3 |
| description | Управление репами в инвентаре: добавить, обновить ветку или удалить субмодуль. Вызывать когда пользователь просит добавить репу, изменить ветку, или убрать субмодуль из проекта. Guided-флоу с двухшаговым подтверждением для remove.
|
sdd:repo — guided управление репозиторием
Вход
Один из трёх action-параметров:
ACTION=add URL=<url> DOMAIN=<domain> BRANCH=<branch> — добавить репу
ACTION=update PATH=<path> BRANCH=<branch> — изменить ветку
ACTION=remove PATH=<path> — удалить субмодуль
Поведение по action
ACTION=add
- Проверить, что URL начинается с
git@ (git-протокол)
- Прочитать существующие домены из
manifest.yaml (поле domains: в каждой записи) и показать их пользователю как подсказку
- Если указанный DOMAIN не встречается ни в одной записи
manifest.yaml — вывести предупреждение и запросить подтверждение перед продолжением
- Вывести preview: какая запись появится в
manifest.yaml и .gitmodules
- Спросить подтверждение
- Если ок — вызвать
make repo-add URL=<url> DOMAIN=<domain> BRANCH=<branch>
- После —
make check-manifest для верификации
Предупреждение перед вызовом: если URL уже есть в manifest.yaml — показать все существующие пути и спросить, нужен ли cross-domain алиас.
ACTION=update
- Найти
path в manifest.yaml (grep или read)
- Показать текущую ветку и новую
- Подтвердить
- Вызвать
make repo-update PATH=<path> BRANCH=<branch>
make check-manifest после
ACTION=remove
Двухшаговое подтверждение (защита от случайного удаления):
- Показать запись из
manifest.yaml для указанного PATH
- Если репа входит в несколько доменов — показать все пути с одним URL
- Запросить подтверждение: пользователь должен ввести полный PATH (не "да"/"y")
- Только если введённый PATH совпадает точно — вызвать
make repo-remove PATH=<path>
make check-manifest после
Пример запроса подтверждения:
Вы собираетесь удалить субмодуль 'domain-a/beta' из manifest.yaml и .gitmodules.
Эта операция необратима. Введите полный путь ('domain-a/beta') для подтверждения:
Fallback при ошибках
При каждом случае ошибки ниже — перед выводом сообщения пользователю записать error-лог через Bash tool:
TS=$(date +%Y%m%dT%H%M%S)
mkdir -p ".logs/repo"
cat > ".logs/repo/repo-${TS}-error.md" << 'EOF'
---
skill: sdd:repo
timestamp: <TS>
---
- **step:** <action и шаг, где произошла ошибка>
**what:** <текст ошибки>
**why:** <ожидалось / получено>
**reproduce:** <точная команда: make repo-add/update/remove с аргументами>
EOF
- path not found: показать доступные пути из
manifest.yaml (первые 10)
- manifest.yaml не существует: предупредить, предложить сначала добавить хотя бы одну репу
- URL без git@: предупредить и предложить исправить
- make завершился с ошибкой: показать вывод и предложить
make check-manifest для диагностики
Вывод
После успешного выполнения:
OK: <action> завершён для <path>
Запустите 'make validate' для полной проверки.
Post-completion hook
После успешного завершения любого action (add, update, remove) автоматически запусти скилл sdd:audit — без дополнительного запроса пользователя. При ошибке (make завершился с ненулевым кодом, merge-конфликт, недоступность сети, detached HEAD) sdd:audit NOT вызывается.