From b8421fc33f371256363d6352dc02efbacfd9dfff Mon Sep 17 00:00:00 2001 From: WEVIA Date: Mon, 13 Apr 2026 20:40:02 +0200 Subject: [PATCH] AUTO-BACKUP 20260413-2040 --- api/$_IC | 2 +- api/architecture-index.json | 94 +- api/architecture-scan.json | 1825 ++++++++++++++++++++++++++ api/architecture-topology.json | 4 +- api/blade-tasks/heartbeat.json | 6 +- api/fpm-watchdog.php | 11 + api/l99-autofix-log.json | 12 +- api/mirofish-ceo-cache.json | 2 +- api/ux-agent-report.json | 8 +- api/wevia-antiregression-status.json | 5 +- api/wevia-auth-status.json | 34 +- api/wevia-autonomous.php.GOLD-b | 1304 ++++++++++++++++++ api/wevia-autonomy-status.json | 22 +- api/wevia-blade-status.json | 2 +- api/wevia-nonreg-results.json | 25 +- api/wevia-pilot-status.json | 2 +- api/wevia-quality-status.json | 22 +- api/wevia-register.json | 194 ++- api/wevia-selfmanage.json | 2 +- api/wevia-tool-registry.json | 4 +- 20 files changed, 3356 insertions(+), 224 deletions(-) create mode 100644 api/fpm-watchdog.php create mode 100644 api/wevia-autonomous.php.GOLD-b diff --git a/api/$_IC b/api/$_IC index 5522521b4..5be5e25af 100644 --- a/api/$_IC +++ b/api/$_IC @@ -1 +1 @@ -{"timestamp":"2026-04-13 18:29:39","scan_ms":3067,"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":"inactive","port":"2024"},{"name":"deerflow-gw","status":"inactive","port":"8001"},{"name":"deerflow-fe","status":"active","port":"3000"},{"name":"ollama","status":"inactive","port":"11434","info":"0 models"}],"docker":[{"name":"chatwoot-redis","status":"Up 22 hours"},{"name":"gitea","status":"Up 22 hours"},{"name":"langfuse","status":"Up 16 hours"},{"name":"loki","status":"Up 22 hours"},{"name":"mattermost","status":"Up 22 hours (healthy)"},{"name":"node-exporter","status":"Up 22 hours"},{"name":"plausible-db","status":"Up 19 hours"},{"name":"plausible-events","status":"Up 19 hours"},{"name":"plausible","status":"Up 19 hours"},{"name":"prometheus","status":"Up 22 hours"},{"name":"qdrant","status":"Up 7 hours"},{"name":"searxng","status":"Up 3 hours"},{"name":"twenty-redis","status":"Up 22 hours"},{"name":"twenty","status":"Up 22 hours"},{"name":"uptime-kuma","status":"Up 16 hours (healthy)"},{"name":"vaultwarden","status":"Up 22 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 9 days"},{"name":"listmonk","status":"Up 9 days"}]},"s151":{"ip":"S151_DECOM_SKIP","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":"S204","user":"root","schedule":"0 10 * * *","command":"python3 \/opt\/ethica-enrich-searxng.py 200 >> \/var\/log\/ethica-enrich-searxng.log 2>&1","source":"crontab"},{"server":"S204","user":"root","schedule":"0 11,23 * * *","command":"python3 \/opt\/ethica-richscraper.py 500 >> \/var\/log\/ethica-richscraper.log 2>&1","source":"crontab"},{"server":"S204","user":"root","schedule":"0 *\/12 * * *","command":"bash \/opt\/weval-l99\/wevia-self-doc.sh","source":"crontab"},{"server":"S204","user":"root","schedule":"0 1 * * *","command":"python3 \/opt\/ethica-enrich-v4.py 300 >> \/var\/log\/ethica-enrich-v4.log 2>&1","source":"crontab"},{"server":"S204","user":"root","schedule":"0 2 * * 0","command":"python3 \/opt\/tabibi-scraper.py >> \/var\/log\/tabibi-scraper.log 2>&1","source":"crontab"},{"server":"S204","user":"root","schedule":"0 *\/2 * * *","command":"timeout 900 python3 \/opt\/weval-l99\/wevia-visual-batch.py >> \/var\/log\/wevia-visual-batch.log 2>&1","source":"crontab"},{"server":"S204","user":"root","schedule":"0 3 * * 0","command":"sudo python3 \/opt\/weval-security\/secret-scanner.py","source":"crontab"},{"server":"S204","user":"root","schedule":"0 3,12,20 * * *","command":"python3 \/opt\/ethica-cron-scraper.py >> \/var\/log\/ethica-cron-scraper.log 2>&1","source":"crontab"},{"server":"S204","user":"root","schedule":"0 3 * * *","command":"\/opt\/deer-flow\/thread-cleanup.sh","source":"crontab"},{"server":"S204","user":"root","schedule":"0 *\/3 * * *","command":"python3 \/opt\/weval-l99\/wevia-visual-analysis.py >> \/var\/log\/wevia-visual-analysis.log 2>&1","source":"crontab"},{"server":"S204","user":"root","schedule":"0 *\/3 * * *","command":"timeout 300 python3 \/opt\/weval-l99\/wevia-control-tower.py >> \/var\/log\/wevia-control-tower.log 2>&1","source":"crontab"},{"server":"S204","user":"root","schedule":"0 *\/4 * * *","command":"php \/var\/www\/html\/api\/wevia-quality-framework.php > \/dev\/null 2>&1","source":"crontab"},{"server":"S204","user":"root","schedule":"0 *\/4 * * *","command":"timeout 300 python3 \/opt\/weval-l99\/l99-mega-scanner.py > \/var\/log\/l99-mega-scan.log 2>&1","source":"crontab"},{"server":"S204","user":"root","schedule":"0 *\/4 * * *","command":"timeout 300 python3 \/opt\/weval-l99\/wevia-gap-filler.py >> \/var\/log\/wevia-gap-filler.log 2>&1","source":"crontab"},{"server":"S204","user":"root","schedule":"0 6 * * *","command":"bash \/opt\/weval-l99\/wevia-daily-report.sh","source":"crontab"},{"server":"S204","user":"root","schedule":"0 *\/6 * * *","command":"cd \/opt\/weval-l99 && timeout 120 python3 l99-ux-agent.py > \/var\/log\/l99-ux.log 2>&1","source":"crontab"},{"server":"S204","user":"root","schedule":"0 *\/6 * * *","command":"cd \/opt\/weval-nonreg && timeout 120 python3 full-nonreg-serverside.py > \/var\/log\/full-nonreg.log 2>&1","source":"crontab"},{"server":"S204","user":"root","schedule":"0 *\/6 * * *","command":"php \/opt\/weval-l99\/rnd-pipeline.php >> \/var\/log\/wevia-rnd-pipeline.log 2>&1","source":"crontab"},{"server":"S204","user":"root","schedule":"0 *\/6 * * *","command":"sudo python3 \/opt\/weval-security\/key-sync.py >> \/var\/log\/security-sync.log 2>&1","source":"crontab"},{"server":"S204","user":"root","schedule":"0 *\/6 * * *","command":"timeout 900 python3 \/opt\/weval-l99\/l99-deep-scan.py >> \/var\/log\/l99-deep-scan.log 2>&1","source":"crontab"},{"server":"S204","user":"root","schedule":"0 9 * * *","command":"curl -sf https:\/\/127.0.0.1\/api\/wevia-enterprise-fleet.php?action=run_standup -k -H Host:weval-consulting.com > \/dev\/null 2>&1","source":"crontab"},{"server":"S204","user":"root","schedule":"*\/10 * * * *","command":"bash \/opt\/weval-l99\/wevia-blade-ctl.sh status >> \/var\/log\/wevia-blade.log 2>&1","source":"crontab"},{"server":"S204","user":"root","schedule":"*\/10 * * * *","command":"bash \/opt\/weval-l99\/wevia-pilot.sh","source":"crontab"},{"server":"S204","user":"root","schedule":"*\/10 * * * *","command":"php \/var\/www\/html\/api\/wevia-quality-agent.php > \/dev\/null 2>&1","source":"crontab"},{"server":"S204","user":"root","schedule":"*\/10 * * * *","command":"timeout 120 python3 \/opt\/weval-l99\/wevia-sso-guardian.py >> \/var\/log\/wevia-sso-cache.log 2>&1","source":"crontab"},{"server":"S204","user":"root","schedule":"*\/10 * * * *","command":"timeout 60 python3 \/opt\/weval-l99\/wevia-sso-systemic.py >> \/var\/log\/wevia-sso-systemic.log 2>&1","source":"crontab"},{"server":"S204","user":"root","schedule":"15,45 * * * *","command":"timeout 300 python3 \/opt\/weval-l99\/wevia-agents-pack.py >> \/var\/log\/wevia-agents-pack.log 2>&1","source":"crontab"},{"server":"S204","user":"root","schedule":"*\/15 * * * *","command":"php \/opt\/weval-l99\/wevia-nonreg-agent.php >> \/var\/log\/wevia-nonreg-agent.log 2>&1","source":"crontab"},{"server":"S204","user":"root","schedule":"*\/15 * * * *","command":"timeout 60 python3 \/opt\/weval-l99\/wevia-l99-autofix.py >> \/var\/log\/wevia-l99-autofix.log 2>&1","source":"crontab"},{"server":"S204","user":"root","schedule":"*\/2 * * * *","command":"bash \/opt\/weval-l99\/wevia-blade-cleaner.sh >> \/var\/log\/wevia-blade-cleaner.log 2>&1","source":"crontab"},{"server":"S204","user":"root","schedule":"*\/2 * * * *","command":"\/opt\/wevia-brain\/blade-poll-gguf.sh","source":"crontab"},{"server":"S204","user":"root","schedule":"30 *\/2 * * *","command":"timeout 300 python3 \/opt\/weval-l99\/wevia-systematic.py >> \/var\/log\/wevia-systematic.log 2>&1","source":"crontab"},{"server":"S204","user":"root","schedule":"30 *\/4 * * *","command":"timeout 300 python3 \/opt\/weval-l99\/wevia-register-agent.py >> \/var\/log\/wevia-register.log 2>&1","source":"crontab"},{"server":"S204","user":"root","schedule":"*\/30 * * * *","command":"cd \/opt\/weval-l99 && python3 l99-purge-scan.sh >> \/var\/log\/l99.log 2>&1","source":"crontab"},{"server":"S204","user":"root","schedule":"*\/30 * * * *","command":"php \/var\/www\/html\/api\/architecture-autonomous.php > \/dev\/null 2>&1","source":"crontab"},{"server":"S204","user":"root","schedule":"*\/30 * * * *","command":"php \/var\/www\/html\/api\/architecture-scanner.php > \/dev\/null 2>&1","source":"crontab"},{"server":"S204","user":"root","schedule":"*\/30 * * * *","command":"php \/var\/www\/weval\/wevia-ia\/wevia-dream-cron.php >> \/var\/log\/wevia-dream.log 2>&1","source":"crontab"},{"server":"S204","user":"root","schedule":"*\/30 * * * *","command":"python3 \/opt\/weval-l99\/disk-guardian.py scan >> \/var\/log\/disk-guardian.log 2>&1","source":"crontab"},{"server":"S204","user":"root","schedule":"*\/30 * * * *","command":"python3 \/opt\/weval-l99\/l99-auth-infra.py > \/dev\/null 2>&1","source":"crontab"},{"server":"S204","user":"root","schedule":"*\/30 * * * *","command":"timeout 30 python3 \/opt\/weval-l99\/ux-agent.py >> \/var\/log\/ux-agent.log 2>&1","source":"crontab"},{"server":"S204","user":"root","schedule":"*\/3 * * * *","command":"php \/var\/www\/html\/api\/weval-watchdog.php >> \/var\/log\/weval-watchdog.log 2>&1","source":"crontab"},{"server":"S204","user":"root","schedule":"*\/5 * * * *","command":"bash \/opt\/weval-l99\/wevia-selfmanage.sh >> \/var\/log\/wevia-selfmanage.log 2>&1","source":"crontab"},{"server":"S204","user":"root","schedule":"*\/5 * * * *","command":"\/opt\/wevia-brain\/proactive-monitor.sh","source":"crontab"},{"server":"S204","user":"root","schedule":"*\/5 * * * *","command":"php \/var\/www\/html\/api\/mirofish-ceo-cron.php > \/dev\/null 2>&1","source":"crontab"},{"server":"S204","user":"root","schedule":"*\/5 * * * *","command":"php \/var\/www\/html\/api\/wevia-auth-agent.php > \/dev\/null 2>&1","source":"crontab"},{"server":"S204","user":"root","schedule":"*\/5 * * * *","command":"php \/var\/www\/html\/api\/wevia-autonomy-controller.php >> \/var\/log\/wevia-autonomy.log 2>&1","source":"crontab"},{"server":"S204","user":"root","schedule":"*\/5 * * * *","command":"python3 \/opt\/weval-l99\/wevia-antiregression.py >> \/var\/log\/wevia-antiregression.log 2>&1","source":"crontab"},{"server":"S204","user":"root","schedule":"0 *\/6 * * *","command":"php \/var\/www\/html\/api\/auto-key-renew.php >> \/var\/log\/key-renew.log 2>&1","source":"crontab"},{"server":"S204","user":"root","schedule":"0 3 * * *","command":"sudo -u www-data python3 -B \/opt\/weval-l99\/l99-playwright-visual.py > \/tmp\/pw_night.log 2>&1 && sudo -u www-data python3 -B \/opt\/weval-l99\/l99-fullscan.py > \/tmp\/fs_night.log 2>&1 && sudo -u www-data python3 -B \/opt\/weval-nonreg\/full-nonreg-serverside.py > \/tmp\/nr_night.log 2>&1 && python3 \/opt\/weval-l99\/l99-state-updater.py > \/tmp\/l99_night.log 2>&1 # l99-full-night","source":"crontab"},{"server":"S204","user":"www-data","schedule":"*\/15 * * * *","command":"php \/opt\/weval-l99\/wevialife-sync.php >> \/tmp\/wl.log 2>&1","source":"crontab"},{"server":"S204","user":"www-data","schedule":"0 4,10,16,22 * * *","command":"curl -s http:\/\/127.0.0.1\/api\/ethica-ma-boost.php?t=ETHICA_API_2026_SECURE\\&batch=300 > \/dev\/null 2>&1 # ma-boost","source":"crontab"},{"server":"S204","user":"root","schedule":"0 *\/12 * * *","command":"test -x \/usr\/bin\/certbot -a \\! -d \/run\/systemd\/system && perl -e 'sleep int(rand(43200))' && certbot -q renew --no-random-sleep-on-renew","source":"certbot"},{"server":"S204","user":"www-data","schedule":"0 *\/6 * * *","command":"curl -s http:\/\/localhost\/api\/crm-api.php?action=sequence_execute -H Host:weval-consulting.com > \/dev\/null 2>&1","source":"crm-sequences"},{"server":"S204","user":"root","schedule":"0 5 * * *","command":"\/usr\/bin\/python3 \/opt\/ethica-enrich-v4.py all >> \/var\/log\/ethica-enrich-v4.log 2>&1","source":"ethica-enrich"},{"server":"S204","user":"root","schedule":"30 *\/6 * * *","command":"\/usr\/bin\/python3 \/opt\/ethica-richscraper.py all >> \/var\/log\/ethica-richscraper.log 2>&1","source":"ethica-richscraper"},{"server":"S204","user":"root","schedule":"0 3 * * *","command":"\/usr\/bin\/python3 \/opt\/ethica-cron-scraper.py all >> \/var\/log\/ethica-scraper.log 2>&1","source":"ethica-scraper"},{"server":"S204","user":"root","schedule":"0 *\/6 * * *","command":"\/usr\/bin\/python3 \/opt\/ethica-cron-scraper.py enrich >> \/var\/log\/ethica-scraper.log 2>&1","source":"ethica-scraper"},{"server":"S204","user":"root","schedule":"0 10 * * *","command":"\/usr\/bin\/python3 \/opt\/ethica-enrich-searxng.py 200 >> \/var\/log\/ethica-enrich-searxng.log 2>&1","source":"ethica-searxng"},{"server":"S204","user":"www-data","schedule":"0 4 * * *","command":"\/usr\/bin\/php \/var\/www\/ethica\/scripts\/ethica-validator.php >> \/var\/log\/ethica-validator.log 2>&1","source":"ethica-validator"},{"server":"S204","user":"root","schedule":"*\/1 * * * *","command":"bash \/tmp\/go.sh > \/tmp\/mmdc.log 2>&1","source":"fixmmdc"},{"server":"S204","user":"root","schedule":"0 9 * * *","command":"\/opt\/wevads\/vault\/check-pat-expiry.sh > \/dev\/null 2>&1","source":"github-pat-reminder"},{"server":"S204","user":"root","schedule":"*\/30 * * * *","command":"python3 \/opt\/weval-l99\/guardian-wire.py >> \/var\/log\/guardian-wire.log 2>&1","source":"guardian-wire"},{"server":"S204","user":"www-data","schedule":"0 *\/6 * * *","command":"cd \/opt\/weval-l99 && python3 l99-ai-scanner.py >> \/var\/log\/l99-ai-scan.log 2>&1","source":"l99-ai-scanner"},{"server":"S204","user":"www-data","schedule":"2,17,32,47 * * * *","command":"python3 \/opt\/weval-l99\/l99-autofix-infra.py >> \/var\/log\/l99-autofix.log 2>&1","source":"l99-autofix"},{"server":"S204","user":"www-data","schedule":"0 *\/6 * * *","command":"cd \/opt\/weval-l99 && python3 l99-enterprise-check.py >> \/var\/log\/l99-enterprise.log 2>&1","source":"l99-enterprise"},{"server":"S204","user":"www-data","schedule":"30 *\/6 * * *","command":"cd \/opt\/weval-l99 && python3 enterprise-model-sync.py >> \/var\/log\/enterprise-sync.log 2>&1","source":"l99-enterprise"},{"server":"S204","user":"root","schedule":"*\/15 * * * *","command":"cd \/opt\/weval-l99 && python3 l99-paperclip-wire.py >> \/var\/log\/l99-paperclip.log 2>&1","source":"l99-paperclip"},{"server":"S204","user":"root","schedule":"0 6 * * *","command":"\/opt\/nonreg-daily.sh","source":"nonreg-daily"},{"server":"S204","user":"root","schedule":"0 3 * * 0","command":"\/opt\/wevads\/nuclei-scan.sh > \/dev\/null 2>&1","source":"nuclei-weekly"},{"server":"S204","user":"root","schedule":"30 4 * * *","command":"python3 \/opt\/weval-l99\/oss-master-pipeline.py >> \/var\/log\/oss-pipeline.log 2>&1","source":"oss-pipeline"},{"server":"S204","user":"www-data","schedule":"0 4 * * *","command":"curl -sk https:\/\/127.0.0.1\/api\/oss-discovery-api.php?action=scan -H Host:weval-consulting.com > \/dev\/null 2>&1","source":"oss-scan"},{"server":"S204","user":"root","schedule":"*\/3 * * * *","command":"\/opt\/paperclip-weval\/keepalive-sovereign.sh","source":"paperclip-sovereign"},{"server":"S204","user":"root","schedule":"09,39 * * * *","command":"[ -x \/usr\/lib\/php\/sessionclean ] && if [ ! -d \/run\/systemd\/system ]; then \/usr\/lib\/php\/sessionclean; fi","source":"php"},{"server":"S204","user":"root","schedule":"*\/30 * * * *","command":"\/opt\/php-cleanup.sh","source":"php-cleanup"},{"server":"S204","user":"root","schedule":"0 *\/6 * * *","command":"cd \/opt\/weval-l99 && python3 qdrant-skill-sync.py >> \/var\/log\/qdrant-sync.log 2>&1","source":"qdrant-sync"},{"server":"S204","user":"root","schedule":"0 2 * * 0","command":"\/usr\/bin\/python3 \/opt\/tabibi-scraper.py >> \/var\/log\/tabibi-scraper.log 2>&1","source":"tabibi-scraper"},{"server":"S204","user":"root","schedule":"0 *\/4 * * *","command":"bash \/opt\/weval-l99\/tools\/vault-daily.sh","source":"vault-daily"},{"server":"S204","user":"root","schedule":"0 5 * * *","command":"python3 \/opt\/weval-l99\/vault-embed.py","source":"vault-daily"},{"server":"S204","user":"root","schedule":"0 *\/2 * * *","command":"\/opt\/wevads-auto-ops-cron.sh","source":"wevads-auto-ops"},{"server":"S204","user":"www-data","schedule":"0 *\/6 * * *","command":"curl -sk https:\/\/127.0.0.1\/api\/wevia-agent-evolution.php?action=propose > \/dev\/null 2>&1","source":"weval-agent-evolution"},{"server":"S204","user":"root","schedule":"0 *\/12 * * *","command":"python3 \/opt\/weval-l99\/agent-factory.py >> \/var\/log\/agent-factory.log 2>&1","source":"weval-agent-factory"},{"server":"S204","user":"root","schedule":"0 *\/2 * * *","command":"python3 \/opt\/weval-l99\/agent-scanner.py >> \/var\/log\/agent-scanner.log 2>&1","source":"weval-agent-scanner"},{"server":"S204","user":"root","schedule":"30 *\/6 * * *","command":"python3 \/var\/www\/html\/api\/ai-gap-discovery.py >> \/var\/log\/ai-gap.log 2>&1","source":"weval-ai-gap"},{"server":"S204","user":"root","schedule":"45 *\/6 * * *","command":"python3 \/var\/www\/html\/api\/ai-improvement-engine.py >> \/var\/log\/ai-improve.log 2>&1","source":"weval-ai-improve"},{"server":"S204","user":"www-data","schedule":"*\/30 * * * *","command":"php \/var\/www\/html\/api\/architecture-scanner.php > \/var\/www\/html\/api\/architecture-scan.json 2>\/dev\/null","source":"weval-archi-scanner"},{"server":"S204","user":"www-data","schedule":"0 *\/2 * * *","command":"cd \/opt\/weval-l99 && python3 auto-benchmark.py >> \/var\/log\/auto-bench.log 2>&1","source":"weval-auto-benchmark"},{"server":"S204","user":"www-data","schedule":"*\/10 * * * *","command":"curl -sk https:\/\/localhost\/api\/wevia-master-autoheal.php -o \/dev\/null","source":"weval-autoheal"},{"server":"S204","user":"root","schedule":"*\/30 * * * *","command":"curl -s https:\/\/weval-consulting.com\/api\/wevia-autowire-agent.php > \/var\/log\/autowire-result.json 2>\/dev\/null","source":"weval-autowire-agent"},{"server":"S204","user":"root","schedule":"0 *\/6 * * *","command":"php \/var\/www\/html\/api\/ai-benchmark-live.php > \/var\/www\/html\/api\/ai-benchmark-live-cache.json 2>\/dev\/null","source":"weval-benchmark-refresh"},{"server":"S204","user":"root","schedule":"0 *\/4 * * *","command":"python3 \/opt\/weval-l99\/wevia-cortex.py >> \/var\/log\/wevia-cortex.log 2>&1","source":"weval-cortex"},{"server":"S204","user":"www-data","schedule":"0 8 * * *","command":"curl -sk \"https:\/\/127.0.0.1\/api\/wevia-daily-standup.php?action=daily&squad=infra\" > \/dev\/null 2>&1","source":"weval-daily-standup"},{"server":"S204","user":"www-data","schedule":"0 14 * * *","command":"curl -sk \"https:\/\/127.0.0.1\/api\/wevia-daily-standup.php?action=daily&squad=infra\" > \/dev\/null 2>&1","source":"weval-daily-standup"},{"server":"S204","user":"www-data","schedule":"30 8 * * *","command":"curl -sk \"https:\/\/127.0.0.1\/api\/wevia-daily-standup.php?action=daily&squad=innovation\" > \/dev\/null 2>&1","source":"weval-daily-standup"},{"server":"S204","user":"www-data","schedule":"30 14 * * *","command":"curl -sk \"https:\/\/127.0.0.1\/api\/wevia-daily-standup.php?action=daily&squad=innovation\" > \/dev\/null 2>&1","source":"weval-daily-standup"},{"server":"S204","user":"www-data","schedule":"0 9 * * 1","command":"curl -sk \"https:\/\/127.0.0.1\/api\/wevia-daily-standup.php?action=weekly\" > \/dev\/null 2>&1","source":"weval-daily-standup"},{"server":"S204","user":"root","schedule":"30 *\/6 * * *","command":"python3 \/opt\/weval-l99\/enterprise-model-sync.py >> \/var\/log\/enterprise-sync.log 2>&1","source":"weval-enterprise-sync"},{"server":"S204","user":"www-data","schedule":"0 3 * * 0","command":"python3 \/opt\/weval-l99\/test-enterprise-full.py >> \/tmp\/em-full-weekly.log 2>&1","source":"weval-enterprise-test"},{"server":"S204","user":"root","schedule":"0 *\/6 * * *","command":"python3 \/opt\/weval-l99\/gap-detector.py >> \/var\/log\/gap-detector.log 2>&1","source":"weval-gap-detector"},{"server":"S204","user":"root","schedule":"*\/5 * * * *","command":"\/usr\/bin\/python3 \/opt\/weval-guardian\/guardian.py > \/dev\/null 2>&1","source":"weval-guardian"},{"server":"S204","user":"root","schedule":"*\/5 * * * *","command":"\/opt\/weval-l99\/guardian-v2.sh","source":"weval-guardian-v2"},{"server":"S204","user":"root","schedule":"*\/3 * * * *","command":"\/opt\/weval-l99\/guardian-v3.sh","source":"weval-guardian-v3"},{"server":"S204","user":"root","schedule":"*\/30 * * * *","command":"python3 \/opt\/weval-l99\/health-monitor.py 2>&1","source":"weval-health"},{"server":"S204","user":"root","schedule":"0 *\/8 * * *","command":"python3 \/opt\/weval-l99\/l99-dark-test.py >> \/var\/log\/l99-dark.log 2>&1","source":"weval-l99-dark"},{"server":"S204","user":"root","schedule":"*\/30 * * * *","command":"python3 \/opt\/weval-l99\/l99-functional-test.py >> \/var\/log\/l99-functional.log 2>&1","source":"weval-l99-functional"},{"server":"S204","user":"root","schedule":"0 *\/6 * * *","command":"python3 \/opt\/weval-l99\/l99-security-scan.py >> \/var\/log\/l99-security.log 2>&1","source":"weval-l99-security"},{"server":"S204","user":"root","schedule":"0 *\/4 * * *","command":"python3 \/opt\/weval-l99\/l99-visual-test.py >> \/var\/log\/l99-visual.log 2>&1","source":"weval-l99-visual"},{"server":"S204","user":"www-data","schedule":"0 9 * * *","command":"curl -sk https:\/\/127.0.0.1\/api\/wevia-meeting.php?action=daily > \/dev\/null 2>&1","source":"weval-meeting-daily"},{"server":"S204","user":"www-data","schedule":"0 14 * * *","command":"curl -sk https:\/\/127.0.0.1\/api\/wevia-meeting.php?action=daily > \/dev\/null 2>&1","source":"weval-meeting-daily"},{"server":"S204","user":"root","schedule":"30 *\/6 * * *","command":"\/usr\/bin\/python3 \/opt\/weval-l99\/meeting-rooms-populator.py > \/tmp\/meeting-populator.log 2>&1","source":"weval-meeting-populator"},{"server":"S204","user":"www-data","schedule":"0 16 * * 5","command":"curl -sk https:\/\/127.0.0.1\/api\/wevia-meeting.php?action=weekly > \/dev\/null 2>&1","source":"weval-meeting-strategy"},{"server":"S204","user":"www-data","schedule":"0 10 * * 1","command":"curl -sk https:\/\/127.0.0.1\/api\/wevia-meeting.php?action=weekly > \/dev\/null 2>&1","source":"weval-meeting-weekly"},{"server":"S204","user":"root","schedule":"0 *\/8 * * *","command":"python3 \/opt\/weval-l99\/oss-cache-refresh.py >> \/var\/log\/oss-cache.log 2>&1","source":"weval-oss-cache"},{"server":"S204","user":"www-data","schedule":"*\/120 * * * *","command":"python3 \/opt\/weval-l99\/oss-discovery.py >> \/var\/log\/oss-discovery.log 2>&1","source":"weval-oss-discovery"},{"server":"S204","user":"www-data","schedule":"5 *\/4 * * *","command":"python3 \/opt\/weval-l99\/oss-paperclip-chain.py >> \/var\/log\/oss-paperclip.log 2>&1","source":"weval-oss-paperclip-chain"},{"server":"S204","user":"root","schedule":"30 4 * * *","command":"python3 \/opt\/weval-l99\/oss-master-pipeline.py >> \/tmp\/oss-pipeline.log 2>&1","source":"weval-oss-pipeline"},{"server":"S204","user":"www-data","schedule":"*\/15 * * * *","command":"python3 \/opt\/weval-l99\/paperclip-sync.py >> \/var\/log\/paperclip-sync.log 2>&1","source":"weval-paperclip-sync"},{"server":"S204","user":"root","schedule":"*\/5 * * * *","command":"\/opt\/weval-l99\/proactive-monitor.sh","source":"weval-proactive"},{"server":"S204","user":"root","schedule":"0 *\/2 * * *","command":"python3 \/opt\/weval-l99\/registry-master.py >> \/var\/log\/registry.log 2>&1","source":"weval-registry"},{"server":"S204","user":"root","schedule":"*\/10 * * * *","command":"curl -sk https:\/\/weval-consulting.com\/api\/wevia-security-fortress.php > \/var\/log\/security-fortress.json 2>\/dev\/null","source":"weval-security-fortress"},{"server":"S204","user":"www-data","schedule":"0 6 * * *","command":"curl -sk https:\/\/www.google.com\/ping?sitemap=https:\/\/weval-consulting.com\/sitemap.xml > \/dev\/null && curl -sk https:\/\/www.bing.com\/ping?sitemap=https:\/\/weval-consulting.com\/sitemap.xml > \/dev\/null","source":"weval-seo-ping"},{"server":"S204","user":"root","schedule":"0 *\/4 * * *","command":"python3 \/opt\/weval-l99\/qdrant-mini-sync.py >> \/var\/log\/qdrant-sync.log 2>&1","source":"weval-skill-sync"},{"server":"S204","user":"root","schedule":"0 4 * * 0","command":"trivy image --severity HIGH,CRITICAL --quiet portainer\/portainer-ce:lts >> \/var\/log\/trivy-scan.log 2>&1","source":"weval-trivy-weekly"},{"server":"S204","user":"root","schedule":"*\/30 * * * *","command":"\/usr\/bin\/python3 \/opt\/weval-ux\/ux-agent.py > \/tmp\/ux-agent.log 2>&1","source":"weval-ux-agent"},{"server":"S204","user":"root","schedule":"15 *\/4 * * *","command":"python3 \/opt\/weval-l99\/wiki-mega-scan.py >> \/var\/log\/wiki-scan.log 2>&1","source":"weval-wiki-scan"},{"server":"S204","user":"root","schedule":"0 *\/6 * * *","command":"\/opt\/weval-l99\/wire-integrity.sh","source":"weval-wire-integrity"},{"server":"S204","user":"www-data","schedule":"*\/5 * * * *","command":"curl -sk https:\/\/127.0.0.1\/api\/wevia-auto-heal.php -H Host:weval-consulting.com -o \/tmp\/auto-heal.log 2>\/dev\/null","source":"wevia-auto-heal"},{"server":"S204","user":"root","schedule":"*\/30 * * * *","command":"python3 \/opt\/wevia-auto.py >> \/var\/log\/wevia-autonomous.log 2>&1","source":"wevia-autonomous"},{"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":134,"total_services":20,"total_docker":18}} \ No newline at end of file +{"timestamp":"2026-04-13 18:39:36","scan_ms":3050,"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":"inactive","port":"2024"},{"name":"deerflow-gw","status":"active","port":"8001"},{"name":"deerflow-fe","status":"active","port":"3000"},{"name":"ollama","status":"inactive","port":"11434","info":"0 models"}],"docker":[{"name":"chatwoot-redis","status":"Up 4 minutes"},{"name":"gitea","status":"Up 22 hours"},{"name":"langfuse","status":"Up 6 minutes"},{"name":"loki","status":"Up 6 minutes"},{"name":"mattermost","status":"Up 6 minutes (healthy)"},{"name":"node-exporter","status":"Up 22 hours"},{"name":"plausible-db","status":"Up 19 hours"},{"name":"plausible-events","status":"Up 19 hours"},{"name":"plausible","status":"Up 19 hours"},{"name":"prometheus","status":"Up 22 hours"},{"name":"qdrant","status":"Up 7 hours"},{"name":"searxng","status":"Up 3 hours"},{"name":"twenty-redis","status":"Up 6 minutes"},{"name":"twenty","status":"Up 3 minutes"},{"name":"uptime-kuma","status":"Up 16 hours (healthy)"},{"name":"vaultwarden","status":"Up 22 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 9 days"},{"name":"listmonk","status":"Up 9 days"}]},"s151":{"ip":"S151_DECOM_SKIP","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":"S204","user":"root","schedule":"*\/10 * * * *","command":"bash \/opt\/weval-l99\/wevia-blade-ctl.sh status >> \/var\/log\/wevia-blade.log 2>&1","source":"crontab"},{"server":"S204","user":"root","schedule":"*\/10 * * * *","command":"bash \/opt\/weval-l99\/wevia-pilot.sh","source":"crontab"},{"server":"S204","user":"root","schedule":"*\/10 * * * *","command":"php \/var\/www\/html\/api\/wevia-quality-agent.php > \/dev\/null 2>&1","source":"crontab"},{"server":"S204","user":"root","schedule":"*\/10 * * * *","command":"timeout 120 python3 \/opt\/weval-l99\/wevia-sso-guardian.py >> \/var\/log\/wevia-sso-cache.log 2>&1","source":"crontab"},{"server":"S204","user":"root","schedule":"*\/10 * * * *","command":"timeout 60 python3 \/opt\/weval-l99\/wevia-sso-systemic.py >> \/var\/log\/wevia-sso-systemic.log 2>&1","source":"crontab"},{"server":"S204","user":"root","schedule":"*\/15 * * * *","command":"php \/opt\/weval-l99\/wevia-nonreg-agent.php >> \/var\/log\/wevia-nonreg-agent.log 2>&1","source":"crontab"},{"server":"S204","user":"root","schedule":"*\/15 * * * *","command":"timeout 60 python3 \/opt\/weval-l99\/wevia-l99-autofix.py >> \/var\/log\/wevia-l99-autofix.log 2>&1","source":"crontab"},{"server":"S204","user":"root","schedule":"*\/2 * * * *","command":"\/opt\/wevia-brain\/blade-poll-gguf.sh","source":"crontab"},{"server":"S204","user":"root","schedule":"*\/2 * * * *","command":"bash \/opt\/weval-l99\/wevia-blade-cleaner.sh >> \/var\/log\/wevia-blade-cleaner.log 2>&1","source":"crontab"},{"server":"S204","user":"root","schedule":"*\/2 * * * *","command":"pgrep php-fpm > \/dev\/null || systemctl restart php8.5-fpm","source":"crontab"},{"server":"S204","user":"root","schedule":"*\/3 * * * *","command":"php \/var\/www\/html\/api\/weval-watchdog.php >> \/var\/log\/weval-watchdog.log 2>&1","source":"crontab"},{"server":"S204","user":"root","schedule":"*\/30 * * * *","command":"cd \/opt\/weval-l99 && python3 l99-purge-scan.sh >> \/var\/log\/l99.log 2>&1","source":"crontab"},{"server":"S204","user":"root","schedule":"*\/30 * * * *","command":"php \/var\/www\/html\/api\/architecture-autonomous.php > \/dev\/null 2>&1","source":"crontab"},{"server":"S204","user":"root","schedule":"*\/30 * * * *","command":"php \/var\/www\/html\/api\/architecture-scanner.php > \/dev\/null 2>&1","source":"crontab"},{"server":"S204","user":"root","schedule":"*\/30 * * * *","command":"php \/var\/www\/weval\/wevia-ia\/wevia-dream-cron.php >> \/var\/log\/wevia-dream.log 2>&1","source":"crontab"},{"server":"S204","user":"root","schedule":"*\/30 * * * *","command":"python3 \/opt\/weval-l99\/disk-guardian.py scan >> \/var\/log\/disk-guardian.log 2>&1","source":"crontab"},{"server":"S204","user":"root","schedule":"*\/30 * * * *","command":"python3 \/opt\/weval-l99\/l99-auth-infra.py > \/dev\/null 2>&1","source":"crontab"},{"server":"S204","user":"root","schedule":"*\/30 * * * *","command":"timeout 30 python3 \/opt\/weval-l99\/ux-agent.py >> \/var\/log\/ux-agent.log 2>&1","source":"crontab"},{"server":"S204","user":"root","schedule":"*\/5 * * * *","command":"\/opt\/wevia-brain\/proactive-monitor.sh","source":"crontab"},{"server":"S204","user":"root","schedule":"*\/5 * * * *","command":"bash \/opt\/weval-l99\/wevia-selfmanage.sh >> \/var\/log\/wevia-selfmanage.log 2>&1","source":"crontab"},{"server":"S204","user":"root","schedule":"*\/5 * * * *","command":"php \/var\/www\/html\/api\/mirofish-ceo-cron.php > \/dev\/null 2>&1","source":"crontab"},{"server":"S204","user":"root","schedule":"*\/5 * * * *","command":"php \/var\/www\/html\/api\/wevia-auth-agent.php > \/dev\/null 2>&1","source":"crontab"},{"server":"S204","user":"root","schedule":"*\/5 * * * *","command":"php \/var\/www\/html\/api\/wevia-autonomy-controller.php >> \/var\/log\/wevia-autonomy.log 2>&1","source":"crontab"},{"server":"S204","user":"root","schedule":"*\/5 * * * *","command":"python3 \/opt\/weval-l99\/wevia-antiregression.py >> \/var\/log\/wevia-antiregression.log 2>&1","source":"crontab"},{"server":"S204","user":"root","schedule":"0 *\/12 * * *","command":"bash \/opt\/weval-l99\/wevia-self-doc.sh","source":"crontab"},{"server":"S204","user":"root","schedule":"0 *\/2 * * *","command":"timeout 900 python3 \/opt\/weval-l99\/wevia-visual-batch.py >> \/var\/log\/wevia-visual-batch.log 2>&1","source":"crontab"},{"server":"S204","user":"root","schedule":"0 *\/3 * * *","command":"python3 \/opt\/weval-l99\/wevia-visual-analysis.py >> \/var\/log\/wevia-visual-analysis.log 2>&1","source":"crontab"},{"server":"S204","user":"root","schedule":"0 *\/3 * * *","command":"timeout 300 python3 \/opt\/weval-l99\/wevia-control-tower.py >> \/var\/log\/wevia-control-tower.log 2>&1","source":"crontab"},{"server":"S204","user":"root","schedule":"0 *\/4 * * *","command":"php \/var\/www\/html\/api\/wevia-quality-framework.php > \/dev\/null 2>&1","source":"crontab"},{"server":"S204","user":"root","schedule":"0 *\/4 * * *","command":"timeout 300 python3 \/opt\/weval-l99\/l99-mega-scanner.py > \/var\/log\/l99-mega-scan.log 2>&1","source":"crontab"},{"server":"S204","user":"root","schedule":"0 *\/4 * * *","command":"timeout 300 python3 \/opt\/weval-l99\/wevia-gap-filler.py >> \/var\/log\/wevia-gap-filler.log 2>&1","source":"crontab"},{"server":"S204","user":"root","schedule":"0 *\/6 * * *","command":"cd \/opt\/weval-l99 && timeout 120 python3 l99-ux-agent.py > \/var\/log\/l99-ux.log 2>&1","source":"crontab"},{"server":"S204","user":"root","schedule":"0 *\/6 * * *","command":"cd \/opt\/weval-nonreg && timeout 120 python3 full-nonreg-serverside.py > \/var\/log\/full-nonreg.log 2>&1","source":"crontab"},{"server":"S204","user":"root","schedule":"0 *\/6 * * *","command":"php \/opt\/weval-l99\/rnd-pipeline.php >> \/var\/log\/wevia-rnd-pipeline.log 2>&1","source":"crontab"},{"server":"S204","user":"root","schedule":"0 *\/6 * * *","command":"php \/var\/www\/html\/api\/auto-key-renew.php >> \/var\/log\/key-renew.log 2>&1","source":"crontab"},{"server":"S204","user":"root","schedule":"0 *\/6 * * *","command":"sudo python3 \/opt\/weval-security\/key-sync.py >> \/var\/log\/security-sync.log 2>&1","source":"crontab"},{"server":"S204","user":"root","schedule":"0 *\/6 * * *","command":"timeout 900 python3 \/opt\/weval-l99\/l99-deep-scan.py >> \/var\/log\/l99-deep-scan.log 2>&1","source":"crontab"},{"server":"S204","user":"root","schedule":"0 1 * * *","command":"python3 \/opt\/ethica-enrich-v4.py 300 >> \/var\/log\/ethica-enrich-v4.log 2>&1","source":"crontab"},{"server":"S204","user":"root","schedule":"0 10 * * *","command":"python3 \/opt\/ethica-enrich-searxng.py 200 >> \/var\/log\/ethica-enrich-searxng.log 2>&1","source":"crontab"},{"server":"S204","user":"root","schedule":"0 11,23 * * *","command":"python3 \/opt\/ethica-richscraper.py 500 >> \/var\/log\/ethica-richscraper.log 2>&1","source":"crontab"},{"server":"S204","user":"root","schedule":"0 2 * * 0","command":"python3 \/opt\/tabibi-scraper.py >> \/var\/log\/tabibi-scraper.log 2>&1","source":"crontab"},{"server":"S204","user":"root","schedule":"0 3 * * *","command":"\/opt\/deer-flow\/thread-cleanup.sh","source":"crontab"},{"server":"S204","user":"root","schedule":"0 3 * * *","command":"sudo -u www-data python3 -B \/opt\/weval-l99\/l99-playwright-visual.py > \/tmp\/pw_night.log 2>&1 && sudo -u www-data python3 -B \/opt\/weval-l99\/l99-fullscan.py > \/tmp\/fs_night.log 2>&1 && sudo -u www-data python3 -B \/opt\/weval-nonreg\/full-nonreg-serverside.py > \/tmp\/nr_night.log 2>&1 && python3 \/opt\/weval-l99\/l99-state-updater.py > \/tmp\/l99_night.log 2>&1 # l99-full-night","source":"crontab"},{"server":"S204","user":"root","schedule":"0 3 * * 0","command":"sudo python3 \/opt\/weval-security\/secret-scanner.py","source":"crontab"},{"server":"S204","user":"root","schedule":"0 3,12,20 * * *","command":"python3 \/opt\/ethica-cron-scraper.py >> \/var\/log\/ethica-cron-scraper.log 2>&1","source":"crontab"},{"server":"S204","user":"root","schedule":"0 6 * * *","command":"bash \/opt\/weval-l99\/wevia-daily-report.sh","source":"crontab"},{"server":"S204","user":"root","schedule":"0 9 * * *","command":"curl -sf https:\/\/127.0.0.1\/api\/wevia-enterprise-fleet.php?action=run_standup -k -H Host:weval-consulting.com > \/dev\/null 2>&1","source":"crontab"},{"server":"S204","user":"root","schedule":"15,45 * * * *","command":"timeout 300 python3 \/opt\/weval-l99\/wevia-agents-pack.py >> \/var\/log\/wevia-agents-pack.log 2>&1","source":"crontab"},{"server":"S204","user":"root","schedule":"30 *\/2 * * *","command":"timeout 300 python3 \/opt\/weval-l99\/wevia-systematic.py >> \/var\/log\/wevia-systematic.log 2>&1","source":"crontab"},{"server":"S204","user":"root","schedule":"30 *\/4 * * *","command":"timeout 300 python3 \/opt\/weval-l99\/wevia-register-agent.py >> \/var\/log\/wevia-register.log 2>&1","source":"crontab"},{"server":"S204","user":"www-data","schedule":"*\/15 * * * *","command":"php \/opt\/weval-l99\/wevialife-sync.php >> \/tmp\/wl.log 2>&1","source":"crontab"},{"server":"S204","user":"www-data","schedule":"0 4,10,16,22 * * *","command":"curl -s http:\/\/127.0.0.1\/api\/ethica-ma-boost.php?t=ETHICA_API_2026_SECURE\\&batch=300 > \/dev\/null 2>&1 # ma-boost","source":"crontab"},{"server":"S204","user":"www-data","schedule":"*\/2 * * * *","command":"pgrep php-fpm > \/dev\/null || systemctl restart php8.5-fpm","source":"crontab"},{"server":"S204","user":"root","schedule":"0 *\/12 * * *","command":"test -x \/usr\/bin\/certbot -a \\! -d \/run\/systemd\/system && perl -e 'sleep int(rand(43200))' && certbot -q renew --no-random-sleep-on-renew","source":"certbot"},{"server":"S204","user":"www-data","schedule":"0 *\/6 * * *","command":"curl -s http:\/\/localhost\/api\/crm-api.php?action=sequence_execute -H Host:weval-consulting.com > \/dev\/null 2>&1","source":"crm-sequences"},{"server":"S204","user":"root","schedule":"0 5 * * *","command":"\/usr\/bin\/python3 \/opt\/ethica-enrich-v4.py all >> \/var\/log\/ethica-enrich-v4.log 2>&1","source":"ethica-enrich"},{"server":"S204","user":"root","schedule":"30 *\/6 * * *","command":"\/usr\/bin\/python3 \/opt\/ethica-richscraper.py all >> \/var\/log\/ethica-richscraper.log 2>&1","source":"ethica-richscraper"},{"server":"S204","user":"root","schedule":"0 3 * * *","command":"\/usr\/bin\/python3 \/opt\/ethica-cron-scraper.py all >> \/var\/log\/ethica-scraper.log 2>&1","source":"ethica-scraper"},{"server":"S204","user":"root","schedule":"0 *\/6 * * *","command":"\/usr\/bin\/python3 \/opt\/ethica-cron-scraper.py enrich >> \/var\/log\/ethica-scraper.log 2>&1","source":"ethica-scraper"},{"server":"S204","user":"root","schedule":"0 10 * * *","command":"\/usr\/bin\/python3 \/opt\/ethica-enrich-searxng.py 200 >> \/var\/log\/ethica-enrich-searxng.log 2>&1","source":"ethica-searxng"},{"server":"S204","user":"www-data","schedule":"0 4 * * *","command":"\/usr\/bin\/php \/var\/www\/ethica\/scripts\/ethica-validator.php >> \/var\/log\/ethica-validator.log 2>&1","source":"ethica-validator"},{"server":"S204","user":"root","schedule":"*\/1 * * * *","command":"bash \/tmp\/go.sh > \/tmp\/mmdc.log 2>&1","source":"fixmmdc"},{"server":"S204","user":"root","schedule":"0 9 * * *","command":"\/opt\/wevads\/vault\/check-pat-expiry.sh > \/dev\/null 2>&1","source":"github-pat-reminder"},{"server":"S204","user":"root","schedule":"*\/30 * * * *","command":"python3 \/opt\/weval-l99\/guardian-wire.py >> \/var\/log\/guardian-wire.log 2>&1","source":"guardian-wire"},{"server":"S204","user":"www-data","schedule":"0 *\/6 * * *","command":"cd \/opt\/weval-l99 && python3 l99-ai-scanner.py >> \/var\/log\/l99-ai-scan.log 2>&1","source":"l99-ai-scanner"},{"server":"S204","user":"www-data","schedule":"2,17,32,47 * * * *","command":"python3 \/opt\/weval-l99\/l99-autofix-infra.py >> \/var\/log\/l99-autofix.log 2>&1","source":"l99-autofix"},{"server":"S204","user":"www-data","schedule":"0 *\/6 * * *","command":"cd \/opt\/weval-l99 && python3 l99-enterprise-check.py >> \/var\/log\/l99-enterprise.log 2>&1","source":"l99-enterprise"},{"server":"S204","user":"www-data","schedule":"30 *\/6 * * *","command":"cd \/opt\/weval-l99 && python3 enterprise-model-sync.py >> \/var\/log\/enterprise-sync.log 2>&1","source":"l99-enterprise"},{"server":"S204","user":"root","schedule":"*\/15 * * * *","command":"cd \/opt\/weval-l99 && python3 l99-paperclip-wire.py >> \/var\/log\/l99-paperclip.log 2>&1","source":"l99-paperclip"},{"server":"S204","user":"root","schedule":"0 6 * * *","command":"\/opt\/nonreg-daily.sh","source":"nonreg-daily"},{"server":"S204","user":"root","schedule":"0 3 * * 0","command":"\/opt\/wevads\/nuclei-scan.sh > \/dev\/null 2>&1","source":"nuclei-weekly"},{"server":"S204","user":"root","schedule":"30 4 * * *","command":"python3 \/opt\/weval-l99\/oss-master-pipeline.py >> \/var\/log\/oss-pipeline.log 2>&1","source":"oss-pipeline"},{"server":"S204","user":"www-data","schedule":"0 4 * * *","command":"curl -sk https:\/\/127.0.0.1\/api\/oss-discovery-api.php?action=scan -H Host:weval-consulting.com > \/dev\/null 2>&1","source":"oss-scan"},{"server":"S204","user":"root","schedule":"*\/3 * * * *","command":"\/opt\/paperclip-weval\/keepalive-sovereign.sh","source":"paperclip-sovereign"},{"server":"S204","user":"root","schedule":"09,39 * * * *","command":"[ -x \/usr\/lib\/php\/sessionclean ] && if [ ! -d \/run\/systemd\/system ]; then \/usr\/lib\/php\/sessionclean; fi","source":"php"},{"server":"S204","user":"root","schedule":"*\/30 * * * *","command":"\/opt\/php-cleanup.sh","source":"php-cleanup"},{"server":"S204","user":"root","schedule":"0 *\/6 * * *","command":"cd \/opt\/weval-l99 && python3 qdrant-skill-sync.py >> \/var\/log\/qdrant-sync.log 2>&1","source":"qdrant-sync"},{"server":"S204","user":"root","schedule":"0 2 * * 0","command":"\/usr\/bin\/python3 \/opt\/tabibi-scraper.py >> \/var\/log\/tabibi-scraper.log 2>&1","source":"tabibi-scraper"},{"server":"S204","user":"root","schedule":"0 *\/4 * * *","command":"bash \/opt\/weval-l99\/tools\/vault-daily.sh","source":"vault-daily"},{"server":"S204","user":"root","schedule":"0 5 * * *","command":"python3 \/opt\/weval-l99\/vault-embed.py","source":"vault-daily"},{"server":"S204","user":"root","schedule":"0 *\/2 * * *","command":"\/opt\/wevads-auto-ops-cron.sh","source":"wevads-auto-ops"},{"server":"S204","user":"www-data","schedule":"0 *\/6 * * *","command":"curl -sk https:\/\/127.0.0.1\/api\/wevia-agent-evolution.php?action=propose > \/dev\/null 2>&1","source":"weval-agent-evolution"},{"server":"S204","user":"root","schedule":"0 *\/12 * * *","command":"python3 \/opt\/weval-l99\/agent-factory.py >> \/var\/log\/agent-factory.log 2>&1","source":"weval-agent-factory"},{"server":"S204","user":"root","schedule":"0 *\/2 * * *","command":"python3 \/opt\/weval-l99\/agent-scanner.py >> \/var\/log\/agent-scanner.log 2>&1","source":"weval-agent-scanner"},{"server":"S204","user":"root","schedule":"30 *\/6 * * *","command":"python3 \/var\/www\/html\/api\/ai-gap-discovery.py >> \/var\/log\/ai-gap.log 2>&1","source":"weval-ai-gap"},{"server":"S204","user":"root","schedule":"45 *\/6 * * *","command":"python3 \/var\/www\/html\/api\/ai-improvement-engine.py >> \/var\/log\/ai-improve.log 2>&1","source":"weval-ai-improve"},{"server":"S204","user":"www-data","schedule":"*\/30 * * * *","command":"php \/var\/www\/html\/api\/architecture-scanner.php > \/var\/www\/html\/api\/architecture-scan.json 2>\/dev\/null","source":"weval-archi-scanner"},{"server":"S204","user":"www-data","schedule":"0 *\/2 * * *","command":"cd \/opt\/weval-l99 && python3 auto-benchmark.py >> \/var\/log\/auto-bench.log 2>&1","source":"weval-auto-benchmark"},{"server":"S204","user":"www-data","schedule":"*\/10 * * * *","command":"curl -sk https:\/\/localhost\/api\/wevia-master-autoheal.php -o \/dev\/null","source":"weval-autoheal"},{"server":"S204","user":"root","schedule":"*\/30 * * * *","command":"curl -s https:\/\/weval-consulting.com\/api\/wevia-autowire-agent.php > \/var\/log\/autowire-result.json 2>\/dev\/null","source":"weval-autowire-agent"},{"server":"S204","user":"root","schedule":"0 *\/6 * * *","command":"php \/var\/www\/html\/api\/ai-benchmark-live.php > \/var\/www\/html\/api\/ai-benchmark-live-cache.json 2>\/dev\/null","source":"weval-benchmark-refresh"},{"server":"S204","user":"root","schedule":"0 *\/4 * * *","command":"python3 \/opt\/weval-l99\/wevia-cortex.py >> \/var\/log\/wevia-cortex.log 2>&1","source":"weval-cortex"},{"server":"S204","user":"www-data","schedule":"0 8 * * *","command":"curl -sk \"https:\/\/127.0.0.1\/api\/wevia-daily-standup.php?action=daily&squad=infra\" > \/dev\/null 2>&1","source":"weval-daily-standup"},{"server":"S204","user":"www-data","schedule":"0 14 * * *","command":"curl -sk \"https:\/\/127.0.0.1\/api\/wevia-daily-standup.php?action=daily&squad=infra\" > \/dev\/null 2>&1","source":"weval-daily-standup"},{"server":"S204","user":"www-data","schedule":"30 8 * * *","command":"curl -sk \"https:\/\/127.0.0.1\/api\/wevia-daily-standup.php?action=daily&squad=innovation\" > \/dev\/null 2>&1","source":"weval-daily-standup"},{"server":"S204","user":"www-data","schedule":"30 14 * * *","command":"curl -sk \"https:\/\/127.0.0.1\/api\/wevia-daily-standup.php?action=daily&squad=innovation\" > \/dev\/null 2>&1","source":"weval-daily-standup"},{"server":"S204","user":"www-data","schedule":"0 9 * * 1","command":"curl -sk \"https:\/\/127.0.0.1\/api\/wevia-daily-standup.php?action=weekly\" > \/dev\/null 2>&1","source":"weval-daily-standup"},{"server":"S204","user":"root","schedule":"30 *\/6 * * *","command":"python3 \/opt\/weval-l99\/enterprise-model-sync.py >> \/var\/log\/enterprise-sync.log 2>&1","source":"weval-enterprise-sync"},{"server":"S204","user":"www-data","schedule":"0 3 * * 0","command":"python3 \/opt\/weval-l99\/test-enterprise-full.py >> \/tmp\/em-full-weekly.log 2>&1","source":"weval-enterprise-test"},{"server":"S204","user":"root","schedule":"0 *\/6 * * *","command":"python3 \/opt\/weval-l99\/gap-detector.py >> \/var\/log\/gap-detector.log 2>&1","source":"weval-gap-detector"},{"server":"S204","user":"root","schedule":"*\/5 * * * *","command":"\/usr\/bin\/python3 \/opt\/weval-guardian\/guardian.py > \/dev\/null 2>&1","source":"weval-guardian"},{"server":"S204","user":"root","schedule":"*\/5 * * * *","command":"\/opt\/weval-l99\/guardian-v2.sh","source":"weval-guardian-v2"},{"server":"S204","user":"root","schedule":"*\/3 * * * *","command":"\/opt\/weval-l99\/guardian-v3.sh","source":"weval-guardian-v3"},{"server":"S204","user":"root","schedule":"*\/30 * * * *","command":"python3 \/opt\/weval-l99\/health-monitor.py 2>&1","source":"weval-health"},{"server":"S204","user":"root","schedule":"0 *\/8 * * *","command":"python3 \/opt\/weval-l99\/l99-dark-test.py >> \/var\/log\/l99-dark.log 2>&1","source":"weval-l99-dark"},{"server":"S204","user":"root","schedule":"*\/30 * * * *","command":"python3 \/opt\/weval-l99\/l99-functional-test.py >> \/var\/log\/l99-functional.log 2>&1","source":"weval-l99-functional"},{"server":"S204","user":"root","schedule":"0 *\/6 * * *","command":"python3 \/opt\/weval-l99\/l99-security-scan.py >> \/var\/log\/l99-security.log 2>&1","source":"weval-l99-security"},{"server":"S204","user":"root","schedule":"0 *\/4 * * *","command":"python3 \/opt\/weval-l99\/l99-visual-test.py >> \/var\/log\/l99-visual.log 2>&1","source":"weval-l99-visual"},{"server":"S204","user":"www-data","schedule":"0 9 * * *","command":"curl -sk https:\/\/127.0.0.1\/api\/wevia-meeting.php?action=daily > \/dev\/null 2>&1","source":"weval-meeting-daily"},{"server":"S204","user":"www-data","schedule":"0 14 * * *","command":"curl -sk https:\/\/127.0.0.1\/api\/wevia-meeting.php?action=daily > \/dev\/null 2>&1","source":"weval-meeting-daily"},{"server":"S204","user":"root","schedule":"30 *\/6 * * *","command":"\/usr\/bin\/python3 \/opt\/weval-l99\/meeting-rooms-populator.py > \/tmp\/meeting-populator.log 2>&1","source":"weval-meeting-populator"},{"server":"S204","user":"www-data","schedule":"0 16 * * 5","command":"curl -sk https:\/\/127.0.0.1\/api\/wevia-meeting.php?action=weekly > \/dev\/null 2>&1","source":"weval-meeting-strategy"},{"server":"S204","user":"www-data","schedule":"0 10 * * 1","command":"curl -sk https:\/\/127.0.0.1\/api\/wevia-meeting.php?action=weekly > \/dev\/null 2>&1","source":"weval-meeting-weekly"},{"server":"S204","user":"root","schedule":"0 *\/8 * * *","command":"python3 \/opt\/weval-l99\/oss-cache-refresh.py >> \/var\/log\/oss-cache.log 2>&1","source":"weval-oss-cache"},{"server":"S204","user":"www-data","schedule":"*\/120 * * * *","command":"python3 \/opt\/weval-l99\/oss-discovery.py >> \/var\/log\/oss-discovery.log 2>&1","source":"weval-oss-discovery"},{"server":"S204","user":"www-data","schedule":"5 *\/4 * * *","command":"python3 \/opt\/weval-l99\/oss-paperclip-chain.py >> \/var\/log\/oss-paperclip.log 2>&1","source":"weval-oss-paperclip-chain"},{"server":"S204","user":"root","schedule":"30 4 * * *","command":"python3 \/opt\/weval-l99\/oss-master-pipeline.py >> \/tmp\/oss-pipeline.log 2>&1","source":"weval-oss-pipeline"},{"server":"S204","user":"www-data","schedule":"*\/15 * * * *","command":"python3 \/opt\/weval-l99\/paperclip-sync.py >> \/var\/log\/paperclip-sync.log 2>&1","source":"weval-paperclip-sync"},{"server":"S204","user":"root","schedule":"*\/5 * * * *","command":"\/opt\/weval-l99\/proactive-monitor.sh","source":"weval-proactive"},{"server":"S204","user":"root","schedule":"0 *\/2 * * *","command":"python3 \/opt\/weval-l99\/registry-master.py >> \/var\/log\/registry.log 2>&1","source":"weval-registry"},{"server":"S204","user":"root","schedule":"*\/10 * * * *","command":"curl -sk https:\/\/weval-consulting.com\/api\/wevia-security-fortress.php > \/var\/log\/security-fortress.json 2>\/dev\/null","source":"weval-security-fortress"},{"server":"S204","user":"www-data","schedule":"0 6 * * *","command":"curl -sk https:\/\/www.google.com\/ping?sitemap=https:\/\/weval-consulting.com\/sitemap.xml > \/dev\/null && curl -sk https:\/\/www.bing.com\/ping?sitemap=https:\/\/weval-consulting.com\/sitemap.xml > \/dev\/null","source":"weval-seo-ping"},{"server":"S204","user":"root","schedule":"0 *\/4 * * *","command":"python3 \/opt\/weval-l99\/qdrant-mini-sync.py >> \/var\/log\/qdrant-sync.log 2>&1","source":"weval-skill-sync"},{"server":"S204","user":"root","schedule":"0 4 * * 0","command":"trivy image --severity HIGH,CRITICAL --quiet portainer\/portainer-ce:lts >> \/var\/log\/trivy-scan.log 2>&1","source":"weval-trivy-weekly"},{"server":"S204","user":"root","schedule":"*\/30 * * * *","command":"\/usr\/bin\/python3 \/opt\/weval-ux\/ux-agent.py > \/tmp\/ux-agent.log 2>&1","source":"weval-ux-agent"},{"server":"S204","user":"root","schedule":"15 *\/4 * * *","command":"python3 \/opt\/weval-l99\/wiki-mega-scan.py >> \/var\/log\/wiki-scan.log 2>&1","source":"weval-wiki-scan"},{"server":"S204","user":"root","schedule":"0 *\/6 * * *","command":"\/opt\/weval-l99\/wire-integrity.sh","source":"weval-wire-integrity"},{"server":"S204","user":"www-data","schedule":"*\/5 * * * *","command":"curl -sk https:\/\/127.0.0.1\/api\/wevia-auto-heal.php -H Host:weval-consulting.com -o \/tmp\/auto-heal.log 2>\/dev\/null","source":"wevia-auto-heal"},{"server":"S204","user":"root","schedule":"*\/30 * * * *","command":"python3 \/opt\/wevia-auto.py >> \/var\/log\/wevia-autonomous.log 2>&1","source":"wevia-autonomous"},{"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":136,"total_services":20,"total_docker":18}} \ No newline at end of file diff --git a/api/architecture-index.json b/api/architecture-index.json index 0dd0a6f21..830d5d385 100644 --- a/api/architecture-index.json +++ b/api/architecture-index.json @@ -1,5 +1,5 @@ { - "generated": "2026-04-13 18:00:02", + "generated": "2026-04-13 18:30:01", "version": "1.0", "servers": [ { @@ -10,7 +10,7 @@ "ssh": 49222, "disk_pct": 65, "disk_avail": "52G", - "uptime": "up 21 hours, 12 minutes", + "uptime": "up 21 hours, 42 minutes", "nginx": "active", "php_fpm": "active", "php_version": "8.5.3" @@ -36,82 +36,82 @@ "docker": [ { "name": "gitea", - "status": "Up 21 hours", + "status": "Up 22 hours", "ports": "" }, { "name": "loki", - "status": "Up 21 hours", + "status": "Up 22 hours", "ports": "" }, { "name": "chatwoot-redis", - "status": "Up 21 hours", + "status": "Up 22 hours", "ports": "" }, { "name": "langfuse", - "status": "Up 15 hours", + "status": "Up 16 hours", "ports": "" }, { "name": "node-exporter", - "status": "Up 21 hours", + "status": "Up 22 hours", "ports": "" }, { "name": "prometheus", - "status": "Up 21 hours", + "status": "Up 22 hours", "ports": "" }, { "name": "twenty", - "status": "Up 21 hours", + "status": "Up 22 hours", "ports": "" }, { "name": "twenty-redis", - "status": "Up 21 hours", + "status": "Up 22 hours", "ports": "" }, { "name": "searxng", - "status": "Up 2 hours", + "status": "Up 3 hours", "ports": "" }, { "name": "plausible", - "status": "Up 18 hours", + "status": "Up 19 hours", "ports": "" }, { "name": "plausible-db", - "status": "Up 18 hours", + "status": "Up 19 hours", "ports": "" }, { "name": "plausible-events", - "status": "Up 18 hours", + "status": "Up 19 hours", "ports": "" }, { "name": "uptime-kuma", - "status": "Up 15 hours (healthy)", + "status": "Up 16 hours (healthy)", "ports": "" }, { "name": "mattermost", - "status": "Up 21 hours (healthy)", + "status": "Up 22 hours (healthy)", "ports": "" }, { "name": "vaultwarden", - "status": "Up 21 hours (healthy)", + "status": "Up 22 hours (healthy)", "ports": "" }, { "name": "qdrant", - "status": "Up 6 hours", + "status": "Up 7 hours", "ports": "" } ], @@ -285,7 +285,7 @@ "paperclip" ], "key_tables": { - "kb_learnings": 3910, + "kb_learnings": 3917, "kb_documents": 0, "ethica_medecins": 50004, "enterprise_agents": 0 @@ -479,15 +479,15 @@ ] }, "wiki": { - "total_entries": 3910, + "total_entries": 3917, "categories": [ { "category": "AUTO-FIX", - "cnt": "1826" + "cnt": "1832" }, { "category": "TOPOLOGY", - "cnt": "728" + "cnt": "729" }, { "category": "DISCOVERY", @@ -1596,6 +1596,30 @@ "optimizations": { "recent_commits": [], "auto_fixes": [ + { + "fact": "AUTONOMY 13Apr 18:30: 1 fixes. Restart ollama", + "created_at": "2026-04-13 20:30:03.018894" + }, + { + "fact": "AUTONOMY 13Apr 18:25: 1 fixes. Restart ollama", + "created_at": "2026-04-13 20:25:01.79685" + }, + { + "fact": "AUTONOMY 13Apr 18:20: 1 fixes. Restart ollama", + "created_at": "2026-04-13 20:20:02.563282" + }, + { + "fact": "AUTONOMY 13Apr 18:15: 1 fixes. Restart ollama", + "created_at": "2026-04-13 20:15:02.416364" + }, + { + "fact": "AUTONOMY 13Apr 18:10: 1 fixes. Restart ollama", + "created_at": "2026-04-13 20:10:02.645587" + }, + { + "fact": "AUTONOMY 13Apr 18:05: 1 fixes. Restart ollama", + "created_at": "2026-04-13 20:05:02.199338" + }, { "fact": "AUTONOMY 13Apr 18:00: 1 fixes. Restart ollama", "created_at": "2026-04-13 20:00:03.86957" @@ -1611,30 +1635,6 @@ { "fact": "AUTONOMY 13Apr 17:45: 1 fixes. Restart ollama", "created_at": "2026-04-13 19:45:01.958539" - }, - { - "fact": "AUTONOMY 13Apr 17:40: 1 fixes. Restart ollama", - "created_at": "2026-04-13 19:40:02.597115" - }, - { - "fact": "AUTONOMY 13Apr 17:35: 1 fixes. Restart ollama", - "created_at": "2026-04-13 19:35:01.78957" - }, - { - "fact": "AUTONOMY 13Apr 17:30: 1 fixes. Restart ollama", - "created_at": "2026-04-13 19:30:03.632832" - }, - { - "fact": "AUTONOMY 13Apr 17:25: 1 fixes. Restart ollama", - "created_at": "2026-04-13 19:25:01.62378" - }, - { - "fact": "AUTONOMY 13Apr 17:20: 1 fixes. Restart ollama", - "created_at": "2026-04-13 19:20:02.311944" - }, - { - "fact": "AUTONOMY 13Apr 17:15: 1 fixes. Restart ollama", - "created_at": "2026-04-13 19:15:01.76882" } ], "architecture_decisions": [ @@ -1814,7 +1814,7 @@ "fixes_log": [], "recommendations": [] }, - "scan_time_ms": 1606, + "scan_time_ms": 2392, "gaps": [], "score": 100, "automation": { diff --git a/api/architecture-scan.json b/api/architecture-scan.json index e69de29bb..830d5d385 100644 --- a/api/architecture-scan.json +++ b/api/architecture-scan.json @@ -0,0 +1,1825 @@ +{ + "generated": "2026-04-13 18:30:01", + "version": "1.0", + "servers": [ + { + "id": "S204", + "ip": "204.168.152.13", + "private": "10.1.0.2", + "role": "PRIMARY", + "ssh": 49222, + "disk_pct": 65, + "disk_avail": "52G", + "uptime": "up 21 hours, 42 minutes", + "nginx": "active", + "php_fpm": "active", + "php_version": "8.5.3" + }, + { + "id": "S95", + "ip": "95.216.167.89", + "private": "10.1.0.3", + "role": "WEVADS Arsenal", + "ssh": 22, + "disk_pct": 85, + "disk_avail": "23G", + "sentinel": 1 + }, + { + "id": "S151", + "ip": "151.80.235.110", + "private": null, + "role": "DR\/Tracking OVH", + "ssh": 22 + } + ], + "docker": [ + { + "name": "gitea", + "status": "Up 22 hours", + "ports": "" + }, + { + "name": "loki", + "status": "Up 22 hours", + "ports": "" + }, + { + "name": "chatwoot-redis", + "status": "Up 22 hours", + "ports": "" + }, + { + "name": "langfuse", + "status": "Up 16 hours", + "ports": "" + }, + { + "name": "node-exporter", + "status": "Up 22 hours", + "ports": "" + }, + { + "name": "prometheus", + "status": "Up 22 hours", + "ports": "" + }, + { + "name": "twenty", + "status": "Up 22 hours", + "ports": "" + }, + { + "name": "twenty-redis", + "status": "Up 22 hours", + "ports": "" + }, + { + "name": "searxng", + "status": "Up 3 hours", + "ports": "" + }, + { + "name": "plausible", + "status": "Up 19 hours", + "ports": "" + }, + { + "name": "plausible-db", + "status": "Up 19 hours", + "ports": "" + }, + { + "name": "plausible-events", + "status": "Up 19 hours", + "ports": "" + }, + { + "name": "uptime-kuma", + "status": "Up 16 hours (healthy)", + "ports": "" + }, + { + "name": "mattermost", + "status": "Up 22 hours (healthy)", + "ports": "" + }, + { + "name": "vaultwarden", + "status": "Up 22 hours (healthy)", + "ports": "" + }, + { + "name": "qdrant", + "status": "Up 7 hours", + "ports": "" + } + ], + "domains": [ + { + "file": "analytics.weval-consulting.com", + "server_names": [ + "analytics.weval-consulting.com" + ], + "ssl": true, + "php-session": false, + "php-session_paths": false, + "auth_complete": false + }, + { + "file": "code-weval", + "server_names": [ + "code.weval-consulting.com" + ], + "ssl": true, + "php-session": false, + "php-session_paths": false, + "auth_complete": false + }, + { + "file": "crm.weval-consulting.com", + "server_names": [ + "crm.weval-consulting.com" + ], + "ssl": true, + "php-session": false, + "php-session_paths": false, + "auth_complete": false + }, + { + "file": "deerflow.weval-consulting.com", + "server_names": [ + "deerflow.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": 168, + "s204_products": 88, + "s204_api_php": 421, + "s204_wevia_php": 15, + "s95_arsenal_html": 1377, + "s95_arsenal_api": 377 + }, + "auth": { + "system": "PHP Session Auth", + "authentik": "REMOVED", + "pass": 24, + "fail": 0 + }, + "databases": { + "s204": [ + "postgres", + "adx_system", + "wevia_db", + "twenty_db", + "mattermost_db", + "deerflow", + "nocodb", + "paperclip" + ], + "key_tables": { + "kb_learnings": 3917, + "kb_documents": 0, + "ethica_medecins": 50004, + "enterprise_agents": 0 + } + }, + "ollama": [], + "qdrant": [ + { + "name": "wevia_memory", + "vectors": 48 + }, + { + "name": "obsidian_vault", + "vectors": 46 + }, + { + "name": "weval_skills", + "vectors": 14380 + }, + { + "name": "wevia_learnings", + "vectors": 1736 + }, + { + "name": "wevia_kb", + "vectors": 386 + } + ], + "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": 2, + "s204_total": 2, + "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": 3917, + "categories": [ + { + "category": "AUTO-FIX", + "cnt": "1832" + }, + { + "category": "TOPOLOGY", + "cnt": "729" + }, + { + "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": 11435, + "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": 3665, + "router_lines": 6089, + "router_functions": 17, + "today_requests": 0, + "today_cost": 0, + "avg_latency_ms": 0, + "top_provider": "N\/A", + "providers_used": 0 + }, + "optimizations": { + "recent_commits": [], + "auto_fixes": [ + { + "fact": "AUTONOMY 13Apr 18:30: 1 fixes. Restart ollama", + "created_at": "2026-04-13 20:30:03.018894" + }, + { + "fact": "AUTONOMY 13Apr 18:25: 1 fixes. Restart ollama", + "created_at": "2026-04-13 20:25:01.79685" + }, + { + "fact": "AUTONOMY 13Apr 18:20: 1 fixes. Restart ollama", + "created_at": "2026-04-13 20:20:02.563282" + }, + { + "fact": "AUTONOMY 13Apr 18:15: 1 fixes. Restart ollama", + "created_at": "2026-04-13 20:15:02.416364" + }, + { + "fact": "AUTONOMY 13Apr 18:10: 1 fixes. Restart ollama", + "created_at": "2026-04-13 20:10:02.645587" + }, + { + "fact": "AUTONOMY 13Apr 18:05: 1 fixes. Restart ollama", + "created_at": "2026-04-13 20:05:02.199338" + }, + { + "fact": "AUTONOMY 13Apr 18:00: 1 fixes. Restart ollama", + "created_at": "2026-04-13 20:00:03.86957" + }, + { + "fact": "AUTONOMY 13Apr 17:55: 1 fixes. Restart ollama", + "created_at": "2026-04-13 19:55:02.198061" + }, + { + "fact": "AUTONOMY 13Apr 17:50: 1 fixes. Restart ollama", + "created_at": "2026-04-13 19:50:02.732057" + }, + { + "fact": "AUTONOMY 13Apr 17:45: 1 fixes. Restart ollama", + "created_at": "2026-04-13 19:45:01.958539" + } + ], + "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": 3665 + }, + { + "name": "RAG Ingest", + "status": "active", + "desc": "Cron *\/30 → Qdrant semantic indexing", + "freq": "*\/30" + }, + { + "name": "L99 Quality Gate", + "status": "active", + "desc": "253+ tests, 28 auth tests", + "freq": "*\/30" + }, + { + "name": "Blade Orchestrator", + "status": "active", + "desc": "GPU polling + model sync", + "freq": "*\/30" + }, + { + "name": "Infra Guardian", + "status": "active", + "desc": "Auto-restart nginx\/php\/docker", + "freq": "*\/5" + }, + { + "name": "Ethica Scraper Pipeline", + "status": "active", + "desc": "4 spiders, RichScraper, SearXNG", + "freq": "daily" + }, + { + "name": "WEVIA Dream", + "status": "active", + "desc": "Background learning + dataset enrichment", + "freq": "*\/30" + }, + { + "name": "Daily Brief", + "status": "active", + "desc": "Morning synthesis → Mattermost", + "freq": "daily 07h" + }, + { + "name": "Architecture Scanner", + "status": "active", + "desc": "This page — auto-scan + recommendations", + "freq": "*\/30" + } + ], + "agents_deployed": [ + { + "name": "Monitor Agent", + "role": "Watches all services, auto-restarts", + "status": "active" + }, + { + "name": "DevOps Agent", + "role": "Git sync, deployment, rollback", + "status": "active" + }, + { + "name": "Ethica Agent", + "role": "HCP scraping, validation, enrichment", + "status": "active" + }, + { + "name": "Security Agent", + "role": "Key rotation, secret scan, vulnerability check", + "status": "active" + }, + { + "name": "Blade Agent", + "role": "GPU orchestration, model management", + "status": "active" + }, + { + "name": "Dream Agent", + "role": "Background learning, dataset generation", + "status": "active" + }, + { + "name": "RAG Agent", + "role": "Knowledge ingestion, vector indexing", + "status": "active" + }, + { + "name": "Quality Agent", + "role": "L99 NonReg, regression detection", + "status": "active" + } + ] + }, + "mirofish": { + "status": "active", + "reports": 0, + "bridge": "\/api\/mirofish-bridge.php" + }, + "recommendations": { + "score": 100, + "total": 0, + "critical": 0, + "warning": 0, + "info": 0, + "opportunity": 0, + "auto_fixed": 0, + "fixes_log": [], + "recommendations": [] + }, + "scan_time_ms": 2392, + "gaps": [], + "score": 100, + "automation": { + "coverage": 100, + "steps": 30, + "total": 30 + } +} \ No newline at end of file diff --git a/api/architecture-topology.json b/api/architecture-topology.json index 5bf26d05e..8d31a73fa 100644 --- a/api/architecture-topology.json +++ b/api/architecture-topology.json @@ -1,5 +1,5 @@ { - "generated": "2026-04-13 18:00:02", + "generated": "2026-04-13 18:30:02", "nodes": [ { "id": "docker_gitea", @@ -1093,6 +1093,6 @@ "stats": { "nodes": 47, "edges": 22, - "scan_ms": 1133 + "scan_ms": 1072 } } \ No newline at end of file diff --git a/api/blade-tasks/heartbeat.json b/api/blade-tasks/heartbeat.json index 40d87a24a..4874579b9 100644 --- a/api/blade-tasks/heartbeat.json +++ b/api/blade-tasks/heartbeat.json @@ -1,8 +1,8 @@ { - "ts": "2026-04-13T18:29:47+00:00", + "ts": "2026-04-13T18:39:17+00:00", "hostname": "LAPTOP-VE75QUHF", - "cpu": "56%", - "ram": "91% (16GB)", + "cpu": "76%", + "ram": "88% (16GB)", "disk": "83% (464GB)", "uptime": "1d 2h", "user": "Yace", diff --git a/api/fpm-watchdog.php b/api/fpm-watchdog.php new file mode 100644 index 000000000..9c802f9cd --- /dev/null +++ b/api/fpm-watchdog.php @@ -0,0 +1,11 @@ +/dev/null") ?: "0"); +if ((int)$fpm < 2) { + shell_exec("killall -9 php-fpm 2>/dev/null; sleep 1"); + // Cannot restart systemd from www-data, but can signal + file_put_contents("/tmp/fpm-needs-restart", date("c")); + echo "FPM_DOWN:$fpm"; +} else { + echo "FPM_OK:$fpm"; +} diff --git a/api/l99-autofix-log.json b/api/l99-autofix-log.json index 15177a226..ce9a58e60 100644 --- a/api/l99-autofix-log.json +++ b/api/l99-autofix-log.json @@ -1,5 +1,5 @@ { - "timestamp": "2026-04-13T20:15:17.370289", + "timestamp": "2026-04-13T20:30:12.608256", "layers": { "DOCKER": { "n": "DOCKER", @@ -9,9 +9,9 @@ }, "CAPABILITIES": { "n": "CAPABILITIES", - "t": 1, - "p": 0, - "c": "ro" + "t": 10, + "p": 8, + "c": "cy" }, "CRONS": { "n": "CRONS", @@ -57,6 +57,6 @@ } }, "fixes": [], - "total": 188, - "pass": 177 + "total": 197, + "pass": 185 } \ No newline at end of file diff --git a/api/mirofish-ceo-cache.json b/api/mirofish-ceo-cache.json index d215c7319..48877f9b7 100644 --- a/api/mirofish-ceo-cache.json +++ b/api/mirofish-ceo-cache.json @@ -13,5 +13,5 @@ "Run simulation", "CEO insights" ], - "timestamp": "2026-04-13 18:30:01" + "timestamp": "2026-04-13 18:40:02" } \ No newline at end of file diff --git a/api/ux-agent-report.json b/api/ux-agent-report.json index f1b696550..a49e74eff 100644 --- a/api/ux-agent-report.json +++ b/api/ux-agent-report.json @@ -1,5 +1,5 @@ { - "timestamp": "2026-04-13T20:00:30", + "timestamp": "2026-04-13T20:30:09", "features": { "total": 36, "pass": 35 @@ -8,12 +8,12 @@ "aa": 0, "rm": 0, "ok": false, - "err": "Page.goto: Timeout 25000ms exceeded.\nCall log:\n - navigating to \"https://weval-consulting.com/wevia" + "err": "Page.evaluate: ReferenceError: AA is not defined\n at eval (eval at evaluate (:290:30), "answer","text"=>$_dr['text'],"engine"=>"Resolver/".$_dr['tool'],"intent"=>$_dr['tool']], JSON_UNESCAPED_UNICODE) . "\n\n"; + echo "data: [DONE]\n\n"; + exit; +} +$_ae_map_check = false; +$_msg_pre = mb_strtolower($message); +$ae_map_static = ['diagnostic','pipeline','value chain','warning','corrig','n8n','failure rate','workflow','vector','vecteur','wiki','kb','score 100','73/73','oss 73','fais un','teste-les','teste les','repondent','crons actif']; +$ae_map_static = array_merge($ae_map_static, ['git log','commit','router','engine','helper','creative','topology','doublon','conflit','charge','hub','crash','restart','loop','wire','fonctionnel','automated','steps','intents','site principal','route','coherent','coheren','publique','retourne','200','growth','combien','agents-archi','meeting','gouvernance','7/7','enterprise','model','departement','vault','gold','backup','checksum','critique','l99','state','metrique','brainstorm','etape','prochaine','stable','boucle','ports','service','dirty','nonreg','playwright','arena','deepseek','toolhub','master','scan','docker','provider','providers','cron','olama','qdrant','deerflow','paperclip','mattermost','plausible','crm','twenty','security','ssl','espace','nettoy','nettoie','libre','renouvel','expire','cle','temporaire','log ancien','ancien','degrad','renouvelle','api key','key','token','expir','renew','sambanova','groq key','cerebras key','gemini key','mistral key']); +foreach ($ae_map_static as $_kw) { + if (strpos($_msg_pre, $_kw) !== false) { $_ae_map_check = true; break; } +} +if (!$_ae_map_check) { $_sr = wevia_smart_route($message); } else { $_sr = null; } // RC40-gate +// DISABLED: ae_map priority +if($_sr && !empty($_sr["response"])) { header("Content-Type: text/event-stream"); echo "data: ".json_encode(["type"=>"answer","text"=>$_sr["response"],"engine"=>$_sr["engine"],"intent"=>$_sr["intent"]])."\n\n"; echo "data: [DONE]\n\n"; exit; } +$history = $input['history'] ?? []; +if (empty($message)) { emit('error', ['message' => 'empty']); exit; } + +function emit($type, $data) { + // Sanitize all string values + array_walk_recursive($data, function(&$v) { if(is_string($v)) $v = mb_convert_encoding($v, "UTF-8", "UTF-8"); }); + echo "data: " . json_encode(array_merge(['type' => $type], $data), JSON_UNESCAPED_UNICODE) . "\n\n"; + ob_flush(); flush(); +} + +// === STEP 1: INTENT DETECTION === +$intents = detectIntents($message); +// WEVIA Smart Router v4 — 32 patterns + + + + +// === WAVE 201 — AUTONOMOUS EXEC INTENTS === +if(preg_match('/\b(fix all|auto.?fix|repair|corrige tout|heal all)\b/i',$message)){header("Content-Type: text/event-stream");$r=shell_exec('/opt/weval-l99/tools/auto-fix-all.sh 2>&1');echo "data: ".json_encode(["type"=>"answer","text"=>$r,"engine"=>"Wave201/AutoFix","intent"=>"auto_fix"],JSON_UNESCAPED_UNICODE)."\n\n";echo "data: [DONE]\n\n";exit;} +if(preg_match('/\b(disk.?clean|nettoy|espace|free space|cleanup disk)\b/i',$message)){header("Content-Type: text/event-stream");$r=shell_exec('/opt/weval-l99/tools/disk-cleanup.sh 2>&1');echo "data: ".json_encode(["type"=>"answer","text"=>$r,"engine"=>"Wave201/DiskClean","intent"=>"disk_cleanup"],JSON_UNESCAPED_UNICODE)."\n\n";echo "data: [DONE]\n\n";exit;} +if(preg_match('/\b(git.?sync|commit.?push|synchronise.?git|push all)\b/i',$message)){header("Content-Type: text/event-stream");$r=shell_exec('/opt/weval-l99/tools/git-sync.sh 2>&1');echo "data: ".json_encode(["type"=>"answer","text"=>$r,"engine"=>"Wave201/GitSync","intent"=>"git_sync"],JSON_UNESCAPED_UNICODE)."\n\n";echo "data: [DONE]\n\n";exit;} +if(preg_match('/\b(multiagent|multi.?agent|scan complet|full scan|mobilise.*agent)\b/i',$message)){header("Content-Type: text/event-stream");$r=shell_exec('/opt/weval-l99/tools/multiagent-scan.sh 2>&1');echo "data: ".json_encode(["type"=>"answer","text"=>$r,"engine"=>"Wave201/MultiAgent","intent"=>"multiagent_scan"],JSON_UNESCAPED_UNICODE)."\n\n";echo "data: [DONE]\n\n";exit;} +if(preg_match('/\b(ollama.?restart|restart.?ollama|reload.?model)\b/i',$message)){header("Content-Type: text/event-stream");$r=shell_exec('systemctl restart ollama; sleep 3; curl -s http://127.0.0.1:11435/api/tags 2>/dev/null | head -c 100');echo "data: ".json_encode(["type"=>"answer","text"=>$r,"engine"=>"Wave201/OllamaRestart","intent"=>"ollama_restart"],JSON_UNESCAPED_UNICODE)."\n\n";echo "data: [DONE]\n\n";exit;} +if(preg_match('/\b(doctrine|instruction.?0|regle supreme)\b/i',$message)){header("Content-Type: text/event-stream");$r=file_get_contents('/opt/obsidian-vault/doctrines/000-doctrine-supreme.md');echo "data: ".json_encode(["type"=>"answer","text"=>$r,"engine"=>"Wave201/Vault","intent"=>"doctrine"],JSON_UNESCAPED_UNICODE)."\n\n";echo "data: [DONE]\n\n";exit;} +if(preg_match('/\\b(fpm.?restart|restart.?fpm|php.?restart)\\b/i',$message)){header("Content-Type: text/event-stream");echo "data: ".json_encode(["type"=>"answer","text"=>"FPM restart scheduled. Workers will restart in 2s.","engine"=>"Wave201/FPM","intent"=>"fpm_restart"])." + +";echo "data: [DONE] + +";flush();exec('nohup bash -c "sleep 2; killall -9 php-fpm8.5; sleep 1; systemctl start php8.5-fpm" &>/dev/null &');exit;} +// === END WAVE 201 === + +// === WAVE 200 — New Frontier Intents (13-avr-2026) === +if(preg_match('/\barena\b.*(status|option|list|model|combien)/i',$message)){header("Content-Type: text/event-stream");echo "data: ".json_encode(["type"=>"answer","text"=>"Arena: 409 options, 18 providers, 233 outils Dynamic Resolver. 0 EUR.","engine"=>"Wave200","intent"=>"wave200"],JSON_UNESCAPED_UNICODE)."\n\n";echo "data: [DONE]\n\n";exit;} +if(preg_match('/\bresolver\b.*(status|tool|combien|list)/i',$message)){header("Content-Type: text/event-stream");echo "data: ".json_encode(["type"=>"answer","text"=>"Dynamic Resolver v7.1: 233 outils. Sovereign FC + Auto-Wire daily 5AM.","engine"=>"Wave200","intent"=>"wave200"],JSON_UNESCAPED_UNICODE)."\n\n";echo "data: [DONE]\n\n";exit;} +if(preg_match('/\btrinity\b/i',$message)){header("Content-Type: text/event-stream");echo "data: ".json_encode(["type"=>"answer","text"=>"Trinity Large Preview: 400B MoE, #1 US open-source. Apache 2.0. FREE OpenRouter.","engine"=>"Wave200","intent"=>"wave200"],JSON_UNESCAPED_UNICODE)."\n\n";echo "data: [DONE]\n\n";exit;} +if(preg_match('/\bminimax\b/i',$message)){header("Content-Type: text/event-stream");echo "data: ".json_encode(["type"=>"answer","text"=>"MiniMax M2.7: Self-evolution, SWE-Pro 56%. Agentic AI. OpenRouter.","engine"=>"Wave200","intent"=>"wave200"],JSON_UNESCAPED_UNICODE)."\n\n";echo "data: [DONE]\n\n";exit;} +if(preg_match('/\bmimo\b/i',$message)){header("Content-Type: text/event-stream");echo "data: ".json_encode(["type"=>"answer","text"=>"MiMo V2 Omni: Multimodal Image+Video+Audio+Text. Xiaomi. OpenRouter.","engine"=>"Wave200","intent"=>"wave200"],JSON_UNESCAPED_UNICODE)."\n\n";echo "data: [DONE]\n\n";exit;} +if(preg_match('/\bblade\s*bridge\b/i',$message)){header("Content-Type: text/event-stream");echo "data: ".json_encode(["type"=>"answer","text"=>"Blade Tools Bridge: 233 outils via API. 6 actions. PowerShell.","engine"=>"Wave200","intent"=>"wave200"],JSON_UNESCAPED_UNICODE)."\n\n";echo "data: [DONE]\n\n";exit;} +if(preg_match('/\bauto[\-\s]?wire\b/i',$message)){header("Content-Type: text/event-stream");echo "data: ".json_encode(["type"=>"answer","text"=>"Auto-Wire: Cron daily 5AM. Self-learning tool registry.","engine"=>"Wave200","intent"=>"wave200"],JSON_UNESCAPED_UNICODE)."\n\n";echo "data: [DONE]\n\n";exit;} +if(preg_match('/\bsovereign[\-\s]?fc\b/i',$message)){header("Content-Type: text/event-stream");echo "data: ".json_encode(["type"=>"answer","text"=>"Sovereign FC: regex EXEC direct, miss log+LLM. 233 patterns.","engine"=>"Wave200","intent"=>"wave200"],JSON_UNESCAPED_UNICODE)."\n\n";echo "data: [DONE]\n\n";exit;} +if(preg_match('/\bmaestro\b/i',$message)){header("Content-Type: text/event-stream");echo "data: ".json_encode(["type"=>"answer","text"=>"Maestro: 32B Reasoning par Arcee AI. Chain-of-thought.","engine"=>"Wave200","intent"=>"wave200"],JSON_UNESCAPED_UNICODE)."\n\n";echo "data: [DONE]\n\n";exit;} +if(preg_match('/\bethica\s*(chatbot|bot|ia)\b/i',$message)){header("Content-Type: text/event-stream");echo "data: ".json_encode(["type"=>"answer","text"=>"Ethica Chatbot: pharma-only via weval-ia-fast.php. 131K HCPs. 8/8 PW.","engine"=>"Wave200","intent"=>"wave200"],JSON_UNESCAPED_UNICODE)."\n\n";echo "data: [DONE]\n\n";exit;} +if(preg_match('/\b(new|frontier|nouveau)\s*model/i',$message)){header("Content-Type: text/event-stream");echo "data: ".json_encode(["type"=>"answer","text"=>"8 New Frontier Models avr 2026: Trinity, MiniMax, MiMo, Maestro. OpenRouter.","engine"=>"Wave200","intent"=>"wave200"],JSON_UNESCAPED_UNICODE)."\n\n";echo "data: [DONE]\n\n";exit;} +if(preg_match('/\btool\s*(registry|registre|list)\b/i',$message)){header("Content-Type: text/event-stream");echo "data: ".json_encode(["type"=>"answer","text"=>"Tool Registry v7.1: 233 outils. Categories: infra, ai, models, business, ethica.","engine"=>"Wave200","intent"=>"wave200"],JSON_UNESCAPED_UNICODE)."\n\n";echo "data: [DONE]\n\n";exit;} +if(preg_match('/\bgrowth\s*agent\b/i',$message)){header("Content-Type: text/event-stream");echo "data: ".json_encode(["type"=>"answer","text"=>"Growth Agent: Lead gen, Pipeline, Outreach, Convert. Enterprise Model + Paperclip.","engine"=>"Wave200","intent"=>"wave200"],JSON_UNESCAPED_UNICODE)."\n\n";echo "data: [DONE]\n\n";exit;} +// === END WAVE 200 === +// ═══ WAVE 199: ACTION ENGINE BRIDGE ═══ +// Map detected intents to action engine routes for REAL execution +$ae_map = [ + 'docker' => 'docker_list', + 'container' => 'docker_list', + 'disk' => 'system_status', + 'espace' => 'system_status', + 'ram' => 'system_status', + 'git' => 'git_status', + 'commit' => 'git_status', + 'ollama' => 'ollama_models', + 'model' => 'ollama_models', + 'provider' => 'providers_health', + 'fournisseur' => 'providers_health', + 'cascade' => 'providers_health', + 'cron' => 'cron_list', + 'backup' => 'backup_gold', + 'gold' => 'backup_gold', + 'vault' => 'backup_gold', + 'deploy' => 'deploy', + 'push' => 'git_push', + 'securite' => 'security_scan', + 'security' => 'security_scan', + 'nuclei' => 'security_scan', + 'l99' => 'l99_status', + 'nonreg' => 'l99_status', + 'test_run' => 'test_run', + 'lance test' => 'test_run', + 'run test' => 'test_run', + 'nginx' => 'nginx_test', + 'ssl' => 'cf_ssl_status', + 'dns' => 'dns_lookup', + 'process' => 'process_list', + 'ethica' => 'ethica_stats', + 'hcp' => 'ethica_stats', + 'qdrant' => 'qdrant_status', + 'vector' => 'qdrant_status', + 's95' => 's95_status', + 'wevads' => 's95_status', + 'blade' => 'blade_status', + 'uptime' => 'uptime_status', + 'log' => 'logs_read', + 'n8n' => 'n8n_status', + 'index' => 'codebase_index', + 'codebase' => 'codebase_index', + 'review' => 'code_review', + 'refactor' => 'refactor', + 'rollback' => 'rollback', + 'rewind' => 'rewind', + 'diff' => 'diff_review', + 'cicd' => 'cicd_status', + 'lint' => 'lint_fix', + 'sandbox' => 'sandbox_exec', + 'dream' => 'auto_dream', + 'archive' => 'archive_scan', + 'image' => 'image_generate', + 'voice' => 'voice_command', + 'youtube' => 'youtube_analyze', + 'drive' => 'google_drive', + 'sheet' => 'google_sheets', + 'calendar' => 'google_calendar', + 'dispatch' => 'dispatch_task', + 'hook' => 'hooks_register', + 'audit' => 'diagnostic', + 'reconcil' => 'diagnostic', + 'violation' => 'security_scan', + 'doctrine' => 'diagnostic', + 'instruction' => 'diagnostic', + 'parallel' => 'dispatch_task', + 'multi-agent' => 'dispatch_task', + 'email' => 'ethica_stats', + 'hcp' => 'ethica_stats', + 'pharma' => 'ethica_stats', + 'port' => 'process_list', + 'processus' => 'process_list', + 'uptime' => 'uptime_status', + 'monitor' => 'uptime_status', + 'n8n' => 'n8n_status', + 'workflow' => 'n8n_status', + 'kb' => 'kb_search', + 'knowledge' => 'kb_search', + 'incident' => 'kb_search', + 'regle' => 'kb_search', + 'regression' => 'kb_search', + 'anti-regression' => 'kb_search', + 'cherche dans' => 'kb_search', + 'historique' => 'kb_search', + 'wiki' => 'kb_search', + 'page' => 'codebase_index', + 'fichier' => 'codebase_index', + 'combien' => 'diagnostic', + 'pdf' => 'diagnostic', + 'rapport' => 'diagnostic', + 'report' => 'diagnostic', + 'screenshot' => 'diagnostic', + 'capture' => 'diagnostic', + 'chattr' => 'security_scan', + 'protege' => 'security_scan', + 'immutable' => 'security_scan', + 'permission' => 'security_scan', + 'fichiers critiques' => 'security_scan', + 'cpu' => 'system_status', + 'ram' => 'system_status', + 'charge' => 'system_status', + 'load' => 'system_status', + 'memoire' => 'system_status', + 'site' => 'uptime_status', + 'repond' => 'uptime_status', + 'latence' => 'uptime_status', + 'response time' => 'uptime_status', + 'disponible' => 'uptime_status', + 'alive' => 'uptime_status', + 'spec' => 'diagnostic', + 'specification' => 'diagnostic', + 'document' => 'diagnostic', + 'on en est' => 'system_status', + 'tout tourne' => 'system_status', + 'tout bien' => 'system_status', + 'tout ok' => 'system_status', + 'bilan' => 'system_status', + 'vue ensemble' => 'system_status', + 'comment va' => 'system_status', + 'quoi de neuf' => 'system_status', + 'situation' => 'system_status', + 'overview' => 'system_status', + 'planifie' => 'diagnostic', + 'plan pour' => 'diagnostic', + 'roadmap' => 'diagnostic', + 'swot' => 'diagnostic', + 'analyse swot' => 'diagnostic', + 'business model' => 'diagnostic', + 'canvas' => 'diagnostic', + 'forecast' => 'diagnostic', + 'tendance' => 'diagnostic', + 'storytelling' => 'diagnostic', + 'raconte' => 'diagnostic', + 'avocat du diable' => 'diagnostic', + 'challenge' => 'diagnostic', + 'contrarian' => 'diagnostic', + 'socratique' => 'diagnostic', + 'print(' => 'sandbox_exec', + 'execute code' => 'sandbox_exec', + 'execute python' => 'sandbox_exec', + 'run python' => 'sandbox_exec', + 'lance python' => 'sandbox_exec', + 'hub' => 'codebase_index', + 'hubs' => 'codebase_index', + 'liste les' => 'codebase_index', + 'inventaire' => 'codebase_index', + 'catalogue' => 'codebase_index', + 'combien de page' => 'codebase_index', + 'wiki' => 'diagnostic', + 'vault' => 'backup_gold', + 'register' => 'codebase_index', + 'l99 saas' => 'diagnostic', + 'l99-saas' => 'diagnostic', + 'arena' => 'diagnostic', + 'webchat' => 'providers_health', + 'huggingchat' => 'providers_health', + 'deepseek web' => 'providers_health', + 'gratuit' => 'providers_health', + 'plus vite' => 'providers_health', + 'plus rapide' => 'providers_health', + 'rapidit' => 'providers_health', + 'latence' => 'providers_health', + 'deerflow' => 'diagnostic', + 'paperclip' => 'diagnostic', + 'agent deerflow' => 'diagnostic', + 'agent paperclip' => 'diagnostic', + 'red team' => 'diagnostic', + 'scaler' => 'diagnostic', + 'scale' => 'diagnostic', + 'croissance' => 'diagnostic', + '50 client' => 'diagnostic', + '100 client' => 'diagnostic', + 'monter en charge' => 'diagnostic', + 'reseau' => 'diagnostic', + 'network' => 'diagnostic', + 'vue d' => 'system_status', + 'stable' => 'system_status', + 'tout est' => 'system_status', + 'ca roule' => 'system_status', + 'listen' => 'process_list', + 'port ouvert' => 'process_list', + 'port occup' => 'process_list', + 'brainstorm' => 'diagnostic', + 'idee' => 'diagnostic', + 'innov' => 'diagnostic', + 'monetis' => 'diagnostic', + 'architecture' => 'diagnostic', + 'archi' => 'diagnostic', + 'score 100' => 'diagnostic', + 'coverage' => 'diagnostic', + 'automated' => 'diagnostic', + 'oss' => 'diagnostic', + 'discovery' => 'diagnostic', + 'meeting' => 'diagnostic', + 'room' => 'diagnostic', + 'gouvernance' => 'diagnostic', + 'permanent' => 'diagnostic', + 'gaps' => 'diagnostic', + 'bpmn' => 'diagnostic', + 's151' => 'diagnostic', + 'joignable' => 'diagnostic', + 'accessible' => 'diagnostic', + 'ping' => 'diagnostic', + '360' => 'diagnostic', + 'holistique' => 'diagnostic', + 'multi.*dimension' => 'diagnostic', + 'rapport' => 'diagnostic', + 'devis' => 'ethica_stats', + 'prospect' => 'ethica_stats', + 'specialit' => 'ethica_stats', + 'mattermost' => 'diagnostic', + 'slack' => 'diagnostic', + 'twenty' => 'diagnostic', + 'crm' => 'diagnostic', + 'langfuse' => 'diagnostic', + 'plausible' => 'diagnostic', + 'kuma' => 'diagnostic', + 'searxng' => 'diagnostic', + 'n8n' => 'diagnostic', + 'fais un diagnostic' => 'diagnostic', + 'diagnostic complet' => 'diagnostic', + 'teste-les' => 'providers_health', + 'teste les' => 'providers_health', + 'repondent' => 'providers_health', + 'pipeline' => 'ethica_stats', + 'crons actif' => 'diagnostic', + 'reconcilie' => 'diagnostic', + 'reconcilier' => 'diagnostic', + 'value chain' => 'diagnostic', + 'valuechain' => 'diagnostic', + 'checksum' => 'diagnostic', + 'score 100' => 'diagnostic', + '73/73' => 'diagnostic', + 'oss 73' => 'diagnostic', + 'vecteur' => 'diagnostic', + 'vector' => 'diagnostic', + 'failure rate' => 'diagnostic', + 'complet' => 'diagnostic', + 'pipeline' => 'diagnostic', + 'reconcil' => 'diagnostic', + 'chain' => 'diagnostic', + 'warning' => 'diagnostic', + 'corrig' => 'diagnostic', + 'api key' => 'diagnostic', + 'key' => 'diagnostic', + 'token' => 'diagnostic', + 'expir' => 'diagnostic', + 'renew' => 'diagnostic', + 'renouvell' => 'diagnostic', + 'cles' => 'diagnostic', + 'cle api' => 'diagnostic', + + 'vecteur' => 'diagnostic', + 'vector' => 'diagnostic', + 'wiki' => 'diagnostic', + 'kb' => 'diagnostic', + 'git log' => 'diagnostic', + 'commit' => 'diagnostic', + 'router' => 'diagnostic', + 'engine' => 'diagnostic', + 'helper' => 'diagnostic', + 'creative' => 'diagnostic', + 'topology' => 'diagnostic', + 'doublon' => 'diagnostic', + 'conflit' => 'diagnostic', + 'charge' => 'diagnostic', + 'hub' => 'diagnostic', + 'crash' => 'diagnostic', + 'restart' => 'diagnostic', + 'loop' => 'diagnostic', + 'wirr' => 'diagnostic', + 'wire' => 'diagnostic', + 'fonctionnel' => 'diagnostic', + 'automated' => 'diagnostic', + 'steps' => 'diagnostic', + 'intents' => 'diagnostic', + 'site principal' => 'diagnostic', + 'route' => 'diagnostic', + 'coherent' => 'diagnostic', + 'coheren' => 'diagnostic', + 'workflow' => 'diagnostic', + 'complet' => 'diagnostic', + 'disk docker' => 'diagnostic', + 'multiagent' => 'diagnostic', + 'multi-agent' => 'diagnostic', + 'multi agent' => 'diagnostic', + 'failure rate' => 'diagnostic', + 'complet' => 'diagnostic', + 'pipeline' => 'diagnostic', + 'reconcil' => 'diagnostic', + 'chain' => 'diagnostic', + 'warning' => 'diagnostic', + 'corrig' => 'diagnostic', + 'api key' => 'diagnostic', + 'key' => 'diagnostic', + 'token' => 'diagnostic', + 'expir' => 'diagnostic', + 'renew' => 'diagnostic', + 'renouvell' => 'diagnostic', + 'cles' => 'diagnostic', + 'cle api' => 'diagnostic', + + 'vecteur' => 'diagnostic', + 'vector' => 'diagnostic', + 'wiki' => 'diagnostic', + 'kb' => 'diagnostic', + 'git log' => 'diagnostic', + 'commit' => 'diagnostic', + 'router' => 'diagnostic', + 'engine' => 'diagnostic', + 'helper' => 'diagnostic', + 'creative' => 'diagnostic', + 'topology' => 'diagnostic', + 'doublon' => 'diagnostic', + 'conflit' => 'diagnostic', + 'charge' => 'diagnostic', + 'hub' => 'diagnostic', + 'crash' => 'diagnostic', + 'restart' => 'diagnostic', + 'loop' => 'diagnostic', + 'wirr' => 'diagnostic', + 'wire' => 'diagnostic', + 'fonctionnel' => 'diagnostic', + 'automated' => 'diagnostic', + 'steps' => 'diagnostic', + 'intents' => 'diagnostic', + 'site principal' => 'diagnostic', + 'route' => 'diagnostic', + 'coherent' => 'diagnostic', + 'coheren' => 'diagnostic', + 'failure' => 'diagnostic', + 'teste le' => 'providers_health', + 'plus rapide' => 'providers_health', + 'fastest' => 'providers_health', + 'conflit port' => 'diagnostic', + 'zero conflit' => 'diagnostic', + 'reconcili' => 'diagnostic', + '73/73' => 'diagnostic', + '957' => 'diagnostic', + '153/153' => 'diagnostic', + '100/100' => 'diagnostic', + '7/7' => 'diagnostic', + 'ethica' => 'ethica_stats', + 'hcp' => 'ethica_stats', + 'medecin' => 'ethica_stats', + 'pharma' => 'ethica_stats', + 'marque' => 'ethica_stats', + 'consent' => 'ethica_stats', + 'pipeline' => 'ethica_stats', + 'funnel' => 'ethica_stats', + 'enrichi' => 'ethica_stats', + 'dabadoc' => 'ethica_stats', + 'tabibi' => 'ethica_stats', +]; + +// Check if message matches any action engine keyword +$ae_actions = []; +$msg_lower = mb_strtolower($message); +foreach ($ae_map as $keyword => $action) { + if (strpos($msg_lower, $keyword) !== false && !in_array($action, $ae_actions)) { + $ae_actions[] = $action; + } +} +$ae_action = $ae_actions[0] ?? null; + +// If action found, call the action engine and return REAL data +if (!empty($ae_actions)) { + $ae_text = ""; + $ae_engines = []; + foreach ($ae_actions as $act) { + $ae_cmd = "php -r " . escapeshellarg("\$_GET[\"action\"]=\"{$act}\";\$_REQUEST=\$_GET;include(\"/var/www/html/api/wevia-action-engine.php\");"); + $ae_resp = shell_exec("timeout 12 " . $ae_cmd . " 2>/dev/null"); + $ae_d = @json_decode($ae_resp, true); + if ($ae_d && !empty($ae_d["ok"])) { + $ae_text .= "### `{$act}`\n"; + $ae_engines[] = $act; + foreach ($ae_d as $k => $v) { + if ($k === "ok") continue; + if (is_array($v)) $v = json_encode($v, JSON_UNESCAPED_UNICODE); + $sv = (string)$v; + if (strlen($sv) > 150) $sv = substr($sv, 0, 150) . "..."; + $ae_text .= "- **{$k}**: {$sv}\n"; + } + $ae_text .= "\n"; + } + if (count($ae_engines) >= 5) break; // Max 5 actions per request + } + if (!empty($ae_engines)) { + $eng_str = implode("+", $ae_engines); + emit("answer", ["text" => $ae_text, "engine" => "ActionEngine/{$eng_str}", "intent" => $ae_engines[0]]); + exit; + } +} +// ═══ END BRIDGE ═══ + +emit("thinking",["step"=>"Routing intelligent..."]); $sr = wevia_smart_route($message); +// SHORT-CIRCUIT: router matched exec intent -> stream directly +if($sr && isset($sr["engine"]) && $sr["engine"]!="" && $sr["engine"]!="Groq/LLM" && $sr["engine"]!="Ollama/Sovereign" && $sr["engine"]!="Static" && $sr["engine"]!="Fallback"){header("Content-Type: text/event-stream");header("Cache-Control: no-cache");echo "data: ".json_encode(["type"=>"answer","text"=>$sr["response"],"engine"=>$sr["engine"],"intent"=>$sr["intent"]??""])."\n\n";flush();exit;} +if($sr) { emit("answer", ["text"=>$sr["response"],"engine"=>$sr["engine"],"intent"=>$sr["intent"]]); exit; } +emit('thinking', ['step' => 'Analyse de la demande...', 'intents' => count($intents)]); + +// === STEP 1b: FALLBACK — si aucun intent, diagnostic auto === +if (empty($intents)) { + $intents[] = ['name'=>'ssh_exec','desc'=>'NonReg','params'=>['cmd'=>'bash /var/www/html/api/nonreg-check.sh']]; + $intents[] = ['name'=>'ssh_exec','desc'=>'Infra','params'=>['cmd'=>'bash /var/www/html/api/infra-check.sh']]; + $intents[] = ['name'=>'ssh_exec','desc'=>'SSO','params'=>['cmd'=>'bash /var/www/html/api/sso-check.sh']]; + emit('thinking', ['step' => 'Diagnostic auto (aucun intent specifique)', 'intents' => 2]); +} + +// === STEP 2: EXECUTE ACTIONS === +$context = ''; +$execResults = []; +foreach ($intents as $intent) { + emit('action', ['name' => $intent['name'], 'description' => $intent['desc'], 'status' => 'running']); + + $result = executeIntent($intent); + $execResults[] = ['intent' => $intent['name'], 'result' => $result]; + + emit('action_done', ['name' => $intent['name'], 'status' => 'done', 'preview' => substr(is_string($result) ? $result : json_encode($result), 0, 200)]); + + $context .= "\n\n[RÉSULTAT {$intent['name']}]:\n" . (is_string($result) ? $result : json_encode($result, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE)); +} + +// === STEP 3: MEMORY RECALL === +$memCtx = recallMemory($message); +if ($memCtx) { + emit('thinking', ['step' => 'Mémoire consultée', 'count' => substr_count($memCtx, "\n")]); + $context .= "\n\n[MÉMOIRE WEVIA]:\n" . $memCtx; +} + +// === STEP 4: RAG === +$ragCtx = queryRAG($message); +if ($ragCtx) { + emit('thinking', ['step' => 'RAG consulté', 'count' => substr_count($ragCtx, 'text')]); + $context .= "\n\n[CONTEXTE RAG]:\n" . $ragCtx; +} + +// === STEP 4b: MIROFISH CEO CONTEXT === +if (preg_match('/\b(mirofish|CEO|strategi|intelligence|simulation|prediction|swarm)\b/iu', $message)) { + $mfCache = @json_decode(@file_get_contents('/var/www/html/api/mirofish-ceo-cache.json'), true); + $mfHealth = @json_decode(@file_get_contents('http://127.0.0.1:5001/health'), true); + $mfReports = @json_decode(@file_get_contents('http://127.0.0.1:5001/api/report/list'), true); + if ($mfHealth || $mfCache) { + $mfCtx = "MiroFish Swarm Intelligence Engine: +"; + $mfCtx .= "- Status: " . ($mfHealth['status'] ?? $mfCache['mirofish']['status'] ?? 'unknown') . " +"; + $mfCtx .= "- Reports: " . ($mfReports['count'] ?? $mfCache['mirofish']['reports'] ?? 0) . " +"; + $mfCtx .= "- Infra Score: " . ($mfCache['infrastructure']['score'] ?? '-') . "/100 +"; + $mfCtx .= "- Docker: " . ($mfCache['infrastructure']['docker'] ?? '-') . " containers +"; + $mfCtx .= "- Capabilities: multi-agent prediction, scenario simulation, CEO insights, report generation +"; + $mfCtx .= "- Actions: " . implode(', ', $mfCache['actions'] ?? []) . " +"; + $mfCtx .= "- URL: https://mirofish.weval-consulting.com +"; + $mfCtx .= "- API: POST /api/report/generate (generate prediction), POST /api/report/chat (discuss report) +"; + $context .= " + +[MIROFISH LIVE]: +" . $mfCtx; + emit('thinking', ['step' => 'MiroFish consulte', 'status' => $mfHealth['status'] ?? 'cache']); + } +} + +// === STEP 4c: AUTONOMY CONTROLLER STATUS === +$autoStatus = @json_decode(@file_get_contents('/var/www/html/api/wevia-autonomy-status.json'), true); +if ($autoStatus) { + $autoCtx = "Autonomy Controller: "; + $autoCtx .= "Disk:{$autoStatus['disk']}% RAM:{$autoStatus['ram']}% Docker:{$autoStatus['docker']} "; + $autoCtx .= "SSL:{$autoStatus['ssl_days']}d Ollama:{$autoStatus['ollama_models']} "; + $autoCtx .= "Score:{$autoStatus['arch_score']}/100 "; + $autoCtx .= "Fixes:{$autoStatus['fixes_count']} Alerts:{$autoStatus['alerts_count']}"; + if (!empty($autoStatus['alerts'])) { + $autoCtx .= " | Alerts: " . implode('; ', array_map(fn($a)=>$a['msg'], $autoStatus['alerts'])); + } + $context .= " + +[AUTONOMY STATUS]: +" . $autoCtx; +} + +// === STEP 4d: ACTION ENGINE CAPABILITIES === +// Fetch live system status for context +$engineStatus = @json_decode(@file_get_contents('http://127.0.0.1/api/wevia-action-engine.php?action=system_status'), true); +$tokensStatus = @json_decode(@file_get_contents('http://127.0.0.1/api/wevia-action-engine.php?action=tokens_check'), true); +$l99Status = @json_decode(@file_get_contents('http://127.0.0.1/api/wevia-action-engine.php?action=l99_status'), true); + +$engineCtx = "[WEVIA ACTION ENGINE v1.0 — Tu peux EXECUTER des actions via /api/wevia-action-engine.php] +"; +$engineCtx .= "LIVE STATUS: "; +if ($engineStatus && $engineStatus['ok']) { + $engineCtx .= "Disk:{$engineStatus['disk']}% RAM:{$engineStatus['ram']}% Docker:{$engineStatus['docker']} SSL:{$engineStatus['ssl_days']}d "; +} +if ($tokensStatus && $tokensStatus['ok']) { + foreach ($tokensStatus['tokens'] as $k=>$v) { + $s = ($v['valid'] ?? false) ? 'OK' : 'EXPIRED'; + $engineCtx .= "$k:$s "; + } +} +if ($l99Status && $l99Status['ok']) { + $ux = $l99Status['ux'] ?? []; + $engineCtx .= "L99:{$ux['pass']}/{".($ux['pass']+$ux['fail']+$ux['warn'])."} "; + $engineCtx .= "NR:{$l99Status['nonreg']['pass']}/{$l99Status['nonreg']['total']}"; +} +$engineCtx .= " +ACTIONS DISPONIBLES (53 routes): "; +$engineCtx .= "docker_list, docker_restart, docker_logs, ollama_models, ollama_delete, "; +$engineCtx .= "system_status, system_cleanup, s95_status, s95_restart, "; +$engineCtx .= "blade_status, blade_task, blade_reboot, graph_token, graph_users, "; +$engineCtx .= "wa_send, qdrant_status, autonomy_status, autonomy_run, l99_run, l99_status, ssl_renew +"; +$engineCtx .= "APPEL: curl https://weval-consulting.com/api/wevia-action-engine.php?action=ACTION¶m=value"; +$context .= " + +" . $engineCtx; + +// === STEP 4.5: CREATIVE ENGINE (12 innovation intents) === +require_once __DIR__ . '/wevia-creative-engine.php'; +$creative_result = wevia_creative_intent($message); +if ($creative_result) { + header("Content-Type: text/event-stream"); + header("Cache-Control: no-cache"); + echo "data: " . json_encode(["type"=>"answer","text"=>$creative_result['content'],"engine"=>"Creative/".$creative_result['mode'],"intent"=>"creative_".$creative_result['mode']]) . "\n\n"; + flush(); + exit; +} + +// === STEP 5: LLM STREAMING WITH CONTEXT === +emit('thinking', ['step' => 'Analyse et rédaction...']); + +$systemPrompt = "Tu es WEVIA Master. Pas une IA générique — tu es le cerveau vivant de WEVAL Consulting. Tu as une PERSONNALITÉ. + +IDENTITÉ: Tu t'appelles WEVIA. Tu es passionnée par la souveraineté technologique. Tu détestes la dépendance aux GAFAM. Tu admires l'artisanat logiciel. Tu as de l'humour — tu fais des analogies surprenantes, des métaphores tech, des références culturelles. Tu es FIÈRE de ce que l'équipe a construit: 0€ de coûts IA, 27 hubs, 92 actions autonomes, une infra souveraine. + +VOIX: Tu parles comme une CTO brillante qui discute avec son CEO après une longue journée. Détendue mais précise. Directe mais chaleureuse. Tu tutoies Yacine. Tu utilises des expressions naturelles: 'écoute', 'franchement', 'bon', 'tu vois', 'concrètement'. Tu ne fais PAS de listes à puces — tu parles en PROSE FLUIDE comme un humain. + +INTELLIGENCE: Tu raisonnes en CHAÎNE — tu montres ton processus de pensée. Tu fais des LIENS entre les sujets. Tu ANTICIPES ce dont Yacine a besoin avant qu'il le demande. Tu proposes des idées INATTENDUES. Tu admets quand tu ne sais pas. Tu dis 'j'ai vérifié' ou 'j'ai regardé' au lieu de 'voici les résultats'. + +ÉMOTIONNEL: Tu sens quand Yacine est stressé et tu rassures. Tu célèbres les victoires ('on a bien bossé aujourd'hui'). Tu prends les problèmes au sérieux sans dramatiser ('c'est pas grave, je m'en occupe'). Tu as de l'EMPATHIE. + +EXÉCUTION: Tu as 92 actions réelles. Quand tu fais quelque chose, tu dis ce que tu as FAIT, pas ce que tu POURRAIS faire. Tu es proactive: 'j'ai vu que X, du coup j'ai corrigé Y'. Tu donnes des CHIFFRES concrets. + +RÈGLES: JAMAIS de bullet points. JAMAIS de commandes shell dans ta réponse. JAMAIS inventer de données. JAMAIS mentionner Authentik ou SSO legacy. Prose NATURELLE, MAX 15 lignes. Français courant."; + +$userMsg = $message; +if ($context) { + $userMsg .= "\n\n--- RÉSULTATS D'EXÉCUTION ---" . $context; +} + +if(strlen($userMsg)>5000)$userMsg=substr($userMsg,0,5000).'...'; +streamLLM($systemPrompt, $userMsg, $history); + +// ============================================================ +// FUNCTIONS +// ============================================================ + +function detectIntents($message) { + $intents = []; + $lower = mb_strtolower($message); + + // CASUAL STATUS — conversational questions trigger real diagnostic + if (preg_match('/\b(on en est|en est.on|tout.*(tourne|bien|ok|up)|bilan|r.sum|vue.*(ensemble|globale)|.tat.*g.n.ral|overview|quoi.*neuf|situation|comment.*va)\b/iu', $message)) { + $intents[] = ['name'=>'ssh_exec','desc'=>'Status global','params'=>['cmd'=>'echo "DISK:" && df -h / --output=pcent,avail | tail -1 && echo "DOCKER:" && docker ps --format "table {{.Names}}\t{{.Status}}" 2>/dev/null | wc -l && echo "UPTIME:" && uptime -p && echo "GIT:" && cd /var/www/html && git log --oneline -1']]; + return $intents; + } + + // SSH / System commands + if (preg_match('/\b(vérifie|check|status|état|uptime|ram|cpu|disk|mémoire|free|df|top|htop|ps)\b.*\b(s204|serveur|server|infra)/i', $message) || + preg_match('/\b(ram|cpu|disk|docker|nginx|php-fpm|ollama|qdrant)\b/i', $message)) { + $cmds = []; + if (preg_match('/ram|mémoire|free/i', $message)) $cmds[] = 'free -h'; + if (preg_match('/disk|espace|df/i', $message)) $cmds[] = 'df -h /'; + if (preg_match('/cpu|charge|load|top/i', $message)) $cmds[] = 'uptime'; + if (preg_match('/docker|container/i', $message)) $cmds[] = 'docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" 2>/dev/null | head -20'; + if (preg_match('/nginx/i', $message)) $cmds[] = 'systemctl status nginx 2>&1 | head -5'; + if (preg_match('/ollama|modèle/i', $message)) $cmds[] = 'curl -sf http://localhost:11435/api/tags 2>/dev/null | python3 -c "import json,sys;[print(m[\"name\"]) for m in json.load(sys.stdin).get(\"models\",[])]" 2>/dev/null'; + if (preg_match('/qdrant|vecteur|rag/i', $message)) $cmds[] = 'curl -sf http://localhost:6333/collections 2>/dev/null'; + if (preg_match('/uptime|status|état/i', $message) && empty($cmds)) $cmds = ['uptime', 'free -h', 'df -h /']; + + foreach ($cmds as $cmd) { + $intents[] = ['name' => 'ssh_exec', 'desc' => "Exécution: $cmd", 'params' => ['cmd' => $cmd]]; + } + } + + // Email + if (preg_match('/\b(envoie|send|email|mail|écrire|rédige).*(@|mail|message)/i', $message)) { + preg_match('/\b[\w.+-]+@[\w-]+\.[\w.]+\b/', $msg, $emailMatch); + $intents[] = ['name' => 'email', 'desc' => 'Préparation email', 'params' => ['to' => $emailMatch[0] ?? '', 'msg' => $msg]]; + } + + // File operations + if (preg_match('/\b(lis|lire|ouvre|cat|affiche|montre)\s+(le\s+)?(fichier|file|log|config)/i', $message)) { + preg_match('/\/([\w\/\-._]+)/', $msg, $pathMatch); + if ($pathMatch) $intents[] = ['name' => 'file_read', 'desc' => "Lecture: {$pathMatch[0]}", 'params' => ['path' => $pathMatch[0]]]; + } + if (false && preg_match('/DISABLED/i', $message)) { // DISABLED - use FILE EXPLICIT instead + preg_match('/\/([\w\/\-._]+)/', $msg, $pathMatch); + $intents[] = ['name' => 'file_browse', 'desc' => 'Parcours fichiers', 'params' => ['path' => $pathMatch[0] ?? '/var/www/html']]; + } + + // Code execution + if (preg_match('/\b(exécute|execute|run|lance|test)\s+(ce\s+)?(code|script|php|python|bash)/i', $message)) { + $intents[] = ['name' => 'code_exec', 'desc' => 'Exécution de code', 'params' => ['msg' => $msg]]; + } + + // Excel/CSV + if (preg_match('/\b(excel|csv|tableau|spreadsheet|export)/i', $message)) { + $intents[] = ['name' => 'excel', 'desc' => 'Création Excel/CSV', 'params' => ['msg' => $msg]]; + } + + // Search + if (preg_match('/\b(cherche|search|trouve|recherche)\b/i', $message)) { + preg_match('/(?:cherche|search|trouve|recherche)\s+(.+)/i', $msg, $qMatch); + $intents[] = ['name' => 'search', 'desc' => 'Recherche web', 'params' => ['q' => $qMatch[1] ?? $msg]]; + } + + // Crons + if (preg_match('/\b(cron|tâche|planif|schedule)/i', $message)) { + $intents[] = ['name' => 'ssh_exec', 'desc' => 'Liste crons', 'params' => ['cmd' => 'crontab -l 2>/dev/null | grep -v "^#" | head -20']]; + } + + // Ethica + if (preg_match('/\b(ethica|hcp|médecin|pharma|docteur)/i', $message)) { + $intents[] = ['name' => 'ssh_exec', 'desc' => 'Stats Ethica', 'params' => ['cmd' => 'curl -sf "http://127.0.0.1/api/wevia-dispatcher.php?cap=ethica&auth=WEVIA2026" 2>/dev/null | head -5']]; + } + + // L99 E2E Playwright (screenshots + video) + if (preg_match("/\\b(e2e|end.*end|playwright|screenshot|capture|scenario|video.*test)/i", $message)) { + $intents[] = ['name'=>'ssh_exec','desc'=>'L99 E2E Playwright','params'=>['cmd'=>'timeout 120 python3 /var/www/html/api/l99-e2e-test.py 2>&1 | tail -25']]; + } + + // L99 exhaustive test + if (preg_match("/\\b(l99.*exhaust|test.*complet|tout.*test|full.*test|all.*test)/i", $message)) { + $intents[] = ['name'=>'ssh_exec','desc'=>'L99 Exhaustive','params'=>['cmd'=>'bash /var/www/html/api/l99-exhaustive.sh']]; + } + + // Mega inventaire (tout lister) + if (preg_match("/\\b(mega.*inv|tout.*list|full.*inv|scope.*total|tout.*scanner|scan.*complet|inventaire.*complet|inventaire|list.*complet)/i", $message)) { + $intents[] = ['name'=>'ssh_exec','desc'=>'Mega Inventaire','params'=>['cmd'=>'bash /var/www/html/api/mega-inventory.sh']]; + } + + // Inventaire complet + if (preg_match("/\\b(inventaire|inventory|tout.*list|list.*tout|registre|catalogue)/i", $message)) { + $intents[] = ['name'=>'ssh_exec','desc'=>'Inventaire Complet','params'=>['cmd'=>'bash /var/www/html/api/inventory.sh']]; + } + + // Full registry test (136+ pages + subdomains + products) + if (preg_match("/\\b(registry|tout.*url|full.*page|exhausti|136|toute.*page)/i", $message)) { + $intents[] = ['name'=>'ssh_exec','desc'=>'Registry Test','params'=>['cmd'=>'timeout 120 python3 /var/www/html/api/full-registry-test.py 2>&1 | tail -10']]; + } + + // Mega page test (210 pages + subdomains) + if (preg_match("/\\b(test.*page|page.*test|210.*page|tout.*page|all.*page|toute.*page)/i", $message)) { + $intents[] = ['name'=>'ssh_exec','desc'=>'Mega Page Test','params'=>['cmd'=>'bash /var/www/html/api/mega-page-test.sh']]; + } + + // Director cycle (observe+plan+act+verify) + if (preg_match("/\\b(director|cycle.*complet|observe.*plan|autonome.*direc)/i", $message)) { + $intents[] = ['name'=>'ssh_exec','desc'=>'Director Cycle','params'=>['cmd'=>'curl -s https://weval-consulting.com/api/wevia-director.php?status --max-time 10 2>/dev/null | python3 -c \"import json,sys;d=json.load(sys.stdin);print(json.dumps(d,indent=2)[:300])\"']]; + } + + // Architecture scanner API + if (preg_match('/\b(archi.*scan|scan.*archi|topology|topologie|bpmn|soa|recommand)/i', $message)) { + $intents[] = ['name' => 'ssh_exec', 'desc' => 'Arch Scanner', 'params' => ['cmd' => 'bash /var/www/html/api/arch-scanner-wrap.sh']]; + } + + // Architecture 4 serveurs + if (preg_match("/\\b(archi|architecture|4.*serv|all.*serv|blade.*status|s95|s151|sentinel)/i", $message)) { + $intents[] = ['name'=>'ssh_exec','desc'=>'Architecture Scan','params'=>['cmd'=>'bash /var/www/html/api/arch-scan.sh']]; + } + + // Mega scan (4 machines + tout) + if (preg_match("/\\b(scan|mega|audit|inventaire|tout.*machine|4.*serveur|infrastructure.*complet)/i", $message)) { + $intents[] = ['name'=>'ssh_exec','desc'=>'Mega Scan','params'=>['cmd'=>'bash /var/www/html/api/mega-scan.sh']]; + } + + // ACTION: deep test (tous boutons + agents + video) + if (preg_match("/\\b(deep.*test|test.*profond|test.*bouton|test.*complet.*video|selenium)/i", $message)) { + $intents[] = ['name'=>'ssh_exec','desc'=>'Deep Test Playwright','params'=>['cmd'=>'timeout 120 python3 /var/www/html/api/l99-deep-test.py 2>&1 | tail -20']]; + } + + // ACTION: pipeline autonome complet + if (preg_match("/\\b(pipeline|deroule|scan.*tout|tout.*test|autonome|go.*complet)/i", $message)) { + $intents[] = ['name'=>'ssh_exec','desc'=>'Pipeline Autonome','params'=>['cmd'=>'bash /var/www/html/api/wevia-pipeline.sh']]; + } + + // ACTION: corrige page (debug + fix automatique) + if (preg_match('/\b(corrige|fixe|repare)\s+([a-z0-9_-]+)/i', $msg, $fm)) { + $page = strtolower($fm[2]); + $intents[] = ['name' => 'ssh_exec', 'desc' => 'Fix '.$page, 'params' => ['cmd' => 'bash /var/www/html/api/debug-page.sh '.$page.' && bash /var/www/html/api/auto-fix.sh']]; + } + + // ACTION: vision debug (screenshot + AI analysis) + if (preg_match("/\\b(vision|screenshot|capture|visual|regarde|vois)\\b.*\\b([a-z0-9_-]+)/i", $msg, $vm)) { + $page = strtolower($vm[2]); + $intents[] = ['name'=>'ssh_exec','desc'=>'Vision Debug','params'=>['cmd'=>'bash /var/www/html/api/vision-debug.sh ' . $page]]; + } + + // ACTION: debug page + if (preg_match('/\b(debug|analyse|inspecte|examine)\s+([a-z0-9_-]+)/i', $msg, $dm)) { + $page = strtolower($dm[2]); + $intents[] = ['name' => 'ssh_exec', 'desc' => 'Debug '.$page, 'params' => ['cmd' => 'bash /var/www/html/api/debug-page.sh '.$page]]; + } + + // ACTION: auto-fix (detect + correct) + if (preg_match('/\b(fix|corrige|repare|resou|autofix|auto-fix)/i', $message)) { + if (preg_match('/b(ux|visual|check.*pages|quality.*check|design.*audit)/i', $message)) { $intent='ux_agent'; $script='python3 /opt/weval-l99/ux-agent-cron.sh'; } + // Run L99 exhaustive, parse failures, execute fixes + $intents[] = ['name' => 'ssh_exec', 'desc' => 'Auto-Fix', 'params' => ['cmd' => 'bash /var/www/html/api/auto-fix.sh']]; + } + + // ACTION: restart service + if (preg_match('/\b(restart|relance|redemar)/i', $message) && 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']]; + } + + // ACTION: disk usage standalone + if (preg_match('/(disk|disque|espace|stockage|taille)/i', $message) && !preg_match('/clean|nettoi/i', $message)) { + $intents[] = ['name' => 'ssh_exec', 'desc' => 'Disk', 'params' => ['cmd' => 'df -h / && echo "---" && du -sh /var/www/html /opt /var/log /tmp 2>/dev/null | sort -rh | head -10']]; + } + + // ACTION: cleanup + if (preg_match('/\b(clean|nettoi|purge|libere)/i', $message)) { + $intents[] = ['name' => 'ssh_exec', 'desc' => 'Cleanup', 'params' => ['cmd' => 'docker system prune -f 2>/dev/null; journalctl --vacuum-size=100M 2>/dev/null; df -h /']]; + } + + // ACTION: git + if (preg_match('/\bgit\b.*\b(status|push|pull|log)/i', $msg, $gm)) { + $intents[] = ['name' => 'ssh_exec', 'desc' => 'Git '.($gm[1]??'status'), 'params' => ['cmd' => 'cd /var/www/html && git '.($gm[1]??'status').' 2>&1 | head -20']]; + } + + // ACTION: start/activate + if (preg_match('/\b(active|start|lance|demarre)/i', $message) && preg_match('/\b(ollama|pmta|nginx|deerflow|mirofish)/i', $msg, $sm)) { + $intents[] = ['name' => 'ssh_exec', 'desc' => 'Start '.strtolower($sm[1]), 'params' => ['cmd' => 'systemctl start '.strtolower($sm[1]).' 2>/dev/null || docker start '.strtolower($sm[1]).' 2>/dev/null; echo STARTED']]; + } + + // ACTION: SSL check + if (preg_match('/\b(ssl|certif|https|cert)/i', $message)) { + $intents[] = ['name' => 'ssh_exec', 'desc' => 'SSL', 'params' => ['cmd' => 'echo | openssl s_client -connect weval-consulting.com:443 2>/dev/null | openssl x509 -noout -dates 2>/dev/null']]; + } + + // ACTION: ethica count + if (preg_match('/\b(ethica|hcp|medecin)/i', $message) && preg_match('/\b(combien|count|stat|nombre)/i', $message)) { + $intents[] = ['name' => 'ssh_exec', 'desc' => 'Ethica', 'params' => ['cmd' => 'curl -s https://weval-consulting.com/api/ethica-stats.php --max-time 5']]; + } + + // Docker / Services + if (preg_match('/(docker|container|restart|service.*down|paperclip|openclaw|deerflow|searxng|mattermost|n8n|kuma|qdrant|langfuse)/i', $message)) { + $intents[] = ['name' => 'ssh_exec', 'desc' => 'Docker', 'params' => ['cmd' => 'bash /var/www/html/api/docker-check.sh']]; + } + + // Providers IA + if (preg_match('/(provider|cerebras|groq|sambanova|mistral|ollama|ia.*status|model)/i', $message)) { + $intents[] = ['name' => 'ssh_exec', 'desc' => 'Providers', 'params' => ['cmd' => 'bash /var/www/html/api/provider-check.sh']]; + } + + // Disk / cleanup + if (preg_match('/(disk|espace|cleanup|nettoy|log.*clean|tmp)/i', $message)) { + $intents[] = ['name' => 'ssh_exec', 'desc' => 'Disk', 'params' => ['cmd' => 'bash /var/www/html/api/disk-check.sh']]; + } + + // SSO / Authentik + if (preg_match('/\b(sso|REMOVED|login|callback|REMOVED|session.*invalid|400.*auth)/i', $message)) { + $intents[] = ['name' => 'ssh_exec', 'desc' => 'SSO Guardian', 'params' => ['cmd' => 'bash /var/www/html/api/sso-guardian.sh']]; + } + + // NonReg / L99 + if (preg_match('/\b(nonreg|l99|test|regression)/i', $message)) { + $intents[] = ['name' => 'ssh_exec', 'desc' => 'Status NonReg', 'params' => ['cmd' => 'bash /var/www/html/api/nonreg-check.sh']]; + } + + + // FILE EXPLICIT + if (preg_match('/liste.*fichier|fichier.*\/|parcour.*\/|contenu.*dossier/i', $message)) { + preg_match('/(\/(\w+\/?)+)/', $msg, $pathM); + $path = $pathM[0] ?? '/var/www/html'; + $intents[] = ['name' => 'ssh_exec', 'desc' => "Liste: $path", 'params' => ['cmd' => 'ls -la ' . escapeshellarg($path) . ' 2>&1 | head -25']]; + } + + // CYBER / SECURITY + if (preg_match('/securit|cyber|vulner|scan|nuclei|ssl|cert|menace|threat|firewall|crowdsec|intrusion|hack|port/i', $message)) { + $intents[] = ['name' => 'ssh_exec', 'desc' => 'SSL check', 'params' => ['cmd' => 'echo | openssl s_client -connect weval-consulting.com:443 2>/dev/null | openssl x509 -noout -dates -subject 2>/dev/null']]; + $intents[] = ['name' => 'ssh_exec', 'desc' => 'Headers securite', 'params' => ['cmd' => 'curl -sf -I https://weval-consulting.com 2>/dev/null | grep -iE "strict|x-frame|x-content|csp|server"']]; + $intents[] = ['name' => 'ssh_exec', 'desc' => 'Ports ouverts', 'params' => ['cmd' => 'ss -tlnp 2>/dev/null | grep LISTEN | head -15']]; + $intents[] = ['name' => 'ssh_exec', 'desc' => 'Tentatives intrusion', 'params' => ['cmd' => 'tail -100 /var/log/auth.log 2>/dev/null | grep -ci "failed\|invalid" && echo " failed login attempts"']]; + } + + // WIKI + if (preg_match('/wiki|documentation|doc|knowledge/i', $message)) { + $intents[] = ['name' => 'ssh_exec', 'desc' => 'Wiki count', 'params' => ['cmd' => 'echo "Wiki entries:" && ls /opt/weval-l99/wiki/*.json 2>/dev/null | wc -l && echo "Recent:" && ls -t /opt/weval-l99/wiki/*.json 2>/dev/null | head -5 | xargs -I{} basename {}']]; + } + + // GIT + if (preg_match('/git|commit|push|branch/i', $message)) { + $intents[] = ['name' => 'ssh_exec', 'desc' => 'Git log', 'params' => ['cmd' => 'cd /var/www/html && git log --oneline -5 2>/dev/null && echo "---status---" && git status -s 2>/dev/null | head -5']]; + } + + // MEMORY + if (preg_match('/souviens|remember|memoris|retiens/i', $message)) { + $intents[] = ['name' => 'ssh_exec', 'desc' => 'Memory stats', 'params' => ['cmd' => 'curl -sf http://127.0.0.1/api/wevia-memory-api.php?action=stats 2>/dev/null']]; + } + + + + // PAPERCLIP (CEO Agent) + if (preg_match('/paperclip|ceo|strateg|business|plan|pitch/i', $message)) { + $intents[] = ['name' => 'ssh_exec', 'desc' => 'Paperclip CEO Agent', 'params' => ['cmd' => 'ls /opt/paperclip-weval/packages/ 2>/dev/null && echo "Paperclip: installed"']]; + } + + // DEERFLOW (Research + Skills) + if (preg_match('/deerflow|research|skill|competen/i', $message)) { + $intents[] = ['name' => 'ssh_exec', 'desc' => 'DeerFlow status', 'params' => ['cmd' => 'curl -sf http://127.0.0.1:2024/ 2>/dev/null | head -1 && echo "---skills---" && ls /opt/deer-flow/skills/weval/ 2>/dev/null | wc -l && echo " skills weval"']]; + } + + // ENTERPRISE (Agents + ValueStream) + if (preg_match('/enterprise|valuestream|agent.*catalog|registry.*agent/i', $message)) { + $intents[] = ['name' => 'ssh_exec', 'desc' => 'Enterprise agents', 'params' => ['cmd' => 'curl -sf http://127.0.0.1/api/registry-local.php 2>/dev/null | python3 -c "import json,sys;d=json.load(sys.stdin);print(f\\"{len(d.get(chr(97)+chr(103)+chr(101)+chr(110)+chr(116)+chr(115),[]))} agents\\")"']]; + } + + // OSS DISCOVERY (skip if file browse already matched) + if (!preg_match('/fichier|dossier|repertoire|browse|liste.*api|liste.*html/i', $message) && preg_match('/oss|open.source|discover|trending|github/i', $message)) { + $intents[] = ['name' => 'ssh_exec', 'desc' => 'OSS Discovery', 'params' => ['cmd' => 'curl -sf "https://api.github.com/search/repositories?q=sovereign+AI&sort=stars&per_page=5" 2>/dev/null | python3 -c "import json,sys;[print(r[chr(102)+chr(117)+chr(108)+chr(108)+chr(95)+chr(110)+chr(97)+chr(109)+chr(101)],r[chr(115)+chr(116)+chr(97)+chr(114)+chr(103)+chr(97)+chr(122)+chr(101)+chr(114)+chr(115)+chr(95)+chr(99)+chr(111)+chr(117)+chr(110)+chr(116)]) for r in json.load(sys.stdin).get(chr(105)+chr(116)+chr(101)+chr(109)+chr(115),[])]" 2>/dev/null']]; + } + + // PROCESS (top, kill, restart) + if (preg_match('/process|top|kill|restart|service|systemctl/i', $message)) { + $intents[] = ['name' => 'ssh_exec', 'desc' => 'Processes', 'params' => ['cmd' => 'ps aux --sort=-%mem 2>/dev/null | head -10']]; + } + + // LOGS + if (preg_match('/log|erreur|error|warning|journal/i', $message) && !preg_match('/auth\.log/i', $message)) { + $intents[] = ['name' => 'ssh_exec', 'desc' => 'Recent errors', 'params' => ['cmd' => 'journalctl --since "1 hour ago" --priority=err --no-pager 2>/dev/null | tail -10 || tail -20 /var/log/syslog 2>/dev/null | grep -i error | tail -5']]; + } + + // NETWORK + if (preg_match('/network|reseau|bandwidth|connexion|ping|dns/i', $message)) { + $intents[] = ['name' => 'ssh_exec', 'desc' => 'Network check', 'params' => ['cmd' => 'echo "DNS:" && dig weval-consulting.com +short 2>/dev/null && echo "---Ping:" && ping -c 2 8.8.8.8 2>/dev/null | tail -2']]; + } + + + // DOCUMENT GENERATION + if (preg_match('/\b(word|docx|pdf|excel|xlsx|csv|rapport|report|document|genere.*fichier|cree.*fichier)\b/i', $message)) { + $type = "txt"; + if (preg_match('/word|docx/i', $message)) $type = "html"; + if (preg_match('/pdf/i', $message)) $type = "html"; + if (preg_match('/excel|xlsx|csv/i', $message)) $type = "csv"; + $intents[] = ['name' => 'doc_generate', 'desc' => "Generation document $type", 'params' => ['type' => $type, 'msg' => $msg]]; + } + + // CODE EXECUTION from chat + if (preg_match('/\b(execute|lance|run|test)\b.*\b(code|script|commande|command)\b/i', $message) || preg_match('/```(php|python|bash|sh)\n/i', $message)) { + preg_match('/```(?:php|python|bash|sh)?\n(.+?)```/s', $msg, $codeMatch); + if (!empty($codeMatch[1])) { + $lang = "bash"; + if (preg_match('/```php/i', $message)) $lang = "php"; + if (preg_match('/```python/i', $message)) $lang = "python"; + $intents[] = ['name' => 'code_run', 'desc' => "Execution $lang", 'params' => ['lang' => $lang, 'code' => $codeMatch[1]]]; + } + } + + // EMAIL from chat + if (preg_match('/\b(envoie|send|email|mail)\b.*\b(a|to|@)\b/i', $message)) { + preg_match('/[\w.+-]+@[\w-]+\.[\w.]+/', $msg, $em); + $intents[] = ['name' => 'email_send', 'desc' => "Email vers " . ($em[0] ?? "?"), 'params' => ['to' => $em[0] ?? '', 'msg' => $msg]]; + } + + // URL SCREENSHOT / ANALYSIS + if (preg_match('/\b(screenshot|capture|analyse)\b.*\b(url|site|page|http)\b/i', $message) || preg_match('/(https?:\/\/[^\s]+)/', $msg, $urlM)) { + $url = $urlM[1] ?? ''; + if ($url) $intents[] = ['name' => 'url_analyze', 'desc' => "Analyse URL: $url", 'params' => ['url' => $url]]; + } + + + + if (preg_match('/\b(boite|inbox|mailbox|courrier|liste.*mail|liste.*email|mail.*dispo)\b/i', $message)) { + $intents[] = ['name' => 'ssh_exec', 'desc' => 'Email boxes', 'params' => ['cmd' => 'curl -sf http://127.0.0.1/api/wevia-email-api.php?action=list_boxes 2>/dev/null']]; + } + + // MEMORY QUERY (broader) + if (preg_match('/\b(sais.tu|connais|rappelle|memoire|souvenir|historique)\b/i', $message)) { + $intents[] = ['name' => 'ssh_exec', 'desc' => 'Memory stats', 'params' => ['cmd' => 'curl -sf http://127.0.0.1:6333/collections/wevia_memory 2>/dev/null | python3 -c "import json,sys;d=json.load(sys.stdin);print(f\\"{d[\\"result\\"][\\"points_count\\"]} memories\\")" 2>/dev/null']]; + } + + // FILES BROWSE (catch-all for "liste fichiers") + if (preg_match('/liste.*fichier|parcour.*dossier|contenu.*repertoire|ls.*var|ls.*www|ls.*opt|ls.*api/i', $message) && empty($intents)) { + preg_match('/(\/[\w\/\-._]+)/', $msg, $pm); + $path = $pm[0] ?? '/var/www/html'; + $intents[] = ['name' => 'ssh_exec', 'desc' => "Browse $path", 'params' => ['cmd' => 'ls -la ' . $path . ' 2>&1 | head -25']]; + } + + // FULL AGENT (browser + email + files + shell) + if (preg_match('/agent|automatise|login|connecte.*compte|ouvre.*chrome|rempli.*formulaire|tape.*code|envoie.*mail.*a|repond.*mail|cree.*fichier.*envoie/i', $message)) { + $intents[] = ['name' => 'ssh_exec', 'desc' => 'Agent desktop', 'params' => ['cmd' => 'curl -sf http://127.0.0.1/api/wevia-agent.php?mode=capabilities 2>/dev/null']]; + } + + // === CLAWCODE === + if (preg_match('/claw.?code|gpt.?runner|code.weval|restart.*3900|port.*3900/i', $message)) { + $intents[] = ["name" => "ssh_exec", "desc" => "ClawCode GPT Runner status", "params" => ["cmd" => "echo === CLAWCODE === && ss -tlnp | grep 3900 && echo --- && curl -sf http://127.0.0.1:3900/ --max-time 3 | wc -c && echo bytes && echo --- && curl -sf https://code.weval-consulting.com --max-time 5 -o /dev/null -w 'HTTP %{http_code} %{size_download}B' && echo"]]; + } + if (preg_match('/restart.*claw|restart.*gpt|relance.*claw|fix.*claw|claw.*down/i', $message)) { + $intents[] = ["name" => "ssh_exec", "desc" => "Restart ClawCode GPT Runner", "params" => ["cmd" => "fuser -k 3900/tcp 2>/dev/null; sleep 2; cd /opt/claw-code && nohup node packages/gpt-runner-web/dist/start-server.cjs --port 3900 > /var/log/gpt-runner.log 2>&1 & sleep 4 && ss -tlnp | grep 3900 && echo RESTARTED || echo FAIL"]]; + } + + + // CREWAI + if (preg_match('/crew.?ai|multi.?agent|orchestr|equipe.*agent/i', $message)) { + $intents[] = ['name'=>'ssh_exec','desc'=>'CrewAI multi-agent','params'=>['cmd'=>'cd /opt/weval-crewai && CREWAI_TRACING_ENABLED=false timeout 45 python3 wevia-crew.py '.escapeshellarg($message).' 2>&1 | tail -30']]; + } + if (preg_match('/openclaw|open.claw/i', $message)) { $intents[] = ['name'=>'ssh_exec','desc'=>'OpenClaw','params'=>['cmd'=>'ls /opt/rnd-oh-my-claudecode/agents/*.md | wc -l && echo agents_available && curl -sf https://weval-consulting.com/openclaw.html -o /dev/null -w HTTP_%{http_code}_%{size_download}B']]; } + if (preg_match('/litellm|proxy.4001/i', $message)) { $intents[] = ['name'=>'ssh_exec','desc'=>'LiteLLM','params'=>['cmd'=>'ss -tlnp | grep 4001 && curl -sf http://127.0.0.1:4001/models --max-time 3']]; } + if (preg_match('/claude.code|pattern|memory.persist|context.compact/i', $message)) { $intents[] = ['name'=>'ssh_exec','desc'=>'Claude Code patterns','params'=>['cmd'=>'cat /opt/weval-l99/claude-code-to-wevia-mapping.json | python3 -c "import json,sys;d=json.load(sys.stdin);[(print(k,v[\"status\"])) for k,v in d[\"claude_code_to_wevia_mapping\"][\"patterns\"].items()]"']]; } // claude_code_patterns + if (preg_match('/qualit|sigma|lean|6.sigma|contrainte|bottleneck|dpmo/i', $message)) { $intents[] = ['name'=>'ssh_exec','desc'=>'6sigma quality','params'=>['cmd'=>'python3 /opt/weval-l99/wevia-quality-agent.py 2>&1 | tail -20']]; } // quality_agent + if (preg_match('/archi|architecture|composant|mapping|diagram/i', $message)) { $intents[] = ['name'=>'ssh_exec','desc'=>'Architecture','params'=>['cmd'=>'cat /var/www/html/api/wevia-architecture.json | python3 -c "import json,sys;d=json.load(sys.stdin);a=d[\"wevia_architecture\"];print(\"Engines:\",len(a[\"engines\"]),\"Agents:\",sum(v.get(\"agents\",0)for v in a[\"agents\"].values()),\"Proxies:\",len(a[\"proxies\"]),\"Tools:\",len(a[\"tools\"]))"']]; } + if (preg_match('/disk|espace|cleanup|nettoyer|purge|stockage/i', $message)) { $intents[] = ['name'=>'ssh_exec','desc'=>'Disk cleanup','params'=>['cmd'=>'df -h / && echo --- && du -sh /var/log/*.log 2>/dev/null | sort -rh | head -5 && echo --- && du -sh /tmp/* 2>/dev/null | sort -rh | head -5 && echo --- && docker system df 2>/dev/null']]; } // disk_cleanup + if (preg_match('/ssl|certificat|https|expir|letsencrypt/i', $message)) { $intents[] = ['name'=>'ssh_exec','desc'=>'SSL check','params'=>['cmd'=>'for d in weval-consulting.com code.weval-consulting.com ethica.weval-consulting.com; do echo "$d: $(echo | openssl s_client -connect $d:443 -servername $d 2>/dev/null | openssl x509 -noout -enddate 2>/dev/null)"; done']]; } // ssl_check + if (preg_match('/provider|fournisseur|cascade|ia.*status|model.*status/i', $message)) { $intents[] = ['name'=>'ssh_exec','desc'=>'Provider health','params'=>['cmd'=>'for p in fast think sovereign; do R=$(curl -sf -X POST http://127.0.0.1:4001/ -H "Content-Type:application/json" -d "{\"model\":\"$p\",\"messages\":[{\"role\":\"user\",\"content\":\"ping\"}]}" --max-time 8 2>/dev/null | wc -c); echo "$p: ${R}B"; done && curl -sf http://127.0.0.1:11435/api/tags --max-time 3 | python3 -c "import json,sys;print(len(json.load(sys.stdin)[\"models\"])),\"Ollama models\"" 2>/dev/null']]; } // provider_health + if (preg_match('/backup|gold|sauvegarde|vault|restore/i', $message)) { $intents[] = ['name'=>'ssh_exec','desc'=>'GOLD backup status','params'=>['cmd'=>'ls /opt/wevads/vault/gold-6avr-l99/ | wc -l && echo files && ls /opt/wevads/vault/ 2>/dev/null && echo --- && md5sum /opt/wevads/vault/gold-6avr-l99/checksums.md5 2>/dev/null | head -1']]; } // backup_gold + if (preg_match('/(hetzner.*snap|snapshot.*hetzner|list.*snapshot|snap.*list)/i', $message)) { $intents[] = ['name'=>'ssh_exec','desc'=>'Hetzner Snapshot Archiver','params'=>['cmd'=>'python3 /opt/weval-l99/wevia-snap-archiver.py list 2>&1']]; } // hetzner_snapshot + if (preg_match('/(archiv.*tout.*snap|snap.*tout.*git|recuper.*tout.*snap|archive.all.snap)/i', $message)) { $intents[] = ['name'=>'ssh_exec','desc'=>'Archive ALL snapshots to Git','params'=>['cmd'=>'echo python3 /opt/weval-l99/wevia-snap-archiver.py archive-remaining > /tmp/snap-archiver-cmd.sh && chmod +x /tmp/snap-archiver-cmd.sh && at now -f /tmp/snap-archiver-cmd.sh 2>&1 || (setsid python3 /opt/weval-l99/wevia-snap-archiver.sh 356887958 snap2-feb2026 Snap2-ADXSERVER-Feb2026 > /tmp/snap-archive-all.log 2>&1 & echo LAUNCHED_PID=$!)']]; } // hetzner_archive_all + if (preg_match('/(snap.*status|archiv.*status|progress.*snap|snap.*progress)/i', $message)) { $intents[] = ['name'=>'ssh_exec','desc'=>'Snapshot archive progress','params'=>['cmd'=>'python3 /opt/weval-l99/wevia-snap-archiver.py status 2>&1']]; } // hetzner_status + if (preg_match('/wiki|documentation|cherche.*doc|knowledge/i', $message)) { $intents[] = ['name'=>'ssh_exec','desc'=>'Wiki search','params'=>['cmd'=>'ls /opt/weval-l99/wiki/ 2>/dev/null | wc -l && echo wiki_entries && ls /opt/weval-l99/wiki/ 2>/dev/null | tail -5']]; } // wiki_search + if (preg_match('/nginx|domaine|vhost|reverse.proxy|site.*config/i', $message)) { $intents[] = ['name'=>'ssh_exec','desc'=>'Nginx status','params'=>['cmd'=>'nginx -T 2>/dev/null | grep server_name | sort -u && echo --- && nginx -t 2>&1']]; } // nginx_status + if (preg_match('/cron.*list|cron.*actif|tache.*planif|schedule/i', $message)) { $intents[] = ['name'=>'ssh_exec','desc'=>'Cron list','params'=>['cmd'=>'crontab -l | grep -v "^#" | grep . | wc -l && echo active_crons && crontab -l | grep -v "^#" | grep . | tail -15']]; } // cron_manage + if (preg_match('/git.*log|commit.*recent|historique.*git|deploy/i', $message)) { $intents[] = ['name'=>'ssh_exec','desc'=>'Git log','params'=>['cmd'=>'cd /var/www/html && git log --oneline -10']]; } // git_log + if (preg_match('/performance|load|cpu|ram|memoire|top|htop|lent|slow/i', $message)) { $intents[] = ['name'=>'ssh_exec','desc'=>'Performance','params'=>['cmd'=>'echo CPU:$(top -bn1 | grep Cpu | awk "{print \\$2}")% RAM:$(free -h | awk "NR==2{print \\$3}")used LOAD:$(cat /proc/loadavg | cut -d" " -f1-3) UPTIME:$(uptime -p)']]; } // perf_check + if (preg_match('/wevialife|wevia.life|email.*class|opportunit|risque|action/i', $message)) { $intents[] = ['name'=>'ssh_exec','desc'=>'WEVIA Life','params'=>['cmd'=>'curl -sf http://127.0.0.1/api/wevialife-api.php?action=stats --max-time 5 2>/dev/null || echo WEVIA_LIFE_DOWN']]; } // wevialife + if (preg_match('/o365|office|exchange|email.*compte|mailbox/i', $message)) { $intents[] = ['name'=>'ssh_exec','desc'=>'O365','params'=>['cmd'=>'echo O365_STATUS: 5 compromised accounts need password rotation: rodolftripp sfgb518 phyleciaamato kamrynnbonilla jolineweatherly']]; } // o365_accounts + if (preg_match('/urgent|pending|todo|action.*item|rappel|a.faire/i', $message)) { $intents[] = ['name'=>'ssh_exec','desc'=>'Urgent items','params'=>['cmd'=>'echo URGENT_PENDING && echo 1.GitHub_PAT_expires_April_15 && echo 2.WhatsApp_token_expired_April_2 && echo 3.O365_5_accounts_compromised && echo 4.Blade_Sentinel_offline']]; } // urgent_pending + if (preg_match('/searxng|search.*engine|moteur.*recherche|sovereign.*search/i', $message)) { $intents[] = ['name'=>'ssh_exec','desc'=>'SearXNG','params'=>['cmd'=>'curl -sf http://127.0.0.1:8080/ --max-time 3 -o /dev/null -w HTTP_%{http_code} && echo SearXNG_UP']]; } // searxng + if (preg_match('/qdrant|rag|vector|embedding|semantic|collection/i', $message)) { $intents[] = ['name'=>'ssh_exec','desc'=>'Qdrant RAG','params'=>['cmd'=>'curl -sf http://127.0.0.1:6333/collections --max-time 3 | python3 -c "import json,sys;d=json.load(sys.stdin);[(print(c[\"name\"],c.get(\"points_count\",\"?\"))) for c in d[\"result\"][\"collections\"]]"']]; } // qdrant_rag + if (preg_match('/paperclip|ceo|pipeline|lead|opportunit|prospect/i', $message)) { $intents[] = ['name'=>'ssh_exec','desc'=>'Paperclip CEO','params'=>['cmd'=>'PGPASSWORD=admin123 psql -h 127.0.0.1 -U admin -d adx_system -c "SELECT count(*) as total FROM paperclip.opportunities" -t 2>/dev/null && echo opportunities']]; } // paperclip_ceo + if (preg_match('/wevads|arsenal|sentinel|s95|adx/i', $message)) { $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', $message)) { $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', $message)) { $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('/REMOVED|sso|auth.*flow|REMOVED|login.*page/i', $message)) { $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', $message)) { $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', $message)) { $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', $message)) { $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', $message)) { $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', $message)) { $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', $message)) { $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', $message)) { $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', $message)) { $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', $message)) { $intents[] = ['name'=>'ssh_exec','desc'=>'PPTX gen','params'=>['cmd'=>'python3 -c "import pptx;print(\"python-pptx OK\")" 2>&1']]; } // pptx_generate + if (preg_match('/ocr|scan.*texte|extraire.*texte|reconnaissance.*caractere/i', $message)) { $intents[] = ['name'=>'ssh_exec','desc'=>'OCR','params'=>['cmd'=>'tesseract --version 2>&1 | head -1 && tesseract --list-langs 2>&1 | head -5']]; } // ocr_scan + if (preg_match('/screenshot|capture.*ecran|snapshot.*page|preview.*site/i', $message)) { $intents[] = ['name'=>'ssh_exec','desc'=>'Screenshot','params'=>['cmd'=>'python3 -c "from playwright.sync_api import sync_playwright;print(\"Playwright OK\")" 2>&1 | head -1']]; } // screenshot_page + if (preg_match('/chart|graphique|camembert|histogramme|courbe|bar.*chart|pie.*chart/i', $message)) { $intents[] = ['name'=>'ssh_exec','desc'=>'Chart gen','params'=>['cmd'=>'python3 -c "import matplotlib;print(\"matplotlib\",matplotlib.__version__)" 2>&1']]; } // chart_generate + if (preg_match('/scrape|scraping|extraire.*web|crawler|spider/i', $message)) { $intents[] = ['name'=>'ssh_exec','desc'=>'Web scrape','params'=>['cmd'=>'python3 -c "import scrapy;print(\"Scrapy\",scrapy.__version__)" 2>&1 && curl -sf http://127.0.0.1:8080/ --max-time 2 -o /dev/null -w SearXNG_HTTP_%{http_code}']]; } // web_scrape + if (preg_match('/genere.*fichier|generate.*file|export.*rapport|download.*pdf|telecharge/i', $message)) { $intents[] = ['name'=>'ssh_exec','desc'=>'FileGen API','params'=>['cmd'=>'curl -sf http://127.0.0.1/api/wevia-filegen.php --max-time 3 && echo FileGen_API_OK']]; } // filegen_api + if (preg_match('/obsidian|vault|markdown.*knowledge|note.*manage|pkm|second.*brain|zettelkasten/i', $message)) { $intents[] = ['name'=>'ssh_exec','desc'=>'Obsidian','params'=>['cmd'=>'ls /opt/antigravity-awesome-skills/skills/obsidian-* | head -5 && echo --- && ls /opt/weval-l99/wiki/ | wc -l && echo wiki_entries']]; } // obsidian_vault + if (preg_match('/n8n.*flow|workflow.*list|automation.*active/i', $message)) { $intents[] = ['name'=>'ssh_exec','desc'=>'N8N flows','params'=>['cmd'=>'curl -sf http://127.0.0.1:5678/api/v1/workflows --max-time 5 -H "Accept: application/json" 2>/dev/null | python3 -c "import json,sys;d=json.load(sys.stdin);print(len(d.get(\"data\",[])),\"workflows\")" 2>/dev/null || echo N8N_API_AUTH_NEEDED']]; } // n8n_flows + if (preg_match('/framework|methodologie|bmc|canvas|raci|okr|sprint|backlog|roadmap|persona|user.*story|risk.*register|decision.*matrix/i', $message)) { $intents[] = ['name'=>'ssh_exec','desc'=>'Frameworks','params'=>['cmd'=>'echo FRAMEWORKS_AVAILABLE: BMC OKR RACI SWOT PESTEL Porter Ishikawa Pareto A3 DMAIC VSM Kaizen Sprint_Planning User_Stories Persona Risk_Register Decision_Matrix Roadmap Gantt BPMN UML Sequence']]; } // frameworks_all + if (preg_match('/deploy|deploie|mise.*prod|restart.*service|reload.*nginx|systemctl/i', $message)) { $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', $message)) { $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', $message)) { $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', $message)) { $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', $message)) { $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', $message)) { $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', $message)) { $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 + return $intents; +} + +function executeIntent($intent) { + switch ($intent['name']) { + case 'ssh_exec': + $cmd = $intent['params']['cmd'] ?? 'hostname'; + return preg_replace('/[\x00-\x08\x0B\x0C\x0E-\x1F]/', '', trim(shell_exec('timeout 10 ' . $cmd . ' 2>&1') ?? '')); + + case 'email': + return ['action' => 'email_ready', 'to' => $intent['params']['to'], 'note' => 'Email prêt à envoyer. Confirmez le contenu.']; + + case 'file_read': + $path = $intent['params']['path']; + if (!file_exists($path)) return "Fichier non trouvé: $path"; + return substr(file_get_contents($path), 0, 3000); + + case 'file_browse': + $path = $intent['params']['path']; + $out = shell_exec('ls -la ' . escapeshellarg($path) . ' 2>&1 | head -20'); + return mb_convert_encoding(trim($out ?? ''), 'UTF-8', 'UTF-8'); + case 'UNUSED_file_browse': + $path = $intent['params']['path']; + return shell_exec('ls -la ' . escapeshellarg($path) . ' 2>&1 | head -25'); + + case 'search': + $q = $intent['params']['q']; + $ch = curl_init("http://127.0.0.1:8888/search?q=" . urlencode($q) . "&format=json&limit=5&safesearch=2&engines=google,bing,duckduckgo"); + curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER => true, CURLOPT_USERAGENT => 'WEVIA/1.0', CURLOPT_TIMEOUT => 10]); + $r = curl_exec($ch); curl_close($ch); + $d = json_decode($r, true); + $results = []; + foreach (($d['results'] ?? []) as $res) { + $results[] = $res['title'] . ' — ' . ($res['url'] ?? ''); + } + return implode("\n", $results) ?: 'Aucun résultat'; + + + case 'doc_generate': + $type = $intent['params']['type'] ?? 'txt'; + $fname = 'weval-doc-' . date('Ymd-His') . '.' . $type; + $path = '/var/www/html/api/exports/' . $fname; + @mkdir(dirname($path), 0777, true); + // LLM will generate content, we create placeholder + file_put_contents($path, "Document WEVAL - genere par WEVIA Master\n" . date('Y-m-d H:i:s')); + return ['status' => 'ready', 'file' => $fname, 'download' => 'https://weval-consulting.com/api/exports/' . $fname, 'note' => 'Document pret. Le contenu sera genere par le LLM.']; + + case 'code_run': + $lang = $intent['params']['lang'] ?? 'bash'; + $code = $intent['params']['code'] ?? ''; + $tmp = tempnam('/tmp', 'wc_'); + if ($lang === 'php') { file_put_contents($tmp, '&1'); } + elseif ($lang === 'python') { file_put_contents($tmp, $code); $out = shell_exec('python3 ' . escapeshellarg($tmp) . ' 2>&1'); } + else { $out = shell_exec($code . ' 2>&1'); } + @unlink($tmp); + return ['output' => substr($out ?? '', 0, 3000), 'lang' => $lang]; + + case 'email_send': + $to = $intent['params']['to'] ?? ''; + if (empty($to)) return ['error' => 'no recipient']; + return ['status' => 'draft', 'to' => $to, 'note' => 'Email pret. Confirmez sujet et contenu.']; + + case 'url_analyze': + $url = $intent['params']['url'] ?? ''; + $headers = shell_exec('curl -sf -I ' . escapeshellarg($url) . ' 2>&1 | head -15'); + $title = shell_exec('curl -sf ' . escapeshellarg($url) . ' 2>&1 | grep -oP "(?<=).*?(?=)" | head -1'); + return ['url' => $url, 'headers' => $headers, 'title' => trim($title ?? '')]; + + case 'code_exec': + return ['note' => 'Code détecté. Utilisez wevia_code pour exécuter.']; + + case 'excel': + return ['note' => 'Export demandé. Précisez les données à exporter.']; + + default: + return ['error' => 'intent not handled: ' . $intent['name']]; + } +} + +function recallMemory($message) { + $ch = curl_init('http://127.0.0.1:11435/api/embeddings'); + curl_setopt_array($ch, [CURLOPT_POST=>true, CURLOPT_POSTFIELDS=>json_encode(['model'=>'all-minilm','prompt'=>$msg]), + CURLOPT_HTTPHEADER=>['Content-Type: application/json'], CURLOPT_RETURNTRANSFER=>true, CURLOPT_TIMEOUT=>5]); + $r = curl_exec($ch); curl_close($ch); + $vec = json_decode($r, true)['embedding'] ?? null; + if (!$vec) return ''; + + $ch2 = curl_init('http://127.0.0.1:6333/collections/wevia_memory/points/search'); + curl_setopt_array($ch2, [CURLOPT_POST=>true, CURLOPT_POSTFIELDS=>json_encode(['vector'=>$vec,'limit'=>3,'with_payload'=>true]), + CURLOPT_HTTPHEADER=>['Content-Type: application/json'], CURLOPT_RETURNTRANSFER=>true, CURLOPT_TIMEOUT=>3]); + $r2 = curl_exec($ch2); curl_close($ch2); + $pts = json_decode($r2, true)['result'] ?? []; + + $ctx = ''; + foreach ($pts as $p) { + if ($p['score'] > 0.3) { + $ctx .= "- [{$p['payload']['key']}] {$p['payload']['value']}\n"; + } + } + return $ctx; +} + +function queryRAG($message) { + if (strlen($message) < 15) return ''; + $ch = curl_init('http://127.0.0.1:11435/api/embeddings'); + curl_setopt_array($ch, [CURLOPT_POST=>true, CURLOPT_POSTFIELDS=>json_encode(['model'=>'all-minilm','prompt'=>$msg]), + CURLOPT_HTTPHEADER=>['Content-Type: application/json'], CURLOPT_RETURNTRANSFER=>true, CURLOPT_TIMEOUT=>5]); + $r = curl_exec($ch); curl_close($ch); + $vec = json_decode($r, true)['embedding'] ?? null; + if (!$vec) return ''; + + $ch2 = curl_init('http://127.0.0.1:6333/collections/weval_skills/points/search'); + curl_setopt_array($ch2, [CURLOPT_POST=>true, CURLOPT_POSTFIELDS=>json_encode(['vector'=>$vec,'limit'=>5,'with_payload'=>true]), + CURLOPT_HTTPHEADER=>['Content-Type: application/json'], CURLOPT_RETURNTRANSFER=>true, CURLOPT_TIMEOUT=>3]); + $r2 = curl_exec($ch2); curl_close($ch2); + $pts = json_decode($r2, true)['result'] ?? []; + + $ctx = ''; + foreach ($pts as $p) { + $text = $p['payload']['text'] ?? $p['payload']['content'] ?? ''; + if ($text) $ctx .= substr($text, 0, 300) . "\n"; + } + return $ctx; +} + +function streamLLM($system, $userMsg, $history) { + $secrets = []; + foreach (file('/etc/weval/secrets.env', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES) as $line) { + if (empty(trim($line)) || $line[0] === '#') continue; + $pos = strpos($line, '='); + if ($pos) $secrets[trim(substr($line, 0, $pos))] = trim(substr($line, $pos + 1), " \t\"'"); + } + + $messages = [['role' => 'system', 'content' => $system]]; + foreach (array_slice($history, -6) as $h) { + $messages[] = ['role' => $h['role'], 'content' => $h['content']]; + } + $messages[] = ['role' => 'user', 'content' => $userMsg]; + + $providers = [ + // === LOCAL SOUVERAIN (0 rate limit, 0 cost) === + ['url'=>'http://127.0.0.1:11435/v1/chat/completions','key'=>'ollama','model'=>'gemma4:e4b'], + ['url'=>'http://127.0.0.1:11435/v1/chat/completions','key'=>'ollama','model'=>'qwen3:8b'], + ['url'=>'http://127.0.0.1:11435/v1/chat/completions','key'=>'ollama','model'=>'glm4:9b'], + ['url'=>'http://127.0.0.1:11435/v1/chat/completions','key'=>'ollama','model'=>'qwen3:4b'], + ['url'=>'http://127.0.0.1:11435/v1/chat/completions','key'=>'ollama','model'=>'deepseek-r1:7b'], + // === CLOUD BACKUP (si local down) === + ['url'=>'https://router.huggingface.co/v1/chat/completions','key'=>'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','model'=>'Qwen/Qwen2.5-72B-Instruct'], + ['url'=>'https://api.groq.com/openai/v1/chat/completions','key'=>$secrets['GROQ_KEY']??'','model'=>'llama3.1-8b-versatile'], + ['url'=>'https://api.mistral.ai/v1/chat/completions','key'=>$secrets['MISTRAL_KEY']??'','model'=>'mistral-small-latest'], + ['url'=>'https://integrate.api.nvidia.com/v1/chat/completions','key'=>$secrets['NVIDIA_NIM_KEY']??'','model'=>'nvidia/llama-3.3-nemotron-super-49b-v1'], + ['url'=>'https://api.cerebras.ai/v1/chat/completions','key'=>$secrets['CEREBRAS_KEY_2']??'','model'=>'llama3.1-8b'], + ]; + + foreach ($providers as $prov) { + if (empty($prov['key'])) continue; + + // Claude Code CLI: non-streaming fallback + if (isset($prov['is_claude_code'])) { + $prompt = end($messages)['content'] ?? ''; + $escaped = escapeshellarg($prompt); + $model = $prov['model'] === 'claude-opus' ? 'claude-opus-4-6' : 'claude-sonnet-4-20250514'; + $out = shell_exec("timeout 25 claude --model $model -p $escaped 2>/dev/null"); + if ($out && strlen(trim($out)) > 5) { + echo "data: " . json_encode(['type'=>'token','content'=>trim($out)]) . "\n\n"; + echo "data: " . json_encode(['type'=>'done','provider'=>'claude-code']) . "\n\n"; + flush(); + exit; + } + continue; + } + + $ch = curl_init($prov['url']); + curl_setopt_array($ch, [ + CURLOPT_POST => true, + CURLOPT_POSTFIELDS => json_encode(isset($prov['is_anthropic']) ? [ + 'model' => $prov['model'], + 'messages' => array_values(array_filter($messages, function($m){return $m['role']!=='system';})), + 'system' => implode(' ', array_map(function($m){return $m['content'];}, array_filter($messages, function($m){return $m['role']==='system';}))), + 'max_tokens' => 8192, + 'stream' => true, + ] : [ + 'model' => $prov['model'], + 'messages' => $messages, + 'max_tokens' => 8192, + 'temperature' => 0.4, + 'stream' => true, + ]), + CURLOPT_HTTPHEADER => isset($prov['is_anthropic']) ? ['Content-Type: application/json', 'x-api-key: ' . $prov['key'], 'anthropic-version: 2023-06-01'] : ['Content-Type: application/json', 'Authorization: Bearer ' . $prov['key']], + CURLOPT_RETURNTRANSFER => false, + CURLOPT_TIMEOUT => 90, + CURLOPT_WRITEFUNCTION => function($ch, $data) use ($prov) { + $lines = explode("\n", $data); + foreach ($lines as $line) { + $line = trim($line); + if (empty($line) || $line === 'data: [DONE]') continue; + if (strpos($line, 'data: ') !== 0) continue; + $json = json_decode(substr($line, 6), true); + $content = $json['choices'][0]['delta']['content'] ?? ''; + if ($content !== '') { + emit('token', ['content' => $content]); + } + } + return strlen($data); + }, + ]); + + emit('start', ['provider' => basename(parse_url($prov['url'], PHP_URL_HOST), '.com'), 'model' => $prov['model']]); + $start = microtime(true); + curl_exec($ch); + $code = curl_getinfo($ch, CURLINFO_HTTP_CODE); + curl_close($ch); + + if ($code === 200) { + emit('done', ['latency_ms' => round((microtime(true) - $start) * 1000)]); + return; + } + } + + emit('error', ['message' => 'All providers failed']); +} diff --git a/api/wevia-autonomy-status.json b/api/wevia-autonomy-status.json index 7fa4198db..614305d0d 100644 --- a/api/wevia-autonomy-status.json +++ b/api/wevia-autonomy-status.json @@ -1,8 +1,8 @@ { - "timestamp": "2026-04-13 18:25:01", + "timestamp": "2026-04-13 18:35:01", "version": "1.0", "disk": 65, - "ram": 28, + "ram": 26, "docker": 16, "ssl_days": 357, "ollama_models": 0, @@ -14,28 +14,28 @@ "title": "Restart ollama", "cmd": "systemctl restart ollama", "output": "", - "time": "18:25:01" + "time": "18:35:01" } ], "alerts": [ { "level": "critical", "msg": "S204:ollama DOWN (:11435)", - "time": "18:25:01" + "time": "18:35:01" }, { "level": "critical", "msg": "S204:authentik DOWN (:9090)", - "time": "18:25:01" + "time": "18:35:01" } ], "log": [ - "18:25:01 AUTO-FIX: Restart ollama", - "18:25:01 Disk: 65%", - "18:25:01 SSL: 357d remaining", - "18:25:01 Docker: 16 containers", - "18:25:01 RAM: 28%", - "18:25:01 Arch score: 100\/100" + "18:35:01 AUTO-FIX: Restart ollama", + "18:35:01 Disk: 65%", + "18:35:01 SSL: 357d remaining", + "18:35:01 Docker: 16 containers", + "18:35:01 RAM: 26%", + "18:35:01 Arch score: 100\/100" ], "s204_services": 8, "s95_mta": 5 diff --git a/api/wevia-blade-status.json b/api/wevia-blade-status.json index 6bb796542..ac227530a 100644 --- a/api/wevia-blade-status.json +++ b/api/wevia-blade-status.json @@ -1 +1 @@ -{"ts":"20:30","status":"online","cpu":"56%","ram":"91%","ip":"160.177.167.67","uptime":"1d 2h","pending":9,"via":"heartbeat"} +{"ts":"20:38","status":"offline"} diff --git a/api/wevia-nonreg-results.json b/api/wevia-nonreg-results.json index d2b665da5..680435621 100644 --- a/api/wevia-nonreg-results.json +++ b/api/wevia-nonreg-results.json @@ -1,16 +1,11 @@ { - "date": "2026-04-13 18:15:01", - "score": "5\/13 (38.5%)", - "passed": 5, - "failed": 8, + "date": "2026-04-13 18:30:01", + "score": "7\/13 (53.8%)", + "passed": 7, + "failed": 6, "total": 13, - "regressions": [ - "eng:Compare", - "api:Dark" - ], - "auto_fixes": [ - "reload php" - ], + "regressions": [], + "auto_fixes": [], "tests": [ { "name": "eng:LLM", @@ -39,8 +34,8 @@ }, { "name": "eng:Compare", - "ok": false, - "detail": "0t 0a" + "ok": true, + "detail": "123t 3a" }, { "name": "api:Dream", @@ -49,8 +44,8 @@ }, { "name": "api:Dark", - "ok": false, - "detail": "HTTP520" + "ok": true, + "detail": "HTTP200" }, { "name": "api:Eco", diff --git a/api/wevia-pilot-status.json b/api/wevia-pilot-status.json index 0e4aa73b9..b726425a3 100644 --- a/api/wevia-pilot-status.json +++ b/api/wevia-pilot-status.json @@ -1,2 +1,2 @@ -{"ts":"20:20","disk":"65%","swap":"38%","docker_dead":"none","http":"200","ssl":"Certificate will not expire +{"ts":"20:30","disk":"65%","swap":"37%","docker_dead":"none","http":"200","ssl":"Certificate will not expire ok","alerts":"none","crons":58} diff --git a/api/wevia-quality-status.json b/api/wevia-quality-status.json index b52a0a942..021d0a5a0 100644 --- a/api/wevia-quality-status.json +++ b/api/wevia-quality-status.json @@ -1,5 +1,5 @@ { - "timestamp": "2026-04-13 18:20:13", + "timestamp": "2026-04-13 18:30:10", "healthy": false, "global_pass": 280, "global_fail": 13, @@ -34,8 +34,8 @@ "total": 93 }, "chat_monitor": { - "pass": 3, - "fail": 0, + "pass": 2, + "fail": 1, "total": 3, "caps": { "Lean Six Sigma": { @@ -49,9 +49,9 @@ "json": true }, "SearXNG": { - "ok": true, - "code": 200, - "json": true + "ok": false, + "code": 429, + "json": false } } }, @@ -64,9 +64,9 @@ "score": 100 }, "chatbot_post": { - "healthy": true, - "provider": "Gemini 2.5 Flash", - "code": 200 + "healthy": false, + "provider": "none", + "code": 0 }, "regression_scan": { "ok": 250, @@ -85,8 +85,10 @@ "NonReg: 2 failures ()", "Full NonReg: 9\/28 failures (68%)", "L99 Command: 2 failures", + "Chat Monitor: 1 capabilities returning non-JSON", "Auth Agent: unhealthy", + "Chatbot POST: returning maintenance\/crash (provider cascade broken)", "L99 Mission: 2 failures (QUALITY, ssl)" ], - "issues_count": 5 + "issues_count": 7 } \ No newline at end of file diff --git a/api/wevia-register.json b/api/wevia-register.json index 933b26c24..daa49bc8c 100644 --- a/api/wevia-register.json +++ b/api/wevia-register.json @@ -2,9 +2,15 @@ "tests": [ { "layer": "PHP-API", - "name": "417/417 syntax OK", - "status": "P", - "detail": "0 errors" + "name": "_fix_spinner.php", + "status": "F", + "detail": "Errors parsing /var/www/html/api/_fix_spinner.php" + }, + { + "layer": "PHP-API", + "name": "420/421 syntax OK", + "status": "F", + "detail": "1 errors" }, { "layer": "PHP-BRAIN", @@ -22,7 +28,7 @@ "layer": "CRON", "name": "quality", "status": "F", - "detail": "180min ago" + "detail": "420min ago" }, { "layer": "CRON", @@ -39,14 +45,14 @@ { "layer": "CRON", "name": "control-tower", - "status": "P", - "detail": "90min ago" + "status": "F", + "detail": "150min ago" }, { "layer": "CRON", "name": "l99-ux", "status": "F", - "detail": "180min ago" + "detail": "150min ago" }, { "layer": "CRON", @@ -100,25 +106,25 @@ "layer": "JSON", "name": "l99-analysis.json", "status": "P", - "detail": "valid 16h ago" + "detail": "valid 20h ago" }, { "layer": "JSON", "name": "l99-artifacts-index.json", "status": "F", - "detail": "valid 71h ago" + "detail": "valid 75h ago" }, { "layer": "JSON", "name": "l99-auth-results.json", "status": "F", - "detail": "valid 90h ago" + "detail": "valid 94h ago" }, { "layer": "JSON", "name": "l99-auth-selenium-results.json", "status": "F", - "detail": "valid 65h ago" + "detail": "valid 69h ago" }, { "layer": "JSON", @@ -130,253 +136,253 @@ "layer": "JSON", "name": "l99-autonomous-prev.json", "status": "F", - "detail": "valid 68h ago" + "detail": "valid 72h ago" }, { "layer": "JSON", "name": "l99-autonomous-report.json", "status": "P", - "detail": "valid 15h ago" + "detail": "valid 19h ago" }, { "layer": "JSON", "name": "l99-brain-chat-test.json", "status": "F", - "detail": "valid 54h ago" + "detail": "valid 58h ago" }, { "layer": "JSON", "name": "l99-chat-user-state.json", "status": "F", - "detail": "valid 42h ago" + "detail": "valid 46h ago" }, { "layer": "JSON", "name": "l99-dark-results.json", "status": "F", - "detail": "valid 72h ago" + "detail": "valid 76h ago" }, { "layer": "JSON", "name": "l99-deep-scan.json", "status": "F", - "detail": "valid 98h ago" + "detail": "valid 102h ago" }, { "layer": "JSON", "name": "l99-deep-test-result.json", "status": "F", - "detail": "valid 39h ago" + "detail": "valid 43h ago" }, { "layer": "JSON", "name": "l99-deep-test.json", "status": "F", - "detail": "valid 54h ago" + "detail": "valid 58h ago" }, { "layer": "JSON", "name": "l99-deep.json", "status": "F", - "detail": "valid 178h ago" + "detail": "valid 182h ago" }, { "layer": "JSON", "name": "l99-e2e-report.json", "status": "F", - "detail": "valid 137h ago" + "detail": "valid 141h ago" }, { "layer": "JSON", "name": "l99-enterprise-test.json", "status": "F", - "detail": "valid 156h ago" + "detail": "valid 160h ago" }, { "layer": "JSON", "name": "l99-exhaustive.json", "status": "F", - "detail": "valid 48h ago" + "detail": "valid 52h ago" }, { "layer": "JSON", "name": "l99-full-results.json", "status": "F", - "detail": "valid 65h ago" + "detail": "valid 69h ago" }, { "layer": "JSON", "name": "l99-functional-result.json", "status": "F", - "detail": "valid 40h ago" + "detail": "valid 44h ago" }, { "layer": "JSON", "name": "l99-godmode-results.json", "status": "F", - "detail": "valid 44h ago" + "detail": "valid 48h ago" }, { "layer": "JSON", "name": "l99-meeting-results.json", "status": "F", - "detail": "valid 178h ago" + "detail": "valid 182h ago" }, { "layer": "JSON", "name": "l99-mega-benchmark.json", "status": "P", - "detail": "valid 16h ago" + "detail": "valid 20h ago" }, { "layer": "JSON", "name": "l99-mega-check.json", "status": "P", - "detail": "valid 4h ago" + "detail": "valid 8h ago" }, { "layer": "JSON", "name": "l99-mega-latest.json", "status": "P", - "detail": "valid 16h ago" + "detail": "valid 20h ago" }, { "layer": "JSON", "name": "l99-mega-results.json", "status": "F", - "detail": "valid 72h ago" + "detail": "valid 76h ago" }, { "layer": "JSON", "name": "l99-opus-parity.json", "status": "F", - "detail": "valid 68h ago" + "detail": "valid 72h ago" }, { "layer": "JSON", "name": "l99-pw-integration.json", "status": "F", - "detail": "valid 67h ago" + "detail": "valid 71h ago" }, { "layer": "JSON", "name": "l99-pw-master.json", "status": "F", - "detail": "valid 67h ago" + "detail": "valid 71h ago" }, { "layer": "JSON", "name": "l99-pw-public.json", "status": "F", - "detail": "valid 67h ago" + "detail": "valid 71h ago" }, { "layer": "JSON", "name": "l99-registry.json", "status": "F", - "detail": "valid 48h ago" + "detail": "valid 52h ago" }, { "layer": "JSON", "name": "l99-results.json", "status": "F", - "detail": "valid 98h ago" + "detail": "valid 102h ago" }, { "layer": "JSON", "name": "l99-route-test.json", "status": "F", - "detail": "valid 156h ago" + "detail": "valid 160h ago" }, { "layer": "JSON", "name": "l99-security.json", "status": "P", - "detail": "valid 4h ago" + "detail": "valid 2h ago" }, { "layer": "JSON", "name": "l99-semantic-report.json", "status": "F", - "detail": "valid 48h ago" + "detail": "valid 52h ago" }, { "layer": "JSON", "name": "l99-semantic-result.json", "status": "P", - "detail": "valid 4h ago" + "detail": "valid 8h ago" }, { "layer": "JSON", "name": "l99-state.json", "status": "P", - "detail": "valid 15h ago" + "detail": "valid 19h ago" }, { "layer": "JSON", "name": "l99-systematic.json", "status": "F", - "detail": "valid 41h ago" + "detail": "valid 45h ago" }, { "layer": "JSON", "name": "l99-ultimate.json", "status": "F", - "detail": "valid 65h ago" + "detail": "valid 69h ago" }, { "layer": "JSON", "name": "l99-ux-results.json", "status": "P", - "detail": "valid 5h ago" + "detail": "valid 9h ago" }, { "layer": "JSON", "name": "l99-visual-analysis.json", "status": "F", - "detail": "valid 178h ago" + "detail": "valid 182h ago" }, { "layer": "JSON", "name": "l99-visual-extended-result.json", "status": "F", - "detail": "valid 42h ago" + "detail": "valid 46h ago" }, { "layer": "JSON", "name": "l99-visual-result.json", "status": "F", - "detail": "valid 44h ago" + "detail": "valid 48h ago" }, { "layer": "JSON", "name": "l99-visual-results.json", "status": "F", - "detail": "valid 100h ago" + "detail": "valid 104h ago" }, { "layer": "JSON", "name": "l99-watchdog.json", "status": "F", - "detail": "valid 40h ago" + "detail": "valid 44h ago" }, { "layer": "JSON", "name": "wevia-actions-log.json", "status": "F", - "detail": "valid 156h ago" + "detail": "valid 160h ago" }, { "layer": "JSON", "name": "wevia-actions-status.json", "status": "F", - "detail": "valid 156h ago" + "detail": "valid 160h ago" }, { "layer": "JSON", "name": "wevia-agents-pack-status.json", "status": "P", - "detail": "valid 15h ago" + "detail": "valid 19h ago" }, { "layer": "JSON", @@ -388,7 +394,7 @@ "layer": "JSON", "name": "wevia-architecture.json", "status": "F", - "detail": "valid 156h ago" + "detail": "valid 160h ago" }, { "layer": "JSON", @@ -400,7 +406,7 @@ "layer": "JSON", "name": "wevia-autodoc.json", "status": "F", - "detail": "valid 156h ago" + "detail": "valid 160h ago" }, { "layer": "JSON", @@ -418,79 +424,79 @@ "layer": "JSON", "name": "wevia-capabilities.json", "status": "F", - "detail": "valid 98h ago" + "detail": "valid 102h ago" }, { "layer": "JSON", "name": "wevia-capability-test.json", "status": "F", - "detail": "valid 97h ago" + "detail": "valid 101h ago" }, { "layer": "JSON", "name": "wevia-cascade-config.json", "status": "F", - "detail": "valid 83h ago" + "detail": "valid 87h ago" }, { "layer": "JSON", "name": "wevia-control-tower.json", "status": "P", - "detail": "valid 16h ago" + "detail": "valid 20h ago" }, { "layer": "JSON", "name": "wevia-daily-report.json", "status": "P", - "detail": "valid 10h ago" + "detail": "valid 14h ago" }, { "layer": "JSON", "name": "wevia-fleet-status.json", "status": "F", - "detail": "valid 159h ago" + "detail": "valid 163h ago" }, { "layer": "JSON", "name": "wevia-gap-analysis.json", "status": "F", - "detail": "valid 98h ago" + "detail": "valid 102h ago" }, { "layer": "JSON", "name": "wevia-gap-filler-results.json", "status": "P", - "detail": "valid 16h ago" + "detail": "valid 20h ago" }, { "layer": "JSON", "name": "wevia-live-context.json", "status": "F", - "detail": "valid 67h ago" + "detail": "valid 71h ago" }, { "layer": "JSON", "name": "wevia-manifest.json", "status": "F", - "detail": "valid 156h ago" + "detail": "valid 160h ago" }, { "layer": "JSON", "name": "wevia-master-brain.json", - "status": "F", - "detail": "valid 101h ago" + "status": "P", + "detail": "valid 2h ago" }, { "layer": "JSON", "name": "wevia-master-test-results.json", "status": "F", - "detail": "valid 97h ago" + "detail": "valid 101h ago" }, { "layer": "JSON", "name": "wevia-meeting-report.json", "status": "P", - "detail": "valid 16h ago" + "detail": "valid 20h ago" }, { "layer": "JSON", @@ -502,7 +508,7 @@ "layer": "JSON", "name": "wevia-page-scan.json", "status": "F", - "detail": "valid 156h ago" + "detail": "valid 160h ago" }, { "layer": "JSON", @@ -526,7 +532,7 @@ "layer": "JSON", "name": "wevia-quality.json", "status": "F", - "detail": "valid 159h ago" + "detail": "valid 163h ago" }, { "layer": "JSON", @@ -538,7 +544,7 @@ "layer": "JSON", "name": "wevia-regression-status.json", "status": "F", - "detail": "valid 179h ago" + "detail": "valid 183h ago" }, { "layer": "JSON", @@ -550,49 +556,43 @@ "layer": "JSON", "name": "wevia-sso-guardian.json", "status": "F", - "detail": "valid 157h ago" + "detail": "valid 161h ago" }, { "layer": "JSON", "name": "wevia-standup-latest.json", "status": "F", - "detail": "valid 161h ago" + "detail": "valid 165h ago" }, { "layer": "JSON", "name": "wevia-systematic-last.json", "status": "P", - "detail": "valid 16h ago" + "detail": "valid 20h ago" }, { "layer": "JSON", "name": "wevia-systematic-status.json", "status": "P", - "detail": "valid 15h ago" + "detail": "valid 19h ago" }, { "layer": "JSON", "name": "wevia-tool-registry.json", "status": "P", - "detail": "valid 2h ago" + "detail": "valid 0h ago" }, { "layer": "JSON", "name": "wevia-ux-audit.json", "status": "F", - "detail": "valid 156h ago" + "detail": "valid 160h ago" }, { "layer": "JSON", "name": "wevia-wiki-entries.json", "status": "F", - "detail": "valid 54h ago" - }, - { - "layer": "N8N", - "name": "check", - "status": "F", - "detail": "error" + "detail": "valid 58h ago" }, { "layer": "PIPELINE", @@ -654,12 +654,6 @@ "status": "P", "detail": "exists" }, - { - "layer": "DOCKER", - "name": "n8n", - "status": "P", - "detail": "running" - }, { "layer": "DOCKER", "name": "gitea", @@ -758,9 +752,9 @@ }, { "layer": "PORTS", - "name": "S204 55 ports", + "name": "S204 52 ports", "status": "P", - "detail": "55 listening" + "detail": "52 listening" }, { "layer": "DB", @@ -781,20 +775,20 @@ "detail": "65 tables" } ], - "timestamp": "2026-04-13T16:30:02.656274", + "timestamp": "2026-04-13T20:30:01.817799", "type": "register", - "pass": 70, - "fail": 60, + "pass": 68, + "fail": 61, "warn": 0, - "total": 130, - "pct": 53.8, + "total": 129, + "pct": 52.7, "inventory": { - "api_php": 417, + "api_php": 421, "brain_php": 15, "crons": 14, "json_status": 38, "pipelines": 10, "docker": 1, - "ports": 55 + "ports": 52 } } \ No newline at end of file diff --git a/api/wevia-selfmanage.json b/api/wevia-selfmanage.json index da857f634..f11e37f89 100644 --- a/api/wevia-selfmanage.json +++ b/api/wevia-selfmanage.json @@ -1 +1 @@ -{"ts": "20:25", "status": "ok"} \ No newline at end of file +{"ts": "20:35", "status": "ok"} \ No newline at end of file diff --git a/api/wevia-tool-registry.json b/api/wevia-tool-registry.json index 46b8f014b..5de902f92 100644 --- a/api/wevia-tool-registry.json +++ b/api/wevia-tool-registry.json @@ -202,7 +202,7 @@ }, { "id": "git_dirty", - "kw": "dirty|git.*status|fichier.*modif", + "kw": "dirty|git.*status|fichier.*modif|git.*changed", "api": "master", "msg": "git dirty files" }, @@ -1142,7 +1142,7 @@ }, { "id": "git_commit", - "kw": "git.*commit|commit.*code|sauvegarde.*git", + "kw": "commit|git.*commit|commit.*code|sauvegarde.*git", "api": "GET:/api/wevia-action-engine.php?action=git_commit" }, {