diff --git a/scripts/sync_standards.sh b/scripts/sync_standards.sh index d61aab3..9b3de77 100644 --- a/scripts/sync_standards.sh +++ b/scripts/sync_standards.sh @@ -165,17 +165,92 @@ EOF fi AGENTS_MD="$ROOT/AGENTS.md" -if [ ! -f "$AGENTS_MD" ]; then - cat >"$AGENTS_MD" <<'EOF' -# Agent Instructions - -请以 `.agents/` 下的规则为准: - -- 入口:`.agents/index.md` -- 语言规则:`.agents/tsl/index.md`、`.agents/cpp/index.md`、`.agents/python/index.md`、`.agents/markdown/index.md` -EOF - echo "Created AGENTS.md" +AGENTS_BLOCK_START="" +AGENTS_BLOCK_END="" +AGENTS_BLOCK_TMP="$(mktemp 2>/dev/null || echo "$ROOT/.agents_block.$timestamp")" +agents_langs="" +if [ -d "$AGENTS_ROOT" ]; then + for dir in "$AGENTS_ROOT"/*; do + [ -d "$dir" ] || continue + name="$(basename "$dir")" + case "$name" in + ""|.*|*.bak.*) continue ;; + esac + if [ -f "$dir/index.md" ]; then + agents_langs="${agents_langs:+$agents_langs }$name" + fi + done fi +if [ -z "$agents_langs" ]; then + agents_langs="$AGENTS_NS" +fi + +langs_line="" +for name in $agents_langs; do + entry="`.agents/$name/index.md`" + if [ -z "$langs_line" ]; then + langs_line="$entry" + else + langs_line="$langs_line、$entry" + fi +done + +{ + printf "%s\n" "$AGENTS_BLOCK_START" + printf "%s\n\n" "请以 `.agents/` 下的规则为准:" + printf "%s\n" "- 入口:`.agents/index.md`" + if [ -n "$langs_line" ]; then + printf "%s\n" "- 语言规则:$langs_line" + else + printf "%s\n" "- 语言规则:" + fi + printf "%s\n" "$AGENTS_BLOCK_END" +} >"$AGENTS_BLOCK_TMP" + +if [ ! -f "$AGENTS_MD" ]; then + { + printf "%s\n\n" "# Agent Instructions" + cat "$AGENTS_BLOCK_TMP" + } >"$AGENTS_MD" + echo "Created AGENTS.md" +else + if grep -Fq "$AGENTS_BLOCK_START" "$AGENTS_MD"; then + tmp="$(mktemp 2>/dev/null || echo "$ROOT/.agents_md.$timestamp")" + awk -v start="$AGENTS_BLOCK_START" -v end="$AGENTS_BLOCK_END" -v block_file="$AGENTS_BLOCK_TMP" ' + BEGIN { + while ((getline line < block_file) > 0) { block[++n] = line } + close(block_file) + inblock=0 + replaced=0 + } + { + if (!replaced && $0 == start) { + for (i=1; i<=n; i++) print block[i] + inblock=1 + replaced=1 + next + } + if (inblock) { + if ($0 == end) { inblock=0 } + next + } + print + } + ' "$AGENTS_MD" >"$tmp" + mv "$tmp" "$AGENTS_MD" + echo "Updated AGENTS.md (playbook block)." + else + if grep -Fq ".agents/index.md" "$AGENTS_MD"; then + echo "Skip: AGENTS.md already references .agents/index.md" + else + printf "\n" >>"$AGENTS_MD" + cat "$AGENTS_BLOCK_TMP" >>"$AGENTS_MD" + printf "\n" >>"$AGENTS_MD" + echo "Appended playbook block to AGENTS.md" + fi + fi +fi +rm -f "$AGENTS_BLOCK_TMP" echo "Synced agents ruleset to $AGENTS_DST."