array("wevia-master", "wevia-autonomous", "wevia-chat", "weval-master"), "dashboards" => array("dashboard", "kpi", "visual-management", "analytics", "lean6sigma"), "agents" => array("agents-", "agent-", "blade-agent"), "blade_ops" => array("blade-", "ops-", "command-center", "cyber-monitor", "crons"), "products" => array("enterprise", "ethica", "medreach", "reachhcp", "pharma", "suite", "arsenal"), "crm_sales" => array("crm", "sales", "deal", "pipeline", "leads", "contacts"), "business" => array("erp", "business-", "value-", "vsm", "dmaic"), "ai" => array("ai-", "ai.html", "claude-", "deepseek", "anthropic", "gemini"), "admin_sec" => array("admin", "config", "settings", "secret", "credentials", "vault"), "wiki_docs" => array("wiki", "docs", "guide", "faq", "tutorial", "help"), ); $TAG_LEGACY = array("legacy", "-dead", "-old", "-v0", "-v1", "-v2", "-v3", "-test", "-bak"); function classify($basename) { global $PATTERNS; foreach ($PATTERNS as $cat => $pats) { foreach ($pats as $p) { if (stripos($basename, $p) !== false) return $cat; } } return "other"; } function is_legacy($basename) { global $TAG_LEGACY; foreach ($TAG_LEGACY as $t) if (stripos($basename, $t) !== false) return true; return false; } $files = glob("$ROOT/*.html") ?: array(); $catalog = array(); $stats = array("total" => 0, "legacy" => 0, "by_cat" => array()); foreach ($files as $f) { $base = basename($f); if (preg_match('/\.(gold|GOLD|bak|pre-|20\d{6})/', $base)) continue; $size = @filesize($f); $mtime = @filemtime($f); $legacy = is_legacy($base); $cat = $legacy ? "legacy" : classify($base); $catalog[] = array( "file" => $base, "url" => "/$base", "size_kb" => intval($size / 1024), "updated" => date("Y-m-d", $mtime), "category" => $cat, "legacy" => $legacy, ); $stats["total"]++; if ($legacy) $stats["legacy"]++; $stats["by_cat"][$cat] = ($stats["by_cat"][$cat] ?? 0) + 1; } // Read live KPIs from V83 for header $kpi = @json_decode(@file_get_contents("http://127.0.0.1/api/wevia-v83-business-kpi.php?action=summary"), true); if (!$kpi) { // fallback fetch with host $ch = curl_init("http://127.0.0.1/api/wevia-v83-business-kpi.php?action=summary"); curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 3, CURLOPT_HTTPHEADER => ["Host: weval-consulting.com"]]); $kpi = @json_decode(curl_exec($ch), true); curl_close($ch); } $tools_registry = @json_decode(@file_get_contents("$ROOT/api/wevia-tool-registry.json"), true); $nonreg = @json_decode(@file_get_contents("$ROOT/api/nonreg-latest.json"), true); $out = array( "ok" => true, "version" => "V94-wevaltech-catalog", "ts" => date("c"), "catalog" => $catalog, "stats" => $stats, "live_state" => array( "kpi_ok" => $kpi["summary"]["ok"] ?? 0, "kpi_warn" => $kpi["summary"]["warn"] ?? 0, "kpi_fail" => $kpi["summary"]["fail"] ?? 0, "completeness_pct" => $kpi["summary"]["data_completeness_pct"] ?? 0, "tools_total" => count($tools_registry["tools"] ?? array()), "tools_exec" => count(array_filter($tools_registry["tools"] ?? array(), function($t){ return !empty($t["exec"]); })), "l99_score" => $nonreg["score"] ?? 0, "l99_pass" => $nonreg["pass"] ?? 0, "l99_total" => $nonreg["total"] ?? 0, "l99_ts" => $nonreg["ts"] ?? "", ), ); echo json_encode($out, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);