Files
html/enterprise-model.html
opus 1968996243
Some checks failed
WEVAL NonReg / nonreg (push) Has been cancelled
auto-commit via WEVIA vault_git intent 2026-04-20T02:28:09+00:00
2026-04-20 04:28:10 +02:00

1658 lines
198 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!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>
</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;
const DP=[
{id:'ceo',l:'👑 CEO',cl:'#e94560',fl:'#ffe0e8',pp:['WEVIA','Décision','Budget','Stratégie','Hiring']},
{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:'qa',l:'🧪 QA',cl:'#06b6d4',fl:'#cffafe',pp:['WEVIA','Plan','Run','Report','Ship']},
{id:'l99',l:'🧠 L99 Pilot',cl:'#dc2626',fl:'#fef2f2',pp:['WEVIA','Detect','Fix','Validate','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:'dir',l:'🎯 Director',cl:'#059669',fl:'#dcfce7',pp:['WEVIA','Observe','Plan','Act','Verify']},
{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']},
{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']}];
// V17: hide empty departments (wire/intg/dorm/meet/lean kept for pipelines but filter agents)
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;});
// 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'}
};
// 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:'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;});
// 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 === -->
</body></html>