Files
html/deepseek.html.new
opus ab71e7fdc4
Some checks failed
WEVAL NonReg / nonreg (push) Has been cancelled
AUTO-BACKUP 20260419-2000
2026-04-19 20:00:04 +02:00

1005 lines
63 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>WEVAL Arena — Command Center</title>
<link href="https://fonts.googleapis.com/css2?family=Outfit:wght@300;400;500;600;700;800&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet">
<style>
*{margin:0;padding:0;box-sizing:border-box}
:root{--bg:#06060c;--bg2:#0c0c18;--bg3:#13132a;--bg4:#1a1a3a;--bg5:#222250;--fg:#e4e4f0;--fg2:#9898b8;--fg3:#5a5a78;--bl:#3b82f6;--vi:#8b5cf6;--cy:#06d6a0;--gn:#22c55e;--rd:#ef4444;--go:#f59e0b;--pk:#ec4899;--bd:#1e1e40;--r:10px}
body{font-family:'Outfit',sans-serif;background:var(--bg);color:var(--fg);height:100vh;display:grid;grid-template-columns:280px 1fr 300px;grid-template-rows:52px 1fr;overflow:hidden}
body.sidebar-closed{grid-template-columns:0 1fr 300px}
body.panel-closed{grid-template-columns:280px 1fr 0}
body.both-closed{grid-template-columns:0 1fr 0}
/* HEADER */
.hdr{grid-column:1/-1;display:flex;align-items:center;justify-content:space-between;padding:0 16px;background:var(--bg2);border-bottom:1px solid var(--bd);z-index:10}
.hdr-left{display:flex;align-items:center;gap:10px}
.hdr-logo{font-size:16px;font-weight:700;display:flex;align-items:center;gap:8px}
.hdr-logo .dot{width:10px;height:10px;border-radius:50%;background:var(--cy);box-shadow:0 0 8px var(--cy);animation:pulse 2s infinite}
.badge{font-size:9px;padding:2px 8px;background:var(--vi);border-radius:12px;font-weight:600;letter-spacing:.5px}
.hdr-center{display:flex;gap:4px}
.hdr-tab{padding:6px 14px;font-size:11px;font-weight:600;border-radius:6px;cursor:pointer;color:var(--fg3);transition:.2s;border:1px solid transparent}
.hdr-tab:hover{color:var(--fg);background:var(--bg3)}
.hdr-tab.on{color:var(--cy);background:var(--bg3);border-color:var(--cy)33}
.hdr-right{display:flex;gap:6px;align-items:center}
.hdr-btn{padding:5px 12px;font-size:11px;border-radius:6px;border:1px solid var(--bd);background:var(--bg3);color:var(--fg2);cursor:pointer;font-family:inherit;transition:.2s}
.hdr-btn:hover{background:var(--bg4);color:var(--fg)}
/* LEFT SIDEBAR */
.sidebar{background:var(--bg2);border-right:1px solid var(--bd);overflow-y:auto;display:flex;flex-direction:column;transition:.3s}
.sb-section{padding:12px;border-bottom:1px solid var(--bd)}
.sb-title{font-size:10px;font-weight:700;color:var(--fg3);text-transform:uppercase;letter-spacing:1px;margin-bottom:8px;display:flex;align-items:center;gap:6px}
.sb-search{width:100%;padding:7px 10px;background:var(--bg3);border:1px solid var(--bd);border-radius:6px;color:var(--fg);font-size:12px;font-family:inherit;outline:none}
.sb-search:focus{border-color:var(--bl)}
.sb-item{padding:6px 8px;font-size:12px;color:var(--fg2);border-radius:6px;cursor:pointer;transition:.15s;display:flex;align-items:center;gap:6px;margin:2px 0}
.sb-item:hover{background:var(--bg3);color:var(--fg)}
.sb-item .ico{font-size:14px;width:20px;text-align:center}
.sb-stat{display:flex;justify-content:space-between;padding:4px 0;font-size:11px}
.sb-stat-v{font-weight:600;font-family:'JetBrains Mono',monospace;font-size:11px}
.sb-stat-v.ok{color:var(--cy)}
.sb-stat-v.warn{color:var(--go)}
/* MAIN CHAT */
.main{display:flex;flex-direction:column;overflow:hidden;position:relative}
.chat{flex:1;overflow-y:auto;padding:20px;display:flex;flex-direction:column;gap:14px}
.chat::-webkit-scrollbar{width:5px}
.chat::-webkit-scrollbar-thumb{background:var(--bg4);border-radius:3px}
.welcome{display:flex;flex-direction:column;align-items:center;justify-content:center;flex:1;gap:12px}
.welcome h1{font-size:32px;font-weight:800;background:linear-gradient(135deg,var(--cy),var(--bl),var(--vi));-webkit-background-clip:text;-webkit-text-fill-color:transparent;letter-spacing:-.5px}
.welcome p{color:var(--fg3);font-size:13px;max-width:480px;text-align:center;line-height:1.6}
.welcome-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:6px;margin-top:12px;width:100%;max-width:600px}
.wg-card{padding:10px;background:var(--bg2);border:1px solid var(--bd);border-radius:8px;cursor:pointer;transition:.2s;text-align:center}
.wg-card:hover{border-color:var(--cy);background:var(--bg3);transform:translateY(-2px)}
.wg-card .wg-ico{font-size:20px;margin-bottom:4px}
.wg-card .wg-txt{font-size:10px;color:var(--fg2)}
.msg{display:flex;gap:10px;max-width:760px;width:100%;margin:0 auto;animation:fadeIn .25s}
.msg.user{flex-direction:row-reverse}
.msg-av{width:28px;height:28px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:12px;flex-shrink:0}
.msg.bot .msg-av{background:linear-gradient(135deg,var(--cy),var(--bl))}
.msg.user .msg-av{background:var(--bg4)}
.msg-body{background:var(--bg2);border:1px solid var(--bd);border-radius:var(--r);padding:12px 16px;font-size:13px;line-height:1.7;max-width:640px}
.msg.user .msg-body{background:var(--bl)12;border-color:var(--bl)30}
.msg-body pre{background:var(--bg);padding:10px;border-radius:6px;overflow-x:auto;margin:6px 0;font-family:'JetBrains Mono',monospace;font-size:11px;border:1px solid var(--bd)}
.msg-body code{font-family:'JetBrains Mono',monospace;font-size:11px;background:var(--bg);padding:1px 5px;border-radius:3px}
.msg-meta{font-size:9px;color:var(--fg3);margin-top:5px;display:flex;gap:8px;flex-wrap:wrap}
.msg-meta span{display:flex;align-items:center;gap:3px}
.msg-meta .prov{color:var(--cy);font-weight:600}
/* INPUT */
.input-area{padding:12px 20px 16px;border-top:1px solid var(--bd);background:var(--bg2)}
.modes{display:flex;gap:4px;margin-bottom:8px;flex-wrap:wrap}
.mode{padding:5px 12px;border-radius:16px;border:1px solid var(--bd);background:var(--bg3);color:var(--fg3);font-size:11px;cursor:pointer;transition:.2s;font-family:inherit;font-weight:500;display:flex;align-items:center;gap:4px}
.mode:hover{color:var(--fg);background:var(--bg4)}
.mode.on{border-color:var(--cy);color:var(--cy);background:var(--cy)0d}
.mode.deepthink.on{border-color:var(--vi);color:var(--vi);background:var(--vi)0d}
.mode.search.on{border-color:var(--bl);color:var(--bl);background:var(--bl)0d}
.mode.expert.on{border-color:var(--go);color:var(--go);background:var(--go)0d}
.mode.code.on{border-color:var(--gn);color:var(--gn);background:var(--gn)0d}
.mode.creative.on{border-color:var(--pk);color:var(--pk);background:var(--pk)0d}
.input-row{display:flex;gap:6px;align-items:end}
.input-box{flex:1;background:var(--bg3);border:1px solid var(--bd);border-radius:var(--r);padding:12px 14px;font-size:13px;color:var(--fg);font-family:inherit;resize:none;outline:none;min-height:46px;max-height:180px;transition:.2s}
.input-box:focus{border-color:var(--cy)}
.send{width:42px;height:42px;border-radius:50%;background:linear-gradient(135deg,var(--cy),var(--bl));border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:.15s;flex-shrink:0}
.send:hover{transform:scale(1.05)}
.send:disabled{opacity:.3;cursor:not-allowed}
.send svg{width:16px;height:16px;fill:#fff}
.model-sel{padding:5px 10px;background:var(--bg3);border:1px solid var(--bd);border-radius:6px;color:var(--fg2);font-size:10px;font-family:'JetBrains Mono',monospace;cursor:pointer;outline:none}
/* RIGHT PANEL */
.panel{background:var(--bg2);border-left:1px solid var(--bd);overflow-y:auto;display:flex;flex-direction:column;transition:.3s}
.pn-section{padding:12px;border-bottom:1px solid var(--bd)}
.pn-title{font-size:10px;font-weight:700;color:var(--fg3);text-transform:uppercase;letter-spacing:1px;margin-bottom:8px}
.pn-card{background:var(--bg3);border:1px solid var(--bd);border-radius:8px;padding:10px;margin:4px 0;font-size:11px}
.pn-card-h{display:flex;justify-content:space-between;margin-bottom:4px}
.pn-card-n{font-weight:600;font-size:12px}
.pn-card-s{font-family:'JetBrains Mono',monospace;font-weight:600}
.pn-card-s.ok{color:var(--cy)}
.pn-bar{height:3px;background:var(--bg);border-radius:2px;margin-top:6px;overflow:hidden}
.pn-bar-f{height:100%;border-radius:2px;transition:.3s}
.pn-grid{display:grid;grid-template-columns:1fr 1fr;gap:6px}
.pn-kpi{text-align:center;padding:8px;background:var(--bg3);border-radius:6px;border:1px solid var(--bd)}
.pn-kpi-v{font-size:16px;font-weight:700;font-family:'JetBrains Mono',monospace}
.pn-kpi-l{font-size:9px;color:var(--fg3);margin-top:2px}
.pn-action{display:block;width:100%;padding:7px;margin:3px 0;background:var(--bg3);border:1px solid var(--bd);border-radius:6px;color:var(--fg2);font-size:11px;cursor:pointer;font-family:inherit;text-align:left;transition:.15s}
.pn-action:hover{background:var(--bg4);color:var(--fg);border-color:var(--cy)55}
.loading span{width:6px;height:6px;background:var(--cy);border-radius:50%;display:inline-block;animation:bounce .5s infinite alternate;margin:0 2px}
.loading span:nth-child(2){animation-delay:.15s}
.loading span:nth-child(3){animation-delay:.3s}
@keyframes fadeIn{from{opacity:0;transform:translateY(6px)}to{opacity:1}}
@keyframes bounce{to{transform:translateY(-6px);opacity:.3}}
@keyframes pulse{0%,100%{opacity:1}50%{opacity:.4}}
@media(max-width:900px){body{grid-template-columns:0 1fr 0 !important}.sidebar,.panel{display:none}}
@keyframes pulse-badge{0%,100%{opacity:1}50%{opacity:.4}}
#healthBadge{animation:pulse-badge 2s infinite}
#chat{scroll-behavior:smooth}
/* === OPUS RESPONSIVE FIX v2 19avr — append-only, doctrine #14 === */
@media(max-width: 480px) {
html, body { overflow-x: hidden !important; max-width: 100vw; }
body, main, section, article { word-break: break-word; overflow-wrap: anywhere; }
img, video, iframe, canvas, svg, table, pre, code { max-width: 100% !important; }
pre, code { white-space: pre-wrap; word-break: break-all; }
table { display: block; overflow-x: auto; }
.container, [class*="container"], [class*="wrapper"] { max-width: 100vw !important; padding-left: 12px !important; padding-right: 12px !important; }
[class*="grid"], [class*="-grid"] { grid-template-columns: 1fr !important; gap: 10px !important; }
[class*="kpi"], [class*="stats"], [class*="-cards"] { grid-template-columns: 1fr !important; }
header, nav, footer { flex-wrap: wrap !important; }
header > *, nav > *, footer > * { max-width: 100%; }
h1 { font-size: 22px !important; word-break: break-word; }
h2 { font-size: 18px !important; }
.pitch, [class*="pitch"], [class*="hero"] { word-break: break-word; overflow-wrap: anywhere; }
}
/* === OPUS RESPONSIVE FIX v2 END === */
</style>
</head>
<body>
<div class="hdr">
<div class="hdr-left">
<div class="hdr-logo"><span class="dot"></span> WEVAL Arena</div>
<span class="badge">COMMAND CENTER</span> <span id="healthBadge" style="color:var(--go);font-size:0.7em;margin-left:8px">⏳</span>
</div>
<div class="hdr-center">
<div class="hdr-tab on" onclick="location.href='/deepseek.html'">💬 Chat</div>
<div class="hdr-tab" onclick="location.href='/wevia.html'">🧠 Master</div>
<div class="hdr-tab" onclick="location.href='/l99-saas.html'">📊 L99</div>
<div class="hdr-tab" onclick="location.href='/tools-hub.html'">🔧 Tools</div>
<div class="hdr-tab" onclick="location.href='/weval-wiring.html'">⚡ Wiring</div>
</div>
<div class="hdr-right">
<select id="modelSelect" class="model-select" onchange="currentModel=this.value">
<option value="auto">⚙️ Auto (meilleur disponible)</option>
<optgroup label="🏠 SOUVERAIN — IA WEVAL 0€ ILLIMITÉ">
<option value="wevia-master">🧠 WEVIA Master · 310 intents · 88/90</option>
<option value="consensus">⚖️ Consensus MoA · 4 providers · 84/90</option>
<option value="manager">👔 Manager · orchestration · 83/90</option>
<option value="wevia-public">💬 WEVIA Public · chatbot · 82/90</option>
<option value="wevia-console">🖥️ WEVIA Console · 71 modules · 81/90</option>
<option value="wevia-widget">🔮 WEVIA Widget · embed · 80/90</option>
<option value="wevia-code">💻 WevCode · 4 modes · 82/90</option>
<option value="wevia-brain">🧬 Brain RAG · Qdrant 16K · 80/90</option>
<option value="wevia-search">🔍 Search SearXNG · souverain</option>
<option value="wevia-director">🎬 Director · supervision · 76/90</option>
<option value="wevia-research">📚 Deep Research · multi-source</option>
<option value="wevia-creative">🎨 Creative Engine</option>
<option value="wevia-dream">💭 Dream · génération</option>
<option value="wevia-vision">👁️ Vision · multimodal</option>
<option value="wevia-smart">🧭 Smart Router · auto</option>
</optgroup>
<optgroup label="🏠 SOUVERAIN — Agents 0€ ILLIMITÉ">
<option value="paperclip">📎 Paperclip · projet · 76/90</option>
<option value="deerflow">🦌 DeerFlow · 42 skills · 79/90</option>
<option value="mirofish">🐟 WePredict/MiroFish · 75/90</option>
<option value="blade-ai">⚔️ Blade IA · desktop · 76/90</option>
<option value="hermes">📨 Hermes · messaging · 75/90</option>
<option value="kilo">📊 Kilo · KPI tracking · 73/90</option>
<option value="ux-agent">🎨 UX Agent · visual QA · 71/90</option>
<option value="wevia-quality">✅ Quality Agent</option>
<option value="wevia-chef">👨‍🍳 Agent Chef</option>
<option value="n8n">⚡ n8n Workflows</option>
</optgroup>
<optgroup label="🏠 SOUVERAIN — Backend 0€ ILLIMITÉ">
<option value="wevdroid">🤖 WevDroid · diagnostic · 79/90</option>
<option value="wevcode">💻 WevCode IDE · code · 82/90</option>
<option value="claw-code">🐙 Claw Code · review · 78/90</option>
<option value="openclaw">🐙 OpenClaw · chat local · 74/90</option>
<option value="cortex">🌐 Cortex · archi SVG · 77/90</option>
<option value="wevads-ia">📧 WEVADS IA · email · 78/90</option>
<option value="ethica-chat">💊 Ethica Chat · pharma · 77/90</option>
</optgroup>
<optgroup label="🏠 SOUVERAIN — Sécurité 0€ ILLIMITÉ">
<option value="sentinel">🔒 Sentinel · S95 · 75/90</option>
<option value="guardian">🛡️ Guardian · SSO · 74/90</option>
<option value="nuclei">🔬 Nuclei · pentest · 73/90</option>
</optgroup>
<optgroup label="🏠 SOUVERAIN — Testing 0€ ILLIMITÉ">
<option value="l99-brain">🧪 L99 Brain · 29/29 · 80/90</option>
<option value="ops-center">🎯 Ops Center</option>
<option value="oss-discovery">🔭 OSS Discovery</option>
<option value="ai-bench">📊 AI Benchmark · 39 IAs</option>
</optgroup>
<optgroup label="🏠 SOUVERAIN — LLM Local 0€ ILLIMITÉ">
<option value="ollama">🏠 Qwen3 4B · Ollama · 72/90</option>
<option value="ollama-gemma4">🏠 Gemma4 E4B</option>
<option value="weval-brain-v3">🧠 WEVAL Brain v3 (email/pharma fine-tuné) · local · 72/90</option>
</optgroup>
<optgroup label="☁️ 0€ ILLIMITÉ — Aucun cap strict">
<option value="cf-deepseek-r1">🧠 DeepSeek-R1 32B [CF]</option>
<option value="cf-llama">🦙 Llama 3.1 8B [CF]</option>
<option value="nim-llama">🟢 Llama 3.1 8B [NVIDIA.NIM.40rpm]</option>
<option value="nim-deepseek">🧠 DeepSeek-R1 8B [NIM]</option>
<option value="mistral">🇫🇷 Mistral Nemo EU</option>
<option value="alibaba-qwen">🟣 Qwen Turbo [Alibaba]</option>
</optgroup>
<optgroup label="⚡ 0€ RATE LIMITÉ — Cap quotidien">
<option value="or-gpt-oss">💎 GPT-OSS 120B [50/j]</option>
<option value="or-nemotron">🔥 Nemotron-3 120B [50/j]</option>
<option value="or-gemma4">✨ Gemma-4 26B [50/j]</option>
<option value="cohere">📘 Cohere R+ [1000/mois]</option>
<option value="groq-llama">⚡ Groq 70B [à renouveler]</option>
<option value="cerebras">🚀 Cerebras [à renouveler]</option>
</optgroup>
<optgroup label="💰 PAYANT — Premium">
<option value="anthropic">🟠 Claude Opus 4.6 · 90/90</option>
</optgroup>
<optgroup label="🌐 WEBCHAT 0€ ILLIMITÉ — Playwright">
<option value="deepseek-web">🔥 DeepSeek Chat</option>
<option value="deepseek-web-think">🧠 DS DeepThink</option>
<option value="deepseek-web-search">🔍 DS Search</option>
<option value="web-copilot">🔵 Copilot GPT-4o</option>
<option value="web-huggingchat">🤗 HuggingChat 121</option>
<option value="web-meta">Ⓜ️ Meta AI Llama</option>
<option value="web-duckduckgo">🦆 DuckDuckGo AI</option>
<option value="web-qwen">🟣 Qwen Chat</option>
<option value="web-lechat">🇫🇷 Le Chat Mistral</option>
<option value="web-perplexity">🔍 Perplexity</option>
</optgroup>
<optgroup label="🛠️ SKILLS — Exécution réelle 0€">
<option value="skill-pdf">📄 Générer PDF</option>
<option value="skill-excel">📊 Générer Excel</option>
<option value="skill-pptx">📽️ Générer PowerPoint</option>
<option value="skill-image">🖼️ Générer Image SVG</option>
<option value="skill-tts">🔊 Text-to-Speech MP3</option>
<option value="skill-video">🎬 Générer Vidéo MP4</option>
<option value="skill-code">💻 Code Agent (ERP/SaaS)</option>
<option value="skill-debug">🐛 Debug 4 phases</option>
<option value="skill-cicd">🚀 CI/CD Pipeline</option>
<option value="skill-docker">🐳 Docker Manager</option>
<option value="skill-webhook">🔗 Créer Webhook</option>
<option value="skill-browser">🌐 Screenshot Page</option>
<option value="skill-pr">📝 PR Review</option>
<option value="skill-lint">🔧 Lint & Auto-fix</option>
<option value="skill-sql">🗄️ SQL/Data Query</option>
<option value="skill-scrape">🕷️ Web Scrape</option>
<option value="skill-cron">⏰ Cron Manager</option>
<option value="skill-multiagent">🤖 Multi-Agent 5ch</option>
</optgroup>
<optgroup label="📋 INDEX — Tous les écrans (209 pages)">
<option value="idx-arena">🏟️ WEVAL Arena (cette page)</option>
<option value="idx-master">🧠 WEVIA Master</option>
<option value="idx-console">🖥️ WEVIA Console (71 modules)</option>
<option value="idx-ops">🎯 Ops Center</option>
<option value="idx-l99">🧪 L99 SaaS</option>
<option value="idx-hubs">📚 Tous les Hubs (26)</option>
<option value="idx-agents">🤖 Agents Fleet (14)</option>
<option value="idx-monitors">📊 Monitors (10)</option>
<option value="idx-ethica">💊 Ethica (7)</option>
<option value="idx-blade">⚔️ Blade Center</option>
<option value="idx-director">🎬 Director</option>
<option value="idx-wevads">📧 WEVADS Arsenal (S95 150+)</option>
<option value="idx-admin">🔐 Admin</option>
<option value="idx-infra">🏗️ Infrastructure</option>
<option value="idx-security">🛡️ Security Hub</option>
<option value="idx-benchmark">📊 AI Benchmark (39 IAs)</option>
<option value="idx-wiring">🔌 Wiring Map</option>
<option value="idx-wiki">📖 Wiki</option>
<option value="idx-register">📋 Register</option>
<option value="idx-life">💌 WEVIA Life</option>
</optgroup>
<optgroup label="🤖 MULTI-AGENT — Exécution réelle parallèle">
<option value="multiagent-3">🤖 3 Agents (Master+NIM+Alibaba)</option>
<option value="multiagent-5">🤖 5 Agents (Master+NIM+Alibaba+Mistral+OR)</option>
<option value="multiagent-all">🤖 ALL Agents (tous providers actifs)</option>
<option value="multiagent-sovereign">🏠 Souverain Only (Master+Public+Search)</option>
<option value="multiagent-coders">💻 Coders (NIM-DS+Alibaba+Mistral+GPT-OSS)</option>
</optgroup>
<optgroup label="⚔️ ARSENAL S95 — 170 écrans WEVADS">
<option value="arsenal-accounts">🔑 Account Creator</option>
<option value="arsenal-factory">🏭 Cloud Account Factory</option>
<option value="arsenal-ia-factory">🤖 IA Provider Factory</option>
<option value="arsenal-dark-scout">🕵️ Dark Scout</option>
<option value="arsenal-personas">👤 Mail Personas</option>
<option value="arsenal-cvc">💳 CVC Vault</option>
<option value="arsenal-brain">🧠 Brain Central</option>
<option value="arsenal-captcha">🔓 Captcha Solver</option>
<option value="arsenal-cf">☁️ CF Accounts Manager</option>
<option value="arsenal-rotation">🔄 Provider Rotation</option>
<option value="arsenal-all">📋 Arsenal Complet (170)</option>
</optgroup>
<optgroup label="📚 HUBS — 28 centres de contrôle">
<option value="hub-ai">🤖 AI Hub</option>
<option value="hub-agents">🤖 Agents Hub</option>
<option value="hub-anthropic">🟠 Anthropic Hub</option>
<option value="hub-apikey">🔑 API Key Hub</option>
<option value="hub-blade">⚔️ Blade Hub</option>
<option value="hub-cf">☁️ Cloudflare Hub</option>
<option value="hub-deepseek">🧠 DeepSeek Hub</option>
<option value="hub-deerflow">🦌 DeerFlow Hub</option>
<option value="hub-docker">🐳 Docker Hub</option>
<option value="hub-email">📧 Email Hub</option>
<option value="hub-ethica">💊 Ethica Hub</option>
<option value="hub-github">🐙 GitHub Hub</option>
<option value="hub-google">🔍 Google Hub</option>
<option value="hub-gpu">🎮 GPU Hub</option>
<option value="hub-hetzner">🏗️ Hetzner Hub</option>
<option value="hub-hf">🤗 HuggingFace Hub</option>
<option value="hub-keys">🔐 Keys Hub</option>
<option value="hub-monitor">📊 Monitoring Hub</option>
<option value="hub-n8n">⚡ n8n Hub</option>
<option value="hub-office">📄 Office Hub</option>
<option value="hub-paperclip">📎 Paperclip Hub</option>
<option value="hub-qa">✅ QA Hub</option>
<option value="hub-qdrant">🧬 Qdrant Hub</option>
<option value="hub-security">🛡️ Security Hub</option>
<option value="hub-toolhub">🔧 ToolHub</option>
<option value="hub-wevads">📧 WEVADS Hub</option>
<option value="hub-wevia">🧠 WEVIA Hub</option>
</optgroup>
<optgroup label="📱 APPS — Outils et interfaces">
<option value="app-admin">🔐 Admin</option>
<option value="app-architecture">🏗️ Architecture</option>
<option value="app-benchmark">📊 AI Benchmark</option>
<option value="app-blade-center">⚔️ Blade Center</option>
<option value="app-booking">📅 Booking</option>
<option value="app-claude-monitor">🟠 Claude Monitor</option>
<option value="app-command">🎯 Command Center</option>
<option value="app-cron">⏰ Cron Control</option>
<option value="app-crm">👥 CRM</option>
<option value="app-cyber">🛡️ Cyber Monitor</option>
<option value="app-director">🎬 Director Center</option>
<option value="app-droid">🤖 Droid Terminal</option>
<option value="app-enterprise">🏢 Enterprise</option>
<option value="app-ethica-hcp">💊 Ethica HCP</option>
<option value="app-ethica-pipeline">💊 Ethica Pipeline</option>
<option value="app-infra">🏗️ Infra Monitor</option>
<option value="app-l99">🧪 L99 SaaS</option>
<option value="app-medreach">📧 MedReach</option>
<option value="app-monitoring">📊 Monitoring</option>
<option value="app-nonreg">✅ NonReg</option>
<option value="app-oss">🔭 OSS Discovery</option>
<option value="app-realtime">📡 Realtime Monitor</option>
<option value="app-security">🛡️ Security Dashboard</option>
<option value="app-solution">🔍 Solution Finder</option>
<option value="app-sovereign">🏠 Sovereign Claude</option>
<option value="app-wiki">📖 Wiki</option>
<option value="app-wiring">🔌 Wiring Map</option>
<option value="app-registry">🧠 IA Souveraine (9 couches)</option>
<option value="app-faq">⚠️ FAQ Anti-Régression (47 pièges)</option>
</optgroup>
<optgroup label="💰 BUDGET — Suivi consommation IA">
<option value="budget-status">💰 Budget Status (ce mois)</option>
<option value="budget-daily">📊 Conso Journalière</option>
<option value="budget-savings">💚 Économies vs Payant</option>
</optgroup>
<optgroup label="🧠 CLAUDE CODE — Skills & Plugins">
<option value="cc-superclaude">⚡ SuperClaude (30 cmds, personas)</option>
<option value="cc-oh-my">🤖 oh-my-claudecode (19 agents)</option>
<option value="cc-antigravity">🚀 Antigravity (4198 skills)</option>
<option value="cc-everything">🛡️ Everything CC (420 skills)</option>
<option value="cc-awesome">📦 Awesome Toolkit (135 agents)</option>
<option value="cc-hf-skills">🤗 HuggingFace Skills (12)</option>
<option value="cc-voltagent">⚡ VoltAgent (1000+ skills)</option>
<option value="cc-mem">🧠 Claude-Mem (mémoire persistante)</option>
</optgroup>
<optgroup label="🔬 AI/ML — Training & Inference">
<option value="ml-hf">🤗 HuggingFace Hub (1M+ modèles)</option>
<option value="ml-vllm">⚡ vLLM (PagedAttention)</option>
<option value="ml-localai">🏠 LocalAI (OpenAI compat)</option>
<option value="ml-openwebui">🌐 Open WebUI</option>
<option value="ml-librechat">💬 LibreChat (multi-provider)</option>
<option value="ml-unsloth">🦥 Unsloth (2× faster finetune)</option>
<option value="ml-llamafactory">🏭 LLaMA-Factory (zero-code)</option>
<option value="ml-ragflow">📚 RAGFlow (GraphRAG)</option>
<option value="ml-langfuse">📊 Langfuse (LLM observability)</option>
<option value="ml-whisper">🎤 Whisper.cpp (STT gratuit)</option>
<option value="ml-haystack">🔍 Haystack (RAG prod)</option>
<option value="ml-crewai">🤖 CrewAI (multi-agent)</option>
<option value="ml-modelscope">🟣 ModelScope (Alibaba Hub)</option>
<option value="ml-lmarena">🏆 LMArena (Benchmark)</option>
<option value="ml-manus">🤖 Manus (agent autonome)</option>
<option value="ml-dify">🔄 Dify (LLM platform)</option>
<option value="ml-browseruse">🌐 Browser Use (agent web)</option>
</optgroup>
<optgroup label="🆓 GPU FREE — Compute gratuit">
<option value="gpu-colab">🎮 Google Colab (T4/A100)</option>
<option value="gpu-kaggle">🎮 Kaggle (P100/T4 30h/sem)</option>
<option value="gpu-lightning">⚡ Lightning AI (22h/mois)</option>
<option value="gpu-oracle">☁️ Oracle Free (4 ARM 24GB)</option>
<option value="gpu-hf-spaces">🤗 HF Spaces (gratuit)</option>
<option value="gpu-runpod">🎮 RunPod (spots)</option>
<option value="gpu-vastai">🎮 Vast.ai (A100 $0.50/h)</option>
<option value="gpu-tensorDock">🎮 TensorDock (RTX4090 $0.34)</option>
</optgroup>
<optgroup label="🎨 DESIGN & MEDIA — Gratuit">
<option value="media-dreamina">🎨 Dreamina (ByteDance)</option>
<option value="media-msdesigner">🎨 MS Designer</option>
<option value="media-stitch">🎨 Google Stitch (UI)</option>
<option value="media-lyria3">🎵 Lyria 3 (musique IA)</option>
<option value="media-suno">🎵 Suno (musique IA)</option>
<option value="media-ltxvideo">🎬 LTX-Video (vidéo IA)</option>
<option value="media-excalidraw">✏️ Excalidraw (whiteboard)</option>
</optgroup>
<optgroup label="🐳 OSS DISCOVERY — 36 outils">
<option value="oss-argocd">🚀 ArgoCD (GitOps K8s)</option>
<option value="oss-harbor">🐳 Harbor (container registry)</option>
<option value="oss-loki">📊 Grafana Loki (logs)</option>
<option value="oss-signoz">📊 SigNoz (APM)</option>
<option value="oss-infisical">🔐 Infisical (secrets)</option>
<option value="oss-opentofu">🏗️ OpenTofu (IaC)</option>
<option value="oss-woodpecker">🐦 Woodpecker CI</option>
<option value="oss-plane">📋 Plane (Jira alt)</option>
<option value="oss-calcom">📅 Cal.com (booking)</option>
<option value="oss-chatwoot">💬 Chatwoot (support)</option>
<option value="oss-clickhouse">📊 ClickHouse (OLAP)</option>
<option value="oss-airbyte">🔄 Airbyte (data integ)</option>
<option value="oss-nocodb">📊 NocoDB (Airtable alt)</option>
<option value="oss-posthog">📊 PostHog (analytics)</option>
<option value="oss-jitsi">📹 Jitsi Meet (video)</option>
<option value="oss-trivy">🛡️ Trivy (scanner)</option>
<option value="oss-gitleaks">🔐 Gitleaks (secrets scan)</option>
<option value="oss-appsmith">🔧 Appsmith (low-code)</option>
</optgroup>
<optgroup label="🔧 OSS TOOLS — 40+ outils clonés">
<option value="oss-autogen">🤖 AutoGen (Microsoft)</option>
<option value="oss-crewai">🚀 CrewAI (Multi-agent)</option>
<option value="oss-deepagent">🧠 DeepAgent</option>
<option value="oss-goose">🦆 Goose (Block AI)</option>
<option value="oss-antigravity">🌀 AntiGravity Skills</option>
<option value="oss-langchain">🔗 LangChain</option>
<option value="oss-langflow">🌊 LangFlow</option>
<option value="oss-dify">💎 Dify</option>
<option value="oss-jan">🤖 Jan (Local AI)</option>
<option value="oss-openwebui">🌐 Open WebUI</option>
<option value="oss-anythingllm">📚 AnythingLLM</option>
<option value="oss-librechat">💬 LibreChat</option>
<option value="oss-localai">🏠 LocalAI</option>
<option value="oss-vllm">⚡ vLLM</option>
<option value="oss-whisper">🎤 Whisper.cpp</option>
<option value="oss-ltxvideo">🎬 LTX-Video</option>
<option value="oss-supermemory">🧠 SuperMemory</option>
<option value="oss-activepieces">⚙️ ActivePieces</option>
<option value="oss-listmonk">📧 Listmonk</option>
<option value="oss-wazuh">🛡️ Wazuh SIEM</option>
<option value="oss-holyclaude">✝️ HolyClaude</option>
<option value="oss-superclaude">🦸 SuperClaude</option>
</optgroup>
<optgroup label="🆕 À CLONER — Blade Tasks">
<option value="clone-obsidian">📝 Obsidian (à cloner)</option>
<option value="clone-pinocchio">🤥 Pinocchio/Pinokio (à cloner)</option>
<option value="clone-manus">🖐️ Manus Agent (à cloner)</option>
<option value="clone-coderabbit">🐰 CodeRabbit (à cloner)</option>
<option value="clone-granite">🪨 IBM Granite (à cloner)</option>
<option value="clone-boltnew">⚡ Bolt.new (à cloner)</option>
<option value="clone-opendevin">🧑‍💻 OpenDevin/OpenHands (à cloner)</option>
<option value="clone-sweagent">🔧 SWE-Agent (à cloner)</option>
</optgroup>
<optgroup label="🧬 MODÈLES LOCAUX — Ollama S204">
<option value="oss-glm4">🇨🇳 GLM-4 9B (multilingual)</option>
<option value="oss-medllama">💊 MedLlama2 + Meditron (medical)</option>
<option value="oss-minilm">📐 all-MiniLM (embeddings)</option>
<option value="oss-diffusiondb">🖼️ DiffusionDB (2M prompts)</option>
</optgroup>
<optgroup label="🔌 CLAUDE TOOLS — Skills & Plugins">
<option value="oss-everything-claude">🛡️ Everything Claude (420 skills)</option>
<option value="oss-awesome-claude">🔧 Awesome Claude Toolkit (135 agents)</option>
<option value="oss-skillsmith">🏭 SkillSmith (skill generator)</option>
</optgroup>
<optgroup label="🌐 PLATEFORMES IA — Installées">
<option value="oss-open-webui">🌐 Open WebUI (Ollama frontend)</option>
<option value="oss-euria">🇨🇭 Euria (Infomaniak souverain)</option>
<option value="oss-mastra">🔗 Mastra (agents framework TS)</option>
<option value="oss-browser-use">🌐 Browser Use (web agent)</option>
<option value="oss-scrapy">🕷️ Scrapy (4 spiders actifs)</option>
</optgroup>
<optgroup label="🛡️ SÉCURITÉ & MONITORING">
<option value="oss-aegis">🛡️ AEGIS Security (TrustA 0 vulns)</option>
<option value="oss-crowdsec">🛡️ CrowdSec (protection collaborative)</option>
<option value="oss-vaultwarden">🔐 Vaultwarden (passwords)</option>
<option value="oss-prometheus">📊 Prometheus (métriques)</option>
<option value="oss-evomaster">🧪 EvoMaster (REST/GraphQL test)</option>
<option value="oss-aios">🖥️ AIOS (OS pour agents)</option>
<option value="oss-trustmrr">📈 TrustMRR (ML evaluation)</option>
</optgroup>
<optgroup label="☁️ CLOUD FREE & GPU — Déploiement">
<option value="cloud-vercel">▲ Vercel (hosting+AI SDK)</option>
<option value="cloud-render">🟢 Render (free tier)</option>
<option value="cloud-railway">🚂 Railway (500h/mois free)</option>
<option value="cloud-flyio">✈️ Fly.io (3 VMs free)</option>
<option value="cloud-lambda">λ Lambda Cloud (GPU ML)</option>
<option value="cloud-hyperstack">⚡ Hyperstack (A6000 GPU)</option>
<option value="cloud-northflank">🌐 Northflank (multi-cloud)</option>
</optgroup>
<optgroup label="🎨 DESIGN & CREATIVE IA">
<option value="design-llooka">🎭 Llooka (avatars/logos IA)</option>
<option value="design-prompthero">🎯 PromptHero (marketplace)</option>
<option value="design-affinity">🎨 Affinity (alt Adobe)</option>
<option value="design-layer">🖼️ Layer.ai (images jeux)</option>
</optgroup>
<optgroup label="🔬 LLM INFERENCE & TOOLS">
<option value="llm-llamacpp">🦙 llama.cpp (GGUF CPU/GPU)</option>
<option value="llm-tgi">🤗 TGI HuggingFace (serving)</option>
<option value="llm-llamaindex">📚 LlamaIndex (RAG data)</option>
<option value="llm-flowise">🌊 Flowise (visual builder)</option>
<option value="llm-godmod3">🔀 godmod3.AI (multi-LLM routing)</option>
<option value="llm-notebooklm">📓 NotebookLM (Google AI)</option>
</optgroup>
<optgroup label="🔧 OUTILS DEV & KNOWLEDGE">
<option value="tool-ghgrab">📥 GHGrab (GitHub bulk DL)</option>
<option value="tool-blinkcode">📖 Blink Code Wiki</option>
<option value="tool-feeddough">📰 FeedDough (news IA)</option>
<option value="tool-prompthackers">🔐 PromptHackers (sécurité)</option>
<option value="tool-powertoys">⚡ PowerToys (QR/DNS/SSL/Hash)</option>
</optgroup>
<optgroup label="📡 TECH RADAR — We Use / Recommend">
<option value="radar-mautic">📧 Mautic (marketing automation 9.3K⭐)</option>
<option value="radar-postal">📨 Postal (mail delivery 15K⭐)</option>
<option value="radar-erpnext">🏭 ERPNext (full ERP 32K⭐)</option>
<option value="radar-supabase">🔥 Supabase (open Firebase 98K⭐)</option>
<option value="radar-metabase">📊 Metabase (BI dashboards 40K⭐)</option>
<option value="radar-coolify">🚀 Coolify (self-hosted PaaS 40K⭐)</option>
<option value="radar-frp">🔗 frp (reverse proxy 105K⭐)</option>
<option value="radar-comfyui">🎨 ComfyUI (Stable Diffusion 105K⭐)</option>
<option value="radar-traefik">🔀 Traefik (cloud proxy 53K⭐)</option>
<option value="radar-kubernetes">☸️ Kubernetes (121K⭐)</option>
<option value="radar-immich">📸 Immich (photos 94K⭐)</option>
<option value="radar-firecrawl">🔥 Firecrawl (web→LLM 93K⭐)</option>
</optgroup>
<optgroup label="🔬 OSS DISCOVERY — Exploring">
<option value="radar-langfuse">🔍 Langfuse (LLM observability 23K⭐)</option>
<option value="radar-ragflow">📄 RAGFlow (document RAG 65K⭐)</option>
<option value="radar-unsloth">⚡ Unsloth (2x faster fine-tune 54K⭐)</option>
<option value="radar-llamafactory">🏭 LLaMA-Factory (zero-code 60K⭐)</option>
<option value="radar-mlflow">📊 MLflow (MLOps 19K⭐)</option>
<option value="radar-haystack">🔎 Haystack (prod RAG 23K⭐)</option>
<option value="radar-argocd">🔄 ArgoCD (GitOps K8s 22K⭐)</option>
<option value="radar-harbor">🏗️ Harbor (container registry 28K⭐)</option>
<option value="radar-signoz">📈 SigNoz (APM traces 25K⭐)</option>
<option value="radar-infisical">🔐 Infisical (secrets mgmt 25K⭐)</option>
<option value="radar-opentofu">🌍 OpenTofu (Terraform fork 28K⭐)</option>
<option value="radar-woodpecker">🪶 Woodpecker CI (Gitea native 5K⭐)</option>
<option value="radar-velero">💾 Velero (K8s backup 9.2K⭐)</option>
<option value="radar-calcom">📅 Cal.com (scheduling 39K⭐)</option>
<option value="radar-chatwoot">💬 Chatwoot (omnichannel 28K⭐)</option>
<option value="radar-documenso">✍️ Documenso (e-sign 9K⭐)</option>
<option value="radar-clickhouse">🗃️ ClickHouse (OLAP 39K⭐)</option>
<option value="radar-airbyte">🔌 Airbyte (data connectors 21K⭐)</option>
<option value="radar-redpanda">🐼 Redpanda (Kafka alt 10K⭐)</option>
<option value="radar-jitsi">📹 Jitsi Meet (video conf 29K⭐)</option>
<option value="radar-livekit">🎙️ LiveKit (WebRTC+AI 22K⭐)</option>
<option value="radar-trivy">🔒 Trivy (vuln scanner 25K⭐)</option>
<option value="radar-gitleaks">🔑 Gitleaks (secrets detect 25K⭐)</option>
<option value="radar-falco">🦅 Falco (runtime security 7.6K⭐)</option>
<option value="radar-nocodb">📋 NocoDB (Airtable alt 50K⭐)</option>
<option value="radar-appsmith">🧱 Appsmith (low-code 35K⭐)</option>
<option value="radar-superset">📊 Superset (BI enterprise 65K⭐)</option>
<option value="radar-excalidraw">✏️ Excalidraw (whiteboard 119K⭐)</option>
<option value="radar-posthogg">📈 PostHog (product analytics 31K⭐)</option>
</optgroup>
<optgroup label="🧠 WEVAL BRAIN — Couches cognitives">
<option value="brain-nucleus">🧬 Brain Nucleus v3 (1334L, 23fn)</option>
<option value="cognitive-brain">🎯 Cognitive Brain (routing+guard)</option>
<option value="cognitive-opus">⚡ Cognitive Opus46 (CoT+dialectical)</option>
<option value="weval-mind">🔄 WEVAL Mind (cycle autonome)</option>
<option value="hamid-ia">🤖 HAMID IA (legacy brain)</option>
</optgroup>
<optgroup label="📧 WEVAL SEND — Email Platform">
<option value="weval-send">📨 WEVAL Send (DeliverAds)</option>
<option value="deliverads">📧 DeliverAds (delivery engine)</option>
<option value="mailwarm">🔥 MailWarm (IP warmup)</option>
<option value="mailforge">🔨 MailForge (template builder)</option>
<option value="mailstream">🌊 MailStream (flow control)</option>
<option value="deliverscore">📊 DeliverScore (reputation)</option>
<option value="emailverify">✅ EmailVerify (validation)</option>
<option value="inboxtest">📬 InboxTest (placement)</option>
<option value="reputationai">🛡️ ReputationAI (IP/domain)</option>
<option value="smsforge">📱 SMSForge (SMS campaigns)</option>
<option value="adscontrol">🎯 AdsControl (ad management)</option>
</optgroup>
<optgroup label="💊 ETHICA & MEDREACH — Pharma B2B">
<option value="ethica-chatbot">💊 Ethica Chatbot (131K HCPs)</option>
<option value="medreach-platform">🏥 MedReach Platform</option>
<option value="healthcare-crm">🏥 Healthcare CRM</option>
</optgroup>
<optgroup label="🤖 WEVAL AI SAAS — Produits IA">
<option value="outreachai">📧 OutreachAI (prospection)</option>
<option value="ai-sdr">🤖 AI SDR Agent (sales dev)</option>
<option value="proposalai">📋 ProposalAI (propositions)</option>
<option value="blueprintai">🏗️ BlueprintAI (architecture)</option>
<option value="canvasai">🎨 CanvasAI (design)</option>
<option value="copyai">✍️ CopyAI (rédaction)</option>
<option value="presentationai">📽️ PresentationAI (slides)</option>
<option value="translateai">🌍 TranslateAI (traduction)</option>
<option value="devforge">💻 DevForge AI (code gen)</option>
<option value="content-factory">📝 Content Factory</option>
<option value="creative-factory">🎨 Creative Factory</option>
</optgroup>
<optgroup label="📊 WEVAL BUSINESS — Consulting">
<option value="consulting-pro">👔 Consulting Pro</option>
<option value="leadforge">🎯 LeadForge (lead gen)</option>
<option value="datainsight">📊 DataInsight (analytics)</option>
<option value="wevanalytics">📈 Wevanalytics</option>
<option value="scout-intelligence">🕵️ Scout Intelligence</option>
<option value="cloudbridge">☁️ CloudBridge</option>
<option value="cloudcost">💰 CloudCost (FinOps)</option>
<option value="academy">🎓 Academy (formation)</option>
<option value="partner-program">🤝 Partner Program</option>
<option value="wevia-life">💌 WEVIA Life (email IA CoS)</option>
</optgroup>
<optgroup label="🏪 WEVAL COMMERCE — E-commerce IA">
<option value="storeforge">🏪 StoreForge (e-shop gen)</option>
<option value="storeai">🤖 StoreAI (shop assistant)</option>
<option value="formbuilder">📝 FormBuilder</option>
<option value="youtube-factory">🎬 YouTube Factory</option>
<option value="lyria-music">🎵 Lyria 3 (musique IA)</option>
</optgroup>
</select>
<button class="hdr-btn" id="dsConnect" onclick="connectDS()" style="background:var(--go)22;border-color:var(--go);color:var(--go)">🔗 Connecter DeepSeek</button>
<button class="hdr-btn" onclick="clearChat()">+ Nouveau</button>
</div>
</div>
<!-- LEFT SIDEBAR -->
<div class="sidebar" id="sidebar">
<div class="sb-section">
<div class="sb-title">🔍 Recherche KB</div>
<input class="sb-search" id="kbSearch" placeholder="Chercher dans la KB..." onkeydown="if(event.key==='Enter')searchKB()">
<div id="kbResults" style="margin-top:6px"></div>
</div>
<div class="sb-section">
<div class="sb-title">📚 Wiki</div>
<div id="wikiList">
<div class="sb-item" onclick="askQ('wave status')"><span class="ico">📋</span> Wave 114</div>
<div class="sb-item" onclick="askQ('reconcilie tout')"><span class="ico">🔄</span> Réconciliation</div>
<div class="sb-item" onclick="askQ('aide')"><span class="ico">❓</span> Aide (294 intents)</div>
</div>
</div>
<div class="sb-section">
<div class="sb-title">⚡ Quick Actions</div>
<div class="sb-item" onclick="askQ('comment va le systeme')"><span class="ico">💚</span> System status</div>
<div class="sb-item" onclick="askQ('lance nonreg')"><span class="ico">🧪</span> NonReg tests</div>
<div class="sb-item" onclick="askQ('push all')"><span class="ico">📤</span> Git push</div>
<div class="sb-item" onclick="askQ('l99 master dashboard')"><span class="ico">📊</span> Dashboard L99</div>
<div class="sb-item" onclick="askQ('etat des hubs')"><span class="ico">🏢</span> Hubs status</div>
<div class="sb-item" onclick="askQ('provider cascade status')"><span class="ico">🔗</span> Cascade status</div>
<div class="sb-item" onclick="askQ('scan web IA souveraine')"><span class="ico">🌐</span> Web scan</div>
<div class="sb-item" onclick="askQ('genere un ERP complet')"><span class="ico">🏭</span> Code Agent ERP</div>
</div>
<div class="sb-section">
<div class="sb-title">📁 Register</div>
<div id="registerInfo" style="font-size:11px;color:var(--fg3)">Chargement...</div>
</div>
<div class="sb-section" style="flex:1">
<div class="sb-title">💬 Historique</div>
<div id="historyList"></div>
</div>
</div>
<!-- MAIN CHAT -->
<div class="main">
<div class="chat" id="chat">
<div class="welcome" id="welcome">
<h1>WEVAL Arena</h1>
<p>Command Center IA Souveraine — 394 options · 394 providers · 385 skills · 4 serveurs
API + WebChat + OSS + Arsenal + Hubs + Skills + Budget + 9 couches IA</p>
<div class="welcome-grid">
<div class="wg-card" onclick="askQ('analyse SWOT de WEVAL')"><div class="wg-ico">📊</div><div class="wg-txt">SWOT</div></div>
<div class="wg-card" onclick="askQ('ecris un script python pour scraper')"><div class="wg-ico">🐍</div><div class="wg-txt">Python</div></div>
<div class="wg-card" onclick="askQ('genere un docker-compose redis postgres')"><div class="wg-ico">🐳</div><div class="wg-txt">Docker</div></div>
<div class="wg-card" onclick="askQ('fiche de poste developpeur fullstack')"><div class="wg-ico">👤</div><div class="wg-txt">RH</div></div>
<div class="wg-card" onclick="askQ('genere un NDA')"><div class="wg-ico">📜</div><div class="wg-txt">Juridique</div></div>
<div class="wg-card" onclick="askQ('plan marketing digital')"><div class="wg-ico">📢</div><div class="wg-txt">Marketing</div></div>
<div class="wg-card" onclick="askQ('architecture microservices event-driven')"><div class="wg-ico">🏗️</div><div class="wg-txt">Architecture</div></div>
<div class="wg-card" onclick="askQ('business plan startup IA')"><div class="wg-ico">💰</div><div class="wg-txt">Business Plan</div></div>
</div>
</div>
</div>
<div class="input-area">
<div class="modes">
<button class="mode toggle deepthink" id="togThink" onclick="toggleMode('think')">🧠 DeepThink</button>
<button class="mode toggle search" id="togSearch" onclick="toggleMode('search')">🔍 Search</button>
<button class="mode toggle" id="togDual" onclick="toggleDual()" style="border-color:#f59e0b;color:#f59e0b">⚡ Think+Search</button>
<span style="width:1px;background:var(--bd);margin:0 4px"></span>
<button class="mode expert" id="mExpert" onclick="setExpert('expert')">🎓 Expert</button>
<button class="mode code" id="mCode" onclick="setExpert('code')">💻 Code</button>
<button class="mode creative" id="mCreative" onclick="setExpert('creative')">✨ Creative</button>
<span style="flex:1"></span>
<span id="modeLabel" style="font-size:10px;color:var(--fg3);align-self:center">Mode: Normal</span>
</div>
<div class="input-row">
<textarea class="input-box" id="inp" placeholder="Message WEVAL Arena... (Enter pour envoyer)" rows="1" onkeydown="if(event.key==='Enter'&&!event.shiftKey){event.preventDefault();send()}"></textarea>
<button class="send" id="sendBtn" onclick="send()"><svg viewBox="0 0 24 24"><path d="M2 21l21-9L2 3v7l15 2-15 2v7z"/></svg></button>
</div>
</div>
</div>
<!-- RIGHT PANEL -->
<div class="panel" id="panel">
<div class="pn-section">
<div class="pn-title">📊 System Live</div>
<div class="pn-grid">
<div class="pn-kpi"><div class="pn-kpi-v" style="color:var(--cy)" id="kpiNR">—</div><div class="pn-kpi-l">NonReg</div></div>
<div class="pn-kpi"><div class="pn-kpi-v" style="color:var(--gn)" id="kpiState">—</div><div class="pn-kpi-l">State</div></div>
<div class="pn-kpi"><div class="pn-kpi-v" style="color:var(--vi)" id="kpiIntents">—</div><div class="pn-kpi-l">Intents</div></div>
<div class="pn-kpi"><div class="pn-kpi-v" style="color:var(--bl)" id="kpiDocker">—</div><div class="pn-kpi-l">Docker</div></div>
</div>
</div>
<div class="pn-section">
<div class="pn-title">🔗 Cascade Providers</div>
<div id="providerList"></div>
</div>
<div class="pn-section">
<div class="pn-title">🧪 Tests</div>
<div id="testList"></div>
</div>
<div class="pn-section">
<div class="pn-title">🎯 Master Actions</div>
<button class="pn-action" onclick="masterExec('reconcilie tout')">🔄 Réconcilier</button>
<button class="pn-action" onclick="masterExec('lance nonreg')">🧪 Lancer NonReg</button>
<button class="pn-action" onclick="masterExec('push all')">📤 Push All</button>
<button class="pn-action" onclick="masterExec('backup gold')">💾 Backup GOLD</button>
<button class="pn-action" onclick="masterExec('wiki sync')">📚 Wiki Sync</button>
<button class="pn-action" onclick="masterExec('l99 state refresh')">🔄 State Refresh</button>
<button class="pn-action" onclick="masterExec('check subdomains')">🌐 Check Subdomains</button>
<button class="pn-action" onclick="masterExec('scan seo')">📈 SEO Scan</button>
</div>
</div>
<script>
let thinkOn=false,searchOn=false,expertMode='',currentModel='auto',history=[],busy=false;
function toggleDual(){
thinkOn=true;searchOn=true;
document.getElementById('togThink').classList.add('on');
document.getElementById('togSearch').classList.add('on');
document.getElementById('togDual').classList.add('on');
document.getElementById('togDual').style.background='#f59e0b15';
updateModeLabel();
}
function toggleMode(m){
if(m==='think'){thinkOn=!thinkOn;document.getElementById('togThink').classList.toggle('on',thinkOn)}
if(m==='search'){searchOn=!searchOn;document.getElementById('togSearch').classList.toggle('on',searchOn)}
updateModeLabel();
}
function setExpert(m){
if(expertMode===m){expertMode='';document.querySelectorAll('.mode.expert,.mode.code,.mode.creative').forEach(b=>b.classList.remove('on'))}
else{expertMode=m;document.querySelectorAll('.mode.expert,.mode.code,.mode.creative').forEach(b=>b.classList.remove('on'));document.getElementById('m'+m.charAt(0).toUpperCase()+m.slice(1)).classList.add('on')}
updateModeLabel();
}
function getMode(){
if(expertMode) return expertMode;
if(thinkOn&&searchOn) return 'deepthink-search';
if(thinkOn) return 'deepthink';
if(searchOn) return 'search';
return 'instant';
}
function updateModeLabel(){
const m=getMode();
const labels={'instant':'Normal','deepthink':'🧠 DeepThink','search':'🔍 Search','deepthink-search':'🧠+🔍 Think+Search','expert':'🎓 Expert','code':'💻 Code','creative':'✨ Creative'};
document.getElementById('modeLabel').textContent='Mode: '+(labels[m]||m);
}
function askQ(q){document.getElementById('inp').value=q;send()}
function clearChat(){history=[];document.getElementById('chat').innerHTML='<div class="welcome" id="welcome"><h1>WEVAL Arena</h1><p>Command Center — 30 modèles, KB + Wiki + Master connectés</p></div>'}
function addMsg(role,content,meta){
const w=document.getElementById('welcome');if(w)w.remove();
const chat=document.getElementById('chat'),div=document.createElement('div');
div.className=`msg ${role}`;
let html=content.replace(/```(\w*)\n([\s\S]*?)```/g,'<pre><code>$2</code></pre>').replace(/`([^`]+)`/g,'<code>$1</code>').replace(/\*\*([^*]+)\*\*/g,'<strong>$1</strong>').replace(/\n/g,'<br>');
let metaHtml='';
if(meta && (meta.thinking || meta.has_thinking)){
html='<details style="background:var(--bg);border:1px solid var(--vi)33;border-radius:8px;padding:10px;margin-bottom:10px;cursor:pointer"><summary style="color:var(--vi);font-weight:600;font-size:12px">🧠 Thought for '+(meta.latency_ms?Math.round(meta.latency_ms/1000):'?')+'s</summary><div style="font-size:11px;color:var(--fg3);margin-top:6px;line-height:1.5">'+(meta.thinking||'Raisonnement en cours...').slice(0,800).replace(/\n/g,'<br>')+'</div></details>'+html;
}
if(meta){metaHtml=`<div class="msg-meta"><span class="prov">${meta.provider||''}</span><span>${meta.model||''}</span><span>${meta.latency_ms||''}ms</span><span>${meta.tokens||''}tok</span><span>${meta.cost||'0€'}</span></div>`}
div.innerHTML=`<div class="msg-av">${role==='bot'?'🧠':'👤'}</div><div class="msg-body">${html}${metaHtml}</div>`;
chat.appendChild(div);chat.scrollTop=chat.scrollHeight;
// Save to sidebar history
if(role==='user'){
const hl=document.getElementById('historyList');
const hi=document.createElement('div');hi.className='sb-item';hi.innerHTML=`<span class="ico">💬</span>${content.slice(0,30)}...`;
hi.onclick=()=>{document.getElementById('inp').value=content;send()};
hl.prepend(hi);if(hl.children.length>15)hl.lastChild.remove();
}
}
function addLoading(){
const chat=document.getElementById('chat'),div=document.createElement('div');
div.className='msg bot';div.id='loading';
const cm=getMode();const labels={instant:'⚡ Génération...',deepthink:'🧠 Raisonnement profond...',search:'🔍 Recherche + analyse...',expert:'🎓 Analyse experte...',code:'💻 Compilation...',creative:'✨ Création...'};
div.innerHTML=`<div class="msg-av">🧠</div><div class="msg-body"><div class="loading"><span></span><span></span><span></span></div><div class="msg-meta"><span>${labels[cm]||cm}</span></div></div>`;
chat.appendChild(div);chat.scrollTop=chat.scrollHeight;
}
async function send(){
if(busy)return;const inp=document.getElementById('inp'),msg=inp.value.trim();if(!msg)return;
inp.value='';inp.style.height='auto';busy=true;document.getElementById('sendBtn').disabled=true;
addMsg('user',msg);history.push({role:'user',content:msg});addLoading();
try{
const _ep=(()=>{const m=currentModel||'auto';const np=['cf-','nim-','or-','groq','cerebras','mistral','ollama','web-'];if(np.some(p=>m.startsWith(p)))return'/api/wevia-multi-provider.php';return'/api/wevia-deepseek-proxy.php';})();const res=await fetch(_ep,{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({message:msg,mode:getMode(),model:currentModel,history:history.slice(-12)})});
/* HTML_GUARD_V2_BATCH */ const _t_data=await res.text(); let data=null; {var _q=(_t_data||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){data={error:"[HTTP "+(res.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{data=JSON.parse(_q)}catch(e){data={error:"[JSON] "+e.message}}}}document.getElementById('loading')?.remove();
if(data.content){addMsg('bot',data.content,data);history.push({role:'assistant',content:data.content})}
else addMsg('bot',data.error||'Erreur','Error');
}catch(e){document.getElementById('loading')?.remove();addMsg('bot','Erreur: '+e.message)}
busy=false;document.getElementById('sendBtn').disabled=false;inp.focus();
}
async function masterExec(cmd){
addMsg('user','[Master] '+cmd);addLoading();
try{
const res=await fetch('/api/wevia-full-exec.php?m='+encodeURIComponent(cmd));
/* HTML_GUARD_V2_BATCH */ const _t_data=await res.text(); const data=null; {var _q=(_t_data||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){data={error:"[HTTP "+(res.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{data=JSON.parse(_q)}catch(e){data={error:"[JSON] "+e.message}}}}document.getElementById('loading')?.remove();
addMsg('bot',data.response||data.content||'OK',{provider:'WEVIA Master',model:'intent-exec'});
}catch(e){document.getElementById('loading')?.remove();addMsg('bot','Erreur Master: '+e.message)}
}
async function searchKB(){
const q=document.getElementById('kbSearch').value.trim();if(!q)return;
const div=document.getElementById('kbResults');div.innerHTML='<div style="color:var(--fg3);font-size:11px">Recherche...</div>';
try{
const res=await fetch('/api/wevia-full-exec.php?m='+encodeURIComponent('cherche kb '+q));
/* HTML_GUARD_V2_BATCH */ const _t_data=await res.text(); const data=null; {var _q=(_t_data||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){data={error:"[HTTP "+(res.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{data=JSON.parse(_q)}catch(e){data={error:"[JSON] "+e.message}}}}
div.innerHTML=`<div class="sb-item" style="font-size:11px;white-space:pre-wrap">${(data.response||'Aucun résultat').slice(0,300)}</div>`;
}catch(e){div.innerHTML='<div style="color:var(--rd);font-size:11px">Erreur</div>'}
}
async function loadSystemData(){
try{
// State
const stRes=await fetch('/api/l99-state.json?t='+Date.now());
/* HTML_GUARD_V2_BATCH */ const _t_st=await stRes.text(); const st=null; {var _q=(_t_st||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){st={error:"[HTTP "+(stRes.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{st=JSON.parse(_q)}catch(e){st={error:"[JSON] "+e.message}}}}
document.getElementById('kpiNR').textContent=(st.nonreg_pass||'?')+'/'+(st.nonreg_total||'?');
document.getElementById('kpiState').textContent=(st.pass||'?')+'/'+(st.total||'?');
document.getElementById('kpiDocker').textContent=st.docker_up||'?';
document.getElementById('kpiIntents').textContent=st.intents||'?';
// Register
document.getElementById('registerInfo').innerHTML=`Pages: ${st.pages_html||'?'}<br>APIs: ${st.apis_php||'?'}<br>Screenshots: ${st.screenshots||'?'}<br>Videos: ${st.videos||'?'}`;
}catch(e){}
try{
// Source of truth
const sotRes=await fetch('/api/source-of-truth.json?t='+Date.now());
/* HTML_GUARD_V2_BATCH */ const _t_sot=await sotRes.text(); const sot=null; {var _q=(_t_sot||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){sot={error:"[HTTP "+(sotRes.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{sot=JSON.parse(_q)}catch(e){sot={error:"[JSON] "+e.message}}}}
const scores=sot.scores||{};
const testDiv=document.getElementById('testList');
let th='';
for(const[k,v]of Object.entries(scores)){
const pct=parseInt(v)||0;const col=pct>=99?'var(--cy)':pct>=95?'var(--go)':'var(--rd)';
th+=`<div class="pn-card"><div class="pn-card-h"><span class="pn-card-n">${k}</span><span class="pn-card-s" style="color:${col}">${v}</span></div><div class="pn-bar"><div class="pn-bar-f" style="width:${Math.min(pct,100)}%;background:${col}"></div></div></div>`;
}
testDiv.innerHTML=th||'<div style="color:var(--fg3);font-size:11px">Chargement...</div>';
}catch(e){}
// Providers
const provs=['Groq','Cerebras','SambaNova','Gemini','Mistral','DeepSeek','OpenRouter','Anthropic','Ollama','DeepSeek Web'];
const pDiv=document.getElementById('providerList');
pDiv.innerHTML=provs.map(p=>`<div class="sb-item"><span class="ico" style="color:var(--cy)">●</span>${p}</div>`).join('');
}
document.getElementById('inp').addEventListener('input',function(){this.style.height='auto';this.style.height=Math.min(this.scrollHeight,180)+'px'});
// DeepSeek Web Connection
async function connectDS() {
const token = prompt("CONNECTER DeepSeek Web UNLIMITED:\n\n1. Ouvrir chat.deepseek.com (deja connecte)\n2. F12 > Console\n3. Coller: copy(document.cookie)\n4. Coller le cookie ici:");
if (!token || token.length < 10) return;
try {
const res = await fetch('/api/wevia-deepseek-proxy.php', {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({action: 'set_ds_token', token: token})
});
/* HTML_GUARD_V2_BATCH */ const _t_data=await res.text(); const data=null; {var _q=(_t_data||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){data={error:"[HTTP "+(res.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{data=JSON.parse(_q)}catch(e){data={error:"[JSON] "+e.message}}}}
if (data.status === 'token_saved') {
document.getElementById('dsConnect').style.background = 'var(--cy)22';
document.getElementById('dsConnect').style.borderColor = 'var(--cy)';
document.getElementById('dsConnect').style.color = 'var(--cy)';
document.getElementById('dsConnect').textContent = '✅ DeepSeek Connecte';
alert('DeepSeek Web UNLIMITED active! Token sauvegarde (' + data.length + ' chars)');
} else {
alert('Erreur: ' + JSON.stringify(data));
}
} catch(e) { alert('Erreur: ' + e); }
}
// Check DS token on load
async function checkDS() {
try {
const res = await fetch('/api/wevia-deepseek-proxy.php', {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({action: 'ds_token_status'})
});
/* HTML_GUARD_V2_BATCH */ const _t_data=await res.text(); const data=null; {var _q=(_t_data||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){data={error:"[HTTP "+(res.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{data=JSON.parse(_q)}catch(e){data={error:"[JSON] "+e.message}}}}
if (data.has_token) {
document.getElementById('dsConnect').style.background = 'var(--cy)22';
document.getElementById('dsConnect').style.borderColor = 'var(--cy)';
document.getElementById('dsConnect').style.color = 'var(--cy)';
document.getElementById('dsConnect').textContent = '✅ DeepSeek Connecte';
}
} catch(e) {}
}
checkDS();
loadSystemData();setInterval(loadSystemData,60000);
// Arena Health Check — colors models green/red
async function checkArenaHealth() {
try {
const ctrl = new AbortController();
setTimeout(() => ctrl.abort(), 90000);
const r = await fetch("/api/wevia-arena-health.php", {signal: ctrl.signal});
/* HTML_GUARD_V2_BATCH */ const _t_d=await r.text(); let d=null; {var _q=(_t_d||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){d={error:"[HTTP "+(r.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{d=JSON.parse(_q)}catch(e){d={error:"[JSON] "+e.message}}}}
const sel = document.getElementById("modelSelect");
if (!sel || !d.models) return;
// Update status badge
const badge = document.getElementById("healthBadge");
if (badge) {
badge.textContent = d.alive + "/" + d.total + " ALIVE";
badge.style.color = d.pct >= 80 ? "#00e5ff" : d.pct >= 50 ? "#ffcc33" : "#ff4444";
}
// Color options
d.models.forEach(m => {
const opt = sel.querySelector(`option[value="${m.model}"]`);
if (opt) {
if (m.status === "alive") {
opt.textContent = "🟢 " + opt.textContent.replace(/^[🟢🔴⚪] /, "");
} else {
opt.textContent = "🔴 " + opt.textContent.replace(/^[🟢🔴⚪] /, "") + " [" + (m.error || "?").substring(0, 20) + "]";
}
}
});
} catch(e) { console.log("health:", e); }
}
// Check on load + every 5 min
setTimeout(checkArenaHealth, 2000);
setInterval(checkArenaHealth, 300000);
// Dropdown search filter
document.getElementById("modelSelect").addEventListener("focus", function() {
if (document.getElementById("ddFilter")) return;
const wrap = this.parentElement;
const inp = document.createElement("input");
inp.id = "ddFilter";
inp.placeholder = "🔍 Filtrer...";
inp.style.cssText = "width:100%;padding:6px 10px;background:var(--bg2);border:1px solid var(--bd);border-radius:6px;color:var(--fg);font-size:12px;margin-bottom:4px;outline:none;";
wrap.insertBefore(inp, this);
inp.focus();
inp.oninput = function() {
const q = this.value.toLowerCase();
const opts = document.getElementById("modelSelect").options;
const grps = document.getElementById("modelSelect").querySelectorAll("optgroup");
grps.forEach(g => {
let vis = 0;
Array.from(g.children).forEach(o => {
const show = o.textContent.toLowerCase().includes(q) || o.value.includes(q);
o.style.display = show ? "" : "none";
if (show) vis++;
});
g.style.display = vis ? "" : "none";
});
};
inp.onblur = function() { setTimeout(() => this.remove(), 200); };
});
</script>
</body>
</html>