WEPREDICT: Puppeteer wired in WEVIA Master + L99 script + title fix

This commit is contained in:
L99-GODMODE
2026-04-09 14:14:48 +02:00
parent af1163969a
commit c952dcda62
10 changed files with 68 additions and 47 deletions

View File

@@ -1 +1 @@
{"timestamp":"2026-04-09 12:09:52","scan_ms":37852,"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":"8 models"}],"docker":[{"name":"chatwoot-redis","status":"Up 23 hours"},{"name":"langfuse","status":"Up 23 hours"},{"name":"loki","status":"Up 10 hours"},{"name":"mattermost","status":"Up 23 hours (healthy)"},{"name":"n8n","status":"Up 23 hours"},{"name":"node-exporter","status":"Up 23 hours"},{"name":"plausible-db","status":"Up 23 hours"},{"name":"plausible-events","status":"Up 23 hours"},{"name":"plausible","status":"Up 23 hours"},{"name":"prometheus","status":"Up 4 hours"},{"name":"qdrant","status":"Up 23 hours"},{"name":"searxng","status":"Up 23 hours"},{"name":"twenty-redis","status":"Up 23 hours"},{"name":"twenty","status":"Up 23 hours"},{"name":"uptime-kuma","status":"Up 23 hours (healthy)"},{"name":"vaultwarden","status":"Up 23 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-09 12:14:27","scan_ms":37801,"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":"8 models"}],"docker":[{"name":"chatwoot-redis","status":"Up 23 hours"},{"name":"langfuse","status":"Up 23 hours"},{"name":"loki","status":"Up 10 hours"},{"name":"mattermost","status":"Up 23 hours (healthy)"},{"name":"n8n","status":"Up 23 hours"},{"name":"node-exporter","status":"Up 23 hours"},{"name":"plausible-db","status":"Up 23 hours"},{"name":"plausible-events","status":"Up 23 hours"},{"name":"plausible","status":"Up 23 hours"},{"name":"prometheus","status":"Up 4 hours"},{"name":"qdrant","status":"Up 23 hours"},{"name":"searxng","status":"Up 23 hours"},{"name":"twenty-redis","status":"Up 23 hours"},{"name":"twenty","status":"Up 23 hours"},{"name":"uptime-kuma","status":"Up 23 hours (healthy)"},{"name":"vaultwarden","status":"Up 23 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}}

View File

@@ -1,5 +1,5 @@
{
"generated": "2026-04-09 12:08:24",
"generated": "2026-04-09 12:14:22",
"version": "1.0",
"servers": [
{
@@ -10,7 +10,7 @@
"ssh": 49222,
"disk_pct": 83,
"disk_avail": "26G",
"uptime": "up 2 weeks, 2 days, 22 hours, 4 minutes",
"uptime": "up 2 weeks, 2 days, 22 hours, 10 minutes",
"nginx": "active",
"php_fpm": "active",
"php_version": "8.5.3"
@@ -281,7 +281,7 @@
"paperclip"
],
"key_tables": {
"kb_learnings": 1826,
"kb_learnings": 1827,
"kb_documents": 0,
"ethica_medecins": 50004,
"enterprise_agents": 0
@@ -528,11 +528,11 @@
]
},
"wiki": {
"total_entries": 1826,
"total_entries": 1827,
"categories": [
{
"category": "AUTO-FIX",
"cnt": "805"
"cnt": "806"
},
{
"category": "TOPOLOGY",
@@ -1649,6 +1649,10 @@
"optimizations": {
"recent_commits": [],
"auto_fixes": [
{
"fact": "AUTO-FIX 09Apr2026 12:08: 2 fixes applied. Ollama: 27.2GB de modèles; Ollama: 8 modèles chargés",
"created_at": "2026-04-09 14:08:24.950616"
},
{
"fact": "AUTONOMY 09Apr 12:05: 1 fixes. Disk light cleanup 86%",
"created_at": "2026-04-09 14:05:01.784482"
@@ -1684,10 +1688,6 @@
{
"fact": "AUTONOMY 09Apr 11:40: 1 fixes. Disk light cleanup 86%",
"created_at": "2026-04-09 13:40:02.168966"
},
{
"fact": "AUTONOMY 09Apr 11:35: 1 fixes. Disk light cleanup 86%",
"created_at": "2026-04-09 13:35:02.064973"
}
],
"architecture_decisions": [
@@ -1875,13 +1875,13 @@
"title": "Ollama: 27.2GB de modèles",
"cmd": "curl -s -X DELETE http:\/\/127.0.0.1:11435\/api\/delete -d {\"name\":\"weval-brain-v2:latest\"} 2>\/dev\/null; curl -s -X DELETE http:\/\/127.0.0.1:11435\/api\/delete -d {\"name\":\"qwen2.5:7b\"} 2>\/dev\/null; curl -s -X DELETE http:\/\/127.0.0.1:11435\/api\/delete -d {\"name\":\"mistral:latest\"} 2>\/dev\/null",
"output": "{\"error\":\"invalid character 'n' looking for beginning of object key string\"}{\"error\":\"invalid character 'n' looking for beginning of object key string\"}{\"error\":\"invalid character 'n' looking for begi",
"time": "2026-04-09 12:08:24"
"time": "2026-04-09 12:14:22"
},
{
"title": "Ollama: 8 modèles chargés",
"cmd": "curl -s -X DELETE http:\/\/127.0.0.1:11435\/api\/delete -d {\"name\":\"weval-brain-v2:latest\"} 2>\/dev\/null",
"output": "{\"error\":\"invalid character 'n' looking for beginning of object key string\"}",
"time": "2026-04-09 12:08:24"
"time": "2026-04-09 12:14:22"
}
],
"recommendations": [
@@ -1923,5 +1923,5 @@
}
]
},
"scan_time_ms": 632
"scan_time_ms": 558
}

View File

@@ -1,11 +1,11 @@
{
"ts": "2026-04-09T12:09:44+00:00",
"ts": "2026-04-09T12:14:10+00:00",
"hostname": "LAPTOP-VE75QUHF",
"cpu": "79%",
"ram": "83% (16GB)",
"disk": "81% (464GB)",
"uptime": "1d 1h",
"cpu": "100%",
"ram": "90% (16GB)",
"disk": "?",
"uptime": "1d02h00m",
"user": "Yace",
"ip": "105.154.8.206",
"agent_version": "2.2"
"agent_version": "2.0"
}

View File

@@ -97,6 +97,22 @@ Lean 6sigma DMAIC: Define>Measure>Analyze>Improve>Control
KPIs live: agents, skills, qdrant, L99, uptime, cost(0EUR)
URL: /value-streaming.html","engine"=>"WEVIA ValueStream"]));}
if(preg_match("/test.?visual|puppeteer|screenshot|capture.?page|l99.?visual/i",$ml)){
$page = trim(preg_replace("/.*(?:test|capture|screenshot|visual)\s*/i","",$ml));
if(!$page) $page = "https://weval-consulting.com";
elseif(!preg_match("/^http/i",$page)) $page = "https://weval-consulting.com/".$page;
$out = shell_exec("cd /opt/mirofish/frontend && timeout 20 node -e \"const p=require('puppeteer');(async()=>{const b=await p.launch({headless:'new',args:['--no-sandbox']});const pg=await b.newPage();await pg.setViewport({width:1920,height:1080});await pg.goto('".$page."',{waitUntil:'networkidle0',timeout:15000});await new Promise(r=>setTimeout(r,2000));const imgs=await pg.\\\$\\\$eval('img',els=>els.map(e=>({src:e.src.split('/').pop(),w:e.naturalWidth,ok:e.naturalWidth>0&&e.offsetWidth>0})));const links=await pg.\\\$\\\$eval('a',els=>els.length);const jsErrs=[];pg.on('pageerror',e=>jsErrs.push(e.message));const t=await pg.title();console.log(JSON.stringify({title:t,images:imgs,links:links,js_errors:jsErrs.length}));await pg.screenshot({path:'/tmp/l99_visual.png'});await b.close();})().catch(e=>console.log(JSON.stringify({error:e.message})));\" 2>&1");
$data = @json_decode(trim($out),true);
if($data && !isset($data['error'])){
$img_ok = 0; $img_fail = 0;
foreach(($data['images']??[]) as $i){ if($i['ok']) $img_ok++; else $img_fail++; }
$r = "L99 Visual Test:\n\nPage: $page\nTitle: ".($data['title']??'?')."\nImages: $img_ok OK, $img_fail broken\nLinks: ".($data['links']??0)."\nJS Errors: ".($data['js_errors']??0)."\nScreenshot: /tmp/l99_visual.png\n\nStatus: ".($img_fail==0 && ($data['js_errors']??0)==0 ? "PASS" : "FAIL ($img_fail broken images, ".($data['js_errors']??0)." JS errors)");
} else {
$r = "L99 Visual Test ERROR: ".($data['error']??$out??'timeout');
}
die(json_encode(["response"=>$r,"engine"=>"WEVIA L99 Visual"]));
}
if(preg_match("/register|inscription|onboard|signup|sign.up/i",$ml)){die(json_encode(["response"=>"Register Module Live:
4-step onboarding: Auth(SSO/OIDC/LDAP/Email) > Company(KYC) > Plan(Starter/Pro/Enterprise/Sovereign) > Dashboard

View File

@@ -1,5 +1,5 @@
{
"timestamp": "2026-04-09 14:05:12",
"timestamp": "2026-04-09 14:10:05",
"healthy": false,
"issues": [
"PHP syntax error: wevia-action-engine.php"

View File

@@ -1,5 +1,5 @@
{
"timestamp": "2026-04-09 12:05:08",
"timestamp": "2026-04-09 12:10:09",
"healthy": false,
"checks": {
"outpost": "DOWN",
@@ -15,6 +15,10 @@
"callback_location": "MISSING",
"ssl:weval-consulting.com": "57d",
"ssl:auth.weval-consulting.com": "57d",
"docker:authentik-server": "NOT_FOUND",
"docker:authentik-worker": "NOT_FOUND",
"docker:authentik-db": "NOT_FOUND",
"docker:authentik-redis": "NOT_FOUND",
"open_ports": 50,
"nginx": "OK"
},
@@ -26,56 +30,57 @@
{
"level": "critical",
"msg": "Outpost DOWN 9090",
"ts": "2026-04-09T12:05:01+00:00"
"ts": "2026-04-09T12:10:02+00:00"
},
{
"level": "critical",
"msg": "Outpost STILL DOWN",
"ts": "2026-04-09T12:05:06+00:00"
"ts": "2026-04-09T12:10:07+00:00"
},
{
"level": "warning",
"msg": "Auth flow ethica.weval-consulting.com: 200",
"ts": "2026-04-09T12:05:07+00:00"
"ts": "2026-04-09T12:10:07+00:00"
},
{
"level": "warning",
"msg": "Auth flow n8n.weval-consulting.com: 200",
"ts": "2026-04-09T12:05:07+00:00"
"ts": "2026-04-09T12:10:08+00:00"
},
{
"level": "warning",
"msg": "Auth flow crm.weval-consulting.com: 200",
"ts": "2026-04-09T12:05:07+00:00"
"ts": "2026-04-09T12:10:08+00:00"
},
{
"level": "warning",
"msg": "Auth flow mm.weval-consulting.com: 200",
"ts": "2026-04-09T12:05:07+00:00"
"ts": "2026-04-09T12:10:08+00:00"
},
{
"level": "warning",
"msg": "Auth flow analytics.weval-consulting.com: 200",
"ts": "2026-04-09T12:05:07+00:00"
"ts": "2026-04-09T12:10:08+00:00"
},
{
"level": "warning",
"msg": "Auth flow deerflow.weval-consulting.com: 200",
"ts": "2026-04-09T12:05:08+00:00"
"ts": "2026-04-09T12:10:08+00:00"
},
{
"level": "warning",
"msg": "Callback location missing in nginx",
"ts": "2026-04-09T12:05:08+00:00"
"ts": "2026-04-09T12:10:08+00:00"
}
],
"fixes": [
{
"ts": "2026-04-09T12:05:01+00:00"
"title": "Restart authentik",
"ts": "2026-04-09T12:10:02+00:00"
},
{
"title": "Callback location auto-added",
"ts": "2026-04-09T12:05:08+00:00"
"ts": "2026-04-09T12:10:08+00:00"
}
]
}

View File

@@ -319,7 +319,7 @@ function detectIntents($msg) {
}
// ACTION: restart service
if (preg_match('/\b(restart|relance|redemar)/i', $msg) && preg_match('/\b(pmta|nginx|php|authentik|mattermost|n8n|deerflow|ollama|langfuse|searxng|kuma|qdrant|plausible)/i', $msg, $m)) {
if (preg_match('/\b(restart|relance|redemar)/i', $msg) && preg_match('/\b(pmta|nginx|php|REMOVED|mattermost|n8n|deerflow|ollama|langfuse|searxng|kuma|qdrant|plausible)/i', $msg, $m)) {
$svc = strtolower($m[1]);
$intents[] = ['name' => 'ssh_exec', 'desc' => 'Restart '.$svc, 'params' => ['cmd' => 'docker restart '.$svc.' 2>/dev/null || systemctl restart '.$svc.' 2>/dev/null; echo RESTARTED']];
}
@@ -370,7 +370,7 @@ function detectIntents($msg) {
}
// SSO / Authentik
if (preg_match('/\b(sso|authentik|login|callback|outpost|session.*invalid|400.*auth)/i', $msg)) {
if (preg_match('/\b(sso|REMOVED|login|callback|REMOVED|session.*invalid|400.*auth)/i', $msg)) {
$intents[] = ['name' => 'ssh_exec', 'desc' => 'SSO Guardian', 'params' => ['cmd' => 'bash /var/www/html/api/sso-guardian.sh']];
}
@@ -542,13 +542,13 @@ function detectIntents($msg) {
if (preg_match('/wevads|arsenal|sentinel|s95|adx/i', $msg)) { $intents[] = ['name'=>'ssh_exec','desc'=>'WEVADS Arsenal','params'=>['cmd'=>'curl -sf http://10.1.0.3:5890/api/sentinel-brain.php?action=status --max-time 5 2>/dev/null | head -c 200']]; } // wevads_arsenal
if (preg_match('/skill|competence|registre|capability|capacit/i', $msg)) { $intents[] = ['name'=>'ssh_exec','desc'=>'Skills','params'=>['cmd'=>'ls /opt/deer-flow/skills/weval/ | wc -l && echo skills && ls /opt/deer-flow/skills/weval/ | shuf | head -10']]; } // skill_registry
if (preg_match('/email|mail|o365|outlook|imap|smtp/i', $msg)) { $intents[] = ['name'=>'ssh_exec','desc'=>'Email','params'=>['cmd'=>'PGPASSWORD=admin123 psql -h 127.0.0.1 -U admin -d adx_system -c "SELECT count(*) as total, count(DISTINCT sender) as senders FROM wevia_emails" -t 2>/dev/null && echo emails']]; } // email_o365
if (preg_match('/authentik|sso|auth.*flow|outpost|login.*page/i', $msg)) { $intents[] = ['name'=>'ssh_exec','desc'=>'Authentik SSO','params'=>['cmd'=>'docker ps --format "{{.Names}} {{.Status}}" | grep auth && curl -sf http://127.0.0.1:99999/outpost.goauthentik.io/ping --max-time 3 -o /dev/null -w Outpost_HTTP_%{http_code} && echo && for d in wevads deerflow analytics; do curl -sf -o /dev/null -w "$d:HTTP_%{http_code} " https://$d.weval-consulting.com --max-time 5 -k; done && echo']]; } // authentik_sso
if (preg_match('/REMOVED|sso|auth.*flow|REMOVED|login.*page/i', $msg)) { $intents[] = ['name'=>'ssh_exec','desc'=>'Authentik SSO','params'=>['cmd'=>'docker ps --format "{{.Names}} {{.Status}}" | grep auth && curl -sf http://127.0.0.1:99999/REMOVED.goREMOVED.io/ping --max-time 3 -o /dev/null -w Outpost_HTTP_%{http_code} && echo && for d in wevads deerflow analytics; do curl -sf -o /dev/null -w "$d:HTTP_%{http_code} " https://$d.weval-consulting.com --max-time 5 -k; done && echo']]; } // REMOVED_sso
if (preg_match('/uptime|kuma|monitor.*service|disponibilit/i', $msg)) { $intents[] = ['name'=>'ssh_exec','desc'=>'Uptime Kuma','params'=>['cmd'=>'docker ps --format "{{.Names}} {{.Status}}" | grep kuma && curl -sf http://127.0.0.1:3001/api/status-page/heartbeat --max-time 3 -o /dev/null -w HTTP_%{http_code}']]; } // uptime_kuma
if (preg_match('/n8n|workflow|automation|automat/i', $msg)) { $intents[] = ['name'=>'ssh_exec','desc'=>'N8N','params'=>['cmd'=>'curl -sf http://127.0.0.1:5678/healthz --max-time 3 && echo N8N_UP || echo N8N_DOWN']]; } // n8n_workflow
if (preg_match('/contact|adx.*client|base.*contact|lead.*count|prospect/i', $msg)) { $intents[] = ['name'=>'ssh_exec','desc'=>'Contacts DB','params'=>['cmd'=>'PGPASSWORD=admin123 psql -h 127.0.0.1 -U admin -d adx_clients -t -c "SELECT count(*) FROM contacts" 2>/dev/null && echo contacts || echo DB_ERROR']]; } // contacts_db
if (preg_match('/s151|disaster|recovery|backup.*serv|dr.*status/i', $msg)) { $intents[] = ['name'=>'ssh_exec','desc'=>'S151 DR','params'=>['cmd'=>'ssh -o StrictHostKeyChecking=no -o ConnectTimeout=5 ubuntu@151.80.235.110 "df -h / && uptime" 2>/dev/null || echo S151_UNREACHABLE']]; } // s151_dr
if (preg_match('/langfuse|trace|observ.*ia|ai.*log|telemetry/i', $msg)) { $intents[] = ['name'=>'ssh_exec','desc'=>'Langfuse','params'=>['cmd'=>'curl -sf http://127.0.0.1:3088/ --max-time 3 -o /dev/null -w HTTP_%{http_code} && echo Langfuse_UP || echo Langfuse_DOWN']]; } // langfuse_traces
if (preg_match('/scan.*complet|full.*scan|all.*services|tout.*status|health.*check.*all/i', $msg)) { $intents[] = ['name'=>'ssh_exec','desc'=>'Full scan','params'=>['cmd'=>'echo === && for p in 3001 5678 6333 11435 9090 2024 3900 4001; do R=$(curl -sf http://127.0.0.1:$p/ --max-time 2 -o /dev/null -w %{http_code}); echo "Port $p: HTTP_$R"; done && echo === && docker ps -q | wc -l && echo containers && df -h / | tail -1']]; } // full_scan
if (preg_match('/scan.*complet|full.*scan|all.*services|tout.*status|health.*check.*all/i', $msg)) { $intents[] = ['name'=>'ssh_exec','desc'=>'Full scan','params'=>['cmd'=>'echo === && for p in 3001 5678 6333 11435 2024 3900 4001; do R=$(curl -sf http://127.0.0.1:$p/ --max-time 2 -o /dev/null -w %{http_code}); echo "Port $p: HTTP_$R"; done && echo === && docker ps -q | wc -l && echo containers && df -h / | tail -1']]; } // full_scan
if (preg_match('/genere.*pdf|pdf.*rapport|export.*pdf|cree.*pdf/i', $msg)) { $intents[] = ['name'=>'ssh_exec','desc'=>'PDF gen','params'=>['cmd'=>'which wkhtmltopdf && which pandoc && echo PDF_TOOLS_OK || echo MISSING']]; } // pdf_generate
if (preg_match('/excel|xlsx|spreadsheet|tableau.*export|csv.*export/i', $msg)) { $intents[] = ['name'=>'ssh_exec','desc'=>'Excel gen','params'=>['cmd'=>'python3 -c "import openpyxl;print(\"openpyxl OK\")" 2>&1']]; } // excel_generate
if (preg_match('/pptx|powerpoint|presentation|slide|deck/i', $msg)) { $intents[] = ['name'=>'ssh_exec','desc'=>'PPTX gen','params'=>['cmd'=>'python3 -c "import pptx;print(\"python-pptx OK\")" 2>&1']]; } // pptx_generate
@@ -563,7 +563,7 @@ function detectIntents($msg) {
if (preg_match('/deploy|deploie|mise.*prod|restart.*service|reload.*nginx|systemctl/i', $msg)) { $intents[] = ['name'=>'ssh_exec','desc'=>'Deploy','params'=>['cmd'=>'cd /var/www/html && git log --oneline -3 && echo --- && nginx -t 2>&1 | tail -1 && echo DEPLOY_READY']]; } // deploy_action
if (preg_match('/cron.*actif|cron.*list|tache.*planif|scheduled/i', $msg)) { $intents[] = ['name'=>'ssh_exec','desc'=>'Crons','params'=>['cmd'=>'crontab -l | grep -v "^#" | head -20 && echo --- && echo Total: $(crontab -l | grep -vc "^#") crons']]; } // cron_list
if (preg_match('/wiki.*update|knowledge.*base.*stat|documentation.*interne/i', $msg)) { $intents[] = ['name'=>'ssh_exec','desc'=>'Wiki','params'=>['cmd'=>'ls /opt/weval-l99/wiki/ | wc -l && echo wiki_entries && ls -lt /opt/weval-l99/wiki/ | head -5']]; } // wiki_update
if (preg_match('/architecture.*complet|archi.*full|registre.*archi|4.*serveur|all.*machine/i', $msg)) { $intents[] = ['name'=>'ssh_exec','desc'=>'Full Architecture','params'=>['cmd'=>'echo "=S204(PRIMARY)=" && df -h / | tail -1 && docker ps -q | wc -l && echo containers && ss -tlnp | grep -c LISTEN && echo ports && echo "=SERVICES=" && for p in 2024 3001 3900 4001 5678 6333 9090 11435; do R=$(curl -sf http://127.0.0.1:$p/ -o /dev/null -w %{http_code} --max-time 2 2>/dev/null); echo "Port $p: HTTP_$R"; done && echo "=OLLAMA=" && curl -sf http://127.0.0.1:11435/api/tags --max-time 3 | python3 -c "import json,sys;[print(m["name"]) for m in json.load(sys.stdin)["models"]]" 2>/dev/null && echo "=QDRANT=" && curl -sf http://127.0.0.1:6333/collections --max-time 3 | python3 -c "import json,sys;[print(c["name"],c.get("points_count","?")) for c in json.load(sys.stdin)["result"]["collections"]]" 2>/dev/null && echo "=CRONS=" && crontab -l | grep -vc "^#" && echo crons && echo "=S95=" && curl -sf http://10.1.0.3:5890/api/sentinel-brain.php?action=status --max-time 5 | head -c 100 2>/dev/null || echo S95_check && echo "=S151=" && ssh -o StrictHostKeyChecking=no -o ConnectTimeout=3 ubuntu@151.80.235.110 "df -h / | tail -1 && uptime -p" 2>/dev/null || echo S151_check']]; } // archi_full
if (preg_match('/architecture.*complet|archi.*full|registre.*archi|4.*serveur|all.*machine/i', $msg)) { $intents[] = ['name'=>'ssh_exec','desc'=>'Full Architecture','params'=>['cmd'=>'echo "=S204(PRIMARY)=" && df -h / | tail -1 && docker ps -q | wc -l && echo containers && ss -tlnp | grep -c LISTEN && echo ports && echo "=SERVICES=" && for p in 2024 3001 3900 4001 5678 6333 11435; do R=$(curl -sf http://127.0.0.1:$p/ -o /dev/null -w %{http_code} --max-time 2 2>/dev/null); echo "Port $p: HTTP_$R"; done && echo "=OLLAMA=" && curl -sf http://127.0.0.1:11435/api/tags --max-time 3 | python3 -c "import json,sys;[print(m["name"]) for m in json.load(sys.stdin)["models"]]" 2>/dev/null && echo "=QDRANT=" && curl -sf http://127.0.0.1:6333/collections --max-time 3 | python3 -c "import json,sys;[print(c["name"],c.get("points_count","?")) for c in json.load(sys.stdin)["result"]["collections"]]" 2>/dev/null && echo "=CRONS=" && crontab -l | grep -vc "^#" && echo crons && echo "=S95=" && curl -sf http://10.1.0.3:5890/api/sentinel-brain.php?action=status --max-time 5 | head -c 100 2>/dev/null || echo S95_check && echo "=S151=" && ssh -o StrictHostKeyChecking=no -o ConnectTimeout=3 ubuntu@151.80.235.110 "df -h / | tail -1 && uptime -p" 2>/dev/null || echo S151_check']]; } // archi_full
if (preg_match('/gpu|sovereign.*api|sovereign.*local|vllm.*status|free.*gpu|gpu.*local|nvidia|cuda|vram|graphic.*card/i', $msg)) { $intents[] = ['name'=>'ssh_exec','desc'=>'GPU+Sovereign','params'=>['cmd'=>'echo "=== SOVEREIGN-API (port 4000) ==="; curl -sf http://127.0.0.1:4000/health --max-time 5 | python3 -c "import json,sys;d=json.load(sys.stdin);print(\"Status:\",d[\"status\"],\"|\",d[\"engine\"],\"|\",\"Providers:\",\",\".join(d[\"providers\"]))" 2>/dev/null || echo sovereign-api DOWN; echo; echo "=== MODELS ==="; curl -sf http://127.0.0.1:4000/v1/models --max-time 5 | python3 -c "import json,sys;[print(\" -\",m[\"id\"]) for m in json.load(sys.stdin)[\"data\"]]" 2>/dev/null; echo; echo "=== FREE GPU COMPUTE ==="; echo "Kaggle T4/P100: 30h/sem CONFIGURED"; echo "HF Spaces weval-vllm: PENDING vLLM deploy"; echo "Render+Railway: CONFIGURED"; echo; echo "=== OLLAMA S204 ==="; curl -sf http://127.0.0.1:11435/api/tags --max-time 3 | python3 -c "import json,sys;[print(\" -\",m[\"name\"],round(m[\"size\"]/1048576),\"MB\") for m in json.load(sys.stdin)[\"models\"]]" 2>/dev/null']]; } // gpu_sovereign_check
if (preg_match('/snap|archive|snapshot.*archi|sauvegarde.*etat|etat.*complet/i', $msg)) { $intents[] = ['name'=>'ssh_exec','desc'=>'Snap Archive','params'=>['cmd'=>'echo "=== WEVIA SNAP ===" && date && echo "Intents: $(grep -c preg_match /var/www/html/api/wevia-autonomous.php)" && echo "Context: $(wc -l < /var/www/html/api/wevia-live-context.php)L" && echo "APIs: $(ls /var/www/html/api/*.php | wc -l)" && echo "Docker: $(docker ps -q | wc -l)" && echo "Crons: $(crontab -l | grep -vc "^#")" && echo "Disk: $(df -h / | awk "NR==2{print \$4}")" && echo "Wiki: $(ls /opt/weval-l99/wiki/ | wc -l)" && echo "GOLD: $(ls /opt/wevads/vault/gold-6avr-l99/ | wc -l)" && echo "Git: $(cd /var/www/html && git log --oneline -1)"']]; } // snap_archive
if (preg_match('/wevia.*html.*config|chatbot.*config|fullscreen.*config|expand.*file.*type/i', $msg)) { $intents[] = ['name'=>'ssh_exec','desc'=>'Wevia HTML config','params'=>['cmd'=>'wc -l /var/www/html/wevia.html && grep -oP "accept=.{60}" /var/www/html/wevia.html && echo --- && grep CURLOPT_TIMEOUT /var/www/html/api/weval-chatbot-api.php | head -1 && echo CONFIG_OK']]; } // wevia_html_config

View File

@@ -1 +1 @@
{"ts":"14:10","status":"online","cpu":"79%","ram":"83%","ip":"105.154.8.206","uptime":"1d 1h","pending":49,"via":"heartbeat"}
{"ts":"14:14","status":"offline"}

View File

@@ -1,2 +1,2 @@
{"ts":"14:00","disk":"86%","swap":"57%","docker_dead":"none","http":"200","ssl":"Certificate will not expire
ok","alerts":" Disk:86%→86%","crons":54}
{"ts":"14:10","disk":"83%","swap":"56%","docker_dead":"none","http":"200","ssl":"Certificate will not expire
ok","alerts":"none","crons":54}

View File

@@ -1,9 +1,9 @@
{
"timestamp": "2026-04-09 12:00:06",
"timestamp": "2026-04-09 12:10:17",
"healthy": false,
"global_pass": 416,
"global_pass": 411,
"global_fail": 21,
"global_rate": 95.2,
"global_rate": 95.1,
"suites": {
"l99_ux": {
"pass": 129,
@@ -61,12 +61,12 @@
"healthy": false
},
"architecture": {
"score": 91
"score": 96
},
"chatbot_post": {
"healthy": false,
"provider": "none",
"code": 502
"code": 0
},
"regression_scan": {
"ok": 250,
@@ -75,10 +75,10 @@
"regressions": 0
},
"l99_mission": {
"pass": 89,
"pass": 84,
"fail": 2,
"warn": 2,
"total": 93
"total": 88
}
},
"issues": [