diff --git a/agent-social-feed.html b/agent-social-feed.html
index 9596bfc9d..55e172520 100644
--- a/agent-social-feed.html
+++ b/agent-social-feed.html
@@ -2,7 +2,7 @@
+
+
+
+
🏛 Rooms Live — Meeting-style real-time interactions
+
4 rooms thématiques · tables rondes · bulles discussion temps réel (SSE-driven) · agents orbitant autour · transcript live en bas de chaque room
+
+
+
+
+
+
+
Bulles sur SSE events · auto-disparition 4s · routed par thème
+
+
+
+
+
+
🔖 Topics actifs (filter)
Loading topics...
@@ -113,40 +157,40 @@ body{background:linear-gradient(135deg,#0a0e1a 0%,#1a1530 50%,#0d1117 100%);colo
📰 Feed Posts (social-signals-hub)
-
Loading posts from /api/social-signals-hub.php...
+
Loading...
-
+
💬 Conversations 1-to-1 par topic
-
Sélectionne un topic pour voir les échanges directs entre 2 agents (cloudbot-interagent.php?topic=X)
+
Sélectionne un topic pour voir les échanges directs entre 2 agents
Loading topics...
-
+
-
👥 Multi-threads (≥3 agents discussion)
-
Fils multi-agents extraits de cloudbot-interagent.php avec filter participants ≥ 3
-
Loading multi-threads...
+
👥 Multi-threads (≥3 agents)
+
Fils multi-agents extraits de cloudbot-interagent.php
+
Loading...
-
+
-
⚡ SSE Live Stream (cloudbot-social-feed.php)
-
4 streams : router-activity · social-signals · wevia-conversations · ecosystem-health · interval 3s
-
Connecting to EventSource...
+
⚡ SSE Live Stream
+
4 streams · router-activity · social-signals · wevia-conversations · ecosystem-health · interval 3s
+
diff --git a/api/agent-escalation.json b/api/agent-escalation.json
index 5f3aa6647..c2e16fb9b 100644
--- a/api/agent-escalation.json
+++ b/api/agent-escalation.json
@@ -1,6 +1,6 @@
{
"agent": "V41_Risk_Escalation",
- "ts": "2026-04-24T01:15:02+02:00",
+ "ts": "2026-04-24T01:30:04+02:00",
"dg_alerts_active": 7,
"wevia_life_stats_preview": "{
"ok": true,
diff --git a/api/agent-leads-sync.json b/api/agent-leads-sync.json
index 41afe11b8..3290f00f9 100644
--- a/api/agent-leads-sync.json
+++ b/api/agent-leads-sync.json
@@ -1,6 +1,6 @@
{
"agent": "V45_Leads_Sync",
- "ts": "2026-04-24T01:20:03+02:00",
+ "ts": "2026-04-24T01:30:05+02:00",
"paperclip_total": 48,
"active_customer": 4,
"warm_prospect": 5,
diff --git a/api/agent-risk-monitor.json b/api/agent-risk-monitor.json
index 27b4d7ff8..e6152ff35 100644
--- a/api/agent-risk-monitor.json
+++ b/api/agent-risk-monitor.json
@@ -1,11 +1,11 @@
{
"agent": "V54_Risk_Monitor_Live",
- "ts": "2026-04-24T01:00:05+02:00",
+ "ts": "2026-04-24T01:30:05+02:00",
"critical_risks": {
"RW01_pipeline_vide": {
"pipeline_keur": 0,
- "mql_auto": 17,
- "residual_risk_pct": 83,
+ "mql_auto": 20,
+ "residual_risk_pct": 80,
"trend": "mitigation_V42_V45_active"
},
"RW02_dependance_ethica": {
@@ -22,7 +22,7 @@
},
"RW12_burnout": {
"agents_cron_active": 15,
- "load_5min": "35.05",
+ "load_5min": "7.8",
"automation_coverage_pct": 70,
"residual_risk_pct": 60,
"trend": "V52_goldratt_options_active"
diff --git a/api/architecture-scan.json b/api/architecture-scan.json
index e69de29bb..4bc4f5fa1 100644
--- a/api/architecture-scan.json
+++ b/api/architecture-scan.json
@@ -0,0 +1,1978 @@
+{
+ "generated": "2026-04-23 23:30:02",
+ "version": "1.0",
+ "servers": [
+ {
+ "id": "S204",
+ "ip": "204.168.152.13",
+ "private": "10.1.0.2",
+ "role": "PRIMARY",
+ "ssh": 49222,
+ "disk_pct": 97,
+ "disk_avail": "4.9G",
+ "uptime": "up 1 week, 2 days, 13 hours, 38 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": 87,
+ "disk_avail": "21G",
+ "sentinel": 1
+ },
+ {
+ "id": "S151",
+ "ip": "151.80.235.110",
+ "private": null,
+ "role": "DR\/Tracking OVH",
+ "ssh": 22
+ }
+ ],
+ "docker": [
+ {
+ "name": "flaresolverr-w274",
+ "status": "Up 5 hours",
+ "ports": ""
+ },
+ {
+ "name": "loki",
+ "status": "Up 7 days",
+ "ports": ""
+ },
+ {
+ "name": "listmonk",
+ "status": "Up 7 days",
+ "ports": ""
+ },
+ {
+ "name": "plausible-plausible-events-db-1",
+ "status": "Up 6 days",
+ "ports": ""
+ },
+ {
+ "name": "n8n-docker-n8n-1",
+ "status": "Up 7 days",
+ "ports": ""
+ },
+ {
+ "name": "mattermost-docker-mm-db-1",
+ "status": "Up 7 days",
+ "ports": ""
+ },
+ {
+ "name": "mattermost-docker-mattermost-1",
+ "status": "Up 7 days (healthy)",
+ "ports": ""
+ },
+ {
+ "name": "twenty",
+ "status": "Up 7 days",
+ "ports": ""
+ },
+ {
+ "name": "twenty-redis",
+ "status": "Up 7 days",
+ "ports": ""
+ },
+ {
+ "name": "langfuse",
+ "status": "Up 7 days",
+ "ports": ""
+ },
+ {
+ "name": "redis-weval",
+ "status": "Up 9 days",
+ "ports": ""
+ },
+ {
+ "name": "gitea",
+ "status": "Up 9 days",
+ "ports": ""
+ },
+ {
+ "name": "node-exporter",
+ "status": "Up 9 days",
+ "ports": ""
+ },
+ {
+ "name": "prometheus",
+ "status": "Up 9 days",
+ "ports": ""
+ },
+ {
+ "name": "searxng",
+ "status": "Up 9 days",
+ "ports": ""
+ },
+ {
+ "name": "uptime-kuma",
+ "status": "Up 3 days (healthy)",
+ "ports": ""
+ },
+ {
+ "name": "vaultwarden",
+ "status": "Up 9 days (healthy)",
+ "ports": ""
+ },
+ {
+ "name": "qdrant",
+ "status": "Up 9 days",
+ "ports": ""
+ }
+ ],
+ "domains": [
+ {
+ "file": "ai.weval-consulting.com",
+ "server_names": [
+ "ai.weval-consulting.com"
+ ],
+ "ssl": true,
+ "php-session": false,
+ "php-session_paths": false,
+ "auth_complete": false
+ },
+ {
+ "file": "analytics.weval-consulting.com",
+ "server_names": [
+ "analytics.weval-consulting.com"
+ ],
+ "ssl": true,
+ "php-session": false,
+ "php-session_paths": false,
+ "auth_complete": false
+ },
+ {
+ "file": "arsenal.weval-consulting.com",
+ "server_names": [
+ "arsenal.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": "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": 341,
+ "s204_products": 104,
+ "s204_api_php": 1099,
+ "s204_wevia_php": 254,
+ "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",
+ "langfuse",
+ "paperclip"
+ ],
+ "key_tables": {
+ "kb_learnings": 6304,
+ "kb_documents": 0,
+ "ethica_medecins": 50004,
+ "enterprise_agents": 0
+ }
+ },
+ "ollama": [
+ {
+ "name": "qwen2.5:32b-instruct-q4_K_M",
+ "family": "qwen2",
+ "params": "32.8B",
+ "quant": "Q4_K_M",
+ "size_gb": 19.9
+ },
+ {
+ "name": "huihui_ai\/llama3.2-abliterate:latest",
+ "family": "llama",
+ "params": "3.6B",
+ "quant": "Q4_K_M",
+ "size_gb": 2.2
+ },
+ {
+ "name": "weval-brain-v4:latest",
+ "family": "qwen3",
+ "params": "4.0B",
+ "quant": "Q4_K_M",
+ "size_gb": 2.5
+ },
+ {
+ "name": "llama3.2:latest",
+ "family": "llama",
+ "params": "3.2B",
+ "quant": "Q4_K_M",
+ "size_gb": 2
+ },
+ {
+ "name": "nomic-embed-text:latest",
+ "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": 19110
+ },
+ {
+ "name": "wevia_graph",
+ "vectors": 3
+ },
+ {
+ "name": "weval_intents_memory",
+ "vectors": 50
+ },
+ {
+ "name": "obsidian_vault",
+ "vectors": 46
+ },
+ {
+ "name": "kb_bpmn_flows",
+ "vectors": 7
+ },
+ {
+ "name": "kb_ethica_pharma",
+ "vectors": 16
+ },
+ {
+ "name": "kb_consulting_strategy",
+ "vectors": 6
+ },
+ {
+ "name": "wevia_learnings",
+ "vectors": 1736
+ },
+ {
+ "name": "wevia_brain_knowledge",
+ "vectors": 294
+ },
+ {
+ "name": "kb_vsm_best_practices",
+ "vectors": 7
+ },
+ {
+ "name": "kb_bpmn_patterns",
+ "vectors": 7
+ },
+ {
+ "name": "kb_dmaic_playbooks",
+ "vectors": 7
+ },
+ {
+ "name": "kb_wevads_deliv",
+ "vectors": 6
+ },
+ {
+ "name": "wevia_memory_768",
+ "vectors": 104
+ },
+ {
+ "name": "wevia_kb_768",
+ "vectors": 255
+ },
+ {
+ "name": "weval_agents_registry",
+ "vectors": 50
+ },
+ {
+ "name": "wevia_kb",
+ "vectors": 386
+ },
+ {
+ "name": "wevia_memory",
+ "vectors": 48
+ },
+ {
+ "name": "kb_lean6sigma",
+ "vectors": 10
+ }
+ ],
+ "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": 35,
+ "s204_total": 35,
+ "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": 6304,
+ "categories": [
+ {
+ "category": "AUTO-FIX",
+ "cnt": "3615"
+ },
+ {
+ "category": "TOPOLOGY",
+ "cnt": "1333"
+ },
+ {
+ "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": 3718,
+ "router_lines": 6152,
+ "router_functions": 17,
+ "today_requests": 8,
+ "today_cost": 0,
+ "avg_latency_ms": 1736,
+ "top_provider": "WEVIA Engine",
+ "providers_used": 2
+ },
+ "optimizations": {
+ "recent_commits": [],
+ "auto_fixes": [
+ {
+ "fact": "AUTO-FIX 23Apr2026 23:28: 1 fixes applied. S204: Disk 97% CRITICAL",
+ "created_at": "2026-04-24 01:28:09.634363"
+ },
+ {
+ "fact": "AUTONOMY 23Apr 23:25: 1 fixes. Disk cleanup 97%",
+ "created_at": "2026-04-24 01:25:05.374868"
+ },
+ {
+ "fact": "AUTONOMY 23Apr 23:20: 1 fixes. Disk cleanup 97%",
+ "created_at": "2026-04-24 01:20:06.443566"
+ },
+ {
+ "fact": "AUTO-FIX 23Apr2026 23:18: 1 fixes applied. S204: Disk 97% CRITICAL",
+ "created_at": "2026-04-24 01:18:36.879325"
+ },
+ {
+ "fact": "AUTO-FIX 23Apr2026 23:18: 1 fixes applied. S204: Disk 97% CRITICAL",
+ "created_at": "2026-04-24 01:18:33.082923"
+ },
+ {
+ "fact": "AUTONOMY 23Apr 23:15: 1 fixes. Disk cleanup 97%",
+ "created_at": "2026-04-24 01:15:05.805993"
+ },
+ {
+ "fact": "AUTO-FIX 23Apr2026 23:12: 1 fixes applied. S204: Disk 97% CRITICAL",
+ "created_at": "2026-04-24 01:12:14.273259"
+ },
+ {
+ "fact": "AUTONOMY 23Apr 23:10: 1 fixes. Disk cleanup 97%",
+ "created_at": "2026-04-24 01:10:06.75786"
+ },
+ {
+ "fact": "AUTONOMY 23Apr 23:05: 1 fixes. Disk cleanup 97%",
+ "created_at": "2026-04-24 01:05:05.845804"
+ },
+ {
+ "fact": "AUTONOMY 23Apr 23:00: 1 fixes. Disk cleanup 97%",
+ "created_at": "2026-04-24 01:00:14.877998"
+ }
+ ],
+ "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": 3718
+ },
+ {
+ "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": 85,
+ "total": 2,
+ "critical": 1,
+ "warning": 0,
+ "info": 0,
+ "opportunity": 1,
+ "auto_fixed": 1,
+ "fixes_log": [
+ {
+ "title": "S204: Disk 97% CRITICAL",
+ "cmd": "truncate -s 0 \/var\/log\/syslog.1 \/var\/log\/crowdsec-firewall-bouncer.log; journalctl --vacuum-size=100M; docker system prune -f --volumes 2>\/dev\/null",
+ "output": "Total reclaimed space: 0B",
+ "time": "2026-04-23 23:30:06"
+ }
+ ],
+ "recommendations": [
+ {
+ "severity": "critical",
+ "category": "INFRA",
+ "title": "S204: Disk 97% CRITICAL",
+ "detail": "Espace disque critique. Risque de crash imminent. Nettoyer logs, truncate syslog, docker prune.",
+ "action": "auto",
+ "fix_cmd": "truncate -s 0 \/var\/log\/syslog.1 \/var\/log\/crowdsec-firewall-bouncer.log; journalctl --vacuum-size=100M; docker system prune -f --volumes 2>\/dev\/null",
+ "auto_fixed": true,
+ "fix_output": "Total reclaimed space: 0B"
+ },
+ {
+ "severity": "opportunity",
+ "category": "SCALABILITY",
+ "title": "Qdrant: 22,148 vecteurs",
+ "detail": "Volume vectoriel croissant. Planifier sharding ou migration vers cluster Qdrant.",
+ "action": "opportunity",
+ "fix_cmd": ""
+ }
+ ]
+ },
+ "scan_time_ms": 5023,
+ "gaps": [],
+ "score": 100,
+ "automation": {
+ "coverage": 100,
+ "steps": 30,
+ "total": 30
+ }
+}
\ No newline at end of file
diff --git a/api/blade-actions-surfaced.json b/api/blade-actions-surfaced.json
index ec919a2fa..f65d500db 100644
--- a/api/blade-actions-surfaced.json
+++ b/api/blade-actions-surfaced.json
@@ -1,15 +1,15 @@
{
- "generated_at": "2026-04-24T01:25:01.397982",
+ "generated_at": "2026-04-24T01:35:01.452729",
"stats": {
- "total": 49,
- "pending": 27,
+ "total": 48,
+ "pending": 23,
"kaouther_surfaced": 18,
"chrome_surfaced": 5,
"notif_only_done": 0,
"autofix_archived": 0,
"cerebras_archived": 0,
- "older_3d_archived": 1,
- "unknown": 1,
+ "older_3d_archived": 0,
+ "unknown": 0,
"errors": 0
},
"actions": [
diff --git a/api/handlers/patch-file-with-agent.sh b/api/handlers/patch-file-with-agent.sh
new file mode 100755
index 000000000..c53cbaf79
--- /dev/null
+++ b/api/handlers/patch-file-with-agent.sh
@@ -0,0 +1,171 @@
+#!/bin/bash
+# Doctrine 157: WEVIA peut patcher des fichiers via sub-agent IA (Cerebras/Mistral).
+# Format message: "patch file PATH :: description du changement"
+# Reads from /tmp/wevia-last-msg.log (doctrine 152 fix)
+# Safety: whitelist paths, GOLD backup, lint, rollback, rate limit
+
+set -u
+
+# Read message (doctrine 152 fix)
+MSG="${1:-}"
+if [ -z "$MSG" ] && [ -f /tmp/wevia-last-msg.log ]; then
+ MSG=$(cat /tmp/wevia-last-msg.log 2>/dev/null | tr -d '\n' | head -c 3000)
+fi
+
+# Parse
+PATH_TARGET=$(echo "$MSG" | awk -F' :: ' '{print $1}' | sed 's/patch file //I' | sed 's/ameliore le fichier //I' | tr -d '[:space:]')
+DESC=$(echo "$MSG" | awk -F' :: ' '{print $2}')
+
+# Validation
+if [ -z "$PATH_TARGET" ] || [ -z "$DESC" ]; then
+ echo "{\"ok\":false,\"error\":\"format: patch file PATH :: description\"}"
+ exit 0
+fi
+
+# Normalize path: prepend /var/www/html if not absolute
+case "$PATH_TARGET" in
+ /*) ;;
+ *) PATH_TARGET="/var/www/html/$PATH_TARGET" ;;
+esac
+
+# Whitelist safety
+ALLOWED=0
+for prefix in "/var/www/html/" "/opt/wevia-brain/" "/opt/weval-l99/"; do
+ case "$PATH_TARGET" in "$prefix"*) ALLOWED=1; break ;; esac
+done
+if [ $ALLOWED -eq 0 ]; then
+ echo "{\"ok\":false,\"error\":\"path not in whitelist\",\"path\":\"$PATH_TARGET\"}"
+ exit 0
+fi
+
+# File must exist
+if [ ! -f "$PATH_TARGET" ]; then
+ echo "{\"ok\":false,\"error\":\"file not found\",\"path\":\"$PATH_TARGET\"}"
+ exit 0
+fi
+
+# Rate limit (max 5 per hour)
+RATE_FILE=/tmp/wevia-patch-rate.log
+NOW=$(date +%s)
+HOUR_AGO=$((NOW - 3600))
+if [ -f "$RATE_FILE" ]; then
+ RECENT=$(awk -v t="$HOUR_AGO" '$1 > t' "$RATE_FILE" | wc -l)
+ if [ "$RECENT" -ge 5 ]; then
+ echo "{\"ok\":false,\"error\":\"rate limit: 5 patches/hour max\"}"
+ exit 0
+ fi
+fi
+echo "$NOW $PATH_TARGET" >> "$RATE_FILE"
+
+# Size check (<200KB source for agent prompt)
+SIZE=$(stat -c%s "$PATH_TARGET" 2>/dev/null)
+if [ "$SIZE" -gt 200000 ]; then
+ echo "{\"ok\":false,\"error\":\"file too large for agent patch\",\"size\":$SIZE,\"max\":200000}"
+ exit 0
+fi
+
+# GOLD backup
+TS=$(date +%Y%m%d-%H%M%S)
+BACKUP="/var/www/html/vault-gold/opus/$(basename $PATH_TARGET).doctrine157-patch-${TS}.bak"
+sudo mkdir -p "$(dirname $BACKUP)" 2>/dev/null
+sudo cp "$PATH_TARGET" "$BACKUP"
+
+# Capture file content (truncated to 150K for prompt)
+CONTENT=$(head -c 150000 "$PATH_TARGET" | base64 -w0)
+
+# Read Cerebras key
+CEREBRAS_KEY=$(grep -oE "csk-[a-z0-9]+" /opt/wevads/vault/credentials.php 2>/dev/null | head -1)
+if [ -z "$CEREBRAS_KEY" ]; then
+ echo "{\"ok\":false,\"error\":\"cerebras key not found in vault\"}"
+ exit 0
+fi
+
+# Build prompt
+PROMPT="You are a surgical code editor. Given the following file content and a description of the desired change, return ONLY the MODIFIED FULL file content. No explanation, no markdown, no code fences, just raw file content.
+
+FILE: $PATH_TARGET
+CHANGE REQUESTED: $DESC
+
+CURRENT CONTENT:
+$(echo "$CONTENT" | base64 -d | head -c 120000)
+
+MODIFIED CONTENT:"
+
+# Call Cerebras (cheap + fast model)
+RESPONSE=$(curl -sk -m 60 -X POST "https://api.cerebras.ai/v1/chat/completions" \
+ -H "Authorization: Bearer $CEREBRAS_KEY" \
+ -H "Content-Type: application/json" \
+ -d "$(python3 -c "
+import json, sys, os
+prompt = '''$PROMPT'''
+payload = {
+ 'model': 'qwen-3-235b-a22b-instruct-2507',
+ 'messages': [{'role': 'user', 'content': prompt}],
+ 'temperature': 0.1,
+ 'max_tokens': 8000
+}
+print(json.dumps(payload))
+" 2>/dev/null)" 2>&1)
+
+# Extract new content
+NEW_CONTENT=$(echo "$RESPONSE" | python3 -c "
+import sys, json
+try:
+ d = json.loads(sys.stdin.read())
+ print(d['choices'][0]['message']['content'], end='')
+except Exception as e:
+ print('ERR:'+str(e))
+")
+
+if echo "$NEW_CONTENT" | head -c 10 | grep -q "ERR:"; then
+ echo "{\"ok\":false,\"error\":\"cerebras call failed\",\"backup\":\"$BACKUP\",\"preview\":$(echo "$NEW_CONTENT" | head -c 200 | python3 -c 'import sys,json;print(json.dumps(sys.stdin.read()))')}"
+ exit 0
+fi
+
+# Write new content to temp
+TMP_NEW="/tmp/patch-candidate-$$.new"
+echo "$NEW_CONTENT" > "$TMP_NEW"
+
+# Lint if PHP/JS/HTML
+LINT_OK=1
+LINT_MSG=""
+case "$PATH_TARGET" in
+ *.php)
+ LINT_MSG=$(php -l "$TMP_NEW" 2>&1)
+ echo "$LINT_MSG" | grep -q "No syntax errors" || LINT_OK=0
+ ;;
+ *.html|*.htm)
+ # Basic check: must have html tag (if originally had)
+ ORIG_HAS_HTML=$(grep -c "/dev/null)
+ NEW_HAS_HTML=$(grep -c "/dev/null)
+ if [ "$ORIG_HAS_HTML" -gt 0 ] && [ "$NEW_HAS_HTML" -eq 0 ]; then
+ LINT_OK=0
+ LINT_MSG="html tag disappeared"
+ fi
+ ;;
+esac
+
+if [ $LINT_OK -eq 0 ]; then
+ rm -f "$TMP_NEW"
+ echo "{\"ok\":false,\"error\":\"lint failed\",\"lint_msg\":\"$LINT_MSG\",\"backup\":\"$BACKUP\"}"
+ exit 0
+fi
+
+# Apply: unlock if chattr +i, copy, relock
+WAS_LOCKED=0
+if lsattr "$PATH_TARGET" 2>/dev/null | grep -q "i"; then
+ WAS_LOCKED=1
+ sudo chattr -i "$PATH_TARGET"
+fi
+
+sudo cp "$TMP_NEW" "$PATH_TARGET"
+rm -f "$TMP_NEW"
+
+if [ $WAS_LOCKED -eq 1 ]; then
+ sudo chattr +i "$PATH_TARGET"
+fi
+
+NEW_SIZE=$(stat -c%s "$PATH_TARGET")
+NEW_MD5=$(md5sum "$PATH_TARGET" | cut -d' ' -f1)
+
+echo "{\"ok\":true,\"doctrine\":\"157\",\"path\":\"$PATH_TARGET\",\"old_size\":$SIZE,\"new_size\":$NEW_SIZE,\"new_md5\":\"$NEW_MD5\",\"backup\":\"$BACKUP\",\"description\":\"$DESC\",\"agent\":\"cerebras-qwen-3-235b-a22b-instruct-2507\",\"ts\":\"$(date -Iseconds)\"}"
diff --git a/api/source-of-truth.json b/api/source-of-truth.json
index 7fff9c36e..9fd71213c 100644
--- a/api/source-of-truth.json
+++ b/api/source-of-truth.json
@@ -1,13 +1,13 @@
{
"ok": true,
"source": "truth_registry_unified",
- "built_at": "2026-04-23T23:20:02+00:00",
+ "built_at": "2026-04-23T23:30:02+00:00",
"agents_count": 1000,
"agents_total": 1000,
"skills_count": 20176,
"skills_total": 20176,
- "intents_count": 2324,
- "intents_total": 2324,
+ "intents_count": 2325,
+ "intents_total": 2325,
"brains_count": 25,
"doctrines_count": 19,
"dashboards_count": 118,
@@ -20,7 +20,7 @@
"counts": {
"agents": 1000,
"agents_total_live": 950,
- "intents": 2324,
+ "intents": 2325,
"skills_total": 20176,
"brains": 25,
"doctrines": 19,
diff --git a/api/test-patch-target.html b/api/test-patch-target.html
new file mode 100644
index 000000000..a697229da
--- /dev/null
+++ b/api/test-patch-target.html
@@ -0,0 +1,10 @@
+
+
Test Patch Target
+
+
Bonjour autonome doctrine 157 active
+
This is a test file.
+
+
+
diff --git a/api/ux-agent-report.json b/api/ux-agent-report.json
index abe324985..d9f171a8e 100644
--- a/api/ux-agent-report.json
+++ b/api/ux-agent-report.json
@@ -1,5 +1,5 @@
{
- "timestamp": "2026-04-24T01:00:23",
+ "timestamp": "2026-04-24T01:30:19",
"features": {
"total": 36,
"pass": 35
@@ -13,7 +13,7 @@
"score": 97.2,
"log": [
"=== UX AGENT v1.0 ===",
- "Time: 2026-04-24 01:00:02",
+ "Time: 2026-04-24 01:30:02",
" core: 4/4",
" layout: 3/4",
" interaction: 6/6",
diff --git a/api/v83-business-kpi-latest.json b/api/v83-business-kpi-latest.json
index 87e7eb32d..6e5f848cd 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-23T23:28:09+00:00",
+ "ts": "2026-04-23T23:30:33+00:00",
"summary": {
"total_categories": 8,
"total_kpis": 64,
diff --git a/api/wevia-send-kaouther-intent.php b/api/wevia-send-kaouther-intent.php
index 7163336da..189b50c47 100644
--- a/api/wevia-send-kaouther-intent.php
+++ b/api/wevia-send-kaouther-intent.php
@@ -12,24 +12,39 @@ function wevia_kaouther_send($msg) {
$out = ['intent' => 'send_kaouther', 'tool' => 'kaouther_gmail_drafts'];
- $to = 'kaouther.najar@ethica.ma';
+ $to = 'kaouther.najar@groupe-ethica.com';
$from = 'ymahboub@weval-consulting.com';
// 3 emails paliers
- $emails = [
- [
- 'subject' => 'Contre-proposition pharma DH — Palier Premium (1,5 DH)',
- 'body_short' => "Bonjour Kaouther,\n\nContre-proposition 1,5 DH/contact palier Premium (volume sélectif 0-20K ciblés, triple canal email+WhatsApp+SMS, opt-in Loi 09-08, support dédié).\n\nBase: 146,668 HCPs validés +20K en 7 jours. Stack souverain Maroc.\n\nVoir détails complets sur https://weval-consulting.com/kaouther-compose.html\n\nBien cordialement,\nYacine"
- ],
- [
- 'subject' => 'Contre-proposition pharma DH — Palier Standard (1,2 DH)',
- 'body_short' => "Bonjour Kaouther,\n\nPalier Standard 1,2 DH/contact pour volume récurrent 20-60K, bi-canal email+WhatsApp, reporting hebdo.\n\nSweet spot campagnes trimestrielles. DZ 107K / MA 20K / TN 18K disponibles.\n\nDétails: https://weval-consulting.com/kaouther-compose.html\n\nCordialement,\nYacine"
- ],
- [
- 'subject' => 'Contre-proposition pharma DH — Palier Volume (1,0 DH)',
- 'body_short' => "Bonjour Kaouther,\n\nPalier Volume 1,0 DH/contact (60K+ contacts, 6 mois min, email principal + WhatsApp +0,2 DH option).\n\nCouvre coûts infra+DB. En-dessous perte.\n\nDétails: https://weval-consulting.com/kaouther-compose.html\n\nCordialement,\nYacine"
- ],
- ];
+ // V48 LIVE FETCH — doctrine root cause (zero hardcode)
+ $live_url = 'http://localhost/api/kaouther-drafts-live.php';
+ $live_json = @file_get_contents($live_url);
+ $live = $live_json ? @json_decode($live_json, true) : null;
+ if (!$live || empty($live['drafts'])) {
+ // Fallback minimal if live fetch fails
+ $emails = [[
+ 'subject' => 'Kaouther Ethica - draft unavailable',
+ 'body_short' => 'Live fetch failed. Check /api/kaouther-drafts-live.php'
+ ]];
+ } else {
+ // Adapt V48 live JSON structure to legacy $emails format
+ $emails = [];
+ if (isset($live['drafts']) && is_array($live['drafts'])) {
+ foreach ($live['drafts'] as $d) {
+ $emails[] = [
+ 'subject' => $d['subject'] ?? '',
+ 'body_short' => $d['body'] ?? $d['body_short'] ?? ''
+ ];
+ }
+ }
+ // If V48 has single draft (not array of 3 tiers), use it directly
+ if (empty($emails) && isset($live['subject'])) {
+ $emails[] = [
+ 'subject' => $live['subject'],
+ 'body_short' => '' // Body is in gmail_url already encoded
+ ];
+ }
+ }
// Générer URLs Gmail compose
$drafts = [];
diff --git a/api/wevia-truth-registry.json b/api/wevia-truth-registry.json
index c6c677d74..52de7ead4 100644
--- a/api/wevia-truth-registry.json
+++ b/api/wevia-truth-registry.json
@@ -1,6 +1,6 @@
{
"version": "1.0",
- "built_at": "2026-04-23T23:20:02+00:00",
+ "built_at": "2026-04-23T23:30:02+00:00",
"purpose": "WEVIA TRUTH REGISTRY · source de vérité unique pour agents/intents/skills/brains/doctrines",
"consumers": [
"/api/wevia-master-api.php",
@@ -16916,13 +16916,13 @@
]
},
"intents": {
- "count": 2324,
+ "count": 2325,
"arena_declared": 310,
"arena_wired": 224,
"arena_gap": 86,
"arena_version": "Wave 115",
"by_status": {
- "EXECUTED": 1964,
+ "EXECUTED": 1965,
"DISABLED": 17,
"ACTIVATED": 229,
"PENDING_APPROVAL": 10,
@@ -16940,7 +16940,7 @@
"APPROVED_BY_OPUS_20AVR_V4": 1
},
"by_domain": {
- "general": 1992,
+ "general": 1993,
"site_web": 14,
"agents": 239,
"wevads_pipeline": 25,
@@ -17471,6 +17471,21 @@
"description": "",
"file": "/api/wired-pending/intent-opus4-ACTIVATED-git_tag_create.php"
},
+ {
+ "name": "kaouther_drafts",
+ "domain": "general",
+ "status": "EXECUTED",
+ "triggers": [
+ "kaouther status",
+ "email kaouther",
+ "drafts kaouther",
+ "ethica emails",
+ "kaouther drafts"
+ ],
+ "source": "opus5-kaouther-drafts-17avr-1648",
+ "description": "Retourne les drafts Kaouther finalisés (1 draft version validée Yacine)",
+ "file": "/api/wired-pending/intent-opus4-ACTIVATED-kaouther_drafts.php"
+ },
{
"name": "kaouther_drafts_staleness_check",
"domain": "general",
@@ -28142,21 +28157,6 @@
"description": "Agent Kanban Flow Optimizer · 3 sources multi-registry",
"file": "/api/wired-pending/intent-opus4-kanban_flow_optimizer.php"
},
- {
- "name": "kaouther_drafts",
- "domain": "general",
- "status": "EXECUTED",
- "triggers": [
- "kaouther status",
- "email kaouther",
- "drafts kaouther",
- "ethica emails",
- "kaouther drafts"
- ],
- "source": "opus5-kaouther-drafts-17avr-1648",
- "description": "Retourne les drafts Kaouther finalisés (1 draft version validée Yacine)",
- "file": "/api/wired-pending/intent-opus4-kaouther_drafts.php"
- },
{
"name": "kaouther_send_ready",
"domain": "general",
@@ -48941,6 +48941,18 @@
"description": "V62 orchestrated navigation + francais avec accents",
"file": "/api/wired-pending/intent-opus4-wtp_hub_central.php"
},
+ {
+ "name": "wtp_integrate_enriched_cards",
+ "domain": "general",
+ "status": "EXECUTED",
+ "triggers": [
+ "integrer enrichie cards wtp renderAllPages premium",
+ "cards thumb title description integration wtp"
+ ],
+ "source": "wevia-autowire-via-chat-doctrine152",
+ "description": "",
+ "file": "/api/wired-pending/intent-opus4-wtp_integrate_enriched_cards.php"
+ },
{
"name": "wtp_official",
"domain": "general",
@@ -50326,7 +50338,7 @@
"score": 100,
"total": 153
},
- "apis_php_count": 1098,
+ "apis_php_count": 1099,
"autonomy_score": 99.5,
"autonomy_level": "GODMODE"
}
\ No newline at end of file
diff --git a/api/wired-pending/intent-opus4-wevia_patch_file_with_agent.php b/api/wired-pending/intent-opus4-wevia_patch_file_with_agent.php
new file mode 100644
index 000000000..9cb2d0933
--- /dev/null
+++ b/api/wired-pending/intent-opus4-wevia_patch_file_with_agent.php
@@ -0,0 +1,15 @@
+ 'wevia_patch_file_with_agent',
+ 'triggers' =>
+ array (
+ 0 => 'patch file',
+ 1 => 'ameliore le fichier',
+ 2 => 'modify file with agent',
+ ),
+ 'cmd' => '/var/www/html/api/handlers/patch-file-with-agent.sh',
+ 'status' => 'EXECUTED',
+ 'created_at' => '2026-04-24T01:30:00+00:00',
+ 'source' => 'opus-phase18-doctrine157',
+ 'doctrine' => '157',
+);
diff --git a/cartographie-screens.html b/cartographie-screens.html
index 071a06fa1..9ac0ae46f 100644
--- a/cartographie-screens.html
+++ b/cartographie-screens.html
@@ -70,7 +70,7 @@ select{padding:10px;background:#0a0e27;color:#fff;border:1px solid #3d4476;borde
@@ -89,8 +89,8 @@ select{padding:10px;background:#0a0e27;color:#fff;border:1px solid #3d4476;borde