feat: catalog init и подсказка при нестянутых сабмодулях

- skills list / catalog list распознают неинициализированные сабмодули:
  жёлтое предупреждение, строка «не инициализирован»,
  в итоге — «Стянуть: harness catalog init»
- новый action catalog init: стягивает сабмодули на зафиксированных
  коммитах, идемпотентен
- catalog update теперь работает из свежего клона:
  сначала init, потом --remote
- skills install подсказывает про catalog init, если источники не стянуты
- русское склонение чисел (plural): 1 скилл / 2 скилла / 5 скиллов
- README: раздел «Свежий клон», правило 10 в «Правилах вывода списков»
This commit is contained in:
eka
2026-09-23 13:21:26 +05:00
parent 270e006a7a
commit c94fbce56f
2 changed files with 171 additions and 22 deletions
+32 -3
View File
@@ -25,7 +25,7 @@ dev/harness/
| `skills` | скиллы из каталога | `list`, `installed`, `install`, `remove` |
| `agents` | агенты (только OpenCode) | `list`, `install`, `remove` |
| `mcp` | MCP-серверы Hermes | `list`, `add`, `rm` |
| `catalog` | внешние репозитории каталога | `list`, `update` |
| `catalog` | внешние репозитории каталога | `list`, `init`, `update` |
| `hermes` | сам Hermes | `config`, `restart`, `update` |
| `opencode` | сам OpenCode | `install`, `restart` |
@@ -80,6 +80,7 @@ dev/harness/
7. **Итог** — `Итого: N <единица>, установлено M`, ниже dim-строками — куда ставится.
8. **Только русский.** Никаких `Available` / `Installed` вперемешку с русским.
9. **Порядок отметок** = порядок целей из `--target` / `--scope`.
10. **Числа — со склонением** через `plural()`: 1 скилл, 2 скилла, 5 скиллов.
Правила продублированы комментарием в `scripts/harness` над `render_listing()`.
@@ -196,10 +197,38 @@ dev/harness/
## `catalog` — внешние репозитории
```bash
./scripts/harness catalog list # источники, содержимое, sha, признак «сдвинут»
./scripts/harness catalog update # git submodule update --remote / git pull для клонов
./scripts/harness catalog list # источники, sha, признак «сдвинут»
./scripts/harness catalog init # стянуть submodule'ы на зафиксированных коммитах
./scripts/harness catalog update # подтянуть свежие коммиты upstream (потом закоммитить)
```
### Свежий клон
Submodule'ы **не** тянутся при обычном `git clone` — каталоги `catalog/*/` окажутся
пустыми. `skills list` это распознаёт и подсказывает, что делать:
```
СКИЛЛЫ — доступно к установке
Каталог: /path/to/catalog
✓ — установлено, · — нет
⚠ submodule'ы не стянуты: jakubkrehel-skills
├─ jakubkrehel-skills не инициализирован
Итого: 0 скиллов, установлено 0
Стянуть: harness catalog init
```
Дальше — `harness catalog init`. Либо сразу клонировать с сабмодулями:
```bash
git clone --recurse-submodules git@git.itphx.loc:eka/harness.git
```
`catalog init` идемпотентен: если всё на месте, просто сообщит об этом.
`catalog update`, в отличие от него, двигает коммиты на актуальные upstream —
сначала стягивает недостающие, потом обновляет.
## `hermes` / `opencode` — сам агент
```bash