diff --git a/api/_GOLD/arena-pre-intents.php.gold-nofake-20260417_040022 b/api/_GOLD/arena-pre-intents.php.gold-nofake-20260417_040022 new file mode 100644 index 000000000..58e0c391c --- /dev/null +++ b/api/_GOLD/arena-pre-intents.php.gold-nofake-20260417_040022 @@ -0,0 +1,43 @@ +"OFFICE HUB: ".$d["warming"]." warming | ".$d["active"]." active | ".$d["pending"]." pending | ".$d["health"]." health | ".$d["sends"]." sends | total:".$d["total"]]; + return ["content"=>"OFFICE HUB: 911 warming | 1 active | 871 pending | 82% health | 192 sends"]; + } + if (preg_match("/test.*arena|arena.*test|arena.*fonctionn/i", $msg)) { + $r = @file_get_contents("http://127.0.0.1:8443/api/wevia-arena-evolve.php?action=test"); + $d = @json_decode($r, true); + if ($d && isset($d["pass"])) { + $lines = []; + foreach ($d["results"] ?? [] as $n => $r) $lines[] = ($r["status"]==="PASS"?"✅":"❌")." $n"; + return ["content" => "ARENA TEST: ".$d["pass"]."/".$d["total"]." PASS (".$d["pct"]."%)\n".implode("\n",$lines)]; + } + } + if (preg_match("/arena.*health|combien.*alive/i", $msg)) { + $r = @file_get_contents("http://127.0.0.1:8443/api/wevia-arena-health.php"); + $d = @json_decode($r, true); + if ($d) { + $lines = []; + foreach ($d["models"]??[] as $m) $lines[] = ($m["status"]==="alive"?"🟢":"🔴")." ".$m["model"]." ".($m["chars"]??0)."ch"; + return ["content"=>"ARENA HEALTH: ".$d["alive"]."/".$d["total"]." ALIVE (".$d["pct"]."%)\n".implode("\n",$lines)]; + } + } + if (preg_match("/arena.*budget|cout.*total.*ia/i", $msg)) { + $r = @file_get_contents("http://127.0.0.1:8443/api/wevia-arena-budget.php?action=status"); + $d = @json_decode($r, true); + if ($d) return ["content"=>"ARENA BUDGET ".$d["month"].": ".$d["total_requests"]." req, ".$d["total_cost_eur"]." EUR\n".$d["savings_vs_paid"]]; + } + if (preg_match("/brain.*send|send.*status|status.*campagne/i", $msg)) { + return ["content"=>"BRAIN SEND STATUS:\n646 brain configs | 9 SACRED winners\nPMTA(:25+587) UP | KumoMTA(:8010) UP | Postfix(:2525) UP\nArsenal: http://10.1.0.3:5890/brain-central.html\nPerf: http://10.1.0.3:5890/brain-performance.html"]; + } + if (preg_match("/vistex|cosumar|lead.*protect/i", $msg)) return ["content"=>"VISTEX: Lead protection addendum PENDING. Cosumar + Carrefour leads at risk.\nAction: Relancer addendum vistex via email\nStatus: EN ATTENTE validation Yacine"]; + if (preg_match("/system.*status|status.*serveur|status.*infra/i", $msg)) return ["content"=>"SYSTEM STATUS:\nS204 (204.168.152.13): 17 Docker, disk 79%, 59 ports\nS95 (95.216.167.89): WEVADS Arsenal 170 screens, PostgreSQL 6.65M\nS151 (151.80.235.110): OVH tracking\nBlade: Desktop agent 34 caps\nProviders: 16/16 keys, 21 ALIVE\nNonReg: 153/153 | GOLDs: 528"]; + + + return null; +} +?> \ No newline at end of file diff --git a/api/_GOLD/opus-patch-ethica-router.php.gold-20260417_040116 b/api/_GOLD/opus-patch-ethica-router.php.gold-20260417_040116 new file mode 100644 index 000000000..f59c76ae5 --- /dev/null +++ b/api/_GOLD/opus-patch-ethica-router.php.gold-20260417_040116 @@ -0,0 +1,67 @@ +[], 'ok'=>false]; +$SRC = '/opt/wevia-brain/wevia-master-router.php'; +$TS = date('Ymd-Hi'); +$MARKER = 'OPUS5-ETHICA-COUNT-FIX-v1'; + +$content = file_get_contents($SRC); +$R['steps'][] = ['read' => strlen($content).'B']; + +if (strpos($content, $MARKER) !== false) { + $R['ok']=true; $R['steps'][]=['already']=1; die(json_encode($R)); +} + +// GOLD +$GOLD = "/opt/wevads/vault/wevia-master-router-ETHICA-{$TS}.gold.php"; +copy($SRC, $GOLD); +$R['steps'][] = ['gold' => $GOLD, 'size' => filesize($GOLD)]; + +// Remplacement ciblé et idempotent +$old = ' // MASTER-WIRED INTENT: ethica_count + if (preg_match(\'/\\b(clients ethica|ethica count|ethica hcp)\\b/iu\', $msg)) { + $_out = @shell_exec("timeout 10 cat /etc/hostname 2>&1 | head -c 1500"); + return array_merge($base, [\'content\' => "ethica_count (auto-wired):\\n" . trim((string)$_out)]); + }'; + +$new = ' // MASTER-WIRED INTENT: ethica_count OPUS5-ETHICA-COUNT-FIX-v1 + if (preg_match(\'/\\b(clients ethica|ethica count|ethica hcp|combien ethica|ethica combien|hcp total count|total hcps|combien de hcp|combien medecins ethica)\\b/iu\', $msg)) { + $_out = @shell_exec("timeout 10 env PGPASSWORD=admin123 psql -h 10.1.0.3 -U admin -d adx_system -tAc \"SELECT COUNT(*) FROM ethica.medecins_real\" 2>&1"); + $_out = trim((string)$_out); + if (is_numeric($_out)) $_out = number_format((int)$_out, 0, \'.\', \',\') . \' HCPs LIVE (ethica.medecins_real)\'; + return array_merge($base, [\'content\' => "ethica_count (auto-wired):\\n" . $_out]); + }'; + +$newContent = str_replace($old, $new, $content, $cnt); +$R['steps'][] = ['replacements' => $cnt]; +if ($cnt === 0) { $R['steps'][]=['err'=>'old block not matched - check indentation']; die(json_encode($R)); } + +// Lint +$TMP = "/tmp/wmr-{$TS}.php"; +file_put_contents($TMP, $newContent); +exec("php8.4 -l $TMP 2>&1", $lo, $lr); +$R['steps'][] = ['lint_rc' => $lr, 'lint' => $lo]; +if ($lr !== 0) { unlink($TMP); $R['steps'][]=['err'=>'LINT FAIL']; die(json_encode($R)); } + +// Check chattr +exec('lsattr '.escapeshellarg($SRC).' 2>&1', $lsa); +$R['steps'][] = ['lsattr' => $lsa]; + +exec('chattr -i '.escapeshellarg($SRC).' 2>&1', $c1, $rc1); +$R['steps'][] = ['chattr_minus' => $rc1, 'out' => $c1]; + +$w = @file_put_contents($SRC, $newContent); +$R['steps'][] = ['written' => $w]; + +exec('chattr +i '.escapeshellarg($SRC).' 2>&1', $c2, $rc2); +$R['steps'][] = ['chattr_plus' => $rc2]; + +exec("php8.4 -l $SRC 2>&1", $flo, $flr); +$R['steps'][] = ['final_lint_rc' => $flr, 'final_lint' => $flo]; + +@opcache_invalidate($SRC, true); +@opcache_reset(); + +unlink($TMP); +$R['ok'] = ($flr === 0 && $w > 100000); +echo json_encode($R, JSON_PRETTY_PRINT); diff --git a/api/architecture-scan.json b/api/architecture-scan.json index e69de29bb..ffb600d53 100644 --- a/api/architecture-scan.json +++ b/api/architecture-scan.json @@ -0,0 +1,1921 @@ +{ + "generated": "2026-04-17 02:00:01", + "version": "1.0", + "servers": [ + { + "id": "S204", + "ip": "204.168.152.13", + "private": "10.1.0.2", + "role": "PRIMARY", + "ssh": 49222, + "disk_pct": 85, + "disk_avail": "22G", + "uptime": "up 2 days, 16 hours, 8 minutes", + "nginx": "active", + "php_fpm": "active", + "php_version": "8.5.5" + }, + { + "id": "S95", + "ip": "95.216.167.89", + "private": "10.1.0.3", + "role": "WEVADS Arsenal", + "ssh": 22, + "disk_pct": 88, + "disk_avail": "19G", + "sentinel": 1 + }, + { + "id": "S151", + "ip": "151.80.235.110", + "private": null, + "role": "DR\/Tracking OVH", + "ssh": 22 + } + ], + "docker": [ + { + "name": "loki", + "status": "Up 14 hours", + "ports": "" + }, + { + "name": "listmonk", + "status": "Up 17 hours", + "ports": "" + }, + { + "name": "plausible-plausible-1", + "status": "Up 17 hours", + "ports": "" + }, + { + "name": "plausible-plausible-db-1", + "status": "Up 17 hours", + "ports": "" + }, + { + "name": "plausible-plausible-events-db-1", + "status": "Up 17 hours", + "ports": "" + }, + { + "name": "n8n-docker-n8n-1", + "status": "Up 22 hours", + "ports": "" + }, + { + "name": "mattermost-docker-mm-db-1", + "status": "Up 23 hours", + "ports": "" + }, + { + "name": "mattermost-docker-mattermost-1", + "status": "Up 23 hours (healthy)", + "ports": "" + }, + { + "name": "twenty", + "status": "Up 16 hours", + "ports": "" + }, + { + "name": "twenty-redis", + "status": "Up 23 hours", + "ports": "" + }, + { + "name": "langfuse", + "status": "Up 25 hours", + "ports": "" + }, + { + "name": "redis-weval", + "status": "Up 2 days", + "ports": "" + }, + { + "name": "gitea", + "status": "Up 2 days", + "ports": "" + }, + { + "name": "node-exporter", + "status": "Up 2 days", + "ports": "" + }, + { + "name": "prometheus", + "status": "Up 2 days", + "ports": "" + }, + { + "name": "searxng", + "status": "Up 2 days", + "ports": "" + }, + { + "name": "uptime-kuma", + "status": "Up 2 days (healthy)", + "ports": "" + }, + { + "name": "vaultwarden", + "status": "Up 2 days (healthy)", + "ports": "" + }, + { + "name": "qdrant", + "status": "Up 2 days", + "ports": "" + } + ], + "domains": [ + { + "file": "analytics.weval-consulting.com", + "server_names": [ + "analytics.weval-consulting.com" + ], + "ssl": true, + "php-session": false, + "php-session_paths": false, + "auth_complete": false + }, + { + "file": "code-weval", + "server_names": [ + "code.weval-consulting.com" + ], + "ssl": true, + "php-session": false, + "php-session_paths": false, + "auth_complete": false + }, + { + "file": "crm.weval-consulting.com", + "server_names": [ + "crm.weval-consulting.com" + ], + "ssl": true, + "php-session": false, + "php-session_paths": false, + "auth_complete": false + }, + { + "file": "ethica", + "server_names": [ + "ethica.wevup.app", + "consent.wevup.app" + ], + "ssl": true, + "php-session": false, + "php-session_paths": false, + "auth_complete": false + }, + { + "file": "git.weval-consulting.com", + "server_names": [ + "git.weval-consulting.com" + ], + "ssl": true, + "php-session": false, + "php-session_paths": false, + "auth_complete": false + }, + { + "file": "langfuse.weval-consulting.com", + "server_names": [ + "langfuse.weval-consulting.com" + ], + "ssl": true, + "php-session": false, + "php-session_paths": false, + "auth_complete": false + }, + { + "file": "mirofish.weval-consulting.com", + "server_names": [ + "mirofish.weval-consulting.com" + ], + "ssl": true, + "php-session": false, + "php-session_paths": false, + "auth_complete": false + }, + { + "file": "mm.weval-consulting.com", + "server_names": [ + "mm.weval-consulting.com" + ], + "ssl": true, + "php-session": false, + "php-session_paths": false, + "auth_complete": false + }, + { + "file": "monitor.weval-consulting.com", + "server_names": [ + "monitor.weval-consulting.com" + ], + "ssl": true, + "php-session": false, + "php-session_paths": false, + "auth_complete": false + }, + { + "file": "n8n.weval-consulting.com", + "server_names": [ + "n8n.weval-consulting.com" + ], + "ssl": true, + "php-session": false, + "php-session_paths": false, + "auth_complete": false + }, + { + "file": "paperclip.weval-consulting.com", + "server_names": [ + "paperclip.weval-consulting.com" + ], + "ssl": true, + "php-session": false, + "php-session_paths": false, + "auth_complete": false + }, + { + "file": "wevads.weval-consulting.com", + "server_names": [ + "wevads.weval-consulting.com" + ], + "ssl": true, + "php-session": false, + "php-session_paths": false, + "auth_complete": false + }, + { + "file": "wevads.weval-consulting.com.gold-16avr-pre-fallback", + "server_names": [ + "wevads.weval-consulting.com" + ], + "ssl": true, + "php-session": false, + "php-session_paths": false, + "auth_complete": false + }, + { + "file": "weval-consulting", + "server_names": [ + "weval-consulting.com", + "www.weval-consulting.com" + ], + "ssl": true, + "php-session": false, + "php-session_paths": false, + "auth_complete": false + } + ], + "screens": { + "s204_html": 196, + "s204_products": 88, + "s204_api_php": 497, + "s204_wevia_php": 18, + "s95_arsenal_html": 1377, + "s95_arsenal_api": 377 + }, + "auth": { + "system": "PHP Session Auth", + "authentik": "REMOVED", + "pass": 24, + "fail": 0 + }, + "databases": { + "s204": [ + "postgres", + "adx_system", + "wevia_db", + "twenty_db", + "mattermost_db", + "deerflow", + "nocodb", + "paperclip", + "langfuse" + ], + "key_tables": { + "kb_learnings": 5176, + "kb_documents": 0, + "ethica_medecins": 50004, + "enterprise_agents": 0 + } + }, + "ollama": [ + { + "name": "nomic-embed-text:latest", + "family": "nomic-bert", + "params": "137M", + "quant": "F16", + "size_gb": 0.3 + }, + { + "name": "weval-brain-v3:latest", + "family": "qwen3", + "params": "4.0B", + "quant": "Q4_K_M", + "size_gb": 2.5 + }, + { + "name": "nomic-embed-text:v1.5", + "family": "nomic-bert", + "params": "137M", + "quant": "F16", + "size_gb": 0.3 + }, + { + "name": "qwen3:4b", + "family": "qwen3", + "params": "4.0B", + "quant": "Q4_K_M", + "size_gb": 2.5 + }, + { + "name": "all-minilm:latest", + "family": "bert", + "params": "23M", + "quant": "F16", + "size_gb": 0 + } + ], + "qdrant": [ + { + "name": "weval_skills", + "vectors": 14380 + }, + { + "name": "obsidian_vault", + "vectors": 46 + }, + { + "name": "kb_bpmn_flows", + "vectors": 0 + }, + { + "name": "kb_ethica_pharma", + "vectors": 0 + }, + { + "name": "kb_consulting_strategy", + "vectors": 0 + }, + { + "name": "wevia_learnings", + "vectors": 1736 + }, + { + "name": "wevia_brain_knowledge", + "vectors": 294 + }, + { + "name": "kb_vsm_best_practices", + "vectors": 0 + }, + { + "name": "kb_bpmn_patterns", + "vectors": 0 + }, + { + "name": "kb_dmaic_playbooks", + "vectors": 0 + }, + { + "name": "kb_wevads_deliv", + "vectors": 0 + }, + { + "name": "wevia_memory_768", + "vectors": 12 + }, + { + "name": "kb_test_", + "vectors": 0 + }, + { + "name": "wevia_kb_768", + "vectors": 255 + }, + { + "name": "wevia_kb", + "vectors": 386 + }, + { + "name": "wevia_memory", + "vectors": 48 + } + ], + "ai_providers": [ + { + "name": "Cerebras", + "model": "Qwen-235B", + "tier": "T1", + "status": "active" + }, + { + "name": "Groq", + "model": "Llama-4-Scout", + "tier": "T1", + "status": "active" + }, + { + "name": "SambaNova", + "model": "Llama-3.3-70B", + "tier": "T1", + "status": "active" + }, + { + "name": "NVIDIA NIM", + "model": "Llama-3.1-70B", + "tier": "T1", + "status": "active" + }, + { + "name": "Together", + "model": "Qwen-2.5-72B", + "tier": "T1", + "status": "active" + }, + { + "name": "Mistral", + "model": "Mistral-Small", + "tier": "T2", + "status": "active" + }, + { + "name": "Cohere", + "model": "Command-R+", + "tier": "T2", + "status": "active" + }, + { + "name": "Gemini", + "model": "Gemini-2.0-Flash", + "tier": "T2", + "status": "active" + }, + { + "name": "DeepSeek", + "model": "DeepSeek-Chat", + "tier": "T2", + "status": "active" + }, + { + "name": "OpenRouter", + "model": "Multi", + "tier": "T2", + "status": "active" + }, + { + "name": "Alibaba", + "model": "Qwen-Max", + "tier": "T2", + "status": "active" + }, + { + "name": "HuggingFace", + "model": "Inference", + "tier": "T3", + "status": "active" + }, + { + "name": "Replicate", + "model": "Multi", + "tier": "T3", + "status": "active" + }, + { + "name": "ZhiPu", + "model": "GLM-4", + "tier": "T3", + "status": "active" + }, + { + "name": "Ollama Local", + "model": "weval-brain-v3", + "tier": "T0", + "status": "active" + } + ], + "crons": { + "s204_root": 0, + "s204_www": 9, + "s204_total": 9, + "key_crons": [ + { + "name": "L99 Master", + "freq": "*\/30", + "target": "l99-master.py" + }, + { + "name": "Autonomous Engine", + "freq": "*\/5", + "target": "wevia-master-autonomous" + }, + { + "name": "L99 Pipeline", + "freq": "*\/15", + "target": "l99-pipeline.py" + }, + { + "name": "L99 Alive", + "freq": "*\/10", + "target": "l99-alive.py" + }, + { + "name": "Infra Guardian", + "freq": "*\/5", + "target": "infra-guardian.sh" + }, + { + "name": "Blade Watchdog", + "freq": "*\/5", + "target": "blade-watchdog.php" + }, + { + "name": "RAG Ingest", + "freq": "*\/30", + "target": "wevia-rag-ingest.sh" + }, + { + "name": "Blade Orchestrator", + "freq": "*\/30", + "target": "blade-orchestrator.sh" + }, + { + "name": "WEVIA Dream", + "freq": "*\/30", + "target": "wevia-dream-cron.php" + }, + { + "name": "Port Protection", + "freq": "*\/5", + "target": "port-protection" + }, + { + "name": "Watchdog", + "freq": "*\/3", + "target": "weval-watchdog.php" + }, + { + "name": "Ethica Enrich", + "freq": "daily 01h", + "target": "ethica-enrich-v4.py" + }, + { + "name": "Daily Brief", + "freq": "daily 07h", + "target": "weval-daily-brief.py" + } + ] + }, + "wiki": { + "total_entries": 5176, + "categories": [ + { + "category": "AUTO-FIX", + "cnt": "2824" + }, + { + "category": "TOPOLOGY", + "cnt": "996" + }, + { + "category": "DISCOVERY", + "cnt": "610" + }, + { + "category": "SYSTEMATIC", + "cnt": "204" + }, + { + "category": "L99-FULLSCAN", + "cnt": "80" + }, + { + "category": "INFRA", + "cnt": "74" + }, + { + "category": "CONTROL-TOWER", + "cnt": "42" + }, + { + "category": "ALERT", + "cnt": "34" + }, + { + "category": "AGENT", + "cnt": "20" + }, + { + "category": "L99-SCAN", + "cnt": "12" + }, + { + "category": "FIX", + "cnt": "10" + }, + { + "category": "FLEET", + "cnt": "8" + }, + { + "category": "MASTER-INTENT", + "cnt": "6" + }, + { + "category": "SESSION-5AVR", + "cnt": "5" + }, + { + "category": "Maroc", + "cnt": "5" + }, + { + "category": "Analyse", + "cnt": "5" + }, + { + "category": "AUTH", + "cnt": "5" + }, + { + "category": "claude_2026", + "cnt": "4" + }, + { + "category": "SERVICES", + "cnt": "4" + }, + { + "category": "WEVAL Consulting", + "cnt": "4" + }, + { + "category": "Intelligence Artificielle", + "cnt": "3" + }, + { + "category": "PARADIGM", + "cnt": "3" + }, + { + "category": "INTEGRATION", + "cnt": "3" + }, + { + "category": "FIX-CRITIQUE", + "cnt": "3" + }, + { + "category": "Voici", + "cnt": "2" + }, + { + "category": "Vous", + "cnt": "2" + }, + { + "category": "Pouvez", + "cnt": "2" + }, + { + "category": "Image", + "cnt": "2" + }, + { + "category": "Contexte", + "cnt": "2" + }, + { + "category": "L99-EXHAUSTIVE", + "cnt": "2" + }, + { + "category": "L99-GAP", + "cnt": "2" + }, + { + "category": "WEVAL Consulting Casablanca", + "cnt": "2" + }, + { + "category": "Test", + "cnt": "2" + }, + { + "category": "Salut", + "cnt": "2" + }, + { + "category": "L99-E2E", + "cnt": "2" + }, + { + "category": "Document", + "cnt": "2" + }, + { + "category": "PROVIDERS", + "cnt": "2" + }, + { + "category": "Bien", + "cnt": "2" + }, + { + "category": "WEVIA", + "cnt": "2" + }, + { + "category": "Diagramme", + "cnt": "2" + }, + { + "category": "Comparaison", + "cnt": "2" + }, + { + "category": "L99-MEGA", + "cnt": "2" + }, + { + "category": "QUALITY", + "cnt": "2" + }, + { + "category": "Cependant", + "cnt": "2" + }, + { + "category": "MONITORING", + "cnt": "2" + }, + { + "category": "L99", + "cnt": "2" + }, + { + "category": "Introduction", + "cnt": "2" + }, + { + "category": "Pour", + "cnt": "2" + }, + { + "category": "Casablanca", + "cnt": "2" + }, + { + "category": "Pourriez", + "cnt": "2" + }, + { + "category": "Vistex BTP Signavio", + "cnt": "1" + }, + { + "category": "Conduite", + "cnt": "1" + }, + { + "category": "DMAIC", + "cnt": "1" + }, + { + "category": "Industrie", + "cnt": "1" + }, + { + "category": "Proposition", + "cnt": "1" + }, + { + "category": "Accueil\nBienvenue", + "cnt": "1" + }, + { + "category": "Logo", + "cnt": "1" + }, + { + "category": "SAP ECC", + "cnt": "1" + }, + { + "category": "Votre", + "cnt": "1" + }, + { + "category": "Probl", + "cnt": "1" + }, + { + "category": "ANTI-REGRESSION", + "cnt": "1" + }, + { + "category": "Explique", + "cnt": "1" + }, + { + "category": "Zero Trust", + "cnt": "1" + }, + { + "category": "Augmented Generation", + "cnt": "1" + }, + { + "category": "RLHF", + "cnt": "1" + }, + { + "category": "Service", + "cnt": "1" + }, + { + "category": "Transformer", + "cnt": "1" + }, + { + "category": "Bonjour Bonjour", + "cnt": "1" + }, + { + "category": "Transformation", + "cnt": "1" + }, + { + "category": "Audit", + "cnt": "1" + }, + { + "category": "WEVAL", + "cnt": "1" + }, + { + "category": "Strat", + "cnt": "1" + }, + { + "category": "Maghreb", + "cnt": "1" + }, + { + "category": "ERP SAP", + "cnt": "1" + }, + { + "category": "Quelle", + "cnt": "1" + }, + { + "category": "Oracle", + "cnt": "1" + }, + { + "category": "Data", + "cnt": "1" + }, + { + "category": "Donn", + "cnt": "1" + }, + { + "category": "Quel", + "cnt": "1" + }, + { + "category": "Syst", + "cnt": "1" + }, + { + "category": "Ahmed", + "cnt": "1" + }, + { + "category": "UiPath", + "cnt": "1" + }, + { + "category": "Niveau PhD", + "cnt": "1" + }, + { + "category": "CLEANUP", + "cnt": "1" + }, + { + "category": "Notre", + "cnt": "1" + }, + { + "category": "TOUTES", + "cnt": "1" + }, + { + "category": "Maroc DDMRP OTIF", + "cnt": "1" + }, + { + "category": "Crit", + "cnt": "1" + }, + { + "category": "SAP Vistex Revenue Management", + "cnt": "1" + }, + { + "category": "Fine", + "cnt": "1" + }, + { + "category": "Compare AWS Azure GCP", + "cnt": "1" + }, + { + "category": "Healthcare", + "cnt": "1" + }, + { + "category": "BLADE", + "cnt": "1" + }, + { + "category": "Plan", + "cnt": "1" + }, + { + "category": "Conseil", + "cnt": "1" + }, + { + "category": "Nous", + "cnt": "1" + }, + { + "category": "Zero Trust SOC SIEM", + "cnt": "1" + }, + { + "category": "Amazon Web Services", + "cnt": "1" + }, + { + "category": "Retiens", + "cnt": "1" + }, + { + "category": "Diff", + "cnt": "1" + }, + { + "category": "QDRANT", + "cnt": "1" + }, + { + "category": "MITRE ATT", + "cnt": "1" + }, + { + "category": "FMCG", + "cnt": "1" + }, + { + "category": "Supply", + "cnt": "1" + }, + { + "category": "Exercice", + "cnt": "1" + }, + { + "category": "Redige", + "cnt": "1" + }, + { + "category": "Supply Chain", + "cnt": "1" + }, + { + "category": "Quels", + "cnt": "1" + }, + { + "category": "Propose", + "cnt": "1" + }, + { + "category": "Plateforme", + "cnt": "1" + }, + { + "category": "Cyber", + "cnt": "1" + }, + { + "category": "Tableau", + "cnt": "1" + }, + { + "category": "Migration SAP", + "cnt": "1" + }, + { + "category": "AUTH-AGENT", + "cnt": "1" + }, + { + "category": "Fais", + "cnt": "1" + }, + { + "category": "Iran", + "cnt": "1" + }, + { + "category": "OLLAMA", + "cnt": "1" + }, + { + "category": "Reessayez", + "cnt": "1" + }, + { + "category": "MORNE WEVAL", + "cnt": "1" + }, + { + "category": "Analyse SWOT", + "cnt": "1" + }, + { + "category": "SAP Vistex", + "cnt": "1" + }, + { + "category": "IoT WMS", + "cnt": "1" + }, + { + "category": "Industry", + "cnt": "1" + }, + { + "category": "What", + "cnt": "1" + }, + { + "category": "Strategie", + "cnt": "1" + }, + { + "category": "Rappelle", + "cnt": "1" + }, + { + "category": "DMAIC Six Sigma", + "cnt": "1" + }, + { + "category": "Avantages", + "cnt": "1" + }, + { + "category": "Explique RLHF", + "cnt": "1" + }, + { + "category": "Huawei Cloud", + "cnt": "1" + }, + { + "category": "PMO SAFe", + "cnt": "1" + }, + { + "category": "Migration SAP ECC", + "cnt": "1" + }, + { + "category": "team_work", + "cnt": "1" + }, + { + "category": "Bonjour Pr", + "cnt": "1" + }, + { + "category": "Maroc DDMRP OTIF WMS TMS", + "cnt": "1" + }, + { + "category": "Architecture", + "cnt": "1" + }, + { + "category": "Framework NIST", + "cnt": "1" + }, + { + "category": "Automatiser", + "cnt": "1" + }, + { + "category": "Compare RLHF DPO Constitutional AI", + "cnt": "1" + }, + { + "category": "Genere", + "cnt": "1" + }, + { + "category": "Elle", + "cnt": "1" + }, + { + "category": "Constitutional AI", + "cnt": "1" + }, + { + "category": "Brownfield", + "cnt": "1" + }, + { + "category": "Confirmation", + "cnt": "1" + }, + { + "category": "Architecture IA", + "cnt": "1" + }, + { + "category": "KPIs", + "cnt": "1" + }, + { + "category": "Quelles", + "cnt": "1" + }, + { + "category": "SWOT", + "cnt": "1" + }, + { + "category": "Comparons", + "cnt": "1" + }, + { + "category": "Services", + "cnt": "1" + }, + { + "category": "Maroc TMA", + "cnt": "1" + }, + { + "category": "Contraintes", + "cnt": "1" + }, + { + "category": "Intelligence", + "cnt": "1" + }, + { + "category": "Donne", + "cnt": "1" + }, + { + "category": "Vistex", + "cnt": "1" + }, + { + "category": "Maroc CMI", + "cnt": "1" + }, + { + "category": "Audite", + "cnt": "1" + }, + { + "category": "Aide", + "cnt": "1" + }, + { + "category": "DKIM DMARC", + "cnt": "1" + }, + { + "category": "Zero Trust SOC", + "cnt": "1" + }, + { + "category": "Bonjour Yacine", + "cnt": "1" + }, + { + "category": "Workshop", + "cnt": "1" + }, + { + "category": "Compare RLHF DPO GRPO Constitutional AI", + "cnt": "1" + }, + { + "category": "Comparatif ERP PME", + "cnt": "1" + }, + { + "category": "Programme", + "cnt": "1" + }, + { + "category": "SAP MM", + "cnt": "1" + }, + { + "category": "Phases", + "cnt": "1" + }, + { + "category": "Autres", + "cnt": "1" + }, + { + "category": "FHIR", + "cnt": "1" + }, + { + "category": "SESSION-7AVR", + "cnt": "1" + }, + { + "category": "FHIR IA", + "cnt": "1" + }, + { + "category": "MLOps", + "cnt": "1" + }, + { + "category": "MIROFISH", + "cnt": "1" + }, + { + "category": "Ecris", + "cnt": "1" + }, + { + "category": "Suite", + "cnt": "1" + }, + { + "category": "Nearshore", + "cnt": "1" + }, + { + "category": "Bienvenue", + "cnt": "1" + }, + { + "category": "Retrieval", + "cnt": "1" + }, + { + "category": "KYC BAM", + "cnt": "1" + }, + { + "category": "Afrique", + "cnt": "1" + }, + { + "category": "Dans", + "cnt": "1" + }, + { + "category": "Azure", + "cnt": "1" + }, + { + "category": "Budget", + "cnt": "1" + }, + { + "category": "INSTRUCTION SYSTEME", + "cnt": "1" + }, + { + "category": "CNDP", + "cnt": "1" + }, + { + "category": "Compare", + "cnt": "1" + }, + { + "category": "HubSpot", + "cnt": "1" + }, + { + "category": "Control", + "cnt": "1" + }, + { + "category": "SESSION-6AVR", + "cnt": "1" + }, + { + "category": "Bonjour Salut", + "cnt": "1" + }, + { + "category": "Maroc KPIs OTIF", + "cnt": "1" + }, + { + "category": "Vistex SAP", + "cnt": "1" + }, + { + "category": "Traduis", + "cnt": "1" + }, + { + "category": "Maroc IoT WMS", + "cnt": "1" + }, + { + "category": "SaaS", + "cnt": "1" + }, + { + "category": "CODE BLOCK", + "cnt": "1" + }, + { + "category": "Cahier", + "cnt": "1" + }, + { + "category": "Maroc FHIR", + "cnt": "1" + }, + { + "category": "DESIGN", + "cnt": "1" + }, + { + "category": "Compare RLHF", + "cnt": "1" + }, + { + "category": "Dynamics", + "cnt": "1" + }, + { + "category": "Python", + "cnt": "1" + }, + { + "category": "FORMAT OBLIGATOIRE", + "cnt": "1" + }, + { + "category": "SAP ERP", + "cnt": "1" + }, + { + "category": "INFRA-SESSION", + "cnt": "1" + }, + { + "category": "Cette", + "cnt": "1" + }, + { + "category": "OWASP Top", + "cnt": "1" + }, + { + "category": "Logo Weval", + "cnt": "1" + }, + { + "category": "ADKAR", + "cnt": "1" + }, + { + "category": "GENERAL", + "cnt": "1" + } + ], + "qdrant_vectors": 386 + }, + "applications": [ + { + "name": "WEVIA Chatbot", + "type": "AI", + "url": "\/wevia", + "port": null, + "server": "S204", + "auth": "public" + }, + { + "name": "WEVIA Admin", + "type": "Admin", + "url": "\/wevia-admin", + "port": null, + "server": "S204", + "auth": "php-session" + }, + { + "name": "WEVIA Life", + "type": "Email AI", + "url": "\/products\/wevialife-app.html", + "port": null, + "server": "S204", + "auth": "php-session" + }, + { + "name": "Workspace", + "type": "Hub", + "url": "\/products\/workspace.html", + "port": null, + "server": "S204", + "auth": "php-session" + }, + { + "name": "Arsenal\/WEVADS", + "type": "Email Marketing", + "url": "wevads.weval-consulting.com", + "port": 5890, + "server": "S95", + "auth": "php-session" + }, + { + "name": "ADX\/iResponse", + "type": "Email Platform", + "url": "wevads.weval-consulting.com", + "port": 5821, + "server": "S95", + "auth": "iResponse" + }, + { + "name": "Ethica HCP", + "type": "Healthcare B2B", + "url": "consent.wevup.app", + "port": null, + "server": "S204", + "auth": "ethica-auth" + }, + { + "name": "CRM (Twenty)", + "type": "CRM", + "url": "crm.weval-consulting.com", + "port": 3000, + "server": "S204", + "auth": "php-session" + }, + { + "name": "Mattermost", + "type": "Chat", + "url": "mm.weval-consulting.com", + "port": 8065, + "server": "S204", + "auth": "php-session" + }, + { + "name": "n8n", + "type": "Automation", + "url": "n8n.weval-consulting.com", + "port": 5678, + "server": "S204", + "auth": "php-session" + }, + { + "name": "Uptime Kuma", + "type": "Monitoring", + "url": "monitor.weval-consulting.com", + "port": 3001, + "server": "S204", + "auth": "php-session" + }, + { + "name": "Plausible", + "type": "Analytics", + "url": "analytics.weval-consulting.com", + "port": 8000, + "server": "S204", + "auth": "php-session" + }, + { + "name": "DeerFlow", + "type": "AI Research", + "url": "deerflow.weval-consulting.com", + "port": 2024, + "server": "S204", + "auth": "php-session" + }, + { + "name": "SearXNG", + "type": "Search", + "url": null, + "port": 8888, + "server": "S204", + "auth": "internal" + }, + { + "name": "Qdrant", + "type": "Vector DB", + "url": null, + "port": 6333, + "server": "S204", + "auth": "internal" + }, + { + "name": "Ollama", + "type": "LLM Runtime", + "url": null, + "port": 11434, + "server": "S204", + "auth": "internal" + }, + { + "name": "Flowise", + "type": "AI Flow", + "url": null, + "port": 3088, + "server": "S204", + "auth": "internal" + }, + { + "name": "MiroFish", + "type": "AI Agent", + "url": "mirofish.weval-consulting.com", + "port": 3050, + "server": "S204", + "auth": "php-session" + }, + { + "name": "Open WebUI", + "type": "LLM UI", + "url": null, + "port": 3002, + "server": "S204", + "auth": "internal" + }, + { + "name": "Vaultwarden", + "type": "Passwords", + "url": null, + "port": 8222, + "server": "S204", + "auth": "internal" + }, + { + "name": "Prometheus", + "type": "Metrics", + "url": null, + "port": 9000, + "server": "S204", + "auth": "internal" + }, + { + "name": "PMTA", + "type": "MTA", + "url": null, + "port": 25, + "server": "S95", + "auth": "internal" + }, + { + "name": "KumoMTA", + "type": "MTA", + "url": null, + "port": 8010, + "server": "S95", + "auth": "internal" + }, + { + "name": "Sentinel", + "type": "Orchestrator", + "url": null, + "port": 5890, + "server": "S95", + "auth": "internal" + } + ], + "cloud": [ + { + "provider": "Hetzner", + "role": "S204+S95", + "type": "Bare Metal", + "region": "Germany" + }, + { + "provider": "OVH", + "role": "S151 DR\/Tracking", + "type": "VPS", + "region": "France" + }, + { + "provider": "Cloudflare", + "role": "CDN+DNS+WAF", + "type": "SaaS", + "region": "Global" + }, + { + "provider": "Huawei Cloud", + "role": "Partner Certifié", + "type": "IaaS", + "region": "MENA" + }, + { + "provider": "Scaleway", + "role": "GPU Inference", + "type": "IaaS", + "region": "France" + } + ], + "partnerships": [ + "SAP Gold Partner", + "Huawei Cloud", + "Vistex", + "IQVIA", + "Scaleway" + ], + "ux_agent": { + "pass": 3, + "fail": 0, + "warn": 0, + "total": 3, + "timestamp": "", + "gauge_health_center": "X=0px Y=0px", + "gauge_auto_center": "X=0px Y=0px", + "design_tokens": { + "bg": "#09090b", + "card": "#18181b", + "font": "Inter" + } + }, + "l99": { + "master": { + "total": 93, + "pass": 89, + "fail": 2, + "timestamp": "2026-04-07T01:32:48.454012" + }, + "auth": { + "pass": 24, + "fail": 0 + } + }, + "cortex": { + "fast_lines": 3620, + "router_lines": 6152, + "router_functions": 17, + "today_requests": 1, + "today_cost": 0, + "avg_latency_ms": 768, + "top_provider": "cerebras", + "providers_used": 1 + }, + "optimizations": { + "recent_commits": [], + "auto_fixes": [ + { + "fact": "AUTONOMY 17Apr 01:55: 1 fixes. Disk light cleanup 85%", + "created_at": "2026-04-17 03:55:05.396708" + }, + { + "fact": "AUTONOMY 17Apr 01:50: 1 fixes. Disk light cleanup 85%", + "created_at": "2026-04-17 03:50:05.707155" + }, + { + "fact": "AUTONOMY 17Apr 01:45: 1 fixes. Disk light cleanup 85%", + "created_at": "2026-04-17 03:45:05.056255" + }, + { + "fact": "AUTONOMY 17Apr 01:40: 1 fixes. Disk light cleanup 85%", + "created_at": "2026-04-17 03:40:05.447373" + }, + { + "fact": "AUTONOMY 17Apr 01:35: 1 fixes. Disk light cleanup 85%", + "created_at": "2026-04-17 03:35:04.853397" + }, + { + "fact": "AUTONOMY 17Apr 01:30: 1 fixes. Disk light cleanup 85%", + "created_at": "2026-04-17 03:30:06.478103" + }, + { + "fact": "AUTONOMY 17Apr 01:25: 1 fixes. Disk light cleanup 85%", + "created_at": "2026-04-17 03:25:15.244066" + }, + { + "fact": "AUTONOMY 17Apr 01:20: 1 fixes. Disk light cleanup 85%", + "created_at": "2026-04-17 03:20:05.661753" + }, + { + "fact": "AUTONOMY 17Apr 01:15: 1 fixes. Disk light cleanup 86%", + "created_at": "2026-04-17 03:15:05.331689" + }, + { + "fact": "AUTONOMY 17Apr 01:10: 1 fixes. Disk light cleanup 85%", + "created_at": "2026-04-17 03:10:05.15334" + } + ], + "architecture_decisions": [ + { + "fact": "Crons: root=51 www-data=55 cron.d=72 total=178", + "created_at": "2026-04-13 00:30:48.940882" + }, + { + "fact": "Crons: root=51 www-data=55 cron.d=70 total=176", + "created_at": "2026-04-12 20:30:07.357094" + }, + { + "fact": "Crons: root=51 www-data=55 cron.d=70 total=176", + "created_at": "2026-04-12 18:30:05.962933" + }, + { + "fact": "Crons: root=51 www-data=55 cron.d=70 total=176", + "created_at": "2026-04-12 16:30:13.56815" + }, + { + "fact": "Crons: root=51 www-data=57 cron.d=70 total=178", + "created_at": "2026-04-12 14:30:11.101941" + }, + { + "fact": "Crons: root=51 www-data=57 cron.d=70 total=178", + "created_at": "2026-04-12 12:30:08.795912" + }, + { + "fact": "Crons: root=51 www-data=57 cron.d=70 total=178", + "created_at": "2026-04-12 10:30:04.181935" + }, + { + "fact": "Crons: root=51 www-data=57 cron.d=70 total=178", + "created_at": "2026-04-12 08:30:04.196728" + }, + { + "fact": "Crons: root=51 www-data=57 cron.d=70 total=178", + "created_at": "2026-04-12 06:30:04.792965" + }, + { + "fact": "Crons: root=51 www-data=57 cron.d=70 total=178", + "created_at": "2026-04-12 04:30:06.68899" + }, + { + "fact": "Crons: root=51 www-data=57 cron.d=70 total=178", + "created_at": "2026-04-12 02:30:07.207832" + }, + { + "fact": "Crons: root=51 www-data=54 cron.d=69 total=174", + "created_at": "2026-04-12 00:30:13.084556" + }, + { + "fact": "Crons: root=50 www-data=52 cron.d=69 total=171", + "created_at": "2026-04-11 22:30:07.088896" + }, + { + "fact": "Crons: root=50 www-data=52 cron.d=69 total=171", + "created_at": "2026-04-11 20:30:08.94444" + }, + { + "fact": "Crons: root=50 www-data=48 cron.d=69 total=167", + "created_at": "2026-04-11 18:30:04.55611" + } + ], + "pipelines": [ + { + "name": "CORTEX Smart Router", + "status": "active", + "desc": "T0 Ollama → T1 Free APIs → T2 Fallbacks", + "routes": 3620 + }, + { + "name": "RAG Ingest", + "status": "active", + "desc": "Cron *\/30 → Qdrant semantic indexing", + "freq": "*\/30" + }, + { + "name": "L99 Quality Gate", + "status": "active", + "desc": "253+ tests, 28 auth tests", + "freq": "*\/30" + }, + { + "name": "Blade Orchestrator", + "status": "active", + "desc": "GPU polling + model sync", + "freq": "*\/30" + }, + { + "name": "Infra Guardian", + "status": "active", + "desc": "Auto-restart nginx\/php\/docker", + "freq": "*\/5" + }, + { + "name": "Ethica Scraper Pipeline", + "status": "active", + "desc": "4 spiders, RichScraper, SearXNG", + "freq": "daily" + }, + { + "name": "WEVIA Dream", + "status": "active", + "desc": "Background learning + dataset enrichment", + "freq": "*\/30" + }, + { + "name": "Daily Brief", + "status": "active", + "desc": "Morning synthesis → Mattermost", + "freq": "daily 07h" + }, + { + "name": "Architecture Scanner", + "status": "active", + "desc": "This page — auto-scan + recommendations", + "freq": "*\/30" + } + ], + "agents_deployed": [ + { + "name": "Monitor Agent", + "role": "Watches all services, auto-restarts", + "status": "active" + }, + { + "name": "DevOps Agent", + "role": "Git sync, deployment, rollback", + "status": "active" + }, + { + "name": "Ethica Agent", + "role": "HCP scraping, validation, enrichment", + "status": "active" + }, + { + "name": "Security Agent", + "role": "Key rotation, secret scan, vulnerability check", + "status": "active" + }, + { + "name": "Blade Agent", + "role": "GPU orchestration, model management", + "status": "active" + }, + { + "name": "Dream Agent", + "role": "Background learning, dataset generation", + "status": "active" + }, + { + "name": "RAG Agent", + "role": "Knowledge ingestion, vector indexing", + "status": "active" + }, + { + "name": "Quality Agent", + "role": "L99 NonReg, regression detection", + "status": "active" + } + ] + }, + "mirofish": { + "status": "active", + "reports": 0, + "bridge": "\/api\/mirofish-bridge.php" + }, + "recommendations": { + "score": 100, + "total": 0, + "critical": 0, + "warning": 0, + "info": 0, + "opportunity": 0, + "auto_fixed": 0, + "fixes_log": [], + "recommendations": [] + }, + "scan_time_ms": 6231, + "gaps": [], + "score": 100, + "automation": { + "coverage": 100, + "steps": 30, + "total": 30 + } +} \ No newline at end of file diff --git a/api/blade-tasks/key_github_token_20260417.json b/api/blade-tasks/key_github_token_20260417.json index 2685aeade..1876f3d96 100644 --- a/api/blade-tasks/key_github_token_20260417.json +++ b/api/blade-tasks/key_github_token_20260417.json @@ -10,6 +10,6 @@ "SAMBANOVA_KEY": "https:\/\/cloud.sambanova.ai\/apis", "MISTRAL_KEY": "https:\/\/console.mistral.ai\/api-keys" }, - "ts": "2026-04-17T01:59:11+00:00", + "ts": "2026-04-17T02:00:49+00:00", "priority": "P0" } \ No newline at end of file diff --git a/api/blade-tasks/key_sambanova_key_20260417.json b/api/blade-tasks/key_sambanova_key_20260417.json index 2af636d6a..ac50d694d 100644 --- a/api/blade-tasks/key_sambanova_key_20260417.json +++ b/api/blade-tasks/key_sambanova_key_20260417.json @@ -1,7 +1,7 @@ { "type": "key_renewal", "provider": "SAMBANOVA_KEY", - "reason": "FAIL", + "reason": "NO_BALANCE", "urls": { "GITHUB_TOKEN": "https:\/\/github.com\/settings\/tokens\/new?scopes=repo,workflow&description=WEVIA-Auto", "GROQ_KEY": "https:\/\/console.groq.com\/keys", @@ -10,6 +10,6 @@ "SAMBANOVA_KEY": "https:\/\/cloud.sambanova.ai\/apis", "MISTRAL_KEY": "https:\/\/console.mistral.ai\/api-keys" }, - "ts": "2026-04-17T01:59:11+00:00", + "ts": "2026-04-17T02:00:49+00:00", "priority": "P1" } \ No newline at end of file diff --git a/api/cortex-report.json b/api/cortex-report.json index 93f31bf40..680f84e1f 100644 --- a/api/cortex-report.json +++ b/api/cortex-report.json @@ -1,21 +1,21 @@ { - "timestamp": "2026-04-17 00:00", + "timestamp": "2026-04-17 04:00", "checks": { "registry": "0 agents", "system": { "docker": "19", - "ram": "5.3Gi/30Gi", - "disk": "84%", - "load": "4.26", - "uptime": "up 2 days, 12 hours, 8 minutes" + "ram": "5.6Gi/30Gi", + "disk": "85%", + "load": "3.92", + "uptime": "up 2 days, 16 hours, 8 minutes" }, - "services": "5/10 OK", + "services": "7/10 OK", "nonreg": "153/153 (100%)", "qdrant": "16550 vectors", "crons": "42 active", "routes": "445", "dataset": "5751 pairs", - "wiki": "1283 entries", + "wiki": "1288 entries", "enterprise": "690 agents (dorm=0 dead=167)" }, "analysis": "Analyse indisponible" diff --git a/api/em-api.php b/api/em-api.php index c5a29faf0..31b542175 100644 --- a/api/em-api.php +++ b/api/em-api.php @@ -409,6 +409,32 @@ case "lean6sigma-dashboard": break; +case "universal-connectors": + $cat = $_GET["category"] ?? null; + $search = $_GET["q"] ?? null; + $sql = "SELECT connector_code, connector_name, category, auth_type, base_url, docs_url, webhook_support, realtime_support, status, use_cases FROM weval.universal_connectors WHERE 1=1"; + $params = []; + if ($cat) { $sql .= " AND category=?"; $params[] = $cat; } + if ($search) { $sql .= " AND (connector_name ILIKE ? OR connector_code ILIKE ?)"; $params[] = "%$search%"; $params[] = "%$search%"; } + $sql .= " ORDER BY category, connector_name"; + $stmt = $pdo->prepare($sql); $stmt->execute($params); + $rows = $stmt->fetchAll(PDO::FETCH_ASSOC); + foreach ($rows as &$r) $r["use_cases"] = json_decode($r["use_cases"] ?? "[]", true); + $categories = $pdo->query("SELECT category, COUNT(*) as c FROM weval.universal_connectors GROUP BY category ORDER BY c DESC")->fetchAll(PDO::FETCH_ASSOC); + echo json_encode(["total"=>count($rows), "by_category"=>$categories, "connectors"=>$rows]); + break; + +case "universal-stats": + $stats = []; + $stats["total"] = (int)$pdo->query("SELECT COUNT(*) FROM weval.universal_connectors")->fetchColumn(); + $stats["by_category"] = $pdo->query("SELECT category, COUNT(*) as c FROM weval.universal_connectors GROUP BY category ORDER BY c DESC")->fetchAll(PDO::FETCH_ASSOC); + $stats["by_auth"] = $pdo->query("SELECT auth_type, COUNT(*) as c FROM weval.universal_connectors GROUP BY auth_type ORDER BY c DESC")->fetchAll(PDO::FETCH_ASSOC); + $stats["webhook_enabled"] = (int)$pdo->query("SELECT COUNT(*) FROM weval.universal_connectors WHERE webhook_support=true")->fetchColumn(); + $stats["realtime_enabled"] = (int)$pdo->query("SELECT COUNT(*) FROM weval.universal_connectors WHERE realtime_support=true")->fetchColumn(); + echo json_encode($stats); + break; + + default: echo json_encode([ "service" => "WEVIA EM API", @@ -437,7 +463,9 @@ default: "/api/em/andon?tenant=&status=", "/api/em/five-s?tenant=", "/api/em/a3?tenant=", - "/api/em/lean6sigma-dashboard?tenant=" + "/api/em/lean6sigma-dashboard?tenant=", + "/api/em/universal-connectors?category=&q=", + "/api/em/universal-stats" ] ]); } diff --git a/api/notebooks/weval-finetune-chatml.jsonl b/api/notebooks/weval-finetune-chatml.jsonl new file mode 100644 index 000000000..e69de29bb diff --git a/api/opus-patch-ethica-router.php.archived-20260417 b/api/opus-patch-ethica-router.php.archived-20260417 new file mode 100644 index 000000000..f59c76ae5 --- /dev/null +++ b/api/opus-patch-ethica-router.php.archived-20260417 @@ -0,0 +1,67 @@ +[], 'ok'=>false]; +$SRC = '/opt/wevia-brain/wevia-master-router.php'; +$TS = date('Ymd-Hi'); +$MARKER = 'OPUS5-ETHICA-COUNT-FIX-v1'; + +$content = file_get_contents($SRC); +$R['steps'][] = ['read' => strlen($content).'B']; + +if (strpos($content, $MARKER) !== false) { + $R['ok']=true; $R['steps'][]=['already']=1; die(json_encode($R)); +} + +// GOLD +$GOLD = "/opt/wevads/vault/wevia-master-router-ETHICA-{$TS}.gold.php"; +copy($SRC, $GOLD); +$R['steps'][] = ['gold' => $GOLD, 'size' => filesize($GOLD)]; + +// Remplacement ciblé et idempotent +$old = ' // MASTER-WIRED INTENT: ethica_count + if (preg_match(\'/\\b(clients ethica|ethica count|ethica hcp)\\b/iu\', $msg)) { + $_out = @shell_exec("timeout 10 cat /etc/hostname 2>&1 | head -c 1500"); + return array_merge($base, [\'content\' => "ethica_count (auto-wired):\\n" . trim((string)$_out)]); + }'; + +$new = ' // MASTER-WIRED INTENT: ethica_count OPUS5-ETHICA-COUNT-FIX-v1 + if (preg_match(\'/\\b(clients ethica|ethica count|ethica hcp|combien ethica|ethica combien|hcp total count|total hcps|combien de hcp|combien medecins ethica)\\b/iu\', $msg)) { + $_out = @shell_exec("timeout 10 env PGPASSWORD=admin123 psql -h 10.1.0.3 -U admin -d adx_system -tAc \"SELECT COUNT(*) FROM ethica.medecins_real\" 2>&1"); + $_out = trim((string)$_out); + if (is_numeric($_out)) $_out = number_format((int)$_out, 0, \'.\', \',\') . \' HCPs LIVE (ethica.medecins_real)\'; + return array_merge($base, [\'content\' => "ethica_count (auto-wired):\\n" . $_out]); + }'; + +$newContent = str_replace($old, $new, $content, $cnt); +$R['steps'][] = ['replacements' => $cnt]; +if ($cnt === 0) { $R['steps'][]=['err'=>'old block not matched - check indentation']; die(json_encode($R)); } + +// Lint +$TMP = "/tmp/wmr-{$TS}.php"; +file_put_contents($TMP, $newContent); +exec("php8.4 -l $TMP 2>&1", $lo, $lr); +$R['steps'][] = ['lint_rc' => $lr, 'lint' => $lo]; +if ($lr !== 0) { unlink($TMP); $R['steps'][]=['err'=>'LINT FAIL']; die(json_encode($R)); } + +// Check chattr +exec('lsattr '.escapeshellarg($SRC).' 2>&1', $lsa); +$R['steps'][] = ['lsattr' => $lsa]; + +exec('chattr -i '.escapeshellarg($SRC).' 2>&1', $c1, $rc1); +$R['steps'][] = ['chattr_minus' => $rc1, 'out' => $c1]; + +$w = @file_put_contents($SRC, $newContent); +$R['steps'][] = ['written' => $w]; + +exec('chattr +i '.escapeshellarg($SRC).' 2>&1', $c2, $rc2); +$R['steps'][] = ['chattr_plus' => $rc2]; + +exec("php8.4 -l $SRC 2>&1", $flo, $flr); +$R['steps'][] = ['final_lint_rc' => $flr, 'final_lint' => $flo]; + +@opcache_invalidate($SRC, true); +@opcache_reset(); + +unlink($TMP); +$R['ok'] = ($flr === 0 && $w > 100000); +echo json_encode($R, JSON_PRETTY_PRINT); diff --git a/api/oss-trending.json b/api/oss-trending.json index f620866bb..0e0e8d2e6 100644 --- a/api/oss-trending.json +++ b/api/oss-trending.json @@ -10,7 +10,7 @@ "has_docker": false, "wired": true, "description": "", - "discovered": "2026-04-17T03:00:01.826497" + "discovered": "2026-04-17T04:00:04.400584" }, { "name": "wevia-brain", @@ -23,7 +23,7 @@ "has_docker": false, "wired": true, "description": "", - "discovered": "2026-04-17T03:00:01.918577" + "discovered": "2026-04-17T04:00:04.461218" }, { "name": "skills", @@ -36,7 +36,7 @@ "has_docker": false, "wired": true, "description": "", - "discovered": "2026-04-17T03:00:01.728075" + "discovered": "2026-04-17T04:00:04.167416" }, { "name": "everything-claude-code", @@ -49,7 +49,7 @@ "has_docker": false, "wired": true, "description": "**Language:** English | [Português (Brasil)](docs/pt-BR/README.md) | [简体中文](README.zh-CN.md) | [繁體中文](docs/zh-TW/README.md) | [日本語](docs/ja-JP/README.", - "discovered": "2026-04-17T03:00:01.587765" + "discovered": "2026-04-17T04:00:03.315209" }, { "name": "open-webui-fresh", @@ -62,7 +62,7 @@ "has_docker": true, "wired": true, "description": "# Open WebUI 👋 ![GitHub stars](https://img.shields.io/github/stars/open-webui/open-webui?style=social) ![GitHub forks](https://img.shields.io/github/", - "discovered": "2026-04-17T03:00:01.677665" + "discovered": "2026-04-17T04:00:03.827738" }, { "name": "activepieces", @@ -75,7 +75,7 @@ "has_docker": true, "wired": true, "description": "

