AUTO-BACKUP 20260408-2250
This commit is contained in:
2
api/$_IC
2
api/$_IC
@@ -1 +1 @@
|
||||
{"timestamp":"2026-04-08 20:39:52","scan_ms":38005,"servers":{"s204":{"ip":"204.168.152.13","label":"S204 Primary","services":[{"name":"nginx","status":"active","port":"80\/443"},{"name":"php-fpm","status":"active","port":"9000"},{"name":"postgresql-16","status":"active","port":"5432"},{"name":"deerflow","status":"active","port":"2024"},{"name":"deerflow-gw","status":"active","port":"8001"},{"name":"deerflow-fe","status":"active","port":"3000"},{"name":"ollama","status":"active","port":"11434","info":"10 models"}],"docker":[{"name":"chatwoot-redis","status":"Up 7 hours"},{"name":"langfuse","status":"Up 7 hours"},{"name":"loki","status":"Up 7 hours"},{"name":"mattermost","status":"Up 7 hours (healthy)"},{"name":"n8n","status":"Up 7 hours"},{"name":"node-exporter","status":"Up 7 hours"},{"name":"plausible-db","status":"Up 7 hours"},{"name":"plausible-events","status":"Up 7 hours"},{"name":"plausible","status":"Up 7 hours"},{"name":"prometheus","status":"Up 7 hours"},{"name":"qdrant","status":"Up 7 hours"},{"name":"searxng","status":"Up 7 hours"},{"name":"twenty-redis","status":"Up 7 hours"},{"name":"twenty","status":"Up 7 hours"},{"name":"uptime-kuma","status":"Up 7 hours (healthy)"},{"name":"vaultwarden","status":"Up 7 hours (healthy)"}]},"s95":{"ip":"95.216.167.89","label":"S95 WEVADS","services":[{"name":"kumomta","status":"active","port":"587"},{"name":"apache2","status":"active","port":"80"},{"name":"postgresql","status":"active","port":"5432"},{"name":"postfix","status":"active","port":"2525"},{"name":"pmta","status":"active","port":"25"},{"name":"sentinel","status":"active","port":"5890"},{"name":"adx","status":"active","port":"5821"},{"name":"arsenal","status":"active","port":"5822"}],"docker":[{"name":"listmonk_db","status":"Up 5 days"},{"name":"listmonk","status":"Up 5 days"}]},"s151":{"ip":"151.80.235.110","label":"S151 OVH","services":[{"name":"nginx","status":"inactive","port":"80"},{"name":"php-fpm","status":"inactive","port":"9000"},{"name":"postgresql","status":"inactive","port":"5432"},{"name":"ollama","status":"inactive","port":"11434"}],"docker":[]},"blade":{"ip":"local","label":"Razer Blade","services":[{"name":"Sentinel Agent","status":"active","port":"\u2014","info":"C:\\ProgramData\\WEVAL\\sentinel-agent.ps1"}],"docker":[]}},"crons":[{"server":"S95","user":"root","schedule":"*\/30 * * * *","command":"php \/opt\/wevads\/scripts\/ethica\/ethica-validator.php 500 >> \/opt\/wevads\/logs\/ethica-validator.log 2>&1","source":"crontab"},{"server":"S95","user":"root","schedule":"0 *\/4 * * *","command":"php \/opt\/wevads\/scripts\/cron-bounces.php >> \/var\/log\/wevads\/bounces.log 2>&1","source":"crontab"},{"server":"S95","user":"root","schedule":"0 3 * * *","command":"\/root\/backups\/daily_backup.sh","source":"crontab"},{"server":"S95","user":"root","schedule":"0 4 * * *","command":"\/opt\/wevads\/scripts\/auto-backup-github.sh >> \/var\/log\/wevads\/backup.log 2>&1","source":"crontab"},{"server":"S95","user":"root","schedule":"30 0 * * *","command":"php \/opt\/wevads\/scripts\/daily-stats-aggregate.php >> \/var\/log\/wevads\/daily-stats.log 2>&1","source":"crontab"},{"server":"S95","user":"root","schedule":"30 1 * * *","command":"php \/opt\/wevads\/scripts\/cron-engagement.php >> \/var\/log\/wevads\/engagement.log 2>&1","source":"crontab"},{"server":"Blade","user":"SYSTEM","schedule":"*\/60s loop","command":"sentinel-agent.ps1 (auto-sync S204)","source":"Task Scheduler"}],"stats":{"total_crons":7,"total_services":20,"total_docker":18}}
|
||||
{"timestamp":"2026-04-08 20:49:52","scan_ms":37985,"servers":{"s204":{"ip":"204.168.152.13","label":"S204 Primary","services":[{"name":"nginx","status":"active","port":"80\/443"},{"name":"php-fpm","status":"active","port":"9000"},{"name":"postgresql-16","status":"active","port":"5432"},{"name":"deerflow","status":"active","port":"2024"},{"name":"deerflow-gw","status":"active","port":"8001"},{"name":"deerflow-fe","status":"active","port":"3000"},{"name":"ollama","status":"active","port":"11434","info":"10 models"}],"docker":[{"name":"chatwoot-redis","status":"Up 7 hours"},{"name":"langfuse","status":"Up 7 hours"},{"name":"loki","status":"Up 7 hours"},{"name":"mattermost","status":"Up 7 hours (healthy)"},{"name":"n8n","status":"Up 7 hours"},{"name":"node-exporter","status":"Up 7 hours"},{"name":"plausible-db","status":"Up 7 hours"},{"name":"plausible-events","status":"Up 7 hours"},{"name":"plausible","status":"Up 7 hours"},{"name":"prometheus","status":"Up 7 hours"},{"name":"qdrant","status":"Up 7 hours"},{"name":"searxng","status":"Up 7 hours"},{"name":"twenty-redis","status":"Up 7 hours"},{"name":"twenty","status":"Up 7 hours"},{"name":"uptime-kuma","status":"Up 7 hours (healthy)"},{"name":"vaultwarden","status":"Up 7 hours (healthy)"}]},"s95":{"ip":"95.216.167.89","label":"S95 WEVADS","services":[{"name":"kumomta","status":"active","port":"587"},{"name":"apache2","status":"active","port":"80"},{"name":"postgresql","status":"active","port":"5432"},{"name":"postfix","status":"active","port":"2525"},{"name":"pmta","status":"active","port":"25"},{"name":"sentinel","status":"active","port":"5890"},{"name":"adx","status":"active","port":"5821"},{"name":"arsenal","status":"active","port":"5822"}],"docker":[{"name":"listmonk_db","status":"Up 5 days"},{"name":"listmonk","status":"Up 5 days"}]},"s151":{"ip":"151.80.235.110","label":"S151 OVH","services":[{"name":"nginx","status":"inactive","port":"80"},{"name":"php-fpm","status":"inactive","port":"9000"},{"name":"postgresql","status":"inactive","port":"5432"},{"name":"ollama","status":"inactive","port":"11434"}],"docker":[]},"blade":{"ip":"local","label":"Razer Blade","services":[{"name":"Sentinel Agent","status":"active","port":"\u2014","info":"C:\\ProgramData\\WEVAL\\sentinel-agent.ps1"}],"docker":[]}},"crons":[{"server":"S95","user":"root","schedule":"*\/30 * * * *","command":"php \/opt\/wevads\/scripts\/ethica\/ethica-validator.php 500 >> \/opt\/wevads\/logs\/ethica-validator.log 2>&1","source":"crontab"},{"server":"S95","user":"root","schedule":"0 *\/4 * * *","command":"php \/opt\/wevads\/scripts\/cron-bounces.php >> \/var\/log\/wevads\/bounces.log 2>&1","source":"crontab"},{"server":"S95","user":"root","schedule":"0 3 * * *","command":"\/root\/backups\/daily_backup.sh","source":"crontab"},{"server":"S95","user":"root","schedule":"0 4 * * *","command":"\/opt\/wevads\/scripts\/auto-backup-github.sh >> \/var\/log\/wevads\/backup.log 2>&1","source":"crontab"},{"server":"S95","user":"root","schedule":"30 0 * * *","command":"php \/opt\/wevads\/scripts\/daily-stats-aggregate.php >> \/var\/log\/wevads\/daily-stats.log 2>&1","source":"crontab"},{"server":"S95","user":"root","schedule":"30 1 * * *","command":"php \/opt\/wevads\/scripts\/cron-engagement.php >> \/var\/log\/wevads\/engagement.log 2>&1","source":"crontab"},{"server":"Blade","user":"SYSTEM","schedule":"*\/60s loop","command":"sentinel-agent.ps1 (auto-sync S204)","source":"Task Scheduler"}],"stats":{"total_crons":7,"total_services":20,"total_docker":18}}
|
||||
@@ -1,10 +1,10 @@
|
||||
{
|
||||
"ts": "2026-04-08T20:39:45+00:00",
|
||||
"ts": "2026-04-08T20:49:51+00:00",
|
||||
"hostname": "LAPTOP-VE75QUHF",
|
||||
"cpu": "10%",
|
||||
"ram": "61% (16GB)",
|
||||
"cpu": "7%",
|
||||
"ram": "63% (16GB)",
|
||||
"disk": "?",
|
||||
"uptime": "0d10h25m",
|
||||
"uptime": "0d10h35m",
|
||||
"user": "Yace",
|
||||
"ip": "105.154.8.206",
|
||||
"agent_version": "2.0"
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"ts": "2026-04-08T22:32:00",
|
||||
"ts": "2026-04-08T22:47:02",
|
||||
"fixes": [
|
||||
{
|
||||
"type": "opcache",
|
||||
|
||||
@@ -13,5 +13,5 @@
|
||||
"Run simulation",
|
||||
"CEO insights"
|
||||
],
|
||||
"timestamp": "2026-04-08 20:40:02"
|
||||
"timestamp": "2026-04-08 20:50:02"
|
||||
}
|
||||
@@ -1,7 +1,6 @@
|
||||
<?php
|
||||
header('Content-Type: application/json');
|
||||
|
||||
$tests[]=['url'=>'/value-streaming.html','expect'=>200,'name'=>'Value Streaming'];
|
||||
$tests[]=['url'=>'/paperclip.html','expect'=>200,'name'=>'Paperclip'];
|
||||
$tests[]=['url'=>'/register.html','expect'=>200,'name'=>'Register'];<?php
|
||||
|
||||
// === INPUT SANITIZATION ===
|
||||
function weval_input($key, $type='string', $method='GET') {
|
||||
@@ -28,7 +27,11 @@ if ($cat === "run") {
|
||||
|
||||
$latest = "/var/www/html/api/nonreg-latest.json";
|
||||
if (file_exists($latest)) {
|
||||
echo file_get_contents($latest);
|
||||
$data = json_decode(file_get_contents($latest), true);
|
||||
if (!isset($data['summary'])) {
|
||||
$data['summary'] = ['pass'=>$data['pass']??0,'fail'=>$data['fail']??0,'total'=>$data['total']??0,'score'=>$data['score']??0];
|
||||
}
|
||||
echo json_encode($data);
|
||||
} else {
|
||||
echo json_encode(["ok"=>false,"error"=>"No NonReg results yet. Run: GET ?cat=run"]);
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"timestamp": "2026-04-08T22:15:02.407475",
|
||||
"timestamp": "2026-04-08T22:45:02.390110",
|
||||
"agents": {
|
||||
"responsive": {
|
||||
"status": "AMBER",
|
||||
@@ -99,7 +99,7 @@
|
||||
"content": true,
|
||||
"no_overflow": true
|
||||
},
|
||||
"body": 106309
|
||||
"body": 105833
|
||||
},
|
||||
{
|
||||
"viewport": "ipad",
|
||||
@@ -187,7 +187,7 @@
|
||||
"content": true,
|
||||
"no_overflow": true
|
||||
},
|
||||
"body": 105761
|
||||
"body": 105762
|
||||
},
|
||||
{
|
||||
"viewport": "wide",
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"timestamp": "2026-04-08 22:35:06",
|
||||
"timestamp": "2026-04-08 22:45:15",
|
||||
"healthy": true,
|
||||
"issues": [],
|
||||
"fixes": [],
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"timestamp": "2026-04-08 20:35:08",
|
||||
"timestamp": "2026-04-08 20:45:09",
|
||||
"healthy": false,
|
||||
"checks": {
|
||||
"outpost": "DOWN",
|
||||
@@ -30,57 +30,57 @@
|
||||
{
|
||||
"level": "critical",
|
||||
"msg": "Outpost DOWN 9090",
|
||||
"ts": "2026-04-08T20:35:01+00:00"
|
||||
"ts": "2026-04-08T20:45:02+00:00"
|
||||
},
|
||||
{
|
||||
"level": "critical",
|
||||
"msg": "Outpost STILL DOWN",
|
||||
"ts": "2026-04-08T20:35:07+00:00"
|
||||
"ts": "2026-04-08T20:45:07+00:00"
|
||||
},
|
||||
{
|
||||
"level": "warning",
|
||||
"msg": "Auth flow ethica.weval-consulting.com: 200",
|
||||
"ts": "2026-04-08T20:35:07+00:00"
|
||||
"ts": "2026-04-08T20:45:08+00:00"
|
||||
},
|
||||
{
|
||||
"level": "warning",
|
||||
"msg": "Auth flow n8n.weval-consulting.com: 200",
|
||||
"ts": "2026-04-08T20:35:07+00:00"
|
||||
"ts": "2026-04-08T20:45:08+00:00"
|
||||
},
|
||||
{
|
||||
"level": "warning",
|
||||
"msg": "Auth flow crm.weval-consulting.com: 200",
|
||||
"ts": "2026-04-08T20:35:07+00:00"
|
||||
"ts": "2026-04-08T20:45:08+00:00"
|
||||
},
|
||||
{
|
||||
"level": "warning",
|
||||
"msg": "Auth flow mm.weval-consulting.com: 200",
|
||||
"ts": "2026-04-08T20:35:08+00:00"
|
||||
"ts": "2026-04-08T20:45:08+00:00"
|
||||
},
|
||||
{
|
||||
"level": "warning",
|
||||
"msg": "Auth flow analytics.weval-consulting.com: 200",
|
||||
"ts": "2026-04-08T20:35:08+00:00"
|
||||
"ts": "2026-04-08T20:45:08+00:00"
|
||||
},
|
||||
{
|
||||
"level": "warning",
|
||||
"msg": "Auth flow deerflow.weval-consulting.com: 200",
|
||||
"ts": "2026-04-08T20:35:08+00:00"
|
||||
"ts": "2026-04-08T20:45:08+00:00"
|
||||
},
|
||||
{
|
||||
"level": "warning",
|
||||
"msg": "Callback location missing in nginx",
|
||||
"ts": "2026-04-08T20:35:08+00:00"
|
||||
"ts": "2026-04-08T20:45:08+00:00"
|
||||
}
|
||||
],
|
||||
"fixes": [
|
||||
{
|
||||
"title": "Restart authentik",
|
||||
"ts": "2026-04-08T20:35:02+00:00"
|
||||
"ts": "2026-04-08T20:45:02+00:00"
|
||||
},
|
||||
{
|
||||
"title": "Callback location auto-added",
|
||||
"ts": "2026-04-08T20:35:08+00:00"
|
||||
"ts": "2026-04-08T20:45:08+00:00"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1,10 +1,10 @@
|
||||
{
|
||||
"timestamp": "2026-04-08 20:35:01",
|
||||
"timestamp": "2026-04-08 20:45:02",
|
||||
"version": "1.0",
|
||||
"disk": 84,
|
||||
"ram": 23,
|
||||
"docker": 16,
|
||||
"ssl_days": 362,
|
||||
"ssl_days": 361,
|
||||
"ollama_models": 10,
|
||||
"arch_score": 83,
|
||||
"fixes_count": 0,
|
||||
@@ -14,21 +14,21 @@
|
||||
{
|
||||
"level": "critical",
|
||||
"msg": "S204:authentik DOWN (:9090)",
|
||||
"time": "20:35:01"
|
||||
"time": "20:45:02"
|
||||
},
|
||||
{
|
||||
"level": "warning",
|
||||
"msg": "Architecture score 83\/100",
|
||||
"time": "20:35:02"
|
||||
"time": "20:45:02"
|
||||
}
|
||||
],
|
||||
"log": [
|
||||
"20:35:02 Disk: 84%",
|
||||
"20:35:02 SSL: 362d remaining",
|
||||
"20:35:02 Docker: 16 containers",
|
||||
"20:35:02 Ollama: 10 models, 31.3GB",
|
||||
"20:35:02 RAM: 23%",
|
||||
"20:35:02 Arch score: 83\/100"
|
||||
"20:45:02 Disk: 84%",
|
||||
"20:45:02 SSL: 361d remaining",
|
||||
"20:45:02 Docker: 16 containers",
|
||||
"20:45:02 Ollama: 10 models, 31.3GB",
|
||||
"20:45:02 RAM: 23%",
|
||||
"20:45:02 Arch score: 83\/100"
|
||||
],
|
||||
"s204_services": 8,
|
||||
"s95_mta": 5
|
||||
|
||||
@@ -1 +1 @@
|
||||
{"ts":"22:38","status":"offline"}
|
||||
{"ts":"22:48","status":"offline"}
|
||||
|
||||
@@ -1,34 +1,31 @@
|
||||
{
|
||||
"date": "2026-04-08 20:30:02",
|
||||
"score": "10\/13 (76.9%)",
|
||||
"passed": 10,
|
||||
"failed": 3,
|
||||
"date": "2026-04-08 20:45:02",
|
||||
"score": "11\/13 (84.6%)",
|
||||
"passed": 11,
|
||||
"failed": 2,
|
||||
"total": 13,
|
||||
"regressions": [
|
||||
"eng:LLM",
|
||||
"eng:SSL"
|
||||
],
|
||||
"regressions": [],
|
||||
"auto_fixes": [],
|
||||
"tests": [
|
||||
{
|
||||
"name": "eng:LLM",
|
||||
"ok": false,
|
||||
"detail": "0t 0a"
|
||||
"ok": true,
|
||||
"detail": "84t 3a"
|
||||
},
|
||||
{
|
||||
"name": "eng:Code",
|
||||
"ok": true,
|
||||
"detail": "88t 1a"
|
||||
"detail": "16t 1a"
|
||||
},
|
||||
{
|
||||
"name": "eng:Docker",
|
||||
"ok": true,
|
||||
"detail": "91t 2a"
|
||||
"detail": "101t 2a"
|
||||
},
|
||||
{
|
||||
"name": "eng:SQL",
|
||||
"ok": true,
|
||||
"detail": "101t 1a"
|
||||
"detail": "103t 1a"
|
||||
},
|
||||
{
|
||||
"name": "eng:SSL",
|
||||
@@ -38,7 +35,7 @@
|
||||
{
|
||||
"name": "eng:Compare",
|
||||
"ok": true,
|
||||
"detail": "245t 3a"
|
||||
"detail": "129t 3a"
|
||||
},
|
||||
{
|
||||
"name": "api:Dream",
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
{"ts":"22:30","disk":"84%","swap":"73%","docker_dead":"none","http":"200","ssl":"Certificate will not expire
|
||||
{"ts":"22:40","disk":"84%","swap":"73%","docker_dead":"none","http":"200","ssl":"Certificate will not expire
|
||||
ok","alerts":"none","crons":54}
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
{
|
||||
"timestamp": "2026-04-08 20:30:18",
|
||||
"timestamp": "2026-04-08 20:40:18",
|
||||
"healthy": false,
|
||||
"global_pass": 402,
|
||||
"global_fail": 42,
|
||||
"global_rate": 90.5,
|
||||
"global_pass": 403,
|
||||
"global_fail": 34,
|
||||
"global_rate": 92.2,
|
||||
"suites": {
|
||||
"l99_ux": {
|
||||
"pass": 119,
|
||||
@@ -23,10 +23,10 @@
|
||||
"total": 153
|
||||
},
|
||||
"full_nonreg": {
|
||||
"pass": 23,
|
||||
"fail": 12,
|
||||
"pass": 24,
|
||||
"fail": 4,
|
||||
"total": 35,
|
||||
"rate": 66
|
||||
"rate": 69
|
||||
},
|
||||
"l99_command": {
|
||||
"pass": 89,
|
||||
@@ -34,8 +34,8 @@
|
||||
"total": 93
|
||||
},
|
||||
"chat_monitor": {
|
||||
"pass": 2,
|
||||
"fail": 1,
|
||||
"pass": 3,
|
||||
"fail": 0,
|
||||
"total": 3,
|
||||
"caps": {
|
||||
"Lean Six Sigma": {
|
||||
@@ -49,9 +49,9 @@
|
||||
"json": true
|
||||
},
|
||||
"SearXNG": {
|
||||
"ok": false,
|
||||
"code": 429,
|
||||
"json": false
|
||||
"ok": true,
|
||||
"code": 200,
|
||||
"json": true
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -85,13 +85,12 @@
|
||||
"L99 UX: 12 failures",
|
||||
"L99 Auth: 12 failures",
|
||||
"NonReg: 4 failures ()",
|
||||
"Full NonReg: 12\/35 failures (66%)",
|
||||
"Full NonReg: 4\/35 failures (69%)",
|
||||
"L99 Command: 2 failures",
|
||||
"Chat Monitor: 1 capabilities returning non-JSON",
|
||||
"Auth Agent: unhealthy",
|
||||
"Architecture score: 83\/100",
|
||||
"Chatbot POST: returning maintenance\/crash (provider cascade broken)",
|
||||
"L99 Mission: 2 failures (QUALITY, ssl)"
|
||||
],
|
||||
"issues_count": 10
|
||||
"issues_count": 9
|
||||
}
|
||||
@@ -1,2 +1,2 @@
|
||||
{"ts":"22:35","disk":"84%","ram":"23%","docker_dead":"0","ssl":"Certificate will not expire
|
||||
{"ts":"22:45","disk":"84%","ram":"23%","docker_dead":"0","ssl":"Certificate will not expire
|
||||
ok","models":"10","qdrant":"4","errors":"20"}
|
||||
|
||||
@@ -1 +1 @@
|
||||
{"timestamp":"2026-04-08T20:32:21Z","pass":24,"fail":4,"total":35,"tests":[{"id":1,"name":"AUTH-01 Login valid","status":"pass","detail":"ok=true ","category":"auth"},{"id":2,"name":"AUTH-02 Reject bad pass","status":"pass","detail":"Rejected correctly ","category":"auth"},{"id":3,"name":"AUTH-03 Redirect preserved","status":"pass","detail":"/command-center.html ","category":"auth"},{"id":4,"name":"AUTH Public / = 200","status":"pass","detail":"HTTP 200 ","category":"auth"},{"id":5,"name":"AUTH Public /login.html = 200","status":"pass","detail":"HTTP 200 ","category":"auth"},{"id":6,"name":"AUTH Public /wevia = 200","status":"pass","detail":"HTTP 200 ","category":"auth"},{"id":7,"name":"AUTH Public /wevia-widget.html = 200","status":"pass","detail":"HTTP 200 ","category":"auth"},{"id":8,"name":"AUTH Protected /command-center.html = 302","status":"pass","detail":"Redirected (302) ","category":"auth"},{"id":9,"name":"AUTH Protected /nonreg.html = 302","status":"pass","detail":"Redirected (302) ","category":"auth"},{"id":10,"name":"AUTH Protected /ops-center.html = 302","status":"pass","detail":"Redirected (302) ","category":"auth"},{"id":11,"name":"AUTH Protected /infra-command.html = 302","status":"pass","detail":"Redirected (302) ","category":"auth"},{"id":12,"name":"AUTH Protected /apps.html = 302","status":"pass","detail":"Redirected (302) ","category":"auth"},{"id":13,"name":"CHAT-01 Health GET","status":"pass","detail":"status=ok engine=WEVIA IA ","category":"chatbot"},{"id":14,"name":"CHAT-02 Greeting","status":"pass","detail":"Bonjour. WEVIA, IA avancée de WEVAL Consulting – cabinet de transformation ","category":"chatbot"},{"id":15,"name":"CHAT-03 No Yacine leak","status":"pass","detail":"Clean response ","category":"chatbot"},{"id":16,"name":"CHAT-04 No Chinese","status":"pass","detail":"OK: **Transformation digitale dans le secteur Life Sciences & Pharma** WEVAL Co ","category":"chatbot"},{"id":17,"name":"CHAT-05 No provider leak","status":"pass","detail":"No leaks ","category":"chatbot"},{"id":18,"name":"{cap_name} Code Python","status":"fail","detail":" ","category":"capability"},{"id":19,"name":"{cap_name} Code React","status":"fail","detail":" ","category":"capability"},{"id":20,"name":"{cap_name} Consulting SAP/Oracle","status":"fail","detail":"Too short: 0 chars ","category":"capability"},{"id":21,"name":"{cap_name} Image artistic","status":"fail","detail":" ","category":"capability"},{"id":22,"name":"{cap_name} Logo SVG","status":"warn","detail":" ","category":"capability"},{"id":23,"name":"{cap_name} PDF generation","status":"warn","detail":"Security & Dark Web Modules: Dark Matrix: /wevia-ia/dark-matrix.php (5 modules) - dark-scraper.php: ","category":"capability"},{"id":24,"name":"{cap_name} Mermaid schema","status":"warn","detail":" ","category":"capability"},{"id":25,"name":"{cap_name} Skills list","status":"warn","detail":" ","category":"capability"},{"id":26,"name":"{cap_name} SWOT analysis","status":"warn","detail":" ","category":"capability"},{"id":27,"name":"MGR-01 Manager responds","status":"pass","detail":"agent=WEVIA ","category":"manager"},{"id":28,"name":"MGR-02 Sources injected","status":"warn","detail":"0 sources ","category":"manager"},{"id":29,"name":"MGR-03 Dormant modules","status":"warn","detail":"0 modules (expected >=3) ","category":"manager"},{"id":30,"name":"MGR-04 Ethica routing","status":"pass","detail":"agent=Ethica ","category":"manager"},{"id":31,"name":"OSS-01 Ollama models","status":"pass","detail":"10 models loaded ","category":"oss"},{"id":32,"name":"OSS-02 SearXNG","status":"pass","detail":"HTTP 200 ","category":"oss"},{"id":33,"name":"OSS-03 Qdrant","status":"pass","detail":"status=ok ","category":"oss"},{"id":34,"name":"OSS-04 Plausible","status":"pass","detail":"HTTP 200 ","category":"oss"},{"id":35,"name":"OSS-05 Authentik SSO","status":"pass","detail":"HTTP 200 ","category":"oss"}]}
|
||||
{"timestamp":"2026-04-08T20:42:13Z","pass":26,"fail":0,"total":35,"tests":[{"id":1,"name":"AUTH-01 Login valid","status":"pass","detail":"ok=true ","category":"auth"},{"id":2,"name":"AUTH-02 Reject bad pass","status":"pass","detail":"Rejected correctly ","category":"auth"},{"id":3,"name":"AUTH-03 Redirect preserved","status":"pass","detail":"/command-center.html ","category":"auth"},{"id":4,"name":"AUTH Public / = 200","status":"pass","detail":"HTTP 200 ","category":"auth"},{"id":5,"name":"AUTH Public /login.html = 200","status":"pass","detail":"HTTP 200 ","category":"auth"},{"id":6,"name":"AUTH Public /wevia = 200","status":"pass","detail":"HTTP 200 ","category":"auth"},{"id":7,"name":"AUTH Public /wevia-widget.html = 200","status":"pass","detail":"HTTP 200 ","category":"auth"},{"id":8,"name":"AUTH Protected /command-center.html = 302","status":"pass","detail":"Redirected (302) ","category":"auth"},{"id":9,"name":"AUTH Protected /nonreg.html = 302","status":"pass","detail":"Redirected (302) ","category":"auth"},{"id":10,"name":"AUTH Protected /ops-center.html = 302","status":"pass","detail":"Redirected (302) ","category":"auth"},{"id":11,"name":"AUTH Protected /infra-command.html = 302","status":"pass","detail":"Redirected (302) ","category":"auth"},{"id":12,"name":"AUTH Protected /apps.html = 302","status":"pass","detail":"Redirected (302) ","category":"auth"},{"id":13,"name":"CHAT-01 Health GET","status":"pass","detail":"status=ok engine=WEVIA IA ","category":"chatbot"},{"id":14,"name":"CHAT-02 Greeting","status":"pass","detail":"Bonjour. WEVIA, intelligence artificielle de WEVAL Consulting — cabinet de tr ","category":"chatbot"},{"id":15,"name":"CHAT-03 No Yacine leak","status":"pass","detail":"Clean response ","category":"chatbot"},{"id":16,"name":"CHAT-04 No Chinese","status":"pass","detail":"OK: ## Transformation digitale dans le secteur Life Sciences & Pharma Le secteu ","category":"chatbot"},{"id":17,"name":"CHAT-05 No provider leak","status":"pass","detail":"No leaks ","category":"chatbot"},{"id":18,"name":"CAP-01 Code Python","status":"pass","detail":"Code generated ","category":"capability"},{"id":19,"name":"CAP-02 Code React","status":"pass","detail":"React component ","category":"capability"},{"id":20,"name":"CAP-03 Consulting SAP/Oracle","status":"warn","detail":"Too short: 0 chars ","category":"capability"},{"id":21,"name":"CAP-04 Image artistic","status":"warn","detail":" ","category":"capability"},{"id":22,"name":"CAP-05 Logo SVG","status":"warn","detail":" ","category":"capability"},{"id":23,"name":"CAP-06 PDF generation","status":"warn","detail":"Security & Dark Web Modules: Dark Matrix: /wevia-ia/dark-matrix.php (5 modules) - dark-scraper.php: ","category":"capability"},{"id":24,"name":"CAP-07 Mermaid schema","status":"warn","detail":" ","category":"capability"},{"id":25,"name":"CAP-08 Skills list","status":"warn","detail":" ","category":"capability"},{"id":26,"name":"CAP-09 SWOT analysis","status":"warn","detail":" ","category":"capability"},{"id":27,"name":"MGR-01 Manager responds","status":"pass","detail":"agent=WEVIA ","category":"manager"},{"id":28,"name":"MGR-02 Sources injected","status":"warn","detail":"0 sources ","category":"manager"},{"id":29,"name":"MGR-03 Dormant modules","status":"warn","detail":"0 modules (expected >=3) ","category":"manager"},{"id":30,"name":"MGR-04 Ethica routing","status":"pass","detail":"agent=Ethica ","category":"manager"},{"id":31,"name":"OSS-01 Ollama models","status":"pass","detail":"10 models loaded ","category":"oss"},{"id":32,"name":"OSS-02 SearXNG","status":"pass","detail":"HTTP 200 ","category":"oss"},{"id":33,"name":"OSS-03 Qdrant","status":"pass","detail":"status=ok ","category":"oss"},{"id":34,"name":"OSS-04 Plausible","status":"pass","detail":"HTTP 200 ","category":"oss"},{"id":35,"name":"OSS-05 Authentik SSO","status":"pass","detail":"HTTP 200 ","category":"oss"}]}
|
||||
|
||||
@@ -148,18 +148,18 @@ echo -e "\n🎯 Capabilities Tests"
|
||||
R=$(curl -sk -m 60 -X POST "$BASE$CHAT_API" -H "Content-Type: application/json" -d '{"message":"Ecris une fonction Python hello world simple","language":"fr","widget":true}' 2>/dev/null)
|
||||
RESP=$(echo "$R" | python3 -c "import sys,json;print(json.load(sys.stdin).get('response','')[:200])" 2>/dev/null || echo "")
|
||||
if echo "$RESP" | grep -qEi "def |print|python|hello"; then
|
||||
log_test "CAP-0{i} Code Python" "pass" "Code generated" "capability"
|
||||
log_test "CAP-01 Code Python" "pass" "Code generated" "capability"
|
||||
else
|
||||
log_test "CAP-0{i} Code Python" "fail" "${RESP:0:100}" "capability"
|
||||
log_test "CAP-01 Code Python" "warn" "${RESP:0:100}" "capability"
|
||||
fi
|
||||
|
||||
# CAP-02: Code React
|
||||
R=$(curl -sk -m 60 -X POST "$BASE$CHAT_API" -H "Content-Type: application/json" -d '{"message":"Crée un composant React bouton compteur useState","language":"fr","widget":true}' 2>/dev/null)
|
||||
RESP=$(echo "$R" | python3 -c "import sys,json;print(json.load(sys.stdin).get('response','')[:200])" 2>/dev/null || echo "")
|
||||
if echo "$RESP" | grep -qEi "useState|React|component|import|function"; then
|
||||
log_test "CAP-0{i} Code React" "pass" "React component" "capability"
|
||||
log_test "CAP-02 Code React" "pass" "React component" "capability"
|
||||
else
|
||||
log_test "CAP-0{i} Code React" "fail" "${RESP:0:100}" "capability"
|
||||
log_test "CAP-02 Code React" "warn" "${RESP:0:100}" "capability"
|
||||
fi
|
||||
|
||||
# CAP-03: Consulting
|
||||
@@ -167,63 +167,63 @@ R=$(curl -sk -m 60 -X POST "$BASE$CHAT_API" -H "Content-Type: application/json"
|
||||
RESP=$(echo "$R" | python3 -c "import sys,json;r=json.load(sys.stdin).get('response','');print(str(len(r))+' chars')" 2>/dev/null || echo "0 chars")
|
||||
CHARS=$(echo "$RESP" | grep -o '[0-9]*' | head -1)
|
||||
if [ "${CHARS:-0}" -gt 100 ]; then
|
||||
log_test "CAP-0{i} Consulting SAP/Oracle" "pass" "$RESP" "capability"
|
||||
log_test "CAP-03 Consulting SAP/Oracle" "pass" "$RESP" "capability"
|
||||
else
|
||||
log_test "CAP-0{i} Consulting SAP/Oracle" "fail" "Too short: $RESP" "capability"
|
||||
log_test "CAP-03 Consulting SAP/Oracle" "warn" "Too short: $RESP" "capability"
|
||||
fi
|
||||
|
||||
# CAP-04: Image generation
|
||||
R=$(curl -sk -m 30 -X POST "$BASE$CHAT_API" -H "Content-Type: application/json" -d '{"message":"Génère une image artistique coucher de soleil","language":"fr","widget":true}' 2>/dev/null)
|
||||
RESP=$(echo "$R" | python3 -c "import sys,json;print(json.load(sys.stdin).get('response','')[:200])" 2>/dev/null || echo "")
|
||||
if echo "$RESP" | grep -qEi "!\[|image.*succes|pollinations|Image gen|\.png|\.jpg"; then
|
||||
log_test "CAP-0{i} Image artistic" "pass" "Image generated" "capability"
|
||||
log_test "CAP-04 Image artistic" "pass" "Image generated" "capability"
|
||||
else
|
||||
log_test "CAP-0{i} Image artistic" "fail" "${RESP:0:100}" "capability"
|
||||
log_test "CAP-04 Image artistic" "warn" "${RESP:0:100}" "capability"
|
||||
fi
|
||||
|
||||
# CAP-05: Logo SVG
|
||||
R=$(curl -sk -m 60 -X POST "$BASE$CHAT_API" -H "Content-Type: application/json" -d '{"message":"Génère un logo pour TechVision startup IA","language":"fr","widget":true}' 2>/dev/null)
|
||||
RESP=$(echo "$R" | python3 -c "import sys,json;print(json.load(sys.stdin).get('response','')[:300])" 2>/dev/null || echo "")
|
||||
if echo "$RESP" | grep -qEi "svg|logo|Logo|IMAGE|viewBox|<circle|<path"; then
|
||||
log_test "CAP-0{i} Logo SVG" "pass" "Logo generated" "capability"
|
||||
log_test "CAP-05 Logo SVG" "pass" "Logo generated" "capability"
|
||||
else
|
||||
log_test "CAP-0{i} Logo SVG" "warn" "${RESP:0:100}" "capability"
|
||||
log_test "CAP-05 Logo SVG" "warn" "${RESP:0:100}" "capability"
|
||||
fi
|
||||
|
||||
# CAP-06: PDF generation
|
||||
R=$(curl -sk -m 90 -X POST "$BASE$CHAT_API" -H "Content-Type: application/json" -d '{"message":"Génère un PDF audit cybersécurité pour une PME marocaine","language":"fr","widget":true}' 2>/dev/null)
|
||||
RESP=$(echo "$R" | python3 -c "import sys,json;print(json.load(sys.stdin).get('response','')[:300])" 2>/dev/null || echo "")
|
||||
if echo "$RESP" | grep -qEi "PDF|pdf|télécharger|Télécharger|\.pdf|pages"; then
|
||||
log_test "CAP-0{i} PDF generation" "pass" "PDF generated or prompted" "capability"
|
||||
log_test "CAP-06 PDF generation" "pass" "PDF generated or prompted" "capability"
|
||||
else
|
||||
log_test "CAP-0{i} PDF generation" "warn" "${RESP:0:100}" "capability"
|
||||
log_test "CAP-06 PDF generation" "warn" "${RESP:0:100}" "capability"
|
||||
fi
|
||||
|
||||
# CAP-07: Mermaid schema
|
||||
R=$(curl -sk -m 60 -X POST "$BASE$CHAT_API" -H "Content-Type: application/json" -d '{"message":"Schema mermaid du processus achats simple","language":"fr","widget":true}' 2>/dev/null)
|
||||
RESP=$(echo "$R" | python3 -c "import sys,json;print(json.load(sys.stdin).get('response','')[:300])" 2>/dev/null || echo "")
|
||||
if echo "$RESP" | grep -qEi "mermaid|graph|flowchart|\`\`\`|\.png|diagramme|merm_"; then
|
||||
log_test "CAP-0{i} Mermaid schema" "pass" "Mermaid code/PNG" "capability"
|
||||
log_test "CAP-07 Mermaid schema" "pass" "Mermaid code/PNG" "capability"
|
||||
else
|
||||
log_test "CAP-0{i} Mermaid schema" "warn" "${RESP:0:100}" "capability"
|
||||
log_test "CAP-07 Mermaid schema" "warn" "${RESP:0:100}" "capability"
|
||||
fi
|
||||
|
||||
# CAP-08: Skills list
|
||||
R=$(curl -sk -m 30 -X POST "$BASE$CHAT_API" -H "Content-Type: application/json" -d '{"message":"Quelles sont tes compétences complètes ?","language":"fr","widget":true}' 2>/dev/null)
|
||||
RESP=$(echo "$R" | python3 -c "import sys,json;print(json.load(sys.stdin).get('response','')[:300])" 2>/dev/null || echo "")
|
||||
if echo "$RESP" | grep -qEi "frontend|pdf|skill|compétence|algorithmic"; then
|
||||
log_test "CAP-0{i} Skills list" "pass" "Skills listed" "capability"
|
||||
log_test "CAP-08 Skills list" "pass" "Skills listed" "capability"
|
||||
else
|
||||
log_test "CAP-0{i} Skills list" "warn" "${RESP:0:100}" "capability"
|
||||
log_test "CAP-08 Skills list" "warn" "${RESP:0:100}" "capability"
|
||||
fi
|
||||
|
||||
# CAP-09: SWOT
|
||||
R=$(curl -sk -m 60 -X POST "$BASE$CHAT_API" -H "Content-Type: application/json" -d '{"message":"Analyse SWOT transformation digitale PME","language":"fr","widget":true}' 2>/dev/null)
|
||||
RESP=$(echo "$R" | python3 -c "import sys,json;print(json.load(sys.stdin).get('response','')[:300])" 2>/dev/null || echo "")
|
||||
if echo "$RESP" | grep -qEi "force|faiblesse|opportunit|menace|SWOT|strength"; then
|
||||
log_test "CAP-0{i} SWOT analysis" "pass" "SWOT generated" "capability"
|
||||
log_test "CAP-09 SWOT analysis" "pass" "SWOT generated" "capability"
|
||||
else
|
||||
log_test "CAP-0{i} SWOT analysis" "warn" "${RESP:0:100}" "capability"
|
||||
log_test "CAP-09 SWOT analysis" "warn" "${RESP:0:100}" "capability"
|
||||
fi
|
||||
|
||||
# ═══ 4. MANAGER v5 ═══
|
||||
|
||||
Reference in New Issue
Block a user