🔧 chore(sync): scope agents block to existing langs

This commit is contained in:
csh 2026-01-13 10:45:53 +08:00
parent b0ca842c72
commit 9481510154
1 changed files with 85 additions and 10 deletions

View File

@ -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="<!-- playbook:agents:start -->"
AGENTS_BLOCK_END="<!-- playbook:agents: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."