feat: install.sh — support double format bundle/legacy (amelioration.md)
Double détection dans scan_skills() : - Bundle : dossier avec SKILL.md, agents: lu dans le frontmatter, copie récursive du dossier complet (scripts/, templates/, references/) - Legacy : <agent>.md existant, agent déduit du nom de fichier - Priorité bundle sur legacy pour un même cat/skill/agent - Nouveau champ get_frontmatter_agents() pour parser agents: [...] - SKILLS_LIST étendu : ...|kind|source_path (10 champs) - install_selected() branche sur kind=bundle vs legacy - preview_script utilise source_path pour trouver le fichier à afficher ha-log-investigator (bundle avec scripts/ et references/) est maintenant détecté et installé correctement. Tests : section 5 ajoutée — 9 nouveaux cas (bundle, legacy, références ignorées, doublon, priorité, source_path, accessibilité fichiers). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -161,6 +161,111 @@ assert_eq "cycle update→local" "local" "$(state_get "dev_debugging_claude_code
|
||||
rm -f "$STATE_FILE"
|
||||
unset STATE_FILE || true
|
||||
|
||||
# ── 5. Détection bundle / legacy ─────────────────────────────────
|
||||
echo ""
|
||||
echo "5. get_frontmatter_agents() / scan_skills() double format"
|
||||
|
||||
TMP_DIR=$(mktemp -d)
|
||||
|
||||
# Skill bundle : SKILL.md + agents: [claude-code, codex]
|
||||
mkdir -p "$TMP_DIR/skills/infra/mon-bundle"
|
||||
cat > "$TMP_DIR/skills/infra/mon-bundle/SKILL.md" << 'EOF'
|
||||
---
|
||||
name: mon-bundle
|
||||
version: 1.2.0
|
||||
agents: [claude-code, codex]
|
||||
description: Skill bundle test
|
||||
tags: [test]
|
||||
---
|
||||
# Mon bundle
|
||||
EOF
|
||||
mkdir -p "$TMP_DIR/skills/infra/mon-bundle/scripts"
|
||||
touch "$TMP_DIR/skills/infra/mon-bundle/scripts/helper.sh"
|
||||
|
||||
# Skill legacy : claude-code.md
|
||||
mkdir -p "$TMP_DIR/skills/dev/ancien"
|
||||
cat > "$TMP_DIR/skills/dev/ancien/claude-code.md" << 'EOF'
|
||||
---
|
||||
name: ancien
|
||||
version: 0.5.0
|
||||
description: Skill legacy
|
||||
tags: [legacy]
|
||||
---
|
||||
# Ancien skill
|
||||
EOF
|
||||
|
||||
# Fichier Markdown de support (ne doit PAS être détecté comme skill)
|
||||
mkdir -p "$TMP_DIR/skills/infra/mon-bundle/references"
|
||||
echo "# Ref doc" > "$TMP_DIR/skills/infra/mon-bundle/references/notes.md"
|
||||
|
||||
assert_eq "agents: [claude-code, codex] → 2 agents" \
|
||||
"claude-code
|
||||
codex" \
|
||||
"$(get_frontmatter_agents "$TMP_DIR/skills/infra/mon-bundle/SKILL.md")"
|
||||
|
||||
assert_eq "agents: absent → vide" \
|
||||
"" \
|
||||
"$(get_frontmatter_agents "$TMP_DIR/skills/dev/ancien/claude-code.md")"
|
||||
|
||||
# scan_skills avec les deux formats
|
||||
REPO_DIR="$TMP_DIR"
|
||||
DETECTED_AGENTS=()
|
||||
SKILLS_TAG=""
|
||||
STATE_FILE=$(mktemp)
|
||||
scan_skills 2>/dev/null
|
||||
|
||||
# Compter les entrées trouvées
|
||||
bundle_count=0; legacy_count=0; ref_count=0
|
||||
for e in "${SKILLS_LIST[@]}"; do
|
||||
IFS='|' read -r _ _ _ _ _ _ _ _ kind source_path <<< "$e"
|
||||
[[ "$kind" == "bundle" ]] && (( bundle_count++ )) || true
|
||||
[[ "$kind" == "legacy" ]] && (( legacy_count++ )) || true
|
||||
# Vérifier qu'aucune entrée ne vient de references/notes.md
|
||||
[[ "$source_path" == *"notes.md"* ]] && (( ref_count++ )) || true
|
||||
done
|
||||
|
||||
assert_eq "bundle détecté 2 fois (2 agents)" "2" "$bundle_count"
|
||||
assert_eq "legacy détecté 1 fois" "1" "$legacy_count"
|
||||
assert_eq "fichier references/ ignoré" "0" "$ref_count"
|
||||
|
||||
# Vérifier que kind=bundle et source_path pointent sur le dossier
|
||||
first_bundle=""
|
||||
for e in "${SKILLS_LIST[@]}"; do
|
||||
IFS='|' read -r _ _ _ _ _ _ _ _ kind source_path <<< "$e"
|
||||
[[ "$kind" == "bundle" ]] && { first_bundle="$source_path"; break; }
|
||||
done
|
||||
assert_eq "source_path bundle = dossier du skill" \
|
||||
"$TMP_DIR/skills/infra/mon-bundle" \
|
||||
"$first_bundle"
|
||||
|
||||
# Vérifier que SKILL.md du bundle est lisible pour le preview
|
||||
assert_true "SKILL.md bundle accessible" "[[ -f '${first_bundle}/SKILL.md' ]]"
|
||||
assert_true "scripts/ du bundle accessible" "[[ -f '${first_bundle}/scripts/helper.sh' ]]"
|
||||
|
||||
# Priorité bundle sur legacy : si SKILL.md existe, le <agent>.md ne duplique pas
|
||||
mkdir -p "$TMP_DIR/skills/dev/ancien"
|
||||
cat > "$TMP_DIR/skills/dev/ancien/SKILL.md" << 'EOF'
|
||||
---
|
||||
name: ancien
|
||||
version: 1.0.0
|
||||
agents: [claude-code]
|
||||
description: Skill migré en bundle
|
||||
tags: [test]
|
||||
---
|
||||
# Ancien migré
|
||||
EOF
|
||||
SKILLS_LIST=()
|
||||
scan_skills 2>/dev/null
|
||||
count_ancien=0
|
||||
for e in "${SKILLS_LIST[@]}"; do
|
||||
[[ "$e" == *"|ancien|claude-code|"* ]] && (( count_ancien++ )) || true
|
||||
done
|
||||
assert_eq "pas de doublon bundle+legacy pour même agent" "1" "$count_ancien"
|
||||
|
||||
rm -f "$STATE_FILE"
|
||||
rm -rf "$TMP_DIR"
|
||||
unset REPO_DIR STATE_FILE SKILLS_TAG DETECTED_AGENTS
|
||||
|
||||
# ── Bilan ─────────────────────────────────────────────────────────
|
||||
echo ""
|
||||
echo "══════════════════════════════════"
|
||||
|
||||
Reference in New Issue
Block a user