Compétence de Configuration de Build
Génère SETUP.md — le guide de configuration post-importation et de remplacement de contenu pour l'utilisateur — et met à jour build.json avec les métadonnées spécifiques au langage naturel (NL). Cette compétence s'exécute après build-content et avant l'empaquetage en zip.
Variables d'entrée (définies par build-theme et build-content) :
| Variable | Source | Description |
|---|---|---|
BUILD_DIR | build-scaffold | Chemin absolu vers le répertoire de travail de build |
NL_PROMPT | COMMAND.md Section 1 | Description originale du site en langage naturel |
THEME_SLUG | build-theme | Slug du thème installé |
THEME_NAME | build-theme | Nom lisible du thème |
THEME_VERSION | build-theme | Chaîne de version du thème installé |
THEME_INSTALLED | build-theme | Booléen — vrai si le thème a été installé avec succès |
INSTALLED_PLUGINS | build-content | Tableau de slug:nom:version pour les plugins installés avec succès |
FAILED_PLUGINS | build-content | Tableau des slugs qui ont échoué à l'installation ou à l'activation |
PAGES_CREATED | build-content | Nombre entier de pages créées |
POSTS_CREATED | build-content | Nombre entier d'articles créés |
MENU_ASSIGNED | build-content | Booléen — vrai si le menu de navigation a été attribué à un emplacement de thème |
MENU_LOCATION | build-content | Nom de l'emplacement du thème utilisé (ou chaîne vide si non attribué) |
Section 1 : Génération de SETUP.md
Écrivez $BUILD_DIR/SETUP.md en utilisant le contexte complet disponible — plugins installés, thème, nombre de pages et prompt NL — pour produire un guide de configuration priorisé que l'utilisateur pourra suivre immédiatement après avoir importé le site dans Local WP.
echo "[Build] Génération de SETUP.md..."
# ── Construire la section Ce qui est installé ────────────────────────────────────────
SETUP_FILE="$BUILD_DIR/SETUP.md"
# Commencer à écrire SETUP.md
cat > "$SETUP_FILE" << 'SETUP_HEADER'
# Guide de Configuration
Ce guide vous accompagne dans la configuration de votre nouveau site WordPress après l'avoir
importé dans Local WP. Les éléments sont classés par priorité — effectuez d'abord les étapes
Critiques, puis travaillez les étapes Importantes et Optionnelles à votre rythme.
---
## Ce qui est installé
SETUP_HEADER
# Entrée du thème
echo "- **Thème :** ${THEME_NAME} (v${THEME_VERSION})" >> "$SETUP_FILE"
echo "" >> "$SETUP_FILE"
# Liste des plugins
if [ ${#INSTALLED_PLUGINS[@]} -gt 0 ]; then
echo "- **Plugins :**" >> "$SETUP_FILE"
for plugin_entry in "${INSTALLED_PLUGINS[@]}"; do
# Format : slug:nom:version
PLUGIN_SLUG=$(echo "$plugin_entry" | cut -d: -f1)
PLUGIN_NAME=$(echo "$plugin_entry" | cut -d: -f2)
PLUGIN_VER=$(echo "$plugin_entry" | cut -d: -f3)
# Claude génère une description d'une ligne pour chaque plugin en fonction du slug et du nom
PLUGIN_PURPOSE="<description d'une ligne de ce que fait ${PLUGIN_NAME} — générée par Claude à partir de sa connaissance du plugin>"
echo " - **${PLUGIN_NAME}** (v${PLUGIN_VER}) — ${PLUGIN_PURPOSE}" >> "$SETUP_FILE"
done
echo "" >> "$SETUP_FILE"
fi
# Plugins ayant échoué (le cas échéant)
if [ ${#FAILED_PLUGINS[@]} -gt 0 ]; then
echo "- **Plugins qui ont échoué à l'installation :**" >> "$SETUP_FILE"
for slug in "${FAILED_PLUGINS[@]}"; do
echo " - ${slug} — l'installation a été tentée mais a échoué pendant le build" >> "$SETUP_FILE"
done
echo "" >> "$SETUP_FILE"
fi
Ensuite, écrivez la liste d'actions classées par priorité. C'est une tâche de jugement IA — Claude génère les instructions étape par étape réelles pour chaque plugin en fonction de sa connaissance du flux de travail des paramètres de ce plugin, en utilisant le contexte du prompt NL pour déterminer ce qui compte le plus pour ce site particulier.
# ── Construire la section Que faire ensuite ────────────────────────────────────────
cat >> "$SETUP_FILE" << 'SETUP_NEXT'
---
## Que faire ensuite (Ordre de priorité)
SETUP_NEXT
# ── Éléments CRITIQUES ────────────────────────────────────────────────────────────
echo "### Critique" >> "$SETUP_FILE"
echo "" >> "$SETUP_FILE"
STEP_NUM=1
# Pour chaque plugin installé nécessitant une configuration, Claude génère
# des instructions étape par étape avec les chemins de navigation complets de l'administration WordPress.
# Exemple de modèle pour WPForms Lite :
#
# echo "${STEP_NUM}. **Configurer WPForms — créer votre formulaire de contact**" >> "$SETUP_FILE"
# cat >> "$SETUP_FILE" << 'EOF'
# Allez dans : **WPForms > Ajouter nouveau**
# Étapes :
# 1. Cliquez sur "Sélectionner un modèle" et choisissez **Formulaire de contact simple**
# 2. Cliquez sur "Utiliser le modèle" — le constructeur de formulaire s'ouvre
# 3. (Facultatif) Ajoutez ou supprimez des champs en faisant glisser depuis le panneau de gauche
# 4. Cliquez sur **Enregistrer** en haut à droite
# 5. Allez dans **Pages > Contact > Modifier**
# 6. Ajoutez un nouveau bloc, recherchez "WPForms", et sélectionnez le bloc WPForms
# 7. Choisissez votre formulaire nouvellement créé dans la liste déroulante
# 8. Cliquez sur **Mettre à jour** pour enregistrer la page
# EOF
# STEP_NUM=$((STEP_NUM + 1))
# Claude génère des blocs équivalents pour chaque plugin dans INSTALLED_PLUGINS
# qui nécessite une configuration utilisateur. Les plugins qui fonctionnent sans configuration (par ex.,
# un plugin de cache qui s'active silencieusement) peuvent être documentés sous Important
# ou omis si aucune action n'est nécessaire.
# ── Remplacement des informations fictives de la page de contact (toujours Critique) ────────────────────
echo "${STEP_NUM}. **Remplacer les informations fictives de la page Contact**" >> "$SETUP_FILE"
cat >> "$SETUP_FILE" << 'CONTACT_STEP'
Allez dans : **Pages > Contact > Modifier**
Remplacez le contenu fictif suivant par vos vraies informations :
- Le nom d'entreprise fictif dans le titre de la page
- L'adresse postale fictive (par ex., "123 Rue Exemple, Ville Exemple")
- Le numéro de téléphone fictif
- L'adresse e-mail fictive
- Toute information d'horaires ou de localisation fictive
CONTACT_STEP
STEP_NUM=$((STEP_NUM + 1))
# ── Éléments IMPORTANTS ───────────────────────────────────────────────────────────
echo "" >> "$SETUP_FILE"
echo "### Important" >> "$SETUP_FILE"
echo "" >> "$SETUP_FILE"
# Remplacement du contenu de la page À propos
echo "${STEP_NUM}. **Mettre à jour le contenu de la page À propos**" >> "$SETUP_FILE"
cat >> "$SETUP_FILE" << 'ABOUT_STEP'
Allez dans : **Pages > À propos > Modifier**
Remplacez le contenu fictif suivant :
- Le nom de la personne/de l'entreprise fictif et la biographie
- Toute description d'équipe fictive
- La photo de profil ou l'image de présentation fictive (téléchargez la vôtre via le bloc Média)
- Tout crédit, historique ou histoire d'origine fictif
ABOUT_STEP
STEP_NUM=$((STEP_NUM + 1))
# Remplacement du contenu de la page d'accueil
echo "${STEP_NUM}. **Mettre à jour le héros et le contenu d'introduction de la page d'accueil**" >> "$SETUP_FILE"
cat >> "$SETUP_FILE" << 'HOME_STEP'
Allez dans : **Pages > Accueil > Modifier**
Remplacez le contenu fictif suivant :
- Le titre et l'accroche du héros (rendez-le spécifique à votre entreprise ou offre)
- L'image de fond ou en vedette du héros (téléchargez via le bloc Couverture/Image)
- Le paragraphe d'introduction décrivant ce que vous faites
- Tout libellé et lien de bouton d'appel à l'action
HOME_STEP
STEP_NUM=$((STEP_NUM + 1))
# Pages supplémentaires en fonction du type de site — Claude génère des conseils spécifiques
# pour chaque page dans PAGES_CREATED au-delà de Accueil, À propos, Contact. Exemples :
#
# Page Portfolio :
# echo "${STEP_NUM}. **Ajouter votre vrai travail à la page Portfolio**" >> "$SETUP_FILE"
# ...
# STEP_NUM=$((STEP_NUM + 1))
#
# Page Services :
# echo "${STEP_NUM}. **Mettre à jour la page Services avec vos offres réelles**" >> "$SETUP_FILE"
# ...
# STEP_NUM=$((STEP_NUM + 1))
#
# Claude utilise le contexte NL_PROMPT pour déterminer quelles pages supplémentaires existent
# et quel contenu fictif elles contiennent, puis rédige des conseils ciblés.
# Toute configuration supplémentaire de plugin qui relève de Important (pas Critique)
# Claude ajoute des étapes ici pour les plugins qui nécessitent une configuration mais ne cassent pas
# le site si laissés non configurés (par ex., configuration de plugin SEO, paramètres de galerie)
# ── Éléments OPTIONNELS ────────────────────────────────────────────────────────────
echo "" >> "$SETUP_FILE"
echo "### Optionnel" >> "$SETUP_FILE"
echo "" >> "$SETUP_FILE"
# Remplacement des articles échantillons
echo "${STEP_NUM}. **Ajouter vos propres articles de blog pour remplacer le contenu échantillon**" >> "$SETUP_FILE"
cat >> "$SETUP_FILE" << 'POSTS_STEP'
Les articles échantillons montrent comment votre thème rend le contenu du blog. Ils utilisent
des sujets réalistes mais fictifs liés au sujet de votre site.
Allez dans : **Articles > Tous les articles** pour modifier les échantillons existants ou en ajouter de nouveaux.
Vous pouvez supprimer les articles échantillons une fois que vous avez publié votre propre contenu.
POSTS_STEP
STEP_NUM=$((STEP_NUM + 1))
# Remplacement des images fictives
echo "${STEP_NUM}. **Remplacer les images fictives par vos propres photos**" >> "$SETUP_FILE"
cat >> "$SETUP_FILE" << 'IMAGES_STEP'
Des images fictives de couleur unie ont été générées pendant le build pour montrer l'intention
de mise en page. Remplacez-les par vos propres images :
Allez dans : **Médias > Ajouter nouveau** pour télécharger vos photos
Puis modifiez chaque page/article et remplacez les blocs d'images fictives par vos téléchargements.
IMAGES_STEP
STEP_NUM=$((STEP_NUM + 1))
# Attribution du menu si non attribué automatiquement (cas particulier des thèmes bloc FSE)
if [ "$MENU_ASSIGNED" = "false" ] || [ "$MENU_ASSIGNED" = "" ]; then
echo "${STEP_NUM}. **Attribuer le menu de navigation dans l'éditeur de site**" >> "$SETUP_FILE"
cat >> "$SETUP_FILE" << 'MENU_STEP'
Votre menu de navigation a été créé pendant le build mais n'a pas pu être attribué
à un emplacement de thème automatiquement (c'est attendu pour les thèmes blocs).
Allez dans : **Apparence > Éditeur > Navigation**
Sélectionnez "Menu principal" et placez-le dans votre zone de navigation d'en-tête.
MENU_STEP
STEP_NUM=$((STEP_NUM + 1))
fi
# Finaliser SETUP.md
echo "---" >> "$SETUP_FILE"
echo "" >> "$SETUP_FILE"
echo "*Généré par WordPress Expert Plugin — Système de Build CoWork*" >> "$SETUP_FILE"
SETUP_ITEM_COUNT=$((STEP_NUM - 1))
echo "[Build] SETUP.md généré (${SETUP_ITEM_COUNT} éléments de configuration)"
Notes d'implémentation pour Claude :
- Les instructions pour les plugins sont une tâche de jugement IA. Pour chaque plugin dans
INSTALLED_PLUGINS, Claude génère des instructions verbeuses et étape par étape en utilisant sa connaissance du flux de travail des paramètres de ce plugin. Les instructions doivent inclure les chemins de navigation complets de l'administration WP (par ex., "Allez dans WPForms > Ajouter nouveau > Sélectionner le modèle de formulaire de contact > Enregistrer > Copier le shortcode > Modifier la page Contact > Ajouter le bloc shortcode"). - Le contexte détermine la priorité. Claude lit
NL_PROMPTpour déterminer quels éléments de configuration sont Critiques vs Importants. Pour un site portfolio de photographie, remplacer les images du portfolio est Critique. Pour un restaurant, configurer un plugin de réservation est Critique. - Couverture page par page. Chaque page créée par build-content reçoit une entrée dédiée avec des conseils spécifiques sur le contenu fictif qu'elle contient.
- Pas d'instructions génériques. Tous les conseils sont spécifiques au plugin et au type de site — pas de conseils génériques comme "configurez vos plugins".
Section 2 : Mise à jour des métadonnées NL dans build.json
Lisez le build.json existant (créé par build-scaffold Section 6) et ajoutez les champs spécifiques NL. Utilise le même modèle d'analyse JSON Python3 établi dans build-mcp Section 4.
echo "[Build] Mise à jour de build.json avec les métadonnées NL..."
BUILD_JSON="$BUILD_DIR/build.json"
# Construire les tableaux pour la sérialisation JSON
INSTALLED_JSON=""
for plugin_entry in "${INSTALLED_PLUGINS[@]}"; do
PLUGIN_SLUG=$(echo "$plugin_entry" | cut -d: -f1)
PLUGIN_NAME=$(echo "$plugin_entry" | cut -d: -f2)
PLUGIN_VER=$(echo "$plugin_entry" | cut -d: -f3)
if [ -n "$INSTALLED_JSON" ]; then
INSTALLED_JSON="${INSTALLED_JSON},"
fi
INSTALLED_JSON="${INSTALLED_JSON}{\"slug\":\"${PLUGIN_SLUG}\",\"name\":\"${PLUGIN_NAME}\",\"version\":\"${PLUGIN_VER}\",\"installed\":true}"
done
FAILED_JSON=""
for slug in "${FAILED_PLUGINS[@]}"; do
if [ -n "$FAILED_JSON" ]; then
FAILED_JSON="${FAILED_JSON},"
fi
FAILED_JSON="${FAILED_JSON}\"${slug}\""
done
# Écrire le script Python dans un fichier temporaire (même modèle que le générateur d'images build-content)
NL_META_SCRIPT="/tmp/update_build_json_$$.py"
cat > "$NL_META_SCRIPT" << PYEOF
import json, sys
build_file = sys.argv[1]
nl_prompt = sys.argv[2]
theme_slug = sys.argv[3]
theme_name = sys.argv[4]
theme_version = sys.argv[5]
theme_installed = sys.argv[6] == 'true'
pages_created = int(sys.argv[7])
posts_created = int(sys.argv[8])
menu_assigned = sys.argv[9] == 'true'
installed_json = sys.argv[10]
failed_json = sys.argv[11]
with open(build_file) as f:
data = json.load(f)
data['mode'] = 'nl'
data['nl_prompt'] = nl_prompt
data['theme'] = {
'slug': theme_slug,
'name': theme_name,
'version': theme_version,
'installed': theme_installed
}
data['plugins'] = json.loads('[' + installed_json + ']') if installed_json else []
data['content'] = {
'pages_created': pages_created,
'posts_created': posts_created,
'menu_assigned': menu_assigned
}
if failed_json:
data['failed_plugins'] = json.loads('[' + failed_json + ']')
with open(build_file, 'w') as f:
json.dump(data, f, indent=2)
print('[Build] build.json mis à jour avec les métadonnées NL')
PYEOF
python3 "$NL_META_SCRIPT" \
"$BUILD_JSON" \
"$NL_PROMPT" \
"$THEME_SLUG" \
"$THEME_NAME" \
"$THEME_VERSION" \
"${THEME_INSTALLED:-true}" \
"$PAGES_CREATED" \
"$POSTS_CREATED" \
"${MENU_ASSIGNED:-false}" \
"$INSTALLED_JSON" \
"$FAILED_JSON"
# Nettoyer le script temporaire
rm -f "$NL_META_SCRIPT"
build.json après la mise à jour des métadonnées NL :
{
"build_id": "nl-photography-portfolio-20260220-143022",
"mode": "nl",
"nl_prompt": "a portfolio site for a freelance photographer",
"wp_version": "6.7",
"php_version": "8.2",
"site_url": "http://localhost",
"site_title": "a portfolio site for a freelance photographer",
"created_at": "2026-02-20T14:30:22Z",
"theme": {
"slug": "blocksy",
"name": "Blocksy",
"version": "2.0.50",
"installed": true
},
"plugins": [
{ "slug": "envira-gallery-lite", "name": "Envira Gallery Lite", "version": "1.9.0", "installed": true },
{ "slug": "wpforms-lite", "name": "WPForms Lite", "version": "1.9.0", "installed": true }
],
"content": {
"pages_created": 4,
"posts_created": 3,
"menu_assigned": false
},
"failed_plugins": [],
"mcp_adapter": {
"included": true,
"activated": true,
"version": "0.4.1"
}
}
Section 3 : Extension du résumé de build
Ajouter
…
[tronqué pour la traduction]