45 lines
1017 B
Bash
45 lines
1017 B
Bash
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
MANIFEST="$ROOT_DIR/skills.yaml"
|
|
CACHE_DIR="$HOME/.ai-skills/registry"
|
|
LOCAL_SKILLS_DIR="$HOME/.ai-skills/skills"
|
|
|
|
if [[ ! -f "$MANIFEST" ]]; then
|
|
echo "Missing skills manifest: $MANIFEST" >&2
|
|
exit 1
|
|
fi
|
|
|
|
REGISTRY_URL="$(grep -E '^registry:' "$MANIFEST" | awk '{print $2}')"
|
|
if [[ -z "$REGISTRY_URL" ]]; then
|
|
echo "Missing registry in skills.yaml" >&2
|
|
exit 1
|
|
fi
|
|
|
|
mkdir -p "$CACHE_DIR" "$LOCAL_SKILLS_DIR"
|
|
|
|
if [[ -d "$CACHE_DIR/.git" ]]; then
|
|
git -C "$CACHE_DIR" pull --ff-only
|
|
else
|
|
git clone "$REGISTRY_URL" "$CACHE_DIR"
|
|
fi
|
|
|
|
SKILL_NAMES=$(awk '/^- name:/{print $2}' "$MANIFEST")
|
|
|
|
for SKILL in $SKILL_NAMES; do
|
|
SRC="$CACHE_DIR/skills/$SKILL"
|
|
DEST="$LOCAL_SKILLS_DIR/$SKILL"
|
|
|
|
if [[ ! -d "$SRC" ]]; then
|
|
echo "Missing skill in registry: $SKILL" >&2
|
|
exit 1
|
|
fi
|
|
|
|
rm -rf "$DEST"
|
|
cp -R "$SRC" "$DEST"
|
|
echo "Synced skill: $SKILL"
|
|
done
|
|
|
|
echo "Done. Restart your editor if skills do not appear."
|