Files
html/proof-wave268.html

169 lines
6.7 KiB
HTML

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>PROOF WAVE-268</title>
<style>
body{font-family:-apple-system,Segoe UI,monospace;background:#0b0d15;color:#e2e8f0;padding:30px;font-size:14px;margin:0;min-height:100vh}
.box{background:#1e293b;padding:18px;border:2px solid #10b981;border-radius:10px;margin:12px 0}
.box.fail{border-color:#ef4444}
.key{color:#06b6d4;font-weight:700;font-size:12px}
.val{color:#fff}
h1{color:#f59e0b;margin:0 0 20px 0}
.btn{background:linear-gradient(135deg,#10b981,#06b6d4);color:#000;border:0;padding:14px 28px;font-size:16px;font-weight:800;border-radius:10px;cursor:pointer;box-shadow:0 4px 14px rgba(16,185,129,0.4)}
.btn:hover{transform:scale(1.02)}
.btn:disabled{opacity:.5;cursor:wait}
pre{color:#fff;white-space:pre-wrap;margin:6px 0 0 0;font-size:12px;max-height:300px;overflow:auto;background:#0f172a;padding:10px;border-radius:6px}
.ok{color:#10b981;font-weight:700}
.nok{color:#ef4444;font-weight:700}
#loader{display:none;color:#06b6d4;margin-top:20px;font-weight:700}
</style><!-- DOCTRINE-60-UX-ENRICH direct-inject-20260424-144055 -->
<style id="doctrine60-ux-direct">
/* DOCTRINE-60-UX-ENRICH injected-direct */
body::before {
content: '';
position: fixed;
top: 0; left: 0; width: 100vw; height: 100vh;
background: radial-gradient(circle at 50% 50%, rgba(100,180,255,0.08), transparent 60%);
pointer-events: none;
z-index: -1;
}
.card, .kpi, .panel, .btn {
transition: all 0.3s cubic-bezier(0.2,0,0.1,1);
}
.card:hover, .kpi:hover, .panel:hover {
box-shadow: 0 4px 20px rgba(100,180,255,0.2);
border-color: rgba(100,180,255,0.5);
}
@keyframes pulseD60 {
0%,100% { opacity: 1; transform: scale(1); }
50% { opacity: 0.7; transform: scale(1.05); }
}
.pulse, .live-indicator, .active, .online {
animation: pulseD60 3s ease-in-out infinite;
}
.modal, .chat, .speech, .overlay {
backdrop-filter: blur(12px);
-webkit-backdrop-filter: blur(12px);
}
.enter-stagger {
animation: enterStagD60 0.5s cubic-bezier(0.2,0,0.1,1) forwards;
}
@keyframes enterStagD60 {
from { opacity: 0; transform: translateY(20px); }
to { opacity: 1; transform: translateY(0); }
}
</style>
</head>
<body>
<h1>WAVE-268 PROOF TEST LIVE</h1>
<p style="color:#94a3b8">Teste directement depuis ton navigateur vers le backend WEVIA. Aucun cache, aucun intermediaire.</p>
<button id="runbtn" class="btn" onclick="runTests()">LANCER LES 5 TESTS LIVE</button>
<div id="loader">Running tests...</div>
<div id="results"></div>
<script>
async function runTests() {
var btn = document.getElementById("runbtn");
btn.disabled = true;
document.getElementById("loader").style.display = "block";
var res = document.getElementById("results");
res.innerHTML = "";
var cmds = [
"intents_pool",
"quelle heure",
"multiagent parallele: nonreg + l99 + git",
"orchestrate en parallele: ping + nonreg",
"cable un intent pour donner date quand on dit date_now. Commande: date"
];
for (var i = 0; i < cmds.length; i++) {
var cmd = cmds[i];
var t0 = Date.now();
var answer = "";
var engine = "";
var rawSample = "";
var status = "FAIL";
var err = "";
try {
var r = await fetch("/api/wevia-master-api.php", {
method: "POST",
headers: {"Content-Type": "application/json"},
body: JSON.stringify({message: cmd, session: "proof-" + Date.now()})
});
var txt = await r.text();
rawSample = txt.substring(0, 300);
// Try parse JSON direct
try {
var j = JSON.parse(txt);
answer = j.content || j.response || j.text || "";
engine = j.tool || j.engine || j.provider || "";
} catch(e) {
// Try parse SSE lines
var lines = txt.split("\n");
for (var k = 0; k < lines.length; k++) {
var line = lines[k];
if (line.indexOf("data: ") === 0) {
try {
var d = JSON.parse(line.substring(6));
if ((d.type === "answer" || d.type === "chunk") && d.text) {
answer = d.text;
engine = d.engine || "";
break;
}
} catch(e2) {}
}
}
}
var isFake = answer.toLowerCase().indexOf("intent shell reel") >= 0
|| answer.indexOf("Soutien technique") >= 0
|| answer.indexOf("Conseils d'affaires") >= 0;
status = answer ? (isFake ? "FAKE/LLM" : "REAL") : "EMPTY";
} catch(e) {
err = e.message;
status = "ERR";
}
var elapsed = Date.now() - t0;
var boxClass = (status === "REAL") ? "box" : "box fail";
var statusClass = (status === "REAL") ? "ok" : "nok";
var html = '<div class="' + boxClass + '">';
html += '<div><span class="key">CMD:</span> <span class="val">' + cmd + '</span></div>';
html += '<div><span class="key">STATUS:</span> <span class="' + statusClass + '">' + status + '</span></div>';
html += '<div><span class="key">ENGINE:</span> <span class="val">' + (engine || "?") + '</span></div>';
html += '<div><span class="key">TIME:</span> <span class="val">' + elapsed + 'ms</span></div>';
if (err) html += '<div><span class="key">ERR:</span> <span class="val">' + err + '</span></div>';
if (answer) html += '<div><span class="key">ANSWER:</span></div><pre>' + answer.substring(0,800).replace(/</g,"&lt;") + '</pre>';
if (!answer) html += '<div><span class="key">RAW:</span></div><pre>' + rawSample.replace(/</g,"&lt;") + '</pre>';
html += '</div>';
res.innerHTML += html;
}
res.innerHTML += '<div class="box" style="border-color:#f59e0b"><b>Tests termines</b> - ' + new Date().toLocaleString("fr-FR") + '</div>';
document.getElementById("loader").style.display = "none";
btn.disabled = false;
}
</script>
<!-- DOCTRINE-60-UX-JS --><script id="doctrine60-ux-js-direct">
// DOCTRINE-60-UX-JS staggered entrance
(function(){
if (!('IntersectionObserver' in window)) return;
const obs = new IntersectionObserver((entries) => {
entries.forEach((e, i) => {
if (e.isIntersecting) {
setTimeout(() => e.target.classList.add('enter-stagger'), i * 80);
obs.unobserve(e.target);
}
});
});
document.querySelectorAll('.card, .kpi, .panel').forEach(el => obs.observe(el));
})();
</script>
</body></html>