mcpField
A
analytics-report

analytics-report

github.com/laurigates数据与数据库5951 次安装1 天前更新
代码仓库

关于 analytics-report

用于查看各项目中命令和技能使用情况的分析报告。可筛选全部数据、仅查看命令或技能,或查看指定项目的详情。

主要功能

  1. 01显示使用情况分析
  2. 02按命令或技能筛选
  3. 03查看指定条目详情

适用场景

  1. 01查看命令和技能的整体使用情况
  2. 02检查仅命令或仅技能的统计
  3. 03查看特定条目的分析数据

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/laurigates/claude-plugins --skill analytics-report

安装后在 Claude Code 中输入/analytics-report确认已加载。

详细介绍

/analytics:report

显示所有项目中命令和技能的使用情况分析。

上下文

检查是否存在分析数据:

if [[ -f ~/.claude-analytics/summary.json ]]; then
  echo "Analytics available"
  SUMMARY=$(cat ~/.claude-analytics/summary.json)
  TOTAL=$(echo "$SUMMARY" | jq -r '.total_invocations // 0')
  SINCE=$(echo "$SUMMARY" | jq -r '.tracking_since // "unknown"')
  echo "Total invocations: $TOTAL"
  echo "Tracking since: $SINCE"
else
  echo "No analytics data found. Start using commands to collect data."
  exit 0
fi

参数

  • $ARGS - 可选筛选条件:
    • 留空:显示所有分析数据
    • commands:仅显示命令
    • skills:仅显示技能
    • <name>:显示特定命令/技能的详细信息

执行

显示分析报告:

ANALYTICS_DIR="${HOME}/.claude-analytics"
SUMMARY_FILE="${ANALYTICS_DIR}/summary.json"
EVENTS_FILE="${ANALYTICS_DIR}/events.jsonl"

if [[ ! -f "${SUMMARY_FILE}" ]]; then
  echo "📊 No analytics data yet"
  echo ""
  echo "Analytics will be collected automatically as you use commands and skills."
  echo "Data is stored in: ${ANALYTICS_DIR}"
  exit 0
fi

SUMMARY=$(cat "${SUMMARY_FILE}")
FILTER="${ARGS:-all}"

echo "📊 Command & Skill Analytics"
echo ""

# Header info
TOTAL=$(echo "$SUMMARY" | jq -r '.total_invocations')
SINCE=$(echo "$SUMMARY" | jq -r '.tracking_since')
echo "Total invocations: ${TOTAL}"
echo "Tracking since: ${SINCE}"
echo ""

# Top used items
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "Most Used"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"

if [[ "${FILTER}" == "all" || "${FILTER}" == "commands" ]]; then
  echo ""
  echo "📝 Commands"
  echo "$SUMMARY" | jq -r '
    .items |
    to_entries |
    map(select(.value.type == "command")) |
    sort_by(-.value.count) |
    .[:10] |
    .[] |
    "  \(.value.count | tostring | (. + "       ")[:6]) \(.key)  (\(.value.success)✓ \(.value.failure)✗)"
  '
fi

if [[ "${FILTER}" == "all" || "${FILTER}" == "skills" ]]; then
  echo ""
  echo "🎯 Skills"
  echo "$SUMMARY" | jq -r '
    .items |
    to_entries |
    map(select(.value.type == "skill")) |
    sort_by(-.value.count) |
    .[:10] |
    .[] |
    "  \(.value.count | tostring | (. + "       ")[:6]) \(.key)  (\(.value.success)✓ \(.value.failure)✗)"
  '
fi

# Success rate
if [[ "${FILTER}" == "all" ]]; then
  echo ""
  echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
  echo "Success Rates"
  echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
  echo ""

  TOTAL_SUCCESS=$(echo "$SUMMARY" | jq '[.items[].success] | add // 0')
  TOTAL_FAILURE=$(echo "$SUMMARY" | jq '[.items[].failure] | add // 0')
  TOTAL_OPS=$((TOTAL_SUCCESS + TOTAL_FAILURE))

  if [[ $TOTAL_OPS -gt 0 ]]; then
    SUCCESS_RATE=$(echo "scale=1; ${TOTAL_SUCCESS} * 100 / ${TOTAL_OPS}" | bc)
    echo "  Overall: ${SUCCESS_RATE}% (${TOTAL_SUCCESS}✓ ${TOTAL_FAILURE}✗)"
  fi

  # Items with failures
  echo ""
  echo "  Items with failures:"
  echo "$SUMMARY" | jq -r '
    .items |
    to_entries |
    map(select(.value.failure > 0)) |
    sort_by(-.value.failure) |
    .[:5] |
    .[] |
    "    \(.key): \(.value.failure) failures"
  ' | while read -r line; do
    if [[ -n "$line" ]]; then
      echo "$line"
    else
      echo "    None!"
    fi
  done
fi

# Recent activity
if [[ "${FILTER}" == "all" ]]; then
  echo ""
  echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
  echo "Recent Activity (last 10)"
  echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
  echo ""

  if [[ -f "${EVENTS_FILE}" ]]; then
    tail -10 "${EVENTS_FILE}" | jq -r '
      "\(.timestamp | split("T")[0] + " " + (.timestamp | split("T")[1] | split(".")[0]))  \(.name)  " +
      (if .success then "✓" else "✗" end)
    '
  fi
fi

# Specific item details
if [[ "${FILTER}" != "all" && "${FILTER}" != "commands" && "${FILTER}" != "skills" ]]; then
  echo ""
  echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
  echo "Details: ${FILTER}"
  echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
  echo ""

  echo "$SUMMARY" | jq -r \
    --arg name "${FILTER}" \
    '
    if .items[$name] then
      .items[$name] |
      "Type: \(.type)\n" +
      "Total uses: \(.count)\n" +
      "Successful: \(.success)\n" +
      "Failed: \(.failure)\n" +
      "First used: \(.first_used)\n" +
      "Last used: \(.last_used)"
    else
      "No data found for: " + $name
    end
    '

  # Show recent invocations
  if [[ -f "${EVENTS_FILE}" ]]; then
    echo ""
    echo "Recent invocations:"
    grep "\"${FILTER}\"" "${EVENTS_FILE}" | tail -5 | jq -r '
      "  \(.timestamp)  " +
      (if .success then "✓" else "✗ \(.error)" end)
    '
  fi
fi

echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
echo "💡 Tips:"
echo "  • /analytics:report commands   - Show only commands"
echo "  • /analytics:report skills     - Show only skills"
echo "  • /analytics:unused            - Find never-used commands"
echo "  • /analytics:clear             - Reset analytics data"

后续操作

无。

评论

支持 Markdown