agent-home-kit/install.sh

50 lines
2.4 KiB
Bash
Executable file

#!/usr/bin/env bash
# agent-home-kit: развернуть дом агента в пустой каталог.
# ./install.sh <каталог> --agent <Имя> [--slug <латиница>] [--coord <проект координатора>] [--no-git]
set -euo pipefail
KIT="$(cd "$(dirname "$0")" && pwd)"
[ $# -ge 1 ] || { sed -n 2,3p "$0"; exit 2; }
DEST="$1"; shift
AGENT="Agent"; SLUG=""; COORD=""; GIT=1
while [ $# -gt 0 ]; do
case "$1" in
--agent) AGENT="$2"; shift 2 ;;
--slug) SLUG="$2"; shift 2 ;;
--coord) COORD="$2"; shift 2 ;;
--no-git) GIT=0; shift ;;
*) echo "неизвестный ключ: $1" >&2; exit 2 ;;
esac
done
SLUG="${SLUG:-$(printf '%s' "$AGENT" | tr 'A-Z' 'a-z' | tr -c 'a-z0-9-' '-' | sed 's/-*$//')}"
COORD="${COORD:-$AGENT}"
if [ -e "$DEST" ] && [ -n "$(ls -A "$DEST" 2>/dev/null)" ]; then
echo "каталог $DEST не пуст — дом разворачивается только в пустой" >&2; exit 1
fi
mkdir -p "$DEST"
DEST="$(cd "$DEST" && pwd)"
cp -r "$KIT/template/." "$DEST/"
mkdir -p "$DEST/bin" "$DEST/state/sessions" "$DEST/state/witness" "$DEST/state/dispatch" \
"$DEST/state/wake/ladder" "$DEST/journal/letters" "$DEST/private" "$DEST/var" "$DEST/work"
cp "$KIT"/bin/*.py "$DEST/bin/"
chmod +x "$DEST"/bin/*.py
python3 - "$KIT/kit.example.json" "$DEST/kit.json" "$AGENT" "$SLUG" "$COORD" <<'PY'
import json, sys
src, dst, agent, slug, coord = sys.argv[1:]
c = json.load(open(src, encoding="utf-8"))
c.update(agent_name=agent, agent_slug=slug, coord_project=coord, unit_prefix=slug + "-",
nodes={"local": {"ssh": "", "max_runs": 1}})
json.dump(c, open(dst, "w", encoding="utf-8"), ensure_ascii=False, indent=2)
PY
DATE="$(date +%F)"
find "$DEST" -type f \( -name '*.md' -o -name '*.json' \) -not -path "$DEST/kit.json" -print0 |
xargs -0 sed -i -e "s|{{AGENT_NAME}}|$AGENT|g" -e "s|{{HOME}}|$DEST|g" -e "s|{{CANON_PREFIX}}|home:|g" \
-e "s|{{COORD_PROJECT}}|$COORD|g" -e "s|{{DATE}}|$DATE|g"
printf 'private/\nvar/\nstate/wake/mirror/\n' > "$DEST/.gitignore"
chmod 700 "$DEST/private"
if [ "$GIT" = 1 ]; then
git -C "$DEST" init -q
git -C "$DEST" add -A
git -C "$DEST" -c user.name="$AGENT" -c user.email="$SLUG@localhost" commit -qm "дом $AGENT развёрнут из agent-home-kit"
fi
python3 "$DEST/bin/kit.py" check
echo "первое пробуждение: python3 $DEST/bin/wake-ladder.py next <метка-сессии> --project \"$COORD\""