878 lines
71 KiB
HTML
878 lines
71 KiB
HTML
<!DOCTYPE html>
|
||
<html><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1">
|
||
<title>WEVAL Enterprise</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;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:210px;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(5px);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}
|
||
</style></head><body>
|
||
<div id="hud"><b>WEVAL Enterprise</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>
|
||
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',st:['Decision','Budget','Strategy','Hiring'],fl:'#fde8ec'},
|
||
{id:'sal',l:'🎯 Prospect',cl:'#ff6b6b',st:['Leads','Qualify','Outreach','Convert'],fl:'#fde8e8'},
|
||
{id:'con',l:'💼 Consult',cl:'#845ef7',st:['Analyse','Design','Propose','Deliver'],fl:'#f0e8ff'},
|
||
{id:'dev',l:'⚡ Dev Lab',cl:'#339af0',st:['Code','Review','Test','Deploy'],fl:'#e8f0ff'},
|
||
{id:'ecc',l:'💻 ECC Code',cl:'#20c997',st:['Parse','Review','Build','Ship'],fl:'#e8fff5'},
|
||
{id:'srv',l:'🖥 Infra',cl:'#f59f00',st:['Monitor','Alert','Fix','Report'],fl:'#fff5e0'},
|
||
{id:'sec',l:'🛡 Security',cl:'#ff922b',st:['Scan','Audit','Patch','Certify'],fl:'#fff0e0'},
|
||
{id:'qa',l:'🧪 QA',cl:'#be4bdb',st:['Plan','Run','Report','Ship'],fl:'#f5e8ff'},
|
||
{id:'pha',l:'💊 Pharma',cl:'#da77f2',st:['Scrape','Enrich','Campaign','Ship'],fl:'#fde8ff'},
|
||
{id:'ops',l:'📡 Monitor',cl:'#fcc419',st:['Watch','Alert','Fix','Report'],fl:'#fffde0'},
|
||
{id:'cog',l:'🎯 Cognitive',cl:'#15aabf',st:['Analyze','Reason','Create','Decide'],fl:'#e0f5f8'},
|
||
{id:'sc',l:'✨ SuperClaude',cl:'#7950f2',st:['Research','Plan','Execute','Ship'],fl:'#f0e8ff'},
|
||
{id:'persona',l:'👤 Personas',cl:'#e64980',st:['Consult','Design','Review','Ship'],fl:'#fde0f0'},
|
||
{id:'act',l:'⚡ Activators',cl:'#fd7e14',st:['Trigger','Process','Validate','Ship'],fl:'#fff0e0'},
|
||
{id:'oss_intg',l:'🔗 OSS Wired',cl:'#0ca678',st:['Evaluate','Import','Wire','Ship'],fl:'#e0ffe8'},
|
||
{id:'cron',l:'⏰ Crons',cl:'#74c0fc',st:['Ethica','B2B','NonReg','Backup'],fl:'#e8f0ff'},
|
||
{id:'mta',l:'📧 MTA',cl:'#f783ac',st:['PMTA','KumoMTA','Postfix','Deliver'],fl:'#ffe8f0'},
|
||
{id:'ai',l:'🧠 AI Engine',cl:'#3bc9db',st:['Route','Infer','Consensus','Return'],fl:'#e0f8ff'},
|
||
{id:'saas',l:'📦 SaaS',cl:'#fab005',st:['LeadForge','Outreach','MailWarm','Proposal'],fl:'#fff8e0'},
|
||
{id:'dead',l:'💀 Archives',cl:'#ced4da',st:['S88','S89','ECS','Archive'],fl:'#f0f0f0'},
|
||
{id:'wire',l:'🔌 TO WIRE',cl:'#ff8787',st:['Connect','Config','Test','Activate'],fl:'#ffe8e8'},
|
||
{id:'dock',l:'🐳 Docker',cl:'#63e6be',st:['Build','Run','Monitor','Scale'],fl:'#e0fff5'},
|
||
{id:'dorm',l:'💤 Dormants',cl:'#dee2e6',st:['Clone','Evaluate','Wire','Activate'],fl:'#f5f5f5'},
|
||
{id:'wevia',l:'🧠 WEVIA Suite',cl:'#ff6b6b',st:['Chat','Code','Life','Gateway'],fl:'#ffe8e8'},
|
||
{id:'plat',l:'🔧 Platform',cl:'#868e96',st:['Index','Search','Bench','Discover'],fl:'#f0f0f8'}
|
||
];
|
||
// 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:'20 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:'148 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 scénarios 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:'RESTARTING',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:'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'},
|
||
'ECC architect':{fq:'continu',inp:'Code multi-langage'},
|
||
'ECC python reviewer':{fq:'continu',inp:'PRs Python'},
|
||
'ECC java build resolver':{fq:'continu',inp:'Maven/Gradle builds'},
|
||
'Cog-Analysis':{fq:'on-demand',inp:'Donnees complexes'},
|
||
'Cog-Codegen':{fq:'on-demand',inp:'Specs fonctionnelles'},
|
||
'Cog-Strategy':{fq:'on-demand',inp:'Business context'},
|
||
'SC DeepResearch':{fq:'on-demand',inp:'Requetes recherche'},
|
||
'SC Orchestration':{fq:'continu',inp:'Task queues'},
|
||
'Persona SAPConsultant':{fq:'on-demand',inp:'Queries SAP'},
|
||
'Persona CloudArchitect':{fq:'on-demand',inp:'Infra specs'},
|
||
'ACT QA':{fq:'*/4h',inp:'Test triggers'},
|
||
'ACT Infra':{fq:'*/6h',inp:'Provisioning tasks'},
|
||
};
|
||
// 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={
|
||
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:['20 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:'148 PASS',deliverables:['NonReg 153/153','Playwright 41','11 baselines','BackstopJS','Rapport HTML']},
|
||
pha:{input:'📥 DabaDoc+GMap',output:'📤 125,748 HCPs',kpi:'DZ87K MA19K TN17K',icon:'💊',metric:'125.7K',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:'7.7K opens',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:'50+ crons/j',deliverables:['EthicaCron 288/j','B2BCron 6/j','NonRegCron 2/j','BackupCron 1/j']},
|
||
mta:{input:'📥 3M contacts DB',output:'📤 7752 opens total',kpi:'50 bounces',icon:'📧',metric:'7.7K opens',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:'📤 Archives only',kpi:'À annuler',icon:'💀',metric:'-45€/m',deliverables:['S88 9.9GB archive','S89 adx 6.6GB','ECS inconnu']},
|
||
wire:{input:'📥 19 à connecter',output:'📤 0 wired yet',kpi:'Backlog',icon:'🔌',metric:'19 TODO',deliverables:['LlamaIndex RAG','Stripe SK','WhatsApp token','Azure AD','Gemini']},
|
||
oss_intg:{input:'📥 17 à intégrer',output:'📤 4 en cours',kpi:'Progress 24%',icon:'🔗',metric:'4/17',deliverables:['Paperclip 150 agents','Authentik SSO','OhMyCC 19','SuperClaude 7']},
|
||
dock:{input:'📥 19 containers',output:'📤 18 UP + Loki KO',kpi:'95% healthy',icon:'🐳',metric:'19 dock',deliverables:['OpenWebUI :8281','Flowise :3033','Twenty :3000','n8n :5678','Loki BROKEN']},
|
||
dorm:{input:'📥 6 clonés',output:'📤 0 activés',kpi:'À évaluer',icon:'💤',metric:'6 wait',deliverables:['HolyClaude','LTX-Video','DeepAgent','Strix','Prometheus']},
|
||
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 93 layers']},
|
||
plat:{input:'📥 Qdrant 4414pts',output:'📤 Skills+Prompts',kpi:'RAG actif',icon:'🔧',metric:'4414 sk'},
|
||
ecc:{input:'📥 Code source multi-lang',output:'📤 Build + Review',kpi:'36 agents',icon:'💻',metric:'36 langages',deliverables:['Java builds','Python reviews','Kotlin checks','C++ resolvers','Rust audits','Go packages','TS reviews','Ruby gems']},
|
||
cog:{input:'📥 Complex queries',output:'📤 Structured reasoning',kpi:'9 agents',icon:'🎯',metric:'9 capacites cognitives',deliverables:['Analysis reports','Code generation','Creative outputs','Debug traces','Document processing','Strategy plans','Reasoning chains']},
|
||
sc:{input:'📥 Claude tasks',output:'📤 Enhanced responses',kpi:'7 modes',icon:'✨',metric:'7 super-modes',deliverables:['Deep research','Business panels','Orchestration plans','Brainstorming outputs','Task management','Token optimization','Code analysis']},
|
||
persona:{input:'📥 Domain queries',output:'📤 Expert responses',kpi:'6 experts',icon:'👤',metric:'6 domaines',deliverables:['SAP consulting','Cloud architecture','Cyber audits','Email delivery','Full-stack code','Data science']},
|
||
act:{input:'📥 Triggers',output:'📤 Automated actions',kpi:'5 activators',icon:'⚡',metric:'5 domaines actives',deliverables:['QA automation','Data pipelines','Business rules','Core dev tasks','Infra provisioning']},
|
||
};
|
||
// 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📤 20 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é']
|
||
};
|
||
const AG=[
|
||
{n:'WEVIA PUBLIC',rm:'wevia',d:'general',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:1,re:'🧠',act:['Execute','Plan','Report','Sync']},
|
||
{n:'OSS Flowise',rm:'oss_intg',d:'engineer',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:0,re:'🔗',act:['Execute','Plan','Report','Sync']},
|
||
{n:'OSS AIOS',rm:'oss_intg',d:'devops',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:1,re:'🔗',act:['Execute','Plan','Report','Sync']},
|
||
{n:'Engineer WEVADS',rm:'dev',d:'engineer',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:0,re:'⚡',act:['Execute','Plan','Report','Sync']},
|
||
{n:'Engineer Ethica',rm:'pha',d:'engineer',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:1,re:'💊',act:['Execute','Plan','Report','Sync']},
|
||
{n:'DevOps',rm:'srv',d:'devops',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:1,re:'🖥',act:['Execute','Plan','Report','Sync']},
|
||
{n:'QA',rm:'qa',d:'qa',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:0,re:'🧪',act:['Execute','Plan','Report','Sync']},
|
||
{n:'Data Engineer',rm:'dev',d:'engineer',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:0,re:'⚡',act:['Execute','Plan','Report','Sync']},
|
||
{n:'Research DeerFlow',rm:'con',d:'researcher',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:1,re:'💼',act:['Execute','Plan','Report','Sync']},
|
||
{n:'Marketing',rm:'sal',d:'cmo',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:0,re:'🔥',act:['Execute','Plan','Report','Sync']},
|
||
{n:'Finance',rm:'ops',d:'cfo',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:0,re:'📡',act:['Execute','Plan','Report','Sync']},
|
||
{n:'CTO',rm:'con',d:'cto',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:1,re:'💼',act:['Execute','Plan','Report','Sync']},
|
||
{n:'Writer',rm:'sal',d:'general',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:0,re:'🔥',act:['Execute','Plan','Report','Sync']},
|
||
{n:'Executor',rm:'srv',d:'devops',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:0,re:'🖥',act:['Execute','Plan','Report','Sync']},
|
||
{n:'Guardian',rm:'srv',d:'devops',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:0,re:'🖥',act:['Execute','Plan','Report','Sync']},
|
||
{n:'Watchdog',rm:'srv',d:'devops',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:0,re:'🖥',act:['Execute','Plan','Report','Sync']},
|
||
{n:'Blade',rm:'srv',d:'devops',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:0,re:'🖥',act:['Execute','Plan','Report','Sync']},
|
||
{n:'GitMaster',rm:'srv',d:'devops',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:0,re:'🖥',act:['Execute','Plan','Report','Sync']},
|
||
{n:'Planner',rm:'ops',d:'pm',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:1,re:'📡',act:['Execute','Plan','Report','Sync']},
|
||
{n:'Critic',rm:'con',d:'general',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:1,re:'💼',act:['Execute','Plan','Report','Sync']},
|
||
{n:'Analyst',rm:'con',d:'general',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:1,re:'💼',act:['Execute','Plan','Report','Sync']},
|
||
{n:'Debugger',rm:'dev',d:'engineer',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:1,re:'⚡',act:['Execute','Plan','Report','Sync']},
|
||
{n:'Reviewer',rm:'dev',d:'engineer',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:1,re:'⚡',act:['Execute','Plan','Report','Sync']},
|
||
{n:'Simplifier',rm:'dev',d:'engineer',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:1,re:'⚡',act:['Execute','Plan','Report','Sync']},
|
||
{n:'Blueprint',rm:'dev',d:'engineer',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:1,re:'⚡',act:['Execute','Plan','Report','Sync']},
|
||
{n:'DevForge',rm:'dev',d:'engineer',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:1,re:'⚡',act:['Execute','Plan','Report','Sync']},
|
||
{n:'TaskMgr',rm:'ops',d:'pm',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:1,re:'📡',act:['Execute','Plan','Report','Sync']},
|
||
{n:'WEVAL Manager',rm:'ops',d:'pm',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:1,re:'📡',act:['Execute','Plan','Report','Sync']},
|
||
{n:'Scientist',rm:'con',d:'researcher',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:0,re:'💼',act:['Execute','Plan','Report','Sync']},
|
||
{n:'Brain',rm:'ops',d:'general',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:0,re:'📡',act:['Execute','Plan','Report','Sync']},
|
||
{n:'Explore',rm:'con',d:'researcher',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:0,re:'💼',act:['Execute','Plan','Report','Sync']},
|
||
{n:'DocSpec',rm:'con',d:'general',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:1,re:'💼',act:['Execute','Plan','Report','Sync']},
|
||
{n:'Academy',rm:'con',d:'general',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:1,re:'💼',act:['Execute','Plan','Report','Sync']},
|
||
{n:'B2BCron',rm:'cron',d:'devops',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:0,re:'⏰',act:['Execute','Plan','Report','Sync']},
|
||
{n:'WEDROID v5',rm:'dev',d:'devops',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:1,re:'⚡',act:['Execute','Plan','Report','Sync']},
|
||
{n:'OSS BrowserUse',rm:'oss_intg',d:'devops',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:0,re:'🔗',act:['Execute','Plan','Report','Sync']},
|
||
{n:'Orch',rm:'ops',d:'general',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:0,re:'📡',act:['Execute','Plan','Report','Sync']},
|
||
{n:'Dashboard',rm:'ops',d:'general',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:0,re:'📡',act:['Execute','Plan','Report','Sync']},
|
||
{n:'Translate',rm:'con',d:'general',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:0,re:'💼',act:['Execute','Plan','Report','Sync']},
|
||
{n:'Proposal',rm:'sal',d:'general',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:0,re:'🔥',act:['Execute','Plan','Report','Sync']},
|
||
{n:'TestEng',rm:'qa',d:'devops',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:1,re:'🧪',act:['Execute','Plan','Report','Sync']},
|
||
{n:'Verifier',rm:'sec',d:'qa',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:1,re:'🛡',act:['Execute','Plan','Report','Sync']},
|
||
{n:'NonRegCron',rm:'cron',d:'qa',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:0,re:'⏰',act:['Execute','Plan','Report','Sync']},
|
||
{n:'WEVIA LIFE',rm:'wevia',d:'general',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:0,re:'🧠',act:['Execute','Plan','Report','Sync']},
|
||
{n:'OSS CrewAI',rm:'oss_intg',d:'pm',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:0,re:'🔗',act:['Execute','Plan','Report','Sync']},
|
||
{n:'Intro',rm:'con',d:'researcher',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:0,re:'💼',act:['Execute','Plan','Report','Sync']},
|
||
{n:'Rabbit Nuclei',rm:'qa',d:'qa',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:0,re:'🧪',act:['Execute','Plan','Report','Sync']},
|
||
{n:'OSS AEGIS',rm:'oss_intg',d:'qa',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:0,re:'🔗',act:['Execute','Plan','Report','Sync']},
|
||
{n:'OSS Activepieces',rm:'oss_intg',d:'devops',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:1,re:'🔗',act:['Execute','Plan','Report','Sync']},
|
||
{n:'Contract',rm:'sal',d:'general',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:0,re:'🔥',act:['Execute','Plan','Report','Sync']},
|
||
{n:'EthicaCron',rm:'cron',d:'devops',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:1,re:'⏰',act:['Execute','Plan','Report','Sync']},
|
||
{n:'OSS OpenClaw',rm:'oss_intg',d:'engineer',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:1,re:'🔗',act:['Execute','Plan','Report','Sync']},
|
||
{n:'OSS LangChain',rm:'oss_intg',d:'engineer',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:1,re:'🔗',act:['Execute','Plan','Report','Sync']},
|
||
{n:'Tracer',rm:'qa',d:'qa',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:1,re:'🧪',act:['Execute','Plan','Report','Sync']},
|
||
{n:'Playwright',rm:'qa',d:'qa',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:1,re:'🧪',act:['Execute','Plan','Report','Sync']},
|
||
{n:'OSS Dify',rm:'oss_intg',d:'engineer',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:1,re:'🔗',act:['Execute','Plan','Report','Sync']},
|
||
{n:'OSS OpenWebUI',rm:'oss_intg',d:'general',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:1,re:'🔗',act:['Execute','Plan','Report','Sync']},
|
||
{n:'Analyst 2',rm:'con',d:'general',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:1,re:'💼',act:['Execute','Plan','Report','Sync']},
|
||
{n:'Planner 2',rm:'ops',d:'pm',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:1,re:'📡',act:['Execute','Plan','Report','Sync']},
|
||
{n:'Watchdog 2',rm:'srv',d:'devops',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:1,re:'🖥',act:['Execute','Plan','Report','Sync']},
|
||
{n:'Blade Sentinel',rm:'srv',d:'devops',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:1,re:'🖥',act:['Execute','Plan','Report','Sync']},
|
||
{n:'Git Master',rm:'srv',d:'devops',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:1,re:'🖥',act:['Execute','Plan','Report','Sync']},
|
||
{n:'Explorer',rm:'con',d:'researcher',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:0,re:'💼',act:['Execute','Plan','Report','Sync']},
|
||
{n:'DocSpecialist',rm:'con',d:'general',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:0,re:'💼',act:['Execute','Plan','Report','Sync']},
|
||
{n:'MiroFish 2',rm:'ops',d:'general',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:0,re:'📡',act:['Execute','Plan','Report','Sync']},
|
||
{n:'SC DeepResearch',rm:'sc',d:'researcher',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:0,re:'✨',act:['Execute','Plan','Report','Sync']},
|
||
{n:'SC BusinessPanel',rm:'sc',d:'general',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:0,re:'✨',act:['Execute','Plan','Report','Sync']},
|
||
{n:'SC Orchestration',rm:'sc',d:'pm',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:0,re:'✨',act:['Execute','Plan','Report','Sync']},
|
||
{n:'SC Brainstorming',rm:'sc',d:'general',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:0,re:'✨',act:['Execute','Plan','Report','Sync']},
|
||
{n:'SC TaskManager',rm:'sc',d:'pm',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:0,re:'✨',act:['Execute','Plan','Report','Sync']},
|
||
{n:'OSS Mastra',rm:'oss_intg',d:'engineer',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:0,re:'🔗',act:['Execute','Plan','Report','Sync']},
|
||
{n:'ECC java build resolver',rm:'ecc',d:'engineer',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:0,re:'💻',act:['Execute','Plan','Report','Sync']},
|
||
{n:'ECC kotlin reviewer',rm:'ecc',d:'engineer',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:1,re:'💻',act:['Execute','Plan','Report','Sync']},
|
||
{n:'ECC opensource packager',rm:'ecc',d:'engineer',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:0,re:'💻',act:['Execute','Plan','Report','Sync']},
|
||
{n:'ECC python reviewer',rm:'ecc',d:'engineer',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:1,re:'💻',act:['Execute','Plan','Report','Sync']},
|
||
{n:'OSS Scrapy',rm:'oss_intg',d:'engineer',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:1,re:'🔗',act:['Execute','Plan','Report','Sync']},
|
||
{n:'OSS Supermemory',rm:'oss_intg',d:'researcher',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:0,re:'🔗',act:['Execute','Plan','Report','Sync']},
|
||
{n:'OSS EvoMaster',rm:'oss_intg',d:'qa',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:1,re:'🔗',act:['Execute','Plan','Report','Sync']},
|
||
{n:'ECC java reviewer',rm:'ecc',d:'engineer',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:0,re:'💻',act:['Execute','Plan','Report','Sync']},
|
||
{n:'ECC opensource forker',rm:'ecc',d:'engineer',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:0,re:'💻',act:['Execute','Plan','Report','Sync']},
|
||
{n:'ECC pytorch build resolver',rm:'ecc',d:'engineer',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:1,re:'💻',act:['Execute','Plan','Report','Sync']},
|
||
{n:'ACT QA',rm:'act',d:'qa',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:1,re:'⚡',act:['Execute','Plan','Report','Sync']},
|
||
{n:'OSS Prometheus',rm:'oss_intg',d:'devops',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:0,re:'🔗',act:['Execute','Plan','Report','Sync']},
|
||
{n:'ECC kotlin build resolver',rm:'ecc',d:'engineer',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:1,re:'💻',act:['Execute','Plan','Report','Sync']},
|
||
{n:'ECC security reviewer',rm:'ecc',d:'engineer',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:0,re:'💻',act:['Execute','Plan','Report','Sync']},
|
||
{n:'ACT DataAI',rm:'act',d:'researcher',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:1,re:'⚡',act:['Execute','Plan','Report','Sync']},
|
||
{n:'OSS Goose',rm:'oss_intg',d:'engineer',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:1,re:'🔗',act:['Execute','Plan','Report','Sync']},
|
||
{n:'ECC loop operator',rm:'ecc',d:'engineer',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:0,re:'💻',act:['Execute','Plan','Report','Sync']},
|
||
{n:'ECC planner',rm:'ecc',d:'engineer',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:0,re:'💻',act:['Execute','Plan','Report','Sync']},
|
||
{n:'ECC tdd guide',rm:'ecc',d:'engineer',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:0,re:'💻',act:['Execute','Plan','Report','Sync']},
|
||
{n:'ACT Business',rm:'act',d:'general',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:0,re:'⚡',act:['Execute','Plan','Report','Sync']},
|
||
{n:'ECC opensource sanitizer',rm:'ecc',d:'engineer',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:1,re:'💻',act:['Execute','Plan','Report','Sync']},
|
||
{n:'ECC typescript reviewer',rm:'ecc',d:'engineer',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:0,re:'💻',act:['Execute','Plan','Report','Sync']},
|
||
{n:'ACT CoreDev',rm:'act',d:'engineer',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:1,re:'⚡',act:['Execute','Plan','Report','Sync']},
|
||
{n:'CEO',rm:'ceo',d:'ceo',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:0,re:'👔',act:['Execute','Plan','Report','Sync']},
|
||
{n:'ECC performance optimizer',rm:'ecc',d:'engineer',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:0,re:'💻',act:['Execute','Plan','Report','Sync']},
|
||
{n:'ECC refactor cleaner',rm:'ecc',d:'engineer',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:1,re:'💻',act:['Execute','Plan','Report','Sync']},
|
||
{n:'ECC rust build resolver',rm:'ecc',d:'engineer',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:1,re:'💻',act:['Execute','Plan','Report','Sync']},
|
||
{n:'Architect',rm:'dev',d:'engineer',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:0,re:'⚡',act:['Execute','Plan','Report','Sync']},
|
||
{n:'WEDROID',rm:'dev',d:'engineer',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:1,re:'⚡',act:['Execute','Plan','Report','Sync']},
|
||
{n:'Architect 2',rm:'dev',d:'engineer',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:1,re:'⚡',act:['Execute','Plan','Report','Sync']},
|
||
{n:'WEDROID 2',rm:'dev',d:'engineer',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:1,re:'⚡',act:['Execute','Plan','Report','Sync']},
|
||
{n:'Security',rm:'sec',d:'qa',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:0,re:'🛡',act:['Execute','Plan','Report','Sync']},
|
||
{n:'Designer',rm:'dev',d:'designer',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:1,re:'⚡',act:['Execute','Plan','Report','Sync']},
|
||
{n:'ECC harness optimizer',rm:'ecc',d:'engineer',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:0,re:'💻',act:['Execute','Plan','Report','Sync']},
|
||
{n:'ECC healthcare reviewer',rm:'ecc',d:'engineer',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:0,re:'💻',act:['Execute','Plan','Report','Sync']},
|
||
{n:'Critic 2',rm:'con',d:'qa',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:0,re:'💼',act:['Execute','Plan','Report','Sync']},
|
||
{n:'Debugger 2',rm:'dev',d:'engineer',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:1,re:'⚡',act:['Execute','Plan','Report','Sync']},
|
||
{n:'Code Reviewer',rm:'dev',d:'engineer',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:1,re:'⚡',act:['Execute','Plan','Report','Sync']},
|
||
{n:'Code Simplifier',rm:'dev',d:'engineer',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:0,re:'⚡',act:['Execute','Plan','Report','Sync']},
|
||
{n:'Verifier 2',rm:'sec',d:'qa',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:0,re:'🛡',act:['Execute','Plan','Report','Sync']},
|
||
{n:'Test Engineer',rm:'qa',d:'qa',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:1,re:'🧪',act:['Execute','Plan','Report','Sync']},
|
||
{n:'Tracer 2',rm:'qa',d:'engineer',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:1,re:'🧪',act:['Execute','Plan','Report','Sync']},
|
||
{n:'EthicaScraper',rm:'pha',d:'engineer',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:1,re:'💊',act:['Execute','Plan','Report','Sync']},
|
||
{n:'SC TokenEfficiency',rm:'sc',d:'engineer',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:0,re:'✨',act:['Execute','Plan','Report','Sync']},
|
||
{n:'SC Introspection',rm:'sc',d:'qa',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:1,re:'✨',act:['Execute','Plan','Report','Sync']},
|
||
{n:'ECC architect',rm:'ecc',d:'engineer',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:1,re:'💻',act:['Execute','Plan','Report','Sync']},
|
||
{n:'ECC build error resolver',rm:'ecc',d:'engineer',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:0,re:'💻',act:['Execute','Plan','Report','Sync']},
|
||
{n:'ECC chief of staff',rm:'ecc',d:'engineer',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:0,re:'💻',act:['Execute','Plan','Report','Sync']},
|
||
{n:'ECC code reviewer',rm:'ecc',d:'engineer',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:0,re:'💻',act:['Execute','Plan','Report','Sync']},
|
||
{n:'ECC cpp build resolver',rm:'ecc',d:'engineer',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:1,re:'💻',act:['Execute','Plan','Report','Sync']},
|
||
{n:'ECC cpp reviewer',rm:'ecc',d:'engineer',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:1,re:'💻',act:['Execute','Plan','Report','Sync']},
|
||
{n:'ECC database reviewer',rm:'ecc',d:'engineer',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:0,re:'💻',act:['Execute','Plan','Report','Sync']},
|
||
{n:'ECC doc updater',rm:'ecc',d:'engineer',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:1,re:'💻',act:['Execute','Plan','Report','Sync']},
|
||
{n:'ACT Infra',rm:'act',d:'devops',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:1,re:'⚡',act:['Execute','Plan','Report','Sync']},
|
||
{n:'Persona DataScientist',rm:'persona',d:'researcher',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:1,re:'👤',act:['Execute','Plan','Report','Sync']},
|
||
{n:'Persona SAPConsultant',rm:'persona',d:'general',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:1,re:'👤',act:['Execute','Plan','Report','Sync']},
|
||
{n:'Cog-Analysis',rm:'cog',d:'general',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:0,re:'🎯',act:['Execute','Plan','Report','Sync']},
|
||
{n:'Cog-Documents',rm:'cog',d:'general',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:1,re:'🎯',act:['Execute','Plan','Report','Sync']},
|
||
{n:'Cog-Expansion',rm:'cog',d:'researcher',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:1,re:'🎯',act:['Execute','Plan','Report','Sync']},
|
||
{n:'Cog-Opus46',rm:'cog',d:'general',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:0,re:'🎯',act:['Execute','Plan','Report','Sync']},
|
||
{n:'Cog-Reasoning',rm:'cog',d:'general',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:1,re:'🎯',act:['Execute','Plan','Report','Sync']},
|
||
{n:'ECC docs lookup',rm:'ecc',d:'engineer',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:0,re:'💻',act:['Execute','Plan','Report','Sync']},
|
||
{n:'ECC e2e runner',rm:'ecc',d:'engineer',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:0,re:'💻',act:['Execute','Plan','Report','Sync']},
|
||
{n:'ECC flutter reviewer',rm:'ecc',d:'engineer',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:0,re:'💻',act:['Execute','Plan','Report','Sync']},
|
||
{n:'ECC gan evaluator',rm:'ecc',d:'engineer',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:0,re:'💻',act:['Execute','Plan','Report','Sync']},
|
||
{n:'ECC gan generator',rm:'ecc',d:'engineer',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:0,re:'💻',act:['Execute','Plan','Report','Sync']},
|
||
{n:'ECC gan planner',rm:'ecc',d:'engineer',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:1,re:'💻',act:['Execute','Plan','Report','Sync']},
|
||
{n:'ECC go build resolver',rm:'ecc',d:'engineer',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:0,re:'💻',act:['Execute','Plan','Report','Sync']},
|
||
{n:'ECC go reviewer',rm:'ecc',d:'engineer',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:0,re:'💻',act:['Execute','Plan','Report','Sync']},
|
||
{n:'ECC rust reviewer',rm:'ecc',d:'engineer',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:0,re:'💻',act:['Execute','Plan','Report','Sync']},
|
||
{n:'Persona CloudArchitect',rm:'persona',d:'engineer',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:1,re:'👤',act:['Execute','Plan','Report','Sync']},
|
||
{n:'Persona CyberAuditor',rm:'persona',d:'qa',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:1,re:'👤',act:['Execute','Plan','Report','Sync']},
|
||
{n:'Persona EmailExpert',rm:'persona',d:'engineer',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:0,re:'👤',act:['Execute','Plan','Report','Sync']},
|
||
{n:'Persona FullStackDev',rm:'persona',d:'engineer',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:0,re:'👤',act:['Execute','Plan','Report','Sync']},
|
||
{n:'Cog-Codegen',rm:'cog',d:'engineer',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:0,re:'🎯',act:['Execute','Plan','Report','Sync']},
|
||
{n:'Cog-Creative',rm:'cog',d:'designer',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:0,re:'🎯',act:['Execute','Plan','Report','Sync']},
|
||
{n:'Cog-Debug',rm:'cog',d:'engineer',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:0,re:'🎯',act:['Execute','Plan','Report','Sync']},
|
||
{n:'Cog-Strategy',rm:'cog',d:'general',p:'Paperclip',sk:'#e8cca0',hc:'#333',F:1,re:'🎯',act:['Execute','Plan','Report','Sync']},
|
||
{n:'PMTA',rm:'mta',d:'SMTP:25',p:'NEVER TOUCH',sk:'#f0c0c0',hc:'#333',F:0,re:'📧',act:['Send','Deliver']},
|
||
{n:'KumoMTA',rm:'mta',d:'SMTP:587',p:'Smart routing',sk:'#f0c0c0',hc:'#333',F:0,re:'📧',act:['Send','Deliver']},
|
||
{n:'Postfix',rm:'mta',d:'Relay:2525',p:'Internal',sk:'#f0c0c0',hc:'#333',F:0,re:'📧',act:['Send','Deliver']},
|
||
{n:'Groq',rm:'ai',d:'Default LLM',p:'llama-3.3-70b',sk:'#c0f0f0',hc:'#333',F:0,re:'🧠',act:['Infer','Route']},
|
||
{n:'Cerebras',rm:'ai',d:'Fallback',p:'qwen-3-235b',sk:'#c0f0f0',hc:'#333',F:0,re:'🧠',act:['Infer','Route']},
|
||
{n:'Ollama',rm:'ai',d:'Sovereign',p:'12 models',sk:'#c0f0f0',hc:'#333',F:0,re:'🧠',act:['Infer','Route']},
|
||
{n:'LeadForge',rm:'saas',d:'Lead Gen',p:'SaaS',sk:'#f0e0b0',hc:'#333',F:0,re:'📦',act:['Execute','Track']},
|
||
{n:'OutreachAI',rm:'saas',d:'Sequences',p:'SaaS',sk:'#f0e0b0',hc:'#333',F:0,re:'📦',act:['Execute','Track']},
|
||
{n:'MailWarm',rm:'saas',d:'IP Warming',p:'SaaS',sk:'#f0e0b0',hc:'#333',F:0,re:'📦',act:['Execute','Track']},
|
||
{n:'ProposalAI',rm:'saas',d:'PDF Gen',p:'SaaS',sk:'#f0e0b0',hc:'#333',F:0,re:'📦',act:['Execute','Track']},
|
||
{n:'S88 GPU',rm:'dead',d:'DEAD -45eur',p:'Archive',sk:'#d0d0d0',hc:'#888',F:0,re:'💀',act:['Cancel']},
|
||
{n:'S89',rm:'dead',d:'DOWN',p:'Archive',sk:'#d0d0d0',hc:'#888',F:0,re:'💀',act:['Cancel']},
|
||
{n:'ECS PMTA',rm:'dead',d:'UNKNOWN',p:'Archive',sk:'#d0d0d0',hc:'#888',F:0,re:'💀',act:['Cancel']},
|
||
{n:'LlamaIndex',rm:'wire',d:'TO WIRE',p:'pending',sk:'#f0c0c0',hc:'#c0392b',F:0,re:'🔌',act:['Connect','Wire']},
|
||
{n:'CrewAI',rm:'wire',d:'TO WIRE',p:'pending',sk:'#f0c0c0',hc:'#c0392b',F:0,re:'🔌',act:['Connect','Wire']},
|
||
{n:'AutoGen',rm:'wire',d:'TO WIRE',p:'pending',sk:'#f0c0c0',hc:'#c0392b',F:0,re:'🔌',act:['Connect','Wire']},
|
||
{n:'AnythingLLM',rm:'wire',d:'TO WIRE',p:'pending',sk:'#f0c0c0',hc:'#c0392b',F:0,re:'🔌',act:['Connect','Wire']},
|
||
{n:'Dify',rm:'wire',d:'TO WIRE',p:'pending',sk:'#f0c0c0',hc:'#c0392b',F:0,re:'🔌',act:['Connect','Wire']},
|
||
{n:'vLLM',rm:'wire',d:'TO WIRE',p:'pending',sk:'#f0c0c0',hc:'#c0392b',F:0,re:'🔌',act:['Connect','Wire']},
|
||
{n:'LocalAI',rm:'wire',d:'TO WIRE',p:'pending',sk:'#f0c0c0',hc:'#c0392b',F:0,re:'🔌',act:['Connect','Wire']},
|
||
{n:'Stripe',rm:'wire',d:'TO WIRE',p:'pending',sk:'#f0c0c0',hc:'#c0392b',F:0,re:'🔌',act:['Connect','Wire']},
|
||
{n:'WhatsApp',rm:'wire',d:'TO WIRE',p:'pending',sk:'#f0c0c0',hc:'#c0392b',F:0,re:'🔌',act:['Connect','Wire']},
|
||
{n:'OVH SMS',rm:'wire',d:'TO WIRE',p:'pending',sk:'#f0c0c0',hc:'#c0392b',F:0,re:'🔌',act:['Connect','Wire']},
|
||
{n:'Azure AD',rm:'wire',d:'TO WIRE',p:'pending',sk:'#f0c0c0',hc:'#c0392b',F:0,re:'🔌',act:['Connect','Wire']},
|
||
{n:'Gemini',rm:'wire',d:'TO WIRE',p:'pending',sk:'#f0c0c0',hc:'#c0392b',F:0,re:'🔌',act:['Connect','Wire']},
|
||
{n:'ListMonk',rm:'wire',d:'TO WIRE',p:'pending',sk:'#f0c0c0',hc:'#c0392b',F:0,re:'🔌',act:['Connect','Wire']},
|
||
{n:'NoVNC',rm:'wire',d:'TO WIRE',p:'pending',sk:'#f0c0c0',hc:'#c0392b',F:0,re:'🔌',act:['Connect','Wire']},
|
||
{n:'Supermemory',rm:'wire',d:'TO WIRE',p:'pending',sk:'#f0c0c0',hc:'#c0392b',F:0,re:'🔌',act:['Connect','Wire']},
|
||
{n:'Wazuh',rm:'wire',d:'TO WIRE',p:'pending',sk:'#f0c0c0',hc:'#c0392b',F:0,re:'🔌',act:['Connect','Wire']},
|
||
{n:'CrowdSec',rm:'wire',d:'TO WIRE',p:'pending',sk:'#f0c0c0',hc:'#c0392b',F:0,re:'🔌',act:['Connect','Wire']},
|
||
{n:'Microsoft',rm:'wire',d:'TO WIRE',p:'pending',sk:'#f0c0c0',hc:'#c0392b',F:0,re:'🔌',act:['Connect','Wire']},
|
||
{n:'n8n',rm:'dock',d:':5678',p:'Docker',sk:'#c0f0e0',hc:'#0ea5e9',F:0,re:'🐳',act:['Monitor','Restart']},
|
||
{n:'Flowise',rm:'dock',d:':3033',p:'Docker',sk:'#c0f0e0',hc:'#0ea5e9',F:0,re:'🐳',act:['Monitor','Restart']},
|
||
{n:'OpenWebUI',rm:'dock',d:':8281',p:'Docker',sk:'#c0f0e0',hc:'#0ea5e9',F:0,re:'🐳',act:['Monitor','Restart']},
|
||
{n:'Twenty',rm:'dock',d:':3000',p:'Docker',sk:'#c0f0e0',hc:'#0ea5e9',F:0,re:'🐳',act:['Monitor','Restart']},
|
||
{n:'Mattermost',rm:'dock',d:':8065',p:'Docker',sk:'#c0f0e0',hc:'#0ea5e9',F:0,re:'🐳',act:['Monitor','Restart']},
|
||
{n:'SearXNG',rm:'dock',d:':8080',p:'Docker',sk:'#c0f0e0',hc:'#0ea5e9',F:0,re:'🐳',act:['Monitor','Restart']},
|
||
{n:'Qdrant',rm:'dock',d:':6333',p:'Docker',sk:'#c0f0e0',hc:'#0ea5e9',F:0,re:'🐳',act:['Monitor','Restart']},
|
||
{n:'Plausible',rm:'dock',d:':8000',p:'Docker',sk:'#c0f0e0',hc:'#0ea5e9',F:0,re:'🐳',act:['Monitor','Restart']},
|
||
{n:'Authentik',rm:'dock',d:':9000',p:'Docker',sk:'#c0f0e0',hc:'#0ea5e9',F:0,re:'🐳',act:['Monitor','Restart']},
|
||
{n:'Vaultwarden',rm:'dock',d:':8222',p:'Docker',sk:'#c0f0e0',hc:'#0ea5e9',F:0,re:'🐳',act:['Monitor','Restart']},
|
||
{n:'Uptime-Kuma',rm:'dock',d:':3001',p:'Docker',sk:'#c0f0e0',hc:'#0ea5e9',F:0,re:'🐳',act:['Monitor','Restart']},
|
||
{n:'ClickHouse',rm:'dock',d:':8123',p:'Docker',sk:'#c0f0e0',hc:'#0ea5e9',F:0,re:'🐳',act:['Monitor','Restart']},
|
||
{n:'Loki',rm:'dock',d:':18821',p:'Docker',sk:'#c0f0e0',hc:'#0ea5e9',F:0,re:'🐳',act:['Monitor','Restart']},
|
||
{n:'MiroFish',rm:'dock',d:':3050',p:'Docker',sk:'#c0f0e0',hc:'#0ea5e9',F:0,re:'🐳',act:['Monitor','Restart']},
|
||
{n:'Redis',rm:'dock',d:':6379',p:'Docker',sk:'#c0f0e0',hc:'#0ea5e9',F:0,re:'🐳',act:['Monitor','Restart']},
|
||
{n:'HolyClaude',rm:'dorm',d:'Dormant',p:'To evaluate',sk:'#e0e0e0',hc:'#888',F:0,re:'💤',act:['Evaluate']},
|
||
{n:'LTX-Video',rm:'dorm',d:'Dormant',p:'To evaluate',sk:'#e0e0e0',hc:'#888',F:0,re:'💤',act:['Evaluate']},
|
||
{n:'DeepAgent',rm:'dorm',d:'Dormant',p:'To evaluate',sk:'#e0e0e0',hc:'#888',F:0,re:'💤',act:['Evaluate']},
|
||
{n:'Claude-Mem',rm:'dorm',d:'Dormant',p:'To evaluate',sk:'#e0e0e0',hc:'#888',F:0,re:'💤',act:['Evaluate']},
|
||
{n:'Strix',rm:'dorm',d:'Dormant',p:'To evaluate',sk:'#e0e0e0',hc:'#888',F:0,re:'💤',act:['Evaluate']},
|
||
{n:'Prometheus',rm:'dorm',d:'Dormant',p:'To evaluate',sk:'#e0e0e0',hc:'#888',F:0,re:'💤',act:['Evaluate']},
|
||
{n:'WEVCODE',rm:'wevia',d:'4 modes',p:'WEVIA',sk:'#f0d0d0',hc:'#333',F:0,re:'🧠',act:['Execute']},
|
||
{n:'WEVIAGateway',rm:'wevia',d:'18 providers',p:'WEVIA',sk:'#f0d0d0',hc:'#333',F:0,re:'🧠',act:['Execute']},
|
||
{n:'TTS',rm:'wevia',d:'Voice FR',p:'WEVIA',sk:'#f0d0d0',hc:'#333',F:0,re:'🧠',act:['Execute']},
|
||
{n:'MermaidGen',rm:'wevia',d:'Diagrams',p:'WEVIA',sk:'#f0d0d0',hc:'#333',F:0,re:'🧠',act:['Execute']},
|
||
{n:'L99',rm:'wevia',d:'761 tests',p:'WEVIA',sk:'#f0d0d0',hc:'#333',F:0,re:'🧠',act:['Execute']},
|
||
{n:'ClaudeSync',rm:'wevia',d:'Desktop',p:'WEVIA',sk:'#f0d0d0',hc:'#333',F:0,re:'🧠',act:['Execute']},
|
||
{n:'SkillsRAG',rm:'plat',d:'4414 pts',p:'Platform',sk:'#d0d0e0',hc:'#333',F:0,re:'🔧',act:['Index']},
|
||
{n:'PromptsLib',rm:'plat',d:'55 prompts',p:'Platform',sk:'#d0d0e0',hc:'#333',F:0,re:'🔧',act:['Index']},
|
||
{n:'CodeWiki',rm:'plat',d:'203 files',p:'Platform',sk:'#d0d0e0',hc:'#333',F:0,re:'🔧',act:['Index']},
|
||
{n:'AIBench',rm:'plat',d:'182 models',p:'Platform',sk:'#d0d0e0',hc:'#333',F:0,re:'🔧',act:['Index']},
|
||
{n:'ModelScope',rm:'plat',d:'Registry',p:'Platform',sk:'#d0d0e0',hc:'#333',F:0,re:'🔧',act:['Index']},
|
||
{n:'OSSDiscover',rm:'plat',d:'685 tools',p:'Platform',sk:'#d0d0e0',hc:'#333',F:0,re:'🔧',act:['Index']},
|
||
{n:'GHGrab',rm:'plat',d:'17 repos',p:'Platform',sk:'#d0d0e0',hc:'#333',F:0,re:'🔧',act:['Index']},
|
||
{n:'AgentShield',rm:'plat',d:'Security',p:'Platform',sk:'#d0d0e0',hc:'#333',F:0,re:'🔧',act:['Index']},
|
||
{n:'BackupCron',rm:'cron',d:'PG backup',p:'4am daily',sk:'#c0d0f0',hc:'#333',F:0,re:'⏰',act:['Backup']},
|
||
{n:'Ethica',rm:'sal',d:'HCP Manager',p:'131K contacts',sk:'#f0d0b0',hc:'#333',F:0,re:'🔥',act:['Scrape','Enrich']}
|
||
];
|
||
|
||
// 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.tk='';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(){
|
||
AG.forEach(function(a){
|
||
var di=DP.findIndex(function(d){return d.id===a.rm;});
|
||
if(di<0)return;
|
||
var o=oRect(di);
|
||
var mates=AG.filter(function(b){return b.rm===a.rm;});
|
||
var mi=mates.indexOf(a);
|
||
var cols=Math.min(mates.length,7);
|
||
var row=Math.floor(mi/cols);
|
||
var col=mi%cols;
|
||
var spacing=Math.min(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(mates.length/cols);
|
||
var totalVH=rows2*48;
|
||
a.dy=o.y+20+(o.h-totalVH)/2+row*48;
|
||
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){if(i>=DP.length||!DP[i])return 80;var cnt=AG.filter(function(a){return a.rm===DP[i].id;}).length;var rows=Math.ceil(cnt/Math.min(cnt,5));return BASE_RH+rows*ROW_ADD;}
|
||
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)
|
||
function drawOff(i){
|
||
if(i>=DP.length||!DP[i])return;var r=oRect(i),d=DP[i],cl=d.cl,fl=d.fl;
|
||
X.fillStyle='#0001';X.beginPath();X.roundRect(r.x+3,r.y+3,r.w,r.h,8);X.fill();
|
||
var g=X.createLinearGradient(r.x,r.y,r.x,r.y+r.h);g.addColorStop(0,fl);g.addColorStop(1,fl+'bb');
|
||
X.fillStyle=g;X.beginPath();X.roundRect(r.x,r.y,r.w,r.h,8);X.fill();
|
||
X.strokeStyle=cl+'70';X.lineWidth=2;X.beginPath();X.roundRect(r.x,r.y,r.w,r.h,8);X.stroke();
|
||
X.fillStyle=cl;X.beginPath();X.roundRect(r.x,r.y,5,r.h,[8,0,0,8]);X.fill();
|
||
X.font='900 12px Nunito';X.fillStyle=cl;X.textAlign='left';X.fillText(d.l,r.x+6,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 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){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 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.5+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);
|
||
// 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();
|
||
}
|
||
});
|
||
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)};}
|
||
|
||
function drawOut(i){
|
||
if(i>=DP.length||!DP[i])return;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')?'#ef4444':
|
||
o.metric.includes('OK')||o.metric.includes('99')||o.metric.includes('+')?'#22c55e':'#3b82f6';
|
||
X.fillStyle=mColor;X.fillText(o.metric,r.x+r.w/2,r.y+r.h/2+10);
|
||
// Input line
|
||
// Capacity bar
|
||
var capPct=70+Math.sin(i*.7)*20;// simulated capacity usage
|
||
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(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.fillText(o.input,r.x+r.w/2,r.y+r.h-18);
|
||
X.fillStyle='#2a2a4a';X.font='700 5px Nunito';
|
||
X.fillText(o.output,r.x+r.w/2,r.y+r.h-10);
|
||
}
|
||
|
||
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){
|
||
var isH=a===hov,sit=a.si==='sit',sc=isH?1.2:1;
|
||
var bob=sit?0: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';
|
||
X.save();X.translate(a.x,a.y+bob);X.scale(sc,sc);
|
||
if(isH){X.shadowColor=cl;X.shadowBlur=12;}
|
||
// 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 bg=X.createLinearGradient(-5,-4,5,4);bg.addColorStop(0,cl);bg.addColorStop(1,cl+'99');
|
||
X.fillStyle=bg;X.beginPath();X.roundRect(-6,-5,12,10,[5,5,2,2]);X.fill();
|
||
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=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=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);
|
||
// 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';X.fillText(a.n,0,sit?14:20);
|
||
// 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.tk.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.tk,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){
|
||
X.shadowColor='#ef4444';X.shadowBlur=6+Math.sin(fr*.15)*3;
|
||
X.fillStyle='#ef444420';X.beginPath();X.arc(0,-14,14,0,6.28);X.fill();
|
||
X.shadowBlur=0;
|
||
X.fillStyle='#ef4444';X.beginPath();X.arc(12,-22,6,0,6.28);X.fill();
|
||
X.font='bold 8px sans-serif';X.fillStyle='#fff';X.textAlign='center';X.textBaseline='middle';
|
||
X.fillText('!',12,-22);X.textBaseline='alphabetic';
|
||
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 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;
|
||
return[{x:o.x+o.w+6,y:ym},{x:a.cx,y:a.cy}];
|
||
}
|
||
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;
|
||
return[{x:o.x+o.w+6,y:ym},{x:a.dx,y:a.dy}];
|
||
}
|
||
|
||
// UPDATE
|
||
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;}
|
||
}else if(a.si==='go'){a.wk+=dt*6;ac++;
|
||
if(a.wpi<a.wp.length){var w=a.wp[a.wpi],dx=w.x-a.x,dy=w.y-a.y,d=Math.sqrt(dx*dx+dy*dy);
|
||
if(d>1.5){a.x+=dx/d*55*dt;a.y+=dy/d*55*dt;a.dir=dx>0?1:-1;}else a.wpi++;}
|
||
else{a.si='work';a.wtmr=80;}
|
||
}else if(a.si==='work'){a.wk+=dt*2;ac++;a.wtmr-=dt*60;
|
||
if(a.wtmr<=0){a.wp=mkR(a);a.wpi=0;a.si='back';tc++;}
|
||
}else if(a.si==='back'){a.wk+=dt*6;ac++;
|
||
if(a.wpi<a.wp.length){var w2=a.wp[a.wpi],dx2=w2.x-a.x,dy2=w2.y-a.y,d2=Math.sqrt(dx2*dx2+dy2*dy2);
|
||
if(d2>1.5){a.x+=dx2/d2*55*dt;a.y+=dy2/d2*55*dt;a.dir=dx2>0?1:-1;}else a.wpi++;}
|
||
else{a.si='sit';a.x=a.dx;a.y=a.dy;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();
|
||
document.getElementById('st').textContent='👥'+AG.length+'/150'+' 🟢'+ac+' 📦'+tc+' 🔴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.tk=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.tk=action;}}
|
||
var lastRT=0;
|
||
function realTime(t){
|
||
if(t-lastRT<10000)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>=9&&h<=18){
|
||
if(Math.random()<0.25)trigD('dev','Commit push');
|
||
if(Math.random()<0.12)trigD('con','Client call');
|
||
if(Math.random()<0.08)trigD('sec','Security scan');
|
||
if(Math.random()<0.15)trigD('ops','Monitor check');
|
||
if(Math.random()<0.1)trigD('sal','New lead');
|
||
}
|
||
if(Math.random()<0.12)trigD('dock','Container check');
|
||
if(Math.random()<0.15)trigD('ai','AI request');
|
||
// Static alerts for known issues
|
||
alertAgent('S88 GPU','💀 GPU MORT — annuler Hetzner -45€/mois');
|
||
alertAgent('S89','⚰️ SERVEUR DOWN — port 49222 inaccessible');
|
||
alertAgent('ECS PMTA','❓ STATUS INCONNU — à vérifier');
|
||
alertAgent('Loki','⚠️ RESTARTING — container en boucle');
|
||
// Check Stripe/WhatsApp/OVH SMS missing creds
|
||
alertAgent('Stripe','🔴 SK live MANQUANTE — dashboard.stripe.com');
|
||
alertAgent('WhatsApp','🔴 TOKEN MANQUANT');
|
||
alertAgent('OVH SMS','🔴 CREDS MANQUANTES');
|
||
alertAgent('Azure AD','🔴 3 tenants EXPIRÉS — re-register');
|
||
alertAgent('Gemini','🔴 API DISABLED — activer aistudio.google.com');
|
||
}
|
||
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);}
|
||
upd(dt);
|
||
var sorted=AG.slice().sort(function(a,b){return a.y-b.y;});
|
||
sorted.forEach(function(a){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;});
|
||
if(clicked){
|
||
if(clicked.alertOn){clicked.alertOn=false;clicked.alert='';return;}
|
||
var dd2=DP.find(function(d){return d.id===clicked.rm;})||{};
|
||
var meta2=AMETA[clicked.n]||{};
|
||
var out3=OUT[clicked.rm]||{};
|
||
var sm2={sit:'En attente',go:'Vers pipeline',work:'En action',back:'Retour bureau'};
|
||
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 sC=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">📥 '+meta2.inp+'<\/div>';
|
||
if(out3.output)h3+='<div style="font-size:.72rem;color:#16a34a;margin:3px 0">📤 '+out3.output+'<\/div>';
|
||
if(out3.kpi)h3+='<div style="font-size:.72rem;color:#64748b;margin:3px 0">📊 '+out3.kpi+'<\/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);
|
||
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];if(!d3)break;var 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">📦 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();})()">📥 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);
|
||
</script></body></html>
|