opencode-config/.opencode/commands/cover.md
Sergey 87d6c4464b
feat(cover): add /cover command and VERCEL_TOKEN placeholder (#199)
* feat(cover): add /cover command for branded cover generation

* chore(env): add VERCEL_TOKEN placeholder to .env.example

* docs(project-map): add cover command, ADR-088 and handoff for PR #199

---------

Co-authored-by: opencode-agent <agent@opencode.local>
2026-08-01 02:07:34 +03:00

61 lines
6.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
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` есть `![Cover](assets/cover.png)`. Если нет — добавь ссылку сразу после заголовка H1. Можно использовать `create-readme validate` или прямую проверку; если `create-readme validate` падает (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/`).
- **`create-readme validate` падает** (README без delimiter tags) → предупреди, но кавер рендерится.
- **`draw-image` tool недоступен** → ясная ошибка, рендер невозможен.
- **`assets/` директория отсутствует** → создаётся автоматически.