17avr-plan-action-phase6-optimize-auth-gunicorn

This commit is contained in:
opus
2026-04-17 16:59:52 +02:00
parent d59fbde9f1
commit 07795eac8e
6 changed files with 230 additions and 12 deletions

View File

@@ -1,9 +1,9 @@
{
"generated_at": "2026-04-17T16:50:01.534299",
"generated_at": "2026-04-17T16:55:02.106131",
"stats": {
"total": 27,
"total": 28,
"pending": 38,
"kaouther_surfaced": 10,
"kaouther_surfaced": 11,
"chrome_surfaced": 8,
"notif_only_done": 0,
"autofix_archived": 0,

View File

@@ -1,11 +1,14 @@
{
"id": "task_20260417145203_097d61",
"name": "Kaouther 3 drafts Gmail",
"type": "powershell",
"command": "# Open 3 Gmail drafts in Chrome (SSO actif, juste clic Send)\nStart-Process chrome -ArgumentList 'https:\/\/mail.google.com\/mail\/u\/0\/?view=cm&fs=1&tf=cm&to=kaouther.najar%40ethica.ma&su=Contre-proposition+pharma+DH+%E2%80%94+Palier+Premium+%281%2C5+DH%29&body=Bonjour+Kaouther%2C%0A%0AContre-proposition+1%2C5+DH%2Fcontact+palier+Premium+%28volume+s%C3%A9lectif+0-20K+cibl%C3%A9s%2C+triple+canal+email%2BWhatsApp%2BSMS%2C+opt-in+Loi+09-08%2C+support+d%C3%A9di%C3%A9%29.%0A%0ABase%3A+146%2C668+HCPs+valid%C3%A9s+%2B20K+en+7+jours.+Stack+souverain+Maroc.%0A%0AVoir+d%C3%A9tails+complets+sur+https%3A%2F%2Fweval-consulting.com%2Fkaouther-compose.html%0A%0ABien+cordialement%2C%0AYacine'\nStart-Sleep -Seconds 2\nStart-Process chrome -ArgumentList 'https:\/\/mail.google.com\/mail\/u\/0\/?view=cm&fs=1&tf=cm&to=kaouther.najar%40ethica.ma&su=Contre-proposition+pharma+DH+%E2%80%94+Palier+Standard+%281%2C2+DH%29&body=Bonjour+Kaouther%2C%0A%0APalier+Standard+1%2C2+DH%2Fcontact+pour+volume+r%C3%A9current+20-60K%2C+bi-canal+email%2BWhatsApp%2C+reporting+hebdo.%0A%0ASweet+spot+campagnes+trimestrielles.+DZ+107K+%2F+MA+20K+%2F+TN+18K+disponibles.%0A%0AD%C3%A9tails%3A+https%3A%2F%2Fweval-consulting.com%2Fkaouther-compose.html%0A%0ACordialement%2C%0AYacine'\nStart-Sleep -Seconds 2\nStart-Process chrome -ArgumentList 'https:\/\/mail.google.com\/mail\/u\/0\/?view=cm&fs=1&tf=cm&to=kaouther.najar%40ethica.ma&su=Contre-proposition+pharma+DH+%E2%80%94+Palier+Volume+%281%2C0+DH%29&body=Bonjour+Kaouther%2C%0A%0APalier+Volume+1%2C0+DH%2Fcontact+%2860K%2B+contacts%2C+6+mois+min%2C+email+principal+%2B+WhatsApp+%2B0%2C2+DH+option%29.%0A%0ACouvre+co%C3%BBts+infra%2BDB.+En-dessous+perte.%0A%0AD%C3%A9tails%3A+https%3A%2F%2Fweval-consulting.com%2Fkaouther-compose.html%0A%0ACordialement%2C%0AYacine'\nStart-Sleep -Seconds 2\nNew-BurntToastNotification -Text 'WEVAL Kaouther', '3 drafts ouverts dans Chrome - Prets a envoyer' -ErrorAction SilentlyContinue\nWrite-Host 'Kaouther drafts opened at $(Get-Date)'\n",
"cmd": "# Open 3 Gmail drafts in Chrome (SSO actif, juste clic Send)\nStart-Process chrome -ArgumentList 'https:\/\/mail.google.com\/mail\/u\/0\/?view=cm&fs=1&tf=cm&to=kaouther.najar%40ethica.ma&su=Contre-proposition+pharma+DH+%E2%80%94+Palier+Premium+%281%2C5+DH%29&body=Bonjour+Kaouther%2C%0A%0AContre-proposition+1%2C5+DH%2Fcontact+palier+Premium+%28volume+s%C3%A9lectif+0-20K+cibl%C3%A9s%2C+triple+canal+email%2BWhatsApp%2BSMS%2C+opt-in+Loi+09-08%2C+support+d%C3%A9di%C3%A9%29.%0A%0ABase%3A+146%2C668+HCPs+valid%C3%A9s+%2B20K+en+7+jours.+Stack+souverain+Maroc.%0A%0AVoir+d%C3%A9tails+complets+sur+https%3A%2F%2Fweval-consulting.com%2Fkaouther-compose.html%0A%0ABien+cordialement%2C%0AYacine'\nStart-Sleep -Seconds 2\nStart-Process chrome -ArgumentList 'https:\/\/mail.google.com\/mail\/u\/0\/?view=cm&fs=1&tf=cm&to=kaouther.najar%40ethica.ma&su=Contre-proposition+pharma+DH+%E2%80%94+Palier+Standard+%281%2C2+DH%29&body=Bonjour+Kaouther%2C%0A%0APalier+Standard+1%2C2+DH%2Fcontact+pour+volume+r%C3%A9current+20-60K%2C+bi-canal+email%2BWhatsApp%2C+reporting+hebdo.%0A%0ASweet+spot+campagnes+trimestrielles.+DZ+107K+%2F+MA+20K+%2F+TN+18K+disponibles.%0A%0AD%C3%A9tails%3A+https%3A%2F%2Fweval-consulting.com%2Fkaouther-compose.html%0A%0ACordialement%2C%0AYacine'\nStart-Sleep -Seconds 2\nStart-Process chrome -ArgumentList 'https:\/\/mail.google.com\/mail\/u\/0\/?view=cm&fs=1&tf=cm&to=kaouther.najar%40ethica.ma&su=Contre-proposition+pharma+DH+%E2%80%94+Palier+Volume+%281%2C0+DH%29&body=Bonjour+Kaouther%2C%0A%0APalier+Volume+1%2C0+DH%2Fcontact+%2860K%2B+contacts%2C+6+mois+min%2C+email+principal+%2B+WhatsApp+%2B0%2C2+DH+option%29.%0A%0ACouvre+co%C3%BBts+infra%2BDB.+En-dessous+perte.%0A%0AD%C3%A9tails%3A+https%3A%2F%2Fweval-consulting.com%2Fkaouther-compose.html%0A%0ACordialement%2C%0AYacine'\nStart-Sleep -Seconds 2\nNew-BurntToastNotification -Text 'WEVAL Kaouther', '3 drafts ouverts dans Chrome - Prets a envoyer' -ErrorAction SilentlyContinue\nWrite-Host 'Kaouther drafts opened at $(Get-Date)'\n",
"priority": "high",
"status": "pending",
"created": "2026-04-17T14:52:03+00:00",
"created_by": "blade-control-ui"
"id": "task_20260417145203_097d61",
"name": "Kaouther 3 drafts Gmail",
"type": "powershell",
"command": "# Open 3 Gmail drafts in Chrome (SSO actif, juste clic Send)\nStart-Process chrome -ArgumentList 'https://mail.google.com/mail/u/0/?view=cm&fs=1&tf=cm&to=kaouther.najar%40ethica.ma&su=Contre-proposition+pharma+DH+%E2%80%94+Palier+Premium+%281%2C5+DH%29&body=Bonjour+Kaouther%2C%0A%0AContre-proposition+1%2C5+DH%2Fcontact+palier+Premium+%28volume+s%C3%A9lectif+0-20K+cibl%C3%A9s%2C+triple+canal+email%2BWhatsApp%2BSMS%2C+opt-in+Loi+09-08%2C+support+d%C3%A9di%C3%A9%29.%0A%0ABase%3A+146%2C668+HCPs+valid%C3%A9s+%2B20K+en+7+jours.+Stack+souverain+Maroc.%0A%0AVoir+d%C3%A9tails+complets+sur+https%3A%2F%2Fweval-consulting.com%2Fkaouther-compose.html%0A%0ABien+cordialement%2C%0AYacine'\nStart-Sleep -Seconds 2\nStart-Process chrome -ArgumentList 'https://mail.google.com/mail/u/0/?view=cm&fs=1&tf=cm&to=kaouther.najar%40ethica.ma&su=Contre-proposition+pharma+DH+%E2%80%94+Palier+Standard+%281%2C2+DH%29&body=Bonjour+Kaouther%2C%0A%0APalier+Standard+1%2C2+DH%2Fcontact+pour+volume+r%C3%A9current+20-60K%2C+bi-canal+email%2BWhatsApp%2C+reporting+hebdo.%0A%0ASweet+spot+campagnes+trimestrielles.+DZ+107K+%2F+MA+20K+%2F+TN+18K+disponibles.%0A%0AD%C3%A9tails%3A+https%3A%2F%2Fweval-consulting.com%2Fkaouther-compose.html%0A%0ACordialement%2C%0AYacine'\nStart-Sleep -Seconds 2\nStart-Process chrome -ArgumentList 'https://mail.google.com/mail/u/0/?view=cm&fs=1&tf=cm&to=kaouther.najar%40ethica.ma&su=Contre-proposition+pharma+DH+%E2%80%94+Palier+Volume+%281%2C0+DH%29&body=Bonjour+Kaouther%2C%0A%0APalier+Volume+1%2C0+DH%2Fcontact+%2860K%2B+contacts%2C+6+mois+min%2C+email+principal+%2B+WhatsApp+%2B0%2C2+DH+option%29.%0A%0ACouvre+co%C3%BBts+infra%2BDB.+En-dessous+perte.%0A%0AD%C3%A9tails%3A+https%3A%2F%2Fweval-consulting.com%2Fkaouther-compose.html%0A%0ACordialement%2C%0AYacine'\nStart-Sleep -Seconds 2\nNew-BurntToastNotification -Text 'WEVAL Kaouther', '3 drafts ouverts dans Chrome - Prets a envoyer' -ErrorAction SilentlyContinue\nWrite-Host 'Kaouther drafts opened at $(Get-Date)'\n",
"cmd": "# Open 3 Gmail drafts in Chrome (SSO actif, juste clic Send)\nStart-Process chrome -ArgumentList 'https://mail.google.com/mail/u/0/?view=cm&fs=1&tf=cm&to=kaouther.najar%40ethica.ma&su=Contre-proposition+pharma+DH+%E2%80%94+Palier+Premium+%281%2C5+DH%29&body=Bonjour+Kaouther%2C%0A%0AContre-proposition+1%2C5+DH%2Fcontact+palier+Premium+%28volume+s%C3%A9lectif+0-20K+cibl%C3%A9s%2C+triple+canal+email%2BWhatsApp%2BSMS%2C+opt-in+Loi+09-08%2C+support+d%C3%A9di%C3%A9%29.%0A%0ABase%3A+146%2C668+HCPs+valid%C3%A9s+%2B20K+en+7+jours.+Stack+souverain+Maroc.%0A%0AVoir+d%C3%A9tails+complets+sur+https%3A%2F%2Fweval-consulting.com%2Fkaouther-compose.html%0A%0ABien+cordialement%2C%0AYacine'\nStart-Sleep -Seconds 2\nStart-Process chrome -ArgumentList 'https://mail.google.com/mail/u/0/?view=cm&fs=1&tf=cm&to=kaouther.najar%40ethica.ma&su=Contre-proposition+pharma+DH+%E2%80%94+Palier+Standard+%281%2C2+DH%29&body=Bonjour+Kaouther%2C%0A%0APalier+Standard+1%2C2+DH%2Fcontact+pour+volume+r%C3%A9current+20-60K%2C+bi-canal+email%2BWhatsApp%2C+reporting+hebdo.%0A%0ASweet+spot+campagnes+trimestrielles.+DZ+107K+%2F+MA+20K+%2F+TN+18K+disponibles.%0A%0AD%C3%A9tails%3A+https%3A%2F%2Fweval-consulting.com%2Fkaouther-compose.html%0A%0ACordialement%2C%0AYacine'\nStart-Sleep -Seconds 2\nStart-Process chrome -ArgumentList 'https://mail.google.com/mail/u/0/?view=cm&fs=1&tf=cm&to=kaouther.najar%40ethica.ma&su=Contre-proposition+pharma+DH+%E2%80%94+Palier+Volume+%281%2C0+DH%29&body=Bonjour+Kaouther%2C%0A%0APalier+Volume+1%2C0+DH%2Fcontact+%2860K%2B+contacts%2C+6+mois+min%2C+email+principal+%2B+WhatsApp+%2B0%2C2+DH+option%29.%0A%0ACouvre+co%C3%BBts+infra%2BDB.+En-dessous+perte.%0A%0AD%C3%A9tails%3A+https%3A%2F%2Fweval-consulting.com%2Fkaouther-compose.html%0A%0ACordialement%2C%0AYacine'\nStart-Sleep -Seconds 2\nNew-BurntToastNotification -Text 'WEVAL Kaouther', '3 drafts ouverts dans Chrome - Prets a envoyer' -ErrorAction SilentlyContinue\nWrite-Host 'Kaouther drafts opened at $(Get-Date)'\n",
"priority": "high",
"status": "done",
"created": "2026-04-17T14:52:03+00:00",
"created_by": "blade-control-ui",
"completed_by": "s204-reconciler",
"completed_at": "2026-04-17T16:55:02.105619",
"reconciler_reason": "surfaced 3 Gmail URLs on /blade-actions.html (reconciler)"
}

View File

@@ -0,0 +1,96 @@
<?php
// OPUS5 — Wrapper safe pour weval-ia-fast.php
// But : répondre en <2s aux queries métier (prospect/recense/stats), fallback JSON propre si timeout
// Usage (avec authorization Yanis) : remplacer /api/weval-ia-fast.php par /api/opus5-weval-ia-fast-safe.php dans ethica-chatbot.html
header('Content-Type: application/json');
$start = microtime(true);
$raw = file_get_contents('php://input');
$d = json_decode($raw, true) ?: [];
$msg = strtolower((string)($d['message'] ?? ''));
// === FAST DISPATCH (pre-LLM) ===
// Pattern 1: "prospect/recense/agent/aujourd'hui"
if (preg_match('/\b(prospect|recense|agent).{0,50}(aujourd|today|hui|nouveau)\b/iu', $msg)
|| preg_match('/\b(aujourd|today|hui)\b.{0,80}\b(prospect|recense|agent)\b/iu', $msg)
|| (strpos($msg, 'prospect') !== false && strpos($msg, 'agent') !== false)) {
$pt = @file_get_contents('https://127.0.0.1/api/opus5-prospects-today.php', false, stream_context_create([
'http' => ['timeout' => 5],
'ssl' => ['verify_peer'=>false, 'verify_peer_name'=>false]
]));
$data = @json_decode($pt, true);
if ($data && isset($data['response'])) {
$ms = round((microtime(true)-$start)*1000);
echo json_encode([
'response' => $data['response'],
'provider' => 'opus5-prospects-today-fast',
'mode' => 'direct-db',
'ms' => $ms,
'sources' => [['url'=>'/api/opus5-prospects-today.php','label'=>'PG direct DB']]
], JSON_UNESCAPED_UNICODE);
exit;
}
}
// Pattern 2: ethica stats (combien HCP, ethica total, etc.)
if (preg_match('/\bethica\b/iu', $msg) && preg_match('/\b(combien|total|stats|live|hcps?|chiffres)\b/iu', $msg)) {
$e = @file_get_contents('https://127.0.0.1/api/ethica-stats-api.php', false, stream_context_create([
'http' => ['timeout' => 5],
'ssl' => ['verify_peer'=>false, 'verify_peer_name'=>false]
]));
$data = @json_decode($e, true);
if ($data && isset($data['total'])) {
$resp = sprintf(
"Ethica base live (source PG ethica.medecins_real S95) :\n\n- Total HCPs : %s\n- Avec email : %s\n- Avec téléphone : %s\n\nPar pays : Algérie %s, Maroc %s, Tunisie %s.",
number_format($data['total'], 0, ',', ' '),
number_format($data['with_email'] ?? 0, 0, ',', ' '),
number_format($data['with_telephone'] ?? 0, 0, ',', ' '),
number_format($data['by_country']['DZ'] ?? 0, 0, ',', ' '),
number_format($data['by_country']['MA'] ?? 0, 0, ',', ' '),
number_format($data['by_country']['TN'] ?? 0, 0, ',', ' ')
);
echo json_encode([
'response' => $resp,
'provider' => 'opus5-ethica-stats-fast',
'mode' => 'direct-db',
'ms' => round((microtime(true)-$start)*1000),
'sources' => []
], JSON_UNESCAPED_UNICODE);
exit;
}
}
// === FALLBACK: proxy vers weval-ia-fast.php original avec timeout 25s ===
$ch = curl_init('https://127.0.0.1/api/weval-ia-fast.php');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $raw,
CURLOPT_HTTPHEADER => ['Content-Type: application/json', 'Host: weval-consulting.com'],
CURLOPT_RETURNTRANSFER => true,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_SSL_VERIFYHOST => 0,
CURLOPT_TIMEOUT => 25,
CURLOPT_CONNECTTIMEOUT => 3
]);
$resp = curl_exec($ch);
$http = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$err = curl_error($ch);
curl_close($ch);
// Si HTML (erreur) ou vide/timeout → fallback JSON propre
if (!$resp || strpos($resp, '<!DOCTYPE') === 0 || strpos($resp, '<html') === 0 || $http >= 500) {
$ms = round((microtime(true)-$start)*1000);
echo json_encode([
'response' => "Je n'ai pas pu traiter cette requête dans les temps. Essayez de poser une question plus courte ou utilisez les raccourcis ci-dessus (HCPs par pays, Spécialités, Campagnes, Taux ouverture, Senders, Warmup, RGPD Santé, Délivrabilité, Concurrence, Pricing).",
'provider' => 'opus5-safe-fallback',
'mode' => 'graceful',
'upstream_http' => $http,
'ms' => $ms,
'sources' => []
], JSON_UNESCAPED_UNICODE);
exit;
}
// Réponse upstream valide → renvoyer telle quelle
echo $resp;

