Files
html/tools-hub.html
opus d5edaa769c
Some checks failed
WEVAL NonReg / nonreg (push) Has been cancelled
auto-sync via WEVIA git_sync_all intent 2026-04-21T14:56:43+02:00
2026-04-21 14:56:43 +02:00

445 lines
44 KiB
HTML

<!DOCTYPE html><html lang="fr"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1">
<title>WEVAL Tools Hub — Écosystème Souverain</title>
<link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;600;800&family=Outfit:wght@300;400;600;700&display=swap" rel="stylesheet">
<style>
*{margin:0;padding:0;box-sizing:border-box}body{font-family:'Outfit',system-ui;background:#06080f;color:#c8d0e0;min-height:100vh}
.hd{background:linear-gradient(135deg,#0a1628,#111d35,#0a1628);border-bottom:1px solid #1a2744;padding:18px 20px;display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:10px}
.hd h1{font-size:1.3em;font-weight:800;background:linear-gradient(90deg,#38bdf8,#818cf8,#c084fc);-webkit-background-clip:text;-webkit-text-fill-color:transparent}
.ss{display:flex;gap:8px;flex-wrap:wrap}.s{background:#111827;border:1px solid #1e293b;border-radius:8px;padding:5px 10px;text-align:center}
.s .n{font-family:'JetBrains Mono';font-size:1.1em;font-weight:800;color:#38bdf8}.s .l{font-size:.6em;color:#64748b;text-transform:uppercase}
.fl{padding:8px 20px;display:flex;gap:5px;flex-wrap:wrap;border-bottom:1px solid #111827;align-items:center}
.fl button{background:#111827;color:#94a3b8;border:1px solid #1e293b;border-radius:6px;padding:3px 9px;cursor:pointer;font-size:.7em;transition:.2s}
.fl button:hover,.fl button.a{background:#1e40af;color:#fff;border-color:#3b82f6}
.fl input{background:#0f172a;border:1px solid #1e293b;border-radius:6px;padding:4px 9px;color:#e2e8f0;font-size:.75em;width:180px;margin-left:auto}
.fl .ct{font-size:.7em;color:#475569;margin-left:6px}
.g{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:8px;padding:12px 20px}
.ch{grid-column:1/-1;padding:6px 0 2px;border-bottom:1px solid #1e293b;margin-top:4px}.ch h2{font-size:.95em;font-weight:700;color:#818cf8}
.c{background:#0f172a;border:1px solid #1e293b;border-radius:8px;padding:10px;transition:.2s}
.c:hover{border-color:#3b82f6;box-shadow:0 4px 16px rgba(59,130,246,.1)}
.c .tp{display:flex;justify-content:space-between;align-items:start;margin-bottom:3px}
.c .nm{font-weight:700;font-size:.85em;color:#f1f5f9}.c .sr{font-family:'JetBrains Mono';font-size:.65em;color:#fbbf24}
.c .ds{font-size:.7em;color:#64748b;line-height:1.3;margin-bottom:5px}
.c .tg{display:flex;gap:2px;flex-wrap:wrap;margin-bottom:5px}
.t{font-size:.55em;padding:1px 5px;border-radius:3px;font-weight:700}
.t.i{background:#064e3b;color:#34d399}.t.w{background:#1e3a5f;color:#38bdf8}.t.p{background:#713f12;color:#fbbf24}
.t.n{background:#4c1d95;color:#c084fc}.t.cl{background:#164e63;color:#67e8f9}.t.os{background:#1c1917;color:#a8a29e}
.t.fr{background:#14532d;color:#4ade80}.t.gpu{background:#7f1d1d;color:#fca5a5}
.c .ac{display:flex;gap:3px;flex-wrap:wrap}
.b{font-size:.63em;padding:3px 7px;border-radius:4px;border:none;cursor:pointer;font-weight:600;text-decoration:none;display:inline-flex;align-items:center;gap:2px;transition:.2s}
.b.o{background:#1e293b;color:#94a3b8}.b.o:hover{background:#334155;color:#fff}
.b.go{background:#059669;color:#fff}.b.go:hover{background:#10b981}
.b.lv{background:#1d4ed8;color:#fff}.b.lv:hover{background:#2563eb}
.b.bn{background:#7c3aed;color:#fff}
@media(max-width:768px){.g{grid-template-columns:1fr;padding:8px}}
</style></head><body>
<!-- MEGA-NAV -->
<div style="background:rgba(99,102,241,.04);border-bottom:1px solid rgba(99,102,241,.1);padding:8px 40px;display:flex;gap:8px;flex-wrap:wrap;align-items:center">
<span style="color:#64748b;font-size:11px;font-weight:600;letter-spacing:1px">HUBS</span>
<a href="/wevia-hub.html" style="color:#10b981;text-decoration:none;font-size:12px;padding:3px 10px;border:1px solid rgba(16,185,129,.2);border-radius:12px">🧠 WEVIA</a>
<a href="/ai-hub.html" style="color:#818cf8;text-decoration:none;font-size:12px;padding:3px 10px;border:1px solid rgba(99,102,241,.2);border-radius:12px">🤖 AI</a>
<a href="/agents-hub.html" style="color:#818cf8;text-decoration:none;font-size:12px;padding:3px 10px;border:1px solid rgba(99,102,241,.2);border-radius:12px">👥 Agents</a>
<a href="/monitoring-hub.html" style="color:#818cf8;text-decoration:none;font-size:12px;padding:3px 10px;border:1px solid rgba(99,102,241,.2);border-radius:12px">📊 Monitor</a>
<a href="/email-hub.html" style="color:#818cf8;text-decoration:none;font-size:12px;padding:3px 10px;border:1px solid rgba(99,102,241,.2);border-radius:12px">📧 Email</a>
<a href="/office-hub.html" style="color:#818cf8;text-decoration:none;font-size:12px;padding:3px 10px;border:1px solid rgba(99,102,241,.2);border-radius:12px">📊 Office</a>
<a href="/ethica-hub.html" style="color:#818cf8;text-decoration:none;font-size:12px;padding:3px 10px;border:1px solid rgba(99,102,241,.2);border-radius:12px">👨‍⚕️ Ethica</a>
<a href="/wevads-hub.html" style="color:#818cf8;text-decoration:none;font-size:12px;padding:3px 10px;border:1px solid rgba(99,102,241,.2);border-radius:12px">📧 WEVADS</a>
<a href="/blade-hub.html" style="color:#818cf8;text-decoration:none;font-size:12px;padding:3px 10px;border:1px solid rgba(99,102,241,.2);border-radius:12px">⚡ Blade</a>
<a href="/security-hub.html" style="color:#818cf8;text-decoration:none;font-size:12px;padding:3px 10px;border:1px solid rgba(99,102,241,.2);border-radius:12px">🛡️ Sécu</a>
<a href="/gpu-hub.html" style="color:#818cf8;text-decoration:none;font-size:12px;padding:3px 10px;border:1px solid rgba(99,102,241,.2);border-radius:12px">⚡ GPU</a>
<a href="/keys-hub.html" style="color:#818cf8;text-decoration:none;font-size:12px;padding:3px 10px;border:1px solid rgba(99,102,241,.2);border-radius:12px">🔐 Keys</a>
<a href="/cloudflare-hub.html" style="color:#818cf8;text-decoration:none;font-size:12px;padding:3px 10px;border:1px solid rgba(99,102,241,.2);border-radius:12px">☁️ CF</a>
<a href="/google-hub.html" style="color:#818cf8;text-decoration:none;font-size:12px;padding:3px 10px;border:1px solid rgba(99,102,241,.2);border-radius:12px">🔍 Google</a>
<a href="/namecheap-hub.html" style="color:#818cf8;text-decoration:none;font-size:12px;padding:3px 10px;border:1px solid rgba(99,102,241,.2);border-radius:12px">🌐 NC</a>
<a href="/tools-hub.html" style="color:#f59e0b;text-decoration:none;font-size:12px;padding:3px 10px;border:1px solid rgba(245,158,11,.2);border-radius:12px;font-weight:700">⭐ ALL</a>
</div>
<div class="hd"><div><h1>🛠️ WEVAL Tools Hub</h1><div style="font-size:.7em;color:#475569">Écosystème Souverain — 1 Avril 2026</div></div>
<div class="ss"><div class="s"><div class="n" id="sT">0</div><div class="l">Total</div></div><div class="s"><div class="n" id="sI">0</div><div class="l">Intégrés</div></div><div class="s"><div class="n" id="sW">0</div><div class="l">Wirés</div></div><div class="s"><div class="n" id="sC">0</div><div class="l">Clonés</div></div><div class="s"><div class="n">5341</div><div class="l">Skills</div></div><div class="s"><div class="n" id="sF">0</div><div class="l">Free</div></div></div></div>
<div class="fl"><button class="a" onclick="F('all')">Tous</button><button onclick="F('i')">✅Intégrés</button><button onclick="F('w')">🔌Wirés</button><button onclick="F('cl')">📦Clonés</button><button onclick="F('os')">🔓OSS</button><button onclick="F('fr')">🆓Free</button><button onclick="F('gpu')">🎮GPU</button><button onclick="F('n')">🆕New</button><button onclick="F('p')">⏳Pending</button><span class="ct" id="ct"></span><input type="text" placeholder="🔍 Rechercher..." oninput="S(this.value)"></div>
<div class="g" id="G"></div>
<script>
const D=[
// ═══════════════════════════════════════
// 🧠 PROVIDERS IA — TOUS INTÉGRÉS
// ═══════════════════════════════════════
{cat:"🧠 Providers IA — Fast Path"},
{nm:"Groq",ds:"Provider #1 DEFAULT — llama-3.3-70b, <100ms",tg:["i","fr"],lk:[{t:"Console",u:"https://console.groq.com",c:"lv"}]},
{nm:"Cerebras",ds:"Provider #2 — qwen-3-235b, ultra-rapide",tg:["i","fr"],lk:[{t:"Console",u:"https://cloud.cerebras.ai",c:"lv"}]},
{nm:"Mistral",ds:"Provider #3 — modèles européens souverains",tg:["i","fr"],lk:[{t:"Console",u:"https://console.mistral.ai",c:"lv"}]},
{nm:"SambaNova",ds:"Provider #4 — DeepSeek-V3.1",tg:["i","fr"],lk:[{t:"Console",u:"https://sambanova.ai",c:"lv"}]},
{nm:"Alibaba Qwen",ds:"Provider #5 — consensus parallèle Manager v5",tg:["i","fr"],lk:[{t:"API",u:"https://dashscope.aliyun.com",c:"o"}]},
{nm:"Google Gemini",ds:"Provider #6 — Gemini 3.1 Flash Live (clé: à activer)",tg:["i","fr"],lk:[{t:"AI Studio",u:"https://aistudio.google.com",c:"lv"}]},
{nm:"DeepSeek",ds:"Provider #7 — V3.1 reasoning model",tg:["i","fr","os"],lk:[{t:"API",u:"https://platform.deepseek.com",c:"o"}]},
{nm:"NVIDIA GLM-5",ds:"Blade Brain provider — nvapi GPU cloud",tg:["i"],lk:[{t:"API",u:"https://build.nvidia.com",c:"o"}]},
{cat:"🤖 Claude (Anthropic) — Modèles"},
{nm:"Claude Opus 4.6",ds:"Modèle le plus avancé — orchestrateur WEVAL, analyse, architecture, décisions",tg:["i"],lk:[{t:"API",u:"https://console.anthropic.com",c:"lv"},{t:"Docs",u:"https://docs.anthropic.com",c:"o"}]},
{nm:"Claude Sonnet 4.6",ds:"Modèle rapide — coding, exécution, WEVIA Anthropic proxy",tg:["i"],lk:[{t:"API",u:"https://console.anthropic.com",c:"lv"}]},
{nm:"Claude Haiku 4.5",ds:"Modèle léger — classification rapide, triage",tg:["i"],lk:[{t:"API",u:"https://console.anthropic.com",c:"lv"}]},
{nm:"Claude Code CLI",ds:"CLI agent installé v2.1.89 — Paperclip CEO agent",tg:["i","os"],lk:[{t:"npm",u:"https://www.npmjs.com/package/@anthropic-ai/claude-code",c:"o"}]},
{nm:"Claude Code Source (Leak)",ds:"512K lignes exposées → instructkr/claude-code Python port",sr:"100K⭐",tg:["n","i","os"],lk:[{t:"OSS",u:"https://github.com/instructkr/claude-code",c:"o"},{t:"✅/opt/",u:"#",c:"go"}]},
{nm:"Claw Code (Rust)",ds:"Port Rust du harness Claude Code — instructkr/claw-code",sr:"100K⭐",tg:["n","i","os"],lk:[{t:"OSS",u:"https://github.com/instructkr/claw-code",c:"o"},{t:"✅/opt/",u:"#",c:"go"}]},
{cat:"🧠 Ollama — Modèles Locaux S204"},
{nm:"Ollama Engine",ds:"9 modèles CPU local sur port 11434",tg:["i","os"],lk:[{t:"Live",u:"/api/ollama-proxy.php",c:"lv"},{t:"OSS",u:"https://github.com/ollama/ollama",c:"o"}]},
{nm:"glm4:9b",ds:"GLM-4 9B — chat multilingue",tg:["i"]},
{nm:"medllama2 + meditron:7b",ds:"Modèles médicaux — Ethica Pharma HCP",tg:["i"]},
{nm:"qwen3:8b + qwen3:4b",ds:"Qwen 3 local — fast inference",tg:["i"]},
{nm:"granite4 + mistral",ds:"IBM Granite + Mistral local",tg:["i"]},
{nm:"all-minilm + weval-brain",ds:"Embeddings + brain fine-tuné WEVAL",tg:["i"]},
// ═══════════════════════════════════════
// 🤖 CLAUDE CODE SKILLS — CLONÉS
// ═══════════════════════════════════════
{cat:"🤖 Claude Code Skills & Plugins — CLONÉS"},
{nm:"oh-my-claudecode",ds:"Multi-agent 19 agents, 28 skills, Teams orchestration",sr:"20K⭐",tg:["i","n","i","os"],lk:[{t:"OSS",u:"https://github.com/Yeachan-Heo/oh-my-claudecode",c:"o"},{t:"✅/opt/",u:"#",c:"go"}]},
{nm:"SuperClaude Framework",ds:"30 commandes, personas cognitives, /sc:research",sr:"20K⭐",tg:["i","n","i","os"],lk:[{t:"OSS",u:"https://github.com/SuperClaude-Org/SuperClaude_Framework",c:"o"},{t:"✅/opt/",u:"#",c:"go"}]},
{nm:"everything-claude-code",ds:"AgentShield scanner — 420 skills, 1282 tests, red/blue team",tg:["i","n","i","os"],lk:[{t:"OSS",u:"https://github.com/affaan-m/everything-claude-code",c:"o"},{t:"✅/opt/",u:"#",c:"go"}]},
{nm:"antigravity-awesome-skills",ds:"4,198 SKILL.md — Claude Code, Codex, Gemini CLI, Cursor",tg:["i","n","i","os"],lk:[{t:"OSS",u:"https://github.com/sickn33/antigravity-awesome-skills",c:"o"},{t:"✅/opt/",u:"#",c:"go"}]},
{nm:"HuggingFace Skills",ds:"12 skills officiels — TRL training, datasets, Spaces, GGUF",tg:["i","n","i","os"],lk:[{t:"OSS",u:"https://github.com/huggingface/skills",c:"o"},{t:"✅/opt/",u:"#",c:"go"}]},
{nm:"VoltAgent Skills",ds:"1000+ agent skills communautaires multi-plateforme",tg:["i","n","i","os"],lk:[{t:"OSS",u:"https://github.com/VoltAgent/awesome-agent-skills",c:"o"},{t:"✅/opt/",u:"#",c:"go"}]},
{nm:"awesome-claude-toolkit",ds:"135 agents, 42 commands, 150+ plugins, 35 skills",tg:["i","n","i","os"],lk:[{t:"OSS",u:"https://github.com/rohitg00/awesome-claude-code-toolkit",c:"o"},{t:"✅/opt/",u:"#",c:"go"}]},
{nm:"claude-mem",ds:"Mémoire persistante cross-sessions, auto-capture",sr:"13K⭐",tg:["i","n","i","os"],lk:[{t:"OSS",u:"https://github.com/nicobailon/claude-mem",c:"o"},{t:"✅/opt/",u:"#",c:"go"}]},
{nm:"SkillSmith",ds:"Générateur auto de skills",tg:["i","i","os"],lk:[{t:"OSS",u:"https://github.com/nicepkg/skillsmith",c:"o"}]},
{nm:"UI-UX-pro-max-skill",ds:"Skill UI/UX professionnel",tg:["i","n","os"],lk:[{t:"OSS",u:"https://github.com/nicepkg/ui-ux-pro-max-skill",c:"o"}]},
// ═══════════════════════════════════════
// 🔧 PRODUITS WEVAL — INTÉGRÉS
// ═══════════════════════════════════════
{cat:"🔧 Produits WEVAL — Production"},
{nm:"WEVIA Brain",ds:"Moteur IA 5772L, 17 patterns, 7 fast-path, consensus",tg:["i","os"],lk:[{t:"Live",u:"/wevia",c:"lv"}]},
{nm:"WEVCODE",ds:"Code Assistant — 4 modes fast/deep/code/math",tg:["i"],lk:[{t:"Live",u:"/wevcode",c:"lv"}]},
{nm:"WEDROID v5",ds:"Backend diag + fix, S95 chain exec, 192 Arsenal",tg:["i"],lk:[{t:"API",u:"/api/wedroid-brain-api.php",c:"lv"}]},
{nm:"WEVIA PUBLIC",ds:"Widget + Centre Commande, 71 modules",tg:["i"],lk:[{t:"Live",u:"/wevia",c:"lv"}]},
{nm:"Blade IA v4.2",ds:"Agent Razer — GLM-5, Sentinel v2.4, 34 caps",tg:["i"],lk:[{t:"API",u:"/api/blade-api.php?k=BLADE2026&action=status",c:"lv"}]},
{nm:"WEVADS IA",ds:"SPA 36p, 49 APIs, 18 ToolFK locaux",tg:["i"],lk:[{t:"Live",u:"/wevads-ia/",c:"lv"}]},
{nm:"PowerToys",ds:"Suite prod — QR, DNS, WHOIS, SSL, Hash, AES, GeoIP",tg:["i"],lk:[{t:"Live",u:"/powertoys",c:"lv"}]},
{nm:"Ethica Pharma",ds:"131K HCPs DZ/MA/TN, pilot 500 DZ prêt",tg:["i"],lk:[{t:"Live",u:"/ethica-hcp.html",c:"lv"}]},
{nm:"CRM",ds:"7 tables, deals, PDF gen, séquences outbound",tg:["i"],lk:[{t:"Live",u:"/crm.html",c:"lv"}]},
{nm:"Lyria 3",ds:"Génération musique IA — endpoint prêt, clé Gemini à activer",tg:["n","i"],lk:[{t:"API",u:"/api/lyria3-api.php?action=status",c:"lv"}]},
{nm:"NonReg",ds:"153/153 tests, 13 couches, cron 6h/18h",tg:["i"],lk:[{t:"Live",u:"/api/nonreg-report.html",c:"lv"}]},
{nm:"L99 Framework",ds:"85 layers, 602/625, 17 vidéos, 398 screenshots",tg:["i"],lk:[{t:"Live",u:"/l99.html",c:"lv"}]},
// ═══════════════════════════════════════
// 📊 AI/ML TRAINING — CLONÉS
// ═══════════════════════════════════════
{cat:"📊 AI/ML Training & Modèles"},
{nm:"HuggingFace",ds:"Hub 1M+ modèles/datasets, Spaces gratuit",tg:["i","os","fr"],lk:[{t:"Live",u:"https://huggingface.co",c:"lv"}]},
{nm:"HuggingFace TRL v1.0",ds:"Fine-tuning SFT/DPO/GRPO + GGUF — pip installé ✅",tg:["i","os"],lk:[{t:"OSS",u:"https://github.com/huggingface/trl",c:"o"},{t:"✅pip",u:"#",c:"go"}]},
{nm:"DiffusionDB",ds:"2M prompts+images dataset — cloné /opt/",sr:"6K⭐",tg:["i","n","i","os"],lk:[{t:"OSS",u:"https://github.com/poloclub/diffusiondb",c:"o"},{t:"✅/opt/",u:"#",c:"go"}]},
{nm:"vLLM",ds:"Inference haute perf PagedAttention — cloné /opt/",tg:["i","i","os"],lk:[{t:"OSS",u:"https://github.com/vllm-project/vllm",c:"o"},{t:"✅/opt/",u:"#",c:"go"}]},
{nm:"LocalAI",ds:"Drop-in OpenAI API compatible local — cloné /opt/",tg:["i","i","os"],lk:[{t:"OSS",u:"https://github.com/mudler/LocalAI",c:"o"},{t:"✅/opt/",u:"#",c:"go"}]},
{nm:"Open WebUI",ds:"Interface web LLMs — cloné /opt/",tg:["i","i","os"],lk:[{t:"OSS",u:"https://github.com/open-webui/open-webui",c:"o"},{t:"✅/opt/",u:"#",c:"go"}]},
{nm:"LibreChat",ds:"Clone ChatGPT multi-provider — cloné /opt/",tg:["i","i","os"],lk:[{t:"OSS",u:"https://github.com/danny-avila/LibreChat",c:"o"},{t:"✅/opt/",u:"#",c:"go"}]},
{nm:"ModelScope",ds:"Hub IA Alibaba — Qwen, DeepSeek alternatifs",tg:["i","n","os","fr"],lk:[{t:"Live",u:"https://modelscope.cn",c:"bn"},{t:"OSS",u:"https://github.com/modelscope",c:"o"}]},
{nm:"LMArena",ds:"Benchmark LLM arena — Chatbot Arena",sr:"8K⭐",tg:["i","n","os","fr"],lk:[{t:"Live",u:"https://lmarena.ai",c:"bn"},{t:"OSS",u:"https://github.com/lm-sys/FastChat",c:"o"}]},
{nm:"LTX-Video",ds:"Génération vidéo IA Lightricks",tg:["i","i","os"],lk:[{t:"OSS",u:"https://github.com/Lightricks/LTX-Video",c:"o"}]},
{nm:"Euria (Infomaniak)",ds:"IA souveraine suisse RGPD — benchmark référence",tg:["n","os","fr"],lk:[{t:"Live",u:"https://euria.infomaniak.com",c:"bn"}]},
{nm:"Manus",ds:"Agent IA autonome multi-étapes",tg:["i","n"],lk:[{t:"Live",u:"https://manus.im",c:"bn"}]},
// ═══════════════════════════════════════
// 🐳 OSS SERVICES ACTIFS
// ═══════════════════════════════════════
{cat:"🐳 OSS Services — Actifs"},
{nm:"Paperclip",ds:"CEO Agent souverain → WEVIA proxy → Groq",tg:["i","os"],lk:[{t:"Live",u:"https://paperclip.weval-consulting.com",c:"lv"}]},
{nm:"MiroFish",ds:"Outil collaboratif IA :3050+:5001",tg:["i","os"],lk:[{t:"Live",u:"/mirofish/",c:"lv"}]},
{nm:"DeerFlow",ds:"Deep Research — 113 skills, 3 systemd",tg:["i","os"],lk:[{t:"Live",u:"https://deerflow.weval-consulting.com",c:"lv"},{t:"OSS",u:"https://github.com/nicepkg/deer-flow",c:"o"}]},
{nm:"OpenClaw",ds:"Gateway Ollama — S151 sovereign",tg:["i","os"],lk:[{t:"OSS",u:"https://github.com/nicepkg/openclaw",c:"o"}]},
{nm:"SearXNG",ds:"Meta-search souverain — proxy API",tg:["i","os"],lk:[{t:"API",u:"/api/searxng-proxy.php",c:"lv"},{t:"OSS",u:"https://github.com/searxng/searxng",c:"o"}]},
{nm:"n8n",ds:"Workflow automation — 3 workflows",tg:["i","os"],lk:[{t:"OSS",u:"https://github.com/n8n-io/n8n",c:"o"}]},
{nm:"Qdrant",ds:"Vector DB — RAG, AutoLearn, 95 memcells",tg:["i","os"],lk:[{t:"OSS",u:"https://github.com/qdrant/qdrant",c:"o"}]},
{nm:"Scrapy",ds:"Web scraping — 4 spiders actifs",tg:["i","os"],lk:[{t:"API",u:"/api/scrapy-api.php?k=WEVADS2026&action=status",c:"lv"}]},
{nm:"Playwright",ds:"E2E testing — 41/41 PASS, visual baselines",tg:["i","os"],lk:[{t:"OSS",u:"https://github.com/microsoft/playwright",c:"o"}]},
{nm:"Activepieces",ds:"Workflow automation alt",tg:["i","i","os"],lk:[{t:"OSS",u:"https://github.com/activepieces/activepieces",c:"o"}]},
{nm:"Mastra",ds:"Framework agents TS",tg:["i","i","os"],lk:[{t:"OSS",u:"https://github.com/mastra-ai/mastra",c:"o"}]},
{nm:"Dify",ds:"LLM app platform",tg:["i","i","os"],lk:[{t:"OSS",u:"https://github.com/langgenius/dify",c:"o"}]},
{nm:"Goose",ds:"Agent IA (Block)",tg:["i","i","os"],lk:[{t:"OSS",u:"https://github.com/block/goose",c:"o"}]},
{nm:"Browser Use",ds:"Agent navigateur web",tg:["i","i","os"],lk:[{t:"OSS",u:"https://github.com/nicepkg/browser-use",c:"o"}]},
{nm:"Supermemory",ds:"Mémoire IA persistante",tg:["i","os"],lk:[{t:"OSS",u:"https://github.com/nicepkg/supermemory",c:"o"}]},
{nm:"EvoMaster",ds:"Test REST/GraphQL auto",tg:["i","i","os"],lk:[{t:"OSS",u:"https://github.com/EMResearch/EvoMaster",c:"o"}]},
{nm:"AIOS",ds:"OS pour agents IA",tg:["i","i","os"],lk:[{t:"OSS",u:"https://github.com/agiresearch/AIOS",c:"o"}]},
{nm:"Prometheus",ds:"Monitoring métriques",tg:["i","os"],lk:[{t:"OSS",u:"https://github.com/prometheus/prometheus",c:"o"}]},
{nm:"DeepAgent",ds:"Agent deep research",tg:["i","os"],lk:[{t:"OSS",u:"https://github.com/nicepkg/deepagent",c:"o"}]},
{nm:"TrustMRR",ds:"ML evaluation & monitoring",tg:["i","os"],lk:[{t:"OSS",u:"https://github.com/nicepkg/trustmrr",c:"o"}]},
// ═══════════════════════════════════════
// 🔒 SÉCURITÉ
// ═══════════════════════════════════════
{cat:"🔒 Sécurité & Compliance"},
{nm:"AEGIS",ds:"Security scanner — TrustA 0 vulns",tg:["i","os"],lk:[{t:"API",u:"/api/aegis-scan.php",c:"lv"}]},
{nm:"Strix/Nuclei",ds:"Scanner vulns OWASP auto",tg:["i","os"],lk:[{t:"OSS",u:"https://github.com/projectdiscovery/nuclei",c:"o"}]},
{nm:"CrowdSec",ds:"Protection collaborative — 100% Kuma",tg:["i","os"],lk:[{t:"OSS",u:"https://github.com/crowdsecurity/crowdsec",c:"o"}]},
{nm:"Authentik SSO",ds:"SSO souverain — 100/101 routes",tg:["i","os"],lk:[{t:"Live",u:"https://auth.weval-consulting.com",c:"lv"}]},
{nm:"Vaultwarden",ds:"Passwords auto-hébergé",tg:["i","os"],lk:[{t:"OSS",u:"https://github.com/dani-garcia/vaultwarden",c:"o"}]},
// ═══════════════════════════════════════
// 📈 MONITORING
// ═══════════════════════════════════════
{cat:"📈 Monitoring & Analytics"},
{nm:"Plausible",ds:"Analytics souveraines — tracking LIVE ✅",tg:["i","os"],lk:[{t:"Live",u:"https://analytics.weval-consulting.com",c:"lv"}]},
{nm:"Uptime Kuma",ds:"12 services — login fixé ✅",tg:["i","os"],lk:[{t:"Live",u:"https://monitor.weval-consulting.com",c:"lv"}]},
{nm:"Loki",ds:"Log aggregation (Docker net bug)",tg:["i","os"],lk:[{t:"OSS",u:"https://github.com/grafana/loki",c:"o"}]},
{nm:"Mattermost",ds:"Messagerie + alertes",tg:["i","os"],lk:[{t:"OSS",u:"https://github.com/mattermost/mattermost",c:"o"}]},
// ═══════════════════════════════════════
// 📧 EMAIL
// ═══════════════════════════════════════
{cat:"📧 Email & Delivery"},
{nm:"PMTA v5",ds:"Port 25 legacy — NEVER TOUCH",tg:["i"],lk:[]},
{nm:"KumoMTA",ds:"Port 587+8010 — new sends",tg:["i","os"],lk:[{t:"OSS",u:"https://github.com/KumoCorp/kumomta",c:"o"}]},
{nm:"Postfix",ds:"Relay interne 2525/2526",tg:["i","os"],lk:[]},
// ═══════════════════════════════════════
// 🆓 FREE TIER — SERVEURS GRATUITS
// ═══════════════════════════════════════
{cat:"🆓 Free Tier — Serveurs & GPU Gratuits"},
{nm:"Google Colab",ds:"GPU T4/A100 gratuit — notebooks ML",tg:["i","fr","gpu"],lk:[{t:"Live",u:"https://colab.research.google.com",c:"lv"}]},
{nm:"Kaggle",ds:"GPU P100/T4 gratuit — 30h/sem",tg:["i","fr","gpu"],lk:[{t:"Live",u:"https://kaggle.com",c:"lv"}]},
{nm:"Lightning AI",ds:"Studios GPU — 22h/mois gratuit",tg:["i","fr","gpu"],lk:[{t:"Live",u:"https://lightning.ai",c:"lv"}]},
{nm:"HuggingFace Spaces",ds:"Hosting apps IA gratuit",tg:["i","fr","os"],lk:[{t:"Live",u:"https://huggingface.co/spaces",c:"lv"}]},
{nm:"Oracle Cloud",ds:"Always Free — 4 ARM, 24GB, A10 GPU",tg:["i","fr","gpu"],lk:[{t:"Live",u:"https://cloud.oracle.com/free",c:"lv"}]},
{nm:"Vercel",ds:"Hosting frontend + AI SDK",tg:["i","fr"],lk:[{t:"Live",u:"https://vercel.com",c:"lv"}]},
{nm:"Render",ds:"Free tier web services",tg:["i","fr"],lk:[{t:"Live",u:"https://render.com",c:"lv"}]},
{nm:"Cloudflare Workers",ds:"Edge serverless — 100K req/jour gratuit",tg:["i","fr"],lk:[{t:"Live",u:"https://workers.cloudflare.com",c:"lv"}]},
{nm:"GitHub Codespaces",ds:"Dev cloud — 60h/mois gratuit",tg:["i","fr"],lk:[{t:"Live",u:"https://github.com/codespaces",c:"lv"}]},
{nm:"Replit",ds:"IDE cloud + AI assistant",tg:["i","fr"],lk:[{t:"Live",u:"https://replit.com",c:"lv"}]},
{nm:"RunPod",ds:"GPU cloud — spots pas cher",tg:["i","gpu"],lk:[{t:"Live",u:"https://runpod.io",c:"lv"}]},
{nm:"Vast.ai",ds:"GPU P2P — A100 dès $0.50/h",tg:["i","gpu"],lk:[{t:"Live",u:"https://vast.ai",c:"lv"}]},
{nm:"Lambda Cloud",ds:"GPU ML clusters",tg:["i","gpu"],lk:[{t:"Live",u:"https://lambdalabs.com",c:"lv"}]},
{nm:"Google AI Studio",ds:"Gemini + Lyria 3 GRATUIT",tg:["i","fr"],lk:[{t:"Live",u:"https://aistudio.google.com",c:"lv"}]},
// ═══════════════════════════════════════
// 🎨 DESIGN & PROMPTS
// ═══════════════════════════════════════
{cat:"🎨 Design, Image & Prompts"},
{nm:"Dreamina",ds:"ByteDance image gen",tg:["i","n","fr"],lk:[{t:"Live",u:"https://dreamina.com",c:"bn"}]},
{nm:"MS Designer",ds:"Microsoft IA design",tg:["i","n","fr"],lk:[{t:"Live",u:"https://designer.microsoft.com",c:"bn"}]},
{nm:"Google Stitch",ds:"UI design IA Google Labs",tg:["i","n","fr"],lk:[{t:"Live",u:"https://stitch.withgoogle.com",c:"bn"}]},
{nm:"Llooka.com",ds:"Avatars/logos IA",tg:["i","n","fr"],lk:[{t:"Live",u:"https://llooka.com",c:"bn"}]},
{nm:"PromptHero",ds:"Marketplace prompts IA",tg:["i","n","fr"],lk:[{t:"Live",u:"https://prompthero.com",c:"bn"}]},
{nm:"Affinity",ds:"Design pro alt Adobe",tg:["i","n"],lk:[{t:"Live",u:"https://affinity.serif.com",c:"bn"}]},
{nm:"Layer.ai",ds:"Images IA pour jeux",tg:["i","n"],lk:[{t:"Live",u:"https://layer.ai",c:"bn"}]},
// ═══════════════════════════════════════
// 🏗️ INFRA & REF
// ═══════════════════════════════════════
{cat:"🏗️ Infra, Agents & Outils"},
{nm:"LangChain",ds:"Framework agents+RAG #1",tg:["i","os"],lk:[{t:"OSS",u:"https://github.com/langchain-ai/langchain",c:"o"}]},
{nm:"LlamaIndex",ds:"Data framework RAG",tg:["i","os"],lk:[{t:"OSS",u:"https://github.com/run-llama/llama_index",c:"o"}]},
{nm:"CrewAI",ds:"Multi-agent orchestration",tg:["i","i","os"],lk:[{t:"OSS",u:"https://github.com/crewAIInc/crewAI",c:"o"}]},
{nm:"AutoGen",ds:"Microsoft multi-agent",tg:["i","i","os"],lk:[{t:"OSS",u:"https://github.com/microsoft/autogen",c:"o"}]},
{nm:"Flowise",ds:"LLM workflow builder",tg:["i","i","os"],lk:[{t:"OSS",u:"https://github.com/FlowiseAI/Flowise",c:"o"}]},
{nm:"Pinokio",ds:"One-click AI installer",sr:"15K⭐",tg:["i","n","os"],lk:[{t:"OSS",u:"https://pinokio.computer",c:"o"}]},
{nm:"Jan.ai",ds:"Desktop LLM offline-first",tg:["i","i","os"],lk:[{t:"OSS",u:"https://github.com/janhq/jan",c:"o"}]},
{nm:"AnythingLLM",ds:"RAG desktop any doc",tg:["i","i","os"],lk:[{t:"OSS",u:"https://github.com/Mintplex-Labs/anything-llm",c:"o"}]},
{nm:"godmod3.AI",ds:"Multi-LLM routing + dataset gen",tg:["i","n"],lk:[{t:"Live",u:"https://godmod3.ai",c:"bn"}]},
{nm:"NotebookLM",ds:"Google AI notebook",tg:["i","n","fr"],lk:[{t:"Live",u:"https://notebooklm.google.com",c:"bn"}]},
{nm:"PromptHackers",ds:"Sécurité prompts",tg:["i","n"],lk:[{t:"Live",u:"https://prompthackers.co",c:"bn"}]},
{nm:"GHGrab",ds:"GitHub bulk downloader",tg:["i","n","os"],lk:[{t:"OSS",u:"https://github.com/nicepkg/ghgrab",c:"o"}]},
{nm:"Blink Code Wiki",ds:"Wiki code IA",tg:["i","n"],lk:[{t:"Live",u:"https://blink.wiki",c:"bn"}]},
{nm:"FeedDough",ds:"News IA aggregator",tg:["i","n"],lk:[{t:"Live",u:"https://feeddough.com",c:"bn"}]},
// ═══ AJOUTS GODMODE ═══
{cat:"☁️ Cloud & Serveurs — Free/GPU"},
{nm:"Railway",ds:"PaaS cloud — free tier 500h/mois, deploy depuis GitHub",tg:["i","fr"],lk:[{t:"Live",u:"https://railway.app",c:"lv"}]},
{nm:"Fly.io",ds:"Edge cloud — free tier 3 VMs, deploy global",tg:["i","fr"],lk:[{t:"Live",u:"https://fly.io",c:"lv"}]},
{nm:"TensorDock",ds:"GPU marketplace — RTX 4090 dès $0.34/h",tg:["i","gpu"],lk:[{t:"Live",u:"https://tensordock.com",c:"lv"}]},
{nm:"Hyperstack",ds:"GPU A6000 $0.50/h — NVLink clusters",tg:["i","gpu"],lk:[{t:"Live",u:"https://hyperstack.cloud",c:"lv"}]},
{nm:"Northflank",ds:"GPU cloud multi-cloud — spot optimization",tg:["i","gpu"],lk:[{t:"Live",u:"https://northflank.com",c:"lv"}]},
{nm:"Hetzner Cloud",ds:"S204+S95 — nos serveurs principaux",tg:["i"],lk:[{t:"Console",u:"https://console.hetzner.cloud",c:"lv"}]},
{nm:"OVH",ds:"S151 — tracking + OpenClaw",tg:["i"],lk:[{t:"Console",u:"https://www.ovh.com/manager",c:"lv"}]},
{nm:"Cloudflare",ds:"DNS + CDN + Workers AI — zone weval-consulting.com",tg:["i","fr"],lk:[{t:"Console",u:"https://dash.cloudflare.com",c:"lv"}]},
{cat:"📝 Knowledge & Notes"},
{nm:"Obsidian",ds:"Knowledge base markdown — vault local, plugins communautaires",tg:["i","os"],lk:[{t:"OSS",u:"https://github.com/obsidianmd/obsidian-releases",c:"o"},{t:"Live",u:"https://obsidian.md",c:"bn"}]},
{nm:"Obsidian Copilot",ds:"Plugin IA pour Obsidian — RAG sur vault local",tg:["i","os"],lk:[{t:"OSS",u:"https://github.com/logancyang/obsidian-copilot",c:"o"}]},
{cat:"🔧 LLM Inference Avancé"},
{nm:"llama.cpp",ds:"Inference C++ — GGUF quantization, CPU/GPU natif",tg:["i","os"],lk:[{t:"OSS",u:"https://github.com/ggml-org/llama.cpp",c:"o"}]},
{nm:"TGI (HuggingFace)",ds:"Text Generation Inference — serving production HF",tg:["os"],lk:[{t:"OSS",u:"https://github.com/huggingface/text-generation-inference",c:"o"}]},
{nm:"Langflow",ds:"Visual agent builder DataStax — drag & drop",tg:["i","os"],lk:[{t:"OSS",u:"https://github.com/langflow-ai/langflow",c:"o"}]},
{nm:"Suno AI",ds:"Génération musique IA — concurrent Lyria 3",tg:["i","n"],lk:[{t:"Live",u:"https://suno.ai",c:"bn"}]},
{cat:"🐳 Docker Services S204"},
{nm:"Authentik (server+worker+db)",ds:"SSO Docker — 3 containers",tg:["i"],lk:[]},
{nm:"Plausible+ClickHouse+PG16",ds:"Analytics Docker — 3 containers",tg:["i"],lk:[]},
{nm:"Uptime-Kuma",ds:"Monitoring Docker — 1 container",tg:["i"],lk:[]},
{nm:"Mattermost",ds:"Chat Docker — 1 container",tg:["i"],lk:[]},
{nm:"SearXNG",ds:"Search Docker — 1 container",tg:["i"],lk:[]},
{nm:"Loki",ds:"Logs Docker — 1 container",tg:["i"],lk:[]},
{nm:"Twenty CRM (Redis)",ds:"CRM Docker — 1 container",tg:["i"],lk:[]},
{cat:"🐳 Docker Services S95"},
{nm:"Vaultwarden :8222",ds:"Password manager Docker",tg:["i"],lk:[]},
{nm:"n8n :5678",ds:"Workflow automation Docker",tg:["i"],lk:[]},
{nm:"Qdrant :6333",ds:"Vector DB Docker",tg:["i"],lk:[]},
{nm:"Redis :6380",ds:"Cache Docker",tg:["i"],lk:[]},
];
let cF='all',cS='';
function R(){const g=document.getElementById('G');g.innerHTML='';let lc='',v=0,ti=0,tw=0,tf=0,tc=0,tint=0;
D.forEach(d=>{if(d.cat){lc=d.cat;return}if(!d.nm)return;ti++;if(d.tg.includes('i'))tint++;if(d.tg.includes('w'))tw++;if(d.tg.includes('fr'))tf++;if(d.tg.includes('cl'))tc++;
const mf=cF==='all'||d.tg.includes(cF);const ms=!cS||d.nm.toLowerCase().includes(cS)||d.ds.toLowerCase().includes(cS);if(!mf||!ms)return;v++;
if(lc&&lc!==g.dataset.lc){g.innerHTML+=`<div class="ch"><h2>${lc}</h2></div>`;g.dataset.lc=lc;lc='';}
const tgs=d.tg.map(t=>`<span class="t ${t}">${({i:'INTÉGRÉ',w:'WIRÉ',p:'PENDING',n:'NEW',cl:'CLONÉ',os:'OSS',fr:'FREE',gpu:'GPU'})[t]||t}</span>`).join('');
const lks=(d.lk||[]).map(l=>`<a href="${l.u}" target="_blank" class="b ${l.c}">${l.t}</a>`).join('');
g.innerHTML+=`<div class="c"><div class="tp"><div class="nm">${d.nm}</div>${d.sr?`<div class="sr">${d.sr}</div>`:''}</div><div class="ds">${d.ds}</div><div class="tg">${tgs}</div><div class="ac">${lks}</div></div>`;});
document.getElementById('sT').textContent=ti;document.getElementById('sI').textContent=tint;document.getElementById('sW').textContent=tw;document.getElementById('sC').textContent=tc;document.getElementById('sF').textContent=tf;document.getElementById('ct').textContent=v+'/'+ti;}
function F(f){cF=f;document.querySelectorAll('.fl button').forEach(b=>b.classList.remove('a'));event.target.classList.add('a');R()}
function S(v){cS=v.toLowerCase();R()}R();
</script>
<div style="padding:24px 40px">
<h2 style="font-size:20px;font-weight:700;color:#10b981;margin-bottom:16px">🔧 OUTILS INTERNES WEVAL</h2>
<div style="display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:12px">
<a href="/wevia-master.html" style="display:block;background:rgba(16,185,129,.06);border:1px solid rgba(16,185,129,.2);border-radius:12px;padding:14px;text-decoration:none"><div style="font-size:15px;font-weight:700;color:#10b981">🧠 WEVIA Master</div><div style="font-size:12px;color:#94a3b8">Chat IA 70+ intents, multi-agents, cascade 14 providers</div><span style="display:inline-block;margin-top:6px;font-size:10px;padding:2px 8px;background:rgba(16,185,129,.15);color:#10b981;border-radius:6px">INTERNE</span></a>
<a href="/products/wevialife-app.html" style="display:block;background:rgba(16,185,129,.06);border:1px solid rgba(16,185,129,.2);border-radius:12px;padding:14px;text-decoration:none"><div style="font-size:15px;font-weight:700;color:#10b981">📧 WEVIA Life</div><div style="font-size:12px;color:#94a3b8">Email IA Chief of Staff, Eisenhower, 2207 emails</div><span style="display:inline-block;margin-top:6px;font-size:10px;padding:2px 8px;background:rgba(16,185,129,.15);color:#10b981;border-radius:6px">INTERNE</span></a>
<a href="/command-center.html" style="display:block;background:rgba(16,185,129,.06);border:1px solid rgba(16,185,129,.2);border-radius:12px;padding:14px;text-decoration:none"><div style="font-size:15px;font-weight:700;color:#10b981">📊 Command Center</div><div style="font-size:12px;color:#94a3b8">312 services monitorés, tests, erreurs</div><span style="display:inline-block;margin-top:6px;font-size:10px;padding:2px 8px;background:rgba(16,185,129,.15);color:#10b981;border-radius:6px">INTERNE</span></a>
<a href="/l99-brain.html" style="display:block;background:rgba(16,185,129,.06);border:1px solid rgba(16,185,129,.2);border-radius:12px;padding:14px;text-decoration:none"><div style="font-size:15px;font-weight:700;color:#10b981">🧪 L99 Brain</div><div style="font-size:12px;color:#94a3b8">Tests L99 342/347, NonReg 153, Playwright</div><span style="display:inline-block;margin-top:6px;font-size:10px;padding:2px 8px;background:rgba(16,185,129,.15);color:#10b981;border-radius:6px">INTERNE</span></a>
<a href="/office-hub.html" style="display:block;background:rgba(16,185,129,.06);border:1px solid rgba(16,185,129,.2);border-radius:12px;padding:14px;text-decoration:none"><div style="font-size:15px;font-weight:700;color:#10b981">📊 Office 365 Hub</div><div style="font-size:12px;color:#94a3b8">1500+ comptes, workflow, checker, import</div><span style="display:inline-block;margin-top:6px;font-size:10px;padding:2px 8px;background:rgba(16,185,129,.15);color:#10b981;border-radius:6px">INTERNE</span></a>
<a href="/ethica-hub.html" style="display:block;background:rgba(16,185,129,.06);border:1px solid rgba(16,185,129,.2);border-radius:12px;padding:14px;text-decoration:none"><div style="font-size:15px;font-weight:700;color:#10b981">👨‍⚕️ Ethica Hub</div><div style="font-size:12px;color:#94a3b8">131K+ HCPs, pipeline enrichissement, drill</div><span style="display:inline-block;margin-top:6px;font-size:10px;padding:2px 8px;background:rgba(16,185,129,.15);color:#10b981;border-radius:6px">INTERNE</span></a>
<a href="/ai-hub.html" style="display:block;background:rgba(16,185,129,.06);border:1px solid rgba(16,185,129,.2);border-radius:12px;padding:14px;text-decoration:none"><div style="font-size:15px;font-weight:700;color:#10b981">🤖 AI Hub</div><div style="font-size:12px;color:#94a3b8">14 providers, Ollama, Qdrant, benchmark</div><span style="display:inline-block;margin-top:6px;font-size:10px;padding:2px 8px;background:rgba(16,185,129,.15);color:#10b981;border-radius:6px">INTERNE</span></a>
<a href="/monitoring-hub.html" style="display:block;background:rgba(16,185,129,.06);border:1px solid rgba(16,185,129,.2);border-radius:12px;padding:14px;text-decoration:none"><div style="font-size:15px;font-weight:700;color:#10b981">📈 Monitoring Hub</div><div style="font-size:12px;color:#94a3b8">Uptime Kuma, Cyber, Realtime, NonReg</div><span style="display:inline-block;margin-top:6px;font-size:10px;padding:2px 8px;background:rgba(16,185,129,.15);color:#10b981;border-radius:6px">INTERNE</span></a>
<a href="/ops-center.html" style="display:block;background:rgba(16,185,129,.06);border:1px solid rgba(16,185,129,.2);border-radius:12px;padding:14px;text-decoration:none"><div style="font-size:15px;font-weight:700;color:#10b981">⚙️ Ops Center</div><div style="font-size:12px;color:#94a3b8">Docker 17, crons 52, Blade tasks</div><span style="display:inline-block;margin-top:6px;font-size:10px;padding:2px 8px;background:rgba(16,185,129,.15);color:#10b981;border-radius:6px">INTERNE</span></a>
<a href="/keys-hub.html" style="display:block;background:rgba(16,185,129,.06);border:1px solid rgba(16,185,129,.2);border-radius:12px;padding:14px;text-decoration:none"><div style="font-size:15px;font-weight:700;color:#10b981">🔐 Keys Hub</div><div style="font-size:12px;color:#94a3b8">Vaultwarden, secrets, SSL, sessions</div><span style="display:inline-block;margin-top:6px;font-size:10px;padding:2px 8px;background:rgba(16,185,129,.15);color:#10b981;border-radius:6px">INTERNE</span></a>
</div></div>
<!-- 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">&#128506;</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 -->
<!-- === 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/archi-meta-badge.js" defer></script>
<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>