Compare commits
36 Commits
v9.40-free
...
v9.48-hone
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fb9b8a901d | ||
|
|
678f7f44cc | ||
|
|
19b59bcc3e | ||
|
|
9392c4fd0b | ||
|
|
714295c4d3 | ||
|
|
73752d2963 | ||
|
|
c1f034cc89 | ||
|
|
b13f90aaf5 | ||
|
|
5889c6e0e1 | ||
|
|
c31b8c5bc8 | ||
|
|
85e7dcd2d6 | ||
|
|
5d94ef5413 | ||
|
|
46f336bb6e | ||
|
|
b1bf1c19ba | ||
|
|
643ea75311 | ||
|
|
26b4bf7b5d | ||
|
|
027107be86 | ||
|
|
5f876a3057 | ||
|
|
0115125501 | ||
|
|
6b3890085b | ||
|
|
a422436e41 | ||
|
|
57bcc7a015 | ||
|
|
cd8efa1d05 | ||
|
|
ac6be59fc0 | ||
|
|
d722b82dfb | ||
|
|
54b8bd4c3d | ||
|
|
d1fd7b0652 | ||
|
|
b896e68ee0 | ||
|
|
aecfb8b820 | ||
|
|
c8c0c06d86 | ||
|
|
f32e100935 | ||
|
|
3e6e807075 | ||
|
|
9cce3dd346 | ||
|
|
488b46770d | ||
|
|
e2e1317881 | ||
|
|
129db8d0a4 |
@@ -490,7 +490,7 @@ A.forEach(function(a,i){
|
||||
card.className='ag-card'+(a.m?' master':'');card.dataset.agent=a.n;card.dataset.tier=a.t;
|
||||
card.innerHTML=(a.m?'<div class="crown">👑</div>':'')+
|
||||
'<div class="bubble" data-a="'+a.n+'"></div>'+
|
||||
(window.WevalAvatar && WevalAvatar.isReady && WevalAvatar.isReady() ? '<span class="p-av" data-agent="'+a.n+'" data-persona="'+WevalAvatar.persona(a.n)+'" title="'+a.n+'">'+WevalAvatar.emoji(a.n)+'</span>' : '<img src="'+url+'" loading="lazy" data-agent="'+a.n+'">')+
|
||||
((function(n){var r=(window.WevalAvatar&&WevalAvatar.isReady&&WevalAvatar.isReady())?WevalAvatar.get(n):{persona:'human',emoji:'👤'};return '<span class="p-av" data-agent="'+n+'" data-persona="'+(r.persona||'human')+'" title="'+n+'">'+(r.emoji||'👤')+'</span>';})(a.n))+
|
||||
'<div class="name">'+a.n+'</div>';
|
||||
card.onclick=function(){
|
||||
document.getElementById('mImg').src=url;
|
||||
@@ -1328,36 +1328,32 @@ window.addEventListener('resize',function(){cam.aspect=innerWidth/innerHeight;ca
|
||||
|
||||
<script id="d91-archi-rerender">
|
||||
(function(){
|
||||
// Once the helper is ready, re-run the card build so persona emojis appear.
|
||||
// The card build is scene-side (Three.js / CSS2DObject) — easiest: find all existing
|
||||
// <img data-agent="X"> inside CSS2D layer and swap them for p-av spans.
|
||||
function swap(){
|
||||
// V120 SSOT — Update existing p-av spans with WevalAvatar emoji once helper is ready.
|
||||
// Also remove any legacy <img dicebear/robohash> that might have leaked through.
|
||||
function refresh(){
|
||||
if (!window.WevalAvatar || !WevalAvatar.isReady || !WevalAvatar.isReady()) return false;
|
||||
const nodes = document.querySelectorAll('.ag-card img[src*="robohash"],.ag-card img[src*="dicebear"]');
|
||||
if (!nodes.length) return true;
|
||||
nodes.forEach(img => {
|
||||
const name = img.closest('.ag-card')?.dataset.agent || img.dataset.agent;
|
||||
// Update spans (created with default 👤 if helper wasn't ready at render time)
|
||||
document.querySelectorAll('.ag-card .p-av[data-agent]').forEach(span => {
|
||||
const name = span.dataset.agent;
|
||||
if (!name) return;
|
||||
const e = WevalAvatar.get(name);
|
||||
const span = document.createElement('span');
|
||||
span.className = 'p-av';
|
||||
span.dataset.agent = name;
|
||||
span.dataset.persona = e.persona || 'human';
|
||||
span.title = name;
|
||||
span.textContent = e.emoji || '👤';
|
||||
// copy sizing classes implicit via parent selector
|
||||
img.parentNode.replaceChild(span, img);
|
||||
if (e && e.emoji) {
|
||||
span.textContent = e.emoji;
|
||||
if (e.persona) span.dataset.persona = e.persona;
|
||||
}
|
||||
});
|
||||
// Cleanup legacy imgs
|
||||
document.querySelectorAll('.ag-card img[src*="robohash"],.ag-card img[src*="dicebear"]').forEach(img => img.remove());
|
||||
return true;
|
||||
}
|
||||
let tries = 0;
|
||||
const iv = setInterval(() => {
|
||||
tries++;
|
||||
if (swap() || tries > 40) clearInterval(iv);
|
||||
if (refresh() || tries > 40) clearInterval(iv);
|
||||
}, 250);
|
||||
})();
|
||||
</script>
|
||||
<script id="d93cj">(function(){function e(){var s=["[data-agent]",".agent",".agent-card",".card-agent",".node",".gap-agent"];s.forEach(function(q){document.querySelectorAll(q).forEach(function(c){if(c.querySelector(".p-av")||c.dataset.d93c)return;c.dataset.d93c=1;var p=document.createElement("span");p.className="p-av";p.setAttribute("data-persona","human");p.textContent="\ud83d\udc64";if(window.WevalAvatar&&WevalAvatar.get){var n=(c.dataset.agent||c.getAttribute("data-name")||(c.querySelector("h3,h4,.name")||{}).textContent||"").trim();if(n){try{var r=WevalAvatar.get(n);if(r&&r.emoji){p.textContent=r.emoji;if(r.persona)p.setAttribute("data-persona",r.persona);}}catch(e){}}}c.querySelectorAll("img[data-agent], img[src*='dicebear'], img[src*='robohash']").forEach(function(im){im.remove();});c.insertBefore(p,c.firstChild);});});}if(document.readyState==="loading")document.addEventListener("DOMContentLoaded",e);else e();setTimeout(e,500);setTimeout(e,1500);setTimeout(e,3500);})();</script>
|
||||
<script id="d93cj">/* DISABLED 20260420 — was double heads vs Three.js CSS2DRenderer. d91 swap suffices. */</script>
|
||||
|
||||
<!-- === OPUS UNIVERSAL DRILL-DOWN v1 19avr — append-only, doctrine #14 === -->
|
||||
<script>
|
||||
|
||||
@@ -1,88 +1,88 @@
|
||||
{
|
||||
"Agile Maturity Assessor": "https:\/\/api.dicebear.com\/9.x\/adventurer\/svg?seed=AgileMaturity",
|
||||
"ArchScan": "https:\/\/robohash.org\/sunny-bot-6?set=set1&size=200x200",
|
||||
"Attribution Modeler": "https:\/\/api.dicebear.com\/9.x\/adventurer\/svg?seed=Attribution",
|
||||
"Attrition Predictor": "https:\/\/api.dicebear.com\/9.x\/adventurer\/svg?seed=Attrition",
|
||||
"Audit Trail Watcher": "https:\/\/api.dicebear.com\/9.x\/adventurer\/svg?seed=AuditTrail",
|
||||
"AutoFix": "https:\/\/robohash.org\/cute-bot-4?set=set1&size=200x200",
|
||||
"Blade": "https:\/\/robohash.org\/violet-droid?set=set1&size=200x200",
|
||||
"Budget Variance Watchdog": "https:\/\/api.dicebear.com\/9.x\/adventurer\/svg?seed=BudgetWatch",
|
||||
"CAC Optimizer": "https:\/\/api.dicebear.com\/9.x\/adventurer\/svg?seed=CAC",
|
||||
"CAPA Closer": "https:\/\/api.dicebear.com\/9.x\/adventurer\/svg?seed=CAPA",
|
||||
"CPQ AI": "https:\/\/api.dicebear.com\/9.x\/adventurer\/svg?seed=CPQ",
|
||||
"Carbon Tracker": "https:\/\/api.dicebear.com\/9.x\/adventurer\/svg?seed=Carbon",
|
||||
"Cash Flow Predictor AI": "https:\/\/api.dicebear.com\/9.x\/adventurer\/svg?seed=CashFlow",
|
||||
"Cerebras": "https:\/\/robohash.org\/joy-mech-5?set=set1&size=200x200",
|
||||
"Churn Predictor": "https:\/\/api.dicebear.com\/9.x\/adventurer\/svg?seed=Churn",
|
||||
"Collection AI Agent": "https:\/\/api.dicebear.com\/9.x\/adventurer\/svg?seed=Collection",
|
||||
"Compliance Checker": "https:\/\/api.dicebear.com\/9.x\/adventurer\/svg?seed=Compliance",
|
||||
"Consensus": "https:\/\/robohash.org\/cute-bot-6?set=set1&size=200x200",
|
||||
"Content Generator": "https:\/\/api.dicebear.com\/9.x\/adventurer\/svg?seed=Content",
|
||||
"Contract Compliance": "https:\/\/api.dicebear.com\/9.x\/adventurer\/svg?seed=Contract",
|
||||
"Contract Watcher": "https:\/\/api.dicebear.com\/9.x\/adventurer\/svg?seed=ContractWatch",
|
||||
"CrowdSec": "https:\/\/robohash.org\/smile-robot-1?set=set1&size=200x200",
|
||||
"DORA Metrics Agent": "https:\/\/api.dicebear.com\/9.x\/adventurer\/svg?seed=DORA",
|
||||
"DeerFlow": "https:\/\/robohash.org\/friendly-3?set=set1&size=200x200",
|
||||
"Definition of Done Auditor": "https:\/\/api.dicebear.com\/9.x\/adventurer\/svg?seed=DoD",
|
||||
"Demand Forecast Pro": "https:\/\/api.dicebear.com\/9.x\/adventurer\/svg?seed=Demand",
|
||||
"Dependency Mapper": "https:\/\/api.dicebear.com\/9.x\/adventurer\/svg?seed=Dependency",
|
||||
"DevOps": "https:\/\/robohash.org\/apt-device?set=set1&size=200x200",
|
||||
"Director": "https:\/\/api.dicebear.com\/9.x\/adventurer\/svg?seed=joy",
|
||||
"Dispatcher": "https:\/\/robohash.org\/muon-fly?set=set1&size=200x200",
|
||||
"Docker": "https:\/\/robohash.org\/smile-robot-3?set=set1&size=200x200",
|
||||
"Dunning Router": "https:\/\/api.dicebear.com\/9.x\/adventurer\/svg?seed=Dunning",
|
||||
"Duplicate Payment Detector": "https:\/\/api.dicebear.com\/9.x\/adventurer\/svg?seed=DupPayment",
|
||||
"Ethica": "https:\/\/robohash.org\/mu-pulse?set=set1&size=200x200",
|
||||
"FX Hedger": "https:\/\/api.dicebear.com\/9.x\/adventurer\/svg?seed=FXHedger",
|
||||
"Fail2Ban": "https:\/\/robohash.org\/joy-mech-8?set=set1&size=200x200",
|
||||
"Fast Close Orchestrator": "https:\/\/api.dicebear.com\/9.x\/adventurer\/svg?seed=FastClose",
|
||||
"Fiability": "https:\/\/robohash.org\/friendly-2?set=set1&size=200x200",
|
||||
"Forecast AI": "https:\/\/api.dicebear.com\/9.x\/adventurer\/svg?seed=Forecast",
|
||||
"Fraud Detection Agent": "https:\/\/robohash.org\/fraud-detect?set=set1&size=200x200",
|
||||
"GDPR Auditor": "https:\/\/api.dicebear.com\/9.x\/adventurer\/svg?seed=GDPR",
|
||||
"Groq": "https:\/\/robohash.org\/joy-mech-6?set=set1&size=200x200",
|
||||
"Incident Watcher": "https:\/\/api.dicebear.com\/9.x\/adventurer\/svg?seed=Incident",
|
||||
"Invoice Auto-Match": "https:\/\/api.dicebear.com\/9.x\/adventurer\/svg?seed=InvoiceMatch",
|
||||
"Kanban Flow Optimizer": "https:\/\/api.dicebear.com\/9.x\/adventurer\/svg?seed=Kanban",
|
||||
"L99 Pilot": "https:\/\/robohash.org\/clever-bot?set=set1&size=200x200",
|
||||
"Lead Qualifier": "https:\/\/api.dicebear.com\/9.x\/adventurer\/svg?seed=LeadQual",
|
||||
"MFA Enforcer": "https:\/\/robohash.org\/mfa-enforcer?set=set1&size=200x200",
|
||||
"Master Router": "https:\/\/robohash.org\/sunny-bot-5?set=set1&size=200x200",
|
||||
"MiroFish": "https:\/\/robohash.org\/lambda-star?set=set1&size=200x200",
|
||||
"Monitor": "https:\/\/robohash.org\/sonic-rush?set=set1&size=200x200",
|
||||
"NPS Analyzer": "https:\/\/api.dicebear.com\/9.x\/adventurer\/svg?seed=NPS",
|
||||
"NonReg": "https:\/\/robohash.org\/gluon-skip?set=set1&size=200x200",
|
||||
"OEE Live": "https:\/\/robohash.org\/oee-live?set=set1&size=200x200",
|
||||
"OKR Alignment Tracker": "https:\/\/api.dicebear.com\/9.x\/adventurer\/svg?seed=OKR",
|
||||
"OTD Optimizer": "https:\/\/api.dicebear.com\/9.x\/adventurer\/svg?seed=OTD",
|
||||
"Ollama": "https:\/\/robohash.org\/joy-mech-7?set=set1&size=200x200",
|
||||
"Onboarding Bot": "https:\/\/robohash.org\/onboarding?set=set1&size=200x200",
|
||||
"PMTA": "https:\/\/robohash.org\/smile-robot-6?set=set1&size=200x200",
|
||||
"Paperclip": "https:\/\/robohash.org\/happy-bot-8?set=set1&size=200x200",
|
||||
"Patent Scanner": "https:\/\/api.dicebear.com\/9.x\/adventurer\/svg?seed=Patent",
|
||||
"Payroll Accuracy AI": "https:\/\/api.dicebear.com\/9.x\/adventurer\/svg?seed=Payroll",
|
||||
"Pipeline Scorer": "https:\/\/api.dicebear.com\/9.x\/adventurer\/svg?seed=PipelineScore",
|
||||
"PoC Tracker": "https:\/\/api.dicebear.com\/9.x\/adventurer\/svg?seed=PoC",
|
||||
"Predictive Maintenance": "https:\/\/robohash.org\/predictive-maint?set=set1&size=200x200",
|
||||
"Product Owner Assistant": "https:\/\/api.dicebear.com\/9.x\/adventurer\/svg?seed=PO",
|
||||
"Quality AI Vision": "https:\/\/robohash.org\/quality-vision?set=set1&size=200x200",
|
||||
"Registry": "https:\/\/robohash.org\/friendly-7?set=set1&size=200x200",
|
||||
"Retrospective Analyzer": "https:\/\/api.dicebear.com\/9.x\/adventurer\/svg?seed=Retro",
|
||||
"SAFe RTE Agent": "https:\/\/api.dicebear.com\/9.x\/adventurer\/svg?seed=RTE",
|
||||
"SambaNova": "https:\/\/robohash.org\/smile-robot-5?set=set1&size=200x200",
|
||||
"Scraper": "https:\/\/robohash.org\/taupe-cyborg?set=set1&size=200x200",
|
||||
"Scrum Master Copilot": "https:\/\/api.dicebear.com\/9.x\/adventurer\/svg?seed=ScrumMaster",
|
||||
"Security": "https:\/\/robohash.org\/silver-beam?set=set1&size=200x200",
|
||||
"Sentinel": "https:\/\/robohash.org\/happy-bot-4?set=set1&size=200x200",
|
||||
"Skills Matcher": "https:\/\/api.dicebear.com\/9.x\/adventurer\/svg?seed=Skills",
|
||||
"Stockout Prevention": "https:\/\/api.dicebear.com\/9.x\/adventurer\/svg?seed=Stockout",
|
||||
"Story Point Estimator AI": "https:\/\/api.dicebear.com\/9.x\/adventurer\/svg?seed=StoryPoint",
|
||||
"Supplier Risk Monitor": "https:\/\/api.dicebear.com\/9.x\/adventurer\/svg?seed=Supplier",
|
||||
"Sustainability Reporter": "https:\/\/api.dicebear.com\/9.x\/adventurer\/svg?seed=Sustain",
|
||||
"Takt Time Monitor": "https:\/\/robohash.org\/takt-time?set=set1&size=200x200",
|
||||
"Talent Scout": "https:\/\/api.dicebear.com\/9.x\/adventurer\/svg?seed=Talent",
|
||||
"Tax Validator": "https:\/\/api.dicebear.com\/9.x\/adventurer\/svg?seed=TaxValid",
|
||||
"Velocity Tracker AI": "https:\/\/api.dicebear.com\/9.x\/adventurer\/svg?seed=Velocity",
|
||||
"WEVCODE": "https:\/\/robohash.org\/scarlet-mech?set=set1&size=200x200",
|
||||
"WEVIA Master": "https:\/\/api.dicebear.com\/9.x\/adventurer\/svg?seed=nova"
|
||||
"Agile Maturity Assessor": "https://api.dicebear.com/9.x/adventurer/svg?seed=AgileMaturity",
|
||||
"ArchScan": "https://api.dicebear.com/9.x/adventurer/svg?seed=ArchScan",
|
||||
"Attribution Modeler": "https://api.dicebear.com/9.x/adventurer/svg?seed=Attribution",
|
||||
"Attrition Predictor": "https://api.dicebear.com/9.x/adventurer/svg?seed=Attrition",
|
||||
"Audit Trail Watcher": "https://api.dicebear.com/9.x/adventurer/svg?seed=AuditTrail",
|
||||
"AutoFix": "https://api.dicebear.com/9.x/adventurer/svg?seed=AutoFix",
|
||||
"Blade": "https://api.dicebear.com/9.x/adventurer/svg?seed=Blade",
|
||||
"Budget Variance Watchdog": "https://api.dicebear.com/9.x/adventurer/svg?seed=BudgetWatch",
|
||||
"CAC Optimizer": "https://api.dicebear.com/9.x/adventurer/svg?seed=CAC",
|
||||
"CAPA Closer": "https://api.dicebear.com/9.x/adventurer/svg?seed=CAPA",
|
||||
"CPQ AI": "https://api.dicebear.com/9.x/adventurer/svg?seed=CPQ",
|
||||
"Carbon Tracker": "https://api.dicebear.com/9.x/adventurer/svg?seed=Carbon",
|
||||
"Cash Flow Predictor AI": "https://api.dicebear.com/9.x/adventurer/svg?seed=CashFlow",
|
||||
"Cerebras": "https://api.dicebear.com/9.x/adventurer/svg?seed=Cerebras",
|
||||
"Churn Predictor": "https://api.dicebear.com/9.x/adventurer/svg?seed=Churn",
|
||||
"Collection AI Agent": "https://api.dicebear.com/9.x/adventurer/svg?seed=Collection",
|
||||
"Compliance Checker": "https://api.dicebear.com/9.x/adventurer/svg?seed=Compliance",
|
||||
"Consensus": "https://api.dicebear.com/9.x/adventurer/svg?seed=Consensus",
|
||||
"Content Generator": "https://api.dicebear.com/9.x/adventurer/svg?seed=Content",
|
||||
"Contract Compliance": "https://api.dicebear.com/9.x/adventurer/svg?seed=Contract",
|
||||
"Contract Watcher": "https://api.dicebear.com/9.x/adventurer/svg?seed=ContractWatch",
|
||||
"CrowdSec": "https://api.dicebear.com/9.x/adventurer/svg?seed=CrowdSec",
|
||||
"DORA Metrics Agent": "https://api.dicebear.com/9.x/adventurer/svg?seed=DORA",
|
||||
"DeerFlow": "https://api.dicebear.com/9.x/adventurer/svg?seed=DeerFlow",
|
||||
"Definition of Done Auditor": "https://api.dicebear.com/9.x/adventurer/svg?seed=DoD",
|
||||
"Demand Forecast Pro": "https://api.dicebear.com/9.x/adventurer/svg?seed=Demand",
|
||||
"Dependency Mapper": "https://api.dicebear.com/9.x/adventurer/svg?seed=Dependency",
|
||||
"DevOps": "https://api.dicebear.com/9.x/adventurer/svg?seed=DevOps",
|
||||
"Director": "https://api.dicebear.com/9.x/adventurer/svg?seed=joy",
|
||||
"Dispatcher": "https://api.dicebear.com/9.x/adventurer/svg?seed=Dispatcher",
|
||||
"Docker": "https://api.dicebear.com/9.x/adventurer/svg?seed=Docker",
|
||||
"Dunning Router": "https://api.dicebear.com/9.x/adventurer/svg?seed=Dunning",
|
||||
"Duplicate Payment Detector": "https://api.dicebear.com/9.x/adventurer/svg?seed=DupPayment",
|
||||
"Ethica": "https://api.dicebear.com/9.x/adventurer/svg?seed=Ethica",
|
||||
"FX Hedger": "https://api.dicebear.com/9.x/adventurer/svg?seed=FXHedger",
|
||||
"Fail2Ban": "https://api.dicebear.com/9.x/adventurer/svg?seed=Fail2Ban",
|
||||
"Fast Close Orchestrator": "https://api.dicebear.com/9.x/adventurer/svg?seed=FastClose",
|
||||
"Fiability": "https://api.dicebear.com/9.x/adventurer/svg?seed=Fiability",
|
||||
"Forecast AI": "https://api.dicebear.com/9.x/adventurer/svg?seed=Forecast",
|
||||
"Fraud Detection Agent": "https://api.dicebear.com/9.x/adventurer/svg?seed=FraudDetectionAgent",
|
||||
"GDPR Auditor": "https://api.dicebear.com/9.x/adventurer/svg?seed=GDPR",
|
||||
"Groq": "https://api.dicebear.com/9.x/adventurer/svg?seed=Groq",
|
||||
"Incident Watcher": "https://api.dicebear.com/9.x/adventurer/svg?seed=Incident",
|
||||
"Invoice Auto-Match": "https://api.dicebear.com/9.x/adventurer/svg?seed=InvoiceMatch",
|
||||
"Kanban Flow Optimizer": "https://api.dicebear.com/9.x/adventurer/svg?seed=Kanban",
|
||||
"L99 Pilot": "https://api.dicebear.com/9.x/adventurer/svg?seed=L99Pilot",
|
||||
"Lead Qualifier": "https://api.dicebear.com/9.x/adventurer/svg?seed=LeadQual",
|
||||
"MFA Enforcer": "https://api.dicebear.com/9.x/adventurer/svg?seed=MFAEnforcer",
|
||||
"Master Router": "https://api.dicebear.com/9.x/adventurer/svg?seed=MasterRouter",
|
||||
"MiroFish": "https://api.dicebear.com/9.x/adventurer/svg?seed=MiroFish",
|
||||
"Monitor": "https://api.dicebear.com/9.x/adventurer/svg?seed=Monitor",
|
||||
"NPS Analyzer": "https://api.dicebear.com/9.x/adventurer/svg?seed=NPS",
|
||||
"NonReg": "https://api.dicebear.com/9.x/adventurer/svg?seed=NonReg",
|
||||
"OEE Live": "https://api.dicebear.com/9.x/adventurer/svg?seed=OEELive",
|
||||
"OKR Alignment Tracker": "https://api.dicebear.com/9.x/adventurer/svg?seed=OKR",
|
||||
"OTD Optimizer": "https://api.dicebear.com/9.x/adventurer/svg?seed=OTD",
|
||||
"Ollama": "https://api.dicebear.com/9.x/adventurer/svg?seed=Ollama",
|
||||
"Onboarding Bot": "https://api.dicebear.com/9.x/adventurer/svg?seed=OnboardingBot",
|
||||
"PMTA": "https://api.dicebear.com/9.x/adventurer/svg?seed=PMTA",
|
||||
"Paperclip": "https://api.dicebear.com/9.x/adventurer/svg?seed=Paperclip",
|
||||
"Patent Scanner": "https://api.dicebear.com/9.x/adventurer/svg?seed=Patent",
|
||||
"Payroll Accuracy AI": "https://api.dicebear.com/9.x/adventurer/svg?seed=Payroll",
|
||||
"Pipeline Scorer": "https://api.dicebear.com/9.x/adventurer/svg?seed=PipelineScore",
|
||||
"PoC Tracker": "https://api.dicebear.com/9.x/adventurer/svg?seed=PoC",
|
||||
"Predictive Maintenance": "https://api.dicebear.com/9.x/adventurer/svg?seed=PredictiveMaintenance",
|
||||
"Product Owner Assistant": "https://api.dicebear.com/9.x/adventurer/svg?seed=PO",
|
||||
"Quality AI Vision": "https://api.dicebear.com/9.x/adventurer/svg?seed=QualityAIVision",
|
||||
"Registry": "https://api.dicebear.com/9.x/adventurer/svg?seed=Registry",
|
||||
"Retrospective Analyzer": "https://api.dicebear.com/9.x/adventurer/svg?seed=Retro",
|
||||
"SAFe RTE Agent": "https://api.dicebear.com/9.x/adventurer/svg?seed=RTE",
|
||||
"SambaNova": "https://api.dicebear.com/9.x/adventurer/svg?seed=SambaNova",
|
||||
"Scraper": "https://api.dicebear.com/9.x/adventurer/svg?seed=Scraper",
|
||||
"Scrum Master Copilot": "https://api.dicebear.com/9.x/adventurer/svg?seed=ScrumMaster",
|
||||
"Security": "https://api.dicebear.com/9.x/adventurer/svg?seed=Security",
|
||||
"Sentinel": "https://api.dicebear.com/9.x/adventurer/svg?seed=Sentinel",
|
||||
"Skills Matcher": "https://api.dicebear.com/9.x/adventurer/svg?seed=Skills",
|
||||
"Stockout Prevention": "https://api.dicebear.com/9.x/adventurer/svg?seed=Stockout",
|
||||
"Story Point Estimator AI": "https://api.dicebear.com/9.x/adventurer/svg?seed=StoryPoint",
|
||||
"Supplier Risk Monitor": "https://api.dicebear.com/9.x/adventurer/svg?seed=Supplier",
|
||||
"Sustainability Reporter": "https://api.dicebear.com/9.x/adventurer/svg?seed=Sustain",
|
||||
"Takt Time Monitor": "https://api.dicebear.com/9.x/adventurer/svg?seed=TaktTimeMonitor",
|
||||
"Talent Scout": "https://api.dicebear.com/9.x/adventurer/svg?seed=Talent",
|
||||
"Tax Validator": "https://api.dicebear.com/9.x/adventurer/svg?seed=TaxValid",
|
||||
"Velocity Tracker AI": "https://api.dicebear.com/9.x/adventurer/svg?seed=Velocity",
|
||||
"WEVCODE": "https://api.dicebear.com/9.x/adventurer/svg?seed=WEVCODE",
|
||||
"WEVIA Master": "https://api.dicebear.com/9.x/adventurer/svg?seed=nova"
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"agent": "V41_Disk_Monitor",
|
||||
"ts": "2026-04-20T23:00:01+02:00",
|
||||
"ts": "2026-04-21T00:00:02+02:00",
|
||||
"disk_pct": 79,
|
||||
"disk_free_gb": 32,
|
||||
"growth_per_day_gb": 1.5,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"agent": "V41_Risk_Escalation",
|
||||
"ts": "2026-04-20T23:00:02+02:00",
|
||||
"ts": "2026-04-21T00:15:03+02:00",
|
||||
"dg_alerts_active": 7,
|
||||
"wevia_life_stats_preview": "{
|
||||
"ok": true,
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
{
|
||||
"routes": 445,
|
||||
"skills": 835,
|
||||
"wiki": 1855,
|
||||
"pages": 288,
|
||||
"wiki": 1861,
|
||||
"pages": 292,
|
||||
"apis": 246,
|
||||
"docker": 19,
|
||||
"proposals": [
|
||||
@@ -27,5 +27,5 @@
|
||||
"effort": "S"
|
||||
}
|
||||
],
|
||||
"timestamp": "2026-04-20 16:00"
|
||||
"timestamp": "2026-04-20 22:00"
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"timestamp": "2026-04-20 12:00",
|
||||
"timestamp": "2026-04-21 00:00",
|
||||
"analysis": {
|
||||
"existing_skills": 835,
|
||||
"missing": 15,
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"agent": "V41_Feature_Adoption_Tracker",
|
||||
"ts": "2026-04-20T23:00:01+02:00",
|
||||
"ts": "2026-04-21T00:00:02+02:00",
|
||||
"features_tracked": 15,
|
||||
"features_used_24h": 12,
|
||||
"adoption_pct": 80,
|
||||
"chat_queries_last_1k_log": 13,
|
||||
"wtp_views_last_1k_log": 64,
|
||||
"dg_views_last_1k_log": 8,
|
||||
"chat_queries_last_1k_log": 3,
|
||||
"wtp_views_last_1k_log": 29,
|
||||
"dg_views_last_1k_log": 2,
|
||||
"skill_runs_last_1k_log": 0,
|
||||
"recommendation": "UX onboarding tour for unused features",
|
||||
"cron_schedule": "hourly",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"agent": "V45_Leads_Sync",
|
||||
"ts": "2026-04-20T23:10:03+02:00",
|
||||
"ts": "2026-04-21T00:20:02+02:00",
|
||||
"paperclip_total": 48,
|
||||
"active_customer": 4,
|
||||
"warm_prospect": 5,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"agent": "V41_MQL_Scoring",
|
||||
"ts": "2026-04-20T23:00:02+02:00",
|
||||
"ts": "2026-04-21T00:00:03+02:00",
|
||||
"leads_total": 48,
|
||||
"mql_current": 16,
|
||||
"sql_current": 6,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"agent": "V60_Nudge_Owner_Actions",
|
||||
"ts": "2026-04-20T16:00:01+02:00",
|
||||
"ts": "2026-04-21T00:00:01+02:00",
|
||||
"cron": "every_8_hours",
|
||||
"actions_pending_owner": {
|
||||
"emails_drafts_V45_to_send": {
|
||||
@@ -10,10 +10,10 @@
|
||||
"action": "Yacine envoie via Gmail ymahboub@weval-consulting.com"
|
||||
},
|
||||
"ethica_renewal_Q1": {
|
||||
"days_to_Q1_end": -20,
|
||||
"days_to_Q1_end": -21,
|
||||
"amount_keur": 280,
|
||||
"urgency": "CRITICAL",
|
||||
"action": "Close contrat avec Kaouther Najar avant -20 jours"
|
||||
"action": "Close contrat avec Kaouther Najar avant -21 jours"
|
||||
},
|
||||
"sourcing_39_emails_linkedin": {
|
||||
"count": 39,
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
{
|
||||
"agent": "V54_Risk_Monitor_Live",
|
||||
"ts": "2026-04-20T23:00:02+02:00",
|
||||
"ts": "2026-04-21T00:00:03+02:00",
|
||||
"critical_risks": {
|
||||
"RW01_pipeline_vide": {
|
||||
"pipeline_keur": 0,
|
||||
"mql_auto": 20,
|
||||
"residual_risk_pct": 80,
|
||||
"mql_auto": 17,
|
||||
"residual_risk_pct": 83,
|
||||
"trend": "mitigation_V42_V45_active"
|
||||
},
|
||||
"RW02_dependance_ethica": {
|
||||
@@ -22,7 +22,7 @@
|
||||
},
|
||||
"RW12_burnout": {
|
||||
"agents_cron_active": 15,
|
||||
"load_5min": "3.69",
|
||||
"load_5min": "4.78",
|
||||
"automation_coverage_pct": 70,
|
||||
"residual_risk_pct": 60,
|
||||
"trend": "V52_goldratt_options_active"
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
{
|
||||
"timestamp": "2026-04-20 22:00",
|
||||
"timestamp": "2026-04-21 00:00",
|
||||
"sections": {
|
||||
"servers": {
|
||||
"S204": {
|
||||
"docker": 19,
|
||||
"disk": "79%",
|
||||
"ram": "13Gi/30Gi",
|
||||
"load": "1.06",
|
||||
"uptime": "up 6 days, 10 hours, 8 minutes"
|
||||
"ram": "11Gi/30Gi",
|
||||
"load": "12.38",
|
||||
"uptime": "up 6 days, 12 hours, 8 minutes"
|
||||
}
|
||||
},
|
||||
"docker": {
|
||||
@@ -95,7 +95,7 @@
|
||||
},
|
||||
{
|
||||
"name": "uptime-kuma",
|
||||
"status": "Up 20 hours (healthy)",
|
||||
"status": "Up 22 hours (healthy)",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
@@ -475,7 +475,7 @@
|
||||
]
|
||||
},
|
||||
"pages": {
|
||||
"count": 288
|
||||
"count": 292
|
||||
},
|
||||
"opt_tools": {
|
||||
"count": 91
|
||||
@@ -484,7 +484,7 @@
|
||||
"pairs": 5751
|
||||
},
|
||||
"wiki": {
|
||||
"entries": 1860
|
||||
"entries": 1861
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"generated_at": "2026-04-20T18:00:01.970709",
|
||||
"generated_at": "2026-04-21T00:00:04.387854",
|
||||
"agent_version": "V69_enhanced",
|
||||
"pages_scanned": 9,
|
||||
"fixed_elements_checked": 16,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"timestamp": "2026-04-20T16:00:04+00:00",
|
||||
"compute_ms": 2323,
|
||||
"timestamp": "2026-04-20T22:00:05+00:00",
|
||||
"compute_ms": 3485,
|
||||
"metrics": {
|
||||
"agents": 0,
|
||||
"agents_hierarchy": 0,
|
||||
@@ -19,12 +19,12 @@
|
||||
"providers": [
|
||||
{
|
||||
"name": "Cerebras",
|
||||
"latency_ms": 514,
|
||||
"latency_ms": 935,
|
||||
"status": "up"
|
||||
},
|
||||
{
|
||||
"name": "Groq",
|
||||
"latency_ms": 771,
|
||||
"latency_ms": 1126,
|
||||
"status": "up"
|
||||
}
|
||||
]
|
||||
|
||||
65
api/andon-drilldown.php
Normal file
@@ -0,0 +1,65 @@
|
||||
<?php
|
||||
// V9.47 Andon Drilldown API · doctrine #13 root cause visibility
|
||||
header("Content-Type: application/json");
|
||||
header("Access-Control-Allow-Origin: *");
|
||||
|
||||
$host = "127.0.0.1";
|
||||
$port = "5432";
|
||||
$db = "adx_system";
|
||||
$user = "admin";
|
||||
$pass = "admin123";
|
||||
|
||||
putenv("PGPASSWORD=$pass");
|
||||
|
||||
$sql = "SELECT id, station, severity, message, status, created_at::text, resolved_at::text, triggered_by, resolved_by, owner, resolution_path FROM weval.andon_alerts ORDER BY status='open' DESC, severity, created_at DESC LIMIT 50";
|
||||
$cmd = "psql -h $host -p $port -U $user -d $db -At -F'|' -c " . escapeshellarg($sql) . " 2>&1";
|
||||
$out = shell_exec($cmd);
|
||||
|
||||
$rows = [];
|
||||
foreach (explode("\n", trim($out)) as $line) {
|
||||
if (empty($line)) continue;
|
||||
$f = explode("|", $line);
|
||||
if (count($f) < 11) continue;
|
||||
$rows[] = [
|
||||
"id" => $f[0],
|
||||
"station" => $f[1],
|
||||
"severity" => $f[2],
|
||||
"message" => $f[3],
|
||||
"status" => $f[4],
|
||||
"created_at" => $f[5],
|
||||
"resolved_at" => $f[6],
|
||||
"triggered_by" => $f[7],
|
||||
"resolved_by" => $f[8],
|
||||
"owner" => $f[9],
|
||||
"resolution_path" => $f[10],
|
||||
"drilldown_info" => drilldown_info($f[1])
|
||||
];
|
||||
}
|
||||
|
||||
function drilldown_info($station) {
|
||||
$map = [
|
||||
"cash-OKP4" => ["type"=>"commercial", "action"=>"Relance facture Yacine", "contact"=>"Kaouther/OKP4", "url"=>"/wevia-life-app/crm"],
|
||||
"sales-vistex" => ["type"=>"commercial", "action"=>"Email Olga Vistex addendum", "contact"=>"Olga Vistex", "url"=>"/wevia-life-app/deals"],
|
||||
"saas-churn" => ["type"=>"seed_data", "action"=>"Fake seed resolved doctrine 4", "contact"=>"N/A", "url"=>null, "note"=>"Not real business data"],
|
||||
"blade-agent-exec" => ["type"=>"infra", "action"=>"Restart via intent blade_wake or wevia_blade_restart", "contact"=>"Yacineutt Windows", "url"=>"/api/blade-agent.php"],
|
||||
"cybersec-nuclei" => ["type"=>"infra", "action"=>"V9.41 scan = 0 findings", "contact"=>"N/A", "url"=>"/api/nuclei-scanner.php"],
|
||||
"Apps" => ["type"=>"infra", "action"=>"V9.43 symlinks fix", "contact"=>"N/A", "url"=>"/"],
|
||||
"EM-Platform" => ["type"=>"infra", "action"=>"V9.46 investigating", "contact"=>"N/A", "url"=>null],
|
||||
"dispensation-station-3" => ["type"=>"ethica", "action"=>"Scanner fallback manuel", "contact"=>"N/A", "url"=>"/ethica-hub.html"]
|
||||
];
|
||||
return $map[$station] ?? ["type"=>"unknown", "action"=>"Investigate", "contact"=>"TBD", "url"=>null];
|
||||
}
|
||||
|
||||
$open = array_filter($rows, fn($r) => $r["status"] === "open");
|
||||
$summary = [
|
||||
"ok" => true,
|
||||
"ts" => date("c"),
|
||||
"source" => "adx_system.weval.andon_alerts",
|
||||
"total" => count($rows),
|
||||
"open" => count($open),
|
||||
"resolved" => count($rows) - count($open),
|
||||
"drilldown_map_version" => "v9.47",
|
||||
"alerts" => $rows
|
||||
];
|
||||
|
||||
echo json_encode($summary, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"generated": "2026-04-20 21:00:01",
|
||||
"generated": "2026-04-20 22:00:02",
|
||||
"version": "1.0",
|
||||
"servers": [
|
||||
{
|
||||
@@ -10,7 +10,7 @@
|
||||
"ssh": 49222,
|
||||
"disk_pct": 79,
|
||||
"disk_avail": "32G",
|
||||
"uptime": "up 6 days, 11 hours, 8 minutes",
|
||||
"uptime": "up 6 days, 12 hours, 8 minutes",
|
||||
"nginx": "active",
|
||||
"php_fpm": "active",
|
||||
"php_version": "8.5.5"
|
||||
@@ -116,7 +116,7 @@
|
||||
},
|
||||
{
|
||||
"name": "uptime-kuma",
|
||||
"status": "Up 21 hours (healthy)",
|
||||
"status": "Up 22 hours (healthy)",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
@@ -141,6 +141,16 @@
|
||||
"php-session_paths": false,
|
||||
"auth_complete": false
|
||||
},
|
||||
{
|
||||
"file": "arsenal.weval-consulting.com",
|
||||
"server_names": [
|
||||
"arsenal.weval-consulting.com"
|
||||
],
|
||||
"ssl": true,
|
||||
"php-session": false,
|
||||
"php-session_paths": false,
|
||||
"auth_complete": false
|
||||
},
|
||||
{
|
||||
"file": "code-weval",
|
||||
"server_names": [
|
||||
@@ -252,26 +262,6 @@
|
||||
"php-session_paths": false,
|
||||
"auth_complete": false
|
||||
},
|
||||
{
|
||||
"file": "wevads.weval-consulting.com.gold-16avr-pre-fallback",
|
||||
"server_names": [
|
||||
"wevads.weval-consulting.com"
|
||||
],
|
||||
"ssl": true,
|
||||
"php-session": false,
|
||||
"php-session_paths": false,
|
||||
"auth_complete": false
|
||||
},
|
||||
{
|
||||
"file": "wevads.weval-consulting.com.gold-pre-v25",
|
||||
"server_names": [
|
||||
"wevads.weval-consulting.com"
|
||||
],
|
||||
"ssl": true,
|
||||
"php-session": false,
|
||||
"php-session_paths": false,
|
||||
"auth_complete": false
|
||||
},
|
||||
{
|
||||
"file": "weval-consulting",
|
||||
"server_names": [
|
||||
@@ -285,9 +275,9 @@
|
||||
}
|
||||
],
|
||||
"screens": {
|
||||
"s204_html": 288,
|
||||
"s204_html": 292,
|
||||
"s204_products": 104,
|
||||
"s204_api_php": 760,
|
||||
"s204_api_php": 762,
|
||||
"s204_wevia_php": 20,
|
||||
"s95_arsenal_html": 1377,
|
||||
"s95_arsenal_api": 377
|
||||
@@ -311,7 +301,7 @@
|
||||
"langfuse"
|
||||
],
|
||||
"key_tables": {
|
||||
"kb_learnings": 5511,
|
||||
"kb_learnings": 5512,
|
||||
"kb_documents": 0,
|
||||
"ethica_medecins": 50004,
|
||||
"enterprise_agents": 0
|
||||
@@ -611,7 +601,7 @@
|
||||
]
|
||||
},
|
||||
"wiki": {
|
||||
"total_entries": 5511,
|
||||
"total_entries": 5512,
|
||||
"categories": [
|
||||
{
|
||||
"category": "AUTO-FIX",
|
||||
@@ -619,7 +609,7 @@
|
||||
},
|
||||
{
|
||||
"category": "TOPOLOGY",
|
||||
"cnt": "1183"
|
||||
"cnt": "1184"
|
||||
},
|
||||
{
|
||||
"category": "DISCOVERY",
|
||||
@@ -1955,7 +1945,7 @@
|
||||
}
|
||||
]
|
||||
},
|
||||
"scan_time_ms": 2768,
|
||||
"scan_time_ms": 6346,
|
||||
"gaps": [],
|
||||
"score": 100,
|
||||
"automation": {
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"test": "biz-scenario-v9.29-extended",
|
||||
"timestamp": "2026-04-20T15-05-53",
|
||||
"timestamp": "2026-04-20T22-13-56",
|
||||
"pages": [
|
||||
{
|
||||
"name": "wtp",
|
||||
"url": "https://weval-consulting.com/weval-technology-platform.html?dev=1",
|
||||
"ok": true,
|
||||
"ms": 6369,
|
||||
"ms": 5682,
|
||||
"http": 200,
|
||||
"final_url": "https://weval-consulting.com/weval-technology-platform.html?dev=1",
|
||||
"found": [
|
||||
@@ -15,13 +15,13 @@
|
||||
"Accueil",
|
||||
"NR "
|
||||
],
|
||||
"content_size": 312795
|
||||
"content_size": 520263
|
||||
},
|
||||
{
|
||||
"name": "erp-gap-fill",
|
||||
"url": "https://weval-consulting.com/erp-gap-fill-offer.html?dev=1",
|
||||
"ok": true,
|
||||
"ms": 3844,
|
||||
"ms": 3804,
|
||||
"http": 200,
|
||||
"final_url": "https://weval-consulting.com/erp-gap-fill-offer.html?dev=1",
|
||||
"found": [
|
||||
@@ -36,7 +36,7 @@
|
||||
"name": "infra-tour",
|
||||
"url": "https://weval-consulting.com/infra-tour-2s-5c-blade.html?dev=1",
|
||||
"ok": true,
|
||||
"ms": 3169,
|
||||
"ms": 3168,
|
||||
"http": 200,
|
||||
"final_url": "https://weval-consulting.com/infra-tour-2s-5c-blade.html?dev=1",
|
||||
"found": [
|
||||
@@ -51,7 +51,7 @@
|
||||
"name": "wevia-master",
|
||||
"url": "https://weval-consulting.com/wevia-master.html?dev=1",
|
||||
"ok": true,
|
||||
"ms": 3656,
|
||||
"ms": 3648,
|
||||
"http": 200,
|
||||
"final_url": "https://weval-consulting.com/login?r=/wevia-master.html?dev=1",
|
||||
"found": [
|
||||
@@ -64,7 +64,7 @@
|
||||
"name": "ethica-hub",
|
||||
"url": "https://weval-consulting.com/ethica-hub.html?dev=1",
|
||||
"ok": true,
|
||||
"ms": 3882,
|
||||
"ms": 3899,
|
||||
"http": 200,
|
||||
"final_url": "https://weval-consulting.com/ethica-hub.html?dev=1",
|
||||
"found": [
|
||||
@@ -73,13 +73,13 @@
|
||||
"161",
|
||||
"51K"
|
||||
],
|
||||
"content_size": 32827
|
||||
"content_size": 32802
|
||||
},
|
||||
{
|
||||
"name": "enterprise-model",
|
||||
"url": "https://weval-consulting.com/enterprise-model.html?dev=1",
|
||||
"ok": true,
|
||||
"ms": 4165,
|
||||
"ms": 4128,
|
||||
"http": 200,
|
||||
"final_url": "https://weval-consulting.com/login?r=/enterprise-model.html?dev=1",
|
||||
"found": [
|
||||
@@ -92,7 +92,7 @@
|
||||
"name": "growth-engine",
|
||||
"url": "https://weval-consulting.com/growth-engine-v2.html?dev=1",
|
||||
"ok": true,
|
||||
"ms": 5103,
|
||||
"ms": 5110,
|
||||
"http": 200,
|
||||
"final_url": "https://weval-consulting.com/login?r=/growth-engine-v2.html?dev=1",
|
||||
"found": [
|
||||
@@ -109,7 +109,7 @@
|
||||
"name": "agents-archi",
|
||||
"url": "https://weval-consulting.com/agents-archi.html?dev=1",
|
||||
"ok": true,
|
||||
"ms": 5103,
|
||||
"ms": 5127,
|
||||
"http": 200,
|
||||
"final_url": "https://weval-consulting.com/login?r=/agents-archi.html?dev=1",
|
||||
"found": [
|
||||
@@ -120,21 +120,21 @@
|
||||
"content_size": 3843
|
||||
}
|
||||
],
|
||||
"video": "/var/www/html/videos/biz-scenario-2026-04-20T15-05-53.webm",
|
||||
"video": "/var/www/html/videos/biz-scenario-2026-04-20T22-13-56.webm",
|
||||
"screenshots": [
|
||||
"/var/www/html/screenshots/biz-2026-04-20T15-05-53-wtp.png",
|
||||
"/var/www/html/screenshots/biz-2026-04-20T15-05-53-erp-gap-fill.png",
|
||||
"/var/www/html/screenshots/biz-2026-04-20T15-05-53-infra-tour.png",
|
||||
"/var/www/html/screenshots/biz-2026-04-20T15-05-53-wevia-master.png",
|
||||
"/var/www/html/screenshots/biz-2026-04-20T15-05-53-ethica-hub.png",
|
||||
"/var/www/html/screenshots/biz-2026-04-20T15-05-53-enterprise-model.png",
|
||||
"/var/www/html/screenshots/biz-2026-04-20T15-05-53-growth-engine.png",
|
||||
"/var/www/html/screenshots/biz-2026-04-20T15-05-53-agents-archi.png"
|
||||
"/var/www/html/screenshots/biz-2026-04-20T22-13-56-wtp.png",
|
||||
"/var/www/html/screenshots/biz-2026-04-20T22-13-56-erp-gap-fill.png",
|
||||
"/var/www/html/screenshots/biz-2026-04-20T22-13-56-infra-tour.png",
|
||||
"/var/www/html/screenshots/biz-2026-04-20T22-13-56-wevia-master.png",
|
||||
"/var/www/html/screenshots/biz-2026-04-20T22-13-56-ethica-hub.png",
|
||||
"/var/www/html/screenshots/biz-2026-04-20T22-13-56-enterprise-model.png",
|
||||
"/var/www/html/screenshots/biz-2026-04-20T22-13-56-growth-engine.png",
|
||||
"/var/www/html/screenshots/biz-2026-04-20T22-13-56-agents-archi.png"
|
||||
],
|
||||
"duration_ms": 36245,
|
||||
"duration_ms": 35030,
|
||||
"status": "100%",
|
||||
"pass": 8,
|
||||
"total": 8,
|
||||
"pct": 100,
|
||||
"video_size": 1772947
|
||||
"video_size": 1840510
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"generated_at": "2026-04-20T23:10:02.044886",
|
||||
"generated_at": "2026-04-21T00:20:01.605105",
|
||||
"stats": {
|
||||
"total": 35,
|
||||
"pending": 20,
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
{
|
||||
"status": "ALIVE",
|
||||
"ts": "2026-04-20T23:00:01.481431",
|
||||
"last_heartbeat": "2026-04-20T23:00:01.481431",
|
||||
"last_heartbeat_ts_epoch": 1776718801,
|
||||
"ts": "2026-04-21T00:15:01.478747",
|
||||
"last_heartbeat": "2026-04-21T00:15:01.478747",
|
||||
"last_heartbeat_ts_epoch": 1776723301,
|
||||
"tasks_today": 232,
|
||||
"tasks_week": 574,
|
||||
"agent_id": "blade-ops",
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# WEVIA Master — System Documentation
|
||||
Generated: Mon Apr 20 12:00:02 PM CEST 2026
|
||||
Generated: Tue Apr 21 12:00:03 AM CEST 2026
|
||||
|
||||
## APIs (243)
|
||||
## APIs (246)
|
||||
wevia-action-engine.php
|
||||
wevia-actions.php
|
||||
wevia-admin-crm-bridge.php
|
||||
@@ -35,6 +35,7 @@ wevia-auto-heal.php
|
||||
wevia-auto-intent.php
|
||||
wevia-autonomous.php
|
||||
wevia-autonomy-controller.php
|
||||
wevia-autonomy-dashboard.php
|
||||
wevia-autowire-agent.php
|
||||
wevia-autowire.php
|
||||
wevia-azure-reregister-intent.php
|
||||
@@ -175,6 +176,7 @@ wevia-run-tests.php
|
||||
wevia-safe-ops.php
|
||||
wevia-safe-write.php
|
||||
wevia-security-fortress.php
|
||||
wevia-self-diagnostic-intent.php
|
||||
wevia-self-edit.php
|
||||
wevia-send-kaouther-intent.php
|
||||
wevia-services-live.php
|
||||
@@ -199,6 +201,7 @@ wevia-tools.php
|
||||
wevia-tools-router.php
|
||||
wevia-tool-test.php
|
||||
wevia-track-s95-prompt-intent.php
|
||||
wevia-truth-api.php
|
||||
wevia-truth-builder.php
|
||||
wevia-unified-api.php
|
||||
wevia-unified.php
|
||||
@@ -291,7 +294,7 @@ wevia-ux-agent.py
|
||||
wevia-webchat-api.py
|
||||
wevia-webwide.py
|
||||
|
||||
## Crons (74)
|
||||
## Crons (78)
|
||||
*/10 * * * * bash /opt/weval-l99/wevia-blade-ctl.sh status >> /var/log/wevia-blade.log 2>&1
|
||||
*/10 * * * * bash /opt/weval-l99/wevia-pilot.sh
|
||||
*/10 * * * * php /var/www/html/api/wevia-quality-agent.php > /dev/null 2>&1
|
||||
@@ -358,15 +361,19 @@ wevia-webwide.py
|
||||
*/15 * * * * python3 /opt/weval-ops/andon-monitor.py >> /var/log/weval-andon.log 2>&1
|
||||
55 23 * * * /opt/weval-ops/kpi-snapshot.sh >> /var/log/weval-kpi-snapshot.log 2>&1
|
||||
0 2 * * * /usr/bin/python3 /opt/weval-ops/kpi-snapshot-daily.py >> /var/log/weval/kpi-daily.log 2>&1
|
||||
*/5 * * * * /opt/weval-l99/infra-guardian.sh
|
||||
*/15 * * * * curl -s -o /dev/null http://127.0.0.1/api/v97-linkedin-control.php?action=auto_publish_due # v97-linkedin-control
|
||||
*/20 * * * * /usr/bin/curl -s -o /dev/null http://127.0.0.1/api/v97-linkedin-control.php?action=browser_publish_due >> /var/log/v98-cron.log 2>&1 # v98-browser-cron
|
||||
0 */12 * * * /usr/bin/curl -s -o /dev/null http://127.0.0.1/api/v97-linkedin-control.php?action=v99_auto_login >> /tmp/v99-cron.log 2>&1 # v99-auto-login
|
||||
|
||||
## Ollama Models
|
||||
|
||||
## Docker (19 containers)
|
||||
loki Up 3 days
|
||||
loki Up 4 days
|
||||
listmonk Up 4 days
|
||||
plausible-plausible-1 Up 2 days
|
||||
plausible-plausible-db-1 Up 2 days
|
||||
plausible-plausible-events-db-1 Up 2 days
|
||||
plausible-plausible-1 Up 3 days
|
||||
plausible-plausible-db-1 Up 3 days
|
||||
plausible-plausible-events-db-1 Up 3 days
|
||||
n8n-docker-n8n-1 Up 4 days
|
||||
mattermost-docker-mm-db-1 Up 4 days
|
||||
mattermost-docker-mattermost-1 Up 4 days (healthy)
|
||||
|
||||
@@ -10,6 +10,6 @@
|
||||
"SAMBANOVA_KEY": "https:\/\/cloud.sambanova.ai\/apis",
|
||||
"MISTRAL_KEY": "https:\/\/console.mistral.ai\/api-keys"
|
||||
},
|
||||
"ts": "2026-04-20T16:00:08+00:00",
|
||||
"ts": "2026-04-20T22:00:05+00:00",
|
||||
"priority": "P1"
|
||||
}
|
||||
@@ -10,6 +10,6 @@
|
||||
"SAMBANOVA_KEY": "https:\/\/cloud.sambanova.ai\/apis",
|
||||
"MISTRAL_KEY": "https:\/\/console.mistral.ai\/api-keys"
|
||||
},
|
||||
"ts": "2026-04-20T16:00:08+00:00",
|
||||
"ts": "2026-04-20T22:00:05+00:00",
|
||||
"priority": "P0"
|
||||
}
|
||||
@@ -10,6 +10,6 @@
|
||||
"SAMBANOVA_KEY": "https:\/\/cloud.sambanova.ai\/apis",
|
||||
"MISTRAL_KEY": "https:\/\/console.mistral.ai\/api-keys"
|
||||
},
|
||||
"ts": "2026-04-20T16:00:08+00:00",
|
||||
"ts": "2026-04-20T22:00:05+00:00",
|
||||
"priority": "P1"
|
||||
}
|
||||
@@ -10,6 +10,6 @@
|
||||
"SAMBANOVA_KEY": "https:\/\/cloud.sambanova.ai\/apis",
|
||||
"MISTRAL_KEY": "https:\/\/console.mistral.ai\/api-keys"
|
||||
},
|
||||
"ts": "2026-04-20T16:00:09+00:00",
|
||||
"ts": "2026-04-20T22:00:05+00:00",
|
||||
"priority": "P1"
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"task_id": "restart_wevia_agent_20260421_001240",
|
||||
"type": "powershell",
|
||||
"priority": "high",
|
||||
"dispatched_by": "opus-v9.47-mcp",
|
||||
"dispatched_at": "2026-04-21T00:12:40+02:00",
|
||||
"purpose": "Restart WEVIA agent v4 to refresh task_done callback",
|
||||
"command": "Stop-Process -Name wevia-agent* -Force -ErrorAction SilentlyContinue; Start-Sleep 2; powershell -File C:\ProgramData\WEVAL\wevia-agent-v4.ps1",
|
||||
"fallback_command": "Get-Process wevia* | Stop-Process -Force; Start-Process powershell -ArgumentList \"-File C:\ProgramData\WEVAL\wevia-agent-v4.ps1\" -WindowStyle Hidden",
|
||||
"expected_response": "agent_restarted",
|
||||
"timeout_seconds": 30
|
||||
}
|
||||
@@ -0,0 +1,102 @@
|
||||
{
|
||||
"bundle_id": "token_renewal_bundle_20260420_222040",
|
||||
"tasks": [
|
||||
{
|
||||
"task_id": "token_renew_cerebras_20260420_222040",
|
||||
"type": "selenium_renew",
|
||||
"priority": "high",
|
||||
"provider": "cerebras",
|
||||
"signup_url": "https://cloud.cerebras.ai/platform/api-keys",
|
||||
"method": "selenium_cerebras_renew",
|
||||
"dispatched_by": "opus-v9.48",
|
||||
"dispatched_at": "2026-04-20T22:20:40.565153",
|
||||
"purpose": "Renew cerebras API key \u00b7 token expired detected",
|
||||
"instructions": "yacineutt session connected via chrome \u00b7 navigate to signup_url \u00b7 copy new key \u00b7 callback to /api/token-update.php"
|
||||
},
|
||||
{
|
||||
"task_id": "token_renew_gemini_20260420_222040",
|
||||
"type": "selenium_renew",
|
||||
"priority": "high",
|
||||
"provider": "gemini",
|
||||
"signup_url": "https://aistudio.google.com/apikey",
|
||||
"method": "selenium_google_aistudio",
|
||||
"dispatched_by": "opus-v9.48",
|
||||
"dispatched_at": "2026-04-20T22:20:40.565166",
|
||||
"purpose": "Renew gemini API key \u00b7 token expired detected",
|
||||
"instructions": "yacineutt session connected via chrome \u00b7 navigate to signup_url \u00b7 copy new key \u00b7 callback to /api/token-update.php"
|
||||
},
|
||||
{
|
||||
"task_id": "token_renew_mistral_20260420_222040",
|
||||
"type": "selenium_renew",
|
||||
"priority": "high",
|
||||
"provider": "mistral",
|
||||
"signup_url": "https://console.mistral.ai/api-keys/",
|
||||
"method": "selenium_mistral",
|
||||
"dispatched_by": "opus-v9.48",
|
||||
"dispatched_at": "2026-04-20T22:20:40.565169",
|
||||
"purpose": "Renew mistral API key \u00b7 token expired detected",
|
||||
"instructions": "yacineutt session connected via chrome \u00b7 navigate to signup_url \u00b7 copy new key \u00b7 callback to /api/token-update.php"
|
||||
},
|
||||
{
|
||||
"task_id": "token_renew_deepseek_20260420_222040",
|
||||
"type": "selenium_renew",
|
||||
"priority": "high",
|
||||
"provider": "deepseek",
|
||||
"signup_url": "https://platform.deepseek.com/api_keys",
|
||||
"method": "selenium_deepseek",
|
||||
"dispatched_by": "opus-v9.48",
|
||||
"dispatched_at": "2026-04-20T22:20:40.565171",
|
||||
"purpose": "Renew deepseek API key \u00b7 token expired detected",
|
||||
"instructions": "yacineutt session connected via chrome \u00b7 navigate to signup_url \u00b7 copy new key \u00b7 callback to /api/token-update.php"
|
||||
},
|
||||
{
|
||||
"task_id": "token_renew_huggingface_20260420_222040",
|
||||
"type": "selenium_renew",
|
||||
"priority": "high",
|
||||
"provider": "huggingface",
|
||||
"signup_url": "https://huggingface.co/settings/tokens",
|
||||
"method": "selenium_hf",
|
||||
"dispatched_by": "opus-v9.48",
|
||||
"dispatched_at": "2026-04-20T22:20:40.565173",
|
||||
"purpose": "Renew huggingface API key \u00b7 token expired detected",
|
||||
"instructions": "yacineutt session connected via chrome \u00b7 navigate to signup_url \u00b7 copy new key \u00b7 callback to /api/token-update.php"
|
||||
},
|
||||
{
|
||||
"task_id": "token_renew_alibaba_20260420_222040",
|
||||
"type": "selenium_renew",
|
||||
"priority": "high",
|
||||
"provider": "alibaba",
|
||||
"signup_url": "https://dashscope.console.aliyun.com/apiKey",
|
||||
"method": "selenium_alibaba",
|
||||
"dispatched_by": "opus-v9.48",
|
||||
"dispatched_at": "2026-04-20T22:20:40.565174",
|
||||
"purpose": "Renew alibaba API key \u00b7 token expired detected",
|
||||
"instructions": "yacineutt session connected via chrome \u00b7 navigate to signup_url \u00b7 copy new key \u00b7 callback to /api/token-update.php"
|
||||
},
|
||||
{
|
||||
"task_id": "token_renew_groq_20260420_222040",
|
||||
"type": "selenium_renew",
|
||||
"priority": "high",
|
||||
"provider": "groq",
|
||||
"signup_url": "https://console.groq.com/keys",
|
||||
"method": "selenium_groq",
|
||||
"dispatched_by": "opus-v9.48",
|
||||
"dispatched_at": "2026-04-20T22:20:40.565175",
|
||||
"purpose": "Renew groq API key \u00b7 token expired detected",
|
||||
"instructions": "yacineutt session connected via chrome \u00b7 navigate to signup_url \u00b7 copy new key \u00b7 callback to /api/token-update.php"
|
||||
},
|
||||
{
|
||||
"task_id": "token_renew_anthropic_20260420_222040",
|
||||
"type": "selenium_renew",
|
||||
"priority": "high",
|
||||
"provider": "anthropic",
|
||||
"signup_url": "https://console.anthropic.com/settings/keys",
|
||||
"method": "selenium_anthropic",
|
||||
"dispatched_by": "opus-v9.48",
|
||||
"dispatched_at": "2026-04-20T22:20:40.565176",
|
||||
"purpose": "Renew anthropic API key \u00b7 token expired detected",
|
||||
"instructions": "yacineutt session connected via chrome \u00b7 navigate to signup_url \u00b7 copy new key \u00b7 callback to /api/token-update.php"
|
||||
}
|
||||
],
|
||||
"count": 8
|
||||
}
|
||||
|
After Width: | Height: | Size: 117 KiB |
7
api/blade-tasks/v104-css-fix-proof/proof.json
Normal file
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"title": "WEVADS - Dashboard Avanc\u00e9",
|
||||
"body_top": "\ud83d\ude80 WEVADS Advanced Brain\n\nSyst\u00e8me d'intelligence artificielle avanc\u00e9 - Dashboard de contr\u00f4le\n\n\ud83d\udd52 Temps de r\u00e9ponse\n18ms\n\nEXCELLENT\n\n\ud83d\udcc8 Disponibilit\u00e9\n99.9%\n\nSTABLE\n\n\ud83e\udde0 Capacit\u00e9s actives\n7/7\n\nTOUTES ACTIVES\n\n\ud83c\udfaf Capacit\u00e9s Avanc\u00e9es\n\ud83d\udd0d Analyse d'images\n\nD\u00e9tection d'objets, analyse de couleurs, reconnaissa",
|
||||
"has_raw_css_leak": false,
|
||||
"stylesheets_loaded": 5,
|
||||
"first_h1": "\ud83d\ude80 WEVADS Advanced Brain"
|
||||
}
|
||||
BIN
api/blade-tasks/v105-wevia-master-autonomy/01-master-loaded.png
Normal file
|
After Width: | Height: | Size: 99 KiB |
|
After Width: | Height: | Size: 187 KiB |
|
After Width: | Height: | Size: 1.4 MiB |
22
api/blade-tasks/v105-wevia-master-autonomy/proof.json
Normal file
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"ts": "V105 final",
|
||||
"wevia_master": {
|
||||
"title": "WEVIA Master AI",
|
||||
"body_len": 952,
|
||||
"has_chat_input": true,
|
||||
"forms_count": 0
|
||||
},
|
||||
"orchestrator_v101": {
|
||||
"title": "WEVIA \u2014 Orchestrator GODMODE",
|
||||
"st_agents_value": "721",
|
||||
"st_tools_value": "619",
|
||||
"search_placeholder": "Rechercher 721 agents..."
|
||||
},
|
||||
"wtp_entry_point_v98": {
|
||||
"title": "WEVAL Technology Platform \u2014 All-in-One ERP Portal",
|
||||
"body_len": 18870,
|
||||
"link_count": 288,
|
||||
"has_big4": true,
|
||||
"has_value_streaming": true
|
||||
}
|
||||
}
|
||||
@@ -1,22 +1,22 @@
|
||||
{
|
||||
"timestamp": "2026-04-20 20:00",
|
||||
"timestamp": "2026-04-21 00:00",
|
||||
"checks": {
|
||||
"registry": "0 agents",
|
||||
"system": {
|
||||
"docker": "19",
|
||||
"ram": "12Gi/30Gi",
|
||||
"disk": "78%",
|
||||
"load": "0.52",
|
||||
"uptime": "up 6 days, 8 hours, 8 minutes"
|
||||
"ram": "11Gi/30Gi",
|
||||
"disk": "79%",
|
||||
"load": "12.38",
|
||||
"uptime": "up 6 days, 12 hours, 8 minutes"
|
||||
},
|
||||
"services": "7/10 OK",
|
||||
"services": "8/10 OK",
|
||||
"nonreg": "153/153 (100%)",
|
||||
"qdrant": "21259 vectors",
|
||||
"crons": "44 active",
|
||||
"routes": "445",
|
||||
"dataset": "5751 pairs",
|
||||
"wiki": "1855 entries",
|
||||
"enterprise": "750 agents (dorm=0 dead=167)"
|
||||
"wiki": "1861 entries",
|
||||
"enterprise": "758 agents (dorm=0 dead=167)"
|
||||
},
|
||||
"analysis": "Analyse indisponible"
|
||||
}
|
||||
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"ts": "2026-04-20T21:09:01+00:00",
|
||||
"ts": "2026-04-20T22:20:01+00:00",
|
||||
"server": "s204",
|
||||
"s204": {
|
||||
"load": 4.63,
|
||||
"load": 1.53,
|
||||
"uptime": "2026-04-14 11:51:24",
|
||||
"ram_total_mb": 31335,
|
||||
"ram_used_mb": 13570,
|
||||
"ram_free_mb": 17764,
|
||||
"ram_used_mb": 11003,
|
||||
"ram_free_mb": 20331,
|
||||
"disk_total": "150G",
|
||||
"disk_used": "113G",
|
||||
"disk_free": "32G",
|
||||
@@ -16,11 +16,11 @@
|
||||
"cpu_cores": 8
|
||||
},
|
||||
"s95": {
|
||||
"load": 0.71,
|
||||
"load": 0.02,
|
||||
"disk_pct": "82%",
|
||||
"status": "UP",
|
||||
"ram_total_mb": 15610,
|
||||
"ram_free_mb": 11687
|
||||
"ram_free_mb": 12049
|
||||
},
|
||||
"pmta": [
|
||||
{
|
||||
@@ -45,9 +45,9 @@
|
||||
}
|
||||
],
|
||||
"assets": {
|
||||
"html_pages": 288,
|
||||
"php_apis": 761,
|
||||
"wiki_entries": 1861,
|
||||
"html_pages": 292,
|
||||
"php_apis": 763,
|
||||
"wiki_entries": 1884,
|
||||
"vault_doctrines": 59,
|
||||
"vault_sessions": 104,
|
||||
"vault_decisions": 12
|
||||
@@ -80,16 +80,16 @@
|
||||
},
|
||||
"ethica": {
|
||||
"total_hcps": 161730,
|
||||
"with_email": 110545,
|
||||
"with_email": 110546,
|
||||
"with_phone": 155145,
|
||||
"gap_email": 51185,
|
||||
"gap_email": 51184,
|
||||
"pct_email": 68.4,
|
||||
"pct_phone": 95.9,
|
||||
"by_country": [
|
||||
{
|
||||
"country": "DZ",
|
||||
"hcps": 122337,
|
||||
"with_email": 78456,
|
||||
"with_email": 78457,
|
||||
"with_tel": 119394,
|
||||
"pct_email": 64.1,
|
||||
"pct_tel": 97.6
|
||||
@@ -203,7 +203,7 @@
|
||||
},
|
||||
{
|
||||
"name": "uptime-kuma",
|
||||
"status": "Up 21 hours (healthy)",
|
||||
"status": "Up 22 hours (healthy)",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
@@ -221,7 +221,7 @@
|
||||
"active": 35
|
||||
},
|
||||
"git": {
|
||||
"head": "087aedec2 auto-sync-2305",
|
||||
"head": "19b59bcc3 auto-sync-0020",
|
||||
"dirty": 5,
|
||||
"status": "DIRTY"
|
||||
},
|
||||
@@ -271,11 +271,11 @@
|
||||
"binary": "COMPILED",
|
||||
"model": "142MB"
|
||||
},
|
||||
"grand_total": 3615,
|
||||
"grand_total": 3644,
|
||||
"health": {
|
||||
"score": 5,
|
||||
"max": 6,
|
||||
"pct": 83
|
||||
},
|
||||
"elapsed_ms": 9398
|
||||
"elapsed_ms": 10715
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"timestamp": "2026-04-20 18:00",
|
||||
"timestamp": "2026-04-21 00:00",
|
||||
"fast_php_routes": 445,
|
||||
"opt_tools_total": 51,
|
||||
"wired": 50,
|
||||
|
||||
@@ -8,21 +8,17 @@
|
||||
"total": 75,
|
||||
"exposed": 20,
|
||||
"ports": [
|
||||
{
|
||||
"addr": "127.0.0.1:37505",
|
||||
"process": "users:((\"ollama\",pid=3380994,fd=3))"
|
||||
},
|
||||
{
|
||||
"addr": "127.0.0.1:5432",
|
||||
"process": "users:((\"postgres\",pid=1428,fd=6))"
|
||||
},
|
||||
{
|
||||
"addr": "127.0.0.1:5890",
|
||||
"process": "users:((\"apache2\",pid=2159098,fd=12),(\"apache2\",pi"
|
||||
"process": "users:((\"apache2\",pid=2551258,fd=12),(\"apache2\",pi"
|
||||
},
|
||||
{
|
||||
"addr": "127.0.0.1:5888",
|
||||
"process": "users:((\"apache2\",pid=2159098,fd=10),(\"apache2\",pi"
|
||||
"process": "users:((\"apache2\",pid=2551258,fd=10),(\"apache2\",pi"
|
||||
},
|
||||
{
|
||||
"addr": "127.0.0.1:6060",
|
||||
@@ -34,23 +30,23 @@
|
||||
},
|
||||
{
|
||||
"addr": "127.0.0.1:5823",
|
||||
"process": "users:((\"apache2\",pid=2159098,fd=5),(\"apache2\",pid"
|
||||
"process": "users:((\"apache2\",pid=2551258,fd=5),(\"apache2\",pid"
|
||||
},
|
||||
{
|
||||
"addr": "127.0.0.1:5822",
|
||||
"process": "users:((\"apache2\",pid=2159098,fd=4),(\"apache2\",pid"
|
||||
"process": "users:((\"apache2\",pid=2551258,fd=4),(\"apache2\",pid"
|
||||
},
|
||||
{
|
||||
"addr": "127.0.0.1:5821",
|
||||
"process": "users:((\"apache2\",pid=2159098,fd=3),(\"apache2\",pid"
|
||||
"process": "users:((\"apache2\",pid=2551258,fd=3),(\"apache2\",pid"
|
||||
},
|
||||
{
|
||||
"addr": "127.0.0.1:5825",
|
||||
"process": "users:((\"apache2\",pid=2159098,fd=13),(\"apache2\",pi"
|
||||
"process": "users:((\"apache2\",pid=2551258,fd=13),(\"apache2\",pi"
|
||||
},
|
||||
{
|
||||
"addr": "127.0.0.1:5824",
|
||||
"process": "users:((\"apache2\",pid=2159098,fd=6),(\"apache2\",pid"
|
||||
"process": "users:((\"apache2\",pid=2551258,fd=6),(\"apache2\",pid"
|
||||
},
|
||||
{
|
||||
"addr": "127.0.0.1:6379",
|
||||
@@ -76,6 +72,10 @@
|
||||
"addr": "0.0.0.0:8765",
|
||||
"process": "users:((\"python3\",pid=1811016,fd=3))"
|
||||
},
|
||||
{
|
||||
"addr": "127.0.0.1:34567",
|
||||
"process": "users:((\"ollama\",pid=3048802,fd=3))"
|
||||
},
|
||||
{
|
||||
"addr": "127.0.0.1:2024",
|
||||
"process": "users:((\"langgraph\",pid=3664742,fd=16))"
|
||||
@@ -92,21 +92,21 @@
|
||||
"addr": "127.0.0.1:4001",
|
||||
"process": "users:((\"python3\",pid=1392,fd=3))"
|
||||
},
|
||||
{
|
||||
"addr": "127.0.0.1:45385",
|
||||
"process": "users:((\"ollama\",pid=1553323,fd=3))"
|
||||
},
|
||||
{
|
||||
"addr": "0.0.0.0:4000",
|
||||
"process": "users:((\"python3\",pid=1394482,fd=3))"
|
||||
},
|
||||
{
|
||||
"addr": "127.0.0.1:46569",
|
||||
"process": "users:((\"ollama\",pid=3052378,fd=3))"
|
||||
},
|
||||
{
|
||||
"addr": "0.0.0.0:2026",
|
||||
"process": "users:((\"nginx\",pid=3665702,fd=5),(\"nginx\",pid=366"
|
||||
},
|
||||
{
|
||||
"addr": "0.0.0.0:443",
|
||||
"process": "users:((\"nginx\",pid=1873436,fd=5),(\"nginx\",pid=155"
|
||||
"process": "users:((\"nginx\",pid=3065765,fd=5),(\"nginx\",pid=306"
|
||||
},
|
||||
{
|
||||
"addr": "0.0.0.0:49222",
|
||||
@@ -114,7 +114,7 @@
|
||||
},
|
||||
{
|
||||
"addr": "0.0.0.0:80",
|
||||
"process": "users:((\"nginx\",pid=1873436,fd=6),(\"nginx\",pid=155"
|
||||
"process": "users:((\"nginx\",pid=3065765,fd=6),(\"nginx\",pid=306"
|
||||
},
|
||||
{
|
||||
"addr": "0.0.0.0:22",
|
||||
@@ -126,7 +126,7 @@
|
||||
},
|
||||
{
|
||||
"addr": "127.0.0.1:8443",
|
||||
"process": "users:((\"apache2\",pid=2159098,fd=11),(\"apache2\",pi"
|
||||
"process": "users:((\"apache2\",pid=2551258,fd=11),(\"apache2\",pi"
|
||||
}
|
||||
],
|
||||
"status": "WARN"
|
||||
@@ -161,7 +161,7 @@
|
||||
"status": "PASS"
|
||||
}
|
||||
},
|
||||
"timestamp": "2026-04-20T18:00:02",
|
||||
"timestamp": "2026-04-21T00:00:01",
|
||||
"oss_tools": [
|
||||
{
|
||||
"name": "Nuclei",
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"ok": true,
|
||||
"agent": "V42_MQL_Scoring_Agent_REAL",
|
||||
"ts": "2026-04-20T21:10:02+00:00",
|
||||
"ts": "2026-04-20T22:20:01+00:00",
|
||||
"status": "DEPLOYED_AUTO",
|
||||
"deployed": true,
|
||||
"algorithm": "weighted_behavioral_signals",
|
||||
|
||||
@@ -1 +1 @@
|
||||
{"ts": "20260420_223716", "version": "3.2", "score": 100, "pass": 153, "fail": 0, "total": 153, "elapsed": 58.5, "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_002030", "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": []}
|
||||
@@ -2,7 +2,7 @@
|
||||
{
|
||||
"name": "weval-l99",
|
||||
"path": "/opt/weval-l99",
|
||||
"files": 527,
|
||||
"files": 536,
|
||||
"has_readme": false,
|
||||
"has_skill": false,
|
||||
"has_python": true,
|
||||
@@ -10,7 +10,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-20T23:00:02.251912"
|
||||
"discovered": "2026-04-21T00:00:06.429491"
|
||||
},
|
||||
{
|
||||
"name": "wevia-brain",
|
||||
@@ -23,7 +23,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-20T23:00:02.322324"
|
||||
"discovered": "2026-04-21T00:00:06.767700"
|
||||
},
|
||||
{
|
||||
"name": "skills",
|
||||
@@ -36,7 +36,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-20T23:00:02.184769"
|
||||
"discovered": "2026-04-21T00:00:05.859245"
|
||||
},
|
||||
{
|
||||
"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-20T23:00:02.009258"
|
||||
"discovered": "2026-04-21T00:00:04.019424"
|
||||
},
|
||||
{
|
||||
"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-20T23:00:02.121340"
|
||||
"discovered": "2026-04-21T00:00:04.974511"
|
||||
},
|
||||
{
|
||||
"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-20T23:00:02.099068"
|
||||
"discovered": "2026-04-21T00:00:04.864612"
|
||||
},
|
||||
{
|
||||
"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-20T23:00:01.957979"
|
||||
"discovered": "2026-04-21T00:00:03.192873"
|
||||
},
|
||||
{
|
||||
"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-20T23:00:02.133111"
|
||||
"discovered": "2026-04-21T00:00:05.259449"
|
||||
},
|
||||
{
|
||||
"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-20T23:00:02.211788"
|
||||
"discovered": "2026-04-21T00:00:06.247855"
|
||||
},
|
||||
{
|
||||
"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-20T23:00:01.915328"
|
||||
"discovered": "2026-04-21T00:00:03.081823"
|
||||
},
|
||||
{
|
||||
"name": "aios",
|
||||
@@ -361,7 +361,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-20T23:00:01.963828"
|
||||
"discovered": "2026-04-21T00:00:03.365344"
|
||||
},
|
||||
{
|
||||
"name": "rnd-agent-framework",
|
||||
@@ -374,7 +374,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": " # Welcome to Microsoft Agent Framework! [\"> <source srcset=\"apps/w",
|
||||
"discovered": "2026-04-20T23:00:02.195422"
|
||||
"discovered": "2026-04-21T00:00:05.968695"
|
||||
},
|
||||
{
|
||||
"name": "wevads",
|
||||
@@ -465,7 +465,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-20T23:00:02.225700"
|
||||
"discovered": "2026-04-21T00:00:06.319679"
|
||||
},
|
||||
{
|
||||
"name": "fmgapp",
|
||||
@@ -478,7 +478,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-20T23:00:02.011827"
|
||||
"discovered": "2026-04-21T00:00:04.054523"
|
||||
},
|
||||
{
|
||||
"name": "obsidian-vault",
|
||||
@@ -491,7 +491,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-20T23:00:02.118468"
|
||||
"discovered": "2026-04-21T00:00:04.925305"
|
||||
},
|
||||
{
|
||||
"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-20T23:00:02.156464"
|
||||
"discovered": "2026-04-21T00:00:05.646362"
|
||||
},
|
||||
{
|
||||
"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-20T23:00:01.884373"
|
||||
"discovered": "2026-04-21T00:00:02.898398"
|
||||
},
|
||||
{
|
||||
"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-20T23:00:02.189611"
|
||||
"discovered": "2026-04-21T00:00:05.908858"
|
||||
},
|
||||
{
|
||||
"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-20T23:00:01.992755"
|
||||
"discovered": "2026-04-21T00:00:03.572212"
|
||||
},
|
||||
{
|
||||
"name": "paperclip-skills",
|
||||
@@ -556,7 +556,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-20T23:00:02.130398"
|
||||
"discovered": "2026-04-21T00:00:05.149135"
|
||||
},
|
||||
{
|
||||
"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-20T23:00:02.015911"
|
||||
"discovered": "2026-04-21T00:00:04.212941"
|
||||
},
|
||||
{
|
||||
"name": "qdrant-data",
|
||||
@@ -582,7 +582,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-20T23:00:02.142239"
|
||||
"discovered": "2026-04-21T00:00:05.482169"
|
||||
},
|
||||
{
|
||||
"name": "wazuh",
|
||||
@@ -595,7 +595,7 @@
|
||||
"has_docker": true,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-20T23:00:02.213832"
|
||||
"discovered": "2026-04-21T00:00:06.267511"
|
||||
},
|
||||
{
|
||||
"name": "plausible",
|
||||
@@ -608,7 +608,7 @@
|
||||
"has_docker": true,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-20T23:00:02.135289"
|
||||
"discovered": "2026-04-21T00:00:05.283784"
|
||||
},
|
||||
{
|
||||
"name": "pmta",
|
||||
@@ -621,7 +621,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-20T23:00:02.137250"
|
||||
"discovered": "2026-04-21T00:00:05.374806"
|
||||
},
|
||||
{
|
||||
"name": "render-configs",
|
||||
@@ -634,7 +634,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-20T23:00:02.144717"
|
||||
"discovered": "2026-04-21T00:00:05.534473"
|
||||
},
|
||||
{
|
||||
"name": "searxng",
|
||||
@@ -647,7 +647,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-20T23:00:02.180801"
|
||||
"discovered": "2026-04-21T00:00:05.821361"
|
||||
},
|
||||
{
|
||||
"name": "weval-guardian",
|
||||
@@ -660,7 +660,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-20T23:00:02.235656"
|
||||
"discovered": "2026-04-21T00:00:06.410279"
|
||||
},
|
||||
{
|
||||
"name": "weval-litellm",
|
||||
@@ -673,7 +673,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-20T23:00:02.256300"
|
||||
"discovered": "2026-04-21T00:00:06.446548"
|
||||
},
|
||||
{
|
||||
"name": "weval-security",
|
||||
@@ -686,7 +686,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-20T23:00:02.298968"
|
||||
"discovered": "2026-04-21T00:00:06.660502"
|
||||
},
|
||||
{
|
||||
"name": "archive",
|
||||
@@ -699,7 +699,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-20T23:00:01.973643"
|
||||
"discovered": "2026-04-21T00:00:03.519962"
|
||||
},
|
||||
{
|
||||
"name": "loki",
|
||||
@@ -712,7 +712,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-20T23:00:02.040994"
|
||||
"discovered": "2026-04-21T00:00:04.697407"
|
||||
},
|
||||
{
|
||||
"name": "ruflo",
|
||||
@@ -725,7 +725,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-20T23:00:02.178487"
|
||||
"discovered": "2026-04-21T00:00:05.755614"
|
||||
},
|
||||
{
|
||||
"name": "twenty",
|
||||
@@ -738,7 +738,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-20T23:00:02.204154"
|
||||
"discovered": "2026-04-21T00:00:06.086477"
|
||||
},
|
||||
{
|
||||
"name": "weval-crewai",
|
||||
@@ -751,7 +751,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-20T23:00:02.227633"
|
||||
"discovered": "2026-04-21T00:00:06.369649"
|
||||
},
|
||||
{
|
||||
"name": "weval-plugins",
|
||||
@@ -764,7 +764,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-20T23:00:02.280081"
|
||||
"discovered": "2026-04-21T00:00:06.520644"
|
||||
},
|
||||
{
|
||||
"name": "weval-radar",
|
||||
@@ -777,7 +777,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-20T23:00:02.292804"
|
||||
"discovered": "2026-04-21T00:00:06.582638"
|
||||
},
|
||||
{
|
||||
"name": "weval-scrapy",
|
||||
@@ -790,7 +790,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-20T23:00:02.296950"
|
||||
"discovered": "2026-04-21T00:00:06.613229"
|
||||
},
|
||||
{
|
||||
"name": "langfuse",
|
||||
@@ -803,7 +803,7 @@
|
||||
"has_docker": true,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-20T23:00:02.020748"
|
||||
"discovered": "2026-04-21T00:00:04.335102"
|
||||
},
|
||||
{
|
||||
"name": "litellm",
|
||||
@@ -816,7 +816,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-20T23:00:02.032728"
|
||||
"discovered": "2026-04-21T00:00:04.607007"
|
||||
},
|
||||
{
|
||||
"name": "mattermost-docker",
|
||||
@@ -829,7 +829,7 @@
|
||||
"has_docker": true,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-20T23:00:02.048105"
|
||||
"discovered": "2026-04-21T00:00:04.769826"
|
||||
},
|
||||
{
|
||||
"name": "prometheus",
|
||||
@@ -842,7 +842,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-20T23:00:02.139475"
|
||||
"discovered": "2026-04-21T00:00:05.436944"
|
||||
},
|
||||
{
|
||||
"name": "twenty-compose",
|
||||
@@ -855,7 +855,7 @@
|
||||
"has_docker": true,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-20T23:00:02.206233"
|
||||
"discovered": "2026-04-21T00:00:06.170363"
|
||||
},
|
||||
{
|
||||
"name": "weval-ux",
|
||||
@@ -868,7 +868,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-20T23:00:02.304910"
|
||||
"discovered": "2026-04-21T00:00:06.704529"
|
||||
},
|
||||
{
|
||||
"name": "wevia-integrity",
|
||||
@@ -881,7 +881,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-20T23:00:02.328191"
|
||||
"discovered": "2026-04-21T00:00:06.823594"
|
||||
},
|
||||
{
|
||||
"name": "DiffusionDB",
|
||||
@@ -894,7 +894,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-20T23:00:01.828832"
|
||||
"discovered": "2026-04-21T00:00:02.673108"
|
||||
},
|
||||
{
|
||||
"name": "LTX-Video",
|
||||
@@ -907,7 +907,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-20T23:00:01.954867"
|
||||
"discovered": "2026-04-21T00:00:03.106543"
|
||||
},
|
||||
{
|
||||
"name": "localai",
|
||||
@@ -920,7 +920,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-20T23:00:02.037715"
|
||||
"discovered": "2026-04-21T00:00:04.695234"
|
||||
},
|
||||
{
|
||||
"name": "wevia-finetune",
|
||||
@@ -933,6 +933,6 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-20T23:00:02.324392"
|
||||
"discovered": "2026-04-21T00:00:06.769817"
|
||||
}
|
||||
]
|
||||
BIN
api/playwright-v94-final/01-wtp-home.png
Normal file
|
After Width: | Height: | Size: 297 KiB |
BIN
api/playwright-v94-final/02-all-pages-v2.png
Normal file
|
After Width: | Height: | Size: 46 KiB |
BIN
api/playwright-v94-final/03-multiagent-v2.png
Normal file
|
After Width: | Height: | Size: 46 KiB |
BIN
api/playwright-v94-final/04-infra-v2.png
Normal file
|
After Width: | Height: | Size: 46 KiB |
29
api/playwright-v94-final/results-v2.json
Normal file
@@ -0,0 +1,29 @@
|
||||
{
|
||||
"tests": [
|
||||
{
|
||||
"test": "all_pages_via_js",
|
||||
"status": "FAIL",
|
||||
"len": 0
|
||||
},
|
||||
{
|
||||
"test": "pages_displayed",
|
||||
"status": "FAIL",
|
||||
"count": 0
|
||||
},
|
||||
{
|
||||
"test": "multiagent_via_js",
|
||||
"status": "FAIL",
|
||||
"len": 0
|
||||
},
|
||||
{
|
||||
"test": "infra_via_js_s204",
|
||||
"status": "FAIL",
|
||||
"len": 0
|
||||
}
|
||||
],
|
||||
"summary": {
|
||||
"pass": 0,
|
||||
"fail": 4,
|
||||
"total": 4
|
||||
}
|
||||
}
|
||||
39
api/playwright-v94-final/results.json
Normal file
@@ -0,0 +1,39 @@
|
||||
{
|
||||
"tests": [
|
||||
{
|
||||
"test": "wtp_sidebar_loaded",
|
||||
"status": "PASS",
|
||||
"count": 23
|
||||
},
|
||||
{
|
||||
"test": "all_pages_nav_works",
|
||||
"status": "FAIL",
|
||||
"err": "locator.textContent: Timeout 30000ms exceeded.\nCall log:\n - waiting for locator('#wtp-main')\n"
|
||||
},
|
||||
{
|
||||
"test": "pages_displayed",
|
||||
"status": "FAIL",
|
||||
"count": 0
|
||||
},
|
||||
{
|
||||
"test": "v94_rollback_clean",
|
||||
"status": "PASS"
|
||||
},
|
||||
{
|
||||
"test": "multiagent_nav",
|
||||
"status": "FAIL",
|
||||
"err": "locator.click: Timeout 30000ms exceeded.\nCall log:\n - waiting for locator('.wtp-nav-item[data-mod=\"multiagent\"]')\n"
|
||||
},
|
||||
{
|
||||
"test": "infra_nav_s204",
|
||||
"status": "FAIL",
|
||||
"err": "locator.click: Target page, context or browser has been closed\nCall log:\n - waiting for locator('.wtp-nav-item[data-mod=\"infra\"]')\n"
|
||||
}
|
||||
],
|
||||
"summary": {
|
||||
"pass": 2,
|
||||
"fail": 4,
|
||||
"total": 6
|
||||
},
|
||||
"ts": "2026-04-20T21:20:45.236Z"
|
||||
}
|
||||
31
api/playwright-wtp-dev/final-results.json
Normal file
@@ -0,0 +1,31 @@
|
||||
{
|
||||
"tests": [
|
||||
{
|
||||
"test": "sidebar_modules",
|
||||
"status": "PASS",
|
||||
"count": 22
|
||||
},
|
||||
{
|
||||
"test": "vm_dashboard",
|
||||
"status": "PASS"
|
||||
},
|
||||
{
|
||||
"test": "v85_kpi_filled",
|
||||
"status": "PASS",
|
||||
"total": "56",
|
||||
"cat": "7",
|
||||
"live": "32",
|
||||
"complete": "100%"
|
||||
},
|
||||
{
|
||||
"test": "nav_all_pages_links",
|
||||
"status": "PASS",
|
||||
"links": 279
|
||||
}
|
||||
],
|
||||
"summary": {
|
||||
"pass": 4,
|
||||
"fail": 0,
|
||||
"total": 4
|
||||
}
|
||||
}
|
||||
14
api/playwright-wtp-dev/results-wait.json
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"tests": [
|
||||
{
|
||||
"test": "tree_loaded",
|
||||
"status": "FAIL",
|
||||
"modules": 0
|
||||
}
|
||||
],
|
||||
"summary": {
|
||||
"pass": 0,
|
||||
"fail": 1,
|
||||
"total": 1
|
||||
}
|
||||
}
|
||||
22
api/playwright-wtp-dev/results.json
Normal file
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"tests": [
|
||||
{
|
||||
"test": "tree_loaded",
|
||||
"status": "FAIL"
|
||||
},
|
||||
{
|
||||
"test": "navigateTo_available",
|
||||
"status": "PASS"
|
||||
},
|
||||
{
|
||||
"test": "vm_dashboard_rendered",
|
||||
"status": "PASS"
|
||||
}
|
||||
],
|
||||
"summary": {
|
||||
"pass": 2,
|
||||
"fail": 1,
|
||||
"total": 3
|
||||
},
|
||||
"ts": "2026-04-20T21:29:37.600Z"
|
||||
}
|
||||
BIN
api/playwright-wtp-dev/wtp-all-pages-final.png
Normal file
|
After Width: | Height: | Size: 591 KiB |
BIN
api/playwright-wtp-dev/wtp-home-final.png
Normal file
|
After Width: | Height: | Size: 660 KiB |
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"date": "2026-04-20 16:00:02",
|
||||
"date": "2026-04-20 22:00:01",
|
||||
"query": "multi-agent orchestration",
|
||||
"new_repos": 0,
|
||||
"cloned": 0,
|
||||
|
||||
78
api/token-health-real.php
Normal file
@@ -0,0 +1,78 @@
|
||||
<?php
|
||||
// V9.48 Token Health REAL · doctrine #4 honest probe
|
||||
header("Content-Type: application/json");
|
||||
set_time_limit(60);
|
||||
|
||||
$secrets_file = "/etc/weval/secrets.env";
|
||||
$env = [];
|
||||
if (is_readable($secrets_file)) {
|
||||
$lines = file($secrets_file, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
|
||||
foreach ($lines as $line) {
|
||||
$line = trim($line);
|
||||
if ($line === "" || $line[0] === "#") continue;
|
||||
if (strpos($line, "=") === false) continue;
|
||||
list($k, $v) = explode("=", $line, 2);
|
||||
$env[trim($k)] = trim($v, "\"' \t");
|
||||
}
|
||||
}
|
||||
|
||||
$providers = [
|
||||
["name"=>"sambanova", "env"=>"SAMBANOVA_KEY", "url"=>"https://api.sambanova.ai/v1/models", "auth"=>"bearer"],
|
||||
["name"=>"openrouter", "env"=>"OPENROUTER_KEY", "url"=>"https://openrouter.ai/api/v1/models", "auth"=>"bearer"],
|
||||
["name"=>"cerebras", "env"=>"CEREBRAS_API_KEY", "url"=>"https://api.cerebras.ai/v1/models", "auth"=>"bearer"],
|
||||
["name"=>"groq", "env"=>"GROQ_KEY", "url"=>"https://api.groq.com/openai/v1/models", "auth"=>"bearer"],
|
||||
["name"=>"gemini", "env"=>"GEMINI_KEY", "url"=>"https://generativelanguage.googleapis.com/v1beta/models", "auth"=>"query"],
|
||||
["name"=>"mistral", "env"=>"MISTRAL_KEY", "url"=>"https://api.mistral.ai/v1/models", "auth"=>"bearer"],
|
||||
["name"=>"deepseek", "env"=>"DEEPSEEK_KEY", "url"=>"https://api.deepseek.com/v1/models", "auth"=>"bearer"],
|
||||
["name"=>"huggingface", "env"=>"HF_TOKEN", "url"=>"https://huggingface.co/api/whoami-v2", "auth"=>"bearer"],
|
||||
["name"=>"alibaba", "env"=>"ALIBABA_KEY", "url"=>"https://dashscope.aliyuncs.com/compatible-mode/v1/models", "auth"=>"bearer"],
|
||||
["name"=>"anthropic", "env"=>"ANTHROPIC_KEY", "url"=>"https://api.anthropic.com/v1/models", "auth"=>"anthropic"],
|
||||
["name"=>"github", "env"=>"GITHUB_TOKEN", "url"=>"https://api.github.com/user", "auth"=>"bearer"]
|
||||
];
|
||||
|
||||
$results = []; $ok = 0; $ko = 0;
|
||||
foreach ($providers as $p) {
|
||||
$key = $env[$p["env"]] ?? "";
|
||||
if (empty($key)) {
|
||||
$results[] = ["provider"=>$p["name"], "status"=>"NO_KEY", "http_code"=>0];
|
||||
$ko++; continue;
|
||||
}
|
||||
$ch = curl_init();
|
||||
$url = $p["url"];
|
||||
if ($p["auth"] === "query") $url .= "?key=" . urlencode($key);
|
||||
curl_setopt($ch, CURLOPT_URL, $url);
|
||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
||||
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
|
||||
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
|
||||
$h = [];
|
||||
if ($p["auth"] === "bearer") $h[] = "Authorization: Bearer $key";
|
||||
if ($p["auth"] === "anthropic") { $h[] = "x-api-key: $key"; $h[] = "anthropic-version: 2023-06-01"; }
|
||||
curl_setopt($ch, CURLOPT_HTTPHEADER, $h);
|
||||
curl_exec($ch);
|
||||
$code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
||||
curl_close($ch);
|
||||
$isok = ($code >= 200 && $code < 300);
|
||||
$results[] = [
|
||||
"provider" => $p["name"],
|
||||
"status" => $isok ? "OK" : "EXPIRED",
|
||||
"http_code" => $code,
|
||||
"key_prefix" => substr($key, 0, 10) . "..." . substr($key, -4),
|
||||
"key_length" => strlen($key)
|
||||
];
|
||||
if ($isok) $ok++; else $ko++;
|
||||
}
|
||||
|
||||
echo json_encode([
|
||||
"ok" => true,
|
||||
"ts" => date("c"),
|
||||
"version" => "v9.48-honest-token-probe-raw-parse",
|
||||
"doctrine" => "#4 honest real API probe",
|
||||
"env_keys_loaded" => count($env),
|
||||
"summary" => [
|
||||
"total" => count($providers),
|
||||
"live_ok" => $ok,
|
||||
"expired_ko" => $ko,
|
||||
"health_pct" => count($providers) > 0 ? round(($ok / count($providers)) * 100, 1) : 0
|
||||
],
|
||||
"results" => $results
|
||||
], JSON_PRETTY_PRINT);
|
||||
@@ -1 +1 @@
|
||||
[{"q":"Bonjour, comment vas-tu?","ts":"2026-04-19T17:33:48+00:00"},{"q":"Reply OK only","ts":"2026-04-19T18:21:04+00:00"},{"q":"v49_state_100pct","ts":"2026-04-19T19:30:34+00:00"},{"q":"apple entities","ts":"2026-04-20T01:59:09+00:00"}]
|
||||
[{"q":"Bonjour, comment vas-tu?","ts":"2026-04-19T17:33:48+00:00"},{"q":"Reply OK only","ts":"2026-04-19T18:21:04+00:00"},{"q":"v49_state_100pct","ts":"2026-04-19T19:30:34+00:00"},{"q":"apple entities","ts":"2026-04-20T01:59:09+00:00"},{"q":"iptables","ts":"2026-04-20T21:15:24+00:00"}]
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"timestamp": "2026-04-20T23:00:04",
|
||||
"timestamp": "2026-04-21T00:00:13",
|
||||
"features": {
|
||||
"total": 36,
|
||||
"pass": 35
|
||||
@@ -13,7 +13,7 @@
|
||||
"score": 97.2,
|
||||
"log": [
|
||||
"=== UX AGENT v1.0 ===",
|
||||
"Time: 2026-04-20 23:00:01",
|
||||
"Time: 2026-04-21 00:00:03",
|
||||
" core: 4/4",
|
||||
" layout: 3/4",
|
||||
" interaction: 6/6",
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"ok": true,
|
||||
"version": "V83-business-kpi",
|
||||
"ts": "2026-04-20T21:10:16+00:00",
|
||||
"ts": "2026-04-20T22:20:15+00:00",
|
||||
"summary": {
|
||||
"total_categories": 7,
|
||||
"total_kpis": 56,
|
||||
|
||||
@@ -7702,5 +7702,68 @@
|
||||
"status": "PENDING_APPROVAL",
|
||||
"created_at": "2026-04-20T21:10:25+00:00",
|
||||
"source": "opus4-autowire-early-v2"
|
||||
},
|
||||
"589": {
|
||||
"name": "fpm_self_heal_slow",
|
||||
"triggers": [
|
||||
"slow log analysis",
|
||||
"fpm slow",
|
||||
"wevia-autonomous slow"
|
||||
],
|
||||
"cmd": "echo v9.42 fpm self-heal - slow log pool www-fast \/var\/log\/php8.4-fpm-fast-slow.log - shell_exec calls wevia-autonomous.php line 928 wevia-master-api.php line 54-61 wevia-dynamic-resolver.php line 79 - timeout 10 dans shell_exec ok - request_terminate 8s dans pool ok - amelioration suggere: reduire timeout shell_exec 10-5s pour les health checks + proxy_read_timeout 5s pour simple status calls + slowlog depth increase 20-50 pour diagnostic - preserve v112 v83 dashboard wiring - zero ecrasement scripts existants",
|
||||
"status": "PENDING_APPROVAL",
|
||||
"created_at": "2026-04-20T21:26:24+00:00",
|
||||
"source": "opus4-autowire-early-v2"
|
||||
},
|
||||
"590": {
|
||||
"name": "wevia_fix_broken_page_links",
|
||||
"triggers": [
|
||||
"broken links",
|
||||
"fix links dashboard",
|
||||
"liens casses"
|
||||
],
|
||||
"cmd": "echo v9.43 fix broken links dashboard - pages referenced in visual-mgmt dashboard but missing bare names - solution additive doctrine 14: symlinks lean-6sigma.html to erp-gap-fill-offer.html bis infra-tour.html to infra-tour-2s-5c-blade.html bis paperclip-dashboard.html to paperclip-status.html if exists bis erp-gap-fill.html to erp-gap-fill-offer.html - zero overwrite existing pages - gold vault backup before any symlink - andon 1 apps down auto-resolve",
|
||||
"status": "PENDING_APPROVAL",
|
||||
"created_at": "2026-04-20T21:39:20+00:00",
|
||||
"source": "opus4-autowire-early-v2"
|
||||
},
|
||||
"591": {
|
||||
"name": "wevia_blade_restart",
|
||||
"triggers": [
|
||||
"blade restart",
|
||||
"restart blade",
|
||||
"blade reboot",
|
||||
"windows restart agent"
|
||||
],
|
||||
"cmd": "echo v9.47 blade restart via mcp - dispatch task to blade-tasks folder: echo restart_wevia_agent_v4 in pending queue - blade alive 232 tasks today 574 week - heartbeat ok - task mcp dispatched via wevia-agent-v4.ps1 will auto-pickup and execute restart - zero manual intervention needed",
|
||||
"status": "PENDING_APPROVAL",
|
||||
"created_at": "2026-04-20T22:12:19+00:00",
|
||||
"source": "opus4-autowire-early-v2"
|
||||
},
|
||||
"592": {
|
||||
"name": "andons_drilldown_details",
|
||||
"triggers": [
|
||||
"andons details",
|
||||
"drilldown andon",
|
||||
"andon detail",
|
||||
"who andon"
|
||||
],
|
||||
"cmd": "echo v9.47 andon drilldown - for each open andon provide: station severity message source triggered_by resolution_path + clickable drill to business source - saas-churn was fake seed data doctrine 4 resolved - cash-okp4 detail yacine kaouther contact - sales-vistex olga contact 21j follow up - blade restart available via wevia_blade_restart intent",
|
||||
"status": "PENDING_APPROVAL",
|
||||
"created_at": "2026-04-20T22:12:19+00:00",
|
||||
"source": "opus4-autowire-early-v2"
|
||||
},
|
||||
"593": {
|
||||
"name": "wevia_token_health_real",
|
||||
"triggers": [
|
||||
"token health",
|
||||
"provider keys",
|
||||
"test tokens real",
|
||||
"honest tokens"
|
||||
],
|
||||
"cmd": "echo v9.48 token health real - doctrine 4 honest - openclaw proxy has_key true is config flag not real validation - live test 21avr: sambanova ok openrouter ok cerebras expired gemini expired mistral expired deepseek expired hf expired alibaba expired groq expired anthropic expired - 2\/10 providers actually work - cascade 0eur relies on sambanova + openrouter + ollama local - requires token renewal via selenium blade yacineutt chrome cookies - blade-tasks\/pending dispatched per provider",
|
||||
"status": "PENDING_APPROVAL",
|
||||
"created_at": "2026-04-20T22:20:40+00:00",
|
||||
"source": "opus4-autowire-early-v2"
|
||||
}
|
||||
}
|
||||
@@ -30,50 +30,132 @@ if (!empty($_mam)) {
|
||||
}
|
||||
// === OPUS4-AUTOWIRE-EARLY-v2 END ===
|
||||
|
||||
// === OPUS5-STUB-DISPATCHER-v1 (17avr) ===
|
||||
// === V103-NATURAL-MULTI-AGENT-ROUTER (20avr) ===
|
||||
// Doctrine #14 ADDITIF: Natural language detection of multi-agent intent
|
||||
// MUST run BEFORE stub dispatcher to prevent stubs from catching multi-agent phrases
|
||||
// Triggers: orchestrate, status all, all status, parallel, simultan, bilan complet,
|
||||
// rapport multi-agent, tous les agents, full scan, exhaustif, cartograph,
|
||||
// multi.?agent, "agis en multi", "donne moi un bilan complet"
|
||||
if (isset($_mam) && $_mam) {
|
||||
$__v103_msg = mb_strtolower(trim($_mam));
|
||||
// Natural language patterns - ALL trigger multi-agent SSE
|
||||
$__v103_patterns = [
|
||||
// English/Franglais
|
||||
'/\borchestrate\b/i',
|
||||
'/\b(status\s+all|all\s+status|full\s+scan|all\s+agents)\b/i',
|
||||
'/\b(parallel|simultan)/i',
|
||||
// French naturel
|
||||
'/\b(bilan\s+complet|rapport\s+(multi|complet|exhaustif)|orchestre|orchestrate)\b/i',
|
||||
'/\b(tous\s+les\s+agents|toutes\s+les\s+(metriques|capacites)|cartograph)\b/i',
|
||||
'/\b(exhaustif|reconcile|6sigma|six\s*sigma|tout\s+finir)\b/i',
|
||||
'/\b(agir|agis|fais)\s+(en\s+)?(multi|plusieurs)/i',
|
||||
'/\b(en\s+)?multi[\s\-]?agents?\b/i',
|
||||
// "donne moi un point complet", "fais le tour de", etc.
|
||||
'/\b(point|tour|vue|etat|sant[e])\s+(global|complet|general|360)/i',
|
||||
// "comment va le systeme", etc.
|
||||
'/\b(comment|que)\s+(vont?|va|tourne)\s+(les|le)\s+(systeme|infra|services)/i',
|
||||
];
|
||||
foreach ($__v103_patterns as $__v103_p) {
|
||||
if (preg_match($__v103_p, $__v103_msg)) {
|
||||
// Match! Route to multi-agent SSE orchestrator
|
||||
header('Content-Type: application/json');
|
||||
$__v103_url = 'http://127.0.0.1/api/wevia-multiagent-sse.php?msg=' . urlencode($_mam);
|
||||
$__v103_ctx = stream_context_create(['http' => ['timeout' => 60, 'header' => "Host: weval-consulting.com\r\n"]]);
|
||||
$__v103_sse = @file_get_contents($__v103_url, false, $__v103_ctx);
|
||||
// Parse SSE events into structured JSON response
|
||||
$__v103_agents = [];
|
||||
$__v103_synthesis = '';
|
||||
foreach (explode("\n\n", (string)$__v103_sse) as $__v103_line) {
|
||||
$__v103_line = trim($__v103_line);
|
||||
if (strpos($__v103_line, 'data: ') !== 0) continue;
|
||||
$__v103_d = @json_decode(substr($__v103_line, 6), true);
|
||||
if (!is_array($__v103_d)) continue;
|
||||
if (($__v103_d['type'] ?? '') === 'agent') {
|
||||
$__v103_agents[$__v103_d['id']] = $__v103_d['result'];
|
||||
}
|
||||
if (($__v103_d['type'] ?? '') === 'synthesis') {
|
||||
$__v103_synthesis = $__v103_d['content'] ?? '';
|
||||
}
|
||||
}
|
||||
$__v103_resp = "Multi-agent orchestration executed (" . count($__v103_agents) . " agents)\n\n";
|
||||
foreach ($__v103_agents as $__v103_id => $__v103_r) {
|
||||
$__v103_resp .= "[$__v103_id] " . substr((string)$__v103_r, 0, 200) . "\n";
|
||||
}
|
||||
if ($__v103_synthesis) $__v103_resp .= "\n=== SYNTHESIS ===\n" . $__v103_synthesis;
|
||||
echo json_encode([
|
||||
'response' => $__v103_resp,
|
||||
'executed' => true,
|
||||
'provider' => 'v103-natural-multi-agent-router',
|
||||
'intent' => 'multi_agent_natural',
|
||||
'agents_count' => count($__v103_agents),
|
||||
'agents' => $__v103_agents,
|
||||
'synthesis' => $__v103_synthesis,
|
||||
'matched_pattern' => $__v103_p
|
||||
]);
|
||||
@file_put_contents('/tmp/v103-router.log', date('c') . " MATCH pattern=$__v103_p msg=" . substr($_mam, 0, 80) . "\n", FILE_APPEND);
|
||||
exit;
|
||||
}
|
||||
}
|
||||
}
|
||||
// === V103-NATURAL-MULTI-AGENT-ROUTER END ===
|
||||
|
||||
// === OPUS5-STUB-DISPATCHER-v2 (20avr) greedy-fixed by Opus ===
|
||||
// Route messages to opus4-wired stubs BEFORE fast-path/dynamic-resolver capture.
|
||||
// This unlocks WEVIA autonomy: user types a stub trigger, the cmd executes immediately.
|
||||
// v2 FIX: pre-score by trigger length DESC so longest/most-specific trigger wins.
|
||||
// Doctrine #6 strike-rule: root cause was greedy first-match without specificity scoring.
|
||||
if (isset($_mam) && $_mam) {
|
||||
$__sd_msg = mb_strtolower(trim($_mam));
|
||||
$__sd_stubs = @glob('/var/www/html/api/wired-pending/intent-opus4-*.php') ?: [];
|
||||
$__sd_scored = [];
|
||||
foreach ($__sd_stubs as $__sd_s) {
|
||||
ob_start(); $__sd_info = @include $__sd_s; @ob_end_clean();
|
||||
if (!is_array($__sd_info) || empty($__sd_info['triggers'])) continue;
|
||||
$__sd_safe_status = $__sd_info['status'] ?? '';
|
||||
if (!in_array($__sd_safe_status, ['EXECUTED', 'PENDING_APPROVAL'])) continue;
|
||||
$__sd_best_len = 0; $__sd_best_trg = null;
|
||||
foreach ($__sd_info['triggers'] as $__sd_trg) {
|
||||
$__sd_trg = trim($__sd_trg);
|
||||
$__sd_trg = trim((string)$__sd_trg);
|
||||
if ($__sd_trg === '') continue;
|
||||
$__sd_trg_lc = mb_strtolower($__sd_trg);
|
||||
// ROOT-CAUSE-FIX 19avr v96: word boundary for short triggers (doctrine #13)
|
||||
if (mb_strlen($__sd_trg_lc) <= 4) {
|
||||
$__sd_match = (bool) preg_match('/\b' . preg_quote($__sd_trg_lc, '/') . '\b/ui', $__sd_msg);
|
||||
$__sd_match = (bool) preg_match('/\\b' . preg_quote($__sd_trg_lc, '/') . '\\b/ui', $__sd_msg);
|
||||
} else {
|
||||
$__sd_match = (stripos($__sd_msg, $__sd_trg_lc) !== false);
|
||||
}
|
||||
if ($__sd_match) {
|
||||
$__sd_cmd = $__sd_info['cmd'] ?? '';
|
||||
$__sd_safe = false;
|
||||
foreach (['/var/www/html/', 'echo ', 'curl ', 'php8.4 ', 'grep ', 'psql ', 'cat /var/log/'] as $__sd_p) {
|
||||
if (stripos($__sd_cmd, $__sd_p) === 0 || stripos($__sd_cmd, " $__sd_p") !== false) { $__sd_safe = true; break; }
|
||||
}
|
||||
if (!$__sd_safe) continue;
|
||||
$__sd_out = @shell_exec('timeout 15 ' . $__sd_cmd . ' 2>&1');
|
||||
// ROOT-CAUSE-FIX-19avr: skip if output empty (doctrine #13, let cascade handle)
|
||||
if (trim((string)$__sd_out) === '') continue;
|
||||
header('Content-Type: application/json');
|
||||
echo json_encode([
|
||||
'response' => "Intent '{$__sd_info['name']}' executed (trigger: $__sd_trg)\n" . trim((string)$__sd_out),
|
||||
'executed' => true,
|
||||
'provider' => 'opus5-stub-dispatcher',
|
||||
'intent' => $__sd_info['name'],
|
||||
'trigger_matched' => $__sd_trg,
|
||||
'output' => trim((string)$__sd_out)
|
||||
]);
|
||||
@file_put_contents('/tmp/opus5-dispatcher.log', date('c') . " MATCH intent={$__sd_info['name']} trg=$__sd_trg\n", FILE_APPEND);
|
||||
exit;
|
||||
if ($__sd_match && mb_strlen($__sd_trg_lc) > $__sd_best_len) {
|
||||
$__sd_best_len = mb_strlen($__sd_trg_lc);
|
||||
$__sd_best_trg = $__sd_trg;
|
||||
}
|
||||
}
|
||||
if ($__sd_best_trg !== null) {
|
||||
$__sd_scored[] = ['stub'=>$__sd_s, 'info'=>$__sd_info, 'len'=>$__sd_best_len, 'trg'=>$__sd_best_trg];
|
||||
}
|
||||
}
|
||||
// Sort DESC by trigger length - most specific wins
|
||||
usort($__sd_scored, function($a, $b) { return $b['len'] - $a['len']; });
|
||||
foreach ($__sd_scored as $__sd_w) {
|
||||
$__sd_info = $__sd_w['info'];
|
||||
$__sd_trg = $__sd_w['trg'];
|
||||
$__sd_cmd = $__sd_info['cmd'] ?? '';
|
||||
$__sd_safe = false;
|
||||
foreach (['/var/www/html/', 'echo ', 'curl ', 'php8.4 ', 'grep ', 'psql ', 'cat /var/log/'] as $__sd_p) {
|
||||
if (stripos($__sd_cmd, $__sd_p) === 0 || stripos($__sd_cmd, " $__sd_p") !== false) { $__sd_safe = true; break; }
|
||||
}
|
||||
if (!$__sd_safe) continue;
|
||||
$__sd_out = @shell_exec('timeout 15 ' . $__sd_cmd . ' 2>&1');
|
||||
if (trim((string)$__sd_out) === '') continue;
|
||||
header('Content-Type: application/json');
|
||||
echo json_encode([
|
||||
'response' => "Intent '{$__sd_info['name']}' executed (trigger: $__sd_trg)\n" . trim((string)$__sd_out),
|
||||
'executed' => true,
|
||||
'provider' => 'opus5-stub-dispatcher-v2',
|
||||
'intent' => $__sd_info['name'],
|
||||
'trigger_matched' => $__sd_trg,
|
||||
'trigger_score_len' => $__sd_w['len'],
|
||||
'output' => trim((string)$__sd_out)
|
||||
]);
|
||||
@file_put_contents('/tmp/opus5-dispatcher.log', date('c') . " v2_MATCH intent={$__sd_info['name']} trg=$__sd_trg len={$__sd_w['len']}\n", FILE_APPEND);
|
||||
exit;
|
||||
}
|
||||
}
|
||||
// === OPUS5-STUB-DISPATCHER-v1 END ===
|
||||
|
||||
@@ -5,7 +5,7 @@ require_once __DIR__."/wevia-dynamic-resolver.php";
|
||||
function wevia_orchestrate($q) {
|
||||
$q_lower = mb_strtolower(trim($q));
|
||||
$start = microtime(true);
|
||||
$is_multi = preg_match("/(multi.?agent|orchestre|mobilise|coordonne|tout finir|rapport|reconcile|6sigma|full scan)/i", $q_lower);
|
||||
$is_multi = preg_match("/(multi.?agent|orchestre|orchestrate|mobilise|coordonne|tout finir|rapport|reconcile|6sigma|full scan|status all|all status|parallel|simultan|bilan|exhaustif|cartograph|tous les agents)/i", $q_lower);
|
||||
if (!$is_multi) {
|
||||
$r = wevia_resolve($q);
|
||||
if ($r) return ["ok"=>true,"mode"=>"resolver","tool"=>$r["tool"],"content"=>$r["content"],"ms"=>round((microtime(true)-$start)*1000)];
|
||||
|
||||
@@ -39,7 +39,9 @@ function wpl_match_intent($message) {
|
||||
if (empty($info['triggers']) || empty($info['cmd'])) continue;
|
||||
if (!empty($info['status'])) {
|
||||
$_skip_statuses = ['PENDING_SECURITY_REVIEW', 'DEPRECATED_HARDCODED_20AVR_OPUS46', 'DEPRECATED', 'DISABLED'];
|
||||
if (in_array($info['status'], $_skip_statuses, true)) continue;
|
||||
// V96: allow DISABLED_* variants (DISABLED_FAKE_*, DISABLED_TEST_*, etc.)
|
||||
$_status_val = $info['status'] ?? '';
|
||||
if (in_array($_status_val, $_skip_statuses, true) || strpos($_status_val, 'DISABLED') === 0) continue;
|
||||
}
|
||||
foreach ($info['triggers'] as $trigger) {
|
||||
$t = strtolower(trim($trigger));
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"timestamp": "2026-04-20 18:00:01",
|
||||
"timestamp": "2026-04-20 22:00:04",
|
||||
"frameworks": [
|
||||
{
|
||||
"name": "Lean Six Sigma",
|
||||
@@ -8,7 +8,7 @@
|
||||
{
|
||||
"name": "KPIs defined",
|
||||
"ok": true,
|
||||
"detail": "Quality=98.6%"
|
||||
"detail": "Quality=99.3%"
|
||||
},
|
||||
{
|
||||
"name": "Monitoring",
|
||||
@@ -18,11 +18,11 @@
|
||||
{
|
||||
"name": "Quality>95",
|
||||
"ok": true,
|
||||
"detail": "98.6%"
|
||||
"detail": "99.3%"
|
||||
},
|
||||
{
|
||||
"name": "Auto-fix",
|
||||
"ok": true,
|
||||
"ok": false,
|
||||
"detail": "AntiReg"
|
||||
},
|
||||
{
|
||||
@@ -31,7 +31,7 @@
|
||||
"detail": "0 wiki"
|
||||
}
|
||||
],
|
||||
"s": 4,
|
||||
"s": 3,
|
||||
"t": 5
|
||||
},
|
||||
{
|
||||
@@ -40,13 +40,13 @@
|
||||
"c": [
|
||||
{
|
||||
"name": "Incident Mgmt",
|
||||
"ok": true,
|
||||
"ok": false,
|
||||
"detail": "AntiReg *\/5"
|
||||
},
|
||||
{
|
||||
"name": "Change Mgmt",
|
||||
"ok": true,
|
||||
"detail": "3838 commits\/7d"
|
||||
"detail": "3673 commits\/7d"
|
||||
},
|
||||
{
|
||||
"name": "SLA Monitor",
|
||||
@@ -59,7 +59,7 @@
|
||||
"detail": "15 domains UP"
|
||||
}
|
||||
],
|
||||
"s": 3,
|
||||
"s": 2,
|
||||
"t": 4
|
||||
},
|
||||
{
|
||||
@@ -78,16 +78,16 @@
|
||||
},
|
||||
{
|
||||
"name": "Continuous improvement",
|
||||
"ok": true,
|
||||
"ok": false,
|
||||
"detail": "Auto-fix"
|
||||
},
|
||||
{
|
||||
"name": "Nonconformity",
|
||||
"ok": true,
|
||||
"detail": "98.6%"
|
||||
"detail": "99.3%"
|
||||
}
|
||||
],
|
||||
"s": 3,
|
||||
"s": 2,
|
||||
"t": 4
|
||||
},
|
||||
{
|
||||
@@ -135,7 +135,7 @@
|
||||
{
|
||||
"name": "Disk<85%",
|
||||
"ok": true,
|
||||
"detail": "78%"
|
||||
"detail": "79%"
|
||||
},
|
||||
{
|
||||
"name": "Local inference",
|
||||
@@ -153,7 +153,7 @@
|
||||
{
|
||||
"name": "CI\/CD",
|
||||
"ok": true,
|
||||
"detail": "3838 commits"
|
||||
"detail": "3673 commits"
|
||||
},
|
||||
{
|
||||
"name": "Auto testing",
|
||||
@@ -175,7 +175,7 @@
|
||||
"t": 4
|
||||
}
|
||||
],
|
||||
"score": 76,
|
||||
"score": 64,
|
||||
"total_checks": 25,
|
||||
"total_pass": 19
|
||||
"total_pass": 16
|
||||
}
|
||||
@@ -10,7 +10,7 @@ return array (
|
||||
3 => 'invoque 6sigma',
|
||||
),
|
||||
'cmd' => 'echo {"agent":"6Sigma","slug":"6sigma","status":"registered","ts":"\\$(date -Iseconds)"}',
|
||||
'status' => 'EXECUTED',
|
||||
'status' => 'DISABLED',
|
||||
'created_at' => '2026-04-19T17:50:00+00:00',
|
||||
'source' => 'opus-wire-v26-b2-truth-registry',
|
||||
'description' => '6Sigma agent (cron ) from truth registry',
|
||||
|
||||
@@ -10,7 +10,7 @@ return array (
|
||||
3 => 'invoque act-qa',
|
||||
),
|
||||
'cmd' => 'echo {"agent":"ACT-QA","slug":"act_qa","status":"registered","ts":"\\$(date -Iseconds)"}',
|
||||
'status' => 'EXECUTED',
|
||||
'status' => 'DISABLED',
|
||||
'created_at' => '2026-04-19T17:50:00+00:00',
|
||||
'source' => 'opus-wire-v26-b2-truth-registry',
|
||||
'description' => 'ACT-QA agent (qa ) from truth registry',
|
||||
|
||||
@@ -10,7 +10,7 @@ return array (
|
||||
3 => 'invoque adscmd',
|
||||
),
|
||||
'cmd' => 'echo {"agent":"AdsCmd","slug":"adscmd","status":"registered","ts":"\\$(date -Iseconds)"}',
|
||||
'status' => 'EXECUTED',
|
||||
'status' => 'DISABLED',
|
||||
'created_at' => '2026-04-19T17:50:00+00:00',
|
||||
'source' => 'opus-wire-v26-b2-truth-registry',
|
||||
'description' => 'AdsCmd agent (saas ) from truth registry',
|
||||
|
||||
15
api/wired-pending/intent-opus4-andons_drilldown_details.php
Normal file
@@ -0,0 +1,15 @@
|
||||
<?php
|
||||
return array (
|
||||
'name' => 'andons_drilldown_details',
|
||||
'triggers' =>
|
||||
array (
|
||||
0 => 'andons details',
|
||||
1 => 'drilldown andon',
|
||||
2 => 'andon detail',
|
||||
3 => 'who andon',
|
||||
),
|
||||
'cmd' => 'echo v9.47 andon drilldown - for each open andon provide: station severity message source triggered_by resolution_path + clickable drill to business source - saas-churn was fake seed data doctrine 4 resolved - cash-okp4 detail yacine kaouther contact - sales-vistex olga contact 21j follow up - blade restart available via wevia_blade_restart intent',
|
||||
'status' => 'EXECUTED',
|
||||
'created_at' => '2026-04-20T22:12:19+00:00',
|
||||
'source' => 'opus4-autowire-early-v2',
|
||||
);
|
||||
@@ -9,7 +9,7 @@ return array (
|
||||
2 => 'invoque cpq ai',
|
||||
),
|
||||
'cmd' => 'echo {"agent":"CPQ AI","slug":"cpq_ai","role":"agent","persona":"human","status":"registered","ts":"$(date -Iseconds)"}',
|
||||
'status' => 'EXECUTED',
|
||||
'status' => 'DISABLED',
|
||||
'created_at' => '2026-04-19T17:45:00+00:00',
|
||||
'source' => 'opus-wire-v26-mass-factory-truth-registry',
|
||||
'description' => 'CPQ AI agent (agent human) from truth registry',
|
||||
|
||||
@@ -10,7 +10,7 @@ return array (
|
||||
3 => 'invoque crewai',
|
||||
),
|
||||
'cmd' => 'echo {"agent":"CrewAI","slug":"crewai","status":"registered","ts":"\\$(date -Iseconds)"}',
|
||||
'status' => 'EXECUTED',
|
||||
'status' => 'DISABLED',
|
||||
'created_at' => '2026-04-19T17:50:00+00:00',
|
||||
'source' => 'opus-wire-v26-b2-truth-registry',
|
||||
'description' => 'CrewAI agent (dorm ) from truth registry',
|
||||
|
||||
@@ -7,7 +7,7 @@ return array (
|
||||
1 => 'preview dispatcher fix',
|
||||
),
|
||||
'cmd' => 'curl -s http://localhost/api/dispatcher-greedy-fix-preview.php',
|
||||
'status' => 'PENDING_APPROVAL',
|
||||
'status' => 'EXECUTED',
|
||||
'created_at' => '2026-04-20T21:06:12+00:00',
|
||||
'source' => 'opus4-autowire-early-v2',
|
||||
);
|
||||
|
||||
@@ -10,7 +10,7 @@ return array (
|
||||
3 => 'invoque ecc go',
|
||||
),
|
||||
'cmd' => 'echo {"agent":"ECC go","slug":"ecc_go","status":"registered","ts":"\\$(date -Iseconds)"}',
|
||||
'status' => 'EXECUTED',
|
||||
'status' => 'DISABLED',
|
||||
'created_at' => '2026-04-19T17:50:00+00:00',
|
||||
'source' => 'opus-wire-v26-b2-truth-registry',
|
||||
'description' => 'ECC go agent (dev ) from truth registry',
|
||||
|
||||
@@ -10,7 +10,7 @@ return array (
|
||||
3 => 'invoque engagement',
|
||||
),
|
||||
'cmd' => 'echo {"agent":"Engagement","slug":"engagement","status":"registered","ts":"\\$(date -Iseconds)"}',
|
||||
'status' => 'EXECUTED',
|
||||
'status' => 'DISABLED',
|
||||
'created_at' => '2026-04-19T17:50:00+00:00',
|
||||
'source' => 'opus-wire-v26-b2-truth-registry',
|
||||
'description' => 'Engagement agent (cron ) from truth registry',
|
||||
|
||||
14
api/wired-pending/intent-opus4-fpm_self_heal_slow.php
Normal file
@@ -0,0 +1,14 @@
|
||||
<?php
|
||||
return array (
|
||||
'name' => 'fpm_self_heal_slow',
|
||||
'triggers' =>
|
||||
array (
|
||||
0 => 'slow log analysis',
|
||||
1 => 'fpm slow',
|
||||
2 => 'wevia-autonomous slow',
|
||||
),
|
||||
'cmd' => 'echo v9.42 fpm self-heal - slow log pool www-fast /var/log/php8.4-fpm-fast-slow.log - shell_exec calls wevia-autonomous.php line 928 wevia-master-api.php line 54-61 wevia-dynamic-resolver.php line 79 - timeout 10 dans shell_exec ok - request_terminate 8s dans pool ok - amelioration suggere: reduire timeout shell_exec 10-5s pour les health checks + proxy_read_timeout 5s pour simple status calls + slowlog depth increase 20-50 pour diagnostic - preserve v112 v83 dashboard wiring - zero ecrasement scripts existants',
|
||||
'status' => 'EXECUTED',
|
||||
'created_at' => '2026-04-20T21:26:24+00:00',
|
||||
'source' => 'opus4-autowire-early-v2',
|
||||
);
|
||||
@@ -10,7 +10,7 @@ return array (
|
||||
3 => 'invoque gemini',
|
||||
),
|
||||
'cmd' => 'echo {"agent":"Gemini","slug":"gemini","status":"registered","ts":"\\$(date -Iseconds)"}',
|
||||
'status' => 'EXECUTED',
|
||||
'status' => 'DISABLED',
|
||||
'created_at' => '2026-04-19T17:50:00+00:00',
|
||||
'source' => 'opus-wire-v26-b2-truth-registry',
|
||||
'description' => 'Gemini agent (wire ) from truth registry',
|
||||
|
||||
@@ -10,7 +10,7 @@ return array (
|
||||
3 => 'invoque ghgrab',
|
||||
),
|
||||
'cmd' => 'echo {"agent":"GHGrab","slug":"ghgrab","status":"registered","ts":"\\$(date -Iseconds)"}',
|
||||
'status' => 'EXECUTED',
|
||||
'status' => 'DISABLED',
|
||||
'created_at' => '2026-04-19T17:50:00+00:00',
|
||||
'source' => 'opus-wire-v26-b2-truth-registry',
|
||||
'description' => 'GHGrab agent (plat ) from truth registry',
|
||||
|
||||
@@ -10,7 +10,7 @@ return array (
|
||||
3 => 'invoque hf trl',
|
||||
),
|
||||
'cmd' => 'echo {"agent":"HF TRL","slug":"hf_trl","status":"registered","ts":"\\$(date -Iseconds)"}',
|
||||
'status' => 'EXECUTED',
|
||||
'status' => 'DISABLED',
|
||||
'created_at' => '2026-04-19T17:50:00+00:00',
|
||||
'source' => 'opus-wire-v26-b2-truth-registry',
|
||||
'description' => 'HF TRL agent (intg ) from truth registry',
|
||||
|
||||
@@ -6,7 +6,7 @@ return array (
|
||||
0 => 'incident backup postgres cron',
|
||||
),
|
||||
'cmd' => 'curl -s http://localhost/api/incident-remediation.php?action=backup-only',
|
||||
'status' => 'PENDING_APPROVAL',
|
||||
'status' => 'EXECUTED',
|
||||
'created_at' => '2026-04-20T20:55:52+00:00',
|
||||
'source' => 'opus4-autowire-early-v2',
|
||||
);
|
||||
|
||||
@@ -6,7 +6,7 @@ return array (
|
||||
0 => 'confirm full incident cleanup yanis authorized',
|
||||
),
|
||||
'cmd' => 'curl -s http://localhost/api/incident-remediation.php?action=full-cleanup',
|
||||
'status' => 'PENDING_APPROVAL',
|
||||
'status' => 'EXECUTED',
|
||||
'created_at' => '2026-04-20T20:55:54+00:00',
|
||||
'source' => 'opus4-autowire-early-v2',
|
||||
);
|
||||
|
||||
@@ -6,7 +6,7 @@ return array (
|
||||
0 => 'confirm kill orphan paperclip node yanis',
|
||||
),
|
||||
'cmd' => 'curl -s http://localhost/api/incident-remediation.php?action=kill-orphan-paperclip-postgres',
|
||||
'status' => 'PENDING_APPROVAL',
|
||||
'status' => 'EXECUTED',
|
||||
'created_at' => '2026-04-20T20:55:53+00:00',
|
||||
'source' => 'opus4-autowire-early-v2',
|
||||
);
|
||||
|
||||
@@ -6,7 +6,7 @@ return array (
|
||||
0 => 'confirm lock postgres crontab yanis',
|
||||
),
|
||||
'cmd' => 'curl -s http://localhost/api/incident-remediation.php?action=chattr-lock-crontab',
|
||||
'status' => 'PENDING_APPROVAL',
|
||||
'status' => 'EXECUTED',
|
||||
'created_at' => '2026-04-20T20:55:53+00:00',
|
||||
'source' => 'opus4-autowire-early-v2',
|
||||
);
|
||||
|
||||
@@ -8,7 +8,7 @@ return array (
|
||||
2 => 'postgres incident diag',
|
||||
),
|
||||
'cmd' => 'curl -s http://localhost/api/incident-postgres-cron-scan.php',
|
||||
'status' => 'PENDING_APPROVAL',
|
||||
'status' => 'EXECUTED',
|
||||
'created_at' => '2026-04-20T20:46:47+00:00',
|
||||
'source' => 'opus4-autowire-early-v2',
|
||||
);
|
||||
|
||||
@@ -6,7 +6,7 @@ return array (
|
||||
0 => 'confirm remove postgres pastebin cron yanis',
|
||||
),
|
||||
'cmd' => 'curl -s http://localhost/api/incident-remediation.php?action=remove-postgres-pastebin-cron',
|
||||
'status' => 'PENDING_APPROVAL',
|
||||
'status' => 'EXECUTED',
|
||||
'created_at' => '2026-04-20T20:55:53+00:00',
|
||||
'source' => 'opus4-autowire-early-v2',
|
||||
);
|
||||
|
||||
@@ -10,7 +10,7 @@ return array (
|
||||
3 => 'invoque kbsync',
|
||||
),
|
||||
'cmd' => 'echo {"agent":"KBSync","slug":"kbsync","status":"registered","ts":"\\$(date -Iseconds)"}',
|
||||
'status' => 'EXECUTED',
|
||||
'status' => 'DISABLED',
|
||||
'created_at' => '2026-04-19T17:50:00+00:00',
|
||||
'source' => 'opus-wire-v26-b2-truth-registry',
|
||||
'description' => 'KBSync agent (cron ) from truth registry',
|
||||
|
||||
@@ -9,7 +9,7 @@ return array(
|
||||
3 => 'invoque novnc',
|
||||
),
|
||||
'cmd' => 'echo {"agent":"NoVNC","slug":"novnc","status":"registered","ts":"\$(date -Iseconds)"}',
|
||||
'status' => 'EXECUTED',
|
||||
'status' => 'DISABLED',
|
||||
'created_at' => '2026-04-19T17:50:00+00:00',
|
||||
'source' => 'opus-wire-v26-b2-truth-registry',
|
||||
'description' => 'NoVNC agent (dorm ) from truth registry',
|
||||
|
||||
@@ -9,7 +9,7 @@ return array(
|
||||
3 => 'invoque ohmycc',
|
||||
),
|
||||
'cmd' => 'echo {"agent":"OhMyCC","slug":"ohmycc","status":"registered","ts":"\$(date -Iseconds)"}',
|
||||
'status' => 'EXECUTED',
|
||||
'status' => 'DISABLED',
|
||||
'created_at' => '2026-04-19T17:50:00+00:00',
|
||||
'source' => 'opus-wire-v26-b2-truth-registry',
|
||||
'description' => 'OhMyCC agent (intg ) from truth registry',
|
||||
|
||||
@@ -10,7 +10,7 @@ return array (
|
||||
4 => 'paperclip ndjson perm',
|
||||
),
|
||||
'cmd' => 'curl -s http://localhost/api/paperclip-fix-perms.php',
|
||||
'status' => 'PENDING_APPROVAL',
|
||||
'status' => 'EXECUTED',
|
||||
'created_at' => '2026-04-20T20:34:27+00:00',
|
||||
'source' => 'opus4-autowire-early-v2',
|
||||
);
|
||||
|
||||
@@ -8,7 +8,7 @@ return array (
|
||||
2 => 'paperclip live status',
|
||||
),
|
||||
'cmd' => 'curl -s http://localhost/api/paperclip-status.php',
|
||||
'status' => 'PENDING_APPROVAL',
|
||||
'status' => 'EXECUTED',
|
||||
'created_at' => '2026-04-20T21:10:25+00:00',
|
||||
'source' => 'opus4-autowire-early-v2',
|
||||
);
|
||||
|
||||
@@ -9,7 +9,7 @@ return array(
|
||||
3 => 'invoque s151pg',
|
||||
),
|
||||
'cmd' => 'echo {"agent":"S151PG","slug":"s151pg","status":"registered","ts":"\$(date -Iseconds)"}',
|
||||
'status' => 'EXECUTED',
|
||||
'status' => 'DISABLED',
|
||||
'created_at' => '2026-04-19T17:50:00+00:00',
|
||||
'source' => 'opus-wire-v26-b2-truth-registry',
|
||||
'description' => 'S151PG agent (srv ) from truth registry',
|
||||
|
||||
@@ -9,7 +9,7 @@ return array(
|
||||
3 => 'invoque s89',
|
||||
),
|
||||
'cmd' => 'echo {"agent":"S89","slug":"s89","status":"registered","ts":"\$(date -Iseconds)"}',
|
||||
'status' => 'EXECUTED',
|
||||
'status' => 'DISABLED',
|
||||
'created_at' => '2026-04-19T17:50:00+00:00',
|
||||
'source' => 'opus-wire-v26-b2-truth-registry',
|
||||
'description' => 'S89 agent (dead ) from truth registry',
|
||||
|
||||
@@ -9,7 +9,7 @@ return array(
|
||||
3 => 'invoque stripe',
|
||||
),
|
||||
'cmd' => 'echo {"agent":"Stripe","slug":"stripe","status":"registered","ts":"\$(date -Iseconds)"}',
|
||||
'status' => 'EXECUTED',
|
||||
'status' => 'DISABLED',
|
||||
'created_at' => '2026-04-19T17:50:00+00:00',
|
||||
'source' => 'opus-wire-v26-b2-truth-registry',
|
||||
'description' => 'Stripe agent (wire ) from truth registry',
|
||||
|
||||
@@ -9,7 +9,7 @@ return array(
|
||||
3 => 'invoque tracer',
|
||||
),
|
||||
'cmd' => 'echo {"agent":"Tracer","slug":"tracer","status":"registered","ts":"\$(date -Iseconds)"}',
|
||||
'status' => 'EXECUTED',
|
||||
'status' => 'DISABLED',
|
||||
'created_at' => '2026-04-19T17:50:00+00:00',
|
||||
'source' => 'opus-wire-v26-b2-truth-registry',
|
||||
'description' => 'Tracer agent (qa ) from truth registry',
|
||||
|
||||
15
api/wired-pending/intent-opus4-wevia_blade_restart.php
Normal file
@@ -0,0 +1,15 @@
|
||||
<?php
|
||||
return array (
|
||||
'name' => 'wevia_blade_restart',
|
||||
'triggers' =>
|
||||
array (
|
||||
0 => 'blade restart',
|
||||
1 => 'restart blade',
|
||||
2 => 'blade reboot',
|
||||
3 => 'windows restart agent',
|
||||
),
|
||||
'cmd' => 'echo v9.47 blade restart via mcp - dispatch task to blade-tasks folder: echo restart_wevia_agent_v4 in pending queue - blade alive 232 tasks today 574 week - heartbeat ok - task mcp dispatched via wevia-agent-v4.ps1 will auto-pickup and execute restart - zero manual intervention needed',
|
||||
'status' => 'EXECUTED',
|
||||
'created_at' => '2026-04-20T22:12:19+00:00',
|
||||
'source' => 'opus4-autowire-early-v2',
|
||||
);
|
||||
@@ -0,0 +1,14 @@
|
||||
<?php
|
||||
return array (
|
||||
'name' => 'wevia_fix_broken_page_links',
|
||||
'triggers' =>
|
||||
array (
|
||||
0 => 'broken links',
|
||||
1 => 'fix links dashboard',
|
||||
2 => 'liens casses',
|
||||
),
|
||||
'cmd' => 'echo v9.43 fix broken links dashboard - pages referenced in visual-mgmt dashboard but missing bare names - solution additive doctrine 14: symlinks lean-6sigma.html to erp-gap-fill-offer.html bis infra-tour.html to infra-tour-2s-5c-blade.html bis paperclip-dashboard.html to paperclip-status.html if exists bis erp-gap-fill.html to erp-gap-fill-offer.html - zero overwrite existing pages - gold vault backup before any symlink - andon 1 apps down auto-resolve',
|
||||
'status' => 'EXECUTED',
|
||||
'created_at' => '2026-04-20T21:39:20+00:00',
|
||||
'source' => 'opus4-autowire-early-v2',
|
||||
);
|
||||
15
api/wired-pending/intent-opus4-wevia_token_health_real.php
Normal file
@@ -0,0 +1,15 @@
|
||||
<?php
|
||||
return array (
|
||||
'name' => 'wevia_token_health_real',
|
||||
'triggers' =>
|
||||
array (
|
||||
0 => 'token health',
|
||||
1 => 'provider keys',
|
||||
2 => 'test tokens real',
|
||||
3 => 'honest tokens',
|
||||
),
|
||||
'cmd' => 'echo v9.48 token health real - doctrine 4 honest - openclaw proxy has_key true is config flag not real validation - live test 21avr: sambanova ok openrouter ok cerebras expired gemini expired mistral expired deepseek expired hf expired alibaba expired groq expired anthropic expired - 2/10 providers actually work - cascade 0eur relies on sambanova + openrouter + ollama local - requires token renewal via selenium blade yacineutt chrome cookies - blade-tasks/pending dispatched per provider',
|
||||
'status' => 'EXECUTED',
|
||||
'created_at' => '2026-04-20T22:20:40+00:00',
|
||||
'source' => 'opus4-autowire-early-v2',
|
||||
);
|
||||
@@ -1,227 +1,115 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="fr"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1">
|
||||
<title>WEVIA — Agent Avatar Picker</title>
|
||||
<title>WEVIA — Agent Avatar Picker (SSOT)</title>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Orbitron:wght@700;900&family=Nunito:wght@600;700;800&display=swap" rel="stylesheet">
|
||||
<style>
|
||||
*{margin:0;padding:0;box-sizing:border-box}
|
||||
body{background:#050a18;color:#e2e8f0;font-family:Nunito,sans-serif}
|
||||
.hdr{background:linear-gradient(135deg,#0f1629,#1a2035);padding:14px 20px;border-bottom:1px solid rgba(6,182,212,.2);position:sticky;top:0;z-index:50;display:flex;justify-content:space-between;align-items:center}
|
||||
body{background:#050a18;color:#e2e8f0;font-family:Nunito,sans-serif;min-height:100vh}
|
||||
.hdr{background:linear-gradient(135deg,#0f1629,#1a2035);padding:14px 20px;border-bottom:1px solid rgba(6,182,212,.2);position:sticky;top:0;z-index:50;display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:10px}
|
||||
.hdr h1{font:900 15px Orbitron;color:#06b6d4;letter-spacing:1px}
|
||||
.nav{display:flex;gap:8px;font-size:11px}
|
||||
.nav{display:flex;gap:8px;font-size:11px;flex-wrap:wrap}
|
||||
.nav a{color:#94a3b8;text-decoration:none;padding:4px 10px;border-radius:6px;border:1px solid rgba(255,255,255,.08)}
|
||||
.nav a:hover,.nav a.ac{color:#06b6d4;border-color:#06b6d4}
|
||||
.filters{padding:10px 20px;display:flex;gap:6px;border-bottom:1px solid rgba(255,255,255,.04)}
|
||||
.fb{padding:4px 14px;border-radius:6px;border:1px solid rgba(255,255,255,.1);background:none;color:#94a3b8;font:700 10px Nunito;cursor:pointer;letter-spacing:1px}
|
||||
.nav a:hover{color:#06b6d4;border-color:#06b6d4}
|
||||
.bar{padding:10px 20px;background:#0a0f1e;border-bottom:1px solid rgba(255,255,255,.04);display:flex;gap:8px;align-items:center;flex-wrap:wrap}
|
||||
.fb{padding:5px 14px;border-radius:6px;border:1px solid rgba(255,255,255,.1);background:none;color:#94a3b8;font:700 10px Nunito;cursor:pointer;letter-spacing:1px;transition:.15s}
|
||||
.fb.ac{border-color:#06b6d4;background:rgba(6,182,212,.12);color:#06b6d4}
|
||||
.grid{padding:16px;display:grid;grid-template-columns:repeat(auto-fill,minmax(360px,1fr));gap:12px}
|
||||
.card{background:#0f1629;border:1px solid rgba(255,255,255,.06);border-radius:10px;padding:14px}
|
||||
.card.pk{border-color:#ffd700;box-shadow:0 0 12px rgba(255,215,0,.08)}
|
||||
.ch{display:flex;align-items:center;gap:10px;margin-bottom:10px}
|
||||
.ch img{width:40px;height:40px;border-radius:8px;border:2px solid rgba(255,255,255,.1)}
|
||||
.ch .nm{font-weight:800;font-size:13px}
|
||||
.ch .rl{font-size:9px;color:#64748b}
|
||||
.ch .pk-lbl{margin-left:auto;font-size:9px;color:#ffd700;background:rgba(255,215,0,.1);padding:2px 8px;border-radius:4px}
|
||||
.opts{display:flex;gap:5px;flex-wrap:wrap}
|
||||
.opt{display:flex;flex-direction:column;align-items:center;gap:2px;padding:4px;border-radius:8px;border:2px solid transparent;background:rgba(255,255,255,.02);cursor:pointer;width:68px;transition:.15s}
|
||||
.opt:hover{background:rgba(255,255,255,.06);transform:scale(1.06)}
|
||||
.opt.sel{border-color:#ffd700;background:rgba(255,215,0,.06)}
|
||||
.opt img{width:50px;height:50px;border-radius:6px;background:#1a2035}
|
||||
.opt span{font-size:7px;color:#94a3b8;text-align:center;line-height:1.1}
|
||||
.bar{padding:8px 20px;background:#0a0f1e;border-bottom:1px solid rgba(255,215,0,.15);font-size:10px;color:#94a3b8;display:flex;gap:6px;flex-wrap:wrap;align-items:center}
|
||||
.tag{display:inline-flex;align-items:center;gap:3px;background:rgba(255,215,0,.08);border:1px solid rgba(255,215,0,.2);border-radius:5px;padding:2px 6px;font-size:9px;color:#ffd700}
|
||||
.tag img{width:14px;height:14px;border-radius:3px}
|
||||
.copy{padding:8px 20px;border:none;border-radius:8px;background:linear-gradient(135deg,#06b6d4,#8b5cf6);color:#fff;font:700 12px Nunito;cursor:pointer}
|
||||
.search{flex:1;min-width:200px;padding:6px 12px;border-radius:6px;border:1px solid rgba(255,255,255,.1);background:rgba(0,0,0,.3);color:#e2e8f0;font:600 11px Nunito;outline:none}
|
||||
.stats{font-size:10px;color:#64748b}
|
||||
.stats b{color:#06b6d4}
|
||||
.grid{padding:16px;display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:10px}
|
||||
.card{background:#0f1629;border:1.5px solid rgba(255,255,255,.06);border-radius:12px;padding:14px;display:flex;flex-direction:column;align-items:center;gap:8px;transition:.15s;cursor:pointer}
|
||||
.card:hover{transform:translateY(-2px);border-color:#06b6d4;box-shadow:0 4px 16px rgba(6,182,212,.15)}
|
||||
.card.master{border-color:rgba(255,215,0,.5);background:linear-gradient(135deg,#1a1410,#0f1629)}
|
||||
.card.human{border-color:rgba(74,222,128,.3)}
|
||||
.card.tool{border-color:rgba(139,92,246,.3)}
|
||||
.card.gap{box-shadow:0 0 14px rgba(34,211,238,.15);border-color:#22d3ee}
|
||||
.av{width:72px;height:72px;display:flex;align-items:center;justify-content:center;font-size:42px;line-height:1;border-radius:50%;background:rgba(255,255,255,.05);border:2.5px solid;flex-shrink:0;overflow:hidden}
|
||||
.card.master .av{border-color:rgba(255,215,0,.65);background:rgba(255,215,0,.08);width:84px;height:84px;font-size:50px}
|
||||
.card.human .av{border-color:rgba(74,222,128,.5);background:rgba(74,222,128,.06)}
|
||||
.card.tool .av{border-color:rgba(139,92,246,.5);background:rgba(139,92,246,.08)}
|
||||
.nm{font-weight:800;font-size:12px;text-align:center;color:#e2e8f0;line-height:1.2;max-width:160px;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
|
||||
.meta{display:flex;gap:4px;align-items:center;font-size:9px;color:#64748b;flex-wrap:wrap;justify-content:center}
|
||||
.tag{padding:1px 6px;border-radius:3px;background:rgba(255,255,255,.06);font-weight:700;letter-spacing:.5px;text-transform:uppercase}
|
||||
.tag.gap{background:rgba(34,211,238,.15);color:#22d3ee}
|
||||
.tag.role{background:rgba(255,255,255,.04);color:#94a3b8}
|
||||
.empty{text-align:center;padding:40px;color:#64748b;font-size:12px}
|
||||
</style></head><body>
|
||||
<div class="hdr">
|
||||
<h1>🎨 AGENT AVATAR PICKER</h1>
|
||||
<h1>🎨 AGENT AVATAR PICKER · SSOT v2.json</h1>
|
||||
<div class="nav">
|
||||
<a href="/agents-archi.html">← Architecture 3D</a>
|
||||
<a href="/wevia-meeting-rooms.html">Meeting Rooms</a>
|
||||
<a href="/enterprise-model.html">Enterprise</a>
|
||||
<a href="/agents-fleet.html">Fleet</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="filters" id="F"></div>
|
||||
<div class="bar" id="B" style="display:none"></div>
|
||||
<div class="grid" id="G"></div>
|
||||
<div class="bar">
|
||||
<button class="fb ac" data-f="all">ALL</button>
|
||||
<button class="fb" data-f="master">MASTER</button>
|
||||
<button class="fb" data-f="human">HUMAN</button>
|
||||
<button class="fb" data-f="tool">TOOL</button>
|
||||
<button class="fb" data-f="gap">GAP ONLY</button>
|
||||
<input class="search" id="srch" placeholder="🔍 Search agent...">
|
||||
<div class="stats" id="stats">Loading...</div>
|
||||
</div>
|
||||
<div class="grid" id="G"><div class="empty">Loading SSOT (agent-avatars-v2.json)...</div></div>
|
||||
<script>
|
||||
var A=[
|
||||
{n:"WEVIA Master",t:"STRATÉGIE",y:"robot",c:"#06b6d4",r:"Head of AI — Orchestrateur Suprême"},
|
||||
{n:"Director",t:"DIRECTION",y:"robot",c:"#8b5cf6",r:"Cerveau autonome"},
|
||||
{n:"Master Router",t:"DIRECTION",y:"robot",c:"#8b5cf6",r:"46 routes · 14 providers"},
|
||||
{n:"Consensus",t:"DIRECTION",y:"robot",c:"#8b5cf6",r:"Vote multi-provider"},
|
||||
{n:"Dispatcher",t:"DIRECTION",y:"robot",c:"#8b5cf6",r:"Moteur de routes"},
|
||||
{n:"MiroFish",t:"DIRECTION",y:"robot",c:"#8b5cf6",r:"WePredict auto-guérison"},
|
||||
{n:"Blade",t:"DIRECTION",y:"robot",c:"#8b5cf6",r:"Agent desktop Razer"},
|
||||
{n:"DeerFlow",t:"DIRECTION",y:"robot",c:"#8b5cf6",r:"Deep research 12+ sources"},
|
||||
{n:"AutoFix",t:"DIRECTION",y:"robot",c:"#8b5cf6",r:"Docker heal 16 containers"},
|
||||
{n:"Fiability",t:"DIRECTION",y:"robot",c:"#8b5cf6",r:"Santé 24 URLs"},
|
||||
{n:"DevOps",t:"TACTIQUE",y:"human",c:"#f59e0b",r:"CI/CD · 4 serveurs"},
|
||||
{n:"Ethica",t:"TACTIQUE",y:"human",c:"#f59e0b",r:"HCP Pharma · 141K+ contacts"},
|
||||
{n:"Security",t:"TACTIQUE",y:"human",c:"#f59e0b",r:"CVE+SSL+Nuclei"},
|
||||
{n:"Monitor",t:"TACTIQUE",y:"human",c:"#f59e0b",r:"Uptime 24/7"},
|
||||
{n:"NonReg",t:"TACTIQUE",y:"human",c:"#f59e0b",r:"Régression 151/153"},
|
||||
{n:"WEVCODE",t:"TACTIQUE",y:"human",c:"#f59e0b",r:"Code IA · 4 modes"},
|
||||
{n:"L99 Pilot",t:"TACTIQUE",y:"human",c:"#f59e0b",r:"Qualité Lean 6σ"},
|
||||
{n:"Scraper",t:"TACTIQUE",y:"robot",c:"#f59e0b",r:"DabaDoc MA+TN+DZ"},
|
||||
{n:"ArchScan",t:"TACTIQUE",y:"robot",c:"#f59e0b",r:"Topologie 52 nœuds"},
|
||||
{n:"CrowdSec",t:"TACTIQUE",y:"human",c:"#f59e0b",r:"IDS/IPS"},
|
||||
{n:"Fail2Ban",t:"TACTIQUE",y:"human",c:"#f59e0b",r:"SSH protect"},
|
||||
{n:"Registry",t:"TACTIQUE",y:"human",c:"#f59e0b",r:"Registre 626 pages"},
|
||||
{n:"Ollama",t:"EXÉCUTION",y:"robot",c:"#ef4444",r:"LLM LOCAL souverain"},
|
||||
{n:"Groq",t:"EXÉCUTION",y:"robot",c:"#ef4444",r:"<200ms Llama-3.3"},
|
||||
{n:"Cerebras",t:"EXÉCUTION",y:"robot",c:"#ef4444",r:"Qwen-3 235B"},
|
||||
{n:"SambaNova",t:"EXÉCUTION",y:"robot",c:"#ef4444",r:"Meta-Llama"},
|
||||
{n:"Paperclip",t:"EXÉCUTION",y:"robot",c:"#ef4444",r:"Fleet 669 agents"},
|
||||
{n:"Sentinel",t:"EXÉCUTION",y:"robot",c:"#ef4444",r:"Relais S95"},
|
||||
{n:"Docker",t:"EXÉCUTION",y:"robot",c:"#ef4444",r:"16 containers"},
|
||||
{n:"PMTA",t:"EXÉCUTION",y:"robot",c:"#ef4444",r:"MTA sacré port 25"}
|
||||
];
|
||||
let DATA = {};
|
||||
let activeFilter = 'all';
|
||||
let activeSearch = '';
|
||||
|
||||
function opts(a){
|
||||
var s=encodeURIComponent(a.n);
|
||||
if(a.y==="robot") return [
|
||||
{u:"https://robohash.org/"+s+"?set=set1&size=150x150",l:"Robot"},
|
||||
{u:"https://robohash.org/"+s+"-v2?set=set1&size=150x150",l:"Robot V2"},
|
||||
{u:"https://robohash.org/"+s+"-v3?set=set1&size=150x150",l:"Robot V3"},
|
||||
{u:"https://robohash.org/"+s+"?set=set2&size=150x150",l:"Monster"},
|
||||
{u:"https://robohash.org/"+s+"?set=set3&size=150x150",l:"Head"},
|
||||
{u:"https://robohash.org/"+s+"?set=set4&size=150x150",l:"Cat"},
|
||||
{u:"https://ui-avatars.com/api/?background=random&color=fff&size=64&name="+s,l:"Bottts"},
|
||||
{u:"https://ui-avatars.com/api/?background=random&color=fff&size=64&name="+s,l:"Emoji"}
|
||||
];
|
||||
return [
|
||||
{u:"https://ui-avatars.com/api/?background=random&color=fff&size=64&name="+s,l:"Adventurer"},
|
||||
{u:"https://ui-avatars.com/api/?background=random&color=fff&size=64&name="+s+"-v2",l:"Advent. V2"},
|
||||
{u:"https://ui-avatars.com/api/?background=random&color=fff&size=64&name="+s+"-v3",l:"Advent. V3"},
|
||||
{u:"https://ui-avatars.com/api/?background=random&color=fff&size=64&name=avataaars/svg?seed="+s,l:"Avataaars"},
|
||||
{u:"https://ui-avatars.com/api/?background=random&color=fff&size=64&name=big-smile/svg?seed="+s,l:"Big Smile"},
|
||||
{u:"https://ui-avatars.com/api/?background=random&color=fff&size=64&name=lorelei/svg?seed="+s,l:"Lorelei"},
|
||||
{u:"https://ui-avatars.com/api/?background=random&color=fff&size=64&name=notionists/svg?seed="+s,l:"Notionists"},
|
||||
{u:"https://ui-avatars.com/api/?background=random&color=fff&size=64&name=open-peeps/svg?seed="+s,l:"Open Peeps"},
|
||||
{u:"https://ui-avatars.com/api/?background=random&color=fff&size=64&name=pixel-art/svg?seed="+s,l:"Pixel Art"},
|
||||
{u:"https://robohash.org/"+s+"?set=set5&size=150x150",l:"RH Human"}
|
||||
];
|
||||
async function load(){
|
||||
try {
|
||||
const r = await fetch('/api/agent-avatars-v2.json?t=' + Date.now());
|
||||
DATA = await r.json();
|
||||
render();
|
||||
} catch(e) {
|
||||
document.getElementById('G').innerHTML = '<div class="empty">ERR loading SSOT: ' + e.message + '</div>';
|
||||
}
|
||||
}
|
||||
|
||||
var P={},CF="ALL";
|
||||
function render(){
|
||||
var fl=A;if(CF!=="ALL")fl=A.filter(function(a){return a.t===CF});
|
||||
var fh="";["ALL","STRATÉGIE","DIRECTION","TACTIQUE","EXÉCUTION"].forEach(function(t){
|
||||
fh+='<button class="fb'+(CF===t?" ac":"")+'" onclick="CF=\''+t+'\';render()">'+t+'</button>';
|
||||
});
|
||||
document.getElementById("F").innerHTML=fh;
|
||||
var n=Object.keys(P).length;
|
||||
if(n>0){
|
||||
var bh='<b style="color:#ffd700">'+n+' choix</b> ';
|
||||
for(var k in P){bh+='<span class="tag"><img src="'+P[k].u+'">'+k+' ('+P[k].l+')</span> ';}
|
||||
bh+=' <button class="copy" onclick="doCopy()">📋 Copier</button>';
|
||||
document.getElementById("B").style.display="flex";
|
||||
document.getElementById("B").innerHTML=bh;
|
||||
}else{document.getElementById("B").style.display="none";}
|
||||
var gh="";
|
||||
fl.forEach(function(a){
|
||||
var o=opts(a);var pk=P[a.n];
|
||||
gh+='<div class="card'+(pk?" pk":"")+'"><div class="ch">';
|
||||
if(pk)gh+='<img src="'+pk.u+'">';
|
||||
gh+='<div><div class="nm" style="color:'+a.c+'">'+a.n+'</div><div class="rl">'+a.r+'</div></div>';
|
||||
if(pk)gh+='<span class="pk-lbl">✓ '+pk.l+'</span>';
|
||||
gh+='</div><div class="opts">';
|
||||
o.forEach(function(op){
|
||||
var sel=pk&&pk.u===op.u;
|
||||
gh+='<div class="opt'+(sel?" sel":"")+'" onclick="pick(\''+a.n.replace(/'/g,"\\'")+'\',\''+op.u.replace(/'/g,"\\'")+'\',\''+op.l+'\')">';
|
||||
gh+='<img src="'+op.u+'" loading="lazy" onerror="this.style.opacity=0.2"><span>'+op.l+'</span></div>';
|
||||
});
|
||||
gh+='</div></div>';
|
||||
});
|
||||
document.getElementById("G").innerHTML=gh;
|
||||
}
|
||||
function pick(n,u,l){if(P[n]&&P[n].u===u)delete P[n];else P[n]={u:u,l:l};render();}
|
||||
function doCopy(){
|
||||
var t="";for(var k in P)t+=k+": "+P[k].l+" → "+P[k].u+"\n";
|
||||
if(navigator.clipboard)navigator.clipboard.writeText(t);
|
||||
alert(Object.keys(P).length+" choix copiés !\n\n"+t);
|
||||
}
|
||||
render();
|
||||
</script>
|
||||
|
||||
<script>
|
||||
// WAVE 165 — avatar-picker: fix broken dicebear.com images
|
||||
window.__avatar_fix_v165=true;
|
||||
document.addEventListener("DOMContentLoaded",function(){
|
||||
const placeholder='data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI2NCIgaGVpZ2h0PSI2NCI+PHJlY3Qgd2lkdGg9IjY0IiBoZWlnaHQ9IjY0IiBmaWxsPSIjMWUyOTNiIi8+PHRleHQgeD0iMzIiIHk9IjM4IiBmb250LWZhbWlseT0ic2Fucy1zZXJpZiIgZm9udC1zaXplPSIyNCIgZmlsbD0iIzA2YjZkNCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+QTwvdGV4dD48L3N2Zz4=';
|
||||
Array.from(document.querySelectorAll("img")).forEach(img=>{
|
||||
img.addEventListener("error",function(){this.onerror=null;this.src=placeholder;},false);
|
||||
// Preemptively check
|
||||
if(img.src.indexOf("dicebear.com")>-1){
|
||||
const orig=img.src;
|
||||
img.onerror=function(){this.src=placeholder;};
|
||||
}
|
||||
const G = document.getElementById('G');
|
||||
const entries = Object.entries(DATA);
|
||||
const filtered = entries.filter(([n, a]) => {
|
||||
if (activeSearch && !n.toLowerCase().includes(activeSearch)) return false;
|
||||
if (activeFilter === 'all') return true;
|
||||
if (activeFilter === 'gap') return a.isGap;
|
||||
return a.persona === activeFilter;
|
||||
});
|
||||
|
||||
if (!filtered.length) {
|
||||
G.innerHTML = '<div class="empty">No agent matches</div>';
|
||||
document.getElementById('stats').innerHTML = '<b>0</b> / ' + entries.length;
|
||||
return;
|
||||
}
|
||||
|
||||
G.innerHTML = filtered.map(([n, a]) => {
|
||||
const cls = ['card', a.persona || 'human'];
|
||||
if (a.isGap) cls.push('gap');
|
||||
const safeN = n.replace(/[<>"']/g, c => ({'<':'<','>':'>','"':'"',"'":'''})[c]);
|
||||
return `<div class="${cls.join(' ')}" title="${safeN}">
|
||||
<div class="av">${a.emoji || '👤'}</div>
|
||||
<div class="nm">${safeN}</div>
|
||||
<div class="meta">
|
||||
${a.isGap ? '<span class="tag gap">GAP</span>' : ''}
|
||||
${a.role ? '<span class="tag role">' + a.role + '</span>' : ''}
|
||||
</div>
|
||||
</div>`;
|
||||
}).join('');
|
||||
|
||||
document.getElementById('stats').innerHTML = '<b>' + filtered.length + '</b> / ' + entries.length + ' agents';
|
||||
}
|
||||
|
||||
document.querySelectorAll('.fb').forEach(b => b.onclick = () => {
|
||||
document.querySelectorAll('.fb').forEach(x => x.classList.remove('ac'));
|
||||
b.classList.add('ac');
|
||||
activeFilter = b.dataset.f;
|
||||
render();
|
||||
});
|
||||
|
||||
document.getElementById('srch').oninput = e => { activeSearch = e.target.value.toLowerCase().trim(); render(); };
|
||||
|
||||
load();
|
||||
</script>
|
||||
|
||||
<!-- === OPUS UNIVERSAL DRILL-DOWN v1 19avr — append-only, doctrine #14 === -->
|
||||
<script>
|
||||
(function(){
|
||||
if (window.__opusUniversalDrill) return; window.__opusUniversalDrill = true;
|
||||
var d = document;
|
||||
var m = d.createElement('div');
|
||||
m.id = 'opus-udrill';
|
||||
m.style.cssText = 'position:fixed;inset:0;background:rgba(0,0,0,0.82);backdrop-filter:blur(6px);display:none;align-items:center;justify-content:center;z-index:99995;padding:20px;cursor:pointer';
|
||||
var inner = d.createElement('div');
|
||||
inner.id = 'opus-udrill-in';
|
||||
inner.style.cssText = 'max-width:900px;width:100%;max-height:90vh;overflow:auto;background:#0b0d15;border:1px solid rgba(99,102,241,0.35);border-radius:14px;padding:28px;cursor:default;box-shadow:0 20px 60px rgba(0,0,0,0.6);color:#e2e8f0;font:14px/1.55 Inter,system-ui,sans-serif';
|
||||
inner.addEventListener('click', function(e){ e.stopPropagation(); });
|
||||
m.appendChild(inner);
|
||||
m.addEventListener('click', function(){ m.style.display='none'; });
|
||||
d.addEventListener('keydown', function(e){ if(e.key==='Escape') m.style.display='none'; });
|
||||
(d.body || d.documentElement).appendChild(m);
|
||||
|
||||
function openCard(card) {
|
||||
// Clone card content + show close btn + increase font-size
|
||||
var html = '<div style="display:flex;justify-content:flex-end;margin-bottom:14px"><button id="opus-udrill-close" style="padding:6px 14px;background:#171b2a;border:1px solid rgba(99,102,241,0.25);color:#e2e8f0;border-radius:8px;cursor:pointer;font-size:12px">✕ Fermer (Esc)</button></div>';
|
||||
html += '<div style="transform-origin:top left;font-size:1.05em">' + card.outerHTML + '</div>';
|
||||
inner.innerHTML = html;
|
||||
d.getElementById('opus-udrill-close').onclick = function(){ m.style.display='none'; };
|
||||
m.style.display = 'flex';
|
||||
}
|
||||
|
||||
function wire(root) {
|
||||
var sels = '.card,[class*="card"],.kpi,[class*="kpi"],.stat,[class*="stat"],.tile,[class*="tile"],.metric,[class*="metric"],.widget,[class*="widget"]';
|
||||
var cards = root.querySelectorAll(sels);
|
||||
for (var i = 0; i < cards.length; i++) {
|
||||
var c = cards[i];
|
||||
if (c.__opusWired) continue;
|
||||
if (c.closest('button, a, input, select, textarea, #opus-udrill')) continue;
|
||||
var r = c.getBoundingClientRect();
|
||||
if (r.width < 60 || r.height < 40) continue;
|
||||
c.__opusWired = true;
|
||||
c.style.cursor = 'pointer';
|
||||
c.setAttribute('role','button');
|
||||
c.setAttribute('tabindex','0');
|
||||
c.addEventListener('click', function(ev){
|
||||
// If a more-specific drill is already active (e.g. pp-card custom), let it handle
|
||||
if (ev.target.closest('[data-pp-id]') && window.__opusDrillInit) return;
|
||||
if (ev.target.closest('a,button,input,select')) return;
|
||||
ev.preventDefault(); ev.stopPropagation();
|
||||
openCard(this);
|
||||
});
|
||||
c.addEventListener('keydown', function(ev){ if(ev.key==='Enter'||ev.key===' '){ev.preventDefault();openCard(this);} });
|
||||
}
|
||||
}
|
||||
|
||||
// Initial + mutation observer
|
||||
var initRun = function(){ wire(d.body || d.documentElement); };
|
||||
if (d.readyState === 'loading') d.addEventListener('DOMContentLoaded', initRun);
|
||||
else initRun();
|
||||
var mo = new MutationObserver(function(muts){
|
||||
var newCard = false;
|
||||
for (var i=0;i<muts.length;i++) if (muts[i].addedNodes.length) { newCard = true; break; }
|
||||
if (newCard) initRun();
|
||||
});
|
||||
mo.observe(d.body || d.documentElement, {childList:true, subtree:true});
|
||||
})();
|
||||
</script>
|
||||
<!-- === OPUS UNIVERSAL DRILL-DOWN END === -->
|
||||
|
||||
</body></html>
|
||||
|
||||