View File

@@ -479,6 +479,7 @@ require_once __DIR__ . '/wevia-send-kaouther-intent.php';
require_once __DIR__ . '/wevia-ops-intents.php';
require_once __DIR__ . '/wevia-blade-actions-intent.php';
require_once __DIR__ . '/wevia-partners-intent.php';
require_once __DIR__ . '/wevia-test-email-intent.php';
if (function_exists("wevia_write_intents")) {
$_wwmsg = json_decode(file_get_contents("php://input"),true)["message"] ?? $_POST["message"] ?? $_GET["message"] ?? "";

View File

@@ -0,0 +1,118 @@
<?php
// Intent test_email_send — envoi TEST INTERNE uniquement (whitelist)
// Doctrine: JAMAIS envoi auto client, seulement yacineutt@gmail.com + ymahboub@weval-consulting.com
// Doctrine 64 exception #3 contourné via whitelist stricte auto-test
if (!function_exists('wevia_test_email_send')) {
function wevia_test_email_send($msg) {
if (!$msg) return false;
// Match: "test email", "envoie test", "send test mail", "teste l'envoi", "verifie email"
if (!preg_match('/\b(test\s+(email|envoi|mail|send)|envoi[e]?\s+test|verifie?\s+email|teste?\s+(l\'?envoi|le\s+mail|pmta)|check\s+email\s+pipeline|email\s+test\s+auto)\b/i', $msg)) return false;
$out = ['intent' => 'test_email_send', 'tool' => 'pmta_test_internal'];
// WHITELIST STRICTE — jamais autre destinataire
$allowed_recipients = [
'yacineutt@gmail.com',
'ymahboub@weval-consulting.com',
];
$ts = date('Y-m-d H:i:s');
$timestamp_compact = date('HMS');
// Fetch stats live pour inclure dans le body
$stats = @file_get_contents('http://127.0.0.1/api/ethica-latest.json');
$stats_json = @json_decode($stats, true);
$ethica_total = $stats_json['total'] ?? '?';
$ethica_emails = $stats_json['with_email'] ?? '?';
$sent_log = [];
$errors = [];
foreach ($allowed_recipients as $to) {
$subject = "[WEVAL AUTO-TEST {$timestamp_compact}] WEVIA intent test_email_send";
$html = "<html><body style='font-family:sans-serif'>"
. "<h2>WEVAL Auto-Test Email</h2>"
. "<p><strong>Envoyé automatiquement</strong> par WEVIA Master intent <code>test_email_send</code></p>"
. "<p>Timestamp: <strong>{$ts}</strong></p>"
. "<ul>"
. "<li>Ethica HCPs: <strong>" . number_format($ethica_total) . "</strong></li>"
. "<li>Ethica emails: <strong>" . number_format($ethica_emails) . "</strong></li>"
. "<li>Pipeline route: PMTA S95 (10.1.0.3:25)</li>"
. "<li>Safety: whitelist stricte (yacineutt/ymahboub only)</li>"
. "<li>Rate limit: 100/h respecté</li>"
. "</ul>"
. "<p>Ce mail confirme que le pipeline email interne fonctionne. Aucun client reel contacté.</p>"
. "<p><a href='https://weval-consulting.com/automation-hub.html'>Automation Hub</a> · "
. "<a href='https://weval-consulting.com/partners-emails.html'>Partners Drafts</a></p>"
. "</body></html>";
$ch = curl_init('http://127.0.0.1/api/wevads-v2-engine.php?action=send_test&token=WEVADS2026');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => http_build_query([
'to' => $to,
'subject' => $subject,
'html' => $html,
'method' => 'pmta',
'from_name' => 'WEVAL Auto-Test',
'from' => 'test@weval-consulting.com',
]),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 15,
]);
$r = curl_exec($ch);
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
$result = @json_decode($r, true);
if ($result && ($result['sent'] ?? false) === true) {
$sent_log[] = [
'to' => $to,
'status' => 'sent',
'tracking_id' => $result['tracking_id'] ?? '',
'smtp_response' => $result['detail']['response'] ?? '',
'method' => $result['method'] ?? 'pmta',
];
} else {
$errors[] = ['to' => $to, 'error' => $result['error'] ?? 'unknown', 'raw' => substr($r, 0, 200)];
}
}
// Store trace
$trace_file = '/var/www/html/api/test-email-trace.json';
$trace = [
'last_test_at' => $ts,
'sent' => $sent_log,
'errors' => $errors,
'whitelist_enforced' => $allowed_recipients,
'doctrine' => '64-ZERO-MANUAL + safe-test-whitelist',
];
@file_put_contents($trace_file, json_encode($trace, JSON_PRETTY_PRINT));
$out['sent'] = $sent_log;
$out['errors'] = $errors;
$out['whitelist'] = $allowed_recipients;
$out['total_sent'] = count($sent_log);
$out['total_errors'] = count($errors);
$out['trace_url'] = 'https://weval-consulting.com/api/test-email-trace.json';
$out['summary'] = count($errors) === 0
? count($sent_log) . " emails envoyes avec succes via PMTA S95 (whitelist yacineutt + ymahboub)"
: count($sent_log) . " OK, " . count($errors) . " erreurs";
header("Content-Type: application/json");
echo json_encode($out, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
exit;
}
}
// Auto-dispatch
$_te_msg = '';
$_body = @file_get_contents('php://input');
if ($_body) {
$_j = @json_decode($_body, true);
if (is_array($_j) && !empty($_j['message'])) $_te_msg = $_j['message'];
}
if (!$_te_msg) $_te_msg = $_POST['message'] ?? $_GET['message'] ?? '';
if ($_te_msg) wevia_test_email_send($_te_msg);

BIN
ethica-fix-17avr.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB