698 lines
48 KiB
HTML
698 lines
48 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="fr">
|
||
<head>
|
||
<meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1">
|
||
<title>WEVAL — Architecture Live</title>
|
||
<link href="https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;600;700&display=swap" rel="stylesheet">
|
||
<style>
|
||
:root{--bg:#0c0f1a;--card:#141825;--card2:#1a1f30;--border:#232840;--acc:#6366f1;--acc2:#818cf8;--cyan:#22d3ee;--green:#34d399;--red:#f87171;--amber:#fbbf24;--t:#e8eaf0;--dim:#7c82a0;--dim2:#4f5470;--radius:14px;--ff:'DM Sans',system-ui,sans-serif}
|
||
*{margin:0;padding:0;box-sizing:border-box}
|
||
body{font-family:var(--ff);background:var(--bg);color:var(--t);-webkit-font-smoothing:antialiased}
|
||
::selection{background:rgba(99,102,241,.3)}
|
||
|
||
.top{max-width:1200px;margin:0 auto;padding:28px 24px 0}
|
||
.top h1{font-size:24px;font-weight:700;text-align:center}
|
||
.top h1 span{background:linear-gradient(135deg,var(--acc),var(--cyan));-webkit-background-clip:text;-webkit-text-fill-color:transparent}
|
||
.top .sub{text-align:center;color:var(--dim);font-size:13px;margin:6px 0 20px;display:flex;align-items:center;justify-content:center;gap:6px}
|
||
.dot{width:8px;height:8px;border-radius:50%;background:var(--green);animation:blink 2s infinite}
|
||
@keyframes blink{50%{opacity:.4}}
|
||
|
||
.metrics{display:flex;flex-wrap:wrap;justify-content:center;gap:8px;margin-bottom:20px}
|
||
.m{background:var(--card);border:1px solid var(--border);border-radius:10px;padding:10px 16px;text-align:center;min-width:88px}
|
||
.m .n{font-size:20px;font-weight:700;background:linear-gradient(135deg,var(--cyan),var(--acc2));-webkit-background-clip:text;-webkit-text-fill-color:transparent}
|
||
.m .l{font-size:9px;color:var(--dim);text-transform:uppercase;letter-spacing:.6px;margin-top:2px}
|
||
|
||
.tabs{display:flex;flex-wrap:wrap;justify-content:center;gap:6px;margin-bottom:20px}
|
||
.tabs button{font-family:var(--ff);font-size:12px;font-weight:500;padding:6px 14px;border-radius:8px;border:1px solid var(--border);background:transparent;color:var(--dim);cursor:pointer;transition:all .15s}
|
||
.tabs button:hover{color:var(--t);border-color:var(--acc)}
|
||
.tabs button.on{background:var(--acc);color:#fff;border-color:var(--acc)}
|
||
|
||
/* SCHEMA */
|
||
.schema{max-width:1100px;margin:0 auto 24px;padding:0 16px;overflow-x:auto}
|
||
.tree{position:relative;padding:20px 0}
|
||
.tier{display:flex;justify-content:center;gap:12px;flex-wrap:wrap;margin-bottom:8px;position:relative}
|
||
.tier::before{content:'';position:absolute;top:-8px;left:50%;width:1px;height:8px;background:var(--border)}
|
||
.node{background:var(--card);border:1px solid var(--border);border-radius:var(--radius);padding:14px 18px;min-width:160px;max-width:280px;flex:1;transition:all .2s;cursor:pointer;position:relative}
|
||
.node:hover{border-color:var(--acc);transform:translateY(-2px);box-shadow:0 8px 24px rgba(99,102,241,.12)}
|
||
.node.hub{border-color:var(--acc);background:linear-gradient(135deg,rgba(99,102,241,.08),rgba(34,211,238,.05))}
|
||
.node.hub::after{content:'HUB';position:absolute;top:8px;right:10px;font-size:9px;font-weight:700;color:var(--acc);letter-spacing:1px}
|
||
.node h4{font-size:13px;font-weight:600;margin-bottom:2px;display:flex;align-items:center;gap:6px}
|
||
.node .d{font-size:10px;color:var(--dim);line-height:1.5}
|
||
.node .k{font-size:12px;font-weight:700;margin-top:4px}
|
||
.node .k.cy{color:var(--cyan)}.node .k.gr{color:var(--green)}.node .k.am{color:var(--amber)}
|
||
.live{width:7px;height:7px;border-radius:50%;background:var(--green);flex-shrink:0}
|
||
.off{width:7px;height:7px;border-radius:50%;background:var(--red);flex-shrink:0}
|
||
.idle{width:7px;height:7px;border-radius:50%;background:var(--amber);flex-shrink:0}
|
||
|
||
.connector{display:flex;justify-content:center;margin:4px 0}
|
||
.connector .line{width:1px;height:20px;background:linear-gradient(to bottom,var(--acc),var(--border))}
|
||
.conn-h{display:flex;justify-content:center;align-items:flex-start;gap:0;margin:4px 0 4px;position:relative;height:20px}
|
||
.conn-h::after{content:'';position:absolute;top:0;left:15%;right:15%;height:1px;background:var(--border)}
|
||
|
||
.tags{display:flex;flex-wrap:wrap;gap:3px;margin-top:6px}
|
||
.tag{font-size:8px;padding:2px 6px;border-radius:4px;background:var(--card2);color:var(--dim2);border:1px solid rgba(255,255,255,.04)}
|
||
|
||
/* SECTIONS */
|
||
.sections{max-width:1200px;margin:0 auto;padding:0 16px}
|
||
.stit{font-size:11px;font-weight:600;color:var(--dim);text-transform:uppercase;letter-spacing:1.5px;margin:20px 0 10px}
|
||
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:10px;margin-bottom:16px}
|
||
.card{background:var(--card);border:1px solid var(--border);border-radius:var(--radius);padding:14px;transition:all .2s;position:relative}
|
||
.card:hover{border-color:rgba(99,102,241,.2);box-shadow:0 4px 16px rgba(0,0,0,.2)}
|
||
.card h4{font-size:13px;font-weight:600;margin-bottom:2px}
|
||
.card .sd{font-size:10px;color:var(--dim);margin-bottom:6px}
|
||
.card .badge{position:absolute;top:10px;right:10px;font-size:9px;font-weight:600;padding:2px 8px;border-radius:5px}
|
||
.badge.bl{background:rgba(52,211,153,.1);color:var(--green);border:1px solid rgba(52,211,153,.15)}
|
||
.badge.bo{background:rgba(248,113,113,.08);color:var(--red);border:1px solid rgba(248,113,113,.12)}
|
||
.badge.bi{background:rgba(251,191,36,.08);color:var(--amber);border:1px solid rgba(251,191,36,.12)}
|
||
.sts{display:flex;flex-wrap:wrap;gap:4px;margin-bottom:4px}
|
||
.st{font-size:10px;padding:2px 8px;border-radius:5px;background:var(--card2);border:1px solid var(--border);color:var(--dim)}
|
||
.st b{color:var(--t);font-weight:600}
|
||
|
||
section{display:none}section.show{display:block}
|
||
.footer{text-align:center;padding:24px;color:var(--dim2);font-size:11px}
|
||
.footer a{color:var(--acc);text-decoration:none}
|
||
</style>
|
||
<!-- DOCTRINE-60-UX-ENRICH cerebras-qwen-235b 20260424-125842 --><style id="doctrine60-ux-architecture-live">
|
||
body::before {
|
||
content: '';
|
||
position: fixed;
|
||
width: 100%;
|
||
height: 100%;
|
||
background: radial-gradient(ellipse at center, rgba(0,0,0,0.12) 0%, rgba(0,0,0,0) 70%);
|
||
z-index: -1;
|
||
pointer-events: none;
|
||
}
|
||
|
||
.card, .btn, .kpi, .panel {
|
||
opacity: 0;
|
||
transform: translateY(20px);
|
||
transition: opacity 0.5s cubic-bezier(0.4, 0, 0.2, 1), transform 0.5s cubic-bezier(0.4, 0, 0.2, 1);
|
||
}
|
||
|
||
.enter-stagger {
|
||
opacity: 1;
|
||
transform: translateY(0);
|
||
}
|
||
|
||
@keyframes pulse {
|
||
0%, 100% { opacity: 1; }
|
||
50% { opacity: 0.5; }
|
||
}
|
||
.pulse, .active, .live-indicator, .online {
|
||
animation: pulse 3s ease-in-out infinite;
|
||
}
|
||
|
||
.card:hover {
|
||
box-shadow: 0 8px 24px rgba(0,0,0,0.15);
|
||
border-color: var(--accent);
|
||
}
|
||
|
||
.modal, .chat, .speech, .overlay {
|
||
backdrop-filter: blur(12px);
|
||
}
|
||
|
||
</style>
|
||
<!-- DOCTRINE-222-KILL-PULSED60 -->
|
||
<style>
|
||
@keyframes pulseD60 { 0%,100%,50% { opacity: 1; transform: scale(1); } }
|
||
.pulse, .live-indicator, .active, .online { animation: none !important; }
|
||
</style>
|
||
<!-- END-DOCTRINE-222 -->
|
||
</head>
|
||
<body>
|
||
|
||
<div class="top">
|
||
<h1><span>WEVAL</span> Architecture Live</h1>
|
||
<div class="sub"><span class="dot"></span> 14 avril 2026 · GODMODE 20/20 · 6σ</div>
|
||
|
||
<div class="metrics">
|
||
<div class="m"><div class="n">2,400+</div><div class="l">Pages</div></div>
|
||
<div class="m"><div class="n">7</div><div class="l">Serveurs</div></div>
|
||
<div class="m"><div class="n">15</div><div class="l">Domains</div></div>
|
||
<div class="m"><div class="n">372</div><div class="l">Tools</div></div>
|
||
<div class="m"><div class="n">12</div><div class="l">IA 0€</div></div>
|
||
<div class="m"><div class="n">141K</div><div class="l">HCPs</div></div>
|
||
<div class="m"><div class="n">6.65M</div><div class="l">Contacts</div></div>
|
||
<div class="m"><div class="n">870</div><div class="l">Agents</div></div>
|
||
<div class="m"><div class="n">50</div><div class="l">Repos</div></div>
|
||
<div class="m"><div class="n">152/152</div><div class="l">NonReg</div></div>
|
||
</div>
|
||
|
||
<div class="tabs">
|
||
<button class="on" onclick="show('all',this)">Tout</button>
|
||
<button onclick="show('schema',this)">Schéma</button>
|
||
<button onclick="show('servers',this)">Serveurs</button>
|
||
<button onclick="show('ia',this)">IA souveraine</button>
|
||
<button onclick="show('apps',this)">Apps</button>
|
||
<button onclick="show('data',this)">Data</button>
|
||
<button onclick="show('qa',this)">QA</button>
|
||
<button onclick="show('gpu',this)">GPU</button>
|
||
<button onclick="show('hubs',this)">Hubs</button>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- ═══════ SCHEMA INTERACTIF ═══════ -->
|
||
<section id="sec-schema" class="show">
|
||
<div class="schema"><div class="tree">
|
||
|
||
<!-- Tier 0: WEVIA Master -->
|
||
<div class="tier">
|
||
<div class="node hub" onclick="show('ia',document.querySelector('.tabs button:nth-child(4)'))">
|
||
<h4><span class="live"></span> WEVIA Master</h4>
|
||
<div class="d">20/20 GODMODE · 372 tools · 138 brain intents · MCP Hub 11 services</div>
|
||
<div class="k cy">Orchestrateur souverain</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="conn-h"></div>
|
||
|
||
<!-- Tier 1: 5 pillars -->
|
||
<div class="tier">
|
||
<div class="node" onclick="show('ia',document.querySelector('.tabs button:nth-child(4)'))">
|
||
<h4><span class="live"></span> Sovereign Cascade</h4>
|
||
<div class="d">12 providers · 0€/mois · failover auto</div>
|
||
<div class="k cy">port 4000</div>
|
||
</div>
|
||
<div class="node" onclick="show('servers',document.querySelector('.tabs button:nth-child(3)'))">
|
||
<h4><span class="live"></span> Exécution</h4>
|
||
<div class="d">fast.sock 50w · exec.sock 50w · Redis async · Blade OPS 50 actions</div>
|
||
</div>
|
||
<div class="node" onclick="show('data',document.querySelector('.tabs button:nth-child(6)'))">
|
||
<h4><span class="live"></span> Data + MCP</h4>
|
||
<div class="d">Ethica 141K · Wiki 1,214 · Vault 538 · Gmail · Calendar · Drive</div>
|
||
</div>
|
||
<div class="node" onclick="show('qa',document.querySelector('.tabs button:nth-child(7)'))">
|
||
<h4><span class="live"></span> QA 6σ</h4>
|
||
<div class="d">NonReg 152/152 · Playwright 10/10 · Selenium 7/7</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="conn-h"></div>
|
||
|
||
<!-- Tier 2: Servers -->
|
||
<div class="tier">
|
||
<div class="node" onclick="show('servers',document.querySelector('.tabs button:nth-child(3)'))">
|
||
<h4><span class="live"></span> S95 — Arsenal</h4>
|
||
<div class="d">95.216.167.89 · Hetzner</div>
|
||
<div class="k cy">1,378 pages</div>
|
||
<div class="d">+ 512 WEVADS · 612 brain · 691 offers</div>
|
||
</div>
|
||
<div class="node" onclick="show('servers',document.querySelector('.tabs button:nth-child(3)'))">
|
||
<h4><span class="live"></span> S204 — WEVIA</h4>
|
||
<div class="d">8 vCPU · 32GB · Load 0.62</div>
|
||
<div class="k cy">404 pages</div>
|
||
<div class="d">30 hubs · 19 monitors · dual-FPM</div>
|
||
</div>
|
||
<div class="node">
|
||
<h4><span class="live"></span> 4× PMTA Huawei</h4>
|
||
<div class="d">SER_6 · SER_7 · SER_8 · SER_9</div>
|
||
<div class="k am">PMTA 4.5r8</div>
|
||
</div>
|
||
<div class="node">
|
||
<h4><span class="live"></span> Docker S204</h4>
|
||
<div class="d">8 containers + Redis</div>
|
||
<div class="tags"><span class="tag">gitea</span><span class="tag">searxng</span><span class="tag">qdrant</span><span class="tag">prometheus</span><span class="tag">vaultwarden</span></div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="conn-h"></div>
|
||
|
||
<!-- Tier 3: Agents + Providers -->
|
||
<div class="tier">
|
||
<div class="node">
|
||
<h4>12 Sovereign Agents</h4>
|
||
<div class="tags"><span class="tag">WEVIA</span><span class="tag">WEVCODE</span><span class="tag">WEDROID</span><span class="tag">Director</span><span class="tag">L99</span><span class="tag">DeerFlow</span><span class="tag">Blade</span><span class="tag">Guardian</span><span class="tag">Ethica</span><span class="tag">OpenClaw</span><span class="tag">MiroFish</span><span class="tag">Consensus</span></div>
|
||
</div>
|
||
<div class="node" onclick="window.open('/agents-archi.html','_blank')">
|
||
<h4><span class="live"></span> Agents Archi</h4>
|
||
<div class="k cy">15 agents · 94KB</div>
|
||
<div class="d">3D · Fleet · Alive · Enterprise · HD · Sim · ValueChain</div>
|
||
</div>
|
||
<div class="node" onclick="show('ia',document.querySelector('.tabs button:nth-child(4)'))">
|
||
<h4><span class="live"></span> Paperclip</h4>
|
||
<div class="k gr">870 agents · 2,484 skills</div>
|
||
<div class="d">29,688 fichiers · PostgreSQL</div>
|
||
</div>
|
||
<div class="node">
|
||
<h4>IA Cascade</h4>
|
||
<div class="tags"><span class="tag">Cerebras</span><span class="tag">Groq</span><span class="tag">Gemini</span><span class="tag">SambaNova</span><span class="tag">NVIDIA</span><span class="tag">Mistral</span><span class="tag">HF</span><span class="tag">OpenRouter</span><span class="tag">GitHub</span><span class="tag">CF-AI</span></div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="conn-h"></div>
|
||
|
||
<!-- Tier 4: Data -->
|
||
<div class="tier">
|
||
<div class="node"><h4>Ethica</h4><div class="k cy">141K HCPs</div><div class="d">48K emails · 16K phones</div></div>
|
||
<div class="node"><h4>WEVADS DB</h4><div class="k cy">6.65M contacts</div><div class="d">adx_system + adx_clients</div></div>
|
||
<div class="node"><h4>Wiki + Vault</h4><div class="k gr">1,214 + 538</div><div class="d">22 GOLD · Obsidian 49 docs</div></div>
|
||
<div class="node"><h4>Qdrant + Registries</h4><div class="d">5 collections · 14K vectors · 20+ JSON</div></div>
|
||
</div>
|
||
|
||
<div class="conn-h"></div>
|
||
|
||
<!-- Tier 5: GPU + Hubs + Skills -->
|
||
<div class="tier">
|
||
<div class="node" onclick="show('gpu',document.querySelector('.tabs button:nth-child(8)'))">
|
||
<h4><span class="live"></span> GPU gratuit</h4>
|
||
<div class="d">HuggingFace 5 spaces · Kaggle 3 notebooks · Colab T4</div>
|
||
<div class="tags"><span class="tag">vLLM</span><span class="tag">Ollama</span><span class="tag">Whisper</span><span class="tag">weval-brain-v4</span></div>
|
||
</div>
|
||
<div class="node" onclick="show('hubs',document.querySelector('.tabs button:nth-child(9)'))">
|
||
<h4>30 Hubs · 19 Monitors · 15 Agents</h4>
|
||
<div class="d">Portails thématiques · command centers · agents IA</div>
|
||
</div>
|
||
<div class="node">
|
||
<h4>50 Repos · 24 Skills</h4>
|
||
<div class="d">Gitea · GitHub · docx/pdf/pptx/xlsx · frontend · mcp-builder</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="conn-h"></div>
|
||
|
||
<!-- Tier 6: Growth Engine -->
|
||
<div class="tier">
|
||
<div class="node hub" style="max-width:500px">
|
||
<h4><span class="live"></span> Growth Engine v3</h4>
|
||
<div class="k cy">8 verticaux · 39 opportunités · 3.5M MAD pipeline</div>
|
||
<div class="tags"><span class="tag">Scaleway</span><span class="tag">Ethica</span><span class="tag">Vistex</span><span class="tag">Arrow</span><span class="tag">Enterprise</span><span class="tag">SaaS</span><span class="tag">HCP</span><span class="tag">Consulting</span></div>
|
||
</div>
|
||
</div>
|
||
|
||
</div></div>
|
||
</section>
|
||
|
||
<!-- ═══════ SERVEURS ═══════ -->
|
||
<section id="sec-servers" class="show"><div class="sections">
|
||
<div class="stit">Infrastructure — 7 serveurs</div>
|
||
<div class="grid">
|
||
<div class="card"><span class="badge bl">LIVE</span><h4>S95 — Arsenal + WEVADS</h4><div class="sd">95.216.167.89 · Hetzner · SSH 49222</div><div class="sts"><span class="st"><b>1,378</b> Arsenal</span><span class="st"><b>512</b> WEVADS</span><span class="st"><b>612</b> brain</span></div><div class="tags"><span class="tag">brain-engine</span><span class="tag">offer-engine</span><span class="tag">scrapping-factory</span><span class="tag">emailing-pipeline</span><span class="tag">wevia-fullscreen</span><span class="tag">wevia-hamid</span><span class="tag">youtube-factory</span><span class="tag">world-map</span></div></div>
|
||
<div class="card"><span class="badge bl">LIVE</span><h4>S204 — WEVIA Master</h4><div class="sd">204.168.152.13 · 8vCPU · 32GB RAM</div><div class="sts"><span class="st"><b>404</b> pages</span><span class="st"><b>372</b> tools</span><span class="st"><b>20/20</b> GODMODE</span></div><div class="tags"><span class="tag">dual-FPM 100w</span><span class="tag">Redis async</span><span class="tag">OPcache 256MB</span><span class="tag">30 hubs</span><span class="tag">19 monitors</span></div></div>
|
||
<div class="card"><span class="badge bl">LIVE</span><h4>4× PMTA Huawei</h4><div class="sd">SER_6 · SER_7 · SER_8 · SER_9</div><div class="sts"><span class="st">PMTA 4.5r8</span><span class="st">VMTAs 186-189</span></div></div>
|
||
<div class="card"><span class="badge bl">LIVE</span><h4>Docker S204 — 8 containers</h4><div class="sd">+ redis-weval</div><div class="tags"><span class="tag">gitea</span><span class="tag">searxng</span><span class="tag">qdrant</span><span class="tag">prometheus</span><span class="tag">node-exporter</span><span class="tag">uptime-kuma</span><span class="tag">vaultwarden</span><span class="tag">redis-weval</span></div></div>
|
||
<div class="card"><span class="badge bl">LIVE</span><h4>15 Nginx domains</h4><div class="sd">SSL fullchain.pem</div><div class="tags"><span class="tag">weval-consulting.com</span><span class="tag">wevads.*</span><span class="tag">git.*</span><span class="tag">ethica.wevup.app</span><span class="tag">deerflow.*</span><span class="tag">paperclip.*</span><span class="tag">analytics.*</span><span class="tag">monitor.*</span></div></div>
|
||
<div class="card"><span class="badge bl">LIVE</span><h4>Site public</h4><div class="sd">/var/www/weval · 106 HTML · 97 images</div><div class="sts"><span class="st"><b>7</b> Claude docs</span></div></div>
|
||
</div></div></section>
|
||
|
||
<!-- ═══════ IA ═══════ -->
|
||
<section id="sec-ia" class="show"><div class="sections">
|
||
<div class="stit">IA souveraine — 12 providers · 0€</div>
|
||
<div class="grid">
|
||
<div class="card"><span class="badge bl">LIVE</span><h4>Sovereign Cascade v3</h4><div class="sd">port 4000 · failover auto</div><div class="tags"><span class="tag">Cerebras-fast</span><span class="tag">Cerebras-think</span><span class="tag">Groq</span><span class="tag">CF-AI</span><span class="tag">Gemini</span><span class="tag">SambaNova</span><span class="tag">NVIDIA-NIM</span><span class="tag">Mistral</span><span class="tag">HF-Space</span><span class="tag">HF-Router</span><span class="tag">OpenRouter</span><span class="tag">GitHub</span></div></div>
|
||
<div class="card"><span class="badge bl">LIVE</span><h4>12 Sovereign agents</h4><div class="sd">architecture-consolidated.json</div><div class="tags"><span class="tag">WEVIA</span><span class="tag">WEVCODE</span><span class="tag">WEDROID</span><span class="tag">Director</span><span class="tag">L99</span><span class="tag">DeerFlow</span><span class="tag">Blade IA</span><span class="tag">Guardian</span><span class="tag">Ethica</span><span class="tag">OpenClaw</span><span class="tag">MiroFish</span><span class="tag">Consensus</span></div></div>
|
||
<div class="card"><span class="badge bl">LIVE</span><h4>WEVIA Master orchestration</h4><div class="sd">18 fast-path · resolver v8 · async executor</div><div class="sts"><span class="st"><b>20/20</b> intents</span><span class="st"><b>372</b> tools</span><span class="st">MCP 11 svc</span></div></div>
|
||
<div class="card"><span class="badge bl">LIVE</span><h4>Paperclip</h4><div class="sd">29,688 fichiers · PostgreSQL</div><div class="sts"><span class="st"><b>870</b> agents</span><span class="st"><b>2,484</b> skills</span></div></div>
|
||
<div class="card"><span class="badge bl">LIVE</span><h4>AI Benchmark</h4><div class="sd">Leaderboard auto 2h</div><div class="sts"><span class="st">WEVAL: <b>93</b></span><span class="st">Opus: <b>90</b></span></div></div>
|
||
<div class="card"><span class="badge bi">IDLE</span><h4>DeerFlow</h4><div class="sd">5 models · Deep Research</div><div class="tags"><span class="tag">Alibaba Qwen</span><span class="tag">Groq</span><span class="tag">Cerebras Qwen 235B</span><span class="tag">WEVAL Brain v2</span></div></div>
|
||
</div></div></section>
|
||
|
||
<!-- ═══════ APPS ═══════ -->
|
||
<section id="sec-apps" class="show"><div class="sections">
|
||
<div class="stit">Applications live</div>
|
||
<div class="grid">
|
||
<div class="card"><span class="badge bl">200</span><h4>WEVIA Master</h4><div class="sd">Chat IA souverain</div></div>
|
||
<div class="card"><span class="badge bl">200</span><h4>Growth Engine v3</h4><div class="sd">37KB · 8 verticaux · 3.5M MAD</div></div>
|
||
<div class="card"><span class="badge bl">200</span><h4>Blade AI</h4><div class="sd">50 actions · Desktop agent</div></div>
|
||
<div class="card"><span class="badge bl">200</span><h4>WEVAL Arena</h4><div class="sd">62KB · Benchmark IA</div></div>
|
||
<div class="card"><span class="badge bl">200</span><h4>Wiring Dashboard</h4><div class="sd">16KB · Comparaison</div></div>
|
||
<div class="card"><span class="badge bl">200</span><h4>WEVADS IA</h4><div class="sd">270KB · Omnichannel</div></div>
|
||
<div class="card"><span class="badge bl">200</span><h4>Office Workflow v2</h4><div class="sd">48KB · O365</div></div>
|
||
<div class="card"><span class="badge bl">200</span><h4>Vault Manager</h4><div class="sd">24KB · Memory Manager</div></div>
|
||
<div class="card"><span class="badge bl">200</span><h4>DeerFlow</h4><div class="sd">56KB · Deep Research</div></div>
|
||
<div class="card"><span class="badge bl">200</span><h4>Director Center</h4><div class="sd">Dashboard projet</div></div>
|
||
<div class="card"><span class="badge bl">200</span><h4>Meeting Rooms</h4><div class="sd">Salles virtuelles</div></div>
|
||
<div class="card"><span class="badge bl">200</span><h4>Paperclip</h4><div class="sd">Projects + Issues</div></div>
|
||
<div class="card"><span class="badge bl">200</span><h4>Agents Archi</h4><div class="sd">94KB · 15 agents · Architecture IA</div><div class="tags"><span class="tag">agents-archi.html</span><span class="tag">agents-3d</span><span class="tag">agents-fleet</span><span class="tag">agents-alive</span></div></div>
|
||
<div class="card"><span class="badge bl">200</span><h4>L99 SaaS</h4><div class="sd">Framework SaaS · auto-sync pages</div></div>
|
||
<div class="card"><span class="badge bl">200</span><h4>CRM</h4><div class="sd">crm.html · Pipeline contacts</div></div>
|
||
<div class="card"><span class="badge bl">200</span><h4>Claw Code</h4><div class="sd">IDE souverain</div></div>
|
||
<div class="card"><span class="badge bl">200</span><h4>OpenClaw</h4><div class="sd">Scraper intelligent</div></div>
|
||
<div class="card"><span class="badge bl">200</span><h4>WEVCODE</h4><div class="sd">Code editor embarqué</div></div>
|
||
<div class="card"><span class="badge bl">200</span><h4>Enterprise Model</h4><div class="sd">Modèle enterprise WEVAL</div></div>
|
||
</div></div></section>
|
||
|
||
<!-- ═══════ DATA ═══════ -->
|
||
<section id="sec-data" class="show"><div class="sections">
|
||
<div class="stit">Data stores</div>
|
||
<div class="grid">
|
||
<div class="card"><span class="badge bl">LIVE</span><h4>Ethica</h4><div class="sd">141K HCPs · 48K emails · 16K phones</div><div class="tags"><span class="tag">scrapers CNAM v3</span><span class="tag">DabaDoc</span><span class="tag">medreach</span></div></div>
|
||
<div class="card"><span class="badge bl">LIVE</span><h4>WEVADS DB</h4><div class="sd">PostgreSQL</div><div class="sts"><span class="st"><b>6.65M</b> contacts</span><span class="st"><b>612</b> brain</span></div></div>
|
||
<div class="card"><span class="badge bl">LIVE</span><h4>Wiki</h4><div class="sd">1,214 JSON entries</div></div>
|
||
<div class="card"><span class="badge bl">LIVE</span><h4>Vault</h4><div class="sd">538 fichiers · 22 GOLD</div></div>
|
||
<div class="card"><span class="badge bl">LIVE</span><h4>Qdrant</h4><div class="sd">5 collections · 14K vectors</div></div>
|
||
<div class="card"><span class="badge bl">LIVE</span><h4>Obsidian</h4><div class="sd">49 docs · 13 doctrines</div><div class="tags"><span class="tag">doctrine-supreme</span><span class="tag">souverainete</span><span class="tag">gold-backup</span><span class="tag">2-strikes</span></div></div>
|
||
<div class="card"><span class="badge bl">LIVE</span><h4>MCP Hub — 11 services</h4><div class="sd">Gmail · Calendar · Drive · Sovereign · Ethica · GitHub · Gitea · Cloudflare · Sentinel · HF · Stripe</div></div>
|
||
<div class="card"><span class="badge bl">LIVE</span><h4>50 Gitea repos</h4><div class="sd">git.weval-consulting.com</div><div class="tags"><span class="tag">wevads-arsenal</span><span class="tag">paperclip</span><span class="tag">deer-flow</span><span class="tag">claw-code</span><span class="tag">SuperClaude</span></div></div>
|
||
</div></div></section>
|
||
|
||
<!-- ═══════ QA ═══════ -->
|
||
<section id="sec-qa" class="show"><div class="sections">
|
||
<div class="stit">Qualité — 6σ</div>
|
||
<div class="grid">
|
||
<div class="card"><span class="badge bl">100%</span><h4>NonReg</h4><div class="sd">152/152 · score 100</div></div>
|
||
<div class="card"><span class="badge bl">10/10</span><h4>Playwright E2E</h4><div class="sd">Python · Chromium 147</div></div>
|
||
<div class="card"><span class="badge bl">7/7</span><h4>Selenium E2E</h4><div class="sd">Python 4.40 · chromedriver</div></div>
|
||
<div class="card"><span class="badge bl">LIVE</span><h4>Monitoring</h4><div class="sd">54 crons S204 · 6 crons S95</div></div>
|
||
<div class="card"><span class="badge bl">LIVE</span><h4>Auto-heal</h4><div class="sd">Blade restart FPM · watchdog */2min</div></div>
|
||
</div></div></section>
|
||
|
||
<!-- ═══════ GPU ═══════ -->
|
||
<section id="sec-gpu" class="show"><div class="sections">
|
||
<div class="stit">GPU + compute gratuit</div>
|
||
<div class="grid">
|
||
<div class="card"><span class="badge bl">LIVE</span><h4>HuggingFace</h4><div class="sd">yace222 · 2 models · 5 spaces</div><div class="tags"><span class="tag">weval-brain-v4</span><span class="tag">wevia-gpu</span><span class="tag">ragflow</span><span class="tag">whisper</span><span class="tag">mlflow</span></div></div>
|
||
<div class="card"><span class="badge bl">LIVE</span><h4>Kaggle</h4><div class="sd">3 notebooks · T4 GPU gratuit</div></div>
|
||
<div class="card"><span class="badge bl">LIVE</span><h4>Google Colab</h4><div class="sd">T4 gratuit · Gemini API</div></div>
|
||
<div class="card"><span class="badge bi">IDLE</span><h4>vLLM</h4><div class="sd">/opt/vllm · besoin GPU</div></div>
|
||
<div class="card"><span class="badge bo">OFF</span><h4>Ollama</h4><div class="sd">disabled · weval-brain-v2</div></div>
|
||
<div class="card"><span class="badge bl">LIVE</span><h4>24 Skills</h4><div class="sd">/opt/skills/</div><div class="tags"><span class="tag">docx</span><span class="tag">pdf</span><span class="tag">pptx</span><span class="tag">xlsx</span><span class="tag">frontend</span><span class="tag">mcp-builder</span><span class="tag">canvas</span><span class="tag">skill-creator</span></div></div>
|
||
<div class="card"><span class="badge bl">LIVE</span><h4>Finetune pipeline</h4><div class="sd">weval-brain-v4 · HF verified</div></div>
|
||
</div></div></section>
|
||
|
||
<!-- ═══════ HUBS ═══════ -->
|
||
<section id="sec-hubs" class="show"><div class="sections">
|
||
<div class="stit">30 Hubs · 19 Monitors · 15 Agents</div>
|
||
<div class="grid">
|
||
<div class="card"><h4>30 Hub pages</h4><div class="tags"><span class="tag">agents-hub</span><span class="tag">ai-hub</span><span class="tag">anthropic-hub</span><span class="tag">blade-hub</span><span class="tag">cloudflare-hub</span><span class="tag">deepseek-hub</span><span class="tag">docker-hub</span><span class="tag">email-hub</span><span class="tag">ethica-hub</span><span class="tag">github-hub</span><span class="tag">google-hub</span><span class="tag">gpu-hub</span><span class="tag">hetzner-hub</span><span class="tag">huggingface-hub</span><span class="tag">keys-hub</span><span class="tag">knowledge-hub</span><span class="tag">monitoring-hub</span><span class="tag">namecheap-hub</span><span class="tag">office-hub</span><span class="tag">paperclip-hub</span><span class="tag">qa-hub</span><span class="tag">qdrant-hub</span><span class="tag">security-hub</span><span class="tag">toolhub</span><span class="tag">tools-hub</span><span class="tag">wevads-hub</span><span class="tag">wevia-hub</span></div></div>
|
||
<div class="card"><h4>19 Monitors</h4><div class="tags"><span class="tag">command-center</span><span class="tag">mega-command</span><span class="tag">infra-command</span><span class="tag">crons-monitor</span><span class="tag">cyber-monitor</span><span class="tag">ethica-monitor</span><span class="tag">realtime-monitor</span><span class="tag">sovereign-monitor</span><span class="tag">sessions-monitor</span><span class="tag">security-dashboard</span></div></div>
|
||
<div class="card"><h4>15 Agent pages</h4><div class="tags"><span class="tag">agents-3d</span><span class="tag">agents-alive</span><span class="tag">agents-archi</span><span class="tag">agents-enterprise</span><span class="tag">agents-fleet</span><span class="tag">agents-goodjob</span><span class="tag">agents-hd</span><span class="tag">agents-iso3d</span><span class="tag">agents-sim</span><span class="tag">agents-valuechain</span></div></div>
|
||
</div></div></section>
|
||
|
||
<div class="footer">
|
||
<a href="/architecture-map.html">Architecture legacy</a> · <a href="/architecture.html">Architecture technique</a><br>
|
||
WEVAL Consulting · Casablanca · 14 avril 2026
|
||
</div>
|
||
|
||
<script>
|
||
function show(s,btn){
|
||
document.querySelectorAll('.tabs button').forEach(b=>b.classList.remove('on'));
|
||
if(btn)btn.classList.add('on');
|
||
const secs=document.querySelectorAll('section');
|
||
if(s==='all'){secs.forEach(x=>x.classList.add('show'));return}
|
||
secs.forEach(x=>x.classList.toggle('show',x.id==='sec-'+s));
|
||
}
|
||
</script>
|
||
<script>(function(){var p=window.location.pathname;var pub=["/","/index.html","/wevia.html","/wevia-widget.html","/enterprise-model.html","/wevia","/login","/register.html","/agents-archi.html","/wevia-meeting-rooms.html","/director-center.html","/director-chat.html","/l99-brain.html","/agents-fleet.html","/value-streaming.html","/architecture.html","/openclaw.html","/l99-saas.html","/admin-saas.html","/agents-goodjob.html","/ai-benchmark.html","/oss-discovery.html","/paperclip.html","/agents-3d.html","/agents-alive.html","/agents-enterprise.html","/agents-hd.html","/agents-iso3d.html","/agents-sim.html","/agents-valuechain.html","/avatar-picker.html","/login.html","/register","/weval-login.html","/weval-login","/arsenal-login.html","/arsenal-login","/ethica-login.html","/ethica-login","/office-login.html","/office-login","/wtp-login.html","/wtp-login","/azure-reregister.html","/azure-reregister","/authentik-callback","/auth-callback","/reset-password.html","/reset-password","/signup.html","/signup"];var isPub=pub.indexOf(p)>=0||p.indexOf("/products/")===0||p.indexOf("/blog/")===0||p.indexOf("/service/")===0;if(isPub||document.getElementById("weval-gl"))return;var a=document.createElement("a");a.id="weval-gl";a.href="/logout";a.textContent="Logout";a.style.cssText="position:fixed;top:10px;right:12px;z-index:99990;padding:5px 10px;background:rgba(30,30,50,0.7);color:rgba(200,210,230,0.8);border:1px solid rgba(100,100,140,0.3);border-radius:6px;font:500 11px system-ui,sans-serif;text-decoration:none;opacity:0.6;cursor:pointer;backdrop-filter:blur(6px);transition:all .15s";a.onmouseover=function(){this.style.opacity="1";this.style.background="rgba(239,68,68,0.85)";this.style.color="white"};a.onmouseout=function(){this.style.opacity="0.6";this.style.background="rgba(30,30,50,0.7)";this.style.color="rgba(200,210,230,0.8)"};document.body.appendChild(a)})()</script><!-- NL-AutoWire-badge-v1 -->
|
||
<a href="/nl-autowire-status.html" id="nlAutowireBadge" style="position:fixed;bottom:130px;right:8px;background:#1a3d2c;color:#56d364;padding:4px 10px;border-radius:12px;font-size:0.78em;font-family:-apple-system,sans-serif;text-decoration:none;z-index:99999;border:1px solid rgba(86,211,100,0.5);box-shadow:0 2px 8px rgba(0,0,0,0.3);">NL-AutoWire ✓</a>
|
||
<!-- CARTO_REMOVED -->
|
||
<!-- CARTO_BANNER_V1 -->
|
||
<div style="position:fixed;bottom:20px;right:20px;z-index:9999;background:linear-gradient(135deg,#141931,#2d1b5e);border:1px solid #64ffda;border-radius:12px;padding:12px 18px;box-shadow:0 4px 20px rgba(100,255,218,.3);font-family:-apple-system,Segoe UI,sans-serif;font-size:13px">
|
||
<a href="/cartographie-screens.html" style="color:#64ffda;text-decoration:none;font-weight:600;display:flex;align-items:center;gap:8px" title="Cartographie exhaustive de tous les ecrans live">
|
||
<span style="font-size:18px">🗺</span> Cartographie live
|
||
<span id="carto-banner-count" style="color:#8892b0;font-size:11px">3914 ecrans</span>
|
||
</a>
|
||
</div>
|
||
<script>
|
||
(function(){
|
||
fetch('/api/screens-health.php?_='+Date.now(),{cache:'no-store'}).then(r=>r.json()).then(d=>{
|
||
const c=d.counts||{}; const up=c.UP||0; const slow=c.SLOW||0; const br=c.BROKEN||0;
|
||
const el=document.getElementById('carto-banner-count');
|
||
if(el) el.innerHTML=`<span style="color:#22c55e">${up} UP</span> / <span style="color:#f59e0b">${slow} Lent</span> / <span style="color:#ef4444">${br} 5xx</span>`;
|
||
}).catch(()=>{});
|
||
})();
|
||
</script>
|
||
<!-- /CARTO_BANNER_V1 -->
|
||
<!-- WTP-GAP-FILL-V1 (doctrine 90-v2 gap-fill showcase, 18avr 2026) -->
|
||
<style>
|
||
.wtp-gapfill-banner{position:fixed;bottom:60px;left:0;right:0;z-index:99999;background:linear-gradient(90deg,#05060a,#0b0d15 20%,#181d2e 50%,#0b0d15 80%,#05060a);border-top:2px solid #14b8a6;color:#e2e8f0;padding:10px 16px;font-family:Inter,system-ui,-apple-system,sans-serif;font-size:11.5px;display:flex;align-items:center;gap:12px;flex-wrap:wrap;box-shadow:0 -10px 30px rgba(20,184,166,.28)}
|
||
.wtp-gapfill-banner a{color:#5eead4;text-decoration:none;font-weight:600;transition:color .15s}
|
||
.wtp-gapfill-banner a:hover{color:#22d3ee}
|
||
.wtp-gapfill-banner .pill{padding:2px 9px;background:rgba(99,102,241,.14);color:#a5b4fc;border-radius:10px;font-size:10.5px;font-family:JetBrains Mono,monospace;font-weight:600}
|
||
.wtp-gapfill-banner .pill.new{background:rgba(20,184,166,.22);color:#5eead4}
|
||
.wtp-gapfill-banner .pill.hot{background:rgba(236,72,153,.22);color:#f472b6}
|
||
.wtp-gapfill-banner .close{margin-left:auto;cursor:pointer;color:#64748b;padding:0 8px;font-size:16px;line-height:1;border:1px solid #334155;border-radius:4px}
|
||
.wtp-gapfill-banner .close:hover{color:#e2e8f0;border-color:#64748b}
|
||
.wtp-gapfill-banner.hidden{display:none}
|
||
@media(max-width:768px){.wtp-gapfill-banner{font-size:10px;padding:7px 10px;gap:8px}}
|
||
</style>
|
||
<div class="wtp-gapfill-banner" id="wtpGapFillBanner">
|
||
<span>🎯 <strong>WEVAL Agents Gap-Fill ERP</strong></span>
|
||
<span class="pill hot" id="gaps-banner-count">17 gaps live</span>
|
||
<span class="pill">SAP · Oracle · NetSuite · Dynamics</span>
|
||
<span class="pill new">🆕 Meeting Rooms</span>
|
||
<span class="pill new">🆕 Lean 6 Sigma</span>
|
||
<span id="wtp-gfb-metrics" class="pill">— chargement —</span>
|
||
<a href="/weval-technology-platform.html">→ WTP Portal (16 mod)</a>
|
||
<a href="/enterprise-model.html">Enterprise Model</a>
|
||
<a href="/api/weval-agents-gap-fill-manifest.json" target="_blank">📋 Manifest</a>
|
||
<span class="close" onclick="document.getElementById("wtpGapFillBanner").classList.add("hidden");localStorage.setItem("wtpGapFillHidden","1")">×</span>
|
||
</div>
|
||
<script>
|
||
(async()=>{
|
||
if(localStorage.getItem("wtpGapFillHidden")==="1"){document.getElementById("wtpGapFillBanner").classList.add("hidden");return;}
|
||
try{
|
||
const r=await fetch("/api/source-of-truth.json?t="+Date.now());
|
||
const d=await r.json();
|
||
const el=document.getElementById("wtp-gfb-metrics");
|
||
if(el)el.textContent=(d.ethica_total||"?")+" HCPs · "+(d.nonreg||"?")+" · "+(d.providers_count||"?")+" IA · "+(d.agents_count||"?")+" agents · "+(d.docker_running||"?")+" 🐳";
|
||
}catch(e){}
|
||
})();
|
||
</script>
|
||
|
||
<!-- WTP-D90V2-ENRICH-BANNER (doctrine 90-v2, 17avr 2026) -->
|
||
<style>
|
||
.wtp-enrich-banner{position:fixed;bottom:0;left:0;right:0;z-index:9999;background:linear-gradient(90deg,#0b0d15,#181d2e,#0b0d15);border-top:2px solid #14b8a6;color:#e2e8f0;padding:9px 18px;font-family:'JetBrains Mono',monospace,-apple-system,system-ui;font-size:11.5px;display:flex;align-items:center;gap:14px;flex-wrap:wrap;box-shadow:0 -8px 24px rgba(20,184,166,.25)}
|
||
.wtp-enrich-banner a{color:#14b8a6;text-decoration:none;font-weight:600}
|
||
.wtp-enrich-banner a:hover{color:#22d3ee}
|
||
.wtp-enrich-banner .pill{padding:2px 8px;background:rgba(99,102,241,.15);color:#a5b4fc;border-radius:10px;font-size:10.5px}
|
||
.wtp-enrich-banner .pill.new{background:rgba(20,184,166,.2);color:#5eead4}
|
||
.wtp-enrich-banner .close{margin-left:auto;cursor:pointer;color:#64748b;padding:0 6px;font-size:14px}
|
||
.wtp-enrich-banner .close:hover{color:#e2e8f0}
|
||
.wtp-enrich-banner.hidden{display:none}
|
||
@media(max-width:768px){.wtp-enrich-banner{font-size:10px;padding:6px 10px}}
|
||
|
||
/* === WEVIA Gemini Rolling v2 VISIBLE Enrichment (wave 306 batch) === */
|
||
.kpi,[class*="card"],[class*="panel"],[class*="room"],.stat-card,.metric-card,.hub-card,.widget,.stat,.box{position:relative!important}
|
||
.kpi,[class*="card"],.stat-card,.metric-card,.hub-card{animation:geV2Entrance .8s cubic-bezier(.34,1.56,.64,1) backwards}
|
||
.kpi:nth-child(1),[class*="card"]:nth-child(1){animation-delay:0s}
|
||
.kpi:nth-child(2),[class*="card"]:nth-child(2){animation-delay:.09s}
|
||
.kpi:nth-child(3),[class*="card"]:nth-child(3){animation-delay:.18s}
|
||
.kpi:nth-child(4),[class*="card"]:nth-child(4){animation-delay:.27s}
|
||
.kpi:nth-child(5),[class*="card"]:nth-child(5){animation-delay:.36s}
|
||
.kpi:nth-child(6),[class*="card"]:nth-child(6){animation-delay:.45s}
|
||
@keyframes geV2Entrance{from{opacity:0;transform:translateY(24px) scale(.94)}to{opacity:1;transform:translateY(0) scale(1)}}
|
||
.kpi,[class*="card"],.stat-card,.metric-card,.hub-card,.widget{border:1px solid transparent!important;box-shadow:0 0 0 1px rgba(236,72,153,.15),0 4px 16px rgba(0,0,0,.25)!important;transition:box-shadow .4s,transform .3s cubic-bezier(.34,1.56,.64,1),filter .3s!important}
|
||
.kpi:hover,[class*="card"]:hover,.stat-card:hover,.metric-card:hover,.hub-card:hover{transform:translateY(-6px) scale(1.03)!important;filter:brightness(1.2)!important;box-shadow:0 0 0 2px rgba(236,72,153,.6),0 12px 32px rgba(236,72,153,.25),0 0 24px rgba(78,205,196,.2)!important}
|
||
.kpi::before,[class*="card"]::before,.stat-card::before,.metric-card::before,.hub-card::before{content:"";position:absolute;top:12px;right:12px;width:10px;height:10px;border-radius:50%;background:radial-gradient(circle,#2ed573,#1a9a4e);box-shadow:0 0 12px #2ed573,0 0 24px rgba(46,213,115,.5);animation:geV2Pulse 1.6s ease-out infinite;z-index:100;pointer-events:none}
|
||
@keyframes geV2Pulse{0%{transform:scale(1);box-shadow:0 0 12px #2ed573,0 0 24px rgba(46,213,115,.5)}50%{transform:scale(1.4);box-shadow:0 0 20px #2ed573,0 0 40px rgba(46,213,115,.8)}100%{transform:scale(1);box-shadow:0 0 12px #2ed573,0 0 24px rgba(46,213,115,.5)}}
|
||
body::after{content:"";position:fixed;inset:0;pointer-events:none;background:radial-gradient(ellipse at 70% 30%,transparent 40%,rgba(236,72,153,.06) 100%),radial-gradient(ellipse at 30% 70%,transparent 40%,rgba(78,205,196,.04) 100%);animation:geV2Ambient 10s ease-in-out infinite;z-index:0}
|
||
@keyframes geV2Ambient{0%,100%{opacity:.5}50%{opacity:1}}
|
||
h1,.header-title,.main-title,.hub-title,.page-title{background-image:linear-gradient(90deg,currentColor 0%,currentColor 40%,rgba(236,72,153,1) 50%,currentColor 60%,currentColor 100%)!important;background-size:200% auto!important;-webkit-background-clip:text!important;background-clip:text!important;-webkit-text-fill-color:transparent!important;animation:geV2Shimmer 5s linear infinite!important}
|
||
@keyframes geV2Shimmer{0%{background-position:200% center}100%{background-position:-200% center}}
|
||
/* Doctrine zero chevauchement - hide common offenders */
|
||
.opus-x-btn,.toggle-top-right-btn,.fab-corner{display:none!important}
|
||
/* === end WEVIA Gemini Rolling v2 batch === */
|
||
</style>
|
||
<div class="wtp-enrich-banner" id="wtpEnrichBanner">
|
||
<span>🏛️ <strong>Enterprise Model 16 depts</strong></span>
|
||
<span class="pill new">🆕 Meeting Rooms</span>
|
||
<span class="pill new">🆕 Lean 6 Sigma</span>
|
||
<span id="wtp-eb-metrics" class="pill">— chargement —</span>
|
||
<a href="/weval-technology-platform.html">→ WEVAL Technology Platform (16 modules)</a>
|
||
<a href="/enterprise-model.html">Enterprise Model</a>
|
||
<a href="/wevia-master.html">WEVIA Master</a>
|
||
<span class="close" onclick="document.getElementById('wtpEnrichBanner').classList.add('hidden')">×</span>
|
||
</div>
|
||
<script>
|
||
(async()=>{try{const r=await fetch('/api/source-of-truth.json?t='+Date.now());const d=await r.json();const el=document.getElementById('wtp-eb-metrics');if(el)el.textContent=(d.ethica_total||'?')+' HCPs · '+(d.nonreg||'?')+' · '+(d.providers_count||'?')+' IA · '+(d.docker_running||'?')+' 🐳 · '+(d.subdomains_live||'?')+' subdomains';}catch(e){}})();
|
||
</script>
|
||
<!-- V66-PAIN-POINTS-ATLAS -->
|
||
<div style="position:fixed;bottom:18px;right:18px;z-index:999;background:linear-gradient(135deg,#eab308,#f59e0b);border-radius:10px;padding:12px 16px;box-shadow:0 12px 32px rgba(234,179,8,0.4);display:flex;gap:10px;align-items:center;max-width:360px;text-decoration:none">
|
||
<span style="font-size:22px">🗺️</span>
|
||
<div style="color:#0b0d15">
|
||
<div style="font-size:12px;font-weight:800">Pain Points Atlas · 25 ERPs</div>
|
||
<div style="font-size:10.5px;opacity:.85">35 pain points · 35 agents · 17.36M€ savings/client</div>
|
||
<a href="/pain-points-atlas.html" style="display:inline-block;margin-top:4px;padding:3px 10px;background:#0b0d15;color:#eab308;border-radius:5px;font-size:10.5px;font-weight:700;text-decoration:none">Open Atlas →</a>
|
||
</div>
|
||
</div>
|
||
<!-- /V66-PAIN-POINTS-ATLAS -->
|
||
|
||
|
||
|
||
<script>
|
||
/* V75 AVATAR UNIFIER — Meeting-rooms emoji style (Opus 19avr) */
|
||
(function() {
|
||
if (window.__WEVAL_AVATAR_V75) return;
|
||
window.__WEVAL_AVATAR_V75 = true;
|
||
const REG_URL = '/api/agent-avatars-v75.json';
|
||
const SVG_EP = '/api/agent-avatar-svg.php';
|
||
function emojiSVGUrl(name, emoji) {
|
||
return SVG_EP + '?n=' + encodeURIComponent(name) + '&e=' + encodeURIComponent(emoji);
|
||
}
|
||
fetch(REG_URL + '?t=' + Date.now()).then(r => r.json()).then(REG => {
|
||
function getAvatarUrl(name) {
|
||
const rec = REG[name];
|
||
if (!rec) return null;
|
||
if (typeof rec === 'object' && rec.svg) return rec.svg;
|
||
if (typeof rec === 'object' && rec.emoji) return emojiSVGUrl(name, rec.emoji);
|
||
return typeof rec === 'string' ? rec : null;
|
||
}
|
||
function findCI(key) {
|
||
const lower = key.toLowerCase();
|
||
for (const k of Object.keys(REG)) if (k.toLowerCase() === lower) return k;
|
||
return null;
|
||
}
|
||
function apply() {
|
||
document.querySelectorAll('img').forEach(img => {
|
||
const key = img.alt || img.dataset.agent || img.dataset.name || img.title || '';
|
||
if (!key) return;
|
||
let url = getAvatarUrl(key);
|
||
if (!url) { const alt = findCI(key); if (alt) url = getAvatarUrl(alt); }
|
||
if (url && img.src !== url && !img.src.endsWith(url)) {
|
||
img.src = url;
|
||
img.setAttribute('data-weval-v75', '1');
|
||
}
|
||
});
|
||
document.querySelectorAll('[data-agent]:not([data-weval-v75-applied])').forEach(el => {
|
||
const name = el.dataset.agent;
|
||
const url = getAvatarUrl(name);
|
||
if (!url) return;
|
||
const img = document.createElement('img');
|
||
img.src = url; img.alt = name; img.title = name;
|
||
img.className = 'v75-avatar';
|
||
img.style.cssText = 'width:32px;height:32px;border-radius:50%;object-fit:cover;vertical-align:middle;background:transparent';
|
||
el.setAttribute('data-weval-v75-applied', '1');
|
||
el.prepend(img);
|
||
});
|
||
}
|
||
apply();
|
||
setTimeout(apply, 400); setTimeout(apply, 1200); setTimeout(apply, 3000);
|
||
const mo = new MutationObserver(() => apply());
|
||
mo.observe(document.body, {childList: true, subtree: true});
|
||
setTimeout(() => mo.disconnect(), 20000);
|
||
console.log('[V75 AvatarUnifier] applied from', Object.keys(REG).length, 'agents');
|
||
}).catch(e => console.warn('[V75] fetch failed', e));
|
||
})();
|
||
</script>
|
||
|
||
<!-- === OPUS UNIVERSAL DRILL-DOWN v1 19avr — append-only, doctrine #14 === -->
|
||
<script>
|
||
(function(){
|
||
if (window.__opusUniversalDrill) return; window.__opusUniversalDrill = true;
|
||
var d = document;
|
||
var m = d.createElement('div');
|
||
m.id = 'opus-udrill';
|
||
m.style.cssText = 'position:fixed;inset:0;background:rgba(0,0,0,0.82);backdrop-filter:blur(6px);display:none;align-items:center;justify-content:center;z-index:99995;padding:20px;cursor:pointer';
|
||
var inner = d.createElement('div');
|
||
inner.id = 'opus-udrill-in';
|
||
inner.style.cssText = 'max-width:900px;width:100%;max-height:90vh;overflow:auto;background:#0b0d15;border:1px solid rgba(99,102,241,0.35);border-radius:14px;padding:28px;cursor:default;box-shadow:0 20px 60px rgba(0,0,0,0.6);color:#e2e8f0;font:14px/1.55 Inter,system-ui,sans-serif';
|
||
inner.addEventListener('click', function(e){ e.stopPropagation(); });
|
||
m.appendChild(inner);
|
||
m.addEventListener('click', function(){ m.style.display='none'; });
|
||
d.addEventListener('keydown', function(e){ if(e.key==='Escape') m.style.display='none'; });
|
||
(d.body || d.documentElement).appendChild(m);
|
||
|
||
function openCard(card) {
|
||
// Clone card content + show close btn + increase font-size
|
||
var html = '<div style="display:flex;justify-content:flex-end;margin-bottom:14px"><button id="opus-udrill-close" style="padding:6px 14px;background:#171b2a;border:1px solid rgba(99,102,241,0.25);color:#e2e8f0;border-radius:8px;cursor:pointer;font-size:12px">✕ Fermer (Esc)</button></div>';
|
||
html += '<div style="transform-origin:top left;font-size:1.05em">' + card.outerHTML + '</div>';
|
||
inner.innerHTML = html;
|
||
d.getElementById('opus-udrill-close').onclick = function(){ m.style.display='none'; };
|
||
m.style.display = 'flex';
|
||
}
|
||
|
||
function wire(root) {
|
||
var sels = '.card,[class*="card"],.kpi,[class*="kpi"],.stat,[class*="stat"],.tile,[class*="tile"],.metric,[class*="metric"],.widget,[class*="widget"]';
|
||
var cards = root.querySelectorAll(sels);
|
||
for (var i = 0; i < cards.length; i++) {
|
||
var c = cards[i];
|
||
if (c.__opusWired) continue;
|
||
if (c.closest('button, a, input, select, textarea, #opus-udrill')) continue;
|
||
var r = c.getBoundingClientRect();
|
||
if (r.width < 60 || r.height < 40) continue;
|
||
c.__opusWired = true;
|
||
c.style.cursor = 'pointer';
|
||
c.setAttribute('role','button');
|
||
c.setAttribute('tabindex','0');
|
||
c.addEventListener('click', function(ev){
|
||
// If a more-specific drill is already active (e.g. pp-card custom), let it handle
|
||
if (ev.target.closest('[data-pp-id]') && window.__opusDrillInit) return;
|
||
if (ev.target.closest('a,button,input,select')) return;
|
||
ev.preventDefault(); ev.stopPropagation();
|
||
openCard(this);
|
||
});
|
||
c.addEventListener('keydown', function(ev){ if(ev.key==='Enter'||ev.key===' '){ev.preventDefault();openCard(this);} });
|
||
}
|
||
}
|
||
|
||
// Initial + mutation observer
|
||
var initRun = function(){ wire(d.body || d.documentElement); };
|
||
if (d.readyState === 'loading') d.addEventListener('DOMContentLoaded', initRun);
|
||
else initRun();
|
||
var mo = new MutationObserver(function(muts){
|
||
var newCard = false;
|
||
for (var i=0;i<muts.length;i++) if (muts[i].addedNodes.length) { newCard = true; break; }
|
||
if (newCard) initRun();
|
||
});
|
||
mo.observe(d.body || d.documentElement, {childList:true, subtree:true});
|
||
})();
|
||
</script>
|
||
<!-- === OPUS UNIVERSAL DRILL-DOWN END === -->
|
||
|
||
|
||
<script>
|
||
// Opus v9.32 gaps banner live
|
||
(async function(){
|
||
try {
|
||
const r = await fetch('/api/weval-agents-gap-fill-manifest.json');
|
||
const d = await r.json();
|
||
const erp = d.erp_gaps_covered || {};
|
||
let total = 0;
|
||
for (const k in erp) {
|
||
const v = erp[k];
|
||
if (Array.isArray(v)) total += v.length;
|
||
else if (v && Array.isArray(v.gaps)) total += v.gaps.length;
|
||
}
|
||
const el = document.getElementById('gaps-banner-count');
|
||
if (el && total > 0) el.textContent = total + ' ERP gaps';
|
||
} catch(e) {}
|
||
})();
|
||
</script>
|
||
|
||
<script src="/api/a11y-auto-enhancer.js" defer></script>
|
||
|
||
<script>
|
||
/* HTMLGUARD_V1_ARCHI - Auto-redirect session expire + error surface */
|
||
(function(){
|
||
if (window._safeJsonGuard) return;
|
||
window._safeJsonGuard = async function(r) {
|
||
const t = (await r.text()).trim();
|
||
if (t.startsWith('<!DOCTYPE') || t.startsWith('<html')) {
|
||
if ((t.indexOf('Login') > -1 || t.indexOf('login') > -1) && !window._sessionExpiredWarned) {
|
||
window._sessionExpiredWarned = true;
|
||
console.warn('[HTMLGUARD_V1_ARCHI] Session expired');
|
||
const banner = document.createElement('div');
|
||
banner.style.cssText = 'position:fixed;top:0;left:0;right:0;z-index:99999;background:#f59e0b;color:#000;padding:10px 20px;text-align:center;font-family:system-ui,sans-serif;font-size:14px;font-weight:600;box-shadow:0 2px 8px rgba(0,0,0,.3)';
|
||
banner.innerHTML = '⚠ Session expirée · <a href="'+window.location.pathname+'" style="color:#7c2d12;text-decoration:underline;margin-left:8px">Se reconnecter</a>';
|
||
document.body.appendChild(banner);
|
||
}
|
||
return {error: 'html_response', isHtmlError: true, status: r.status};
|
||
}
|
||
try { return JSON.parse(t); }
|
||
catch(e) { return {error: 'json_parse: ' + e.message, raw: t.substring(0, 200)}; }
|
||
};
|
||
|
||
// Intercept global fetch to auto-apply guard on .json() calls
|
||
const _origJson = Response.prototype.json;
|
||
// Safer: don't monkey-patch — just expose helper. Existing code works, new code uses _safeJsonGuard.
|
||
})();
|
||
</script>
|
||
<!-- WTP_UDOCK_V1 (Opus 21-avr t32b4) --><script src="/wtp-unified-dock.js" defer></script>
|
||
<script src="/opus-antioverlap-doctrine.js?v=1777045903" defer></script>
|
||
<!-- DOCTRINE-60-UX-JS --><script id="doctrine60-ux-js-architecture-live">
|
||
const observer = new IntersectionObserver((entries) => {
|
||
entries.forEach((entry, index) => {
|
||
if (entry.isIntersecting) {
|
||
setTimeout(() => {
|
||
entry.target.classList.add('enter-stagger');
|
||
}, index * 80);
|
||
}
|
||
});
|
||
}, { threshold: 0.1 });
|
||
|
||
document.querySelectorAll('.card, .btn, .kpi, .panel').forEach(el => observer.observe(el));
|
||
|
||
</script>
|
||
</body>
|
||
</html>
|