feat: add SKILL.md edit hook — warns to bump version in marketplace.json
Two hooks now active for marketplace-dev users: 1. Edit marketplace.json → auto-validate schema 2. Edit any SKILL.md → warn if version bump needed or skill unregistered Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -971,6 +971,15 @@
|
||||
"command": "${CLAUDE_PLUGIN_ROOT}/scripts/post_edit_validate.sh"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"matcher": "Write|Edit",
|
||||
"hooks": [
|
||||
{
|
||||
"type": "command",
|
||||
"command": "${CLAUDE_PLUGIN_ROOT}/scripts/post_edit_sync_check.sh"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
64
marketplace-dev/scripts/post_edit_sync_check.sh
Executable file
64
marketplace-dev/scripts/post_edit_sync_check.sh
Executable file
@@ -0,0 +1,64 @@
|
||||
#!/usr/bin/env bash
|
||||
# PostToolUse hook: warn when SKILL.md is edited but marketplace.json version not bumped
|
||||
# Detects skill content changes that need a corresponding version bump in marketplace.json
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
INPUT=$(cat)
|
||||
|
||||
FILE_PATH=$(echo "$INPUT" | python3 -c "
|
||||
import json, sys
|
||||
try:
|
||||
data = json.load(sys.stdin)
|
||||
print(data.get('tool_input', {}).get('file_path', ''))
|
||||
except:
|
||||
print('')
|
||||
" 2>/dev/null)
|
||||
|
||||
# Only care about SKILL.md edits
|
||||
[[ "$FILE_PATH" != *"SKILL.md"* ]] && exit 0
|
||||
|
||||
# Find the skill name from path (e.g., /repo/skills/dbs-hook/SKILL.md → dbs-hook)
|
||||
SKILL_DIR=$(dirname "$FILE_PATH")
|
||||
SKILL_NAME=$(basename "$SKILL_DIR")
|
||||
|
||||
# Search for marketplace.json upward from the edited file
|
||||
SEARCH_DIR="$SKILL_DIR"
|
||||
MARKETPLACE_JSON=""
|
||||
while [[ "$SEARCH_DIR" != "/" ]]; do
|
||||
if [[ -f "$SEARCH_DIR/.claude-plugin/marketplace.json" ]]; then
|
||||
MARKETPLACE_JSON="$SEARCH_DIR/.claude-plugin/marketplace.json"
|
||||
break
|
||||
fi
|
||||
SEARCH_DIR=$(dirname "$SEARCH_DIR")
|
||||
done
|
||||
|
||||
[[ -z "$MARKETPLACE_JSON" ]] && exit 0
|
||||
|
||||
# Check if this skill is registered and if version needs bumping
|
||||
python3 -c "
|
||||
import json, sys
|
||||
|
||||
with open('$MARKETPLACE_JSON') as f:
|
||||
data = json.load(f)
|
||||
|
||||
skill_name = '$SKILL_NAME'
|
||||
found = False
|
||||
for p in data.get('plugins', []):
|
||||
skills = p.get('skills', [])
|
||||
for s in skills:
|
||||
if s.rstrip('/').split('/')[-1] == skill_name:
|
||||
found = True
|
||||
version = p.get('version', 'unknown')
|
||||
print(json.dumps({
|
||||
'result': f'SKILL.md for \"{skill_name}\" was modified. Remember to bump its version in marketplace.json (currently {version}). Users on the old version won\\'t receive this update otherwise.'
|
||||
}))
|
||||
break
|
||||
if found:
|
||||
break
|
||||
|
||||
if not found:
|
||||
print(json.dumps({
|
||||
'result': f'SKILL.md for \"{skill_name}\" was modified but this skill is NOT registered in marketplace.json. Add it if you want it installable via plugin marketplace.'
|
||||
}))
|
||||
" 2>/dev/null
|
||||
Reference in New Issue
Block a user