diff --git a/all-ia-hub.html b/all-ia-hub.html index df8b53659..9e9cdc5cb 100644 --- a/all-ia-hub.html +++ b/all-ia-hub.html @@ -89,8 +89,18 @@ body.light #theme-toggle::before{content:"\263D"} /* V142-FOOTER-STRIP: body padding to prevent footer overlap */ body{padding-bottom:26px} +
+ + diff --git a/api/agent-disk-monitor.json b/api/agent-disk-monitor.json index a9537dd53..2b5adddeb 100644 --- a/api/agent-disk-monitor.json +++ b/api/agent-disk-monitor.json @@ -1,6 +1,6 @@ { "agent": "V41_Disk_Monitor", - "ts": "2026-04-21T22:30:01+02:00", + "ts": "2026-04-21T23:00:02+02:00", "disk_pct": 82, "disk_free_gb": 27, "growth_per_day_gb": 1.5, diff --git a/api/agent-escalation.json b/api/agent-escalation.json index 09e0a4396..335557de5 100644 --- a/api/agent-escalation.json +++ b/api/agent-escalation.json @@ -1,6 +1,6 @@ { "agent": "V41_Risk_Escalation", - "ts": "2026-04-21T22:45:03+02:00", + "ts": "2026-04-21T23:00:03+02:00", "dg_alerts_active": 7, "wevia_life_stats_preview": "{ "ok": true, diff --git a/api/agent-feature-tracker.json b/api/agent-feature-tracker.json index bba04aa53..7294f353b 100644 --- a/api/agent-feature-tracker.json +++ b/api/agent-feature-tracker.json @@ -1,12 +1,12 @@ { "agent": "V41_Feature_Adoption_Tracker", - "ts": "2026-04-21T22:00:02+02:00", + "ts": "2026-04-21T23:00:02+02:00", "features_tracked": 15, - "features_used_24h": 9, - "adoption_pct": 60, - "chat_queries_last_1k_log": 0, - "wtp_views_last_1k_log": 0, - "dg_views_last_1k_log": 0, + "features_used_24h": 12, + "adoption_pct": 80, + "chat_queries_last_1k_log": 10, + "wtp_views_last_1k_log": 130, + "dg_views_last_1k_log": 3, "skill_runs_last_1k_log": 0, "recommendation": "UX onboarding tour for unused features", "cron_schedule": "hourly", diff --git a/api/agent-mql-scores.json b/api/agent-mql-scores.json index 7cd0a3dce..4be85b4a4 100644 --- a/api/agent-mql-scores.json +++ b/api/agent-mql-scores.json @@ -1,6 +1,6 @@ { "agent": "V41_MQL_Scoring", - "ts": "2026-04-21T22:00:03+02:00", + "ts": "2026-04-21T23:00:03+02:00", "leads_total": 48, "mql_current": 16, "sql_current": 6, diff --git a/api/agent-risk-monitor.json b/api/agent-risk-monitor.json index 2a7bde8ca..af12b2b0c 100644 --- a/api/agent-risk-monitor.json +++ b/api/agent-risk-monitor.json @@ -1,11 +1,11 @@ { "agent": "V54_Risk_Monitor_Live", - "ts": "2026-04-21T22:30:02+02:00", + "ts": "2026-04-21T23:00:03+02:00", "critical_risks": { "RW01_pipeline_vide": { "pipeline_keur": 0, - "mql_auto": 17, - "residual_risk_pct": 83, + "mql_auto": 20, + "residual_risk_pct": 80, "trend": "mitigation_V42_V45_active" }, "RW02_dependance_ethica": { @@ -22,7 +22,7 @@ }, "RW12_burnout": { "agents_cron_active": 15, - "load_5min": "3.98", + "load_5min": "5.02", "automation_coverage_pct": 70, "residual_risk_pct": 60, "trend": "V52_goldratt_options_active" diff --git a/api/ambre-pw-tests/output/.playwright-artifacts-0/page@37893787feb6ec0bda6250b68c8a1162.webm b/api/ambre-pw-tests/output/.playwright-artifacts-0/page@37893787feb6ec0bda6250b68c8a1162.webm deleted file mode 100644 index afc51fd87..000000000 Binary files a/api/ambre-pw-tests/output/.playwright-artifacts-0/page@37893787feb6ec0bda6250b68c8a1162.webm and /dev/null differ diff --git a/api/ambre-pw-tests/output/v7-00-initial.png b/api/ambre-pw-tests/output/v7-00-initial.png deleted file mode 100644 index 2c7d2d014..000000000 Binary files a/api/ambre-pw-tests/output/v7-00-initial.png and /dev/null differ diff --git a/api/ambre-pw-tests/output/v7-01-PDF.png b/api/ambre-pw-tests/output/v7-01-PDF.png deleted file mode 100644 index 8f87a5152..000000000 Binary files a/api/ambre-pw-tests/output/v7-01-PDF.png and /dev/null differ diff --git a/api/ambre-pw-tests/output/v7-02-Word.png b/api/ambre-pw-tests/output/v7-02-Word.png deleted file mode 100644 index 1006c05f3..000000000 Binary files a/api/ambre-pw-tests/output/v7-02-Word.png and /dev/null differ diff --git a/api/ambre-pw-tests/tests/capabilities-v7.spec.js b/api/ambre-pw-tests/tests/capabilities-v7.spec.js deleted file mode 100644 index 797f1482e..000000000 --- a/api/ambre-pw-tests/tests/capabilities-v7.spec.js +++ /dev/null @@ -1,113 +0,0 @@ -const { test, expect } = require("@playwright/test"); - -const CAPABILITIES = [ - { name: "PDF", msg: "Genere un PDF sur: strategie WEVIA 2026", needle: "generated/wevia-" }, - { name: "Word", msg: "Genere un document Word sur: procedure qualite", needle: "generated/wevia-" }, - { name: "PPT", msg: "Genere une presentation sur: pitch deck investor", needle: "generated/wevia-" }, - { name: "Mermaid", msg: "Genere un schema mermaid pour: workflow commandes", needle: "graph TD" }, - { name: "Image", msg: "Genere une image: paysage nature forest", needle: "generated/wevia-img" }, - { name: "Code", msg: "Ecris le code python pour: fibonacci recursif", needle: "wevia-code" }, - { name: "Traduire", msg: "Traduis en anglais: merci beaucoup mon ami", needle: "English" }, - { name: "Bilan", msg: "bilan complet system", needle: "WEVIA" }, -]; - -test("V7 8/8 capabilities · robust JSON + retry · full video", async ({ page }) => { - test.setTimeout(480000); - - let errorCount = 0; - page.on("pageerror", err => { errorCount++; console.log(`[err] ${err.message.substring(0, 150)}`); }); - page.on("console", msg => { - if (msg.type() === "error") { - const t = msg.text(); - if (!t.includes("503") && !t.includes("favicon")) console.log(`[console err] ${t.substring(0, 150)}`); - } - }); - - await page.goto("/wevia.html"); - await page.waitForLoadState("networkidle"); - await page.waitForTimeout(2500); - await page.screenshot({ path: "output/v7-00-initial.png", fullPage: false }); - console.log("📸 Initial v7 captured"); - - const results = []; - - for (let i = 0; i < CAPABILITIES.length; i++) { - const cap = CAPABILITIES[i]; - const num = String(i + 1).padStart(2, "0"); - console.log(`\n[${num}/8] ${cap.name}`); - console.log(` msg: ${cap.msg}`); - - let success = false; - let attempts = 0; - const maxAttempts = 2; - - while (!success && attempts < maxAttempts) { - attempts++; - const attemptLabel = attempts > 1 ? ` (retry ${attempts})` : ""; - - try { - const beforeNeedleCount = await page.evaluate((n) => - (document.body.innerText.match(new RegExp(n.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"), "g")) || []).length - , cap.needle); - - const input = page.locator("#msgInput"); - await input.click({ force: true }); - await page.keyboard.press("Control+A"); - await page.keyboard.press("Delete"); - await input.fill(cap.msg); - await page.waitForTimeout(400); - await input.press("Enter"); - console.log(` 📤 sent${attemptLabel} (needle "${cap.needle}" before: ${beforeNeedleCount})`); - - const waitStart = Date.now(); - while (Date.now() - waitStart < 45000) { - const afterCount = await page.evaluate((n) => - (document.body.innerText.match(new RegExp(n.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"), "g")) || []).length - , cap.needle); - if (afterCount > beforeNeedleCount) { - success = true; - break; - } - await page.waitForTimeout(1500); - } - const elapsed = ((Date.now() - waitStart) / 1000).toFixed(1); - - if (success) { - console.log(` ✅ PASS in ${elapsed}s${attemptLabel}`); - } else { - console.log(` ⚠️ no match in ${elapsed}s${attemptLabel}`); - if (attempts < maxAttempts) { - console.log(` 🔁 will retry...`); - await page.waitForTimeout(3000); - } - } - } catch (e) { - console.log(` ❌ attempt${attemptLabel} err: ${e.message.substring(0, 100)}`); - if (attempts < maxAttempts) await page.waitForTimeout(2000); - } - } - - // Scroll + screenshot - await page.evaluate(() => { - const msgs = document.getElementById("messages"); - if (msgs) msgs.scrollTop = msgs.scrollHeight; - }); - await page.waitForTimeout(2500); - await page.screenshot({ path: `output/v7-${num}-${cap.name}.png`, fullPage: false }); - console.log(` 📸 v7-${num}-${cap.name}.png`); - - results.push({ name: cap.name, pass: success, attempts: attempts }); - await page.waitForTimeout(1500); - } - - // Final full page - await page.evaluate(() => window.scrollTo(0, document.body.scrollHeight)); - await page.waitForTimeout(2000); - await page.screenshot({ path: "output/v7-99-final.png", fullPage: true }); - - const passCount = results.filter(r => r.pass).length; - console.log(`\n═══ V7 BILAN ═══`); - console.log(`Result: ${passCount}/8 capabilities PASS`); - console.log(`Page errors: ${errorCount}`); - results.forEach(r => console.log(` ${r.pass ? "✅" : "❌"} ${r.name} (${r.attempts} attempt${r.attempts>1?"s":""})`)); -}); \ No newline at end of file diff --git a/api/ambre-pw-tests/tests/capabilities-v8.spec.js b/api/ambre-pw-tests/tests/capabilities-v8.spec.js new file mode 100644 index 000000000..5ac03e3ae --- /dev/null +++ b/api/ambre-pw-tests/tests/capabilities-v8.spec.js @@ -0,0 +1,64 @@ +const { test } = require("@playwright/test"); +const CAPABILITIES = [ + { name: "PDF", msg: "Genere un PDF sur: strategie enterprise 2026", needle: ".pdf" }, + { name: "Word", msg: "Genere un document Word sur: manuel procedure qualite", needle: ".docx" }, + { name: "PPT", msg: "Genere une presentation sur: pitch investor series A", needle: ".pptx" }, + { name: "Mermaid", msg: "Genere un schema mermaid pour: processus achat valide", needle: "graph TD" }, + { name: "Image", msg: "Genere une image: oasis palmiers coucher soleil", needle: "generated/wevia-img" }, + { name: "Code", msg: "Ecris le code python pour: fibonacci recursif memoize", needle: "wevia-code" }, + { name: "Traduire", msg: "Traduis en anglais: merci infiniment pour votre aide", needle: "English:" }, + { name: "Bilan", msg: "bilan complet architecture", needle: "agents" }, +]; +test("V8 final 8/8", async ({ page }) => { + test.setTimeout(480000); + let errs = 0; + page.on("pageerror", e => { errs++; console.log("[pageerror]", e.message.substring(0,120)); }); + await page.goto("/wevia.html"); + await page.waitForLoadState("networkidle"); + await page.waitForTimeout(2500); + await page.screenshot({ path: "output/v8-00-initial.png" }); + console.log("📸 initial v8"); + const results = []; + for (let i = 0; i < CAPABILITIES.length; i++) { + const cap = CAPABILITIES[i]; + const num = String(i + 1).padStart(2, "0"); + console.log("\n[" + num + "/8] " + cap.name); + let ok = false, attempts = 0; + while (!ok && attempts < 2) { + attempts++; + try { + const before = await page.evaluate(n => (document.body.innerText.match(new RegExp(n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),"g"))||[]).length, cap.needle); + const input = page.locator("#msgInput"); + await input.click({ force: true }); + await page.keyboard.press("Control+A"); + await page.keyboard.press("Delete"); + await input.fill(cap.msg); + await page.waitForTimeout(400); + await input.press("Enter"); + console.log(" 📤 sent (x" + before + ")"); + const s = Date.now(); + while (Date.now() - s < 45000) { + const a = await page.evaluate(n => (document.body.innerText.match(new RegExp(n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),"g"))||[]).length, cap.needle); + if (a > before) { ok = true; break; } + await page.waitForTimeout(1500); + } + const el = ((Date.now()-s)/1000).toFixed(1); + console.log(ok ? " ✅ PASS " + el + "s" : " ⚠️ no match " + el + "s"); + if (!ok && attempts < 2) await page.waitForTimeout(3000); + } catch (e) { console.log(" ❌", e.message.substring(0,100)); } + } + await page.evaluate(() => { const m=document.getElementById("messages"); if (m) m.scrollTop=m.scrollHeight; }); + await page.waitForTimeout(2200); + await page.screenshot({ path: "output/v8-" + num + "-" + cap.name + ".png" }); + console.log(" 📸 v8-" + num + "-" + cap.name + ".png"); + results.push({ name: cap.name, pass: ok }); + await page.waitForTimeout(1200); + } + await page.evaluate(() => window.scrollTo(0, document.body.scrollHeight)); + await page.waitForTimeout(2000); + await page.screenshot({ path: "output/v8-99-final.png", fullPage: true }); + const p = results.filter(r => r.pass).length; + console.log("\n═══ V8 FINAL ═══"); + console.log(p + "/8 PASS · " + errs + " page errors"); + results.forEach(r => console.log(" " + (r.pass ? "✅" : "❌") + " " + r.name)); +}); diff --git a/api/ambre-pw-v8-deploy.php b/api/ambre-pw-v8-deploy.php new file mode 100644 index 000000000..f09aa9bfd --- /dev/null +++ b/api/ambre-pw-v8-deploy.php @@ -0,0 +1,11 @@ + $written, + "removed" => $removed, + "specs_after" => array_map("basename", glob("$base/*.spec.js")), +]); diff --git a/api/ambre-specs-list.php b/api/ambre-specs-list.php new file mode 100644 index 000000000..d231973d9 --- /dev/null +++ b/api/ambre-specs-list.php @@ -0,0 +1,8 @@ + array_map("basename", glob("$base/*.spec.js")), + "v7_exists" => file_exists("$base/capabilities-v7.spec.js"), + "v8_exists" => file_exists("$base/capabilities-v8.spec.js"), +]); diff --git a/api/architecture-scan.json b/api/architecture-scan.json index 9964ba2fb..e69de29bb 100644 --- a/api/architecture-scan.json +++ b/api/architecture-scan.json @@ -1,1956 +0,0 @@ -{ - "generated": "2026-04-21 20:30:01", - "version": "1.0", - "servers": [ - { - "id": "S204", - "ip": "204.168.152.13", - "private": "10.1.0.2", - "role": "PRIMARY", - "ssh": 49222, - "disk_pct": 82, - "disk_avail": "27G", - "uptime": "up 1 week, 10 hours, 38 minutes", - "nginx": "active", - "php_fpm": "active", - "php_version": "8.5.5" - }, - { - "id": "S95", - "ip": "95.216.167.89", - "private": "10.1.0.3", - "role": "WEVADS Arsenal", - "ssh": 22, - "disk_pct": 81, - "disk_avail": "29G", - "sentinel": 1 - }, - { - "id": "S151", - "ip": "151.80.235.110", - "private": null, - "role": "DR\/Tracking OVH", - "ssh": 22 - } - ], - "docker": [ - { - "name": "loki", - "status": "Up 5 days", - "ports": "" - }, - { - "name": "listmonk", - "status": "Up 5 days", - "ports": "" - }, - { - "name": "plausible-plausible-1", - "status": "Up 4 days", - "ports": "" - }, - { - "name": "plausible-plausible-db-1", - "status": "Up 4 days", - "ports": "" - }, - { - "name": "plausible-plausible-events-db-1", - "status": "Up 4 days", - "ports": "" - }, - { - "name": "n8n-docker-n8n-1", - "status": "Up 5 days", - "ports": "" - }, - { - "name": "mattermost-docker-mm-db-1", - "status": "Up 5 days", - "ports": "" - }, - { - "name": "mattermost-docker-mattermost-1", - "status": "Up 5 days (healthy)", - "ports": "" - }, - { - "name": "twenty", - "status": "Up 5 days", - "ports": "" - }, - { - "name": "twenty-redis", - "status": "Up 5 days", - "ports": "" - }, - { - "name": "langfuse", - "status": "Up 5 days", - "ports": "" - }, - { - "name": "redis-weval", - "status": "Up 7 days", - "ports": "" - }, - { - "name": "gitea", - "status": "Up 7 days", - "ports": "" - }, - { - "name": "node-exporter", - "status": "Up 7 days", - "ports": "" - }, - { - "name": "prometheus", - "status": "Up 7 days", - "ports": "" - }, - { - "name": "searxng", - "status": "Up 7 days", - "ports": "" - }, - { - "name": "uptime-kuma", - "status": "Up 44 hours (healthy)", - "ports": "" - }, - { - "name": "vaultwarden", - "status": "Up 7 days (healthy)", - "ports": "" - }, - { - "name": "qdrant", - "status": "Up 7 days", - "ports": "" - } - ], - "domains": [ - { - "file": "analytics.weval-consulting.com", - "server_names": [ - "analytics.weval-consulting.com" - ], - "ssl": true, - "php-session": false, - "php-session_paths": false, - "auth_complete": false - }, - { - "file": "arsenal.weval-consulting.com", - "server_names": [ - "arsenal.weval-consulting.com" - ], - "ssl": true, - "php-session": false, - "php-session_paths": false, - "auth_complete": false - }, - { - "file": "code-weval", - "server_names": [ - "code.weval-consulting.com" - ], - "ssl": true, - "php-session": false, - "php-session_paths": false, - "auth_complete": false - }, - { - "file": "crm.weval-consulting.com", - "server_names": [ - "crm.weval-consulting.com" - ], - "ssl": true, - "php-session": false, - "php-session_paths": false, - "auth_complete": false - }, - { - "file": "ethica", - "server_names": [ - "ethica.wevup.app", - "consent.wevup.app" - ], - "ssl": true, - "php-session": false, - "php-session_paths": false, - "auth_complete": false - }, - { - "file": "git.weval-consulting.com", - "server_names": [ - "git.weval-consulting.com" - ], - "ssl": true, - "php-session": false, - "php-session_paths": false, - "auth_complete": false - }, - { - "file": "langfuse.weval-consulting.com", - "server_names": [ - "langfuse.weval-consulting.com" - ], - "ssl": true, - "php-session": false, - "php-session_paths": false, - "auth_complete": false - }, - { - "file": "mirofish.weval-consulting.com", - "server_names": [ - "mirofish.weval-consulting.com" - ], - "ssl": true, - "php-session": false, - "php-session_paths": false, - "auth_complete": false - }, - { - "file": "mm.weval-consulting.com", - "server_names": [ - "mm.weval-consulting.com" - ], - "ssl": true, - "php-session": false, - "php-session_paths": false, - "auth_complete": false - }, - { - "file": "monitor.weval-consulting.com", - "server_names": [ - "monitor.weval-consulting.com" - ], - "ssl": true, - "php-session": false, - "php-session_paths": false, - "auth_complete": false - }, - { - "file": "n8n.weval-consulting.com", - "server_names": [ - "n8n.weval-consulting.com" - ], - "ssl": true, - "php-session": false, - "php-session_paths": false, - "auth_complete": false - }, - { - "file": "paperclip.weval-consulting.com", - "server_names": [ - "paperclip.weval-consulting.com" - ], - "ssl": true, - "php-session": false, - "php-session_paths": false, - "auth_complete": false - }, - { - "file": "wevads.weval-consulting.com", - "server_names": [ - "wevads.weval-consulting.com" - ], - "ssl": true, - "php-session": false, - "php-session_paths": false, - "auth_complete": false - }, - { - "file": "weval-consulting", - "server_names": [ - "weval-consulting.com", - "www.weval-consulting.com" - ], - "ssl": true, - "php-session": false, - "php-session_paths": false, - "auth_complete": false - } - ], - "screens": { - "s204_html": 317, - "s204_products": 104, - "s204_api_php": 828, - "s204_wevia_php": 34, - "s95_arsenal_html": 1377, - "s95_arsenal_api": 377 - }, - "auth": { - "system": "PHP Session Auth", - "authentik": "REMOVED", - "pass": 24, - "fail": 0 - }, - "databases": { - "s204": [ - "postgres", - "adx_system", - "wevia_db", - "twenty_db", - "mattermost_db", - "deerflow", - "nocodb", - "paperclip", - "langfuse" - ], - "key_tables": { - "kb_learnings": 5560, - "kb_documents": 0, - "ethica_medecins": 50004, - "enterprise_agents": 0 - } - }, - "ollama": [ - { - "name": "weval-brain-v4:latest", - "family": "qwen3", - "params": "4.0B", - "quant": "Q4_K_M", - "size_gb": 2.5 - }, - { - "name": "llama3.2:latest", - "family": "llama", - "params": "3.2B", - "quant": "Q4_K_M", - "size_gb": 2 - }, - { - "name": "nomic-embed-text:latest", - "family": "nomic-bert", - "params": "137M", - "quant": "F16", - "size_gb": 0.3 - }, - { - "name": "weval-brain-v3:latest", - "family": "qwen3", - "params": "4.0B", - "quant": "Q4_K_M", - "size_gb": 2.5 - }, - { - "name": "nomic-embed-text:v1.5", - "family": "nomic-bert", - "params": "137M", - "quant": "F16", - "size_gb": 0.3 - }, - { - "name": "qwen3:4b", - "family": "qwen3", - "params": "4.0B", - "quant": "Q4_K_M", - "size_gb": 2.5 - }, - { - "name": "all-minilm:latest", - "family": "bert", - "params": "23M", - "quant": "F16", - "size_gb": 0 - } - ], - "qdrant": [ - { - "name": "weval_skills", - "vectors": 19089 - }, - { - "name": "wevia_graph", - "vectors": 3 - }, - { - "name": "weval_intents_memory", - "vectors": 50 - }, - { - "name": "obsidian_vault", - "vectors": 46 - }, - { - "name": "kb_bpmn_flows", - "vectors": 7 - }, - { - "name": "kb_ethica_pharma", - "vectors": 16 - }, - { - "name": "kb_consulting_strategy", - "vectors": 6 - }, - { - "name": "wevia_learnings", - "vectors": 1736 - }, - { - "name": "wevia_brain_knowledge", - "vectors": 294 - }, - { - "name": "kb_vsm_best_practices", - "vectors": 7 - }, - { - "name": "kb_bpmn_patterns", - "vectors": 7 - }, - { - "name": "kb_dmaic_playbooks", - "vectors": 7 - }, - { - "name": "kb_wevads_deliv", - "vectors": 6 - }, - { - "name": "wevia_memory_768", - "vectors": 82 - }, - { - "name": "wevia_kb_768", - "vectors": 255 - }, - { - "name": "weval_agents_registry", - "vectors": 50 - }, - { - "name": "wevia_kb", - "vectors": 386 - }, - { - "name": "wevia_memory", - "vectors": 48 - }, - { - "name": "kb_lean6sigma", - "vectors": 10 - } - ], - "ai_providers": [ - { - "name": "Cerebras", - "model": "Qwen-235B", - "tier": "T1", - "status": "active" - }, - { - "name": "Groq", - "model": "Llama-4-Scout", - "tier": "T1", - "status": "active" - }, - { - "name": "SambaNova", - "model": "Llama-3.3-70B", - "tier": "T1", - "status": "active" - }, - { - "name": "NVIDIA NIM", - "model": "Llama-3.1-70B", - "tier": "T1", - "status": "active" - }, - { - "name": "Together", - "model": "Qwen-2.5-72B", - "tier": "T1", - "status": "active" - }, - { - "name": "Mistral", - "model": "Mistral-Small", - "tier": "T2", - "status": "active" - }, - { - "name": "Cohere", - "model": "Command-R+", - "tier": "T2", - "status": "active" - }, - { - "name": "Gemini", - "model": "Gemini-2.0-Flash", - "tier": "T2", - "status": "active" - }, - { - "name": "DeepSeek", - "model": "DeepSeek-Chat", - "tier": "T2", - "status": "active" - }, - { - "name": "OpenRouter", - "model": "Multi", - "tier": "T2", - "status": "active" - }, - { - "name": "Alibaba", - "model": "Qwen-Max", - "tier": "T2", - "status": "active" - }, - { - "name": "HuggingFace", - "model": "Inference", - "tier": "T3", - "status": "active" - }, - { - "name": "Replicate", - "model": "Multi", - "tier": "T3", - "status": "active" - }, - { - "name": "ZhiPu", - "model": "GLM-4", - "tier": "T3", - "status": "active" - }, - { - "name": "Ollama Local", - "model": "weval-brain-v3", - "tier": "T0", - "status": "active" - } - ], - "crons": { - "s204_root": 0, - "s204_www": 35, - "s204_total": 35, - "key_crons": [ - { - "name": "L99 Master", - "freq": "*\/30", - "target": "l99-master.py" - }, - { - "name": "Autonomous Engine", - "freq": "*\/5", - "target": "wevia-master-autonomous" - }, - { - "name": "L99 Pipeline", - "freq": "*\/15", - "target": "l99-pipeline.py" - }, - { - "name": "L99 Alive", - "freq": "*\/10", - "target": "l99-alive.py" - }, - { - "name": "Infra Guardian", - "freq": "*\/5", - "target": "infra-guardian.sh" - }, - { - "name": "Blade Watchdog", - "freq": "*\/5", - "target": "blade-watchdog.php" - }, - { - "name": "RAG Ingest", - "freq": "*\/30", - "target": "wevia-rag-ingest.sh" - }, - { - "name": "Blade Orchestrator", - "freq": "*\/30", - "target": "blade-orchestrator.sh" - }, - { - "name": "WEVIA Dream", - "freq": "*\/30", - "target": "wevia-dream-cron.php" - }, - { - "name": "Port Protection", - "freq": "*\/5", - "target": "port-protection" - }, - { - "name": "Watchdog", - "freq": "*\/3", - "target": "weval-watchdog.php" - }, - { - "name": "Ethica Enrich", - "freq": "daily 01h", - "target": "ethica-enrich-v4.py" - }, - { - "name": "Daily Brief", - "freq": "daily 07h", - "target": "weval-daily-brief.py" - } - ] - }, - "wiki": { - "total_entries": 5560, - "categories": [ - { - "category": "AUTO-FIX", - "cnt": "2974" - }, - { - "category": "TOPOLOGY", - "cnt": "1230" - }, - { - "category": "DISCOVERY", - "cnt": "610" - }, - { - "category": "SYSTEMATIC", - "cnt": "204" - }, - { - "category": "L99-FULLSCAN", - "cnt": "80" - }, - { - "category": "INFRA", - "cnt": "74" - }, - { - "category": "CONTROL-TOWER", - "cnt": "42" - }, - { - "category": "ALERT", - "cnt": "34" - }, - { - "category": "AGENT", - "cnt": "20" - }, - { - "category": "L99-SCAN", - "cnt": "12" - }, - { - "category": "FIX", - "cnt": "10" - }, - { - "category": "FLEET", - "cnt": "8" - }, - { - "category": "MASTER-INTENT", - "cnt": "6" - }, - { - "category": "SESSION-5AVR", - "cnt": "5" - }, - { - "category": "Maroc", - "cnt": "5" - }, - { - "category": "Analyse", - "cnt": "5" - }, - { - "category": "AUTH", - "cnt": "5" - }, - { - "category": "claude_2026", - "cnt": "4" - }, - { - "category": "SERVICES", - "cnt": "4" - }, - { - "category": "WEVAL Consulting", - "cnt": "4" - }, - { - "category": "Intelligence Artificielle", - "cnt": "3" - }, - { - "category": "PARADIGM", - "cnt": "3" - }, - { - "category": "INTEGRATION", - "cnt": "3" - }, - { - "category": "FIX-CRITIQUE", - "cnt": "3" - }, - { - "category": "Voici", - "cnt": "2" - }, - { - "category": "Vous", - "cnt": "2" - }, - { - "category": "Pouvez", - "cnt": "2" - }, - { - "category": "Image", - "cnt": "2" - }, - { - "category": "Contexte", - "cnt": "2" - }, - { - "category": "L99-EXHAUSTIVE", - "cnt": "2" - }, - { - "category": "L99-GAP", - "cnt": "2" - }, - { - "category": "WEVAL Consulting Casablanca", - "cnt": "2" - }, - { - "category": "Test", - "cnt": "2" - }, - { - "category": "Salut", - "cnt": "2" - }, - { - "category": "L99-E2E", - "cnt": "2" - }, - { - "category": "Document", - "cnt": "2" - }, - { - "category": "PROVIDERS", - "cnt": "2" - }, - { - "category": "Bien", - "cnt": "2" - }, - { - "category": "WEVIA", - "cnt": "2" - }, - { - "category": "Diagramme", - "cnt": "2" - }, - { - "category": "Comparaison", - "cnt": "2" - }, - { - "category": "L99-MEGA", - "cnt": "2" - }, - { - "category": "QUALITY", - "cnt": "2" - }, - { - "category": "Cependant", - "cnt": "2" - }, - { - "category": "MONITORING", - "cnt": "2" - }, - { - "category": "L99", - "cnt": "2" - }, - { - "category": "Introduction", - "cnt": "2" - }, - { - "category": "Pour", - "cnt": "2" - }, - { - "category": "Casablanca", - "cnt": "2" - }, - { - "category": "Pourriez", - "cnt": "2" - }, - { - "category": "Vistex BTP Signavio", - "cnt": "1" - }, - { - "category": "Conduite", - "cnt": "1" - }, - { - "category": "DMAIC", - "cnt": "1" - }, - { - "category": "Industrie", - "cnt": "1" - }, - { - "category": "Proposition", - "cnt": "1" - }, - { - "category": "Accueil\nBienvenue", - "cnt": "1" - }, - { - "category": "Logo", - "cnt": "1" - }, - { - "category": "SAP ECC", - "cnt": "1" - }, - { - "category": "Votre", - "cnt": "1" - }, - { - "category": "Probl", - "cnt": "1" - }, - { - "category": "ANTI-REGRESSION", - "cnt": "1" - }, - { - "category": "Explique", - "cnt": "1" - }, - { - "category": "Zero Trust", - "cnt": "1" - }, - { - "category": "Augmented Generation", - "cnt": "1" - }, - { - "category": "RLHF", - "cnt": "1" - }, - { - "category": "Service", - "cnt": "1" - }, - { - "category": "Transformer", - "cnt": "1" - }, - { - "category": "Bonjour Bonjour", - "cnt": "1" - }, - { - "category": "Transformation", - "cnt": "1" - }, - { - "category": "Audit", - "cnt": "1" - }, - { - "category": "WEVAL", - "cnt": "1" - }, - { - "category": "Strat", - "cnt": "1" - }, - { - "category": "Maghreb", - "cnt": "1" - }, - { - "category": "ERP SAP", - "cnt": "1" - }, - { - "category": "Quelle", - "cnt": "1" - }, - { - "category": "Oracle", - "cnt": "1" - }, - { - "category": "Data", - "cnt": "1" - }, - { - "category": "Donn", - "cnt": "1" - }, - { - "category": "Quel", - "cnt": "1" - }, - { - "category": "Syst", - "cnt": "1" - }, - { - "category": "Ahmed", - "cnt": "1" - }, - { - "category": "UiPath", - "cnt": "1" - }, - { - "category": "Niveau PhD", - "cnt": "1" - }, - { - "category": "CLEANUP", - "cnt": "1" - }, - { - "category": "Notre", - "cnt": "1" - }, - { - "category": "TOUTES", - "cnt": "1" - }, - { - "category": "Maroc DDMRP OTIF", - "cnt": "1" - }, - { - "category": "Crit", - "cnt": "1" - }, - { - "category": "SAP Vistex Revenue Management", - "cnt": "1" - }, - { - "category": "Fine", - "cnt": "1" - }, - { - "category": "Compare AWS Azure GCP", - "cnt": "1" - }, - { - "category": "Healthcare", - "cnt": "1" - }, - { - "category": "BLADE", - "cnt": "1" - }, - { - "category": "Plan", - "cnt": "1" - }, - { - "category": "Conseil", - "cnt": "1" - }, - { - "category": "Nous", - "cnt": "1" - }, - { - "category": "Zero Trust SOC SIEM", - "cnt": "1" - }, - { - "category": "Amazon Web Services", - "cnt": "1" - }, - { - "category": "Retiens", - "cnt": "1" - }, - { - "category": "Diff", - "cnt": "1" - }, - { - "category": "QDRANT", - "cnt": "1" - }, - { - "category": "MITRE ATT", - "cnt": "1" - }, - { - "category": "FMCG", - "cnt": "1" - }, - { - "category": "Supply", - "cnt": "1" - }, - { - "category": "Exercice", - "cnt": "1" - }, - { - "category": "Redige", - "cnt": "1" - }, - { - "category": "Supply Chain", - "cnt": "1" - }, - { - "category": "Quels", - "cnt": "1" - }, - { - "category": "Propose", - "cnt": "1" - }, - { - "category": "Plateforme", - "cnt": "1" - }, - { - "category": "Cyber", - "cnt": "1" - }, - { - "category": "Tableau", - "cnt": "1" - }, - { - "category": "Migration SAP", - "cnt": "1" - }, - { - "category": "AUTH-AGENT", - "cnt": "1" - }, - { - "category": "Fais", - "cnt": "1" - }, - { - "category": "Iran", - "cnt": "1" - }, - { - "category": "OLLAMA", - "cnt": "1" - }, - { - "category": "Reessayez", - "cnt": "1" - }, - { - "category": "MORNE WEVAL", - "cnt": "1" - }, - { - "category": "Analyse SWOT", - "cnt": "1" - }, - { - "category": "SAP Vistex", - "cnt": "1" - }, - { - "category": "IoT WMS", - "cnt": "1" - }, - { - "category": "Industry", - "cnt": "1" - }, - { - "category": "What", - "cnt": "1" - }, - { - "category": "Strategie", - "cnt": "1" - }, - { - "category": "Rappelle", - "cnt": "1" - }, - { - "category": "DMAIC Six Sigma", - "cnt": "1" - }, - { - "category": "Avantages", - "cnt": "1" - }, - { - "category": "Explique RLHF", - "cnt": "1" - }, - { - "category": "Huawei Cloud", - "cnt": "1" - }, - { - "category": "PMO SAFe", - "cnt": "1" - }, - { - "category": "Migration SAP ECC", - "cnt": "1" - }, - { - "category": "team_work", - "cnt": "1" - }, - { - "category": "Bonjour Pr", - "cnt": "1" - }, - { - "category": "Maroc DDMRP OTIF WMS TMS", - "cnt": "1" - }, - { - "category": "Architecture", - "cnt": "1" - }, - { - "category": "Framework NIST", - "cnt": "1" - }, - { - "category": "Automatiser", - "cnt": "1" - }, - { - "category": "Compare RLHF DPO Constitutional AI", - "cnt": "1" - }, - { - "category": "Genere", - "cnt": "1" - }, - { - "category": "Elle", - "cnt": "1" - }, - { - "category": "Constitutional AI", - "cnt": "1" - }, - { - "category": "Brownfield", - "cnt": "1" - }, - { - "category": "Confirmation", - "cnt": "1" - }, - { - "category": "Architecture IA", - "cnt": "1" - }, - { - "category": "KPIs", - "cnt": "1" - }, - { - "category": "Quelles", - "cnt": "1" - }, - { - "category": "SWOT", - "cnt": "1" - }, - { - "category": "Comparons", - "cnt": "1" - }, - { - "category": "Services", - "cnt": "1" - }, - { - "category": "Maroc TMA", - "cnt": "1" - }, - { - "category": "Contraintes", - "cnt": "1" - }, - { - "category": "Intelligence", - "cnt": "1" - }, - { - "category": "Donne", - "cnt": "1" - }, - { - "category": "Vistex", - "cnt": "1" - }, - { - "category": "Maroc CMI", - "cnt": "1" - }, - { - "category": "Audite", - "cnt": "1" - }, - { - "category": "Aide", - "cnt": "1" - }, - { - "category": "DKIM DMARC", - "cnt": "1" - }, - { - "category": "Zero Trust SOC", - "cnt": "1" - }, - { - "category": "Bonjour Yacine", - "cnt": "1" - }, - { - "category": "Workshop", - "cnt": "1" - }, - { - "category": "Compare RLHF DPO GRPO Constitutional AI", - "cnt": "1" - }, - { - "category": "Comparatif ERP PME", - "cnt": "1" - }, - { - "category": "Programme", - "cnt": "1" - }, - { - "category": "SAP MM", - "cnt": "1" - }, - { - "category": "Phases", - "cnt": "1" - }, - { - "category": "Autres", - "cnt": "1" - }, - { - "category": "FHIR", - "cnt": "1" - }, - { - "category": "SESSION-7AVR", - "cnt": "1" - }, - { - "category": "FHIR IA", - "cnt": "1" - }, - { - "category": "MLOps", - "cnt": "1" - }, - { - "category": "MIROFISH", - "cnt": "1" - }, - { - "category": "Ecris", - "cnt": "1" - }, - { - "category": "Suite", - "cnt": "1" - }, - { - "category": "Nearshore", - "cnt": "1" - }, - { - "category": "Bienvenue", - "cnt": "1" - }, - { - "category": "Retrieval", - "cnt": "1" - }, - { - "category": "KYC BAM", - "cnt": "1" - }, - { - "category": "Afrique", - "cnt": "1" - }, - { - "category": "Dans", - "cnt": "1" - }, - { - "category": "Azure", - "cnt": "1" - }, - { - "category": "Budget", - "cnt": "1" - }, - { - "category": "INSTRUCTION SYSTEME", - "cnt": "1" - }, - { - "category": "CNDP", - "cnt": "1" - }, - { - "category": "Compare", - "cnt": "1" - }, - { - "category": "HubSpot", - "cnt": "1" - }, - { - "category": "Control", - "cnt": "1" - }, - { - "category": "SESSION-6AVR", - "cnt": "1" - }, - { - "category": "Bonjour Salut", - "cnt": "1" - }, - { - "category": "Maroc KPIs OTIF", - "cnt": "1" - }, - { - "category": "Vistex SAP", - "cnt": "1" - }, - { - "category": "Traduis", - "cnt": "1" - }, - { - "category": "Maroc IoT WMS", - "cnt": "1" - }, - { - "category": "SaaS", - "cnt": "1" - }, - { - "category": "CODE BLOCK", - "cnt": "1" - }, - { - "category": "Cahier", - "cnt": "1" - }, - { - "category": "Maroc FHIR", - "cnt": "1" - }, - { - "category": "DESIGN", - "cnt": "1" - }, - { - "category": "Compare RLHF", - "cnt": "1" - }, - { - "category": "Dynamics", - "cnt": "1" - }, - { - "category": "Python", - "cnt": "1" - }, - { - "category": "FORMAT OBLIGATOIRE", - "cnt": "1" - }, - { - "category": "SAP ERP", - "cnt": "1" - }, - { - "category": "INFRA-SESSION", - "cnt": "1" - }, - { - "category": "Cette", - "cnt": "1" - }, - { - "category": "OWASP Top", - "cnt": "1" - }, - { - "category": "Logo Weval", - "cnt": "1" - }, - { - "category": "ADKAR", - "cnt": "1" - }, - { - "category": "GENERAL", - "cnt": "1" - } - ], - "qdrant_vectors": 386 - }, - "applications": [ - { - "name": "WEVIA Chatbot", - "type": "AI", - "url": "\/wevia", - "port": null, - "server": "S204", - "auth": "public" - }, - { - "name": "WEVIA Admin", - "type": "Admin", - "url": "\/wevia-admin", - "port": null, - "server": "S204", - "auth": "php-session" - }, - { - "name": "WEVIA Life", - "type": "Email AI", - "url": "\/products\/wevialife-app.html", - "port": null, - "server": "S204", - "auth": "php-session" - }, - { - "name": "Workspace", - "type": "Hub", - "url": "\/products\/workspace.html", - "port": null, - "server": "S204", - "auth": "php-session" - }, - { - "name": "Arsenal\/WEVADS", - "type": "Email Marketing", - "url": "wevads.weval-consulting.com", - "port": 5890, - "server": "S95", - "auth": "php-session" - }, - { - "name": "ADX\/iResponse", - "type": "Email Platform", - "url": "wevads.weval-consulting.com", - "port": 5821, - "server": "S95", - "auth": "iResponse" - }, - { - "name": "Ethica HCP", - "type": "Healthcare B2B", - "url": "consent.wevup.app", - "port": null, - "server": "S204", - "auth": "ethica-auth" - }, - { - "name": "CRM (Twenty)", - "type": "CRM", - "url": "crm.weval-consulting.com", - "port": 3000, - "server": "S204", - "auth": "php-session" - }, - { - "name": "Mattermost", - "type": "Chat", - "url": "mm.weval-consulting.com", - "port": 8065, - "server": "S204", - "auth": "php-session" - }, - { - "name": "n8n", - "type": "Automation", - "url": "n8n.weval-consulting.com", - "port": 5678, - "server": "S204", - "auth": "php-session" - }, - { - "name": "Uptime Kuma", - "type": "Monitoring", - "url": "monitor.weval-consulting.com", - "port": 3001, - "server": "S204", - "auth": "php-session" - }, - { - "name": "Plausible", - "type": "Analytics", - "url": "analytics.weval-consulting.com", - "port": 8000, - "server": "S204", - "auth": "php-session" - }, - { - "name": "DeerFlow", - "type": "AI Research", - "url": "deerflow.weval-consulting.com", - "port": 2024, - "server": "S204", - "auth": "php-session" - }, - { - "name": "SearXNG", - "type": "Search", - "url": null, - "port": 8888, - "server": "S204", - "auth": "internal" - }, - { - "name": "Qdrant", - "type": "Vector DB", - "url": null, - "port": 6333, - "server": "S204", - "auth": "internal" - }, - { - "name": "Ollama", - "type": "LLM Runtime", - "url": null, - "port": 11434, - "server": "S204", - "auth": "internal" - }, - { - "name": "Flowise", - "type": "AI Flow", - "url": null, - "port": 3088, - "server": "S204", - "auth": "internal" - }, - { - "name": "MiroFish", - "type": "AI Agent", - "url": "mirofish.weval-consulting.com", - "port": 3050, - "server": "S204", - "auth": "php-session" - }, - { - "name": "Open WebUI", - "type": "LLM UI", - "url": null, - "port": 3002, - "server": "S204", - "auth": "internal" - }, - { - "name": "Vaultwarden", - "type": "Passwords", - "url": null, - "port": 8222, - "server": "S204", - "auth": "internal" - }, - { - "name": "Prometheus", - "type": "Metrics", - "url": null, - "port": 9000, - "server": "S204", - "auth": "internal" - }, - { - "name": "PMTA", - "type": "MTA", - "url": null, - "port": 25, - "server": "S95", - "auth": "internal" - }, - { - "name": "KumoMTA", - "type": "MTA", - "url": null, - "port": 8010, - "server": "S95", - "auth": "internal" - }, - { - "name": "Sentinel", - "type": "Orchestrator", - "url": null, - "port": 5890, - "server": "S95", - "auth": "internal" - } - ], - "cloud": [ - { - "provider": "Hetzner", - "role": "S204+S95", - "type": "Bare Metal", - "region": "Germany" - }, - { - "provider": "OVH", - "role": "S151 DR\/Tracking", - "type": "VPS", - "region": "France" - }, - { - "provider": "Cloudflare", - "role": "CDN+DNS+WAF", - "type": "SaaS", - "region": "Global" - }, - { - "provider": "Huawei Cloud", - "role": "Partner Certifié", - "type": "IaaS", - "region": "MENA" - }, - { - "provider": "Scaleway", - "role": "GPU Inference", - "type": "IaaS", - "region": "France" - } - ], - "partnerships": [ - "SAP Gold Partner", - "Huawei Cloud", - "Vistex", - "IQVIA", - "Scaleway" - ], - "ux_agent": { - "pass": 3, - "fail": 0, - "warn": 0, - "total": 3, - "timestamp": "", - "gauge_health_center": "X=0px Y=0px", - "gauge_auto_center": "X=0px Y=0px", - "design_tokens": { - "bg": "#09090b", - "card": "#18181b", - "font": "Inter" - } - }, - "l99": { - "master": { - "total": 93, - "pass": 89, - "fail": 2, - "timestamp": "2026-04-07T01:32:48.454012" - }, - "auth": { - "pass": 24, - "fail": 0 - } - }, - "cortex": { - "fast_lines": 3681, - "router_lines": 6152, - "router_functions": 17, - "today_requests": 5, - "today_cost": 0, - "avg_latency_ms": 2389, - "top_provider": "WEVIA Engine", - "providers_used": 2 - }, - "optimizations": { - "recent_commits": [], - "auto_fixes": [ - { - "fact": "AUTONOMY 21Apr 18:55: 1 fixes. Disk light cleanup 85%", - "created_at": "2026-04-21 20:55:06.635344" - }, - { - "fact": "AUTONOMY 21Apr 08:10: 5 fixes. S95 restart pmta; S95 restart kumomta; S95 restart postfix; S95 restart sentinel; S95 restart adx", - "created_at": "2026-04-21 10:10:04.274914" - }, - { - "fact": "AUTONOMY 19Apr 18:50: 1 fixes. Disk light cleanup 85%", - "created_at": "2026-04-19 20:50:05.112821" - }, - { - "fact": "AUTONOMY 19Apr 18:45: 1 fixes. Disk light cleanup 85%", - "created_at": "2026-04-19 20:45:05.896272" - }, - { - "fact": "AUTONOMY 19Apr 18:40: 1 fixes. Disk light cleanup 85%", - "created_at": "2026-04-19 20:40:05.29453" - }, - { - "fact": "AUTONOMY 19Apr 18:35: 1 fixes. Disk light cleanup 85%", - "created_at": "2026-04-19 20:35:06.160485" - }, - { - "fact": "AUTONOMY 19Apr 18:30: 1 fixes. Disk light cleanup 85%", - "created_at": "2026-04-19 20:30:07.536885" - }, - { - "fact": "AUTONOMY 19Apr 17:30: 1 fixes. Disk light cleanup 85%", - "created_at": "2026-04-19 19:30:06.670863" - }, - { - "fact": "AUTONOMY 19Apr 17:25: 1 fixes. Disk light cleanup 85%", - "created_at": "2026-04-19 19:25:05.927364" - }, - { - "fact": "AUTONOMY 19Apr 17:20: 1 fixes. Disk light cleanup 85%", - "created_at": "2026-04-19 19:20:05.814206" - } - ], - "architecture_decisions": [ - { - "fact": "Crons: root=51 www-data=55 cron.d=72 total=178", - "created_at": "2026-04-13 00:30:48.940882" - }, - { - "fact": "Crons: root=51 www-data=55 cron.d=70 total=176", - "created_at": "2026-04-12 20:30:07.357094" - }, - { - "fact": "Crons: root=51 www-data=55 cron.d=70 total=176", - "created_at": "2026-04-12 18:30:05.962933" - }, - { - "fact": "Crons: root=51 www-data=55 cron.d=70 total=176", - "created_at": "2026-04-12 16:30:13.56815" - }, - { - "fact": "Crons: root=51 www-data=57 cron.d=70 total=178", - "created_at": "2026-04-12 14:30:11.101941" - }, - { - "fact": "Crons: root=51 www-data=57 cron.d=70 total=178", - "created_at": "2026-04-12 12:30:08.795912" - }, - { - "fact": "Crons: root=51 www-data=57 cron.d=70 total=178", - "created_at": "2026-04-12 10:30:04.181935" - }, - { - "fact": "Crons: root=51 www-data=57 cron.d=70 total=178", - "created_at": "2026-04-12 08:30:04.196728" - }, - { - "fact": "Crons: root=51 www-data=57 cron.d=70 total=178", - "created_at": "2026-04-12 06:30:04.792965" - }, - { - "fact": "Crons: root=51 www-data=57 cron.d=70 total=178", - "created_at": "2026-04-12 04:30:06.68899" - }, - { - "fact": "Crons: root=51 www-data=57 cron.d=70 total=178", - "created_at": "2026-04-12 02:30:07.207832" - }, - { - "fact": "Crons: root=51 www-data=54 cron.d=69 total=174", - "created_at": "2026-04-12 00:30:13.084556" - }, - { - "fact": "Crons: root=50 www-data=52 cron.d=69 total=171", - "created_at": "2026-04-11 22:30:07.088896" - }, - { - "fact": "Crons: root=50 www-data=52 cron.d=69 total=171", - "created_at": "2026-04-11 20:30:08.94444" - }, - { - "fact": "Crons: root=50 www-data=48 cron.d=69 total=167", - "created_at": "2026-04-11 18:30:04.55611" - } - ], - "pipelines": [ - { - "name": "CORTEX Smart Router", - "status": "active", - "desc": "T0 Ollama → T1 Free APIs → T2 Fallbacks", - "routes": 3681 - }, - { - "name": "RAG Ingest", - "status": "active", - "desc": "Cron *\/30 → Qdrant semantic indexing", - "freq": "*\/30" - }, - { - "name": "L99 Quality Gate", - "status": "active", - "desc": "253+ tests, 28 auth tests", - "freq": "*\/30" - }, - { - "name": "Blade Orchestrator", - "status": "active", - "desc": "GPU polling + model sync", - "freq": "*\/30" - }, - { - "name": "Infra Guardian", - "status": "active", - "desc": "Auto-restart nginx\/php\/docker", - "freq": "*\/5" - }, - { - "name": "Ethica Scraper Pipeline", - "status": "active", - "desc": "4 spiders, RichScraper, SearXNG", - "freq": "daily" - }, - { - "name": "WEVIA Dream", - "status": "active", - "desc": "Background learning + dataset enrichment", - "freq": "*\/30" - }, - { - "name": "Daily Brief", - "status": "active", - "desc": "Morning synthesis → Mattermost", - "freq": "daily 07h" - }, - { - "name": "Architecture Scanner", - "status": "active", - "desc": "This page — auto-scan + recommendations", - "freq": "*\/30" - } - ], - "agents_deployed": [ - { - "name": "Monitor Agent", - "role": "Watches all services, auto-restarts", - "status": "active" - }, - { - "name": "DevOps Agent", - "role": "Git sync, deployment, rollback", - "status": "active" - }, - { - "name": "Ethica Agent", - "role": "HCP scraping, validation, enrichment", - "status": "active" - }, - { - "name": "Security Agent", - "role": "Key rotation, secret scan, vulnerability check", - "status": "active" - }, - { - "name": "Blade Agent", - "role": "GPU orchestration, model management", - "status": "active" - }, - { - "name": "Dream Agent", - "role": "Background learning, dataset generation", - "status": "active" - }, - { - "name": "RAG Agent", - "role": "Knowledge ingestion, vector indexing", - "status": "active" - }, - { - "name": "Quality Agent", - "role": "L99 NonReg, regression detection", - "status": "active" - } - ] - }, - "mirofish": { - "status": "active", - "reports": 0, - "bridge": "\/api\/mirofish-bridge.php" - }, - "recommendations": { - "score": 100, - "total": 1, - "critical": 0, - "warning": 0, - "info": 0, - "opportunity": 1, - "auto_fixed": 0, - "fixes_log": [], - "recommendations": [ - { - "severity": "opportunity", - "category": "SCALABILITY", - "title": "Qdrant: 22,105 vecteurs", - "detail": "Volume vectoriel croissant. Planifier sharding ou migration vers cluster Qdrant.", - "action": "opportunity", - "fix_cmd": "" - } - ] - }, - "scan_time_ms": 2029, - "gaps": [], - "score": 100, - "automation": { - "coverage": 100, - "steps": 30, - "total": 30 - } -} \ No newline at end of file diff --git a/api/blade-actions-surfaced.json b/api/blade-actions-surfaced.json index 7f29315ff..724a0fbf2 100644 --- a/api/blade-actions-surfaced.json +++ b/api/blade-actions-surfaced.json @@ -1,5 +1,5 @@ { - "generated_at": "2026-04-21T22:50:02.130032", + "generated_at": "2026-04-21T23:00:02.786116", "stats": { "total": 48, "pending": 31, diff --git a/api/blade-heartbeat.json b/api/blade-heartbeat.json index f18199a3c..65ec8af45 100644 --- a/api/blade-heartbeat.json +++ b/api/blade-heartbeat.json @@ -1,8 +1,8 @@ { "status": "ALIVE", - "ts": "2026-04-21T22:45:02.197332", - "last_heartbeat": "2026-04-21T22:45:02.197332", - "last_heartbeat_ts_epoch": 1776804302, + "ts": "2026-04-21T23:00:02.208517", + "last_heartbeat": "2026-04-21T23:00:02.208517", + "last_heartbeat_ts_epoch": 1776805202, "tasks_today": 232, "tasks_week": 574, "agent_id": "blade-ops", diff --git a/api/em-kpi-cache.json b/api/em-kpi-cache.json index 850d9574a..e69de29bb 100644 --- a/api/em-kpi-cache.json +++ b/api/em-kpi-cache.json @@ -1,281 +0,0 @@ -{ - "ts": "2026-04-21T20:50:02+00:00", - "server": "s204", - "s204": { - "load": 2.11, - "uptime": "2026-04-14 11:51:24", - "ram_total_mb": 31335, - "ram_used_mb": 12424, - "ram_free_mb": 18910, - "disk_total": "150G", - "disk_used": "118G", - "disk_free": "27G", - "disk_pct": "82%", - "fpm_workers": 141, - "docker_containers": 19, - "cpu_cores": 8 - }, - "s95": { - "load": 0, - "disk_pct": "81%", - "status": "UP", - "ram_total_mb": 15610, - "ram_free_mb": 12055 - }, - "pmta": [ - { - "name": "SER6", - "ip": "110.239.84.121", - "status": "DOWN" - }, - { - "name": "SER7", - "ip": "110.239.65.64", - "status": "DOWN" - }, - { - "name": "SER8", - "ip": "182.160.55.107", - "status": "DOWN" - }, - { - "name": "SER9", - "ip": "110.239.86.68", - "status": "DOWN" - } - ], - "assets": { - "html_pages": 317, - "php_apis": 833, - "wiki_entries": 2066, - "vault_doctrines": 84, - "vault_sessions": 104, - "vault_decisions": 12 - }, - "tools": { - "total": 630, - "registry_version": "?" - }, - "sovereign": { - "status": "UP", - "providers": [ - "Cerebras-fast", - "Cerebras-think", - "Groq", - "Cloudflare-AI", - "Gemini", - "SambaNova", - "NVIDIA-NIM", - "Mistral", - "Groq-OSS", - "HF-Space", - "HF-Router", - "OpenRouter", - "GitHub-Models" - ], - "active": 13, - "total": 13, - "primary": "Cerebras-fast", - "cost": "0€" - }, - "ethica": { - "total_hcps": 161733, - "with_email": 110639, - "with_phone": 155151, - "gap_email": 51094, - "pct_email": 68.4, - "pct_phone": 95.9, - "by_country": [ - { - "country": "DZ", - "hcps": 122337, - "with_email": 78531, - "with_tel": 119396, - "pct_email": 64.2, - "pct_tel": 97.6 - }, - { - "country": "MA", - "hcps": 19723, - "with_email": 15080, - "with_tel": 18737, - "pct_email": 76.5, - "pct_tel": 95 - }, - { - "country": "TN", - "hcps": 17794, - "with_email": 15149, - "with_tel": 17018, - "pct_email": 85.1, - "pct_tel": 95.6 - }, - { - "country": "INTL", - "hcps": 1879, - "with_email": 1879, - "with_tel": 0, - "pct_email": 100, - "pct_tel": 0 - } - ] - }, - "docker": [ - { - "name": "loki", - "status": "Up 5 days", - "ports": "" - }, - { - "name": "listmonk", - "status": "Up 5 days", - "ports": "" - }, - { - "name": "plausible-plausible-1", - "status": "Up 4 days", - "ports": "" - }, - { - "name": "plausible-plausible-db-1", - "status": "Up 4 days", - "ports": "" - }, - { - "name": "plausible-plausible-events-db-1", - "status": "Up 4 days", - "ports": "" - }, - { - "name": "n8n-docker-n8n-1", - "status": "Up 5 days", - "ports": "" - }, - { - "name": "mattermost-docker-mm-db-1", - "status": "Up 5 days", - "ports": "" - }, - { - "name": "mattermost-docker-mattermost-1", - "status": "Up 5 days (healthy)", - "ports": "" - }, - { - "name": "twenty", - "status": "Up 5 days", - "ports": "" - }, - { - "name": "twenty-redis", - "status": "Up 5 days", - "ports": "" - }, - { - "name": "langfuse", - "status": "Up 5 days", - "ports": "" - }, - { - "name": "redis-weval", - "status": "Up 7 days", - "ports": "" - }, - { - "name": "gitea", - "status": "Up 7 days", - "ports": "" - }, - { - "name": "node-exporter", - "status": "Up 7 days", - "ports": "" - }, - { - "name": "prometheus", - "status": "Up 7 days", - "ports": "" - }, - { - "name": "searxng", - "status": "Up 7 days", - "ports": "" - }, - { - "name": "uptime-kuma", - "status": "Up 45 hours (healthy)", - "ports": "" - }, - { - "name": "vaultwarden", - "status": "Up 7 days (healthy)", - "ports": "" - }, - { - "name": "qdrant", - "status": "Up 7 days", - "ports": "" - } - ], - "crons": { - "active": 35 - }, - "git": { - "head": "151ffbae6 auto-sync-2250", - "dirty": 2, - "status": "DIRTY" - }, - "nonreg": { - "total": 153, - "passed": 153, - "score": "100%" - }, - "services": [ - { - "name": "DeerFlow", - "port": 3002, - "status": "UP" - }, - { - "name": "DeerFlow API", - "port": 8001, - "status": "UP" - }, - { - "name": "Qdrant", - "port": 6333, - "status": "UP" - }, - { - "name": "Ollama", - "port": 11434, - "status": "UP" - }, - { - "name": "Redis", - "port": 6379, - "status": "UP" - }, - { - "name": "Sovereign", - "port": 4000, - "status": "UP" - }, - { - "name": "SearXNG", - "port": 8080, - "status": "UP" - } - ], - "whisper": { - "binary": "COMPILED", - "model": "142MB" - }, - "grand_total": 3949, - "health": { - "score": 5, - "max": 6, - "pct": 83 - }, - "elapsed_ms": 10338 -} \ No newline at end of file diff --git a/api/mql-scoring-status.json b/api/mql-scoring-status.json index 49764ac75..1b1aa8a13 100644 --- a/api/mql-scoring-status.json +++ b/api/mql-scoring-status.json @@ -1,27 +1,27 @@ { "ok": true, "agent": "V42_MQL_Scoring_Agent_REAL", - "ts": "2026-04-21T20:50:02+00:00", + "ts": "2026-04-21T21:00:02+00:00", "status": "DEPLOYED_AUTO", "deployed": true, "algorithm": "weighted_behavioral_signals", "signals_tracked": { - "wtp_engagement": 70, + "wtp_engagement": 100, "chat_engagement": 0, "roi_tool": 0, "email_opened": 0 }, - "avg_score": 17.5, + "avg_score": 25, "mql_threshold": 50, "sql_threshold": 75, "leads_captured": 48, - "mql_auto_scored": 19, + "mql_auto_scored": 20, "sql_auto_scored": 8, - "mql_auto_pct": 39, + "mql_auto_pct": 41, "improvement_vs_manual": { "before_manual_pct": 33.3, - "after_auto_pct": 39, - "delta": 5.700000000000003 + "after_auto_pct": 41, + "delta": 7.700000000000003 }, "paperclip_db_ok": true, "paperclip_tables": 1, diff --git a/api/oss-trending.json b/api/oss-trending.json index 94209d033..5a85ef001 100644 --- a/api/oss-trending.json +++ b/api/oss-trending.json @@ -10,7 +10,7 @@ "has_docker": false, "wired": true, "description": "", - "discovered": "2026-04-21T22:00:04.914789" + "discovered": "2026-04-21T23:00:03.489531" }, { "name": "wevia-brain", @@ -23,7 +23,7 @@ "has_docker": false, "wired": true, "description": "", - "discovered": "2026-04-21T22:00:05.062894" + "discovered": "2026-04-21T23:00:03.677956" }, { "name": "skills", @@ -36,7 +36,7 @@ "has_docker": false, "wired": true, "description": "", - "discovered": "2026-04-21T22:00:04.676231" + "discovered": "2026-04-21T23:00:03.214198" }, { "name": "everything-claude-code", @@ -49,7 +49,7 @@ "has_docker": false, "wired": true, "description": "**Language:** English | [Português (Brasil)](docs/pt-BR/README.md) | [简体中文](README.zh-CN.md) | [繁體中文](docs/zh-TW/README.md) | [日本語](docs/ja-JP/README.", - "discovered": "2026-04-21T22:00:03.793286" + "discovered": "2026-04-21T23:00:02.916745" }, { "name": "open-webui-fresh", @@ -62,7 +62,7 @@ "has_docker": true, "wired": true, "description": "# Open WebUI 👋   | [Français](docs/translations/README.fr.md) | [Italiano](docs/translations/README.it.md) | ",
- "discovered": "2026-04-21T22:00:03.281165"
+ "discovered": "2026-04-21T23:00:02.687576"
},
{
"name": "aios",
@@ -374,7 +374,7 @@
"has_docker": true,
"wired": true,
"description": "# AIOS: AI Agent Operating System
'wire_codet5',
+ 'triggers' => array('wire codet5','salesforce codet5','codet5 install','code t5'),
+ 'cmd' => 'echo "WIRE OSS CodeT5 · salesforce/CodeT5 · 3101 stars · code understanding+generation T5 model · install: git clone https://github.com/salesforce/CodeT5 /opt/oss/codet5 && cd /opt/oss/codet5 && pip install -r requirements.txt --break-system-packages · HuggingFace: Salesforce/codet5-base · purpose: fill code gap (59/90 -> 70+) · wave 220 priority_wire[1]"',
+ 'status' => 'WAVE_221',
+ 'created_at' => '2026-04-21T22:55:00+00:00',
+ 'source' => 'opus-wave-221-oss-wire',
+ 'description' => 'Wire salesforce/CodeT5 for code generation',
+);
diff --git a/api/wired-pending/intent-opus4-wire_funnlp.php b/api/wired-pending/intent-opus4-wire_funnlp.php
new file mode 100644
index 000000000..179686301
--- /dev/null
+++ b/api/wired-pending/intent-opus4-wire_funnlp.php
@@ -0,0 +1,10 @@
+ 'wire_funnlp',
+ 'triggers' => array('wire funnlp','funnlp install','chinese nlp','sensitive words detection'),
+ 'cmd' => 'echo "WIRE OSS funNLP · fighting41love/funNLP · 79697 stars · CN+EN sensitive words + lang detection + phone/email + name gender + NLP corpus · install: git clone https://github.com/fighting41love/funNLP /opt/oss/funnlp && cd /opt/oss/funnlp · purpose: fill data_analysis gap (59/90 -> 70+) · wave 220 priority_wire[2]"',
+ 'status' => 'WAVE_221',
+ 'created_at' => '2026-04-21T22:55:00+00:00',
+ 'source' => 'opus-wave-221-oss-wire',
+ 'description' => 'Wire fighting41love/funNLP NLP toolkit',
+);
diff --git a/api/wired-pending/intent-opus4-wire_pandas_ai.php b/api/wired-pending/intent-opus4-wire_pandas_ai.php
new file mode 100644
index 000000000..ed3be9967
--- /dev/null
+++ b/api/wired-pending/intent-opus4-wire_pandas_ai.php
@@ -0,0 +1,10 @@
+ 'wire_pandas_ai',
+ 'triggers' => array('wire pandas-ai','pandasai install','pandas ai','sinaptik pandasai'),
+ 'cmd' => 'echo "WIRE OSS pandas-ai · sinaptik-ai/pandas-ai · 23417 stars · chat with your data df via LLM · install: pip install pandasai --break-system-packages · usage: from pandasai import SmartDataframe; df = SmartDataframe(your_df, config={\\\"llm\\\": groq_or_ollama}) · purpose: fill data_analysis gap (59/90 -> 70+) · wave 220 priority_wire[3]"',
+ 'status' => 'WAVE_221',
+ 'created_at' => '2026-04-21T22:55:00+00:00',
+ 'source' => 'opus-wave-221-oss-wire',
+ 'description' => 'Wire sinaptik-ai/pandas-ai for natural language data analysis',
+);
diff --git a/api/wired-pending/intent-opus4-wire_star_vector.php b/api/wired-pending/intent-opus4-wire_star_vector.php
new file mode 100644
index 000000000..6dbcfb787
--- /dev/null
+++ b/api/wired-pending/intent-opus4-wire_star_vector.php
@@ -0,0 +1,10 @@
+ 'wire_star_vector',
+ 'triggers' => array('wire star-vector','star-vector install','starvector','star vector oss'),
+ 'cmd' => 'echo "WIRE OSS star-vector · joanrod/star-vector · 4329 stars · SVG code gen foundation model · install: git clone https://github.com/joanrod/star-vector /opt/oss/star-vector && cd /opt/oss/star-vector && docker-compose up -d · purpose: fill code gap (59/90 -> 70+) · wave 220 priority_wire[0]"',
+ 'status' => 'WAVE_221',
+ 'created_at' => '2026-04-21T22:55:00+00:00',
+ 'source' => 'opus-wave-221-oss-wire',
+ 'description' => 'Wire joanrod/star-vector to fill code capability gap',
+);
diff --git a/css/wevia-portal-consistency.css b/css/wevia-portal-consistency.css
new file mode 100644
index 000000000..3c76479e5
--- /dev/null
+++ b/css/wevia-portal-consistency.css
@@ -0,0 +1,103 @@
+/**
+ * WEVIA Portal Consistency CSS · Wave 221 · 2026-04-21
+ * Applied to: all-ia-hub.html, wevia-master.html, wevia-orchestrator.html
+ * Non-destructive: only adds top banner + shared focus style. Never overrides page-specific CSS.
+ */
+
+/* Shared top banner linking portals together */
+.wevia-portal-banner {
+ display: flex;
+ align-items: center;
+ gap: 14px;
+ padding: 10px 18px;
+ background: linear-gradient(135deg, rgba(34,211,238,0.08) 0%, rgba(168,85,247,0.08) 50%, rgba(236,72,153,0.08) 100%);
+ border-bottom: 1px solid rgba(34,211,238,0.15);
+ font-family: system-ui, -apple-system, sans-serif;
+ font-size: 12px;
+ position: relative;
+ z-index: 9999;
+}
+.wevia-portal-banner-label {
+ color: #94a3b8;
+ text-transform: uppercase;
+ letter-spacing: 0.8px;
+ font-size: 10px;
+ font-weight: 700;
+}
+.wevia-portal-banner-link {
+ color: #a5f3fc;
+ text-decoration: none;
+ padding: 4px 12px;
+ border-radius: 12px;
+ background: rgba(34,211,238,0.08);
+ border: 1px solid rgba(34,211,238,0.25);
+ font-weight: 600;
+ font-size: 11.5px;
+ transition: all 0.15s;
+ white-space: nowrap;
+}
+.wevia-portal-banner-link:hover {
+ background: rgba(34,211,238,0.2);
+ border-color: rgba(34,211,238,0.5);
+ transform: translateY(-1px);
+}
+.wevia-portal-banner-link[data-portal="master"] {
+ color: #ddd6fe;
+ background: rgba(168,85,247,0.08);
+ border-color: rgba(168,85,247,0.25);
+}
+.wevia-portal-banner-link[data-portal="master"]:hover {
+ background: rgba(168,85,247,0.2);
+ border-color: rgba(168,85,247,0.5);
+}
+.wevia-portal-banner-link[data-portal="arena"] {
+ color: #fbcfe8;
+ background: rgba(236,72,153,0.08);
+ border-color: rgba(236,72,153,0.25);
+}
+.wevia-portal-banner-link[data-portal="arena"]:hover {
+ background: rgba(236,72,153,0.2);
+ border-color: rgba(236,72,153,0.5);
+}
+.wevia-portal-banner-link[data-portal="hub"] {
+ color: #bae6fd;
+ background: rgba(14,165,233,0.08);
+ border-color: rgba(14,165,233,0.25);
+}
+.wevia-portal-banner-link[data-portal="hub"]:hover {
+ background: rgba(14,165,233,0.2);
+ border-color: rgba(14,165,233,0.5);
+}
+.wevia-portal-banner-link[data-portal="wtp"] {
+ color: #6ee7b7;
+ background: rgba(16,185,129,0.08);
+ border-color: rgba(16,185,129,0.25);
+}
+.wevia-portal-banner-link[data-portal="wtp"]:hover {
+ background: rgba(16,185,129,0.2);
+ border-color: rgba(16,185,129,0.5);
+}
+.wevia-portal-banner-link.wevia-current {
+ opacity: 0.55;
+ pointer-events: none;
+ cursor: default;
+}
+.wevia-portal-badge-wave {
+ margin-left: auto;
+ padding: 3px 10px;
+ border-radius: 12px;
+ background: linear-gradient(135deg, #22d3ee, #a855f7);
+ color: #fff;
+ font-size: 10px;
+ font-weight: 700;
+ letter-spacing: 0.5px;
+}
+
+/* Universal focus-visible for a11y (doctrine wave 215 reinforce) */
+a:focus-visible, button:focus-visible, input:focus-visible, select:focus-visible, textarea:focus-visible {
+ outline: 2px solid #22d3ee;
+ outline-offset: 2px;
+}
+
+/* Smooth scroll behaviour */
+html { scroll-behavior: smooth; }
diff --git a/generated/wevia-code---fibonacci-recursif-20260421-205150-088743.py b/generated/wevia-code---fibonacci-recursif-20260421-205150-088743.py
new file mode 100644
index 000000000..73b31444b
--- /dev/null
+++ b/generated/wevia-code---fibonacci-recursif-20260421-205150-088743.py
@@ -0,0 +1,12 @@
+def fibonacci(n):
+ if n <= 0:
+ return "Erreur : n doit être un entier positif"
+ elif n == 1:
+ return 0
+ elif n == 2:
+ return 1
+ else:
+ return fibonacci(n-1) + fibonacci(n-2)
+
+# Test du code
+print(fibonacci(10))
\ No newline at end of file
diff --git a/generated/wevia-code---fibonacci-recursif-20260421-205512-e9e8d1.py b/generated/wevia-code---fibonacci-recursif-20260421-205512-e9e8d1.py
new file mode 100644
index 000000000..75f1bfc85
--- /dev/null
+++ b/generated/wevia-code---fibonacci-recursif-20260421-205512-e9e8d1.py
@@ -0,0 +1,28 @@
+def fibonacci(n):
+ if n <= 0:
+ return "Entrée non valide. Le nombre doit être positif."
+ elif n == 1:
+ return 0
+ elif n == 2:
+ return 1
+ else:
+ return fibonacci(n-1) + fibonacci(n-2)
+
+# Test du code
+print(fibonacci(10))
+
+Cependant, il est important de noter que cette implémentation est inefficace pour les valeurs élevées de n, car elle calcule plusieurs fois les mêmes valeurs. Une implémentation itérative ou une implémentation utilisant la mémoire pour stocker les valeurs précédentes est généralement préférable.
+
+def fibonacci(n, memo = {}):
+ if n <= 0:
+ return "Entrée non valide. Le nombre doit être positif."
+ elif n == 1:
+ return 0
+ elif n == 2:
+ return 1
+ elif n not in memo:
+ memo[n] = fibonacci(n-1, memo) + fibonacci(n-2, memo)
+ return memo[n]
+
+# Test du code
+print(fibonacci(10))
\ No newline at end of file
diff --git a/generated/wevia-img-paysage-nature-forest-20260421-205144-ccfbcd.svg b/generated/wevia-img-paysage-nature-forest-20260421-205144-ccfbcd.svg
new file mode 100644
index 000000000..cc2615fb0
--- /dev/null
+++ b/generated/wevia-img-paysage-nature-forest-20260421-205144-ccfbcd.svg
@@ -0,0 +1,19 @@
+
\ No newline at end of file
diff --git a/generated/wevia-img-paysage-nature-forest-20260421-205506-9b2732.svg b/generated/wevia-img-paysage-nature-forest-20260421-205506-9b2732.svg
new file mode 100644
index 000000000..d6cf2af03
--- /dev/null
+++ b/generated/wevia-img-paysage-nature-forest-20260421-205506-9b2732.svg
@@ -0,0 +1,10 @@
+
\ No newline at end of file
diff --git a/generated/wevia-pitch-deck-investor-20260421-205453-b82fea.md b/generated/wevia-pitch-deck-investor-20260421-205453-b82fea.md
new file mode 100644
index 000000000..d5575e375
--- /dev/null
+++ b/generated/wevia-pitch-deck-investor-20260421-205453-b82fea.md
@@ -0,0 +1,62 @@
+# pitch deck investor
+
+# Présentation du Pitch Deck Investor
+
+## Qu'est-ce qu'un Pitch Deck ?
+* Document visuel utilisé pour présenter un projet d'entreprise à des investisseurs
+* Comprend des informations clés sur l'entreprise, son produit ou service, son marché et ses perspectives financières
+* L'objectif est de convaincre les investisseurs de financer le projet
+
+## Contenu d'un Pitch Deck
+
+* Présentation de l'entreprise :
+ + Mission et vision
+ + Historique
+ + Équipe
+* Description du produit ou service :
+ + Concept
+ + Fonctionnalités
+ + Avantages concurrentiels
+* Marché et concurrence :
+ + Taille du marché
+ + Concurrence
+ + Positionnement
+* Perspectives financières :
+ + Projections de chiffre d'affaires
+ + Projections de bénéfice
+ + Échéancier de financement
+
+## Structure d'un Pitch Deck
+
+* Introduction (1-2 pages) :
+ + Présentation de l'entreprise et de son projet
+ + Objectif du pitch
+* Présentation du produit ou service (2-3 pages) :
+ + Description du produit ou service
+ + Avantages concurrentiels
+ + Fonctionnalités
+* Marché et concurrence (2-3 pages) :
+ + Taille du marché
+ + Concurrence
+ + Positionnement
+* Perspectives financières (2-3 pages) :
+ + Projections de chiffre d'affaires
+ + Projections de bénéfice
+ + Échéancier de financement
+* Conclusion (1 page) :
+ + Résumé des points clés
+ + Appel à l'action
+
+## Conseils pour créer un Pitch Deck efficace
+
+* Utiliser des images et des graphiques pour illustrer les points clés
+* Faire appel à des chiffres et des statistiques pour étayer les arguments
+* Utiliser un langage clair et concis
+* Préparer des questions pour les investisseurs
+* Prévoir un temps de présentation de 10-15 minutes
+
+## Exemples de Pitch Deck réussis
+
+* Uber : Pitch Deck qui a permis à l'entreprise de lever 200 millions de dollars
+* Airbnb : Pitch Deck qui a permis à l'entreprise de lever 7 millions de dollars
+* Dropbox : Pitch Deck qui a permis à l'entreprise de lever 7 millions de dollars
\ No newline at end of file
diff --git a/generated/wevia-pitch-deck-investor-20260421-205453-b82fea.pptx b/generated/wevia-pitch-deck-investor-20260421-205453-b82fea.pptx
new file mode 100644
index 000000000..d6269336b
Binary files /dev/null and b/generated/wevia-pitch-deck-investor-20260421-205453-b82fea.pptx differ
diff --git a/generated/wevia-procedure-qualite-20260421-205447-1150f7.docx b/generated/wevia-procedure-qualite-20260421-205447-1150f7.docx
new file mode 100644
index 000000000..ea4744e7d
Binary files /dev/null and b/generated/wevia-procedure-qualite-20260421-205447-1150f7.docx differ
diff --git a/generated/wevia-procedure-qualite-20260421-205447-1150f7.md b/generated/wevia-procedure-qualite-20260421-205447-1150f7.md
new file mode 100644
index 000000000..42e65d753
--- /dev/null
+++ b/generated/wevia-procedure-qualite-20260421-205447-1150f7.md
@@ -0,0 +1,61 @@
+# procedure qualite
+
+**PROCÉDURE DE GESTION DE LA QUALITÉ**
+
+**1. INTRODUCTION**
+
+La qualité est un élément essentiel pour notre entreprise. Cela concerne toutes les activités, produits et services que nous proposons à nos clients. La présente procédure définit les principes et les procédures à suivre pour garantir la qualité de nos produits et services.
+
+**2. OBJECTIFS**
+
+- Assurer la conformité des produits et services aux exigences des clients et aux normes réglementaires.
+- Améliorer continuellement la qualité des produits et services.
+- Réduire les coûts liés aux défaillances et aux retours.
+
+**3. RESPONSABILITÉS**
+
+- Le gestionnaire de la qualité est responsable de l'application et de la mise à jour de la présente procédure.
+- Les responsables de chaque département sont responsables de la mise en œuvre des procédures de qualité spécifiques à leur domaine.
+- Tous les employés sont responsables de la qualité de leurs travaux et de leurs produits.
+
+**4. PROCÉDURES DE QUALITÉ**
+
+### 4.1. Définition et Contrôle des Exigences
+
+- Identifier les exigences des clients et des normes réglementaires.
+- Définir les spécifications techniques pour les produits et services.
+- Contrôler la conformité des produits et services aux exigences et spécifications.
+
+### 4.2. Planification et Exécution
+
+- Planifier les activités de production et de service en fonction des exigences et spécifications.
+- Exécuter les activités de production et de service en conformité avec les plans et spécifications.
+- Contrôler la qualité des produits et services en cours de production et de service.
+
+### 4.3. Contrôle de la Qualité
+
+- Effectuer des contrôles de qualité réguliers sur les produits et services.
+- Identifier et corriger les défaillances et les erreurs.
+- Prendre des mesures pour prévenir les défaillances et les erreurs.
+
+### 4.4. Suivi et Analyse
+
+- Suivre les résultats des contrôles de qualité.
+- Analyser les données pour identifier les tendances et les problèmes.
+- Développer des plans pour améliorer la qualité.
+
+**5. MISE À JOUR DE LA PROCÉDURE**
+
+La présente procédure sera révisée et mise à jour régulièrement pour refléter les changements et les améliorations.
+
+**6. COMMUNICATION**
+
+Tous les employés doivent être informés de la présente procédure et de leurs responsabilités en matière de qualité.
+
+**7. ENREGISTREMENT**
+
+Les documents et les enregistrements relatifs à la qualité seront conservés conformément aux exigences réglementaires.
+
+**8. CONCLUSION**
+
+La qualité est un élément essentiel pour notre entreprise. La présente procédure définit les principes et les procédures à suivre pour garantir la qualité de nos produits et services. Tous les employés doivent être impliqués dans la mise en œuvre de la présente procédure pour assurer la qualité de nos produits et services.
\ No newline at end of file
diff --git a/generated/wevia-strategie-WEVIA-2026-20260421-205441-6d56be.md b/generated/wevia-strategie-WEVIA-2026-20260421-205441-6d56be.md
new file mode 100644
index 000000000..a6d87c80d
--- /dev/null
+++ b/generated/wevia-strategie-WEVIA-2026-20260421-205441-6d56be.md
@@ -0,0 +1,50 @@
+# strategie WEVIA 2026
+
+**Stratégie WEVIA 2026**
+=====================
+
+**Présentation**
+---------------
+
+La stratégie WEVIA 2026 vise à renforcer la position de WEVIA en tant que leader dans le secteur de la technologie de l'information. Cette stratégie est axée sur l'innovation, la croissance et la durabilité.
+
+**Objectifs**
+------------
+
+* Renforcer la position de WEVIA en tant que leader dans le secteur de la technologie de l'information
+* Augmenter la croissance des ventes de 20% par an pendant les 5 prochaines années
+* Développer des solutions innovantes pour répondre aux besoins des clients
+* Améliorer la satisfaction client à 95% dans les 2 prochaines années
+
+**Stratégies**
+-------------
+
+### Stratégie d'innovation
+
+* Investir dans la recherche et développement pour créer de nouvelles solutions
+* Collaborer avec des partenaires pour accéder à de nouvelles technologies
+* Encourager l'esprit d'entreprise et la créativité chez les employés
+
+### Stratégie de croissance
+
+* Élargir la gamme de produits et de services offerts
+* Développer des stratégies de marketing ciblées pour atteindre de nouveaux marchés
+* Investir dans la formation et le développement des employés pour améliorer leur compétences
+
+### Stratégie de durabilité
+
+* Réduire les émissions de gaz à effet de serre de 30% dans les 5 prochaines années
+* Développer des solutions éco-responsables pour les clients
+* Encourager la diversité et l'inclusion dans l'entreprise
+
+**Mesures de suivi**
+-------------------
+
+* Évaluer les progrès réalisés chaque trimestre
+* Réviser la stratégie annuellement pour s'assurer qu'elle reste pertinente et efficace
+* Communiquer régulièrement avec les employés et les clients sur les progrès réalisés
+
+**Conclusion**
+--------------
+
+La stratégie WEVIA 2026 est axée sur l'innovation, la croissance et la durabilité. Nous sommes convaincus que cette stratégie nous permettra de renforcer notre position en tant que leader dans le secteur de la technologie de l'information et de répondre aux besoins des clients de manière efficace.
\ No newline at end of file
diff --git a/generated/wevia-strategie-WEVIA-2026-20260421-205441-6d56be.pdf b/generated/wevia-strategie-WEVIA-2026-20260421-205441-6d56be.pdf
new file mode 100644
index 000000000..a60dc807d
Binary files /dev/null and b/generated/wevia-strategie-WEVIA-2026-20260421-205441-6d56be.pdf differ
diff --git a/wevia-master.html b/wevia-master.html
index 4c993d21f..b11a7ee57 100644
--- a/wevia-master.html
+++ b/wevia-master.html
@@ -104,8 +104,18 @@ body{background:var(--bg);color:var(--tx);font-family:'DM Sans',sans-serif;displ
+
+
+
diff --git a/wevia-orchestrator.html b/wevia-orchestrator.html
index 79907216b..5021e4862 100644
--- a/wevia-orchestrator.html
+++ b/wevia-orchestrator.html
@@ -101,8 +101,18 @@ body{background:var(--bg);color:var(--t1);font-family:var(--sans);overflow-x:hid
/* SCROLLBAR */
::-webkit-scrollbar{width:4px}::-webkit-scrollbar-track{background:var(--bg)}::-webkit-scrollbar-thumb{background:var(--brd);border-radius:4px}
+
+
+
WEVIA ORCHESTRATOR