AUTO-BACKUP 20260417-0140

This commit is contained in:
opus
2026-04-17 01:40:02 +02:00
parent bf1d120e2a
commit 389688a770
6 changed files with 19997 additions and 6 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

View File

@@ -199,13 +199,21 @@ $out","tool"=>"nuclei_scan"];
$content = file_get_contents($auditFile);
$extract = "";
if (preg_match("/## 1\. SYNTH(.*?)## 2\./su", $content, $mm1)) {
$extract .= "## SYNTHESE\n" . trim($mm1[1]) . "\n\n";
$extract .= "## SYNTHESE
" . trim($mm1[1]) . "
";
}
if (preg_match("/### P0(.*?)### P1/su", $content, $mm2)) {
$extract .= "### GAPS P0\n" . trim($mm2[1]) . "\n\n";
$extract .= "### GAPS P0
" . trim($mm2[1]) . "
";
}
if (preg_match("/VAGUE 1(.*?)VAGUE 2/su", $content, $mm3)) {
$extract .= "### VAGUE 1\n" . substr(trim($mm3[1]), 0, 1500) . "...\n";
$extract .= "### VAGUE 1
" . substr(trim($mm3[1]), 0, 1500) . "...
";
}
$extract = substr($extract, 0, 4000);
$kpi = @json_decode(@file_get_contents("http://127.0.0.1/api/linkedin-alignment-kpi.php"), true);
@@ -213,7 +221,11 @@ $out","tool"=>"nuclei_scan"];
$risky = $kpi["kpis"]["risky_claims"]["value"] ?? "?";
$eng = $kpi["kpis"]["engagement_rate_30d"]["value"] ?? "?";
$reach = $kpi["kpis"]["avg_reach_30d"]["value"] ?? "?";
$out = "AUDIT: $auditFile\nMD5: $md5 | LINES: $lines\nSCORE: $score/10 | risky=$risky eng=$eng% reach=$reach\n\n$extract";
$out = "AUDIT: $auditFile
MD5: $md5 | LINES: $lines
SCORE: $score/10 | risky=$risky eng=$eng% reach=$reach
$extract";
return ["provider"=>"opus46", "content"=>$out, "tool"=>"audit_linkedin"];
}
@@ -242,7 +254,187 @@ $out","tool"=>"nuclei_scan"];
$report[] = "- KPI /api/linkedin-alignment-kpi.php DEPLOYED";
$report[] = "";
$report[] = "AUDIT: /opt/weval-l99/audits/AUDIT-LINKEDIN-ARCHI-2026-04-16.md";
return ["provider"=>"opus46", "content"=>implode("\n", $report), "tool"=>"vague1_execute"];
return ["provider"=>"opus46", "content"=>implode("
", $report), "tool"=>"vague1_execute"];
}
// INTENT: generate_wave2_posts - wired 2026-04-17 (no-hallucination)
if (preg_match("/gener\w*.*(6|six)?\s*posts?\s*(v2|vague\s*2|wave\s*2|pilier|linkedin)|vague\s*2\s*posts?|wave\s*2\s*posts?|linkedin.*pilier/iu", $m)) {
// Récupère les VRAIS chiffres en direct (anti-hallucination)
$status = @json_decode(@file_get_contents("http://127.0.0.1/api/wevia-public-status.php"), true);
$agents = @json_decode(@file_get_contents("http://127.0.0.1/api/agents-full-count.php"), true);
$census = @json_decode(@file_get_contents("http://127.0.0.1/api/agents-census.php"), true);
$rt = @json_decode(@file_get_contents("http://127.0.0.1/api/realtime-status.php"), true);
$vars = [
"VERSION" => $status["version"] ?? "WEVIA v4.6",
"QUALITY" => $status["quality_score"] ?? 100,
"CHECKS" => $status["checks_passing"] ?? "304/304",
"GOALS" => $status["automation"]["strategic_goals"] ?? 9,
"PROJECTS" => $status["automation"]["active_projects"] ?? 6,
"ROUTINES" => $status["automation"]["automated_routines"] ?? 103,
"HCPS" => $status["pharma_outreach"]["hcps_validated"] ?? "132K+",
"AGENTS" => $agents["total"] ?? 5057,
"SKILLS" => $agents["skills"] ?? 4887,
"ANTIGRAVITY" => $census["antigravity_skills"] ?? 4198,
"PAPERCLIP" => $census["paperclip_roles"] ?? 191,
"OLLAMA" => $census["ollama_models"] ?? 5,
"VECTORS" => $census["qdrant_vectors"] ?? 14368,
"UP" => $rt["summary"]["up"] ?? 12,
"TOTAL_SRV" => $rt["summary"]["total"] ?? 19
];
$posts = [
[
"id" => "v2_pilier_ia_souveraine",
"account" => "corporate",
"target_week" => "S2",
"pillar" => "IA Souveraine",
"body" => "**0 €. C'est ce que coûte notre inference LLM chaque mois.**
12 fournisseurs en cascade (Cerebras, Groq, Cloudflare, SambaNova, Mistral, Cohere, HF, Together...). {OLLAMA} modèles Ollama à Casablanca. {AGENTS} agents orchestrés par {VERSION}. Concurrents paient \$50K/mois OpenAI. Nos clients : zéro CAPEX LLM.
**Démo live** → weval-consulting.com/live-status · DM pour NDA.
*{VERSION} · {CHECKS} tests · {HCPS} HCPs · 0€/mois · 🇲🇦*
*#IASouveraine #SAPVistex #CloudHuawei #MaghrebTech*"
],
[
"id" => "v2_pilier_sap_vistex",
"account" => "corporate",
"target_week" => "S2",
"pillar" => "SAP Vistex",
"body" => "**Premier partenaire Vistex du Maghreb.**
Agreement signé mars 2026. Revenue Management, Chargebacks, Rebates, Royalties. Chez pairs EU : -86% accruals rebates en un an. Au Maroc : un seul partner certifié. Nous.
**Prochaine démo USF** → DM pour invitation.
*{VERSION} · {CHECKS} tests · {HCPS} HCPs · 0€/mois · 🇲🇦*
*#IASouveraine #SAPVistex #CloudHuawei #MaghrebTech*"
],
[
"id" => "v2_pilier_hcp_souverain",
"account" => "life-science",
"target_week" => "S3",
"pillar" => "HCP Souverain",
"body" => "**{HCPS} HCPs. Hébergés au Maroc. Enrichis toutes les 6 heures. En autonomie.**
Ethica tourne 24/7. {VECTORS} vecteurs Qdrant souverain. Twenty CRM + Authentik SSO. Conforme Loi 09-08 art.12. Veeva \$400K/seat/an. Nous : stack 100% souverain.
**Démo CRM Pharma** → Calendly.
*{VERSION} · {HCPS} HCPs · {VECTORS} vecteurs · 🇲🇦 · #HCPSouverain #PharmaMaroc #Loi0908*"
],
[
"id" => "v2_pilier_cloud_huawei",
"account" => "corporate",
"target_week" => "S3",
"pillar" => "Cloud Huawei Souverain",
"body" => "**Votre data SAP ne devrait pas vivre en Irlande.**
AWS Dublin. Azure Amsterdam. Google Belgique. Huawei Maroc : Casablanca. Pour labos/banques/industriels Loi 09-08, une seule option souveraine Maghreb. WEVAL Alliance Exclusive Huawei Cloud depuis septembre 2025.
**Audit résidence data gratuit** → DM.
*{VERSION} · Alliance Huawei · 🇲🇦*
*#IASouveraine #SAPVistex #CloudHuawei #MaghrebTech*"
],
[
"id" => "v2_pilier_qualite",
"account" => "corporate",
"target_week" => "S4",
"pillar" => "Qualité & Observabilité",
"body" => "**{CHECKS} tests qualité. Score {QUALITY}/100. Services UP {UP}/{TOTAL_SRV}.**
Notre cabinet est son premier client. Sentinel S95 supervise nos endpoints 24/7. Guards de régression toutes les 10 minutes. Uptime Kuma : 2592 checks/jour. Preuve live : /live-status.
*{VERSION} · {CHECKS} · {HCPS} HCPs · 0€/mois · 🇲🇦*
*#IASouveraine #SAPVistex #CloudHuawei #MaghrebTech*"
],
[
"id" => "v2_pilier_ai_factory",
"account" => "corporate",
"target_week" => "S4",
"pillar" => "AI Factory agentique",
"body" => "**{AGENTS} agents. {SKILLS} skills. {OLLAMA} modèles locaux. 0 API payante.**
AI Factory WEVAL. 12 layers (L99 100%), {ROUTINES} routines autonomes, {ANTIGRAVITY} antigravity skills, {PAPERCLIP} paperclip roles. Stack : CrewAI + Ollama + Qdrant ({VECTORS} vecteurs) + cascade LLM souveraine.
**Whitepaper** → DM.
*{VERSION} · {CHECKS} · {AGENTS} agents · 0€/mois · 🇲🇦*
*#IASouveraine #SAPVistex #CloudHuawei #MaghrebTech*"
]
];
// Substitute placeholders
$out_dir = "/opt/weval-l99/wiki/linkedin-posts-wave2";
@mkdir($out_dir, 0755, true);
$manifest = ["generated_at" => date("c"), "source" => "audit-linkedin-archi-2026-04-16", "vars" => $vars, "posts" => []];
foreach ($posts as $p) {
$body = $p["body"];
foreach ($vars as $k => $v) $body = str_replace("{" . $k . "}", $v, $body);
$p["body_rendered"] = $body;
$manifest["posts"][] = $p;
@file_put_contents("$out_dir/" . $p["id"] . ".md", "# " . $p["pillar"] . " (" . $p["account"] . " " . $p["target_week"] . ")
" . $body);
}
@file_put_contents("$out_dir/manifest.json", json_encode($manifest, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE));
$out = "POSTS_GENERATED: " . count($posts) . " (v2 piliers)
OUTPUT: $out_dir
MANIFEST: $out_dir/manifest.json
Substitutions live vars:
";
foreach ($vars as $k => $v) $out .= " $k = $v
";
$out .= "
Fichiers:
";
foreach ($posts as $p) $out .= " - " . $p["id"] . ".md [" . $p["pillar"] . "] → " . $p["account"] . " " . $p["target_week"] . "
";
return ["provider"=>"opus46", "content"=>$out, "tool"=>"generate_wave2_posts"];
}
// INTENT: posts_v2 (Vague 2 - 6 posts piliers LinkedIn) - wired 2026-04-17
if (preg_match("/posts?\s*(v2|vague\s*2|wave\s*2|pilier|pillar)|draft.*post|montre.*post.*linkedin|vague\s*2.*post/iu", $m)) {
$dir = "/opt/weval-l99/audits/posts-v2/";
if (!is_dir($dir)) {
return ["provider"=>"opus46", "content"=>"POSTS_V2: directory not found", "tool"=>"posts_v2"];
}
$files = glob($dir . "*.md");
$list = [];
foreach ($files as $f) {
$name = basename($f);
if ($name === "00-README.md") continue;
$firstLine = trim(explode("\n", file_get_contents($f))[0]);
$list[] = "- " . $name . " :: " . substr($firstLine, 0, 80);
}
sort($list);
$out = "POSTS VAGUE 2 (DRAFT pending Yacine validation):\n";
$out .= implode("\n", $list) . "\n\n";
$out .= "Total: " . count($list) . " posts\n";
$out .= "Path: $dir\n";
$out .= "Status: indexed in Qdrant wevia_kb_768 (ids 70100-70106)\n";
$out .= "Action: review + validate + schedule publication";
return ["provider"=>"opus46", "content"=>$out, "tool"=>"posts_v2"];
}
// INTENT: show_post (retourne 1 post specifique)
if (preg_match("/show\s+post\s+(\d+)|post\s+(\d+)\s+show|voir\s+post\s+(\d+)|lis\s+post\s+(\d+)/iu", $m, $pm)) {
$num = $pm[1] ?? $pm[2] ?? $pm[3] ?? $pm[4] ?? "1";
$num = str_pad((int)$num, 2, "0", STR_PAD_LEFT);
$dir = "/opt/weval-l99/audits/posts-v2/";
$files = glob($dir . $num . "-*.md");
if (empty($files)) {
return ["provider"=>"opus46", "content"=>"POST $num: not found. Available: " . implode(",", array_map("basename", glob($dir."*.md"))), "tool"=>"show_post"];
}
$content = file_get_contents($files[0]);
return ["provider"=>"opus46", "content"=>"POST " . basename($files[0]) . ":\n\n" . $content, "tool"=>"show_post"];
}

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 400 200"><rect width="400" height="200" rx="20" fill="#0f172a"/><text x="200" y="110" text-anchor="middle" font-family="sans-serif" font-size="48" font-weight="bold" fill="#4d84ff">WEVAL</text></svg>

Before

Width:  |  Height:  |  Size: 252 B

45
linkedin-posts-wave2.php Normal file
View File

@@ -0,0 +1,45 @@
<?php
// /linkedin-posts-wave2.php — Preview wave 2 posts for validation
header("Content-Type: text/html; charset=utf-8");
$dir = "/opt/weval-l99/wiki/linkedin-posts-wave2";
$manifest = @json_decode(@file_get_contents("$dir/manifest.json"), true);
if (!$manifest) die("manifest not found");
?><!DOCTYPE html>
<html lang="fr"><head>
<meta charset="utf-8">
<title>WEVAL · LinkedIn Wave 2 Posts (preview)</title>
<script src="/widgets/audit-banner.js" defer></script>
<style>
body{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;background:#0a0a0f;color:#e8e8f0;margin:0;padding:2rem;line-height:1.6;max-width:900px;margin:0 auto}
h1{font-size:2rem;background:linear-gradient(90deg,#1B6CA8,#7EDAB5);-webkit-background-clip:text;-webkit-text-fill-color:transparent;margin-bottom:.3rem}
.meta{color:#9090a8;font-size:.85rem;margin-bottom:2rem}
.post{background:#12132a;border:1px solid #2a2b4a;border-radius:12px;padding:1.4rem;margin-bottom:1.3rem}
.post-hdr{display:flex;gap:8px;margin-bottom:.8rem;flex-wrap:wrap}
.tag{background:#1B6CA8;color:#fff;padding:3px 10px;border-radius:20px;font-size:.75rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em}
.tag.acc{background:#7EDAB5;color:#0a0a0f}
.tag.w{background:#2a2b4a;color:#e8e8f0}
.body{white-space:pre-wrap;font-family:-apple-system,sans-serif;background:#0a0a0f;padding:1rem;border-radius:8px;border-left:3px solid #7EDAB5;font-size:.95rem}
.copy{background:#7EDAB5;color:#0a0a0f;padding:6px 14px;border-radius:6px;border:0;cursor:pointer;font-weight:700;margin-top:.6rem;font-size:.85rem}
.vars{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:6px;background:#111;padding:1rem;border-radius:8px;margin-bottom:2rem;font-size:.75rem;font-family:monospace}
.vars div span{color:#7EDAB5}
</style></head><body>
<h1>LinkedIn Wave 2 · Posts Piliers</h1>
<div class="meta">Généré <?=htmlspecialchars($manifest["generated_at"])?> · Source: audit <?=htmlspecialchars($manifest["source"])?> · Posts : <?=count($manifest["posts"])?></div>
<div class="vars">
<?php foreach ($manifest["vars"] as $k => $v) echo "<div>$k = <span>" . htmlspecialchars($v) . "</span></div>"; ?>
</div>
<?php foreach ($manifest["posts"] as $i => $p): ?>
<div class="post">
<div class="post-hdr">
<span class="tag"><?=htmlspecialchars($p["pillar"])?></span>
<span class="tag acc"><?=htmlspecialchars($p["account"])?></span>
<span class="tag w"><?=htmlspecialchars($p["target_week"])?></span>
<span class="tag w"><?=htmlspecialchars($p["id"])?></span>
</div>
<div class="body" id="p<?=$i?>"><?=htmlspecialchars($p["body_rendered"])?></div>
<button class="copy" onclick="navigator.clipboard.writeText(document.getElementById('p<?=$i?>').innerText).then(()=>{this.textContent='✓ Copié'})">📋 Copier pour LinkedIn</button>
</div>
<?php endforeach; ?>
</body></html>

View File

@@ -111,6 +111,8 @@ fetch('/api/ecosystem-health.php').then(r=>r.text().then(t=>{/* HTML_GUARD_V2_BA
</a>
<div class="card wiki-item" data-tags="opus46-20260416224136"><h2 style="border:0;margin:0;padding:0">inventaire 3914 8) save vault GOLD session-archive-prep-17av</h2><div style="color:#94a3b8;font-size:10px;margin-top:6px">inventaire 3914 8) save vault GOLD session-archive-prep-17avr.gold 9) NonReg apres. Tu rapportes chaque etape avec status reel REUSSI ou ECHEC pas un plan.<br><span style="color:#06b6d4">[16/04 22:41]</span></div></div>
<div class="card wiki-item" data-tags="opus46-20260416232245"><h2 style="border:0;margin:0;padding:0">AUDIT LINKEDIN+ARCHI deploye widget banner sur 3 pages + int</h2><div style="color:#94a3b8;font-size:10px;margin-top:6px">AUDIT LINKEDIN+ARCHI deploye widget banner sur 3 pages + intents WEVIA Master wired L99 304/304<br><span style="color:#06b6d4">[16/04 23:22]</span></div></div>
<div class="card wiki-item" data-tags="opus46-20260416233748"><h2 style="border:0;margin:0;padding:0">Wave 2 posts linkedin generes 6 piliers deployes preview pag</h2><div style="color:#94a3b8;font-size:10px;margin-top:6px">Wave 2 posts linkedin generes 6 piliers deployes preview page live<br><span style="color:#06b6d4">[16/04 23:37]</span></div></div>
<div class="card wiki-item" data-tags="opus46-20260416233936"><h2 style="border:0;margin:0;padding:0">VAGUE2-2026-04-17 : 6 posts piliers LinkedIn deployes + inde</h2><div style="color:#94a3b8;font-size:10px;margin-top:6px">VAGUE2-2026-04-17 : 6 posts piliers LinkedIn deployes + indexes Qdrant 70100-70106 + intents posts_v2/show_post wired + L99 304/304<br><span style="color:#06b6d4">[16/04 23:39]</span></div></div>
</div>
<script>
(function(){