auto-sync-2045
This commit is contained in:
11
api/blade-tasks/task_20260419184501_23ad13.json
Normal file
11
api/blade-tasks/task_20260419184501_23ad13.json
Normal file
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"id": "task_20260419184501_23ad13",
|
||||
"name": "Blade self-heal 20:45",
|
||||
"type": "powershell",
|
||||
"command": "\n# Blade self-heal\nWrite-Host \"Self-heal triggered $(Get-Date)\"\n$agentProc = Get-Process powershell | Where-Object { $_.CommandLine -match 'sentinel-agent' }\nif (!$agentProc) {\n Write-Host \"Agent not running, starting...\"\n Start-Process powershell -ArgumentList \"-ExecutionPolicy\",\"Bypass\",\"-File\",\"C:\\ProgramData\\WEVAL\\sentinel-agent.ps1\" -WindowStyle Hidden\n}\n# Clear stale tasks > 3 days locally\n$cutoff = (Get-Date).AddDays(-3)\nGet-ChildItem \"C:\\ProgramData\\WEVAL\\tasks\\*.json\" -ErrorAction SilentlyContinue | Where-Object { $_.LastWriteTime -lt $cutoff } | Move-Item -Destination \"C:\\ProgramData\\WEVAL\\tasks\\archived\\\" -Force -ErrorAction SilentlyContinue\nWrite-Host \"Self-heal complete\"\n",
|
||||
"cmd": "\n# Blade self-heal\nWrite-Host \"Self-heal triggered $(Get-Date)\"\n$agentProc = Get-Process powershell | Where-Object { $_.CommandLine -match 'sentinel-agent' }\nif (!$agentProc) {\n Write-Host \"Agent not running, starting...\"\n Start-Process powershell -ArgumentList \"-ExecutionPolicy\",\"Bypass\",\"-File\",\"C:\\ProgramData\\WEVAL\\sentinel-agent.ps1\" -WindowStyle Hidden\n}\n# Clear stale tasks > 3 days locally\n$cutoff = (Get-Date).AddDays(-3)\nGet-ChildItem \"C:\\ProgramData\\WEVAL\\tasks\\*.json\" -ErrorAction SilentlyContinue | Where-Object { $_.LastWriteTime -lt $cutoff } | Move-Item -Destination \"C:\\ProgramData\\WEVAL\\tasks\\archived\\\" -Force -ErrorAction SilentlyContinue\nWrite-Host \"Self-heal complete\"\n",
|
||||
"priority": "high",
|
||||
"status": "pending",
|
||||
"created": "2026-04-19T18:45:01+00:00",
|
||||
"created_by": "blade-control-ui"
|
||||
}
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 114 KiB |
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"ok": true,
|
||||
"version": "V83-business-kpi",
|
||||
"ts": "2026-04-19T18:40:55+00:00",
|
||||
"ts": "2026-04-19T18:44:06+00:00",
|
||||
"summary": {
|
||||
"total_categories": 7,
|
||||
"total_kpis": 56,
|
||||
|
||||
@@ -226,9 +226,38 @@
|
||||
"docker_images": 0
|
||||
},
|
||||
"image_url": "https:\/\/weval-consulting.com\/data\/wevia-apple-uploads\/apple_69e5209da50218.35918305.png"
|
||||
},
|
||||
{
|
||||
"id": "apple_69e521ffdb08a6.67447739",
|
||||
"filename": "test-heic.heic",
|
||||
"stored_as": "apple_69e521ffdb0357.25823400.heic",
|
||||
"size_bytes": 300706,
|
||||
"scan_ms": 12228,
|
||||
"scanned_at": "2026-04-19T18:42:20+00:00",
|
||||
"caption": "HEIC native iPhone test",
|
||||
"ocr_text": "@ WEVAL ERP Gap-Fill Agents.\n\nOffre service commerciale — Agents Al autonomes pour combler les gaps fonctionnels des ERPS\nSAP\/Oracle\/Sage, par département métier, adaptables 7 verticaux industriels.\n\n| © Les ERPs SAP\/Oracle\/Sage ne couvrent pas 100% des besoins métier. Nos agents Al comblent les gaps là où ERPs échouent.\n\nRISQUES CATALOGUÉS ERP GAPS IDENTIFIÉS VERTICAUX COUVERTS AGENTS PACK TOTAL\n8 critical -14 high 7 départements Retail Pharma Banque «Industrie - 23 clients identifiés.\n\nServices - Conseil: Energie\n\n| @ Matrice des risques 5x5 — Likelihood x impact, mitigés par agents WEVAL\n\nLÉGENDE SÉVÉRITÉ\n\nne IMPACT 1 IMPACT 2 IMPACT 3\nible\n\n1 Modéré (5-9) -\n\nI élevé (10-14) cf ë\n\nI critique (15-25) .\n\n3\n\nChaque cellule = nombre de risques, ï\n\nCliquez pour filtrer la liste ci-dessous.\n? 3\n«\n4 6\na\ni 6\n\n{ wo? - tsers-25 { eas - sus { por - 1645-20\n\nTAM\n\nPELINE\n\n7.3 me\n\n23 clients x revenue avg\n\nIMPACT 5\n\nV67 Registry — 84 ERP agents \/ 96\ntotal\n\nSavings potentiel : 21.11 M€\/an\nPaperclip source-oftruth + API V67\n",
|
||||
"vision_text": "Here's the extracted information from the image:\n\n### 1) All text visible:\n\n* Logout\n* ← WTP Portal\n* Print offre\n* WEVAL ERP Gap-Fill Agents\n* Offre service commerciale — Agents AI autonomes pour combler les gaps fonctionnels des ERPs SAP\/Oracle\/Sage, par département métier, adaptables à 7 verticaux industriels.\n* Les ERPs SAP\/Oracle\/Sage ne couvrent pas 100% des besoins métier. Nos agents AI comblent les gaps là où ERPs échouent.\n* RISQUES CATALOGUÉS\n* 25\n* 8 critical - 14 high\n* ERP GAPS IDENTIFIÉS\n* 33\n* 7 départements\n* VERTICAUX COUVERTS\n* 7\n* Retail • Pharma • Banque • Industrie • Services • Conseil • Énergie\n* AGENTS PACK TOTAL\n* 149\n* 23 clients identifiés\n* TAM PIPELINE\n* 7.3 M€\n* 23 clients x revenue avg\n* Matrice des risques 5x5 — Likelihood x Impact, mitigés par agents WEVAL\n* LÉGENDE SÉVÉRITÉ\n* Faible (1-4)\n* Modéré (5-9)\n* Élevé (10-14)\n* Critique (15-25)\n* Chaque cellule = nombre de risques. Cliquez pour filtrer la liste ci-dessous.\n* IMPACT 1\n* IMPACT 2\n* IMPACT 3\n* IMPACT 4\n* IMPACT 5\n* L=5\n* L=4\n* L=3\n* L=2\n* L=1\n* (Matrix cell values): . . . 1 2\n* (Matrix cell values): . . 2 7 3\n* (Matrix cell values): . . . 3 5\n* (Matrix cell values): . . . . 2\n* (Matrix cell values): . . . . .\n* R02 • L5xI5=25\n* R13 • L5xI5=25\n* R01 • L4xI5=20\n* V67 Registry — 84 ERP agents \/ 96 total\n* Savings potentiel : 21.11 M€\/an\n* Paperclip source-of-truth • API V67\n\n### 2) Names of software tools, frameworks, AI agents, open-source projects, SaaS platforms mentioned:\n\n* WEVAL (implied company\/product name for the \"ERP Gap-Fill Agents\")\n* ERP (Enterprise Resource Planning - a category of software, used as a term here)\n* Agents AI (Refers to autonomous AI agents)\n* SAP (Specific ERP vendor)\n* Oracle (Specific ERP vendor)\n* Sage (Specific ERP vendor)\n* V67 Registry (A specific system or platform)\n* Paperclip (Implies a system or data source named \"Paperclip\")\n\n### 3) Architecture diagrams components:\n\n* None visible. The image displays a dashboard with data visualizations.\n\n### 4) GitHub URLs or repo names:\n\n* None visible.\n\n### 5) Docker images:\n\n* None visible.\n\n### 6) Programming languages visible:\n\n* None visible.",
|
||||
"oss_extracted": {
|
||||
"github_urls": [],
|
||||
"project_names": [
|
||||
"docker",
|
||||
"sap",
|
||||
"oracle",
|
||||
"paperclip",
|
||||
"weval"
|
||||
],
|
||||
"stacks": [],
|
||||
"docker_images": []
|
||||
},
|
||||
"counts": {
|
||||
"github_urls": 0,
|
||||
"project_names": 5,
|
||||
"docker_images": 0
|
||||
},
|
||||
"image_url": "https:\/\/weval-consulting.com\/data\/wevia-apple-uploads\/apple_69e521ffdb0357.25823400.heic"
|
||||
}
|
||||
],
|
||||
"total": 8,
|
||||
"oss_total": 36,
|
||||
"last_scan": "2026-04-19T18:36:28+00:00"
|
||||
"total": 9,
|
||||
"oss_total": 41,
|
||||
"last_scan": "2026-04-19T18:42:20+00:00"
|
||||
}
|
||||
BIN
data/wevia-apple-uploads/apple_69e521ffdb0357.25823400.heic
Normal file
BIN
data/wevia-apple-uploads/apple_69e521ffdb0357.25823400.heic
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 294 KiB |
BIN
data/wevia-apple-uploads/apple_69e521ffdb0357.25823400.jpg
Normal file
BIN
data/wevia-apple-uploads/apple_69e521ffdb0357.25823400.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 198 KiB |
@@ -269,7 +269,7 @@ async function loadScanPanel() {
|
||||
].map(([lbl,val,color]) => `<div style="background:var(--bg-2);border:1px solid var(--border);border-radius:10px;padding:12px 14px;position:relative;overflow:hidden"><div style="position:absolute;left:0;top:0;width:3px;height:100%;background:${color}"></div><div style="color:var(--dim);font-size:10px;text-transform:uppercase;letter-spacing:.5px;font-weight:600;margin-bottom:4px">${lbl}</div><div style="font-size:20px;font-weight:800;color:var(--text)">${val}</div></div>`).join('');
|
||||
// Per-ERP grid
|
||||
document.getElementById('scan-per-erp').innerHTML = d.per_erp.map(e => {
|
||||
const srcs = (e.sources||[]).filter(x=>x&&x!=='Other').join(' · ') || 'Other';
|
||||
const _rawSrc=e.sources;const _srcArr=Array.isArray(_rawSrc)?_rawSrc:(typeof _rawSrc==='string'?_rawSrc.split(/[,;|]/).map(function(s){return s.trim();}):(_rawSrc&&typeof _rawSrc==='object'?Object.values(_rawSrc).map(function(v){return String(v);}):[]));const srcs=_srcArr.filter(function(x){return x&&x!=='Other';}).join(' · ')||'Other';
|
||||
const conf = parseFloat(e.avg_conf)||0;
|
||||
const confColor = conf >= 0.7 ? '#22c55e' : (conf >= 0.5 ? '#eab308' : '#f43f5e');
|
||||
return `<div style="background:var(--bg-2);border:1px solid var(--border);border-radius:8px;padding:10px 12px;display:flex;justify-content:space-between;align-items:center;gap:8px" onmouseover="this.style.borderColor='var(--accent)'" onmouseout="this.style.borderColor='var(--border)'">
|
||||
@@ -426,79 +426,6 @@ function renderPP(){
|
||||
|
||||
load();
|
||||
|
||||
// === OPUS DRILL-DOWN PILOT v1 19avr — append-only, doctrine #14 ===
|
||||
(function(){
|
||||
if (window.__opusDrillInit) return; window.__opusDrillInit = true;
|
||||
var modal = document.createElement('div');
|
||||
modal.id = 'opus-drill-modal';
|
||||
modal.style.cssText = 'position:fixed;inset:0;background:rgba(0,0,0,0.85);backdrop-filter:blur(8px);display:none;align-items:center;justify-content:center;z-index:9999;padding:24px;cursor:pointer';
|
||||
var inner = document.createElement('div');
|
||||
inner.id = 'opus-drill-inner';
|
||||
inner.style.cssText = 'max-width:820px;width:100%;max-height:90vh;overflow:auto;background:var(--bg-1,#0b0d15);border:1px solid var(--border-h,rgba(99,102,241,0.35));border-radius:16px;padding:32px;cursor:default;box-shadow:0 20px 60px rgba(0,0,0,0.6)';
|
||||
inner.addEventListener('click', function(e){ e.stopPropagation(); });
|
||||
modal.appendChild(inner);
|
||||
modal.addEventListener('click', function(){ modal.style.display='none'; });
|
||||
document.addEventListener('keydown', function(e){ if(e.key==='Escape') modal.style.display='none'; });
|
||||
if (document.body) document.body.appendChild(modal);
|
||||
else document.addEventListener('DOMContentLoaded', function(){ document.body.appendChild(modal); });
|
||||
|
||||
function fmtEur(n){ if(!n) return '0€'; if(n>=1e6) return (n/1e6).toFixed(2)+'M€'; if(n>=1e3) return Math.round(n/1000)+'k€'; return n+'€'; }
|
||||
|
||||
function renderPP(pp, DATA) {
|
||||
var vendors = (DATA && DATA.erp_vendors) || {};
|
||||
var erps = (pp.erps_affected || []).map(function(e){
|
||||
var v = vendors[e] || {};
|
||||
return '<span style="display:inline-block;padding:4px 10px;margin:3px;background:rgba(99,102,241,0.08);border:1px solid rgba(99,102,241,0.25);border-radius:6px;font-size:11px;color:#e2e8f0">'+(v.label || e)+'</span>';
|
||||
}).join('');
|
||||
return [
|
||||
'<div style="display:flex;gap:12px;margin-bottom:20px;align-items:center;flex-wrap:wrap">',
|
||||
'<span style="font-family:JetBrains Mono,monospace;color:#eab308;font-weight:700;font-size:16px">'+pp.id+'</span>',
|
||||
'<span style="padding:4px 12px;background:rgba(168,85,247,0.15);color:#d4a7fa;border-radius:20px;font-size:10.5px;text-transform:uppercase;letter-spacing:1px;font-weight:700">'+pp.dept+'</span>',
|
||||
'<button onclick="document.getElementById(\'opus-drill-modal\').style.display=\'none\'" style="margin-left:auto;padding:6px 14px;background:#171b2a;border:1px solid rgba(99,102,241,0.15);color:#e2e8f0;border-radius:8px;cursor:pointer;font-size:12px">✕ Fermer (Esc)</button>',
|
||||
'</div>',
|
||||
'<h2 style="font-size:22px;margin-bottom:8px;color:#e2e8f0;line-height:1.35">'+pp.pain+'</h2>',
|
||||
'<p style="color:#94a3b8;margin-bottom:24px;font-size:13.5px;line-height:1.55">'+pp.business_cost+'</p>',
|
||||
'<div style="margin-bottom:20px"><div style="color:#ef4444;font-size:11px;text-transform:uppercase;letter-spacing:1px;margin-bottom:8px;font-weight:700">Pourquoi l\'ERP échoue</div><p style="font-size:13px;line-height:1.55;color:#cbd5e1">'+pp.why_erp_fails+'</p></div>',
|
||||
'<div style="margin-bottom:20px;padding:18px;background:rgba(20,184,166,0.06);border:1px solid rgba(20,184,166,0.25);border-radius:12px">',
|
||||
'<div style="color:#14b8a6;font-size:11px;text-transform:uppercase;letter-spacing:1px;margin-bottom:8px;font-weight:700">🤖 Agent WEVAL</div>',
|
||||
'<h4 style="font-size:16px;margin-bottom:6px;color:#e2e8f0">'+pp.agent+'</h4>',
|
||||
'<p style="color:#94a3b8;font-size:12.5px;line-height:1.55">'+pp.agent_how+'</p>',
|
||||
'</div>',
|
||||
'<div style="padding:18px;background:linear-gradient(135deg,rgba(234,179,8,0.12),rgba(168,85,247,0.08));border:1px solid rgba(234,179,8,0.3);border-radius:12px;margin-bottom:20px;display:flex;justify-content:space-between;align-items:center;gap:16px;flex-wrap:wrap">',
|
||||
'<div><div style="font-size:11px;text-transform:uppercase;letter-spacing:1px;color:#94a3b8;margin-bottom:4px;font-weight:700">Savings estimés</div><div style="font-size:13px;color:#94a3b8">'+(pp.savings_note || '')+'</div></div>',
|
||||
'<div style="font-size:30px;font-weight:800;color:#eab308;font-family:JetBrains Mono,monospace">'+fmtEur(pp.savings_eur_year)+'<span style="font-size:14px;color:#94a3b8">/an</span></div>',
|
||||
'</div>',
|
||||
'<div><div style="font-size:11px;text-transform:uppercase;letter-spacing:1px;color:#94a3b8;margin-bottom:10px;font-weight:700">ERPs affectés ('+(pp.erps_affected||[]).length+')</div><div>'+erps+'</div></div>'
|
||||
].join('');
|
||||
}
|
||||
|
||||
document.addEventListener('click', function(e) {
|
||||
var card = e.target.closest && e.target.closest('.pp-card');
|
||||
if (!card || !card.dataset || !card.dataset.ppId) return;
|
||||
var DATA = window.DATA || null;
|
||||
if (!DATA) return;
|
||||
var pp = (DATA.pain_points || []).find(function(p){ return p.id === card.dataset.ppId; });
|
||||
if (!pp) return;
|
||||
document.getElementById('opus-drill-inner').innerHTML = renderPP(pp, DATA);
|
||||
modal.style.display = 'flex';
|
||||
});
|
||||
|
||||
var observer = new MutationObserver(function(){
|
||||
var cards = document.querySelectorAll('.pp-card:not([data-pp-id])');
|
||||
cards.forEach(function(card){
|
||||
var idEl = card.querySelector('.pp-id');
|
||||
if (idEl) {
|
||||
card.dataset.ppId = idEl.textContent.trim();
|
||||
card.style.cursor = 'pointer';
|
||||
card.setAttribute('role', 'button');
|
||||
card.setAttribute('tabindex', '0');
|
||||
card.setAttribute('aria-label', 'Cliquer pour voir détails pain point');
|
||||
}
|
||||
});
|
||||
});
|
||||
observer.observe(document.body || document.documentElement, {childList:true, subtree:true});
|
||||
})();
|
||||
// === OPUS DRILL-DOWN PILOT END ===
|
||||
|
||||
</script>
|
||||
</body>
|
||||
|
||||
Reference in New Issue
Block a user