diff --git a/all-ia-hub.html b/all-ia-hub.html index a9d2c6063..f35136cad 100644 --- a/all-ia-hub.html +++ b/all-ia-hub.html @@ -86,6 +86,8 @@ body.light #theme-toggle::before{content:"\263D"} @keyframes v137spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}} #v137-refresh-btn:hover{background:var(--bg3)} #v137-refresh-btn:disabled{opacity:0.7;cursor:wait} +/* V142-FOOTER-STRIP: body padding to prevent footer overlap */ +body{padding-bottom:26px}
@@ -1020,6 +1022,27 @@ document.addEventListener('keydown', function(e){ /* V135-KPI-BANNER (V137 refactored): named async function, reusable by V137 refresh */ /* V139-TRUTH-STRIP: load source of truth registry (fire once on load) */ +/* V142-FOOTER-STRIP: load ecosystem health once */ +async function __v142LoadFooter(){ + try { + const r = await fetch('/api/ecosystem-health.php', {cache: 'no-store'}); + if (!r.ok) return; + const d = await r.json(); + const set = (id, content) => { const el = document.getElementById(id); if (el) el.innerHTML = content; }; + const colorScore = d.percent >= 99 ? '#10b981' : d.percent >= 95 ? '#f59e0b' : '#ef4444'; + set('v142-score', '' + (d.score || '?') + ' ' + (d.percent ?? 0) + '%'); + if (d.l99) set('v142-l99', 'L99 ' + (d.l99.pass||0) + '/' + (d.l99.total||0) + ''); + set('v142-tools', 'Tools ' + (d.tools_wired ?? 0) + ''); + if (d.infra) set('v142-docker', 'Docker ' + (d.infra.docker ?? 0) + ''); + if (d.providers) set('v142-providers', 'Providers ' + (d.providers.free ?? 0) + ''); + if (d.providers?.qdrant) set('v142-qdrant', 'Qdrant ' + Number(d.providers.qdrant).toLocaleString('fr-FR') + ''); + if (d.infra?.ollama) set('v142-ollama', 'Ollama ' + d.infra.ollama + ''); + const footer = document.getElementById('v142-footer'); + if (footer) footer.title = 'Ecosystem health live · source: /api/ecosystem-health.php · ts: ' + (d.ts || 'n/a') + ' · click Truth → for unified registry'; + } catch(_) {} +} +__v142LoadFooter(); + async function __v139LoadTruthStrip(){ try { const r = await fetch('/api/wevia-truth-registry.json', {cache: 'no-store'}); @@ -1272,5 +1295,16 @@ setInterval(refreshStats,60000); Droid + +