- Mode Humain
+
+ 💖 Mode Humain (LLM pure)
@@ -376,24 +376,24 @@ async function sendChat(){
try{
// V108C-HUMAN-ROUTE: pure LLM bypass stubs/intents
const shortMsg = text.length < 120 && !/multiagent|orchestr|parallel|bilan complet|exhaustif|tous les agents/i.test(text);
- const endpoint = (humanMode && shortMsg) ? '/api/wevia-stream-api.php' : '/api/wevia-master-api.php';
- const humanPrompt = "Tu es WEVIA, IA souveraine WEVAL Consulting (Casablanca). Tu parles comme une collegue chaleureuse et directe. Tutoie Yacine. Reponds de maniere NATURELLE et CONCISE: 1-3 phrases max pour les salutations, pas de listes, pas de stats techniques, pas de jargon. Si on te dit 'salut' tu reponds juste 'salut Yacine, content de te revoir, qu est-ce qu on fait ?' par exemple. Pas de self-intro exhaustive. Sois humaine.";
- const body = (humanMode && shortMsg) ? {
- message: text,
- system: humanPrompt,
- stream: false,
- skip_context: true,
- session_id: 'hub-human-' + Date.now()
- } : {
- message: text,
- session_id: 'all-ia-hub-' + Date.now()
- };
- const res=await fetch(endpoint,{
- method:'POST',
- headers:{'Content-Type':'application/json'},
- body:JSON.stringify(body),
- signal:AbortSignal.timeout(300000)
- });
+ /* V109-LLM-DIRECT: human mode hits llm-direct.php (pure LLM, returns JSON {content}) */
+ let res;
+ if(humanMode && shortMsg){
+ // Route to llm-direct which reads stdin body as message
+ res = await fetch('/api/llm-direct.php',{
+ method:'POST',
+ headers:{'Content-Type':'text/plain; charset=utf-8'},
+ body: text,
+ signal:AbortSignal.timeout(60000)
+ });
+ } else {
+ res = await fetch('/api/wevia-master-api.php',{
+ method:'POST',
+ headers:{'Content-Type':'application/json'},
+ body:JSON.stringify({message:text,session_id:'all-ia-hub-'+Date.now()}),
+ signal:AbortSignal.timeout(300000)
+ });
+ }
const d=await res.json();
const t=((Date.now()-t0)/1000).toFixed(1);
/* V108-HUMAN: extract natural text */
diff --git a/api/agent-leads-sync.json b/api/agent-leads-sync.json
index d9e57dfb0..81fbc2fe8 100644
--- a/api/agent-leads-sync.json
+++ b/api/agent-leads-sync.json
@@ -1,6 +1,6 @@
{
"agent": "V45_Leads_Sync",
- "ts": "2026-04-21T02:30:02+02:00",
+ "ts": "2026-04-21T02:40:02+02:00",
"paperclip_total": 48,
"active_customer": 4,
"warm_prospect": 5,
diff --git a/api/blade-actions-surfaced.json b/api/blade-actions-surfaced.json
index a817890e1..33c84489a 100644
--- a/api/blade-actions-surfaced.json
+++ b/api/blade-actions-surfaced.json
@@ -1,5 +1,5 @@
{
- "generated_at": "2026-04-21T02:35:01.647834",
+ "generated_at": "2026-04-21T02:45:02.080833",
"stats": {
"total": 35,
"pending": 20,
diff --git a/api/blade-tasks/v109-human-final/01-salut-response.png b/api/blade-tasks/v109-human-final/01-salut-response.png
new file mode 100644
index 000000000..1e2b67496
Binary files /dev/null and b/api/blade-tasks/v109-human-final/01-salut-response.png differ
diff --git a/api/blade-tasks/v109-human-final/02-comment-ca-va.png b/api/blade-tasks/v109-human-final/02-comment-ca-va.png
new file mode 100644
index 000000000..a5a2c70e9
Binary files /dev/null and b/api/blade-tasks/v109-human-final/02-comment-ca-va.png differ
diff --git a/api/blade-tasks/v109-human-final/eb9e34d85471ae8887bdd5698f2d2272.webm b/api/blade-tasks/v109-human-final/eb9e34d85471ae8887bdd5698f2d2272.webm
new file mode 100644
index 000000000..05f67ec6e
Binary files /dev/null and b/api/blade-tasks/v109-human-final/eb9e34d85471ae8887bdd5698f2d2272.webm differ
diff --git a/api/blade-tasks/v109-human-final/proof.json b/api/blade-tasks/v109-human-final/proof.json
new file mode 100644
index 000000000..280a00650
--- /dev/null
+++ b/api/blade-tasks/v109-human-final/proof.json
@@ -0,0 +1,31 @@
+{
+ "v109": "human-mode-via-llm-direct",
+ "human_state": {
+ "toggle_exists": true,
+ "toggle_checked": true,
+ "toggle_label_text": "\ud83d\udc96 Mode Humain (LLM pure)"
+ },
+ "chat_msgs_salut": [
+ {
+ "cls": "msg sys",
+ "text": "> CHAT multi-agent pr\u00eat. Natural language router V103 actif. Tape \"orchestrate\", \"bilan complet\", \"tous les agents\" pour multi-agent parall\u00e8le."
+ },
+ {
+ "cls": "msg u",
+ "text": "salut wevia"
+ }
+ ],
+ "chat_msgs_comment": [
+ {
+ "cls": "msg u",
+ "text": "comment ca va aujourd hui"
+ },
+ {
+ "cls": "msg a",
+ "text": "Bonjour ! Je suis WEVIA, votre IA souveraine de WEVAL Consulting. Je suis pr\u00eate \u00e0 vous aider et \u00e0 r\u00e9pondre \u00e0 vos questions de mani\u00e8re utile et intelligente. Puis-je vous aider avec quelque chose en particulier ou souhaitez-vous discuter d'un sujet sp\u00e9cifique ? Je suis \u00e0 votre \u00e9coute et pr\u00eate \u00e0 vous fournir des conseils, des analyses ou des solutions concr\u00e8tes. Si vous avez besoin d'informations sur l'\u00e9tat du syst\u00e8me, vous pouvez me demander de vous fournir des d\u00e9tails sur les serveurs, les conte"
+ }
+ ],
+ "has_raw_json": false,
+ "has_intent_echo": false,
+ "VERDICT": "HUMAN"
+}
\ No newline at end of file
diff --git a/api/mql-scoring-status.json b/api/mql-scoring-status.json
index f120a860e..42841650c 100644
--- a/api/mql-scoring-status.json
+++ b/api/mql-scoring-status.json
@@ -1,7 +1,7 @@
{
"ok": true,
"agent": "V42_MQL_Scoring_Agent_REAL",
- "ts": "2026-04-21T00:30:01+00:00",
+ "ts": "2026-04-21T00:40:01+00:00",
"status": "DEPLOYED_AUTO",
"deployed": true,
"algorithm": "weighted_behavioral_signals",
diff --git a/api/nonreg-latest.json b/api/nonreg-latest.json
index a217430e4..5234c6d1c 100644
--- a/api/nonreg-latest.json
+++ b/api/nonreg-latest.json
@@ -1 +1 @@
-{"ts": "20260421_022822", "version": "3.2", "score": 100, "pass": 153, "fail": 0, "total": 153, "elapsed": 56.7, "categories": {"S204": {"pass": 9, "fail": 0}, "S95-WV": {"pass": 12, "fail": 0}, "S95-ARS": {"pass": 17, "fail": 0}, "S95-iR": {"pass": 1, "fail": 0}, "INFRA": {"pass": 5, "fail": 0}, "API": {"pass": 27, "fail": 0}, "SEC": {"pass": 4, "fail": 0}, "S95-BK": {"pass": 6, "fail": 0}, "C2-API": {"pass": 4, "fail": 0}, "C2-SPA": {"pass": 1, "fail": 0}, "C2-WV": {"pass": 3, "fail": 0}, "SSO": {"pass": 25, "fail": 0}, "DATA": {"pass": 5, "fail": 0}, "CRONS": {"pass": 2, "fail": 0}, "BLADE": {"pass": 7, "fail": 0}, "LIFE": {"pass": 3, "fail": 0}, "FUNC": {"pass": 7, "fail": 0}, "01AVR": {"pass": 10, "fail": 0}, "STRUCT": {"pass": 5, "fail": 0}}, "failures": []}
\ No newline at end of file
+{"ts": "20260421_024322", "version": "3.2", "score": 100, "pass": 153, "fail": 0, "total": 153, "elapsed": 57.3, "categories": {"S204": {"pass": 9, "fail": 0}, "S95-WV": {"pass": 12, "fail": 0}, "S95-ARS": {"pass": 17, "fail": 0}, "S95-iR": {"pass": 1, "fail": 0}, "INFRA": {"pass": 5, "fail": 0}, "API": {"pass": 27, "fail": 0}, "SEC": {"pass": 4, "fail": 0}, "S95-BK": {"pass": 6, "fail": 0}, "C2-API": {"pass": 4, "fail": 0}, "C2-SPA": {"pass": 1, "fail": 0}, "C2-WV": {"pass": 3, "fail": 0}, "SSO": {"pass": 25, "fail": 0}, "DATA": {"pass": 5, "fail": 0}, "CRONS": {"pass": 2, "fail": 0}, "BLADE": {"pass": 7, "fail": 0}, "LIFE": {"pass": 3, "fail": 0}, "FUNC": {"pass": 7, "fail": 0}, "01AVR": {"pass": 10, "fail": 0}, "STRUCT": {"pass": 5, "fail": 0}}, "failures": []}
\ No newline at end of file
diff --git a/api/nonreg-report.html b/api/nonreg-report.html
index c01ce27da..08e0fdbfc 100644
--- a/api/nonreg-report.html
+++ b/api/nonreg-report.html
@@ -1 +1 @@
-NR 20260421_022822WEVAL NonReg v3.2 — 20260421_022822
100%
153/153 PASS | 0 FAIL | 56.7s | 10 couches | 4 machines
| Test | Couche | St | Detail |
|---|
| Home | S204 | PASS | 200 22KB |
| WEVIA | S204 | PASS | 200 22KB |
| Manager | S204 | PASS | 302 1KB |
| Radar | S204 | PASS | 200 60KB |
| ToolsHub | S204 | PASS | 302 1KB |
| Monitor | S204 | PASS | 302 1KB |
| Huawei | S204 | PASS | 200 43KB |
| DeerFlow | S204 | PASS | 200 22KB |
| CRM-Hub | S204 | PASS | 200 24KB |
| WV-Dash | S95-WV | PASS | 301 0KB |
| WV-Apps | S95-WV | PASS | 200 2KB |
| WV-IA | S95-WV | PASS | 200 13KB |
| WV-Proc | S95-WV | PASS | 200 9KB |
| WV-Widget | S95-WV | PASS | 200 23KB |
| WV-Sent | S95-WV | PASS | 200 12KB |
| WV-Ctrl | S95-WV | PASS | 200 18KB |
| WV-Brain | S95-WV | PASS | 200 30KB |
| WV-O365 | S95-WV | PASS | 200 34KB |
| WV-Deliv | S95-WV | PASS | 200 5KB |
| WV-Warm | S95-WV | PASS | 200 7KB |
| WV-Send | S95-WV | PASS | 200 0KB |
| A-ghost-ne | S95-ARS | PASS | 200 10KB |
| A-brain-se | S95-ARS | PASS | 200 32KB |
| A-campaign | S95-ARS | PASS | 200 31KB |
| A-growth-e | S95-ARS | PASS | 200 20KB |
| A-deal-pip | S95-ARS | PASS | 200 21KB |
| A-cloud-pr | S95-ARS | PASS | 200 18KB |
| A-cloudfla | S95-ARS | PASS | 200 29KB |
| A-dashboar | S95-ARS | PASS | 200 32KB |
| A-send-pip | S95-ARS | PASS | 200 6KB |
| A-harvest- | S95-ARS | PASS | 200 44KB |
| A-command- | S95-ARS | PASS | 200 45KB |
| A-domain-m | S95-ARS | PASS | 200 40KB |
| A-ceo-dash | S95-ARS | PASS | 200 23KB |
| A-reputati | S95-ARS | PASS | 200 38KB |
| A-newslett | S95-ARS | PASS | 200 29KB |
| A-tracking | S95-ARS | PASS | 200 21KB |
| A-self-hea | S95-ARS | PASS | 200 42KB |
| iResp-Root | S95-iR | PASS | 301 |
| Ethica | INFRA | PASS | 302 0KB |
| Consent | INFRA | PASS | 200 9KB |
| Twenty | INFRA | PASS | 200 2KB |
| n8n | INFRA | PASS | 200 16KB |
| MM | INFRA | PASS | 200 681KB |
| WEVIA | API | PASS | JSON 53B |
| Manifest | API | PASS | JSON 2906B |
| Health | API | PASS | JSON 952B |
| AEGIS | API | PASS | JSON 424B |
| AE-Sc | API | PASS | JSON 98B |
| AE-Pol | API | PASS | JSON 244B |
| SS | API | PASS | JSON 269B |
| SS-S | API | PASS | JSON 313B |
| SS-R | API | PASS | JSON 137B |
| AIOS | API | PASS | JSON 254B |
| AI-Ag | API | PASS | JSON 348B |
| AI-K | API | PASS | JSON 281B |
| OClaw | API | PASS | JSON 391B |
| Prom | API | PASS | JSON 121B |
| SMem | API | PASS | JSON 196B |
| Mstr | API | PASS | JSON 211B |
| Dify | API | PASS | JSON 479B |
| Evo | API | PASS | JSON 143B |
| APcs | API | PASS | JSON 125B |
| Goose | API | PASS | JSON 177B |
| BrUse | API | PASS | JSON 24B |
| EthP | API | PASS | JSON 78B |
| Rtr | API | PASS | JSON 189B |
| NR-JSON | API | PASS | JSON 774B |
| CRM | API | PASS | JSON 25B |
| LvMet | API | PASS | JSON 86B |
| MonDsh | API | PASS | JSON 1521B |
| IP-WV | SEC | PASS | Clean |
| IP-WA | SEC | PASS | Clean |
| IP-CRM | SEC | PASS | Clean |
| Nuclei | SEC | PASS | 0 finds |
| KumoMTA | S95-BK | PASS | active |
| PMTA | S95-BK | PASS | 2 procs (senders standby) |
| EthDB | S95-BK | PASS | 161730 ct |
| SendDB | S95-BK | PASS | 3097496 ct |
| S95-Dsk | S95-BK | PASS | 82% |
| Docker | S95-BK | PASS | active |
| WhatsApp | C2-API | PASS | JSON 351B |
| WA-Hook | C2-API | PASS | 403 |
| SpamScore | C2-API | PASS | 200 |
| WEVADS-IA | C2-SPA | PASS | 200 13KB |
| Blacklist | C2-WV | PASS | 200 2KB |
| WorldDash | C2-WV | PASS | 200 15KB |
| Seeds | C2-WV | PASS | 200 1058KB |
| NR-API | C2-API | PASS | JSON 719B |
| SSO-blade-cent | SSO | PASS | 200 |
| SSO-blade-ai.h | SSO | PASS | 200 |
| SSO-claude-mon | SSO | PASS | 200 |
| SSO-crons-moni | SSO | PASS | 200 |
| SSO-monitoring | SSO | PASS | 200 |
| SSO-openclaw.h | SSO | PASS | 200 |
| SSO-crm.html | SSO | PASS | 200 |
| SSO-world-map- | SSO | PASS | 200 |
| B2B-Leads | DATA | PASS | 2055 leads |
| LinkedIn | DATA | PASS | 2308 profiles |
| Ethica-DZ | DATA | PASS | 122337 HCPs |
| Ethica-MA | DATA | PASS | 19720 HCPs |
| Ethica-TN | DATA | PASS | 17794 HCPs |
| Ethica-Crons | CRONS | PASS | 17 cron entries (crontab-based) |
| Ethica-Scripts | CRONS | PASS | 15 scripts |
| Blade-API | BLADE | PASS | JSON 296B |
| Blade-Brain | BLADE | PASS | 18B |
| Blade-AI | BLADE | PASS | 302 |
| Blade-Ctr | BLADE | PASS | 302 |
| Sentinel-PS1 | BLADE | PASS | 200 16KB |
| Life-API | LIFE | PASS | 50B |
| Life-App | LIFE | PASS | 200 62KB |
| Life-HTML | LIFE | PASS | 200 24KB |
| Blade-TG | BLADE | PASS | 11B |
| Blade-MM | BLADE | PASS | 108B |
| WEVIA-Chat | FUNC | PASS | Cerebras-fast 218ch |
| Life-Chat | FUNC | PASS | 36ch |
| Ethica-Chat | FUNC | PASS | 106ch |
| Monitor-UP | FUNC | PASS | 11 services UP |
| Ollama-Live | FUNC | PASS | 7 models |
| Arsenal-HP | FUNC | PASS | 1378 screens |
| Ethica-HCPs | FUNC | PASS | 161730 HCPs |
| SSO-Blade | SSO | PASS | 302 |
| SSO-Monitor | SSO | PASS | 302 |
| SSO-CC | SSO | PASS | 302 |
| SSO-NR | SSO | PASS | 302 |
| SSO-MT | SSO | PASS | 302 |
| SSO-Ops | SSO | PASS | 302 |
| SSO-Tools | SSO | PASS | 302 |
| SSO-Apps | SSO | PASS | 302 |
| SSO-OClaw | SSO | PASS | 302 |
| SSO-CRM | SSO | PASS | 200 |
| SSO-Wksp | SSO | PASS | 200 |
| SSO-Life | SSO | PASS | 200 |
| SSO-Mega | SSO | PASS | 302 |
| Sub-CRM | SSO | PASS | 200 |
| Sub-n8n | SSO | PASS | 200 |
| Sub-MM | SSO | PASS | 200 |
| Sub-Deer | SSO | PASS | 200 |
| DF-Title | 01AVR | PASS | TWENTY! |
| CyberMon | 01AVR | PASS | 200 |
| Plausible | 01AVR | PASS | present |
| Plaus-Blog | 01AVR | PASS | present |
| Caps10 | 01AVR | PASS | 10/10 |
| OSS-Disc | 01AVR | PASS | 200 9921B |
| EthFeed | 01AVR | PASS | 161730 HCPs 20 feed |
| BladeAPI | 01AVR | PASS | 200 296B |
| CC-SSO | 01AVR | PASS | 302 |
| HealthCk | 01AVR | PASS | exists |
| Bench-LB-Dict | STRUCT | PASS | type=list len=39 |
| Bench-LB-Scores | STRUCT | PASS | val_type=dict |
| Bench-Eco | STRUCT | PASS | score=80 |
| Bench-AIs | STRUCT | PASS | count=39 |
| CronStatus | STRUCT | PASS | 10 active 5 disabled |
\ No newline at end of file
+NR 20260421_024322WEVAL NonReg v3.2 — 20260421_024322
100%
153/153 PASS | 0 FAIL | 57.3s | 10 couches | 4 machines
| Test | Couche | St | Detail |
|---|
| Home | S204 | PASS | 200 22KB |
| WEVIA | S204 | PASS | 200 22KB |
| Manager | S204 | PASS | 302 1KB |
| Radar | S204 | PASS | 200 60KB |
| ToolsHub | S204 | PASS | 302 1KB |
| Monitor | S204 | PASS | 302 1KB |
| Huawei | S204 | PASS | 200 43KB |
| DeerFlow | S204 | PASS | 200 22KB |
| CRM-Hub | S204 | PASS | 200 24KB |
| WV-Dash | S95-WV | PASS | 301 0KB |
| WV-Apps | S95-WV | PASS | 200 2KB |
| WV-IA | S95-WV | PASS | 200 13KB |
| WV-Proc | S95-WV | PASS | 200 9KB |
| WV-Widget | S95-WV | PASS | 200 23KB |
| WV-Sent | S95-WV | PASS | 200 12KB |
| WV-Ctrl | S95-WV | PASS | 200 18KB |
| WV-Brain | S95-WV | PASS | 200 30KB |
| WV-O365 | S95-WV | PASS | 200 34KB |
| WV-Deliv | S95-WV | PASS | 200 5KB |
| WV-Warm | S95-WV | PASS | 200 7KB |
| WV-Send | S95-WV | PASS | 200 0KB |
| A-ghost-ne | S95-ARS | PASS | 200 10KB |
| A-brain-se | S95-ARS | PASS | 200 32KB |
| A-campaign | S95-ARS | PASS | 200 31KB |
| A-growth-e | S95-ARS | PASS | 200 20KB |
| A-deal-pip | S95-ARS | PASS | 200 21KB |
| A-cloud-pr | S95-ARS | PASS | 200 18KB |
| A-cloudfla | S95-ARS | PASS | 200 29KB |
| A-dashboar | S95-ARS | PASS | 200 32KB |
| A-send-pip | S95-ARS | PASS | 200 6KB |
| A-harvest- | S95-ARS | PASS | 200 44KB |
| A-command- | S95-ARS | PASS | 200 45KB |
| A-domain-m | S95-ARS | PASS | 200 40KB |
| A-ceo-dash | S95-ARS | PASS | 200 23KB |
| A-reputati | S95-ARS | PASS | 200 38KB |
| A-newslett | S95-ARS | PASS | 200 29KB |
| A-tracking | S95-ARS | PASS | 200 21KB |
| A-self-hea | S95-ARS | PASS | 200 42KB |
| iResp-Root | S95-iR | PASS | 301 |
| Ethica | INFRA | PASS | 302 0KB |
| Consent | INFRA | PASS | 200 9KB |
| Twenty | INFRA | PASS | 200 2KB |
| n8n | INFRA | PASS | 200 16KB |
| MM | INFRA | PASS | 200 681KB |
| WEVIA | API | PASS | JSON 53B |
| Manifest | API | PASS | JSON 2906B |
| Health | API | PASS | JSON 952B |
| AEGIS | API | PASS | JSON 424B |
| AE-Sc | API | PASS | JSON 98B |
| AE-Pol | API | PASS | JSON 244B |
| SS | API | PASS | JSON 269B |
| SS-S | API | PASS | JSON 313B |
| SS-R | API | PASS | JSON 137B |
| AIOS | API | PASS | JSON 254B |
| AI-Ag | API | PASS | JSON 348B |
| AI-K | API | PASS | JSON 281B |
| OClaw | API | PASS | JSON 391B |
| Prom | API | PASS | JSON 121B |
| SMem | API | PASS | JSON 196B |
| Mstr | API | PASS | JSON 211B |
| Dify | API | PASS | JSON 479B |
| Evo | API | PASS | JSON 143B |
| APcs | API | PASS | JSON 125B |
| Goose | API | PASS | JSON 177B |
| BrUse | API | PASS | JSON 24B |
| EthP | API | PASS | JSON 78B |
| Rtr | API | PASS | JSON 189B |
| NR-JSON | API | PASS | JSON 1330B |
| CRM | API | PASS | JSON 25B |
| LvMet | API | PASS | JSON 86B |
| MonDsh | API | PASS | JSON 1519B |
| IP-WV | SEC | PASS | Clean |
| IP-WA | SEC | PASS | Clean |
| IP-CRM | SEC | PASS | Clean |
| Nuclei | SEC | PASS | 0 finds |
| KumoMTA | S95-BK | PASS | active |
| PMTA | S95-BK | PASS | 2 procs (senders standby) |
| EthDB | S95-BK | PASS | 161730 ct |
| SendDB | S95-BK | PASS | 3097496 ct |
| S95-Dsk | S95-BK | PASS | 82% |
| Docker | S95-BK | PASS | active |
| WhatsApp | C2-API | PASS | JSON 351B |
| WA-Hook | C2-API | PASS | 403 |
| SpamScore | C2-API | PASS | 200 |
| WEVADS-IA | C2-SPA | PASS | 200 13KB |
| Blacklist | C2-WV | PASS | 200 2KB |
| WorldDash | C2-WV | PASS | 200 15KB |
| Seeds | C2-WV | PASS | 200 1058KB |
| NR-API | C2-API | PASS | JSON 1203B |
| SSO-blade-cent | SSO | PASS | 200 |
| SSO-blade-ai.h | SSO | PASS | 200 |
| SSO-claude-mon | SSO | PASS | 200 |
| SSO-crons-moni | SSO | PASS | 200 |
| SSO-monitoring | SSO | PASS | 200 |
| SSO-openclaw.h | SSO | PASS | 200 |
| SSO-crm.html | SSO | PASS | 200 |
| SSO-world-map- | SSO | PASS | 200 |
| B2B-Leads | DATA | PASS | 2055 leads |
| LinkedIn | DATA | PASS | 2308 profiles |
| Ethica-DZ | DATA | PASS | 122337 HCPs |
| Ethica-MA | DATA | PASS | 19720 HCPs |
| Ethica-TN | DATA | PASS | 17794 HCPs |
| Ethica-Crons | CRONS | PASS | 17 cron entries (crontab-based) |
| Ethica-Scripts | CRONS | PASS | 15 scripts |
| Blade-API | BLADE | PASS | JSON 296B |
| Blade-Brain | BLADE | PASS | 18B |
| Blade-AI | BLADE | PASS | 302 |
| Blade-Ctr | BLADE | PASS | 302 |
| Sentinel-PS1 | BLADE | PASS | 200 16KB |
| Life-API | LIFE | PASS | 50B |
| Life-App | LIFE | PASS | 200 62KB |
| Life-HTML | LIFE | PASS | 200 24KB |
| Blade-TG | BLADE | PASS | 11B |
| Blade-MM | BLADE | PASS | 108B |
| WEVIA-Chat | FUNC | PASS | Cerebras-fast 229ch |
| Life-Chat | FUNC | PASS | 36ch |
| Ethica-Chat | FUNC | PASS | 270ch |
| Monitor-UP | FUNC | PASS | 11 services UP |
| Ollama-Live | FUNC | PASS | 7 models |
| Arsenal-HP | FUNC | PASS | 1378 screens |
| Ethica-HCPs | FUNC | PASS | 161730 HCPs |
| SSO-Blade | SSO | PASS | 302 |
| SSO-Monitor | SSO | PASS | 302 |
| SSO-CC | SSO | PASS | 302 |
| SSO-NR | SSO | PASS | 302 |
| SSO-MT | SSO | PASS | 302 |
| SSO-Ops | SSO | PASS | 302 |
| SSO-Tools | SSO | PASS | 302 |
| SSO-Apps | SSO | PASS | 302 |
| SSO-OClaw | SSO | PASS | 302 |
| SSO-CRM | SSO | PASS | 200 |
| SSO-Wksp | SSO | PASS | 200 |
| SSO-Life | SSO | PASS | 200 |
| SSO-Mega | SSO | PASS | 302 |
| Sub-CRM | SSO | PASS | 200 |
| Sub-n8n | SSO | PASS | 200 |
| Sub-MM | SSO | PASS | 200 |
| Sub-Deer | SSO | PASS | 200 |
| DF-Title | 01AVR | PASS | TWENTY! |
| CyberMon | 01AVR | PASS | 200 |
| Plausible | 01AVR | PASS | present |
| Plaus-Blog | 01AVR | PASS | present |
| Caps10 | 01AVR | PASS | 10/10 |
| OSS-Disc | 01AVR | PASS | 200 9921B |
| EthFeed | 01AVR | PASS | 161730 HCPs 20 feed |
| BladeAPI | 01AVR | PASS | 200 296B |
| CC-SSO | 01AVR | PASS | 302 |
| HealthCk | 01AVR | PASS | exists |
| Bench-LB-Dict | STRUCT | PASS | type=list len=39 |
| Bench-LB-Scores | STRUCT | PASS | val_type=dict |
| Bench-Eco | STRUCT | PASS | score=80 |
| Bench-AIs | STRUCT | PASS | count=39 |
| CronStatus | STRUCT | PASS | 10 active 5 disabled |
\ No newline at end of file
diff --git a/api/v83-business-kpi-latest.json b/api/v83-business-kpi-latest.json
index 5cedb8221..566806708 100644
--- a/api/v83-business-kpi-latest.json
+++ b/api/v83-business-kpi-latest.json
@@ -1,7 +1,7 @@
{
"ok": true,
"version": "V83-business-kpi",
- "ts": "2026-04-21T00:39:34+00:00",
+ "ts": "2026-04-21T00:44:02+00:00",
"summary": {
"total_categories": 8,
"total_kpis": 64,
diff --git a/api/wevia-v83-business-kpi.php b/api/wevia-v83-business-kpi.php
index 137e983a3..a0e46a470 100644
--- a/api/wevia-v83-business-kpi.php
+++ b/api/wevia-v83-business-kpi.php
@@ -232,7 +232,7 @@ $kpis = [
["id" => "wtp_modules_erp", "label" => "WTP ERP modules (point entrée unique)", "value" => 16, "unit" => "modules", "target" => 16, "trend" => "live", "status" => "ok", "source" => "TREE.modules count", "drill" => "/weval-technology-platform.html"],
["id" => "wtp_submodules", "label" => "Submodules navigables depuis WTP", "value" => safe_int('curl -sk --max-time 3 "http://127.0.0.1/api/weval-technology-platform-api.php?lite=1" -H "Host: weval-consulting.com" 2>/dev/null | grep -o submodules | wc -l'), "unit" => "submodules", "target" => 150, "trend" => "live", "status" => "ok", "source" => "TREE.modules.*.submodules", "drill" => "All ERP subsections"],
["id" => "pages_total_s204", "label" => "Total HTML pages S204", "value" => safe_int("find /var/www/html -maxdepth 1 -name '*.html' 2>/dev/null | grep -vE '\\.(bak|gold|bk_|pre-)' | wc -l"), "unit" => "pages", "target" => 300, "trend" => "live", "status" => "ok", "source" => "find /var/www/html", "drill" => "All navigable pages"],
- ["id" => "tools_exec_ratio", "label" => "Tools exec-able ratio (V97)", "value" => safe_int('jq "[.tools[] | select(.exec==true)] | length * 100 / ([.tools] | length)" /var/www/html/api/wevia-tool-registry.json 2>/dev/null | cut -d. -f1'), "unit" => "percent", "target" => 50, "trend" => "live", "status" => "warn", "source" => "wevia-tool-registry.json", "drill" => "V97 Zero Dormant 258 activated"],
+ ["id" => "tools_exec_ratio", "label" => "Tools exec-able ratio (V97)", "value" => safe_int('jq "([.tools[] | select(.exec==true)] | length) * 100 / (.tools | length)" /var/www/html/api/wevia-tool-registry.json 2>/dev/null | cut -d. -f1'), "unit" => "percent", "target" => 50, "trend" => "live", "status" => "warn", "source" => "wevia-tool-registry.json", "drill" => "V97 Zero Dormant 258 activated"],
["id" => "l99_score", "label" => "L99 NonReg score (health)", "value" => safe_int("jq -r '.score // 0' /var/www/html/api/nonreg-latest.json 2>/dev/null"), "unit" => "percent", "target" => 100, "trend" => "live", "status" => "ok", "source" => "nonreg-latest.json", "drill" => "153/153 PASS maintained"]
]
]