- 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>
246 lines
7.6 KiB
Bash
Executable File
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
|