* feat(create-readme): add clickable steps and conditional bash block * docs(repo-readme): document clickable steps params and example * docs(handoff): add handoff and ADR for clickable-steps * docs(handoff): set PR number * docs(project-map): update create-readme params after PR#146 --------- Co-authored-by: opencode-agent <agent@opencode.local>
5.8 KiB
5.8 KiB
| pr | title |
|---|---|
| 146 | feat(create-readme): add clickable steps to Quick Start |
Что сделано
Расширение тулзы create-readme (.opencode/tools/create-readme.ts) —
кликабельные шаги-ссылки в Quick Start, условный bash-блок, кликабельный
access_url. Backward-compatible.
- Новые параметры —
quick_start_steps_en?: string[]иquick_start_steps_ru?: string[]добавлены в типCreateArgs(строки 25-26) и вtool.schema(послеquick_start, строки 214-220). Каждый элемент = raw-markdown строка, может содержать[text](url)..optional(). - Helper
renderSteps(строки 46-50) — если массив пуст/undefined →"", иначе нумерованный список1. ...\n2. ...\nс пустыми строками вокруг для markdown-разделения от code-fence. - Рендер шагов —
${renderSteps(args.quick_start_steps_*)}вставлен после bash-блока, доaccessLine*в обеих секциях (EN: строка 102, RU: строка 120). - Условный bash-блок —
hasBashBlock = include_clone !== false || quick_start !== ""(строка 70). Если оба условия false → bash-fence НЕ рендерится (только шаги).cloneLineвынесен в общую переменную (строки 67-69). Применено к EN (bashBlockEn, строки 71-73) и RU (bashBlockRu, строки 74-76). Default behavior сохранён:include_cloneне передан →!== false→ true → git clone рендерится. - Кликабельный
access_url(строки 59-60) — bare URL заменён на[url](url). EN:Access at [url](url), RU:Доступ: [url](url). - Передача параметров —
quick_start_steps_en/ruпрокинуты в вызовgenerateReadme({...})вexecute()(строки 324-325). - Валидатор —
validateReadmeНЕ изменён: шаги рендерятся вне delimiter-пар (summary/features) и не влияют ни на одну проверку (секции "Quick Start" / "Быстрый старт" присутствуют). Проверено smoke-тестом: все 28 checks PASS,validateпроходит на всех сгенерированных README. - Документация —
.opencode/skills/repo-readme/SKILL.mdобновлён: новые параметры в секции 7, кликабельныйaccess_urlотмечен, reference-шаблон (секция 5) отражает шаги + clickable access, секция 8 (кейс userscript) расширена, добавлен пример вызова + ожидаемый вывод.
Smoke-test
Прогнан через npx tsx с реальным @opencode-ai/plugin из
.opencode/node_modules/ (mock не понадобился — плагин установлен). 5
сценариев, 28 assertions:
- S1: default (backward compat) — bash + git clone, no steps, no access.
- S2: steps + clickable access (main spec scenario) — вывод точно совпадает с примером из issue.
- S3: asymmetric (steps only on RU).
- S4:
include_clone=false+ non-emptyquick_start→ bash без git clone. - S5: empty steps array → no list rendered.
Все
validatePASS на сгенерированных README.
Почему
Quick Start умел только bash-блок (markdown-ссылки внутри code-fence НЕ
кликабельны) и плоский access_url. Для multi-step setup (userscript:
установить → получить API-ключ → настроить) нужен нумерованный список
кликабельных шагов. Условный bash-блок убирает пустой ```bash ``` когда
установки нет (только шаги). Кликабельный access_url улучшает UX.
Pending
—
Watch out
quick_startостаётся required дляcreatemode вexecute()(строки 296-301). Сценарий "пустой quick_start + только steps" черезexecuteневозможен без ослабления required-чеков — спека этого НЕ просит. Чтобы рендерить только шаги (без bash), передайquick_start: ""+include_clone: false— НОexecuteотвергнет пустойquick_start. Обход: передать минимальныйquick_start(например пробел/коммент) или ослабить required в отдельном issue. ВgenerateReadmeнапрямую логикаhasBashBlockкорректна дляquick_start="".access_urlвизуально почти идентичен на GitHub: был bare URL (auto-link) → стал[url](url)(markdown-ссылка). Оба кликабельны. На raw-text просмотрах (не GitHub) markdown-синтаксис виден.- tsconfig.smoke.json и smoke-harness созданы в
/tmp/opencode/(вне репо) — не коммитятся. Mock@opencode-ai/pluginне понадобился (реальный плагин установлен в.opencode/node_modules/, gitignored). renderStepsиспользует1-basedнумерацию через${i + 1}.— markdown ordered list, нумерация авто-пересчитывается рендерером, но явные числа соответствуют порядку массива.