add .mandatory, update learn.sh and sync-skills.sh to use it
This commit is contained in:
2
.mandatory
Normal file
2
.mandatory
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
git-hangman-lab
|
||||||
|
keycloak-hangman-lab
|
||||||
31
learn.sh
31
learn.sh
@@ -9,15 +9,28 @@ fi
|
|||||||
SKILL_LIST="${AGENT_WORKSPACE}/.skill-list"
|
SKILL_LIST="${AGENT_WORKSPACE}/.skill-list"
|
||||||
TARGET_DIR="${AGENT_WORKSPACE}/skills"
|
TARGET_DIR="${AGENT_WORKSPACE}/skills"
|
||||||
CLAW_DIR="$(cd "$(dirname "$0")" && pwd)"
|
CLAW_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||||||
|
MANDATORY_FILE="${CLAW_DIR}/.mandatory"
|
||||||
if [[ ! -f "$SKILL_LIST" ]]; then
|
|
||||||
echo "Error: .skill-list not found at $SKILL_LIST"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
mkdir -p "$TARGET_DIR"
|
mkdir -p "$TARGET_DIR"
|
||||||
|
|
||||||
while IFS= read -r skill_name || [[ -n "$skill_name" ]]; do
|
# First: install mandatory skills from .mandatory (one per line)
|
||||||
|
if [[ -f "$MANDATORY_FILE" ]]; then
|
||||||
|
while IFS= read -r skill_name || [[ -n "$skill_name" ]]; do
|
||||||
|
[[ -z "$skill_name" || "$skill_name" == \#* ]] && continue
|
||||||
|
|
||||||
|
skill_dir="${CLAW_DIR}/${skill_name}"
|
||||||
|
if [[ -d "$skill_dir" ]]; then
|
||||||
|
echo "Installing (mandatory): $skill_name"
|
||||||
|
cp -r "$skill_dir" "${TARGET_DIR}/"
|
||||||
|
else
|
||||||
|
echo "Skipping (not found): $skill_name"
|
||||||
|
fi
|
||||||
|
done < "$MANDATORY_FILE"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Then: install skills from .skill-list
|
||||||
|
if [[ -f "$SKILL_LIST" ]]; then
|
||||||
|
while IFS= read -r skill_name || [[ -n "$skill_name" ]]; do
|
||||||
[[ -z "$skill_name" || "$skill_name" == \#* ]] && continue
|
[[ -z "$skill_name" || "$skill_name" == \#* ]] && continue
|
||||||
|
|
||||||
skill_dir="${CLAW_DIR}/${skill_name}"
|
skill_dir="${CLAW_DIR}/${skill_name}"
|
||||||
@@ -27,6 +40,10 @@ while IFS= read -r skill_name || [[ -n "$skill_name" ]]; do
|
|||||||
else
|
else
|
||||||
echo "Skipping (not found): $skill_name"
|
echo "Skipping (not found): $skill_name"
|
||||||
fi
|
fi
|
||||||
done < "$SKILL_LIST"
|
done < "$SKILL_LIST"
|
||||||
|
else
|
||||||
|
echo "Error: .skill-list not found at $SKILL_LIST"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
echo "Done."
|
echo "Done."
|
||||||
@@ -1,19 +1,27 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
# Sync all skill folders from ClawSkills to ~/.openclaw/skills
|
# Sync skills listed in .mandatory from ClawSkills to ~/.openclaw/skills
|
||||||
|
|
||||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
SKILLS_DIR="$HOME/.openclaw/skills"
|
SKILLS_DIR="$HOME/.openclaw/skills"
|
||||||
|
MANDATORY_FILE="${SCRIPT_DIR}/.mandatory"
|
||||||
|
|
||||||
mkdir -p "$SKILLS_DIR"
|
mkdir -p "$SKILLS_DIR"
|
||||||
|
|
||||||
for folder in "$SCRIPT_DIR"/*/; do
|
if [[ ! -f "$MANDATORY_FILE" ]]; then
|
||||||
folder_name=$(basename "$folder")
|
echo "Error: .mandatory not found at $MANDATORY_FILE"
|
||||||
# Skip this script itself
|
exit 1
|
||||||
if [[ "$folder_name" == "sync-skills.sh" ]]; then
|
fi
|
||||||
continue
|
|
||||||
|
while IFS= read -r skill_name || [[ -n "$skill_name" ]]; do
|
||||||
|
[[ -z "$skill_name" || "$skill_name" == \#* ]] && continue
|
||||||
|
|
||||||
|
skill_dir="${SCRIPT_DIR}/${skill_name}"
|
||||||
|
if [[ -d "$skill_dir" ]]; then
|
||||||
|
echo "Copying $skill_name to $SKILLS_DIR..."
|
||||||
|
cp -rf "$skill_dir" "$SKILLS_DIR/"
|
||||||
|
else
|
||||||
|
echo "Skipping (not found): $skill_name"
|
||||||
fi
|
fi
|
||||||
echo "Copying $folder_name to $SKILLS_DIR..."
|
done < "$MANDATORY_FILE"
|
||||||
cp -rf "$folder" "$SKILLS_DIR/"
|
|
||||||
done
|
|
||||||
|
|
||||||
echo "Done!"
|
echo "Done!"
|
||||||
|
|||||||
Reference in New Issue
Block a user