scripts: kb-audit + propose — еженедельный drift-детектор для inventory
- kb-audit.py: сравнивает живой pct list/qm list с proxmox-inventory.md → audit/YYYY-MM-DD-drift.md (только факты, без LLM) - kb-audit-propose.sh: прогоняет drift через Opus (Max OAuth на code-server) → audit/YYYY-MM-DD-proposed.md (patch на ревью) - scripts/README.md: архитектура и cron-конфиг Рекомендуемый cron на code-server: 0 6 * * 0 (воскр 06:00) Правки не применяются автоматом — только ревью + ручной git apply.
This commit is contained in:
71
scripts/kb-audit-propose.sh
Normal file
71
scripts/kb-audit-propose.sh
Normal file
@@ -0,0 +1,71 @@
|
||||
#!/bin/bash
|
||||
# kb-audit-propose — прогоняет последний drift-отчёт через Claude Opus,
|
||||
# получает предложенные правки в inventory-файл.
|
||||
# Запускать ПОСЛЕ kb-audit.py.
|
||||
# Работает на code-server (где есть claude CLI с Max подпиской).
|
||||
|
||||
set -u
|
||||
VAULT="$(cd "$(dirname "$0")/.." && pwd)"
|
||||
DATE=$(date +%Y-%m-%d)
|
||||
DRIFT="$VAULT/audit/${DATE}-drift.md"
|
||||
OUT="$VAULT/audit/${DATE}-proposed.md"
|
||||
|
||||
if [ ! -f "$DRIFT" ]; then
|
||||
echo "drift-отчёт не найден: $DRIFT. Запусти сначала kb-audit.py" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# если уже есть сегодняшний proposed — skip (не дёргаем Opus попусту)
|
||||
if [ -f "$OUT" ] && [ "$OUT" -nt "$DRIFT" ]; then
|
||||
echo "proposed уже свежее drift: $OUT" >&2
|
||||
exit 0
|
||||
fi
|
||||
|
||||
cd "$VAULT" || exit 1
|
||||
|
||||
PROMPT="Ниже: а) отчёт drift-аудита инфраструктуры Proxmox, б) актуальный файл inventory.
|
||||
Задача: предложи конкретные правки в projects/dttb/proxmox-inventory.md чтобы устранить drift.
|
||||
НЕ правь файл сам. Выдай:
|
||||
1. Краткое резюме (1-3 предложения) что изменилось
|
||||
2. Список конкретных блоков для добавления/удаления/изменения (формат markdown diff блоков с пояснением)
|
||||
3. Предупреждения если что-то неоднозначное
|
||||
|
||||
Не выдумывай данных которых нет в drift-отчёте. Используй factual IP/hostname только из отчёта."
|
||||
|
||||
{
|
||||
echo "$PROMPT"
|
||||
echo ""
|
||||
echo "---"
|
||||
echo "## DRIFT-ОТЧЁТ"
|
||||
echo ""
|
||||
cat "$DRIFT"
|
||||
echo ""
|
||||
echo "---"
|
||||
echo "## ТЕКУЩИЙ INVENTORY"
|
||||
echo ""
|
||||
cat "$VAULT/projects/dttb/proxmox-inventory.md"
|
||||
} | claude -p --permission-mode plan > "$OUT.tmp" 2>&1
|
||||
|
||||
if [ -s "$OUT.tmp" ]; then
|
||||
{
|
||||
echo "---"
|
||||
echo "date: $DATE"
|
||||
echo "type: audit-proposed"
|
||||
echo "source: kb-audit-propose.sh (Opus 4.7)"
|
||||
echo "tags: [audit, proposed, inventory]"
|
||||
echo "---"
|
||||
echo ""
|
||||
echo "# Предложенные правки inventory — $DATE"
|
||||
echo ""
|
||||
echo "Сгенерировано Claude Opus на основе [[${DATE}-drift|drift-отчёта]]."
|
||||
echo "**Правки НЕ применены.** Ревью — ты. Apply — вручную."
|
||||
echo ""
|
||||
cat "$OUT.tmp"
|
||||
} > "$OUT"
|
||||
rm "$OUT.tmp"
|
||||
echo "proposed saved: $OUT"
|
||||
else
|
||||
echo "Claude вернул пустой ответ" >&2
|
||||
rm -f "$OUT.tmp"
|
||||
exit 2
|
||||
fi
|
||||
Reference in New Issue
Block a user