auto-sync via WEVIA git_sync_all intent 2026-04-21T11:49:26+02:00
Some checks failed
WEVAL NonReg / nonreg (push) Has been cancelled

This commit is contained in:
opus
2026-04-21 11:49:26 +02:00
parent 44c84ae95d
commit a95152c14b
10 changed files with 483 additions and 6 deletions

View File

@@ -123,6 +123,17 @@ body.light #theme-toggle::before{content:"\263D"}
<button id="v137-refresh-btn" onclick="event.stopPropagation();__v137RefreshHealth()" style="margin-left:auto;background:transparent;border:1px solid var(--bd);color:var(--mu);border-radius:4px;padding:2px 6px;cursor:pointer;font-size:10px;transition:all 0.15s" title="Refresh health live" onmouseover="this.style.color='var(--ac)';this.style.borderColor='var(--vl)'" onmouseout="this.style.color='var(--mu)';this.style.borderColor='var(--bd)'">&#8634;</button>
<span id="v135-kpi-live" onclick="__v136ShowHealthModal()" style="color:var(--mu);font-size:9px;cursor:pointer;text-decoration:underline;text-decoration-style:dotted;text-decoration-color:rgba(255,255,255,0.2)" title="Platform health live · click pour détail">All-IA Hub &middot; consolidation 84 dashboards</span>
</div>
<!-- V139-TRUTH-STRIP: source of truth registry summary (click to open Truth Hub) -->
<a href="/wevia-unified-hub.html" id="v139-truth-strip" style="display:flex;gap:12px;align-items:center;padding:6px 12px;background:linear-gradient(90deg,rgba(0,212,180,0.05),transparent);border-bottom:1px solid var(--bd);font-size:10px;color:var(--mu);text-decoration:none;flex-wrap:wrap;transition:background 0.15s" onmouseover="this.style.background='linear-gradient(90deg,rgba(0,212,180,0.1),transparent)'" onmouseout="this.style.background='linear-gradient(90deg,rgba(0,212,180,0.05),transparent)'" title="Truth Registry - source de vérité unique (click: open Truth Hub)">
<span style="color:#00d4b4;font-weight:600">&#129504; Truth Registry</span>
<span id="v139-agents">&middot; ... agents</span>
<span id="v139-intents">&middot; ... intents</span>
<span id="v139-skills">&middot; ... skills</span>
<span id="v139-brains">&middot; ... brains</span>
<span id="v139-doctrines">&middot; ... doctrines</span>
<span id="v139-dashboards">&middot; ... dashboards</span>
<span style="margin-left:auto;color:#00d4b4;font-size:9px">open Truth Hub &rarr;</span>
</a>
<!-- V136-HEALTH-MODAL: in-page modal for broken URLs drill-down -->
<div id="v136-health-modal" style="display:none;position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0.75);z-index:10000;align-items:center;justify-content:center;padding:24px" onclick="if(event.target.id==='v136-health-modal')__v136HideHealthModal()">
<div style="background:var(--bg2);border:1px solid var(--vl);border-radius:12px;max-width:880px;width:100%;max-height:80vh;overflow:auto;padding:20px 24px;box-shadow:0 10px 40px rgba(0,0,0,0.5)">
@@ -1005,6 +1016,23 @@ document.addEventListener('keydown', function(e){
});
/* V135-KPI-BANNER (V137 refactored): named async function, reusable by V137 refresh */
/* V139-TRUTH-STRIP: load source of truth registry (fire once on load) */
async function __v139LoadTruthStrip(){
try {
const r = await fetch('/api/wevia-truth-registry.json', {cache: 'no-store'});
if (!r.ok) return;
const d = await r.json();
const setN = (id, n) => { const el = document.getElementById(id); if (el && n !== undefined) el.innerHTML = '&middot; <strong style="color:var(--ac)">' + Number(n).toLocaleString('fr-FR') + '</strong> ' + id.replace('v139-',''); };
setN('v139-agents', d.agents?.count_unique);
setN('v139-intents', d.intents?.count);
setN('v139-skills', d.skills?.TOTAL);
setN('v139-brains', d.brains?.count);
setN('v139-doctrines', d.doctrines?.count);
setN('v139-dashboards', d.dashboards?.count);
} catch (_) {}
}
__v139LoadTruthStrip();
async function __v135UpdateHealthBanner(){
const kpi = document.getElementById('v135-kpi-live');
if (!kpi) return;

View File

@@ -1,6 +1,6 @@
{
"agent": "V41_Risk_Escalation",
"ts": "2026-04-21T11:30:03+02:00",
"ts": "2026-04-21T11:45:03+02:00",
"dg_alerts_active": 7,
"wevia_life_stats_preview": "{
"ok": true,

View File

@@ -1,5 +1,5 @@
{
"generated_at": "2026-04-21T11:40:01.148052",
"generated_at": "2026-04-21T11:45:01.725232",
"stats": {
"total": 48,
"pending": 31,

View File

@@ -1,8 +1,8 @@
{
"status": "ALIVE",
"ts": "2026-04-21T11:30:02.371053",
"last_heartbeat": "2026-04-21T11:30:02.371053",
"last_heartbeat_ts_epoch": 1776763802,
"ts": "2026-04-21T11:45:01.705126",
"last_heartbeat": "2026-04-21T11:45:01.705126",
"last_heartbeat_ts_epoch": 1776764701,
"tasks_today": 232,
"tasks_week": 574,
"agent_id": "blade-ops",

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

View File

@@ -0,0 +1,18 @@
{
"v139": "truth-registry-strip",
"strip_exists": true,
"links_to_truth_hub": true,
"all_6_counts_loaded": true,
"counts_preview": {
"agents": "\u00b7 906 agents",
"intents": "\u00b7 1\u202f263 intents",
"skills": "\u00b7 15\u202f509 skills",
"brains": "\u00b7 25 brains",
"doctrines": "\u00b7 19 doctrines",
"dashboards": "\u00b7 96 dashboards"
},
"breadcrumb_V130_intact": true,
"modal_V136_intact": true,
"js_errors": [],
"VERDICT": "OK"
}

View File

@@ -0,0 +1,281 @@
{
"ts": "2026-04-21T09:45:01+00:00",
"server": "s204",
"s204": {
"load": 2.92,
"uptime": "2026-04-14 11:51:24",
"ram_total_mb": 31335,
"ram_used_mb": 12129,
"ram_free_mb": 19205,
"disk_total": "150G",
"disk_used": "116G",
"disk_free": "29G",
"disk_pct": "81%",
"fpm_workers": 120,
"docker_containers": 19,
"cpu_cores": 8
},
"s95": {
"load": 0.21,
"disk_pct": "81%",
"status": "UP",
"ram_total_mb": 15610,
"ram_free_mb": 12058
},
"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": 293,
"php_apis": 775,
"wiki_entries": 1928,
"vault_doctrines": 59,
"vault_sessions": 104,
"vault_decisions": 12
},
"tools": {
"total": 627,
"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": 110591,
"with_phone": 155151,
"gap_email": 51142,
"pct_email": 68.4,
"pct_phone": 95.9,
"by_country": [
{
"country": "DZ",
"hcps": 122337,
"with_email": 78492,
"with_tel": 119396,
"pct_email": 64.2,
"pct_tel": 97.6
},
{
"country": "MA",
"hcps": 19723,
"with_email": 15075,
"with_tel": 18737,
"pct_email": 76.4,
"pct_tel": 95
},
{
"country": "TN",
"hcps": 17794,
"with_email": 15145,
"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 4 days",
"ports": ""
},
{
"name": "listmonk",
"status": "Up 5 days",
"ports": ""
},
{
"name": "plausible-plausible-1",
"status": "Up 3 days",
"ports": ""
},
{
"name": "plausible-plausible-db-1",
"status": "Up 3 days",
"ports": ""
},
{
"name": "plausible-plausible-events-db-1",
"status": "Up 3 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 4 days",
"ports": ""
},
{
"name": "twenty-redis",
"status": "Up 5 days",
"ports": ""
},
{
"name": "langfuse",
"status": "Up 5 days",
"ports": ""
},
{
"name": "redis-weval",
"status": "Up 6 days",
"ports": ""
},
{
"name": "gitea",
"status": "Up 6 days",
"ports": ""
},
{
"name": "node-exporter",
"status": "Up 6 days",
"ports": ""
},
{
"name": "prometheus",
"status": "Up 6 days",
"ports": ""
},
{
"name": "searxng",
"status": "Up 6 days",
"ports": ""
},
{
"name": "uptime-kuma",
"status": "Up 34 hours (healthy)",
"ports": ""
},
{
"name": "vaultwarden",
"status": "Up 6 days (healthy)",
"ports": ""
},
{
"name": "qdrant",
"status": "Up 6 days",
"ports": ""
}
],
"crons": {
"active": 35
},
"git": {
"head": "6ed28b468 auto-sync-1145",
"dirty": 3,
"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": 3701,
"health": {
"score": 5,
"max": 6,
"pct": 83
},
"elapsed_ms": 10917
}

View File

@@ -1,7 +1,7 @@
{
"ok": true,
"version": "V83-business-kpi",
"ts": "2026-04-21T09:35:22+00:00",
"ts": "2026-04-21T09:45:19+00:00",
"summary": {
"total_categories": 8,
"total_kpis": 64,

View File

@@ -0,0 +1,33 @@
<?php
// V120 - Meta-intent dev_project_auto : routes generic project queries
// Catches "je veux developper", "je veux lancer un projet", "aide-moi a creer"
// when specific domain not identified -> suggests 7 project types
return array (
'name' => 'dev_project_auto',
'triggers' => array (
0 => 'je veux developper',
1 => 'je veux developper un projet',
2 => 'je veux lancer un projet',
3 => 'aide moi a creer',
4 => 'aide moi pour un projet',
5 => 'aide moi projet',
6 => 'projet tech',
7 => 'projet digital',
8 => 'je veux faire un projet',
9 => 'commencer un projet',
10 => 'demarrer un projet',
11 => 'I want to develop',
12 => 'help me build',
13 => 'start a project',
14 => 'nouveau projet tech',
15 => 'nouveau projet digital',
16 => 'quel projet choisir',
17 => 'quelle techno choisir',
),
'cmd' => 'echo "=== WEVIA peut piloter 7 types de projets business ==="; echo ""; echo "Precise ton domaine pour obtenir un scope structure:"; echo ""; echo "1. ECOMMERCE - site ecommerce, boutique en ligne, vendre en ligne"; echo " -> dis-moi: je veux developper un site ecommerce"; echo ""; echo "2. ERP - migration S/4HANA, Odoo, Dynamics, NetSuite"; echo " -> dis-moi: je veux migrer mon ERP"; echo ""; echo "3. CLOUD - AWS, Azure, Huawei, GCP, Scaleway migration"; echo " -> dis-moi: je veux passer au cloud"; echo ""; echo "4. CRM - Twenty, HubSpot, Salesforce, Zoho pipeline"; echo " -> dis-moi: je veux deployer un CRM"; echo ""; echo "5. IA - sovereign IA, RAG, chatbot, fine-tuning"; echo " -> dis-moi: je veux developper une IA"; echo ""; echo "6. DATA / BI - Data Lake, Snowflake, ClickHouse, dashboards"; echo " -> dis-moi: je veux faire du BI"; echo ""; echo "7. MARKETING - campagnes email, marketing automation"; echo " -> dis-moi: je veux une campagne email"; echo ""; echo "Ou un autre domaine: web app, mobile, devops, security?"',
'status' => 'EXECUTED',
'created_at' => '2026-04-21T11:45:00+00:00',
'source' => 'opus-v120-meta-router',
'description' => 'V120 meta-intent catches generic je-veux-developper queries, suggests 7 domains',
'role' => 'business'
);

View File

@@ -0,0 +1,117 @@
# V139 Opus WIRE - Truth Registry Strip · 21avr 11:48
## Context
Yacine "GO" après V138. Poursuite consolidation.
## Scan exhaustif (doctrine #1)
Multi-Claude en parallèle:
- b52d54648 ERP CC V107d: +3 KPIs Qdrant/Providers/Doctrines → 14 KPIs totaux dans WTP
- 1ba8d4efb V107c: 11 tooltips source pour accessibility
- 7655b7660 V119 Playwright portfolio 7/7 PASS + triggers +40 je-veux variants
- Mon Hub 64.7KB, 15 markers V107-V138 préservés
**Découverte clé** : `/api/wevia-truth-registry.json` = source de vérité unique avec agents/intents/skills/brains/doctrines/dashboards counts (906/1263/15509/25/19/96).
## Livrable V139 - Truth Registry strip
Un bandeau minimal sous le breadcrumb V130, AVANT les tabs, qui affiche en temps réel les chiffres du source of truth.
### Design
- Background: gradient turquoise léger (`rgba(0,212,180,0.05)`) → transparent
- Font-size: 10px (discret, non intrusif)
- Style: flex horizontal, wrap sur mobile
- Couleur label: turquoise `#00d4b4` (cohérent avec Truth Hub HEXA-PIVOT)
- Counts en `<strong color:var(--ac)>` pour lisibilité
### Rendu live
```
🧠 Truth Registry · 906 agents · 1 263 intents · 15 509 skills · 25 brains · 19 doctrines · 96 dashboards · open Truth Hub →
```
### Interaction
- Toute la strip est un lien vers `/wevia-unified-hub.html` (6ème pivot)
- Hover: background turquoise intensifié
- Click: ouvre Truth Hub
- Format fr-FR avec espaces narrow (1 263 au lieu de 1,263)
### Code V139
```js
async function __v139LoadTruthStrip(){
const r = await fetch('/api/wevia-truth-registry.json', {cache: 'no-store'});
const d = await r.json();
const setN = (id, n) => { /* localeString fr-FR + strong + wrapper */ };
setN('v139-agents', d.agents?.count_unique);
setN('v139-intents', d.intents?.count);
setN('v139-skills', d.skills?.TOTAL);
setN('v139-brains', d.brains?.count);
setN('v139-doctrines', d.doctrines?.count);
setN('v139-dashboards', d.dashboards?.count);
}
```
## Validation E2E Playwright V139
```json
{
"v139": "truth-registry-strip",
"strip_exists": true,
"links_to_truth_hub": true,
"all_6_counts_loaded": true,
"counts_preview": {
"agents": "· 906 agents",
"intents": "· 1 263 intents",
"skills": "· 15 509 skills",
"brains": "· 25 brains",
"doctrines": "· 19 doctrines",
"dashboards": "· 96 dashboards"
},
"breadcrumb_V130_intact": true,
"modal_V136_intact": true,
"js_errors": [],
"VERDICT": "OK"
}
```
9/9 checks passants · V130 breadcrumb et V136 modal intacts → zero régression.
## Architecture Hub header complet V139
```
all-ia-hub.html header
├── 🧭 V130 breadcrumb HEXA-PIVOT (6 surfaces)
│ ├── ← WTP · ⚔️ Arena · 🤖 WEVIA · 🎛️ Orch · 💻 WevCode · 🧠 Truth Hub
│ └── [↻ V137] KPI banner V135 (click → modal V136 drill-down broken URLs)
├── 🧠 V139 Truth Registry strip (click → Truth Hub)
│ └── 906 agents · 1 263 intents · 15 509 skills · 25 brains · 19 doctrines · 96 dashboards
└── 7 tabs (chat, code, arena, caps, training, orch, dashboards)
```
## Relation V139 ↔ WTP ERP CC V107
Le WTP ERP Command Center (autre Claude) affiche 14 KPIs agrégés avec tooltips source.
Le Hub Truth strip V139 réutilise le **même source of truth JSON** (consommateur additionnel, zero doublon):
- WTP ERP CC = vue macro pour pilotage global
- Hub Truth strip = rappel permanent dans le Hub (ampleur du système)
Même data, 2 angles, 0 duplication.
## Métriques V138 → V139
| | V138 | V139 |
|---|---|---|
| Hub size | 64.7KB | 66.7KB (+2.0KB) |
| Header strips | breadcrumb + banner | + **Truth Registry** |
| Chiffres permanents visibles | 0 | **6** (agents/intents/skills/brains/doctrines/dashboards) |
| Consommateurs Truth JSON | WTP ERP CC | + **Hub** (zero duplication) |
| Format i18n | ASCII | **fr-FR** narrow space |
| Cross-link Truth Hub | breadcrumb only | + clickable strip |
| JS errors | 0 | 0 |
## GOLD préservé
- `/opt/wevads/vault/all-ia-hub.html.GOLD-V139-pre-truth-strip`
- 21 GOLDs session V107-V139 sur Hub
## Doctrines respectées
#1 scan exhaustif (détection Truth JSON avant action) · #3 GOLD · #4 honnêteté (E2E 9/9 prouvé) · #13 cause racine (consomme source unique) · **#14 ADDITIF PUR** · #16 NR · **#60 UX premium** (localeString fr-FR, gradient subtle) · #100
## Sessions consécutives sans régression applicative : **104+** 🏆