1679 lines
202 KiB
HTML
1679 lines
202 KiB
HTML
<!DOCTYPE html>
|
||
<html><head><meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate"><meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1">
|
||
<title>WEVAL Enterprise Model</title>
|
||
<style>@import url('https://fonts.googleapis.com/css2?family=Nunito:wght@600;800;900&display=swap');*{margin:0;padding:0;box-sizing:border-box}body{background:#e4ecf6;background-image:radial-gradient(#c8d8e8 1px,transparent 1px);background-size:20px 20px;overflow-y:auto;overflow-x:hidden;font-family:'Nunito'}canvas{display:block}
|
||
#T{position:fixed;pointer-events:none;display:none;z-index:99;background:#fff;border:3px solid;border-radius:12px;padding:10px 14px;color:#2a2a4a;box-shadow:0 4px 16px #0002;max-width:180px;font-size:.78rem}#T b{display:block;font-size:.9rem}#T i{font-style:normal;font-size:.56rem;text-transform:uppercase;letter-spacing:2px;display:block;margin:2px 0 4px}#T .p{color:#e94560;font-weight:700;font-size:.68rem;margin-top:3px}#T .s{font-size:.6rem;margin-top:2px;font-weight:800}
|
||
#hud{position:fixed;top:0;left:0;right:0;height:26px;background:#fffd;backdrop-filter:blur(14px)/*hudGlass*/;-webkit-backdrop-filter:blur(12px);border-bottom:1px solid #c8d8e8;z-index:10;display:flex;align-items:center;padding:0 12px;font-size:.7rem}#hud b{color:#e94560}#hud span{margin-left:14px;color:#5a6a80}
|
||
|
||
/* === OPUS RESPONSIVE FIX v2 19avr — append-only, doctrine #14 === */
|
||
@media(max-width: 480px) {
|
||
html, body { overflow-x: hidden !important; max-width: 100vw; }
|
||
body, main, section, article { word-break: break-word; overflow-wrap: anywhere; }
|
||
img, video, iframe, canvas, svg, table, pre, code { max-width: 100% !important; }
|
||
pre, code { white-space: pre-wrap; word-break: break-all; }
|
||
table { display: block; overflow-x: auto; }
|
||
.container, [class*="container"], [class*="wrapper"] { max-width: 100vw !important; padding-left: 12px !important; padding-right: 12px !important; }
|
||
[class*="grid"], [class*="-grid"] { grid-template-columns: 1fr !important; gap: 10px !important; }
|
||
[class*="kpi"], [class*="stats"], [class*="-cards"] { grid-template-columns: 1fr !important; }
|
||
header, nav, footer { flex-wrap: wrap !important; }
|
||
header > *, nav > *, footer > * { max-width: 100%; }
|
||
h1 { font-size: 22px !important; word-break: break-word; }
|
||
h2 { font-size: 18px !important; }
|
||
.pitch, [class*="pitch"], [class*="hero"] { word-break: break-word; overflow-wrap: anywhere; }
|
||
}
|
||
/* === OPUS RESPONSIVE FIX v2 END === */
|
||
</style>
|
||
<style>/* L99-OVERLAP-FIX */
|
||
.label,.tag,.badge,.tooltip{pointer-events:none;z-index:0}
|
||
canvas{z-index:0!important}
|
||
</style>
|
||
<script src="/widgets/audit-banner.js" defer></script>
|
||
<!-- V109 Plausible Analytics -->
|
||
<script defer data-domain="weval-consulting.com" src="https://analytics.weval-consulting.com/js/script.js"></script>
|
||
</head><body><div id="wnav" style="position:relative;z-index:100;padding:8px 12px;display:flex;justify-content:center;gap:6px;background:transparent;font-family:sans-serif"><a href="/l99-saas.html" style="padding:2px 7px;border-radius:4px;font-size:8px;font-weight:600;text-decoration:none;background:#e4ecf6cc;color:#5a6a80;border:1px solid #c8d8e8">L99</a><a href="/admin-saas.html" style="padding:2px 7px;border-radius:4px;font-size:8px;font-weight:600;text-decoration:none;background:#e4ecf6cc;color:#5a6a80;border:1px solid #c8d8e8">Admin</a><a href="/realtime-monitor.html" style="padding:2px 7px;border-radius:4px;font-size:8px;font-weight:600;text-decoration:none;background:#e4ecf6cc;color:#5a6a80;border:1px solid #c8d8e8">Monitor</a><a href="/enterprise-model.html" style="padding:2px 7px;border-radius:4px;font-size:8px;font-weight:600;text-decoration:none;background:#e4ecf6cc;color:#5a6a80;border:1px solid #c8d8e8">Enterprise</a><a href="/sovereign-claude.html" style="padding:2px 7px;border-radius:4px;font-size:8px;font-weight:600;text-decoration:none;background:#e4ecf6cc;color:#5a6a80;border:1px solid #c8d8e8">Sovereign</a><a href="/cyber-monitor.html" style="padding:2px 7px;border-radius:4px;font-size:8px;font-weight:600;text-decoration:none;background:#e4ecf6cc;color:#5a6a80;border:1px solid #c8d8e8">Cyber</a><a href="/value-stream.html" style="padding:2px 7px;border-radius:4px;font-size:8px;font-weight:600;text-decoration:none;background:#e4ecf6cc;color:#5a6a80;border:1px solid #c8d8e8">VSM</a><a href="/toolhub.html" style="padding:2px 7px;border-radius:4px;font-size:8px;font-weight:600;text-decoration:none;background:#e4ecf6cc;color:#5a6a80;border:1px solid #c8d8e8">Tools</a><a href="/wiki.html" style="padding:2px 7px;border-radius:4px;font-size:8px;font-weight:600;text-decoration:none;background:#e4ecf6cc;color:#5a6a80;border:1px solid #c8d8e8">Wiki</a><button onclick="var a=document.createElement('a');a.href=C.toDataURL();a.download='enterprise.png';a.click()" style="padding:2px 7px;border-radius:4px;font-size:8px;font-weight:600;background:#6366f1;color:#fff;border:1px solid #4f46e5;cursor:pointer">📷 Export</button><button onclick="toggleDark()" style="padding:2px 7px;border-radius:4px;font-size:8px;font-weight:600;background:#334155;color:#fff;border:1px solid #1e293b;cursor:pointer">☽ Dark</button><span id="navStats" style="margin-left:auto;font:600 8px JetBrains Mono,monospace;color:#64748b;display:flex;gap:8px;align-items:center"></span></div>
|
||
<div id="hud" style="display:none"><b>WEVAL Enterprise Model</b><span id="st"></span><span style="margin-left:auto;font-size:.6rem;color:#64748b" id="hud-time"></span></div>
|
||
<canvas id="c"></canvas>
|
||
<div id="T"><b></b><i></i><span class="d"></span><span class="p"></span><span class="s"></span></div>
|
||
<script>
|
||
// === DYNAMIC ALERTS: fetch real failures from L99 API ===
|
||
(function(){
|
||
fetch('/api/l99-api.php?action=failures').then(r=>r.text().then(t=>{/* HTML_GUARD_V2_BATCH */var q=(t||"").trim();if(q.startsWith("<!DOCTYPE")||q.startsWith("<html")){return{error:"[HTTP "+r.status+"]",isHtmlError:true}}try{return JSON.parse(q)}catch(e){return{error:"JSON "+e.message}}})).then(d=>{
|
||
var fs=d.failures||[];
|
||
fs.forEach(function(f){
|
||
if(typeof alertAgent==='function') alertAgent(f.name, f.layer+': '+f.name);
|
||
});
|
||
// Update NonReg count dynamically
|
||
fetch('/api/nonreg-api.php?cat=all').then(r=>r.text().then(t=>{/* HTML_GUARD_V2_BATCH */var q=(t||"").trim();if(q.startsWith("<!DOCTYPE")||q.startsWith("<html")){return{error:"[HTTP "+r.status+"]",isHtmlError:true}}try{return JSON.parse(q)}catch(e){return{error:"JSON "+e.message}}})).then(nr=>{
|
||
window._nonreg=nr;
|
||
}).catch(()=>{});
|
||
// Update Docker status
|
||
fetch('/api/l99-autofix-log.json').then(r=>r.text().then(t=>{/* HTML_GUARD_V2_BATCH */var q=(t||"").trim();if(q.startsWith("<!DOCTYPE")||q.startsWith("<html")){return{error:"[HTTP "+r.status+"]",isHtmlError:true}}try{return JSON.parse(q)}catch(e){return{error:"JSON "+e.message}}})).then(af=>{
|
||
window._autofix=af;
|
||
}).catch(()=>{});
|
||
}).catch(()=>{});
|
||
})();
|
||
|
||
const C=document.getElementById('c'),X=C.getContext('2d'),TT=document.getElementById('T');
|
||
let W,H,mx=-1,my=-1,hov=null,fr=0,tc=0;
|
||
let DP=[
|
||
{id:'dir',l:'🎯 Director',cl:'#059669',fl:'#dcfce7',pp:['WEVIA','Observe','Plan','Act','Verify']},
|
||
{id:'ceo',l:'👑 CEO',cl:'#e94560',fl:'#ffe0e8',pp:['WEVIA','Décision','Budget','Stratégie','Hiring']},
|
||
{id:'meet',l:'🏛️ Meeting',cl:'#14b8a6',fl:'#ccfbf1',pp:['WEVIA','Daily','Weekly','Strategy','Archi']},
|
||
{id:'lean',l:'📐 Lean6Sigma',cl:'#0d9488',fl:'#ccfbf1',pp:['WEVIA','DMAIC','VSM','BPMN','Kaizen']},
|
||
{id:'fin',l:' Finance',cl:'#22d3ee',fl:'#cffafe',pp:['Closing','Cash flow','Fraud','Budget','Consolidation']},
|
||
{id:'sup',l:' Supply',cl:'#a855f7',fl:'#f3e8ff',pp:['Stockout','Inventory','Vendor','Spend','Supplier']},
|
||
{id:'mfg',l:' Manufacturing',cl:'#eab308',fl:'#fef9c3',pp:['Predictive','OEE','Quality SPC','TOC','21CFR']},
|
||
{id:'hr',l:' HR',cl:'#14b8a6',fl:'#ccfbf1',pp:['Utilization','Attrition','CV','Payroll','Catalog']},
|
||
{id:'mkt',l:' Marketing',cl:'#ec4899',fl:'#fce7f3',pp:['Attribution','Content','Deliverability']},
|
||
{id:'sal',l:'🎯 Prospect',cl:'#3b82f6',fl:'#dbeafe',pp:['WEVIA','Leads','Qualify','Outreach','Convert']},
|
||
{id:'con',l:'💼 Consult',cl:'#7c3aed',fl:'#ede9fe',pp:['WEVIA','Analyse','Design','Propose','Deliver']},
|
||
{id:'sdlc',l:'🔄 Dev Pipeline',cl:'#059669',fl:'#ecfdf5',pp:['WEVIA','Spec','Impact','Dev','Ship']},
|
||
{id:'dev',l:'⚡ Dev Lab',cl:'#10b981',fl:'#d1fae5',pp:['WEVIA','Code','Review','Test','Deploy']},
|
||
{id:'l99',l:'🧠 L99 Pilot',cl:'#dc2626',fl:'#fef2f2',pp:['WEVIA','Detect','Fix','Validate','Ship']},
|
||
{id:'qa',l:'🧪 QA',cl:'#06b6d4',fl:'#cffafe',pp:['WEVIA','Plan','Run','Report','Ship']},
|
||
{id:'sec',l:'🛡️ Sécu',cl:'#ef4444',fl:'#fee2e2',pp:['WEVIA','Scan','Audit','Patch','Lock']},
|
||
{id:'srv',l:'🖥️ Infra',cl:'#f59e0b',fl:'#fef3c7',pp:['WEVIA','Monitor','Fix','Deploy','Verify']},
|
||
{id:'ops',l:'📡 Monitor',cl:'#eab308',fl:'#fefce8',pp:['WEVIA','Watch','Alert','Fix','Report']},
|
||
{id:'dock',l:'🐳 Docker/Services',cl:'#0ea5e9',fl:'#e0f2fe',pp:['WEVIA','Start','Configure','Monitor','Scale']},
|
||
{id:'mta',l:'📧 MTA',cl:'#ec4899',fl:'#fce7f3',pp:['WEVIA','PMTA','KumoMTA','Postfix','Deliver']},
|
||
{id:'pha',l:'💊 Pharma',cl:'#a855f7',fl:'#f3e8ff',pp:['WEVIA','Scrape','Enrich','Campaign','Ship']},
|
||
{id:'saas',l:'📦 SaaS',cl:'#14b8a6',fl:'#ccfbf1',pp:['WEVIA','LeadForge','Outreach','MailWarm','Proposal']},
|
||
{id:'ai',l:'🧠 AI Engine',cl:'#8b5cf6',fl:'#ede9fe',pp:['WEVIA','Groq','Cerebras','Mistral','Ollama']},
|
||
{id:'wevia',l:'🧠 WEVIA Suite',cl:'#6366f1',fl:'#eef2ff',pp:['WEVIA','Chat','Code','Life','Gateway']},
|
||
{id:'plat',l:'🔧 Platform',cl:'#0d9488',fl:'#ccfbf1',pp:['WEVIA','Skills','Prompts','Wiki','Bench']},
|
||
{id:'cron',l:'⏰ Crons',cl:'#64748b',fl:'#f1f5f9',pp:['WEVIA','Ethica','B2B','NonReg','L99 Pipeline']},
|
||
{id:'wire',l:'🔌 TO WIRE',cl:'#f97316',fl:'#fff7ed',pp:['WEVIA','Connect','Config','Test','Activate']},
|
||
{id:'intg',l:'🔗 TO INTEGRATE',cl:'#84cc16',fl:'#f7fee7',pp:['WEVIA','Evaluate','Import','Wire','Ship']},
|
||
{id:'dorm',l:'💤 Dormants',cl:'#a1a1aa',fl:'#fafafa',pp:['WEVIA','Clone','Evaluate','Wire','Activate']},
|
||
{id:'dead',l:'💀 Archives',cl:'#94a3b8',fl:'#f1f5f9',pp:['WEVIA','S88 GPU','S89 Legacy','ECS PMTA']}
|
||
];
|
||
// V91 TDZ fix: moved DP.filter after AG declaration
|
||
// OUTPUT KPIs per dept (right panel)
|
||
// Frequency per dept (for bubble display)
|
||
const AMETA={
|
||
'CEO':{fq:'1x/j 7h',inp:'3 rapports équipe'},
|
||
'Ethica':{fq:'*/5min 24/7',inp:'DabaDoc + LinkedIn'},
|
||
'Analyst':{fq:'3x/j',inp:'Données marché B2B'},
|
||
'Writer':{fq:'5x/j',inp:'Briefs client'},
|
||
'Proposal':{fq:'sur demande',inp:'Specs client'},
|
||
'Contract':{fq:'sur demande',inp:'Terms signés'},
|
||
'Architect':{fq:'2x/j',inp:'Cahier des charges'},
|
||
'Planner':{fq:'1x/j matin',inp:'Backlog JIRA'},
|
||
'DeerFlow':{fq:'3x/j',inp:'Question recherche'},
|
||
'Critic':{fq:'sur demande',inp:'Proposal à valider'},
|
||
'Translate':{fq:'sur demande',inp:'Page à traduire'},
|
||
'Academy':{fq:'1x/semaine',inp:'Contenu formation'},
|
||
'Executor':{fq:'5-15x/j',inp:'PR merged'},
|
||
'Debugger':{fq:'3-8x/j',inp:'Bug report'},
|
||
'Reviewer':{fq:'5x/j',inp:'Pull request'},
|
||
'Designer':{fq:'2x/j',inp:'Wireframe/spec'},
|
||
'WEDROID':{fq:'continu 24/7',inp:'Erreur détectée'},
|
||
'Simplifier':{fq:'1x/j',inp:'Module >500 lignes'},
|
||
'Blueprint':{fq:'sur demande',inp:'Specs projet'},
|
||
'DevForge':{fq:'sur demande',inp:'Template code'},
|
||
'Watchdog':{fq:'*/3min 24/7',inp:'24 Docker + 5 svc'},
|
||
'Guardian':{fq:'*/5min 24/7',inp:'8 fichiers protégés'},
|
||
'Blade':{fq:'*/60s 24/7',inp:'Desktop sync'},
|
||
'GitMaster':{fq:'sur push',inp:'Commit Git'},
|
||
'Security':{fq:'2x/j',inp:'OWASP rules'},
|
||
'Verifier':{fq:'1x/semaine',inp:'Checklist ISO'},
|
||
'QA':{fq:'2x/j 6h+18h',inp:'153 test cases'},
|
||
'TestEng':{fq:'sur push',inp:'GitHub Actions'},
|
||
'Tracer':{fq:'continu',inp:'access.log + error.log'},
|
||
'Scientist':{fq:'1x/j 5h',inp:'182 modèles à bench'},
|
||
'Playwright':{fq:'2x/j',inp:'41 scenarios E2E'},
|
||
'Explore':{fq:'3x/j',inp:'URLs annuaires santé'},
|
||
'DocSpec':{fq:'sur demande',inp:'API à documenter'},
|
||
'MiroFish':{fq:'1x/j',inp:'Brief créatif'},
|
||
'TaskMgr':{fq:'continu',inp:'Tickets ouverts'},
|
||
'Brain':{fq:'1x/j',inp:'Idées brainstorm'},
|
||
'Intro':{fq:'1x/j',inp:'Métriques perf'},
|
||
'Orch':{fq:'continu',inp:'5 agents à sync'},
|
||
'Dashboard':{fq:'temps réel',inp:'KPIs collectés'},
|
||
'EthicaCron':{fq:'*/5min cron',inp:'Queue DZ+MA+TN'},
|
||
'B2BCron':{fq:'/4h cron',inp:'166 leads table'},
|
||
'NonRegCron':{fq:'6h+18h cron',inp:'153 tests suite'},
|
||
'BackupCron':{fq:'4h daily cron',inp:'PG + configs'},
|
||
'PMTA':{fq:'continu port 25',inp:'Queue 10K emails'},
|
||
'KumoMTA':{fq:'continu port 587',inp:'Nouveaux envois'},
|
||
'Postfix':{fq:'continu 2525',inp:'Relais interne'},
|
||
'Groq':{fq:'on-demand <100ms',inp:'Prompt utilisateur'},
|
||
'Cerebras':{fq:'fallback <200ms',inp:'Requête complexe'},
|
||
'Ollama':{fq:'on-demand local',inp:'Requête souveraine'},
|
||
'LeadForge':{fq:'sur demande',inp:'Critères recherche'},
|
||
'OutreachAI':{fq:'sur campagne',inp:'Liste contacts'},
|
||
'MailWarm':{fq:'continu',inp:'IPs à réchauffer'},
|
||
'ProposalAI':{fq:'sur demande',inp:'Brief client'},
|
||
'S88 GPU':{fq:'MORT',inp:'—'},
|
||
'S89':{fq:'DOWN',inp:'—'},
|
||
'ECS PMTA':{fq:'INCONNU',inp:'—'},
|
||
'Loki':{fq:'UP :3102',inp:'Logs Docker'},
|
||
'WEVCODE':{fq:'on-demand',inp:'Question code'},
|
||
'WEVIALife':{fq:'*/5min sync',inp:'Fichiers desktop'},
|
||
'WEVIAGateway':{fq:'continu 24/7',inp:'Requêtes multi-IA'},
|
||
'TTS':{fq:'sur demande',inp:'Texte à vocaliser'},
|
||
'MermaidGen':{fq:'sur demande',inp:'Spec diagramme'},
|
||
'l99':{fq:'*/15min',inp:'1495 checks 17 layers'},
|
||
'L99':{fq:'sur demande',inp:'79 layers à checker'},
|
||
'ClaudeSync':{fq:'par session',inp:'Transcript Claude'},
|
||
'SkillsRAG':{fq:'on-demand',inp:'Query Qdrant'},
|
||
'PromptsLib':{fq:'on-demand',inp:'Contexte à matcher'},
|
||
'CodeWiki':{fq:'sur commit',inp:'203 fichiers index'},
|
||
'AIBench':{fq:'1x/j 5h cron',inp:'182 modèles API'},
|
||
'OSSDiscover':{fq:'1x/j cron',inp:'GitHub trending'},
|
||
'GHGrab':{fq:'sur demande',inp:'URL repo à cloner'},
|
||
'AgentShield':{fq:'1x/j',inp:'Code source à scan'}
|
||
};
|
||
// Fallback freq by dept
|
||
var FREQ_DEF={ceo:'1x/j',sal:'continu',con:'sur demande',dev:'continu',srv:'*/3min',sec:'2x/j',qa:'2x/j',pha:'*/5min',ops:'continu',cron:'auto',mta:'continu',ai:'on-demand',saas:'on-demand',dead:'—',wire:'—',intg:'—',dock:'24/7',dorm:'—',wevia:'on-demand',plat:'on-demand'};
|
||
const OUT={
|
||
l99:{input:'📥 1495 checks',output:'📤 Paperclip issues',kpi:'*/15min',icon:'🧠',metric:'1495/j',deliverables:['Self-healing 6 layers','Dev pipeline SDLC','Wiki knowledge base','Auto-close issues']},
|
||
sdlc:{input:'📝 Spec+Impact',output:'📦 Code+Ship',kpi:'Wiki SDLC',icon:'🔄',metric:'9 phases',deliverables:['Backup','Scan wiki','Impact analysis','Dev+Test+Qualify+Prod']},
|
||
ecc:{input:'💻 Claude Code',output:'📤 PR+Review',kpi:'On-demand',icon:'⚙️',metric:'25 agents',deliverables:['Code review','Security audit','Refactor','E2E testing']},
|
||
ceo:{input:'📥 Rapports agents',output:'📤 Décisions strat',kpi:'1x/j',icon:'👔',metric:'1 brief/j',deliverables:['Brief Telegram 7h','Validation budget Q3','Revue hiring','Contrats signes']},
|
||
sal:{input:'📥 1052 leads DB',output:'📤 Scraping actif',kpi:'B2B pipeline',icon:'🎯',metric:'1052 leads',deliverables:['131K HCPs Ethica','166 leads B2B','469 LinkedIn','Emails DZ+MA+TN','Proposals PDF']},
|
||
con:{input:'📥 5 demandes/j',output:'📤 3 proposals/j',kpi:'Win rate 60%',icon:'💼',metric:'3 props',deliverables:['Blueprints cloud','Schemas Mermaid','Sprint roadmaps','Traductions 90KB']},
|
||
dev:{input:'📥 Tickets GitHub',output:'📤 Commits+deploys',kpi:'CI/CD continu',icon:'⚡',metric:'12 deploys/j',deliverables:['52 repos maintenus','36 pages WEVADS','APIs cx/droid/sentinel','Git releases']},
|
||
srv:{input:'📥 480 checks/j',output:'📤 5 restarts/j',kpi:'Uptime 99.9%',icon:'🖥️',metric:'99.9%',deliverables:['24 Docker monitores','8 chattr+i','Disk <85%','Nginx reload','30+ crons']},
|
||
sec:{input:'📥 288 scans/j',output:'📤 2 audits/j',kpi:'0 CVE critiques',icon:'🛡️',metric:'0 CVE',deliverables:['Headers HTTP OK','SSL Jun 2026','Fail2Ban','CrowdSec','RGPD check']},
|
||
qa:{input:'📥 153 tests NonReg',output:'📤 153/153 PASS',kpi:'Score 100%',icon:'🧪',metric:'153/153 PASS',deliverables:['NonReg 153/153','Playwright 41','11 baselines','BackstopJS','Rapport HTML']},
|
||
pha:{input:'📥 DabaDoc+GMap',output:'📤 141,661+ HCPs',kpi:'DZ87K MA19K TN17K',icon:'💊',metric:'141K+',deliverables:['DabaDoc 50 villes','LinkedIn tels','Email gap DZ 15K','Master dedup 5h']},
|
||
ops:{input:'📥 7,752 opens total',output:'📤 4,694 clicks total',kpi:'Track actif',icon:'📡',metric:'Tracking live',deliverables:['admin.html live','Kanban updated','Weekly report','KPI chart 7j']},
|
||
cron:{input:'📥 18 cron.d S95',output:'📤 Ethica+B2B+NR',kpi:'Auto 24/7',icon:'⏰',metric:'64+ crons/j',deliverables:['EthicaCron 288/j','B2BCron 6/j','NonRegCron 2/j','BackupCron 1/j']},
|
||
mta:{input:'📥 3.09M contacts DB',output:'📤 7752 opens total',kpi:'50 bounces',icon:'📧',metric:'Tracking live',deliverables:['PMTA 10K DKIM','KumoMTA routing','Postfix relay','Bounce auto']},
|
||
ai:{input:'📥 7 Ollama models',output:'📤 Groq+Cerebras',kpi:'On-demand',icon:'🧠',metric:'7 models',deliverables:['Groq 500 req/j','Cerebras 120/j','Ollama 200/j','Manager consensus']},
|
||
saas:{input:'📥 8 modules codés',output:'📤 0 users (pas lancé)',kpi:'Pré-launch',icon:'📦',metric:'0 users',deliverables:['LeadForge','OutreachAI','MailWarm','ProposalAI']},
|
||
dead:{input:'📥 —',output:'📤 Tout annulé',kpi:'DONE',icon:'💀',metric:'-45€/mois',deliverables:['S88 9.9GB archive','S89 adx 6.6GB','ECS inconnu']},
|
||
wire:{input:'📥 19 évalués',output:'📤 19/19 wired',kpi:'100%',icon:'🔌',metric:'19/19',deliverables:['17 pip/wired: LlamaIndex+Stripe+WhatsApp+Azure+Gemini+CrowdSec+BrowserUse+etc','TODO: OVH SMS (creds manquants)','TODO: ListMonk (Docker S95)']},
|
||
intg:{input:'📥 25 à intégrer',output:'📤 25/25 DONE',kpi:'100%',icon:'🔗',metric:'21/21',deliverables:['Paperclip 150 agents','PHP Auth Souverain','OhMyCC 19','SuperClaude 7']},
|
||
dock:{input:'📥 24 containers',output:'📤 21 UP + Langfuse KO',kpi:'95% healthy',icon:'🐳',metric:'19 dock',deliverables:['OpenWebUI :8281','Flowise :3033','Twenty :3000','n8n :5678','Langfuse RESTART']},
|
||
dorm:{input:'📥 6 clonés',output:'📤 5/8 wired',kpi:'50%',icon:'💤',metric:'5 wired 3 pending',deliverables:['WIRED: Claude-Mem+Strix+Prometheus','TODO: HolyClaude','TODO: LTX-Video (GPU)','TODO: DeepAgent']},
|
||
wevia:{input:'📥 200 sessions/j',output:'📤 200 réponses/j',kpi:'4 modes actifs',icon:'🧠',metric:'200/j',deliverables:['WEVCODE 4 modes','WEVIALife sync','Gateway 18','TTS','L99 1495 checks']},
|
||
plat:{input:'📥 Qdrant 4414pts',output:'📤 Skills+Prompts',kpi:'RAG actif',icon:'🔧',metric:'4414 sk'},
|
||
dir:{input:'📥 30 dept scans',output:'📤 Décisions',kpi:'*/15min',icon:'🎯',metric:'13 agents',deliverables:['52 nodes ArchScan','URL Health 100%','Auto-fix Docker','626 pages tracked']},
|
||
meet:{input:'📥 Standups daily',output:'📤 Action items',kpi:'1×/j 9h',icon:'🏛️',metric:'4 agents',deliverables:['Daily standup','Weekly review','Strategy sync','Meeting archive']},
|
||
lean:{input:'📥 Process maps',output:'📤 Waste eliminated',kpi:'on-demand',icon:'📐',metric:'4 agents',deliverables:['DMAIC audits','VSM mapping','BPMN models','Kaizen loops']},
|
||
fin:{input:'📥 25 ERPs T24/SAP/Oracle',output:'📤 23M€ savings',kpi:'continu',icon:'💵',metric:'17 agents',deliverables:['DSO -40%','Fast Close 5j','Fraud detect','Multi-entity consol']},
|
||
sup:{input:'📥 Supply data',output:'📤 Stock optimisé',kpi:'temps réel',icon:'📦',metric:'8 agents',deliverables:['Stockout predict','Inventory opt','Vendor risk','Tail spend']},
|
||
mfg:{input:'📥 OEE telemetry',output:'📤 Quality SPC',kpi:'continu',icon:'🏭',metric:'9 agents',deliverables:['Predictive maint','OEE live','21CFR audit','EDI onboarding']},
|
||
hr:{input:'📥 HR data',output:'📤 Workforce optim',kpi:'1×/j',icon:'👥',metric:'5 agents',deliverables:['Utilization','Attrition predict','CV match','Payroll verify']},
|
||
mkt:{input:'📥 Multi-touch data',output:'📤 ROI attribution',kpi:'continu',icon:'📣',metric:'3 agents',deliverables:['Attribution','Content perso','Deliverability']},
|
||
growth:{input:'📥 Pipeline B2B',output:'📤 Revenue scaled',kpi:'continu',icon:'📈',metric:'TBD agents',deliverables:['Lead gen','Outreach AI','Win rate','LTV']}
|
||
};
|
||
// Rich speech for work state: action + freq + success + output
|
||
const SPEECH={
|
||
'CEO':['📊 Brief quotidien\n⏰ 1×/jour | ✅ 100%\n📤 Décision validée','💰 Revue budget Q3\n⏰ 1×/sem | ✅ 100%\n📤 Budget approuvé'],
|
||
'Ethica':['💊 Scrape DabaDoc MA\n⏰ */5min | ✅ 95%\n📤 +120 HCPs enrichis','📧 Drip email TN\n⏰ */5min | ✅ 88%\n📤 200 emails envoyés'],
|
||
'Analyst':['📊 Analyse marché SAP\n⏰ 3×/jour | ✅ 100%\n📤 Rapport SWOT livré','📈 Segment B2B\n⏰ 2×/jour | ✅ 100%\n📤 50 prospects qualifiés'],
|
||
'Writer':['✍️ Cold email campagne\n⏰ 10×/jour | ✅ 92%\n📤 10 emails rédigés','📝 Proposal client\n⏰ 2×/jour | ✅ 100%\n📤 1 proposal PDF'],
|
||
'Proposal':['📑 Génère proposal\n⏰ 2×/jour | ✅ 100%\n📤 1 PDF formaté','📋 Pricing insert\n⏰ 1×/jour | ✅ 100%\n📤 Grille tarifaire'],
|
||
'Contract':['📜 Génère NDA\n⏰ 1×/sem | ✅ 100%\n📤 1 contrat signé','⚖️ Review contrat\n⏰ 2×/sem | ✅ 100%\n📤 Validé juridique'],
|
||
'Architect':['🏗️ Design archi cloud\n⏰ 1×/jour | ✅ 100%\n📤 Blueprint livré','📐 Schema micro-svc\n⏰ 2×/sem | ✅ 100%\n📤 Diagramme Mermaid'],
|
||
'Planner':['📋 Sprint planning\n⏰ 1×/sem | ✅ 100%\n📤 Backlog priorisé','📊 Update Gantt\n⏰ 1×/jour | ✅ 100%\n📤 Timeline à jour'],
|
||
'DeerFlow':['🦌 Deep research IA\n⏰ 3×/jour | ✅ 97%\n📤 Synthèse 12 sources','📚 Veille techno\n⏰ 1×/jour | ✅ 100%\n📤 Rapport R&D'],
|
||
'Critic':['⚖️ Évalue risques\n⏰ 2×/jour | ✅ 100%\n📤 Matrice risques','🔍 Challenge budget\n⏰ 1×/sem | ✅ 100%\n📤 Go/NoGo décision'],
|
||
'Translate':['🌍 Traduction FR→AR\n⏰ 5×/jour | ✅ 98%\n📤 Page traduite','🌐 Sync i18n\n⏰ 1×/jour | ✅ 100%\n📤 90KB mis à jour'],
|
||
'Academy':['🎓 Génère training\n⏰ 1×/sem | ✅ 100%\n📤 Module formation','📝 Quiz create\n⏰ 2×/sem | ✅ 100%\n📤 10 questions'],
|
||
'Executor':['⚡ Deploy prod v3.2\n⏰ 5×/jour | ✅ 95%\n📤 Release déployée','🔄 Migration DB\n⏰ 1×/jour | ✅ 100%\n📤 Schema migré'],
|
||
'Debugger':['🐛 Fix API 500\n⏰ 3×/jour | ✅ 90%\n📤 Bug résolu','🔍 Trace memory leak\n⏰ 1×/jour | ✅ 85%\n📤 Leak colmaté'],
|
||
'Reviewer':['👁️ Review PR #847\n⏰ 5×/jour | ✅ 100%\n📤 PR approuvé','🔍 Audit qualité\n⏰ 2×/jour | ✅ 100%\n📤 Score qualité'],
|
||
'Designer':['🎨 Mockup dashboard\n⏰ 2×/jour | ✅ 100%\n📤 Design livré','🖌️ Animation CSS\n⏰ 1×/jour | ✅ 100%\n📤 Composant animé'],
|
||
'WEDROID':['🤖 Auto-fix API auth\n⏰ 10×/jour | ✅ 93%\n📤 Service réparé','🔧 Repair PG index\n⏰ 3×/jour | ✅ 97%\n📤 Index rebuilt'],
|
||
'Simplifier':['✂️ Refactor 2K lignes\n⏰ 1×/jour | ✅ 100%\n📤 -40% code','🗑️ Dead code cleanup\n⏰ 2×/jour | ✅ 100%\n📤 50 fichiers nettoyés'],
|
||
'Blueprint':['📐 Auto blueprint\n⏰ 1×/jour | ✅ 100%\n📤 Projet structuré','🏗️ Template gen\n⏰ 2×/sem | ✅ 100%\n📤 Scaffold complet'],
|
||
'DevForge':['🔨 Gen component\n⏰ 3×/jour | ✅ 88%\n📤 Composant React','⚙️ API scaffold\n⏰ 1×/jour | ✅ 95%\n📤 CRUD endpoint'],
|
||
'Watchdog':['🐕 Check */3min\n⏰ 480×/jour | ✅ 99.8%\n📤 24 Docker monitorés','⚠️ Restart service\n⏰ 5×/jour | ✅ 100%\n📤 Service relancé'],
|
||
'Guardian':['🛡️ chattr +i config\n⏰ 288×/jour | ✅ 100%\n📤 8 fichiers protégés','🔒 Scan intrus\n⏰ */5min | ✅ 100%\n📤 0 intrusion'],
|
||
'Blade':['💻 Sync Razer→S204\n⏰ 1440×/jour | ✅ 99.5%\n📤 Fichiers synchronisés','📁 Upload docs\n⏰ 10×/jour | ✅ 100%\n📤 Docs uploadés'],
|
||
'GitMaster':['🌿 Tag v3.2.1\n⏰ 2×/jour | ✅ 100%\n📤 Release taguée','🔀 Merge develop\n⏰ 3×/jour | ✅ 100%\n📤 Branch merged'],
|
||
'Security':['🔐 Scan OWASP top10\n⏰ 2×/jour | ✅ 100%\n📤 0 vulnérabilité','🔒 Audit headers\n⏰ 1×/jour | ✅ 100%\n📤 Headers conformes'],
|
||
'Verifier':['✅ Check RGPD\n⏰ 1×/sem | ✅ 100%\n📤 Compliance OK','📋 Audit ISO 27001\n⏰ 1×/mois | ✅ 100%\n📤 Certification'],
|
||
'QA':['🧪 Run NonReg 153\n⏰ 2×/jour | ✅ 100%\n📤 153/153 PASS','🎭 Playwright 41\n⏰ 1×/jour | ✅ 100%\n📤 41/41 screenshots'],
|
||
'TestEng':['🧰 Build Docker img\n⏰ 3×/jour | ✅ 95%\n📤 Image publiée','⚙️ Pipeline CI\n⏰ 5×/jour | ✅ 90%\n📤 Build green'],
|
||
'Tracer':['🔦 Trace erreur 500\n⏰ 5×/jour | ✅ 88%\n📤 Root cause trouvé','📋 Parse access.log\n⏰ 1×/jour | ✅ 100%\n📤 Anomalies détectées'],
|
||
'Scientist':['🔬 Bench 182 modèles\n⏰ 1×/jour | ✅ 100%\n📤 Leaderboard updated','📊 Mesure latence\n⏰ 1×/jour | ✅ 100%\n📤 8 endpoints testés'],
|
||
'Playwright':['🎭 Visual test 41\n⏰ 1×/jour | ✅ 100%\n📤 41 baselines OK','📸 Screenshot diff\n⏰ 1×/jour | ✅ 98%\n📤 0 régression'],
|
||
'EthicaCron':['⏰ Drip DZ+MA+TN\n⏰ 288×/jour | ✅ 95%\n📤 +500 HCPs/jour','📧 Master dedup 5h\n⏰ 1×/jour | ✅ 100%\n📤 Base nettoyée'],
|
||
'B2BCron':['🔄 B2B scrape cycle\n⏰ 6×/jour | ✅ 88%\n📤 +20 leads/cycle','📧 Email pattern gen\n⏰ 6×/jour | ✅ 75%\n📤 Patterns validés'],
|
||
'NonRegCron':['🧪 153 tests auto\n⏰ 2×/jour | ✅ 100%\n📤 Report HTML','📊 Alert TG si FAIL\n⏰ 2×/jour | ✅ 100%\n📤 Telegram envoyé'],
|
||
'BackupCron':['💾 PG backup daily\n⏰ 1×/jour | ✅ 100%\n📤 Dump 22MB','📦 GOLD sync\n⏰ 1×/jour | ✅ 100%\n📤 Configs archivées'],
|
||
'PMTA':['📮 Batch 10K emails\n⏰ continu | ✅ 98%\n📤 10K livrés/jour','🔑 DKIM signing\n⏰ continu | ✅ 100%\n📤 Signature valide'],
|
||
'KumoMTA':['🚀 Smart routing\n⏰ continu | ✅ 97%\n📤 5K livrés/jour','🌡️ Warm IP pool\n⏰ continu | ✅ 95%\n📤 Réputation maintenue'],
|
||
'Groq':['⚡ Process 500 req/j\n⏰ continu | ✅ 99.5%\n📤 Latence 180ms avg','🧠 Classify intent\n⏰ continu | ✅ 97%\n📤 Classification OK'],
|
||
'Ollama':['🏠 Run qwen3:8b\n⏰ continu | ✅ 99%\n📤 Inference locale','🧠 Embed all-minilm\n⏰ continu | ✅ 100%\n📤 Vecteurs générés'],
|
||
'Watchdog':['🐕 Check */3min\n⏰ 480×/jour | ✅ 99.8%\n📤 Tout UP','⚠️ Alert disk\n⏰ si >85% | ✅ 100%\n📤 Telegram envoyé']
|
||
};
|
||
let AG=[{n:'WEVIA Master',rm:'ceo',d:'Head of AI',p:'Orchestrator',sk:'#ffd700',hc:'#ffd700',F:1,gl:1,re:'👩🏽💼',act:['174 intents','30 waves','Auto-wire','Self-heal'],deliverables:['15 providers 0EUR','Cascade LLM','Wave auto-gen','Playwright authed']},{n:'CEO',rm:'ceo',d:'Direction',p:'Stratégie',sk:'#f0d0b0',hc:'#111',F:1,re:'🤵',act:['Valide budget Q3','Signe contrat','Brief board','Hiring review'],deliverables:['4414 skills Qdrant','55 prompts','203 fichiers','182 modeles','505 OSS']},{n:'CTO',rm:'ceo',d:'CTO',p:'Tech vision',sk:'#f0b0b0',hc:'#e94560',F:1,re:'👨💻',act:['Architecture','Roadmap','Standards','Review']},{n:'Finance',rm:'ceo',d:'Finance',p:'Budget',sk:'#f0b0b0',hc:'#e94560',F:0,re:'👨🏿💼',act:['P&L','Forecast','Invoice','Cost']},{n:'WEVAL Manager',rm:'ceo',d:'Consensus AI',p:'on-demand',sk:'#888',hc:'#666',F:0,re:'👩🏽💼',act:['3 providers','Vote','Merge','Deliver']},{n:'ACT Business',rm:'dead',d:'general',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'💼',act:['Sync','Execute','Report','Monitor'],si:'sit'},{n:'ACT-Business',rm:'sal',d:'Business',p:'Growth',sk:'#f0b0b0',hc:'#e94560',F:1,re:'💰',act:['Leads','Pipeline','Revenue','Forecast']},{n:'Analyst',rm:'sal',d:'Analyse',p:'Specs',sk:'#f0d0b0',hc:'#6a4a30',F:1,gl:1,re:'👨🏽💼',act:['Analyse marché','Concurrence','SWOT','Segment B2B']},{n:'Contract',rm:'sal',d:'Contract gen',p:'Legal docs',sk:'#d8b080',hc:'#3b82f6',F:1,re:'📜',act:['Gen contract','NDA template','Terms gen','Review']},{n:'DocSpecialist',rm:'dead',d:'general',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'📄',act:['Sync','Execute','Report','Monitor'],si:'sit'},{n:'Ethica',rm:'sal',d:'Scraping',p:'131K HCPs',sk:'#c99565',hc:'#3a1800',F:1,re:'💊',act:['Scrape DabaDoc','Enrichit 500 HCPs','LinkedIn TN','Update DZ']},{n:'Marketing',rm:'sal',d:'Marketing',p:'Growth',sk:'#b0c0f0',hc:'#3b82f6',F:1,re:'📣',act:['Content','SEO','Ads','Social']},{n:'Persona SAPConsultan',rm:'dead',d:'general',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🏢',act:['Sync','Execute','Report','Monitor'],si:'sit'},{n:'Proposal',rm:'sal',d:'AI proposals',p:'Doc gen',sk:'#e8cca0',hc:'#3b82f6',F:0,re:'📑',act:['Gen proposal','Format PDF','Insert pricing','Customize']},{n:'SC Brainstorming',rm:'dead',d:'general',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'💡',act:['Sync','Execute','Report','Monitor'],si:'sit'},{n:'SC BusinessPanel',rm:'dead',d:'general',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'📊',act:['Sync','Execute','Report','Monitor'],si:'sit'},{n:'WEVIA LIFE',rm:'dead',d:'general',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'💚',act:['Sync','Execute','Report','Monitor'],si:'sit'},{n:'Writer',rm:'sal',d:'Rédaction',p:'Emails',sk:'#f0d0b0',hc:'#8a5020',F:1,re:'✍️',act:['Cold email','Proposal','LinkedIn post','Pitch deck']},{n:'Academy',rm:'con',d:'Training',p:'Auto-learn',sk:'#f0d0b0',hc:'#7c3aed',F:1,re:'🎓',act:['Gen training','Quiz create','Onboard flow','Certify']},{n:'Analyst 2',rm:'con',d:'Senior Analyst',p:'continu',sk:'#888',hc:'#666',F:0,re:'📊',act:['Deep dive','Competitive','Benchmark','Report']},{n:'Architect',rm:'con',d:'Archi',p:'Blueprints',sk:'#e8cca0',hc:'#2a2a3a',F:0,gl:1,re:'👨🏿💻',act:['Cloud archi','Microservices','Blueprint','Diagramme']},{n:'Critic',rm:'con',d:'Validation',p:'Risques',sk:'#e8cca0',hc:'#3a3a4a',F:0,gl:1,re:'👩⚖️',act:['Risques','Review','Challenge','Faisabilité']},{n:'DeerFlow',rm:'con',d:'Research',p:'113 skills',sk:'#d8b080',hc:'#6a4020',F:0,re:'🦌',act:['Deep research','12 sources','Veille tech','Rapport R&D']},{n:'Persona-SAP',rm:'con',d:'SAP Expert',p:'ERP',sk:'#d0b0f0',hc:'#7c3aed',F:0,re:'💼',act:['S/4HANA','Fiori','ABAP','Integration']},{n:'Planner',rm:'con',d:'Planning',p:'Roadmaps',sk:'#f0d0b0',hc:'#5a3a1a',F:1,re:'📋',act:['Sprint plan','Gantt update','Backlog','Estimation']},{n:'Planner 2',rm:'con',d:'Sprint Plan',p:'weekly',sk:'#888',hc:'#666',F:0,re:'🗓️',act:['Sprint','Backlog','Velocity','Burndown']},{n:'Translate',rm:'con',d:'Multi-langue',p:'90KB sacred',sk:'#e8cca0',hc:'#7c3aed',F:1,re:'🌍',act:['Translate FR','Translate AR','Translate EN','Sync i18n']},{n:'ImpactAnalyst',rm:'sdlc',d:'Impact Analysis',p:'on-demand',sk:'#888',hc:'#666',F:0,re:'📊',act:['Dependencies','Regression','Cross-module','Risk']},{n:'QualGate',rm:'sdlc',d:'Quality Gate',p:'on-demand',sk:'#888',hc:'#666',F:0,re:'✅',act:['NonReg PASS','Visual OK','API OK','Ship']},{n:'SpecWriter',rm:'sdlc',d:'Write Specs',p:'on-demand',sk:'#888',hc:'#666',F:0,re:'📝',act:['Requirements','User story','Acceptance','Priority']},{n:'WikiScanner',rm:'sdlc',d:'Code Wiki',p:'on-demand',sk:'#888',hc:'#666',F:0,re:'📖',act:['Scan source','Store deps','Diff backup','Track']},{n:'ACT-CoreDev',rm:'dev',d:'Core Dev',p:'Build+Ship',sk:'#a0d0a0',hc:'#10b981',F:1,re:'🔨',act:['Build','Test','Deploy','Release']},{n:'Blueprint',rm:'dev',d:'Auto blueprint',p:'Project gen',sk:'#d8b080',hc:'#10b981',F:1,re:'📐',act:['Gen blueprint','Archi auto','Template proj','Export']},{n:'BrainAnalyze',rm:'dev',d:'Analyze',p:'continu',sk:'#888',hc:'#666',F:0,re:'📊',act:['Parse','Score','Trends','Alert']},{n:'BrainAutofix',rm:'dev',d:'Autofix',p:'on error',sk:'#888',hc:'#666',F:0,re:'🔧',act:['Detect','Diagnose','Fix','Verify']},{n:'BrainCore',rm:'dev',d:'Brain core',p:'continu',sk:'#888',hc:'#666',F:0,re:'🧠',act:['Route','Analyze','Score','Decide']},{n:'BrainCreative',rm:'dev',d:'Creative AI',p:'demand',sk:'#888',hc:'#666',F:0,re:'🎨',act:['Generate','Test','Score','Winner']},{n:'BrainEngine',rm:'dev',d:'Brain engine',p:'continu',sk:'#888',hc:'#666',F:0,re:'⚙️',act:['Process','Score','Optimize','Ship']},{n:'BrainNucleus',rm:'dev',d:'Nucleus 1338L',p:'core',sk:'#888',hc:'#666',F:0,re:'💡',act:['Brain core','1338 lines','Orchestrate','Reason']},{n:'BrainOrch',rm:'dev',d:'Orchestrator',p:'continu',sk:'#888',hc:'#666',F:0,re:'🎯',act:['Coordinate','Queue','Balance','Report']},{n:'Claudemem',rm:'dead',d:'dev',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🧠',act:['Sync','Execute','Report','Monitor'],si:'sit'},{n:'ClawCode',rm:'dev',d:'78 Skills Sovereign',p:'WIRED :3900',sk:'#d0f0d0',hc:'#22c55e',F:1,gl:1,re:'👨💻',act:['78 skills GPT','19 OhMyCC agents','18 ToolsFK','12 prompts','11 Paperclip roles','10 DeerFlow','8 Platform']},{n:'Code Reviewer',rm:'dev',d:'PR Review',p:'continu',sk:'#888',hc:'#666',F:1,re:'👀',act:['PR check','Style','Logic','Approve']},{n:'Code Simplifier',rm:'dev',d:'Refactor',p:'on-demand',sk:'#888',hc:'#666',F:0,re:'✂️',act:['Simplify','DRY','Clean','Document']},{n:'Cog-Codegen',rm:'dev',d:'Code Gen',p:'AI code',sk:'#a0d0a0',hc:'#10b981',F:1,re:'💻',act:['Generate','Refactor','Optimize','Doc']},{n:'Cog-Debug',rm:'dev',d:'Debug',p:'Root cause',sk:'#a0d0a0',hc:'#10b981',F:1,re:'🐛',act:['Stack trace','Memory','Race','Logs']},{n:'Debugger',rm:'dev',d:'Debug',p:'Fixes',sk:'#f0d0b0',hc:'#4a2a10',F:0,gl:1,re:'🧙♂️',act:['Fix API 500','Memory leak','Nginx conf','SQL injection']},{n:'Debugger 2',rm:'dev',d:'Deep Debug',p:'on-demand',sk:'#888',hc:'#666',F:0,re:'🐛',act:['Memory','Race cond','Stack','Fix']},{n:'Designer',rm:'dev',d:'UI/UX',p:'Mockups',sk:'#f0d0b0',hc:'#d946ef',F:1,re:'🎨',act:['Dashboard','Design sys','Figma proto','CSS anim']},{n:'DevForge',rm:'dev',d:'Code gen',p:'Full stack',sk:'#d8b080',hc:'#10b981',F:0,re:'🔨',act:['Gen component','API scaffold','DB schema','Test gen']},{n:'ECC-Performance',rm:'dev',d:'Perf Optimizer',p:'Speed',sk:'#a0d0a0',hc:'#10b981',F:0,re:'⚡',act:['Profile','Cache','Query','Async']},{n:'ECC-Planner',rm:'dev',d:'Claude Code Plan',p:'Architecture',sk:'#a0d0a0',hc:'#10b981',F:0,re:'📐',act:['Plan','Design','Spec','Estimate']},{n:'ECC-Refactor',rm:'dev',d:'Refactor Clean',p:'Debt',sk:'#a0d0a0',hc:'#10b981',F:0,re:'🧹',act:['Clean','Simplify','Extract','DRY']},{n:'ECC-Reviewer',rm:'dev',d:'Code Review',p:'Quality',sk:'#a0d0a0',hc:'#10b981',F:0,re:'🔎',act:['Python','JS','PHP','Go']},{n:'Executor',rm:'dev',d:'Deploy',p:'Scripts',sk:'#c99565',hc:'#222',F:0,re:'⚡',act:['Deploy v3.2','Migration DB','Backup script','Dockerfile']},{n:'Persona-FullStack',rm:'dev',d:'FullStack Dev',p:'on-demand',sk:'#888',hc:'#666',F:0,re:'👨💻',act:['React','Node','API','Deploy']},{n:'Reviewer',rm:'dev',d:'Review',p:'PRs',sk:'#e8cca0',hc:'#333',F:0,re:'👁️',act:['Review PR','Code audit','Conventions','Merge']},{n:'Simplifier',rm:'dev',d:'Refactor',p:'-40%',sk:'#e8cca0',hc:'#6a4030',F:1,gl:1,re:'👨🏻🎨',act:['Refactor 2K','Dead code','Simplifie','Merge dupes']},{n:'WEDROID',rm:'dev',d:'Auto-fix v5',p:'DB+API',sk:'#8899aa',hc:'#5a7a9a',F:0,bot:1,re:'🔧',act:['Fix API auth','Repair PG','Clean rows','Restart svc']},{n:'WEDROID v5',rm:'dev',d:'Latest WEDROID',p:'continu',sk:'#888',hc:'#666',F:0,re:'🔧',act:['Chain exec','S95 relay','Auto-fix','Log']},{n:'WedroidAlert',rm:'dev',d:'Telegram',p:'event',sk:'#888',hc:'#666',F:0,re:'🔔',act:['Detect','Alert','Telegram','Log']},{n:'WedroidChain',rm:'dev',d:'Chain exec',p:'demand',sk:'#888',hc:'#666',F:0,re:'⛓️',act:['Chain','Execute','Monitor','Report']},{n:'WedroidGit',rm:'dev',d:'Git auto',p:'push',sk:'#888',hc:'#666',F:0,re:'📦',act:['Commit','Push','PR','Merge']},{n:'WedroidInfra',rm:'dev',d:'Infra patterns',p:'on demand',sk:'#888',hc:'#666',F:0,re:'🖥️',act:['Infra check','Patterns','Optimize','Deploy']},{n:'WedroidLearn',rm:'dev',d:'Learning',p:'continu',sk:'#888',hc:'#666',F:0,re:'📖',act:['Learn','Pattern','Improve','Apply']},{n:'WedroidSched',rm:'dev',d:'Scheduler',p:'continu',sk:'#888',hc:'#666',F:0,re:'📅',act:['Schedule','Priority','Queue','Execute']},{n:'ACT QA',rm:'dead',d:'qa',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'✅',act:['Sync','Execute','Report','Monitor'],si:'sit'},{n:'ACT-QA',rm:'qa',d:'QA Actions',p:'Auto-test',sk:'#a0e0e0',hc:'#06b6d4',F:1,re:'🧪',act:['Playwright','Selenium','Visual','NonReg']},{n:'Critic 2',rm:'dead',d:'qa',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🎭',act:['Sync','Execute','Report','Monitor'],si:'sit'},{n:'ECC-E2E',rm:'qa',d:'E2E Runner',p:'Integration',sk:'#a0e0e0',hc:'#06b6d4',F:0,re:'🏃',act:['Playwright','Cypress','Flows','Regression']},{n:'ECC-TDD',rm:'qa',d:'TDD Guide',p:'Test-first',sk:'#a0e0e0',hc:'#06b6d4',F:0,re:'✅',act:['Red','Green','Refactor','Cover']},{n:'Persona CyberAuditor',rm:'dead',d:'qa',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🛡️',act:['Sync','Execute','Report','Monitor'],si:'sit'},{n:'Playwright',rm:'qa',d:'Visual tests',p:'41 tests',sk:'#d8b080',hc:'#06b6d4',F:0,re:'🎭',act:['Run 41 tests','Screenshot','Compare baseline','Report']},{n:'QA',rm:'qa',d:'Tests E2E',p:'153 NonReg',sk:'#f0d0b0',hc:'#2a3a5a',F:1,re:'🧪',act:['NonReg 153','Playwright','Selenium','Responsive']},{n:'Rabbit Nuclei',rm:'dead',d:'qa',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🐰',act:['Sync','Execute','Report','Monitor'],si:'sit'},{n:'SC Introspection',rm:'dead',d:'qa',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🪞',act:['Sync','Execute','Report','Monitor'],si:'sit'},{n:'Scientist',rm:'qa',d:'Benchmarks',p:'182 modèles',sk:'#f0d0b0',hc:'#888',F:1,gl:1,re:'👨🔬',act:['Groq vs Cerebras','Latence API','Accuracy','182 modèles']},{n:'SeedClean',rm:'qa',d:'Seed cleaner',p:'S95',sk:'#888',hc:'#666',F:0,re:'🧹',act:['Remove bad','Refresh','Validate','Report']},{n:'SeedMgr',rm:'qa',d:'Seed manager',p:'S95',sk:'#888',hc:'#666',F:0,re:'🌱',act:['Create','Assign','Test','Score']},{n:'Test Engineer',rm:'dead',d:'qa',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🧪',act:['Sync','Execute','Report','Monitor'],si:'sit'},{n:'TestEng',rm:'qa',d:'CI/CD',p:'Pipelines',sk:'#e8cca0',hc:'#4a3a2a',F:0,re:'🧰',act:['Pipeline CI','GitHub Act','Docker build','Staging']},{n:'Tracer',rm:'qa',d:'Log trace',p:'Stack traces',sk:'#d8b080',hc:'#3a2a1a',F:1,re:'🔦',act:['Erreur 500','access.log','Stack trace','Event corrèl']},{n:'Tracer 2',rm:'qa',d:'Deep Trace',p:'on-demand',sk:'#888',hc:'#666',F:0,re:'🔍',act:['Call chain','Log trace','Perf','Report']},{n:'Verifier 2',rm:'qa',d:'Double Check',p:'on-demand',sk:'#888',hc:'#666',F:0,re:'✔️',act:['Cross-verify','Idempotent','Boundary','Edge']},{n:'L99 PILOT',rm:'l99',d:'Orchestrator',p:'31 AGENTS',sk:'#dc2626',hc:'#dc2626',F:1,gl:1,re:'👨✈️',act:['1495 checks','17 layers','4 machines','Dev pipeline']},{n:'SC-Brainstorm',rm:'l99',d:'Brainstorm',p:'on-demand',sk:'#888',hc:'#666',F:0,re:'💡',act:['Generate','Evaluate','Rank','Select']},{n:'SC-Business',rm:'l99',d:'Business',p:'on-demand',sk:'#888',hc:'#666',F:0,re:'💼',act:['Revenue','Pipeline','Forecast','Report']},{n:'SC-Introsp',rm:'l99',d:'Introspection',p:'on-demand',sk:'#888',hc:'#666',F:0,re:'🔎',act:['Self-check','Bias','Quality','Improve']},{n:'SC-Orch',rm:'l99',d:'Multi-agent',p:'/sc:orch',sk:'#e8d0a0',hc:'#f59e0b',F:1,re:'🎼',act:['Chain','Parallel','Merge','Gate']},{n:'SC-Research',rm:'l99',d:'Deep Research',p:'/sc:deep',sk:'#e8d0a0',hc:'#f59e0b',F:1,re:'🔍',act:['12+ sources','Synthesis','Report','Facts']},{n:'SC-Token',rm:'l99',d:'Token Saver',p:'on-demand',sk:'#888',hc:'#666',F:0,re:'💰',act:['Optimize','Compress','Cache','Save']},{n:'AEGISApi',rm:'sec',d:'AEGIS API',p:'continu',sk:'#888',hc:'#666',F:0,re:'🛡️',act:['WAF','Block','Alert','Log']},{n:'PHP Auth',rm:'dead',d:'SSO SUPPRIMÉ',p:'REMOVED 8avr',sk:'#d8b080',hc:'#84cc16',F:0,re:'🔑',act:['SUPPRIMÉ','PHP Auth actif','Cookie HMAC','Session 30j'],si:'sit'},{n:'ECC-Security',rm:'sec',d:'Security Review',p:'Audit',sk:'#f0a0a0',hc:'#ef4444',F:0,re:'🔒',act:['OWASP','Secrets','Deps','CVE']},{n:'GuardianScan',rm:'sec',d:'Guardian scan',p:'*/5min',sk:'#888',hc:'#666',F:0,re:'🔍',act:['Scan','MD5','chattr','Alert']},{n:'GuardScan',rm:'sec',d:'Guardian scan',p:'S95',sk:'#888',hc:'#666',F:0,re:'🔍',act:['Vuln scan','Port scan','Report','Fix']},{n:'KeyHacks',rm:'sec',d:'Secret Scanner',p:'dormant',sk:'#888',hc:'#666',F:0,re:'🔑',act:['API keys','Tokens','Creds','Alert']},{n:'Persona-Cyber',rm:'sec',d:'Auditor',p:'Security',sk:'#f0a0a0',hc:'#ef4444',F:0,re:'🛡',act:['Pentest','OWASP','Compliance','Incident']},{n:'SecMonitor',rm:'sec',d:'Sec monitor',p:'continu',sk:'#888',hc:'#666',F:0,re:'👁️',act:['Fail2Ban','CrowdSec','IDS','Report']},{n:'Security',rm:'sec',d:'OWASP',p:'Pentests',sk:'#c99565',hc:'#111',F:0,re:'🔐',act:['OWASP top10','Headers','XSS test','SSL certs']},{n:'SMTPTest',rm:'sec',d:'SMTP tester',p:'S95',sk:'#888',hc:'#666',F:0,re:'📧',act:['Connect','Auth','Headers','Score']},{n:'Strix',rm:'sec',d:'Nuclei scan',p:'OSS WIRED',sk:'#d8d8d8',hc:'#a1a1aa',F:0,re:'🦉',act:['Nuclei templates','Scan vuln','Report CVE','Auto-patch']},{n:'Verifier',rm:'sec',d:'ISO/RGPD',p:'PCI-DSS',sk:'#e8cca0',hc:'#3a3a4a',F:1,gl:1,re:'👮',act:['RGPD check','ISO 27001','PCI-DSS','Access ctrl']},{n:'Wevalsecurity',rm:'dead',d:'security',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🔒',act:['Sync','Execute','Report','Monitor'],si:'sit'},{n:'ACT Infra',rm:'dead',d:'devops',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🖥️',act:['Sync','Execute','Report','Monitor'],si:'sit'},{n:'ACT-Infra',rm:'srv',d:'Infra Actions',p:'DevOps',sk:'#f0d0a0',hc:'#f59e0b',F:1,re:'🖥',act:['Deploy','Scale','Monitor','Incident']},{n:'Blade',rm:'srv',d:'Desktop',p:'PowerShell',sk:'#f0d0b0',hc:'#1a3050',F:0,re:'💻',act:['Sync→S204','PowerShell','Task planif','Upload docs']},{n:'Blade Sentinel',rm:'srv',d:'Blade Agent',p:'active',sk:'#888',hc:'#666',F:0,re:'💻',act:['Sync 60s','14 files','Agent loop','Report']},{n:'BladeAgent',rm:'srv',d:'Desktop agent',p:'*/60s',sk:'#888',hc:'#666',F:0,re:'⚔️',act:['Sync','Monitor','Execute','Report']},{n:'BladeBrain',rm:'srv',d:'Blade AI',p:'continu',sk:'#888',hc:'#666',F:0,re:'🧠',act:['Analyze','Decide','Route','Execute']},{n:'BladeMatter',rm:'srv',d:'Mattermost',p:'continu',sk:'#888',hc:'#666',F:0,re:'💬',act:['Alert','Channel','Thread','Notify']},{n:'BladeOps',rm:'srv',d:'Blade ops',p:'continu',sk:'#888',hc:'#666',F:0,re:'💻',act:['Status','Deploy','Restart','Log']},{n:'BladePower',rm:'srv',d:'Power mgmt',p:'continu',sk:'#888',hc:'#666',F:0,re:'⚡',act:['Battery','Perf','Throttle','Report']},{n:'BladeSentinel',rm:'srv',d:'Razer Sentinel',p:'active',sk:'#888',hc:'#666',F:0,re:'💻',act:['Sync 60s','14 files','Agent loop','Report']},{n:'BladeTelegram',rm:'srv',d:'Telegram',p:'continu',sk:'#888',hc:'#666',F:0,re:'📨',act:['Send','Alert','Status','Report']},{n:'BladeTelgm',rm:'srv',d:'Telegram',p:'continu',sk:'#888',hc:'#666',F:0,re:'📲',act:['Brief','Alert','Report','7h']},{n:'CFManager',rm:'srv',d:'Cloudflare',p:'S95+S204',sk:'#888',hc:'#666',F:0,re:'☁️',act:['Zones','Cache','Rules','SSL']},{n:'CloudCost',rm:'srv',d:'Cost monitor',p:'1x/j',sk:'#888',hc:'#666',F:0,re:'💸',act:['Track','Alert','Optimize','Report']},{n:'CloudFact',rm:'srv',d:'Cloud factory',p:'S95',sk:'#888',hc:'#666',F:0,re:'☁️',act:['Provision','Configure','Deploy','Monitor']},{n:'CloudFactory',rm:'srv',d:'Cloud factory',p:'demand',sk:'#888',hc:'#666',F:0,re:'☁️',act:['Provision','Configure','Deploy','Monitor']},{n:'CloudOrch',rm:'srv',d:'Cloud orch',p:'S95',sk:'#888',hc:'#666',F:0,re:'🎭',act:['Scale','Balance','Failover','Log']},{n:'DevOps',rm:'srv',d:'DevOps',p:'CI/CD',sk:'#f0d0a0',hc:'#f59e0b',F:1,re:'🚀',act:['CI/CD','Docker','K8s','IaC']},{n:'DNSPush',rm:'srv',d:'DNS push',p:'S95',sk:'#888',hc:'#666',F:0,re:'🌐',act:['CF push','Records','Verify','Log']},{n:'DomainPool',rm:'srv',d:'Domain pool',p:'S95',sk:'#888',hc:'#666',F:0,re:'🏊',act:['Rotate','Warm','Health','Report']},{n:'DomainRot',rm:'srv',d:'Domain rotate',p:'S95',sk:'#888',hc:'#666',F:0,re:'🔄',act:['Select','Assign','Monitor','Swap']},{n:'DroidCLI',rm:'srv',d:'Orchestrator S95',p:'WEDROID LIVE',sk:'#e8cca0',hc:'#84cc16',F:0,re:'🤖',act:['Chain exec S95','Sentinel cmd','DB query','Deploy']},{n:'Git Master',rm:'dead',d:'devops',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🔀',act:['Sync','Execute','Report','Monitor'],si:'sit'},{n:'GitMaster',rm:'srv',d:'Git flow',p:'Releases',sk:'#e8cca0',hc:'#3a5a2a',F:0,gl:1,re:'👨🏻✈️',act:['Tag v3.2.1','Merge dev','Cherry-pick','Release']},{n:'Guardian',rm:'srv',d:'Protection',p:'chattr +i',sk:'#c99565',hc:'#1a2a1a',F:0,re:'🛡️',act:['chattr +i','Scan intrus','Lock SSH','Firewall']},{n:'Persona-Cloud',rm:'srv',d:'Architect',p:'Multi-cloud',sk:'#f0d0a0',hc:'#f59e0b',F:0,re:'☁',act:['AWS','Azure','GCP','Terraform']},{n:'PHP74-FPM',rm:'srv',d:'PHP 7.4',p:'continu',sk:'#888',hc:'#666',F:0,re:'🐘',act:['Pool','Workers','Queue','Process']},{n:'PHP74FPM',rm:'srv',d:'PHP 7.4',p:'S204',sk:'#888',hc:'#666',F:0,re:'🐘',act:['Legacy','Process','Pool','Log']},{n:'PHP84-FPM',rm:'srv',d:'PHP 8.4',p:'continu',sk:'#888',hc:'#666',F:0,re:'🐘',act:['Pool','Workers','Queue','Process']},{n:'PHP84FPM',rm:'srv',d:'PHP 8.4',p:'S204',sk:'#888',hc:'#666',F:0,re:'🐘',act:['Process','OPcache','Pool','Monitor']},{n:'PHP85-FPM',rm:'srv',d:'PHP 8.5',p:'continu',sk:'#888',hc:'#666',F:0,re:'🐘',act:['Pool','Workers','Queue','Process']},{n:'PHP85FPM',rm:'srv',d:'PHP 8.5',p:'S204',sk:'#888',hc:'#666',F:0,re:'🐘',act:['Process','JIT','Pool','Monitor']},{n:'S151-Nginx',rm:'srv',d:'S151 nginx',p:'continu',sk:'#888',hc:'#666',F:0,re:'🌐',act:['Serve','Proxy','SSL','Log']},{n:'S151-Ollama',rm:'srv',d:'S151 ollama',p:'continu',sk:'#888',hc:'#666',F:0,re:'🧠',act:['qwen2.5:3b','Inference','CPU','Sovereign']},{n:'S151-PG',rm:'srv',d:'S151 postgres',p:'continu',sk:'#888',hc:'#666',F:0,re:'🐘',act:['Store','Query','Backup','Replicate']},{n:'S151-Redis',rm:'srv',d:'S151 redis',p:'continu',sk:'#888',hc:'#666',F:0,re:'🔴',act:['Cache','Queue','PubSub','Persist']},{n:'S151-Tracking',rm:'srv',d:'Tracking Relay',p:'active',sk:'#888',hc:'#666',F:0,re:'📡',act:['open.php','click.php','Relay S204','Log']},{n:'S151Nginx',rm:'srv',d:'S151 Nginx',p:'S151 OVH',sk:'#888',hc:'#666',F:0,re:'🌐',act:['Proxy','SSL','Track pixel','Logs']},{n:'S151PG',rm:'srv',d:'S151 Postgres',p:'S151',sk:'#888',hc:'#666',F:0,re:'🐘',act:['Store','Query','Backup','Replicate']},{n:'S151Redis',rm:'srv',d:'S151 Redis',p:'S151',sk:'#888',hc:'#666',F:0,re:'🔴',act:['Cache','Queue','Pub/Sub','TTL']},{n:'S151Track',rm:'srv',d:'Track pixel',p:'culturelle',sk:'#888',hc:'#666',F:0,re:'📍',act:['Open track','Click track','Conv track','Log']},{n:'S95-Arsenal',rm:'srv',d:'192 Pages SPA',p:'active',sk:'#888',hc:'#666',F:0,re:'🖥️',act:['192 pages','Login','API','Monitor']},{n:'S95-Sentinel',rm:'srv',d:'Sentinel Brain',p:'active',sk:'#888',hc:'#666',F:0,re:'🛡️',act:['Port 5890','8443 backup','Exec','Report']},{n:'SentinelBr',rm:'srv',d:'Sentinel brain',p:'S95 core',sk:'#888',hc:'#666',F:0,re:'🛡️',act:['Execute','Monitor','Repair','Log']},{n:'SentinelBrn',rm:'srv',d:'Sentinel AI',p:'continu',sk:'#888',hc:'#666',F:0,re:'📡',act:['Execute','Monitor','Heal','Report']},{n:'SentinelEng',rm:'srv',d:'Sentinel eng',p:'S95',sk:'#888',hc:'#666',F:0,re:'⚡',act:['Parse','Route','Execute','Respond']},{n:'SentinelV5',rm:'srv',d:'V5 engine',p:'continu',sk:'#888',hc:'#666',F:0,re:'🛡️',act:['Parse','Execute','Respond','Log']},{n:'SentinelVault',rm:'srv',d:'Vault ctrl',p:'*/6h',sk:'#888',hc:'#666',F:0,re:'🔒',act:['Lock','Verify','Backup','Alert']},{n:'SentinelVlt',rm:'srv',d:'Sentinel vault',p:'S95',sk:'#888',hc:'#666',F:0,re:'🔐',act:['Store','Encrypt','Retrieve','Audit']},{n:'Watchdog',rm:'srv',d:'Monitor */3',p:'24 Docker',sk:'#d8b080',hc:'#8a6a30',F:0,re:'🐕',act:['Restart Nginx','Disk alert','Ping Docker','Check Ollama']},{n:'Watchdog 2',rm:'srv',d:'Backup Watch',p:'continu',sk:'#888',hc:'#666',F:0,re:'🐶',act:['Disk','Memory','Process','Alert']},{n:'Blacklist',rm:'ops',d:'Blacklist chk',p:'S95',sk:'#888',hc:'#666',F:0,re:'🚫',act:['Check 50 RBL','Alert','Delist','Log']},{n:'Brain',rm:'ops',d:'Idées',p:'Innovation',sk:'#f0d0b0',hc:'#eab308',F:0,re:'💡',act:['Produit','Process','R&D','PoC']},{n:'BrainDashb',rm:'ops',d:'Brain dashb',p:'on demand',sk:'#888',hc:'#666',F:0,re:'📊',act:['Stats live','Revenue','Opens','Clicks']},{n:'BrainDrill',rm:'ops',d:'Brain drill',p:'on demand',sk:'#888',hc:'#666',F:0,re:'🔍',act:['Deep analyze','Config','ISP','Report']},{n:'BrainReport',rm:'ops',d:'Brain report',p:'1x/j',sk:'#888',hc:'#666',F:0,re:'📋',act:['Daily stats','Revenue','ROI','Export']},{n:'Dashboard',rm:'ops',d:'Auto dashboard',p:'Analytics',sk:'#f0d0b0',hc:'#eab308',F:0,re:'📈',act:['Gen dashboard','KPI charts','Auto report','Export']},{n:'Explorer',rm:'ops',d:'Discovery',p:'on-demand',sk:'#888',hc:'#666',F:0,re:'🌍',act:['New tools','Evaluate','Wire','Report']},{n:'Flowisedata',rm:'dead',d:'orchestrator',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🔀',act:['Sync','Execute','Report','Monitor'],si:'sit'},{n:'Intro',rm:'ops',d:'Méta',p:'Amélioration',sk:'#e8cca0',hc:'#a855f7',F:1,re:'🧠',act:['Perf analyse','Prompts','Méta-cog','Workflow']},{n:'iRespAPI',rm:'ops',d:'iResp API',p:'ports 5822-26',sk:'#888',hc:'#666',F:0,re:'🔌',act:['REST','Webhooks','Auth','Rate limit']},{n:'iRespMain',rm:'ops',d:'iResponse',p:'port 5821',sk:'#888',hc:'#666',F:0,re:'📧',act:['Dashboard','Campaigns','Stats','Report']},{n:'Langflow',rm:'dead',d:'orchestrator',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🔀',act:['Sync','Execute','Report','Monitor'],si:'sit'},{n:'O365Cmd',rm:'ops',d:'O365 cmd',p:'demand',sk:'#888',hc:'#666',F:0,re:'📧',act:['Accounts','Manage','Rotate','Report']},{n:'O365CmdCtr',rm:'ops',d:'O365 center',p:'S204',sk:'#888',hc:'#666',F:0,re:'📧',act:['1131 accounts','Status','Rotate','Manage']},{n:'OfficeAdmin',rm:'ops',d:'O365 admin',p:'on demand',sk:'#888',hc:'#666',F:0,re:'👥',act:['Create','Configure','DNS','Activate']},{n:'OfficeCheck',rm:'ops',d:'O365 checker',p:'2x/j',sk:'#888',hc:'#666',F:0,re:'📧',act:['Check','Status','Rotate','Report']},{n:'OfficeChk',rm:'ops',d:'Office check',p:'S95',sk:'#888',hc:'#666',F:0,re:'✅',act:['Verify','DNS','SPF/DKIM','Report']},{n:'OfficeMgmt',rm:'ops',d:'Office mgmt',p:'S95',sk:'#888',hc:'#666',F:0,re:'📊',act:['Import','Assign','Rotate','Archive']},{n:'Orch',rm:'ops',d:'Orchestration',p:'Multi-agent',sk:'#c99565',hc:'#222',F:0,re:'🎯',act:['Sync agents','Deploy coord','Pipeline','Multi-task']},{n:'PostMaster',rm:'ops',d:'Postmaster',p:'S95',sk:'#888',hc:'#666',F:0,re:'📬',act:['Gmail PM','Yahoo PM','Outlook PM','Report']},{n:'PostmasterM',rm:'ops',d:'Postmaster',p:'1x/h',sk:'#888',hc:'#666',F:0,re:'📬',act:['Google','Yahoo','Metrics','Alert']},{n:'Prometheus',rm:'ops',d:'Metrics',p:'OSS WIRED',sk:'#d8d8d8',hc:'#a1a1aa',F:1,re:'📉',act:['Scrape metrics','Grafana dash','Alert rules','Retention']},{n:'Reputation',rm:'ops',d:'IP rep',p:'1x/h',sk:'#888',hc:'#666',F:0,re:'⭐',act:['Check','Score','Alert','Delist']},{n:'SeedCleaner',rm:'ops',d:'Seed clean',p:'1x/j',sk:'#888',hc:'#666',F:0,re:'🧹',act:['Analyze','Remove bad','Refresh','Report']},{n:'SeedManager',rm:'ops',d:'Seed mgr',p:'continu',sk:'#888',hc:'#666',F:0,re:'🌱',act:['Create','Test','Monitor','Rotate']},{n:'TaskMgr',rm:'ops',d:'Tâches',p:'Kanban',sk:'#e8cca0',hc:'#4a4a3a',F:1,re:'📋',act:['Kanban','Deadlines','Priorités','Status']},{n:'TrackBridge',rm:'ops',d:'Track bridge',p:'continu',sk:'#888',hc:'#666',F:0,re:'🌐',act:['Bridge','Sync','Route','Log']},{n:'TrackConfig',rm:'ops',d:'Track config',p:'S95',sk:'#888',hc:'#666',F:0,re:'⚙️',act:['Configure','Domain','SSL','Verify']},{n:'TrackEvents',rm:'ops',d:'Events',p:'continu',sk:'#888',hc:'#666',F:0,re:'📊',act:['Open','Click','Convert','Report']},{n:'TrackRaw',rm:'ops',d:'Track raw',p:'S95',sk:'#888',hc:'#666',F:0,re:'📋',act:['Capture','Store','Index','Query']},{n:'TrackUnify',rm:'ops',d:'Track unified',p:'S95',sk:'#888',hc:'#666',F:0,re:'📡',act:['Merge','Dedupe','Attribute','Report']},{n:'TrackWebhk',rm:'ops',d:'Track webhook',p:'S95',sk:'#888',hc:'#666',F:0,re:'🪝',act:['Receive','Parse','Store','Forward']},{n:'TrackWebhook',rm:'ops',d:'Webhooks',p:'event',sk:'#888',hc:'#666',F:0,re:'🔔',act:['Receive','Parse','Store','Forward']},{n:'ADXCache',rm:'dock',d:'Cache cleaner S95',p:'RUNNING',sk:'#f0d0b0',hc:'#0ea5e9',F:1,re:'🧹',act:['Clean cache','Purge old','Free mem','Optimize']},{n:'Arsenal',rm:'dock',d:'192 endpoints S95',p:'RUNNING',sk:'#d8b080',hc:'#0ea5e9',F:0,re:'🏟️',act:['Serve 192 URLs','Track campaigns','Bounce handle','Stats']},{n:'B2BScripts',rm:'dock',d:'10 scripts S95',p:'Cron /4h',sk:'#e8cca0',hc:'#0ea5e9',F:0,re:'🏢',act:['Scrape leads','Pattern emails','Mega enricher','Round 2']},{n:'EthicaScripts',rm:'dock',d:'15 scripts S95',p:'Cron active',sk:'#f0d0b0',hc:'#0ea5e9',F:1,re:'💉',act:['DabaDoc scrape','LinkedIn drip','Email enrich','Master dedup']},{n:'Fail2Ban',rm:'dock',d:'IPS S204+S95',p:'RUNNING',sk:'#f0d0b0',hc:'#0ea5e9',F:0,re:'🚫',act:['Block brute','Ban SSH','Jail nginx','Unban IP']},{n:'Flowise',rm:'dock',d:'AI flows :3033',p:'UP',sk:'#e8cca0',hc:'#0ea5e9',F:1,re:'🌊',act:['Build flow','Chain LLMs','API endpoint','Test flow']},{n:'LangFuse',rm:'dock',d:'LLM Observability',p:'RESTART',sk:'#888',hc:'#666',F:0,re:'🔍',act:['Traces','Eval','Cost','Debug']},{n:'LangfuseR',rm:'dead',d:'Langfuse restart',p:'MERGED w/ Langfuse',sk:'#888',hc:'#dc2626',F:0,re:'🔴',act:['Restart loop','Check logs','Fix config','Recover']},{n:'Loki',rm:'dock',d:'Log aggreg',p:'UP :3102',sk:'#e8cca0',hc:'#0ea5e9',F:0,re:'📋',act:['Collect logs','Query Grafana','Alert pattern','Archiving']},{n:'Mattermost',rm:'dock',d:'Team chat',p:'UP healthy',sk:'#f0d0b0',hc:'#0ea5e9',F:1,re:'💬',act:['DeerFlow hook','Alert channel','Team collab','Bot webhook']},{n:'MiroFish 2',rm:'dead',d:'Flowise Alt',p:'REMOVED',sk:'#888',hc:'#666',F:0,re:'🐟',act:['Workflows','API','Canvas','Deploy']},{n:'n8n',rm:'dock',d:'15 WF :5678',p:'ACTIVE 15WF',sk:'#f0d0b0',hc:'#0ea5e9',F:1,re:'🔗',act:['Trigger webhook','API chain','Schedule task','Transform']},{n:'n8n-Alert',rm:'dock',d:'Alert Workflow',p:'dormant',sk:'#888',hc:'#666',F:0,re:'🚨',act:['Monitor','Trigger','Notify','Log']},{n:'n8n-B2B',rm:'dock',d:'B2B Workflow',p:'dormant',sk:'#888',hc:'#666',F:0,re:'📞',act:['Leads','Email find','Score','Push']},{n:'n8n-Deploy',rm:'dock',d:'Deploy Workflow',p:'dormant',sk:'#888',hc:'#666',F:0,re:'🚀',act:['Build','Test','Deploy','Notify']},{n:'n8n-Ethica',rm:'dock',d:'Ethica Workflow',p:'dormant',sk:'#888',hc:'#666',F:0,re:'💊',act:['Scrape','Clean','Enrich','Push']},{n:'n8n-Monitor',rm:'dock',d:'Monitor Workflow',p:'dormant',sk:'#888',hc:'#666',F:0,re:'📡',act:['Watch','Alert','Notify','Log']},{n:'NodeExporter',rm:'dock',d:'Prometheus Metrics',p:'active',sk:'#888',hc:'#666',F:0,re:'📊',act:['CPU','Memory','Disk','Network']},{n:'OllamaS95',rm:'dock',d:'Ollama S95',p:'systemd UP',sk:'#e8cca0',hc:'#0ea5e9',F:1,re:'🦙',act:['phi4-mini','smollm2','qwen3.5','Local infer']},{n:'OpenClaw',rm:'dock',d:'AI proxy S151',p:'SSO LIVE',sk:'#f0d0b0',hc:'#0ea5e9',F:1,re:'🦀',act:['Route AI calls','Multi-provider','Ollama proxy','Log usage']},{n:'OpenWebUI',rm:'dead',d:'Chat :8281',p:'REMOVED',sk:'#f0d0b0',hc:'#0ea5e9',F:1,re:'💬',act:['Serve chat UI','Route models','Auth users','Log convos']},{n:'Plausible',rm:'dock',d:'Analytics',p:'UP',sk:'#e8cca0',hc:'#0ea5e9',F:1,re:'📈',act:['Track visits','Page views','Dashboard','Export stats']},{n:'Qdrant',rm:'dock',d:'Vector DB',p:'RAG 4935vec Paperclip',sk:'#d8b080',hc:'#0ea5e9',F:0,re:'🧮',act:['Store 4414 vecs','Search similar','RAG embed','Skill index']},{n:'SearchProxy',rm:'dock',d:'SearXNG proxy',p:'systemd UP',sk:'#e8cca0',hc:'#0ea5e9',F:0,re:'🔎',act:['Proxy search','Multi-engine','Rate limit','Cache']},{n:'SearXNG',rm:'dock',d:'Meta search',p:'UP',sk:'#e8cca0',hc:'#0ea5e9',F:1,re:'🔍',act:['Search proxy','Multi-engine','Privacy','API query']},{n:'TrackingS151',rm:'dock',d:'16 PHP files',p:'S151 relay',sk:'#f0d0b0',hc:'#0ea5e9',F:0,re:'📍',act:['Track opens','Track clicks','Relay→S204','Log events']},{n:'Twenty',rm:'dock',d:'CRM :3000',p:'UP',sk:'#d8b080',hc:'#0ea5e9',F:0,re:'📇',act:['Track deals','Manage contacts','Pipeline CRM','Export data']},{n:'UptimeKuma',rm:'dock',d:'Uptime :3001',p:'UP healthy',sk:'#d8b080',hc:'#0ea5e9',F:1,re:'📊',act:['Ping 25 URLs','Alert down','Status page','99.9% SLA']},{n:'Vaultwarden',rm:'dock',d:'Passwords :8222',p:'UP S95',sk:'#f0d0b0',hc:'#0ea5e9',F:1,re:'🔐',act:['Store secrets','Auto-fill','Share vault','Audit log']},{n:'WevRelay',rm:'dock',d:'WEVADS relay',p:'systemd UP',sk:'#d8b080',hc:'#0ea5e9',F:1,re:'🔀',act:['Relay HTTP','Route S95','Track pixel','Redirect']},{n:'BrainCombo',rm:'mta',d:'Combo discov',p:'on demand',sk:'#888',hc:'#666',F:0,re:'🧪',act:['Test combos','Score','Rank','Winner']},{n:'BrainInject',rm:'mta',d:'Config inject',p:'on demand',sk:'#888',hc:'#666',F:0,re:'💉',act:['Inject config','Validate','Activate','Monitor']},{n:'BrainListener',rm:'mta',d:'Event listen',p:'continu',sk:'#888',hc:'#666',F:0,re:'👂',act:['Listen events','Parse','Route','Store']},{n:'BrainManager',rm:'mta',d:'Config mgr',p:'continu',sk:'#888',hc:'#666',F:0,re:'📋',act:['646 configs','9 winners','Score','Manage']},{n:'BrainOptimzr',rm:'mta',d:'Optimizer',p:'cron',sk:'#888',hc:'#666',F:0,re:'📈',act:['Analyze perf','Adjust','A/B test','Deploy']},{n:'BrainPipeline',rm:'mta',d:'Brain pipeline',p:'on demand',sk:'#888',hc:'#666',F:0,re:'🧠',act:['Select config','Build','Route MTA','Send']},{n:'BrainUnblock',rm:'mta',d:'Unblock pipe',p:'on demand',sk:'#888',hc:'#666',F:0,re:'🔓',act:['Detect block','Unblock','Retry','Log']},{n:'CleanSend',rm:'mta',d:'Clean Send',p:'on-demand',sk:'#888',hc:'#666',F:0,re:'🧹',act:['Validate','Clean','Score','Send']},{n:'Engineer WEVADS',rm:'mta',d:'WEVADS Dev',p:'continu',sk:'#888',hc:'#666',F:0,re:'📧',act:['Arsenal','Send','Track','Report']},{n:'EWSSender',rm:'mta',d:'EWS Exchange',p:'DISABLED',sk:'#888',hc:'#666',F:0,re:'📧',act:['EWS','Autodiscover','NTLM','Send']},{n:'GraphSender',rm:'mta',d:'MS Graph API',p:'DISABLED',sk:'#888',hc:'#666',F:0,re:'📧',act:['OAuth','Graph API','M365','Send']},{n:'iResponse',rm:'mta',d:'iResponse MTA',p:'PAUSED',sk:'#888',hc:'#666',F:0,re:'📨',act:['Processes','Queue','Bounce','Report']},{n:'KumoMTA',rm:'mta',d:'587+8010',p:'New sends',sk:'#e8cca0',hc:'#ec4899',F:0,re:'🚀',act:['Smart route','IP warm','Track opens','DMARC']},{n:'Persona-Email',rm:'mta',d:'Email Pro',p:'Delivery',sk:'#a0c0f0',hc:'#3b82f6',F:0,re:'📧',act:['DKIM','SPF','Warmup','Reputation']},{n:'PMTA',rm:'mta',d:'Port 25',p:'ADX legacy',sk:'#f0d0b0',hc:'#ec4899',F:0,re:'📮',act:['Batch 10K','DKIM sign','Bounce proc','Queue mgmt']},{n:'Postfix',rm:'mta',d:'2525/2526',p:'Internal',sk:'#d8b080',hc:'#ec4899',F:1,re:'📬',act:['Relay int','Forward','Queue flush','Log rotate']},{n:'S95-PMTA',rm:'mta',d:'PMTA Server',p:'SACRED',sk:'#888',hc:'#666',F:0,re:'📨',act:['Port 25','DKIM','Queue','Deliver']},{n:'SendController',rm:'mta',d:'Send Orchestrator',p:'on-demand',sk:'#888',hc:'#666',F:0,re:'📤',act:['Route','PMTA','KumoMTA','Postfix']},{n:'SendEngine',rm:'mta',d:'Unified Engine',p:'on-demand',sk:'#888',hc:'#666',F:0,re:'⚙️',act:['Template','Personalize','Queue','Track']},{n:'AdvScrape',rm:'pha',d:'Adv scraping',p:'S95',sk:'#888',hc:'#666',F:0,re:'🕸️',act:['JS render','Anti-bot','Parse','Store']},{n:'BrainConsent',rm:'pha',d:'Consent mgr',p:'continu',sk:'#888',hc:'#666',F:0,re:'✅',act:['Check RGPD','Consent DB','Verify','Log']},{n:'DocSpec',rm:'pha',d:'Docs',p:'Templates',sk:'#e8cca0',hc:'#333',F:1,gl:1,re:'👩⚕️',act:['Template','API Ethica','Guide user','README']},{n:'Engineer Ethica',rm:'pha',d:'Ethica Dev',p:'continu',sk:'#888',hc:'#666',F:0,re:'💊',act:['Scraper','API','Pipeline','Monitor']},{n:'EthicaAPI',rm:'pha',d:'Ethica API',p:'continu',sk:'#888',hc:'#666',F:0,re:'💊',act:['HCP query','Filter','Paginate','Respond']},{n:'EthicaCons',rm:'pha',d:'Consent GDPR',p:'consent.wevup',sk:'#888',hc:'#666',F:0,re:'✋',act:['Capture','Store','Verify','Report']},{n:'EthicaConsent',rm:'pha',d:'GDPR consent',p:'continu',sk:'#888',hc:'#666',F:0,re:'✅',act:['Collect','Store','Verify','Expire']},{n:'EthicaDrill',rm:'pha',d:'Ethica drill',p:'S95',sk:'#888',hc:'#666',F:0,re:'🔬',act:['Analyze','Segment','Score','Export']},{n:'EthicaScraper',rm:'pha',d:'HCP Scraper',p:'Auto',sk:'#d0b0f0',hc:'#a855f7',F:1,re:'🔍',act:['DabaDoc','1sante','LinkedIn','GMap']},{n:'EthicaSMS',rm:'pha',d:'SMS engine',p:'demand',sk:'#888',hc:'#666',F:0,re:'📱',act:['Queue','Send','Track','Report']},{n:'EthicaTrack',rm:'pha',d:'Pharma track',p:'continu',sk:'#888',hc:'#666',F:0,re:'📍',act:['Open','Click','Convert','Log']},{n:'Explore',rm:'pha',d:'R&D',p:'Sources HCP',sk:'#c99565',hc:'#5a3a10',F:0,re:'🧭',act:['Annuaire MA','Source DZ','Nouvelle API','Fournisseur']},{n:'MiroFish',rm:'pha',d:'Creative',p:'Brainstorm',sk:'#f0d0b0',hc:'#06b6d4',F:1,re:'🐟',act:['Campagne','Contenu','Newsletter','Brief']},{n:'NLExtract',rm:'pha',d:'Newsletter',p:'S95',sk:'#888',hc:'#666',F:0,re:'📰',act:['Extract','Parse','Clean','Import']},{n:'AdsCmd',rm:'saas',d:'Ads commander',p:'S95',sk:'#888',hc:'#666',F:0,re:'📢',act:['Campaigns','Budget','ROAS','Optimize']},{n:'AdsPlatf',rm:'saas',d:'Ads platform',p:'S95',sk:'#888',hc:'#666',F:0,re:'🎯',act:['FB Ads','Google','TikTok','Report']},{n:'ArsenalAPI',rm:'saas',d:'Arsenal API',p:'25 endpoints',sk:'#888',hc:'#666',F:0,re:'🔌',act:['REST','Proxy','Auth','Cache']},{n:'ArsenalHL',rm:'saas',d:'Arsenal health',p:'S95',sk:'#888',hc:'#666',F:0,re:'💚',act:['Health v2','Status','Alerts','Log']},{n:'ArsenalUI',rm:'saas',d:'Arsenal UI',p:'port 5890',sk:'#888',hc:'#666',F:0,re:'🎯',act:['150 screens','CRUD','Charts','Reports']},{n:'CEODash',rm:'saas',d:'CEO dashboard',p:'S95',sk:'#888',hc:'#666',F:0,re:'👔',act:['KPIs','Revenue','Team','Strategy']},{n:'HamidAPI',rm:'saas',d:'Hamid API',p:'continu',sk:'#888',hc:'#666',F:0,re:'🤝',act:['Proxy','Route','Cache','Respond']},{n:'HamidBrain',rm:'saas',d:'Hamid brain',p:'continu',sk:'#888',hc:'#666',F:0,re:'🧠',act:['Score','Select','Route','Ship']},{n:'HamidChef',rm:'saas',d:'Chef pipeline',p:'demand',sk:'#888',hc:'#666',F:0,re:'👨🍳',act:['Cook','Mix','Test','Serve']},{n:'HamidEngine',rm:'saas',d:'Send engine',p:'demand',sk:'#888',hc:'#666',F:0,re:'🚀',act:['Pick','Build','Route','Track']},{n:'LeadForge',rm:'saas',d:'Lead engine',p:'B2B pipe',sk:'#f0d0b0',hc:'#14b8a6',F:1,re:'🎣',act:['Gen leads','Score','Enrich','Export']},{n:'MailWarm',rm:'saas',d:'IP warming',p:'Deliver',sk:'#d8b080',hc:'#14b8a6',F:1,re:'🔥',act:['Warm IP','Ramp vol','Reputation','Rotate']},{n:'OfferEngine',rm:'saas',d:'Offer engine',p:'S95',sk:'#888',hc:'#666',F:0,re:'🎁',act:['Import','Validate','Route','Track']},{n:'OfferQual',rm:'saas',d:'Offer quality',p:'S95',sk:'#888',hc:'#666',F:0,re:'✅',act:['Check','Score','Approve','Reject']},{n:'OutreachAI',rm:'saas',d:'AI outreach',p:'Campaigns',sk:'#e8cca0',hc:'#14b8a6',F:0,re:'📨',act:['Sequence','A/B test','Schedule','Track']},{n:'ProposalAI',rm:'saas',d:'AI proposals',p:'Doc gen',sk:'#f0d0b0',hc:'#14b8a6',F:0,re:'📄',act:['Proposal','PDF','Pricing','Customize']},{n:'Stripe',rm:'saas',d:'Payments',p:'PK+SK LIVE',sk:'#e8cca0',hc:'#f97316',F:0,re:'💳',act:['Add SK live','Wire billing','Webhook','Test charge']},{n:'YouTubeChan',rm:'saas',d:'YT channels',p:'1x/j',sk:'#888',hc:'#666',F:0,re:'📺',act:['Monitor','Analytics','Optimize','Report']},{n:'YouTubeFact',rm:'saas',d:'YT factory',p:'demand',sk:'#888',hc:'#666',F:0,re:'🎬',act:['Create','Edit','Upload','Publish']},{n:'YTChannels',rm:'saas',d:'YT channels',p:'S95',sk:'#888',hc:'#666',F:0,re:'📡',act:['Manage','Schedule','Analytics','Grow']},{n:'YTFactory',rm:'saas',d:'YouTube fact',p:'S95',sk:'#888',hc:'#666',F:0,re:'📺',act:['Generate','Render','Upload','Track']},{n:'YTTrends',rm:'saas',d:'YT trends',p:'S95',sk:'#888',hc:'#666',F:0,re:'📈',act:['Scrape','Analyze','Predict','Report']},{n:'BladeGLM5',rm:'ai',d:'GLM-5 NVIDIA',p:'active',sk:'#888',hc:'#666',F:0,re:'🎮',act:['NIM API','GLM-5','Local GPU','Inference']},{n:'BrainAnlz',rm:'ai',d:'Brain analyze',p:'S95',sk:'#888',hc:'#666',F:0,re:'📊',act:['Inbox rate','Bounce','ISP','Report']},{n:'BrainCreat',rm:'ai',d:'Creative AI',p:'S95',sk:'#888',hc:'#666',F:0,re:'🎨',act:['Generate','Test','Score','Optimize']},{n:'BrainTrack',rm:'ai',d:'Track seeds',p:'S95',sk:'#888',hc:'#666',F:0,re:'🌱',act:['Seed test','Check inbox','Score','Alert']},{n:'BrainTrain',rm:'ai',d:'Brain train',p:'S95',sk:'#888',hc:'#666',F:0,re:'🏋️',act:['Learn','Optimize','A/B test','Ship']},{n:'Cerebras',rm:'ai',d:'Qwen 235B',p:'Fallback',sk:'#e8cca0',hc:'#8b5cf6',F:1,re:'🧮',act:['Reasoning','Long ctx','Multi-turn','Code gen']},{n:'Data Engineer',rm:'ai',d:'Data Eng',p:'ETL',sk:'#a0c0f0',hc:'#3b82f6',F:0,re:'💾',act:['ETL','Pipeline','Schema','Quality']},{n:'DeepAgent',rm:'ai',d:'Deep research',p:'API exists',sk:'#d8d8d8',hc:'#a1a1aa',F:0,re:'🕵️',act:['API /deepagent','Test research','Wire chatbot','Activate']},{n:'Gemini',rm:'ai',d:'Google AI',p:'KEY ACTIVE',sk:'#f0d0b0',hc:'#f97316',F:0,re:'♊',act:['Enable API','Get key','Wire provider','Test gen']},{n:'Groq',rm:'ai',d:'Llama 70B',p:'Default',sk:'#f0d0b0',hc:'#8b5cf6',F:0,re:'⚡',act:['500 req/s','Response','Classify','Embed']},{n:'SambaNova',rm:'ai',d:'LLM Provider',p:'DeepSeek-V3.1',sk:'#c99565',hc:'#1a1a1a',F:0,re:'',act:['Inference','Cascade','0EUR','Fallback']},{n:'DeepSeek',rm:'ai',d:'LLM Provider',p:'DeepSeek R1',sk:'#e8cca0',hc:'#2a3a8a',F:0,re:'',act:['Reasoning','Code','Chat','0EUR']},{n:'Ollama',rm:'ai',d:'9 models',p:'pip ollama',sk:'#d8b080',hc:'#8b5cf6',F:0,re:'🏠',act:['qwen3:8b','all-minilm','medllama2','weval-brain']},{n:'Persona-Data',rm:'ops',d:'Data Scientist',p:'on-demand',sk:'#888',hc:'#666',F:0,re:'📊',act:['ML','Stats','Viz','Pipeline']},{n:'S151-OpenClaw',rm:'ai',d:'OpenClaw Hub',p:'active',sk:'#888',hc:'#666',F:1,re:'🐙',act:['10 providers','35 models','Route','Serve']},{n:'ClaudeSync',rm:'wevia',d:'Claude monitor',p:'Doc sync',sk:'#f0d0b0',hc:'#6366f1',F:0,re:'📋',act:['Sync transcripts','Track sessions','Upload docs','Index']},{n:'Cog-Analysis',rm:'wevia',d:'Deep Analysis',p:'Cognitive',sk:'#c0a0d0',hc:'#7c3aed',F:1,re:'📊',act:['SWOT','Market','Insight','Pattern']},{n:'Cog-Creative',rm:'wevia',d:'Creative Engine',p:'on-demand',sk:'#888',hc:'#666',F:0,re:'🎨',act:['Copy','Design','Brand','Campaign']},{n:'Cog-Documents',rm:'wevia',d:'Doc Generation',p:'Reports',sk:'#c0a0d0',hc:'#6366f1',F:1,re:'📝',act:['Generate','Format','Export','Review']},{n:'Cog-Expansion',rm:'wevia',d:'Context Expand',p:'Enrichment',sk:'#c0a0d0',hc:'#6366f1',F:1,re:'💡',act:['Expand','Enrich','Cross-ref','Synthesize']},{n:'Cog-Opus46',rm:'wevia',d:'Opus 4.6 Mode',p:'Max quality',sk:'#c0a0d0',hc:'#6366f1',F:1,re:'💎',act:['Deep analysis','Architecture','Strategy','Quality']},{n:'Cog-Reasoning',rm:'wevia',d:'Logic Engine',p:'Deduction',sk:'#c0a0d0',hc:'#6366f1',F:1,re:'🧐',act:['Logic chain','Proof','Validate','Conclude']},{n:'Cog-Strategy',rm:'wevia',d:'Strategy',p:'Long-term',sk:'#c0a0d0',hc:'#7c3aed',F:1,re:'🎯',act:['OKR','Roadmap','Risk','Priority']},{n:'CogBrain',rm:'wevia',d:'Cognitive 25K',p:'continu',sk:'#888',hc:'#666',F:0,re:'🧠',act:['25045 lines','Metacog','CoT','Personas']},{n:'CogExpand',rm:'wevia',d:'Expansion 2395L',p:'continu',sk:'#888',hc:'#666',F:0,re:'💡',act:['401 funcs','Expand','Reason','Create']},{n:'L99',rm:'wevia',d:'Command Center',p:'79 layers',sk:'#d8b080',hc:'#6366f1',F:1,re:'🎮',act:['Check 79 layers','Score system','Deep audit','Report']},{n:'MermaidGen',rm:'wevia',d:'Diagram gen',p:'mmdc',sk:'#e8cca0',hc:'#6366f1',F:0,re:'📊',act:['Gen flowchart','Sequence diag','Class diag','Export SVG']},{n:'TTS',rm:'wevia',d:'Text-to-Speech',p:'Voice gen',sk:'#f0d0b0',hc:'#6366f1',F:1,re:'🔊',act:['Generate voice','FR accent','Stream audio','Cache result']},{n:'WEVCODE',rm:'wevia',d:'Code assistant',p:'4 modes',sk:'#f0d0b0',hc:'#6366f1',F:0,re:'💻',act:['Fast mode','Deep mode','Code mode','Math mode']},{n:'WEVIA PUBLIC',rm:'wevia',d:'Widget Chat',p:'continu',sk:'#888',hc:'#666',F:0,re:'💬',act:['71 modules','Centre Cmd','Widget','API']},{n:'WeviaArtifct',rm:'wevia',d:'Artifacts',p:'on demand',sk:'#888',hc:'#666',F:0,re:'🎨',act:['Generate','Host','Serve','Cache']},{n:'WeviaBrain',rm:'wevia',d:'Brain API',p:'continu',sk:'#888',hc:'#666',F:0,re:'🧠',act:['Route','Process','Respond','Cache']},{n:'WeviaCaps',rm:'wevia',d:'Capabilities',p:'continu',sk:'#888',hc:'#666',F:0,re:'💡',act:['List caps','Route','Execute','Return']},{n:'WEVIAGateway',rm:'wevia',d:'AI gateway',p:'18 providers',sk:'#d8b080',hc:'#6366f1',F:0,re:'🌐',act:['Route Groq','Fallback Cerebras','Proxy Mistral','Load balance']},{n:'WEVIALife',rm:'wevia',d:'Email sync',p:'Desktop→S204',sk:'#e8cca0',hc:'#6366f1',F:1,re:'📧',act:['Sync desktop','Upload docs','Track files','Index']},{n:'WeviaProvide',rm:'wevia',d:'Providers',p:'continu',sk:'#888',hc:'#666',F:0,re:'⚡',act:['7 providers','Failover','Balance','Route']},{n:'WeviaSkills',rm:'wevia',d:'Skills API',p:'continu',sk:'#888',hc:'#666',F:0,re:'🎯',act:['4414 skills','Query','Return','Cache']},{n:'WeviaSovPrxy',rm:'wevia',d:'Sovereign',p:'continu',sk:'#888',hc:'#666',F:0,re:'🛡️',act:['Route','Ollama','S151','Fallback']},{n:'WeviaTools',rm:'wevia',d:'Tools router',p:'continu',sk:'#888',hc:'#666',F:0,re:'🔧',act:['25 tools','Route','Execute','Return']},{n:'WeviaVision',rm:'wevia',d:'Vision VL',p:'demand',sk:'#888',hc:'#666',F:0,re:'👁️',act:['Image','Analyze','OCR','Respond']},{n:'AgentShield',rm:'plat',d:'Security audit',p:'Secrets scan',sk:'#e8cca0',hc:'#0d9488',F:1,re:'🔍',act:['Scan secrets','Audit code','Check leaks','Report clean']},{n:'AIBench',rm:'plat',d:'182 models',p:'Daily 5h',sk:'#f0d0b0',hc:'#0d9488',F:1,re:'🏆',act:['Bench 182 models','Compare speed','Score accuracy','Leaderboard']},{n:'BookingSys',rm:'plat',d:'Booking',p:'continu',sk:'#888',hc:'#666',F:0,re:'📅',act:['Calendly','Schedule','Confirm','Remind']},{n:'CodeWiki',rm:'plat',d:'203 files',p:'Auto-doc',sk:'#d8b080',hc:'#0d9488',F:0,re:'📖',act:['Index 203 files','Gen docs','Search code','Update wiki']},{n:'CRMDrill',rm:'plat',d:'CRM drill',p:'demand',sk:'#888',hc:'#666',F:0,re:'📊',act:['Contacts','Pipeline','Revenue','Export']},{n:'ECC-DocUpdater',rm:'plat',d:'Doc Updater',p:'Sync docs',sk:'#a0d0d0',hc:'#0d9488',F:0,re:'📚',act:['README','API docs','Wiki','Changelog']},{n:'GHGrab',rm:'plat',d:'Bulk cloner',p:'/ghgrab.sh',sk:'#f0d0b0',hc:'#0d9488',F:0,re:'📥',act:['Clone repos','Bulk download','Archive','Catalog']},{n:'InfraCmd',rm:'plat',d:'Infra command',p:'demand',sk:'#888',hc:'#666',F:0,re:'🖥️',act:['Servers','Docker','Ports','Actions']},{n:'MasterInv',rm:'plat',d:'Master inv',p:'demand',sk:'#888',hc:'#666',F:0,re:'📦',act:['Assets','Classify','Status','Export']},{n:'MegaCmdCtr',rm:'plat',d:'Mega cmd',p:'on demand',sk:'#888',hc:'#666',F:0,re:'🎮',act:['All systems','Monitor','Control','Report']},{n:'OpsCenter',rm:'plat',d:'Ops center',p:'demand',sk:'#888',hc:'#666',F:0,re:'📋',act:['Send','MTA','Queue','Monitor']},{n:'OSSDiscov',rm:'plat',d:'OSS discover',p:'demand',sk:'#888',hc:'#666',F:0,re:'🔎',act:['GitHub','Evaluate','Score','Report']},{n:'OSSDiscover',rm:'plat',d:'OSS catalog',p:'Scan GitHub',sk:'#d8b080',hc:'#0d9488',F:1,re:'🔭',act:['Scan trending','Evaluate tool','Clone repo','Report']},{n:'PromptsLib',rm:'plat',d:'55 prompts',p:'Searchable',sk:'#e8cca0',hc:'#0d9488',F:1,re:'✨',act:['Search prompt','Match context','Enhance','Cache']},{n:'SecDashb',rm:'plat',d:'Sec dashboard',p:'demand',sk:'#888',hc:'#666',F:0,re:'🔒',act:['Threats','CVEs','Scan','Report']},{n:'SkillsRAG',rm:'plat',d:'4414 skills',p:'Qdrant search',sk:'#f0d0b0',hc:'#0d9488',F:0,re:'🎯',act:['Search skills','Match task','Rank results','Auto-select']},{n:'TechRadar',rm:'plat',d:'Tech radar',p:'1x/sem',sk:'#888',hc:'#666',F:0,re:'📡',act:['Scan','Classify','Map','Publish']},{n:'ToolsHub',rm:'plat',d:'Tools hub',p:'demand',sk:'#888',hc:'#666',F:0,re:'🧰',act:['Tools','Access','Search','Launch']},{n:'VSMPipeline',rm:'plat',d:'VSM pipeline',p:'demand',sk:'#888',hc:'#666',F:0,re:'🔄',act:['Map','Waste','Optimize','Track']},{n:'WorldMapLv',rm:'plat',d:'World map',p:'continu',sk:'#888',hc:'#666',F:0,re:'🌍',act:['Live','GeoIP','Heatmap','Report']},{n:'6Sigma',rm:'cron',d:'6Sigma Auth',p:'2x/j',sk:'#888',hc:'#666',F:0,re:'📊',act:['Auth flow','SSO','Session','Report']},{n:'6SigmaAuth',rm:'cron',d:'6Sigma auth',p:'2x/j S204w',sk:'#888',hc:'#666',F:0,re:'📊',act:['Auth test','6 sigma','Score','Report']},{n:'AffMonitor',rm:'cron',d:'Affil mon',p:'1x/h S95',sk:'#888',hc:'#666',F:0,re:'📡',act:['Compare','Revenue','Delta','Alert']},{n:'AIBenchDaily',rm:'cron',d:'AI bench',p:'5h',sk:'#888',hc:'#666',F:0,re:'🏋',act:['Run bench','Score all','Rank','Publish']},{n:'AIGapCron',rm:'cron',d:'AI gap disco',p:'5h30 S204w',sk:'#888',hc:'#666',F:0,re:'🔎',act:['Find gaps','Score','Prioritize','Report']},{n:'AIGapDiscover',rm:'cron',d:'AI Gap Finder',p:'daily 5h30',sk:'#888',hc:'#666',F:0,re:'🔍',act:['Missing skills','Trending','Score','Enrich']},{n:'AIImprove',rm:'cron',d:'AI Improver',p:'daily 6h30',sk:'#888',hc:'#666',F:0,re:'📈',act:['Benchmark','Compare','Upgrade','Report']},{n:'AIImprovEng',rm:'cron',d:'AI improve',p:'6:30 S204w',sk:'#888',hc:'#666',F:0,re:'🚀',act:['Find improve','Generate','Test','Deploy']},{n:'AutoBackup',rm:'cron',d:'Backup',p:'2h S95',sk:'#888',hc:'#666',F:0,re:'💾',act:['PG dump','Config','Vault','Verify']},{n:'AutoBench',rm:'cron',d:'Auto bench',p:'*/2h',sk:'#888',hc:'#666',F:0,re:'🏋',act:['Bench AI','Score','Compare','Report']},{n:'AutoDelist',rm:'cron',d:'IP Delist',p:'*/4h',sk:'#888',hc:'#666',F:0,re:'🚫',act:['Check BL','Submit','Verify','Log']},{n:'AutoLearn',rm:'cron',d:'WEVIA AutoLearn',p:'*/2h',sk:'#888',hc:'#666',F:0,re:'📖',act:['Qdrant','Embed','Index','Search']},{n:'AutoOps',rm:'cron',d:'Auto ops',p:'*/2h S204',sk:'#888',hc:'#666',F:0,re:'⚙️',act:['Check all','Auto fix','Deploy','Log']},{n:'B2BAutonom',rm:'cron',d:'B2B autonom',p:'6x/j S95',sk:'#888',hc:'#666',F:0,re:'💼',act:['Scrape','Enrich','Score','Export']},{n:'B2BCron',rm:'cron',d:'Scrape /4h',p:'Lead gen',sk:'#f0d0b0',hc:'#64748b',F:0,re:'🔄',act:['LinkedIn','Email pattern','Playwright','Enricher']},{n:'B2BCron204',rm:'cron',d:'B2B cron',p:'4x/j S204w',sk:'#888',hc:'#666',F:0,re:'💼',act:['Run pipeline','Scrape','Score','Store']},{n:'BackupCron',rm:'cron',d:'Daily 4am',p:'PG+vault',sk:'#e8cca0',hc:'#64748b',F:1,re:'💾',act:['PG backup','GOLD sync','Config arch','Sentinel']},{n:'BackupOVH',rm:'cron',d:'Backup OVH',p:'3h S95',sk:'#888',hc:'#666',F:0,re:'💾',act:['Dump','Compress','SCP S151','Verify']},{n:'Baselines',rm:'cron',d:'Visual Baselines',p:'weekly Sun',sk:'#888',hc:'#666',F:0,re:'📸',act:['11 baselines','Screenshot','Diff','Update']},{n:'BenchRefresh',rm:'cron',d:'Bench cache',p:'*/6h S204',sk:'#888',hc:'#666',F:0,re:'🔄',act:['Refresh cache','Live bench','Store','Serve']},{n:'BladeWatch',rm:'cron',d:'Blade watch',p:'*/5 S204',sk:'#888',hc:'#666',F:0,re:'⚔️',act:['Blade OK','Services','Alert','Log']},{n:'BounceProc',rm:'cron',d:'Bounce',p:'*/15 S95',sk:'#888',hc:'#666',F:0,re:'📬',act:['Parse','Classify','Delist','Report']},{n:'ClaudeSyncCr',rm:'cron',d:'Claude sync',p:'4h',sk:'#888',hc:'#666',F:0,re:'📤',act:['Sync','Index','KB update','Done']},{n:'CompanyScrp',rm:'cron',d:'Company scrp',p:'*/2h S95',sk:'#888',hc:'#666',F:0,re:'🏢',act:['30 companies','Scrape','Enrich','Store']},{n:'CompScraper',rm:'cron',d:'Company scrp',p:'*/2h S95',sk:'#888',hc:'#666',F:0,re:'🏢',act:['30 companies','Scrape','Enrich','Store']},{n:'ConvPull',rm:'cron',d:'Conv pull',p:'*/30 S95',sk:'#888',hc:'#666',F:0,re:'💰',act:['CAKE','Everflow','Match','Rev']},{n:'CreativePerf',rm:'cron',d:'Creative AI',p:'1x/h S95',sk:'#888',hc:'#666',F:0,re:'🎨',act:['Score','Top20','Archive','Report']},{n:'CritFilGuard',rm:'cron',d:'Critical guard',p:'*/5 S95',sk:'#888',hc:'#666',F:0,re:'🛡️',act:['Check files','chattr','MD5','Alert']},{n:'CritGuard',rm:'cron',d:'Critical guard',p:'*/5 S95',sk:'#888',hc:'#666',F:0,re:'🛡',act:['Check files','MD5 verify','Restore','Alert']},{n:'CRMSeqCron',rm:'cron',d:'CRM sequences',p:'S204 cron.d',sk:'#888',hc:'#666',F:0,re:'📋',act:['Run sequences','Email drip','Follow-up','Track']},{n:'CRMSequence',rm:'cron',d:'CRM seq',p:'*/6h S204',sk:'#888',hc:'#666',F:0,re:'📋',act:['Execute seq','Email','Follow-up','Score']},{n:'CronBounces',rm:'cron',d:'Bounce cron',p:'*/4h S95r',sk:'#888',hc:'#666',F:0,re:'📬',act:['Parse bounces','Classify','Delist','Report']},{n:'DabaDocEnr',rm:'cron',d:'DabaDoc enrich',p:'6h30 S95',sk:'#888',hc:'#666',F:0,re:'💎',act:['1000 enrich','Cross-ref','Validate','Store']},{n:'DabaDocMA',rm:'cron',d:'DabaDoc MA',p:'3h30 S95',sk:'#888',hc:'#666',F:0,re:'💊',act:['5000 docs','Morocco','Scrape','Store']},{n:'DabaDocTN',rm:'cron',d:'DabaDoc TN',p:'4h S95',sk:'#888',hc:'#666',F:0,re:'🔬',act:['5000 docs','Tunisia','Scrape','Store']},{n:'DabaEnrich',rm:'cron',d:'DabaDoc enrich',p:'6:30 S95',sk:'#888',hc:'#666',F:0,re:'💎',act:['1000 HCPs','Enrich','Verify','Store']},{n:'DailyBackup2',rm:'cron',d:'Root backup',p:'3h S95r',sk:'#888',hc:'#666',F:0,re:'💾',act:['Full backup','Compress','Store','Verify']},{n:'DailyBrief',rm:'cron',d:'Telegram Brief',p:'daily 7h',sk:'#888',hc:'#666',F:0,re:'📨',act:['Status 4 machines','Alerts','KPIs','Send TG']},{n:'DailyStats',rm:'cron',d:'Stats aggr',p:'0h30 S95r',sk:'#888',hc:'#666',F:0,re:'📊',act:['Aggregate','Revenue','Opens','Report']},{n:'DarkScraper',rm:'dead',d:'scraping',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🕵️',act:['Sync','Execute','Report','Monitor'],si:'sit'},{n:'DeerFlowCron',rm:'cron',d:'DeerFlow Tasks',p:'*/6h',sk:'#b0b0c0',hc:'#64748b',F:1,re:'🦌',act:['Research','Skills','A2A','Memory']},{n:'DiskMonitor',rm:'cron',d:'Disk Watcher',p:'*/6h',sk:'#888',hc:'#666',F:0,re:'💿',act:['df check','Alert >85%','Clean tmp','Log']},{n:'EmailEnrDZ',rm:'cron',d:'Email DZ',p:'8h S95',sk:'#888',hc:'#666',F:0,re:'🏥',act:['500 emails','Algeria','Enrich','Store']},{n:'EmailEnrMA',rm:'cron',d:'Email MA',p:'8h30 S95',sk:'#888',hc:'#666',F:0,re:'💊',act:['500 emails','Morocco','Enrich','Store']},{n:'EmailFetcher',rm:'cron',d:'Email fetch',p:'2x/j S95',sk:'#888',hc:'#666',F:0,re:'📥',act:['500 fetch','Parse inbox','Extract','Store']},{n:'EmEnrichDZ',rm:'cron',d:'Email DZ',p:'8h S95',sk:'#888',hc:'#666',F:0,re:'🏥',act:['500 DZ','Email find','Verify','Store']},{n:'EmEnrichMA',rm:'cron',d:'Email MA',p:'8:30 S95',sk:'#888',hc:'#666',F:0,re:'💊',act:['500 MA','Email find','Verify','Store']},{n:'EmFetcher',rm:'cron',d:'Email fetch',p:'2x/j S95',sk:'#888',hc:'#666',F:0,re:'📥',act:['500 fetch','Parse','Validate','Store']},{n:'EngageCron',rm:'cron',d:'Engagement',p:'1h30 S95r',sk:'#888',hc:'#666',F:0,re:'📈',act:['Score','Classify','Segment','Report']},{n:'Engagement',rm:'cron',d:'Engagement',p:'1:30 S95r',sk:'#888',hc:'#666',F:0,re:'📈',act:['Open rates','Click rates','Score','Store']},{n:'EnrichAuto',rm:'cron',d:'Enricher auto',p:'4x/j S95',sk:'#888',hc:'#666',F:0,re:'🔄',act:['Auto batch','Cross-ref','Score','Update']},{n:'EnricherAuto',rm:'cron',d:'Enricher auto',p:'4x/j S95',sk:'#888',hc:'#666',F:0,re:'🔄',act:['Auto enrich','All sources','Validate','Report']},{n:'EnrichV4',rm:'cron',d:'Enrich v4',p:'1h S204',sk:'#888',hc:'#666',F:0,re:'🧬',act:['300 HCPs','Cross-ref','Validate','Update']},{n:'Ethica1sDeep',rm:'cron',d:'1sante deep',p:'2h S95',sk:'#888',hc:'#666',F:0,re:'🏥',act:['5000 pages','Deep parse','Extract','Store']},{n:'EthicaAuto',rm:'cron',d:'Ethica auto',p:'5h S204w',sk:'#888',hc:'#666',F:0,re:'💊',act:['Auto pipeline','All countries','Enrich','Report']},{n:'EthicaCrS2',rm:'cron',d:'Ethica S204',p:'3x/j S204',sk:'#888',hc:'#666',F:0,re:'💉',act:['Scrape','3 pays','Parse','Update']},{n:'EthicaEmDrip',rm:'cron',d:'Email drip',p:'*/5 S95',sk:'#888',hc:'#666',F:0,re:'📧',act:['20 batch','Extract','Verify','Store']},{n:'EthicaEnrich',rm:'cron',d:'Ethica Enricher',p:'weekly Sun',sk:'#888',hc:'#666',F:0,re:'💊',act:['SearXNG 200','Phones','Emails','Quality']},{n:'EthicaLIDrip',rm:'cron',d:'LinkedIn drip',p:'*/20 S95',sk:'#888',hc:'#666',F:0,re:'📎',act:['Drip scrape','Profile parse','Store','Dedup']},{n:'EthicaLinDrp',rm:'cron',d:'LinkedIn drip',p:'*/20 S95',sk:'#888',hc:'#666',F:0,re:'📎',act:['LinkedIn','Drip scrape','Extract','Store']},{n:'EthicaMailDrp',rm:'cron',d:'Email drip',p:'*/5 S95',sk:'#888',hc:'#666',F:0,re:'📧',act:['20 batch','Email drip','Validate','Store']},{n:'EthicaValid',rm:'cron',d:'Ethica valid',p:'*/30 S95r',sk:'#888',hc:'#666',F:0,re:'✅',act:['500 HCPs','Validate','Status','Report']},{n:'EthicaVille',rm:'cron',d:'Ville enrich',p:'6h S95',sk:'#888',hc:'#666',F:0,re:'🏘️',act:['500 HCPs','City enrich','Geocode','Update']},{n:'GHBackup',rm:'cron',d:'GitHub backup',p:'4h S95r',sk:'#888',hc:'#666',F:0,re:'📦',act:['Git push','All repos','Verify','Log']},{n:'GHPatRemind',rm:'cron',d:'PAT reminder',p:'9h S204',sk:'#888',hc:'#666',F:0,re:'⚠️',act:['Check expiry','Alert','Remind','Log']},{n:'GitBackup',rm:'cron',d:'Git backup',p:'4h S95r',sk:'#888',hc:'#666',F:0,re:'📦',act:['Git push','All repos','GitHub','Verify']},{n:'GmapMA',rm:'cron',d:'Gmap MA',p:'7h S95',sk:'#888',hc:'#666',F:0,re:'🗺️',act:['200 HCPs','Google Maps','MA','Store']},{n:'GmapScrapMA',rm:'cron',d:'GMaps MA',p:'7h S95',sk:'#888',hc:'#666',F:0,re:'🗺',act:['200 MA','Google Maps','Phone','Store']},{n:'GmapTN',rm:'cron',d:'Gmap scraper TN',p:'7h30 S95',sk:'#888',hc:'#666',F:0,re:'🗺️',act:['200 HCPs','Google Maps','TN','Store']},{n:'HealthCheck',rm:'cron',d:'Health Check',p:'daily 8h',sk:'#888',hc:'#666',F:0,re:'❤️',act:['HTTP','DNS','SSL','Ports']},{n:'InfraGuard',rm:'cron',d:'Infra guard',p:'*/5 S204',sk:'#888',hc:'#666',F:0,re:'🛡️',act:['Check 19','Docker','Ports','Alert']},{n:'KBSync',rm:'cron',d:'KB sync',p:'*/2h S95',sk:'#888',hc:'#666',F:0,re:'📚',act:['Claude','Index','Update','Verify']},{n:'KeySync',rm:'cron',d:'Key sync',p:'*/6h S204',sk:'#888',hc:'#666',F:0,re:'🔑',act:['Sync','Rotate','Update','Verify']},{n:'L99AIScan',rm:'cron',d:'L99 AI scan',p:'*/6h',sk:'#888',hc:'#666',F:0,re:'🧠',act:['AI scan','Gaps','Score','Report']},{n:'L99Alive',rm:'cron',d:'L99 alive',p:'*/10',sk:'#888',hc:'#666',F:0,re:'💚',act:['Heartbeat','Check','Alert','Log']},{n:'L99Analyze',rm:'cron',d:'Screenshot AI',p:'*/2h',sk:'#888',hc:'#666',F:0,re:'📷',act:['553 screenshots','48 videos','Score','Issue']},{n:'L99Cron',rm:'cron',d:'L99 Pipeline',p:'*/15min',sk:'#b0b0c0',hc:'#64748b',F:1,re:'🧠',act:['1495 checks','Paperclip','Auto-close','Wiki']},{n:'L99PclpWire',rm:'cron',d:'L99 Paperclip',p:'*/15',sk:'#888',hc:'#666',F:0,re:'🔗',act:['Fails','Create issue','Track','Report']},{n:'L99Pipeline',rm:'cron',d:'L99 pipeline',p:'*/15',sk:'#888',hc:'#666',F:0,re:'🔄',act:['Run tests','Score','JSON','Alert']},{n:'L99Quality',rm:'cron',d:'Quality Scan',p:'*/6h',sk:'#888',hc:'#666',F:0,re:'🏆',act:['Pages','APIs','Content','Score']},{n:'LeadEnrHrly',rm:'cron',d:'Lead enrich/h',p:'1x/h S95',sk:'#888',hc:'#666',F:0,re:'🔄',act:['20 leads','Enrich','Validate','Update']},{n:'LeadEnrich',rm:'cron',d:'Lead enrich',p:'*/3h S95',sk:'#888',hc:'#666',F:0,re:'💎',act:['50 leads','Cross-ref','Score','Update']},{n:'LIDaily',rm:'cron',d:'LinkedIn daily',p:'14h S95',sk:'#888',hc:'#666',F:0,re:'🔗',act:['Daily scrape','New profiles','Extract','Store']},{n:'LinkedInDaily',rm:'cron',d:'LinkedIn daily',p:'14h S95',sk:'#888',hc:'#666',F:0,re:'💼',act:['Daily scrape','Profiles','Emails','Store']},{n:'LIScraper',rm:'cron',d:'LinkedIn scrp',p:'*/30 S95',sk:'#888',hc:'#666',F:0,re:'🔗',act:['50 profiles','Parse','Extract','Store']},{n:'NightEncrypt',rm:'cron',d:'Nightly encrypt',p:'1h S95',sk:'#888',hc:'#666',F:0,re:'🔐',act:['Encrypt','Backup','Rotate keys','Verify']},{n:'NonRegAM',rm:'cron',d:'NonReg AM',p:'6h S204w',sk:'#888',hc:'#666',F:0,re:'🧪',act:['153 tests','Run','Report','Alert']},{n:'NonRegCron',rm:'cron',d:'6h/18h',p:''+_nrPass+'/'+_nrTotal+' tests',sk:'#d8b080',hc:'#64748b',F:0,re:'🧪',act:['153 tests','5 couches','TG alert','HTML report']},{n:'NonRegDaily',rm:'cron',d:'NonReg daily',p:'6h',sk:'#888',hc:'#666',F:0,re:'🧪',act:['Run','Compare','Report','Alert']},{n:'NonRegPM',rm:'cron',d:'NonReg PM',p:'18h S204w',sk:'#888',hc:'#666',F:0,re:'🧪',act:['153 tests','Run','Report','Alert']},{n:'NonRegPy',rm:'cron',d:'NonReg master',p:'2x/j S204w',sk:'#888',hc:'#666',F:0,re:'🧪',act:['153 tests','All pass','Report','Alert']},{n:'NucleiScan',rm:'cron',d:'Nuclei',p:'weekly',sk:'#888',hc:'#666',F:0,re:'☢️',act:['CVE scan','Templates','Report','Alert']},{n:'NucleiWeek',rm:'cron',d:'Nuclei scan',p:'weekly S204',sk:'#888',hc:'#666',F:0,re:'🛡',act:['Vuln scan','All templates','Report','Alert']},{n:'OfferRefresh',rm:'cron',d:'Offers',p:'*/3j S95',sk:'#888',hc:'#666',F:0,re:'🔃',act:['Check','Refresh','Validate','Report']},{n:'OSSDiscCron',rm:'cron',d:'OSS disco',p:'3h',sk:'#888',hc:'#666',F:0,re:'📦',act:['GitHub','Trending','Evaluate','Store']},{n:'OSSPclpChain',rm:'cron',d:'OSS-Pclp chain',p:'*/6h S204',sk:'#888',hc:'#666',F:0,re:'🔗',act:['Chain OSS','Paperclip','Sync','Deploy']},{n:'OSSTrending',rm:'cron',d:'OSS Trending',p:'daily 4h10',sk:'#888',hc:'#666',F:0,re:'📈',act:['GitHub','Stars','Forks','Alert']},{n:'OSSTrndGen',rm:'cron',d:'OSS trending',p:'4:10 S204w',sk:'#888',hc:'#666',F:0,re:'📈',act:['GitHub trends','Score','Rank','Publish']},{n:'PaperclipKA',rm:'cron',d:'Paperclip KA',p:'*/3',sk:'#888',hc:'#666',F:0,re:'📎',act:['Keepalive','Health','Restart','Log']},{n:'PclipChain',rm:'cron',d:'Paperclip chain',p:'S204 cron.d',sk:'#888',hc:'#666',F:0,re:'🔗',act:['OSS->Paperclip','Sync','Wire','Verify']},{n:'PclipSync',rm:'cron',d:'Paperclip sync',p:'S204 cron.d',sk:'#888',hc:'#666',F:0,re:'🔄',act:['Sync agents','Health','Scale','Log']},{n:'PclpSync',rm:'cron',d:'Paperclip sync',p:'*/6h S204',sk:'#888',hc:'#666',F:0,re:'📎',act:['Sync agents','Status','Update','Report']},{n:'PgWatchdog',rm:'cron',d:'PG watch',p:'*/5 S95',sk:'#888',hc:'#666',F:0,re:'🐘',act:['TCP','Restart','Log','Alert']},{n:'PhantomB',rm:'cron',d:'PhantomBuster',p:'16h S95',sk:'#888',hc:'#666',F:0,re:'👻',act:['Phantom run','Extract','Process','Store']},{n:'RegAutoRepair',rm:'cron',d:'Regress repair',p:'*/10 S95',sk:'#888',hc:'#666',F:0,re:'🔧',act:['Detect regress','Auto repair','Test','Log']},{n:'RegGuardChk',rm:'cron',d:'Regress guard',p:'6h S95',sk:'#888',hc:'#666',F:0,re:'🚨',act:['Full check','Compare','Report','Alert']},{n:'RegressDaily',rm:'cron',d:'Regress check',p:'6h S95',sk:'#888',hc:'#666',F:0,re:'📋',act:['Full check','Compare','Report','Alert']},{n:'RegressGuard',rm:'cron',d:'Regress guard',p:'*/10 S95',sk:'#888',hc:'#666',F:0,re:'🚧',act:['Auto-repair','Check config','Restore','Alert']},{n:'RichScraper',rm:'cron',d:'Rich scrape',p:'2x/j',sk:'#888',hc:'#666',F:0,re:'💎',act:['500 HCPs','Google','Phone','Store']},{n:'ROASShift',rm:'cron',d:'ROAS shift',p:'1x/h S95',sk:'#888',hc:'#666',F:0,re:'📈',act:['Check','Detect','Alert','Adjust']},{n:'S151Backup',rm:'cron',d:'S151 backup',p:'3h S204',sk:'#888',hc:'#666',F:0,re:'💾',act:['PG dump','SSH S151','Restore','Verify']},{n:'S151OllamaKA',rm:'cron',d:'Ollama alive',p:'*/5 S151',sk:'#888',hc:'#666',F:0,re:'🧠',act:['Keepalive','Ping model','Warm cache','Log']},{n:'S151OpenClaw',rm:'cron',d:'OpenClaw rst',p:'*/10 S151',sk:'#888',hc:'#666',F:0,re:'🐍',act:['Docker start','Health check','Restart','Log']},{n:'S151TrackMon',rm:'cron',d:'Track monitor',p:'*/5 S151',sk:'#888',hc:'#666',F:0,re:'📍',act:['Check tracking','Pixel status','Alert','Log']},{n:'ScraperDZ',rm:'cron',d:'Scraper DZ',p:'3x/j S95',sk:'#888',hc:'#666',F:0,re:'🏥',act:['Annuaire','Extract','Dedup','Store']},{n:'ScraperPH',rm:'cron',d:'Scraper PH',p:'3x/j S95',sk:'#888',hc:'#666',F:0,re:'💊',act:['Pharmacie','Extract','Dedup','Store']},{n:'ScraperTN',rm:'cron',d:'Scraper TN',p:'3x/j S95',sk:'#888',hc:'#666',F:0,re:'🔬',act:['Annuaire','Extract','Dedup','Store']},{n:'SecretScan',rm:'cron',d:'Secrets',p:'weekly',sk:'#888',hc:'#666',F:0,re:'🕵',act:['Scan','Find','Alert','Report']},{n:'SeedInbox',rm:'cron',d:'Seed chk',p:'*/30 S95',sk:'#888',hc:'#666',F:0,re:'📥',act:['Check','Score','ISP','Alert']},{n:'SendCron',rm:'cron',d:'Send Pipeline',p:'MANUAL',sk:'#b0b0c0',hc:'#64748b',F:0,re:'📨',act:['PMTA queue','KumoMTA','Warmup','Bounce']},{n:'SentinelAR',rm:'cron',d:'AutoRepair',p:'*/30 S95',sk:'#888',hc:'#666',F:0,re:'🔧',act:['Analyze','Detect','Repair','Log']},{n:'SEOPing',rm:'cron',d:'SEO Ping',p:'daily 6h',sk:'#888',hc:'#666',F:0,re:'🌐',act:['Sitemap','Google','Bing','IndexNow']},{n:'SEOPingCr',rm:'cron',d:'SEO ping',p:'6h S204',sk:'#888',hc:'#666',F:0,re:'📡',act:['Google ping','Bing ping','Sitemap','Done']},{n:'SkillSync',rm:'cron',d:'Skill sync',p:'*/30',sk:'#888',hc:'#666',F:0,re:'📚',act:['Sync skills','Qdrant','Index','Verify']},{n:'SSOHealth',rm:'cron',d:'PHP Auth health',p:'*/5 S204',sk:'#888',hc:'#666',F:0,re:'🔑',act:['PHP Auth','Check','Cookie','Alert']},{n:'SSONonReg',rm:'cron',d:'SSO NonReg',p:'2x/j',sk:'#888',hc:'#666',F:0,re:'🔐',act:['PHP Login','Cookie HMAC','Logout','52/52 PASS']},{n:'SyncArsenal',rm:'cron',d:'Arsenal sync',p:'*/5 S95',sk:'#888',hc:'#666',F:0,re:'🔁',act:['Sync','Copy','Validate','OK']},{n:'TabibiScrp',rm:'cron',d:'Tabibi',p:'weekly S204',sk:'#888',hc:'#666',F:0,re:'🏥',act:['Tabibi.ma','Parse','Extract','Store']},{n:'VaultGuard',rm:'cron',d:'Vault guard',p:'*/6h S95',sk:'#888',hc:'#666',F:0,re:'🔐',act:['Check','Hash','Alert','Log']},{n:'WatchdogCr',rm:'cron',d:'Watchdog',p:'*/3 S204',sk:'#888',hc:'#666',F:0,re:'🐕',act:['24 Docker','5 svc','Ports','Alert']},{n:'WatchHealth',rm:'cron',d:'Health chk',p:'8h S204w',sk:'#888',hc:'#666',F:0,re:'🏥',act:['All services','Docker','Ports','Report']},{n:'WeviaAutoLrn',rm:'cron',d:'WEVIA learn',p:'*/2h S204w',sk:'#888',hc:'#666',F:0,re:'📖',act:['Auto-learn','Train','Score','Update']},{n:'WeviaDream',rm:'cron',d:'Dream',p:'*/30 S204',sk:'#888',hc:'#666',F:0,re:'💭',act:['Dream','Generate','Store','Index']},{n:'WeviaEmbed',rm:'cron',d:'Embed Service',p:'@reboot',sk:'#888',hc:'#666',F:0,re:'🧩',act:['Ollama 11434','Vectors','Index','Serve']},{n:'WeviaLife',rm:'cron',d:'WEVIA Life',p:'7h S204w',sk:'#888',hc:'#666',F:0,re:'📧',act:['IMAP sync','Classify','Store','Report']},{n:'WEVIALifeCr',rm:'cron',d:'WEVIA Life',p:'7h S204w',sk:'#888',hc:'#666',F:0,re:'📧',act:['IMAP sync','Classify','Report','Archive']},{n:'YouTubeQ',rm:'cron',d:'Video Q',p:'*/15 S95',sk:'#888',hc:'#666',F:0,re:'📺',act:['Queue','Transcode','Upload','Pub']},{n:'Azure AD',rm:'srv',d:'Graph API',p:'6/9 actifs',sk:'#e8cca0',hc:'#f97316',F:1,re:'☁️',act:['Re-register','Refresh token','Graph query','Sync contacts']},{n:'BrowserUse',rm:'ops',d:'Web automate',p:'OSS WIRED',sk:'#d8b080',hc:'#f97316',F:0,re:'🌐',act:['Auto browse','Fill forms','Scrape JS','Screenshot']},{n:'CrowdSec',rm:'sec',d:'IDS/IPS',p:'systemd ACTIVE',sk:'#e8cca0',hc:'#f97316',F:1,re:'🏰',act:['Block brute','Parse logs','Share intel','Ban IPs']},{n:'Dify',rm:'ai',d:'LLM ops',p:'OSS WIRED',sk:'#e8cca0',hc:'#f97316',F:0,re:'🔧',act:['Flow builder','Prompt mgmt','API chain','Deploy flow']},{n:'Microsoft',rm:'srv',d:'Graph API S95',p:'6 tenants ACTIVE',sk:'#d8b080',hc:'#f97316',F:1,re:'Ⓜ️',act:['Wire Graph','O365 sync','Calendar','Contacts']},{n:'n8nConnect',rm:'ops',d:'n8n connect',p:'continu',sk:'#888',hc:'#666',F:0,re:'🔗',act:['API','Webhook','Transform','Route']},{n:'n8nOrch',rm:'ops',d:'n8n orch',p:'continu',sk:'#888',hc:'#666',F:0,re:'🎯',act:['Trigger','Workflow','Execute','Log']},{n:'n8nStats',rm:'ops',d:'n8n stats',p:'1x/h',sk:'#888',hc:'#666',F:0,re:'📊',act:['Executions','Success','Errors','Report']},{n:'OVH SMS',rm:'sal',d:'SMS gateway',p:'Creds missing',sk:'#d8b080',hc:'#f97316',F:0,re:'📲',act:['Get API key','Wire sender','Template','Campaign']},{n:'Supermemory',rm:'ai',d:'Knowledge',p:'OSS WIRED',sk:'#f0d0b0',hc:'#f97316',F:1,re:'📚',act:['Store memory','Recall context','Index docs','Search KB']},{n:'WhatsApp',rm:'sal',d:'Meta API',p:'TOKEN EXPIRED 2-avr',sk:'#f0d0b0',hc:'#f97316',F:1,re:'📱',act:['Get token','Wire API','Template msg','Send flow']},{n:'Activepieces',rm:'ops',d:'Automation',p:'OSS WIRED',sk:'#f0d0b0',hc:'#84cc16',F:1,re:'🧩',act:['Wire triggers','Flow build','Connect APIs','Schedule']},{n:'AEGIS',rm:'sec',d:'Security AI',p:'OSS WIRED',sk:'#d8b080',hc:'#84cc16',F:1,re:'🏛️',act:['Wire scanner','Auto audit','Report CVE','Patch suggest']},{n:'Claude-Mem',rm:'ai',d:'Memory ext',p:'OSS WIRED',sk:'#d8d8d8',hc:'#a1a1aa',F:1,re:'🧠',act:['Évaluer','Wire memory','Test persist','Decide']},{n:'EvoMaster',rm:'qa',d:'API fuzzing',p:'OSS WIRED',sk:'#d8b080',hc:'#84cc16',F:0,re:'🧬',act:['Fuzz 214 APIs','Find bugs','Report','Auto-fix']},{n:'Goose',rm:'dev',d:'Dev agent',p:'OSS WIRED',sk:'#e8cca0',hc:'#84cc16',F:0,re:'🪿',act:['Install CLI','Wire repos','Auto-code','Review']},{n:'HF TRL',rm:'ai',d:'Fine-tune',p:'TRL WIRED',sk:'#f0d0b0',hc:'#84cc16',F:0,re:'🎓',act:['Upload Colab','Train LoRA','Eval model','Deploy GGUF']},{n:'LlamaIndex',rm:'ai',d:'RAG framework',p:'Qdrant WIRED',sk:'#f0d0b0',hc:'#f97316',F:0,re:'🦙',act:['Connect Qdrant','Index 4414 pts','Query pipeline','RAG search']},{n:'Mastra',rm:'dev',d:'Agent SDK',p:'OSS WIRED',sk:'#e8cca0',hc:'#84cc16',F:1,re:'🔮',act:['npm install','Wire tools','Agent def','Deploy']},{n:'OhMyCC',rm:'dev',d:'19 agents',p:'WIRED',sk:'#f0d0b0',hc:'#84cc16',F:0,re:'🎭',act:['19 agent defs','Dispatch skill','Route mode','Catalog']},{n:'Paperclip',rm:'ceo',d:'Agent fleet',p:'DOWN (Docker)',sk:'#e8cca0',hc:'#84cc16',F:0,re:'📎',act:['CEO agent run','CTO delegate','Hire agent','Fleet manage']},{n:'SkillSmith',rm:'ai',d:'Skill gen',p:'OSS WIRED',sk:'#f0d0b0',hc:'#84cc16',F:0,re:'⚒️',act:['Gen skills','Test','Deploy','Catalog']},{n:'SuperClaude',rm:'ai',d:'7 modes',p:'WIRED',sk:'#e8cca0',hc:'#84cc16',F:1,re:'🦸',act:['Fast mode','Deep mode','Code mode','Math mode']},{n:'vLLM',rm:'ai',d:'Fast inference',p:'Colab GPU',sk:'#f0d0b0',hc:'#f97316',F:0,re:'🏎️',act:['Serve model','Batch infer','PagedAttn','Throughput']},{n:'WevalRadar',rm:'ops',d:'Monitoring',p:'OSS WIRED',sk:'#d8b080',hc:'#84cc16',F:1,re:'📡',act:['Scan ports','Check DNS','Monitor SSL','Alert change']},{n:'WevBrain',rm:'ai',d:'AI brain',p:'Ollama UP',sk:'#e8cca0',hc:'#84cc16',F:1,re:'🧠',act:['Train brain','Fine-tune','Ollama serve','Inference']},{n:'ACT CoreDev',rm:'dead',d:'engineer',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'⚡',act:['Sync','Execute','Report','Monitor'],si:'sit'},{n:'ACT DataAI',rm:'dead',d:'researcher',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🧬',act:['Sync','Execute','Report','Monitor'],si:'sit'},{n:'AIOS',rm:'ai',d:'OS for AI',p:'OSS WIRED',sk:'#e8cca0',hc:'#84cc16',F:1,re:'🖥️',act:['Install','Wire agents','Schedule','Monitor']},{n:'AntiGravity',rm:'ai',d:'Agent Skills',p:'dormant',sk:'#888',hc:'#666',F:0,re:'🚀',act:['520 skills','685 OSS','Index','Wire']},{n:'AnythingLLM',rm:'ai',d:'Chat+RAG',p:'OSS WIRED',sk:'#d8b080',hc:'#f97316',F:1,re:'💬',act:['Wire docs','Embed corpus','Chat RAG','Knowledge']},{n:'Architect 2',rm:'dead',d:'engineer',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🏗️',act:['Sync','Execute','Report','Monitor'],si:'sit'},{n:'AutoGen',rm:'ai',d:'MS agents',p:'pip WIRED',sk:'#f0d0b0',hc:'#f97316',F:0,re:'🤝',act:['Agent conv','Multi-turn','Code exec','Review chain']},{n:'CrewAI',rm:'ai',d:'Multi-agent',p:'OSS WIRED',sk:'#e8cca0',hc:'#f97316',F:1,re:'👥',act:['Wire agents','Team config','Task flow','Orchestrate']},{n:'DeerFlow-Agent',rm:'dead',d:'ai',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🦌',act:['Sync','Execute','Report','Monitor'],si:'sit'},{n:'ECC build error reso',rm:'dead',d:'engineer',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🔨',act:['Sync','Execute','Report','Monitor'],si:'sit'},{n:'ECC chief of staff',rm:'dead',d:'engineer',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'👔',act:['Sync','Execute','Report','Monitor'],si:'sit'},{n:'ECC code reviewer',rm:'dead',d:'engineer',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'👁️',act:['Sync','Execute','Report','Monitor'],si:'sit'},{n:'ECC cpp build resolv',rm:'dead',d:'engineer',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'⚙️',act:['Sync','Execute','Report','Monitor'],si:'sit'},{n:'ECC cpp reviewer',rm:'dead',d:'engineer',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'⚙️',act:['Sync','Execute','Report','Monitor'],si:'sit'},{n:'ECC database reviewe',rm:'dead',d:'engineer',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🗄️',act:['Sync','Execute','Report','Monitor'],si:'sit'},{n:'ECC doc updater',rm:'dead',d:'engineer',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'📝',act:['Sync','Execute','Report','Monitor'],si:'sit'},{n:'ECC docs lookup',rm:'dead',d:'engineer',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🔍',act:['Sync','Execute','Report','Monitor'],si:'sit'},{n:'ECC e2e runner',rm:'dead',d:'engineer',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🏃',act:['Sync','Execute','Report','Monitor'],si:'sit'},{n:'ECC flutter reviewer',rm:'dead',d:'engineer',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'📱',act:['Sync','Execute','Report','Monitor'],si:'sit'},{n:'ECC gan evaluator',rm:'dead',d:'engineer',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🎨',act:['Sync','Execute','Report','Monitor'],si:'sit'},{n:'ECC gan generator',rm:'dead',d:'engineer',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🖼️',act:['Sync','Execute','Report','Monitor'],si:'sit'},{n:'ECC gan planner',rm:'dead',d:'engineer',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'📐',act:['Sync','Execute','Report','Monitor'],si:'sit'},{n:'ECC go build resolve',rm:'dead',d:'engineer',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🐹',act:['Sync','Execute','Report','Monitor'],si:'sit'},{n:'ECC go reviewer',rm:'dead',d:'engineer',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🐹',act:['Sync','Execute','Report','Monitor'],si:'sit'},{n:'ECC harness optimize',rm:'dead',d:'engineer',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'⚡',act:['Sync','Execute','Report','Monitor'],si:'sit'},{n:'ECC healthcare revie',rm:'dead',d:'engineer',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🏥',act:['Sync','Execute','Report','Monitor'],si:'sit'},{n:'ECC java build resol',rm:'dead',d:'engineer',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'☕',act:['Sync','Execute','Report','Monitor'],si:'sit'},{n:'ECC java reviewer',rm:'dead',d:'engineer',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'☕',act:['Sync','Execute','Report','Monitor'],si:'sit'},{n:'ECC kotlin build res',rm:'dead',d:'engineer',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🟣',act:['Sync','Execute','Report','Monitor'],si:'sit'},{n:'ECC kotlin reviewer',rm:'dead',d:'engineer',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🟣',act:['Sync','Execute','Report','Monitor'],si:'sit'},{n:'ECC loop operator',rm:'dead',d:'engineer',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🔄',act:['Sync','Execute','Report','Monitor'],si:'sit'},{n:'ECC opensource forke',rm:'dead',d:'engineer',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🍴',act:['Sync','Execute','Report','Monitor'],si:'sit'},{n:'ECC opensource packa',rm:'dead',d:'engineer',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'📦',act:['Sync','Execute','Report','Monitor'],si:'sit'},{n:'ECC opensource sanit',rm:'dead',d:'engineer',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🧹',act:['Sync','Execute','Report','Monitor'],si:'sit'},{n:'ECC performance opti',rm:'dead',d:'engineer',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'⚡',act:['Sync','Execute','Report','Monitor'],si:'sit'},{n:'ECC planner',rm:'dead',d:'engineer',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'📋',act:['Sync','Execute','Report','Monitor'],si:'sit'},{n:'ECC python reviewer',rm:'dead',d:'engineer',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🐍',act:['Sync','Execute','Report','Monitor'],si:'sit'},{n:'ECC pytorch build re',rm:'dead',d:'engineer',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🔥',act:['Sync','Execute','Report','Monitor'],si:'sit'},{n:'ECC refactor cleaner',rm:'dead',d:'engineer',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🧹',act:['Sync','Execute','Report','Monitor'],si:'sit'},{n:'ECC rust build resol',rm:'dead',d:'engineer',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🦀',act:['Sync','Execute','Report','Monitor'],si:'sit'},{n:'ECC rust reviewer',rm:'dead',d:'engineer',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🦀',act:['Sync','Execute','Report','Monitor'],si:'sit'},{n:'ECC security reviewe',rm:'dead',d:'engineer',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🔐',act:['Sync','Execute','Report','Monitor'],si:'sit'},{n:'ECC tdd guide',rm:'dead',d:'engineer',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'✅',act:['Sync','Execute','Report','Monitor'],si:'sit'},{n:'ECC typescript revie',rm:'dead',d:'engineer',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'📘',act:['Sync','Execute','Report','Monitor'],si:'sit'},{n:'HolyClaude',rm:'ai',d:'Cloned /opt/',p:'Not wired',sk:'#d8d8d8',hc:'#a1a1aa',F:0,re:'⛪',act:['Évaluer usage','Wire if useful','Test prompts','Décider sort']},{n:'Langfuse',rm:'dead',d:'mon',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'📊',act:['Sync','Execute','Report','Monitor'],si:'sit'},{n:'ListMonk',rm:'sal',d:'Newsletter S95',p:'TODO Docker',sk:'#e8cca0',hc:'#f97316',F:1,re:'📰',act:['Wire SMTP','Import list','Template','Campaign']},{n:'LocalAI',rm:'ai',d:'Local models',p:'HF Spaces',sk:'#d8b080',hc:'#f97316',F:1,re:'🏡',act:['Local serve','GGUF load','API compat','CPU optim']},{n:'LTX-Studio',rm:'ai',d:'Dormant Video',p:'Pending',sk:'#d0d0d0',hc:'#a1a1aa',F:0,re:'🎬',act:['Video gen','Render','Edit','Export']},{n:'LTX-Video',rm:'ai',d:'Video gen',p:'Needs GPU',sk:'#d8d8d8',hc:'#a1a1aa',F:1,re:'🎬',act:['Évaluer','Need GPU free','API ltx-video','Test gen']},{n:'MegaCmd',rm:'ops',d:'Mega center',p:'S204 HTML',sk:'#888',hc:'#666',F:0,re:'🏢',act:['Unified cmd','All servers','All services','Dashboard']},{n:'ModelScope',rm:'ai',d:'4 models',p:'Hub routed',sk:'#e8cca0',hc:'#0d9488',F:0,re:'🔬',act:['Route model','Test infer','Compare','Select best']},{n:'NoVNC',rm:'ops',d:'Remote S95',p:'pip 1.0 OK',sk:'#d8b080',hc:'#f97316',F:0,re:'🖥️',act:['Wire VNC','Remote access','Browser desktop','Config']},{n:'O365Commander',rm:'dead',d:'office',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'📧',act:['Sync','Execute','Report','Monitor'],si:'sit'},{n:'OllamaS151',rm:'dead',d:'s151',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🧠',act:['Sync','Execute','Report','Monitor'],si:'sit'},{n:'PaperclipAI',rm:'dead',d:'ops',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'📎',act:['Sync','Execute','Report','Monitor'],si:'sit'},{n:'Persona CloudArchite',rm:'dead',d:'engineer',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'☁️',act:['Sync','Execute','Report','Monitor'],si:'sit'},{n:'Persona DataScientis',rm:'dead',d:'researcher',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'📈',act:['Sync','Execute','Report','Monitor'],si:'sit'},{n:'Persona EmailExpert',rm:'dead',d:'engineer',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'📧',act:['Sync','Execute','Report','Monitor'],si:'sit'},{n:'Persona FullStackDev',rm:'dead',d:'engineer',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'💻',act:['Sync','Execute','Report','Monitor'],si:'sit'},{n:'Research DeerFlow',rm:'dead',d:'researcher',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🦌',act:['Sync','Execute','Report','Monitor'],si:'sit'},{n:'SC DeepResearch',rm:'dead',d:'researcher',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🔬',act:['Sync','Execute','Report','Monitor'],si:'sit'},{n:'SC Orchestration',rm:'dead',d:'pm',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🎼',act:['Sync','Execute','Report','Monitor'],si:'sit'},{n:'SC TaskManager',rm:'dead',d:'pm',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'📋',act:['Sync','Execute','Report','Monitor'],si:'sit'},{n:'SC TokenEfficiency',rm:'dead',d:'engineer',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'💰',act:['Sync','Execute','Report','Monitor'],si:'sit'},{n:'SecDash',rm:'sec',d:'Security dash',p:'S204 HTML',sk:'#888',hc:'#666',F:0,re:'🛡️',act:['Vulns','Scans','Patches','Report']},{n:'SentinelBrain',rm:'dead',d:'sentinel',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🛡️',act:['Sync','Execute','Report','Monitor'],si:'sit'},{n:'TrackingPixel',rm:'dead',d:'s151',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'📍',act:['Sync','Execute','Report','Monitor'],si:'sit'},{n:'TrustCtr',rm:'sec',d:'Trust center',p:'S204 HTML',sk:'#888',hc:'#666',F:0,re:'🏛️',act:['RGPD','ISO','Certifs','Audit']},{n:'VSMPipe',rm:'ops',d:'VSM pipeline',p:'S204 HTML',sk:'#888',hc:'#666',F:0,re:'🔄',act:['Map','Measure','Improve','Control']},{n:'Wazuh',rm:'sec',d:'SIEM security',p:'/opt WIRED',sk:'#f0d0b0',hc:'#f97316',F:0,re:'🔒',act:['Deploy SIEM','Wire alerts','Log collect','Threat detect']},{n:'WevalScrapy',rm:'cron',d:'Scraping fw',p:'OSS WIRED',sk:'#f0d0b0',hc:'#84cc16',F:0,re:'🕷️',act:['Crawl sites','Extract data','Pipeline','Export JSON']},{n:'WorldMap',rm:'ops',d:'World map',p:'S204 HTML',sk:'#888',hc:'#666',F:0,re:'🗺️',act:['Geo tracking','Live events','Heat map','Report']},{n:'ECS PMTA',rm:'dead',d:'SER 6-9',p:'Unknown',sk:'#94a3b8',hc:'#64748b',F:0,re:'❓',act:['Cluster','root/Yacine','À vérifier','Status ?']},{n:'S88 GPU',rm:'dead',d:'DEAD GPU',p:'-45€/mois',sk:'#94a3b8',hc:'#64748b',F:0,re:'💀',act:['GPU mort','À annuler','9.9GB archivé','wevia_db OK']},{n:'S89',rm:'dead',d:'Old Ethica',p:'DOWN',sk:'#94a3b8',hc:'#64748b',F:1,re:'⚰️',act:['Port DOWN','adx 6.6GB','clients 2.8GB','Archivé']},{n:'WEVIA Master',rm:'dir',d:'Head AI',p:'59 secrets',sk:'#a0d0a0',hc:'#6b21a8',F:1,gl:1,re:'👩🏽💼',act:['Route','Fallback','8 T1','6 T2']},{n:'Director',rm:'dir',d:'Autonomous',p:'*/15min',sk:'#a0d0a0',hc:'#059669',F:1,gl:1,re:'🎬',act:['Observe','Plan','Act','Verify']},{n:'Fiability',rm:'dir',d:'URL Health',p:'100%',sk:'#a0d0a0',hc:'#059669',F:1,re:'🔍',act:['24 URLs','10 subs','Score','Report']},{n:'AutoFix',rm:'dir',d:'Docker Fix',p:'Auto',sk:'#a0d0a0',hc:'#059669',F:1,re:'🔧',act:['Detect','Restart','Verify','Log']},{n:'ArchScan',rm:'dir',d:'52 nodes',p:'*/30min',sk:'#a0d0a0',hc:'#059669',F:1,re:'🏗',act:['Scan','Topo','BPMN','SOA']},{n:'Sentinel',rm:'dir',d:'S95 brain',p:'Port 5890',sk:'#a0d0a0',hc:'#1a2a3a',F:1,re:'🛰',act:['Relay','Monitor','Exec','Report']},{n:'Registry',rm:'dir',d:'626 pages',p:'13 domains',sk:'#a0d0a0',hc:'#059669',F:1,re:'📋',act:['Track','Check','Alert','Report']},
|
||
{n:'Daily Standup Agent',rm:'meet',d:'Meeting',p:'Standup',sk:'#14b8a6',hc:'#0f766e',F:1,wv:1,re:'📅',pp:'PP_MEET01',act:['Sync','Status','Block','Action']},
|
||
{n:'Weekly Review Agent',rm:'meet',d:'Meeting',p:'Review',sk:'#14b8a6',hc:'#0f766e',F:1,wv:1,re:'📊',pp:'PP_MEET02',act:['Aggregate','Review','Score','Report']},
|
||
{n:'Strategy Sync Agent',rm:'meet',d:'Meeting',p:'Strategy',sk:'#14b8a6',hc:'#0f766e',F:1,wv:1,re:'🎯',pp:'PP_MEET03',act:['Align','Decide','Roadmap','Track']},
|
||
{n:'Meeting Archivist',rm:'meet',d:'Meeting',p:'Archive',sk:'#14b8a6',hc:'#0f766e',F:1,wv:1,re:'📚',pp:'PP_MEET04',act:['Record','Index','Search','Export']},
|
||
{n:'DMAIC Auditor',rm:'lean',d:'Lean6Sigma',p:'DMAIC',sk:'#0d9488',hc:'#115e59',F:1,wv:1,re:'🔬',pp:'PP_LEAN01',act:['Define','Measure','Analyze','Improve']},
|
||
{n:'VSM Mapper',rm:'lean',d:'Lean6Sigma',p:'VSM',sk:'#0d9488',hc:'#115e59',F:1,wv:1,re:'🗺️',pp:'PP_LEAN02',act:['Map','Waste','Flow','Optimize']},
|
||
{n:'BPMN Modeler',rm:'lean',d:'Lean6Sigma',p:'BPMN',sk:'#0d9488',hc:'#115e59',F:1,wv:1,re:'📐',pp:'PP_LEAN03',act:['Model','Validate','Simulate','Deploy']},
|
||
{n:'Kaizen Coach',rm:'lean',d:'Lean6Sigma',p:'Kaizen',sk:'#0d9488',hc:'#115e59',F:1,wv:1,re:'🌱',pp:'PP_LEAN04',act:['Identify','Suggest','Implement','Measure']},
|
||
{n:'OSS Flowise',rm:'dead',d:'engineer',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'OSS AIOS',rm:'dead',d:'devops',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'OSS BrowserUse',rm:'dead',d:'devops',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'LeadEnricher',rm:'dead',d:'cron',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'LinkedInScrp',rm:'dead',d:'cron',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'ECC refact',rm:'dead',d:'dev',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'ECC rust',rm:'dead',d:'dev',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'ECC sec rev',rm:'dead',d:'dev',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'OSS CrewAI',rm:'dead',d:'pm',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'OSS AEGIS',rm:'dead',d:'qa',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'OSS Activepieces',rm:'dead',d:'devops',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'EthicaCron',rm:'dead',d:'devops',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'OSS OpenClaw',rm:'dead',d:'engineer',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'OSS LangChain',rm:'dead',d:'engineer',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'OSS Dify',rm:'dead',d:'engineer',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'OSS OpenWebUI',rm:'dead',d:'general',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'OSS Mastra',rm:'dead',d:'engineer',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'OSS Scrapy',rm:'dead',d:'engineer',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'OSS Supermemory',rm:'dead',d:'researcher',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'OSS EvoMaster',rm:'dead',d:'qa',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'OSS Prometheus',rm:'dead',d:'devops',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'OSS Goose',rm:'dead',d:'engineer',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'DailyBackupR',rm:'dead',d:'cron',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'EthicaMaster',rm:'dead',d:'cron',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'GmapScrapTN',rm:'dead',d:'cron',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'EmEnrichTN',rm:'dead',d:'cron',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'AIBenchDay',rm:'dead',d:'cron',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'PaperclipSov',rm:'dead',d:'cron',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'ECC build err',rm:'dead',d:'dev',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'ECC chief',rm:'dead',d:'dev',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'ECC code rev',rm:'dead',d:'dev',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'ECC cpp',rm:'dead',d:'dev',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'ECC db rev',rm:'dead',d:'dev',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'ECC docs lkp',rm:'dead',d:'dev',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'ECC e2e run',rm:'dead',d:'dev',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'ECC flutter',rm:'dead',d:'dev',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'ECC gan eval',rm:'dead',d:'dev',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'ECC gan gen',rm:'dead',d:'dev',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'ECC gan plan',rm:'dead',d:'dev',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'ECC go',rm:'dead',d:'dev',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'ECC harness',rm:'dead',d:'dev',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'ECC health',rm:'dead',d:'dev',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'ECC java',rm:'dead',d:'dev',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'ECC kotlin',rm:'dead',d:'dev',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'ECC loop op',rm:'dead',d:'dev',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'ECC oss fork',rm:'dead',d:'dev',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'ECC oss pkg',rm:'dead',d:'dev',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'ECC oss san',rm:'dead',d:'dev',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'ECC perf opt',rm:'dead',d:'dev',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'ECC python',rm:'dead',d:'dev',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'ECC pytorch',rm:'dead',d:'dev',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'Ethica1sante',rm:'dead',d:'cron',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'EmailEnrTN',rm:'dead',d:'cron',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'WEDROID 2',rm:'dead',d:'engineer',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'ECC architect',rm:'dead',d:'engineer',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'PhantomBustr',rm:'dead',d:'cron',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'AutoDelistCr',rm:'dead',d:'cron',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'BaselinesWk',rm:'dead',d:'cron',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'EthicaAuton',rm:'dead',d:'cron',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'DailyBriefCr',rm:'dead',d:'cron',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'SSONonRegCr',rm:'dead',d:'cron',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'HealthChkCr',rm:'dead',d:'cron',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'AIImproveCr',rm:'dead',d:'cron',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'ECC tdd',rm:'dead',d:'dev',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'ECC typescript',rm:'dead',d:'dev',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'P-CloudArch',rm:'dead',d:'con',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'P-CyberAudit',rm:'dead',d:'sec',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'P-DataSci',rm:'dead',d:'ai',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'P-EmailExp',rm:'dead',d:'ops',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'P-FullStack',rm:'dead',d:'dev',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'P-SAPConsult',rm:'dead',d:'con',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'RabbitNuclei',rm:'dead',d:'sec',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'ResearchDF',rm:'dead',d:'ai',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'SC Brainstorm',rm:'dead',d:'ceo',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'SC BusinessP',rm:'dead',d:'ceo',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'SC DeepRes',rm:'dead',d:'ceo',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'SC Introsp',rm:'dead',d:'ceo',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'SC Orch',rm:'dead',d:'ceo',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'SC TaskMgr',rm:'dead',d:'ceo',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'SC TokenEff',rm:'dead',d:'ceo',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'SentinelBrn2',rm:'dead',d:'srv',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'Ohmyclaudecode',rm:'dead',d:'dev',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'Paperclipweval',rm:'dead',d:'orchestrator',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'}
|
||
,
|
||
{n:'Antigravity',rm:'dead',d:'intg',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'ACT-DataAI',rm:'dead',d:'ai',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'BrainTrainer',rm:'dead',d:'ai',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'DeepAgentRes',rm:'dead',d:'dorm',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'}
|
||
,
|
||
{n:'SkillCreator',rm:'ops',d:'dorm',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'WritingStyle',rm:'ops',d:'dorm',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'DarkScout',rm:'ops',d:'pha',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'GAN-Adv',rm:'ops',d:'dorm',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'SMTPSmuggl',rm:'ops',d:'dorm',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'GhostNet',rm:'ops',d:'dorm',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'DarkScout',rm:'ops',d:'dorm',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'ArbitrageBot',rm:'ops',d:'dorm',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'LookalikeEng',rm:'ops',d:'dorm',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'ScaleBridge',rm:'ops',d:'dorm',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'AquaLink',rm:'ops',d:'dorm',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'ProfitOrch',rm:'ops',d:'dorm',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'},
|
||
{n:'NeuralDOM',rm:'ops',d:'dorm',p:'Paperclip',sk:'#b0b0b0',hc:'#666',F:0,re:'🤖',act:['Sync','Execute','Report','Monitor'],si:'sit'}
|
||
,
|
||
{n:'Fraud Detection ML',rm:'sec',d:'Security',p:'Fraude ML',sk:'#ef4444',hc:'#b91c1c',F:1,wv:1,re:'🤖',savings:'1.40M/an',pp:'PP030',act:['WEVAL','Agent','Autonome','Savings']},
|
||
{n:'GDPR Auditor AI',rm:'sec',d:'Security',p:'GDPR',sk:'#ef4444',hc:'#b91c1c',F:1,wv:1,re:'🤖',savings:'560k/an',pp:'PP029',act:['WEVAL','Agent','Autonome','Savings']},
|
||
{n:'SoD Continuous Agent',rm:'sec',d:'Security',p:'SoD',sk:'#ef4444',hc:'#b91c1c',F:1,wv:1,re:'🤖',savings:'220k/an',pp:'PP028',act:['WEVAL','Agent','Autonome','Savings']},
|
||
{n:'Predictive Maintenance AI',rm:'mfg',d:'Manufacturing',p:'Predictive',sk:'#eab308',hc:'#ca8a04',F:1,wv:1,re:'👨🔧',savings:'1.20M/an',pp:'PP013',act:['WEVAL','Agent','Autonome','Savings']},
|
||
{n:'OEE Live Agent',rm:'mfg',d:'Manufacturing',p:'OEE',sk:'#eab308',hc:'#ca8a04',F:1,wv:1,re:'👨🏽💼',savings:'940k/an',pp:'PP012',act:['WEVAL','Agent','Autonome','Savings']},
|
||
{n:'Quality SPC AI Real-time',rm:'mfg',d:'Manufacturing',p:'SPC',sk:'#eab308',hc:'#ca8a04',F:1,wv:1,re:'👩🔬',savings:'780k/an',pp:'PP014',act:['WEVAL','Agent','Autonome','Savings']},
|
||
{n:'TOC Bottleneck Optimizer',rm:'mfg',d:'Manufacturing',p:'TOC',sk:'#eab308',hc:'#ca8a04',F:1,wv:1,re:'👨🏿💼',savings:'650k/an',pp:'PP015',act:['WEVAL','Agent','Autonome','Savings']},
|
||
{n:'21CFR Audit Trail Agent',rm:'mfg',d:'Manufacturing',p:'21CFR',sk:'#eab308',hc:'#ca8a04',F:1,wv:1,re:'👮♀️',savings:'280k/an',pp:'PP051',act:['WEVAL','Agent','Autonome','Savings']},
|
||
{n:'ABL Migration Agent',rm:'mfg',d:'Manufacturing',p:'ABL',sk:'#eab308',hc:'#ca8a04',F:1,wv:1,re:'🔄',savings:'450k/an',pp:'PP056',act:['WEVAL','Agent','Autonome','Savings']},
|
||
{n:'EDI Onboarding Agent',rm:'mfg',d:'Manufacturing',p:'EDI',sk:'#eab308',hc:'#ca8a04',F:1,wv:1,re:'🤝',savings:'210k/an',pp:'PP059',act:['WEVAL','Agent','Autonome','Savings']},
|
||
{n:'UX Wrapper Agent',rm:'mfg',d:'Manufacturing',p:'UX',sk:'#eab308',hc:'#ca8a04',F:1,wv:1,re:'🎨',savings:'110k/an',pp:'PP045',act:['WEVAL','Agent','Autonome','Savings']},
|
||
{n:'QAD Extension Governance',rm:'mfg',d:'Manufacturing',p:'QAD',sk:'#eab308',hc:'#ca8a04',F:1,wv:1,re:'🏛️',savings:'95k/an',pp:'PP057',act:['WEVAL','Agent','Autonome','Savings']},
|
||
{n:'Stockout Predictor ML',rm:'sup',d:'Supply',p:'Stockout',sk:'#a855f7',hc:'#7e22ce',F:1,wv:1,re:'👨🏽💼',savings:'850k/an',pp:'PP007',act:['WEVAL','Agent','Autonome','Savings']},
|
||
{n:'Inventory Optimizer AI',rm:'sup',d:'Supply',p:'Inventory',sk:'#a855f7',hc:'#7e22ce',F:1,wv:1,re:'👩🏿💼',savings:'620k/an',pp:'PP008',act:['WEVAL','Agent','Autonome','Savings']},
|
||
{n:'Vendor Fraud Detective',rm:'sup',d:'Supply',p:'Vendor',sk:'#a855f7',hc:'#7e22ce',F:1,wv:1,re:'🕵️',savings:'560k/an',pp:'PP010',act:['WEVAL','Agent','Autonome','Savings']},
|
||
{n:'Tail Spend Analyzer',rm:'sup',d:'Supply',p:'TailSpend',sk:'#a855f7',hc:'#7e22ce',F:1,wv:1,re:'👨🏼💼',savings:'420k/an',pp:'PP011',act:['WEVAL','Agent','Autonome','Savings']},
|
||
{n:'Supplier Risk Monitor',rm:'sup',d:'Supply',p:'Supplier',sk:'#a855f7',hc:'#7e22ce',F:1,wv:1,re:'👮♀️',savings:'380k/an',pp:'PP009',act:['WEVAL','Agent','Autonome','Savings']},
|
||
{n:'IC Elimination Agent',rm:'sup',d:'Supply',p:'IC',sk:'#a855f7',hc:'#7e22ce',F:1,wv:1,re:'🔄',savings:'165k/an',pp:'PP039',act:['WEVAL','Agent','Autonome','Savings']},
|
||
{n:'Odoo Upgrade Shield',rm:'sup',d:'Supply',p:'Odoo',sk:'#a855f7',hc:'#7e22ce',F:1,wv:1,re:'🛡️',savings:'75k/an',pp:'PP058',act:['WEVAL','Agent','Autonome','Savings']},
|
||
{n:'Acumatica Live BI Agent',rm:'sup',d:'Supply',p:'BI',sk:'#a855f7',hc:'#7e22ce',F:1,wv:1,re:'📡',savings:'70k/an',pp:'PP044',act:['WEVAL','Agent','Autonome','Savings']},
|
||
{n:'Churn Prediction Agent',rm:'sal',d:'Sales',p:'Churn',sk:'#f43f5e',hc:'#be123c',F:1,wv:1,re:'🤖',savings:'890k/an',pp:'PP018',act:['WEVAL','Agent','Autonome','Savings']},
|
||
{n:'Next Best Action Agent',rm:'sal',d:'Sales',p:'NBA',sk:'#f43f5e',hc:'#be123c',F:1,wv:1,re:'🤖',savings:'680k/an',pp:'PP020',act:['WEVAL','Agent','Autonome','Savings']},
|
||
{n:'Veeva NBA Accelerator',rm:'sal',d:'Sales',p:'Veeva',sk:'#f43f5e',hc:'#be123c',F:1,wv:1,re:'🤖',savings:'380k/an',pp:'PP049',act:['WEVAL','Agent','Autonome','Savings']},
|
||
{n:'MQL Scoring AI',rm:'sal',d:'Sales',p:'MQL',sk:'#f43f5e',hc:'#be123c',F:1,wv:1,re:'🤖',savings:'520k/an',pp:'PP017',act:['WEVAL','Agent','Autonome','Savings']},
|
||
{n:'Pipeline Reality Agent',rm:'sal',d:'Sales',p:'Pipeline',sk:'#f43f5e',hc:'#be123c',F:1,wv:1,re:'🤖',savings:'450k/an',pp:'PP016',act:['WEVAL','Agent','Autonome','Savings']},
|
||
{n:'Quote AI Generator',rm:'sal',d:'Sales',p:'Quote',sk:'#f43f5e',hc:'#be123c',F:1,wv:1,re:'🤖',savings:'340k/an',pp:'PP019',act:['WEVAL','Agent','Autonome','Savings']},
|
||
{n:'AL Extension Regression Agent',rm:'sal',d:'Sales',p:'AL',sk:'#f43f5e',hc:'#be123c',F:1,wv:1,re:'🤖',savings:'120k/an',pp:'PP042',act:['WEVAL','Agent','Autonome','Savings']},
|
||
{n:'Utilization Optimizer',rm:'hr',d:'HR',p:'Utilization',sk:'#14b8a6',hc:'#0f766e',F:1,wv:1,re:'👨🏼💼',savings:'740k/an',pp:'PP023',act:['WEVAL','Agent','Autonome','Savings']},
|
||
{n:'Attrition Predictor',rm:'hr',d:'HR',p:'Attrition',sk:'#14b8a6',hc:'#0f766e',F:1,wv:1,re:'👩🏿💼',savings:'480k/an',pp:'PP021',act:['WEVAL','Agent','Autonome','Savings']},
|
||
{n:'CV Matcher Pro',rm:'hr',d:'HR',p:'CV',sk:'#14b8a6',hc:'#0f766e',F:1,wv:1,re:'👩🏻💼',savings:'320k/an',pp:'PP022',act:['WEVAL','Agent','Autonome','Savings']},
|
||
{n:'Payroll Verifier AI',rm:'hr',d:'HR',p:'Payroll',sk:'#14b8a6',hc:'#0f766e',F:1,wv:1,re:'👨🏿💼',savings:'180k/an',pp:'PP024',act:['WEVAL','Agent','Autonome','Savings']},
|
||
{n:'Catalog Builder Agent',rm:'hr',d:'HR',p:'Catalog',sk:'#14b8a6',hc:'#0f766e',F:1,wv:1,re:'📚',savings:'130k/an',pp:'PP048',act:['WEVAL','Agent','Autonome','Savings']},
|
||
{n:'Multi-Touch Attribution',rm:'mkt',d:'Marketing',p:'Attribution',sk:'#ec4899',hc:'#be185d',F:1,wv:1,re:'👨🏻💼',savings:'380k/an',pp:'PP025',act:['WEVAL','Agent','Autonome','Savings']},
|
||
{n:'Content AI Personalized',rm:'mkt',d:'Marketing',p:'Content',sk:'#ec4899',hc:'#be185d',F:1,wv:1,re:'👩🏽🎨',savings:'240k/an',pp:'PP026',act:['WEVAL','Agent','Autonome','Savings']},
|
||
{n:'Deliverability WEVADS',rm:'mkt',d:'Marketing',p:'Email',sk:'#ec4899',hc:'#be185d',F:1,wv:1,re:'👨🏿💼',savings:'290k/an',pp:'PP027',act:['WEVAL','Agent','Autonome','Savings']},
|
||
{n:'Incident AI Responder',rm:'ops',d:'IT Ops',p:'MTTR',sk:'#3b82f6',hc:'#1d4ed8',F:1,wv:1,re:'🤖',savings:'620k/an',pp:'PP031',act:['WEVAL','Agent','Autonome','Savings']},
|
||
{n:'Integration Health Agent',rm:'ops',d:'IT Ops',p:'Integration',sk:'#3b82f6',hc:'#1d4ed8',F:1,wv:1,re:'🤖',savings:'280k/an',pp:'PP032',act:['WEVAL','Agent','Autonome','Savings']},
|
||
{n:'AML Smart Filter',rm:'dir',d:'Direction',p:'AML',sk:'#fbbf24',hc:'#d97706',F:1,wv:1,re:'🕵️',savings:'900k/an',pp:'PP053',act:['WEVAL','Agent','Autonome','Savings']},
|
||
{n:'Vault Quality AI',rm:'dir',d:'Direction',p:'Quality',sk:'#fbbf24',hc:'#d97706',F:1,wv:1,re:'👨💼',savings:'520k/an',pp:'PP050',act:['WEVAL','Agent','Autonome','Savings']},
|
||
{n:'MDM Continuous Quality',rm:'dir',d:'Direction',p:'MDM',sk:'#fbbf24',hc:'#d97706',F:1,wv:1,re:'👨🏼💼',savings:'480k/an',pp:'PP060',act:['WEVAL','Agent','Autonome','Savings']},
|
||
{n:'DD M&A Analyst',rm:'dir',d:'Direction',p:'DD',sk:'#fbbf24',hc:'#d97706',F:1,wv:1,re:'👔',savings:'450k/an',pp:'PP035',act:['WEVAL','Agent','Autonome','Savings']},
|
||
{n:'Board Report Generator',rm:'dir',d:'Direction',p:'Board',sk:'#fbbf24',hc:'#d97706',F:1,wv:1,re:'👨💼',savings:'240k/an',pp:'PP034',act:['WEVAL','Agent','Autonome','Savings']},
|
||
{n:'OKR Tracker Agent',rm:'dir',d:'Direction',p:'OKR',sk:'#fbbf24',hc:'#d97706',F:1,wv:1,re:'👩🏽💼',savings:'180k/an',pp:'PP033',act:['WEVAL','Agent','Autonome','Savings']},
|
||
{n:'T24 Batch Orchestrator',rm:'fin',d:'Finance',p:'T24',sk:'#22d3ee',hc:'#0891b2',F:1,wv:1,re:'👨🏿💼',savings:'350k/an',pp:'PP052',act:['WEVAL','Agent','Autonome','Savings']},
|
||
{n:'Collection AI Agent',rm:'fin',d:'Finance',p:'DSO',sk:'#22d3ee',hc:'#0891b2',F:1,wv:1,re:'👩🏽💼',savings:'320k/an',pp:'PP003',act:['WEVAL','Agent','Autonome','Savings']},
|
||
{n:'Cash Flow Predictor AI',rm:'fin',d:'Finance',p:'CashFlow',sk:'#22d3ee',hc:'#0891b2',F:1,wv:1,re:'👨🏼💼',savings:'240k/an',pp:'PP002',act:['WEVAL','Agent','Autonome','Savings']},
|
||
{n:'Fraud Detection Finance',rm:'fin',d:'Finance',p:'Fraud',sk:'#22d3ee',hc:'#0891b2',F:1,wv:1,re:'🕵️',savings:'400k/an',pp:'PP004',act:['WEVAL','Agent','Autonome','Savings']},
|
||
{n:'Budget Variance Watchdog',rm:'fin',d:'Finance',p:'Budget',sk:'#22d3ee',hc:'#0891b2',F:1,wv:1,re:'👨🏻💼',savings:'150k/an',pp:'PP005',act:['WEVAL','Agent','Autonome','Savings']},
|
||
{n:'Multi-Entity Consolidator',rm:'fin',d:'Finance',p:'Consol',sk:'#22d3ee',hc:'#0891b2',F:1,wv:1,re:'👩🏾💼',savings:'210k/an',pp:'PP006',act:['WEVAL','Agent','Autonome','Savings']},
|
||
{n:'Fast Close Orchestrator',rm:'fin',d:'Finance',p:'Close',sk:'#22d3ee',hc:'#0891b2',F:1,wv:1,re:'👨🏽💼',savings:'180k/an',pp:'PP001',act:['WEVAL','Agent','Autonome','Savings']},
|
||
{n:'DCAA Compliance Agent',rm:'fin',d:'Finance',p:'DCAA',sk:'#22d3ee',hc:'#0891b2',F:1,wv:1,re:'📜',savings:'220k/an',pp:'PP046',act:['WEVAL','Agent','Autonome','Savings']},
|
||
{n:'OIC Accelerator',rm:'fin',d:'Finance',p:'OIC',sk:'#22d3ee',hc:'#0891b2',F:1,wv:1,re:'🚀',savings:'220k/an',pp:'PP054',act:['WEVAL','Agent','Autonome','Savings']},
|
||
{n:'NetSuite Customization',rm:'fin',d:'Finance',p:'NetSuite',sk:'#22d3ee',hc:'#0891b2',F:1,wv:1,re:'⚙️',savings:'180k/an',pp:'PP038',act:['WEVAL','Agent','Autonome','Savings']},
|
||
{n:'CMDB Enrichment Agent',rm:'fin',d:'Finance',p:'CMDB',sk:'#22d3ee',hc:'#0891b2',F:1,wv:1,re:'🗂️',savings:'160k/an',pp:'PP047',act:['WEVAL','Agent','Autonome','Savings']},
|
||
{n:'ASC606 Automation',rm:'fin',d:'Finance',p:'ASC606',sk:'#22d3ee',hc:'#0891b2',F:1,wv:1,re:'👨🏿💼',savings:'130k/an',pp:'PP055',act:['WEVAL','Agent','Autonome','Savings']},
|
||
{n:'BC Performance Accelerator',rm:'fin',d:'Finance',p:'BCPerf',sk:'#22d3ee',hc:'#0891b2',F:1,wv:1,re:'🎯',savings:'85k/an',pp:'PP041',act:['WEVAL','Agent','Autonome','Savings']},
|
||
{n:'Cloture FR Agent',rm:'fin',d:'Finance',p:'FR',sk:'#22d3ee',hc:'#0891b2',F:1,wv:1,re:'👩🏻💼',savings:'75k/an',pp:'PP040',act:['WEVAL','Agent','Autonome','Savings']},
|
||
{n:'SMB Analytics Modernizer',rm:'fin',d:'Finance',p:'SMBBI',sk:'#22d3ee',hc:'#0891b2',F:1,wv:1,re:'👩🏿💼',savings:'95k/an',pp:'PP036',act:['WEVAL','Agent','Autonome','Savings']},
|
||
{n:'ISV Resilience Agent',rm:'fin',d:'Finance',p:'ISV',sk:'#22d3ee',hc:'#0891b2',F:1,wv:1,re:'🛡️',savings:'95k/an',pp:'PP043',act:['WEVAL','Agent','Autonome','Savings']},
|
||
{n:'Multi-Entity Consolidator SMB',rm:'fin',d:'Finance',p:'SMBConsol',sk:'#22d3ee',hc:'#0891b2',F:1,wv:1,re:'👨🏼💼',savings:'140k/an',pp:'PP037',act:['WEVAL','Agent','Autonome','Savings']}];
|
||
|
||
AG=AG.filter(function(a){return a&&a.n&&a.rm!=='dead';});/* V93 hide dead agents (was 167 invisible blocks) */
|
||
// V91 TDZ fix: DP filter moved here (after AG declaration) - was at line 90
|
||
DP=DP.filter(function(d){var c=AG.filter(function(a){return a.rm===d.id;}).length;return c>0||["meet","lean"].indexOf(d.id)>=0;});
|
||
// Tasks are now per-agent in act[]
|
||
const HU=26,BASE_RH=60,ROW_ADD=50;
|
||
AG.forEach(function(a){a.si='sit';a.x=0;a.y=0;a.dx=0;a.dy=0;a.cx=0;a.cy=0;a.bob=Math.random()*6.28;a.wk=0;a.triggered=false;a.alert='';a.alertOn=false;a.wtmr=0;a.dir=1;a.bl=0;a.blt=80+Math.random()*200;a.fr='';a.tkt=0;a.wp=[];a.wpi=0;});
|
||
|
||
function rz(){
|
||
W=innerWidth;var totalNeeded=HU+10;for(var ii=0;ii<DP.length;ii++)totalNeeded+=(typeof deptH==='function'?deptH(ii):60)+3;H=Math.max(innerHeight,totalNeeded);
|
||
C.width=W*2;C.height=H*2;X.scale(2,2);C.style.height=H+'px';
|
||
lay();
|
||
}
|
||
function oX(){return 4;}
|
||
function oW(){return Math.floor(W*.35);}
|
||
function pX(){return Math.floor(W*.38);}
|
||
function pW(){return Math.floor(W*.42);}
|
||
function oRect(i){return {x:oX(),y:deptY(i),w:oW(),h:deptH(i)};}
|
||
function pRect(i){return {x:pX(),y:deptY(i),w:pW(),h:deptH(i)};}
|
||
|
||
function lay(){
|
||
var MAX_SHOW=999;
|
||
AG.forEach(function(a){
|
||
var di=DP.findIndex(function(d){return d.id===a.rm;});
|
||
if(di<0){a.hid=true;return;}
|
||
var o=oRect(di);
|
||
var mates=AG.filter(function(b){return b.rm===a.rm;});
|
||
var mi=mates.indexOf(a);
|
||
if(mi>=MAX_SHOW){a.hid=true;a.dx=o.x+o.w/2;a.dy=o.y+o.h-8;if(a.si==='sit'){a.x=a.dx;a.y=a.dy;}return;}
|
||
a.hid=false;
|
||
var showCount=Math.min(mates.length,MAX_SHOW);a._big=mates.length>35;
|
||
var cols=showCount<=14?7:showCount<=35?7:showCount<=70?10:10;
|
||
var row=Math.floor(mi/cols);
|
||
var col=mi%cols;
|
||
var spacing=Math.min(showCount>70?50:showCount>35?48:50,(o.w-20)/Math.max(cols,1));
|
||
var totalW=cols*spacing;
|
||
a.dx=o.x+(o.w-totalW)/2+col*spacing+spacing/2;
|
||
var rows2=Math.ceil(showCount/cols);
|
||
var rh3=showCount>70?70:showCount>35?52:48;var totalVH=rows2*rh3;
|
||
a.dy=o.y+20+(o.h-totalVH)/2+row*rh3;
|
||
if(a.si==='sit'){a.x=a.dx;a.y=a.dy;}
|
||
var dept=DP[di];
|
||
var pr=pRect(di);
|
||
var psi=Math.floor(Math.random()*dept.pp.length);
|
||
var sw=pr.w/dept.pp.length;
|
||
a.cx=pr.x+psi*sw+sw/2;
|
||
a.cy=pr.y+pr.h/2;
|
||
});
|
||
}
|
||
function deptH(i){var cnt=AG.filter(function(a){return a.rm===DP[i].id;}).length;var c2=cnt<=14?7:cnt<=35?7:cnt<=70?10:10;var rh=cnt>70?70:cnt>35?52:ROW_ADD;var h=BASE_RH+Math.ceil(cnt/c2)*rh;return h<110?110:h;}
|
||
function deptY(i){var y=HU+4;for(var j=0;j<i;j++)y+=deptH(j)+3;return y;}
|
||
addEventListener('resize',rz);rz();
|
||
|
||
|
||
|
||
|
||
|
||
// DRAW OFFICE (left) — 3D Strong
|
||
function drawOff(i){
|
||
var r=oRect(i),d=DP[i],cl=d.cl,fl=d.fl,B=4;var _inP=typeof isInProject==='function'?isInProject(d.id):true;if(!_inP){X.globalAlpha=0.25;}
|
||
// Drop shadow (strong)
|
||
X.fillStyle='#00000010';X.beginPath();X.roundRect(r.x+4,r.y+6,r.w,r.h,12);X.fill();/*depthShadow*/
|
||
X.fillStyle='#00000010';X.beginPath();X.roundRect(r.x+3,r.y+3,r.w,r.h,10);X.fill();
|
||
// Main box
|
||
X.fillStyle=fl;X.beginPath();X.roundRect(r.x,r.y,r.w,r.h,8);X.fill();
|
||
// TOP EDGE — bright (ceiling light)
|
||
var tg=X.createLinearGradient(r.x,r.y,r.x,r.y+20);
|
||
tg.addColorStop(0,'#ffffff90');tg.addColorStop(1,'#ffffff00');
|
||
X.fillStyle=tg;X.beginPath();X.roundRect(r.x+1,r.y+1,r.w-2,20,[7,7,0,0]);X.fill();X.save();X.globalAlpha=0.05;var _cg=X.createRadialGradient(r.x,r.y,0,r.x,r.y,60);_cg.addColorStop(0,cl);_cg.addColorStop(1,'#ffffff00');X.fillStyle=_cg;X.fillRect(r.x,r.y,60,60);X.restore();/*cornerGlow*/
|
||
// BOTTOM EDGE — dark (floor shadow)
|
||
var bg=X.createLinearGradient(r.x,r.y+r.h-25,r.x,r.y+r.h);
|
||
bg.addColorStop(0,'transparent');bg.addColorStop(1,cl+'30');
|
||
X.fillStyle=bg;X.beginPath();X.roundRect(r.x+1,r.y+r.h-25,r.w-2,24,[0,0,7,7]);X.fill();
|
||
// LEFT EDGE — color bar with 3D bevel
|
||
var lg=X.createLinearGradient(r.x,0,r.x+8,0);
|
||
lg.addColorStop(0,cl);lg.addColorStop(0.6,cl+'cc');lg.addColorStop(1,cl+'20');
|
||
var _lbw=8+Math.sin(fr*0.04+i)*1.5;X.fillStyle=lg;X.beginPath();X.roundRect(r.x,r.y,_lbw,r.h,[8,0,0,8]);X.fill();/*liveBar*/
|
||
// RIGHT EDGE — shadow inset
|
||
X.fillStyle='#00000012';X.beginPath();X.roundRect(r.x+r.w-6,r.y+4,6,r.h-8,[0,6,6,0]);X.fill();
|
||
// BOTTOM BEVEL — 3D raised edge
|
||
X.fillStyle=cl+'18';X.beginPath();X.roundRect(r.x+8,r.y+r.h-4,r.w-14,4,[0,0,6,6]);X.fill();
|
||
// Inner border (subtle)
|
||
X.strokeStyle=cl+'30';X.lineWidth=1;X.beginPath();X.roundRect(r.x+1,r.y+1,r.w-2,r.h-2,7);X.stroke();
|
||
// Outer border
|
||
X.strokeStyle=cl+'50';X.lineWidth=1.5;X.beginPath();X.roundRect(r.x,r.y,r.w,r.h,8);X.stroke();X.save();X.globalAlpha=0.03;X.fillStyle=cl;for(var _gx=r.x+8;_gx<r.x+r.w;_gx+=14)for(var _gy=r.y+24;_gy<r.y+r.h-10;_gy+=14){X.beginPath();X.arc(_gx,_gy,0.5,0,6.28);X.fill();}X.restore();/*gridDots*/X.save();X.globalAlpha=0.08;var _hge=X.createLinearGradient(r.x,r.y,r.x,r.y+25);_hge.addColorStop(0,cl);_hge.addColorStop(1,"#ffffff00");X.fillStyle=_hge;X.fillRect(r.x+1,r.y+1,r.w-2,25);X.restore();/*headerGrad*/
|
||
// Title
|
||
X.font='900 12px Nunito';X.fillStyle=cl;X.textAlign='left';X.fillText(d.l,r.x+12,r.y+14);
|
||
// Agent count badge
|
||
var cnt=AG.filter(function(a){return a.rm===d.id;}).length;
|
||
var acnt=AG.filter(function(a){return a.rm===d.id&&a.si!=='sit';}).length;
|
||
var hidCnt=AG.filter(function(a){return a.rm===d.id&&a.hid;}).length;
|
||
if(hidCnt>0){X.font='700 9px Nunito';X.fillStyle='#64748b';X.textAlign='right';X.fillText('+'+hidCnt+' more',r.x+r.w-6,r.y+r.h-4);}
|
||
var bx=r.x+X.measureText(d.l).width+12;
|
||
X.fillStyle=acnt>0?'#22c55e30':'#64748b20';X.beginPath();X.roundRect(bx,r.y+4,22,14,7);X.fill();
|
||
X.font='800 8px JetBrains Mono';X.fillStyle=acnt>0?'#22c55e':'#64748b';X.fillText(cnt,bx+11,r.y+14);
|
||
// Status dot
|
||
X.fillStyle=acnt>0?'#22c55e':'#94a3b8';X.beginPath();X.arc(r.x+r.w-10,r.y+10,4,0,6.28);X.fill();
|
||
if(acnt>0){var glow=Math.min(acnt/5,1)*0.15;X.fillStyle=cl+Math.floor(glow*255).toString(16).padStart(2,'0');X.beginPath();X.roundRect(r.x,r.y,r.w,r.h,8);X.fill();}
|
||
if(acnt>0){X.fillStyle='#22c55e40';X.beginPath();X.arc(r.x+r.w-10,r.y+10,7+Math.sin(fr*.1)*2,0,6.28);X.fill();}
|
||
// Door on right
|
||
var dy=r.y+r.h/2;
|
||
X.fillStyle='#fff';X.beginPath();X.roundRect(r.x+r.w-1,dy-6,5,12,[0,3,3,0]);X.fill();
|
||
X.strokeStyle=cl;X.lineWidth=1;X.beginPath();X.roundRect(r.x+r.w-1,dy-6,5,12,[0,3,3,0]);X.stroke();
|
||
X.fillStyle=cl;X.beginPath();X.arc(r.x+r.w+2.5,dy,1,0,6.28);X.fill();
|
||
|
||
}
|
||
|
||
// DRAW PIPELINE (right)
|
||
function drawPipe(i){var _inP2=typeof isInProject==='function'?isInProject(DP[i].id):true;if(!_inP2){X.globalAlpha=0.2;}
|
||
var r=pRect(i),d=DP[i],cl=d.cl;
|
||
X.fillStyle='#f4f6fc';X.beginPath();X.roundRect(r.x,r.y,r.w,r.h,8);X.fill();
|
||
X.strokeStyle=cl+'30';X.lineWidth=1;X.beginPath();X.roundRect(r.x,r.y,r.w,r.h,8);X.stroke();
|
||
var by=r.y+r.h/2;
|
||
// Pipeline background gradient
|
||
var pbg=X.createLinearGradient(r.x,r.y,r.x+r.w,r.y);
|
||
pbg.addColorStop(0,cl+'08');pbg.addColorStop(0.5,cl+'15');pbg.addColorStop(1,cl+'08');
|
||
X.fillStyle=pbg;X.fillRect(r.x+3,r.y+3,r.w-6,r.h-6);
|
||
X.fillStyle=cl+'12';X.beginPath();X.roundRect(r.x+3,by-4,r.w-6,8,3);X.fill();
|
||
// Animated flow dots on track
|
||
var flowX=(fr*0.8+i*100)%(r.w-20);
|
||
X.fillStyle=cl+'40';X.beginPath();X.arc(r.x+10+flowX,by,3,0,6.28);X.fill();
|
||
X.fillStyle=cl+'25';X.beginPath();X.arc(r.x+10+(flowX+15)%(r.w-20),by,2,0,6.28);X.fill();
|
||
var sw=r.w/d.pp.length;
|
||
d.pp.forEach(function(s,j){
|
||
var sx=r.x+j*sw+sw/2;
|
||
X.fillStyle='#fff';X.beginPath();X.arc(sx,by,11,0,6.28);X.fill();
|
||
X.fillStyle=cl+'25';X.beginPath();X.arc(sx,by,11,0,6.28);X.fill();
|
||
X.strokeStyle=cl;X.lineWidth=1.5;X.beginPath();X.arc(sx,by,11,0,6.28);X.stroke();
|
||
X.fillStyle=cl;X.beginPath();X.arc(sx,by,4,0,6.28);X.fill();
|
||
X.font='800 7px Nunito';X.fillStyle=cl;X.textAlign='center';X.fillText(s,sx,by+18);
|
||
var _tips={'Start':'Init+specs','Configure':'Setup+wiring','Monitor':'Watch+alerts','Scale':'Grow+optimize','Build':'Dev+test','Test':'QA+validate','Ship':'Deploy+release','Plan':'Roadmap+specs','Dev':'Code+review','QA':'Test+NonReg','Prod':'Live+monitor'};if(_tips[s]){X.font='500 5px Nunito';X.fillStyle='#94a3b8';X.fillText(_tips[s],sx,by+26);}
|
||
// Stage number inside circle
|
||
X.font='bold 8px JetBrains Mono';X.fillStyle='#fff';X.textBaseline='middle';X.fillText(j+1,sx,by);X.textBaseline='alphabetic';
|
||
if(j<d.pp.length-1){
|
||
// Animated arrow between stages
|
||
var ax=sx+sw/2;
|
||
X.fillStyle=cl+'50';X.beginPath();X.moveTo(ax-4,by-3);X.lineTo(ax+4,by);X.lineTo(ax-4,by+3);X.closePath();X.fill();
|
||
}
|
||
});
|
||
if(!_inP2)X.globalAlpha=1;
|
||
X.font='800 8px Nunito';X.fillStyle=cl+'90';X.textAlign='right';X.fillText('PIPELINE',r.x+r.w-4,r.y+9);
|
||
}
|
||
|
||
// WALKWAY between office and pipeline
|
||
function outX(){return pX()+pW()+8;}
|
||
function outW(){return Math.floor(W*.12);}
|
||
function outRect(i){return {x:outX(),y:deptY(i),w:outW(),h:deptH(i)};}
|
||
|
||
|
||
// SPARKLINE for each dept — simulated growth curves
|
||
function deptSpark(i){
|
||
var d=DP[i],rm=d?d.id:'';
|
||
var curves={
|
||
ceo:[1,1,1,2,2,2,3,3,3,4,4,5],
|
||
sal:[20,35,55,80,120,180,280,400,550,700,850,1052],
|
||
con:[1,1,2,2,3,2,3,3,4,3,3,3],
|
||
dev:[4,5,6,7,8,9,10,11,12,11,12,12],
|
||
qa:[80,95,110,120,130,140,148,150,151,152,153,153],
|
||
l99:[100,200,350,500,700,850,1000,1100,1200,1350,1450,1495],
|
||
sec:[0,0,0,0,1,1,0,0,0,0,0,0],
|
||
srv:[98,99,99.5,99.8,99.9,99.7,99.9,99.8,99.9,100,99.9,99.9],
|
||
ops:[200,400,800,1200,1800,2500,3200,4000,5000,5800,6800,7752],
|
||
dock:[14,14,15,16,17,18,18,19,19,19,19,19],
|
||
mta:[0,50,200,500,1000,2000,3000,4500,5500,6200,7000,7752],
|
||
pha:[5000,15000,30000,50000,70000,85000,95000,105000,115000,120000,128000,141661,141661],
|
||
saas:[0,0,0,1,2,3,4,5,6,7,8,8],
|
||
ai:[1,2,3,3,4,5,5,6,7,7,7,7],
|
||
cron:[20,25,30,35,40,45,50,55,58,62,64,67],
|
||
wevia:[10,25,40,60,80,100,120,140,160,175,190,200],
|
||
plat:[500,1000,1500,2000,2500,3000,3400,3800,4000,4200,4400,4414]
|
||
};
|
||
return curves[rm]||[1,2,3,4,5,6,7,8,9,10,11,12];
|
||
}
|
||
function drawSparkline(x,y,w,h,pts,col){
|
||
if(!pts||!pts.length)return;
|
||
var mn=Math.min.apply(null,pts),mx=Math.max.apply(null,pts);
|
||
if(mx===mn)mx=mn+1;
|
||
var step=w/(pts.length-1);
|
||
// Fill gradient
|
||
X.save();
|
||
X.beginPath();X.moveTo(x,y+h);
|
||
for(var i=0;i<pts.length;i++){X.lineTo(x+i*step,y+h-(pts[i]-mn)/(mx-mn)*h);}
|
||
X.lineTo(x+w,y+h);X.closePath();
|
||
var gf=X.createLinearGradient(x,y,x,y+h);
|
||
gf.addColorStop(0,col+'30');gf.addColorStop(1,col+'05');
|
||
X.fillStyle=gf;X.fill();
|
||
// Line
|
||
X.beginPath();
|
||
for(var i=0;i<pts.length;i++){
|
||
if(i===0)X.moveTo(x+i*step,y+h-(pts[i]-mn)/(mx-mn)*h);
|
||
else X.lineTo(x+i*step,y+h-(pts[i]-mn)/(mx-mn)*h);
|
||
}
|
||
X.strokeStyle=col+'cc';X.lineWidth=1.2;X.lineJoin='round';X.stroke();
|
||
// Last dot
|
||
var ly=y+h-(pts[pts.length-1]-mn)/(mx-mn)*h;
|
||
X.fillStyle=col;X.beginPath();X.arc(x+w,ly,2,0,6.28);X.fill();
|
||
X.restore();
|
||
}
|
||
|
||
function drawOut(i){
|
||
var r=outRect(i),d=DP[i],cl=d.cl;
|
||
var o=OUT[d.id];if(!o)return;
|
||
// Background
|
||
var g=X.createLinearGradient(r.x,r.y,r.x+r.w,r.y+r.h);
|
||
g.addColorStop(0,'#f8fafc');g.addColorStop(1,'#f0f4f8');
|
||
X.fillStyle=g;X.beginPath();X.roundRect(r.x,r.y,r.w,r.h,8);X.fill();
|
||
X.strokeStyle=cl+'40';X.lineWidth=1;X.beginPath();X.roundRect(r.x,r.y,r.w,r.h,8);X.stroke();
|
||
// Right color bar
|
||
X.fillStyle=cl;X.beginPath();X.roundRect(r.x+r.w-4,r.y,4,r.h,[0,8,8,0]);X.fill();
|
||
// Header
|
||
X.font='800 7px Nunito';X.fillStyle=cl;X.textAlign='center';
|
||
X.fillText('OUTPUT',r.x+r.w/2,r.y+10);
|
||
// Date removed (was confusing 2/4 = 2 avril)
|
||
// Icon
|
||
X.font='14px sans-serif';X.fillText(o.icon,r.x+r.w/2,r.y+r.h/2-5);
|
||
// Metric (big)
|
||
X.font='900 10px JetBrains Mono';
|
||
var mColor=o.metric.includes('TODO')||o.metric.includes('-45')||o.metric.includes('wait')||o.metric.includes('0 users')?'#ef4444':
|
||
o.metric.includes('OK')||o.metric.includes('99')||o.metric.includes('+')||o.metric.includes('PASS')?'#22c55e':'#3b82f6';
|
||
X.fillStyle=mColor;X.fillText(o.metric,r.x+r.w/2,r.y+r.h/2+8);
|
||
var _ra=AG.filter(function(a){return a.rm===d.id&&a.F;}).length;var _rt=AG.filter(function(a){return a.rm===d.id;}).length;var _rp=_rt?Math.round(_ra/_rt*100):0;X.font='600 6px Nunito';X.fillStyle=_rp>50?'#16a34a':_rp>20?'#d97706':'#94a3b8';X.fillText((_rp>50?'\u2197':_rp>20?'\u2192':'\u2198')+' '+_rp+'% actif ('+_ra+'/'+_rt+')',r.x+r.w/2,r.y+r.h/2+68);
|
||
var _act=AG.filter(function(a){return a.rm===d.id&&a.F;}).length;
|
||
var _tot=AG.filter(function(a){return a.rm===d.id;}).length;
|
||
var _pct=_tot?Math.round(_act/_tot*100):0;
|
||
var trendCol=_pct>50?'#22c55e':_pct>20?'#f59e0b':'#94a3b8';
|
||
X.font='600 6px Nunito';X.fillStyle=trendCol;
|
||
X.fillText((_pct>50?'\u2197':_pct>20?'\u2192':'\u2198')+' '+_pct+'% actif',r.x+r.w/2,r.y+r.h/2+68);
|
||
// Input line
|
||
// Capacity bar
|
||
var _roomAg=AG.filter(function(a){return a.rm===d.id;});
|
||
var _roomActive=_roomAg.filter(function(a){return a.F;}).length;
|
||
var capPct=_roomAg.length?Math.round(_roomActive/_roomAg.length*100):0
|
||
X.fillStyle='#e2e8f0';X.beginPath();X.roundRect(r.x+6,r.y+r.h-28,r.w-12,5,2);X.fill();
|
||
var barColor=capPct>80?'#ef4444':capPct>50?'#f59e0b':'#22c55e';
|
||
X.fillStyle=barColor;X.beginPath();X.roundRect(r.x+6,r.y+r.h-28,Math.min(capPct,100)/100*(r.w-12),5,2);X.fill();
|
||
X.font='600 4.5px JetBrains Mono';X.fillStyle=barColor;X.textAlign='right';
|
||
X.fillText(_roomActive+'/'+_roomAg.length+' ('+Math.round(capPct)+'%)',r.x+r.w-6,r.y+r.h-30);X.textAlign='center';
|
||
// Input/Output
|
||
X.font='600 5px Nunito';X.fillStyle='#64748b';X.textAlign='left';
|
||
X.fillText(o.input,r.x+6,r.y+r.h-18);
|
||
X.fillStyle='#1e293b';X.font='700 5px Nunito';
|
||
X.fillText(o.output,r.x+6,r.y+r.h-10);
|
||
X.textAlign='center';
|
||
// Mini sparkline
|
||
var sp=deptSpark(i);
|
||
if(r.h>80){drawSparkline(r.x+8,r.y+r.h*0.35,r.w-16,r.h*0.2,sp,cl);}
|
||
}
|
||
|
||
|
||
function drawMultiPipe(){
|
||
window._lk=[
|
||
[0,4,"#e94560",16,"Feature specs","CEO envoie les specs aux devs","1x/sem","L99 Sovereign"],
|
||
[4,5,"#059669",18,"Code review","Dev pousse le code en QA","par commit","L99 Sovereign"],
|
||
[5,6,"#06b6d4",18,"Test results","QA remonte les resultats L99","1x/jour","L99 Sovereign"],
|
||
[12,1,"#a855f7",18,"HCP leads","Pharma envoie les leads HCP","1x/jour","Ethica Pharma"],
|
||
[12,11,"#a855f7",14,"Email campaigns","Pharma declenche les campagnes MTA","1x/jour","Ethica Pharma"],
|
||
[11,8,"#ec4899",16,"Deliverability","MTA remonte la delivrabilite","1x/jour","Ethica Pharma"],
|
||
[11,9,"#ec4899",12,"Bounce tracking","MTA envoie les bounces au monitoring","1x/heure","Ethica Pharma"],
|
||
[1,2,"#3b82f6",18,"Qualified leads","Prospect transfere les leads qualifies","1x/sem","B2B Leads"],
|
||
[1,13,"#3b82f6",14,"SaaS onboarding","Prospect inscrit les nouveaux clients SaaS","1x/mois","B2B Leads"],
|
||
[8,10,"#f59e0b",18,"Container deploy","Infra deploie les containers Docker","1x/jour","Infrastructure"],
|
||
[8,9,"#f59e0b",16,"Health checks","Infra envoie les checks sante au monitoring","*/30min","Infrastructure"],
|
||
[7,8,"#ef4444",16,"Security patches","Secu pousse les patches sur infra","1x/sem","Infrastructure"],
|
||
[0,3,"#e94560",12,"Sprint planning","CEO definit les sprints","1x/2sem","L99 Sovereign"],
|
||
[3,4,"#7c3aed",18,"Sprint backlog","Pipeline pousse le backlog aux devs","1x/2sem","L99 Sovereign"],
|
||
[2,3,"#7c3aed",14,"Client requirements","Consult remonte les besoins clients","1x/sem","L99 Sovereign"],
|
||
[14,15,"#8b5cf6",18,"Model updates","AI deploie les modeles sur WEVIA","1x/sem","AI Pipeline"],
|
||
[15,16,"#6366f1",16,"Widget deploy","WEVIA deploie les widgets plateforme","1x/jour","AI Pipeline"],
|
||
[14,4,"#8b5cf6",12,"AI features","AI pousse les features IA aux devs","1x/2sem","AI Pipeline"],
|
||
[17,9,"#64748b",14,"Cron health","Crons envoient leur sante au monitoring","*/30min","DevOps"],
|
||
[17,6,"#64748b",12,"NonReg schedule","Crons declenchent les tests NonReg","*/6h","DevOps"],
|
||
[17,12,"#64748b",10,"Ethica scraper","Crons declenchent le scraping Ethica","*/4h","DevOps"],
|
||
[18,19,"#84cc16",18,"New tools","Wire detecte et envoie les nouveaux outils","1x/sem","Integration"],
|
||
[19,20,"#84cc16",14,"Unused tools","Integration archive les outils inutilises","1x/mois","Integration"],
|
||
[19,4,"#84cc16",12,"Integration tests","Integration pousse les tests aux devs","1x/jour","Integration"],
|
||
[6,0,"#dc2626",12,"Quality report","L99 remonte le rapport qualite au CEO","1x/sem","L99 Sovereign"],
|
||
[9,7,"#eab308",12,"Alert triage","Monitor remonte les alertes a la secu","1x/heure","Infrastructure"],
|
||
[13,11,"#14b8a6",14,"Outbound emails","SaaS declenche les emails sortants","1x/jour","B2B Leads"]
|
||
];
|
||
var w=W||window.innerWidth,bx=w*0.46+20;
|
||
window._lk.forEach(function(lk){var fi=lk[0],ti=lk[1],cl=lk[2],op=lk[3]||15;if(fi>=DP.length||ti>=DP.length)return;var fy=deptY(fi)+deptH(fi)/2,ty=deptY(ti)+deptH(ti)/2,off=Math.abs(ti-fi)*4+25,h2=op<16?'0'+op.toString(16):op.toString(16);X.save();X.beginPath();X.moveTo(bx+155,fy);X.bezierCurveTo(bx+155+off,fy,bx+155+off,ty,bx+155,ty);X.strokeStyle=cl+h2;X.lineWidth=1.2;X.setLineDash([3,5]);X.stroke();X.setLineDash([]);var t=((fr*0.008+fi*0.1+ti*0.07)%1),mt=1-t,px2=mt*mt*mt*(bx+155)+3*mt*mt*t*(bx+155+off)+3*mt*t*t*(bx+155+off)+t*t*t*(bx+155),py2=mt*mt*mt*fy+3*mt*mt*t*fy+3*mt*t*t*ty+t*t*t*ty;X.beginPath();X.arc(px2,py2,2,0,6.28);X.fillStyle=cl+'60';X.fill();X.restore()});/*bezPulse*/
|
||
}
|
||
|
||
|
||
var MULTI_AGENTS=[
|
||
['L99 PILOT','l99',['qa','dev','srv'],'#dc2626'],
|
||
['Ethica','sal',['pha'],'#a855f7'],
|
||
['PMTA','mta',['ops'],'#ec4899'],
|
||
['CrowdSec','sec',['srv'],'#ef4444'],
|
||
['Guardian','srv',['sec'],'#f59e0b'],
|
||
['PHP Auth','dead',['sec','plat'],'#f59e0b'],
|
||
['Paperclip','intg',['wevia','dev'],'#84cc16'],
|
||
['n8n','wire',['dev'],'#f97316'],
|
||
['Playwright','qa',['dev'],'#06b6d4'],
|
||
['Watchdog','srv',['ops'],'#f59e0b'],
|
||
['BrainCore','dev',['mta'],'#10b981'],
|
||
['Arsenal','srv',['saas'],'#f59e0b'],
|
||
['Claude-Mem','ai',['wevia'],'#8b5cf6'],
|
||
['WEDROID','dev',['srv'],'#10b981'],
|
||
['Cerebras','ai',['wevia'],'#8b5cf6'],
|
||
['Groq','ai',['wevia'],'#8b5cf6'],
|
||
['SentinelBrn','srv',['sec'],'#f59e0b'],
|
||
['DeerFlow','intg',['ai'],'#84cc16'],
|
||
['WeviaBrain','wevia',['ai'],'#6366f1'],
|
||
['WeviaTools','wevia',['plat'],'#6366f1'],
|
||
['HamidBrain','saas',['mta'],'#14b8a6'],
|
||
['CogBrain','wevia',['dev','ai'],'#6366f1']
|
||
];
|
||
function drawMultiAgent(){
|
||
if(!AG||!DP)return;
|
||
MULTI_AGENTS.forEach(function(ma){
|
||
var name=ma[0],pri=ma[1],secs=ma[2],cl=ma[3];
|
||
var agent=null;
|
||
for(var i=0;i<AG.length;i++){if(!AG[i])continue;if(AG[i].n===name&&AG[i].rm===pri){agent=AG[i];break;}}
|
||
if(!agent)return;
|
||
secs.forEach(function(sd){
|
||
var si=-1;for(var i=0;i<DP.length;i++){if(DP[i].id===sd){si=i;break;}}
|
||
if(si<0)return;
|
||
var sr=oRect(si);
|
||
var gx=sr.x+sr.w-16,gy=sr.y+sr.h-12;
|
||
var ax=agent.x,ay=agent.y;
|
||
var mx2=Math.max(ax,gx)+35;
|
||
X.save();X.globalAlpha=0.6;
|
||
X.beginPath();X.moveTo(ax,ay);X.bezierCurveTo(mx2,ay,mx2,gy,gx,gy);
|
||
X.strokeStyle=cl+'30';X.lineWidth=1;X.setLineDash([3,4]);X.stroke();X.setLineDash([]);
|
||
var t=((fr*0.012+si*0.15)%1),mt=1-t;
|
||
var px=mt*mt*mt*ax+3*mt*mt*t*mx2+3*mt*t*t*mx2+t*t*t*gx;
|
||
var py=mt*mt*mt*ay+3*mt*mt*t*ay+3*mt*t*t*gy+t*t*t*gy;
|
||
X.beginPath();X.arc(px,py,2,0,6.28);X.fillStyle=cl+'70';X.fill();
|
||
X.globalAlpha=0.3;X.beginPath();X.arc(gx,gy,5,0,6.28);
|
||
X.fillStyle=cl+'30';X.fill();X.strokeStyle=cl+'50';X.lineWidth=0.6;X.stroke();
|
||
X.font='7px serif';X.textAlign='center';X.textBaseline='middle';
|
||
X.fillStyle=cl;X.fillText(agent.re||'',gx,gy);
|
||
X.font='500 4px Nunito';X.fillText(name.substring(0,5),gx,gy+9);
|
||
X.textAlign='left';X.globalAlpha=1;X.restore();
|
||
});});
|
||
}
|
||
|
||
function drawWalk(){
|
||
DP.forEach(function(d,i){
|
||
var o=oRect(i),p=pRect(i),ym=o.y+o.h/2;
|
||
// Walkway with animated dashes
|
||
var wx1=o.x+o.w+2,wx2=p.x-4,wy=ym;
|
||
X.fillStyle='#d8e4f0';X.beginPath();X.roundRect(wx1,wy-4,wx2-wx1,8,3);X.fill();
|
||
X.strokeStyle=d.cl+'60';X.lineWidth=1;X.setLineDash([6,4]);X.lineDashOffset=-fr*0.3;
|
||
X.beginPath();X.moveTo(wx1+4,wy);X.lineTo(wx2-4,wy);X.stroke();X.setLineDash([]);
|
||
// Arrow
|
||
X.fillStyle=d.cl+'80';X.beginPath();X.moveTo(wx2-8,wy-4);X.lineTo(wx2,wy);X.lineTo(wx2-8,wy+4);X.closePath();X.fill();
|
||
// Arrow from pipeline to output
|
||
var or2=outRect(i);var ox1=p.x+p.w+2,ox2=or2.x-2;
|
||
X.fillStyle='#d8e4f0';X.beginPath();X.roundRect(ox1,wy-3,ox2-ox1,6,2);X.fill();
|
||
X.fillStyle=d.cl+'60';X.beginPath();X.moveTo(ox2-6,wy-3);X.lineTo(ox2,wy);X.lineTo(ox2-6,wy+3);X.closePath();X.fill();
|
||
X.strokeStyle='#e0d050';X.lineWidth=.5;X.setLineDash([3,4]);
|
||
X.beginPath();X.moveTo(o.x+o.w+8,ym);X.lineTo(p.x-4,ym);X.stroke();X.setLineDash([]);
|
||
X.fillStyle='#b0c0d860';X.font='7px sans-serif';X.textAlign='center';
|
||
X.fillText('→',(o.x+o.w+p.x)/2,ym+2);
|
||
});
|
||
}
|
||
|
||
// CHARACTER (emoji-based HD)
|
||
function drawC(a){if(a.hid&&a.si==='sit')return;
|
||
var _q=window._agQ||'';if(_q&&_q.length>1&&!a.n.toLowerCase().includes(_q)&&!(a.d||'').toLowerCase().includes(_q)){X.globalAlpha=0.15;}
|
||
var isH=a===hov,sit=a.si==='sit',sc=isH?1.2:1;if(isH){X.save();X.strokeStyle=cl+'50';X.lineWidth=0.5;var _ehr=16+Math.sin(fr*0.1)*3;X.beginPath();X.arc(a.x,a.y-10,_ehr,0,6.28);X.stroke();X.restore();}/*hoverRing*/
|
||
var isW=a.si==='work';var bob=sit?0:isW?Math.sin(a.bob*3)*0.5:Math.sin(a.bob)*1.5;
|
||
var di=DP.findIndex(function(d){return d.id===a.rm;});
|
||
var cl=di>=0?DP[di].cl:'#888';
|
||
var isDead=a.rm==='dead';
|
||
var isCrit=a.alertOn||(a.p&&(/DEAD|GPU MORT|DOWN/i).test(a.p));
|
||
var isWarn=(a.p&&(/DISABLED|PAUSED|RESTARTING|EXPIRED|MANQUAN|Creds missing|Not wired|TODO/i).test(a.p));
|
||
var isDown=isCrit||isWarn;
|
||
var isDorm=!a.F&&!isDown&&!isDead;
|
||
if(isDead){cl='#94a3b8';}
|
||
/*dormant: no opacity change, just no animation*/
|
||
X.save();X.globalAlpha=0.06;X.fillStyle="#000";X.beginPath();X.ellipse(a.x,a.y+14,7,2,0,0,6.28);X.fill();X.globalAlpha=1;/*agShadow*/X.save();if(a.tpA!==undefined&&a.tpA<1)X.globalAlpha=Math.max(0,a.tpA);X.translate(a.x,a.y+bob);X.scale(sc,sc);
|
||
if(isW){X.shadowColor=cl;X.shadowBlur=25+Math.sin(fr*0.15)*10;X.font="8px sans-serif";X.fillText("⚡",0,-30);}
|
||
if(isH){X.shadowColor=cl;X.shadowBlur=22;X.shadowOffsetY=2;}/*hoverGlow22*/
|
||
// Shadow
|
||
X.fillStyle='#00000018';X.beginPath();X.ellipse(0,sit?5:10,7,2.5,0,0,6.28);X.fill();
|
||
// Body (colored pill)
|
||
var sevCol=isCrit?'#ef4444':isWarn?'#f97316':null;
|
||
if(sevCol){X.save();X.shadowColor=sevCol;X.shadowBlur=12+Math.sin(a.bob*1.5)*4;}
|
||
var bg=X.createLinearGradient(-5,-4,5,4);bg.addColorStop(0,sevCol||cl);bg.addColorStop(1,(sevCol||cl)+'99');
|
||
X.fillStyle=bg;X.beginPath();X.roundRect(-6,-5,12,10,[5,5,2,2]);X.fill();
|
||
if(sevCol){X.restore();}
|
||
X.fillStyle='#ffffff20';X.beginPath();X.roundRect(-4,-4,4,7,[2,0,0,2]);X.fill();
|
||
// Legs (walking)
|
||
if(!sit){
|
||
var lsw=Math.sin(a.wk)*3;
|
||
X.fillStyle=(sevCol||cl)+'bb';
|
||
X.save();X.translate(-2.5,4);X.rotate(lsw*.04);X.beginPath();X.roundRect(-1.5,0,3,7,1.5);X.fill();X.restore();
|
||
X.save();X.translate(2.5,4);X.rotate(-lsw*.04);X.beginPath();X.roundRect(-1.5,0,3,7,1.5);X.fill();X.restore();
|
||
X.fillStyle='#fff';
|
||
X.beginPath();X.ellipse(-2.5+lsw*.1,11,2.5,1.2,0,0,6.28);X.fill();
|
||
X.beginPath();X.ellipse(2.5-lsw*.1,11,2.5,1.2,0,0,6.28);X.fill();
|
||
}
|
||
// Arms
|
||
X.fillStyle=isCrit?'#fca5a5':isWarn?'#fdba74':a.sk;
|
||
var asw=sit?0:Math.sin(a.wk+.5)*.15;
|
||
X.save();X.translate(-7,-1);X.rotate(sit?.2:asw);X.beginPath();X.roundRect(-1.5,0,3,sit?4:7,1.5);X.fill();X.restore();
|
||
X.save();X.translate(7,-1);X.rotate(sit?-.2:-asw);X.beginPath();X.roundRect(-1.5,0,3,sit?4:7,1.5);X.fill();X.restore();
|
||
// HEAD — use emoji face for HD quality
|
||
X.font='22px sans-serif';X.textAlign='center';X.textBaseline='middle';
|
||
X.fillText(a.re||'👤',0,-14);
|
||
if(isW){X.save();X.shadowColor=cl;X.shadowBlur=25;X.globalAlpha=0.6;X.fillText(a.re||'👤',0,-14);X.restore();}
|
||
// Name
|
||
X.textBaseline='alphabetic';
|
||
X.font=(isH?'800':'600')+' '+(isH?7:5.5)+'px Nunito';
|
||
X.fillStyle=isH?'#2a2a4a':a.si!=='sit'?cl:'#6a7a98';
|
||
X.textAlign='center';
|
||
if(isCrit){X.fillStyle='#dc2626';if(!a._big){X.fillText(a.n,0,sit?14:20);}else{X.font='500 5px Nunito';X.fillText(a.n.substring(0,6),0,sit?12:16);}
|
||
X.font='500 4.5px Nunito';X.fillText(a.p?a.p.substring(0,20):'',0,sit?22:28);}
|
||
else if(isWarn){X.fillStyle='#ea580c';if(!a._big){X.fillText(a.n,0,sit?14:20);}else{X.font='500 5px Nunito';X.fillText(a.n.substring(0,6),0,sit?12:16);}
|
||
X.font='500 4.5px Nunito';X.fillText(a.p?a.p.substring(0,20):'',0,sit?22:28);}
|
||
else if(!a._big){var _enw=X.measureText(a.n).width;X.save();X.fillStyle=window._isDark?'#1e293b80':'#ffffff90';X.beginPath();X.roundRect(-_enw/2-2,sit?9:15,_enw+4,8,[3]);X.fill();X.restore();/*namePill*/X.fillText(a.n,0,sit?14:20);}else{X.font='500 5px Nunito';X.fillText(a.n.substring(0,6),0,sit?12:16);}
|
||
// Active dot
|
||
if(a.si!=='sit'){
|
||
X.fillStyle=cl+'40';X.beginPath();X.arc(0,-28,5+Math.sin(fr*.15)*2,0,6.28);X.fill();
|
||
X.fillStyle=cl;X.beginPath();X.arc(0,-28,3,0,6.28);X.fill();
|
||
}
|
||
// Task bubble
|
||
if(a.tkt>0){
|
||
X.globalAlpha=Math.min(a.tkt/6,1);
|
||
var tw2=Math.min(a.fr.length*5+16,180);
|
||
var by2=a.si==='sit'?20:26;
|
||
// Speech bubble BELOW agent
|
||
X.fillStyle='#ffffffee';X.shadowColor='#00000020';X.shadowBlur=6;
|
||
X.strokeStyle='#3b82f680';X.lineWidth=1;
|
||
X.beginPath();X.roundRect(-tw2/2,by2,tw2,34,8);X.fill();X.stroke();X.shadowBlur=0;
|
||
// Triangle pointing UP to agent
|
||
X.fillStyle='#ffffffee';X.beginPath();X.moveTo(-4,by2);X.lineTo(4,by2);X.lineTo(0,by2-5);X.closePath();X.fill();
|
||
// Action text
|
||
// Line 1: action
|
||
X.font='700 7px Nunito';X.fillStyle='#1e40af';X.textAlign='center';X.textBaseline='middle';
|
||
X.fillText(a.fr,0,by2+7);
|
||
// Line 2: freq
|
||
var meta=AMETA[a.n]||{};
|
||
var fr2=meta.fq||FREQ_DEF[a.rm]||'';
|
||
X.font='600 5.5px Nunito';X.fillStyle='#94a3b8';
|
||
X.fillText('⏱ '+fr2,0,by2+16);
|
||
// Line 3: input
|
||
if(meta.inp){
|
||
X.font='600 5px Nunito';X.fillStyle='#64748b';
|
||
X.fillText('📥 '+meta.inp,0,by2+24);
|
||
}
|
||
X.textBaseline='alphabetic';X.globalAlpha=1;
|
||
}
|
||
// ALERT: compact red badge
|
||
if(a.alertOn&&a.alert){
|
||
/*premium: no circle, severity handled by name color*/
|
||
var atxt=a.alert.length>16?a.alert.substring(0,16):a.alert;
|
||
var aw3=Math.min(atxt.length*5+14,110);
|
||
X.fillStyle='#fef2f2ee';X.strokeStyle='#fca5a5';X.lineWidth=1;
|
||
X.beginPath();X.roundRect(-aw3/2,-42,aw3,15,4);X.fill();X.stroke();
|
||
X.font='600 7px JetBrains Mono';X.fillStyle='#dc2626';X.textAlign='center';X.textBaseline='middle';
|
||
X.fillText(atxt,0,-34.5);X.textBaseline='alphabetic';
|
||
}
|
||
X.restore();
|
||
}
|
||
// PATH
|
||
function corridorX(){return Math.floor(W*0.365);}
|
||
function mkP(a){
|
||
var di=DP.findIndex(function(d){return d.id===a.rm;});
|
||
if(di<0)return[];
|
||
var o=oRect(di),ym=o.y+o.h/2;
|
||
var cx=corridorX();
|
||
var ty=a.cy||ym;
|
||
// Pick random pipeline phase if not set
|
||
if(!a.cx||!a.cy){
|
||
var pr=pRect(di),dept=DP[di];
|
||
var psi=Math.floor(Math.random()*dept.pp.length);
|
||
var sw=pr.w/dept.pp.length;
|
||
a.cx=pr.x+psi*sw+sw/2;
|
||
a.cy=pr.y+pr.h/2;
|
||
ty=a.cy;
|
||
a.fr=dept.pp[psi]||a.fr;
|
||
}
|
||
// Cross-pipeline: pick a different dept's pipeline sometimes (20% chance)
|
||
if(Math.random()<0.2&&DP.length>1){
|
||
var targets=[0,1,2,3,4,5,6,7].filter(function(j){return j!==di&&j<DP.length&&DP[j].pp&&DP[j].pp.length>0;});
|
||
if(targets.length){
|
||
var ti=targets[Math.floor(Math.random()*targets.length)];
|
||
var tpr=pRect(ti),tdept=DP[ti];
|
||
var tpsi=Math.floor(Math.random()*tdept.pp.length);
|
||
var tsw=tpr.w/tdept.pp.length;
|
||
a.cx=tpr.x+tpsi*tsw+tsw/2;
|
||
a.cy=tpr.y+tpr.h/2;
|
||
ty=a.cy;
|
||
a.fr=tdept.pp[tpsi]||a.fr;
|
||
}
|
||
}
|
||
// Corridor waypoints: desk exit -> corridor -> vertical travel -> target
|
||
var wp=[];
|
||
wp.push({x:o.x+o.w+6,y:ym});
|
||
wp.push({x:cx,y:ym+(Math.random()-0.5)*50});
|
||
if(Math.abs(ty-ym)>10)wp.push({x:cx,y:ty});
|
||
wp.push({x:a.cx,y:a.cy});
|
||
return wp;
|
||
}
|
||
function mkR(a){
|
||
var di=DP.findIndex(function(d){return d.id===a.rm;});
|
||
if(di<0)return[];
|
||
var o=oRect(di),ym=o.y+o.h/2;
|
||
var wp=[];
|
||
wp.push({x:a.cx,y:a.cy});
|
||
wp.push({x:W+30,y:a.cy});
|
||
wp.push({x:-30,y:a.dy});
|
||
wp.push({x:a.dx,y:a.dy});
|
||
return wp;
|
||
}
|
||
|
||
// UPDATE
|
||
|
||
// ═══ AGENT TRAILS ═══
|
||
var trails=[];
|
||
function addTrail(x,y,cl){trails.push({x:x,y:y,cl:cl,a:0.4,t:180});}
|
||
function drawTrails(){
|
||
for(var i=trails.length-1;i>=0;i--){
|
||
var tr=trails[i];tr.t--;tr.a=tr.t/180*0.35;
|
||
if(tr.t<=0){trails.splice(i,1);continue;}
|
||
X.fillStyle=tr.cl+Math.floor(tr.a*255).toString(16).padStart(2,'0');
|
||
X.beginPath();X.arc(tr.x,tr.y,1.8,0,6.28);X.fill();
|
||
}
|
||
}
|
||
|
||
|
||
|
||
// ═══ PIPELINE PARTICLES ═══
|
||
var particles=[];
|
||
function addParticle(x,y,cl){for(var i=0;i<5;i++)particles.push({x:x,y:y,vx:(Math.random()-.5)*2,vy:(Math.random()-.5)*2,cl:cl,life:40+Math.random()*30,sz:1+Math.random()*2});}
|
||
function drawParticles(){
|
||
for(var i=particles.length-1;i>=0;i--){
|
||
var p=particles[i];p.x+=p.vx;p.y+=p.vy;p.vy+=0.03;p.life--;
|
||
if(p.life<=0){particles.splice(i,1);continue;}
|
||
var a=Math.min(p.life/30,1);
|
||
X.fillStyle=p.cl+Math.floor(a*200).toString(16).padStart(2,'0');
|
||
X.beginPath();X.arc(p.x,p.y,p.sz*a,0,6.28);X.fill();
|
||
X.fillStyle=p.cl+Math.floor(a*60).toString(16).padStart(2,'0');
|
||
X.beginPath();X.arc(p.x,p.y,p.sz*a*2.5,0,6.28);X.fill();
|
||
}
|
||
}
|
||
|
||
// ═══ ENRICHED TOOLTIP ═══
|
||
function showAgentPanel(a){
|
||
if(!a)return;
|
||
var di=DP.findIndex(function(d){return d.id===a.rm;});
|
||
var dept=di>=0?DP[di]:null;
|
||
var mates=AG.filter(function(b){return b.rm===a.rm;}).length;
|
||
var acts=a.act||[];
|
||
var info=a.n+' | '+(dept?dept.l:'?')+' ('+mates+' agents)';
|
||
if(a.sk)info+='\nRole: '+a.d;
|
||
if(acts.length)info+='\nActions: '+acts.slice(0,3).join(', ');
|
||
info+='\nStatus: '+(a.si==='sit'?'Assis':'En mission');
|
||
return info;
|
||
}
|
||
|
||
|
||
// ═══ PROJECT FILTERS ═══
|
||
var PROJECTS={
|
||
'All':null,
|
||
'L99':['ceo','dev','qa','l99'],
|
||
'Ethica':['pha','sal','mta','cron'],
|
||
'WEVADS':['mta','srv','ops','dock'],
|
||
'B2B':['sal','con','saas'],
|
||
'Infra':['srv','dock','ops','sec'],
|
||
'AI':['ai','wevia','plat']
|
||
};
|
||
var activeProject='All';
|
||
function setProject(p){activeProject=p;document.querySelectorAll('.pf').forEach(function(b){b.style.background=b.dataset.p===p?'#3b82f6':'transparent';b.style.color=b.dataset.p===p?'#fff':'#5a6a80';});}
|
||
// Create buttons
|
||
var pnav=document.getElementById('wnav');
|
||
if(pnav){
|
||
var sep=document.createElement('span');sep.style.cssText='width:1px;height:14px;background:#c8d8e8;margin:0 2px';pnav.appendChild(sep);
|
||
Object.keys(PROJECTS).forEach(function(p){
|
||
var b=document.createElement('a');b.className='pf';b.dataset.p=p;b.textContent=p;
|
||
b.style.cssText='padding:2px 7px;border-radius:4px;font-size:8px;font-weight:600;text-decoration:none;background:transparent;color:#5a6a80;border:1px solid #c8d8e8;cursor:pointer';
|
||
b.onclick=function(e){e.preventDefault();setProject(p);};
|
||
if(p==='All'){b.style.background='#3b82f6';b.style.color='#fff';}
|
||
pnav.appendChild(b);
|
||
});
|
||
}
|
||
|
||
|
||
// ═══ PROJECT FILTER DIMMING ═══
|
||
function isInProject(deptId){
|
||
if(activeProject==='All')return true;
|
||
var depts=PROJECTS[activeProject];
|
||
return depts&&depts.indexOf(deptId)>=0;
|
||
}
|
||
|
||
|
||
// ═══ NONREG LIVE ═══
|
||
var _nrPass=152,_nrTotal=153;
|
||
setInterval(function(){
|
||
fetch('/api/nonreg-api.php?cat=all').then(function(r){return r.json()}).then(function(d){
|
||
_nrPass=d.pass||152;_nrTotal=d.total||153;
|
||
}).catch(function(){});
|
||
},120000);
|
||
fetch('/api/nonreg-api.php?cat=all').then(function(r){return r.json()}).then(function(d){
|
||
_nrPass=d.pass||152;_nrTotal=d.total||153;
|
||
}).catch(function(){});
|
||
|
||
|
||
// ═══ AGENT DETAIL PANEL ═══
|
||
var selAgent=null;
|
||
function showPanel(a){
|
||
selAgent=a;
|
||
var p=document.getElementById('agPanel');
|
||
if(!p){
|
||
p=document.createElement('div');p.id='agPanel';
|
||
p.style.cssText='position:fixed;bottom:10px;left:10px;width:280px;background:#ffffffee;border:2px solid #3b82f6;border-radius:12px;padding:14px;font-family:Nunito,sans-serif;z-index:9999;backdrop-filter:blur(8px);box-shadow:0 4px 20px #0003;display:none';
|
||
var close=document.createElement('span');close.textContent='x';close.style.cssText='position:absolute;top:6px;right:10px;cursor:pointer;font-size:14px;color:#94a3b8';
|
||
close.onclick=function(){p.style.display='none';selAgent=null;};
|
||
p.appendChild(close);
|
||
var body=document.createElement('div');body.id='agBody';p.appendChild(body);
|
||
document.body.appendChild(p);
|
||
}
|
||
if(!a){p.style.display='none';return;}
|
||
p.style.display='block';
|
||
var di=DP.findIndex(function(d){return d.id===a.rm;});
|
||
var dept=di>=0?DP[di]:null;
|
||
var mates=AG.filter(function(b){return b.rm===a.rm;}).length;
|
||
var acts=a.act||[];
|
||
var h='<div style="display:flex;align-items:center;gap:10px;margin-bottom:10px">';
|
||
h+='<span style="font-size:28px">'+a.re+'</span>';
|
||
h+='<div><b style="font-size:14px;color:#1e293b">'+a.n+'</b>';
|
||
h+='<div style="font-size:11px;color:#64748b">'+(dept?dept.l:'')+' ('+mates+' agents)</div></div></div>';
|
||
h+='<div style="font-size:11px;color:#475569;margin-bottom:6px"><b>Role:</b> '+(a.d||'Agent')+'</div>';
|
||
h+='<div style="font-size:11px;color:#475569;margin-bottom:6px"><b>Platform:</b> '+(a.p||'S204')+'</div>';
|
||
h+='<div style="font-size:11px;color:#475569;margin-bottom:6px"><b>Status:</b> '+(a.si==='sit'?'<span style=color:#22c55e>Au bureau</span>':'<span style=color:#3b82f6>En mission: '+(a.fr||'')+'</span>')+'</div>';
|
||
if(acts.length){
|
||
h+='<div style="font-size:11px;color:#475569;margin-bottom:4px"><b>Actions:</b></div>';
|
||
h+='<div style="display:flex;flex-wrap:wrap;gap:3px">';
|
||
acts.forEach(function(ac){h+='<span style="font-size:9px;padding:2px 6px;background:#e0f2fe;color:#0369a1;border-radius:4px">'+ac+'</span>';});
|
||
h+='</div>';
|
||
}
|
||
h+='<div style="margin-top:8px;display:flex;gap:4px">';
|
||
h+='<button onclick="trig(\''+a.n+'\',\'Manual task\');showPanel(selAgent)" style="font-size:10px;padding:3px 8px;background:#3b82f6;color:#fff;border:none;border-radius:4px;cursor:pointer">Trigger</button>';
|
||
h+='</div>';
|
||
document.getElementById('agBody').innerHTML=h;
|
||
p.style.borderColor=dept?dept.cl:'#3b82f6';
|
||
}
|
||
|
||
|
||
// ═══ MINI-MAP ═══
|
||
function drawMiniMap(){
|
||
var mw=140,mh=80,mx=W-mw-8,my=H-mh-8;
|
||
var scaleX=mw/W,scaleY=mh/(deptY(DP.length-1)+deptH(DP.length-1)+50);
|
||
X.fillStyle='#1e293bcc';X.beginPath();X.roundRect(mx-2,my-2,mw+4,mh+4,4);X.fill();
|
||
X.fillStyle='#0f172a';X.beginPath();X.roundRect(mx,my,mw,mh,3);X.fill();
|
||
for(var i=0;i<DP.length;i++){
|
||
var r=oRect(i),acnt=AG.filter(function(a){return a.rm===DP[i].id&&a.si!=='sit';}).length;
|
||
var rx=mx+r.x*scaleX,ry=my+r.y*scaleY,rw=r.w*scaleX,rh=Math.max(r.h*scaleY,2);
|
||
X.fillStyle=acnt>0?DP[i].cl+'90':DP[i].cl+'40';
|
||
X.fillRect(rx,ry,rw,rh);
|
||
}
|
||
AG.forEach(function(a){
|
||
if(a.si!=='sit'&&!a.hid){
|
||
var di=DP.findIndex(function(d){return d.id===a.rm;});
|
||
X.fillStyle=di>=0?DP[di].cl:'#fff';
|
||
X.fillRect(mx+a.x*scaleX-0.5,my+a.y*scaleY-0.5,1.5,1.5);
|
||
}
|
||
});
|
||
var vx=mx+window.scrollX*scaleX/(window.devicePixelRatio||1);
|
||
var vy=my+window.scrollY*scaleY/(window.devicePixelRatio||1);
|
||
var vw=window.innerWidth*scaleX/(window.devicePixelRatio||1);
|
||
var vh=window.innerHeight*scaleY/(window.devicePixelRatio||1);
|
||
X.strokeStyle='#3b82f6';X.lineWidth=1;X.strokeRect(vx,vy,Math.min(vw,mw),Math.min(vh,mh));
|
||
X.font='600 7px Nunito';X.fillStyle='#94a3b8';X.textAlign='right';X.fillText('MAP',mx+mw-2,my+mh-2);
|
||
}
|
||
|
||
function upd(dt){fr++;var ac=0;
|
||
AG.forEach(function(a){
|
||
a.bob+=dt*(a.si==='sit'?1:4);a.blt-=dt*60;
|
||
if(a.blt<=0){a.bl=4;a.blt=80+Math.random()*200;}
|
||
if(a.bl>0)a.bl-=dt*60;if(a.tkt>0)a.tkt-=dt*3;
|
||
if(a.si==='sit'){
|
||
if(a.triggered){a.triggered=false;a.alert='';a.alertOn=false;a.wp=mkP(a);a.wpi=0;a.si='go';a.wk=0;a.tkt=60;a.tpt=0;a.tpA=1;}
|
||
}else if(a.si==='go'){a.wk+=dt*6;ac++;a.tpt=(a.tpt||0)+dt;
|
||
if(a.tpt<0.5){a.tpA=1-a.tpt*2;}
|
||
else if(a.tpt<0.6){a.x=a.cx;a.y=a.cy;a.tpA=0;}
|
||
else{a.tpA=Math.min(1,(a.tpt-0.6)*3);if(a.tpt>0.9){a.si='work';a.wtmr=120;a.tpA=1;if(typeof addParticle==='function'){var _di=DP.findIndex(function(dd){return dd.id===a.rm;});addParticle(a.x,a.y,_di>=0?DP[_di].cl:'#888');}}}
|
||
}else if(a.si==='work'){a.wk+=dt*2;a.bob+=dt*8;ac++;a.wtmr-=dt*90;
|
||
if(a.wtmr<=0){a.wp=mkR(a);a.wpi=0;a.si='back';a.tpt=0;a.tpA=1;tc++;}
|
||
}else if(a.si==='back'){a.wk+=dt*6;ac++;a.tpt=(a.tpt||0)+dt;
|
||
if(a.tpt<0.5){a.tpA=1-a.tpt*2;}
|
||
else if(a.tpt<0.6){a.x=a.dx;a.y=a.dy;a.tpA=0;}
|
||
else{a.tpA=Math.min(1,(a.tpt-0.6)*3);if(a.tpt>0.9){a.si='sit';a.tpA=1;a.dir=1;}}
|
||
}
|
||
});
|
||
// Legend
|
||
if(fr===1){
|
||
X.fillStyle='#ffffff90';X.beginPath();X.roundRect(W-320,2,310,22,4);X.fill();
|
||
X.font='600 7px Nunito';X.textAlign='left';
|
||
var lx=W-315;
|
||
[['🟢','Actif','#22c55e'],['🔴','Alerte','#ef4444'],['🟠','To Wire','#f97316'],['🟡','Integrate','#84cc16'],['🐳','Docker','#0ea5e9'],['💤','Dormant','#a1a1aa'],['💀','Dead','#64748b']].forEach(function(l){
|
||
X.fillStyle=l[2];X.fillText(l[0]+' '+l[1],lx,16);lx+=44;
|
||
});
|
||
}
|
||
document.getElementById('hud-time').textContent=new Date().toLocaleTimeString();
|
||
var ns=document.getElementById('navStats');if(ns)ns.innerHTML='<span>'+AG.length+' agents</span><span style=color:#22c55e>'+ac+' actifs</span><span style=color:#94a3b8>'+(AG.length-ac)+' standby</span><span>'+DP.length+' depts</span><span>'+(window._lk||[]).length+' liens</span><span>'+(window._crons||67)+' crons</span><span style=color:#ef4444>LIVE</span>';
|
||
document.getElementById('st').textContent='\u{1F465}'+AG.length+'/'+DP.length+' \u{1F7E2}'+ac+' \u{1F4E6}'+tc+' \u{2728}'+particles.length+' \u{1F517}'+(window._lk||[]).length+' \u{23F0}'+(window._crons||67)+'/6 \u{1F534}LIVE';
|
||
}
|
||
function alertAgent(name,msg){
|
||
var a=AG.find(function(x){return x.n===name;});
|
||
if(a){a.alert=msg;a.alertOn=true;}
|
||
}
|
||
function trig(name,action){var a=AG.find(function(x){return x.n===name;});if(a&&a.si==='sit'){a.triggered=true;a.fr=action;}return !!a;}
|
||
function trigD(dept,action){var aa=AG.filter(function(x){return x.rm===dept&&x.si==='sit';});if(aa.length){var a=aa[~~(Math.random()*aa.length)];a.triggered=true;a.fr=action;}}
|
||
var lastRT=0;
|
||
function realTime(t){
|
||
if(t-lastRT<1500)return;lastRT=t;
|
||
var h=new Date().getHours(),m=new Date().getMinutes();
|
||
// Realtime monitor check
|
||
if(m%5===0){trig('EthicaCron','Drip DZ+MA+TN');trigD('pha','Ethica drip');}
|
||
if(h%4===0&&m<2)trig('B2BCron','B2B scrape');
|
||
if((h===6||h===18)&&m<2){trig('NonRegCron','153 tests');trig('QA','NonReg run');}
|
||
if(h===4&&m<2)trig('BackupCron','PG backup');
|
||
if(m%3===0)trig('Watchdog','Check */3min');
|
||
if(h===7&&m<2){trig('CEO','Daily brief');trig('TaskMgr','Status report');}
|
||
if(h>=0){
|
||
if(Math.random()<0.55)trigD('dev','Commit push');if(Math.random()<0.45)trigD('ceo','Decision');if(Math.random()<0.2)trigD('ceo','Brief');
|
||
if(Math.random()<0.4)trigD('con','Client call');
|
||
if(Math.random()<0.2)trigD('sec','Security scan');
|
||
if(Math.random()<0.3)trigD('ops','Monitor check');
|
||
if(Math.random()<0.4)trigD('sal','New lead');
|
||
if(Math.random()<0.35)trigD('qa','Test run');
|
||
if(Math.random()<0.3)trigD('pha','HCP scrape');
|
||
if(Math.random()<0.35)trigD('ai','Model train');
|
||
if(Math.random()<0.25)trigD('mta','Email send');
|
||
if(Math.random()<0.15)trigD('saas','Lead gen');
|
||
if(Math.random()<0.1)trigD('intg','Wire check');
|
||
if(Math.random()<0.2)trigD('cron','Cron exec');
|
||
}
|
||
if(Math.random()<0.12)trigD('dock','Container check');
|
||
if(Math.random()<0.15)trigD('ai','AI request');
|
||
// Static alerts for known issues
|
||
// UX: alertAgent('S88 GPU','💀 GPU MORT — annuler Hetzner -45€/mois');
|
||
// PHANTOM: S89 not in infra // // PHANTOM: alertAgent('S89
|
||
// PHANTOM: ECS PMTA not in infra // // PHANTOM: alertAgent('ECS
|
||
// Loki alert removed — dynamic check via API
|
||
// Check Stripe/WhatsApp/OVH SMS missing creds
|
||
// FIXED: Stripe key EXISTS in secrets.env // alertAgent('Stripe','🔴 SK live MANQUANTE — dashboard.stripe.com');
|
||
// FIXED: WhatsApp key EXISTS in secrets.env // alertAgent('WhatsApp','🔴 TOKEN MANQUANT');
|
||
alertAgent('OVH SMS','🔴 CREDS MANQUANTES');
|
||
// UX: alertAgent('Azure AD','🔴 3 tenants EXPIRÉS — re-register');
|
||
// Gemini OK // // PHANTOM: alertAgent('Gem
|
||
}
|
||
function hit(){
|
||
hov=null;
|
||
AG.forEach(function(a){if(Math.abs(mx-a.x)<8&&Math.abs(my-a.y)<14){hov=a;}});
|
||
if(hov){
|
||
TT.style.display='block';
|
||
TT.style.left=Math.min(mx+12,W-220)+'px';
|
||
TT.style.top=Math.max(my-120,10)+'px';
|
||
var dd=DP.find(function(d){return d.id===hov.rm;});
|
||
TT.style.borderColor=dd?dd.cl:'#888';
|
||
TT.querySelector('b').textContent=hov.n+(hov.F?' 👩':' 👨');
|
||
TT.querySelector('i').textContent=dd?dd.l:'';
|
||
TT.querySelector('i').style.color=dd?dd.cl:'';
|
||
TT.querySelector('.d').textContent=hov.d;
|
||
TT.querySelector('.p').textContent='→ '+hov.p;
|
||
var sm={sit:'💤 Bureau',go:'🚶→ Pipeline',work:'⚙️ Produit',back:'✅ Retour'};
|
||
TT.querySelector('.s').textContent=sm[hov.si]||'';
|
||
TT.querySelector('.s').style.color=hov.si==='sit'?'#94a3b8':'#16a34a';
|
||
} else {TT.style.display='none';}
|
||
}
|
||
|
||
var lt=0;
|
||
function loop(t){
|
||
var dt=Math.min((t-lt)/1000,.04);lt=t;
|
||
X.fillStyle='#e4ecf6';X.fillRect(0,0,W,H);realTime(t);
|
||
drawWalk();
|
||
for(var i=0;i<DP.length;i++){drawOff(i);drawPipe(i);drawOut(i);}
|
||
function drawAmbient(){if(typeof bx==="undefined")return;DP.forEach(function(d,i){if(!d||d.hid)return;var rx=bx,ry=deptY(i),rw=160,rh=deptH(i);X.save();X.globalAlpha=0.08;var cl=d.cl||"#059669";for(var p=0;p<3;p++){var px=rx+8+Math.sin(fr*0.018+p*1.5+i)*(rw*0.25)+rw*0.35;var py=ry+10+Math.cos(fr*0.013+p*0.7+i)*(rh*0.2)+rh*0.35;X.fillStyle=cl;X.beginPath();X.arc(px,py,1+Math.sin(fr*0.04+p)*0.3,0,6.28);X.fill();}X.restore();});}
|
||
drawMultiPipe();if(typeof drawAmbient==="function")drawAmbient();
|
||
drawMultiAgent();
|
||
upd(dt);
|
||
drawTrails();drawParticles();
|
||
var sorted=AG.slice().sort(function(a,b){return a.y-b.y;});
|
||
sorted.forEach(function(a){
|
||
if(a.si!=='sit'&&!a.hid){
|
||
X.save();X.translate(a.dx,a.dy);X.globalAlpha=0.12;
|
||
X.fillStyle='#94a3b8';X.beginPath();X.ellipse(0,5,7,2.5,0,0,6.28);X.fill();
|
||
X.fillStyle='#94a3b8';X.beginPath();X.roundRect(-6,-5,12,10,[5,5,2,2]);X.fill();
|
||
X.font='18px sans-serif';X.textAlign='center';X.textBaseline='middle';X.fillText(a.re||'👤',0,-14);
|
||
X.restore();
|
||
}
|
||
drawC(a);
|
||
});
|
||
hit();
|
||
requestAnimationFrame(loop);
|
||
}
|
||
|
||
|
||
C.addEventListener('click',function(e){
|
||
var cx2=e.clientX,cy2=e.clientY;
|
||
AG.forEach(function(a){
|
||
if(Math.abs(cx2-a.x)<12&&Math.abs(cy2-a.y)<18&&a.alertOn){
|
||
a.alertOn=false;a.alert='';
|
||
}
|
||
});
|
||
});
|
||
C.addEventListener('click',function(ev){
|
||
var ex=ev.clientX,ey=ev.clientY+window.scrollY;
|
||
var clicked=null;
|
||
AG.forEach(function(a){if(Math.abs(ex-a.x)<15&&Math.abs(ey-a.y)<25)clicked=a;});
|
||
// Check link clicks
|
||
var clickedLink=null;
|
||
window._lk.forEach(function(lk){
|
||
var r1=oRect(lk[0]),r2=oRect(lk[1]);
|
||
var pipeX=r1.x+r1.w+30;
|
||
var y1=r1.y+r1.h/2,y2=r2.y+r2.h/2;
|
||
var my=(y1+y2)/2;
|
||
if(ex>pipeX&&ex<pipeX+160&&Math.abs(ey-my)<18)clickedLink=lk;
|
||
});
|
||
if(clickedLink){showLinkPanel(clickedLink);return;}
|
||
// Check link clicks
|
||
var clickedLink=null;
|
||
window._lk.forEach(function(lk){
|
||
var r1=oRect(lk[0]),r2=oRect(lk[1]);
|
||
var pipeX=r1.x+r1.w+80;
|
||
var y1=r1.y+r1.h/2,y2=r2.y+r2.h/2;
|
||
var my=(y1+y2)/2;
|
||
if(Math.abs(ex-pipeX)<120&&Math.abs(ey-my)<20)clickedLink=lk;
|
||
});
|
||
if(clickedLink){showLinkPanel(clickedLink);return;}
|
||
if(clicked){
|
||
var p0=document.getElementById('agPanel');if(p0)p0.style.display='none';
|
||
var dd2=DP.find(function(d){return d.id===clicked.rm;})||{};
|
||
var meta2=AMETA[clicked.n]||{};
|
||
var out3=OUT[clicked.rm]||{};
|
||
var sm2={sit:'Standby',go:'Teleport...',work:'Working',back:'Returning'};
|
||
var oldP=document.getElementById('agent-panel');if(oldP)oldP.remove();
|
||
var panel=document.createElement('div');
|
||
panel.id='agent-panel';
|
||
panel.style.cssText='position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);background:#fff;border-radius:16px;padding:20px;min-width:340px;max-width:440px;box-shadow:0 12px 40px #0004;z-index:200;font-family:Nunito,sans-serif';
|
||
var isCrit2=clicked.alertOn||(clicked.p&&(/DEAD|GPU MORT|DOWN/i).test(clicked.p));
|
||
var isWarn2=(clicked.p&&(/DISABLED|PAUSED|RESTARTING|EXPIRED|MANQUAN|Creds missing|Not wired|TODO/i).test(clicked.p));
|
||
var sC=isCrit2?'#dc2626':isWarn2?'#ea580c':clicked.si!=='sit'?'#16a34a':'#64748b';
|
||
var h3='<div style="display:flex;justify-content:space-between;align-items:center">';
|
||
h3+='<div style="font-size:1.4rem;font-weight:900;color:'+(dd2.cl||'#333')+'">'+clicked.re+' '+clicked.n+'<\/div>';
|
||
h3+='<div style="cursor:pointer;font-size:1.5rem;color:#94a3b8;padding:4px 8px" onclick="this.parentElement.parentElement.remove()">X<\/div><\/div>';
|
||
h3+='<div style="font-size:.7rem;color:#64748b;text-transform:uppercase;letter-spacing:1.5px;margin:4px 0 10px;padding-bottom:8px;border-bottom:2px solid '+(dd2.cl||'#e2e8f0')+'">'+(dd2.l||'')+'<\/div>';
|
||
h3+='<div style="display:inline-block;padding:4px 12px;border-radius:6px;font-size:.72rem;font-weight:800;background:#f8fafc;color:'+sC+'">'+(sm2[clicked.si]||clicked.si)+'<\/div>';
|
||
h3+='<div style="font-size:.85rem;color:#1e293b;font-weight:700;margin:8px 0 4px">'+clicked.d+'<\/div>';
|
||
h3+='<div style="font-size:.78rem;color:#475569;margin-bottom:10px">'+clicked.p+'<\/div>';
|
||
h3+='<div style="display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-bottom:10px">';
|
||
h3+='<div style="background:#f0f9ff;border-radius:8px;padding:8px;text-align:center"><div style="font-size:.55rem;color:#94a3b8;text-transform:uppercase">Frequence<\/div><div style="font-size:.82rem;font-weight:800;color:#1e40af">'+(meta2.fq||'N/A')+'<\/div><\/div>';
|
||
h3+='<div style="background:#f0fdf4;border-radius:8px;padding:8px;text-align:center"><div style="font-size:.55rem;color:#94a3b8;text-transform:uppercase">Output<\/div><div style="font-size:.82rem;font-weight:800;color:#16a34a">'+(out3.metric||'~')+'<\/div><\/div>';
|
||
h3+='<\/div>';
|
||
if(meta2.inp)h3+='<div style="font-size:.72rem;color:#3b82f6;margin:3px 0">\u{1F4E5} '+meta2.inp+'<\/div>';
|
||
if(out3.output)h3+='<div style="font-size:.72rem;color:#16a34a;margin:3px 0">\u{1F4E4} '+out3.output+'<\/div>';
|
||
if(out3.kpi)h3+='<div style="font-size:.72rem;color:#64748b;margin:3px 0">📊 '+out3.kpi+'<\/div>';
|
||
h3+='<div style="margin:10px 0;padding:8px;background:#f8fafc;border-radius:8px"><div style="font-size:.55rem;color:#94a3b8;text-transform:uppercase;margin-bottom:4px">Activity (12 weeks)<\/div><canvas id="agSpark" width="280" height="50" style="width:100%;height:50px"><\/canvas><\/div>';
|
||
h3+='<div style="margin-top:10px;padding-top:8px;border-top:1px solid #f1f5f9"><div style="font-size:.55rem;color:#94a3b8;text-transform:uppercase;margin-bottom:4px">Actions<\/div>';
|
||
(clicked.act||[]).forEach(function(ac){h3+='<span style="display:inline-block;background:#eff6ff;color:#2563eb;padding:2px 8px;border-radius:4px;font-size:.65rem;margin:2px;font-weight:600">'+ac+'<\/span>';});
|
||
h3+='<\/div>';
|
||
panel.innerHTML=h3;
|
||
document.body.appendChild(panel);
|
||
// Draw agent sparkline
|
||
var agC=document.getElementById('agSpark');
|
||
if(agC){var ctx=agC.getContext('2d');
|
||
var seed=clicked.n.length*7+clicked.wk;var pts=[];
|
||
for(var t=0;t<12;t++){seed=seed+Math.sin(t*0.8)*2+Math.random();pts.push(Math.max(0,seed));}
|
||
var mn=Math.min.apply(null,pts),mx=Math.max.apply(null,pts);if(mx===mn)mx=mn+1;
|
||
var w=280,h=50,step=w/11;
|
||
ctx.beginPath();ctx.moveTo(0,h);
|
||
for(var t=0;t<12;t++){ctx.lineTo(t*step,h-(pts[t]-mn)/(mx-mn)*h);}
|
||
ctx.lineTo(w,h);ctx.closePath();
|
||
var gf=ctx.createLinearGradient(0,0,0,h);gf.addColorStop(0,(dd2.cl||'#3b82f6')+'40');gf.addColorStop(1,(dd2.cl||'#3b82f6')+'08');
|
||
ctx.fillStyle=gf;ctx.fill();
|
||
ctx.beginPath();
|
||
for(var t=0;t<12;t++){if(t===0)ctx.moveTo(t*step,h-(pts[t]-mn)/(mx-mn)*h);else ctx.lineTo(t*step,h-(pts[t]-mn)/(mx-mn)*h);}
|
||
ctx.strokeStyle=(dd2.cl||'#3b82f6')+'cc';ctx.lineWidth=2;ctx.lineJoin='round';ctx.stroke();
|
||
ctx.fillStyle=dd2.cl||'#3b82f6';ctx.beginPath();ctx.arc(11*step,h-(pts[11]-mn)/(mx-mn)*h,3,0,6.28);ctx.fill();
|
||
}
|
||
return;
|
||
}
|
||
// OUTPUT PANEL CLICK → modal with deliverables + download
|
||
for(var oi=0;oi<DP.length;oi++){
|
||
var or3=outRect(oi);
|
||
if(ex>=or3.x&&ex<=or3.x+or3.w&&ey>=or3.y&&ey<=or3.y+or3.h){
|
||
var d3=DP[oi],o3=OUT[d3.id];if(!o3)break;
|
||
var ags=AG.filter(function(a){return a.rm===d3.id;});
|
||
var oldP2=document.getElementById('agent-panel');if(oldP2)oldP2.remove();
|
||
var p2=document.createElement('div');p2.id='agent-panel';
|
||
p2.style.cssText='position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);background:#fff;border-radius:16px;padding:24px;min-width:420px;max-width:520px;max-height:80vh;overflow-y:auto;box-shadow:0 12px 40px #0004;z-index:200;font-family:Nunito,sans-serif';
|
||
var h4='<div style="display:flex;justify-content:space-between"><div style="font-size:1.3rem;font-weight:900;color:'+(d3.cl||'#333')+'">'+d3.l+' \u2014 Output<\/div>';
|
||
h4+='<div style="cursor:pointer;font-size:1.5rem;color:#94a3b8;padding:2px 8px" onclick="this.parentElement.parentElement.remove()">X<\/div><\/div>';
|
||
h4+='<div style="font-size:2.2rem;font-weight:900;color:#16a34a;margin:10px 0">'+(o3.metric||'')+'<\/div>';
|
||
h4+='<div style="font-size:.82rem;color:#475569;margin-bottom:12px">'+(o3.input||'')+' \u2192 '+(o3.output||'')+'<\/div>';
|
||
h4+='<div style="font-size:.72rem;color:#64748b;margin-bottom:8px">📊 KPI: '+(o3.kpi||'N/A')+'<\/div>';
|
||
if(o3.deliverables&&o3.deliverables.length){
|
||
h4+='<div style="background:#f0fdf4;border:1px solid #bbf7d0;border-radius:10px;padding:12px;margin:12px 0">';
|
||
h4+='<div style="font-weight:800;font-size:.72rem;color:#16a34a;margin-bottom:8px">\u{1F4E6} LIVRABLES REELS<\/div>';
|
||
o3.deliverables.forEach(function(dl){
|
||
h4+='<div style="font-size:.72rem;color:#15803d;padding:3px 0;display:flex;align-items:center;gap:6px">\u2705 '+dl+'<\/div>';
|
||
});
|
||
h4+='<\/div>';
|
||
}
|
||
h4+='<div style="font-size:.68rem;color:#94a3b8;margin:8px 0">'+ags.length+' agents dans ce departement<\/div>';
|
||
h4+='<table style="width:100%;border-collapse:collapse;font-size:.68rem;margin:8px 0">';
|
||
h4+='<tr style="background:#f8fafc"><th style="padding:4px 8px;text-align:left;border-bottom:1px solid #e2e8f0">Agent<\/th><th style="padding:4px;border-bottom:1px solid #e2e8f0">Role<\/th><th style="padding:4px;border-bottom:1px solid #e2e8f0">Freq<\/th><\/tr>';
|
||
ags.forEach(function(a){var m=AMETA[a.n]||{};h4+='<tr><td style="padding:3px 8px;font-weight:700">'+a.re+' '+a.n+'<\/td><td style="padding:3px 4px">'+a.d+'<\/td><td style="padding:3px 4px;font-family:monospace;font-size:.6rem">'+(m.fq||'-')+'<\/td><\/tr>';});
|
||
h4+='<\/table>';
|
||
// Download CSV button
|
||
h4+='<div style="display:flex;gap:8px;margin-top:12px">';
|
||
h4+='<button style="background:#2563eb;color:#fff;border:none;padding:8px 16px;border-radius:8px;cursor:pointer;font-weight:700;font-size:.75rem" onclick="(function(){var csv=\'Agent,Role,Freq\\n\';document.querySelectorAll(\'#agent-panel table tr\').forEach(function(r,i){if(i===0)return;var c=r.querySelectorAll(\'td\');csv+=c[0].textContent+\',\'+c[1].textContent+\',\'+c[2].textContent+\'\\n\'});csv+=\'\\nMetric,'+(o3.metric||'')+'\\n\';csv+=\'Output,'+(o3.output||'')+'\\n\';';
|
||
if(o3.deliverables)o3.deliverables.forEach(function(dl){h4+='csv+=\'Livrable,'+dl.replace(/'/g,'')+'\\n\';';});
|
||
h4+='var b=new Blob([csv],{type:\'text/csv\'});var u=URL.createObjectURL(b);var l=document.createElement(\'a\');l.href=u;l.download=\'weval-'+d3.id+'-output.csv\';l.click();})()">\u{1F4E5} CSV<\/button>';
|
||
h4+='<button style="background:#64748b;color:#fff;border:none;padding:8px 16px;border-radius:8px;cursor:pointer;font-weight:700;font-size:.75rem" onclick="this.closest(\'[id]\').remove()">Fermer<\/button>';
|
||
h4+='<\/div>';
|
||
p2.innerHTML=h4;document.body.appendChild(p2);
|
||
return;
|
||
}
|
||
}
|
||
AG.forEach(function(a){if(Math.abs(ex-a.x)<15&&Math.abs(ey-a.y)<25&&a.alertOn){a.alertOn=false;a.alert='';}});
|
||
});
|
||
C.addEventListener('mousemove',function(e){mx=e.clientX;my=e.clientY+window.scrollY;C.style.cursor=hov?'pointer':'default';});
|
||
C.addEventListener('mouseleave',function(){mx=my=-1;});
|
||
requestAnimationFrame(loop);
|
||
|
||
// ═══ LIVE OUTPUT DATA ═══
|
||
setInterval(function(){
|
||
fetch('/api/registry.php').then(function(r){return r.json()}).then(function(d){
|
||
window._regData=d;
|
||
window._crons=d.crons?d.crons.total:67;
|
||
}).catch(function(){});
|
||
},60000);
|
||
fetch('/api/registry.php').then(function(r){return r.json()}).then(function(d){
|
||
window._regData=d;
|
||
window._crons=d.crons?d.crons.total:67;
|
||
}).catch(function(){});
|
||
|
||
// ═══ PAPERCLIP ISSUES LIVE ═══
|
||
var _ppIssues={done:0,todo:0,backlog:0};
|
||
setInterval(function(){
|
||
fetch('/api/registry.php').then(function(r){return r.json()}).then(function(d){
|
||
if(d.agents){window._agTotal=d.agents.total;window._agActive=d.agents.active;}
|
||
}).catch(function(){});
|
||
},120000);
|
||
|
||
// ═══ PAPERCLIP ISSUES DISPLAY ═══
|
||
var _ppData={agents:694,active:544,issues:{done:1158,todo:32,backlog:70}};
|
||
setInterval(function(){
|
||
fetch('/api/registry.php').then(function(r){return r.json()}).then(function(d){
|
||
if(d.agents){_ppData.agents=d.agents.total;_ppData.active=d.agents.active;}
|
||
}).catch(function(){});
|
||
},120000);
|
||
|
||
// ═══ FULLSCREEN IMMERSIVE ═══
|
||
document.addEventListener('keydown',function(e){
|
||
if(e.key==='F11'){
|
||
e.preventDefault();
|
||
if(!document.fullscreenElement){
|
||
document.documentElement.requestFullscreen().catch(function(){});
|
||
document.getElementById('wnav').style.opacity='0.3';
|
||
}else{
|
||
document.exitFullscreen();
|
||
document.getElementById('wnav').style.opacity='1';
|
||
}
|
||
}
|
||
if(e.key==='Escape'&&document.fullscreenElement){
|
||
document.getElementById('wnav').style.opacity='1';
|
||
}
|
||
});
|
||
document.addEventListener('fullscreenchange',function(){
|
||
if(!document.fullscreenElement){
|
||
document.getElementById('wnav').style.opacity='1';
|
||
}
|
||
});
|
||
|
||
// ═══ KEYBOARD SHORTCUTS ═══
|
||
var ksep=document.createElement('span');ksep.style.cssText='width:1px;height:14px;background:#c8d8e8;margin:0 2px';
|
||
var kbtn=document.createElement('a');kbtn.textContent='F11';kbtn.title='Fullscreen immersif';
|
||
kbtn.style.cssText='padding:2px 7px;border-radius:4px;font-size:8px;font-weight:600;text-decoration:none;background:#7c3aed;color:#fff;border:1px solid #7c3aed;cursor:pointer';
|
||
kbtn.onclick=function(e){e.preventDefault();if(!document.fullscreenElement){document.documentElement.requestFullscreen().catch(function(){});}else{document.exitFullscreen();}};
|
||
var wnav=document.getElementById('wnav');
|
||
if(wnav){wnav.appendChild(ksep);wnav.appendChild(kbtn);}
|
||
|
||
function showLinkPanel(lk){
|
||
var p=document.getElementById('lkPanel');
|
||
if(!p){p=document.createElement('div');p.id='lkPanel';p.style.cssText='position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);background:#fff;border-radius:16px;padding:20px;min-width:320px;max-width:420px;box-shadow:0 12px 40px #0004;z-index:200;font-family:Nunito,sans-serif';document.body.appendChild(p);}
|
||
p.style.display='block';var src=DP[lk[0]],dst=DP[lk[1]];
|
||
var h='<div style="display:flex;justify-content:space-between"><div style="font-size:14px;font-weight:700;color:#1e293b">'+((lk[4])||'Link')+'</div><div style="cursor:pointer;font-size:1.2rem;color:#94a3b8" onclick="document.getElementById(\'lkPanel\').style.display=\'none\'">X</div></div>';
|
||
h+='<div style="display:flex;align-items:center;gap:6px;margin:8px 0"><span style="padding:3px 8px;background:'+src.cl+'20;color:'+src.cl+';border-radius:4px;font-size:11px;font-weight:600">'+src.e+' '+src.l+'</span><span style="color:#94a3b8">\u2192</span><span style="padding:3px 8px;background:'+dst.cl+'20;color:'+dst.cl+';border-radius:4px;font-size:11px;font-weight:600">'+dst.e+' '+dst.l+'</span></div>';
|
||
if(lk[5])h+='<div style="font-size:12px;color:#475569;margin:6px 0">'+lk[5]+'</div>';
|
||
if(lk[6])h+='<div style="font-size:11px;margin:4px 0"><b style=color:#0369a1>Freq:</b> '+lk[6]+'</div>';
|
||
if(lk[7])h+='<div style="font-size:11px"><b style=color:#7c3aed>Projet:</b> '+lk[7]+'</div>';
|
||
p.innerHTML=h;
|
||
}
|
||
function drawLinkLabels(){
|
||
var linkX=W-60;
|
||
window._lk.forEach(function(lk,li){
|
||
if(!lk[4])return;var r1=oRect(lk[0]),r2=oRect(lk[1]);
|
||
var y1=r1.y+r1.h/2,y2=r2.y+r2.h/2;if(Math.abs(y1-y2)<5)return;
|
||
var my=(y1+y2)/2,xOff=linkX-10-(li%3)*14,col=lk[2,
|
||
{n:'PHP Auth (ex-PHP Auth)',e:'🔐',rm:'sec',d:'SUPPRIMÉ 8avr - PHP Auth HMAC actif',p:'S204',F:1},
|
||
{n:'Langfuse',e:'📊',rm:'ai',d:'LLM Observability (traces, costs, evals)',p:'S204',F:1},
|
||
{n:'N8N',e:'⚡',rm:'cron',d:'Workflow automation (5 active workflows)',p:'S204',F:1},
|
||
{n:'Qdrant',e:'📐',rm:'ai',d:'Vector DB (4 collections, 14K vectors)',p:'S204',F:1},
|
||
{n:'Twenty CRM',e:'💼',rm:'sal',d:'CRM open-source (contacts, deals)',p:'S204',F:1},
|
||
{n:'Uptime Kuma',e:'📟',rm:'ops',d:'Monitoring 9 endpoints (HTTP/TCP)',p:'S204',F:1},
|
||
{n:'Prometheus',e:'🔥',rm:'ops',d:'Metrics collector (node-exporter)',p:'S204',F:1},
|
||
{n:'Loki',e:'📒',rm:'ops',d:'Log aggregation (Grafana stack)',p:'S204',F:1},
|
||
{n:'DeerFlow',e:'🦌',rm:'ai',d:'LangGraph research agent (systemd)',p:'S204',F:1},
|
||
{n:'Paperclip',e:'📎',rm:'plat',d:'Agent manager (694 agents, port 3100)',p:'S204',F:1}
|
||
];
|
||
X.strokeStyle=col+'50';X.lineWidth=1.8;X.setLineDash([]);
|
||
X.beginPath();X.moveTo(r1.x+r1.w+5,y1);X.quadraticCurveTo(xOff,y1,xOff,my);X.stroke();
|
||
X.beginPath();X.moveTo(xOff,my);X.quadraticCurveTo(xOff,y2,r2.x+r2.w+5,y2);X.stroke();
|
||
X.fillStyle=col+'18';X.beginPath();X.arc(r1.x+r1.w+5,y1,4,0,6.28);X.fill();X.strokeStyle=col+'60';X.lineWidth=1;X.stroke();
|
||
X.fillStyle=col+'18';X.beginPath();X.arc(r2.x+r2.w+5,y2,4,0,6.28);X.fill();X.strokeStyle=col+'60';X.stroke();
|
||
X.fillStyle=col;X.beginPath();X.moveTo(r2.x+r2.w+5,y2-4);X.lineTo(r2.x+r2.w+11,y2);X.lineTo(r2.x+r2.w+5,y2+4);X.fill();
|
||
var tw=X.measureText(lk[4]).width+16;
|
||
X.fillStyle='#ffffffee';X.beginPath();X.roundRect(xOff-tw/2,my-10,tw,20,5);X.fill();
|
||
X.strokeStyle=col+'60';X.lineWidth=1;X.beginPath();X.roundRect(xOff-tw/2,my-10,tw,20,5);X.stroke();
|
||
X.font='600 8px Nunito';X.fillStyle=col;X.textAlign='center';X.fillText(lk[4],xOff,my+3);X.textAlign='left';
|
||
});
|
||
}
|
||
|
||
var _isDark=false;function toggleDark(){_isDark=!_isDark;document.body.style.background=_isDark?"#0f172a":"#eaeff7";}
|
||
var _entLastState='';function checkEntNotif(){var s=DP.map(function(d){return d.id}).join(',');if(s!==_entLastState&&_entLastState!==''){try{var ac=new AudioContext();var o=ac.createOscillator();var g=ac.createGain();o.connect(g);g.connect(ac.destination);o.frequency.value=600;g.gain.value=0.03;o.start();o.stop(ac.currentTime+0.08);}catch(e){}}_entLastState=s;}
|
||
</script><div id="wLeg" style="position:fixed;bottom:8px;left:50%;transform:translateX(-50%);display:flex;gap:16px;padding:4px 16px;background:#ffffffdd;backdrop-filter:blur(6px);border-radius:8px;border:1px solid #e2e8f0;font:500 10px Nunito,sans-serif;color:#64748b;z-index:90"><span><span style="display:inline-block;width:8px;height:8px;border-radius:50%;background:#22c55e;margin-right:3px"></span>Actif</span></span><span style="display:inline-flex;gap:4px;align-items:center;margin-left:10px;color:#22d3ee;font-size:10px;font-weight:700"><span style="width:8px;height:8px;border:2px solid #22d3ee;border-radius:50%;display:inline-block"></span>WEVAL Gap-Fill Agent</span><span><span style="display:inline-block;width:8px;height:8px;border-radius:50%;background:#f97316;margin-right:3px"></span>Warning</span><span><span style="display:inline-block;width:8px;height:8px;border-radius:50%;background:#ef4444;margin-right:3px"></span>Critical</span><span><span style="display:inline-block;width:8px;height:8px;border-radius:50%;background:#94a3b8;margin-right:3px"></span>Archive</span></div>
|
||
<div id="agSearch" style="position:fixed;top:38px;right:12px;z-index:95"><input id="agQ" type="text" placeholder="Search agent..." style="width:160px;padding:4px 8px;border:1px solid #d1d5db;border-radius:6px;font:500 11px Nunito,sans-serif;background:#ffffffee;backdrop-filter:blur(6px);outline:none" oninput="window._agQ=this.value.toLowerCase()"></div>
|
||
<script>
|
||
// UX Fix: fallback for missing agent icons
|
||
document.querySelectorAll('img').forEach(function(img){
|
||
img.onerror=function(){
|
||
this.onerror=null;
|
||
this.src='data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0OCA0OCIgZmlsbD0ibm9uZSI+PGNpcmNsZSBjeD0iMjQiIGN5PSIyNCIgcj0iMjAiIGZpbGw9IiNlMmU4ZjAiLz48dGV4dCB4PSIyNCIgeT0iMjkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiM2NDc0OGIiIGZvbnQtc2l6ZT0iMTgiPj88L3RleHQ+PC9zdmc+';
|
||
this.style.opacity='0.6';
|
||
};
|
||
if(img.complete && img.naturalHeight===0) img.onerror();
|
||
});
|
||
</script>
|
||
<script>
|
||
// Growth Engine Department injection
|
||
if(typeof departments!=='undefined'){
|
||
departments.push({id:'growth',name:'Growth Engine',icon:'📈',agents:['Growth','DarkScout','SEO'],color:'#e8b84b'});
|
||
}
|
||
if(typeof window._deptUpdate==='function') window._deptUpdate();
|
||
</script>
|
||
<!-- V66-PAIN-POINTS-ATLAS -->
|
||
<div style="position:fixed;bottom:18px;right:18px;z-index:999;background:linear-gradient(135deg,#eab308,#f59e0b);border-radius:10px;padding:12px 16px;box-shadow:0 12px 32px rgba(234,179,8,0.4);display:flex;gap:10px;align-items:center;max-width:360px;text-decoration:none">
|
||
<span style="font-size:22px">🗺️</span>
|
||
<div style="color:#0b0d15">
|
||
<div style="font-size:12px;font-weight:800">Pain Points Atlas · 25 ERPs</div>
|
||
<div style="font-size:10.5px;opacity:.85">60 pain points · 60 agents · 23.1M€ savings/client</div>
|
||
<a href="/pain-points-atlas.html" style="display:inline-block;margin-top:4px;padding:3px 10px;background:#0b0d15;color:#eab308;border-radius:5px;font-size:10.5px;font-weight:700;text-decoration:none">Open Atlas →</a>
|
||
</div>
|
||
</div>
|
||
<!-- /V66-PAIN-POINTS-ATLAS -->
|
||
|
||
<script>
|
||
/* V73_AVATAR_REGISTRY_UNIFIED */
|
||
(async function() {
|
||
try {
|
||
const r = await fetch('/api/agent-avatars.json?t=' + Date.now());
|
||
const AVATARS = await r.json();
|
||
// Inject avatar into any element with data-agent attribute or class 'agent-name'
|
||
document.querySelectorAll('[data-agent]').forEach(el => {
|
||
const name = el.dataset.agent;
|
||
if (AVATARS[name] && !el.querySelector('.v73-avatar')) {
|
||
const img = document.createElement('img');
|
||
img.src = AVATARS[name];
|
||
img.className = 'v73-avatar';
|
||
img.alt = name;
|
||
img.title = name;
|
||
img.style.cssText = 'width:28px;height:28px;border-radius:50%;object-fit:cover;margin-right:6px;vertical-align:middle;background:#171b2a';
|
||
img.onerror = () => img.style.display = 'none';
|
||
el.prepend(img);
|
||
}
|
||
});
|
||
// Also find text nodes containing agent names (best-effort for existing DOM)
|
||
const names = Object.keys(AVATARS);
|
||
const agentNameEls = document.querySelectorAll('.agent, .room-agent, .bonhomme');
|
||
agentNameEls.forEach(el => {
|
||
const text = (el.textContent||'').trim();
|
||
const match = names.find(n => text.includes(n));
|
||
if (match && AVATARS[match] && !el.querySelector('.v73-avatar')) {
|
||
const img = document.createElement('img');
|
||
img.src = AVATARS[match];
|
||
img.className = 'v73-avatar';
|
||
img.alt = match;
|
||
img.style.cssText = 'width:32px;height:32px;border-radius:50%;object-fit:cover;display:block;margin:0 auto 4px;background:#171b2a';
|
||
img.onerror = () => img.style.display = 'none';
|
||
el.prepend(img);
|
||
}
|
||
});
|
||
console.log('[V73] Avatar registry loaded:', Object.keys(AVATARS).length, 'agents');
|
||
} catch(e) { console.warn('[V73] avatar registry fail', e); }
|
||
})();
|
||
</script>
|
||
|
||
<script>
|
||
/* V75 AVATAR UNIFIER — Meeting-rooms emoji style (Opus 19avr) */
|
||
(function() {
|
||
if (window.__WEVAL_AVATAR_V75) return;
|
||
window.__WEVAL_AVATAR_V75 = true;
|
||
const REG_URL = '/api/agent-avatars-v75.json';
|
||
const SVG_EP = '/api/agent-avatar-svg.php';
|
||
function emojiSVGUrl(name, emoji) {
|
||
return SVG_EP + '?n=' + encodeURIComponent(name) + '&e=' + encodeURIComponent(emoji);
|
||
}
|
||
fetch(REG_URL + '?t=' + Date.now()).then(r => r.json()).then(REG => {
|
||
function getAvatarUrl(name) {
|
||
const rec = REG[name];
|
||
if (!rec) return null;
|
||
if (typeof rec === 'object' && rec.svg) return rec.svg;
|
||
if (typeof rec === 'object' && rec.emoji) return emojiSVGUrl(name, rec.emoji);
|
||
return typeof rec === 'string' ? rec : null;
|
||
}
|
||
function findCI(key) {
|
||
const lower = key.toLowerCase();
|
||
for (const k of Object.keys(REG)) if (k.toLowerCase() === lower) return k;
|
||
return null;
|
||
}
|
||
function apply() {
|
||
document.querySelectorAll('img').forEach(img => {
|
||
const key = img.alt || img.dataset.agent || img.dataset.name || img.title || '';
|
||
if (!key) return;
|
||
let url = getAvatarUrl(key);
|
||
if (!url) { const alt = findCI(key); if (alt) url = getAvatarUrl(alt); }
|
||
if (url && img.src !== url && !img.src.endsWith(url)) {
|
||
img.src = url;
|
||
img.setAttribute('data-weval-v75', '1');
|
||
}
|
||
});
|
||
document.querySelectorAll('[data-agent]:not([data-weval-v75-applied])').forEach(el => {
|
||
const name = el.dataset.agent;
|
||
const url = getAvatarUrl(name);
|
||
if (!url) return;
|
||
const img = document.createElement('img');
|
||
img.src = url; img.alt = name; img.title = name;
|
||
img.className = 'v75-avatar';
|
||
img.style.cssText = 'width:32px;height:32px;border-radius:50%;object-fit:cover;vertical-align:middle;background:transparent';
|
||
el.setAttribute('data-weval-v75-applied', '1');
|
||
el.prepend(img);
|
||
});
|
||
}
|
||
apply();
|
||
setTimeout(apply, 400); setTimeout(apply, 1200); setTimeout(apply, 3000);
|
||
const mo = new MutationObserver(() => apply());
|
||
mo.observe(document.body, {childList: true, subtree: true});
|
||
setTimeout(() => mo.disconnect(), 20000);
|
||
console.log('[V75 AvatarUnifier] applied from', Object.keys(REG).length, 'agents');
|
||
}).catch(e => console.warn('[V75] fetch failed', e));
|
||
})();
|
||
</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) {
|
||
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 (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);} });
|
||
}
|
||
}
|
||
var initRun = function(){ wire(d.body || d.documentElement); };
|
||
if (d.readyState === 'loading') d.addEventListener('DOMContentLoaded', initRun);
|
||
else initRun();
|
||
var mo = new MutationObserver(function(muts){
|
||
var newCard = false;
|
||
for (var i=0;i<muts.length;i++) if (muts[i].addedNodes.length) { newCard = true; break; }
|
||
if (newCard) initRun();
|
||
});
|
||
mo.observe(d.body || d.documentElement, {childList:true, subtree:true});
|
||
})();
|
||
</script>
|
||
<!-- === OPUS UNIVERSAL DRILL-DOWN END === -->
|
||
|
||
|
||
<!-- === OPUS HONEST NR/L99 OVERLAY v1 19avr - append-only doctrine #14 === -->
|
||
<script>
|
||
(function(){
|
||
if (window.__opusHonestOverlay) return; window.__opusHonestOverlay = true;
|
||
async function updateHonestValues(){
|
||
try {
|
||
const r = await fetch('/api/l99-honest.php', {cache:'no-store'});
|
||
const d = await r.json();
|
||
if (!d.ok) return;
|
||
const realNR = `${d.combined.pass}/${d.combined.total}`;
|
||
const realSigma = d.sigma;
|
||
// Find elements showing the myth values
|
||
const mythRegex = /(153\/153|304\/304|NR status 153\/153|L99 status 304\/304|NR 153\/153|L99 304\/304)/g;
|
||
// Walk text nodes
|
||
const walker = document.createTreeWalker(document.body, NodeFilter.SHOW_TEXT, null);
|
||
const toReplace = [];
|
||
let node;
|
||
while (node = walker.nextNode()) {
|
||
if (node.nodeValue && mythRegex.test(node.nodeValue)) toReplace.push(node);
|
||
}
|
||
toReplace.forEach(textNode => {
|
||
const parent = textNode.parentNode;
|
||
if (!parent || parent.hasAttribute('data-opus-honest-applied')) return;
|
||
const newText = textNode.nodeValue.replace(/153\/153/g, realNR).replace(/304\/304/g, realNR);
|
||
textNode.nodeValue = newText;
|
||
parent.setAttribute('data-opus-honest-applied', '1');
|
||
});
|
||
// Add a small badge bottom-right showing honest live status
|
||
if (!document.getElementById('opus-honest-badge')) {
|
||
const b = document.createElement('div');
|
||
b.id = 'opus-honest-badge';
|
||
b.style.cssText = 'position:fixed;bottom:12px;right:12px;background:linear-gradient(90deg,#14b8a6,#a855f7);color:#05060a;padding:6px 12px;font:10px/1.3 Inter,system-ui,sans-serif;font-weight:700;border-radius:8px;z-index:99993;box-shadow:0 4px 12px rgba(0,0,0,0.3);cursor:pointer;max-width:280px';
|
||
b.title = 'Cliquer pour détails';
|
||
b.innerHTML = `✓ NR ${realNR} · ${realSigma} live`;
|
||
b.onclick = () => {
|
||
alert(`HONEST NonReg (doctrine #4):\n\nmaster: ${d.master.pass}/${d.master.total}\nopus: ${d.opus.pass}/${d.opus.total}\ncombined: ${realNR}\nsigma: ${realSigma}\n\n${d.myth_153}\n${d.myth_304}`);
|
||
};
|
||
document.body.appendChild(b);
|
||
}
|
||
} catch(e){console.error('L99-honest fetch error:', e);}
|
||
}
|
||
if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', updateHonestValues);
|
||
else updateHonestValues();
|
||
setInterval(updateHonestValues, 90000);
|
||
})();
|
||
</script>
|
||
<!-- === OPUS HONEST END === -->
|
||
|
||
|
||
<script src="/api/a11y-auto-enhancer.js" defer></script>
|
||
</body></html>
|