Compare commits
53 Commits
v21avr-kpi
...
wave-203-m
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
909f9ad1e9 | ||
|
|
80aeaf6dff | ||
|
|
12b0d7396a | ||
|
|
f2994cf900 | ||
|
|
9c6164a230 | ||
|
|
ce7f3313e3 | ||
|
|
914d00ab1b | ||
|
|
3c7001b14b | ||
|
|
0d49e735ca | ||
|
|
021d371ece | ||
|
|
c9458067f2 | ||
|
|
0dcb2fdac8 | ||
|
|
b7417b6914 | ||
|
|
6339ad53a5 | ||
|
|
22940dc8ae | ||
|
|
136f0025d4 | ||
|
|
2b149f220f | ||
|
|
445fb66a03 | ||
|
|
7bfe0dad2c | ||
|
|
3f9f307123 | ||
|
|
bfafd0db28 | ||
|
|
94145eb85f | ||
|
|
f9cfca08e5 | ||
|
|
028d569108 | ||
|
|
67f29b4369 | ||
|
|
c2a2b0d4ec | ||
|
|
9996363900 | ||
|
|
ddba9240aa | ||
|
|
324a89d833 | ||
|
|
dd10c684e9 | ||
|
|
a9fa556c12 | ||
|
|
730f5ec1d5 | ||
|
|
f3a18cac1e | ||
|
|
2f7a62f0bb | ||
|
|
207556e4f3 | ||
|
|
0c982bc556 | ||
|
|
adad02c5bd | ||
|
|
fc1f62ae98 | ||
|
|
19387aa38e | ||
|
|
9bb976164d | ||
|
|
0c82d45c58 | ||
|
|
fb0365846f | ||
|
|
a57e30cc73 | ||
|
|
a57697692b | ||
|
|
c9be4c0da7 | ||
|
|
27077d4d2d | ||
|
|
fceadc33c0 | ||
|
|
156a2663b6 | ||
|
|
00357f4779 | ||
|
|
1331b91d5c | ||
|
|
b7d75cb532 | ||
|
|
3683ed8447 | ||
|
|
81210c2b35 |
136
achats-purchasing-sap-mm-procurement.html
Normal file
@@ -0,0 +1,136 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="fr">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover">
|
||||
<meta name="description" content="Optimisez vos processus achats avec SAP MM, Ariba, Coupa · WEVAL Consulting · Expertise internationale">
|
||||
<meta name="keywords" content="SAP MM, procurement, achats, Ariba, Coupa, sourcing, purchase order, WEVAL Consulting, Casablanca, Paris">
|
||||
<meta name="author" content="WEVAL Consulting">
|
||||
<meta property="og:title" content="Achats & Procurement SAP MM · Conseil Maroc & France">
|
||||
<meta property="og:description" content="Optimisez vos processus achats avec SAP MM, Ariba, Coupa">
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:image" content="/og-image.png">
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<link rel="canonical" href="https://weval-consulting.com/achats-purchasing-sap-mm-procurement.html">
|
||||
<title>Achats & Procurement SAP MM · Conseil Maroc & France</title>
|
||||
<link rel="icon" type="image/png" href="/favicon.png">
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Unbounded:wght@400;600;700&family=Inter:wght@300;400;500;600;700&display=swap" rel="stylesheet">
|
||||
<script type="application/ld+json">
|
||||
{
|
||||
"@context": "https://schema.org",
|
||||
"@type": "Service",
|
||||
"serviceType": "Supply Chain & Achats",
|
||||
"name": "Achats & Procurement",
|
||||
"description": "Digitalisez vos achats de bout-en-bout. De la demande d'achat à la facture fournisseur, WEVAL automatise et sécurise votre procure-to-pay.",
|
||||
"provider": {
|
||||
"@type": "Organization",
|
||||
"name": "WEVAL Consulting",
|
||||
"url": "https://weval-consulting.com",
|
||||
"logo": "https://weval-consulting.com/logo.png",
|
||||
"address": {
|
||||
"@type": "PostalAddress",
|
||||
"addressLocality": "Casablanca",
|
||||
"addressCountry": "MA"
|
||||
}
|
||||
},
|
||||
"areaServed": ["MA", "FR", "CA", "DZ", "TN"]
|
||||
}
|
||||
</script>
|
||||
<style>
|
||||
*{margin:0;padding:0;box-sizing:border-box}
|
||||
:root{--bg:#080a10;--bg2:#0d1119;--cy:#22d3ee;--pu:#a78bfa;--gr:#22c55e;--or:#f59e0b;--t1:#eef0f4;--t2:#94a3b8;--t3:#64748b;--bd:rgba(255,255,255,0.08)}
|
||||
body{background:radial-gradient(1200px 700px at 85% -10%,rgba(168,85,247,0.08),transparent 60%),radial-gradient(900px 600px at -10% 40%,rgba(34,211,238,0.07),transparent 55%),var(--bg);color:var(--t1);font-family:'Inter',system-ui,sans-serif;font-size:16px;line-height:1.6;min-height:100vh;overflow-x:hidden;-webkit-font-smoothing:antialiased}
|
||||
body::before{content:"";position:fixed;inset:0;background-image:repeating-linear-gradient(0deg,rgba(255,255,255,0.012) 0 1px,transparent 1px 3px),repeating-linear-gradient(90deg,rgba(255,255,255,0.012) 0 1px,transparent 1px 3px);pointer-events:none;z-index:0}
|
||||
main,header,footer,nav,section{position:relative;z-index:1}
|
||||
a{color:inherit;text-decoration:none;transition:opacity .15s}
|
||||
a:hover{opacity:.85}
|
||||
.nav{display:flex;align-items:center;justify-content:space-between;padding:20px 32px;border-bottom:1px solid var(--bd);background:rgba(8,10,16,0.9);backdrop-filter:blur(12px);position:sticky;top:0;z-index:100}
|
||||
.nav-logo{font-family:'Unbounded',sans-serif;font-size:18px;font-weight:700;background:linear-gradient(135deg,var(--cy),var(--pu));-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}
|
||||
.nav-links{display:flex;gap:24px;font-size:14px;color:var(--t2)}
|
||||
.nav-links a:hover{color:var(--cy)}
|
||||
.hero{padding:80px 32px 60px;max-width:1200px;margin:0 auto}
|
||||
.breadcrumb{color:var(--t3);font-size:13px;margin-bottom:24px}
|
||||
.breadcrumb a{color:var(--t2)}
|
||||
.breadcrumb a:hover{color:var(--cy)}
|
||||
.domain-pill{display:inline-block;padding:6px 14px;background:rgba(34,211,238,0.1);color:var(--cy);border:1px solid rgba(34,211,238,0.3);border-radius:20px;font-size:11px;font-weight:600;letter-spacing:1px;text-transform:uppercase;margin-bottom:20px}
|
||||
h1{font-family:'Unbounded',sans-serif;font-size:clamp(36px,6vw,64px);font-weight:700;line-height:1.1;margin-bottom:24px;background:linear-gradient(135deg,#fff 0%,#94a3b8 100%);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}
|
||||
.subtitle{font-size:clamp(18px,2.5vw,22px);color:var(--t2);font-weight:300;max-width:720px;margin-bottom:32px}
|
||||
.cta-group{display:flex;gap:14px;flex-wrap:wrap;margin-top:36px}
|
||||
.cta{padding:14px 28px;border-radius:12px;font-weight:600;font-size:15px;transition:all .2s}
|
||||
.cta-primary{background:linear-gradient(135deg,var(--cy),var(--pu));color:white;border:0;box-shadow:0 4px 20px rgba(168,85,247,0.3)}
|
||||
.cta-primary:hover{transform:translateY(-2px);box-shadow:0 6px 30px rgba(168,85,247,0.4)}
|
||||
.cta-ghost{border:1px solid var(--bd);color:var(--t1);background:rgba(255,255,255,0.02)}
|
||||
.cta-ghost:hover{background:rgba(255,255,255,0.05);border-color:var(--cy)}
|
||||
.pitch{padding:60px 32px;max-width:1200px;margin:0 auto}
|
||||
.pitch-txt{font-size:20px;color:var(--t1);line-height:1.6;max-width:800px;font-weight:400}
|
||||
.bullets{padding:30px 32px 80px;max-width:1200px;margin:0 auto}
|
||||
.bullets h2{font-family:'Unbounded',sans-serif;font-size:32px;font-weight:600;margin-bottom:36px;color:var(--t1)}
|
||||
.bullet-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:20px}
|
||||
.bullet{padding:24px;background:rgba(15,20,32,0.6);border:1px solid var(--bd);border-radius:14px;backdrop-filter:blur(10px);transition:all .2s}
|
||||
.bullet:hover{transform:translateY(-4px);border-color:rgba(34,211,238,0.4);background:rgba(15,20,32,0.8)}
|
||||
.bullet-icon{width:40px;height:40px;background:linear-gradient(135deg,rgba(34,211,238,0.2),rgba(168,85,247,0.2));border-radius:10px;display:flex;align-items:center;justify-content:center;margin-bottom:14px;color:var(--cy);font-family:'Unbounded',sans-serif;font-size:14px;font-weight:600}
|
||||
.bullet-txt{font-size:15px;color:var(--t1);line-height:1.5;font-weight:500}
|
||||
.cta-section{padding:80px 32px;text-align:center;background:linear-gradient(180deg,transparent,rgba(34,211,238,0.03));border-top:1px solid var(--bd);max-width:1200px;margin:40px auto 0;border-radius:20px}
|
||||
.cta-section h2{font-family:'Unbounded',sans-serif;font-size:36px;font-weight:600;margin-bottom:16px}
|
||||
.cta-section p{color:var(--t2);font-size:17px;margin-bottom:32px;max-width:600px;margin-left:auto;margin-right:auto}
|
||||
footer{padding:40px 32px;border-top:1px solid var(--bd);text-align:center;color:var(--t3);font-size:13px;margin-top:40px}
|
||||
footer a{color:var(--t2)}
|
||||
footer a:hover{color:var(--cy)}
|
||||
.footer-links{display:flex;gap:24px;justify-content:center;flex-wrap:wrap;margin-bottom:16px;font-size:14px}
|
||||
@media(max-width:640px){.nav{padding:16px}.nav-links{display:none}.hero{padding:50px 20px 40px}.bullets,.pitch,.cta-section{padding-left:20px;padding-right:20px}}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<nav class="nav">
|
||||
<a href="/" class="nav-logo">WEVAL Consulting</a>
|
||||
<div class="nav-links">
|
||||
<a href="/">Accueil</a>
|
||||
<a href="/solutions">Solutions</a>
|
||||
<a href="/products/workspace.html">Produits</a>
|
||||
<a href="/contact.html">Contact</a>
|
||||
</div>
|
||||
</nav>
|
||||
<main>
|
||||
<section class="hero">
|
||||
<div class="breadcrumb"><a href="/">Accueil</a> / <a href="/solutions">Solutions</a> / <span>Supply Chain & Achats</span></div>
|
||||
<div class="domain-pill">Supply Chain & Achats</div>
|
||||
<h1>Achats & Procurement</h1>
|
||||
<p class="subtitle">Optimisez vos processus achats avec SAP MM, Ariba, Coupa</p>
|
||||
<div class="cta-group">
|
||||
<a href="/contact.html" class="cta cta-primary">Parlons de votre projet</a>
|
||||
<a href="/solutions" class="cta cta-ghost">Toutes nos solutions</a>
|
||||
</div>
|
||||
</section>
|
||||
<section class="pitch">
|
||||
<p class="pitch-txt">Digitalisez vos achats de bout-en-bout. De la demande d'achat à la facture fournisseur, WEVAL automatise et sécurise votre procure-to-pay.</p>
|
||||
</section>
|
||||
<section class="bullets">
|
||||
<h2>Notre expertise</h2>
|
||||
<div class="bullet-grid">
|
||||
<div class="bullet"><div class="bullet-icon">01</div><div class="bullet-txt">Sourcing stratégique & référentiel fournisseurs</div></div>
|
||||
<div class="bullet"><div class="bullet-icon">02</div><div class="bullet-txt">Demandes d'achat & approbations digitales</div></div>
|
||||
<div class="bullet"><div class="bullet-icon">03</div><div class="bullet-txt">Commandes SAP MM intégrées ERP</div></div>
|
||||
<div class="bullet"><div class="bullet-icon">04</div><div class="bullet-txt">Réception & factures 3-way match</div></div>
|
||||
<div class="bullet"><div class="bullet-icon">05</div><div class="bullet-txt">Reporting achats temps-réel</div></div>
|
||||
</div>
|
||||
</section>
|
||||
<section class="cta-section">
|
||||
<h2>Un projet en tête ?</h2>
|
||||
<p>Nos experts sont à votre disposition pour un diagnostic gratuit et sans engagement.</p>
|
||||
<a href="/contact.html" class="cta cta-primary">Démarrer maintenant</a>
|
||||
</section>
|
||||
</main>
|
||||
<footer>
|
||||
<div class="footer-links">
|
||||
<a href="/">Accueil</a>
|
||||
<a href="/solutions">Solutions</a>
|
||||
<a href="/products/workspace.html">Produits</a>
|
||||
<a href="/privacy-policy.html">Confidentialité</a>
|
||||
<a href="/contact.html">Contact</a>
|
||||
</div>
|
||||
<div>© 2026 WEVAL Consulting · Casablanca · Paris · Tous droits réservés</div>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
@@ -46,7 +46,7 @@ select{background:#0f172a;border:1px solid #334155;color:#e2e8f0;padding:4px 8px
|
||||
<a href="/agents-valuechain.html" target="_blank">⛓️ Value Chain</a>
|
||||
<a href="/tools-hub.html" target="_blank">🔧 Tools</a>
|
||||
<a href="/crons-monitor.html" target="_blank">⏰ Crons</a>
|
||||
<a href="/nonreg-report.html" target="_blank">🧪 NonReg</a>
|
||||
<a href="/nonreg.html" target="_blank">🧪 NonReg</a>
|
||||
<a href="/oss-discovery.html" target="_blank">🔭 OSS</a>
|
||||
<a href="/ai-benchmark.html" target="_blank">🏆 AI Bench</a>
|
||||
<a href="/admin.html">⚙️ Admin</a>
|
||||
|
||||
@@ -55,8 +55,8 @@
|
||||
<a href="/agents-fleet.html" class="card"><h3>📊 Fleet Overview</h3><p>13 agents status live</p><span class="badge int">INTERNE</span></a>
|
||||
<a href="/agents-valuechain.html" class="card"><h3>🎯 Value Chain</h3><p>Chaîne de valeur agents</p><span class="badge int">INTERNE</span></a>
|
||||
<a href="/agents-goodjob.html" class="card"><h3>💡 GoodJob</h3><p>Performance agents</p><span class="badge int">INTERNE</span></a>
|
||||
<a href="/agents-enterprise.html" class="card"><h3>🌐 Enterprise</h3><p>Vue enterprise agents</p><span class="badge int">INTERNE</span></a>
|
||||
<a href="/agents-sim.html" class="card"><h3>🔬 Simulation</h3><p>Simulation multi-agents</p><span class="badge int">INTERNE</span></a>
|
||||
<a href="/weval-enterprise-management.html" class="card"><h3>🌐 Enterprise</h3><p>Vue enterprise agents</p><span class="badge int">INTERNE</span></a>
|
||||
<a href="/agent-roi-simulator.html" class="card"><h3>🔬 Simulation</h3><p>Simulation multi-agents</p><span class="badge int">INTERNE</span></a>
|
||||
</div>
|
||||
<div class="section"><h2 style="color:#818cf8">⚙️ ORCHESTRATION</h2></div>
|
||||
<div class="grid"><a href="/wevia-master.html" class="card"><h3>🧠 WEVIA Master</h3><p>Multi-agents via chat (7 parallel)</p><span class="badge int">INTERNE</span></a>
|
||||
|
||||
@@ -91,6 +91,10 @@ body{padding-bottom:26px}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<!-- BETON-DOCTRINE-101 dual-dummy (entry point) -->
|
||||
<div id="weval-global-logout" style="display:none!important;visibility:hidden!important" aria-hidden="true" data-beton-101="dummy-to-block-auto-injection"></div>
|
||||
<a id="weval-gl" href="#" style="display:none!important;visibility:hidden!important" aria-hidden="true" data-beton-101="dummy-to-block-auto-injection" tabindex="-1"></a>
|
||||
|
||||
<header class="hdr">
|
||||
<div class="brand">
|
||||
<div class="logo">A</div>
|
||||
@@ -120,6 +124,8 @@ body{padding-bottom:26px}
|
||||
<span style="color:var(--mu);opacity:0.3">·</span>
|
||||
<a href="/wevcode.html" style="color:var(--mu);text-decoration:none;padding:3px 8px;border-radius:4px;transition:all 0.15s" onmouseover="this.style.background='var(--bg3)';this.style.color='#6ee7b7'" onmouseout="this.style.background='';this.style.color='var(--mu)'" title="WevCode · Sovereign Coding Agent v2.0">💻 WevCode</a>
|
||||
<span style="color:var(--mu);opacity:0.3">·</span>
|
||||
<a href="/playwright-v132-portfolio.html" style="color:var(--mu);text-decoration:none;padding:3px 8px;border-radius:4px;transition:all 0.15s" onmouseover="this.style.background='var(--bg3)';this.style.color='#34d399'" onmouseout="this.style.background='';this.style.color='var(--mu)'" title="V132 Playwright portfolio · 12 intents · 100% routing">🎯 V132 100%</a>
|
||||
<span style="color:var(--mu);opacity:0.3">·</span>
|
||||
<a href="/wevia-unified-hub.html" style="color:var(--mu);text-decoration:none;padding:3px 8px;border-radius:4px;transition:all 0.15s" onmouseover="this.style.background='var(--bg3)';this.style.color='#00d4b4'" onmouseout="this.style.background='';this.style.color='var(--mu)'" title="WEVIA Unified Hub · Truth Registry source unique">🧠 Truth Hub</a>
|
||||
<!-- V137-REFRESH: manual refresh button + fresh indicator -->
|
||||
<button id="v137-refresh-btn" onclick="event.stopPropagation();__v137RefreshHealth()" style="margin-left:auto;background:transparent;border:1px solid var(--bd);color:var(--mu);border-radius:4px;padding:2px 6px;cursor:pointer;font-size:10px;transition:all 0.15s" title="Refresh health live" onmouseover="this.style.color='var(--ac)';this.style.borderColor='var(--vl)'" onmouseout="this.style.color='var(--mu)';this.style.borderColor='var(--bd)'">↺</button>
|
||||
@@ -1050,6 +1056,17 @@ async function __v139LoadTruthStrip(){
|
||||
const d = await r.json();
|
||||
const setN = (id, n) => { const el = document.getElementById(id); if (el && n !== undefined) el.innerHTML = '· <strong style="color:var(--ac)">' + Number(n).toLocaleString('fr-FR') + '</strong> ' + id.replace('v139-',''); };
|
||||
setN('v139-agents', d.agents?.count_unique);
|
||||
// === AMBRE-V1 referentiel-unique sync (additif · doctrine #14) ===
|
||||
// Sync all agent count spots (h-ag header, t-ag truth strip, orch-agents orchestrator)
|
||||
// All read from same truth-registry source → 'référentiel unique' doctrine
|
||||
const setNumRaw = (id, n) => { const el = document.getElementById(id); if (el && n !== undefined && n !== null) el.textContent = Number(n).toLocaleString('fr-FR'); };
|
||||
setNumRaw('h-ag', d.agents?.count_unique);
|
||||
setNumRaw('t-ag', d.agents?.count_unique);
|
||||
setNumRaw('orch-agents', d.agents?.count_unique);
|
||||
// Also sync providers count if the header has it hardcoded
|
||||
setNumRaw('h-pv', d.providers?.count);
|
||||
setNumRaw('t-pv', d.providers?.count);
|
||||
// === END AMBRE-V1 ===
|
||||
// V141-AGENTS-TOOLTIP: expose dedup context on hover
|
||||
const agEl = document.getElementById('v139-agents');
|
||||
if (agEl && d.agents) {
|
||||
@@ -1306,5 +1323,6 @@ setInterval(refreshStats,60000);
|
||||
<span id="v142-ollama"></span>
|
||||
<span style="margin-left:auto;color:#00d4b4;font-size:9px"><a href="/wevia-unified-hub.html" style="color:inherit;text-decoration:none" title="Truth Hub">Truth →</a></span>
|
||||
</div>
|
||||
<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"];var isPub=pub.indexOf(p)>=0||p.indexOf("/products/")===0||p.indexOf("/solutions/")===0||p.indexOf("/blog/")===0||p.indexOf("/service/")===0||p.indexOf("/marketplace")===0||p.indexOf("/contact")===0||p.indexOf("/tarifs")===0||p.indexOf("/news")===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><script src="/opus-antioverlap-doctrine.js?v=1776774935" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -63,3 +63,4 @@ Pour créer un fichier vide et l'ouvrir, utilisez la commande suivante :
|
||||
})();
|
||||
</script>
|
||||
<!-- === OPUS UNIVERSAL DRILL-DOWN END === -->
|
||||
<!-- WTP_UDOCK_V1 (Opus 21-avr t37-100pct) --><script src="/wtp-unified-dock.js" defer></script>
|
||||
|
||||
@@ -23,7 +23,7 @@ p.sub{color:#64748b;margin-bottom:32px;font-size:14px}
|
||||
<a class="card" href="https://console.anthropic.com" target="_blank"><h3>💻 Console API</h3><p>API keys, usage, billing, models</p><span class="tag">API</span></a>
|
||||
<a class="card" href="https://docs.anthropic.com" target="_blank"><h3>📖 Documentation</h3><p>API reference, guides, prompting</p><span class="tag" style="background:rgba(52,211,153,.12);color:#34d399">DOCS</span></a>
|
||||
<a class="card" href="/wevia-master.html"><h3>🤖 WEVIA Master</h3><p>Master chat avec cascade 14 providers + Claude</p><span class="tag" style="background:rgba(167,139,250,.12);color:#a78bfa">MASTER</span></a>
|
||||
<a class="card" href="/claude-sync.html"><h3>🔄 Claude Sync</h3><p>Synchronisation conversations Claude ↔ WEVIA</p><span class="tag" style="background:rgba(251,191,36,.12);color:#fbbf24">SYNC</span></a>
|
||||
<a class="card" href="/sovereign-claude.html"><h3>🔄 Claude Sync</h3><p>Synchronisation conversations Claude ↔ WEVIA</p><span class="tag" style="background:rgba(251,191,36,.12);color:#fbbf24">SYNC</span></a>
|
||||
<a class="card" href="/api-key-hub.html"><h3>🔑 API Keys</h3><p>Gestion cle Anthropic + rotation</p><span class="tag" style="background:rgba(248,113,113,.12);color:#f87171">KEYS</span></a>
|
||||
</div></div><!-- CARTO_REMOVED -->
|
||||
<!-- CARTO_BANNER_V1 -->
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"agent": "V41_Disk_Monitor",
|
||||
"ts": "2026-04-21T13:30:02+02:00",
|
||||
"ts": "2026-04-21T14:30:02+02:00",
|
||||
"disk_pct": 82,
|
||||
"disk_free_gb": 27,
|
||||
"growth_per_day_gb": 1.5,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"agent": "V41_Risk_Escalation",
|
||||
"ts": "2026-04-21T13:30:04+02:00",
|
||||
"ts": "2026-04-21T14:30:03+02:00",
|
||||
"dg_alerts_active": 7,
|
||||
"wevia_life_stats_preview": "{
|
||||
"ok": true,
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
{
|
||||
"agent": "V41_Feature_Adoption_Tracker",
|
||||
"ts": "2026-04-21T13:00:01+02:00",
|
||||
"ts": "2026-04-21T14:00:02+02:00",
|
||||
"features_tracked": 15,
|
||||
"features_used_24h": 11,
|
||||
"adoption_pct": 73,
|
||||
"chat_queries_last_1k_log": 50,
|
||||
"wtp_views_last_1k_log": 16,
|
||||
"features_used_24h": 10,
|
||||
"adoption_pct": 66,
|
||||
"chat_queries_last_1k_log": 82,
|
||||
"wtp_views_last_1k_log": 0,
|
||||
"dg_views_last_1k_log": 0,
|
||||
"skill_runs_last_1k_log": 0,
|
||||
"recommendation": "UX onboarding tour for unused features",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"agent": "V45_Leads_Sync",
|
||||
"ts": "2026-04-21T13:30:03+02:00",
|
||||
"ts": "2026-04-21T14:30:03+02:00",
|
||||
"paperclip_total": 48,
|
||||
"active_customer": 4,
|
||||
"warm_prospect": 5,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"agent": "V41_MQL_Scoring",
|
||||
"ts": "2026-04-21T13:00:02+02:00",
|
||||
"ts": "2026-04-21T14:00:03+02:00",
|
||||
"leads_total": 48,
|
||||
"mql_current": 16,
|
||||
"sql_current": 6,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"agent": "V54_Risk_Monitor_Live",
|
||||
"ts": "2026-04-21T13:30:03+02:00",
|
||||
"ts": "2026-04-21T14:30:03+02:00",
|
||||
"critical_risks": {
|
||||
"RW01_pipeline_vide": {
|
||||
"pipeline_keur": 0,
|
||||
@@ -22,7 +22,7 @@
|
||||
},
|
||||
"RW12_burnout": {
|
||||
"agents_cron_active": 15,
|
||||
"load_5min": "2.43",
|
||||
"load_5min": "5.22",
|
||||
"automation_coverage_pct": 70,
|
||||
"residual_risk_pct": 60,
|
||||
"trend": "V52_goldratt_options_active"
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
{
|
||||
"timestamp": "2026-04-21 12:00",
|
||||
"timestamp": "2026-04-21 14:00",
|
||||
"sections": {
|
||||
"servers": {
|
||||
"S204": {
|
||||
"docker": 19,
|
||||
"disk": "81%",
|
||||
"ram": "14Gi/30Gi",
|
||||
"load": "2.61",
|
||||
"uptime": "up 1 week, 8 minutes"
|
||||
"disk": "82%",
|
||||
"ram": "12Gi/30Gi",
|
||||
"load": "0.99",
|
||||
"uptime": "up 1 week, 2 hours, 8 minutes"
|
||||
}
|
||||
},
|
||||
"docker": {
|
||||
@@ -15,7 +15,7 @@
|
||||
"containers": [
|
||||
{
|
||||
"name": "loki",
|
||||
"status": "Up 4 days",
|
||||
"status": "Up 5 days",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
@@ -95,7 +95,7 @@
|
||||
},
|
||||
{
|
||||
"name": "uptime-kuma",
|
||||
"status": "Up 34 hours (healthy)",
|
||||
"status": "Up 36 hours (healthy)",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
@@ -387,8 +387,8 @@
|
||||
]
|
||||
},
|
||||
"routes": {
|
||||
"lines": 3620,
|
||||
"count": 445
|
||||
"lines": 3652,
|
||||
"count": 446
|
||||
},
|
||||
"skills": {
|
||||
"count": 835
|
||||
@@ -479,7 +479,7 @@
|
||||
]
|
||||
},
|
||||
"pages": {
|
||||
"count": 293
|
||||
"count": 314
|
||||
},
|
||||
"opt_tools": {
|
||||
"count": 91
|
||||
@@ -488,7 +488,7 @@
|
||||
"pairs": 5751
|
||||
},
|
||||
"wiki": {
|
||||
"entries": 1928
|
||||
"entries": 1988
|
||||
}
|
||||
}
|
||||
}
|
||||
122
api/ambre-count.php
Normal file
@@ -0,0 +1,122 @@
|
||||
<?php
|
||||
/**
|
||||
* ambre-count.php — AMBRE session · aggregator chiffres unifiés
|
||||
* Lit depuis truth-registry (canonical) + tool-registry + filesystem + ethica API
|
||||
* Returns flat JSON scalars pour consumption par __ambre_truth_snapshot et UI.
|
||||
* Doctrine #4 : zéro hardcode, toutes les valeurs depuis source live.
|
||||
*/
|
||||
header("Content-Type: application/json");
|
||||
|
||||
$out = [
|
||||
'ok' => true,
|
||||
'ts' => date('c'),
|
||||
'sources' => [],
|
||||
];
|
||||
|
||||
// === 1. Truth Registry (primary source of truth) ===
|
||||
$tr_path = '/var/www/html/api/wevia-truth-registry.json';
|
||||
if (file_exists($tr_path)) {
|
||||
$tr = @json_decode(@file_get_contents($tr_path), true);
|
||||
if (is_array($tr)) {
|
||||
$out['sources'][] = 'truth-registry';
|
||||
$out['built_at'] = $tr['built_at'] ?? null;
|
||||
$out['agents'] = $tr['agents']['count_unique'] ?? null;
|
||||
$out['agents_overlaps'] = $tr['agents']['count_with_overlaps'] ?? null;
|
||||
$out['intents'] = $tr['intents']['count'] ?? null;
|
||||
$out['skills'] = $tr['skills']['TOTAL'] ?? $tr['skills']['count'] ?? null;
|
||||
$out['brains'] = $tr['brains']['count'] ?? null;
|
||||
$out['doctrines'] = $tr['doctrines']['count'] ?? null;
|
||||
$out['dashboards']= $tr['dashboards']['count'] ?? null;
|
||||
$out['providers'] = count($tr['providers']['list'] ?? []) ?: ($tr['providers']['declared_total'] ?? null);
|
||||
$out['nonreg_score'] = $tr['nonreg']['score'] ?? null;
|
||||
$out['autonomy'] = $tr['autonomy_level'] ?? null;
|
||||
$out['apis_php'] = $tr['apis_php_count'] ?? null;
|
||||
}
|
||||
}
|
||||
|
||||
// === 2. Tool Registry (for tools count) ===
|
||||
$reg_path = '/var/www/html/api/wevia-tool-registry.json';
|
||||
if (file_exists($reg_path)) {
|
||||
$reg = @json_decode(@file_get_contents($reg_path), true);
|
||||
if (is_array($reg)) {
|
||||
$out['sources'][] = 'tool-registry';
|
||||
$out['tools'] = count($reg['tools'] ?? []);
|
||||
}
|
||||
}
|
||||
|
||||
// === 3. Filesystem counts (pages, apis) ===
|
||||
$html = @glob('/var/www/html/*.html') ?: [];
|
||||
$out['pages'] = count($html);
|
||||
$apis = @glob('/var/www/html/api/*.php') ?: [];
|
||||
$out['apis_files'] = count($apis);
|
||||
$stubs = @glob('/var/www/html/api/wired-pending/*.php') ?: [];
|
||||
$out['wired_stubs'] = count($stubs);
|
||||
$out['sources'][] = 'filesystem';
|
||||
|
||||
// === 4. Ethica HCPs (live API) ===
|
||||
$ethica_sources = [
|
||||
'http://127.0.0.1/api/ethica-country-api.php',
|
||||
'/var/www/html/api/ethica-cache.json',
|
||||
];
|
||||
foreach ($ethica_sources as $src) {
|
||||
if (strpos($src, 'http') === 0) {
|
||||
$ch = @curl_init($src);
|
||||
@curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER=>true, CURLOPT_TIMEOUT=>3, CURLOPT_CONNECTTIMEOUT=>2]);
|
||||
$raw = @curl_exec($ch); @curl_close($ch);
|
||||
} else {
|
||||
$raw = file_exists($src) ? @file_get_contents($src) : null;
|
||||
}
|
||||
if ($raw) {
|
||||
$d = @json_decode($raw, true);
|
||||
if (is_array($d)) {
|
||||
$candidates = [
|
||||
$d['total'] ?? null,
|
||||
$d['hcps_total'] ?? null,
|
||||
$d['ethica_hcps'] ?? null,
|
||||
$d['count'] ?? null,
|
||||
];
|
||||
foreach ($candidates as $c) {
|
||||
if (is_numeric($c) && $c > 1000) { $out['hcps'] = (int)$c; $out['sources'][] = 'ethica-api'; break 2; }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// === 5. Qdrant collections count ===
|
||||
$qh = @curl_init('http://127.0.0.1:6333/collections');
|
||||
if ($qh) {
|
||||
@curl_setopt_array($qh, [CURLOPT_RETURNTRANSFER=>true, CURLOPT_TIMEOUT=>2]);
|
||||
$qraw = @curl_exec($qh); @curl_close($qh);
|
||||
if ($qraw) {
|
||||
$qd = @json_decode($qraw, true);
|
||||
if (isset($qd['result']['collections']) && is_array($qd['result']['collections'])) {
|
||||
$out['qdrant_collections'] = count($qd['result']['collections']);
|
||||
$out['sources'][] = 'qdrant';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// === 6. Docker count ===
|
||||
$docker = @trim(@shell_exec('docker ps -q 2>/dev/null | wc -l'));
|
||||
if (is_numeric($docker)) { $out['docker'] = (int)$docker; $out['sources'][] = 'docker'; }
|
||||
|
||||
// === 7. Crons ===
|
||||
$crons = @trim(@shell_exec('crontab -l 2>/dev/null | grep -cv "^#"'));
|
||||
if (is_numeric($crons)) $out['crons'] = (int)$crons;
|
||||
|
||||
// === 8. NonReg live ===
|
||||
$nr_path = '/var/www/html/api/nonreg-latest.json';
|
||||
if (file_exists($nr_path)) {
|
||||
$nr = @json_decode(@file_get_contents($nr_path), true);
|
||||
if (is_array($nr)) {
|
||||
$out['nonreg_pass'] = $nr['pass'] ?? null;
|
||||
$out['nonreg_total'] = $nr['total'] ?? null;
|
||||
}
|
||||
}
|
||||
|
||||
// === Fill any remaining nulls with '?' for display clarity ===
|
||||
foreach (['agents','intents','skills','brains','doctrines','dashboards','providers','tools','hcps','pages','qdrant_collections','apis_php','nonreg_score','autonomy','built_at','docker','crons'] as $k) {
|
||||
if (!isset($out[$k]) || $out[$k] === null) $out[$k] = '?';
|
||||
}
|
||||
|
||||
echo json_encode($out, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES);
|
||||
11
api/ambre-diag-aide.php
Normal file
@@ -0,0 +1,11 @@
|
||||
<?php
|
||||
header("Content-Type: application/json");
|
||||
@require_once "/var/www/html/api/wevia-fast-path-v3.php";
|
||||
$r = function_exists("wevia_fast_path") ? wevia_fast_path("aide") : null;
|
||||
$snapshot = function_exists("__ambre_truth_snapshot") ? __ambre_truth_snapshot() : null;
|
||||
echo json_encode([
|
||||
"fn_fast_path" => function_exists("wevia_fast_path"),
|
||||
"fn_helper" => function_exists("__ambre_truth_snapshot"),
|
||||
"fp_result" => $r,
|
||||
"snapshot" => $snapshot,
|
||||
], JSON_PRETTY_PRINT);
|
||||
42
api/ambre-diag-snapshot.php
Normal file
@@ -0,0 +1,42 @@
|
||||
<?php
|
||||
/**
|
||||
* ambre-diag-snapshot.php — appelle __ambre_truth_snapshot et dump resultat
|
||||
*/
|
||||
header("Content-Type: application/json");
|
||||
|
||||
// Load fast-path-v3 to have the function available
|
||||
$fp = "/var/www/html/api/wevia-fast-path-v3.php";
|
||||
if (file_exists($fp)) @require_once $fp;
|
||||
|
||||
$fn_exists = function_exists("__ambre_truth_snapshot");
|
||||
$out = ["ok" => true, "helper_loaded" => $fn_exists];
|
||||
|
||||
if ($fn_exists) {
|
||||
$out["snapshot"] = __ambre_truth_snapshot();
|
||||
}
|
||||
|
||||
// Also load truth registry ourselves to see nested structure
|
||||
$p = "/var/www/html/api/wevia-truth-registry.json";
|
||||
if (file_exists($p)) {
|
||||
$d = @json_decode(@file_get_contents($p), true);
|
||||
if (is_array($d)) {
|
||||
$out["file_ok"] = true;
|
||||
$out["file_size"] = filesize($p);
|
||||
$out["top_keys"] = array_keys($d);
|
||||
|
||||
// Probe nested structures to find count-like fields
|
||||
foreach (["tools","providers","intents","skills","brains","doctrines","dashboards","nonreg"] as $k) {
|
||||
if (isset($d[$k]) && is_array($d[$k])) {
|
||||
$out["nested"][$k] = [
|
||||
"keys" => array_keys($d[$k]),
|
||||
];
|
||||
// List sub-types
|
||||
foreach ($d[$k] as $sk => $sv) {
|
||||
$out["nested"][$k]["types"][$sk] = is_array($sv) ? "array[" . count($sv) . "]" : (is_numeric($sv) ? "num=" . $sv : gettype($sv));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
echo json_encode($out, JSON_PRETTY_PRINT);
|
||||
32
api/ambre-dump.php
Normal file
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
/**
|
||||
* ambre-dump.php · AMBRE session · standalone file reader
|
||||
* Allowed roots only. Returns RAW content (Content-Type: text/plain)
|
||||
* Invocation: /api/ambre-dump.php?path=/var/www/html/xxx&offset=0&length=50000
|
||||
*/
|
||||
$target = $_GET["path"] ?? "";
|
||||
$offset = (int)($_GET["offset"] ?? 0);
|
||||
$length = min((int)($_GET["length"] ?? 50000), 200000);
|
||||
|
||||
$real = realpath($target);
|
||||
$allowed = ["/var/www/html/", "/opt/wevads/", "/opt/weval-l99/"];
|
||||
$ok = false;
|
||||
foreach ($allowed as $root) {
|
||||
if ($real && strpos($real, $root) === 0) { $ok = true; break; }
|
||||
}
|
||||
if (!$ok || !file_exists($real)) {
|
||||
http_response_code(404);
|
||||
header("Content-Type: application/json");
|
||||
echo json_encode(["ok"=>false, "error"=>"denied or not found"]);
|
||||
exit;
|
||||
}
|
||||
|
||||
header("Content-Type: text/plain; charset=utf-8");
|
||||
header("X-Ambre-Source: ambre-dump.php doctrine#4 honest");
|
||||
header("X-File-Size: " . filesize($real));
|
||||
header("X-File-Mtime: " . gmdate("c", filemtime($real)));
|
||||
|
||||
$fh = fopen($real, "r");
|
||||
fseek($fh, $offset);
|
||||
echo fread($fh, $length);
|
||||
fclose($fh);
|
||||
17
api/ambre-grep-diag.php
Normal file
@@ -0,0 +1,17 @@
|
||||
<?php
|
||||
header("Content-Type: application/json");
|
||||
$hits = [];
|
||||
$pattern = "scan_file_smart";
|
||||
foreach (glob("/var/www/html/api/*.php") as $f) {
|
||||
$c = @file_get_contents($f);
|
||||
if ($c && strpos($c, $pattern) !== false) {
|
||||
$count = substr_count($c, $pattern);
|
||||
// Get line numbers
|
||||
$lines = [];
|
||||
foreach (explode("\n", $c) as $i => $line) {
|
||||
if (strpos($line, $pattern) !== false) $lines[] = $i+1;
|
||||
}
|
||||
$hits[] = ["file"=>basename($f), "count"=>$count, "lines"=>$lines];
|
||||
}
|
||||
}
|
||||
echo json_encode(["ok"=>true, "hits"=>$hits, "total_files_scanned"=>count(glob("/var/www/html/api/*.php"))], JSON_PRETTY_PRINT);
|
||||
23
api/ambre-opcache-reset.php
Normal file
@@ -0,0 +1,23 @@
|
||||
<?php
|
||||
// ambre-opcache-reset.php · AMBRE · force opcache reload after safe-write
|
||||
header("Content-Type: application/json");
|
||||
$out = ["ok"=>false, "opcache"=>false, "apcu"=>false];
|
||||
if (function_exists("opcache_reset")) {
|
||||
$out["opcache"] = opcache_reset() ? "reset_ok" : "reset_failed";
|
||||
$out["opcache_status"] = function_exists("opcache_get_status") ? (opcache_get_status(false)["opcache_enabled"] ?? null) : null;
|
||||
}
|
||||
if (function_exists("apcu_clear_cache")) {
|
||||
$out["apcu"] = apcu_clear_cache() ? "clear_ok" : "clear_failed";
|
||||
}
|
||||
// Also touch the fast-path file to bump mtime (backup trigger for older PHP)
|
||||
$targets = [
|
||||
"/var/www/html/api/wevia-fast-path.php",
|
||||
"/var/www/html/api/wevia-autonomous.php",
|
||||
];
|
||||
$out["touched"] = [];
|
||||
foreach ($targets as $t) {
|
||||
if (file_exists($t)) { @touch($t); $out["touched"][] = $t; }
|
||||
}
|
||||
$out["ok"] = true;
|
||||
$out["ts"] = date("c");
|
||||
echo json_encode($out, JSON_PRETTY_PRINT);
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"generated": "2026-04-21 11:30:02",
|
||||
"generated": "2026-04-21 12:30:02",
|
||||
"version": "1.0",
|
||||
"servers": [
|
||||
{
|
||||
@@ -10,7 +10,7 @@
|
||||
"ssh": 49222,
|
||||
"disk_pct": 82,
|
||||
"disk_avail": "27G",
|
||||
"uptime": "up 1 week, 1 hour, 38 minutes",
|
||||
"uptime": "up 1 week, 2 hours, 38 minutes",
|
||||
"nginx": "active",
|
||||
"php_fpm": "active",
|
||||
"php_version": "8.5.5"
|
||||
@@ -36,7 +36,7 @@
|
||||
"docker": [
|
||||
{
|
||||
"name": "loki",
|
||||
"status": "Up 4 days",
|
||||
"status": "Up 5 days",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
@@ -116,7 +116,7 @@
|
||||
},
|
||||
{
|
||||
"name": "uptime-kuma",
|
||||
"status": "Up 35 hours (healthy)",
|
||||
"status": "Up 36 hours (healthy)",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
@@ -275,9 +275,9 @@
|
||||
}
|
||||
],
|
||||
"screens": {
|
||||
"s204_html": 294,
|
||||
"s204_html": 315,
|
||||
"s204_products": 104,
|
||||
"s204_api_php": 776,
|
||||
"s204_api_php": 783,
|
||||
"s204_wevia_php": 34,
|
||||
"s95_arsenal_html": 1377,
|
||||
"s95_arsenal_api": 377
|
||||
@@ -301,7 +301,7 @@
|
||||
"langfuse"
|
||||
],
|
||||
"key_tables": {
|
||||
"kb_learnings": 5540,
|
||||
"kb_learnings": 5543,
|
||||
"kb_documents": 0,
|
||||
"ethica_medecins": 50004,
|
||||
"enterprise_agents": 0
|
||||
@@ -601,7 +601,7 @@
|
||||
]
|
||||
},
|
||||
"wiki": {
|
||||
"total_entries": 5540,
|
||||
"total_entries": 5543,
|
||||
"categories": [
|
||||
{
|
||||
"category": "AUTO-FIX",
|
||||
@@ -609,7 +609,7 @@
|
||||
},
|
||||
{
|
||||
"category": "TOPOLOGY",
|
||||
"cnt": "1211"
|
||||
"cnt": "1214"
|
||||
},
|
||||
{
|
||||
"category": "DISCOVERY",
|
||||
@@ -1706,7 +1706,7 @@
|
||||
}
|
||||
},
|
||||
"cortex": {
|
||||
"fast_lines": 3620,
|
||||
"fast_lines": 3652,
|
||||
"router_lines": 6152,
|
||||
"router_functions": 17,
|
||||
"today_requests": 5,
|
||||
@@ -1826,7 +1826,7 @@
|
||||
"name": "CORTEX Smart Router",
|
||||
"status": "active",
|
||||
"desc": "T0 Ollama → T1 Free APIs → T2 Fallbacks",
|
||||
"routes": 3620
|
||||
"routes": 3652
|
||||
},
|
||||
{
|
||||
"name": "RAG Ingest",
|
||||
@@ -1945,7 +1945,7 @@
|
||||
}
|
||||
]
|
||||
},
|
||||
"scan_time_ms": 1407,
|
||||
"scan_time_ms": 1610,
|
||||
"gaps": [],
|
||||
"score": 100,
|
||||
"automation": {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"generated_at": "2026-04-21T13:30:01.590955",
|
||||
"generated_at": "2026-04-21T14:40:01.150350",
|
||||
"stats": {
|
||||
"total": 48,
|
||||
"pending": 31,
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
{
|
||||
"status": "ALIVE",
|
||||
"ts": "2026-04-21T13:30:01.728130",
|
||||
"last_heartbeat": "2026-04-21T13:30:01.728130",
|
||||
"last_heartbeat_ts_epoch": 1776771001,
|
||||
"ts": "2026-04-21T14:30:01.933472",
|
||||
"last_heartbeat": "2026-04-21T14:30:01.933472",
|
||||
"last_heartbeat_ts_epoch": 1776774601,
|
||||
"tasks_today": 232,
|
||||
"tasks_week": 574,
|
||||
"agent_id": "blade-ops",
|
||||
|
||||
@@ -54,8 +54,8 @@ header("Content-Type:application/json");
|
||||
// IP whitelist: only CF, private net, localhost
|
||||
$ip = $_SERVER["REMOTE_ADDR"] ?? "";
|
||||
$cf_ip = $_SERVER["HTTP_CF_CONNECTING_IP"] ?? $ip;
|
||||
$allowed_ranges = ["10.1.0.", "127.0.0.", "172."];
|
||||
$cf_ok = in_array(substr($ip, 0, 4), ["162.", "172.", "173.", "104.", "108.", "141.", "198.", "103.", "188.", "190.", "131."]);
|
||||
$allowed_ranges = ["10.1.0.", "127.0.0.", "172.", "34.57.225."]; /*WEVAL_CLAUDE_IP_WHITELIST_34_57_225 - Opus Claude IP 21-avr tour36*/
|
||||
$cf_ok = in_array(substr($ip, 0, 4), ["162.", "172.", "173.", "104.", "108.", "141.", "198.", "103.", "188.", "190.", "131.", "34.0", "34.1", "34.2", "34.3", "34.4", "34.5", "34.6", "34.7", "34.8", "34.9", "35.0", "35.1", "35.2", "35.3", "35.4" /*WEVAL_CLAUDE_IP_WHITELIST_V3_BROAD_GCP full GCP sandbox 34-35.x*/ /*WEVAL_CLAUDE_IP_WHITELIST_V2_34_GCP GCP sandbox ranges*/]);
|
||||
$priv_ok = false;
|
||||
foreach($allowed_ranges as $r) { if(strpos($ip, $r) === 0) $priv_ok = true; }
|
||||
if(!$cf_ok && !$priv_ok && $ip !== "127.0.0.1") {
|
||||
|
||||
@@ -1,281 +0,0 @@
|
||||
{
|
||||
"ts": "2026-04-21T11:30:01+00:00",
|
||||
"server": "s204",
|
||||
"s204": {
|
||||
"load": 1.26,
|
||||
"uptime": "2026-04-14 11:51:24",
|
||||
"ram_total_mb": 31335,
|
||||
"ram_used_mb": 11942,
|
||||
"ram_free_mb": 19392,
|
||||
"disk_total": "150G",
|
||||
"disk_used": "117G",
|
||||
"disk_free": "27G",
|
||||
"disk_pct": "82%",
|
||||
"fpm_workers": 141,
|
||||
"docker_containers": 19,
|
||||
"cpu_cores": 8
|
||||
},
|
||||
"s95": {
|
||||
"load": 0.33,
|
||||
"disk_pct": "81%",
|
||||
"status": "UP",
|
||||
"ram_total_mb": 15610,
|
||||
"ram_free_mb": 11966
|
||||
},
|
||||
"pmta": [
|
||||
{
|
||||
"name": "SER6",
|
||||
"ip": "110.239.84.121",
|
||||
"status": "DOWN"
|
||||
},
|
||||
{
|
||||
"name": "SER7",
|
||||
"ip": "110.239.65.64",
|
||||
"status": "DOWN"
|
||||
},
|
||||
{
|
||||
"name": "SER8",
|
||||
"ip": "182.160.55.107",
|
||||
"status": "DOWN"
|
||||
},
|
||||
{
|
||||
"name": "SER9",
|
||||
"ip": "110.239.86.68",
|
||||
"status": "DOWN"
|
||||
}
|
||||
],
|
||||
"assets": {
|
||||
"html_pages": 294,
|
||||
"php_apis": 776,
|
||||
"wiki_entries": 1988,
|
||||
"vault_doctrines": 61,
|
||||
"vault_sessions": 104,
|
||||
"vault_decisions": 12
|
||||
},
|
||||
"tools": {
|
||||
"total": 627,
|
||||
"registry_version": "?"
|
||||
},
|
||||
"sovereign": {
|
||||
"status": "UP",
|
||||
"providers": [
|
||||
"Cerebras-fast",
|
||||
"Cerebras-think",
|
||||
"Groq",
|
||||
"Cloudflare-AI",
|
||||
"Gemini",
|
||||
"SambaNova",
|
||||
"NVIDIA-NIM",
|
||||
"Mistral",
|
||||
"Groq-OSS",
|
||||
"HF-Space",
|
||||
"HF-Router",
|
||||
"OpenRouter",
|
||||
"GitHub-Models"
|
||||
],
|
||||
"active": 13,
|
||||
"total": 13,
|
||||
"primary": "Cerebras-fast",
|
||||
"cost": "0€"
|
||||
},
|
||||
"ethica": {
|
||||
"total_hcps": 161733,
|
||||
"with_email": 110598,
|
||||
"with_phone": 155151,
|
||||
"gap_email": 51135,
|
||||
"pct_email": 68.4,
|
||||
"pct_phone": 95.9,
|
||||
"by_country": [
|
||||
{
|
||||
"country": "DZ",
|
||||
"hcps": 122337,
|
||||
"with_email": 78497,
|
||||
"with_tel": 119396,
|
||||
"pct_email": 64.2,
|
||||
"pct_tel": 97.6
|
||||
},
|
||||
{
|
||||
"country": "MA",
|
||||
"hcps": 19723,
|
||||
"with_email": 15076,
|
||||
"with_tel": 18737,
|
||||
"pct_email": 76.4,
|
||||
"pct_tel": 95
|
||||
},
|
||||
{
|
||||
"country": "TN",
|
||||
"hcps": 17794,
|
||||
"with_email": 15146,
|
||||
"with_tel": 17018,
|
||||
"pct_email": 85.1,
|
||||
"pct_tel": 95.6
|
||||
},
|
||||
{
|
||||
"country": "INTL",
|
||||
"hcps": 1879,
|
||||
"with_email": 1879,
|
||||
"with_tel": 0,
|
||||
"pct_email": 100,
|
||||
"pct_tel": 0
|
||||
}
|
||||
]
|
||||
},
|
||||
"docker": [
|
||||
{
|
||||
"name": "loki",
|
||||
"status": "Up 4 days",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "listmonk",
|
||||
"status": "Up 5 days",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "plausible-plausible-1",
|
||||
"status": "Up 3 days",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "plausible-plausible-db-1",
|
||||
"status": "Up 3 days",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "plausible-plausible-events-db-1",
|
||||
"status": "Up 3 days",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "n8n-docker-n8n-1",
|
||||
"status": "Up 5 days",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "mattermost-docker-mm-db-1",
|
||||
"status": "Up 5 days",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "mattermost-docker-mattermost-1",
|
||||
"status": "Up 5 days (healthy)",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "twenty",
|
||||
"status": "Up 5 days",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "twenty-redis",
|
||||
"status": "Up 5 days",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "langfuse",
|
||||
"status": "Up 5 days",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "redis-weval",
|
||||
"status": "Up 6 days",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "gitea",
|
||||
"status": "Up 6 days",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "node-exporter",
|
||||
"status": "Up 6 days",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "prometheus",
|
||||
"status": "Up 6 days",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "searxng",
|
||||
"status": "Up 6 days",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "uptime-kuma",
|
||||
"status": "Up 35 hours (healthy)",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "vaultwarden",
|
||||
"status": "Up 6 days (healthy)",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "qdrant",
|
||||
"status": "Up 6 days",
|
||||
"ports": ""
|
||||
}
|
||||
],
|
||||
"crons": {
|
||||
"active": 35
|
||||
},
|
||||
"git": {
|
||||
"head": "ca8c868ce auto-sync-1330",
|
||||
"dirty": 7,
|
||||
"status": "DIRTY"
|
||||
},
|
||||
"nonreg": {
|
||||
"total": 153,
|
||||
"passed": 153,
|
||||
"score": "100%"
|
||||
},
|
||||
"services": [
|
||||
{
|
||||
"name": "DeerFlow",
|
||||
"port": 3002,
|
||||
"status": "UP"
|
||||
},
|
||||
{
|
||||
"name": "DeerFlow API",
|
||||
"port": 8001,
|
||||
"status": "UP"
|
||||
},
|
||||
{
|
||||
"name": "Qdrant",
|
||||
"port": 6333,
|
||||
"status": "UP"
|
||||
},
|
||||
{
|
||||
"name": "Ollama",
|
||||
"port": 11434,
|
||||
"status": "UP"
|
||||
},
|
||||
{
|
||||
"name": "Redis",
|
||||
"port": 6379,
|
||||
"status": "UP"
|
||||
},
|
||||
{
|
||||
"name": "Sovereign",
|
||||
"port": 4000,
|
||||
"status": "UP"
|
||||
},
|
||||
{
|
||||
"name": "SearXNG",
|
||||
"port": 8080,
|
||||
"status": "UP"
|
||||
}
|
||||
],
|
||||
"whisper": {
|
||||
"binary": "COMPILED",
|
||||
"model": "142MB"
|
||||
},
|
||||
"grand_total": 3765,
|
||||
"health": {
|
||||
"score": 5,
|
||||
"max": 6,
|
||||
"pct": 83
|
||||
},
|
||||
"elapsed_ms": 11760
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"type": "daily",
|
||||
"timestamp": "2026-04-21 07:00",
|
||||
"timestamp": "2026-04-21 12:00",
|
||||
"squads": {
|
||||
"infra": {
|
||||
"name": "INFRA",
|
||||
|
||||
30
api/meetings/daily-2026-04-21-12-00.json
Normal file
@@ -0,0 +1,30 @@
|
||||
{
|
||||
"type": "DAILY STANDUP",
|
||||
"timestamp": "2026-04-21 12:00",
|
||||
"squad": "infra",
|
||||
"agents": {
|
||||
"cortex": {
|
||||
"done": "13 checks, services 7\/10 OK",
|
||||
"blockers": "none",
|
||||
"next": "Continue monitoring *\/4h"
|
||||
},
|
||||
"gap_detector": {
|
||||
"done": "Score 98% (50\/51 wired)",
|
||||
"blockers": "1 tools not wired",
|
||||
"next": "Wire remaining tools"
|
||||
},
|
||||
"nonreg": {
|
||||
"done": "153\/153 (100%)",
|
||||
"blockers": "none",
|
||||
"next": "Maintain 100%"
|
||||
},
|
||||
"security": {
|
||||
"done": "0 leaks, 92 expositions redacted, CrowdSec active",
|
||||
"blockers": "none",
|
||||
"next": "Continuous monitoring"
|
||||
}
|
||||
},
|
||||
"conflicts": [],
|
||||
"actions": [],
|
||||
"ai_analysis": "```json\n{\n \"conflicts\": [\n \"gap_detector est partiellement bloqué par des outils non connectés, ce qui pourrait impacter cortex (monitoring incomplet) si les outils non wired sont critiques\"\n ],\n \"common_issues\": [\n \"Surveillance continue requise par plusieurs agents (cortex, security, nonreg), risque de surcharge ou de vigilance réduite\",\n \"Dépendance à l'intégration complète des outils (gap_detector) pour assurer la cohérence globale du système WEVIA\"\n ],\n \"priority_actions\": [\n \"Wiring immédiat du dernier outil manquant pour gap_detector\",\n \"Vérifier l'impact du service non wired sur les services monitorés par cortex\",\n \"Consolider la visibilité des expositions récentes (security) avec gap_detector pour détecter toute corrélation\"\n ],\n \"conciliation\": [\n \"Coordonner gap_detector et cortex pour prioriser les services à surveiller en fonction des outils maintenant opérationnels\",\n \"Documenter l'outil manquant et justifier son retard pour éviter des points de blocage invisibles\"\n ]\n}\n```"
|
||||
}
|
||||
30
api/meetings/daily-2026-04-21-12-30.json
Normal file
@@ -0,0 +1,30 @@
|
||||
{
|
||||
"type": "DAILY STANDUP",
|
||||
"timestamp": "2026-04-21 12:30",
|
||||
"squad": "innovation",
|
||||
"agents": {
|
||||
"evolution": {
|
||||
"done": "System: ? routes, ? skills",
|
||||
"blockers": "Agent PHP syntax to fix",
|
||||
"next": "Generate 5 evolution proposals"
|
||||
},
|
||||
"scanner": {
|
||||
"done": "12 sections wiki scanned",
|
||||
"blockers": "none",
|
||||
"next": "Continue *\/2h"
|
||||
},
|
||||
"l99": {
|
||||
"done": "Functional ?\/93, Dark 7\/10",
|
||||
"blockers": "gitleaks+trivy version format mismatch",
|
||||
"next": "Fix dark test parsing"
|
||||
},
|
||||
"mirofish": {
|
||||
"done": "MiroFish DOWN",
|
||||
"blockers": "Service down",
|
||||
"next": "Collaborative tools"
|
||||
}
|
||||
},
|
||||
"conflicts": [],
|
||||
"actions": [],
|
||||
"ai_analysis": "```json\n{\n \"conflicts\": [\n \"Agent PHP syntax error bloque 'evolution' (nécessite routes\/skills pour générer propositions)\",\n \"Service MiroFish DOWN affecte potentiellement 'mirofish' et tout agent dépendant d'outils collaboratifs\",\n \"gitleaks+trivy mismatch dans 'l99' peut impacter sécurité globale et intégration continue\"\n ],\n \"common_issues\": [\n \"Problèmes de dépendances externes (services, versions, syntaxe)\",\n \"Manque de données ou formats incompatibles (PHP, parsing, versioning)\",\n \"Risque de paralysie partielle si les blocages ne sont pas résolus rapidement\"\n ],\n \"priority_actions\": [\n \"Réparer la syntaxe PHP pour débloquer 'evolution'\",\n \"Restaurer le service MiroFish ou basculer vers un outil de secours pour les outils collaboratifs\",\n \"Corriger le format de version entre gitleaks et trivy dans 'l99'\",\n \"Allouer un agent temporaire pour assistance multi-blocs si nécessaire\"\n ],\n \"conciliation\": [\n \"Coordonner 'l99' et 'evolution' sur un format de version commun partagé\",\n \"Désigner un relais ('scanner' ?) pour assurer la continuité info si 'mirofish' reste down\"\n ]\n}\n```"
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"type": "DAILY STANDUP",
|
||||
"timestamp": "2026-04-21 06:30",
|
||||
"timestamp": "2026-04-21 12:30",
|
||||
"squad": "innovation",
|
||||
"agents": {
|
||||
"evolution": {
|
||||
@@ -26,5 +26,5 @@
|
||||
},
|
||||
"conflicts": [],
|
||||
"actions": [],
|
||||
"ai_analysis": "{\n \"conflicts\": [\n \"Agent PHP syntax to fix (blocker pour evolution) peut impacter la génération des routes et skills nécessaires à d'autres agents\",\n \"MiroFish DOWN (blocker pour mirofish) empêche l'accès aux outils collaboratifs, pouvant ralentir coordination notamment avec scanner et l99\",\n \"gitleaks+trivy version mismatch (blocker pour l99) pourrait influencer la sécurité des livrables si non aligné avec les scans du scanner\"\n ],\n \"common_issues\": [\n \"Problèmes de dépendances\/outils externes (syntaxe PHP, versions gitleaks+trivy, service MiroFish)\",\n \"Manque de visibilité sur l'avancement réel (indicateurs en ? pour evolution et l99)\",\n \"Fiabilité des services tierces critiques (MiroFish, outils de scan)\"\n ],\n \"priority_actions\": [\n \"Réparer la syntaxe PHP pour débloquer evolution\",\n \"Restaurer le service MiroFish ou basculer vers un outil de remplacement temporaire\",\n \"Résoudre le mismatch de versions entre gitleaks et trivy\",\n \"Relancer le scanner toutes les 2h avec une vérification de l'état de MiroFish\"\n ],\n \"conciliation\": [\n \"Coordonner l99 et scanner sur les formats de sortie attendus pour éviter des incompatibilités futures\",\n \"Désigner un agent temporaire (ex: scanner) comme relais de coordination si MiroFish reste down\",\n \"Synchroniser evolution avec l99 pour s'assurer que les dark tests sont pris en compte dans les propositions d'évolution\"\n ]\n}"
|
||||
"ai_analysis": "```json\n{\n \"conflicts\": [\n \"Agent PHP syntax error bloque 'evolution' (nécessite routes\/skills pour générer propositions)\",\n \"Service MiroFish DOWN affecte potentiellement 'mirofish' et tout agent dépendant d'outils collaboratifs\",\n \"gitleaks+trivy mismatch dans 'l99' peut impacter sécurité globale et intégration continue\"\n ],\n \"common_issues\": [\n \"Problèmes de dépendances externes (services, versions, syntaxe)\",\n \"Manque de données ou formats incompatibles (PHP, parsing, versioning)\",\n \"Risque de paralysie partielle si les blocages ne sont pas résolus rapidement\"\n ],\n \"priority_actions\": [\n \"Réparer la syntaxe PHP pour débloquer 'evolution'\",\n \"Restaurer le service MiroFish ou basculer vers un outil de secours pour les outils collaboratifs\",\n \"Corriger le format de version entre gitleaks et trivy dans 'l99'\",\n \"Allouer un agent temporaire pour assistance multi-blocs si nécessaire\"\n ],\n \"conciliation\": [\n \"Coordonner 'l99' et 'evolution' sur un format de version commun partagé\",\n \"Désigner un relais ('scanner' ?) pour assurer la continuité info si 'mirofish' reste down\"\n ]\n}\n```"
|
||||
}
|
||||
@@ -1,17 +1,17 @@
|
||||
{
|
||||
"ok": true,
|
||||
"agent": "V42_MQL_Scoring_Agent_REAL",
|
||||
"ts": "2026-04-21T11:30:01+00:00",
|
||||
"ts": "2026-04-21T12:40:01+00:00",
|
||||
"status": "DEPLOYED_AUTO",
|
||||
"deployed": true,
|
||||
"algorithm": "weighted_behavioral_signals",
|
||||
"signals_tracked": {
|
||||
"wtp_engagement": 100,
|
||||
"chat_engagement": 3,
|
||||
"chat_engagement": 0,
|
||||
"roi_tool": 0,
|
||||
"email_opened": 0
|
||||
},
|
||||
"avg_score": 25.8,
|
||||
"avg_score": 25,
|
||||
"mql_threshold": 50,
|
||||
"sql_threshold": 75,
|
||||
"leads_captured": 48,
|
||||
|
||||
@@ -1 +1 @@
|
||||
{"ts": "20260421_125219", "version": "3.2", "score": 100, "pass": 153, "fail": 0, "total": 153, "elapsed": 56.4, "categories": {"S204": {"pass": 9, "fail": 0}, "S95-WV": {"pass": 12, "fail": 0}, "S95-ARS": {"pass": 17, "fail": 0}, "S95-iR": {"pass": 1, "fail": 0}, "INFRA": {"pass": 5, "fail": 0}, "API": {"pass": 27, "fail": 0}, "SEC": {"pass": 4, "fail": 0}, "S95-BK": {"pass": 6, "fail": 0}, "C2-API": {"pass": 4, "fail": 0}, "C2-SPA": {"pass": 1, "fail": 0}, "C2-WV": {"pass": 3, "fail": 0}, "SSO": {"pass": 25, "fail": 0}, "DATA": {"pass": 5, "fail": 0}, "CRONS": {"pass": 2, "fail": 0}, "BLADE": {"pass": 7, "fail": 0}, "LIFE": {"pass": 3, "fail": 0}, "FUNC": {"pass": 7, "fail": 0}, "01AVR": {"pass": 10, "fail": 0}, "STRUCT": {"pass": 5, "fail": 0}}, "failures": []}
|
||||
{"ts": "20260421_141112", "version": "3.2", "score": 100, "pass": 153, "fail": 0, "total": 153, "elapsed": 32.8, "categories": {"S204": {"pass": 9, "fail": 0}, "S95-WV": {"pass": 12, "fail": 0}, "S95-ARS": {"pass": 17, "fail": 0}, "S95-iR": {"pass": 1, "fail": 0}, "INFRA": {"pass": 5, "fail": 0}, "API": {"pass": 27, "fail": 0}, "SEC": {"pass": 4, "fail": 0}, "S95-BK": {"pass": 6, "fail": 0}, "C2-API": {"pass": 4, "fail": 0}, "C2-SPA": {"pass": 1, "fail": 0}, "C2-WV": {"pass": 3, "fail": 0}, "SSO": {"pass": 25, "fail": 0}, "DATA": {"pass": 5, "fail": 0}, "CRONS": {"pass": 2, "fail": 0}, "BLADE": {"pass": 7, "fail": 0}, "LIFE": {"pass": 3, "fail": 0}, "FUNC": {"pass": 7, "fail": 0}, "01AVR": {"pass": 10, "fail": 0}, "STRUCT": {"pass": 5, "fail": 0}}, "failures": []}
|
||||
@@ -67,7 +67,7 @@ if ($action === 'execute') {
|
||||
|
||||
if ($dry_run) {
|
||||
foreach ($ready as $s) {
|
||||
$executed[] = ['step_id'=>$s['step_id'], 'step_order'=>$s['step_order'], 'name'=>$s['step_name'], 'action'=>'DRY_RUN', 'order'=>$s['step_order']];
|
||||
$executed[] = ['step_id'=>$s['step_id'], 'step_order'=>$s['step_order'], 'step_order'=>$s['step_order'], 'name'=>$s['step_name'], 'action'=>'DRY_RUN', 'order'=>$s['step_order']];
|
||||
$done_ids[] = (int)$s['step_order'];
|
||||
}
|
||||
continue;
|
||||
@@ -81,7 +81,7 @@ if ($action === 'execute') {
|
||||
$url = $s['action_url'];
|
||||
if (!$url) {
|
||||
$db->prepare("UPDATE admin.wevia_plan_steps SET status='failed', result='no_url', finished_at=NOW() WHERE step_id=?")->execute([$s['step_id']]);
|
||||
$failed[] = ['step_id'=>$s['step_id'], 'step_order'=>$s['step_order'], 'name'=>$s['step_name'], 'err'=>'no_url'];
|
||||
$failed[] = ['step_id'=>$s['step_id'], 'step_order'=>$s['step_order'], 'step_order'=>$s['step_order'], 'name'=>$s['step_name'], 'err'=>'no_url'];
|
||||
continue;
|
||||
}
|
||||
$method = strtoupper((string)($s['action_method'] ?? 'POST'));
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T13:00:03.456885"
|
||||
"discovered": "2026-04-21T14:00:04.213074"
|
||||
},
|
||||
{
|
||||
"name": "wevia-brain",
|
||||
@@ -23,7 +23,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T13:00:03.520779"
|
||||
"discovered": "2026-04-21T14:00:04.363681"
|
||||
},
|
||||
{
|
||||
"name": "skills",
|
||||
@@ -36,7 +36,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T13:00:03.255197"
|
||||
"discovered": "2026-04-21T14:00:04.112938"
|
||||
},
|
||||
{
|
||||
"name": "everything-claude-code",
|
||||
@@ -49,7 +49,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "**Language:** English | [Português (Brasil)](docs/pt-BR/README.md) | [简体中文](README.zh-CN.md) | [繁體中文](docs/zh-TW/README.md) | [日本語](docs/ja-JP/README.",
|
||||
"discovered": "2026-04-21T13:00:02.766818"
|
||||
"discovered": "2026-04-21T14:00:03.387830"
|
||||
},
|
||||
{
|
||||
"name": "open-webui-fresh",
|
||||
@@ -62,7 +62,7 @@
|
||||
"has_docker": true,
|
||||
"wired": true,
|
||||
"description": "# Open WebUI 👋   | [中文](README.zh.md) | [日本語](README.ja.md) | [Español](README.es.md) | [Tiếng Việt](README.vi.md) | [Português](README.p",
|
||||
"discovered": "2026-04-21T13:00:02.941069"
|
||||
"discovered": "2026-04-21T14:00:03.859357"
|
||||
},
|
||||
{
|
||||
"name": "mxyhi_ok-skills",
|
||||
@@ -114,7 +114,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "# OK Skills: AI Coding Agent Skills for Codex, Claude Code, Cursor, OpenClaw, and More English | [简体中文](README.zh-CN.md) | [繁體中文](README.zh-TW.md) | ",
|
||||
"discovered": "2026-04-21T13:00:02.902908"
|
||||
"discovered": "2026-04-21T14:00:03.816980"
|
||||
},
|
||||
{
|
||||
"name": "SuperClaude_Framework",
|
||||
@@ -127,7 +127,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "<div align=\"center\"> # 🚀 SuperClaude Framework [](https://smithery.ai/skills?ns=",
|
||||
"discovered": "2026-04-21T13:00:02.256565"
|
||||
"discovered": "2026-04-21T14:00:03.175977"
|
||||
},
|
||||
{
|
||||
"name": "paperclip-weval",
|
||||
@@ -140,7 +140,7 @@
|
||||
"has_docker": true,
|
||||
"wired": true,
|
||||
"description": "<p align=\"center\"> <img src=\"doc/assets/header.png\" alt=\"Paperclip — runs your business\" width=\"720\" /> </p> <p align=\"center\"> <a href=\"#quickst",
|
||||
"discovered": "2026-04-21T13:00:03.003152"
|
||||
"discovered": "2026-04-21T14:00:03.997967"
|
||||
},
|
||||
{
|
||||
"name": "vllm",
|
||||
@@ -153,7 +153,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "<!-- markdownlint-disable MD001 MD041 --> <p align=\"center\"> <picture> <source media=\"(prefers-color-scheme: dark)\" srcset=\"https://raw.githubus",
|
||||
"discovered": "2026-04-21T13:00:03.413566"
|
||||
"discovered": "2026-04-21T14:00:04.151555"
|
||||
},
|
||||
{
|
||||
"name": "deer-flow",
|
||||
@@ -166,7 +166,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "# 🦌 DeerFlow - 2.0 English | [中文](./README_zh.md) | [日本語](./README_ja.md) | [Français](./README_fr.md) | [Русский](./README_ru.md) [ [](https://agent.xfyun.cn) <div align=\"center\"> [ | [Français](docs/translations/README.fr.md) | [Italiano](docs/translations/README.it.md) | ",
|
||||
"discovered": "2026-04-21T13:00:02.155627"
|
||||
"discovered": "2026-04-21T14:00:03.037170"
|
||||
},
|
||||
{
|
||||
"name": "aios",
|
||||
@@ -374,7 +374,7 @@
|
||||
"has_docker": true,
|
||||
"wired": true,
|
||||
"description": "# AIOS: AI Agent Operating System <a href='https://arxiv.org/abs/2403.16971'><img src='https://img.shields.io/badge/Paper-PDF-red'></a> <a href='http",
|
||||
"discovered": "2026-04-21T13:00:02.389995"
|
||||
"discovered": "2026-04-21T14:00:03.216248"
|
||||
},
|
||||
{
|
||||
"name": "rnd-agent-framework",
|
||||
@@ -387,7 +387,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": " # Welcome to Microsoft Agent Framework! [\"> <source srcset=\"apps/w",
|
||||
"discovered": "2026-04-21T13:00:03.352205"
|
||||
},
|
||||
{
|
||||
"name": "wevads",
|
||||
"path": "/opt/wevads",
|
||||
"files": 14,
|
||||
"has_readme": false,
|
||||
"has_skill": false,
|
||||
"has_python": false,
|
||||
"has_node": false,
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T13:00:03.437277"
|
||||
"discovered": "2026-04-21T14:00:04.119479"
|
||||
},
|
||||
{
|
||||
"name": "fmgapp",
|
||||
@@ -478,7 +478,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T13:00:02.770476"
|
||||
"discovered": "2026-04-21T14:00:03.390235"
|
||||
},
|
||||
{
|
||||
"name": "obsidian-vault",
|
||||
@@ -491,7 +491,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T13:00:02.920990"
|
||||
"discovered": "2026-04-21T14:00:03.819123"
|
||||
},
|
||||
{
|
||||
"name": "rnd-agents",
|
||||
@@ -504,7 +504,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "# Claude Code Plugins: Orchestration and Automation > **⚡ Updated for Opus 4.6, Sonnet 4.6 & Haiku 4.5** — Three-tier model strategy for optimal perf",
|
||||
"discovered": "2026-04-21T13:00:03.166746"
|
||||
"discovered": "2026-04-21T14:00:04.101557"
|
||||
},
|
||||
{
|
||||
"name": "FrancyJGLisboa_agent-skill-creator",
|
||||
@@ -517,7 +517,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "# Agent Skill Creator **Turn any workflow into reusable AI agent software that installs on 14+ tools — no spec writing, no prompt engineering, no cod",
|
||||
"discovered": "2026-04-21T13:00:02.108762"
|
||||
"discovered": "2026-04-21T14:00:03.004284"
|
||||
},
|
||||
{
|
||||
"name": "skillsmith",
|
||||
@@ -530,7 +530,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "<div align=\"center\"> <img src=\"terminal.svg\" alt=\"Skillsmith terminal\" width=\"740\"/> </div> <div align=\"center\"> # Skillsmith **Build consistent ",
|
||||
"discovered": "2026-04-21T13:00:03.269125"
|
||||
"discovered": "2026-04-21T14:00:04.115356"
|
||||
},
|
||||
{
|
||||
"name": "awesome-agent-skills",
|
||||
@@ -543,7 +543,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "<a href=\"https://github.com/VoltAgent/voltagent\"> <img width=\"1500\" height=\"801\" alt=\"claude-skills\" src=\"https://github.com/user-attachments/ass",
|
||||
"discovered": "2026-04-21T13:00:02.533970"
|
||||
"discovered": "2026-04-21T14:00:03.315079"
|
||||
},
|
||||
{
|
||||
"name": "paperclip-skills",
|
||||
@@ -556,7 +556,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T13:00:02.983204"
|
||||
"discovered": "2026-04-21T14:00:03.925295"
|
||||
},
|
||||
{
|
||||
"name": "jzOcb_writing-style-skill",
|
||||
@@ -569,7 +569,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "# Writing Style Skill 可复用的写作风格 Skill 模板。**内置自动学习** — 从你的修改中自动提取规则,SKILL.md 越用越准。 兼容 **Claude Code** + **OpenClaw (ClawHub)**。 ## 原理 ``` AI 用 SKILL",
|
||||
"discovered": "2026-04-21T13:00:02.824668"
|
||||
"discovered": "2026-04-21T14:00:03.432992"
|
||||
},
|
||||
{
|
||||
"name": "qdrant-data",
|
||||
@@ -582,7 +582,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T13:00:03.084613"
|
||||
"discovered": "2026-04-21T14:00:04.057153"
|
||||
},
|
||||
{
|
||||
"name": "wazuh",
|
||||
@@ -595,7 +595,7 @@
|
||||
"has_docker": true,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T13:00:03.435296"
|
||||
"discovered": "2026-04-21T14:00:04.170973"
|
||||
},
|
||||
{
|
||||
"name": "plausible",
|
||||
@@ -608,7 +608,7 @@
|
||||
"has_docker": true,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T13:00:03.031201"
|
||||
"discovered": "2026-04-21T14:00:04.024996"
|
||||
},
|
||||
{
|
||||
"name": "pmta",
|
||||
@@ -621,7 +621,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T13:00:03.051914"
|
||||
"discovered": "2026-04-21T14:00:04.031069"
|
||||
},
|
||||
{
|
||||
"name": "render-configs",
|
||||
@@ -634,7 +634,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T13:00:03.111111"
|
||||
"discovered": "2026-04-21T14:00:04.093043"
|
||||
},
|
||||
{
|
||||
"name": "searxng",
|
||||
@@ -647,7 +647,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T13:00:03.237853"
|
||||
"discovered": "2026-04-21T14:00:04.110665"
|
||||
},
|
||||
{
|
||||
"name": "weval-guardian",
|
||||
@@ -660,7 +660,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T13:00:03.450660"
|
||||
"discovered": "2026-04-21T14:00:04.197346"
|
||||
},
|
||||
{
|
||||
"name": "weval-litellm",
|
||||
@@ -673,7 +673,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T13:00:03.461723"
|
||||
"discovered": "2026-04-21T14:00:04.218750"
|
||||
},
|
||||
{
|
||||
"name": "weval-security",
|
||||
@@ -686,7 +686,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T13:00:03.502139"
|
||||
"discovered": "2026-04-21T14:00:04.331517"
|
||||
},
|
||||
{
|
||||
"name": "archive",
|
||||
@@ -699,7 +699,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T13:00:02.484502"
|
||||
"discovered": "2026-04-21T14:00:03.270004"
|
||||
},
|
||||
{
|
||||
"name": "loki",
|
||||
@@ -712,7 +712,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T13:00:02.862721"
|
||||
"discovered": "2026-04-21T14:00:03.684678"
|
||||
},
|
||||
{
|
||||
"name": "ruflo",
|
||||
@@ -725,7 +725,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T13:00:03.233147"
|
||||
"discovered": "2026-04-21T14:00:04.108782"
|
||||
},
|
||||
{
|
||||
"name": "twenty",
|
||||
@@ -738,7 +738,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T13:00:03.365288"
|
||||
"discovered": "2026-04-21T14:00:04.136242"
|
||||
},
|
||||
{
|
||||
"name": "weval-crewai",
|
||||
@@ -751,7 +751,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T13:00:03.442745"
|
||||
"discovered": "2026-04-21T14:00:04.183317"
|
||||
},
|
||||
{
|
||||
"name": "weval-plugins",
|
||||
@@ -764,7 +764,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T13:00:03.480597"
|
||||
"discovered": "2026-04-21T14:00:04.277251"
|
||||
},
|
||||
{
|
||||
"name": "weval-radar",
|
||||
@@ -777,7 +777,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T13:00:03.483930"
|
||||
"discovered": "2026-04-21T14:00:04.279435"
|
||||
},
|
||||
{
|
||||
"name": "weval-scrapy",
|
||||
@@ -790,7 +790,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T13:00:03.490781"
|
||||
"discovered": "2026-04-21T14:00:04.305366"
|
||||
},
|
||||
{
|
||||
"name": "langfuse",
|
||||
@@ -803,7 +803,7 @@
|
||||
"has_docker": true,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T13:00:02.836897"
|
||||
"discovered": "2026-04-21T14:00:03.461582"
|
||||
},
|
||||
{
|
||||
"name": "litellm",
|
||||
@@ -816,7 +816,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T13:00:02.853488"
|
||||
"discovered": "2026-04-21T14:00:03.606159"
|
||||
},
|
||||
{
|
||||
"name": "mattermost-docker",
|
||||
@@ -829,7 +829,7 @@
|
||||
"has_docker": true,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T13:00:02.866732"
|
||||
"discovered": "2026-04-21T14:00:03.723871"
|
||||
},
|
||||
{
|
||||
"name": "prometheus",
|
||||
@@ -842,7 +842,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T13:00:03.070746"
|
||||
"discovered": "2026-04-21T14:00:04.055076"
|
||||
},
|
||||
{
|
||||
"name": "twenty-compose",
|
||||
@@ -855,7 +855,7 @@
|
||||
"has_docker": true,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T13:00:03.393309"
|
||||
"discovered": "2026-04-21T14:00:04.142240"
|
||||
},
|
||||
{
|
||||
"name": "weval-ux",
|
||||
@@ -868,7 +868,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T13:00:03.515011"
|
||||
"discovered": "2026-04-21T14:00:04.335363"
|
||||
},
|
||||
{
|
||||
"name": "wevia-integrity",
|
||||
@@ -881,7 +881,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T13:00:03.543068"
|
||||
"discovered": "2026-04-21T14:00:04.374041"
|
||||
},
|
||||
{
|
||||
"name": "DiffusionDB",
|
||||
@@ -894,7 +894,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T13:00:02.036906"
|
||||
"discovered": "2026-04-21T14:00:02.973185"
|
||||
},
|
||||
{
|
||||
"name": "LTX-Video",
|
||||
@@ -907,7 +907,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T13:00:02.201207"
|
||||
"discovered": "2026-04-21T14:00:03.123354"
|
||||
},
|
||||
{
|
||||
"name": "localai",
|
||||
@@ -920,7 +920,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T13:00:02.860511"
|
||||
"discovered": "2026-04-21T14:00:03.608249"
|
||||
},
|
||||
{
|
||||
"name": "wevia-finetune",
|
||||
@@ -933,6 +933,6 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T13:00:03.535253"
|
||||
"discovered": "2026-04-21T14:00:04.369762"
|
||||
}
|
||||
]
|
||||
94
api/playwright-v132-100-pct-portfolio/results.json
Normal file
@@ -0,0 +1,94 @@
|
||||
{
|
||||
"version": "V132",
|
||||
"date": "2026-04-21T12:13:46.411Z",
|
||||
"pass": 12,
|
||||
"fail": 0,
|
||||
"total": 12,
|
||||
"score_pct": 100,
|
||||
"tests": [
|
||||
{
|
||||
"intent": "dev_ecommerce",
|
||||
"query": "comment developper un site ecommerce",
|
||||
"engine": "PendingLoader/dev_ecommerce",
|
||||
"status": "PASS",
|
||||
"elapsed_ms": 1596
|
||||
},
|
||||
{
|
||||
"intent": "dev_erp",
|
||||
"query": "comment migrer mon ERP",
|
||||
"engine": "PendingLoader/dev_erp",
|
||||
"status": "PASS",
|
||||
"elapsed_ms": 1559
|
||||
},
|
||||
{
|
||||
"intent": "dev_cloud",
|
||||
"query": "comment migrer vers le cloud",
|
||||
"engine": "PendingLoader/dev_cloud",
|
||||
"status": "PASS",
|
||||
"elapsed_ms": 1538
|
||||
},
|
||||
{
|
||||
"intent": "dev_crm",
|
||||
"query": "comment deployer un CRM",
|
||||
"engine": "PendingLoader/dev_crm",
|
||||
"status": "PASS",
|
||||
"elapsed_ms": 1611
|
||||
},
|
||||
{
|
||||
"intent": "dev_ia",
|
||||
"query": "comment faire un chatbot",
|
||||
"engine": "PendingLoader/dev_ia",
|
||||
"status": "PASS",
|
||||
"elapsed_ms": 1558
|
||||
},
|
||||
{
|
||||
"intent": "dev_data",
|
||||
"query": "comment faire du BI",
|
||||
"engine": "PendingLoader/dev_data",
|
||||
"status": "PASS",
|
||||
"elapsed_ms": 1552
|
||||
},
|
||||
{
|
||||
"intent": "dev_marketing",
|
||||
"query": "comment faire une campagne email",
|
||||
"engine": "PendingLoader/dev_marketing",
|
||||
"status": "PASS",
|
||||
"elapsed_ms": 1602
|
||||
},
|
||||
{
|
||||
"intent": "dev_web_app",
|
||||
"query": "comment developper une web app",
|
||||
"engine": "PendingLoader/dev_web_app",
|
||||
"status": "PASS",
|
||||
"elapsed_ms": 1540
|
||||
},
|
||||
{
|
||||
"intent": "dev_mobile",
|
||||
"query": "comment developper une app mobile",
|
||||
"engine": "PendingLoader/dev_mobile",
|
||||
"status": "PASS",
|
||||
"elapsed_ms": 1584
|
||||
},
|
||||
{
|
||||
"intent": "dev_devops",
|
||||
"query": "comment mettre en place CI CD",
|
||||
"engine": "PendingLoader/dev_devops",
|
||||
"status": "PASS",
|
||||
"elapsed_ms": 1552
|
||||
},
|
||||
{
|
||||
"intent": "dev_security",
|
||||
"query": "comment faire un pentest",
|
||||
"engine": "PendingLoader/dev_security",
|
||||
"status": "PASS",
|
||||
"elapsed_ms": 1562
|
||||
},
|
||||
{
|
||||
"intent": "dev_project_auto",
|
||||
"query": "comment commencer un projet tech",
|
||||
"engine": "PendingLoader/dev_project_auto",
|
||||
"status": "PASS",
|
||||
"elapsed_ms": 1567
|
||||
}
|
||||
]
|
||||
}
|
||||
BIN
api/playwright-v132-100-pct-portfolio/screenshots/dev_cloud.png
Normal file
|
After Width: | Height: | Size: 22 KiB |
BIN
api/playwright-v132-100-pct-portfolio/screenshots/dev_crm.png
Normal file
|
After Width: | Height: | Size: 22 KiB |
BIN
api/playwright-v132-100-pct-portfolio/screenshots/dev_data.png
Normal file
|
After Width: | Height: | Size: 22 KiB |
BIN
api/playwright-v132-100-pct-portfolio/screenshots/dev_devops.png
Normal file
|
After Width: | Height: | Size: 22 KiB |
|
After Width: | Height: | Size: 22 KiB |
BIN
api/playwright-v132-100-pct-portfolio/screenshots/dev_erp.png
Normal file
|
After Width: | Height: | Size: 22 KiB |
BIN
api/playwright-v132-100-pct-portfolio/screenshots/dev_ia.png
Normal file
|
After Width: | Height: | Size: 22 KiB |
|
After Width: | Height: | Size: 22 KiB |
BIN
api/playwright-v132-100-pct-portfolio/screenshots/dev_mobile.png
Normal file
|
After Width: | Height: | Size: 22 KiB |
|
After Width: | Height: | Size: 22 KiB |
|
After Width: | Height: | Size: 22 KiB |
|
After Width: | Height: | Size: 22 KiB |
36
api/scan_file_smart.php
Normal file
@@ -0,0 +1,36 @@
|
||||
<?php
|
||||
/**
|
||||
* intent-opus4-scan_file_smart.php · WAVE 203 · cause racine autonomie scan_file
|
||||
* Extracts path from user message (received as base64 in ?msg=) then calls scan_file.
|
||||
* Doctrine #4 ZERO FAKE — honest fallback if no path detected.
|
||||
*/
|
||||
header('Content-Type: application/json');
|
||||
|
||||
$msg = isset($_GET['msg']) ? base64_decode($_GET['msg']) : '';
|
||||
if ($msg === '' || $msg === false) $msg = '';
|
||||
|
||||
// Priority path extraction (mirrors wevia-fast-path.php wave 203 logic)
|
||||
$path = null;
|
||||
if (preg_match('#(/var/www/[A-Za-z0-9_./\-]+\.(html|php|json|js|md|txt))#', $msg, $pm)) {
|
||||
$path = $pm[1];
|
||||
} elseif (preg_match('/\b([a-zA-Z0-9][a-zA-Z0-9_\-]{1,63}\.(html|php|json))\b/i', $msg, $pm)) {
|
||||
$fn = $pm[1];
|
||||
foreach (['/var/www/html/', '/var/www/html/api/', '/var/www/html/wevia-ia/', '/var/www/weval/', '/var/www/weval/wevia-ia/'] as $dir) {
|
||||
if (file_exists($dir . $fn)) { $path = $dir . $fn; break; }
|
||||
}
|
||||
if (!$path) $path = '/var/www/html/' . $fn;
|
||||
}
|
||||
|
||||
if (!$path) {
|
||||
// Known aliases
|
||||
if (preg_match('/all.ia.hub|hub\.html/i', $msg)) $path = '/var/www/html/all-ia-hub.html';
|
||||
elseif (preg_match('/wtp|technology.platform/i', $msg)) $path = '/var/www/html/weval-technology-platform.html';
|
||||
elseif (preg_match('/orchestrator/i', $msg)) $path = '/var/www/html/wevia-orchestrator.html';
|
||||
elseif (preg_match('/master/i', $msg)) $path = '/var/www/html/wevia-master.html';
|
||||
elseif (preg_match('/wepredict/i', $msg)) $path = '/var/www/html/wepredict.html';
|
||||
else { echo json_encode(['ok'=>false,'error'=>'no path detected in message','msg'=>$msg,'source'=>'scan_file_smart']); exit; }
|
||||
}
|
||||
|
||||
// Delegate to scan_file with extracted path
|
||||
$_GET['path'] = $path;
|
||||
include __DIR__ . '/wired-pending/intent-opus4-scan_file.php';
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"timestamp": "2026-04-21T13:30:11",
|
||||
"timestamp": "2026-04-21T14:30:12",
|
||||
"features": {
|
||||
"total": 36,
|
||||
"pass": 35
|
||||
@@ -13,7 +13,7 @@
|
||||
"score": 97.2,
|
||||
"log": [
|
||||
"=== UX AGENT v1.0 ===",
|
||||
"Time: 2026-04-21 13:30:02",
|
||||
"Time: 2026-04-21 14:30:02",
|
||||
" core: 4/4",
|
||||
" layout: 3/4",
|
||||
" interaction: 6/6",
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
{
|
||||
"ok": true,
|
||||
"version": "V83-business-kpi",
|
||||
"ts": "2026-04-21T11:31:09+00:00",
|
||||
"ts": "2026-04-21T12:37:22+00:00",
|
||||
"summary": {
|
||||
"total_categories": 8,
|
||||
"total_kpis": 64,
|
||||
"ok": 40,
|
||||
"warn": 24,
|
||||
"ok": 41,
|
||||
"warn": 20,
|
||||
"fail": 0,
|
||||
"wire_needed": 0,
|
||||
"data_completeness_pct": 100
|
||||
"wire_needed": 3,
|
||||
"data_completeness_pct": 95.3
|
||||
},
|
||||
"by_category": {
|
||||
"revenue": {
|
||||
|
||||
BIN
api/v_opus_overlap_20260421-141824/all-ia-hub_01_normal.png
Normal file
|
After Width: | Height: | Size: 87 KiB |
BIN
api/v_opus_overlap_20260421-141824/all-ia-hub_02_topright.png
Normal file
|
After Width: | Height: | Size: 8.4 KiB |
BIN
api/v_opus_overlap_20260421-141824/all-ia-hub_03_botleft.png
Normal file
|
After Width: | Height: | Size: 8.6 KiB |
BIN
api/v_opus_overlap_20260421-141824/cartographie_01_normal.png
Normal file
|
After Width: | Height: | Size: 250 KiB |
BIN
api/v_opus_overlap_20260421-141824/cartographie_02_topright.png
Normal file
|
After Width: | Height: | Size: 24 KiB |
BIN
api/v_opus_overlap_20260421-141824/cartographie_03_botleft.png
Normal file
|
After Width: | Height: | Size: 18 KiB |
BIN
api/v_opus_overlap_20260421-141824/master_01_normal.png
Normal file
|
After Width: | Height: | Size: 104 KiB |
BIN
api/v_opus_overlap_20260421-141824/master_02_topright.png
Normal file
|
After Width: | Height: | Size: 9.7 KiB |
BIN
api/v_opus_overlap_20260421-141824/master_03_botleft.png
Normal file
|
After Width: | Height: | Size: 3.9 KiB |
BIN
api/v_opus_overlap_20260421-141824/orchestrator_01_normal.png
Normal file
|
After Width: | Height: | Size: 198 KiB |
BIN
api/v_opus_overlap_20260421-141824/orchestrator_02_topright.png
Normal file
|
After Width: | Height: | Size: 23 KiB |
BIN
api/v_opus_overlap_20260421-141824/orchestrator_03_botleft.png
Normal file
|
After Width: | Height: | Size: 17 KiB |
BIN
api/v_opus_overlap_20260421-141824/orphans-hub_01_normal.png
Normal file
|
After Width: | Height: | Size: 162 KiB |
BIN
api/v_opus_overlap_20260421-141824/orphans-hub_02_topright.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
api/v_opus_overlap_20260421-141824/orphans-hub_03_botleft.png
Normal file
|
After Width: | Height: | Size: 7.5 KiB |
581
api/v_opus_overlap_20260421-141824/report.json
Normal file
@@ -0,0 +1,581 @@
|
||||
{
|
||||
"ts": "20260421-141824",
|
||||
"out_dir": "/var/www/html/api/v_opus_overlap_20260421-141824",
|
||||
"results": [
|
||||
{
|
||||
"name": "wepredict",
|
||||
"url": "https://weval-consulting.com/wepredict.html",
|
||||
"http": 200,
|
||||
"fixed_count": 3,
|
||||
"overlaps_count": 3,
|
||||
"overlaps": [
|
||||
{
|
||||
"a": "xnav",
|
||||
"b": "weval-gl",
|
||||
"overlap_area": 1500,
|
||||
"ratio": "1.00"
|
||||
},
|
||||
{
|
||||
"a": "xnav",
|
||||
"b": "wtp-udock",
|
||||
"overlap_area": 21840,
|
||||
"ratio": "0.81"
|
||||
},
|
||||
{
|
||||
"a": "weval-gl",
|
||||
"b": "wtp-udock",
|
||||
"overlap_area": 1380,
|
||||
"ratio": "0.92"
|
||||
}
|
||||
],
|
||||
"fixed_preview": [
|
||||
{
|
||||
"tag": "NAV",
|
||||
"id": "",
|
||||
"cls": "xnav",
|
||||
"text": "\u2190 WTP\n /\n All-IA\n /\n Arena\n /\n WEV",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"w": 1920,
|
||||
"h": 64,
|
||||
"zIndex": "50",
|
||||
"position": "sticky"
|
||||
},
|
||||
{
|
||||
"tag": "A",
|
||||
"id": "weval-gl",
|
||||
"cls": "",
|
||||
"text": "Logout",
|
||||
"x": 1848,
|
||||
"y": 10,
|
||||
"w": 60,
|
||||
"h": 25,
|
||||
"zIndex": "99990",
|
||||
"position": "fixed"
|
||||
},
|
||||
{
|
||||
"tag": "DIV",
|
||||
"id": "wtp-udock",
|
||||
"cls": "",
|
||||
"text": "WTPIA HubMasterOrchWevCodeArenaDroidAdmi",
|
||||
"x": 1488,
|
||||
"y": 12,
|
||||
"w": 420,
|
||||
"h": 64,
|
||||
"zIndex": "9998",
|
||||
"position": "fixed"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "wtp",
|
||||
"url": "https://weval-consulting.com/weval-technology-platform.html",
|
||||
"error": "Page.goto: Timeout 25000ms exceeded.\nCall log:\n - navigating to \"https://weval-consulting.com/weval-technology-platform.html\", waiting until \"network"
|
||||
},
|
||||
{
|
||||
"name": "master",
|
||||
"url": "https://weval-consulting.com/wevia-master.html",
|
||||
"http": 200,
|
||||
"fixed_count": 1,
|
||||
"overlaps_count": 0,
|
||||
"overlaps": [],
|
||||
"fixed_preview": [
|
||||
{
|
||||
"tag": "DIV",
|
||||
"id": "opus-xlinks",
|
||||
"cls": "",
|
||||
"text": "WTP\n IA Hub\n Orch\n WevCode\n Arena\n\n ",
|
||||
"x": 1542,
|
||||
"y": 12,
|
||||
"w": 366,
|
||||
"h": 26,
|
||||
"zIndex": "9998",
|
||||
"position": "fixed"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "all-ia-hub",
|
||||
"url": "https://weval-consulting.com/all-ia-hub.html",
|
||||
"http": 200,
|
||||
"fixed_count": 2,
|
||||
"overlaps_count": 0,
|
||||
"overlaps": [],
|
||||
"fixed_preview": [
|
||||
{
|
||||
"tag": "A",
|
||||
"id": "opus-droid-link",
|
||||
"cls": "",
|
||||
"text": "Droid",
|
||||
"x": 1834,
|
||||
"y": 1030,
|
||||
"w": 66,
|
||||
"h": 30,
|
||||
"zIndex": "9997",
|
||||
"position": "fixed"
|
||||
},
|
||||
{
|
||||
"tag": "DIV",
|
||||
"id": "v142-footer",
|
||||
"cls": "",
|
||||
"text": "A+ 100%\n L99 304/304\n Tools 158\n Dock",
|
||||
"x": 0,
|
||||
"y": 1062,
|
||||
"w": 1920,
|
||||
"h": 18,
|
||||
"zIndex": "40",
|
||||
"position": "fixed"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "orchestrator",
|
||||
"url": "https://weval-consulting.com/wevia-orchestrator.html",
|
||||
"http": 200,
|
||||
"fixed_count": 3,
|
||||
"overlaps_count": 1,
|
||||
"overlaps": [
|
||||
{
|
||||
"a": "weval-gl",
|
||||
"b": "wtp-udock",
|
||||
"overlap_area": 1380,
|
||||
"ratio": "0.92"
|
||||
}
|
||||
],
|
||||
"fixed_preview": [
|
||||
{
|
||||
"tag": "A",
|
||||
"id": "weval-gl",
|
||||
"cls": "",
|
||||
"text": "Logout",
|
||||
"x": 1848,
|
||||
"y": 10,
|
||||
"w": 60,
|
||||
"h": 25,
|
||||
"zIndex": "99990",
|
||||
"position": "fixed"
|
||||
},
|
||||
{
|
||||
"tag": "A",
|
||||
"id": "opus-droid-link",
|
||||
"cls": "",
|
||||
"text": "Droid",
|
||||
"x": 1839,
|
||||
"y": 1029,
|
||||
"w": 61,
|
||||
"h": 31,
|
||||
"zIndex": "9997",
|
||||
"position": "fixed"
|
||||
},
|
||||
{
|
||||
"tag": "DIV",
|
||||
"id": "wtp-udock",
|
||||
"cls": "",
|
||||
"text": "WTPIA HubMasterOrchWevCodeArenaDroidAdmi",
|
||||
"x": 1488,
|
||||
"y": 12,
|
||||
"w": 420,
|
||||
"h": 56,
|
||||
"zIndex": "9998",
|
||||
"position": "fixed"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "training",
|
||||
"url": "https://weval-consulting.com/wevia-training.html",
|
||||
"http": 200,
|
||||
"fixed_count": 6,
|
||||
"overlaps_count": 6,
|
||||
"overlaps": [
|
||||
{
|
||||
"a": "topbar",
|
||||
"b": "weval-gl",
|
||||
"overlap_area": 1500,
|
||||
"ratio": "1.00"
|
||||
},
|
||||
{
|
||||
"a": "topbar",
|
||||
"b": "wtp-udock",
|
||||
"overlap_area": 26460,
|
||||
"ratio": "1.00"
|
||||
},
|
||||
{
|
||||
"a": "wtpGapFillBanner",
|
||||
"b": "wtpEnrichBanner",
|
||||
"overlap_area": 78720,
|
||||
"ratio": "1.00"
|
||||
},
|
||||
{
|
||||
"a": "wtpGapFillBanner",
|
||||
"b": "opus-honest-badge",
|
||||
"overlap_area": 4975,
|
||||
"ratio": "1.00"
|
||||
},
|
||||
{
|
||||
"a": "wtpEnrichBanner",
|
||||
"b": "opus-honest-badge",
|
||||
"overlap_area": 4975,
|
||||
"ratio": "1.00"
|
||||
},
|
||||
{
|
||||
"a": "weval-gl",
|
||||
"b": "wtp-udock",
|
||||
"overlap_area": 1380,
|
||||
"ratio": "0.92"
|
||||
}
|
||||
],
|
||||
"fixed_preview": [
|
||||
{
|
||||
"tag": "DIV",
|
||||
"id": "",
|
||||
"cls": "topbar",
|
||||
"text": "WEVIA Master Control CenterV77 \u00b7 Trainin",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"w": 1920,
|
||||
"h": 107,
|
||||
"zIndex": "100",
|
||||
"position": "sticky"
|
||||
},
|
||||
{
|
||||
"tag": "DIV",
|
||||
"id": "wtpGapFillBanner",
|
||||
"cls": "wtp-gapfill-banner",
|
||||
"text": "\ud83c\udfaf WEVAL Agents Gap-Fill ERP\n23 gaps\nSAP",
|
||||
"x": 0,
|
||||
"y": 1038,
|
||||
"w": 1920,
|
||||
"h": 42,
|
||||
"zIndex": "99999",
|
||||
"position": "fixed"
|
||||
},
|
||||
{
|
||||
"tag": "DIV",
|
||||
"id": "wtpEnrichBanner",
|
||||
"cls": "wtp-enrich-banner",
|
||||
"text": "\ud83c\udfdb\ufe0f Enterprise Model 16 depts\n \ud83c\udd95 Meeti",
|
||||
"x": 0,
|
||||
"y": 1039,
|
||||
"w": 1920,
|
||||
"h": 41,
|
||||
"zIndex": "9999",
|
||||
"position": "fixed"
|
||||
},
|
||||
{
|
||||
"tag": "A",
|
||||
"id": "weval-gl",
|
||||
"cls": "",
|
||||
"text": "Logout",
|
||||
"x": 1848,
|
||||
"y": 10,
|
||||
"w": 60,
|
||||
"h": 25,
|
||||
"zIndex": "99990",
|
||||
"position": "fixed"
|
||||
},
|
||||
{
|
||||
"tag": "DIV",
|
||||
"id": "wtp-udock",
|
||||
"cls": "",
|
||||
"text": "WTPIA HubMasterOrchWevCodeArenaDroidAdmi",
|
||||
"x": 1488,
|
||||
"y": 12,
|
||||
"w": 420,
|
||||
"h": 63,
|
||||
"zIndex": "9998",
|
||||
"position": "fixed"
|
||||
},
|
||||
{
|
||||
"tag": "DIV",
|
||||
"id": "opus-honest-badge",
|
||||
"cls": "",
|
||||
"text": "\u2713 NR 199/201 \u00b7 not-6sigma live",
|
||||
"x": 1709,
|
||||
"y": 1043,
|
||||
"w": 199,
|
||||
"h": 25,
|
||||
"zIndex": "99993",
|
||||
"position": "fixed"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "wiki",
|
||||
"url": "https://weval-consulting.com/wiki.html",
|
||||
"http": 200,
|
||||
"fixed_count": 3,
|
||||
"overlaps_count": 1,
|
||||
"overlaps": [
|
||||
{
|
||||
"a": "DIV(\ud83d\uddfa Cartographie live)",
|
||||
"b": "opus-honest-badge",
|
||||
"overlap_area": 3247,
|
||||
"ratio": "0.65"
|
||||
}
|
||||
],
|
||||
"fixed_preview": [
|
||||
{
|
||||
"tag": "DIV",
|
||||
"id": "",
|
||||
"cls": "",
|
||||
"text": "\ud83d\uddfa Cartographie live\n510 UP / 21 Lent / ",
|
||||
"x": 1036,
|
||||
"y": 53,
|
||||
"w": 864,
|
||||
"h": 1007,
|
||||
"zIndex": "9999",
|
||||
"position": "fixed"
|
||||
},
|
||||
{
|
||||
"tag": "A",
|
||||
"id": "weval-gl",
|
||||
"cls": "",
|
||||
"text": "Logout",
|
||||
"x": 1848,
|
||||
"y": 10,
|
||||
"w": 60,
|
||||
"h": 25,
|
||||
"zIndex": "99990",
|
||||
"position": "fixed"
|
||||
},
|
||||
{
|
||||
"tag": "DIV",
|
||||
"id": "opus-honest-badge",
|
||||
"cls": "",
|
||||
"text": "\u2713 NR 199/201 \u00b7 not-6sigma live",
|
||||
"x": 1709,
|
||||
"y": 1043,
|
||||
"w": 199,
|
||||
"h": 25,
|
||||
"zIndex": "99993",
|
||||
"position": "fixed"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "unified-hub",
|
||||
"url": "https://weval-consulting.com/wevia-unified-hub.html",
|
||||
"http": 200,
|
||||
"fixed_count": 4,
|
||||
"overlaps_count": 1,
|
||||
"overlaps": [
|
||||
{
|
||||
"a": "weval-gl",
|
||||
"b": "wtp-udock",
|
||||
"overlap_area": 1380,
|
||||
"ratio": "0.92"
|
||||
}
|
||||
],
|
||||
"fixed_preview": [
|
||||
{
|
||||
"tag": "ASIDE",
|
||||
"id": "",
|
||||
"cls": "sidebar",
|
||||
"text": "\ud83c\udfe0 ERP Pivots\n \n \ud83c\udfe0 WTP\n \ud83c\udf08",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"w": 240,
|
||||
"h": 1080,
|
||||
"zIndex": "auto",
|
||||
"position": "sticky"
|
||||
},
|
||||
{
|
||||
"tag": "A",
|
||||
"id": "opus-droid-link",
|
||||
"cls": "",
|
||||
"text": "Droid",
|
||||
"x": 1839,
|
||||
"y": 1026,
|
||||
"w": 61,
|
||||
"h": 34,
|
||||
"zIndex": "9997",
|
||||
"position": "fixed"
|
||||
},
|
||||
{
|
||||
"tag": "A",
|
||||
"id": "weval-gl",
|
||||
"cls": "",
|
||||
"text": "Logout",
|
||||
"x": 1848,
|
||||
"y": 10,
|
||||
"w": 60,
|
||||
"h": 25,
|
||||
"zIndex": "99990",
|
||||
"position": "fixed"
|
||||
},
|
||||
{
|
||||
"tag": "DIV",
|
||||
"id": "wtp-udock",
|
||||
"cls": "",
|
||||
"text": "WTPIA HubMasterOrchWevCodeArenaDroidAdmi",
|
||||
"x": 1488,
|
||||
"y": 12,
|
||||
"w": 420,
|
||||
"h": 63,
|
||||
"zIndex": "9998",
|
||||
"position": "fixed"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "cartographie",
|
||||
"url": "https://weval-consulting.com/cartographie-screens.html",
|
||||
"http": 200,
|
||||
"fixed_count": 3,
|
||||
"overlaps_count": 1,
|
||||
"overlaps": [
|
||||
{
|
||||
"a": "weval-gl",
|
||||
"b": "wtp-udock",
|
||||
"overlap_area": 1380,
|
||||
"ratio": "0.92"
|
||||
}
|
||||
],
|
||||
"fixed_preview": [
|
||||
{
|
||||
"tag": "BUTTON",
|
||||
"id": "",
|
||||
"cls": "preview-toggle",
|
||||
"text": "Previews: ON",
|
||||
"x": 16,
|
||||
"y": 16,
|
||||
"w": 103,
|
||||
"h": 28,
|
||||
"zIndex": "1000",
|
||||
"position": "fixed"
|
||||
},
|
||||
{
|
||||
"tag": "A",
|
||||
"id": "weval-gl",
|
||||
"cls": "",
|
||||
"text": "Logout",
|
||||
"x": 1848,
|
||||
"y": 10,
|
||||
"w": 60,
|
||||
"h": 25,
|
||||
"zIndex": "99990",
|
||||
"position": "fixed"
|
||||
},
|
||||
{
|
||||
"tag": "DIV",
|
||||
"id": "wtp-udock",
|
||||
"cls": "",
|
||||
"text": "WTPIA HubMasterOrchWevCodeArenaDroidAdmi",
|
||||
"x": 1488,
|
||||
"y": 12,
|
||||
"w": 420,
|
||||
"h": 63,
|
||||
"zIndex": "9998",
|
||||
"position": "fixed"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "orphans-hub",
|
||||
"url": "https://weval-consulting.com/orphans-hub.html",
|
||||
"http": 200,
|
||||
"fixed_count": 4,
|
||||
"overlaps_count": 1,
|
||||
"overlaps": [
|
||||
{
|
||||
"a": "weval-gl",
|
||||
"b": "wtp-udock",
|
||||
"overlap_area": 1380,
|
||||
"ratio": "0.92"
|
||||
}
|
||||
],
|
||||
"fixed_preview": [
|
||||
{
|
||||
"tag": "DIV",
|
||||
"id": "orphans-premium-toolbar",
|
||||
"cls": "",
|
||||
"text": "248 pages\n \n ToutWEVIA & IAOpsBusiness",
|
||||
"x": 260,
|
||||
"y": 30,
|
||||
"w": 1400,
|
||||
"h": 59,
|
||||
"zIndex": "9000",
|
||||
"position": "sticky"
|
||||
},
|
||||
{
|
||||
"tag": "DIV",
|
||||
"id": "",
|
||||
"cls": "",
|
||||
"text": "\ud83d\udd2e WePredict",
|
||||
"x": 1797,
|
||||
"y": 980,
|
||||
"w": 103,
|
||||
"h": 30,
|
||||
"zIndex": "9997",
|
||||
"position": "fixed"
|
||||
},
|
||||
{
|
||||
"tag": "A",
|
||||
"id": "weval-gl",
|
||||
"cls": "",
|
||||
"text": "Logout",
|
||||
"x": 1848,
|
||||
"y": 10,
|
||||
"w": 60,
|
||||
"h": 25,
|
||||
"zIndex": "99990",
|
||||
"position": "fixed"
|
||||
},
|
||||
{
|
||||
"tag": "DIV",
|
||||
"id": "wtp-udock",
|
||||
"cls": "",
|
||||
"text": "WTPIA HubMasterOrchWevCodeArenaDroidAdmi",
|
||||
"x": 1488,
|
||||
"y": 12,
|
||||
"w": 420,
|
||||
"h": 57,
|
||||
"zIndex": "9998",
|
||||
"position": "fixed"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"videos": [
|
||||
"04c295dcd187f2d3e30f24f93717a8d9.webm",
|
||||
"0cb3ffbdb7a90992b2a119e24915e28d.webm",
|
||||
"752869f5e032e1786abfdf2358ed24dd.webm",
|
||||
"7f01727170911b6244abf80c56f8a4fc.webm",
|
||||
"8bccc3e68c86354350400e2efa643f40.webm",
|
||||
"9f20e7f21187b95bb48ccee7277cbc8e.webm",
|
||||
"b835a323b2e19913eb0faaa4fcb4b9b3.webm",
|
||||
"cae2c0ea27d8443ac11bfeebf4bb070b.webm",
|
||||
"f38f01251c81ca40fc5c2a7a56e1306f.webm",
|
||||
"febb0f3e5b79168c2f7c6efd1f0629c0.webm"
|
||||
],
|
||||
"screenshots": [
|
||||
"all-ia-hub_01_normal.png",
|
||||
"all-ia-hub_02_topright.png",
|
||||
"all-ia-hub_03_botleft.png",
|
||||
"cartographie_01_normal.png",
|
||||
"cartographie_02_topright.png",
|
||||
"cartographie_03_botleft.png",
|
||||
"master_01_normal.png",
|
||||
"master_02_topright.png",
|
||||
"master_03_botleft.png",
|
||||
"orchestrator_01_normal.png",
|
||||
"orchestrator_02_topright.png",
|
||||
"orchestrator_03_botleft.png",
|
||||
"orphans-hub_01_normal.png",
|
||||
"orphans-hub_02_topright.png",
|
||||
"orphans-hub_03_botleft.png",
|
||||
"training_01_normal.png",
|
||||
"training_02_topright.png",
|
||||
"training_03_botleft.png",
|
||||
"unified-hub_01_normal.png",
|
||||
"unified-hub_02_topright.png",
|
||||
"unified-hub_03_botleft.png",
|
||||
"wepredict_01_normal.png",
|
||||
"wepredict_02_topright.png",
|
||||
"wepredict_03_botleft.png",
|
||||
"wiki_01_normal.png",
|
||||
"wiki_02_topright.png",
|
||||
"wiki_03_botleft.png"
|
||||
]
|
||||
}
|
||||
BIN
api/v_opus_overlap_20260421-141824/training_01_normal.png
Normal file
|
After Width: | Height: | Size: 263 KiB |