155 lines
5.1 KiB
Bash
Executable File
155 lines
5.1 KiB
Bash
Executable File
#!/bin/bash
|
|
# ============================================
|
|
# GitHub Intelligence Monitor v1.0
|
|
# 功能:主动监控GitHub榜单,寻找进化机会
|
|
# 监控范围:Trending + AI/Agent + 自动化 + Skills
|
|
# ============================================
|
|
|
|
set -e
|
|
|
|
PROXY="http://192.168.0.66:7890"
|
|
OUT_DIR="/root/.openclaw/workspace/github-intel"
|
|
REPORT="$OUT_DIR/report-$(date '+%Y%m%d').md"
|
|
PREVIOUS="$OUT_DIR/previous-projects.txt"
|
|
CURRENT="$OUT_DIR/current-projects.txt"
|
|
|
|
# 颜色
|
|
RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'; BLUE='\033[0;34m'; NC='\033[0m'
|
|
|
|
log() { echo -e "${BLUE}[Intel]${NC} $(date '+%H:%M:%S') $1"; }
|
|
warn() { echo -e "${YELLOW}[WARN]${NC} $(date '+%H:%M:%S') $1"; }
|
|
info() { echo -e "${GREEN}[INFO]${NC} $(date '+%H:%M:%S') $1"; }
|
|
|
|
mkdir -p "$OUT_DIR"
|
|
|
|
# 1. 获取Trending页面
|
|
fetch_trending() {
|
|
log "正在获取 GitHub Trending..."
|
|
local content=$(curl -s --proxy "$PROXY" -A "Mozilla/5.0" "https://github.com/trending" | grep -oP 'href="/[a-zA-Z0-9_-]+/[a-zA-Z0-9_.-]+"' | grep -oP '(?<="\/)[^"]+' | grep -v 'trending\|developers\|sponsors\|apps' | head -30)
|
|
echo "$content" > "$CURRENT"
|
|
}
|
|
|
|
# 2. 对比差异(新增项目)
|
|
find_new_projects() {
|
|
if [ ! -f "$PREVIOUS" ]; then
|
|
touch "$PREVIOUS"
|
|
log "首次运行,建立历史数据"
|
|
return
|
|
fi
|
|
|
|
# 找出新增项目
|
|
comm -13 <(sort "$PREVIOUS") <(sort "$CURRENT") > "$OUT_DIR/new-projects.txt" 2>/dev/null || true
|
|
local count=$(wc -l < "$OUT_DIR/new-projects.txt" 2>/dev/null | grep -oP '^\d+' || echo 0)
|
|
log "发现 $count 个新项目"
|
|
}
|
|
|
|
# 3. 获取项目详情
|
|
get_project_details() {
|
|
local project="$1"
|
|
local api_url="https://api.github.com/repos/$project"
|
|
curl -s --proxy "$PROXY" -A "Mozilla/5.0" "$api_url" 2>/dev/null || echo "{}"
|
|
}
|
|
|
|
# 4. 评估进化价值
|
|
evaluate_evolution() {
|
|
local project="$1"
|
|
local details=$(get_project_details "$project")
|
|
local stars=$(echo "$details" | grep -oP '"stargazers_count":\d+' | head -1 | grep -oP '\d+' || echo 0)
|
|
local desc=$(echo "$details" | grep -oP '"description":"[^"]*"' | head -1 | sed 's/"description":"//;s/"$//' || echo "")
|
|
local lang=$(echo "$details" | grep -oP '"language":"[^"]*"' | head -1 | sed 's/"language":"//;s/"$//' || echo "")
|
|
|
|
# 进化关键词
|
|
local keywords="agent|skill|automation|browser|playwright|puppeteer|cli|tool|openclaw|claude|gpt|llm|ai|copilot"
|
|
local is_evolution=$(echo "$project $desc" | grep -iE "$keywords" || echo "")
|
|
|
|
if [ -n "$is_evolution" ] && [ "$stars" -gt 500 ]; then
|
|
echo "⭐ EVOLUTION_CANDIDATE: $project (⭐$stars) - $desc"
|
|
echo " 语言: $lang"
|
|
echo " 链接: https://github.com/$project"
|
|
echo ""
|
|
fi
|
|
}
|
|
|
|
# 5. 生成报告
|
|
generate_report() {
|
|
local new_count=$(wc -l < "$OUT_DIR/new-projects.txt" | awk '{print $1}' 2>/dev/null || echo 0)
|
|
|
|
{
|
|
echo "# GitHub Intelligence Report"
|
|
echo "生成时间: $(date '+%Y-%m-%d %H:%M:%S')"
|
|
echo ""
|
|
echo "## 新增项目 ($new_count 个)"
|
|
echo ""
|
|
|
|
if [ -f "$OUT_DIR/new-projects.txt" ]; then
|
|
while IFS= read -r project; do
|
|
[ -z "$project" ] && continue
|
|
evaluate_evolution "$project"
|
|
done < "$OUT_DIR/new-projects.txt"
|
|
fi
|
|
|
|
echo ""
|
|
echo "## Trending Top 10"
|
|
echo ""
|
|
if [ -f "$CURRENT" ]; then
|
|
head -10 "$CURRENT" | while read -r project; do
|
|
[ -z "$project" ] && continue
|
|
evaluate_evolution "$project"
|
|
done
|
|
fi
|
|
|
|
echo ""
|
|
echo "## 进化建议"
|
|
echo ""
|
|
|
|
# 分析新增和热门项目中可能的进化机会
|
|
local candidates=$(grep -c "EVOLUTION_CANDIDATE" "$OUT_DIR/evolution-candidates.txt" 2>/dev/null || echo 0)
|
|
if [ "$candidates" -gt 0 ]; then
|
|
echo "发现 $candidates 个潜在进化目标,详见上方列表"
|
|
else
|
|
echo "本期无重大进化机会"
|
|
fi
|
|
} > "$REPORT"
|
|
|
|
info "报告已生成: $REPORT"
|
|
}
|
|
|
|
# 主流程
|
|
main() {
|
|
log "========== GitHub Intelligence Monitor =========="
|
|
|
|
fetch_trending
|
|
find_new_projects
|
|
|
|
# 生成候选列表
|
|
rm -f "$OUT_DIR/evolution-candidates.txt"
|
|
touch "$OUT_DIR/evolution-candidates.txt"
|
|
|
|
if [ -f "$CURRENT" ]; then
|
|
while IFS= read -r project; do
|
|
[ -z "$project" ] && continue
|
|
result=$(evaluate_evolution "$project")
|
|
if echo "$result" | grep -q "EVOLUTION_CANDIDATE"; then
|
|
echo "$result" >> "$OUT_DIR/evolution-candidates.txt"
|
|
fi
|
|
done < "$CURRENT"
|
|
fi
|
|
|
|
generate_report
|
|
|
|
# 更新历史
|
|
cp "$CURRENT" "$PREVIOUS"
|
|
|
|
log "========== 监控完成 =========="
|
|
|
|
# 输出摘要
|
|
local candidate_count=$(wc -l < "$OUT_DIR/evolution-candidates.txt" 2>/dev/null || echo 0)
|
|
if [ "$candidate_count" -gt 0 ]; then
|
|
echo ""
|
|
warn "发现 $candidate_count 个进化候选!"
|
|
cat "$OUT_DIR/evolution-candidates.txt"
|
|
fi
|
|
}
|
|
|
|
main "$@"
|