KeiSeiKit-1.0/_blocks/build-index.sh
Parfii-bot d729a2e903 refactor(install): production-ready финальный круг
1. lib-onboarding.sh раскидан на 3 куба (Constructor Pattern <200 LOC):
   - lib-onboarding-registry.sh (79 LOC) — парсеры providers/models.toml
     + onboarding_fallback_providers (14 провайдеров)
     + onboarding_auth_env_for_provider helper (был inline в collect_auth)
   - lib-onboarding-ui.sh (189 LOC) — pick_language/transport/provider/model
     + collect_auth (whiptail/bash select)
   - lib-onboarding-state.sh (57 LOC) — write_secrets + write_config
     + user-model-override.toml для kei-model-router
   - lib-onboarding.sh (95 LOC) — тонкий оркестратор: should_run + run

   Сам lib-onboarding.sh source'ит 3 подкуба автоматически. Глобалы
   (ONBOARDING_*, REGISTRY_*, ONBOARDED_FLAG, etc.) объявлены в
   оркестраторе, подкубы их используют через имена.

2. lib-menu.sh локализован:
   - whiptail title + radiolist prompt через ${STR_MENU_TITLE} +
     ${STR_MENU_SUBSTRATE} + ${STR_MENU_PROFILE_PROMPT}.
   - Plain heading тоже использует словарь.
   - 12 коротких имён профилей (minimal/core/dev/...) — оставлены EN
     как стабильные id (не переводятся).

3. _blocks/build-index.sh — детерминированная регенерация INDEX.md.
   Группировка по 14 категорийным префиксам + "Прочие" для остальных.
   Безопасно перезапускать. INDEX.md обновлён через этот скрипт
   (минимальный diff — добавлена ссылка на build-index.sh в шапке).

Проверено: bash -n чисто, unit тесты onboarding_list_providers/
transports/models OK, non-TTY smoke ./install.sh --profile=minimal
--no-execute проходит.
2026-05-17 23:57:23 +08:00

72 lines
2.9 KiB
Bash
Executable file
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.

#!/usr/bin/env bash
# build-index.sh — регенерация _blocks/INDEX.md из *.md.
#
# Использование:
# cd ~/Projects/KeiSeiKit-public/_blocks && bash build-index.sh
# # или из любого места:
# bash $(git rev-parse --show-toplevel)/_blocks/build-index.sh
#
# Что делает:
# 1. Сканит _blocks/*.md (исключая README.md и INDEX.md).
# 2. Группирует по префиксу (api-, auth-, ci-, db-, deploy-, ...).
# 3. Для каждого блока берёт первую H1-строку как описание.
# 4. Пишет INDEX.md с разбиением по 14 категориям + "Прочие".
#
# Безопасно перезапускать — детерминированный output.
set -euo pipefail
# Запускаемся всегда из _blocks/.
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cd "$SCRIPT_DIR"
CATEGORIES=(api auth ci db deploy docs domain mode obs path rule scraper security stack test)
OUT="INDEX.md"
TMP="${OUT}.tmp.$$"
trap 'rm -f "$TMP"' EXIT
{
printf '# Реестр блоков KeiSeiKit\n\n'
printf '> SSoT для assembler. Все блоки доступные для `blocks = [...]` в `_manifests/<agent>.toml`.\n'
printf '> Авто-генерируется из `_blocks/*.md` через `bash build-index.sh`.\n'
printf '> Каждый файл = атомарный кубик (Constructor Pattern).\n\n'
printf 'Пример:\n```toml\nblocks = ["baseline", "rule-pre-dev-gate", "api-anthropic"]\n```\n\n'
printf '## По категориям\n\n'
for cat in "${CATEGORIES[@]}"; do
upper=$(echo "$cat" | tr '[:lower:]' '[:upper:]')
files=$(ls 2>/dev/null | grep -E "^${cat}(-|\.).*\.md$" || true)
[ -z "$files" ] && continue
printf '### %s\n\n' "$upper"
while IFS= read -r f; do
[ -z "$f" ] && continue
name="${f%.md}"
desc=$(awk '/^# / { sub(/^# /, ""); print; exit }' "$f" 2>/dev/null || true)
[ -z "$desc" ] && desc="(no title)"
printf -- '- `%s` — %s\n' "$name" "$desc"
done <<< "$files"
printf '\n'
done
printf '### Прочие (без категорийного префикса)\n\n'
while IFS= read -r f; do
name="${f%.md}"
case "$name" in
api-*|auth-*|ci-*|db-*|deploy-*|docs-*|domain-*|mode-*|obs-*|path-*|rule-*|scraper-*|security-*|stack-*|test-*|README|INDEX) continue ;;
esac
desc=$(awk '/^# / { sub(/^# /, ""); print; exit }' "$f" 2>/dev/null || true)
[ -z "$desc" ] && desc="(no title)"
printf -- '- `%s` — %s\n' "$name" "$desc"
done < <(ls *.md)
total=$(ls *.md | grep -vE '^(README|INDEX)\.md$' | wc -l | tr -d ' ')
printf '\n---\n\nВсего блоков: %d.\n' "$total"
printf 'Перегенерация: `bash _blocks/build-index.sh`.\n'
} > "$TMP"
mv "$TMP" "$OUT"
trap - EXIT
echo "$OUT regenerated"
wc -l "$OUT"