#!/usr/bin/env zsh # gen-agents.zsh — regenerate per-repo AGENTS.md from the shared template. # # ~/dev/_shared/bin/gen-agents.zsh # all repos under ~/dev # ~/dev/_shared/bin/gen-agents.zsh stats zodiac # specific repos only # # Sources of truth (all in ~/dev/_shared/): # AGENTS.common.md shared template; {{REPO}} is replaced by the repo dir name # AGENTS..md optional per-repo extra block, appended verbatim after the common block # # Writes a repo's AGENTS.md only when content differs. Prints wrote/unchanged/skipped. set -euo pipefail DEV_ROOT="${DEV_ROOT:-$HOME/dev}" SHARED="$DEV_ROOT/_shared" COMMON="$SHARED/AGENTS.common.md" TMP="$(mktemp -d)" trap 'rm -rf "$TMP"' EXIT if [[ ! -r "$COMMON" ]]; then print -u2 "gen-agents: missing $COMMON" exit 1 fi repos=("$@") if (( ${#repos[@]} == 0 )); then for d in "$DEV_ROOT"/*(N); do [[ -d "$d" ]] && repos+=("${d:t}") done fi wrote=0; unchanged=0; skipped=0 for name in "$repos[@]"; do dir="$DEV_ROOT/$name" if [[ ! -d "$dir" ]]; then print -u2 "gen-agents: skip $name (no dir $dir)" (( ++skipped )) continue fi out="$TMP/$name" sed "s/{{REPO}}/$name/g" "$COMMON" > "$out" extra="$SHARED/AGENTS.$name.md" if [[ -f "$extra" ]]; then printf '\n' >> "$out" cat "$extra" >> "$out" fi target="$dir/AGENTS.md" if [[ -f "$target" ]] && cmp -s "$out" "$target"; then (( ++unchanged )) else cp "$out" "$target" print "wrote $name/AGENTS.md" (( ++wrote )) fi done print "gen-agents: $wrote written, $unchanged unchanged, $skipped skipped"