Compare commits
37 Commits
wave-203-m
...
opus-sessi
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2c6887fbac | ||
|
|
10fcacfae9 | ||
|
|
f0093d794c | ||
|
|
7d7c76f4e3 | ||
|
|
0340b97465 | ||
|
|
284dcaaf12 | ||
|
|
48d793ea5f | ||
|
|
3f8cdb2ef7 | ||
|
|
5060064915 | ||
|
|
fea12bfe2d | ||
|
|
a3812924ac | ||
|
|
511b5dcb6f | ||
|
|
a0bc39a72a | ||
|
|
e9e7432e0f | ||
|
|
ac3e7ea87a | ||
|
|
b321756af5 | ||
|
|
dc3941434d | ||
|
|
f20173cdb9 | ||
|
|
61d9db4939 | ||
|
|
c964348b63 | ||
|
|
2a09be9693 | ||
|
|
d220b73d79 | ||
|
|
27cbf333a0 | ||
|
|
1db9357827 | ||
|
|
9b19a9c38e | ||
|
|
f3fd9ba47c | ||
|
|
8e376aae26 | ||
|
|
420536a079 | ||
|
|
d5edaa769c | ||
|
|
f48750ef02 | ||
|
|
649ed5bcd3 | ||
|
|
f83e6cc27a | ||
|
|
bddae53af1 | ||
|
|
609c0ee30f | ||
|
|
89352f6fac | ||
|
|
dca26169f5 | ||
|
|
74a822544e |
1
404.html
@@ -112,5 +112,6 @@
|
||||
|
||||
<script src="/api/a11y-auto-enhancer.js" defer></script>
|
||||
<!-- WTP_UDOCK_V1 (Opus 21-avr t34final) --><script src="/wtp-unified-dock.js" defer></script>
|
||||
<script src="/opus-antioverlap-doctrine.js?v=1776776094" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -132,5 +132,6 @@ footer a:hover{color:var(--cy)}
|
||||
</div>
|
||||
<div>© 2026 WEVAL Consulting · Casablanca · Paris · Tous droits réservés</div>
|
||||
</footer>
|
||||
<script src="/opus-antioverlap-doctrine.js?v=1776776094" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -773,5 +773,6 @@ setInterval(load, 60000);
|
||||
|
||||
<script src="/api/a11y-auto-enhancer.js" defer></script>
|
||||
<!-- WTP_UDOCK_V1 (Opus 21-avr t32b4) --><script src="/wtp-unified-dock.js" defer></script>
|
||||
<script src="/opus-antioverlap-doctrine.js?v=1776776094" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -398,5 +398,6 @@ setTimeout(tick,1500);setInterval(tick,30000);
|
||||
|
||||
<script src="/api/a11y-auto-enhancer.js" defer></script>
|
||||
<!-- WTP_UDOCK_V1 (Opus 21-avr t33b5) --><script src="/wtp-unified-dock.js" defer></script>
|
||||
<script src="/opus-antioverlap-doctrine.js?v=1776776094" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -397,5 +397,6 @@ setTimeout(tick,1500);setInterval(tick,30000);
|
||||
|
||||
<script src="/api/a11y-auto-enhancer.js" defer></script>
|
||||
<!-- WTP_UDOCK_V1 (Opus 21-avr t33b5) --><script src="/wtp-unified-dock.js" defer></script>
|
||||
<script src="/opus-antioverlap-doctrine.js?v=1776776094" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -954,4 +954,5 @@ renderAlerts();
|
||||
|
||||
<script src="/api/a11y-auto-enhancer.js" defer></script>
|
||||
<!-- WTP_UDOCK_V1 (Opus 21-avr t32b4) --><script src="/wtp-unified-dock.js" defer></script>
|
||||
<script src="/opus-antioverlap-doctrine.js?v=1776776094" defer></script>
|
||||
</body></html>
|
||||
|
||||
@@ -611,5 +611,6 @@ load();
|
||||
|
||||
<script src="/api/a11y-auto-enhancer.js" defer></script>
|
||||
<!-- WTP_UDOCK_V1 (Opus 21-avr t32b4) --><script src="/wtp-unified-dock.js" defer></script>
|
||||
<script src="/opus-antioverlap-doctrine.js?v=1776776094" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -519,5 +519,6 @@ requestAnimationFrame(loop);
|
||||
|
||||
<script src="/api/a11y-auto-enhancer.js" defer></script>
|
||||
<!-- WTP_UDOCK_V1 (Opus 21-avr t33b5) --><script src="/wtp-unified-dock.js" defer></script>
|
||||
<script src="/opus-antioverlap-doctrine.js?v=1776776094" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -430,5 +430,6 @@ requestAnimationFrame(frame);
|
||||
|
||||
<script src="/api/a11y-auto-enhancer.js" defer></script>
|
||||
<!-- WTP_UDOCK_V1 (Opus 21-avr t33b6) --><script src="/wtp-unified-dock.js" defer></script>
|
||||
<script src="/opus-antioverlap-doctrine.js?v=1776776094" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -1507,5 +1507,6 @@ window.addEventListener('resize',function(){cam.aspect=innerWidth/innerHeight;ca
|
||||
|
||||
<script src="/api/a11y-auto-enhancer.js" defer></script>
|
||||
<!-- WTP_UDOCK_V1 (Opus 21-avr tour29) --><script src="/wtp-unified-dock.js" defer></script>
|
||||
<script src="/opus-antioverlap-doctrine.js?v=1776776094" defer></script>
|
||||
</body></html>
|
||||
|
||||
|
||||
@@ -344,5 +344,6 @@ requestAnimationFrame(loop);
|
||||
|
||||
<script src="/api/a11y-auto-enhancer.js" defer></script>
|
||||
<!-- WTP_UDOCK_V1 (Opus 21-avr t33b5) --><script src="/wtp-unified-dock.js" defer></script>
|
||||
<script src="/opus-antioverlap-doctrine.js?v=1776776094" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -408,5 +408,6 @@ setInterval(load, 30000);
|
||||
|
||||
<script src="/api/a11y-auto-enhancer.js" defer></script>
|
||||
<!-- WTP_UDOCK_V1 (Opus 21-avr t34final) --><script src="/wtp-unified-dock.js" defer></script>
|
||||
<script src="/opus-antioverlap-doctrine.js?v=1776776094" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -907,4 +907,5 @@ requestAnimationFrame(loop);
|
||||
|
||||
<script src="/api/a11y-auto-enhancer.js" defer></script>
|
||||
<!-- WTP_UDOCK_V1 (Opus 21-avr tour30) --><script src="/wtp-unified-dock.js" defer></script>
|
||||
<script src="/opus-antioverlap-doctrine.js?v=1776776094" defer></script>
|
||||
</body></html>
|
||||
|
||||
@@ -488,5 +488,6 @@ requestAnimationFrame(loop);
|
||||
|
||||
<script src="/api/a11y-auto-enhancer.js" defer></script>
|
||||
<!-- WTP_UDOCK_V1 (Opus 21-avr t33b6) --><script src="/wtp-unified-dock.js" defer></script>
|
||||
<script src="/opus-antioverlap-doctrine.js?v=1776776094" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -344,5 +344,6 @@ requestAnimationFrame(loop);
|
||||
|
||||
<script src="/api/a11y-auto-enhancer.js" defer></script>
|
||||
<!-- WTP_UDOCK_V1 (Opus 21-avr t33b5) --><script src="/wtp-unified-dock.js" defer></script>
|
||||
<script src="/opus-antioverlap-doctrine.js?v=1776776094" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -152,4 +152,5 @@
|
||||
|
||||
<script src="/api/a11y-auto-enhancer.js" defer></script>
|
||||
<!-- WTP_UDOCK_V1 (Opus 21-avr t34final) --><script src="/wtp-unified-dock.js" defer></script>
|
||||
<script src="/opus-antioverlap-doctrine.js?v=1776776094" defer></script>
|
||||
</body></html>
|
||||
@@ -393,4 +393,5 @@ setInterval(loadMetrics,30000);
|
||||
|
||||
<script src="/api/a11y-auto-enhancer.js" defer></script>
|
||||
<!-- WTP_UDOCK_V1 (Opus 21-avr t33b5) --><script src="/wtp-unified-dock.js" defer></script>
|
||||
<script src="/opus-antioverlap-doctrine.js?v=1776776094" defer></script>
|
||||
</body></html>
|
||||
|
||||
@@ -458,5 +458,6 @@ requestAnimationFrame(loop);
|
||||
|
||||
<script src="/api/a11y-auto-enhancer.js" defer></script>
|
||||
<!-- WTP_UDOCK_V1 (Opus 21-avr t33b5) --><script src="/wtp-unified-dock.js" defer></script>
|
||||
<script src="/opus-antioverlap-doctrine.js?v=1776776094" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -137,4 +137,5 @@ td{padding:10px 8px;border-bottom:1px solid #1e293b;color:#cbd5e1}
|
||||
|
||||
<script src="/api/a11y-auto-enhancer.js" defer></script>
|
||||
<!-- WTP_UDOCK_V1 (Opus 21-avr t34final) --><script src="/wtp-unified-dock.js" defer></script>
|
||||
<script src="/opus-antioverlap-doctrine.js?v=1776776094" defer></script>
|
||||
</body></html>
|
||||
@@ -505,5 +505,6 @@ render();
|
||||
|
||||
<script src="/api/a11y-auto-enhancer.js" defer></script>
|
||||
<!-- WTP_UDOCK_V1 (Opus 21-avr t33b5) --><script src="/wtp-unified-dock.js" defer></script>
|
||||
<script src="/opus-antioverlap-doctrine.js?v=1776776094" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -207,5 +207,6 @@ load();
|
||||
|
||||
<script src="/api/a11y-auto-enhancer.js" defer></script>
|
||||
<!-- WTP_UDOCK_V1 (Opus 21-avr t33b6) --><script src="/wtp-unified-dock.js" defer></script>
|
||||
<script src="/opus-antioverlap-doctrine.js?v=1776776094" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -179,4 +179,5 @@ h2{padding:12px 40px 0;font-size:15px;color:#0ea5e9;text-transform:uppercase;let
|
||||
|
||||
<script src="/api/a11y-auto-enhancer.js" defer></script>
|
||||
<!-- WTP_UDOCK_V1 (Opus 21-avr t33b6) --><script src="/wtp-unified-dock.js" defer></script>
|
||||
<script src="/opus-antioverlap-doctrine.js?v=1776776094" defer></script>
|
||||
</body></html>
|
||||
@@ -1323,6 +1323,6 @@ setInterval(refreshStats,60000);
|
||||
<span id="v142-ollama"></span>
|
||||
<span style="margin-left:auto;color:#00d4b4;font-size:9px"><a href="/wevia-unified-hub.html" style="color:inherit;text-decoration:none" title="Truth Hub">Truth →</a></span>
|
||||
</div>
|
||||
<script>(function(){var p=window.location.pathname;var pub=["/","/index.html","/wevia.html","/wevia-widget.html","/enterprise-model.html","/wevia","/login","/register.html","/agents-archi.html","/wevia-meeting-rooms.html","/director-center.html","/director-chat.html","/l99-brain.html","/agents-fleet.html","/value-streaming.html","/architecture.html","/openclaw.html","/l99-saas.html","/admin-saas.html","/agents-goodjob.html","/ai-benchmark.html","/oss-discovery.html","/paperclip.html","/agents-3d.html","/agents-alive.html","/agents-enterprise.html","/agents-hd.html","/agents-iso3d.html","/agents-sim.html","/agents-valuechain.html","/avatar-picker.html"];var isPub=pub.indexOf(p)>=0||p.indexOf("/products/")===0||p.indexOf("/solutions/")===0||p.indexOf("/blog/")===0||p.indexOf("/service/")===0||p.indexOf("/marketplace")===0||p.indexOf("/contact")===0||p.indexOf("/tarifs")===0||p.indexOf("/news")===0;if(isPub||document.getElementById("weval-gl"))return;var a=document.createElement("a");a.id="weval-gl";a.href="/logout";a.textContent="Logout";a.style.cssText="position:fixed;top:10px;right:12px;z-index:99990;padding:5px 10px;background:rgba(30,30,50,0.7);color:rgba(200,210,230,0.8);border:1px solid rgba(100,100,140,0.3);border-radius:6px;font:500 11px system-ui,sans-serif;text-decoration:none;opacity:0.6;cursor:pointer;backdrop-filter:blur(6px);transition:all .15s";a.onmouseover=function(){this.style.opacity="1";this.style.background="rgba(239,68,68,0.85)";this.style.color="white"};a.onmouseout=function(){this.style.opacity="0.6";this.style.background="rgba(30,30,50,0.7)";this.style.color="rgba(200,210,230,0.8)"};document.body.appendChild(a)})()</script><script src="/opus-antioverlap-doctrine.js?v=1776774935" defer></script>
|
||||
<script>(function(){var p=window.location.pathname;var pub=["/","/index.html","/wevia.html","/wevia-widget.html","/enterprise-model.html","/wevia","/login","/register.html","/agents-archi.html","/wevia-meeting-rooms.html","/director-center.html","/director-chat.html","/l99-brain.html","/agents-fleet.html","/value-streaming.html","/architecture.html","/openclaw.html","/l99-saas.html","/admin-saas.html","/agents-goodjob.html","/ai-benchmark.html","/oss-discovery.html","/paperclip.html","/agents-3d.html","/agents-alive.html","/agents-enterprise.html","/agents-hd.html","/agents-iso3d.html","/agents-sim.html","/agents-valuechain.html","/avatar-picker.html"];var isPub=pub.indexOf(p)>=0||p.indexOf("/products/")===0||p.indexOf("/solutions/")===0||p.indexOf("/blog/")===0||p.indexOf("/service/")===0||p.indexOf("/marketplace")===0||p.indexOf("/contact")===0||p.indexOf("/tarifs")===0||p.indexOf("/news")===0;if(isPub||document.getElementById("weval-gl"))return;var a=document.createElement("a");a.id="weval-gl";a.href="/logout";a.textContent="Logout";a.style.cssText="position:fixed;top:10px;right:12px;z-index:99990;padding:5px 10px;background:rgba(30,30,50,0.7);color:rgba(200,210,230,0.8);border:1px solid rgba(100,100,140,0.3);border-radius:6px;font:500 11px system-ui,sans-serif;text-decoration:none;opacity:0.6;cursor:pointer;backdrop-filter:blur(6px);transition:all .15s";a.onmouseover=function(){this.style.opacity="1";this.style.background="rgba(239,68,68,0.85)";this.style.color="white"};a.onmouseout=function(){this.style.opacity="0.6";this.style.background="rgba(30,30,50,0.7)";this.style.color="rgba(200,210,230,0.8)"};document.body.appendChild(a)})()</script><script src="/opus-antioverlap-doctrine.js?v=1776776094" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -112,4 +112,5 @@ p.sub{color:#64748b;margin-bottom:32px;font-size:14px}
|
||||
|
||||
<script src="/api/a11y-auto-enhancer.js" defer></script>
|
||||
<!-- WTP_UDOCK_V1 (Opus 21-avr t34final) --><script src="/wtp-unified-dock.js" defer></script>
|
||||
<script src="/opus-antioverlap-doctrine.js?v=1776776094" defer></script>
|
||||
</body></html>
|
||||
|
||||
@@ -249,5 +249,6 @@ loadStatus();
|
||||
|
||||
<script src="/api/a11y-auto-enhancer.js" defer></script>
|
||||
<!-- WTP_UDOCK_V1 (Opus 21-avr t31b3) --><script src="/wtp-unified-dock.js" defer></script>
|
||||
<script src="/opus-antioverlap-doctrine.js?v=1776776094" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"agent": "V41_Disk_Monitor",
|
||||
"ts": "2026-04-21T14:30:02+02:00",
|
||||
"ts": "2026-04-21T15:30:02+02:00",
|
||||
"disk_pct": 82,
|
||||
"disk_free_gb": 27,
|
||||
"growth_per_day_gb": 1.5,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"agent": "V41_Risk_Escalation",
|
||||
"ts": "2026-04-21T14:30:03+02:00",
|
||||
"ts": "2026-04-21T15:30:03+02:00",
|
||||
"dg_alerts_active": 7,
|
||||
"wevia_life_stats_preview": "{
|
||||
"ok": true,
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"agent": "V41_Feature_Adoption_Tracker",
|
||||
"ts": "2026-04-21T14:00:02+02:00",
|
||||
"ts": "2026-04-21T15:00:02+02:00",
|
||||
"features_tracked": 15,
|
||||
"features_used_24h": 10,
|
||||
"adoption_pct": 66,
|
||||
"chat_queries_last_1k_log": 82,
|
||||
"wtp_views_last_1k_log": 0,
|
||||
"dg_views_last_1k_log": 0,
|
||||
"features_used_24h": 12,
|
||||
"adoption_pct": 80,
|
||||
"chat_queries_last_1k_log": 2,
|
||||
"wtp_views_last_1k_log": 27,
|
||||
"dg_views_last_1k_log": 2,
|
||||
"skill_runs_last_1k_log": 0,
|
||||
"recommendation": "UX onboarding tour for unused features",
|
||||
"cron_schedule": "hourly",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"agent": "V45_Leads_Sync",
|
||||
"ts": "2026-04-21T14:30:03+02:00",
|
||||
"ts": "2026-04-21T15:40:02+02:00",
|
||||
"paperclip_total": 48,
|
||||
"active_customer": 4,
|
||||
"warm_prospect": 5,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"agent": "V41_MQL_Scoring",
|
||||
"ts": "2026-04-21T14:00:03+02:00",
|
||||
"ts": "2026-04-21T15:00:03+02:00",
|
||||
"leads_total": 48,
|
||||
"mql_current": 16,
|
||||
"sql_current": 6,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"agent": "V54_Risk_Monitor_Live",
|
||||
"ts": "2026-04-21T14:30:03+02:00",
|
||||
"ts": "2026-04-21T15:30:03+02:00",
|
||||
"critical_risks": {
|
||||
"RW01_pipeline_vide": {
|
||||
"pipeline_keur": 0,
|
||||
@@ -22,7 +22,7 @@
|
||||
},
|
||||
"RW12_burnout": {
|
||||
"agents_cron_active": 15,
|
||||
"load_5min": "5.22",
|
||||
"load_5min": "3.41",
|
||||
"automation_coverage_pct": 70,
|
||||
"residual_risk_pct": 60,
|
||||
"trend": "V52_goldratt_options_active"
|
||||
|
||||
14
api/ambre-adg-diag.php
Normal file
@@ -0,0 +1,14 @@
|
||||
<?php
|
||||
header("Content-Type: application/json");
|
||||
$f = "/var/www/html/api/ambre-early-doc-gen.php";
|
||||
$out = ["size"=>@filesize($f)];
|
||||
$lint = @shell_exec("php8.4 -l $f 2>&1");
|
||||
$out["lint"] = trim($lint);
|
||||
// Try to eval the file with mock $_mam set
|
||||
$_mam = "Genere un PDF sur: test";
|
||||
ob_start();
|
||||
$rr = @include $f;
|
||||
$out["include_ok"] = $rr !== false;
|
||||
$out["stray_output"] = ob_get_clean();
|
||||
// If exited, ob would have file_gen response. Otherwise, fall through
|
||||
echo json_encode($out);
|
||||
88
api/ambre-doc-gen.php
Normal file
@@ -0,0 +1,88 @@
|
||||
<?php
|
||||
/**
|
||||
* ambre-doc-gen.php · AMBRE · real file generation via pandoc
|
||||
* Usage: POST {type: pdf|docx|pptx|html, title: "...", content: "markdown..."}
|
||||
* Output: {ok:true, url:"/generated/xxx.ext", size:B, type:..., ts:...}
|
||||
* Doctrine: zero fake (réelle génération), zero écrasement (unique timestamp per file)
|
||||
*/
|
||||
header("Content-Type: application/json");
|
||||
|
||||
// === Input parsing ===
|
||||
$raw = file_get_contents("php://input");
|
||||
$in = json_decode($raw, true);
|
||||
if (!$in && !empty($_POST)) $in = $_POST;
|
||||
|
||||
$type = strtolower(trim($in["type"] ?? "pdf"));
|
||||
$title = trim($in["title"] ?? "Document WEVIA");
|
||||
$content = $in["content"] ?? "";
|
||||
|
||||
if (!$content) {
|
||||
http_response_code(400);
|
||||
echo json_encode(["ok"=>false, "error"=>"content required"]);
|
||||
exit;
|
||||
}
|
||||
|
||||
// === Type validation ===
|
||||
$allowed = ["pdf","docx","pptx","html","odt","epub"];
|
||||
if (!in_array($type, $allowed)) {
|
||||
http_response_code(400);
|
||||
echo json_encode(["ok"=>false, "error"=>"invalid type", "allowed"=>$allowed]);
|
||||
exit;
|
||||
}
|
||||
|
||||
// === Prepare output dir ===
|
||||
$outdir = "/var/www/html/generated";
|
||||
if (!is_dir($outdir)) @mkdir($outdir, 0755, true);
|
||||
|
||||
$ts = date("Ymd-His");
|
||||
$rand = substr(md5(random_bytes(8)), 0, 6);
|
||||
$safe_title = preg_replace("/[^a-zA-Z0-9\-_]/", "-", substr($title, 0, 40));
|
||||
$basename = "wevia-{$safe_title}-{$ts}-{$rand}";
|
||||
$md_path = "$outdir/$basename.md";
|
||||
$out_path = "$outdir/$basename.$type";
|
||||
|
||||
// === Write markdown input ===
|
||||
$md_content = "# $title\n\n" . $content;
|
||||
file_put_contents($md_path, $md_content);
|
||||
|
||||
// === Generate via pandoc ===
|
||||
$start = microtime(true);
|
||||
if ($type === "pdf") {
|
||||
// Use wkhtmltopdf via pandoc for better rendering
|
||||
$cmd = "pandoc " . escapeshellarg($md_path) . " --pdf-engine=wkhtmltopdf -o " . escapeshellarg($out_path) . " 2>&1";
|
||||
} else if ($type === "pptx" || $type === "docx" || $type === "odt" || $type === "html" || $type === "epub") {
|
||||
$cmd = "pandoc " . escapeshellarg($md_path) . " -o " . escapeshellarg($out_path) . " 2>&1";
|
||||
}
|
||||
$cmd_output = @shell_exec("timeout 30 $cmd");
|
||||
$elapsed = round((microtime(true) - $start) * 1000);
|
||||
|
||||
// === Check result ===
|
||||
if (!file_exists($out_path) || filesize($out_path) === 0) {
|
||||
@unlink($md_path);
|
||||
echo json_encode([
|
||||
"ok" => false,
|
||||
"error" => "pandoc failed",
|
||||
"pandoc_output" => $cmd_output,
|
||||
"cmd" => $cmd,
|
||||
"elapsed_ms" => $elapsed,
|
||||
]);
|
||||
exit;
|
||||
}
|
||||
|
||||
$size = filesize($out_path);
|
||||
$url = "/generated/$basename.$type";
|
||||
|
||||
// Keep md source for provenance
|
||||
echo json_encode([
|
||||
"ok" => true,
|
||||
"url" => $url,
|
||||
"full_url" => "https://weval-consulting.com$url",
|
||||
"size" => $size,
|
||||
"size_human" => $size > 1024 ? round($size/1024, 1) . "KB" : "$size B",
|
||||
"type" => $type,
|
||||
"title" => $title,
|
||||
"elapsed_ms" => $elapsed,
|
||||
"md_source" => "/generated/$basename.md",
|
||||
"ts" => date("c"),
|
||||
"engine" => $type === "pdf" ? "pandoc+wkhtmltopdf" : "pandoc",
|
||||
], JSON_PRETTY_PRINT|JSON_UNESCAPED_SLASHES);
|
||||
80
api/ambre-early-doc-gen.php
Normal file
@@ -0,0 +1,80 @@
|
||||
<?php
|
||||
/**
|
||||
* ambre-early-doc-gen.php · AMBRE v3 · priority intercept PDF/DOCX/PPTX + Mermaid + Excel
|
||||
* Reads POST body directly · intercepts BEFORE master-api main flow.
|
||||
*/
|
||||
|
||||
static $__ad_already = false;
|
||||
if ($__ad_already) return;
|
||||
$__ad_already = true;
|
||||
|
||||
$__ad_raw = @file_get_contents("php://input");
|
||||
if (!$__ad_raw) return;
|
||||
$__ad_body = @json_decode($__ad_raw, true);
|
||||
$__ad_msg_in = $__ad_body["message"] ?? "";
|
||||
if (!$__ad_msg_in) return;
|
||||
|
||||
$__ad_msg = trim($__ad_msg_in);
|
||||
|
||||
// ===== HANDLER 1: File generation PDF/DOCX/PPTX/XLSX =====
|
||||
if (preg_match("/g[eéèê]n[eéèê]re?\s+(?:un|une|des|le|la)?\s*(pdf|pptx?|powerpoint|docx?|word|excel|xlsx?|pr[eé]sentation|presentation|document|tableau)[^:]*(?::|sur)\s*(.+)$/iu", $__ad_msg, $__ad_m)) {
|
||||
$__raw_type = mb_strtolower($__ad_m[1]);
|
||||
$__topic = trim($__ad_m[2]);
|
||||
$__type_map = [
|
||||
"pdf"=>"pdf","pptx"=>"pptx","ppt"=>"pptx","powerpoint"=>"pptx",
|
||||
"presentation"=>"pptx","présentation"=>"pptx",
|
||||
"docx"=>"docx","doc"=>"docx","word"=>"docx","document"=>"docx",
|
||||
"xlsx"=>"xlsx","excel"=>"xlsx","tableau"=>"xlsx",
|
||||
];
|
||||
$__type = $__type_map[$__raw_type] ?? "pdf";
|
||||
$__pandoc_type = ($__type === "xlsx") ? "docx" : $__type;
|
||||
|
||||
$__url = "http://127.0.0.1/api/ambre-gen-pipeline.php?type=" . urlencode($__pandoc_type) . "&topic=" . urlencode($__topic);
|
||||
$__ctx = stream_context_create(["http"=>["timeout"=>75,"method"=>"GET","header"=>"Host: weval-consulting.com\r\n"]]);
|
||||
$__out = @file_get_contents($__url, false, $__ctx);
|
||||
|
||||
if ($__out && strlen($__out) > 50) {
|
||||
header("Content-Type: application/json; charset=utf-8");
|
||||
echo json_encode([
|
||||
"response"=>$__out,"executed"=>true,"provider"=>"ambre-doc-gen-v3",
|
||||
"intent"=>"file_generation_real","type"=>$__type,"topic"=>$__topic,
|
||||
], JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES);
|
||||
exit;
|
||||
}
|
||||
}
|
||||
|
||||
// ===== HANDLER 2: Mermaid schema with VALID syntax =====
|
||||
if (preg_match("/g[eéèê]n[eéèê]re?.*(sch[eé]ma|mermaid|diagramme|flowchart).*(?::|pour|sur)\s*(.+)$/iu", $__ad_msg, $__mm)) {
|
||||
$__topic = trim($__mm[2]);
|
||||
// Strict system prompt forcing valid mermaid syntax
|
||||
$__sys = "Tu es un générateur de diagrammes Mermaid. Réponds UNIQUEMENT avec du code mermaid valide, pas de markdown, pas de backticks, pas de commentaire. Commence obligatoirement par \"flowchart TD\" ou \"graph TD\". Syntaxe : A[Label] --> B[Label]. JAMAIS de caractères spéciaux hors A-Z 0-9 espaces. MAX 12 nodes.";
|
||||
$__user = "Génère un flowchart mermaid simple et VALIDE pour: $__topic";
|
||||
|
||||
$__llm = @file_get_contents("http://127.0.0.1:4000/v1/chat/completions", false, stream_context_create([
|
||||
"http"=>["method"=>"POST","header"=>"Content-Type: application/json\r\n",
|
||||
"content"=>json_encode(["model"=>"fast","messages"=>[
|
||||
["role"=>"system","content"=>$__sys],
|
||||
["role"=>"user","content"=>$__user],
|
||||
],"max_tokens"=>400,"temperature"=>0.1]),
|
||||
"timeout"=>20]
|
||||
]));
|
||||
$__llmd = @json_decode($__llm,true);
|
||||
$__mmd = $__llmd["choices"][0]["message"]["content"] ?? "";
|
||||
// Strip markdown backticks if present
|
||||
$__mmd = preg_replace("/```(?:mermaid)?\n?|```/","",$__mmd);
|
||||
$__mmd = trim($__mmd);
|
||||
// Validate basics
|
||||
if (!preg_match("/^(flowchart|graph|sequenceDiagram|classDiagram|stateDiagram)/i", $__mmd)) {
|
||||
$__mmd = "flowchart TD\n" . $__mmd;
|
||||
}
|
||||
|
||||
header("Content-Type: application/json; charset=utf-8");
|
||||
echo json_encode([
|
||||
"response"=>"🧩 Schéma Mermaid pour: $__topic\n\n".chr(96).chr(96).chr(96)."mermaid\n$__mmd\n".chr(96).chr(96).chr(96),
|
||||
"executed"=>true,"provider"=>"ambre-doc-gen-v3","intent"=>"mermaid_valid",
|
||||
"topic"=>$__topic,
|
||||
], JSON_UNESCAPED_UNICODE);
|
||||
exit;
|
||||
}
|
||||
|
||||
// fall through to main flow
|
||||
80
api/ambre-gen-pipeline.php
Normal file
@@ -0,0 +1,80 @@
|
||||
<?php
|
||||
/**
|
||||
* ambre-gen-pipeline.php · AMBRE · pipeline complet chat → LLM markdown → pandoc file
|
||||
* Usage: GET ?type=pdf|docx|pptx&topic=... (from chat intent cmd)
|
||||
* Output: text response with file URL embedded
|
||||
*/
|
||||
header("Content-Type: text/plain; charset=utf-8");
|
||||
|
||||
$type = strtolower(trim($_GET["type"] ?? "pdf"));
|
||||
$topic = trim($_GET["topic"] ?? "");
|
||||
|
||||
if (!$topic) { echo "❌ topic required"; exit; }
|
||||
$allowed = ["pdf","docx","pptx","html","epub"];
|
||||
if (!in_array($type, $allowed)) { echo "❌ type invalide, allowed: " . implode("|", $allowed); exit; }
|
||||
|
||||
// === 1. Call LLM to generate clean markdown ===
|
||||
$sys_prompt = "Tu es un generateur de contenu professionnel. Réponds UNIQUEMENT en markdown pur, pas de preambule, pas de meta-commentaire. Pour les PPTX, utilise # pour chaque slide title. Français par défaut.";
|
||||
|
||||
$user_prompt = match($type) {
|
||||
"pdf" => "Génère un document PDF professionnel, structuré, complet (2-3 pages) sur: $topic. Titres, sections, bullets.",
|
||||
"docx" => "Génère un document Word professionnel, structuré sur: $topic. Titres, sections, tableaux si pertinent.",
|
||||
"pptx" => "Génère une présentation de 5-7 slides sur: $topic. Chaque slide commence par # (titre slide). Bullets concises.",
|
||||
"html" => "Génère un document HTML propre sur: $topic.",
|
||||
default => "Génère un document sur: $topic.",
|
||||
};
|
||||
|
||||
$llm_raw = @file_get_contents("http://127.0.0.1:4000/v1/chat/completions", false, stream_context_create([
|
||||
"http" => [
|
||||
"method" => "POST",
|
||||
"header" => "Content-Type: application/json\r\n",
|
||||
"content" => json_encode([
|
||||
"model" => "fast",
|
||||
"messages" => [
|
||||
["role"=>"system", "content"=>$sys_prompt],
|
||||
["role"=>"user", "content"=>$user_prompt],
|
||||
],
|
||||
"max_tokens" => 2500,
|
||||
"temperature" => 0.5,
|
||||
"stream" => false,
|
||||
]),
|
||||
"timeout" => 30,
|
||||
],
|
||||
]));
|
||||
|
||||
$llm_d = @json_decode($llm_raw, true);
|
||||
$md_content = $llm_d["choices"][0]["message"]["content"] ?? "";
|
||||
|
||||
if (!$md_content) { echo "❌ LLM failed to generate content"; exit; }
|
||||
|
||||
// === 2. Call ambre-doc-gen to create the file ===
|
||||
$title = substr($topic, 0, 60);
|
||||
$gen_ctx = stream_context_create([
|
||||
"http" => [
|
||||
"method" => "POST",
|
||||
"header" => "Content-Type: application/json\r\n",
|
||||
"content" => json_encode([
|
||||
"type" => $type,
|
||||
"title" => $title,
|
||||
"content" => $md_content,
|
||||
]),
|
||||
"timeout" => 45,
|
||||
],
|
||||
]);
|
||||
$gen_raw = @file_get_contents("http://127.0.0.1/api/ambre-doc-gen.php", false, $gen_ctx);
|
||||
$gen_d = @json_decode($gen_raw, true);
|
||||
|
||||
if (!$gen_d || empty($gen_d["ok"])) {
|
||||
echo "❌ Generation failed: " . ($gen_d["error"] ?? "unknown") . "\n";
|
||||
echo "MD content was: " . substr($md_content, 0, 200);
|
||||
exit;
|
||||
}
|
||||
|
||||
// === 3. Output rich response ===
|
||||
$icon = match($type) { "pdf"=>"📄", "docx"=>"📝", "pptx"=>"🎯", "html"=>"🌐", default=>"📎" };
|
||||
echo "$icon **$title** généré\n\n";
|
||||
echo "🔗 Télécharger: " . $gen_d["full_url"] . "\n";
|
||||
echo "📦 Taille: " . $gen_d["size_human"] . " · ⚙️ " . $gen_d["elapsed_ms"] . "ms · engine: " . $gen_d["engine"] . "\n\n";
|
||||
echo "---\n\nAperçu contenu:\n\n";
|
||||
echo substr($md_content, 0, 800);
|
||||
if (strlen($md_content) > 800) echo "\n\n... [document complet dans le fichier]";
|
||||
45
api/ambre-libs-check.php
Normal file
@@ -0,0 +1,45 @@
|
||||
<?php
|
||||
/**
|
||||
* ambre-libs-check.php · REAL shell check des libs disponibles pour file generation
|
||||
*/
|
||||
header("Content-Type: application/json");
|
||||
$out = ["ok"=>true, "ts"=>date("c"), "s204"=>[]];
|
||||
|
||||
// Shell binary checks
|
||||
foreach (["pandoc","wkhtmltopdf","libreoffice","soffice","unoconv","markdown","gs"] as $cmd) {
|
||||
$p = @trim(shell_exec("which $cmd 2>/dev/null"));
|
||||
$out["s204"]["bin_$cmd"] = $p ?: "NOT FOUND";
|
||||
}
|
||||
|
||||
// Composer autoload paths (commonly in /var/www/html/vendor or /opt/wevia-brain/vendor)
|
||||
foreach (["/var/www/html/vendor/autoload.php","/opt/wevia-brain/vendor/autoload.php","/var/www/weval/vendor/autoload.php","/opt/weval-l99/vendor/autoload.php"] as $autoload) {
|
||||
if (file_exists($autoload)) {
|
||||
$out["s204"]["composer_$autoload"] = "EXISTS";
|
||||
}
|
||||
}
|
||||
|
||||
// Scan vendor folder for specific packages
|
||||
foreach (["/var/www/html/vendor","/opt/wevia-brain/vendor","/var/www/weval/vendor"] as $vendor_dir) {
|
||||
if (is_dir($vendor_dir)) {
|
||||
foreach (["dompdf","phpoffice","mpdf","tcpdf","phpspreadsheet","phppresentation","phpword"] as $pkg) {
|
||||
$found = @shell_exec("find $vendor_dir -maxdepth 3 -type d -iname "*$pkg*" 2>/dev/null | head -3");
|
||||
if (trim($found)) $out["s204"]["pkg_$pkg"] = trim($found);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// PHP extensions
|
||||
$ext_list = get_loaded_extensions();
|
||||
foreach (["gd","imagick","zip","mbstring","xml","curl","openssl"] as $ext) {
|
||||
$out["s204"]["ext_$ext"] = in_array($ext, $ext_list) ? "YES" : "NO";
|
||||
}
|
||||
|
||||
// Check /var/www/html/generated directory
|
||||
$out["s204"]["generated_dir"] = is_dir("/var/www/html/generated") ? "EXISTS" : "MISSING";
|
||||
if (is_dir("/var/www/html/generated")) {
|
||||
$files = glob("/var/www/html/generated/*");
|
||||
$out["s204"]["generated_count"] = count($files);
|
||||
$out["s204"]["generated_sample"] = array_slice(array_map("basename", $files), 0, 5);
|
||||
}
|
||||
|
||||
echo json_encode($out, JSON_PRETTY_PRINT);
|
||||
33
api/ambre-list-stubs.php
Normal file
@@ -0,0 +1,33 @@
|
||||
<?php
|
||||
/**
|
||||
* ambre-list-stubs.php · listing wired-pending stubs related to capabilities
|
||||
*/
|
||||
header("Content-Type: application/json");
|
||||
$dir = "/var/www/html/api/wired-pending";
|
||||
$files = glob("$dir/intent-opus4-*.php") ?: [];
|
||||
$kw = $_GET["kw"] ?? "";
|
||||
$out = ["count"=>count($files), "matches"=>[]];
|
||||
foreach ($files as $f) {
|
||||
$name = basename($f, ".php");
|
||||
$short = str_replace("intent-opus4-", "", $name);
|
||||
if ($kw && stripos($short, $kw) === false) continue;
|
||||
// Read metadata if array stub
|
||||
ob_start();
|
||||
$info = @include $f;
|
||||
@ob_end_clean();
|
||||
$meta = [
|
||||
"name" => $short,
|
||||
"size" => filesize($f),
|
||||
"mtime" => gmdate("c", filemtime($f)),
|
||||
];
|
||||
if (is_array($info)) {
|
||||
$meta["triggers"] = $info["triggers"] ?? [];
|
||||
$meta["status"] = $info["status"] ?? "?";
|
||||
$meta["cmd"] = $info["cmd"] ?? "?";
|
||||
} else {
|
||||
$meta["type"] = "direct-exec";
|
||||
}
|
||||
$out["matches"][] = $meta;
|
||||
}
|
||||
$out["matches_count"] = count($out["matches"]);
|
||||
echo json_encode($out, JSON_PRETTY_PRINT|JSON_UNESCAPED_SLASHES);
|
||||
30
api/ambre-logo-finder.php
Normal file
@@ -0,0 +1,30 @@
|
||||
<?php
|
||||
header("Content-Type: application/json");
|
||||
$out = [];
|
||||
$targets = [
|
||||
"/var/www/html/solution",
|
||||
"/var/www/html/solutions",
|
||||
"/var/www/html/assets",
|
||||
"/var/www/html/wevia-ia",
|
||||
"/var/www/html/img",
|
||||
"/var/www/html/images",
|
||||
"/var/www/html/static",
|
||||
"/var/www/html",
|
||||
];
|
||||
foreach ($targets as $t) {
|
||||
if (!is_dir($t)) { $out[$t] = "MISSING"; continue; }
|
||||
$logos = @glob("$t/*logo*wevia*") ?: [];
|
||||
$logos = array_merge($logos, @glob("$t/*wevia*logo*") ?: []);
|
||||
$logos = array_merge($logos, @glob("$t/logo-wevia*") ?: []);
|
||||
$logos = array_merge($logos, @glob("$t/wevia-logo*") ?: []);
|
||||
// Also direct files
|
||||
foreach (["logo.svg","logo.png","wevia.svg","wevia.png","logo-wevia.svg","logo-wevia.png"] as $name) {
|
||||
if (file_exists("$t/$name")) $logos[] = "$t/$name";
|
||||
}
|
||||
if ($logos) $out[$t] = array_map(function($p){return ["path"=>$p,"size"=>@filesize($p)];}, array_unique($logos));
|
||||
}
|
||||
// Also check /solution* root-level
|
||||
$root = @shell_exec("ls -d /solution* /var/www/html/solution* 2>/dev/null");
|
||||
if ($root) $out["solution_roots"] = trim($root);
|
||||
|
||||
echo json_encode($out, JSON_PRETTY_PRINT|JSON_UNESCAPED_SLASHES);
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"generated": "2026-04-21 12:30:02",
|
||||
"generated": "2026-04-21 13:30:02",
|
||||
"version": "1.0",
|
||||
"servers": [
|
||||
{
|
||||
@@ -10,7 +10,7 @@
|
||||
"ssh": 49222,
|
||||
"disk_pct": 82,
|
||||
"disk_avail": "27G",
|
||||
"uptime": "up 1 week, 2 hours, 38 minutes",
|
||||
"uptime": "up 1 week, 3 hours, 38 minutes",
|
||||
"nginx": "active",
|
||||
"php_fpm": "active",
|
||||
"php_version": "8.5.5"
|
||||
@@ -116,7 +116,7 @@
|
||||
},
|
||||
{
|
||||
"name": "uptime-kuma",
|
||||
"status": "Up 36 hours (healthy)",
|
||||
"status": "Up 37 hours (healthy)",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
@@ -277,7 +277,7 @@
|
||||
"screens": {
|
||||
"s204_html": 315,
|
||||
"s204_products": 104,
|
||||
"s204_api_php": 783,
|
||||
"s204_api_php": 800,
|
||||
"s204_wevia_php": 34,
|
||||
"s95_arsenal_html": 1377,
|
||||
"s95_arsenal_api": 377
|
||||
@@ -301,7 +301,7 @@
|
||||
"langfuse"
|
||||
],
|
||||
"key_tables": {
|
||||
"kb_learnings": 5543,
|
||||
"kb_learnings": 5545,
|
||||
"kb_documents": 0,
|
||||
"ethica_medecins": 50004,
|
||||
"enterprise_agents": 0
|
||||
@@ -601,7 +601,7 @@
|
||||
]
|
||||
},
|
||||
"wiki": {
|
||||
"total_entries": 5543,
|
||||
"total_entries": 5545,
|
||||
"categories": [
|
||||
{
|
||||
"category": "AUTO-FIX",
|
||||
@@ -609,7 +609,7 @@
|
||||
},
|
||||
{
|
||||
"category": "TOPOLOGY",
|
||||
"cnt": "1214"
|
||||
"cnt": "1216"
|
||||
},
|
||||
{
|
||||
"category": "DISCOVERY",
|
||||
@@ -1706,13 +1706,13 @@
|
||||
}
|
||||
},
|
||||
"cortex": {
|
||||
"fast_lines": 3652,
|
||||
"fast_lines": 3681,
|
||||
"router_lines": 6152,
|
||||
"router_functions": 17,
|
||||
"today_requests": 5,
|
||||
"today_cost": 0,
|
||||
"avg_latency_ms": 2389,
|
||||
"top_provider": "cerebras",
|
||||
"top_provider": "WEVIA Engine",
|
||||
"providers_used": 2
|
||||
},
|
||||
"optimizations": {
|
||||
@@ -1826,7 +1826,7 @@
|
||||
"name": "CORTEX Smart Router",
|
||||
"status": "active",
|
||||
"desc": "T0 Ollama → T1 Free APIs → T2 Fallbacks",
|
||||
"routes": 3652
|
||||
"routes": 3681
|
||||
},
|
||||
{
|
||||
"name": "RAG Ingest",
|
||||
@@ -1945,7 +1945,7 @@
|
||||
}
|
||||
]
|
||||
},
|
||||
"scan_time_ms": 1610,
|
||||
"scan_time_ms": 3257,
|
||||
"gaps": [],
|
||||
"score": 100,
|
||||
"automation": {
|
||||
|
||||
24
api/autonomy_full_dashboard.php
Normal file
@@ -0,0 +1,24 @@
|
||||
<?php
|
||||
// V38 Opus - WEVIA Master FULL AUTONOMY dashboard intent
|
||||
// Doctrine 7+64+12
|
||||
return [
|
||||
"name" => "autonomy_full_dashboard",
|
||||
"triggers" => [
|
||||
"autonomy full",
|
||||
"autonomie full",
|
||||
"autonomy master",
|
||||
"autonomie master",
|
||||
"autonomy dashboard",
|
||||
"autonomie dashboard",
|
||||
"full autonomie",
|
||||
"wevia autonomie complete",
|
||||
"wevia autonomy complete",
|
||||
"etat global autonomie",
|
||||
"autonomy global",
|
||||
],
|
||||
"cmd" => "curl -s http://127.0.0.1/api/wevia-autonomy-dashboard.php",
|
||||
"status" => "EXECUTED",
|
||||
"created_at" => "2026-04-20T14:10:00+00:00",
|
||||
"source" => "opus-v38-autonomy-full",
|
||||
"description" => "V38 Unified autonomy dashboard: 19 automations + autonomy_score + crons + L99 + services + blade + alerts - one shot verdict FULL_AUTONOMOUS or DEGRADED",
|
||||
];
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"generated_at": "2026-04-21T14:40:01.150350",
|
||||
"generated_at": "2026-04-21T15:40:01.408799",
|
||||
"stats": {
|
||||
"total": 48,
|
||||
"pending": 31,
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
{
|
||||
"status": "ALIVE",
|
||||
"ts": "2026-04-21T14:30:01.933472",
|
||||
"last_heartbeat": "2026-04-21T14:30:01.933472",
|
||||
"last_heartbeat_ts_epoch": 1776774601,
|
||||
"ts": "2026-04-21T15:30:02.364453",
|
||||
"last_heartbeat": "2026-04-21T15:30:02.364453",
|
||||
"last_heartbeat_ts_epoch": 1776778202,
|
||||
"tasks_today": 232,
|
||||
"tasks_week": 574,
|
||||
"agent_id": "blade-ops",
|
||||
|
||||
1
api/blade-tasks/dynamic-1776776450.json
Normal file
@@ -0,0 +1 @@
|
||||
{"id":"dynamic-1776776450","type":"dynamic_wire","msg":"multiagent playwright screenshot wikihtml after ux fix - verify grid columns work not 1 word per line","created":"2026-04-21T15:00:50+02:00","status":"pending"}
|
||||
99
api/duplicates-registry.php
Normal file
@@ -0,0 +1,99 @@
|
||||
<?php
|
||||
// Wave 209 · /api/duplicates-registry.php
|
||||
// Duplicate screens registry. Non-destructive audit: returns groups with
|
||||
// canonical file + legacy candidates + recommendations. Zero delete.
|
||||
@require_once __DIR__ . '/wevia-sanitizer-guard.php';
|
||||
header('Content-Type: application/json; charset=utf-8');
|
||||
header('Access-Control-Allow-Origin: *');
|
||||
|
||||
$DOCROOT = '/var/www/html';
|
||||
$pages = array_filter(scandir($DOCROOT), function($f) use ($DOCROOT) {
|
||||
return substr($f, -5) === '.html' && is_file("$DOCROOT/$f");
|
||||
});
|
||||
|
||||
// Normalize base name (strip version/legacy/saas suffixes)
|
||||
$base_groups = [];
|
||||
foreach ($pages as $p) {
|
||||
$base = substr($p, 0, -5);
|
||||
$base = preg_replace('/-v\d+$|-new$|-legacy$|-old$|\d{8,14}$|-saas$|-v\d+-\w+$/', '', $base);
|
||||
$base = preg_replace('/-pre-\w+$/', '', $base);
|
||||
$base_groups[$base][] = $p;
|
||||
}
|
||||
|
||||
// Duplicates only
|
||||
$dups = [];
|
||||
$total_dups = 0;
|
||||
foreach ($base_groups as $base => $files) {
|
||||
if (count($files) < 2) continue;
|
||||
|
||||
// Determine canonical = file with cleanest name (shortest), fall back to newest
|
||||
usort($files, function($a, $b) use ($DOCROOT) {
|
||||
// Prefer files without -v / -legacy / -old / -saas suffixes
|
||||
$has_suffix_a = preg_match('/-v\d+|-legacy|-old|-saas|-new/', $a);
|
||||
$has_suffix_b = preg_match('/-v\d+|-legacy|-old|-saas|-new/', $b);
|
||||
if ($has_suffix_a !== $has_suffix_b) return $has_suffix_a - $has_suffix_b;
|
||||
// Then prefer shorter name
|
||||
if (strlen($a) !== strlen($b)) return strlen($a) - strlen($b);
|
||||
// Then newest mtime
|
||||
return filemtime("$DOCROOT/$b") - filemtime("$DOCROOT/$a");
|
||||
});
|
||||
|
||||
$canonical = $files[0];
|
||||
$legacy = array_slice($files, 1);
|
||||
|
||||
$entries = [];
|
||||
foreach ($files as $f) {
|
||||
$path = "$DOCROOT/$f";
|
||||
$size = filesize($path);
|
||||
$entries[] = [
|
||||
'file' => $f,
|
||||
'size_bytes' => $size,
|
||||
'last_modified' => date('c', filemtime($path)),
|
||||
'is_canonical' => $f === $canonical,
|
||||
'url' => "/$f"
|
||||
];
|
||||
}
|
||||
|
||||
// Size similarity between canonical and legacy
|
||||
$can_size = filesize("$DOCROOT/$canonical");
|
||||
$close_copies = [];
|
||||
foreach ($legacy as $l) {
|
||||
$l_size = filesize("$DOCROOT/$l");
|
||||
if ($can_size > 0 && abs($can_size - $l_size) / max($can_size, $l_size) < 0.1) {
|
||||
$close_copies[] = $l;
|
||||
}
|
||||
}
|
||||
|
||||
$recommendation = count($close_copies) > 0
|
||||
? 'Archive legacy copies (add HTTP 301 to canonical) - content quasi-identical'
|
||||
: 'Keep for now - legacy has distinct content, verify if still referenced';
|
||||
|
||||
$dups[] = [
|
||||
'base' => $base,
|
||||
'count' => count($files),
|
||||
'canonical' => $canonical,
|
||||
'canonical_url' => "/$canonical",
|
||||
'legacy_files' => $legacy,
|
||||
'close_copies' => $close_copies,
|
||||
'recommendation' => $recommendation,
|
||||
'files' => $entries
|
||||
];
|
||||
$total_dups += count($legacy);
|
||||
}
|
||||
|
||||
// Sort by count desc
|
||||
usort($dups, function($a, $b) { return $b['count'] - $a['count']; });
|
||||
|
||||
$out = [
|
||||
'ok' => true,
|
||||
'ts' => date('c'),
|
||||
'total_pages' => count($pages),
|
||||
'total_duplicate_groups' => count($dups),
|
||||
'total_legacy_files' => $total_dups,
|
||||
'total_close_copies' => array_sum(array_map(function($g){ return count($g['close_copies']); }, $dups)),
|
||||
'groups' => $dups,
|
||||
'version' => 'wave-209',
|
||||
'doctrine' => 'non-destructive · document canonical + legacy · zero delete'
|
||||
];
|
||||
|
||||
echo json_encode($out, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
|
||||
@@ -0,0 +1,281 @@
|
||||
{
|
||||
"ts": "2026-04-21T13:40:01+00:00",
|
||||
"server": "s204",
|
||||
"s204": {
|
||||
"load": 1.1,
|
||||
"uptime": "2026-04-14 11:51:24",
|
||||
"ram_total_mb": 31335,
|
||||
"ram_used_mb": 11420,
|
||||
"ram_free_mb": 19914,
|
||||
"disk_total": "150G",
|
||||
"disk_used": "117G",
|
||||
"disk_free": "27G",
|
||||
"disk_pct": "82%",
|
||||
"fpm_workers": 141,
|
||||
"docker_containers": 19,
|
||||
"cpu_cores": 8
|
||||
},
|
||||
"s95": {
|
||||
"load": 0.39,
|
||||
"disk_pct": "81%",
|
||||
"status": "UP",
|
||||
"ram_total_mb": 15610,
|
||||
"ram_free_mb": 11965
|
||||
},
|
||||
"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": 315,
|
||||
"php_apis": 802,
|
||||
"wiki_entries": 1988,
|
||||
"vault_doctrines": 72,
|
||||
"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": 110609,
|
||||
"with_phone": 155151,
|
||||
"gap_email": 51124,
|
||||
"pct_email": 68.4,
|
||||
"pct_phone": 95.9,
|
||||
"by_country": [
|
||||
{
|
||||
"country": "DZ",
|
||||
"hcps": 122337,
|
||||
"with_email": 78506,
|
||||
"with_tel": 119396,
|
||||
"pct_email": 64.2,
|
||||
"pct_tel": 97.6
|
||||
},
|
||||
{
|
||||
"country": "MA",
|
||||
"hcps": 19723,
|
||||
"with_email": 15077,
|
||||
"with_tel": 18737,
|
||||
"pct_email": 76.4,
|
||||
"pct_tel": 95
|
||||
},
|
||||
{
|
||||
"country": "TN",
|
||||
"hcps": 17794,
|
||||
"with_email": 15147,
|
||||
"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 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 5 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 38 hours (healthy)",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "vaultwarden",
|
||||
"status": "Up 6 days (healthy)",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "qdrant",
|
||||
"status": "Up 6 days",
|
||||
"ports": ""
|
||||
}
|
||||
],
|
||||
"crons": {
|
||||
"active": 35
|
||||
},
|
||||
"git": {
|
||||
"head": "10fcacfae auto-sync-1540",
|
||||
"dirty": 4,
|
||||
"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": 3823,
|
||||
"health": {
|
||||
"score": 5,
|
||||
"max": 6,
|
||||
"pct": 83
|
||||
},
|
||||
"elapsed_ms": 11343
|
||||
}
|
||||
38
api/file_dump.php
Normal file
@@ -0,0 +1,38 @@
|
||||
<?php
|
||||
/**
|
||||
* intent-opus4-file_dump.php
|
||||
* AMBRE session · chunked file reader · offset + length
|
||||
* Invocation: /api/opus-arch-generic.php?tool=file_dump&path=X&offset=0&length=10000
|
||||
*/
|
||||
header("Content-Type: application/json");
|
||||
|
||||
$target = $_GET["path"] ?? "";
|
||||
$offset = (int)($_GET["offset"] ?? 0);
|
||||
$length = min((int)($_GET["length"] ?? 8000), 50000);
|
||||
|
||||
$real = realpath($target);
|
||||
$allowed = ["/var/www/html/", "/opt/wevads/", "/opt/weval-l99/"];
|
||||
$ok = false;
|
||||
foreach ($allowed as $root) {
|
||||
if ($real && strpos($real, $root) === 0) { $ok = true; break; }
|
||||
}
|
||||
if (!$ok || !file_exists($real)) {
|
||||
echo json_encode(["ok"=>false, "error"=>"path denied or not found", "path"=>$target]);
|
||||
exit;
|
||||
}
|
||||
|
||||
$fh = fopen($real, "r");
|
||||
fseek($fh, $offset);
|
||||
$chunk = fread($fh, $length);
|
||||
fclose($fh);
|
||||
|
||||
echo json_encode([
|
||||
"ok" => true,
|
||||
"path" => $real,
|
||||
"offset" => $offset,
|
||||
"length" => strlen($chunk),
|
||||
"total" => filesize($real),
|
||||
"eof" => ($offset + strlen($chunk)) >= filesize($real),
|
||||
"content" => $chunk,
|
||||
"source" => "intent-opus4-file_dump.php · ambre · honest chunked read",
|
||||
]);
|
||||
8
api/handlers-misplaced.json
Normal file
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"ts": "2026-04-21T15:05:33+02:00",
|
||||
"scanned": 2050,
|
||||
"misplaced_count": 0,
|
||||
"misplaced": [
|
||||
],
|
||||
"source": "wevia-handlers-detector.sh · wave 206 · nightly 03:15"
|
||||
}
|
||||
@@ -1,27 +1,27 @@
|
||||
{
|
||||
"ok": true,
|
||||
"agent": "V42_MQL_Scoring_Agent_REAL",
|
||||
"ts": "2026-04-21T12:40:01+00:00",
|
||||
"ts": "2026-04-21T13:40:01+00:00",
|
||||
"status": "DEPLOYED_AUTO",
|
||||
"deployed": true,
|
||||
"algorithm": "weighted_behavioral_signals",
|
||||
"signals_tracked": {
|
||||
"wtp_engagement": 100,
|
||||
"wtp_engagement": 72,
|
||||
"chat_engagement": 0,
|
||||
"roi_tool": 0,
|
||||
"email_opened": 0
|
||||
},
|
||||
"avg_score": 25,
|
||||
"avg_score": 18,
|
||||
"mql_threshold": 50,
|
||||
"sql_threshold": 75,
|
||||
"leads_captured": 48,
|
||||
"mql_auto_scored": 20,
|
||||
"mql_auto_scored": 19,
|
||||
"sql_auto_scored": 8,
|
||||
"mql_auto_pct": 41,
|
||||
"mql_auto_pct": 40,
|
||||
"improvement_vs_manual": {
|
||||
"before_manual_pct": 33.3,
|
||||
"after_auto_pct": 41,
|
||||
"delta": 7.700000000000003
|
||||
"after_auto_pct": 40,
|
||||
"delta": 6.700000000000003
|
||||
},
|
||||
"paperclip_db_ok": true,
|
||||
"paperclip_tables": 1,
|
||||
|
||||
@@ -1 +1 @@
|
||||
{"ts": "20260421_141112", "version": "3.2", "score": 100, "pass": 153, "fail": 0, "total": 153, "elapsed": 32.8, "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": []}
|
||||
{"ts": "20260421_152221", "version": "3.2", "score": 100, "pass": 153, "fail": 0, "total": 153, "elapsed": 32.4, "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": []}
|
||||
@@ -10,7 +10,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T14:00:04.213074"
|
||||
"discovered": "2026-04-21T15:00:03.854616"
|
||||
},
|
||||
{
|
||||
"name": "wevia-brain",
|
||||
@@ -23,7 +23,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T14:00:04.363681"
|
||||
"discovered": "2026-04-21T15:00:03.953944"
|
||||
},
|
||||
{
|
||||
"name": "skills",
|
||||
@@ -36,7 +36,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T14:00:04.112938"
|
||||
"discovered": "2026-04-21T15:00:03.643144"
|
||||
},
|
||||
{
|
||||
"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-21T14:00:03.387830"
|
||||
"discovered": "2026-04-21T15:00:02.718244"
|
||||
},
|
||||
{
|
||||
"name": "open-webui-fresh",
|
||||
@@ -62,7 +62,7 @@
|
||||
"has_docker": true,
|
||||
"wired": true,
|
||||
"description": "# Open WebUI 👋   | [中文](README.zh.md) | [日本語](README.ja.md) | [Español](README.es.md) | [Tiếng Việt](README.vi.md) | [Português](README.p",
|
||||
"discovered": "2026-04-21T14:00:03.859357"
|
||||
"discovered": "2026-04-21T15:00:03.134159"
|
||||
},
|
||||
{
|
||||
"name": "mxyhi_ok-skills",
|
||||
@@ -114,7 +114,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "# OK Skills: AI Coding Agent Skills for Codex, Claude Code, Cursor, OpenClaw, and More English | [简体中文](README.zh-CN.md) | [繁體中文](README.zh-TW.md) | ",
|
||||
"discovered": "2026-04-21T14:00:03.816980"
|
||||
"discovered": "2026-04-21T15:00:03.064635"
|
||||
},
|
||||
{
|
||||
"name": "SuperClaude_Framework",
|
||||
@@ -127,7 +127,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "<div align=\"center\"> # 🚀 SuperClaude Framework [](https://smithery.ai/skills?ns=",
|
||||
"discovered": "2026-04-21T14:00:03.175977"
|
||||
"discovered": "2026-04-21T15:00:02.325731"
|
||||
},
|
||||
{
|
||||
"name": "paperclip-weval",
|
||||
@@ -140,7 +140,7 @@
|
||||
"has_docker": true,
|
||||
"wired": true,
|
||||
"description": "<p align=\"center\"> <img src=\"doc/assets/header.png\" alt=\"Paperclip — runs your business\" width=\"720\" /> </p> <p align=\"center\"> <a href=\"#quickst",
|
||||
"discovered": "2026-04-21T14:00:03.997967"
|
||||
"discovered": "2026-04-21T15:00:03.175618"
|
||||
},
|
||||
{
|
||||
"name": "vllm",
|
||||
@@ -153,7 +153,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "<!-- markdownlint-disable MD001 MD041 --> <p align=\"center\"> <picture> <source media=\"(prefers-color-scheme: dark)\" srcset=\"https://raw.githubus",
|
||||
"discovered": "2026-04-21T14:00:04.151555"
|
||||
"discovered": "2026-04-21T15:00:03.801695"
|
||||
},
|
||||
{
|
||||
"name": "deer-flow",
|
||||
@@ -166,7 +166,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "# 🦌 DeerFlow - 2.0 English | [中文](./README_zh.md) | [日本語](./README_ja.md) | [Français](./README_fr.md) | [Русский](./README_ru.md) [ [](https://agent.xfyun.cn) <div align=\"center\"> [ | [Français](docs/translations/README.fr.md) | [Italiano](docs/translations/README.it.md) | ",
|
||||
"discovered": "2026-04-21T14:00:03.037170"
|
||||
"discovered": "2026-04-21T15:00:02.307800"
|
||||
},
|
||||
{
|
||||
"name": "aios",
|
||||
@@ -374,7 +374,7 @@
|
||||
"has_docker": true,
|
||||
"wired": true,
|
||||
"description": "# AIOS: AI Agent Operating System <a href='https://arxiv.org/abs/2403.16971'><img src='https://img.shields.io/badge/Paper-PDF-red'></a> <a href='http",
|
||||
"discovered": "2026-04-21T14:00:03.216248"
|
||||
"discovered": "2026-04-21T15:00:02.348350"
|
||||
},
|
||||
{
|
||||
"name": "rnd-agent-framework",
|
||||
@@ -387,7 +387,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": " # Welcome to Microsoft Agent Framework! [\"> <source srcset=\"apps/w",
|
||||
"discovered": "2026-04-21T14:00:04.119479"
|
||||
"discovered": "2026-04-21T15:00:03.704424"
|
||||
},
|
||||
{
|
||||
"name": "fmgapp",
|
||||
@@ -478,7 +478,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T14:00:03.390235"
|
||||
"discovered": "2026-04-21T15:00:02.807652"
|
||||
},
|
||||
{
|
||||
"name": "obsidian-vault",
|
||||
@@ -491,7 +491,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T14:00:03.819123"
|
||||
"discovered": "2026-04-21T15:00:03.084629"
|
||||
},
|
||||
{
|
||||
"name": "rnd-agents",
|
||||
@@ -504,7 +504,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "# Claude Code Plugins: Orchestration and Automation > **⚡ Updated for Opus 4.6, Sonnet 4.6 & Haiku 4.5** — Three-tier model strategy for optimal perf",
|
||||
"discovered": "2026-04-21T14:00:04.101557"
|
||||
"discovered": "2026-04-21T15:00:03.472268"
|
||||
},
|
||||
{
|
||||
"name": "FrancyJGLisboa_agent-skill-creator",
|
||||
@@ -517,7 +517,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "# Agent Skill Creator **Turn any workflow into reusable AI agent software that installs on 14+ tools — no spec writing, no prompt engineering, no cod",
|
||||
"discovered": "2026-04-21T14:00:03.004284"
|
||||
"discovered": "2026-04-21T15:00:02.260139"
|
||||
},
|
||||
{
|
||||
"name": "skillsmith",
|
||||
@@ -530,7 +530,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "<div align=\"center\"> <img src=\"terminal.svg\" alt=\"Skillsmith terminal\" width=\"740\"/> </div> <div align=\"center\"> # Skillsmith **Build consistent ",
|
||||
"discovered": "2026-04-21T14:00:04.115356"
|
||||
"discovered": "2026-04-21T15:00:03.661748"
|
||||
},
|
||||
{
|
||||
"name": "awesome-agent-skills",
|
||||
@@ -543,7 +543,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "<a href=\"https://github.com/VoltAgent/voltagent\"> <img width=\"1500\" height=\"801\" alt=\"claude-skills\" src=\"https://github.com/user-attachments/ass",
|
||||
"discovered": "2026-04-21T14:00:03.315079"
|
||||
"discovered": "2026-04-21T15:00:02.508609"
|
||||
},
|
||||
{
|
||||
"name": "paperclip-skills",
|
||||
@@ -556,7 +556,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T14:00:03.925295"
|
||||
"discovered": "2026-04-21T15:00:03.153575"
|
||||
},
|
||||
{
|
||||
"name": "jzOcb_writing-style-skill",
|
||||
@@ -569,7 +569,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "# Writing Style Skill 可复用的写作风格 Skill 模板。**内置自动学习** — 从你的修改中自动提取规则,SKILL.md 越用越准。 兼容 **Claude Code** + **OpenClaw (ClawHub)**。 ## 原理 ``` AI 用 SKILL",
|
||||
"discovered": "2026-04-21T14:00:03.432992"
|
||||
"discovered": "2026-04-21T15:00:02.850217"
|
||||
},
|
||||
{
|
||||
"name": "qdrant-data",
|
||||
@@ -582,7 +582,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T14:00:04.057153"
|
||||
"discovered": "2026-04-21T15:00:03.296808"
|
||||
},
|
||||
{
|
||||
"name": "wazuh",
|
||||
@@ -595,7 +595,7 @@
|
||||
"has_docker": true,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T14:00:04.170973"
|
||||
"discovered": "2026-04-21T15:00:03.815902"
|
||||
},
|
||||
{
|
||||
"name": "plausible",
|
||||
@@ -608,7 +608,7 @@
|
||||
"has_docker": true,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T14:00:04.024996"
|
||||
"discovered": "2026-04-21T15:00:03.229857"
|
||||
},
|
||||
{
|
||||
"name": "pmta",
|
||||
@@ -621,7 +621,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T14:00:04.031069"
|
||||
"discovered": "2026-04-21T15:00:03.250756"
|
||||
},
|
||||
{
|
||||
"name": "render-configs",
|
||||
@@ -634,7 +634,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T14:00:04.093043"
|
||||
"discovered": "2026-04-21T15:00:03.354310"
|
||||
},
|
||||
{
|
||||
"name": "searxng",
|
||||
@@ -647,7 +647,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T14:00:04.110665"
|
||||
"discovered": "2026-04-21T15:00:03.608100"
|
||||
},
|
||||
{
|
||||
"name": "weval-guardian",
|
||||
@@ -660,7 +660,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T14:00:04.197346"
|
||||
"discovered": "2026-04-21T15:00:03.845315"
|
||||
},
|
||||
{
|
||||
"name": "weval-litellm",
|
||||
@@ -673,7 +673,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T14:00:04.218750"
|
||||
"discovered": "2026-04-21T15:00:03.865731"
|
||||
},
|
||||
{
|
||||
"name": "weval-security",
|
||||
@@ -686,7 +686,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T14:00:04.331517"
|
||||
"discovered": "2026-04-21T15:00:03.930563"
|
||||
},
|
||||
{
|
||||
"name": "archive",
|
||||
@@ -699,7 +699,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T14:00:03.270004"
|
||||
"discovered": "2026-04-21T15:00:02.391402"
|
||||
},
|
||||
{
|
||||
"name": "loki",
|
||||
@@ -712,7 +712,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T14:00:03.684678"
|
||||
"discovered": "2026-04-21T15:00:02.900227"
|
||||
},
|
||||
{
|
||||
"name": "ruflo",
|
||||
@@ -725,7 +725,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T14:00:04.108782"
|
||||
"discovered": "2026-04-21T15:00:03.579813"
|
||||
},
|
||||
{
|
||||
"name": "twenty",
|
||||
@@ -738,7 +738,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T14:00:04.136242"
|
||||
"discovered": "2026-04-21T15:00:03.742361"
|
||||
},
|
||||
{
|
||||
"name": "weval-crewai",
|
||||
@@ -751,7 +751,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T14:00:04.183317"
|
||||
"discovered": "2026-04-21T15:00:03.837298"
|
||||
},
|
||||
{
|
||||
"name": "weval-plugins",
|
||||
@@ -764,7 +764,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T14:00:04.277251"
|
||||
"discovered": "2026-04-21T15:00:03.896211"
|
||||
},
|
||||
{
|
||||
"name": "weval-radar",
|
||||
@@ -777,7 +777,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T14:00:04.279435"
|
||||
"discovered": "2026-04-21T15:00:03.911292"
|
||||
},
|
||||
{
|
||||
"name": "weval-scrapy",
|
||||
@@ -790,7 +790,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T14:00:04.305366"
|
||||
"discovered": "2026-04-21T15:00:03.925391"
|
||||
},
|
||||
{
|
||||
"name": "langfuse",
|
||||
@@ -803,7 +803,7 @@
|
||||
"has_docker": true,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T14:00:03.461582"
|
||||
"discovered": "2026-04-21T15:00:02.852309"
|
||||
},
|
||||
{
|
||||
"name": "litellm",
|
||||
@@ -816,7 +816,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T14:00:03.606159"
|
||||
"discovered": "2026-04-21T15:00:02.859023"
|
||||
},
|
||||
{
|
||||
"name": "mattermost-docker",
|
||||
@@ -829,7 +829,7 @@
|
||||
"has_docker": true,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T14:00:03.723871"
|
||||
"discovered": "2026-04-21T15:00:02.902358"
|
||||
},
|
||||
{
|
||||
"name": "prometheus",
|
||||
@@ -842,7 +842,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T14:00:04.055076"
|
||||
"discovered": "2026-04-21T15:00:03.269652"
|
||||
},
|
||||
{
|
||||
"name": "twenty-compose",
|
||||
@@ -855,7 +855,7 @@
|
||||
"has_docker": true,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T14:00:04.142240"
|
||||
"discovered": "2026-04-21T15:00:03.772465"
|
||||
},
|
||||
{
|
||||
"name": "weval-ux",
|
||||
@@ -868,7 +868,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T14:00:04.335363"
|
||||
"discovered": "2026-04-21T15:00:03.938236"
|
||||
},
|
||||
{
|
||||
"name": "wevia-integrity",
|
||||
@@ -881,7 +881,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T14:00:04.374041"
|
||||
"discovered": "2026-04-21T15:00:03.961488"
|
||||
},
|
||||
{
|
||||
"name": "DiffusionDB",
|
||||
@@ -894,7 +894,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T14:00:02.973185"
|
||||
"discovered": "2026-04-21T15:00:02.244817"
|
||||
},
|
||||
{
|
||||
"name": "LTX-Video",
|
||||
@@ -907,7 +907,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T14:00:03.123354"
|
||||
"discovered": "2026-04-21T15:00:02.313417"
|
||||
},
|
||||
{
|
||||
"name": "localai",
|
||||
@@ -920,7 +920,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T14:00:03.608249"
|
||||
"discovered": "2026-04-21T15:00:02.861061"
|
||||
},
|
||||
{
|
||||
"name": "wevia-finetune",
|
||||
@@ -933,6 +933,6 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T14:00:04.369762"
|
||||
"discovered": "2026-04-21T15:00:03.959419"
|
||||
}
|
||||
]
|
||||
@@ -80,6 +80,17 @@ if (!is_array($data) || empty($data)) {
|
||||
$o['category'] = $cat;
|
||||
$o['wire_suggestion'] = $sug;
|
||||
}
|
||||
unset($o); // WAVE 207 fix PHP by-ref leak
|
||||
// WAVE 207 dedup by file name (defensive)
|
||||
$seen = [];
|
||||
$unique = [];
|
||||
foreach ($orphans as $o2) {
|
||||
if (!isset($seen[$o2['file']])) {
|
||||
$seen[$o2['file']] = 1;
|
||||
$unique[] = $o2;
|
||||
}
|
||||
}
|
||||
$orphans = $unique;
|
||||
|
||||
// Count by category
|
||||
$by_cat = [];
|
||||
|
||||
116
api/pol.f64_nt6c.tmp
Normal file
@@ -0,0 +1,116 @@
|
||||
<?php
|
||||
/**
|
||||
* Pages orphans list API V96.19
|
||||
* User WTP shows "54 pages orphelines détectées. Voir la liste"
|
||||
* But no API existed to return structured list with wire suggestions
|
||||
*
|
||||
* Endpoint: /api/pages-orphans-list.php
|
||||
* Returns: 54 orphans with category, last_modified, size, wire_suggestion
|
||||
*/
|
||||
header('Content-Type: application/json; charset=utf-8');
|
||||
header('Access-Control-Allow-Origin: *');
|
||||
|
||||
$DOCROOT = '/var/www/html';
|
||||
|
||||
// Read pages-index.php output if exists, else scan directly
|
||||
$orphans_file = "$DOCROOT/api/orphans-json.json";
|
||||
$data = @json_decode(@file_get_contents($orphans_file), true);
|
||||
|
||||
if (!is_array($data) || empty($data)) {
|
||||
// Fallback scan: find .html files not referenced from index.html or WTP
|
||||
$all_html = glob("$DOCROOT/*.html");
|
||||
$referenced = [];
|
||||
$anchor_files = [
|
||||
'index.html', 'weval-technology-platform.html', 'wtp.html',
|
||||
'admin-v2.html', 'admin.html', 'architecture.html', 'dg-command-center.html',
|
||||
'enterprise-model.html', 'wevia-master.html', 'tools-hub.html', 'apps.html',
|
||||
'agents-archi.html', 'nonreg.html', 'portal.html', 'portal-executive.html',
|
||||
'lean6sigma-dashboard.html', 'cartographie-screens.html', 'pages-index.html',
|
||||
'unified-hub.html', 'wevia-autonomy-dashboard.html', 'enterprise.html',
|
||||
'ethica-hub.html', 'cloudflare-hub.html', 'huawei-cloud.html', 'orphans-hub.html', 'go-100pct.html',
|
||||
'wevia-backoffice.html', 'wevia-business-visual-studio.html',
|
||||
];
|
||||
foreach ($anchor_files as $af) {
|
||||
$af_path = "$DOCROOT/$af";
|
||||
if (file_exists($af_path)) {
|
||||
$content = file_get_contents($af_path);
|
||||
if (preg_match_all('/href="\/?([a-z0-9_\-\xc0-\xff%]+\.html)"/iu', $content, $matches)) {
|
||||
foreach ($matches[1] as $m) $referenced[$m] = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$orphans = [];
|
||||
foreach ($all_html as $path) {
|
||||
$name = basename($path);
|
||||
// V96.21 filter out backup/gold files (legitimate archives, not real orphans)
|
||||
if (preg_match("/\\.(gold|backup|bak|orig|pre-|\\.pre-|\\.GOLD-)/i", $name)) continue;
|
||||
if (preg_match("/^\\./", $name)) continue; // hidden
|
||||
if (preg_match("/(\\d{8}|\\d{14})\\.html$/", $name)) continue; // date-stamped backups
|
||||
if (!isset($referenced[$name])) {
|
||||
$orphans[] = [
|
||||
'file' => $name,
|
||||
'size_bytes' => filesize($path),
|
||||
'last_modified' => date('c', filemtime($path)),
|
||||
'age_days' => round((time() - filemtime($path)) / 86400),
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
// Enrich with category + suggestion
|
||||
$categorize = function($name) {
|
||||
$n = strtolower($name);
|
||||
if (strpos($n, 'ethica') !== false) return ['marketing', 'Add link in WTP Marketing & Email module'];
|
||||
if (strpos($n, 'wevia') !== false) return ['ai', 'Add link in WTP Intelligence IA module'];
|
||||
if (strpos($n, 'wevads') !== false) return ['marketing', 'Add link in WTP Marketing & Email module'];
|
||||
if (strpos($n, 'sap') !== false || strpos($n, 'vistex') !== false) return ['erp', 'Add link in WTP ERP Integrations module'];
|
||||
if (strpos($n, 'huawei') !== false || strpos($n, 'cloud') !== false) return ['cloud', 'Add link in WTP Operations & Infra module'];
|
||||
if (strpos($n, 'agent') !== false) return ['ai', 'Add link in WTP Intelligence IA / RH & Talent'];
|
||||
if (strpos($n, 'test') !== false || strpos($n, 'demo') !== false) return ['dev', 'Archive to /tests/ or /demos/ folder'];
|
||||
if (strpos($n, 'admin') !== false || strpos($n, 'dashboard') !== false) return ['operations', 'Add to WTP Operations & Infra'];
|
||||
if (strpos($n, 'security') !== false || strpos($n, 'gdpr') !== false) return ['security', 'Add to WTP Security & Compliance'];
|
||||
if (strpos($n, 'consent') !== false || strpos($n, 'privacy') !== false) return ['legal', 'Link from footer legal/privacy'];
|
||||
if (strpos($n, 'ia') !== false || strpos($n, '-ai') !== false) return ['ai', 'Add link in WTP Intelligence IA'];
|
||||
if (strpos($n, 'landing') !== false || strpos($n, 'nearshore') !== false) return ['marketing-landing', 'Verify SEO referenced, else add to sitemap'];
|
||||
return ['other', 'Manual review - may be archived'];
|
||||
};
|
||||
|
||||
foreach ($orphans as &$o) {
|
||||
list($cat, $sug) = $categorize($o['file']);
|
||||
$o['category'] = $cat;
|
||||
$o['wire_suggestion'] = $sug;
|
||||
}
|
||||
unset($o); // WAVE 207 · fix PHP reference-leak after by-ref foreach
|
||||
// WAVE 207 · dedupe by file name (defensive)
|
||||
$seen_files = [];
|
||||
$orphans_unique = [];
|
||||
foreach ($orphans as $o) {
|
||||
if (!isset($seen_files[$o['file']])) {
|
||||
$seen_files[$o['file']] = true;
|
||||
$orphans_unique[] = $o;
|
||||
}
|
||||
}
|
||||
$orphans = $orphans_unique;
|
||||
|
||||
// Count by category
|
||||
$by_cat = [];
|
||||
foreach ($orphans as $o) {
|
||||
$by_cat[$o['category']] = ($by_cat[$o['category']] ?? 0) + 1;
|
||||
}
|
||||
arsort($by_cat);
|
||||
|
||||
$data = [
|
||||
'total_html_pages' => count($all_html),
|
||||
'referenced' => count($referenced),
|
||||
'orphans_count' => count($orphans),
|
||||
'orphans' => $orphans,
|
||||
'by_category' => $by_cat,
|
||||
'scan_anchors' => $anchor_files,
|
||||
];
|
||||
}
|
||||
|
||||
$data['v'] = 'V96.19-pages-orphans-opus';
|
||||
$data['ts'] = date('c');
|
||||
$data['note'] = 'Scan files in /var/www/html/*.html not referenced from index/WTP. Wire suggestions provided per file.';
|
||||
|
||||
echo json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
|
||||
116
api/pol.u2ejw4rb.tmp
Normal file
@@ -0,0 +1,116 @@
|
||||
<?php
|
||||
/**
|
||||
* Pages orphans list API V96.19
|
||||
* User WTP shows "54 pages orphelines détectées. Voir la liste"
|
||||
* But no API existed to return structured list with wire suggestions
|
||||
*
|
||||
* Endpoint: /api/pages-orphans-list.php
|
||||
* Returns: 54 orphans with category, last_modified, size, wire_suggestion
|
||||
*/
|
||||
header('Content-Type: application/json; charset=utf-8');
|
||||
header('Access-Control-Allow-Origin: *');
|
||||
|
||||
$DOCROOT = '/var/www/html';
|
||||
|
||||
// Read pages-index.php output if exists, else scan directly
|
||||
$orphans_file = "$DOCROOT/api/orphans-json.json";
|
||||
$data = @json_decode(@file_get_contents($orphans_file), true);
|
||||
|
||||
if (!is_array($data) || empty($data)) {
|
||||
// Fallback scan: find .html files not referenced from index.html or WTP
|
||||
$all_html = glob("$DOCROOT/*.html");
|
||||
$referenced = [];
|
||||
$anchor_files = [
|
||||
'index.html', 'weval-technology-platform.html', 'wtp.html',
|
||||
'admin-v2.html', 'admin.html', 'architecture.html', 'dg-command-center.html',
|
||||
'enterprise-model.html', 'wevia-master.html', 'tools-hub.html', 'apps.html',
|
||||
'agents-archi.html', 'nonreg.html', 'portal.html', 'portal-executive.html',
|
||||
'lean6sigma-dashboard.html', 'cartographie-screens.html', 'pages-index.html',
|
||||
'unified-hub.html', 'wevia-autonomy-dashboard.html', 'enterprise.html',
|
||||
'ethica-hub.html', 'cloudflare-hub.html', 'huawei-cloud.html', 'orphans-hub.html', 'go-100pct.html',
|
||||
'wevia-backoffice.html', 'wevia-business-visual-studio.html',
|
||||
];
|
||||
foreach ($anchor_files as $af) {
|
||||
$af_path = "$DOCROOT/$af";
|
||||
if (file_exists($af_path)) {
|
||||
$content = file_get_contents($af_path);
|
||||
if (preg_match_all('/href="\/?([a-z0-9_\-\xc0-\xff%]+\.html)"/iu', $content, $matches)) {
|
||||
foreach ($matches[1] as $m) $referenced[$m] = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$orphans = [];
|
||||
foreach ($all_html as $path) {
|
||||
$name = basename($path);
|
||||
// V96.21 filter out backup/gold files (legitimate archives, not real orphans)
|
||||
if (preg_match("/\\.(gold|backup|bak|orig|pre-|\\.pre-|\\.GOLD-)/i", $name)) continue;
|
||||
if (preg_match("/^\\./", $name)) continue; // hidden
|
||||
if (preg_match("/(\\d{8}|\\d{14})\\.html$/", $name)) continue; // date-stamped backups
|
||||
if (!isset($referenced[$name])) {
|
||||
$orphans[] = [
|
||||
'file' => $name,
|
||||
'size_bytes' => filesize($path),
|
||||
'last_modified' => date('c', filemtime($path)),
|
||||
'age_days' => round((time() - filemtime($path)) / 86400),
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
// Enrich with category + suggestion
|
||||
$categorize = function($name) {
|
||||
$n = strtolower($name);
|
||||
if (strpos($n, 'ethica') !== false) return ['marketing', 'Add link in WTP Marketing & Email module'];
|
||||
if (strpos($n, 'wevia') !== false) return ['ai', 'Add link in WTP Intelligence IA module'];
|
||||
if (strpos($n, 'wevads') !== false) return ['marketing', 'Add link in WTP Marketing & Email module'];
|
||||
if (strpos($n, 'sap') !== false || strpos($n, 'vistex') !== false) return ['erp', 'Add link in WTP ERP Integrations module'];
|
||||
if (strpos($n, 'huawei') !== false || strpos($n, 'cloud') !== false) return ['cloud', 'Add link in WTP Operations & Infra module'];
|
||||
if (strpos($n, 'agent') !== false) return ['ai', 'Add link in WTP Intelligence IA / RH & Talent'];
|
||||
if (strpos($n, 'test') !== false || strpos($n, 'demo') !== false) return ['dev', 'Archive to /tests/ or /demos/ folder'];
|
||||
if (strpos($n, 'admin') !== false || strpos($n, 'dashboard') !== false) return ['operations', 'Add to WTP Operations & Infra'];
|
||||
if (strpos($n, 'security') !== false || strpos($n, 'gdpr') !== false) return ['security', 'Add to WTP Security & Compliance'];
|
||||
if (strpos($n, 'consent') !== false || strpos($n, 'privacy') !== false) return ['legal', 'Link from footer legal/privacy'];
|
||||
if (strpos($n, 'ia') !== false || strpos($n, '-ai') !== false) return ['ai', 'Add link in WTP Intelligence IA'];
|
||||
if (strpos($n, 'landing') !== false || strpos($n, 'nearshore') !== false) return ['marketing-landing', 'Verify SEO referenced, else add to sitemap'];
|
||||
return ['other', 'Manual review - may be archived'];
|
||||
};
|
||||
|
||||
foreach ($orphans as &$o) {
|
||||
list($cat, $sug) = $categorize($o['file']);
|
||||
$o['category'] = $cat;
|
||||
$o['wire_suggestion'] = $sug;
|
||||
}
|
||||
unset($o); // WAVE 207 · fix PHP reference-leak after by-ref foreach
|
||||
// WAVE 207 · dedupe by file name (defensive)
|
||||
$seen_files = [];
|
||||
$orphans_unique = [];
|
||||
foreach ($orphans as $o) {
|
||||
if (!isset($seen_files[$o['file']])) {
|
||||
$seen_files[$o['file']] = true;
|
||||
$orphans_unique[] = $o;
|
||||
}
|
||||
}
|
||||
$orphans = $orphans_unique;
|
||||
|
||||
// Count by category
|
||||
$by_cat = [];
|
||||
foreach ($orphans as $o) {
|
||||
$by_cat[$o['category']] = ($by_cat[$o['category']] ?? 0) + 1;
|
||||
}
|
||||
arsort($by_cat);
|
||||
|
||||
$data = [
|
||||
'total_html_pages' => count($all_html),
|
||||
'referenced' => count($referenced),
|
||||
'orphans_count' => count($orphans),
|
||||
'orphans' => $orphans,
|
||||
'by_category' => $by_cat,
|
||||
'scan_anchors' => $anchor_files,
|
||||
];
|
||||
}
|
||||
|
||||
$data['v'] = 'V96.19-pages-orphans-opus';
|
||||
$data['ts'] = date('c');
|
||||
$data['note'] = 'Scan files in /var/www/html/*.html not referenced from index/WTP. Wire suggestions provided per file.';
|
||||
|
||||
echo json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
|
||||
116
api/pol.wuom3ayj.tmp
Normal file
@@ -0,0 +1,116 @@
|
||||
<?php
|
||||
/**
|
||||
* Pages orphans list API V96.19
|
||||
* User WTP shows "54 pages orphelines détectées. Voir la liste"
|
||||
* But no API existed to return structured list with wire suggestions
|
||||
*
|
||||
* Endpoint: /api/pages-orphans-list.php
|
||||
* Returns: 54 orphans with category, last_modified, size, wire_suggestion
|
||||
*/
|
||||
header('Content-Type: application/json; charset=utf-8');
|
||||
header('Access-Control-Allow-Origin: *');
|
||||
|
||||
$DOCROOT = '/var/www/html';
|
||||
|
||||
// Read pages-index.php output if exists, else scan directly
|
||||
$orphans_file = "$DOCROOT/api/orphans-json.json";
|
||||
$data = @json_decode(@file_get_contents($orphans_file), true);
|
||||
|
||||
if (!is_array($data) || empty($data)) {
|
||||
// Fallback scan: find .html files not referenced from index.html or WTP
|
||||
$all_html = glob("$DOCROOT/*.html");
|
||||
$referenced = [];
|
||||
$anchor_files = [
|
||||
'index.html', 'weval-technology-platform.html', 'wtp.html',
|
||||
'admin-v2.html', 'admin.html', 'architecture.html', 'dg-command-center.html',
|
||||
'enterprise-model.html', 'wevia-master.html', 'tools-hub.html', 'apps.html',
|
||||
'agents-archi.html', 'nonreg.html', 'portal.html', 'portal-executive.html',
|
||||
'lean6sigma-dashboard.html', 'cartographie-screens.html', 'pages-index.html',
|
||||
'unified-hub.html', 'wevia-autonomy-dashboard.html', 'enterprise.html',
|
||||
'ethica-hub.html', 'cloudflare-hub.html', 'huawei-cloud.html', 'orphans-hub.html', 'go-100pct.html',
|
||||
'wevia-backoffice.html', 'wevia-business-visual-studio.html',
|
||||
];
|
||||
foreach ($anchor_files as $af) {
|
||||
$af_path = "$DOCROOT/$af";
|
||||
if (file_exists($af_path)) {
|
||||
$content = file_get_contents($af_path);
|
||||
if (preg_match_all('/href="\/?([a-z0-9_\-\xc0-\xff%]+\.html)"/iu', $content, $matches)) {
|
||||
foreach ($matches[1] as $m) $referenced[$m] = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$orphans = [];
|
||||
foreach ($all_html as $path) {
|
||||
$name = basename($path);
|
||||
// V96.21 filter out backup/gold files (legitimate archives, not real orphans)
|
||||
if (preg_match("/\\.(gold|backup|bak|orig|pre-|\\.pre-|\\.GOLD-)/i", $name)) continue;
|
||||
if (preg_match("/^\\./", $name)) continue; // hidden
|
||||
if (preg_match("/(\\d{8}|\\d{14})\\.html$/", $name)) continue; // date-stamped backups
|
||||
if (!isset($referenced[$name])) {
|
||||
$orphans[] = [
|
||||
'file' => $name,
|
||||
'size_bytes' => filesize($path),
|
||||
'last_modified' => date('c', filemtime($path)),
|
||||
'age_days' => round((time() - filemtime($path)) / 86400),
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
// Enrich with category + suggestion
|
||||
$categorize = function($name) {
|
||||
$n = strtolower($name);
|
||||
if (strpos($n, 'ethica') !== false) return ['marketing', 'Add link in WTP Marketing & Email module'];
|
||||
if (strpos($n, 'wevia') !== false) return ['ai', 'Add link in WTP Intelligence IA module'];
|
||||
if (strpos($n, 'wevads') !== false) return ['marketing', 'Add link in WTP Marketing & Email module'];
|
||||
if (strpos($n, 'sap') !== false || strpos($n, 'vistex') !== false) return ['erp', 'Add link in WTP ERP Integrations module'];
|
||||
if (strpos($n, 'huawei') !== false || strpos($n, 'cloud') !== false) return ['cloud', 'Add link in WTP Operations & Infra module'];
|
||||
if (strpos($n, 'agent') !== false) return ['ai', 'Add link in WTP Intelligence IA / RH & Talent'];
|
||||
if (strpos($n, 'test') !== false || strpos($n, 'demo') !== false) return ['dev', 'Archive to /tests/ or /demos/ folder'];
|
||||
if (strpos($n, 'admin') !== false || strpos($n, 'dashboard') !== false) return ['operations', 'Add to WTP Operations & Infra'];
|
||||
if (strpos($n, 'security') !== false || strpos($n, 'gdpr') !== false) return ['security', 'Add to WTP Security & Compliance'];
|
||||
if (strpos($n, 'consent') !== false || strpos($n, 'privacy') !== false) return ['legal', 'Link from footer legal/privacy'];
|
||||
if (strpos($n, 'ia') !== false || strpos($n, '-ai') !== false) return ['ai', 'Add link in WTP Intelligence IA'];
|
||||
if (strpos($n, 'landing') !== false || strpos($n, 'nearshore') !== false) return ['marketing-landing', 'Verify SEO referenced, else add to sitemap'];
|
||||
return ['other', 'Manual review - may be archived'];
|
||||
};
|
||||
|
||||
foreach ($orphans as &$o) {
|
||||
list($cat, $sug) = $categorize($o['file']);
|
||||
$o['category'] = $cat;
|
||||
$o['wire_suggestion'] = $sug;
|
||||
}
|
||||
unset($o); // WAVE 207 fix PHP by-ref leak
|
||||
// WAVE 207 dedup by file name (defensive)
|
||||
$seen = [];
|
||||
$unique = [];
|
||||
foreach ($orphans as $o2) {
|
||||
if (!isset($seen[$o2['file']])) {
|
||||
$seen[$o2['file']] = 1;
|
||||
$unique[] = $o2;
|
||||
}
|
||||
}
|
||||
$orphans = $unique;
|
||||
|
||||
// Count by category
|
||||
$by_cat = [];
|
||||
foreach ($orphans as $o) {
|
||||
$by_cat[$o['category']] = ($by_cat[$o['category']] ?? 0) + 1;
|
||||
}
|
||||
arsort($by_cat);
|
||||
|
||||
$data = [
|
||||
'total_html_pages' => count($all_html),
|
||||
'referenced' => count($referenced),
|
||||
'orphans_count' => count($orphans),
|
||||
'orphans' => $orphans,
|
||||
'by_category' => $by_cat,
|
||||
'scan_anchors' => $anchor_files,
|
||||
];
|
||||
}
|
||||
|
||||
$data['v'] = 'V96.19-pages-orphans-opus';
|
||||
$data['ts'] = date('c');
|
||||
$data['note'] = 'Scan files in /var/www/html/*.html not referenced from index/WTP. Wire suggestions provided per file.';
|
||||
|
||||
echo json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
|
||||
65
api/read_truth_registry.php
Normal file
@@ -0,0 +1,65 @@
|
||||
<?php
|
||||
/**
|
||||
* intent-opus4-read_truth_registry.php
|
||||
* AMBRE session · 2026-04-21
|
||||
* Ferme gap autonomie : remplace LLM fallback qui hallucinait "Yacine Khaled"
|
||||
* quand on demandait /api/wevia-truth-registry.json.
|
||||
* Doctrine #4 ZERO FAKE DATA — retourne les scalaires du vrai registry.
|
||||
* Invocation : /api/opus-arch-generic.php?tool=read_truth_registry
|
||||
*/
|
||||
header('Content-Type: application/json');
|
||||
|
||||
$candidates = [
|
||||
'/var/www/html/api/wevia-truth-registry.json',
|
||||
'/var/www/html/api/truth-registry.json',
|
||||
'/opt/wevads/vault/wevia-truth-registry.json',
|
||||
];
|
||||
$path = null;
|
||||
foreach ($candidates as $c) {
|
||||
if (file_exists($c)) { $path = $c; break; }
|
||||
}
|
||||
if (!$path) {
|
||||
echo json_encode(['ok'=>false, 'error'=>'truth registry not found', 'tried'=>$candidates]);
|
||||
exit;
|
||||
}
|
||||
|
||||
$raw = file_get_contents($path);
|
||||
$data = json_decode($raw, true);
|
||||
if (!is_array($data)) {
|
||||
echo json_encode(['ok'=>false, 'error'=>'invalid JSON', 'path'=>$path]);
|
||||
exit;
|
||||
}
|
||||
|
||||
// Extract scalars (flat values) + count nested arrays
|
||||
$scalars = [];
|
||||
$nested = [];
|
||||
foreach ($data as $k => $v) {
|
||||
if (is_array($v) || is_object($v)) {
|
||||
$nested[$k] = is_array($v) ? count($v) : 'object';
|
||||
} else {
|
||||
$scalars[$k] = $v;
|
||||
}
|
||||
}
|
||||
|
||||
// Pick the 10 most relevant headline metrics if they exist
|
||||
$headlines = [];
|
||||
foreach ([
|
||||
'agents_count','agents_total','intents_count','tools_count','providers_count',
|
||||
'skills_total','brains_count','doctrines_count','dashboards_count',
|
||||
'nonreg_score','l99_score','autonomy_level','autonomy_score',
|
||||
'ethica_hcps_total','pages_count','apis_count','crons_count','built_at','last_update'
|
||||
] as $key) {
|
||||
if (isset($data[$key]) && !is_array($data[$key])) {
|
||||
$headlines[$key] = $data[$key];
|
||||
}
|
||||
}
|
||||
|
||||
echo json_encode([
|
||||
'ok' => true,
|
||||
'path' => $path,
|
||||
'bytes' => strlen($raw),
|
||||
'headlines' => $headlines,
|
||||
'scalars' => $scalars,
|
||||
'nested' => $nested,
|
||||
'source' => 'intent-opus4-read_truth_registry.php · ambre · doctrine#4 honest · no hallucination',
|
||||
], JSON_PRETTY_PRINT);
|
||||
63
api/scan_file_handler.php
Normal file
@@ -0,0 +1,63 @@
|
||||
<?php
|
||||
/**
|
||||
* intent-opus4-scan_file.php
|
||||
* AMBRE session · 2026-04-21
|
||||
* Ferme gap autonomie : remplace LLM fallback hallucination quand on demande
|
||||
* l'état d'un fichier (wtp_state, wepredict_state, etc.).
|
||||
* Doctrine #4 ZERO FAKE DATA — retourne uniquement les faits stat+md5+version.
|
||||
* Invocation : /api/opus-arch-generic.php?tool=scan_file&path=/var/www/html/xxx.html
|
||||
*/
|
||||
header('Content-Type: application/json');
|
||||
|
||||
$target = $_GET['path'] ?? '/var/www/html/wepredict.html';
|
||||
|
||||
// Whitelist sécurité : ne lit que sous /var/www/html ou /opt/wevads
|
||||
$real = realpath($target);
|
||||
$allowed = ['/var/www/html/', '/opt/wevads/', '/opt/weval-l99/'];
|
||||
$ok_root = false;
|
||||
foreach ($allowed as $root) {
|
||||
if ($real && strpos($real, $root) === 0) { $ok_root = true; break; }
|
||||
}
|
||||
if (!$ok_root) {
|
||||
echo json_encode(['ok'=>false, 'error'=>'path outside allowed roots', 'path'=>$target]);
|
||||
exit;
|
||||
}
|
||||
if (!file_exists($real)) {
|
||||
echo json_encode(['ok'=>false, 'error'=>'file not found', 'path'=>$target]);
|
||||
exit;
|
||||
}
|
||||
|
||||
$stat = stat($real);
|
||||
$md5 = md5_file($real);
|
||||
$content = file_get_contents($real);
|
||||
|
||||
// Version extraction patterns (HTML, PHP, JS)
|
||||
$version = 'unknown';
|
||||
foreach ([
|
||||
'/data-version="([^"]+)"/',
|
||||
'/"wevia-version"\s+content="([^"]+)"/',
|
||||
'/@version\s+([^\s\*]+)/',
|
||||
'/VERSION\s*=\s*[\'"]([^\'"]+)/',
|
||||
] as $pat) {
|
||||
if (preg_match($pat, $content, $m)) { $version = $m[1]; break; }
|
||||
}
|
||||
|
||||
// Detect live URL if under /var/www/html
|
||||
$url = null;
|
||||
if (strpos($real, '/var/www/html/') === 0) {
|
||||
$rel = substr($real, strlen('/var/www/html/'));
|
||||
$url = 'https://weval-consulting.com/' . $rel;
|
||||
}
|
||||
|
||||
echo json_encode([
|
||||
'ok' => true,
|
||||
'path' => $real,
|
||||
'url' => $url,
|
||||
'size' => $stat['size'],
|
||||
'size_kb' => round($stat['size'] / 1024, 1),
|
||||
'mtime' => date('c', $stat['mtime']),
|
||||
'md5' => $md5,
|
||||
'version' => $version,
|
||||
'lines' => substr_count($content, "\n"),
|
||||
'source' => 'intent-opus4-scan_file.php · ambre · doctrine#4 honest',
|
||||
], JSON_PRETTY_PRINT);
|
||||
@@ -33,4 +33,4 @@ if (!$path) {
|
||||
|
||||
// Delegate to scan_file with extracted path
|
||||
$_GET['path'] = $path;
|
||||
include __DIR__ . '/wired-pending/intent-opus4-scan_file.php';
|
||||
include __DIR__ . '/scan_file_handler.php';
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"timestamp": "2026-04-21T14:30:12",
|
||||
"timestamp": "2026-04-21T15:30:11",
|
||||
"features": {
|
||||
"total": 36,
|
||||
"pass": 35
|
||||
@@ -13,7 +13,7 @@
|
||||
"score": 97.2,
|
||||
"log": [
|
||||
"=== UX AGENT v1.0 ===",
|
||||
"Time: 2026-04-21 14:30:02",
|
||||
"Time: 2026-04-21 15:30:02",
|
||||
" core: 4/4",
|
||||
" layout: 3/4",
|
||||
" interaction: 6/6",
|
||||
|
||||
29
api/v79_pages_registry.php
Normal file
@@ -0,0 +1,29 @@
|
||||
<?php
|
||||
return [
|
||||
'name' => 'v79_pages_registry',
|
||||
'triggers' => [
|
||||
'pages index',
|
||||
'referentiel pages',
|
||||
'referentiel des pages',
|
||||
'ou sont les pages',
|
||||
'ou sont les orphelins',
|
||||
'combien d orphelins',
|
||||
'orphelins pages',
|
||||
'audit orphelins',
|
||||
'toutes les pages',
|
||||
'liste des pages',
|
||||
'index pages',
|
||||
'relie toutes les pages',
|
||||
'archi des pages',
|
||||
'v79',
|
||||
'pages registry',
|
||||
'tous les hubs',
|
||||
'liste des hubs',
|
||||
'combien de hubs',
|
||||
],
|
||||
'cmd' => "echo '=== V79 PAGES REGISTRY · référentiel unifié ===' && curl -sk --max-time 3 'http://127.0.0.1:5890/api/wevia-pages-registry.php?action=summary' -H 'Host: weval-consulting.com' 2>/dev/null && echo && echo '=== Index navigable: https://weval-consulting.com/pages-index.html ==='",
|
||||
'status' => 'EXECUTED',
|
||||
'created_at' => '2026-04-19T14:37:00+00:00',
|
||||
'source' => 'opus-yacine-v79',
|
||||
'description' => 'Référentiel unifié de toutes les pages avec détection orphelins et index navigable'
|
||||
];
|
||||
24
api/v81_rescue_orphelins.php
Normal file
@@ -0,0 +1,24 @@
|
||||
<?php
|
||||
return [
|
||||
'name' => 'v81_rescue_orphelins',
|
||||
'triggers' => [
|
||||
'rescue orphelins',
|
||||
'rescuer les orphelins',
|
||||
'sauver les orphelins',
|
||||
'orphelins par classe',
|
||||
'liste orphelins detaillee',
|
||||
'v81',
|
||||
'comment relier orphelins',
|
||||
'ou rescuer orphelins',
|
||||
'orphelins sauvetage',
|
||||
'open drawer archi',
|
||||
'archi complete',
|
||||
'drawer wtp',
|
||||
'wtp drawer',
|
||||
],
|
||||
'cmd' => 'bash /var/www/html/api/v76-scripts/v81-orphans-rescue.sh',
|
||||
'status' => 'EXECUTED',
|
||||
'created_at' => '2026-04-19T17:10:00+00:00',
|
||||
'source' => 'opus-yacine-v81',
|
||||
'description' => 'Liste orphelins par classe + accès rescue depuis WTP drawer',
|
||||
];
|
||||
24
api/v82_point_entree.php
Normal file
@@ -0,0 +1,24 @@
|
||||
<?php
|
||||
return [
|
||||
'name' => 'v82_point_entree',
|
||||
'triggers' => [
|
||||
'point d entree',
|
||||
'ou est le point d entree',
|
||||
'par ou commencer',
|
||||
'ou je clique',
|
||||
'je me perds',
|
||||
'commence par ou',
|
||||
'ou est tout',
|
||||
'point entree unique',
|
||||
'wtp point entree',
|
||||
'acces archi',
|
||||
'comment naviguer',
|
||||
'ou trouver tout',
|
||||
'v82 consolidator',
|
||||
],
|
||||
'cmd' => 'bash /var/www/html/api/v76-scripts/v82-point-entree.sh',
|
||||
'status' => 'EXECUTED',
|
||||
'created_at' => '2026-04-19T17:20:00+00:00',
|
||||
'source' => 'opus-yacine-v82',
|
||||
'description' => 'WTP = point entrée UNIQUE · explique accès drawer + sidebar + chat',
|
||||
];
|
||||
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"ok": true,
|
||||
"version": "V83-business-kpi",
|
||||
"ts": "2026-04-21T12:37:22+00:00",
|
||||
"ts": "2026-04-21T13:40:17+00:00",
|
||||
"summary": {
|
||||
"total_categories": 8,
|
||||
"total_kpis": 64,
|
||||
"ok": 41,
|
||||
"warn": 20,
|
||||
"ok": 42,
|
||||
"warn": 19,
|
||||
"fail": 0,
|
||||
"wire_needed": 3,
|
||||
"data_completeness_pct": 95.3
|
||||
|
||||
24
api/v83_autonomie_status.php
Normal file
@@ -0,0 +1,24 @@
|
||||
<?php
|
||||
return [
|
||||
'name' => 'v83_autonomie_status',
|
||||
'triggers' => [
|
||||
'autonomie status',
|
||||
'statut autonomie',
|
||||
'etat autonomie',
|
||||
'ou en est autonomie',
|
||||
'verif deploiements',
|
||||
'v91 v92 v93 statut',
|
||||
'audit reel autonomie',
|
||||
'autonomie reelle',
|
||||
'quoi de neuf autonomie',
|
||||
'combien autonomie',
|
||||
'score autonomie',
|
||||
'v83 hub',
|
||||
'autonomie wevia',
|
||||
],
|
||||
'cmd' => 'bash /var/www/html/api/v76-scripts/v83-autonomie-status.sh',
|
||||
'status' => 'EXECUTED',
|
||||
'created_at' => '2026-04-19T17:30:00+00:00',
|
||||
'source' => 'opus-yacine-v83',
|
||||
'description' => 'Teste live V91 Safe Write + V92/V93 Decisions + D93 KPI + V81 feed + V84 cron',
|
||||
];
|
||||
BIN
api/v_opus_erp_20260421-145604/erp_full.png
Normal file
|
After Width: | Height: | Size: 248 KiB |
BIN
api/v_opus_erp_20260421-145604/erp_topright.png
Normal file
|
After Width: | Height: | Size: 34 KiB |
312
api/v_opus_godmode_20260421-152121/report.json
Normal file
@@ -0,0 +1,312 @@
|
||||
{
|
||||
"ts": "20260421-152121",
|
||||
"pages_tested": 30,
|
||||
"pages_ok": 29,
|
||||
"pages_with_overlaps": 1,
|
||||
"pages_error": 0,
|
||||
"total_overlaps": 1,
|
||||
"total_x_buttons": 148,
|
||||
"doctrine_loaded_count": 30,
|
||||
"results": [
|
||||
{
|
||||
"name": "wevia-erp-unified",
|
||||
"http": 200,
|
||||
"fixed": 3,
|
||||
"overlaps": 0,
|
||||
"xBtns": 2,
|
||||
"doctrine": true,
|
||||
"title": "WEVIA ERP \u00b7 Source unique v\u00e9rit\u00e9 \u00b7 Tableau bord premium",
|
||||
"bodyLen": 4166
|
||||
},
|
||||
{
|
||||
"name": "wepredict",
|
||||
"http": 200,
|
||||
"fixed": 2,
|
||||
"overlaps": 0,
|
||||
"xBtns": 64,
|
||||
"doctrine": true,
|
||||
"title": "WePredict Cockpit \u00b7 V146 \u00b7 WEVAL ecosystem",
|
||||
"bodyLen": 9397
|
||||
},
|
||||
{
|
||||
"name": "weval-technology-platform",
|
||||
"http": 200,
|
||||
"fixed": 6,
|
||||
"overlaps": 1,
|
||||
"xBtns": 4,
|
||||
"doctrine": true,
|
||||
"title": "WEVAL Technology Platform \u2014 All-in-One ERP Portal",
|
||||
"bodyLen": 15931
|
||||
},
|
||||
{
|
||||
"name": "wevia-master",
|
||||
"http": 200,
|
||||
"fixed": 1,
|
||||
"overlaps": 0,
|
||||
"xBtns": 1,
|
||||
"doctrine": true,
|
||||
"title": "WEVIA Master AI",
|
||||
"bodyLen": 974
|
||||
},
|
||||
{
|
||||
"name": "all-ia-hub",
|
||||
"http": 200,
|
||||
"fixed": 2,
|
||||
"overlaps": 0,
|
||||
"xBtns": 0,
|
||||
"doctrine": true,
|
||||
"title": "All-IA Hub \u2014 Remplacement Claude Code + Opus (Souverain)",
|
||||
"bodyLen": 902
|
||||
},
|
||||
{
|
||||
"name": "wevia-orchestrator",
|
||||
"http": 200,
|
||||
"fixed": 3,
|
||||
"overlaps": 0,
|
||||
"xBtns": 1,
|
||||
"doctrine": true,
|
||||
"title": "WEVIA \u2014 Orchestrator GODMODE",
|
||||
"bodyLen": 36233
|
||||
},
|
||||
{
|
||||
"name": "wevcode",
|
||||
"http": 200,
|
||||
"fixed": 3,
|
||||
"overlaps": 0,
|
||||
"xBtns": 2,
|
||||
"doctrine": true,
|
||||
"title": "WEVCODE \u2014 Sovereign Coding Agent",
|
||||
"bodyLen": 436
|
||||
},
|
||||
{
|
||||
"name": "wevia-unified-hub",
|
||||
"http": 200,
|
||||
"fixed": 4,
|
||||
"overlaps": 0,
|
||||
"xBtns": 2,
|
||||
"doctrine": true,
|
||||
"title": "WEVIA Unified Hub v2 \u00b7 tout d\u00e9dupliqu\u00e9",
|
||||
"bodyLen": 1934
|
||||
},
|
||||
{
|
||||
"name": "wevia-training",
|
||||
"http": 200,
|
||||
"fixed": 5,
|
||||
"overlaps": 0,
|
||||
"xBtns": 5,
|
||||
"doctrine": true,
|
||||
"title": "WEVIA Master Control Center \u2014 Training Auto + Brain Monitor",
|
||||
"bodyLen": 2892
|
||||
},
|
||||
{
|
||||
"name": "wiki",
|
||||
"http": 200,
|
||||
"fixed": 3,
|
||||
"overlaps": 0,
|
||||
"xBtns": 3,
|
||||
"doctrine": true,
|
||||
"title": "WEVIA \u2014 Wiki",
|
||||
"bodyLen": 32181
|
||||
},
|
||||
{
|
||||
"name": "cartographie-screens",
|
||||
"http": 200,
|
||||
"fixed": 3,
|
||||
"overlaps": 0,
|
||||
"xBtns": 1,
|
||||
"doctrine": true,
|
||||
"title": "WEVADS Cartographie Exhaustive Ecrans - 3914",
|
||||
"bodyLen": 25625
|
||||
},
|
||||
{
|
||||
"name": "orphans-hub",
|
||||
"http": 200,
|
||||
"fixed": 4,
|
||||
"overlaps": 0,
|
||||
"xBtns": 3,
|
||||
"doctrine": true,
|
||||
"title": "\ud83d\udcc7 Orphans Hub \u00b7 All pages wired",
|
||||
"bodyLen": 9675
|
||||
},
|
||||
{
|
||||
"name": "admin",
|
||||
"http": 200,
|
||||
"fixed": 5,
|
||||
"overlaps": 0,
|
||||
"xBtns": 4,
|
||||
"doctrine": true,
|
||||
"title": "WEVAL Admin",
|
||||
"bodyLen": 8067
|
||||
},
|
||||
{
|
||||
"name": "agents-archi",
|
||||
"http": 200,
|
||||
"fixed": 12,
|
||||
"overlaps": 0,
|
||||
"xBtns": 12,
|
||||
"doctrine": true,
|
||||
"title": "WEVIA \u2014 Architecture Agents IA 3D",
|
||||
"bodyLen": 3649
|
||||
},
|
||||
{
|
||||
"name": "director-center",
|
||||
"http": 200,
|
||||
"fixed": 5,
|
||||
"overlaps": 0,
|
||||
"xBtns": 6,
|
||||
"doctrine": true,
|
||||
"title": "WEVIA Director \u2014 Autonomous Center",
|
||||
"bodyLen": 2131
|
||||
},
|
||||
{
|
||||
"name": "tools-hub",
|
||||
"http": 200,
|
||||
"fixed": 3,
|
||||
"overlaps": 0,
|
||||
"xBtns": 3,
|
||||
"doctrine": true,
|
||||
"title": "WEVAL Tools Hub \u2014 \u00c9cosyst\u00e8me Souverain",
|
||||
"bodyLen": 11188
|
||||
},
|
||||
{
|
||||
"name": "enterprise-model",
|
||||
"http": 200,
|
||||
"fixed": 5,
|
||||
"overlaps": 0,
|
||||
"xBtns": 6,
|
||||
"doctrine": true,
|
||||
"title": "WEVAL Enterprise Model",
|
||||
"bodyLen": 512
|
||||
},
|
||||
{
|
||||
"name": "wevia-backoffice",
|
||||
"http": 200,
|
||||
"fixed": 2,
|
||||
"overlaps": 0,
|
||||
"xBtns": 1,
|
||||
"doctrine": true,
|
||||
"title": "WEVAL \u00b7 WEVIA Backoffice",
|
||||
"bodyLen": 206
|
||||
},
|
||||
{
|
||||
"name": "dg-command-center",
|
||||
"http": 200,
|
||||
"fixed": 2,
|
||||
"overlaps": 0,
|
||||
"xBtns": 1,
|
||||
"doctrine": true,
|
||||
"title": "WEVAL \u00b7 DG Command Center \u2014 Real-time Pilotage",
|
||||
"bodyLen": 4371
|
||||
},
|
||||
{
|
||||
"name": "dmaic-tracker-NEW",
|
||||
"http": 200,
|
||||
"fixed": 3,
|
||||
"overlaps": 0,
|
||||
"xBtns": 2,
|
||||
"doctrine": true,
|
||||
"title": "DMAIC Tracker NEW \u2014 WEVAL Lean 6\u03c3",
|
||||
"bodyLen": 1271
|
||||
},
|
||||
{
|
||||
"name": "ethica-hub",
|
||||
"http": 200,
|
||||
"fixed": 3,
|
||||
"overlaps": 0,
|
||||
"xBtns": 2,
|
||||
"doctrine": true,
|
||||
"title": "Ethica Hub \u2014 WEVAL",
|
||||
"bodyLen": 2985
|
||||
},
|
||||
{
|
||||
"name": "wevads-hub",
|
||||
"http": 200,
|
||||
"fixed": 3,
|
||||
"overlaps": 0,
|
||||
"xBtns": 2,
|
||||
"doctrine": true,
|
||||
"title": "WEVADS Hub \u2014 WEVAL",
|
||||
"bodyLen": 808
|
||||
},
|
||||
{
|
||||
"name": "agents-hub",
|
||||
"http": 200,
|
||||
"fixed": 4,
|
||||
"overlaps": 0,
|
||||
"xBtns": 3,
|
||||
"doctrine": true,
|
||||
"title": "Agents Hub \u2014 WEVAL",
|
||||
"bodyLen": 959
|
||||
},
|
||||
{
|
||||
"name": "email-hub",
|
||||
"http": 200,
|
||||
"fixed": 3,
|
||||
"overlaps": 0,
|
||||
"xBtns": 2,
|
||||
"doctrine": true,
|
||||
"title": "Email MTA Hub \u2014 WEVAL",
|
||||
"bodyLen": 1918
|
||||
},
|
||||
{
|
||||
"name": "anthropic-hub",
|
||||
"http": 200,
|
||||
"fixed": 4,
|
||||
"overlaps": 0,
|
||||
"xBtns": 3,
|
||||
"doctrine": true,
|
||||
"title": "Anthropic Hub \u2014 WEVAL",
|
||||
"bodyLen": 627
|
||||
},
|
||||
{
|
||||
"name": "cloudflare-hub",
|
||||
"http": 200,
|
||||
"fixed": 3,
|
||||
"overlaps": 0,
|
||||
"xBtns": 2,
|
||||
"doctrine": true,
|
||||
"title": "Cloudflare Hub \u2014 WEVAL",
|
||||
"bodyLen": 2041
|
||||
},
|
||||
{
|
||||
"name": "office-hub",
|
||||
"http": 200,
|
||||
"fixed": 3,
|
||||
"overlaps": 0,
|
||||
"xBtns": 2,
|
||||
"doctrine": true,
|
||||
"title": "Office 365 Hub \u2014 WEVAL",
|
||||
"bodyLen": 2162
|
||||
},
|
||||
{
|
||||
"name": "gpu-hub",
|
||||
"http": 200,
|
||||
"fixed": 3,
|
||||
"overlaps": 0,
|
||||
"xBtns": 2,
|
||||
"doctrine": true,
|
||||
"title": "GPU Free Hub \u2014 WEVAL",
|
||||
"bodyLen": 2245
|
||||
},
|
||||
{
|
||||
"name": "monitoring-hub",
|
||||
"http": 200,
|
||||
"fixed": 3,
|
||||
"overlaps": 0,
|
||||
"xBtns": 3,
|
||||
"doctrine": true,
|
||||
"title": "Monitoring Hub \u2014 WEVAL",
|
||||
"bodyLen": 1948
|
||||
},
|
||||
{
|
||||
"name": "security-hub",
|
||||
"http": 200,
|
||||
"fixed": 4,
|
||||
"overlaps": 0,
|
||||
"xBtns": 4,
|
||||
"doctrine": true,
|
||||
"title": "Security Hub \u2014 WEVAL",
|
||||
"bodyLen": 944
|
||||
}
|
||||
]
|
||||
}
|
||||
178
api/v_opus_mass_overlap_20260421-150832/report.json
Normal file
@@ -0,0 +1,178 @@
|
||||
{
|
||||
"ts": "20260421-150832",
|
||||
"results": [
|
||||
{
|
||||
"name": "wevia-erp-unified",
|
||||
"http": 200,
|
||||
"fixed": 3,
|
||||
"overlaps": [],
|
||||
"x_buttons": 2,
|
||||
"doctrine": true
|
||||
},
|
||||
{
|
||||
"name": "wepredict",
|
||||
"http": 200,
|
||||
"fixed": 2,
|
||||
"overlaps": [],
|
||||
"x_buttons": 64,
|
||||
"doctrine": true
|
||||
},
|
||||
{
|
||||
"name": "weval-technology-platform",
|
||||
"http": 200,
|
||||
"fixed": 6,
|
||||
"overlaps": [
|
||||
{
|
||||
"a": "v80-drawer",
|
||||
"b": "v80-header"
|
||||
}
|
||||
],
|
||||
"x_buttons": 4,
|
||||
"doctrine": true
|
||||
},
|
||||
{
|
||||
"name": "wevia-master",
|
||||
"http": 200,
|
||||
"fixed": 1,
|
||||
"overlaps": [],
|
||||
"x_buttons": 1,
|
||||
"doctrine": true
|
||||
},
|
||||
{
|
||||
"name": "all-ia-hub",
|
||||
"http": 200,
|
||||
"fixed": 2,
|
||||
"overlaps": [],
|
||||
"x_buttons": 0,
|
||||
"doctrine": true
|
||||
},
|
||||
{
|
||||
"name": "wevia-orchestrator",
|
||||
"http": 200,
|
||||
"fixed": 3,
|
||||
"overlaps": [],
|
||||
"x_buttons": 1,
|
||||
"doctrine": true
|
||||
},
|
||||
{
|
||||
"name": "wevcode",
|
||||
"http": 200,
|
||||
"fixed": 3,
|
||||
"overlaps": [],
|
||||
"x_buttons": 2,
|
||||
"doctrine": true
|
||||
},
|
||||
{
|
||||
"name": "wevia-unified-hub",
|
||||
"http": 200,
|
||||
"fixed": 4,
|
||||
"overlaps": [],
|
||||
"x_buttons": 2,
|
||||
"doctrine": true
|
||||
},
|
||||
{
|
||||
"name": "wevia-training",
|
||||
"http": 200,
|
||||
"fixed": 5,
|
||||
"overlaps": [],
|
||||
"x_buttons": 5,
|
||||
"doctrine": true
|
||||
},
|
||||
{
|
||||
"name": "wiki",
|
||||
"http": 200,
|
||||
"fixed": 4,
|
||||
"overlaps": [
|
||||
{
|
||||
"a": "wtp-carto-banner",
|
||||
"b": "opus-honest-badge"
|
||||
}
|
||||
],
|
||||
"x_buttons": 0,
|
||||
"doctrine": false
|
||||
},
|
||||
{
|
||||
"name": "cartographie-screens",
|
||||
"http": 200,
|
||||
"fixed": 3,
|
||||
"overlaps": [],
|
||||
"x_buttons": 1,
|
||||
"doctrine": true
|
||||
},
|
||||
{
|
||||
"name": "orphans-hub",
|
||||
"http": 200,
|
||||
"fixed": 4,
|
||||
"overlaps": [],
|
||||
"x_buttons": 3,
|
||||
"doctrine": true
|
||||
},
|
||||
{
|
||||
"name": "admin",
|
||||
"http": 200,
|
||||
"fixed": 5,
|
||||
"overlaps": [],
|
||||
"x_buttons": 4,
|
||||
"doctrine": true
|
||||
},
|
||||
{
|
||||
"name": "agents-archi",
|
||||
"http": 200,
|
||||
"fixed": 13,
|
||||
"overlaps": [],
|
||||
"x_buttons": 12,
|
||||
"doctrine": true
|
||||
},
|
||||
{
|
||||
"name": "director-center",
|
||||
"http": 200,
|
||||
"fixed": 5,
|
||||
"overlaps": [],
|
||||
"x_buttons": 6,
|
||||
"doctrine": true
|
||||
},
|
||||
{
|
||||
"name": "tools-hub",
|
||||
"http": 200,
|
||||
"fixed": 3,
|
||||
"overlaps": [],
|
||||
"x_buttons": 3,
|
||||
"doctrine": true
|
||||
},
|
||||
{
|
||||
"name": "enterprise-model",
|
||||
"http": 200,
|
||||
"fixed": 5,
|
||||
"overlaps": [],
|
||||
"x_buttons": 6,
|
||||
"doctrine": true
|
||||
},
|
||||
{
|
||||
"name": "wevia-backoffice",
|
||||
"http": 200,
|
||||
"fixed": 2,
|
||||
"overlaps": [],
|
||||
"x_buttons": 1,
|
||||
"doctrine": true
|
||||
},
|
||||
{
|
||||
"name": "dg-command-center",
|
||||
"http": 200,
|
||||
"fixed": 2,
|
||||
"overlaps": [],
|
||||
"x_buttons": 1,
|
||||
"doctrine": true
|
||||
},
|
||||
{
|
||||
"name": "dmaic-tracker-NEW",
|
||||
"http": 200,
|
||||
"fixed": 3,
|
||||
"overlaps": [],
|
||||
"x_buttons": 2,
|
||||
"doctrine": true
|
||||
}
|
||||
],
|
||||
"total_overlaps": 2,
|
||||
"pages_ok": 18,
|
||||
"total_x_buttons": 120
|
||||
}
|
||||
BIN
api/v_opus_overlap_20260421-144621/all-ia-hub_01_normal.png
Normal file
|
After Width: | Height: | Size: 88 KiB |
BIN
api/v_opus_overlap_20260421-144621/all-ia-hub_02_topright.png
Normal file
|
After Width: | Height: | Size: 8.4 KiB |
BIN
api/v_opus_overlap_20260421-144621/all-ia-hub_03_botleft.png
Normal file
|
After Width: | Height: | Size: 8.6 KiB |
BIN
api/v_opus_overlap_20260421-144621/cartographie_01_normal.png
Normal file
|
After Width: | Height: | Size: 206 KiB |
BIN
api/v_opus_overlap_20260421-144621/cartographie_02_topright.png
Normal file
|
After Width: | Height: | Size: 24 KiB |
BIN
api/v_opus_overlap_20260421-144621/cartographie_03_botleft.png
Normal file
|
After Width: | Height: | Size: 3.9 KiB |
BIN
api/v_opus_overlap_20260421-144621/master_01_normal.png
Normal file
|
After Width: | Height: | Size: 107 KiB |
BIN
api/v_opus_overlap_20260421-144621/master_02_topright.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
api/v_opus_overlap_20260421-144621/master_03_botleft.png
Normal file
|
After Width: | Height: | Size: 3.9 KiB |
BIN
api/v_opus_overlap_20260421-144621/orchestrator_01_normal.png
Normal file
|
After Width: | Height: | Size: 199 KiB |
BIN
api/v_opus_overlap_20260421-144621/orchestrator_02_topright.png
Normal file
|
After Width: | Height: | Size: 24 KiB |
BIN
api/v_opus_overlap_20260421-144621/orchestrator_03_botleft.png
Normal file
|
After Width: | Height: | Size: 17 KiB |
BIN
api/v_opus_overlap_20260421-144621/orphans-hub_01_normal.png
Normal file
|
After Width: | Height: | Size: 164 KiB |
BIN
api/v_opus_overlap_20260421-144621/orphans-hub_02_topright.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
api/v_opus_overlap_20260421-144621/orphans-hub_03_botleft.png
Normal file
|
After Width: | Height: | Size: 7.5 KiB |
485
api/v_opus_overlap_20260421-144621/report.json
Normal file
@@ -0,0 +1,485 @@
|
||||
{
|
||||
"ts": "20260421-144621",
|
||||
"out_dir": "/var/www/html/api/v_opus_overlap_20260421-144621",
|
||||
"results": [
|
||||
{
|
||||
"name": "wepredict",
|
||||
"url": "https://weval-consulting.com/wepredict.html",
|
||||
"http": 200,
|
||||
"fixed_count": 2,
|
||||
"overlaps_count": 0,
|
||||
"overlaps": [],
|
||||
"fixed_preview": [
|
||||
{
|
||||
"tag": "NAV",
|
||||
"id": "",
|
||||
"cls": "xnav",
|
||||
"text": "\u2190 WTP\n /\n All-IA\n /\n Arena\n /\n WEV",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"w": 1920,
|
||||
"h": 64,
|
||||
"zIndex": "50",
|
||||
"position": "sticky"
|
||||
},
|
||||
{
|
||||
"tag": "A",
|
||||
"id": "weval-gl",
|
||||
"cls": "",
|
||||
"text": "Logout",
|
||||
"x": 1848,
|
||||
"y": 74,
|
||||
"w": 60,
|
||||
"h": 25,
|
||||
"zIndex": "99990",
|
||||
"position": "fixed"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "wtp",
|
||||
"url": "https://weval-consulting.com/weval-technology-platform.html",
|
||||
"error": "Page.goto: Timeout 25000ms exceeded.\nCall log:\n - navigating to \"https://weval-consulting.com/weval-technology-platform.html\", waiting until \"network"
|
||||
},
|
||||
{
|
||||
"name": "master",
|
||||
"url": "https://weval-consulting.com/wevia-master.html",
|
||||
"http": 200,
|
||||
"fixed_count": 1,
|
||||
"overlaps_count": 0,
|
||||
"overlaps": [],
|
||||
"fixed_preview": [
|
||||
{
|
||||
"tag": "DIV",
|
||||
"id": "opus-xlinks",
|
||||
"cls": "",
|
||||
"text": "WTP\n IA Hub\n Orch\n WevCode\n Arena\n\n ",
|
||||
"x": 1528,
|
||||
"y": 12,
|
||||
"w": 380,
|
||||
"h": 58,
|
||||
"zIndex": "9998",
|
||||
"position": "fixed"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "all-ia-hub",
|
||||
"url": "https://weval-consulting.com/all-ia-hub.html",
|
||||
"http": 200,
|
||||
"fixed_count": 2,
|
||||
"overlaps_count": 0,
|
||||
"overlaps": [],
|
||||
"fixed_preview": [
|
||||
{
|
||||
"tag": "A",
|
||||
"id": "opus-droid-link",
|
||||
"cls": "",
|
||||
"text": "Droid",
|
||||
"x": 1834,
|
||||
"y": 1030,
|
||||
"w": 66,
|
||||
"h": 30,
|
||||
"zIndex": "9997",
|
||||
"position": "fixed"
|
||||
},
|
||||
{
|
||||
"tag": "DIV",
|
||||
"id": "v142-footer",
|
||||
"cls": "",
|
||||
"text": "A+ 100%\n L99 304/304\n Tools 158\n Dock",
|
||||
"x": 0,
|
||||
"y": 1062,
|
||||
"w": 1920,
|
||||
"h": 18,
|
||||
"zIndex": "40",
|
||||
"position": "fixed"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "orchestrator",
|
||||
"url": "https://weval-consulting.com/wevia-orchestrator.html",
|
||||
"http": 200,
|
||||
"fixed_count": 3,
|
||||
"overlaps_count": 0,
|
||||
"overlaps": [],
|
||||
"fixed_preview": [
|
||||
{
|
||||
"tag": "A",
|
||||
"id": "weval-gl",
|
||||
"cls": "",
|
||||
"text": "Logout",
|
||||
"x": 1848,
|
||||
"y": 78,
|
||||
"w": 60,
|
||||
"h": 25,
|
||||
"zIndex": "99990",
|
||||
"position": "fixed"
|
||||
},
|
||||
{
|
||||
"tag": "A",
|
||||
"id": "opus-droid-link",
|
||||
"cls": "",
|
||||
"text": "Droid",
|
||||
"x": 1839,
|
||||
"y": 1029,
|
||||
"w": 61,
|
||||
"h": 31,
|
||||
"zIndex": "9997",
|
||||
"position": "fixed"
|
||||
},
|
||||
{
|
||||
"tag": "DIV",
|
||||
"id": "wtp-udock",
|
||||
"cls": "",
|
||||
"text": "WTPIA HubMasterOrchWevCodeArenaDroidAdmi",
|
||||
"x": 1488,
|
||||
"y": 12,
|
||||
"w": 420,
|
||||
"h": 56,
|
||||
"zIndex": "9998",
|
||||
"position": "fixed"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "training",
|
||||
"url": "https://weval-consulting.com/wevia-training.html",
|
||||
"http": 200,
|
||||
"fixed_count": 6,
|
||||
"overlaps_count": 1,
|
||||
"overlaps": [
|
||||
{
|
||||
"a": "wtpEnrichBanner",
|
||||
"b": "opus-honest-badge",
|
||||
"overlap_area": 2388,
|
||||
"ratio": "1.00"
|
||||
}
|
||||
],
|
||||
"fixed_preview": [
|
||||
{
|
||||
"tag": "DIV",
|
||||
"id": "",
|
||||
"cls": "topbar",
|
||||
"text": "WEVIA Master Control CenterV77 \u00b7 Trainin",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"w": 1920,
|
||||
"h": 107,
|
||||
"zIndex": "100",
|
||||
"position": "sticky"
|
||||
},
|
||||
{
|
||||
"tag": "DIV",
|
||||
"id": "wtpGapFillBanner",
|
||||
"cls": "wtp-gapfill-banner",
|
||||
"text": "\ud83c\udfaf WEVAL Agents Gap-Fill ERP\n23 gaps\nSAP",
|
||||
"x": 0,
|
||||
"y": 1038,
|
||||
"w": 1920,
|
||||
"h": 42,
|
||||
"zIndex": "99999",
|
||||
"position": "fixed"
|
||||
},
|
||||
{
|
||||
"tag": "DIV",
|
||||
"id": "wtpEnrichBanner",
|
||||
"cls": "wtp-enrich-banner",
|
||||
"text": "\ud83c\udfdb\ufe0f Enterprise Model 16 depts\n \ud83c\udd95 Meeti",
|
||||
"x": 0,
|
||||
"y": 1090,
|
||||
"w": 1908,
|
||||
"h": 20,
|
||||
"zIndex": "9999",
|
||||
"position": "fixed"
|
||||
},
|
||||
{
|
||||
"tag": "A",
|
||||
"id": "weval-gl",
|
||||
"cls": "",
|
||||
"text": "Logout",
|
||||
"x": 1848,
|
||||
"y": 190,
|
||||
"w": 60,
|
||||
"h": 25,
|
||||
"zIndex": "99990",
|
||||
"position": "fixed"
|
||||
},
|
||||
{
|
||||
"tag": "DIV",
|
||||
"id": "wtp-udock",
|
||||
"cls": "",
|
||||
"text": "WTPIA HubMasterOrchWevCodeArenaDroidAdmi",
|
||||
"x": 1488,
|
||||
"y": 117,
|
||||
"w": 420,
|
||||
"h": 63,
|
||||
"zIndex": "9998",
|
||||
"position": "fixed"
|
||||
},
|
||||
{
|
||||
"tag": "DIV",
|
||||
"id": "opus-honest-badge",
|
||||
"cls": "",
|
||||
"text": "\u2713 NR 199/201 \u00b7 not-6sigma live\u00d7",
|
||||
"x": 1709,
|
||||
"y": 1090,
|
||||
"w": 199,
|
||||
"h": 12,
|
||||
"zIndex": "99993",
|
||||
"position": "fixed"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "wiki",
|
||||
"url": "https://weval-consulting.com/wiki.html",
|
||||
"http": 200,
|
||||
"fixed_count": 3,
|
||||
"overlaps_count": 0,
|
||||
"overlaps": [],
|
||||
"fixed_preview": [
|
||||
{
|
||||
"tag": "DIV",
|
||||
"id": "",
|
||||
"cls": "",
|
||||
"text": "\ud83d\uddfa Cartographie live\n511 UP / 0 Lent / 0",
|
||||
"x": 1036,
|
||||
"y": 53,
|
||||
"w": 864,
|
||||
"h": 1007,
|
||||
"zIndex": "9999",
|
||||
"position": "fixed"
|
||||
},
|
||||
{
|
||||
"tag": "A",
|
||||
"id": "weval-gl",
|
||||
"cls": "",
|
||||
"text": "Logout",
|
||||
"x": 1848,
|
||||
"y": 10,
|
||||
"w": 60,
|
||||
"h": 25,
|
||||
"zIndex": "99990",
|
||||
"position": "fixed"
|
||||
},
|
||||
{
|
||||
"tag": "DIV",
|
||||
"id": "opus-honest-badge",
|
||||
"cls": "",
|
||||
"text": "\u2713 NR 199/201 \u00b7 not-6sigma live\u00d7",
|
||||
"x": 1709,
|
||||
"y": 1070,
|
||||
"w": 199,
|
||||
"h": 12,
|
||||
"zIndex": "99993",
|
||||
"position": "fixed"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "unified-hub",
|
||||
"url": "https://weval-consulting.com/wevia-unified-hub.html",
|
||||
"http": 200,
|
||||
"fixed_count": 4,
|
||||
"overlaps_count": 0,
|
||||
"overlaps": [],
|
||||
"fixed_preview": [
|
||||
{
|
||||
"tag": "ASIDE",
|
||||
"id": "",
|
||||
"cls": "sidebar",
|
||||
"text": "\ud83c\udfe0 ERP Pivots\n \n \ud83c\udfe0 WTP\n \ud83c\udf08",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"w": 240,
|
||||
"h": 1080,
|
||||
"zIndex": "auto",
|
||||
"position": "sticky"
|
||||
},
|
||||
{
|
||||
"tag": "A",
|
||||
"id": "opus-droid-link",
|
||||
"cls": "",
|
||||
"text": "Droid",
|
||||
"x": 1839,
|
||||
"y": 1026,
|
||||
"w": 61,
|
||||
"h": 34,
|
||||
"zIndex": "9997",
|
||||
"position": "fixed"
|
||||
},
|
||||
{
|
||||
"tag": "A",
|
||||
"id": "weval-gl",
|
||||
"cls": "",
|
||||
"text": "Logout",
|
||||
"x": 1848,
|
||||
"y": 85,
|
||||
"w": 60,
|
||||
"h": 25,
|
||||
"zIndex": "99990",
|
||||
"position": "fixed"
|
||||
},
|
||||
{
|
||||
"tag": "DIV",
|
||||
"id": "wtp-udock",
|
||||
"cls": "",
|
||||
"text": "WTPIA HubMasterOrchWevCodeArenaDroidAdmi",
|
||||
"x": 1488,
|
||||
"y": 12,
|
||||
"w": 420,
|
||||
"h": 63,
|
||||
"zIndex": "9998",
|
||||
"position": "fixed"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "cartographie",
|
||||
"url": "https://weval-consulting.com/cartographie-screens.html",
|
||||
"http": 200,
|
||||
"fixed_count": 3,
|
||||
"overlaps_count": 0,
|
||||
"overlaps": [],
|
||||
"fixed_preview": [
|
||||
{
|
||||
"tag": "BUTTON",
|
||||
"id": "",
|
||||
"cls": "preview-toggle",
|
||||
"text": "Previews: ON",
|
||||
"x": 16,
|
||||
"y": 16,
|
||||
"w": 103,
|
||||
"h": 28,
|
||||
"zIndex": "1000",
|
||||
"position": "fixed"
|
||||
},
|
||||
{
|
||||
"tag": "A",
|
||||
"id": "weval-gl",
|
||||
"cls": "",
|
||||
"text": "Logout",
|
||||
"x": 1848,
|
||||
"y": 85,
|
||||
"w": 60,
|
||||
"h": 25,
|
||||
"zIndex": "99990",
|
||||
"position": "fixed"
|
||||
},
|
||||
{
|
||||
"tag": "DIV",
|
||||
"id": "wtp-udock",
|
||||
"cls": "",
|
||||
"text": "WTPIA HubMasterOrchWevCodeArenaDroidAdmi",
|
||||
"x": 1488,
|
||||
"y": 12,
|
||||
"w": 420,
|
||||
"h": 63,
|
||||
"zIndex": "9998",
|
||||
"position": "fixed"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "orphans-hub",
|
||||
"url": "https://weval-consulting.com/orphans-hub.html",
|
||||
"http": 200,
|
||||
"fixed_count": 4,
|
||||
"overlaps_count": 0,
|
||||
"overlaps": [],
|
||||
"fixed_preview": [
|
||||
{
|
||||
"tag": "DIV",
|
||||
"id": "orphans-premium-toolbar",
|
||||
"cls": "",
|
||||
"text": "248 pages\n \n ToutWEVIA & IAOpsBusiness",
|
||||
"x": 260,
|
||||
"y": 30,
|
||||
"w": 1400,
|
||||
"h": 59,
|
||||
"zIndex": "9000",
|
||||
"position": "sticky"
|
||||
},
|
||||
{
|
||||
"tag": "DIV",
|
||||
"id": "",
|
||||
"cls": "",
|
||||
"text": "\ud83d\udd2e WePredict\u00d7",
|
||||
"x": 1797,
|
||||
"y": 980,
|
||||
"w": 103,
|
||||
"h": 30,
|
||||
"zIndex": "9997",
|
||||
"position": "fixed"
|
||||
},
|
||||
{
|
||||
"tag": "A",
|
||||
"id": "weval-gl",
|
||||
"cls": "",
|
||||
"text": "Logout",
|
||||
"x": 1848,
|
||||
"y": 78,
|
||||
"w": 60,
|
||||
"h": 25,
|
||||
"zIndex": "99990",
|
||||
"position": "fixed"
|
||||
},
|
||||
{
|
||||
"tag": "DIV",
|
||||
"id": "wtp-udock",
|
||||
"cls": "",
|
||||
"text": "WTPIA HubMasterOrchWevCodeArenaDroidAdmi",
|
||||
"x": 1488,
|
||||
"y": 99,
|
||||
"w": 420,
|
||||
"h": 57,
|
||||
"zIndex": "9998",
|
||||
"position": "fixed"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"videos": [
|
||||
"16d53400609be8e81038ee49d7ba254f.webm",
|
||||
"19063ce98f8bcd78ad77808ab4692f30.webm",
|
||||
"37f086e86ed3836e523527596aaf74e1.webm",
|
||||
"3b933fd3e8f4b656d3f2c43344e4eae7.webm",
|
||||
"82f281972dde42cf79bd168d9ae1f27c.webm",
|
||||
"84d278138814697a6be956e2e65c544b.webm",
|
||||
"940057562877f4db9284191411190d78.webm",
|
||||
"9a891a82e957277d8a742630667f0a62.webm",
|
||||
"a4ec1672aa54ae8b977f7895e3192985.webm",
|
||||
"ac3ea8750633fc56549e1e5d136396aa.webm"
|
||||
],
|
||||
"screenshots": [
|
||||
"all-ia-hub_01_normal.png",
|
||||
"all-ia-hub_02_topright.png",
|
||||
"all-ia-hub_03_botleft.png",
|
||||
"cartographie_01_normal.png",
|
||||
"cartographie_02_topright.png",
|
||||
"cartographie_03_botleft.png",
|
||||
"master_01_normal.png",
|
||||
"master_02_topright.png",
|
||||
"master_03_botleft.png",
|
||||
"orchestrator_01_normal.png",
|
||||
"orchestrator_02_topright.png",
|
||||
"orchestrator_03_botleft.png",
|
||||
"orphans-hub_01_normal.png",
|
||||
"orphans-hub_02_topright.png",
|
||||
"orphans-hub_03_botleft.png",
|
||||
"training_01_normal.png",
|
||||
"training_02_topright.png",
|
||||
"training_03_botleft.png",
|
||||
"unified-hub_01_normal.png",
|
||||
"unified-hub_02_topright.png",
|
||||
"unified-hub_03_botleft.png",
|
||||
"wepredict_01_normal.png",
|
||||
"wepredict_02_topright.png",
|
||||
"wepredict_03_botleft.png",
|
||||
"wiki_01_normal.png",
|
||||
"wiki_02_topright.png",
|
||||
"wiki_03_botleft.png"
|
||||
]
|
||||
}
|
||||
BIN
api/v_opus_overlap_20260421-144621/training_01_normal.png
Normal file
|
After Width: | Height: | Size: 265 KiB |
BIN
api/v_opus_overlap_20260421-144621/training_02_topright.png
Normal file
|
After Width: | Height: | Size: 30 KiB |
BIN
api/v_opus_overlap_20260421-144621/training_03_botleft.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
api/v_opus_overlap_20260421-144621/unified-hub_01_normal.png
Normal file
|
After Width: | Height: | Size: 248 KiB |
BIN
api/v_opus_overlap_20260421-144621/unified-hub_02_topright.png
Normal file
|
After Width: | Height: | Size: 21 KiB |