107 lines
5.9 KiB
PHP
107 lines
5.9 KiB
PHP
<?php
|
|
header("Content-Type: application/json");
|
|
$path = "/var/www/html/wevia.html";
|
|
$c = @file_get_contents($path);
|
|
$orig = strlen($c);
|
|
|
|
if (strpos($c, "AMBRE-V11-MULTIAGENT") !== false) {
|
|
echo json_encode(["already"=>true]);
|
|
exit;
|
|
}
|
|
|
|
// Insert BEFORE V10-MERMAID (so multi-agent catches complex requests first)
|
|
$anchor = " // === AMBRE-V10-MERMAID 2026-04-22";
|
|
$pos = strpos($c, $anchor);
|
|
if ($pos === false) {
|
|
echo json_encode(["error"=>"V10 anchor not found"]);
|
|
exit;
|
|
}
|
|
$line_start = strrpos(substr($c, 0, $pos), "\n") + 1;
|
|
|
|
$v11 = ' // === AMBRE-V11-MULTIAGENT 2026-04-22 · wave-255 · Plan → Execute N agents parallel → Reconcile ===
|
|
// Triggers : "analyse", "complet", "rapport complet", "compare X avec Y", "multi agent", "plusieurs", "en parallele"
|
|
var _multiagent_pat = /(?:analyse\s+compl[eè]te|rapport\s+complet|bilan\s+complet|compare[rz]?\s+.{3,}\s+(?:avec|vs|contre|et)\s+|multi[- ]?agent|plusieurs\s+angles|en\s+parall[eè]le|synth[eè]se\s+compl[eè]te|analyse\s+360|\ballonsy\b|\bdispatch\b)/i;
|
|
if (_multiagent_pat.test(text) && text.length > 40) {
|
|
if (typeof showThinking === "function") showThinking();
|
|
busy = true;
|
|
try{var sb=document.getElementById("sendBtn");if(sb)sb.disabled=true;}catch(e){}
|
|
|
|
var _ma_start = performance.now();
|
|
fetch("/api/ambre-multiagent-parallel.php", {
|
|
method: "POST",
|
|
headers: {"Content-Type":"application/json"},
|
|
body: JSON.stringify({goal: text, max_agents: 5})
|
|
})
|
|
.then(function(r){ return r.json(); })
|
|
.then(function(data){
|
|
if (typeof hideThinking === "function") hideThinking();
|
|
busy = false;
|
|
try{var sb=document.getElementById("sendBtn");if(sb)sb.disabled=false;}catch(e){}
|
|
try{var mi=document.getElementById("msgInput");if(mi){mi.value="";mi.disabled=false;}}catch(e){}
|
|
|
|
if (!data || !data.ok) {
|
|
addMsg("assistant", "❌ Multi-agent erreur: " + ((data && data.error) || "reessayez"), "0");
|
|
return;
|
|
}
|
|
|
|
var el = ((performance.now() - _ma_start) / 1000).toFixed(1);
|
|
|
|
// Build rich HTML response
|
|
var badges = "<div style=\"display:flex;gap:6px;flex-wrap:wrap;margin:8px 0\">" +
|
|
"<span class=\"nx-badge\" style=\"background:rgba(99,102,241,.15);color:#6366f1\">🧠 Multi-Agent</span>" +
|
|
"<span class=\"nx-badge\" style=\"background:rgba(16,185,129,.15);color:#10b981\">" + data.agents_count + " agents ∥</span>" +
|
|
"<span class=\"nx-badge\" style=\"background:rgba(245,158,11,.15);color:#f59e0b\">⚡ " + data.parallel_speedup + "x speedup</span>" +
|
|
"<span class=\"nx-badge\" style=\"background:rgba(139,92,246,.15);color:#8b5cf6\">" + data.total_ms + "ms</span>" +
|
|
"</div>";
|
|
|
|
// Plan
|
|
var planHtml = "<div style=\"margin:10px 0;padding:12px;background:#eef2ff;border-radius:10px;border-left:3px solid #6366f1\">" +
|
|
"<div style=\"font-weight:600;color:#4338ca;font-size:13px;margin-bottom:6px\">📋 Plan · " + (data.plan.objective || "") + "</div>" +
|
|
"<div style=\"font-size:12px;color:#4b5563\">" + data.plan.agents.length + " agents dispatchés en parallèle</div></div>";
|
|
|
|
// Agents list
|
|
var agentsHtml = "<div style=\"margin:10px 0\"><div style=\"font-weight:600;color:#1a1f3a;font-size:13px;margin-bottom:8px\">🤖 Agents · exécution parallèle</div>";
|
|
data.results.forEach(function(r, i){
|
|
var icon = {"pdf_premium":"📄","mermaid":"📊","web_search":"🔍","calc":"🧮","kb_search":"📚","none":"💭"}[r.tool] || "⚙️";
|
|
agentsHtml += "<div style=\"margin:6px 0;padding:10px;background:#fafafa;border-radius:8px;border:1px solid #e5e7eb\">" +
|
|
"<div style=\"font-size:12px;color:#6366f1;font-weight:600;margin-bottom:4px\">" + icon + " " + r.agent + " · " + r.tool + " · " + r.elapsed_ms + "ms</div>" +
|
|
"<div style=\"font-size:12px;color:#64748b;line-height:1.4\">" + (r.task || "") + "</div>" +
|
|
"<div style=\"font-size:11px;color:#94a3b8;margin-top:4px\">" + (r.summary || "").replace(/</g,"<").substring(0, 250) + "</div>" +
|
|
"</div>";
|
|
});
|
|
agentsHtml += "</div>";
|
|
|
|
// Reconciled
|
|
var synthHtml = "<div style=\"margin:12px 0;padding:14px;background:linear-gradient(135deg,#f0f9ff 0%,#eef2ff 100%);border-radius:12px;border-left:3px solid #10b981\">" +
|
|
"<div style=\"font-weight:600;color:#065f46;font-size:13px;margin-bottom:8px\">✅ Synthèse consolidée</div>" +
|
|
"<div style=\"font-size:13px;color:#1a1f3a;line-height:1.6;white-space:pre-wrap\">" + (data.reconciled || "").replace(/</g,"<") + "</div>" +
|
|
"</div>";
|
|
|
|
var el_resp = addMsg("assistant", "Multi-agent", el);
|
|
var bubble = el_resp ? el_resp.querySelector(".bubble") : null;
|
|
if (bubble) bubble.innerHTML = badges + planHtml + agentsHtml + synthHtml;
|
|
})
|
|
.catch(function(err){
|
|
if (typeof hideThinking === "function") hideThinking();
|
|
busy = false;
|
|
try{var sb=document.getElementById("sendBtn");if(sb)sb.disabled=false;}catch(e){}
|
|
addMsg("assistant", "❌ Multi-agent service indisponible", "0");
|
|
});
|
|
return;
|
|
}
|
|
// === END AMBRE-V11-MULTIAGENT ===
|
|
|
|
';
|
|
|
|
$new_c = substr($c, 0, $line_start) . $v11 . substr($c, $line_start);
|
|
|
|
$backup = "/opt/wevads/vault/wevia.html.GOLD-" . date("Ymd-His") . "-wave255-v11";
|
|
@copy($path, $backup);
|
|
$wrote = @file_put_contents($path, $new_c);
|
|
|
|
echo json_encode([
|
|
"delta" => strlen($new_c) - $orig,
|
|
"wrote" => $wrote,
|
|
"backup" => basename($backup),
|
|
]);
|