Files
ai-proj-helper/sync-skills.sh
John Qiu 99881e268a refactor: 合并 claude-marketplace,重构目录结构为单一仓库
- 重命名 plugins/ → skills/,个人插件迁移到 skills-personal/(gitignore)
- 更新 generate-marketplace.py 支持 config 读取和 skills-personal 扫描
- 新增 claude-config.yaml(技能启用/禁用 + MCP 配置)
- 新增 init.sh(交互式 MCP 初始化,支持 stdio/SSE 模式)
- 新增 CLAUDE.md 项目说明
- 重写 README.md 反映新结构
- 删除过时脚本:PUSH.sh、generate-marketplace.sh、convert-skills.sh

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-14 11:11:59 +10:30

125 lines
3.3 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
# Sync local skills to marketplace plugins
# Usage: ./sync-skills.sh [marketplace-dir]
set -e
# Configuration
LOCAL_SKILLS_DIR="$HOME/.claude/skills"
MARKETPLACE_DIR="${1:-$(dirname "$0")}"
PLUGINS_DIR="$MARKETPLACE_DIR/skills"
echo "🔄 Syncing skills to marketplace..."
echo "Source: $LOCAL_SKILLS_DIR"
echo "Target: $PLUGINS_DIR"
echo ""
# Check if local skills directory exists
if [ ! -d "$LOCAL_SKILLS_DIR" ]; then
echo "❌ Error: Local skills directory not found: $LOCAL_SKILLS_DIR"
exit 1
fi
# Track changes
new_count=0
updated_count=0
unchanged_count=0
# Loop through each local skill
for skill_dir in "$LOCAL_SKILLS_DIR"/*; do
# Skip non-directories and special files
if [ ! -d "$skill_dir" ] || [ "$(basename "$skill_dir")" = ".git" ]; then
continue
fi
# Skip registry.yaml if it exists as a directory
if [ "$(basename "$skill_dir")" = "registry.yaml" ]; then
continue
fi
skill_name=$(basename "$skill_dir")
plugin_name="${skill_name}-plugin"
plugin_dir="$PLUGINS_DIR/$plugin_name"
# Check if SKILL.md exists
if [ ! -f "$skill_dir/SKILL.md" ]; then
echo "⚠️ Skipping $skill_name (no SKILL.md)"
continue
fi
# Check if plugin already exists
if [ -d "$plugin_dir" ]; then
# Compare SKILL.md files
if diff -q "$skill_dir/SKILL.md" "$plugin_dir/skills/SKILL.md" > /dev/null 2>&1; then
echo "$skill_name (unchanged)"
((unchanged_count++))
else
echo "📝 $skill_name (updated)"
cp "$skill_dir/SKILL.md" "$plugin_dir/skills/"
((updated_count++))
fi
else
echo " $skill_name (new)"
# Create plugin directory structure
mkdir -p "$plugin_dir/.claude-plugin"
mkdir -p "$plugin_dir/skills"
# Copy SKILL.md
cp "$skill_dir/SKILL.md" "$plugin_dir/skills/"
# Extract description from SKILL.md frontmatter
description=$(grep "^description:" "$skill_dir/SKILL.md" | sed 's/^description: *//' | tr -d '\n\r')
if [ -z "$description" ]; then
description="Plugin for $skill_name"
fi
# Create plugin.json
cat > "$plugin_dir/.claude-plugin/plugin.json" << EOF
{
"name": "$plugin_name",
"description": "$description",
"version": "1.0.0",
"author": {
"name": "qiudl"
}
}
EOF
((new_count++))
fi
done
echo ""
echo "📊 Summary:"
echo " New: $new_count"
echo " Updated: $updated_count"
echo " Unchanged: $unchanged_count"
echo ""
# Regenerate marketplace.json if there are changes
if [ $new_count -gt 0 ] || [ $updated_count -gt 0 ]; then
echo "🔄 Regenerating marketplace.json..."
cd "$MARKETPLACE_DIR"
# Run the generate script if it exists
if [ -f "generate-marketplace.py" ]; then
python3 generate-marketplace.py
else
echo "⚠️ Warning: generate-marketplace.py not found, skipping marketplace.json regeneration"
fi
echo ""
echo "✅ Sync complete! Changes ready to commit."
echo ""
echo "Next steps:"
echo " cd $MARKETPLACE_DIR"
echo " git status"
echo " git add ."
echo " git commit -m 'Sync skills from local'"
echo " git push"
else
echo "✅ All plugins are up to date!"
fi