#!/bin/bash # Cold-cache benchmark — @claude-flow/cli@latest vs @claude-flow/cli-core@alpha # # Measures the wall-time gap from spawnSync('npx', [pkg, 'memory', 'list']) # in a fresh npm cache (the user-visible cost when plugin skills spawn the # CLI for the first time on a developer's machine). # # Safety: redirects npm cache to a temp dir via NPM_CONFIG_CACHE so this # never wipes the user's ~/.npm/_npx (per project memory feedback). # # Usage: bash v3/@claude-flow/cli-core/scripts/cold-cache-bench.sh # Result: prints a markdown table with min/mean/max per condition. set -u RUNS=${RUNS:-3} BENCH_CACHE=$(mktemp -d -t npx-bench-cache.XXXXXX) trap "rm -rf $BENCH_CACHE" EXIT TIMEFORMAT='%R' time_pkg () { local pkg="$1" local t { t=$( { time NPM_CONFIG_CACHE="$BENCH_CACHE" npx -y "$pkg" memory list --limit 1 >/dev/null 2>&1; } 2>&1 ); } 2>/dev/null echo "$t" } echo "## Cold-cache benchmark — $(date -u +%Y-%m-%dT%H:%M:%SZ)" echo "Workload: npx -y memory list --limit 1" echo "Cache: $BENCH_CACHE (redirected, not ~/.npm)" echo "Runs: $RUNS per condition" echo "" declare -a CC CW KC KW for i in $(seq 1 $RUNS); do rm -rf "$BENCH_CACHE" v=$(time_pkg "@claude-flow/cli@latest"); echo "cli cold #$i: ${v}s"; CC+=("$v") v=$(time_pkg "@claude-flow/cli@latest"); echo "cli warm #$i: ${v}s"; CW+=("$v") done for i in $(seq 1 $RUNS); do rm -rf "$BENCH_CACHE" v=$(time_pkg "@claude-flow/cli-core@alpha"); echo "core cold #$i: ${v}s"; KC+=("$v") v=$(time_pkg "@claude-flow/cli-core@alpha"); echo "core warm #$i: ${v}s"; KW+=("$v") done echo "" python3 - <