691 lines
44 KiB
HTML
691 lines
44 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="fr">
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||
<title>WEVAL — Registre Intelligence IA Souveraine</title>
|
||
<link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;700&family=Space+Grotesk:wght@300;500;700&family=Playfair+Display:wght@700;900&display=swap" rel="stylesheet">
|
||
<style>
|
||
*{margin:0;padding:0;box-sizing:border-box}
|
||
:root{
|
||
--bg:#04060e;--bg2:#0a0e1a;--bg3:#111628;--bg4:#191f38;
|
||
--tx:#d8daf0;--tx2:#6068a0;
|
||
--gold:#ffd700;--cyan:#00e5ff;--purple:#b388ff;--green:#69f0ae;--red:#ff5252;--orange:#ffab40;--blue:#448aff;--pink:#ff80ab;
|
||
--border:#1a2040;
|
||
}
|
||
body{background:var(--bg);color:var(--tx);font-family:'Space Grotesk',sans-serif;line-height:1.7}
|
||
|
||
.hero{padding:60px 40px;background:linear-gradient(160deg,#080420 0%,#0a1030 40%,#041020 100%);border-bottom:2px solid var(--gold);position:relative;overflow:hidden}
|
||
.hero::after{content:'';position:absolute;top:-100px;right:-100px;width:500px;height:500px;background:radial-gradient(circle,rgba(255,215,0,0.06),transparent 70%);pointer-events:none}
|
||
.hero h1{font-family:'Playfair Display',serif;font-size:2.6em;font-weight:900;color:var(--gold)}
|
||
.hero .sub{color:var(--tx2);margin-top:8px}
|
||
.kpis{display:flex;gap:20px;margin-top:28px;flex-wrap:wrap}
|
||
.kpi{background:var(--bg2);border:1px solid var(--border);border-radius:10px;padding:14px 22px;text-align:center}
|
||
.kpi .v{font-size:2em;font-weight:700;font-family:'JetBrains Mono',monospace}
|
||
.kpi .l{font-size:0.65em;text-transform:uppercase;letter-spacing:2px;color:var(--tx2);margin-top:2px}
|
||
|
||
.container{max-width:1400px;margin:0 auto;padding:30px 40px}
|
||
|
||
.layer{margin-bottom:50px;border:1px solid var(--border);border-radius:14px;overflow:hidden;background:var(--bg2)}
|
||
.layer-head{padding:20px 28px;display:flex;align-items:center;gap:16px;border-bottom:1px solid var(--border);background:var(--bg3)}
|
||
.layer-head .num{width:40px;height:40px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-family:'JetBrains Mono',monospace;font-weight:900;font-size:1.1em;flex-shrink:0}
|
||
.layer-head h2{font-size:1.3em;font-weight:700;flex:1}
|
||
.layer-head .ct{font-size:0.75em;font-family:'JetBrains Mono',monospace;padding:4px 12px;border-radius:20px}
|
||
.layer-body{padding:24px 28px}
|
||
|
||
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(340px,1fr));gap:14px}
|
||
.card{background:var(--bg);border:1px solid var(--border);border-radius:10px;padding:16px 18px;transition:all 0.2s;position:relative}
|
||
.card:hover{border-color:var(--gold);box-shadow:0 4px 24px rgba(255,215,0,0.06);transform:translateY(-2px)}
|
||
.card .nm{font-weight:700;font-size:0.95em;margin-bottom:4px;display:flex;align-items:center;gap:8px}
|
||
.card .nm .ico{font-size:1.1em}
|
||
.card .file{font-family:'JetBrains Mono',monospace;font-size:0.72em;color:var(--cyan);margin-bottom:6px;word-break:break-all}
|
||
.card .desc{font-size:0.82em;color:var(--tx2);line-height:1.6}
|
||
.card .funcs{font-size:0.72em;color:var(--purple);margin-top:8px;font-family:'JetBrains Mono',monospace}
|
||
.card .status{position:absolute;top:12px;right:12px;width:10px;height:10px;border-radius:50%}
|
||
.st-live{background:var(--green);box-shadow:0 0 8px var(--green)}
|
||
.st-vault{background:var(--orange)}
|
||
.st-disabled{background:var(--red)}
|
||
.st-partial{background:var(--blue)}
|
||
|
||
.subsection{font-size:0.75em;color:var(--gold);text-transform:uppercase;letter-spacing:3px;margin:20px 0 12px;font-weight:700;font-family:'JetBrains Mono',monospace;padding-bottom:6px;border-bottom:1px solid var(--border)}
|
||
|
||
.table-wrap{overflow-x:auto;margin:12px 0}
|
||
table{width:100%;border-collapse:collapse;font-size:0.82em}
|
||
th{background:var(--bg3);color:var(--gold);padding:10px 14px;text-align:left;font-size:0.75em;text-transform:uppercase;letter-spacing:1px}
|
||
td{padding:8px 14px;border-bottom:1px solid var(--border);color:var(--tx2)}
|
||
tr:hover td{background:var(--bg3);color:var(--tx)}
|
||
code{background:var(--bg4);padding:1px 6px;border-radius:3px;font-family:'JetBrains Mono',monospace;font-size:0.9em;color:var(--cyan)}
|
||
|
||
.legend{display:flex;gap:16px;padding:16px 28px;background:var(--bg3);border-bottom:1px solid var(--border);flex-wrap:wrap}
|
||
.legend .i{display:flex;align-items:center;gap:6px;font-size:0.75em;color:var(--tx2)}
|
||
.legend .d{width:10px;height:10px;border-radius:50%}
|
||
|
||
.note{margin-top:16px;padding:14px 18px;background:rgba(255,215,0,0.04);border-left:3px solid var(--gold);border-radius:0 8px 8px 0;font-size:0.82em;color:var(--tx2)}
|
||
|
||
@media(max-width:768px){
|
||
.hero{padding:24px 16px}.hero h1{font-size:1.8em}
|
||
.container{padding:16px}.grid{grid-template-columns:1fr}
|
||
.kpis{gap:10px}.kpi{padding:10px 14px}.kpi .v{font-size:1.4em}
|
||
}
|
||
</style>
|
||
</head>
|
||
<body>
|
||
|
||
<div class="hero">
|
||
<h1>🧠 Intelligence IA Souveraine — Registre Exhaustif</h1>
|
||
<div class="sub">Tout ce qui a été créé en 6 mois · Brain Engines · Prompts · KB · RAG · Agents · Providers · Tools · À wirer dans le Sovereign Brain</div>
|
||
<div class="kpis">
|
||
<div class="kpi"><div class="v" style="color:var(--gold)">6</div><div class="l">Brain Engines</div></div>
|
||
<div class="kpi"><div class="v" style="color:var(--cyan)">11</div><div class="l">Agents IA</div></div>
|
||
<div class="kpi"><div class="v" style="color:var(--purple)">9</div><div class="l">LLM Providers</div></div>
|
||
<div class="kpi"><div class="v" style="color:var(--green)">111</div><div class="l">Fonctions Cognitives</div></div>
|
||
<div class="kpi"><div class="v" style="color:var(--orange)">32</div><div class="l">Tables KB</div></div>
|
||
<div class="kpi"><div class="v" style="color:var(--blue)">4,500+</div><div class="l">Entrées Knowledge</div></div>
|
||
<div class="kpi"><div class="v" style="color:var(--pink)">15,953</div><div class="l">Vectors Qdrant</div></div>
|
||
<div class="kpi"><div class="v" style="color:var(--red)">40+</div><div class="l">Catégories KB</div></div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="legend">
|
||
<div class="i"><div class="d" style="background:var(--green)"></div>LIVE en production</div>
|
||
<div class="i"><div class="d" style="background:var(--orange)"></div>En vault / clé disponible</div>
|
||
<div class="i"><div class="d" style="background:var(--blue)"></div>Partiel / à connecter</div>
|
||
<div class="i"><div class="d" style="background:var(--red)"></div>Désactivé / DOWN</div>
|
||
</div>
|
||
|
||
<div class="container">
|
||
|
||
<!-- ═══════════ LAYER 1: BRAIN ENGINES ═══════════ -->
|
||
<div class="layer">
|
||
<div class="layer-head">
|
||
<div class="num" style="background:var(--gold);color:#000">1</div>
|
||
<h2>Brain Engines — 6 couches cognitives</h2>
|
||
<div class="ct" style="background:rgba(255,215,0,0.15);color:var(--gold)">111 FONCTIONS</div>
|
||
</div>
|
||
<div class="layer-body">
|
||
<div class="grid">
|
||
|
||
<div class="card"><div class="status st-live"></div>
|
||
<div class="nm"><span class="ico">🧬</span> Brain Nucleus v3</div>
|
||
<div class="file">brain-nucleus-clean.php · 1334 lignes · BRAIN_VERSION 3.0-opus</div>
|
||
<div class="desc">Cœur souverain WEVIA. 10 modules cognitifs qui construisent dynamiquement le system prompt selon le contexte du message.</div>
|
||
<div class="funcs">23 fonctions: getCorePersonality(), getCognitiveEngine(), getCodeMastery(), getSSHMastery(), getGraphEngine(), getMemorySystem(), getDomainExpertise(), getFewShotExamples() ×8 dialogues, getSelfVerification(), getNaturalLanguage(), buildSovereignPrompt(), buildGPUPrompt(), getNucleusPrompt()</div>
|
||
</div>
|
||
|
||
<div class="card"><div class="status st-live"></div>
|
||
<div class="nm"><span class="ico">🎯</span> Cognitive Brain</div>
|
||
<div class="file">cognitive-brain.php · 20 fonctions</div>
|
||
<div class="desc">Routage intelligent des requêtes. Classifie l'intent, sélectionne le persona, injecte le deep knowledge, gère la désambiguïsation et le guard anti-hallucination.</div>
|
||
<div class="funcs">20 fonctions: classifyIntent(), selectPersona(), injectDeepKnowledge(), cognitiveRouting(), disambiguate(), hallucinationGuard(), calibrateTemperature(), extractMemoryEntities(), contextualExpansion(), responseShaping()</div>
|
||
</div>
|
||
|
||
<div class="card"><div class="status st-live"></div>
|
||
<div class="nm"><span class="ico">⚡</span> Cognitive Opus46</div>
|
||
<div class="file">cognitive-opus46.php · 20 fonctions</div>
|
||
<div class="desc">Raisonnement avancé niveau Opus. Chain-of-Thought (CoT), sélection de stratégie (causal, parallel, counterfactual, dialectical), mesure de cohérence, meta-confidence.</div>
|
||
<div class="funcs">20 fonctions: chainOfThought(), selectStrategy(), causalReasoning(), parallelAnalysis(), counterfactualThinking(), dialecticalReasoning(), measureCoherence(), metaConfidence(), reasoningDepth(), adaptiveComplexity()</div>
|
||
</div>
|
||
|
||
<div class="card"><div class="status st-live"></div>
|
||
<div class="nm"><span class="ico">🛡️</span> Cognitive Opus46 Advanced</div>
|
||
<div class="file">cognitive-opus46-advanced.php · 20 fonctions</div>
|
||
<div class="desc">Pipeline d'auto-correction. Détecte contradictions logiques, nombres hallucinés, réponses tronquées, mismatch de langue. Sélection GPU optimale.</div>
|
||
<div class="funcs">20 fonctions: selfCorrectionPipeline(), detectLogicalContradiction(), detectHallucinatedNumbers(), detectTruncatedResponse(), detectLanguageMismatch(), selectGPUModel(), qualityGate(), responseValidator(), confidenceCalibrator(), errorRecovery()</div>
|
||
</div>
|
||
|
||
<div class="card"><div class="status st-live"></div>
|
||
<div class="nm"><span class="ico">🌍</span> Cognitive Expansion</div>
|
||
<div class="file">cognitive-expansion.php · 15 fonctions</div>
|
||
<div class="desc">Expertise sectorielle. Détecte le domaine métier et injecte le vocabulaire, les KPIs, les réglementations spécifiques au secteur.</div>
|
||
<div class="funcs">15 domaines: pharma, finance, manufacturing, retail, energy, telecom, healthcare, education, insurance, real_estate, agriculture, transport, media, legal, HR</div>
|
||
</div>
|
||
|
||
<div class="card"><div class="status st-live"></div>
|
||
<div class="nm"><span class="ico">🔄</span> Cognitive GPU Rotation</div>
|
||
<div class="file">cognitive-gpu-rotation.php · 13 fonctions</div>
|
||
<div class="desc">Pipeline GPU souverain. Rotation des modèles locaux selon la charge et le type de requête. Cross-vérification entre modèles. Fallback cloud si GPU saturé.</div>
|
||
<div class="funcs">13 fonctions: sovereignGPUPipeline(), rotateModel(), crossVerify(), healthCheck(), cloudFallback(), loadBalance(), modelSelector(), performanceTracker(), contextWindowManager(), batchOptimizer()</div>
|
||
</div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- ═══════════ LAYER 2: SOVEREIGN AGENTS ═══════════ -->
|
||
<div class="layer">
|
||
<div class="layer-head">
|
||
<div class="num" style="background:var(--cyan);color:#000">2</div>
|
||
<h2>Agents IA Souverains — 11 agents actifs</h2>
|
||
<div class="ct" style="background:rgba(0,229,255,0.15);color:var(--cyan)">11 ENDPOINTS</div>
|
||
</div>
|
||
<div class="layer-body">
|
||
<div class="table-wrap">
|
||
<table>
|
||
<tr><th>Agent</th><th>Endpoint</th><th>Rôle</th><th>Intents</th><th>Status</th></tr>
|
||
<tr><td><strong>WEVIA Master</strong></td><td><code>/api/wevia-master-api.php</code></td><td>Cerveau central, orchestration multi-agent, pilotage chat</td><td>134</td><td style="color:var(--green)">✅ LIVE</td></tr>
|
||
<tr><td><strong>WEVIA Autonomous</strong></td><td><code>/api/wevia-autonomous.php</code></td><td>Exécution autonome: code_exec, ssh, email, search, doc, file, url + 12 intents action</td><td>134 + SSE</td><td style="color:var(--green)">✅ LIVE</td></tr>
|
||
<tr><td><strong>WEVIA Director</strong></td><td><code>/api/wevia-director.php</code></td><td>Supervision infra, cron */15min, 39 métriques, actions correctives auto</td><td>39 obs</td><td style="color:var(--green)">✅ LIVE</td></tr>
|
||
<tr><td><strong>L99 Brain</strong></td><td><code>/api/l99-chat.php</code></td><td>Quality assurance, grille 3col + 16 boutons, tests automatisés</td><td>QA</td><td style="color:var(--green)">✅ LIVE</td></tr>
|
||
<tr><td><strong>WeDroid</strong></td><td><code>/api/wedroid-brain-api.php</code></td><td>Terminal IA souverain, 1029 lignes, 8 modules, AI Brain + TG Alerts</td><td>8 modules</td><td style="color:var(--green)">✅ LIVE</td></tr>
|
||
<tr><td><strong>Chatbot Public</strong></td><td><code>/api/weval-chatbot-api.php</code></td><td>Interface publique WEVIA Arena, 134KB, 751 fonctions, smart router v5</td><td>18 intents</td><td style="color:var(--green)">✅ LIVE</td></tr>
|
||
<tr><td><strong>Turbo</strong></td><td><code>wevia-turbo.php</code></td><td>Fast-path vLLM direct 5-15s, capability routing (image/PDF/schema → pipeline)</td><td>Routing</td><td style="color:var(--blue)">🔵 PARTIEL</td></tr>
|
||
<tr><td><strong>Multi-Agent</strong></td><td><code>wevia-multi-agent.php</code></td><td>6 agents (Researcher, Critic, Writer, Planner, Coder, Debugger), 4 modes, consensus MoA</td><td>6 agents</td><td style="color:var(--blue)">🔵 PARTIEL</td></tr>
|
||
<tr><td><strong>Blade Razer</strong></td><td><code>/api/blade-agent.php</code></td><td>Agent desktop local, polling 30s, 50+ actions, 58d uptime</td><td>50+</td><td style="color:var(--green)">✅ LIVE</td></tr>
|
||
<tr><td><strong>MiroFish</strong></td><td><code>:5001</code></td><td>Agent autonome + auto-fix. Health check + restart auto</td><td>Auto</td><td style="color:var(--green)">✅ LIVE</td></tr>
|
||
<tr><td><strong>DeerFlow</strong></td><td><code>:2024</code></td><td>ByteDance multi-agent research framework</td><td>Research</td><td style="color:var(--blue)">🔵 DOCKER</td></tr>
|
||
</table>
|
||
</div>
|
||
|
||
<div class="note">
|
||
<strong>Agents désactivés :</strong> Paperclip (:3201 DISABLED), Langfuse (:3100 observability), Ollama S151 (DOWN firewall). N8N workflows inactifs (crons compensent).
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- ═══════════ LAYER 3: LLM PROVIDERS ═══════════ -->
|
||
<div class="layer">
|
||
<div class="layer-head">
|
||
<div class="num" style="background:var(--purple);color:#000">3</div>
|
||
<h2>LLM Providers — 9 actifs + hiérarchie souveraine</h2>
|
||
<div class="ct" style="background:rgba(179,136,255,0.15);color:var(--purple)">SOVEREIGN FIRST</div>
|
||
</div>
|
||
<div class="layer-body">
|
||
|
||
<div class="subsection">RANG 1 — Souverain (Ollama Local)</div>
|
||
<div class="table-wrap">
|
||
<table>
|
||
<tr><th>Modèle</th><th>Taille</th><th>Usage</th><th>Latence</th><th>Status</th></tr>
|
||
<tr><td><code>qwen3:4b</code></td><td>4B</td><td>Fast general, greetings</td><td>~300ms</td><td style="color:var(--green)">✅</td></tr>
|
||
<tr><td><code>gemma4:e4b</code></td><td>4B</td><td>General purpose</td><td>~400ms</td><td style="color:var(--green)">✅</td></tr>
|
||
<tr><td><code>nomic-embed-text</code></td><td>137M</td><td>Embeddings RAG</td><td>~50ms</td><td style="color:var(--green)">✅</td></tr>
|
||
<tr><td><code>all-minilm</code></td><td>33M</td><td>Embeddings légers</td><td>~20ms</td><td style="color:var(--green)">✅</td></tr>
|
||
<tr><td><code>glm-4:9b</code></td><td>9B</td><td>Bilingual CN/EN</td><td>~800ms</td><td style="color:var(--orange)">📦 Installé</td></tr>
|
||
<tr><td><code>moondream</code></td><td>1.8B</td><td>Vision / OCR</td><td>~500ms</td><td style="color:var(--orange)">📦 Installé</td></tr>
|
||
<tr><td><code>deepseek-r1:14b</code></td><td>14B</td><td>Deep reasoning</td><td>~3s</td><td style="color:var(--orange)">📦 ex-GPU</td></tr>
|
||
<tr><td><code>deepseek-r1:32b</code></td><td>32B</td><td>Heavy reasoning</td><td>~15s</td><td style="color:var(--orange)">📦 ex-GPU</td></tr>
|
||
<tr><td><code>qwen2.5-coder:14b</code></td><td>14B</td><td>Code specialist</td><td>~5s</td><td style="color:var(--orange)">📦 ex-GPU</td></tr>
|
||
<tr><td><code>llama3.1:8b</code></td><td>8B</td><td>Fast general</td><td>~300ms</td><td style="color:var(--orange)">📦 ex-GPU</td></tr>
|
||
</table>
|
||
</div>
|
||
|
||
<div class="subsection">RANG 2 — Cloud Gratuit (Fallback)</div>
|
||
<div class="table-wrap">
|
||
<table>
|
||
<tr><th>Provider</th><th>Modèle</th><th>Latence</th><th>Limite</th><th>Status</th></tr>
|
||
<tr><td><strong>Groq</strong></td><td>llama-3.3-70b-versatile</td><td>192ms</td><td>Clé vault</td><td style="color:var(--green)">✅ LIVE</td></tr>
|
||
<tr><td><strong>Cerebras</strong></td><td>qwen-3-235b-a22b</td><td>429ms</td><td>2M tokens/day (2 clés)</td><td style="color:var(--green)">✅ LIVE</td></tr>
|
||
<tr><td><strong>SambaNova</strong></td><td>Meta-Llama-3.3-70B</td><td>800ms</td><td>Clé vault</td><td style="color:var(--orange)">📦 Vault</td></tr>
|
||
<tr><td><strong>NVIDIA</strong></td><td>GLM-5</td><td>~1s</td><td>nvapi key</td><td style="color:var(--orange)">📦 Vault</td></tr>
|
||
<tr><td><strong>Gemini</strong></td><td>—</td><td>—</td><td>Quota 429</td><td style="color:var(--red)">❌ DOWN</td></tr>
|
||
<tr><td><strong>OpenRouter</strong></td><td>qwen3.6-plus:free</td><td>~2s</td><td>Free tier</td><td style="color:var(--orange)">📦 Vault</td></tr>
|
||
<tr><td><strong>Cloudflare</strong></td><td>Workers AI</td><td>~1s</td><td>Account active</td><td style="color:var(--orange)">📦 Vault</td></tr>
|
||
</table>
|
||
</div>
|
||
|
||
<div class="subsection">Cascade Failover</div>
|
||
<div class="note">
|
||
<code>Ollama Local → Groq → Cerebras → SambaNova → NVIDIA → Gemini → OpenRouter → Cloudflare</code><br>
|
||
Rotation automatique: si provider KO (timeout/429/402), passe au suivant. hamid_providers table: 12 providers configurés avec failover auto.
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- ═══════════ LAYER 4: KNOWLEDGE BASE ═══════════ -->
|
||
<div class="layer">
|
||
<div class="layer-head">
|
||
<div class="num" style="background:var(--green);color:#000">4</div>
|
||
<h2>Knowledge Base — 32 tables, 4,500+ entrées</h2>
|
||
<div class="ct" style="background:rgba(105,240,174,0.15);color:var(--green)">INTERNAL ONLY</div>
|
||
</div>
|
||
<div class="layer-body">
|
||
|
||
<div class="subsection">Tables KB principales (PostgreSQL)</div>
|
||
<div class="table-wrap">
|
||
<table>
|
||
<tr><th>Table</th><th>Entrées</th><th>Contenu</th><th>Injection</th></tr>
|
||
<tr><td><code>knowledge_base</code></td><td>~3,700</td><td>KB générale — SAP, Cloud, IA, Pharma, Consulting, Data, Code, Énergie, Finance...</td><td>53 entrées session fév + batches 9-40</td></tr>
|
||
<tr><td><code>hamid_knowledge</code></td><td>~120</td><td>Knowledge HAMID spécialisée — 14 catégories approfondies</td><td>Injection directe</td></tr>
|
||
<tr><td><code>brain_knowledge</code></td><td>~123</td><td>Nexus brain: techniques raisonnement, frameworks consulting, innovations IA scrapées</td><td>54 + cron auto-enrichment</td></tr>
|
||
<tr><td><code>chatbot_knowledge</code></td><td>~4,000</td><td>Q&A pairs pour chatbot — questions/réponses pré-formatées avec tags</td><td>25+ par batch</td></tr>
|
||
<tr><td><code>commonia_knowledge</code></td><td>—</td><td>Knowledge commune cross-agents</td><td>Auto</td></tr>
|
||
<tr><td><code>kb_documents</code></td><td>—</td><td>Documents indexés (PDF, DOCX analysés)</td><td>Upload</td></tr>
|
||
<tr><td><code>kb_learnings</code></td><td>—</td><td>Faits appris automatiquement des conversations</td><td>Auto-learn</td></tr>
|
||
<tr><td><code>chatbot_conversations</code></td><td>—</td><td>Historique conversations pour mémoire contextuelle</td><td>Auto</td></tr>
|
||
<tr><td><code>chatbot_pending_knowledge</code></td><td>—</td><td>Faits en attente de validation</td><td>Auto</td></tr>
|
||
<tr><td><code>admin.weval_mind_learning</code></td><td>—</td><td>Apprentissage WEVAL Mind</td><td>Auto-learn</td></tr>
|
||
</table>
|
||
</div>
|
||
|
||
<div class="subsection">Catégories KB injectées (40+ batches)</div>
|
||
<div class="grid">
|
||
<div class="card">
|
||
<div class="nm"><span class="ico">🏭</span> SAP / ERP</div>
|
||
<div class="desc">S/4HANA architecture, MM, SD, FI, CO, PP, QM, WM. Fiori UX. Migration brownfield/greenfield/bluefield. BTP, ABAP, EWM, RE.</div>
|
||
</div>
|
||
<div class="card">
|
||
<div class="nm"><span class="ico">💊</span> Pharma / Santé</div>
|
||
<div class="desc">Drug development pipeline, GMP, pharmacovigilance, SOTHEMA, ANRP, DMP, HealthTech, IQVIA, télémédecine. Ethica HCP data.</div>
|
||
</div>
|
||
<div class="card">
|
||
<div class="nm"><span class="ico">🤖</span> IA / ML / LLM</div>
|
||
<div class="desc">Chain-of-Thought, Tree of Thoughts, RAG avancé, Graph RAG, RLHF, vision transformers, LLM landscape 2026, déploiement GPU, quantification.</div>
|
||
</div>
|
||
<div class="card">
|
||
<div class="nm"><span class="ico">☁️</span> Cloud / Infrastructure</div>
|
||
<div class="desc">Huawei Cloud (ECS, VPC, ELB, OBS), AWS, Azure, Scaleway. Architecture type WEVAL. Kubernetes, Docker, serverless.</div>
|
||
</div>
|
||
<div class="card">
|
||
<div class="nm"><span class="ico">🔐</span> Cybersécurité</div>
|
||
<div class="desc">OWASP Top 10, Zero Trust, SOC, SIEM, pen testing, WAF, fail2ban. Conformité RGPD, CNDP, INPDP.</div>
|
||
</div>
|
||
<div class="card">
|
||
<div class="nm"><span class="ico">📧</span> Email Marketing</div>
|
||
<div class="desc">WEVADS pipeline E2E, Brain Engine configs, warmup strategy, ISP routing, PMTA, deliverability, SPF/DKIM/DMARC, reputation monitoring.</div>
|
||
</div>
|
||
<div class="card">
|
||
<div class="nm"><span class="ico">📊</span> Consulting / Strategy</div>
|
||
<div class="desc">McKinsey 7S, BCG Matrix, Porter, SWOT, Lean Six Sigma, DMAIC, 8D, RACI, Value Stream Mapping, OKR, Balanced Scorecard.</div>
|
||
</div>
|
||
<div class="card">
|
||
<div class="nm"><span class="ico">🌍</span> Géopolitique / Maroc</div>
|
||
<div class="desc">Stratégie économique Maroc, ZLECAf, finance islamique, Sahara, Plan Maroc Digital 2030, CFC Casablanca.</div>
|
||
</div>
|
||
</div>
|
||
<div class="note">Autres catégories injectées: Supply Chain, Aéro/Défense, Automobile, Finance/Banking, Data Science, Énergie, Telecom, Retail, Biotech, Espace, Psycho, Communication, Sciences, Philosophie, Maths, Art, Droit, RH, PM, Éducation, Industrie 4.0.</div>
|
||
|
||
<div class="subsection">Cron Auto-Enrichissement</div>
|
||
<div class="card" style="max-width:600px">
|
||
<div class="nm"><span class="ico">🔄</span> kb-auto-enrichment.php</div>
|
||
<div class="file">Cron */6h · Interroge LLM pour générer nouvelles entrées KB</div>
|
||
<div class="desc">Identifie catégories faibles (< 5 entrées) ou stale (> 7 jours). Utilise Groq/Cerebras/Ollama pour générer du contenu expert. Injecte dans knowledge_base + chatbot_knowledge automatiquement.</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- ═══════════ LAYER 5: RAG / VECTOR STORES ═══════════ -->
|
||
<div class="layer">
|
||
<div class="layer-head">
|
||
<div class="num" style="background:var(--orange);color:#000">5</div>
|
||
<h2>RAG & Vector Stores — Qdrant 15,953 vectors</h2>
|
||
<div class="ct" style="background:rgba(255,171,64,0.15);color:var(--orange)">4 COLLECTIONS</div>
|
||
</div>
|
||
<div class="layer-body">
|
||
<div class="grid">
|
||
<div class="card"><div class="status st-live"></div>
|
||
<div class="nm"><span class="ico">📚</span> wevia_kb</div>
|
||
<div class="desc">Collection principale — Knowledge base vectorisée. Embedding via nomic-embed-text (Ollama local). Recherche sémantique pour le contexte LLM.</div>
|
||
</div>
|
||
<div class="card"><div class="status st-live"></div>
|
||
<div class="nm"><span class="ico">📖</span> wevia_learnings</div>
|
||
<div class="desc">Apprentissage automatique — Faits extraits des conversations, validés et vectorisés pour enrichissement continu.</div>
|
||
</div>
|
||
<div class="card"><div class="status st-live"></div>
|
||
<div class="nm"><span class="ico">🛠️</span> weval_skills</div>
|
||
<div class="desc">Catalogue de compétences WEVAL — Skills consulting, techniques, méthodologies indexées pour matching contextuel.</div>
|
||
</div>
|
||
<div class="card"><div class="status st-live"></div>
|
||
<div class="nm"><span class="ico">🧠</span> wevia_memory</div>
|
||
<div class="desc">Mémoire conversationnelle — Historique vectorisé des échanges pour rappel contextuel long-terme.</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="subsection">Architecture RAG</div>
|
||
<div class="note">
|
||
<code>Query → Embedding (nomic-embed) → Qdrant Vector Search → Top-K Context → System Prompt Injection → LLM → Response</code><br><br>
|
||
<strong>Techniques RAG implémentées :</strong> Hybrid search (dense + BM25 sparse via PostgreSQL full-text), KB filter pricing actif, chunking sémantique, reranking par confidence score.
|
||
<br><br>
|
||
<strong>Graph RAG :</strong> <code>wevia-graph-rag.php</code> — 4 couches d'entités avec relations. Knowledge graph + RAG combinés (Microsoft GraphRAG pattern).
|
||
<br><br>
|
||
<strong>Contextual Retrieval :</strong> Ajout de contexte aux chunks avant embedding (pattern Anthropic). wevia_kb contient le contexte enrichi.
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- ═══════════ LAYER 6: TOOLS & CAPABILITIES ═══════════ -->
|
||
<div class="layer">
|
||
<div class="layer-head">
|
||
<div class="num" style="background:var(--pink);color:#000">6</div>
|
||
<h2>Tools & Capabilities — 15 outils exécutables</h2>
|
||
<div class="ct" style="background:rgba(255,128,171,0.15);color:var(--pink)">TOOL USE</div>
|
||
</div>
|
||
<div class="layer-body">
|
||
<div class="grid">
|
||
<div class="card"><div class="nm"><span class="ico">💻</span> Code Execution</div>
|
||
<div class="file">wevia-code-exec.php · 4 langages · sandbox</div>
|
||
<div class="desc">Exécute Python, PHP, JS, Bash dans un sandbox. Débogueur auto-fix 3 tentatives (wevia-debugger.php).</div></div>
|
||
|
||
<div class="card"><div class="nm"><span class="ico">📐</span> Math Solver</div>
|
||
<div class="file">wevia-math-solver.php · 8 actions</div>
|
||
<div class="desc">SymPy + numpy + scipy + pandas. Résolution symbolique, calcul DPMO, statistiques.</div></div>
|
||
|
||
<div class="card"><div class="nm"><span class="ico">🖼️</span> Image Generation</div>
|
||
<div class="file">wevia-image.php · Pollinations FLUX / sd-turbo GPU</div>
|
||
<div class="desc">Pollinations.ai FLUX inline (185ms) + fallback sd-turbo sur GPU RTX 4000 (0.25s). SVG artistique si tout down.</div></div>
|
||
|
||
<div class="card"><div class="nm"><span class="ico">📊</span> Mermaid Diagrams</div>
|
||
<div class="file">mmdc local + Groq 70b</div>
|
||
<div class="desc">Flowchart, séquence, classe, ERD, Gantt, BPMN, Ishikawa. Rendu PNG via Puppeteer (--no-sandbox).</div></div>
|
||
|
||
<div class="card"><div class="nm"><span class="ico">📄</span> PDF Generation</div>
|
||
<div class="file">wevia-generate-pdf.php · ReportLab + FPDF</div>
|
||
<div class="desc">PDF professionnels avec charts Matplotlib, KPIs, sommaire. Templates: rapport exécutif, audit, propale.</div></div>
|
||
|
||
<div class="card"><div class="nm"><span class="ico">📽️</span> PowerPoint</div>
|
||
<div class="file">Pipeline capability routing</div>
|
||
<div class="desc">Génération PPTX via pipeline original. Détecté par wevia-turbo capability router.</div></div>
|
||
|
||
<div class="card"><div class="nm"><span class="ico">👁️</span> Vision / OCR</div>
|
||
<div class="file">Moondream local + Tesseract</div>
|
||
<div class="desc">Analyse d'images, extraction texte. Moondream 1.8B tournait sur GPU local.</div></div>
|
||
|
||
<div class="card"><div class="nm"><span class="ico">🔊</span> TTS Voice</div>
|
||
<div class="file">Web Speech API · 9 langues</div>
|
||
<div class="desc">Text-to-Speech côté client. Bouton 🔊 replay sur chaque réponse. FR, EN, ES, AR, DE, IT, PT, ZH, JA.</div></div>
|
||
|
||
<div class="card"><div class="nm"><span class="ico">🌐</span> Web Search</div>
|
||
<div class="file">SearXNG intégré</div>
|
||
<div class="desc">Recherche web privée via SearXNG self-hosted. Résultats injectés dans le contexte LLM.</div></div>
|
||
|
||
<div class="card"><div class="nm"><span class="ico">🔌</span> SSH Execution</div>
|
||
<div class="file">wevia-exec.php · wevia-autonomous.php</div>
|
||
<div class="desc">Exécution de commandes SSH distantes. 12 intents action: restart, cleanup, git, start, ssl, ethica.</div></div>
|
||
|
||
<div class="card"><div class="nm"><span class="ico">📋</span> Planner</div>
|
||
<div class="file">wevia-planner.php</div>
|
||
<div class="desc">Planification multi-étapes: décomposition tâches, dépendances, allocation agents, timeline.</div></div>
|
||
|
||
<div class="card"><div class="nm"><span class="ico">🧮</span> KaTeX Math</div>
|
||
<div class="file">Injecté dans 3 frontends</div>
|
||
<div class="desc">Rendu LaTeX des formules mathématiques inline dans les réponses chatbot.</div></div>
|
||
|
||
<div class="card"><div class="nm"><span class="ico">📎</span> File Upload</div>
|
||
<div class="file">Drag & drop multi-format</div>
|
||
<div class="desc">PDF, images, code, CSV, XLSX. Analyse multi-modale. Extraction texte + résumé IA.</div></div>
|
||
|
||
<div class="card"><div class="nm"><span class="ico">🎨</span> Canvas/Artifacts</div>
|
||
<div class="file">Iframes sandboxés</div>
|
||
<div class="desc">HTML/CSS/JS interactifs rendus côté client. Mode side-by-side editing.</div></div>
|
||
|
||
<div class="card"><div class="nm"><span class="ico">🔍</span> Semantic Search</div>
|
||
<div class="file">PostgreSQL full-text + Qdrant</div>
|
||
<div class="desc">Hybrid search: to_tsvector/to_tsquery PostgreSQL (BM25) + Qdrant dense vectors. Reranking par confidence.</div></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- ═══════════ LAYER 7: PROMPTS & TECHNIQUES ═══════════ -->
|
||
<div class="layer">
|
||
<div class="layer-head">
|
||
<div class="num" style="background:var(--blue);color:#fff">7</div>
|
||
<h2>Prompts & Techniques de Raisonnement</h2>
|
||
<div class="ct" style="background:rgba(68,138,255,0.15);color:var(--blue)">SOVEREIGN PROMPT</div>
|
||
</div>
|
||
<div class="layer-body">
|
||
|
||
<div class="subsection">System Prompt Dynamique (getNucleusPrompt)</div>
|
||
<div class="card" style="max-width:100%">
|
||
<div class="desc">Le system prompt est <strong>construit dynamiquement</strong> à chaque requête selon l'intent détecté. Il charge les modules pertinents de Brain Nucleus v3 et injecte les données temps réel depuis brain_knowledge (catégorie 'nexus').</div>
|
||
<div class="funcs">Structure: IDENTITÉ WEVIA → TECHNIQUES RAISONNEMENT (auto-loaded) → FRAMEWORKS CONSULTING (auto-loaded) → CAPACITÉS META (auto-loaded) → INNOVATIONS IA SCRAPÉES (auto-updated) → ÉTAT TEMPS RÉEL (KB count, providers actifs) → RÈGLES (langue, complexité adaptative, expertise)</div>
|
||
</div>
|
||
|
||
<div class="subsection">Techniques de Raisonnement Injectées</div>
|
||
<div class="grid">
|
||
<div class="card">
|
||
<div class="nm"><span class="ico">🔗</span> Chain-of-Thought (CoT)</div>
|
||
<div class="desc">Zero-shot: "Réfléchissons étape par étape". Few-shot: exemples avec raisonnement complet. Self-consistency: échantillonner plusieurs chemins, voter majorité.</div></div>
|
||
|
||
<div class="card">
|
||
<div class="nm"><span class="ico">🌳</span> Tree of Thoughts</div>
|
||
<div class="desc">Explorer des chemins de raisonnement arborescents avec backtracking. Pour problèmes complexes multi-étapes.</div></div>
|
||
|
||
<div class="card">
|
||
<div class="nm"><span class="ico">🔄</span> Chain of Verification</div>
|
||
<div class="desc">Vérifier chaque affirmation contre les sources. Auto-critique systématique. Confidence scoring.</div></div>
|
||
|
||
<div class="card">
|
||
<div class="nm"><span class="ico">🧬</span> Constitutional AI</div>
|
||
<div class="desc">Principes éthiques intégrés. Self-correction si réponse potentiellement nocive ou biaisée.</div></div>
|
||
|
||
<div class="card">
|
||
<div class="nm"><span class="ico">🎭</span> Dialectical Reasoning</div>
|
||
<div class="desc">Thèse → Antithèse → Synthèse. Explorer les deux côtés d'un argument. Opus46 cognitive layer.</div></div>
|
||
|
||
<div class="card">
|
||
<div class="nm"><span class="ico">🔀</span> Counterfactual Thinking</div>
|
||
<div class="desc">"Et si on faisait l'inverse?" Tester des hypothèses alternatives pour valider la conclusion.</div></div>
|
||
|
||
<div class="card">
|
||
<div class="nm"><span class="ico">📊</span> Causal Reasoning</div>
|
||
<div class="desc">Identifier les relations cause-effet. Distinguer corrélation et causalité. Analyse root cause.</div></div>
|
||
|
||
<div class="card">
|
||
<div class="nm"><span class="ico">🧠</span> Meta-Cognition</div>
|
||
<div class="desc">"Suis-je en train de bien raisonner?" Auto-évaluation de la qualité du raisonnement. Meta-confidence scoring.</div></div>
|
||
</div>
|
||
|
||
<div class="subsection">Frameworks Consulting (auto-injectés selon domaine)</div>
|
||
<div class="note">
|
||
McKinsey 7S · BCG Growth-Share Matrix · Porter 5 Forces · SWOT/PESTEL · Lean Six Sigma DMAIC · 8D Problem Solving · RACI Matrix · Value Stream Mapping · OKR · Balanced Scorecard · Design Thinking · Agile/Scrum · TOGAF · ITIL
|
||
</div>
|
||
|
||
<div class="subsection">Sanitization & Guard</div>
|
||
<div class="grid">
|
||
<div class="card">
|
||
<div class="nm"><span class="ico">🛡️</span> Hallucination Guard</div>
|
||
<div class="desc">Détection nombres hallucinés, contradictions logiques, réponses tronquées, mismatch de langue. Pipeline self-correction Opus46 Advanced.</div></div>
|
||
|
||
<div class="card">
|
||
<div class="nm"><span class="ico">🧹</span> Final Sanitizer</div>
|
||
<div class="file">final-sanitizer.php</div>
|
||
<div class="desc">Strips ALL emojis (Unicode ranges), headers "Analyse", 12 patterns de prompt leak. Nettoie les métadonnées internes avant envoi au client.</div></div>
|
||
|
||
<div class="card">
|
||
<div class="nm"><span class="ico">🔒</span> Business Rules Guard</div>
|
||
<div class="desc">applyBusinessRules() — métadonnées internes déplacées en JSON rules_warning (invisible client). JAMAIS exposer GPU/modèle/temps.</div></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- ═══════════ LAYER 8: WEVAL MIND CYCLE ═══════════ -->
|
||
<div class="layer">
|
||
<div class="layer-head">
|
||
<div class="num" style="background:var(--red);color:#fff">8</div>
|
||
<h2>WEVAL Mind — Cycle Autonome Perception → Action → Learn</h2>
|
||
<div class="ct" style="background:rgba(255,82,82,0.15);color:var(--red)">CRON */5-15MIN</div>
|
||
</div>
|
||
<div class="layer-body">
|
||
|
||
<div class="card" style="max-width:100%">
|
||
<div class="desc" style="font-size:0.9em;color:var(--tx)">
|
||
<strong>Cycle WEVAL Mind (cron-mind-cycle.php) :</strong><br><br>
|
||
<code>PERCEPTION</code> → Collecte CPU/RAM/Disk, emails sent/bounced, O365 status, Brain configs, providers health<br>
|
||
<code>DIAGNOSTIC</code> → Applique règles seuils + cas complexes → HAMID IA (cascade providers)<br>
|
||
<code>PLANNING</code> → CRITICAL=action immédiate, WARNING=planifié. Vérifie si action similaire a marché (mind_learnings)<br>
|
||
<code>EXECUTION</code> → Auto-actions exécutées, actions sensibles en queue pour approbation<br>
|
||
<code>LEARNING</code> → Compare avant/après, score efficacité, stocke leçon dans KB<br>
|
||
<code>MONITORING</code> → Dashboard temps réel (mind_cycles), heatmap incidents, KPIs<br>
|
||
<code>ALERTES</code> → CRITICAL=Telegram immédiat, WARNING=Dashboard, Rapport=Email digest 8h00
|
||
</div>
|
||
</div>
|
||
|
||
<div class="subsection">Scripts Autonomes (21 scripts)</div>
|
||
<div class="table-wrap">
|
||
<table>
|
||
<tr><th>Script</th><th>Fréquence</th><th>Rôle</th></tr>
|
||
<tr><td><code>auto-fix.sh</code></td><td>Manuel / Director</td><td>SSO + Docker + Disk + Nginx + PHP-FPM auto-repair</td></tr>
|
||
<tr><td><code>mega-scan.sh</code></td><td>Manuel</td><td>Audit 4 machines complet</td></tr>
|
||
<tr><td><code>l99-exhaustive.sh</code></td><td>Manuel / Cron</td><td>60 tests sur 10 couches</td></tr>
|
||
<tr><td><code>l99-e2e-test.py</code></td><td>Manuel</td><td>Playwright 18 pages + screenshots + vidéo</td></tr>
|
||
<tr><td><code>sso-guardian.sh</code></td><td>*/5min</td><td>Check auth + auto-flush cookies</td></tr>
|
||
<tr><td><code>registry-test.sh</code></td><td>Manuel</td><td>169/169 pages check</td></tr>
|
||
<tr><td><code>nonreg-check.sh</code></td><td>Daily</td><td>153/153 tests anti-régression</td></tr>
|
||
<tr><td><code>infra-check.sh</code></td><td>Director</td><td>Providers IA + services status</td></tr>
|
||
<tr><td><code>sso-check.sh</code></td><td>Director</td><td>Auth check détaillé</td></tr>
|
||
<tr><td><code>html-guardian.sh</code></td><td>*/10min</td><td>5 checks: taille, troncature, critical tags, PHP, MD5</td></tr>
|
||
<tr><td><code>sentinel-autorepair.sh</code></td><td>*/30min</td><td>PHP syntax + chaîne HTML Guardian</td></tr>
|
||
<tr><td><code>deploy-validator.sh</code></td><td>Pre-deploy</td><td>Bloque troncature, JS cassé, régression taille</td></tr>
|
||
<tr><td><code>live-stats.js</code></td><td>Continu</td><td>Métriques temps réel injectées sur 11 pages</td></tr>
|
||
<tr><td><code>kb-auto-enrichment.php</code></td><td>*/6h</td><td>Auto-génère KB via LLM pour catégories faibles</td></tr>
|
||
<tr><td><code>wevia-self-monitor.sh</code></td><td>*/5min</td><td>Auto-détecte et fixe problèmes courants</td></tr>
|
||
</table>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- ═══════════ LAYER 9: NOMENCLATURE ═══════════ -->
|
||
<div class="layer">
|
||
<div class="layer-head">
|
||
<div class="num" style="background:var(--cyan);color:#000">9</div>
|
||
<h2>Nomenclature — Mapping HAMID → WEVAL</h2>
|
||
<div class="ct" style="background:rgba(0,229,255,0.15);color:var(--cyan)">REBRANDING</div>
|
||
</div>
|
||
<div class="layer-body">
|
||
<div class="table-wrap">
|
||
<table>
|
||
<tr><th>Ancien nom</th><th>Nouveau nom</th><th>Contexte</th></tr>
|
||
<tr><td><code>WEVADS</code></td><td><strong>WEVAL</strong></td><td>Platform name</td></tr>
|
||
<tr><td><code>DELIVERADS</code></td><td><strong>WEVAL SEND</strong></td><td>Delivery system</td></tr>
|
||
<tr><td><code>HAMID IA</code></td><td><strong>WEVAL MIND</strong></td><td>AI assistant</td></tr>
|
||
<tr><td><code>HAMID</code></td><td><strong>WEVAL MIND</strong></td><td>AI references</td></tr>
|
||
<tr><td><code>Brain Engine</code></td><td><strong>WEVAL BRAIN</strong></td><td>Auto-learning (part of MIND)</td></tr>
|
||
<tr><td><code>adx_system</code></td><td><strong>weval_system</strong></td><td>Database name</td></tr>
|
||
<tr><td><code>adx_clients</code></td><td><strong>weval_clients</strong></td><td>Database name</td></tr>
|
||
<tr><td><code>/opt/wevads/</code></td><td><strong>/opt/weval/</strong></td><td>File paths</td></tr>
|
||
<tr><td><code>hamid-files</code></td><td><strong>weval-mind-files</strong></td><td>AI knowledge base</td></tr>
|
||
<tr><td><code>hamid_providers</code></td><td><strong>weval_providers</strong></td><td>DB table IA providers</td></tr>
|
||
<tr><td><code>hamid_knowledge</code></td><td><strong>weval_knowledge</strong></td><td>DB table knowledge</td></tr>
|
||
</table>
|
||
</div>
|
||
<div class="note">⚠️ Le rebranding est documenté mais <strong>PAS encore appliqué en production</strong>. Les fichiers et tables utilisent encore les anciens noms. Migration à planifier.</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
<div style="text-align:center;padding:30px 40px;color:var(--tx2);font-size:0.75em;border-top:1px solid var(--border)">
|
||
WEVAL Consulting — Registre Intelligence IA Souveraine v1 — Avril 2026<br>
|
||
6 Brain Engines · 11 Agents · 9 Providers · 111 Fonctions Cognitives · 32 Tables KB · 4,500+ Entrées · 15,953 Vectors · 15 Tools · 21 Scripts Autonomes<br>
|
||
Compilé depuis 6 mois de sessions Claude · Tout à wirer dans le Sovereign Brain
|
||
</div>
|
||
|
||
|
||
<!-- === 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 === -->
|
||
|
||
|
||
<!-- === OPUS HONEST NR/L99 OVERLAY v1 19avr - append-only doctrine #14 === -->
|
||
<script>
|
||
(function(){
|
||
if (window.__opusHonestOverlay) return; window.__opusHonestOverlay = true;
|
||
async function updateHonestValues(){
|
||
try {
|
||
const r = await fetch('/api/l99-honest.php', {cache:'no-store'});
|
||
const d = await r.json();
|
||
if (!d.ok) return;
|
||
const realNR = `${d.combined.pass}/${d.combined.total}`;
|
||
const realSigma = d.sigma;
|
||
// Find elements showing the myth values
|
||
const mythRegex = /(153\/153|304\/304|NR status 153\/153|L99 status 304\/304|NR 153\/153|L99 304\/304)/g;
|
||
// Walk text nodes
|
||
const walker = document.createTreeWalker(document.body, NodeFilter.SHOW_TEXT, null);
|
||
const toReplace = [];
|
||
let node;
|
||
while (node = walker.nextNode()) {
|
||
if (node.nodeValue && mythRegex.test(node.nodeValue)) toReplace.push(node);
|
||
}
|
||
toReplace.forEach(textNode => {
|
||
const parent = textNode.parentNode;
|
||
if (!parent || parent.hasAttribute('data-opus-honest-applied')) return;
|
||
const newText = textNode.nodeValue.replace(/153\/153/g, realNR).replace(/304\/304/g, realNR);
|
||
textNode.nodeValue = newText;
|
||
parent.setAttribute('data-opus-honest-applied', '1');
|
||
});
|
||
// Add a small badge bottom-right showing honest live status
|
||
if (!document.getElementById('opus-honest-badge')) {
|
||
const b = document.createElement('div');
|
||
b.id = 'opus-honest-badge';
|
||
b.style.cssText = 'position:fixed;bottom:12px;right:12px;background:linear-gradient(90deg,#14b8a6,#a855f7);color:#05060a;padding:6px 12px;font:10px/1.3 Inter,system-ui,sans-serif;font-weight:700;border-radius:8px;z-index:99993;box-shadow:0 4px 12px rgba(0,0,0,0.3);cursor:pointer;max-width:280px';
|
||
b.title = 'Cliquer pour détails';
|
||
b.innerHTML = `✓ NR ${realNR} · ${realSigma} live`;
|
||
b.onclick = () => {
|
||
alert(`HONEST NonReg (doctrine #4):\n\nmaster: ${d.master.pass}/${d.master.total}\nopus: ${d.opus.pass}/${d.opus.total}\ncombined: ${realNR}\nsigma: ${realSigma}\n\n${d.myth_153}\n${d.myth_304}`);
|
||
};
|
||
document.body.appendChild(b);
|
||
}
|
||
} catch(e){console.error('L99-honest fetch error:', e);}
|
||
}
|
||
if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', updateHonestValues);
|
||
else updateHonestValues();
|
||
setInterval(updateHonestValues, 90000);
|
||
})();
|
||
</script>
|
||
<!-- === OPUS HONEST END === -->
|
||
|
||
|
||
<script src="/api/a11y-auto-enhancer.js" defer></script>
|
||
<!-- WTP_UDOCK_V1 (Opus 21-avr t32b4) --><script src="/wtp-unified-dock.js" defer></script>
|
||
<script src="/opus-antioverlap-doctrine.js?v=1776776094" defer></script>
|
||
</body>
|
||
</html>
|