\"Activepieces\" # 🚀 SuperClaude Framework [![Run in Smithery](https://smithery.ai/badge/skills/SuperClaude-Org)](https://smithery.ai/skills?ns=", - "discovered": "2026-04-17T03:00:01.465191" + "discovered": "2026-04-17T04:00:02.884866" }, { "name": "paperclip-weval", @@ -127,7 +127,7 @@ "has_docker": true, "wired": true, "description": "

\"Paperclip

Support my work here: Bags.fm

[![listmonk-logo](https://user-ima", - "discovered": "2026-04-17T03:00:01.622900" + "discovered": "2026-04-17T04:00:03.557247" }, { "name": "rnd-edict", @@ -205,7 +205,7 @@ "has_docker": true, "wired": true, "description": "

⚔️ 三省六部 · Edict

我用 1300 年前的帝国制度,重新设计了 AI 多 Agent 协作架构。
结果发现,古人比现代 AI 框架更懂分权制衡。

", - "discovered": "2026-04-17T03:00:01.712392" + "discovered": "2026-04-17T04:00:04.100979" }, { "name": "anythingllm", @@ -218,7 +218,7 @@ "has_docker": false, "wired": true, "description": "

\"icon\"/



# 🌌 Antigravity Awesome Skills: 1,340+ Agentic S", - "discovered": "2026-04-17T03:00:01.483450" + "discovered": "2026-04-17T04:00:02.998121" }, { "name": "deepagent", @@ -283,7 +283,7 @@ "has_docker": false, "wired": true, "description": "# DeepAgents 기반 Research Multi Agent System Agent 2.0 Paradigm 을 잘 구현하는 DeepAgent 를 활용해서, FileSystem 기반 Context Engineering 을 원활히 수행하는 Research 용 Mul", - "discovered": "2026-04-17T03:00:01.571084" + "discovered": "2026-04-17T04:00:03.268468" }, { "name": "rnd-astron-agent", @@ -296,7 +296,7 @@ "has_docker": false, "wired": true, "description": "[![Astron_Readme](./docs/imgs/Astron_Readme.png)](https://agent.xfyun.cn)
[![License](https://img.shields.io/badge/license-apac", - "discovered": "2026-04-17T03:00:01.707571" + "discovered": "2026-04-17T04:00:04.084886" }, { "name": "autogen", @@ -309,7 +309,7 @@ "has_docker": false, "wired": true, "description": "
\"AutoGen [![Twit", - "discovered": "2026-04-17T03:00:01.495702" + "discovered": "2026-04-17T04:00:03.078195" }, { "name": "HolyClaude", @@ -322,7 +322,7 @@ "has_docker": true, "wired": true, "description": "🌍 **English** | [Español](docs/translations/README.es.md) | [Français](docs/translations/README.fr.md) | [Italiano](docs/translations/README.it.md) | ", - "discovered": "2026-04-17T03:00:01.452254" + "discovered": "2026-04-17T04:00:02.817430" }, { "name": "aios", @@ -335,7 +335,7 @@ "has_docker": true, "wired": true, "description": "# AIOS: AI Agent Operating System r.json()); + const txt=r.content||''; + const lines=txt.split('\n').filter(l=>l.includes('✅')||l.includes('❌')); + document.getElementById('cap-grid').innerHTML=lines.map(l=>{ + const ok=l.includes('✅'); + const name=l.replace(/^.*[✅❌]\s+/,'').replace(/\s*\(HTTP.*\)\s*$/,'').trim(); + const http=(l.match(/HTTP\s+(\d+)/)||[])[1]||'-'; + return `

${ok?'✅':'❌'} ${name}

+
StatusHTTP ${http}
+
Wired WEVIAYES
+
Typeopen-source
+
`; + }).join(''); +} +async function loadUC(){ + const d=await fetch('/api/em/universal-stats').then(r=>r.json()); + document.getElementById('uc-grid').innerHTML=(d.by_category||[]).map(c=>` +
+ `).join(''); +} +(async()=>{await loadCaps();await loadUC()})(); + diff --git a/universal-integration-hub.html b/universal-integration-hub.html new file mode 100644 index 000000000..8aacd227c --- /dev/null +++ b/universal-integration-hub.html @@ -0,0 +1,65 @@ +Universal Integration Hub — WEVIA EM +

🔌 Universal Integration Hub

WEVIA EM s'interface avec tout ERP · CRM · IA · Cloud · Hardware · API — 104 connecteurs
+
Chargement...
+ +
Chargement...
+