Files
CrmClinicas/.claude/helpers/sync-v3-metrics.sh
Consultoria AS 79b5d86325 feat: CRM Clinicas SaaS - MVP completo
- Auth: Login/Register con creacion de clinica
- Dashboard: KPIs reales, graficas recharts
- Pacientes: CRUD completo con busqueda
- Agenda: FullCalendar, drag-and-drop, vista recepcion
- Expediente: Notas SOAP, signos vitales, CIE-10
- Facturacion: Facturas con IVA, campos CFDI SAT
- Inventario: Productos, stock, movimientos, alertas
- Configuracion: Clinica, equipo, catalogo servicios
- Supabase self-hosted: 18 tablas con RLS multi-tenant
- Docker + Nginx para produccion

Co-Authored-By: claude-flow <ruv@ruv.net>
2026-03-03 07:04:14 +00:00

246 lines
7.6 KiB
Bash
Executable File

#!/bin/bash
# Claude Flow V3 - Auto-sync Metrics from Actual Implementation
# Scans the V3 codebase and updates metrics to reflect reality
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
V3_DIR="$PROJECT_ROOT/v3"
METRICS_DIR="$PROJECT_ROOT/.claude-flow/metrics"
SECURITY_DIR="$PROJECT_ROOT/.claude-flow/security"
# Ensure directories exist
mkdir -p "$METRICS_DIR" "$SECURITY_DIR"
# Colors
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
CYAN='\033[0;36m'
RESET='\033[0m'
log() {
echo -e "${CYAN}[sync] $1${RESET}"
}
# Count V3 modules
count_modules() {
local count=0
local modules=()
if [ -d "$V3_DIR/@claude-flow" ]; then
for dir in "$V3_DIR/@claude-flow"/*/; do
if [ -d "$dir" ]; then
name=$(basename "$dir")
modules+=("$name")
((count++))
fi
done
fi
echo "$count"
}
# Calculate module completion percentage
calculate_module_progress() {
local module="$1"
local module_dir="$V3_DIR/@claude-flow/$module"
if [ ! -d "$module_dir" ]; then
echo "0"
return
fi
local has_src=$([ -d "$module_dir/src" ] && echo 1 || echo 0)
local has_index=$([ -f "$module_dir/src/index.ts" ] || [ -f "$module_dir/index.ts" ] && echo 1 || echo 0)
local has_tests=$([ -d "$module_dir/__tests__" ] || [ -d "$module_dir/tests" ] && echo 1 || echo 0)
local has_package=$([ -f "$module_dir/package.json" ] && echo 1 || echo 0)
local file_count=$(find "$module_dir" -name "*.ts" -type f 2>/dev/null | wc -l)
# Calculate progress based on structure and content
local progress=0
[ "$has_src" -eq 1 ] && ((progress += 20))
[ "$has_index" -eq 1 ] && ((progress += 20))
[ "$has_tests" -eq 1 ] && ((progress += 20))
[ "$has_package" -eq 1 ] && ((progress += 10))
[ "$file_count" -gt 5 ] && ((progress += 15))
[ "$file_count" -gt 10 ] && ((progress += 15))
# Cap at 100
[ "$progress" -gt 100 ] && progress=100
echo "$progress"
}
# Check security CVE status
check_security_status() {
local cves_fixed=0
local security_dir="$V3_DIR/@claude-flow/security/src"
# CVE-1: Input validation - check for input-validator.ts
if [ -f "$security_dir/input-validator.ts" ]; then
lines=$(wc -l < "$security_dir/input-validator.ts" 2>/dev/null || echo 0)
[ "$lines" -gt 100 ] && ((cves_fixed++))
fi
# CVE-2: Path traversal - check for path-validator.ts
if [ -f "$security_dir/path-validator.ts" ]; then
lines=$(wc -l < "$security_dir/path-validator.ts" 2>/dev/null || echo 0)
[ "$lines" -gt 100 ] && ((cves_fixed++))
fi
# CVE-3: Command injection - check for safe-executor.ts
if [ -f "$security_dir/safe-executor.ts" ]; then
lines=$(wc -l < "$security_dir/safe-executor.ts" 2>/dev/null || echo 0)
[ "$lines" -gt 100 ] && ((cves_fixed++))
fi
echo "$cves_fixed"
}
# Calculate overall DDD progress
calculate_ddd_progress() {
local total_progress=0
local module_count=0
for dir in "$V3_DIR/@claude-flow"/*/; do
if [ -d "$dir" ]; then
name=$(basename "$dir")
progress=$(calculate_module_progress "$name")
((total_progress += progress))
((module_count++))
fi
done
if [ "$module_count" -gt 0 ]; then
echo $((total_progress / module_count))
else
echo 0
fi
}
# Count total lines of code
count_total_lines() {
find "$V3_DIR" -name "*.ts" -type f -exec cat {} \; 2>/dev/null | wc -l
}
# Count total files
count_total_files() {
find "$V3_DIR" -name "*.ts" -type f 2>/dev/null | wc -l
}
# Check domains (map modules to domains)
count_domains() {
local domains=0
# Map @claude-flow modules to DDD domains
[ -d "$V3_DIR/@claude-flow/swarm" ] && ((domains++)) # task-management
[ -d "$V3_DIR/@claude-flow/memory" ] && ((domains++)) # session-management
[ -d "$V3_DIR/@claude-flow/performance" ] && ((domains++)) # health-monitoring
[ -d "$V3_DIR/@claude-flow/cli" ] && ((domains++)) # lifecycle-management
[ -d "$V3_DIR/@claude-flow/integration" ] && ((domains++)) # event-coordination
echo "$domains"
}
# Main sync function
sync_metrics() {
log "Scanning V3 implementation..."
local modules=$(count_modules)
local domains=$(count_domains)
local ddd_progress=$(calculate_ddd_progress)
local cves_fixed=$(check_security_status)
local total_files=$(count_total_files)
local total_lines=$(count_total_lines)
local timestamp=$(date -Iseconds)
# Determine security status
local security_status="PENDING"
if [ "$cves_fixed" -eq 3 ]; then
security_status="CLEAN"
elif [ "$cves_fixed" -gt 0 ]; then
security_status="IN_PROGRESS"
fi
log "Found: $modules modules, $domains domains, $total_files files, $total_lines lines"
log "DDD Progress: ${ddd_progress}%, Security: $cves_fixed/3 CVEs fixed"
# Update v3-progress.json
cat > "$METRICS_DIR/v3-progress.json" << EOF
{
"domains": {
"completed": $domains,
"total": 5,
"list": [
{"name": "task-management", "status": "$([ -d "$V3_DIR/@claude-flow/swarm" ] && echo "complete" || echo "pending")", "module": "swarm"},
{"name": "session-management", "status": "$([ -d "$V3_DIR/@claude-flow/memory" ] && echo "complete" || echo "pending")", "module": "memory"},
{"name": "health-monitoring", "status": "$([ -d "$V3_DIR/@claude-flow/performance" ] && echo "complete" || echo "pending")", "module": "performance"},
{"name": "lifecycle-management", "status": "$([ -d "$V3_DIR/@claude-flow/cli" ] && echo "complete" || echo "pending")", "module": "cli"},
{"name": "event-coordination", "status": "$([ -d "$V3_DIR/@claude-flow/integration" ] && echo "complete" || echo "pending")", "module": "integration"}
]
},
"ddd": {
"progress": $ddd_progress,
"modules": $modules,
"totalFiles": $total_files,
"totalLines": $total_lines
},
"swarm": {
"activeAgents": 0,
"totalAgents": 15,
"topology": "hierarchical-mesh",
"coordination": "$([ -d "$V3_DIR/@claude-flow/swarm" ] && echo "ready" || echo "pending")"
},
"lastUpdated": "$timestamp",
"autoSynced": true
}
EOF
# Update security audit status
cat > "$SECURITY_DIR/audit-status.json" << EOF
{
"status": "$security_status",
"cvesFixed": $cves_fixed,
"totalCves": 3,
"criticalVulnerabilities": [
{
"id": "CVE-1",
"description": "Input validation bypass",
"severity": "critical",
"status": "$([ -f "$V3_DIR/@claude-flow/security/src/input-validator.ts" ] && echo "fixed" || echo "pending")",
"fixedBy": "input-validator.ts"
},
{
"id": "CVE-2",
"description": "Path traversal vulnerability",
"severity": "critical",
"status": "$([ -f "$V3_DIR/@claude-flow/security/src/path-validator.ts" ] && echo "fixed" || echo "pending")",
"fixedBy": "path-validator.ts"
},
{
"id": "CVE-3",
"description": "Command injection vulnerability",
"severity": "critical",
"status": "$([ -f "$V3_DIR/@claude-flow/security/src/safe-executor.ts" ] && echo "fixed" || echo "pending")",
"fixedBy": "safe-executor.ts"
}
],
"lastAudit": "$timestamp",
"autoSynced": true
}
EOF
log "Metrics synced successfully!"
# Output summary for statusline
echo ""
echo -e "${GREEN}V3 Implementation Status:${RESET}"
echo " Modules: $modules"
echo " Domains: $domains/5"
echo " DDD Progress: ${ddd_progress}%"
echo " Security: $cves_fixed/3 CVEs fixed ($security_status)"
echo " Codebase: $total_files files, $total_lines lines"
}
# Run sync
sync_metrics