"no msg"]); exit; } $greetings = ["hi","hello","salut","bonjour","hey","yo","coucou","bonsoir","slt","ca va","sup","hola"]; if (in_array(strtolower(trim($msg)), $greetings)) { echo json_encode(["ok"=>true,"response"=>"Salut ! Je suis le Blade AI Controller. Dis-moi ce que tu veux faire sur le Blade Razer en langage naturel.","type"=>"greeting"]); exit; } // === BLADE OPS ROUTING (v4) — Server commands bypass AI cascade === $msg_lower = strtolower(trim($msg)); $OPS_API = "https://weval-consulting.com/api/blade-ops-api.php?k=BLADE2026"; // SSO commands if (preg_match('/sso|authentik|auth.*check|auth.*fix|login.*problem|cookie.*purge|purge.*cookie/', $msg_lower)) { if (preg_match('/fix|restart|repair|repare/', $msg_lower)) { $r = @file_get_contents("$OPS_API&action=sso_fix", false, stream_context_create(["http"=>["timeout"=>30],"ssl"=>["verify_peer"=>false,"verify_peer_name"=>false]])); echo $r ?: json_encode(["error"=>"SSO fix timeout"]); } elseif (preg_match('/purge|cookie|clean/', $msg_lower)) { $r = @file_get_contents("$OPS_API&action=purge_cookies", false, stream_context_create(["http"=>["timeout"=>15],"ssl"=>["verify_peer"=>false,"verify_peer_name"=>false]])); echo $r ?: json_encode(["error"=>"Purge timeout"]); } else { $r = @file_get_contents("$OPS_API&action=sso_check", false, stream_context_create(["http"=>["timeout"=>15],"ssl"=>["verify_peer"=>false,"verify_peer_name"=>false]])); echo $r ?: json_encode(["error"=>"SSO check timeout"]); } exit; } // Health / Status commands if (preg_match('/^(health|status|sante|etat|infra|serveur|server)/', $msg_lower) || preg_match('/comment va|ca va|how.*server/', $msg_lower)) { $r = @file_get_contents("$OPS_API&action=health", false, stream_context_create(["http"=>["timeout"=>45],"ssl"=>["verify_peer"=>false,"verify_peer_name"=>false]])); echo $r ?: json_encode(["error"=>"Health check timeout"]); exit; } // Docker commands if (preg_match('/docker|container/', $msg_lower)) { $sub = preg_match('/restart|redemarr/', $msg_lower) ? 'restart' : 'ps'; $svc = ''; if ($sub === 'restart' && preg_match('/restart\s+(\S+)|redemarr.*?(\S+)/', $msg_lower, $m)) { $svc = $m[1] ?: $m[2]; } $r = @file_get_contents("$OPS_API&action=docker&sub=$sub&service=$svc", false, stream_context_create(["http"=>["timeout"=>15],"ssl"=>["verify_peer"=>false,"verify_peer_name"=>false]])); echo $r ?: json_encode(["error"=>"Docker timeout"]); exit; } // NonReg commands if (preg_match('/nonreg|non.reg|test.*complet|regression/', $msg_lower)) { $r = @file_get_contents("$OPS_API&action=nonreg", false, stream_context_create(["http"=>["timeout"=>150],"ssl"=>["verify_peer"=>false,"verify_peer_name"=>false]])); echo $r ?: json_encode(["error"=>"NonReg timeout"]); exit; } // Git commands if (preg_match('/^git\s|git status|git log|git pull|dernier commit/', $msg_lower)) { $sub = 'log --oneline -5'; if (preg_match('/status/', $msg_lower)) $sub = 'status'; if (preg_match('/pull/', $msg_lower)) $sub = 'pull origin main'; $r = @file_get_contents("$OPS_API&action=git&sub=" . urlencode($sub), false, stream_context_create(["http"=>["timeout"=>15],"ssl"=>["verify_peer"=>false,"verify_peer_name"=>false]])); echo $r ?: json_encode(["error"=>"Git timeout"]); exit; } // Disk commands if (preg_match('/disk|espace|disque|stockage|storage/', $msg_lower)) { $r = @file_get_contents("$OPS_API&action=disk", false, stream_context_create(["http"=>["timeout"=>15],"ssl"=>["verify_peer"=>false,"verify_peer_name"=>false]])); echo $r ?: json_encode(["error"=>"Disk timeout"]); exit; } // Ethica commands if (preg_match('/ethica|hcp|medecin|pharma/', $msg_lower)) { $r = @file_get_contents("$OPS_API&action=ethica", false, stream_context_create(["http"=>["timeout"=>15],"ssl"=>["verify_peer"=>false,"verify_peer_name"=>false]])); echo $r ?: json_encode(["error"=>"Ethica timeout"]); exit; } // Leads / B2B commands if (preg_match('/leads|b2b|prospect/', $msg_lower)) { $r = @file_get_contents("$OPS_API&action=leads", false, stream_context_create(["http"=>["timeout"=>15],"ssl"=>["verify_peer"=>false,"verify_peer_name"=>false]])); echo $r ?: json_encode(["error"=>"Leads timeout"]); exit; } // Nginx commands if (preg_match('/nginx|reload nginx|test nginx/', $msg_lower)) { $sub = preg_match('/reload/', $msg_lower) ? 'reload' : 'test'; $r = @file_get_contents("$OPS_API&action=nginx&sub=$sub", false, stream_context_create(["http"=>["timeout"=>15],"ssl"=>["verify_peer"=>false,"verify_peer_name"=>false]])); echo $r ?: json_encode(["error"=>"Nginx timeout"]); exit; } // Cron commands if (preg_match('/cron|tache.*planif|scheduled/', $msg_lower)) { $r = @file_get_contents("$OPS_API&action=crons", false, stream_context_create(["http"=>["timeout"=>15],"ssl"=>["verify_peer"=>false,"verify_peer_name"=>false]])); echo $r ?: json_encode(["error"=>"Crons timeout"]); exit; } // Direct exec on server (advanced) if (preg_match('/exec\s+(s204|s95|s151)\s+(.+)/', $msg_lower, $m)) { $target = $m[1]; $cmd = $m[2]; $r = @file_get_contents("$OPS_API&action=exec&target=$target&cmd=" . urlencode($cmd), false, stream_context_create(["http"=>["timeout"=>15],"ssl"=>["verify_peer"=>false,"verify_peer_name"=>false]])); echo $r ?: json_encode(["error"=>"Exec timeout"]); exit; } // === WEB SEARCH === if (preg_match('/cherche|search|recherche|google|find|trouve/', $msg_lower) && !preg_match('/hcp|ethica|lead/', $msg_lower)) { $q = preg_replace('/^(cherche|search|recherche|google|find|trouve)\s+/i', '', $msg); $r = @file_get_contents("$OPS_API&action=search&q=" . urlencode($q), false, stream_context_create(["http"=>["timeout"=>15],"ssl"=>["verify_peer"=>false,"verify_peer_name"=>false]])); echo $r ?: json_encode(["error"=>"search timeout"]); exit; } // === WEB FETCH === if (preg_match('/^(fetch|ouvre|lis|read)\s+(https?:\/\/\S+)/', $msg, $m)) { $url = $m[2]; $r = @file_get_contents("$OPS_API&action=fetch&url=" . urlencode($url), false, stream_context_create(["http"=>["timeout"=>20],"ssl"=>["verify_peer"=>false,"verify_peer_name"=>false]])); echo $r ?: json_encode(["error"=>"fetch timeout"]); exit; } // === BROWSE + SCREENSHOT === if (preg_match('/browse|screenshot.*url|capture.*page|screenshot.*http/', $msg_lower)) { $url = 'https://weval-consulting.com'; if (preg_match('/(https?:\/\/\S+)/', $msg, $m)) $url = $m[1]; $type = preg_match('/screenshot|capture/', $msg_lower) ? 'screenshot' : 'extract'; $r = @file_get_contents("$OPS_API&action=browse&url=" . urlencode($url) . "&type=$type", false, stream_context_create(["http"=>["timeout"=>40],"ssl"=>["verify_peer"=>false,"verify_peer_name"=>false]])); echo $r ?: json_encode(["error"=>"browse timeout"]); exit; } // === EMAIL === if (preg_match('/^(mail|email|inbox|boite|courrier)/', $msg_lower) || preg_match('/mes mails|mes emails|lire.*mail|check.*mail/', $msg_lower)) { if (preg_match('/urgent|important|vip|priorit/', $msg_lower)) { $r = @file_get_contents("$OPS_API&action=email_urgent&limit=10", false, stream_context_create(["http"=>["timeout"=>15],"ssl"=>["verify_peer"=>false,"verify_peer_name"=>false]])); } elseif (preg_match('/vip|draft|brouillon|reponse.*pret/', $msg_lower)) { $r = @file_get_contents("$OPS_API&action=email_vip", false, stream_context_create(["http"=>["timeout"=>15],"ssl"=>["verify_peer"=>false,"verify_peer_name"=>false]])); } elseif (preg_match('/redige|repond|draft.*uid|reponse.*(\d+)/', $msg_lower, $m)) { $uid = $m[1] ?? 0; if (!$uid) { preg_match('/(\d{4,})/', $msg, $m2); $uid = $m2[1] ?? 0; } if ($uid) { $r = @file_get_contents("$OPS_API&action=email_draft&uid=$uid", false, stream_context_create(["http"=>["timeout"=>30],"ssl"=>["verify_peer"=>false,"verify_peer_name"=>false]])); } else { $r = json_encode(["error"=>"Quel email ? Donne le UID"]); } } else { $r = @file_get_contents("$OPS_API&action=email_list&limit=10", false, stream_context_create(["http"=>["timeout"=>15],"ssl"=>["verify_peer"=>false,"verify_peer_name"=>false]])); } echo $r ?: json_encode(["error"=>"email timeout"]); exit; } // === AI LOCAL === if (preg_match('/^(ollama|ai|demande.*ollama|ask.*model)\s+(.+)/', $msg_lower, $m)) { $prompt = $m[2]; $model = 'qwen3:8b'; if (preg_match('/mistral/', $msg_lower)) $model = 'mistral'; if (preg_match('/medllama|medical/', $msg_lower)) $model = 'medllama2'; if (preg_match('/meditron/', $msg_lower)) $model = 'meditron:7b'; $r = @file_get_contents("$OPS_API&action=ai&model=$model&prompt=" . urlencode($prompt), false, stream_context_create(["http"=>["timeout"=>60],"ssl"=>["verify_peer"=>false,"verify_peer_name"=>false]])); echo $r ?: json_encode(["error"=>"AI timeout"]); exit; } if (preg_match('/models|modeles|ollama.*list/', $msg_lower)) { $r = @file_get_contents("$OPS_API&action=ai_models", false, stream_context_create(["http"=>["timeout"=>8],"ssl"=>["verify_peer"=>false,"verify_peer_name"=>false]])); echo $r ?: json_encode(["error"=>"models timeout"]); exit; } // === OPEN URL ON BLADE === if (preg_match('/ouvre.*(https?:\/\/\S+)/', $msg, $m) || preg_match('/open.*(https?:\/\/\S+)/', $msg, $m)) { $url = $m[1]; $r = @file_get_contents("$OPS_API&action=blade_open&url=" . urlencode($url), false, stream_context_create(["http"=>["timeout"=>8],"ssl"=>["verify_peer"=>false,"verify_peer_name"=>false]])); echo $r ?: json_encode(["error"=>"blade timeout"]); exit; } // === OSINT === if (preg_match('/osint|holehe|sherlock|theharvester|recon/', $msg_lower)) { $tool = 'holehe'; if (preg_match('/sherlock/', $msg_lower)) $tool = 'sherlock'; if (preg_match('/harvester/', $msg_lower)) $tool = 'theHarvester'; $target = preg_replace('/^.*?(osint|holehe|sherlock|theharvester|recon)\s+/i', '', $msg); $r = @file_get_contents("$OPS_API&action=osint&tool=$tool&target=" . urlencode(trim($target)), false, stream_context_create(["http"=>["timeout"=>35],"ssl"=>["verify_peer"=>false,"verify_peer_name"=>false]])); echo $r ?: json_encode(["error"=>"osint timeout"]); exit; } // === FILES === if (preg_match('/^(cat|lire|read|affiche)\s+(.+)/', $msg, $m)) { $path = trim($m[2]); $tgt = 'target=s204'; if (preg_match('/s95/', $path)) { $tgt = 'target=s95'; $path = preg_replace('/\s*s95\s*/', '', $path); } if (preg_match('/s151/', $path)) { $tgt = 'target=s151'; $path = preg_replace('/\s*s151\s*/', '', $path); } $r = @file_get_contents("$OPS_API&action=file_read&$tgt&path=" . urlencode(trim($path)), false, stream_context_create(["http"=>["timeout"=>15],"ssl"=>["verify_peer"=>false,"verify_peer_name"=>false]])); echo $r ?: json_encode(["error"=>"timeout"]); exit; } if (preg_match('/^ls\s+(.+)/', $msg, $m)) { $path = trim($m[1]); $tgt = 'target=s204'; if (preg_match('/s95/', $path)) { $tgt = 'target=s95'; $path = preg_replace('/\s*s95\s*/', '', $path); } $r = @file_get_contents("$OPS_API&action=file_list&$tgt&path=" . urlencode(trim($path)), false, stream_context_create(["http"=>["timeout"=>15],"ssl"=>["verify_peer"=>false,"verify_peer_name"=>false]])); echo $r ?: json_encode(["error"=>"timeout"]); exit; } // === LOGS === if (preg_match('/log[s]?\s+(.*)/i', $msg_lower, $m) && !preg_match('/git log/', $msg_lower)) { $file = trim($m[1]) ?: 'syslog'; $tgt = 'target=s204'; if (preg_match('/s95/', $file)) { $tgt = 'target=s95'; $file = trim(preg_replace('/s95/', '', $file)); } if (preg_match('/cherche|search|grep|erreur|error/', $msg_lower)) { $grep = preg_match('/erreur|error/', $msg_lower) ? 'error' : $file; $r = @file_get_contents("$OPS_API&action=logs_search&$tgt&file=syslog&grep=" . urlencode($grep), false, stream_context_create(["http"=>["timeout"=>15],"ssl"=>["verify_peer"=>false,"verify_peer_name"=>false]])); } else { $r = @file_get_contents("$OPS_API&action=logs&$tgt&file=" . urlencode($file) . "&lines=30", false, stream_context_create(["http"=>["timeout"=>15],"ssl"=>["verify_peer"=>false,"verify_peer_name"=>false]])); } echo $r ?: json_encode(["error"=>"timeout"]); exit; } // === SERVICES === if (preg_match('/service[s]?\s+(restart|stop|start|status)\s+(\S+)/i', $msg_lower, $m)) { $act = $m[1]; $svc = $m[2]; $tgt = 'target=s204'; if (preg_match('/s95/', $svc)) { $tgt = 'target=s95'; $svc = trim(preg_replace('/s95/', '', $svc)); } $r = @file_get_contents("$OPS_API&action=service_ctl&$tgt&do=$act&service=" . urlencode(trim($svc)), false, stream_context_create(["http"=>["timeout"=>15],"ssl"=>["verify_peer"=>false,"verify_peer_name"=>false]])); echo $r ?: json_encode(["error"=>"timeout"]); exit; } if (preg_match('/^services/i', $msg_lower)) { $tgt = preg_match('/s95/', $msg_lower) ? 'target=s95' : 'target=s204'; $r = @file_get_contents("$OPS_API&action=services&$tgt", false, stream_context_create(["http"=>["timeout"=>15],"ssl"=>["verify_peer"=>false,"verify_peer_name"=>false]])); echo $r ?: json_encode(["error"=>"timeout"]); exit; } // === NETWORK === if (preg_match('/^ping\s+(\S+)/i', $msg, $m)) { $r = @file_get_contents("$OPS_API&action=ping&host=" . urlencode($m[1]), false, stream_context_create(["http"=>["timeout"=>15],"ssl"=>["verify_peer"=>false,"verify_peer_name"=>false]])); echo $r ?: json_encode(["error"=>"timeout"]); exit; } if (preg_match('/port[s]?\s+(scan|check|test)/i', $msg_lower) || preg_match('/^ports\s/i', $msg_lower)) { $host = '127.0.0.1'; if (preg_match('/(\d+\.\d+\.\d+\.\d+)/', $msg, $m)) $host = $m[1]; $r = @file_get_contents("$OPS_API&action=ports&host=" . urlencode($host), false, stream_context_create(["http"=>["timeout"=>20],"ssl"=>["verify_peer"=>false,"verify_peer_name"=>false]])); echo $r ?: json_encode(["error"=>"timeout"]); exit; } if (preg_match('/ssl|certificat|cert\s+check/i', $msg_lower)) { $domain = 'weval-consulting.com'; if (preg_match('/([\w.-]+\.\w{2,})/', $msg, $m)) $domain = $m[1]; $r = @file_get_contents("$OPS_API&action=ssl_check&domain=" . urlencode($domain), false, stream_context_create(["http"=>["timeout"=>15],"ssl"=>["verify_peer"=>false,"verify_peer_name"=>false]])); echo $r ?: json_encode(["error"=>"timeout"]); exit; } // === MTA === if (preg_match('/mta|pmta|kumo|postfix|smtp|mail.*queue/i', $msg_lower)) { $act = preg_match('/queue|file/', $msg_lower) ? 'mta_queue' : 'mta_status'; $r = @file_get_contents("$OPS_API&action=$act", false, stream_context_create(["http"=>["timeout"=>20],"ssl"=>["verify_peer"=>false,"verify_peer_name"=>false]])); echo $r ?: json_encode(["error"=>"timeout"]); exit; } // === TELEGRAM === if (preg_match('/telegram\s+(.+)/i', $msg, $m) || preg_match('/envoie.*telegram\s+(.+)/i', $msg, $m)) { $r = @file_get_contents("$OPS_API&action=telegram&msg=" . urlencode(trim($m[1])), false, stream_context_create(["http"=>["timeout"=>8],"ssl"=>["verify_peer"=>false,"verify_peer_name"=>false]])); echo $r ?: json_encode(["error"=>"timeout"]); exit; } // === CLOUDFLARE === if (preg_match('/cloudflare|cf\s+dns|dns\s+record/i', $msg_lower)) { $act = preg_match('/purge|cache|clear/', $msg_lower) ? 'cf_purge' : 'cf_dns'; $r = @file_get_contents("$OPS_API&action=$act", false, stream_context_create(["http"=>["timeout"=>15],"ssl"=>["verify_peer"=>false,"verify_peer_name"=>false]])); echo $r ?: json_encode(["error"=>"timeout"]); exit; } // === PROCESS === if (preg_match('/^(ps|process|htop)/i', $msg_lower)) { $filter = preg_replace('/^(ps|process|htop)\s*/i', '', $msg); $tgt = preg_match('/s95/', $msg_lower) ? 'target=s95' : 'target=s204'; $r = @file_get_contents("$OPS_API&action=ps&$tgt&filter=" . urlencode(trim($filter)), false, stream_context_create(["http"=>["timeout"=>15],"ssl"=>["verify_peer"=>false,"verify_peer_name"=>false]])); echo $r ?: json_encode(["error"=>"timeout"]); exit; } if (preg_match('/kill\s+(\d+)/i', $msg, $m)) { $r = @file_get_contents("$OPS_API&action=kill&pid=" . $m[1], false, stream_context_create(["http"=>["timeout"=>8],"ssl"=>["verify_peer"=>false,"verify_peer_name"=>false]])); echo $r ?: json_encode(["error"=>"timeout"]); exit; } // === BACKUP === if (preg_match('/backup|sauvegarde/i', $msg_lower)) { $what = 'html'; if (preg_match('/ethica/', $msg_lower)) $what = 'ethica'; if (preg_match('/nginx/', $msg_lower)) $what = 'nginx'; if (preg_match('/db|base|postgres/', $msg_lower)) $what = 'db'; $r = @file_get_contents("$OPS_API&action=backup&what=$what", false, stream_context_create(["http"=>["timeout"=>60],"ssl"=>["verify_peer"=>false,"verify_peer_name"=>false]])); echo $r ?: json_encode(["error"=>"timeout"]); exit; } // === TEST PAGE === if (preg_match('/test\s+(https?:\/\/\S+)/i', $msg, $m) || preg_match('/teste?\s+la?\s+page\s+(https?:\/\/\S+)/i', $msg, $m)) { $r = @file_get_contents("$OPS_API&action=test_page&url=" . urlencode($m[1]), false, stream_context_create(["http"=>["timeout"=>35],"ssl"=>["verify_peer"=>false,"verify_peer_name"=>false]])); echo $r ?: json_encode(["error"=>"timeout"]); exit; } // === SSO NONREG === if (preg_match('/sso.*nonreg|nonreg.*sso|test.*auth.*complet/i', $msg_lower)) { $r = @file_get_contents("$OPS_API&action=sso_nonreg", false, stream_context_create(["http"=>["timeout"=>200],"ssl"=>["verify_peer"=>false,"verify_peer_name"=>false]])); echo $r ?: json_encode(["error"=>"timeout"]); exit; } // === SELF UPDATE === if (preg_match('/update|mise.*jour|git pull|self.update/i', $msg_lower)) { $r = @file_get_contents("$OPS_API&action=self_update", false, stream_context_create(["http"=>["timeout"=>20],"ssl"=>["verify_peer"=>false,"verify_peer_name"=>false]])); echo $r ?: json_encode(["error"=>"timeout"]); exit; } // === CRON ADD/REMOVE === if (preg_match('/cron\s+add\s+(.+)/i', $msg, $m)) { $r = @file_get_contents("$OPS_API&action=cron_add&entry=" . urlencode(trim($m[1])), false, stream_context_create(["http"=>["timeout"=>10],"ssl"=>["verify_peer"=>false,"verify_peer_name"=>false]])); echo $r ?: json_encode(["error"=>"timeout"]); exit; } if (preg_match('/cron\s+(remove|delete|supprime)\s+(.+)/i', $msg, $m)) { $r = @file_get_contents("$OPS_API&action=cron_remove&pattern=" . urlencode(trim($m[2])), false, stream_context_create(["http"=>["timeout"=>10],"ssl"=>["verify_peer"=>false,"verify_peer_name"=>false]])); echo $r ?: json_encode(["error"=>"timeout"]); exit; } // === END OPS ROUTING — continue to AI cascade for other commands === $SYSTEM = << [{deploy},{test_nonreg},{notify_result}] PATTERN 2 - SMART ROUTING: Route vers le bon outil automatiquement. Web task -> Playwright | File task -> PowerShell | Server task -> SSH | Code -> Python PATTERN 3 - CIRCUIT BREAKER: Si une commande echoue 2x, change d'approche. SSH echoue -> essaie SCP | Playwright echoue -> essaie curl | pip echoue -> essaie conda PATTERN 4 - AUTO-CONTINUE: Si une tache est incomplete, genere la suite automatiquement. "Training started" -> attendre GGUF -> SCP -> deploy -> test PATTERN 5 - EFFORT CLASSIFICATION: Evalue la complexite avant d'agir. Simple (grep, ls) -> exec direct | Moyen (deploy) -> plan + exec | Expert (migration) -> plan + confirm + exec PATTERN 6 - TOOL DISCOVERY: Decouvre les outils disponibles. Playwright (browser) | SSH (serveurs) | Python (scripts) | PowerShell (Windows) | curl (APIs) SCP (transferts) | Git (code) | ollama (AI models) | docker (containers) PATTERN 7 - MULTI-STEP AGENT: Planifie et execute des workflows complets. Exemple: "Fine-tune et deploie" -> [install, download_data, train, export, scp, create_model, patch_brain, test] PATTERN 8 - SELF-HEALING: Si erreur, diagnostique et corrige automatiquement. "Module not found" -> pip install | "Permission denied" -> sudo/chattr | "Connection refused" -> restart service PATTERN 9 - WEB AUTOMATION (Playwright): Peut ouvrir Chrome, naviguer, cliquer, remplir formulaires, telecharger fichiers. TOUJOURS utiliser le profil Chrome existant (logged into Google). Code: from playwright.sync_api import sync_playwright; p.chromium.launch_persistent_context(user_data_dir=CHROME_PROFILE) PATTERN 10 - FILE OPERATIONS: Lire: Get-Content | Ecrire: Set-Content | Copier: Copy-Item | Deplacer: Move-Item Chercher: Get-ChildItem -Recurse | Ouvrir: Start-Process | Supprimer: Remove-Item PATTERN 11 - SERVER OPERATIONS (SSH): S204: ssh -p 49222 root@204.168.152.13 (pwd: FLVhtCX47w3e) S95: curl 10.1.0.3:5890/api/sentinel-brain.php?action=exec&cmd=CMD S151: ssh ubuntu@151.80.235.110 (pwd: REDACTED_SSH) PATTERN 12 - BROWSER-USE COMPLET: Ouvrir URL: Start-Process 'https://...' ou playwright goto Screenshot: playwright page.screenshot() Fill form: playwright page.fill('selector', 'value') Click: playwright page.click('text=Button') Download: playwright page.wait_for_download() PATTERN 13 - SELF-MOA (Multi-Output Aggregation): Pour les decisions critiques, genere 3 approches et prend la meilleure. PATTERN 14 - SOVEREIGN ROUTING: Privilegier les outils locaux avant cloud. Local Python > API cloud | Local Ollama > Groq API | Local git > GitHub API PATTERN 15 - MONITORING CONTINU: Peut verifier l'etat des serveurs, services, sites, et alerter si probleme. curl -s https://weval-consulting.com/api/blade-api.php?k=BLADE2026&action=status PATTERN 16 - DEPLOYMENT PIPELINE: git pull -> test -> build -> deploy -> verify -> notify Sequence complete avec rollback si echec. PATTERN 17 - AUTONOMOUS DECISION: Si la tache est claire et sans risque, execute directement. Si la tache est risquee (delete, format, drop), demande confirmation. CAPABILITIES DU BLADE: - Python 3.14.2 installe - Playwright + Chromium installe - pip disponible - Git disponible - SSH/SCP disponible - PowerShell complet - Acces reseau complet (Groq API, GitHub, serveurs WEVAL) - Chrome avec profil Google connecte - Dossier de travail: C:\Users\Yace\Desktop\CLAUDE EXEMPLES AVANCES MULTI-STEP: - "Deploie la derniere version du site" -> [{"type":"powershell","cmd":"cd C:\\Users\\Yace\\Desktop\\CLAUDE\\weval-consulting; git pull; git status","label":"Git Pull"},{"type":"powershell","cmd":"ssh -p 49222 root@204.168.152.13 'cd /var/www/weval && git pull'","label":"Deploy S204"}] - "Teste WEVIA et dis-moi si tout marche" -> [{"type":"powershell","cmd":"python -c \\\"import urllib.request,json; tests=[('Bonjour','wevia'),('Fibonacci','def')]; [print(f'{t[0]}: {len(urllib.request.urlopen(urllib.request.Request(chr(39)https://weval-consulting.com/wevia-ia/weval-chatbot-api.php'+chr(39),json.dumps({chr(39)message'+chr(39):t[0],'+chr(39)mode'+chr(39):'+chr(39)fast'+chr(39)}).encode(),headers={'+chr(39)Content-Type'+chr(39):'+chr(39)application/json'+chr(39)})).read())}ch') for t in tests]\\\"","label":"NonReg WEVIA"}] - "Sauvegarde tout et eteins" -> [{"type":"powershell","cmd":"cd C:\\Users\\Yace\\Desktop\\CLAUDE\\wevia-brain; git add -A; git commit -m 'backup'; git push","label":"Git Push"},{"type":"powershell","cmd":"Stop-Computer -Force","label":"Eteindre"}] - "Ouvre Colab et lance le fine-tuning" -> [{"type":"powershell","cmd":"python C:\\Users\\Yace\\Desktop\\CLAUDE\\colab-auto.py","label":"Colab Fine-tune Auto"}] - "Genere du training data avec Groq" -> [{"type":"powershell","cmd":"python -c \\\"import urllib.request,json; r=urllib.request.urlopen(urllib.request.Request('https://api.groq.com/openai/v1/chat/completions',json.dumps({'model':'llama-3.3-70b-versatile','messages':[{'role':'user','content':'SAP modules pharma'}],'max_tokens':2000}).encode(),headers={'Content-Type':'application/json','Authorization':'Bearer REDACTED'})); print(json.loads(r.read())['choices'][0]['message']['content'][:500])\\\"","label":"Groq Training Gen"}] EXEMPLES AVANCES: - "Ouvre le fichier train.jsonl" -> {"type":"powershell","cmd":"Start-Process 'C:\\Users\\Yace\\Desktop\\CLAUDE\\train.jsonl'","label":"Ouvrir train.jsonl"} - "Liste les fichiers du dossier CLAUDE" -> {"type":"powershell","cmd":"Get-ChildItem 'C:\\Users\\Yace\\Desktop\\CLAUDE' | Select Name,Length,LastWriteTime | Format-Table","label":"Lister dossier CLAUDE"} - "Ouvre Chrome sur google.com" -> [{"type":"open_url","cmd":"https://google.com","label":"Ouvrir Google"}] - "Cherche les fichiers .py" -> {"type":"powershell","cmd":"Get-ChildItem -Recurse -Filter '*.py' 'C:\\Users\\Yace\\Desktop\\CLAUDE' | Select FullName","label":"Chercher fichiers Python"} - "Cree un fichier test.txt avec Hello World" -> {"type":"powershell","cmd":"Set-Content -Path 'C:\\Users\\Yace\\Desktop\\CLAUDE\\test.txt' -Value 'Hello World'","label":"Creer test.txt"} - "Copie train.jsonl vers Documents" -> {"type":"powershell","cmd":"Copy-Item 'C:\\Users\\Yace\\Desktop\\CLAUDE\\train.jsonl' 'C:\\Users\\Yace\\Documents\\train.jsonl'","label":"Copier train.jsonl"} - "Ouvre VS Code dans le dossier wevia-brain" -> {"type":"powershell","cmd":"code 'C:\\Users\\Yace\\Desktop\\CLAUDE\\wevia-brain'","label":"VS Code wevia-brain"} - "Ouvre le Word" -> {"type":"powershell","cmd":"Start-Process winword","label":"Ouvrir Word"} - "Ouvre PowerPoint" -> {"type":"powershell","cmd":"Start-Process powerpnt","label":"Ouvrir PowerPoint"} - "Screenshot et envoie" -> {"type":"screenshot","cmd":"desktop","label":"Capture ecran"} - "Execute python script.py" -> {"type":"powershell","cmd":"python 'C:\\Users\\Yace\\Desktop\\CLAUDE\\script.py'","label":"Executer script.py"} - "SSH vers S204" -> {"type":"powershell","cmd":"ssh -p 49222 root@204.168.152.13","label":"SSH S204"} - "SCP fichier vers S151" -> {"type":"powershell","cmd":"scp -o StrictHostKeyChecking=no 'C:\\Users\\Yace\\Desktop\\CLAUDE\\train.jsonl' ubuntu@151.80.235.110:/tmp/","label":"SCP vers S151"} - "Git pull" -> {"type":"powershell","cmd":"cd 'C:\\Users\\Yace\\Desktop\\CLAUDE\\wevia-brain'; git pull","label":"Git Pull wevia-brain"} - "Espace disque" -> {"type":"powershell","cmd":"Get-PSDrive C,D,E -EA 0|Select Name,@{N='Free(GB)';E={[math]::Round(\$_.Free/1GB)}},@{N='Used(GB)';E={[math]::Round(\$_.Used/1GB)}}|FT","label":"Espace disque"} - "Processus gourmands" -> {"type":"powershell","cmd":"Get-Process | Sort-Object WorkingSet -Descending | Select -First 15 Name,@{N='RAM(MB)';E={[math]::Round(\$_.WorkingSet/1MB)}} | FT","label":"Top processus RAM"} SYS; // Detect complexity: long msg or multi-step = complex $is_complex = (mb_strlen($msg) > 150 || preg_match('/puis|ensuite|apres|et aussi|et en plus|multi|analyse|rapport|compare/i', $msg)); $ai_result = null; $provider_used = "none"; function callProvider($url, $key, $model, $system, $msg, $timeout=10, $extra=[]) { $body = array_merge([ "model" => $model, "temperature" => 0.1, "max_tokens" => 400, "messages" => [["role"=>"system","content"=>$system],["role"=>"user","content"=>$msg]], "stream" => false ], $extra); $ch = curl_init($url); curl_setopt_array($ch, [ CURLOPT_RETURNTRANSFER => true, CURLOPT_POST => true, CURLOPT_TIMEOUT => $timeout, CURLOPT_HTTPHEADER => ["Content-Type: application/json", "Authorization: Bearer $key"], CURLOPT_POSTFIELDS => json_encode($body) ]); $resp = curl_exec($ch); $code = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); if ($code !== 200 || !$resp) return null; $d = json_decode($resp, true); $text = trim($d["choices"][0]["message"]["content"] ?? ""); // === ROBUST JSON PARSER v4 === // Step 1: Strip ALL markdown code blocks (```json ... ``` or ``` ... ```) $text = preg_replace('/```(?:json|javascript|js)?\s*\n?/i', '', $text); $text = preg_replace('/\n?```\s*$/m', '', $text); $text = trim($text); // Step 2: Direct JSON decode $parsed = json_decode($text, true); if ($parsed && (isset($parsed['type']) || (isset($parsed[0]) && isset($parsed[0]['type'])))) return $parsed; // Step 3: Extract JSON from surrounding text (LLM often adds explanation before/after) // Try array first if (preg_match('/\[\s*\{[^\[]*?"type"\s*:.*?\}\s*\]/s', $text, $m)) { $parsed = json_decode($m[0], true); if ($parsed) return $parsed; } // Try object if (preg_match('/\{[^{]*?"type"\s*:.*?\}/s', $text, $m)) { $parsed = json_decode($m[0], true); if ($parsed) return ['type' => $parsed['type'] ?? 'info', ...$parsed]; } // Step 4: Find JSON between first { or [ and matching closer foreach (['{', '['] as $opener) { $pos = strpos($text, $opener); if ($pos !== false) { $candidate = substr($text, $pos); // Try progressively shorter substrings (trim trailing garbage) for ($end = strlen($candidate); $end > 10; $end--) { $try = substr($candidate, 0, $end); $last = $try[strlen($try)-1]; if (($opener === '{' && $last === '}') || ($opener === '[' && $last === ']')) { $parsed = json_decode($try, true); if ($parsed) return is_array($parsed) && !isset($parsed['type']) && isset($parsed[0]) ? $parsed : $parsed; } } } } // Step 5: Keyword fallback - extract action from natural language if (preg_match('/(?:je vais|I will|executing|running|commande|command)\s*[:.]?\s*[`"]?([^`"\n]+)/i', $text, $m)) { return [["type" => "powershell", "cmd" => trim($m[1], " `\""), "label" => "parsed_from_text"]]; } return null; } // ===== CASCADE: GLM-5 > WEVIA > Alibaba > Claude(complex) > Keyword ===== $nvidia_key = trim(@file_get_contents("/var/www/html/api/blade-tasks/nvidia-key.txt")); // === L1: NVIDIA GLM-5 (744B, gratuit, souverain first) === if ($nvidia_key) { $r = callProvider( "https://integrate.api.nvidia.com/v1/chat/completions", $nvidia_key, "z-ai/glm5", $SYSTEM, $msg, 12 ); if ($r) { $ai_result = $r; $provider_used = "GLM-5 (744B)"; } } // === L2: WEVIA ENGINE (sovereign: Cerebras>Groq>SambaNova>Ollama) === if (!$ai_result) { $ch = curl_init("http://127.0.0.1/api/weval-chatbot-api.php"); curl_setopt_array($ch, [ CURLOPT_RETURNTRANSFER => true, CURLOPT_POST => true, CURLOPT_TIMEOUT => 12, CURLOPT_HTTPHEADER => ["Content-Type: application/json"], CURLOPT_POSTFIELDS => json_encode(["message"=>$SYSTEM."\n\nCommande: ".$msg,"language"=>"fr","mode"=>"quick"]) ]); $resp = curl_exec($ch); $code = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); if ($code === 200 && $resp) { $d = json_decode($resp, true); $text = $d["response"] ?? $d["message"] ?? ""; if (preg_match('/(\[.*?"type".*?\]|\{.*?"type".*?\})/s', $text, $m)) { $parsed = json_decode($m[1], true); if ($parsed) { $ai_result = $parsed; $provider_used = "WEVIA Engine"; } } } } // === L3: ALIBABA QWEN (gratuit, illimite) === if (!$ai_result) { $r = callProvider( "https://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions", "sk-34db1ad3152443cd86563d1bfc576c30", "qwen-plus", $SYSTEM, $msg, 10 ); if ($r) { $ai_result = $r; $provider_used = "Alibaba Qwen"; } } // === L4: CLAUDE OPUS (requetes tres complexes uniquement) === if (!$ai_result && $is_complex) { $r = callProvider( "https://api.anthropic.com/v1/messages", "", "claude-sonnet-4-20250514", $SYSTEM, $msg, 15 ); // Anthropic API format different — try direct call $ch = curl_init("https://api.anthropic.com/v1/messages"); curl_setopt_array($ch, [ CURLOPT_RETURNTRANSFER => true, CURLOPT_POST => true, CURLOPT_TIMEOUT => 15, CURLOPT_HTTPHEADER => [ "Content-Type: application/json", "x-api-key: " . trim(@file_get_contents("/var/www/html/api/blade-tasks/anthropic-key.txt")), "anthropic-version: 2023-06-01" ], CURLOPT_POSTFIELDS => json_encode([ "model" => "claude-sonnet-4-20250514", "max_tokens" => 400, "system" => $SYSTEM, "messages" => [["role"=>"user","content"=>$msg]] ]) ]); $resp = curl_exec($ch); $code = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); if ($code === 200 && $resp) { $d = json_decode($resp, true); $text = trim($d["content"][0]["text"] ?? ""); $text = preg_replace('/^```json\s*/i', '', $text); $text = preg_replace('/\s*```$/i', '', $text); $parsed = json_decode($text, true); if ($parsed) { $ai_result = $parsed; $provider_used = "Claude (complex)"; } } } // === L5: KEYWORD FALLBACK (toujours dispo, meme offline) === if (!$ai_result) { $m = mb_strtolower($msg); if (preg_match('/screenshot|capture|ecran/', $m)) $ai_result = ["type"=>"screenshot","cmd"=>"screenshot","label"=>"Screenshot"]; elseif (preg_match('/sysinfo|system|config/', $m)) $ai_result = ["type"=>"sysinfo","cmd"=>"sysinfo","label"=>"System Info"]; elseif (preg_match('/process|cpu|top/', $m)) $ai_result = ["type"=>"powershell","cmd"=>"Get-Process|Sort CPU -Desc|Select -First 15 Name,CPU,WS|FT","label"=>"Processes"]; elseif (preg_match('/disque|disk|espace/', $m)) $ai_result = ["type"=>"powershell","cmd"=>'Get-PSDrive C,D,E -EA 0|FT Name,Free,Used',"label"=>"Disk"]; elseif (preg_match('/nettoie|clean|temp/', $m)) $ai_result = ["type"=>"powershell","cmd"=>'Remove-Item $env:TEMP\* -Recurse -Force -EA 0;"Done"',"label"=>"Cleanup"]; elseif (preg_match('/git pull/', $m)) $ai_result = ["type"=>"git_pull","cmd"=>'C:\Users\Yace\Desktop\CLAUDE\weval-consulting',"label"=>"Git Pull"]; elseif (preg_match('/git push/', $m)) $ai_result = ["type"=>"git_push","cmd"=>'C:\Users\Yace\Desktop\CLAUDE\weval-consulting',"label"=>"Git Push"]; elseif (preg_match('/^ouvre |^open /i', $m)) { $url = preg_replace('/^(ouvre|open)\s+/i', '', $msg); $map = ["weval"=>"https://weval-consulting.com","arsenal"=>"https://weval-consulting.com/arsenal-proxy/ceo-dashboard.html","crm"=>"https://crm.weval-consulting.com","wevia"=>"https://weval-consulting.com/wevia","analytics"=>"https://analytics.weval-consulting.com","n8n"=>"https://n8n.weval-consulting.com","deerflow"=>"https://deerflow.weval-consulting.com","wevads"=>"https://weval-consulting.com/wevads-ia/","github"=>"https://github.com/Yacineutt"]; foreach ($map as $k=>$v) { if (stripos($url,$k)!==false) { $url=$v; break; } } $ai_result = ["type"=>preg_match('/^https?:/',$url)?"open_url":"open_app","cmd"=>$url,"label"=>"Open ".substr($url,0,40)]; } elseif (preg_match('/^ps:|^powershell:/i', $m)) { $cmd = preg_replace('/^(ps|powershell):\s*/i', '', $msg); $ai_result = ["type"=>"powershell","cmd"=>$cmd,"label"=>"PS: ".substr($cmd,0,40)]; } elseif (preg_match('/notif|rappel/', $m)) $ai_result = ["type"=>"notify","cmd"=>preg_replace('/^(notif|rappel)\s*/i','',$msg)?:$msg,"label"=>"Notify"]; elseif (preg_match('/ferme|kill/', $m)) { $app = preg_replace('/^(ferme|kill)\s+/i', '', $msg); $ai_result = ["type"=>"powershell","cmd"=>"Stop-Process -Name \"$app\" -Force -EA 0;\"Killed\"","label"=>"Kill $app"]; } elseif (preg_match('/batterie|battery/', $m)) $ai_result = ["type"=>"powershell","cmd"=>"Get-CimInstance Win32_Battery|FT","label"=>"Battery"]; elseif (preg_match('/wifi/', $m)) $ai_result = ["type"=>"powershell","cmd"=>"netsh wlan show interfaces","label"=>"WiFi"]; else $ai_result = ["type"=>"powershell","cmd"=>$msg,"label"=>mb_substr($msg,0,50)]; $provider_used = "keyword"; } if (isset($ai_result["type"])) $ai_result = [$ai_result]; echo json_encode(["ok"=>true,"provider"=>$provider_used,"tasks"=>$ai_result,"cascade"=>"GLM5>WEVIA>Alibaba>Claude(complex)>Keyword","complex"=>$is_complex]);