#!/usr/bin/env bash # gstack-patch-names — patch name: field in SKILL.md frontmatter for prefix mode # Usage: gstack-patch-names set -euo pipefail GSTACK_DIR="$1" DO_PREFIX="$2" # Normalize prefix arg case "$DO_PREFIX" in true|1) DO_PREFIX=1 ;; *) DO_PREFIX=0 ;; esac # Names are read with a bash builtin loop: no process per skill (#2120). . "$(dirname "$0")/gstack-skill-name.sh" PATCHED=0 for skill_dir in "$GSTACK_DIR"/*/; do [ -f "$skill_dir/SKILL.md" ] || continue dir_name=${skill_dir%/}; dir_name=${dir_name##*/} [ "$dir_name" = "node_modules" ] && continue gstack_skill_md_name "$skill_dir/SKILL.md"; cur=$GSTACK_SKILL_NAME [ -z "$cur" ] && continue [ "$cur" = "gstack" ] && continue # never prefix root skill if [ "$DO_PREFIX" -eq 1 ]; then case "$cur" in gstack-*) continue ;; esac new="gstack-$cur" else case "$cur" in gstack-*) ;; *) continue ;; esac [ "$dir_name" = "$cur" ] && continue # inherently prefixed (gstack-upgrade) new="${cur#gstack-}" fi tmp="$(mktemp "${skill_dir}/SKILL.md.XXXXXX")" sed "1,/^---$/s/^name:[[:space:]]*${cur}/name: ${new}/" "$skill_dir/SKILL.md" > "$tmp" && mv "$tmp" "$skill_dir/SKILL.md" PATCHED=$((PATCHED + 1)) done if [ "$PATCHED" -gt 0 ]; then echo " patched name: field in $PATCHED skills" fi