diff --git a/api/playwright-results/_baseline-7sigma-v2/enterprise-model-baseline.png b/api/playwright-results/_baseline-7sigma-v2/enterprise-model-baseline.png index f0283353c..704836b6a 100644 Binary files a/api/playwright-results/_baseline-7sigma-v2/enterprise-model-baseline.png and b/api/playwright-results/_baseline-7sigma-v2/enterprise-model-baseline.png differ diff --git a/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/agent-roi-simulator-current.png b/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/agent-roi-simulator-current.png new file mode 100644 index 000000000..710b81895 Binary files /dev/null and b/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/agent-roi-simulator-current.png differ diff --git a/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/agent-roi-simulator-diff.png b/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/agent-roi-simulator-diff.png new file mode 100644 index 000000000..241065ab2 Binary files /dev/null and b/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/agent-roi-simulator-diff.png differ diff --git a/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/blade-hub-current.png b/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/blade-hub-current.png new file mode 100644 index 000000000..6e84b8e1f Binary files /dev/null and b/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/blade-hub-current.png differ diff --git a/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/blade-hub-diff.png b/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/blade-hub-diff.png new file mode 100644 index 000000000..f8e93370e Binary files /dev/null and b/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/blade-hub-diff.png differ diff --git a/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/case-studies-current.png b/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/case-studies-current.png new file mode 100644 index 000000000..53e5ec27e Binary files /dev/null and b/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/case-studies-current.png differ diff --git a/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/case-studies-diff.png b/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/case-studies-diff.png new file mode 100644 index 000000000..df7c02bcd Binary files /dev/null and b/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/case-studies-diff.png differ diff --git a/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/deepseek-hub-current.png b/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/deepseek-hub-current.png new file mode 100644 index 000000000..f6f68fa0c Binary files /dev/null and b/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/deepseek-hub-current.png differ diff --git a/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/deepseek-hub-diff.png b/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/deepseek-hub-diff.png new file mode 100644 index 000000000..2a1bbc53d Binary files /dev/null and b/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/deepseek-hub-diff.png differ diff --git a/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/deerflow-hub-current.png b/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/deerflow-hub-current.png new file mode 100644 index 000000000..edb99f5b6 Binary files /dev/null and b/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/deerflow-hub-current.png differ diff --git a/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/deerflow-hub-diff.png b/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/deerflow-hub-diff.png new file mode 100644 index 000000000..e19ec091f Binary files /dev/null and b/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/deerflow-hub-diff.png differ diff --git a/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/docker-hub-current.png b/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/docker-hub-current.png new file mode 100644 index 000000000..bac56186f Binary files /dev/null and b/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/docker-hub-current.png differ diff --git a/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/docker-hub-diff.png b/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/docker-hub-diff.png new file mode 100644 index 000000000..be0a15923 Binary files /dev/null and b/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/docker-hub-diff.png differ diff --git a/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/email-hub-current.png b/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/email-hub-current.png new file mode 100644 index 000000000..012f2626e Binary files /dev/null and b/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/email-hub-current.png differ diff --git a/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/email-hub-diff.png b/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/email-hub-diff.png new file mode 100644 index 000000000..dcc0e0a06 Binary files /dev/null and b/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/email-hub-diff.png differ diff --git a/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/enterprise-complete-current.png b/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/enterprise-complete-current.png new file mode 100644 index 000000000..b3aa2752b Binary files /dev/null and b/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/enterprise-complete-current.png differ diff --git a/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/enterprise-complete-diff.png b/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/enterprise-complete-diff.png new file mode 100644 index 000000000..20adfb315 Binary files /dev/null and b/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/enterprise-complete-diff.png differ diff --git a/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/enterprise-complete-v73-current.png b/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/enterprise-complete-v73-current.png new file mode 100644 index 000000000..1e1bb93b0 Binary files /dev/null and b/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/enterprise-complete-v73-current.png differ diff --git a/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/enterprise-complete-v73-diff.png b/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/enterprise-complete-v73-diff.png new file mode 100644 index 000000000..0dddb172c Binary files /dev/null and b/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/enterprise-complete-v73-diff.png differ diff --git a/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/enterprise-model-current.png b/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/enterprise-model-current.png new file mode 100644 index 000000000..bf435914b Binary files /dev/null and b/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/enterprise-model-current.png differ diff --git a/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/enterprise-model-diff.png b/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/enterprise-model-diff.png new file mode 100644 index 000000000..0a241519c Binary files /dev/null and b/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/enterprise-model-diff.png differ diff --git a/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/ethica-hub-current.png b/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/ethica-hub-current.png new file mode 100644 index 000000000..1bebdcb10 Binary files /dev/null and b/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/ethica-hub-current.png differ diff --git a/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/ethica-hub-diff.png b/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/ethica-hub-diff.png new file mode 100644 index 000000000..1a7e5e6f7 Binary files /dev/null and b/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/ethica-hub-diff.png differ diff --git a/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/github-hub-current.png b/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/github-hub-current.png new file mode 100644 index 000000000..23cfa662b Binary files /dev/null and b/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/github-hub-current.png differ diff --git a/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/github-hub-diff.png b/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/github-hub-diff.png new file mode 100644 index 000000000..0240cb4c8 Binary files /dev/null and b/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/github-hub-diff.png differ diff --git a/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/index-current.png b/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/index-current.png new file mode 100644 index 000000000..e5b92b1b6 Binary files /dev/null and b/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/index-current.png differ diff --git a/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/index-diff.png b/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/index-diff.png new file mode 100644 index 000000000..17996b8ed Binary files /dev/null and b/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/index-diff.png differ diff --git a/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/intelligence-growth-current.png b/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/intelligence-growth-current.png new file mode 100644 index 000000000..864eca9a3 Binary files /dev/null and b/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/intelligence-growth-current.png differ diff --git a/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/intelligence-growth-diff.png b/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/intelligence-growth-diff.png new file mode 100644 index 000000000..b7b240fb6 Binary files /dev/null and b/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/intelligence-growth-diff.png differ diff --git a/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/living-proof-current.png b/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/living-proof-current.png new file mode 100644 index 000000000..5db130e24 Binary files /dev/null and b/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/living-proof-current.png differ diff --git a/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/living-proof-diff.png b/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/living-proof-diff.png new file mode 100644 index 000000000..11bd7cc2e Binary files /dev/null and b/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/living-proof-diff.png differ diff --git a/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/page@00733c4fa69c3d74bbc450b2b8212c65.webm b/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/page@00733c4fa69c3d74bbc450b2b8212c65.webm new file mode 100644 index 000000000..4c9b52aab Binary files /dev/null and b/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/page@00733c4fa69c3d74bbc450b2b8212c65.webm differ diff --git a/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/wevia-current.png b/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/wevia-current.png new file mode 100644 index 000000000..3c867c9d3 Binary files /dev/null and b/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/wevia-current.png differ diff --git a/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/wevia-diff.png b/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/wevia-diff.png new file mode 100644 index 000000000..c95c1e635 Binary files /dev/null and b/api/playwright-results/seven-sigma-v2-2026-04-19T13-38-42/wevia-diff.png differ diff --git a/api/v76-screenshots/01_training_initial.png b/api/v76-screenshots/01_training_initial.png index bcc8361e9..b0ad0a5f5 100644 Binary files a/api/v76-screenshots/01_training_initial.png and b/api/v76-screenshots/01_training_initial.png differ diff --git a/api/v76-screenshots/multiagent_v73_populated.png b/api/v76-screenshots/multiagent_v73_populated.png index cb8174894..40b371f23 100644 Binary files a/api/v76-screenshots/multiagent_v73_populated.png and b/api/v76-screenshots/multiagent_v73_populated.png differ diff --git a/api/v76-screenshots/product_boardflow.png b/api/v76-screenshots/product_boardflow.png index f8122051f..e7232c0ab 100644 Binary files a/api/v76-screenshots/product_boardflow.png and b/api/v76-screenshots/product_boardflow.png differ diff --git a/api/v76-screenshots/product_projectflow.png b/api/v76-screenshots/product_projectflow.png index 3fcbcaae2..e03c4275f 100644 Binary files a/api/v76-screenshots/product_projectflow.png and b/api/v76-screenshots/product_projectflow.png differ diff --git a/api/v76-screenshots/product_reachhcp.png b/api/v76-screenshots/product_reachhcp.png index 1ffd334ac..41b700c01 100644 Binary files a/api/v76-screenshots/product_reachhcp.png and b/api/v76-screenshots/product_reachhcp.png differ diff --git a/api/v76-screenshots/tab_00_dashboard.png b/api/v76-screenshots/tab_00_dashboard.png index 706824875..daad5f4dc 100644 Binary files a/api/v76-screenshots/tab_00_dashboard.png and b/api/v76-screenshots/tab_00_dashboard.png differ diff --git a/api/v76-screenshots/tab_01_intents.png b/api/v76-screenshots/tab_01_intents.png index 34b951d12..43650bf7e 100644 Binary files a/api/v76-screenshots/tab_01_intents.png and b/api/v76-screenshots/tab_01_intents.png differ diff --git a/api/v76-screenshots/tab_02_training.png b/api/v76-screenshots/tab_02_training.png index d469af1b2..7d4dca1ad 100644 Binary files a/api/v76-screenshots/tab_02_training.png and b/api/v76-screenshots/tab_02_training.png differ diff --git a/api/v76-screenshots/tab_03_skills.png b/api/v76-screenshots/tab_03_skills.png index be2fc0b43..1f55da27b 100644 Binary files a/api/v76-screenshots/tab_03_skills.png and b/api/v76-screenshots/tab_03_skills.png differ diff --git a/api/v76-screenshots/tab_04_brain.png b/api/v76-screenshots/tab_04_brain.png index 4a6e9cf64..3f48ae388 100644 Binary files a/api/v76-screenshots/tab_04_brain.png and b/api/v76-screenshots/tab_04_brain.png differ diff --git a/api/v76-screenshots/tab_05_custom.png b/api/v76-screenshots/tab_05_custom.png index daf7e9336..6ce4da641 100644 Binary files a/api/v76-screenshots/tab_05_custom.png and b/api/v76-screenshots/tab_05_custom.png differ diff --git a/api/v76-screenshots/tab_06_benchmark.png b/api/v76-screenshots/tab_06_benchmark.png index b708b0ee4..240e59062 100644 Binary files a/api/v76-screenshots/tab_06_benchmark.png and b/api/v76-screenshots/tab_06_benchmark.png differ diff --git a/api/v76-screenshots/tab_07_brain-mon.png b/api/v76-screenshots/tab_07_brain-mon.png index 266a033b7..0056271f3 100644 Binary files a/api/v76-screenshots/tab_07_brain-mon.png and b/api/v76-screenshots/tab_07_brain-mon.png differ diff --git a/api/v76-screenshots/tab_08_dormants.png b/api/v76-screenshots/tab_08_dormants.png index badc7691c..ed9a10f74 100644 Binary files a/api/v76-screenshots/tab_08_dormants.png and b/api/v76-screenshots/tab_08_dormants.png differ diff --git a/api/v76-screenshots/tab_09_acquis.png b/api/v76-screenshots/tab_09_acquis.png index 6722e5f5a..a36948049 100644 Binary files a/api/v76-screenshots/tab_09_acquis.png and b/api/v76-screenshots/tab_09_acquis.png differ diff --git a/api/v76-screenshots/tab_10_wevia-brain.png b/api/v76-screenshots/tab_10_wevia-brain.png index 8dd330f35..c401150e6 100644 Binary files a/api/v76-screenshots/tab_10_wevia-brain.png and b/api/v76-screenshots/tab_10_wevia-brain.png differ diff --git a/api/v76-screenshots/tab_11_l6s-toc.png b/api/v76-screenshots/tab_11_l6s-toc.png index 15aec09bf..94351f785 100644 Binary files a/api/v76-screenshots/tab_11_l6s-toc.png and b/api/v76-screenshots/tab_11_l6s-toc.png differ diff --git a/api/v76-screenshots/tab_12_cognitive.png b/api/v76-screenshots/tab_12_cognitive.png index 05441b7ae..2f3860ec1 100644 Binary files a/api/v76-screenshots/tab_12_cognitive.png and b/api/v76-screenshots/tab_12_cognitive.png differ diff --git a/api/v76-screenshots/tab_13_kb-doctrines.png b/api/v76-screenshots/tab_13_kb-doctrines.png index 053982a86..2517c8da4 100644 Binary files a/api/v76-screenshots/tab_13_kb-doctrines.png and b/api/v76-screenshots/tab_13_kb-doctrines.png differ diff --git a/api/v76-screenshots/tab_14_ia-building.png b/api/v76-screenshots/tab_14_ia-building.png index 91e8d4ddf..dd5029380 100644 Binary files a/api/v76-screenshots/tab_14_ia-building.png and b/api/v76-screenshots/tab_14_ia-building.png differ diff --git a/api/v76-screenshots/tab_15_honest-tracker.png b/api/v76-screenshots/tab_15_honest-tracker.png index a0de4901c..910171a2c 100644 Binary files a/api/v76-screenshots/tab_15_honest-tracker.png and b/api/v76-screenshots/tab_15_honest-tracker.png differ diff --git a/api/v76-screenshots/tab_16_qahub.png b/api/v76-screenshots/tab_16_qahub.png index 805991324..a732fbc28 100644 Binary files a/api/v76-screenshots/tab_16_qahub.png and b/api/v76-screenshots/tab_16_qahub.png differ diff --git a/api/v76-screenshots/tab_17_risk-plan.png b/api/v76-screenshots/tab_17_risk-plan.png index 965340a5d..2fbba4fdd 100644 Binary files a/api/v76-screenshots/tab_17_risk-plan.png and b/api/v76-screenshots/tab_17_risk-plan.png differ diff --git a/api/v76-screenshots/tab_18_multiagent-v72.png b/api/v76-screenshots/tab_18_multiagent-v72.png index b15796ea6..5af1459e4 100644 Binary files a/api/v76-screenshots/tab_18_multiagent-v72.png and b/api/v76-screenshots/tab_18_multiagent-v72.png differ diff --git a/api/v76-screenshots/tab_19_architecture.png b/api/v76-screenshots/tab_19_architecture.png index 05c624e7f..ad897031c 100644 Binary files a/api/v76-screenshots/tab_19_architecture.png and b/api/v76-screenshots/tab_19_architecture.png differ diff --git a/api/v76-screenshots/tab_20_logs.png b/api/v76-screenshots/tab_20_logs.png index b398c4dcd..85327d6b2 100644 Binary files a/api/v76-screenshots/tab_20_logs.png and b/api/v76-screenshots/tab_20_logs.png differ diff --git a/api/v76-screenshots/tech_platform_loaded.png b/api/v76-screenshots/tech_platform_loaded.png index 9a71e038d..8624fabfa 100644 Binary files a/api/v76-screenshots/tech_platform_loaded.png and b/api/v76-screenshots/tech_platform_loaded.png differ diff --git a/api/v83-business-kpi-latest.json b/api/v83-business-kpi-latest.json index 22d5aed9d..5c4ed9c63 100644 --- a/api/v83-business-kpi-latest.json +++ b/api/v83-business-kpi-latest.json @@ -1,7 +1,7 @@ { "ok": true, "version": "V83-business-kpi", - "ts": "2026-04-19T13:35:13+00:00", + "ts": "2026-04-19T13:39:52+00:00", "summary": { "total_categories": 7, "total_kpis": 56, diff --git a/api/wevia-autonomous.php b/api/wevia-autonomous.php index f5115d2a9..e3408a208 100644 --- a/api/wevia-autonomous.php +++ b/api/wevia-autonomous.php @@ -30,6 +30,11 @@ if ($__fp_input && isset($__fp_input["message"])) { $st = $__fw_r["ok"] ? "SUCCESS" : "ERROR"; $tx = $__fw_r["ok"] ? $__fw_r["message"] . " Git: " . ($__fw_r["git"] ?? "n/a") : "ERREUR: " . ($__fw_r["error"] ?? "inconnue"); echo "data: " . json_encode(["type"=>"exec","text"=>$tx,"engine"=>"FileWrite/autonomous","intent"=>"file_write","status"=>$st]) . "\n\n"; + /*FILE_WRITE_ANSWER_V7*/ + $__fw_reply = $__fw_r["ok"] + ? "J ai cree le fichier. " . ($__fw_r["message"] ?? "") + : "Je n ai pas pu creer le fichier : " . ($__fw_r["error"] ?? "raison inconnue") . ". Precise le chemin exact si tu veux reessayer."; + echo "data: " . json_encode(["type"=>"answer","text"=>$__fw_reply,"engine"=>"FileWrite/v7","intent"=>"file_write"]) . "\n\n"; echo "data: [DONE]\n\n"; exit; } diff --git a/api/wevia-unified-api.php b/api/wevia-unified-api.php index dfee34c6c..209248a90 100644 --- a/api/wevia-unified-api.php +++ b/api/wevia-unified-api.php @@ -1,19 +1,18 @@ true, CURLOPT_TIMEOUT=>8, CURLOPT_CUSTOMREQUEST=>$m]); + curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER=>true, CURLOPT_TIMEOUT=>6, CURLOPT_CUSTOMREQUEST=>$m]); if ($d) { curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($d)); curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']); } $r = curl_exec($ch); curl_close($ch); return json_decode($r ?: '{}', true); @@ -21,49 +20,97 @@ function qdrant($url, $m='GET', $d=null) { $out = ['ok'=>true, 'ts'=>date('c')]; -// === AGENTS (consolidated) === -$agents = []; +// ============== AGENTS MULTI-SOURCE DÉDUPLIQUÉ ============== +$agents_by_name = []; // key = normalized name → metadata +$sources_counts = []; -// Source 1: /api/*agent*.json -foreach (glob('/var/www/html/api/*agent*.json') as $f) { - $name = basename($f, '.json'); - $info = @json_decode(@file_get_contents($f), true); - $agents[] = [ - 'name' => $name, - 'source' => 'api_files', - 'type' => 'file', - 'path' => str_replace('/var/www/html', '', $f), - 'desc' => $info['description'] ?? $info['desc'] ?? 'Agent file', - ]; +function normalize_name($n) { return strtolower(trim(preg_replace('/[^a-z0-9]+/i', '_', $n), '_')); } + +function add_agent(&$reg, $name, $source, $meta = []) { + if (!$name) return; + $key = normalize_name($name); + if (!isset($reg[$key])) { + $reg[$key] = ['name' => $name, 'sources' => [], 'meta' => $meta]; + } + if (!in_array($source, $reg[$key]['sources'])) { + $reg[$key]['sources'][] = $source; + } + $reg[$key]['meta'] = array_merge($reg[$key]['meta'], $meta); } -// Source 2: /api/agent-stubs/*.php +// Source 1: agent-avatars-v2.json (most complete · 148 agents) +$av2 = @json_decode(@file_get_contents('/var/www/html/api/agent-avatars-v2.json'), true); +$sources_counts['agent_avatars_v2'] = 0; +if (is_array($av2)) { + foreach ($av2 as $name => $meta) { + add_agent($agents_by_name, $name, 'agent_avatars_v2', is_array($meta) ? $meta : []); + $sources_counts['agent_avatars_v2']++; + } +} + +// Source 2: agent-avatars.json (136 agents · older) +$av1 = @json_decode(@file_get_contents('/var/www/html/api/agent-avatars.json'), true); +$sources_counts['agent_avatars_v1'] = 0; +if (is_array($av1)) { + foreach ($av1 as $name => $meta) { + add_agent($agents_by_name, $name, 'agent_avatars_v1', is_array($meta) ? $meta : []); + $sources_counts['agent_avatars_v1']++; + } +} + +// Source 3: wevia-agents-registry.json (47 categorized · categories metadata) +$reg_cat = @json_decode(@file_get_contents('/var/www/html/api/wevia-agents-registry.json'), true); +$sources_counts['wevia_agents_registry'] = $reg_cat['total'] ?? 0; +// Categories metadata used later + +// Source 4: paperclip-agility-agents-registered.json (12 agents V71) +$pc_agility = @json_decode(@file_get_contents('/var/www/html/api/paperclip-agility-agents-registered.json'), true); +$sources_counts['paperclip_agility_v71'] = 0; +if (is_array($pc_agility) && isset($pc_agility['agents'])) { + foreach ($pc_agility['agents'] as $a) { + add_agent($agents_by_name, $a['name'] ?? '?', 'paperclip_agility_v71', ['category' => $a['category'] ?? 'agility', 'icon' => $a['icon'] ?? '🤖', 'role' => $a['role'] ?? '']); + $sources_counts['paperclip_agility_v71']++; + } +} + +// Source 5: /api/*agent*.json files (11 files) +$sources_counts['api_agent_files'] = 0; +foreach (glob('/var/www/html/api/*agent*.json') as $f) { + $fname = basename($f, '.json'); + // Skip the registries we already processed + if (in_array($fname, ['agent-avatars', 'agent-avatars-v2', 'wevia-agents-registry', 'paperclip-agility-agents-registered', 'wevia-agents-pack-status'])) continue; + add_agent($agents_by_name, $fname, 'api_agent_files', ['path' => str_replace('/var/www/html','',$f)]); + $sources_counts['api_agent_files']++; +} + +// Source 6: /api/agent-stubs/*.php (50 stubs) +$sources_counts['agent_stubs'] = 0; foreach (glob('/var/www/html/api/agent-stubs/*.php') as $f) { $name = basename($f, '.php'); - $agents[] = [ - 'name' => $name, - 'source' => 'agent_stubs', - 'type' => 'stub_php', - 'path' => str_replace('/var/www/html', '', $f), - 'desc' => 'Agent stub PHP', - ]; + add_agent($agents_by_name, $name, 'agent_stubs', ['type' => 'stub_php']); + $sources_counts['agent_stubs']++; } -// Source 3: /api/sub-agents/*.json (Claude Code pattern · 65 new) +// Source 7: /api/sub-agents/*.json (65 Claude sub-agents) +$sources_counts['claude_subagents'] = 0; foreach (glob('/var/www/html/api/sub-agents/*.json') as $f) { - $name = basename($f, '.json'); - $info = @json_decode(@file_get_contents($f), true); - $agents[] = [ - 'name' => $name, - 'source' => 'claude_code_subagents', - 'type' => 'sub_agent', - 'category' => $info['category'] ?? 'dev', - 'path' => str_replace('/var/www/html', '', $f), - 'desc' => $info['description'] ?? 'Claude Code sub-agent', - ]; + $data = @json_decode(@file_get_contents($f), true); + $name = $data['name'] ?? basename($f, '.json'); + add_agent($agents_by_name, $name, 'claude_subagents', $data ?: []); + $sources_counts['claude_subagents']++; } -// === INTENTS === +// Source 8: Qdrant weval_agents_registry (if exists) +$qdrant_agents = qdrant("$QDRANT/collections/weval_agents_registry"); +$sources_counts['qdrant_agents_vectorized'] = $qdrant_agents['result']['points_count'] ?? 0; + +// Paperclip ecosystem reference (from disk) +$paperclip_dirs = glob('/opt/deer-flow/skills/weval/paperclip*', GLOB_ONLYDIR); +$sources_counts['paperclip_opt_catalog'] = is_array($paperclip_dirs) ? count($paperclip_dirs) : 0; + +$agents_unique_count = count($agents_by_name); + +// ============== INTENTS ============== $intents = []; foreach (glob('/var/www/html/api/wired-pending/intent-*.php') as $f) { ob_start(); @@ -76,114 +123,110 @@ foreach (glob('/var/www/html/api/wired-pending/intent-*.php') as $f) { 'status' => $info['status'] ?? '?', 'triggers' => array_slice($info['triggers'] ?? [], 0, 3), 'source' => $info['source'] ?? '?', - 'desc' => $info['description'] ?? '', ]; } } -// === SKILLS (5 sources) === -$skills_disk = []; -foreach (glob('/var/www/html/skills/*', GLOB_ONLYDIR) as $dir) { - $name = basename($dir); - $has_md = file_exists("$dir/SKILL.md"); - $sub_count = count(glob("$dir/*", GLOB_ONLYDIR)); - $skills_disk[] = [ - 'name' => $name, - 'has_skill_md' => $has_md, - 'sub_count' => $sub_count, - 'path' => "/skills/$name/", - ]; -} - -$qdrant_info = qdrant("$QDRANT/collections/weval_skills"); -$qdrant_count = $qdrant_info['result']['points_count'] ?? 0; +$arena = @json_decode(@file_get_contents('/var/www/html/api/arena-intent-registry.json'), true); +// ============== SKILLS ============== +$skills_disk = glob('/var/www/html/skills/*', GLOB_ONLYDIR); +$qdrant_skills = qdrant("$QDRANT/collections/weval_skills"); +$qdrant_skills_count = $qdrant_skills['result']['points_count'] ?? 0; $reg = @json_decode(@file_get_contents('/var/www/html/api/wevia-tool-registry.json'), true); $tools_count = isset($reg['tools']) && is_array($reg['tools']) ? count($reg['tools']) : 0; - -$arena = @json_decode(@file_get_contents('/var/www/html/api/arena-intent-registry.json'), true); $arena_skills = $arena['total_skills'] ?? 0; -// === BRAINS === +// Doctrines (58 mentioned in screenshots) +$doctrine_files = glob('/var/www/html/api/doctrine*.json'); +$doctrines_count = is_array($doctrine_files) ? count($doctrine_files) : 0; +// Also check /opt/wevads/doctrines/ +$doctrine_files2 = glob('/opt/wevads/doctrines/*.md'); +if (is_array($doctrine_files2)) $doctrines_count += count($doctrine_files2); + +// ============== BRAINS ============== +$brain_patterns = ['/var/www/html/api/*brain*.php', '/var/www/html/api/*brain*.json', '/var/www/html/api/*brain*.py']; $brains = []; -$brain_files = [ - '/var/www/html/api/wevia-master-brain.json' => ['name'=>'WEVIA Master Brain', 'type'=>'json', 'purpose'=>'Core orchestration config'], - '/var/www/html/api/wevia-brain-orchestrator.php' => ['name'=>'Brain Orchestrator', 'type'=>'php', 'purpose'=>'Cascade routing logic'], - '/var/www/html/api/ethica-brain.php' => ['name'=>'Ethica Brain', 'type'=>'php', 'purpose'=>'HCP intelligence'], - '/var/www/html/api/weval-brain-finetune.py' => ['name'=>'Weval Brain Finetune', 'type'=>'python', 'purpose'=>'ML finetuning'], -]; -foreach ($brain_files as $path => $meta) { - if (file_exists($path)) { - $brains[] = array_merge($meta, [ - 'path' => str_replace('/var/www/html', '', $path), - 'size' => filesize($path), - ]); +foreach ($brain_patterns as $pat) { + foreach (glob($pat) as $f) { + $name = basename($f); + // Filter noise + if (strpos($name, 'playwright') !== false) continue; + if (strpos($name, 'screenshot') !== false) continue; + $brains[] = [ + 'name' => str_replace(['.php','.json','.py'], '', $name), + 'path' => str_replace('/var/www/html','',$f), + 'type' => pathinfo($f, PATHINFO_EXTENSION), + 'size' => filesize($f), + ]; } } -// === DASHBOARDS (wevia-*.html + agents-*.html) === -$dashboards = []; -$dash_paths = array_merge( +// Dashboards +$dash_paths = array_unique(array_merge( glob('/var/www/html/wevia-*.html') ?: [], glob('/var/www/html/agents-*.html') ?: [], glob('/var/www/html/*-dashboard*.html') ?: [], glob('/var/www/html/*-hub*.html') ?: [], - glob('/var/www/html/l99*.html') ?: [] -); -$dash_paths = array_unique($dash_paths); -foreach ($dash_paths as $p) { - $name = basename($p, '.html'); - $size = filesize($p); - $category = 'other'; - if (strpos($name, 'agents') === 0) $category = 'agents'; - elseif (strpos($name, 'wevia-autonomy') !== false) $category = 'autonomy'; - elseif (strpos($name, 'business-visual') !== false) $category = 'bvs'; - elseif (strpos($name, 'director') !== false) $category = 'director'; - elseif (strpos($name, 'master') !== false || strpos($name, 'chat') !== false) $category = 'chat'; - elseif (strpos($name, 'dashboard') !== false) $category = 'dashboard'; - elseif (strpos($name, 'hub') !== false) $category = 'hub'; - elseif (strpos($name, 'l99') !== false) $category = 'l99'; - elseif (strpos($name, 'visual') !== false) $category = 'visual'; - elseif (strpos($name, 'bvs') !== false) $category = 'bvs'; - elseif (strpos($name, 'em-') !== false) $category = 'em'; - elseif (strpos($name, 'wevia-') === 0) $category = 'wevia'; - - $dashboards[] = [ - 'name' => $name, - 'url' => '/' . basename($p), - 'size' => $size, - 'category' => $category, - ]; -} -usort($dashboards, fn($a,$b) => strcmp($a['category'].$a['name'], $b['category'].$b['name'])); + glob('/var/www/html/l99*.html') ?: [], +)); +$dashboards_count = count($dash_paths); -// === APIs === +// APIs $apis_count = count(glob('/var/www/html/api/*.php') ?: []); -// === SUMMARY === -if ($action === 'all' || $action === 'summary') { - $out['summary'] = [ - 'agents_total' => count($agents), - 'agents_by_source' => array_count_values(array_column($agents, 'source')), - 'intents_total' => count($intents), - 'intents_by_domain' => array_count_values(array_column($intents, 'domain')), - 'intents_by_status' => array_count_values(array_column($intents, 'status')), - 'skills_disk_dirs' => count($skills_disk), - 'skills_qdrant' => $qdrant_count, - 'skills_tools_registry' => $tools_count, - 'skills_arena_declared' => $arena_skills, - 'skills_total' => count($skills_disk) + $qdrant_count + $tools_count + $arena_skills, - 'brains_total' => count($brains), - 'dashboards_total' => count($dashboards), - 'dashboards_by_category' => array_count_values(array_column($dashboards, 'category')), - 'apis_php_total' => $apis_count, - ]; +// ============== OUTPUT ============== +$out['summary'] = [ + 'agents' => [ + 'UNIQUE_DEDUP' => $agents_unique_count, // Real unique agents + 'per_source' => $sources_counts, + 'total_with_overlaps' => array_sum($sources_counts), + 'note' => 'Agents dédupliqués par nom normalisé · fusion 7+ sources', + ], + 'intents' => [ + 'php_files' => count($intents), + 'arena_declared' => $arena['total_intents'] ?? 0, + 'by_status' => array_count_values(array_column($intents, 'status')), + 'by_domain' => array_count_values(array_column($intents, 'domain')), + ], + 'skills' => [ + 'disk_dirs' => count($skills_disk), + 'qdrant_vectorized' => $qdrant_skills_count, + 'tools_registry' => $tools_count, + 'arena_declared' => $arena_skills, + 'doctrines' => $doctrines_count, + 'TOTAL_ALL_SOURCES' => count($skills_disk) + $qdrant_skills_count + $tools_count + $arena_skills, + ], + 'brains' => [ + 'count' => count($brains), + 'list' => $brains, + ], + 'dashboards' => $dashboards_count, + 'apis' => $apis_count, +]; + +if ($action === 'agents') { + $agents_list = []; + foreach ($agents_by_name as $key => $a) { + $agents_list[] = [ + 'name' => $a['name'], + 'key' => $key, + 'sources' => $a['sources'], + 'sources_count' => count($a['sources']), + 'category' => $a['meta']['category'] ?? '?', + 'role' => $a['meta']['role'] ?? $a['meta']['description'] ?? '', + 'icon' => $a['meta']['icon'] ?? $a['meta']['emoji'] ?? '', + ]; + } + // Sort by sources_count desc (most referenced first), then alpha + usort($agents_list, function($a,$b) { + if ($a['sources_count'] !== $b['sources_count']) return $b['sources_count'] - $a['sources_count']; + return strcmp($a['name'], $b['name']); + }); + $out['agents'] = $agents_list; } -if ($action === 'all' || $action === 'agents') $out['agents'] = $agents; -if ($action === 'all' || $action === 'intents') $out['intents'] = $intents; -if ($action === 'all' || $action === 'skills') $out['skills'] = ['disk'=>$skills_disk, 'qdrant_count'=>$qdrant_count, 'tools_count'=>$tools_count, 'arena_count'=>$arena_skills]; -if ($action === 'all' || $action === 'brains') $out['brains'] = $brains; -if ($action === 'all' || $action === 'dashboards') $out['dashboards'] = $dashboards; +if ($action === 'intents') $out['intents_list'] = $intents; +if ($action === 'brains') $out['brains_list'] = $brains; echo json_encode($out, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);