* fix(cover): replace stale create-readme validate in step 7 * fix(cover): drop create-readme validate edge case mention --------- Co-authored-by: opencode-agent <agent@opencode.local>
61 lines
6.2 KiB
Markdown
61 lines
6.2 KiB
Markdown
---
|
||
description: Generate a branded 1024×1024 cover (Lime style) via draw-image
|
||
agent: build
|
||
---
|
||
Generate a repository cover image following the **hardcoded slaid098 Lime standard**.
|
||
Style is NEVER asked of the user and NEVER overridden — only content questions are asked.
|
||
|
||
## Hardcoded standard (НЕ спрашивается, НЕ переопределяется)
|
||
|
||
- `template` = `cover` (1024×1024, единственный доступный шаблон в `.opencode/draw-image/templates/cover.svg`).
|
||
- Palette = **Lime** from `.opencode/draw-image/brand.json`: base `#0a0a0a`, surface `#121212`, accent `#ccff00` (icons), fg `#ededed` (text), muted `#a1a1aa`.
|
||
- `title`: ровно ОДИН заголовок, **lowercase English**, без исключений. Авто-деривация из имени репо (см. правила ниже).
|
||
- `subtitle`: **ОТСУТСТВУЕТ**. Флаг `--subtitle` / параметр `subtitle` запрещён стандартом. Передача subtitle = ошибка команды.
|
||
- `out` = `assets/cover.png` (относительно корня репо). Глобальный путь для витрины slaid098.dev — без исключений.
|
||
|
||
## Slots
|
||
|
||
- `icon` — **обязательный**. Lucide-иконка из `.opencode/draw-image/icons/lucide/` (2007 шт.) ИЛИ brand-logo из `.opencode/draw-image/brand-logos/`. Передаётся без расширения (напр. `mic`, не `mic.svg`).
|
||
- `sub-icon` — **опциональный**. Brand-logo из `.opencode/draw-image/brand-logos/` для показа brand-принадлежности.
|
||
- `badge` — **опциональный**. Путь к SVG-бейджу.
|
||
|
||
## Title derivation rules
|
||
|
||
- Имя репо → lowercase, дефисы/подчёркивания → пробелы: `opencode-voice-dictation` → `opencode voice dictation`.
|
||
- camelCase / UPPER → lowercase: `MyRepo` → `myrepo`.
|
||
- Числа сохраняются: `video-uniq-2` → `video uniq 2`.
|
||
- Если имя длиннее ~40 символов → спроси у пользователя сокращение.
|
||
|
||
## Flow
|
||
|
||
1. **Read repo** — прочитай `README.md`, манифест (`package.json` / `pyproject.toml` / иной), пробегись по `src/` (топ-уровень). Определи purpose репо.
|
||
2. **Infer** — выведи: `title` (по правилам выше), candidate `icon` (по purpose, напр. voice-dictation → `mic`), candidate `sub-icon` (по brand-принадлежности из README/манифеста).
|
||
3. **Ask user** — задай 2-3 вопроса ТОЛЬКО по контенту, который не удалось вывести: подтвердить/скорректировать `icon`, `sub-icon`, `title`. НЕ задавай вопросов по стилю — стиль захардкожен.
|
||
4. **Pre-check** — если `assets/cover.png` уже существует, спроси «перезаписать?» перед рендером.
|
||
5. **Ensure `assets/` dir** — если директории `assets/` нет, создай её автоматически.
|
||
6. **Render** — вызови tool `draw-image`:
|
||
```
|
||
draw-image({ template: "cover", title: "<lowercase english>", slots: "icon=<value>,sub-icon=<value>", out: "assets/cover.png" })
|
||
```
|
||
НЕ передавай `subtitle`. Если tool `draw-image` недоступен — остановись с ошибкой: «draw-image tool недоступен — невозможно сгенерировать кавер».
|
||
7. **Validate README** — проверь, что в `README.md` есть ``. Если нет — добавь ссылку сразу после заголовка H1 (прямая проверка; опционально — `project-status.py check_readme`). Если `check_readme` падает (README без delimiter tags) — предупреди, но кавер всё равно остаётся отрендеренным (кавер ≠ README).
|
||
8. **Done** — сообщи путь к готовому PNG.
|
||
|
||
## Extension mechanism (НЕ хардкод брендов)
|
||
|
||
Команда НЕ хардкодит конкретные бренды. **OpenCode упоминается ниже только как ПРИМЕР** — это не special-case в коде. Для любого бренда: если в `.opencode/draw-image/brand-logos/` есть SVG, его можно использовать как `sub-icon`. Расширение = добавление brand-logo SVG в `draw-image/brand-logos/`, а НЕ изменение этой команды.
|
||
|
||
> Пример: README указывает на принадлежность к OpenCode-ecosystem → предложи `sub-icon=opencode` (файл `brand-logos/opencode.svg`). Для не-OpenCode репо `sub-icon` пропускается.
|
||
|
||
## Граничные случаи
|
||
|
||
- **Нет README / нет манифеста** → purpose не выводится → спроси пользователя `icon` + `title` напрямую (без infer).
|
||
- **Имя репо camelCase / UPPER** → нормализуется в lowercase (`MyRepo` → `myrepo`).
|
||
- **Имя репо с числами** → сохраняются (`video-uniq-2` → `video uniq 2`).
|
||
- **Имя репо > ~40 символов** → спроси сокращение.
|
||
- **Пользователь хочет не-Lime кавер** → отказ: «команда /cover поддерживает только Lime-стиль. Кастомизация вне scope.»
|
||
- **Существующий `assets/cover.png`** → спроси «перезаписать?» перед рендером.
|
||
- **Lucide-иконка не найдена** → ошибка со списком похожих иконок (fuzzy match по имени в `icons/lucide/`).
|
||
- **`check_readme` падает** (README без delimiter tags) → предупреди, но кавер рендерится.
|
||
- **`draw-image` tool недоступен** → ясная ошибка, рендер невозможен.
|
||
- **`assets/` директория отсутствует** → создаётся автоматически.
|