Compare commits
90 Commits
wave-215-a
...
wave-220-a
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6b25030a3c | ||
|
|
0456d672ff | ||
|
|
151ffbae63 | ||
|
|
28678e4b47 | ||
|
|
d6e82b4b86 | ||
|
|
99b9df00c0 | ||
|
|
b1d25f329d | ||
|
|
f33599517d | ||
|
|
927e3aaaa0 | ||
|
|
b1997fedd7 | ||
|
|
3e2ae4708e | ||
|
|
065a4f33b6 | ||
|
|
1d540d16be | ||
|
|
87a1c0f0bd | ||
|
|
149a5f4ce8 | ||
|
|
5d83d1643a | ||
|
|
150d0d4dc8 | ||
|
|
d402da46f0 | ||
|
|
5d4265f307 | ||
|
|
f1d91b48ff | ||
|
|
6f995f624d | ||
|
|
bd1e9568d5 | ||
|
|
8c9e214153 | ||
|
|
d5dce6ea86 | ||
|
|
e6bc3c0523 | ||
|
|
4197c5dbaf | ||
|
|
cf95bf9fae | ||
|
|
a1b0b3e36e | ||
|
|
1c1c3fe604 | ||
|
|
fda0d21ca5 | ||
|
|
ddbfde476b | ||
|
|
c2437eecfd | ||
|
|
1dbaa747e1 | ||
|
|
d0938f8944 | ||
|
|
3924d91b2b | ||
|
|
ead2dcfc4a | ||
|
|
8f8aee325a | ||
|
|
f709a64db8 | ||
|
|
601617d446 | ||
|
|
abe624d03e | ||
|
|
953bb4414f | ||
|
|
c7bd363ad7 | ||
|
|
ef96d08f0e | ||
|
|
cbd6b4a03a | ||
|
|
b7d40c7503 | ||
|
|
4199cd3ff0 | ||
|
|
b6dcdc7770 | ||
|
|
7807e3feb6 | ||
|
|
34902f4714 | ||
|
|
aaca72d969 | ||
|
|
541420e1fe | ||
|
|
eca9d344f9 | ||
|
|
ad828e1e53 | ||
|
|
d6f6b89e72 | ||
|
|
f1921776ff | ||
|
|
bc20d19b4a | ||
|
|
ef1412d144 | ||
|
|
3e35ae52c0 | ||
|
|
b23c7f2fa8 | ||
|
|
fb43bef9cc | ||
|
|
1bd5572777 | ||
|
|
b9f9afcbd6 | ||
|
|
98b153deae | ||
|
|
8805740235 | ||
|
|
44e9c6aef2 | ||
|
|
9534414da4 | ||
|
|
a44eaa78ca | ||
|
|
46305ae822 | ||
|
|
b477374a61 | ||
|
|
cd6a22911a | ||
|
|
ecf3c428be | ||
|
|
31b38ccaaa | ||
|
|
c75e9d76b4 | ||
|
|
08d170b2de | ||
|
|
147f5341e9 | ||
|
|
372ca9d069 | ||
|
|
8b8c227a78 | ||
|
|
0d91482bfd | ||
|
|
9664c70408 | ||
|
|
184aab3b80 | ||
|
|
87e388d78d | ||
|
|
9f469187a0 | ||
|
|
9e1293c3c9 | ||
|
|
82b2eabf5f | ||
|
|
ec0351df90 | ||
|
|
77773bb0d9 | ||
|
|
99d2dccbba | ||
|
|
05d106a478 | ||
|
|
30b53a14b9 | ||
|
|
bc73c1d984 |
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"agent": "V41_Disk_Monitor",
|
||||
"ts": "2026-04-21T16:30:01+02:00",
|
||||
"ts": "2026-04-21T22:30:01+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-21T16:30:03+02:00",
|
||||
"ts": "2026-04-21T22:45:03+02:00",
|
||||
"dg_alerts_active": 7,
|
||||
"wevia_life_stats_preview": "{
|
||||
"ok": true,
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
{
|
||||
"routes": 445,
|
||||
"routes": 446,
|
||||
"skills": 835,
|
||||
"wiki": 1928,
|
||||
"pages": 293,
|
||||
"apis": 250,
|
||||
"wiki": 2046,
|
||||
"pages": 317,
|
||||
"apis": 251,
|
||||
"docker": 19,
|
||||
"proposals": [
|
||||
{
|
||||
@@ -27,5 +27,5 @@
|
||||
"effort": "S"
|
||||
}
|
||||
],
|
||||
"timestamp": "2026-04-21 10:00"
|
||||
"timestamp": "2026-04-21 16:00"
|
||||
}
|
||||
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"agent": "V41_Feature_Adoption_Tracker",
|
||||
"ts": "2026-04-21T16:00:02+02:00",
|
||||
"ts": "2026-04-21T22:00:02+02:00",
|
||||
"features_tracked": 15,
|
||||
"features_used_24h": 12,
|
||||
"adoption_pct": 80,
|
||||
"chat_queries_last_1k_log": 5,
|
||||
"wtp_views_last_1k_log": 34,
|
||||
"dg_views_last_1k_log": 3,
|
||||
"features_used_24h": 9,
|
||||
"adoption_pct": 60,
|
||||
"chat_queries_last_1k_log": 0,
|
||||
"wtp_views_last_1k_log": 0,
|
||||
"dg_views_last_1k_log": 0,
|
||||
"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-21T16:40:02+02:00",
|
||||
"ts": "2026-04-21T22:50:03+02:00",
|
||||
"paperclip_total": 48,
|
||||
"active_customer": 4,
|
||||
"warm_prospect": 5,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"agent": "V41_MQL_Scoring",
|
||||
"ts": "2026-04-21T16:00:03+02:00",
|
||||
"ts": "2026-04-21T22:00:03+02:00",
|
||||
"leads_total": 48,
|
||||
"mql_current": 16,
|
||||
"sql_current": 6,
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
{
|
||||
"agent": "V54_Risk_Monitor_Live",
|
||||
"ts": "2026-04-21T16:30:03+02:00",
|
||||
"ts": "2026-04-21T22:30:02+02:00",
|
||||
"critical_risks": {
|
||||
"RW01_pipeline_vide": {
|
||||
"pipeline_keur": 0,
|
||||
"mql_auto": 20,
|
||||
"residual_risk_pct": 80,
|
||||
"mql_auto": 17,
|
||||
"residual_risk_pct": 83,
|
||||
"trend": "mitigation_V42_V45_active"
|
||||
},
|
||||
"RW02_dependance_ethica": {
|
||||
@@ -22,7 +22,7 @@
|
||||
},
|
||||
"RW12_burnout": {
|
||||
"agents_cron_active": 15,
|
||||
"load_5min": "2.42",
|
||||
"load_5min": "3.98",
|
||||
"automation_coverage_pct": 70,
|
||||
"residual_risk_pct": 60,
|
||||
"trend": "V52_goldratt_options_active"
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
{
|
||||
"timestamp": "2026-04-21 16:00",
|
||||
"timestamp": "2026-04-21 22:00",
|
||||
"sections": {
|
||||
"servers": {
|
||||
"S204": {
|
||||
"docker": 19,
|
||||
"disk": "82%",
|
||||
"ram": "11Gi/30Gi",
|
||||
"load": "9.88",
|
||||
"uptime": "up 1 week, 4 hours, 8 minutes"
|
||||
"ram": "12Gi/30Gi",
|
||||
"load": "9.85",
|
||||
"uptime": "up 1 week, 10 hours, 8 minutes"
|
||||
}
|
||||
},
|
||||
"docker": {
|
||||
@@ -25,17 +25,17 @@
|
||||
},
|
||||
{
|
||||
"name": "plausible-plausible-1",
|
||||
"status": "Up 3 days",
|
||||
"status": "Up 4 days",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "plausible-plausible-db-1",
|
||||
"status": "Up 3 days",
|
||||
"status": "Up 4 days",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "plausible-plausible-events-db-1",
|
||||
"status": "Up 3 days",
|
||||
"status": "Up 4 days",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
@@ -95,7 +95,7 @@
|
||||
},
|
||||
{
|
||||
"name": "uptime-kuma",
|
||||
"status": "Up 38 hours (healthy)",
|
||||
"status": "Up 44 hours (healthy)",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
@@ -480,7 +480,7 @@
|
||||
]
|
||||
},
|
||||
"pages": {
|
||||
"count": 315
|
||||
"count": 317
|
||||
},
|
||||
"opt_tools": {
|
||||
"count": 91
|
||||
@@ -489,7 +489,7 @@
|
||||
"pairs": 5751
|
||||
},
|
||||
"wiki": {
|
||||
"entries": 1988
|
||||
"entries": 2066
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"generated_at": "2026-04-21T12:00:02.392163",
|
||||
"generated_at": "2026-04-21T18:00:03.108093",
|
||||
"agent_version": "V69_enhanced",
|
||||
"pages_scanned": 9,
|
||||
"fixed_elements_checked": 19,
|
||||
@@ -9,7 +9,7 @@
|
||||
"issues": [
|
||||
{
|
||||
"page": "weval-technology-platform.html",
|
||||
"element": "opus-droid-link",
|
||||
"element": "opus-orphans-count-text",
|
||||
"type": "inline",
|
||||
"corner": "bottom-right",
|
||||
"z": 9997,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"timestamp": "2026-04-21T10:00:05+00:00",
|
||||
"compute_ms": 2668,
|
||||
"timestamp": "2026-04-21T16:00:05+00:00",
|
||||
"compute_ms": 2343,
|
||||
"metrics": {
|
||||
"agents": 0,
|
||||
"agents_hierarchy": 0,
|
||||
@@ -12,19 +12,19 @@
|
||||
"nonreg_rate": 100,
|
||||
"oss_tools": 765,
|
||||
"oss_skills": 734,
|
||||
"oss_tests": 762,
|
||||
"oss_tests": 765,
|
||||
"docker": 19,
|
||||
"ollama_models": 7,
|
||||
"git_repos": 38,
|
||||
"providers": [
|
||||
{
|
||||
"name": "Cerebras",
|
||||
"latency_ms": 485,
|
||||
"latency_ms": 609,
|
||||
"status": "up"
|
||||
},
|
||||
{
|
||||
"name": "Groq",
|
||||
"latency_ms": 1007,
|
||||
"latency_ms": 499,
|
||||
"status": "up"
|
||||
}
|
||||
]
|
||||
|
||||
11
api/ambre-gold-check.php
Normal file
@@ -0,0 +1,11 @@
|
||||
<?php
|
||||
header("Content-Type: application/json");
|
||||
// Find GOLD backups of wevia.html today
|
||||
$cmd = "ls -lt /opt/wevads/vault/wevia.html.GOLD-20260421-* 2>/dev/null | head -10";
|
||||
$out = @shell_exec($cmd);
|
||||
echo json_encode([
|
||||
"backups" => array_filter(array_map("trim", explode("\n", $out ?: ""))),
|
||||
"live_size" => filesize("/var/www/html/wevia.html"),
|
||||
"live_mtime" => gmdate("c", filemtime("/var/www/html/wevia.html")),
|
||||
"live_md5" => md5_file("/var/www/html/wevia.html"),
|
||||
], JSON_PRETTY_PRINT);
|
||||
73
api/ambre-pw-debug.php
Normal file
@@ -0,0 +1,73 @@
|
||||
<?php
|
||||
header("Content-Type: application/json");
|
||||
$base = "/var/www/html/api/ambre-pw-tests";
|
||||
$spec = <<<'JS'
|
||||
const { test, expect } = require("@playwright/test");
|
||||
|
||||
test("debug router click flow", async ({ page }) => {
|
||||
test.setTimeout(120000);
|
||||
|
||||
// Capture console logs
|
||||
const logs = [];
|
||||
page.on("console", msg => {
|
||||
logs.push(`[${msg.type()}] ${msg.text().substring(0, 300)}`);
|
||||
});
|
||||
|
||||
// Inject diagnostic script
|
||||
await page.addInitScript(() => {
|
||||
window.__ambre_fetch_calls = [];
|
||||
const origFetch = window.fetch;
|
||||
window.fetch = function(...args) {
|
||||
window.__ambre_fetch_calls.push({url: args[0], body: args[1] && args[1].body ? args[1].body.toString().substring(0, 200) : null});
|
||||
return origFetch.apply(this, args);
|
||||
};
|
||||
});
|
||||
|
||||
await page.goto("/wevia.html");
|
||||
await page.waitForLoadState("networkidle");
|
||||
await page.waitForTimeout(1500);
|
||||
|
||||
// Send PDF
|
||||
const input = page.locator("#msgInput");
|
||||
await input.fill("Genere un PDF sur: test debug");
|
||||
await input.press("Enter");
|
||||
await page.waitForTimeout(8000);
|
||||
|
||||
// Dump state
|
||||
const state = await page.evaluate(() => ({
|
||||
busy: typeof busy !== "undefined" ? busy : "undefined",
|
||||
pendingFile: typeof pendingFile !== "undefined" ? pendingFile : "undefined",
|
||||
fetch_calls: window.__ambre_fetch_calls || [],
|
||||
msg_input_disabled: document.getElementById("msgInput").disabled,
|
||||
msg_input_value: document.getElementById("msgInput").value,
|
||||
assistant_count: document.querySelectorAll(".msg.assistant").length,
|
||||
user_count: document.querySelectorAll(".msg.user").length,
|
||||
has_router: !!window._ambre_gen_pat,
|
||||
}));
|
||||
|
||||
console.log("=== STATE AFTER PDF SEND ===");
|
||||
console.log(JSON.stringify(state, null, 2));
|
||||
|
||||
// Now try 2nd message
|
||||
await input.fill("Genere un document Word sur: test2");
|
||||
await input.press("Enter");
|
||||
await page.waitForTimeout(8000);
|
||||
|
||||
const state2 = await page.evaluate(() => ({
|
||||
busy: typeof busy !== "undefined" ? busy : "undefined",
|
||||
fetch_calls_count: (window.__ambre_fetch_calls || []).length,
|
||||
last_fetch: (window.__ambre_fetch_calls || []).slice(-3),
|
||||
assistant_count: document.querySelectorAll(".msg.assistant").length,
|
||||
user_count: document.querySelectorAll(".msg.user").length,
|
||||
}));
|
||||
console.log("=== STATE AFTER WORD SEND ===");
|
||||
console.log(JSON.stringify(state2, null, 2));
|
||||
|
||||
// Write logs to file
|
||||
require("fs").writeFileSync("output/debug-console.log", logs.join("\n"));
|
||||
});
|
||||
JS;
|
||||
file_put_contents("$base/tests/debug-flow.spec.js", $spec);
|
||||
// Remove v5 to not rerun
|
||||
@unlink("$base/tests/chat-capabilities-v5.spec.js");
|
||||
echo json_encode(["ok"=>true, "size"=>filesize("$base/tests/debug-flow.spec.js")]);
|
||||
10
api/ambre-pw-kill.php
Normal file
@@ -0,0 +1,10 @@
|
||||
<?php
|
||||
header("Content-Type: application/json");
|
||||
// Kill running playwright processes
|
||||
$killed = @shell_exec("pkill -f playwright 2>&1");
|
||||
sleep(1);
|
||||
$still = @shell_exec("ps aux | grep playwright | grep -v grep | wc -l");
|
||||
echo json_encode([
|
||||
"killed_output" => trim($killed ?: ""),
|
||||
"processes_remaining" => trim($still ?: ""),
|
||||
], JSON_PRETTY_PRINT);
|
||||
11
api/ambre-pw-killall.php
Normal file
@@ -0,0 +1,11 @@
|
||||
<?php
|
||||
header("Content-Type: application/json");
|
||||
$out = [];
|
||||
// Try multiple kill methods
|
||||
$out["pkill_user"] = trim(@shell_exec("pkill -9 -u www-data -f playwright 2>&1") ?: "(empty)");
|
||||
$out["pkill_f_all"] = trim(@shell_exec("pkill -9 -f chat-capabilities 2>&1") ?: "(empty)");
|
||||
$out["pkill_node"] = trim(@shell_exec("pkill -9 -f "node.*playwright" 2>&1") ?: "(empty)");
|
||||
sleep(2);
|
||||
$out["remaining"] = trim(@shell_exec("ps -ef | grep -E "playwright|chromium.*headless" | grep -v grep | wc -l") ?: "0");
|
||||
$out["procs_snapshot"] = trim(@shell_exec("ps -ef | grep playwright | grep -v grep | awk "{print \$2, \$10, \$11}" | head -10") ?: "");
|
||||
echo json_encode($out, JSON_PRETTY_PRINT);
|
||||
13
api/ambre-pw-listnow.php
Normal file
@@ -0,0 +1,13 @@
|
||||
<?php
|
||||
header("Content-Type: application/json");
|
||||
$base = "/var/www/html/api/ambre-pw-tests/output";
|
||||
$out = ["pngs"=>[], "videos"=>[]];
|
||||
foreach (glob("$base/v*.png") as $p) {
|
||||
$out["pngs"][] = ["name"=>basename($p), "kb"=>round(filesize($p)/1024,1), "mtime"=>gmdate("H:i:s", filemtime($p))];
|
||||
}
|
||||
usort($out["pngs"], function($a,$b){return strcmp($a["name"], $b["name"]);});
|
||||
|
||||
foreach (glob("$base/chat-capabilities-v*/*.webm") as $w) {
|
||||
$out["videos"][] = ["name"=>basename(dirname($w)), "mb"=>round(filesize($w)/1048576,2), "mtime"=>gmdate("H:i:s", filemtime($w))];
|
||||
}
|
||||
echo json_encode($out, JSON_PRETTY_PRINT);
|
||||
10
api/ambre-pw-procs.php
Normal file
@@ -0,0 +1,10 @@
|
||||
<?php
|
||||
header("Content-Type: application/json");
|
||||
$procs = @shell_exec("pgrep -af playwright 2>&1 | head -5");
|
||||
$logs = glob("/tmp/ambre-pw-run-*.log");
|
||||
usort($logs, function($a,$b){return filemtime($b)-filemtime($a);});
|
||||
echo json_encode([
|
||||
"procs" => trim($procs ?: ""),
|
||||
"latest_log" => $logs ? basename($logs[0]) : "",
|
||||
"latest_size" => $logs ? filesize($logs[0]) : 0,
|
||||
], JSON_PRETTY_PRINT);
|
||||
@@ -1,4 +0,0 @@
|
||||
{
|
||||
"status": "passed",
|
||||
"failedTests": []
|
||||
}
|
||||
|
Before Width: | Height: | Size: 91 KiB |
@@ -1,179 +0,0 @@
|
||||
{
|
||||
"config": {
|
||||
"configFile": "/var/www/html/api/ambre-pw-tests/playwright.config.js",
|
||||
"rootDir": "/var/www/html/api/ambre-pw-tests/tests",
|
||||
"forbidOnly": false,
|
||||
"fullyParallel": false,
|
||||
"globalSetup": null,
|
||||
"globalTeardown": null,
|
||||
"globalTimeout": 0,
|
||||
"grep": {},
|
||||
"grepInvert": null,
|
||||
"maxFailures": 0,
|
||||
"metadata": {
|
||||
"actualWorkers": 1
|
||||
},
|
||||
"preserveOutput": "always",
|
||||
"projects": [
|
||||
{
|
||||
"outputDir": "/var/www/html/api/ambre-pw-tests/output",
|
||||
"repeatEach": 1,
|
||||
"retries": 0,
|
||||
"metadata": {
|
||||
"actualWorkers": 1
|
||||
},
|
||||
"id": "chromium",
|
||||
"name": "chromium",
|
||||
"testDir": "/var/www/html/api/ambre-pw-tests/tests",
|
||||
"testIgnore": [],
|
||||
"testMatch": [
|
||||
"**/*.@(spec|test).?(c|m)[jt]s?(x)"
|
||||
],
|
||||
"timeout": 120000
|
||||
}
|
||||
],
|
||||
"quiet": false,
|
||||
"reporter": [
|
||||
[
|
||||
"list",
|
||||
null
|
||||
],
|
||||
[
|
||||
"json",
|
||||
{
|
||||
"outputFile": "./output/results.json"
|
||||
}
|
||||
]
|
||||
],
|
||||
"reportSlowTests": {
|
||||
"max": 5,
|
||||
"threshold": 300000
|
||||
},
|
||||
"shard": null,
|
||||
"tags": [],
|
||||
"updateSnapshots": "missing",
|
||||
"updateSourceMethod": "patch",
|
||||
"version": "1.59.1",
|
||||
"workers": 1,
|
||||
"webServer": null
|
||||
},
|
||||
"suites": [
|
||||
{
|
||||
"title": "chat-capabilities-v2.spec.js",
|
||||
"file": "chat-capabilities-v2.spec.js",
|
||||
"column": 0,
|
||||
"line": 0,
|
||||
"specs": [
|
||||
{
|
||||
"title": "8 capabilities wevia chat v2",
|
||||
"ok": true,
|
||||
"tags": [],
|
||||
"tests": [
|
||||
{
|
||||
"timeout": 240000,
|
||||
"annotations": [],
|
||||
"expectedStatus": "passed",
|
||||
"projectId": "chromium",
|
||||
"projectName": "chromium",
|
||||
"results": [
|
||||
{
|
||||
"workerIndex": 0,
|
||||
"parallelIndex": 0,
|
||||
"status": "passed",
|
||||
"duration": 129719,
|
||||
"errors": [],
|
||||
"stdout": [
|
||||
{
|
||||
"text": "📸 Initial state captured\n"
|
||||
},
|
||||
{
|
||||
"text": "[01] PDF: Genere un PDF sur: demo\n"
|
||||
},
|
||||
{
|
||||
"text": " ✅ PDF screenshot\n"
|
||||
},
|
||||
{
|
||||
"text": "[02] Word: Genere un document Word sur: demo\n"
|
||||
},
|
||||
{
|
||||
"text": " ✅ Word screenshot\n"
|
||||
},
|
||||
{
|
||||
"text": "[03] PPT: Genere une presentation sur: demo\n"
|
||||
},
|
||||
{
|
||||
"text": " ✅ PPT screenshot\n"
|
||||
},
|
||||
{
|
||||
"text": "[04] Mermaid: Genere un schema mermaid pour: demo\n"
|
||||
},
|
||||
{
|
||||
"text": " ✅ Mermaid screenshot\n"
|
||||
},
|
||||
{
|
||||
"text": "[05] Image: Genere une image: demo\n"
|
||||
},
|
||||
{
|
||||
"text": " ✅ Image screenshot\n"
|
||||
},
|
||||
{
|
||||
"text": "[06] Code: Ecris le code python pour: fibonacci\n"
|
||||
},
|
||||
{
|
||||
"text": " ✅ Code screenshot\n"
|
||||
},
|
||||
{
|
||||
"text": "[07] Traduire: Traduis en anglais: bonjour\n"
|
||||
},
|
||||
{
|
||||
"text": " ✅ Traduire screenshot\n"
|
||||
},
|
||||
{
|
||||
"text": "[08] Ping: ping\n"
|
||||
},
|
||||
{
|
||||
"text": " ✅ Ping screenshot\n"
|
||||
},
|
||||
{
|
||||
"text": "✅ Test 8/8 terminé\n"
|
||||
}
|
||||
],
|
||||
"stderr": [],
|
||||
"retry": 0,
|
||||
"startTime": "2026-04-21T14:40:50.563Z",
|
||||
"annotations": [],
|
||||
"attachments": [
|
||||
{
|
||||
"name": "screenshot",
|
||||
"contentType": "image/png",
|
||||
"path": "/var/www/html/api/ambre-pw-tests/output/chat-capabilities-v2-8-capabilities-wevia-chat-v2-chromium/test-finished-1.png"
|
||||
},
|
||||
{
|
||||
"name": "video",
|
||||
"contentType": "video/webm",
|
||||
"path": "/var/www/html/api/ambre-pw-tests/output/chat-capabilities-v2-8-capabilities-wevia-chat-v2-chromium/video.webm"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"status": "expected"
|
||||
}
|
||||
],
|
||||
"id": "42a6daa3f20cd9254d4a-390328c0310cc9e78f72",
|
||||
"file": "chat-capabilities-v2.spec.js",
|
||||
"line": 14,
|
||||
"column": 1
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"errors": [],
|
||||
"stats": {
|
||||
"startTime": "2026-04-21T14:40:49.936Z",
|
||||
"duration": 130533.22899999999,
|
||||
"expected": 1,
|
||||
"skipped": 0,
|
||||
"unexpected": 0,
|
||||
"flaky": 0
|
||||
}
|
||||
}
|
||||
|
Before Width: | Height: | Size: 56 KiB |
|
Before Width: | Height: | Size: 93 KiB |
|
Before Width: | Height: | Size: 93 KiB |
|
Before Width: | Height: | Size: 93 KiB |
|
Before Width: | Height: | Size: 93 KiB |
|
Before Width: | Height: | Size: 93 KiB |
|
Before Width: | Height: | Size: 94 KiB |
|
Before Width: | Height: | Size: 93 KiB |
|
Before Width: | Height: | Size: 91 KiB |
|
Before Width: | Height: | Size: 91 KiB |
BIN
api/ambre-pw-tests/output/v7-00-initial.png
Normal file
|
After Width: | Height: | Size: 64 KiB |
BIN
api/ambre-pw-tests/output/v7-01-PDF.png
Normal file
|
After Width: | Height: | Size: 114 KiB |
BIN
api/ambre-pw-tests/output/v7-02-Word.png
Normal file
|
After Width: | Height: | Size: 133 KiB |
@@ -2,7 +2,7 @@
|
||||
const { defineConfig, devices } = require("@playwright/test");
|
||||
module.exports = defineConfig({
|
||||
testDir: "./tests",
|
||||
timeout: 120000,
|
||||
timeout: 420000,
|
||||
retries: 0,
|
||||
workers: 1,
|
||||
use: {
|
||||
@@ -10,12 +10,10 @@ module.exports = defineConfig({
|
||||
trace: "off",
|
||||
screenshot: "on",
|
||||
video: "on",
|
||||
viewport: { width: 1280, height: 720 },
|
||||
viewport: { width: 1920, height: 1080 },
|
||||
ignoreHTTPSErrors: true,
|
||||
},
|
||||
outputDir: "./output",
|
||||
reporter: [["list"], ["json", { outputFile: "./output/results.json" }]],
|
||||
projects: [
|
||||
{ name: "chromium", use: { ...devices["Desktop Chrome"] } },
|
||||
],
|
||||
projects: [{ name: "chromium", use: { ...devices["Desktop Chrome"], viewport: { width: 1920, height: 1080 } } }],
|
||||
});
|
||||
113
api/ambre-pw-tests/tests/capabilities-v7.spec.js
Normal file
@@ -0,0 +1,113 @@
|
||||
const { test, expect } = require("@playwright/test");
|
||||
|
||||
const CAPABILITIES = [
|
||||
{ name: "PDF", msg: "Genere un PDF sur: strategie WEVIA 2026", needle: "generated/wevia-" },
|
||||
{ name: "Word", msg: "Genere un document Word sur: procedure qualite", needle: "generated/wevia-" },
|
||||
{ name: "PPT", msg: "Genere une presentation sur: pitch deck investor", needle: "generated/wevia-" },
|
||||
{ name: "Mermaid", msg: "Genere un schema mermaid pour: workflow commandes", needle: "graph TD" },
|
||||
{ name: "Image", msg: "Genere une image: paysage nature forest", needle: "generated/wevia-img" },
|
||||
{ name: "Code", msg: "Ecris le code python pour: fibonacci recursif", needle: "wevia-code" },
|
||||
{ name: "Traduire", msg: "Traduis en anglais: merci beaucoup mon ami", needle: "English" },
|
||||
{ name: "Bilan", msg: "bilan complet system", needle: "WEVIA" },
|
||||
];
|
||||
|
||||
test("V7 8/8 capabilities · robust JSON + retry · full video", async ({ page }) => {
|
||||
test.setTimeout(480000);
|
||||
|
||||
let errorCount = 0;
|
||||
page.on("pageerror", err => { errorCount++; console.log(`[err] ${err.message.substring(0, 150)}`); });
|
||||
page.on("console", msg => {
|
||||
if (msg.type() === "error") {
|
||||
const t = msg.text();
|
||||
if (!t.includes("503") && !t.includes("favicon")) console.log(`[console err] ${t.substring(0, 150)}`);
|
||||
}
|
||||
});
|
||||
|
||||
await page.goto("/wevia.html");
|
||||
await page.waitForLoadState("networkidle");
|
||||
await page.waitForTimeout(2500);
|
||||
await page.screenshot({ path: "output/v7-00-initial.png", fullPage: false });
|
||||
console.log("📸 Initial v7 captured");
|
||||
|
||||
const results = [];
|
||||
|
||||
for (let i = 0; i < CAPABILITIES.length; i++) {
|
||||
const cap = CAPABILITIES[i];
|
||||
const num = String(i + 1).padStart(2, "0");
|
||||
console.log(`\n[${num}/8] ${cap.name}`);
|
||||
console.log(` msg: ${cap.msg}`);
|
||||
|
||||
let success = false;
|
||||
let attempts = 0;
|
||||
const maxAttempts = 2;
|
||||
|
||||
while (!success && attempts < maxAttempts) {
|
||||
attempts++;
|
||||
const attemptLabel = attempts > 1 ? ` (retry ${attempts})` : "";
|
||||
|
||||
try {
|
||||
const beforeNeedleCount = await page.evaluate((n) =>
|
||||
(document.body.innerText.match(new RegExp(n.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"), "g")) || []).length
|
||||
, cap.needle);
|
||||
|
||||
const input = page.locator("#msgInput");
|
||||
await input.click({ force: true });
|
||||
await page.keyboard.press("Control+A");
|
||||
await page.keyboard.press("Delete");
|
||||
await input.fill(cap.msg);
|
||||
await page.waitForTimeout(400);
|
||||
await input.press("Enter");
|
||||
console.log(` 📤 sent${attemptLabel} (needle "${cap.needle}" before: ${beforeNeedleCount})`);
|
||||
|
||||
const waitStart = Date.now();
|
||||
while (Date.now() - waitStart < 45000) {
|
||||
const afterCount = await page.evaluate((n) =>
|
||||
(document.body.innerText.match(new RegExp(n.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"), "g")) || []).length
|
||||
, cap.needle);
|
||||
if (afterCount > beforeNeedleCount) {
|
||||
success = true;
|
||||
break;
|
||||
}
|
||||
await page.waitForTimeout(1500);
|
||||
}
|
||||
const elapsed = ((Date.now() - waitStart) / 1000).toFixed(1);
|
||||
|
||||
if (success) {
|
||||
console.log(` ✅ PASS in ${elapsed}s${attemptLabel}`);
|
||||
} else {
|
||||
console.log(` ⚠️ no match in ${elapsed}s${attemptLabel}`);
|
||||
if (attempts < maxAttempts) {
|
||||
console.log(` 🔁 will retry...`);
|
||||
await page.waitForTimeout(3000);
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
console.log(` ❌ attempt${attemptLabel} err: ${e.message.substring(0, 100)}`);
|
||||
if (attempts < maxAttempts) await page.waitForTimeout(2000);
|
||||
}
|
||||
}
|
||||
|
||||
// Scroll + screenshot
|
||||
await page.evaluate(() => {
|
||||
const msgs = document.getElementById("messages");
|
||||
if (msgs) msgs.scrollTop = msgs.scrollHeight;
|
||||
});
|
||||
await page.waitForTimeout(2500);
|
||||
await page.screenshot({ path: `output/v7-${num}-${cap.name}.png`, fullPage: false });
|
||||
console.log(` 📸 v7-${num}-${cap.name}.png`);
|
||||
|
||||
results.push({ name: cap.name, pass: success, attempts: attempts });
|
||||
await page.waitForTimeout(1500);
|
||||
}
|
||||
|
||||
// Final full page
|
||||
await page.evaluate(() => window.scrollTo(0, document.body.scrollHeight));
|
||||
await page.waitForTimeout(2000);
|
||||
await page.screenshot({ path: "output/v7-99-final.png", fullPage: true });
|
||||
|
||||
const passCount = results.filter(r => r.pass).length;
|
||||
console.log(`\n═══ V7 BILAN ═══`);
|
||||
console.log(`Result: ${passCount}/8 capabilities PASS`);
|
||||
console.log(`Page errors: ${errorCount}`);
|
||||
results.forEach(r => console.log(` ${r.pass ? "✅" : "❌"} ${r.name} (${r.attempts} attempt${r.attempts>1?"s":""})`));
|
||||
});
|
||||
@@ -1,48 +0,0 @@
|
||||
const { test, expect } = require("@playwright/test");
|
||||
|
||||
const CAPABILITIES = [
|
||||
{ name: "PDF", msg: "Genere un PDF sur: demo" },
|
||||
{ name: "Word", msg: "Genere un document Word sur: demo" },
|
||||
{ name: "PPT", msg: "Genere une presentation sur: demo" },
|
||||
{ name: "Mermaid", msg: "Genere un schema mermaid pour: demo" },
|
||||
{ name: "Image", msg: "Genere une image: demo" },
|
||||
{ name: "Code", msg: "Ecris le code python pour: fibonacci" },
|
||||
{ name: "Traduire", msg: "Traduis en anglais: bonjour" },
|
||||
{ name: "Ping", msg: "ping" },
|
||||
];
|
||||
|
||||
test("8 capabilities wevia chat v2", async ({ page }) => {
|
||||
test.setTimeout(240000);
|
||||
|
||||
await page.goto("/wevia.html");
|
||||
await page.waitForLoadState("networkidle");
|
||||
await page.waitForTimeout(1200);
|
||||
await page.screenshot({ path: "output/v2-00-initial.png" });
|
||||
console.log("📸 Initial state captured");
|
||||
|
||||
const input = page.locator("#msgInput");
|
||||
|
||||
for (let i = 0; i < CAPABILITIES.length; i++) {
|
||||
const cap = CAPABILITIES[i];
|
||||
const num = String(i + 1).padStart(2, "0");
|
||||
console.log(`[${num}] ${cap.name}: ${cap.msg}`);
|
||||
|
||||
try {
|
||||
await input.click({ timeout: 5000 });
|
||||
await input.fill(cap.msg);
|
||||
await page.waitForTimeout(300);
|
||||
await input.press("Enter");
|
||||
|
||||
// Wait for response message to appear (shorter timeout)
|
||||
await page.waitForTimeout(15000); // 15s fixed wait per test
|
||||
|
||||
await page.screenshot({ path: `output/v2-${num}-${cap.name}.png` });
|
||||
console.log(` ✅ ${cap.name} screenshot`);
|
||||
} catch (e) {
|
||||
console.log(` ⚠️ ${cap.name} error: ${e.message.substring(0, 80)}`);
|
||||
}
|
||||
}
|
||||
|
||||
await page.screenshot({ path: "output/v2-99-final.png", fullPage: true });
|
||||
console.log("✅ Test 8/8 terminé");
|
||||
});
|
||||
23
api/ambre-pw-v3-files.php
Normal file
@@ -0,0 +1,23 @@
|
||||
<?php
|
||||
header("Content-Type: application/json");
|
||||
$base = "/var/www/html/api/ambre-pw-tests/output";
|
||||
$out = ["v3_screenshots"=>[], "v3_video"=>null];
|
||||
|
||||
foreach (glob("$base/v3-*.png") as $p) {
|
||||
$out["v3_screenshots"][] = [
|
||||
"name" => basename($p),
|
||||
"size_kb" => round(filesize($p)/1024, 1),
|
||||
"url" => "https://weval-consulting.com/api/ambre-pw-tests/output/" . basename($p),
|
||||
];
|
||||
}
|
||||
|
||||
foreach (glob("$base/chat-capabilities-v3-*/*.webm") as $w) {
|
||||
$rel = str_replace($base . "/", "", $w);
|
||||
$out["v3_video"] = [
|
||||
"size_kb" => round(filesize($w)/1024, 1),
|
||||
"size_mb" => round(filesize($w)/1048576, 2),
|
||||
"url" => "https://weval-consulting.com/api/ambre-pw-tests/output/" . $rel,
|
||||
];
|
||||
}
|
||||
|
||||
echo json_encode($out, JSON_PRETTY_PRINT|JSON_UNESCAPED_SLASHES);
|
||||
121
api/ambre-pw-v3.php
Normal file
@@ -0,0 +1,121 @@
|
||||
<?php
|
||||
header("Content-Type: application/json");
|
||||
$base = "/var/www/html/api/ambre-pw-tests";
|
||||
|
||||
// V3 improved spec — actually waits for file URL + scrolls + viewport 1920x1080
|
||||
$spec = <<<'JS'
|
||||
const { test, expect } = require("@playwright/test");
|
||||
|
||||
const CAPABILITIES = [
|
||||
{ name: "PDF", msg: "Genere un PDF sur: WEVIA enterprise demo", needle: ".pdf" },
|
||||
{ name: "Word", msg: "Genere un document Word sur: strategie pharma", needle: ".docx" },
|
||||
{ name: "PPT", msg: "Genere une presentation sur: pitch investor", needle: ".pptx" },
|
||||
{ name: "Mermaid", msg: "Genere un schema mermaid pour: workflow commande", needle: "graph TD" },
|
||||
{ name: "Image", msg: "Genere une image: paysage montagne", needle: ".svg" },
|
||||
{ name: "Code", msg: "Ecris le code python pour: fibonacci recursif", needle: ".py" },
|
||||
{ name: "Traduire", msg: "Traduis en anglais: bonjour comment allez-vous", needle: "English:" },
|
||||
{ name: "Ping", msg: "ping", needle: "WEVIA Engine" },
|
||||
];
|
||||
|
||||
test("8 capabilities video + file URLs verified", async ({ page }) => {
|
||||
test.setTimeout(420000); // 7min safety
|
||||
|
||||
// Navigate
|
||||
await page.goto("/wevia.html");
|
||||
await page.waitForLoadState("networkidle");
|
||||
await page.waitForTimeout(2000);
|
||||
await page.screenshot({ path: "output/v3-00-initial.png", fullPage: false });
|
||||
console.log("📸 Initial state captured (1920x1080)");
|
||||
|
||||
const input = page.locator("#msgInput");
|
||||
|
||||
for (let i = 0; i < CAPABILITIES.length; i++) {
|
||||
const cap = CAPABILITIES[i];
|
||||
const num = String(i + 1).padStart(2, "0");
|
||||
console.log(`\n[${num}/8] ${cap.name}: ${cap.msg}`);
|
||||
|
||||
try {
|
||||
// Clear + type
|
||||
await input.click({ timeout: 5000 });
|
||||
await input.fill("");
|
||||
await page.waitForTimeout(300);
|
||||
await input.fill(cap.msg);
|
||||
await page.waitForTimeout(500);
|
||||
await input.press("Enter");
|
||||
console.log(` sent, waiting for needle "${cap.needle}"...`);
|
||||
|
||||
// Wait for response with the needle OR 40s timeout
|
||||
const waitStart = Date.now();
|
||||
let found = false;
|
||||
while (Date.now() - waitStart < 40000) {
|
||||
const bodyText = await page.evaluate(() => document.body.innerText);
|
||||
if (bodyText.includes(cap.needle)) {
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
await page.waitForTimeout(1000);
|
||||
}
|
||||
const elapsed = ((Date.now() - waitStart) / 1000).toFixed(1);
|
||||
|
||||
if (found) {
|
||||
console.log(` ✅ Response has "${cap.needle}" in ${elapsed}s`);
|
||||
} else {
|
||||
console.log(` ⚠️ Needle not found after ${elapsed}s`);
|
||||
}
|
||||
|
||||
// Scroll to bottom to see latest message
|
||||
await page.evaluate(() => {
|
||||
const msgs = document.getElementById("messages");
|
||||
if (msgs) msgs.scrollTop = msgs.scrollHeight;
|
||||
window.scrollTo(0, document.body.scrollHeight);
|
||||
});
|
||||
await page.waitForTimeout(1500);
|
||||
|
||||
// Screenshot full page to see entire response with download link
|
||||
await page.screenshot({ path: `output/v3-${num}-${cap.name}.png`, fullPage: true });
|
||||
console.log(` 📸 Screenshot v3-${num}-${cap.name}.png`);
|
||||
|
||||
} catch (e) {
|
||||
console.log(` ❌ Error: ${e.message.substring(0, 100)}`);
|
||||
}
|
||||
}
|
||||
|
||||
// Final fullpage screenshot
|
||||
await page.evaluate(() => window.scrollTo(0, document.body.scrollHeight));
|
||||
await page.waitForTimeout(2000);
|
||||
await page.screenshot({ path: "output/v3-99-final.png", fullPage: true });
|
||||
console.log("\n✅ Test V3 8/8 terminé");
|
||||
});
|
||||
JS;
|
||||
file_put_contents("$base/tests/chat-capabilities-v3.spec.js", $spec);
|
||||
|
||||
// Remove old v2 spec
|
||||
@unlink("$base/tests/chat-capabilities-v2.spec.js");
|
||||
|
||||
// Update config viewport to 1920x1080
|
||||
$cfg = '// @ts-check
|
||||
const { defineConfig, devices } = require("@playwright/test");
|
||||
module.exports = defineConfig({
|
||||
testDir: "./tests",
|
||||
timeout: 420000,
|
||||
retries: 0,
|
||||
workers: 1,
|
||||
use: {
|
||||
baseURL: "https://weval-consulting.com",
|
||||
trace: "off",
|
||||
screenshot: "on",
|
||||
video: "on",
|
||||
viewport: { width: 1920, height: 1080 },
|
||||
ignoreHTTPSErrors: true,
|
||||
},
|
||||
outputDir: "./output",
|
||||
reporter: [["list"], ["json", { outputFile: "./output/results.json" }]],
|
||||
projects: [{ name: "chromium", use: { ...devices["Desktop Chrome"], viewport: { width: 1920, height: 1080 } } }],
|
||||
});';
|
||||
file_put_contents("$base/playwright.config.js", $cfg);
|
||||
|
||||
echo json_encode([
|
||||
"ok" => true,
|
||||
"spec_size" => filesize("$base/tests/chat-capabilities-v3.spec.js"),
|
||||
"config_size" => filesize("$base/playwright.config.js"),
|
||||
]);
|
||||
108
api/ambre-pw-v4.php
Normal file
@@ -0,0 +1,108 @@
|
||||
<?php
|
||||
header("Content-Type: application/json");
|
||||
$base = "/var/www/html/api/ambre-pw-tests";
|
||||
|
||||
// V4 spec — use send button click + wait for assistant message count to increment
|
||||
$spec = <<<'JS'
|
||||
const { test, expect } = require("@playwright/test");
|
||||
|
||||
const CAPABILITIES = [
|
||||
{ name: "PDF", msg: "Genere un PDF sur: WEVIA enterprise demo", needle: ".pdf" },
|
||||
{ name: "Word", msg: "Genere un document Word sur: strategie pharma", needle: ".docx" },
|
||||
{ name: "PPT", msg: "Genere une presentation sur: pitch investor", needle: ".pptx" },
|
||||
{ name: "Mermaid", msg: "Genere un schema mermaid pour: workflow vente", needle: "graph TD" },
|
||||
{ name: "Image", msg: "Genere une image: paysage montagne", needle: ".svg" },
|
||||
{ name: "Code", msg: "Ecris le code python pour: fibonacci", needle: ".py" },
|
||||
{ name: "Traduire", msg: "Traduis en anglais: bonjour merci", needle: "English:" },
|
||||
{ name: "Ping", msg: "ping", needle: "WEVIA Engine" },
|
||||
];
|
||||
|
||||
test("8 capabilities v4 video proof", async ({ page }) => {
|
||||
test.setTimeout(480000);
|
||||
|
||||
await page.goto("/wevia.html");
|
||||
await page.waitForLoadState("networkidle");
|
||||
await page.waitForTimeout(2000);
|
||||
await page.screenshot({ path: "output/v4-00-initial.png", fullPage: false });
|
||||
console.log("📸 Initial 1920x1080");
|
||||
|
||||
for (let i = 0; i < CAPABILITIES.length; i++) {
|
||||
const cap = CAPABILITIES[i];
|
||||
const num = String(i + 1).padStart(2, "0");
|
||||
console.log(`\n[${num}/8] ${cap.name}: ${cap.msg}`);
|
||||
|
||||
try {
|
||||
// Count assistant messages BEFORE sending
|
||||
const beforeCount = await page.evaluate(() =>
|
||||
document.querySelectorAll(".msg.assistant").length
|
||||
);
|
||||
|
||||
// Focus input aggressively, clear, fill
|
||||
const input = page.locator("#msgInput");
|
||||
await input.click({ force: true, timeout: 5000 });
|
||||
await page.keyboard.press("Control+A");
|
||||
await page.keyboard.press("Delete");
|
||||
await page.waitForTimeout(200);
|
||||
await input.fill(cap.msg);
|
||||
await page.waitForTimeout(300);
|
||||
|
||||
// Click send button (more reliable than Enter)
|
||||
const sendBtn = await page.locator(".send-btn, #sendBtn, button[onclick*=send], button.send").first();
|
||||
try {
|
||||
await sendBtn.click({ force: true, timeout: 3000 });
|
||||
} catch (e) {
|
||||
// fallback Enter
|
||||
await input.press("Enter");
|
||||
}
|
||||
console.log(` 📤 Sent (msg count before: ${beforeCount})`);
|
||||
|
||||
// Wait for NEW assistant message to appear + contain needle
|
||||
const waitStart = Date.now();
|
||||
let found = false;
|
||||
let msgAdded = false;
|
||||
while (Date.now() - waitStart < 45000) {
|
||||
const afterCount = await page.evaluate(() =>
|
||||
document.querySelectorAll(".msg.assistant").length
|
||||
);
|
||||
if (afterCount > beforeCount) {
|
||||
msgAdded = true;
|
||||
const bodyText = await page.evaluate(() => document.body.innerText);
|
||||
if (bodyText.includes(cap.needle)) {
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
await page.waitForTimeout(1000);
|
||||
}
|
||||
const elapsed = ((Date.now() - waitStart) / 1000).toFixed(1);
|
||||
|
||||
if (found) console.log(` ✅ "${cap.needle}" found after ${elapsed}s (msg added: ${msgAdded})`);
|
||||
else console.log(` ⚠️ needle not found · ${elapsed}s · msg added: ${msgAdded}`);
|
||||
|
||||
// Scroll to bottom
|
||||
await page.evaluate(() => {
|
||||
const msgs = document.getElementById("messages");
|
||||
if (msgs) msgs.scrollTop = msgs.scrollHeight;
|
||||
window.scrollTo(0, document.body.scrollHeight);
|
||||
});
|
||||
await page.waitForTimeout(1500);
|
||||
|
||||
// Full page screenshot
|
||||
await page.screenshot({ path: `output/v4-${num}-${cap.name}.png`, fullPage: true });
|
||||
console.log(` 📸 v4-${num}-${cap.name}.png`);
|
||||
|
||||
} catch (e) {
|
||||
console.log(` ❌ ${e.message.substring(0, 100)}`);
|
||||
}
|
||||
}
|
||||
|
||||
await page.evaluate(() => window.scrollTo(0, document.body.scrollHeight));
|
||||
await page.waitForTimeout(2000);
|
||||
await page.screenshot({ path: "output/v4-99-final.png", fullPage: true });
|
||||
console.log("\n✅ Test V4 8/8 terminé");
|
||||
});
|
||||
JS;
|
||||
file_put_contents("$base/tests/chat-capabilities-v4.spec.js", $spec);
|
||||
@unlink("$base/tests/chat-capabilities-v3.spec.js");
|
||||
|
||||
echo json_encode(["ok"=>true, "spec_size"=>filesize("$base/tests/chat-capabilities-v4.spec.js")]);
|
||||
16
api/ambre-pw-v5.php
Normal file
@@ -0,0 +1,16 @@
|
||||
<?php
|
||||
header("Content-Type: application/json");
|
||||
$base = "/var/www/html/api/ambre-pw-tests";
|
||||
// Copy V4 → V5 (same spec content, fresh test)
|
||||
if (file_exists("$base/tests/chat-capabilities-v4.spec.js")) {
|
||||
$content = file_get_contents("$base/tests/chat-capabilities-v4.spec.js");
|
||||
// Replace all v4 → v5
|
||||
$content = str_replace('"v4-', '"v5-', $content);
|
||||
$content = str_replace("V4", "V5", $content);
|
||||
$content = str_replace("v4 video proof", "v5 video busy-reset fix", $content);
|
||||
file_put_contents("$base/tests/chat-capabilities-v5.spec.js", $content);
|
||||
@unlink("$base/tests/chat-capabilities-v4.spec.js");
|
||||
echo json_encode(["ok"=>true, "size"=>filesize("$base/tests/chat-capabilities-v5.spec.js")]);
|
||||
} else {
|
||||
echo json_encode(["ok"=>false, "error"=>"v4 spec not found"]);
|
||||
}
|
||||
25
api/ambre-pw-v6-files.php
Normal file
@@ -0,0 +1,25 @@
|
||||
<?php
|
||||
header("Content-Type: application/json");
|
||||
$base = "/var/www/html/api/ambre-pw-tests/output";
|
||||
$out = ["v6_screenshots"=>[], "v6_video"=>null];
|
||||
|
||||
foreach (glob("$base/v6-*.png") as $p) {
|
||||
$out["v6_screenshots"][] = [
|
||||
"name" => basename($p),
|
||||
"size_kb" => round(filesize($p)/1024, 1),
|
||||
"url" => "https://weval-consulting.com/api/ambre-pw-tests/output/" . basename($p),
|
||||
];
|
||||
}
|
||||
usort($out["v6_screenshots"], function($a,$b){return strcmp($a["name"], $b["name"]);});
|
||||
|
||||
foreach (glob("$base/capabilities-v6-*/*.webm") as $w) {
|
||||
$rel = str_replace($base . "/", "", $w);
|
||||
$out["v6_video"] = [
|
||||
"name" => basename($w),
|
||||
"size_mb" => round(filesize($w)/1048576, 2),
|
||||
"url" => "https://weval-consulting.com/api/ambre-pw-tests/output/" . str_replace("·", "-", $rel),
|
||||
"url_raw" => "https://weval-consulting.com/api/ambre-pw-tests/output/" . $rel,
|
||||
];
|
||||
}
|
||||
|
||||
echo json_encode($out, JSON_PRETTY_PRINT|JSON_UNESCAPED_SLASHES);
|
||||
100
api/ambre-pw-v6.php
Normal file
@@ -0,0 +1,100 @@
|
||||
<?php
|
||||
header("Content-Type: application/json");
|
||||
$base = "/var/www/html/api/ambre-pw-tests";
|
||||
|
||||
// V6 — fixed message counting by using the innerText search for the specific needle that only appears AFTER the new response
|
||||
$spec = <<<'JS'
|
||||
const { test, expect } = require("@playwright/test");
|
||||
|
||||
const CAPABILITIES = [
|
||||
{ name: "PDF", msg: "Genere un PDF sur: WEVIA enterprise demo", needle: ".pdf" },
|
||||
{ name: "Word", msg: "Genere un document Word sur: strategie pharma", needle: ".docx" },
|
||||
{ name: "PPT", msg: "Genere une presentation sur: pitch investor", needle: ".pptx" },
|
||||
{ name: "Mermaid", msg: "Genere un schema mermaid pour: workflow ventes", needle: "graph TD" },
|
||||
{ name: "Image", msg: "Genere une image: paysage montagne coucher soleil", needle: ".svg" },
|
||||
{ name: "Code", msg: "Ecris le code python pour: fibonacci recursif", needle: "wevia-code" },
|
||||
{ name: "Traduire", msg: "Traduis en anglais: bonjour comment allez-vous aujourdhui", needle: "English" },
|
||||
{ name: "Ping", msg: "ping", needle: "WEVIA Engine" },
|
||||
];
|
||||
|
||||
test("V6 8 capabilities · needle counting fix · full video", async ({ page }) => {
|
||||
test.setTimeout(600000);
|
||||
|
||||
// Capture console for debugging
|
||||
page.on("console", msg => {
|
||||
if (msg.type() === "error" || msg.text().includes("Ambre")) {
|
||||
console.log(`[browser ${msg.type()}]`, msg.text().substring(0, 200));
|
||||
}
|
||||
});
|
||||
|
||||
await page.goto("/wevia.html");
|
||||
await page.waitForLoadState("networkidle");
|
||||
await page.waitForTimeout(2000);
|
||||
await page.screenshot({ path: "output/v6-00-initial.png", fullPage: false });
|
||||
console.log("📸 Initial captured");
|
||||
|
||||
for (let i = 0; i < CAPABILITIES.length; i++) {
|
||||
const cap = CAPABILITIES[i];
|
||||
const num = String(i + 1).padStart(2, "0");
|
||||
console.log(`\n[${num}/8] ${cap.name}: ${cap.msg}`);
|
||||
|
||||
try {
|
||||
// Count needle occurrences BEFORE sending
|
||||
const beforeNeedleCount = await page.evaluate((n) =>
|
||||
(document.body.innerText.match(new RegExp(n.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"), "g")) || []).length
|
||||
, cap.needle);
|
||||
|
||||
// Fill + Enter
|
||||
const input = page.locator("#msgInput");
|
||||
await input.click({ force: true });
|
||||
await input.fill(cap.msg);
|
||||
await page.waitForTimeout(400);
|
||||
await input.press("Enter");
|
||||
console.log(` 📤 Sent (needle "${cap.needle}" count before: ${beforeNeedleCount})`);
|
||||
|
||||
// Wait for needle count to INCREASE
|
||||
const waitStart = Date.now();
|
||||
let found = false;
|
||||
while (Date.now() - waitStart < 50000) {
|
||||
const afterCount = await page.evaluate((n) =>
|
||||
(document.body.innerText.match(new RegExp(n.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"), "g")) || []).length
|
||||
, cap.needle);
|
||||
if (afterCount > beforeNeedleCount) {
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
await page.waitForTimeout(1500);
|
||||
}
|
||||
const elapsed = ((Date.now() - waitStart) / 1000).toFixed(1);
|
||||
console.log(found ? ` ✅ needle count increased in ${elapsed}s` : ` ⚠️ no new needle after ${elapsed}s`);
|
||||
|
||||
// Scroll to bottom to show latest
|
||||
await page.evaluate(() => {
|
||||
const msgs = document.getElementById("messages");
|
||||
if (msgs) msgs.scrollTop = msgs.scrollHeight;
|
||||
window.scrollTo(0, document.body.scrollHeight);
|
||||
});
|
||||
await page.waitForTimeout(2500);
|
||||
|
||||
// Screenshot (viewport only, pour voir la bulle récente)
|
||||
await page.screenshot({ path: `output/v6-${num}-${cap.name}.png`, fullPage: false });
|
||||
console.log(` 📸 v6-${num}-${cap.name}.png`);
|
||||
|
||||
// Wait between tests for chat to settle
|
||||
await page.waitForTimeout(2000);
|
||||
} catch (e) {
|
||||
console.log(` ❌ Error: ${e.message.substring(0, 120)}`);
|
||||
}
|
||||
}
|
||||
|
||||
// Final full page
|
||||
await page.evaluate(() => window.scrollTo(0, document.body.scrollHeight));
|
||||
await page.waitForTimeout(2000);
|
||||
await page.screenshot({ path: "output/v6-99-final.png", fullPage: true });
|
||||
console.log("\n✅ V6 terminé");
|
||||
});
|
||||
JS;
|
||||
file_put_contents("$base/tests/capabilities-v6.spec.js", $spec);
|
||||
@unlink("$base/tests/debug-flow.spec.js");
|
||||
|
||||
echo json_encode(["ok"=>true, "size"=>filesize("$base/tests/capabilities-v6.spec.js")]);
|
||||
123
api/ambre-pw-v7.php
Normal file
@@ -0,0 +1,123 @@
|
||||
<?php
|
||||
header("Content-Type: application/json");
|
||||
$base = "/var/www/html/api/ambre-pw-tests";
|
||||
|
||||
$spec = <<<'JS'
|
||||
const { test, expect } = require("@playwright/test");
|
||||
|
||||
const CAPABILITIES = [
|
||||
{ name: "PDF", msg: "Genere un PDF sur: strategie WEVIA 2026", needle: "generated/wevia-" },
|
||||
{ name: "Word", msg: "Genere un document Word sur: procedure qualite", needle: "generated/wevia-" },
|
||||
{ name: "PPT", msg: "Genere une presentation sur: pitch deck investor", needle: "generated/wevia-" },
|
||||
{ name: "Mermaid", msg: "Genere un schema mermaid pour: workflow commandes", needle: "graph TD" },
|
||||
{ name: "Image", msg: "Genere une image: paysage nature forest", needle: "generated/wevia-img" },
|
||||
{ name: "Code", msg: "Ecris le code python pour: fibonacci recursif", needle: "wevia-code" },
|
||||
{ name: "Traduire", msg: "Traduis en anglais: merci beaucoup mon ami", needle: "English" },
|
||||
{ name: "Bilan", msg: "bilan complet system", needle: "WEVIA" },
|
||||
];
|
||||
|
||||
test("V7 8/8 capabilities · robust JSON + retry · full video", async ({ page }) => {
|
||||
test.setTimeout(480000);
|
||||
|
||||
let errorCount = 0;
|
||||
page.on("pageerror", err => { errorCount++; console.log(`[err] ${err.message.substring(0, 150)}`); });
|
||||
page.on("console", msg => {
|
||||
if (msg.type() === "error") {
|
||||
const t = msg.text();
|
||||
if (!t.includes("503") && !t.includes("favicon")) console.log(`[console err] ${t.substring(0, 150)}`);
|
||||
}
|
||||
});
|
||||
|
||||
await page.goto("/wevia.html");
|
||||
await page.waitForLoadState("networkidle");
|
||||
await page.waitForTimeout(2500);
|
||||
await page.screenshot({ path: "output/v7-00-initial.png", fullPage: false });
|
||||
console.log("📸 Initial v7 captured");
|
||||
|
||||
const results = [];
|
||||
|
||||
for (let i = 0; i < CAPABILITIES.length; i++) {
|
||||
const cap = CAPABILITIES[i];
|
||||
const num = String(i + 1).padStart(2, "0");
|
||||
console.log(`\n[${num}/8] ${cap.name}`);
|
||||
console.log(` msg: ${cap.msg}`);
|
||||
|
||||
let success = false;
|
||||
let attempts = 0;
|
||||
const maxAttempts = 2;
|
||||
|
||||
while (!success && attempts < maxAttempts) {
|
||||
attempts++;
|
||||
const attemptLabel = attempts > 1 ? ` (retry ${attempts})` : "";
|
||||
|
||||
try {
|
||||
const beforeNeedleCount = await page.evaluate((n) =>
|
||||
(document.body.innerText.match(new RegExp(n.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"), "g")) || []).length
|
||||
, cap.needle);
|
||||
|
||||
const input = page.locator("#msgInput");
|
||||
await input.click({ force: true });
|
||||
await page.keyboard.press("Control+A");
|
||||
await page.keyboard.press("Delete");
|
||||
await input.fill(cap.msg);
|
||||
await page.waitForTimeout(400);
|
||||
await input.press("Enter");
|
||||
console.log(` 📤 sent${attemptLabel} (needle "${cap.needle}" before: ${beforeNeedleCount})`);
|
||||
|
||||
const waitStart = Date.now();
|
||||
while (Date.now() - waitStart < 45000) {
|
||||
const afterCount = await page.evaluate((n) =>
|
||||
(document.body.innerText.match(new RegExp(n.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"), "g")) || []).length
|
||||
, cap.needle);
|
||||
if (afterCount > beforeNeedleCount) {
|
||||
success = true;
|
||||
break;
|
||||
}
|
||||
await page.waitForTimeout(1500);
|
||||
}
|
||||
const elapsed = ((Date.now() - waitStart) / 1000).toFixed(1);
|
||||
|
||||
if (success) {
|
||||
console.log(` ✅ PASS in ${elapsed}s${attemptLabel}`);
|
||||
} else {
|
||||
console.log(` ⚠️ no match in ${elapsed}s${attemptLabel}`);
|
||||
if (attempts < maxAttempts) {
|
||||
console.log(` 🔁 will retry...`);
|
||||
await page.waitForTimeout(3000);
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
console.log(` ❌ attempt${attemptLabel} err: ${e.message.substring(0, 100)}`);
|
||||
if (attempts < maxAttempts) await page.waitForTimeout(2000);
|
||||
}
|
||||
}
|
||||
|
||||
// Scroll + screenshot
|
||||
await page.evaluate(() => {
|
||||
const msgs = document.getElementById("messages");
|
||||
if (msgs) msgs.scrollTop = msgs.scrollHeight;
|
||||
});
|
||||
await page.waitForTimeout(2500);
|
||||
await page.screenshot({ path: `output/v7-${num}-${cap.name}.png`, fullPage: false });
|
||||
console.log(` 📸 v7-${num}-${cap.name}.png`);
|
||||
|
||||
results.push({ name: cap.name, pass: success, attempts: attempts });
|
||||
await page.waitForTimeout(1500);
|
||||
}
|
||||
|
||||
// Final full page
|
||||
await page.evaluate(() => window.scrollTo(0, document.body.scrollHeight));
|
||||
await page.waitForTimeout(2000);
|
||||
await page.screenshot({ path: "output/v7-99-final.png", fullPage: true });
|
||||
|
||||
const passCount = results.filter(r => r.pass).length;
|
||||
console.log(`\n═══ V7 BILAN ═══`);
|
||||
console.log(`Result: ${passCount}/8 capabilities PASS`);
|
||||
console.log(`Page errors: ${errorCount}`);
|
||||
results.forEach(r => console.log(` ${r.pass ? "✅" : "❌"} ${r.name} (${r.attempts} attempt${r.attempts>1?"s":""})`));
|
||||
});
|
||||
JS;
|
||||
file_put_contents("$base/tests/capabilities-v7.spec.js", $spec);
|
||||
@unlink("$base/tests/capabilities-v6.spec.js");
|
||||
|
||||
echo json_encode(["ok"=>true, "size"=>filesize("$base/tests/capabilities-v7.spec.js")]);
|
||||
24
api/ambre-regex-test.php
Normal file
@@ -0,0 +1,24 @@
|
||||
<?php
|
||||
header("Content-Type: application/json");
|
||||
// Run node -e to test the regex with real JS semantics
|
||||
$regex = '/g[eéèê]n[eéèê]re?\\s+(?:un|une|des|le|la)?\\s*(pdf|pptx?|powerpoint|docx?|word|excel|xlsx?|pr[eéèê]sentation|document|tableau|sch[eéèê]ma|mermaid|diagramme|image)|ecri[srt]?\\s+(?:le|du|un)?\\s*code|traduis?\\s+(?:ce\\s+texte|en)?\\s*(anglais|francais|espagnol|allemand|italien|portugais|arabe|chinois|japonais|english|spanish|french|german|italian|portuguese|arabic|chinese|japanese)/i';
|
||||
|
||||
$tests = [
|
||||
"Genere un PDF sur: demo",
|
||||
"Genere un document Word sur: strategie",
|
||||
"Genere une presentation sur: pitch",
|
||||
"Genere un schema mermaid pour: flow",
|
||||
"Genere une image: logo",
|
||||
"Ecris le code python pour: fibonacci",
|
||||
"Traduis en anglais: bonjour",
|
||||
"ping",
|
||||
];
|
||||
|
||||
$results = [];
|
||||
foreach ($tests as $t) {
|
||||
// Escape the test string for shell
|
||||
$js = "console.log(JSON.stringify({q: \"" . addcslashes($t, "\"\\") . "\", match: $regex.test(\"" . addcslashes($t, "\"\\") . "\")}));";
|
||||
$out = @shell_exec("node -e \"$js\" 2>&1");
|
||||
$results[] = ["query"=>$t, "node_out"=>trim($out)];
|
||||
}
|
||||
echo json_encode($results, JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE);
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"generated": "2026-04-21 14:30:02",
|
||||
"generated": "2026-04-21 20:30:01",
|
||||
"version": "1.0",
|
||||
"servers": [
|
||||
{
|
||||
@@ -10,7 +10,7 @@
|
||||
"ssh": 49222,
|
||||
"disk_pct": 82,
|
||||
"disk_avail": "27G",
|
||||
"uptime": "up 1 week, 4 hours, 38 minutes",
|
||||
"uptime": "up 1 week, 10 hours, 38 minutes",
|
||||
"nginx": "active",
|
||||
"php_fpm": "active",
|
||||
"php_version": "8.5.5"
|
||||
@@ -116,7 +116,7 @@
|
||||
},
|
||||
{
|
||||
"name": "uptime-kuma",
|
||||
"status": "Up 38 hours (healthy)",
|
||||
"status": "Up 44 hours (healthy)",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
@@ -275,9 +275,9 @@
|
||||
}
|
||||
],
|
||||
"screens": {
|
||||
"s204_html": 315,
|
||||
"s204_html": 317,
|
||||
"s204_products": 104,
|
||||
"s204_api_php": 813,
|
||||
"s204_api_php": 828,
|
||||
"s204_wevia_php": 34,
|
||||
"s95_arsenal_html": 1377,
|
||||
"s95_arsenal_api": 377
|
||||
@@ -301,7 +301,7 @@
|
||||
"langfuse"
|
||||
],
|
||||
"key_tables": {
|
||||
"kb_learnings": 5546,
|
||||
"kb_learnings": 5560,
|
||||
"kb_documents": 0,
|
||||
"ethica_medecins": 50004,
|
||||
"enterprise_agents": 0
|
||||
@@ -601,15 +601,15 @@
|
||||
]
|
||||
},
|
||||
"wiki": {
|
||||
"total_entries": 5547,
|
||||
"total_entries": 5560,
|
||||
"categories": [
|
||||
{
|
||||
"category": "AUTO-FIX",
|
||||
"cnt": "2973"
|
||||
"cnt": "2974"
|
||||
},
|
||||
{
|
||||
"category": "TOPOLOGY",
|
||||
"cnt": "1218"
|
||||
"cnt": "1230"
|
||||
},
|
||||
{
|
||||
"category": "DISCOVERY",
|
||||
@@ -1718,6 +1718,10 @@
|
||||
"optimizations": {
|
||||
"recent_commits": [],
|
||||
"auto_fixes": [
|
||||
{
|
||||
"fact": "AUTONOMY 21Apr 18:55: 1 fixes. Disk light cleanup 85%",
|
||||
"created_at": "2026-04-21 20:55:06.635344"
|
||||
},
|
||||
{
|
||||
"fact": "AUTONOMY 21Apr 08:10: 5 fixes. S95 restart pmta; S95 restart kumomta; S95 restart postfix; S95 restart sentinel; S95 restart adx",
|
||||
"created_at": "2026-04-21 10:10:04.274914"
|
||||
@@ -1753,10 +1757,6 @@
|
||||
{
|
||||
"fact": "AUTONOMY 19Apr 17:20: 1 fixes. Disk light cleanup 85%",
|
||||
"created_at": "2026-04-19 19:20:05.814206"
|
||||
},
|
||||
{
|
||||
"fact": "AUTONOMY 19Apr 17:15: 1 fixes. Disk light cleanup 85%",
|
||||
"created_at": "2026-04-19 19:15:05.697284"
|
||||
}
|
||||
],
|
||||
"architecture_decisions": [
|
||||
@@ -1945,7 +1945,7 @@
|
||||
}
|
||||
]
|
||||
},
|
||||
"scan_time_ms": 2178,
|
||||
"scan_time_ms": 2029,
|
||||
"gaps": [],
|
||||
"score": 100,
|
||||
"automation": {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"generated_at": "2026-04-21T16:40:01.266413",
|
||||
"generated_at": "2026-04-21T22:50:02.130032",
|
||||
"stats": {
|
||||
"total": 48,
|
||||
"pending": 31,
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
{
|
||||
"status": "ALIVE",
|
||||
"ts": "2026-04-21T16:30:02.091494",
|
||||
"last_heartbeat": "2026-04-21T16:30:02.091494",
|
||||
"last_heartbeat_ts_epoch": 1776781802,
|
||||
"ts": "2026-04-21T22:45:02.197332",
|
||||
"last_heartbeat": "2026-04-21T22:45:02.197332",
|
||||
"last_heartbeat_ts_epoch": 1776804302,
|
||||
"tasks_today": 232,
|
||||
"tasks_week": 574,
|
||||
"agent_id": "blade-ops",
|
||||
|
||||
15
api/blade-tasks/key_gemini_key_20260421.json
Normal file
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"type": "key_renewal",
|
||||
"provider": "GEMINI_KEY",
|
||||
"reason": "FAIL",
|
||||
"urls": {
|
||||
"GITHUB_TOKEN": "https:\/\/github.com\/settings\/tokens\/new?scopes=repo,workflow&description=WEVIA-Auto",
|
||||
"GROQ_KEY": "https:\/\/console.groq.com\/keys",
|
||||
"CEREBRAS_API_KEY": "https:\/\/cloud.cerebras.ai\/platform",
|
||||
"GEMINI_KEY": "https:\/\/aistudio.google.com\/apikey",
|
||||
"SAMBANOVA_KEY": "https:\/\/cloud.sambanova.ai\/apis",
|
||||
"MISTRAL_KEY": "https:\/\/console.mistral.ai\/api-keys"
|
||||
},
|
||||
"ts": "2026-04-21T16:00:05+00:00",
|
||||
"priority": "P1"
|
||||
}
|
||||
@@ -10,6 +10,6 @@
|
||||
"SAMBANOVA_KEY": "https:\/\/cloud.sambanova.ai\/apis",
|
||||
"MISTRAL_KEY": "https:\/\/console.mistral.ai\/api-keys"
|
||||
},
|
||||
"ts": "2026-04-21T10:00:04+00:00",
|
||||
"ts": "2026-04-21T16:00:05+00:00",
|
||||
"priority": "P0"
|
||||
}
|
||||
@@ -10,6 +10,6 @@
|
||||
"SAMBANOVA_KEY": "https:\/\/cloud.sambanova.ai\/apis",
|
||||
"MISTRAL_KEY": "https:\/\/console.mistral.ai\/api-keys"
|
||||
},
|
||||
"ts": "2026-04-21T10:00:04+00:00",
|
||||
"ts": "2026-04-21T16:00:05+00:00",
|
||||
"priority": "P1"
|
||||
}
|
||||
@@ -10,6 +10,6 @@
|
||||
"SAMBANOVA_KEY": "https:\/\/cloud.sambanova.ai\/apis",
|
||||
"MISTRAL_KEY": "https:\/\/console.mistral.ai\/api-keys"
|
||||
},
|
||||
"ts": "2026-04-21T10:00:04+00:00",
|
||||
"ts": "2026-04-21T16:00:05+00:00",
|
||||
"priority": "P1"
|
||||
}
|
||||
@@ -1,13 +1,13 @@
|
||||
{
|
||||
"timestamp": "2026-04-21 16:00",
|
||||
"timestamp": "2026-04-21 20:00",
|
||||
"checks": {
|
||||
"registry": "0 agents",
|
||||
"system": {
|
||||
"docker": "19",
|
||||
"ram": "11Gi/30Gi",
|
||||
"ram": "12Gi/30Gi",
|
||||
"disk": "82%",
|
||||
"load": "9.88",
|
||||
"uptime": "up 1 week, 4 hours, 8 minutes"
|
||||
"load": "0.46",
|
||||
"uptime": "up 1 week, 8 hours, 8 minutes"
|
||||
},
|
||||
"services": "7/10 OK",
|
||||
"nonreg": "153/153 (100%)",
|
||||
@@ -15,7 +15,7 @@
|
||||
"crons": "44 active",
|
||||
"routes": "446",
|
||||
"dataset": "5751 pairs",
|
||||
"wiki": "1988 entries",
|
||||
"wiki": "2046 entries",
|
||||
"enterprise": "758 agents (dorm=0 dead=167)"
|
||||
},
|
||||
"analysis": "Analyse indisponible"
|
||||
|
||||
@@ -1,26 +1,26 @@
|
||||
{
|
||||
"ts": "2026-04-21T14:40:01+00:00",
|
||||
"ts": "2026-04-21T20:50:02+00:00",
|
||||
"server": "s204",
|
||||
"s204": {
|
||||
"load": 0.77,
|
||||
"load": 2.11,
|
||||
"uptime": "2026-04-14 11:51:24",
|
||||
"ram_total_mb": 31335,
|
||||
"ram_used_mb": 11682,
|
||||
"ram_free_mb": 19653,
|
||||
"ram_used_mb": 12424,
|
||||
"ram_free_mb": 18910,
|
||||
"disk_total": "150G",
|
||||
"disk_used": "118G",
|
||||
"disk_free": "27G",
|
||||
"disk_pct": "82%",
|
||||
"fpm_workers": 140,
|
||||
"fpm_workers": 141,
|
||||
"docker_containers": 19,
|
||||
"cpu_cores": 8
|
||||
},
|
||||
"s95": {
|
||||
"load": 0.68,
|
||||
"load": 0,
|
||||
"disk_pct": "81%",
|
||||
"status": "UP",
|
||||
"ram_total_mb": 15610,
|
||||
"ram_free_mb": 12017
|
||||
"ram_free_mb": 12055
|
||||
},
|
||||
"pmta": [
|
||||
{
|
||||
@@ -45,15 +45,15 @@
|
||||
}
|
||||
],
|
||||
"assets": {
|
||||
"html_pages": 316,
|
||||
"php_apis": 818,
|
||||
"wiki_entries": 2046,
|
||||
"vault_doctrines": 78,
|
||||
"html_pages": 317,
|
||||
"php_apis": 833,
|
||||
"wiki_entries": 2066,
|
||||
"vault_doctrines": 84,
|
||||
"vault_sessions": 104,
|
||||
"vault_decisions": 12
|
||||
},
|
||||
"tools": {
|
||||
"total": 627,
|
||||
"total": 630,
|
||||
"registry_version": "?"
|
||||
},
|
||||
"sovereign": {
|
||||
@@ -80,16 +80,16 @@
|
||||
},
|
||||
"ethica": {
|
||||
"total_hcps": 161733,
|
||||
"with_email": 110612,
|
||||
"with_email": 110639,
|
||||
"with_phone": 155151,
|
||||
"gap_email": 51121,
|
||||
"gap_email": 51094,
|
||||
"pct_email": 68.4,
|
||||
"pct_phone": 95.9,
|
||||
"by_country": [
|
||||
{
|
||||
"country": "DZ",
|
||||
"hcps": 122337,
|
||||
"with_email": 78508,
|
||||
"with_email": 78531,
|
||||
"with_tel": 119396,
|
||||
"pct_email": 64.2,
|
||||
"pct_tel": 97.6
|
||||
@@ -97,15 +97,15 @@
|
||||
{
|
||||
"country": "MA",
|
||||
"hcps": 19723,
|
||||
"with_email": 15078,
|
||||
"with_email": 15080,
|
||||
"with_tel": 18737,
|
||||
"pct_email": 76.4,
|
||||
"pct_email": 76.5,
|
||||
"pct_tel": 95
|
||||
},
|
||||
{
|
||||
"country": "TN",
|
||||
"hcps": 17794,
|
||||
"with_email": 15147,
|
||||
"with_email": 15149,
|
||||
"with_tel": 17018,
|
||||
"pct_email": 85.1,
|
||||
"pct_tel": 95.6
|
||||
@@ -203,7 +203,7 @@
|
||||
},
|
||||
{
|
||||
"name": "uptime-kuma",
|
||||
"status": "Up 39 hours (healthy)",
|
||||
"status": "Up 45 hours (healthy)",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
@@ -221,7 +221,7 @@
|
||||
"active": 35
|
||||
},
|
||||
"git": {
|
||||
"head": "5de7c1a0c AUTO-BACKUP 20260421-1640",
|
||||
"head": "151ffbae6 auto-sync-2250",
|
||||
"dirty": 2,
|
||||
"status": "DIRTY"
|
||||
},
|
||||
@@ -271,11 +271,11 @@
|
||||
"binary": "COMPILED",
|
||||
"model": "142MB"
|
||||
},
|
||||
"grand_total": 3904,
|
||||
"grand_total": 3949,
|
||||
"health": {
|
||||
"score": 5,
|
||||
"max": 6,
|
||||
"pct": 83
|
||||
},
|
||||
"elapsed_ms": 10419
|
||||
"elapsed_ms": 10338
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"timestamp": "2026-04-21 12:00",
|
||||
"fast_php_routes": 445,
|
||||
"timestamp": "2026-04-21 18:00",
|
||||
"fast_php_routes": 446,
|
||||
"opt_tools_total": 51,
|
||||
"wired": 50,
|
||||
"not_wired_count": 1,
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
"status": "ERROR"
|
||||
},
|
||||
"ports": {
|
||||
"total": 76,
|
||||
"total": 75,
|
||||
"exposed": 20,
|
||||
"ports": [
|
||||
{
|
||||
@@ -14,11 +14,11 @@
|
||||
},
|
||||
{
|
||||
"addr": "127.0.0.1:5890",
|
||||
"process": "users:((\"apache2\",pid=3290956,fd=12),(\"apache2\",pi"
|
||||
"process": "users:((\"apache2\",pid=2510443,fd=12),(\"apache2\",pi"
|
||||
},
|
||||
{
|
||||
"addr": "127.0.0.1:5888",
|
||||
"process": "users:((\"apache2\",pid=3290956,fd=10),(\"apache2\",pi"
|
||||
"process": "users:((\"apache2\",pid=2510443,fd=10),(\"apache2\",pi"
|
||||
},
|
||||
{
|
||||
"addr": "127.0.0.1:6060",
|
||||
@@ -30,23 +30,23 @@
|
||||
},
|
||||
{
|
||||
"addr": "127.0.0.1:5823",
|
||||
"process": "users:((\"apache2\",pid=3290956,fd=5),(\"apache2\",pid"
|
||||
"process": "users:((\"apache2\",pid=2510443,fd=5),(\"apache2\",pid"
|
||||
},
|
||||
{
|
||||
"addr": "127.0.0.1:5822",
|
||||
"process": "users:((\"apache2\",pid=3290956,fd=4),(\"apache2\",pid"
|
||||
"process": "users:((\"apache2\",pid=2510443,fd=4),(\"apache2\",pid"
|
||||
},
|
||||
{
|
||||
"addr": "127.0.0.1:5821",
|
||||
"process": "users:((\"apache2\",pid=3290956,fd=3),(\"apache2\",pid"
|
||||
"process": "users:((\"apache2\",pid=2510443,fd=3),(\"apache2\",pid"
|
||||
},
|
||||
{
|
||||
"addr": "127.0.0.1:5825",
|
||||
"process": "users:((\"apache2\",pid=3290956,fd=13),(\"apache2\",pi"
|
||||
"process": "users:((\"apache2\",pid=2510443,fd=13),(\"apache2\",pi"
|
||||
},
|
||||
{
|
||||
"addr": "127.0.0.1:5824",
|
||||
"process": "users:((\"apache2\",pid=3290956,fd=6),(\"apache2\",pid"
|
||||
"process": "users:((\"apache2\",pid=2510443,fd=6),(\"apache2\",pid"
|
||||
},
|
||||
{
|
||||
"addr": "127.0.0.1:6379",
|
||||
@@ -89,8 +89,8 @@
|
||||
"process": "users:((\"python3\",pid=1392,fd=3))"
|
||||
},
|
||||
{
|
||||
"addr": "127.0.0.1:36521",
|
||||
"process": "users:((\"ollama\",pid=1156391,fd=3))"
|
||||
"addr": "127.0.0.1:36363",
|
||||
"process": "users:((\"ollama\",pid=2510108,fd=3))"
|
||||
},
|
||||
{
|
||||
"addr": "0.0.0.0:4000",
|
||||
@@ -102,7 +102,7 @@
|
||||
},
|
||||
{
|
||||
"addr": "0.0.0.0:443",
|
||||
"process": "users:((\"nginx\",pid=1873436,fd=5),(\"nginx\",pid=116"
|
||||
"process": "users:((\"nginx\",pid=2497604,fd=5),(\"nginx\",pid=249"
|
||||
},
|
||||
{
|
||||
"addr": "0.0.0.0:49222",
|
||||
@@ -110,23 +110,23 @@
|
||||
},
|
||||
{
|
||||
"addr": "0.0.0.0:80",
|
||||
"process": "users:((\"nginx\",pid=1873436,fd=6),(\"nginx\",pid=116"
|
||||
"process": "users:((\"nginx\",pid=2497604,fd=6),(\"nginx\",pid=249"
|
||||
},
|
||||
{
|
||||
"addr": "0.0.0.0:22",
|
||||
"process": "users:((\"sshd\",pid=1314257,fd=7))"
|
||||
},
|
||||
{
|
||||
"addr": "127.0.0.1:41237",
|
||||
"process": "users:((\"ollama\",pid=2487766,fd=3))"
|
||||
},
|
||||
{
|
||||
"addr": "127.0.0.1:8280",
|
||||
"process": "users:((\"crowdsec\",pid=2454,fd=26))"
|
||||
},
|
||||
{
|
||||
"addr": "127.0.0.1:8443",
|
||||
"process": "users:((\"apache2\",pid=3290956,fd=11),(\"apache2\",pi"
|
||||
},
|
||||
{
|
||||
"addr": "127.0.0.1:9050",
|
||||
"process": "users:((\"tor\",pid=1408,fd=6))"
|
||||
"process": "users:((\"apache2\",pid=2510443,fd=11),(\"apache2\",pi"
|
||||
}
|
||||
],
|
||||
"status": "WARN"
|
||||
@@ -161,7 +161,7 @@
|
||||
"status": "PASS"
|
||||
}
|
||||
},
|
||||
"timestamp": "2026-04-21T12:00:03",
|
||||
"timestamp": "2026-04-21T18:00:02",
|
||||
"oss_tools": [
|
||||
{
|
||||
"name": "Nuclei",
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"timestamp": "2026-04-21T12:30:02.601748",
|
||||
"timestamp": "2026-04-21T18:30:02.403371",
|
||||
"source": "auto-populator-v2-fixed-18avr",
|
||||
"enterprise_total_agents": 747,
|
||||
"docker_total": 19,
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
[12:30:02] === MEETING ROOMS AUTO-POPULATOR (FIXED 18avr) ===
|
||||
[12:30:02] Enterprise: 747 agents
|
||||
[12:30:02] Registry: 11 sections
|
||||
[12:30:02] Docker: 19 containers
|
||||
[12:30:02] strat: 99 agents (38 active)
|
||||
[12:30:02] infra: 308 agents (34 active)
|
||||
[12:30:02] dev: 108 agents (25 active)
|
||||
[12:30:02] sec: 48 agents (13 active)
|
||||
[12:30:02] biz: 114 agents (31 active)
|
||||
[12:30:02] ia: 168 agents (48 active)
|
||||
[12:30:02] transit: 254 agents (27 active)
|
||||
[12:30:02] Output: /var/www/html/api/meeting-rooms-data.json
|
||||
[18:30:02] === MEETING ROOMS AUTO-POPULATOR (FIXED 18avr) ===
|
||||
[18:30:02] Enterprise: 747 agents
|
||||
[18:30:02] Registry: 11 sections
|
||||
[18:30:02] Docker: 19 containers
|
||||
[18:30:02] strat: 99 agents (38 active)
|
||||
[18:30:02] infra: 308 agents (34 active)
|
||||
[18:30:02] dev: 108 agents (25 active)
|
||||
[18:30:02] sec: 48 agents (13 active)
|
||||
[18:30:02] biz: 114 agents (31 active)
|
||||
[18:30:02] ia: 168 agents (48 active)
|
||||
[18:30:02] transit: 254 agents (27 active)
|
||||
[18:30:02] Output: /var/www/html/api/meeting-rooms-data.json
|
||||
@@ -1,27 +1,27 @@
|
||||
{
|
||||
"ok": true,
|
||||
"agent": "V42_MQL_Scoring_Agent_REAL",
|
||||
"ts": "2026-04-21T14:40:01+00:00",
|
||||
"ts": "2026-04-21T20:50:02+00:00",
|
||||
"status": "DEPLOYED_AUTO",
|
||||
"deployed": true,
|
||||
"algorithm": "weighted_behavioral_signals",
|
||||
"signals_tracked": {
|
||||
"wtp_engagement": 100,
|
||||
"wtp_engagement": 70,
|
||||
"chat_engagement": 0,
|
||||
"roi_tool": 0,
|
||||
"email_opened": 0
|
||||
},
|
||||
"avg_score": 25,
|
||||
"avg_score": 17.5,
|
||||
"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": 39,
|
||||
"improvement_vs_manual": {
|
||||
"before_manual_pct": 33.3,
|
||||
"after_auto_pct": 41,
|
||||
"delta": 7.700000000000003
|
||||
"after_auto_pct": 39,
|
||||
"delta": 5.700000000000003
|
||||
},
|
||||
"paperclip_db_ok": true,
|
||||
"paperclip_tables": 1,
|
||||
|
||||
@@ -1 +1 @@
|
||||
{"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": []}
|
||||
{"ts": "20260421_224704", "version": "3.2", "score": 100, "pass": 153, "fail": 0, "total": 153, "elapsed": 31.6, "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-21T16:00:04.819776"
|
||||
"discovered": "2026-04-21T22:00:04.914789"
|
||||
},
|
||||
{
|
||||
"name": "wevia-brain",
|
||||
@@ -23,7 +23,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T16:00:04.997109"
|
||||
"discovered": "2026-04-21T22:00:05.062894"
|
||||
},
|
||||
{
|
||||
"name": "skills",
|
||||
@@ -36,7 +36,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T16:00:04.536304"
|
||||
"discovered": "2026-04-21T22:00:04.676231"
|
||||
},
|
||||
{
|
||||
"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-21T16:00:04.067458"
|
||||
"discovered": "2026-04-21T22:00:03.793286"
|
||||
},
|
||||
{
|
||||
"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-21T16:00:04.274526"
|
||||
"discovered": "2026-04-21T22:00:04.191178"
|
||||
},
|
||||
{
|
||||
"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-21T16:00:04.237089"
|
||||
"discovered": "2026-04-21T22:00:04.140337"
|
||||
},
|
||||
{
|
||||
"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-21T16:00:03.824199"
|
||||
"discovered": "2026-04-21T22:00:03.338813"
|
||||
},
|
||||
{
|
||||
"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-21T16:00:04.325183"
|
||||
"discovered": "2026-04-21T22:00:04.382601"
|
||||
},
|
||||
{
|
||||
"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-21T16:00:04.725255"
|
||||
"discovered": "2026-04-21T22:00:04.795760"
|
||||
},
|
||||
{
|
||||
"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-21T16:00:03.741972"
|
||||
"discovered": "2026-04-21T22:00:03.281165"
|
||||
},
|
||||
{
|
||||
"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-21T16:00:03.855585"
|
||||
"discovered": "2026-04-21T22:00:03.441512"
|
||||
},
|
||||
{
|
||||
"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-21T16:00:04.575438"
|
||||
"discovered": "2026-04-21T22:00:04.736445"
|
||||
},
|
||||
{
|
||||
"name": "fmgapp",
|
||||
@@ -478,7 +478,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T16:00:04.071376"
|
||||
"discovered": "2026-04-21T22:00:03.807956"
|
||||
},
|
||||
{
|
||||
"name": "obsidian-vault",
|
||||
@@ -491,7 +491,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T16:00:04.254276"
|
||||
"discovered": "2026-04-21T22:00:04.161509"
|
||||
},
|
||||
{
|
||||
"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-21T16:00:04.458045"
|
||||
"discovered": "2026-04-21T22:00:04.577894"
|
||||
},
|
||||
{
|
||||
"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-21T16:00:03.654108"
|
||||
"discovered": "2026-04-21T22:00:03.221142"
|
||||
},
|
||||
{
|
||||
"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-21T16:00:04.546821"
|
||||
"discovered": "2026-04-21T22:00:04.697798"
|
||||
},
|
||||
{
|
||||
"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-21T16:00:04.032534"
|
||||
"discovered": "2026-04-21T22:00:03.624791"
|
||||
},
|
||||
{
|
||||
"name": "paperclip-skills",
|
||||
@@ -556,7 +556,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T16:00:04.306955"
|
||||
"discovered": "2026-04-21T22:00:04.336361"
|
||||
},
|
||||
{
|
||||
"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-21T16:00:04.083587"
|
||||
"discovered": "2026-04-21T22:00:03.818833"
|
||||
},
|
||||
{
|
||||
"name": "qdrant-data",
|
||||
@@ -582,7 +582,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T16:00:04.389173"
|
||||
"discovered": "2026-04-21T22:00:04.491727"
|
||||
},
|
||||
{
|
||||
"name": "wazuh",
|
||||
@@ -595,7 +595,7 @@
|
||||
"has_docker": true,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T16:00:04.736401"
|
||||
"discovered": "2026-04-21T22:00:04.821072"
|
||||
},
|
||||
{
|
||||
"name": "plausible",
|
||||
@@ -608,7 +608,7 @@
|
||||
"has_docker": true,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T16:00:04.342191"
|
||||
"discovered": "2026-04-21T22:00:04.384789"
|
||||
},
|
||||
{
|
||||
"name": "pmta",
|
||||
@@ -621,7 +621,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T16:00:04.355029"
|
||||
"discovered": "2026-04-21T22:00:04.425011"
|
||||
},
|
||||
{
|
||||
"name": "render-configs",
|
||||
@@ -634,7 +634,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T16:00:04.408294"
|
||||
"discovered": "2026-04-21T22:00:04.512799"
|
||||
},
|
||||
{
|
||||
"name": "searxng",
|
||||
@@ -647,7 +647,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T16:00:04.515442"
|
||||
"discovered": "2026-04-21T22:00:04.655536"
|
||||
},
|
||||
{
|
||||
"name": "weval-guardian",
|
||||
@@ -660,7 +660,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T16:00:04.798671"
|
||||
"discovered": "2026-04-21T22:00:04.884665"
|
||||
},
|
||||
{
|
||||
"name": "weval-litellm",
|
||||
@@ -673,7 +673,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T16:00:04.838732"
|
||||
"discovered": "2026-04-21T22:00:04.917338"
|
||||
},
|
||||
{
|
||||
"name": "weval-security",
|
||||
@@ -686,7 +686,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T16:00:04.963419"
|
||||
"discovered": "2026-04-21T22:00:05.041856"
|
||||
},
|
||||
{
|
||||
"name": "archive",
|
||||
@@ -699,7 +699,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T16:00:03.953415"
|
||||
"discovered": "2026-04-21T22:00:03.557008"
|
||||
},
|
||||
{
|
||||
"name": "loki",
|
||||
@@ -712,7 +712,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T16:00:04.161645"
|
||||
"discovered": "2026-04-21T22:00:03.979360"
|
||||
},
|
||||
{
|
||||
"name": "ruflo",
|
||||
@@ -725,7 +725,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T16:00:04.507898"
|
||||
"discovered": "2026-04-21T22:00:04.637108"
|
||||
},
|
||||
{
|
||||
"name": "twenty",
|
||||
@@ -738,7 +738,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T16:00:04.616634"
|
||||
"discovered": "2026-04-21T22:00:04.769414"
|
||||
},
|
||||
{
|
||||
"name": "weval-crewai",
|
||||
@@ -751,7 +751,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T16:00:04.772973"
|
||||
"discovered": "2026-04-21T22:00:04.866329"
|
||||
},
|
||||
{
|
||||
"name": "weval-plugins",
|
||||
@@ -764,7 +764,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T16:00:04.900134"
|
||||
"discovered": "2026-04-21T22:00:04.993748"
|
||||
},
|
||||
{
|
||||
"name": "weval-radar",
|
||||
@@ -777,7 +777,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T16:00:04.918896"
|
||||
"discovered": "2026-04-21T22:00:05.008804"
|
||||
},
|
||||
{
|
||||
"name": "weval-scrapy",
|
||||
@@ -790,7 +790,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T16:00:04.943506"
|
||||
"discovered": "2026-04-21T22:00:05.010801"
|
||||
},
|
||||
{
|
||||
"name": "langfuse",
|
||||
@@ -803,7 +803,7 @@
|
||||
"has_docker": true,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T16:00:04.086570"
|
||||
"discovered": "2026-04-21T22:00:03.820788"
|
||||
},
|
||||
{
|
||||
"name": "litellm",
|
||||
@@ -816,7 +816,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T16:00:04.126567"
|
||||
"discovered": "2026-04-21T22:00:03.904792"
|
||||
},
|
||||
{
|
||||
"name": "mattermost-docker",
|
||||
@@ -829,7 +829,7 @@
|
||||
"has_docker": true,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T16:00:04.180697"
|
||||
"discovered": "2026-04-21T22:00:04.039945"
|
||||
},
|
||||
{
|
||||
"name": "prometheus",
|
||||
@@ -842,7 +842,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T16:00:04.375182"
|
||||
"discovered": "2026-04-21T22:00:04.466744"
|
||||
},
|
||||
{
|
||||
"name": "twenty-compose",
|
||||
@@ -855,7 +855,7 @@
|
||||
"has_docker": true,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T16:00:04.666219"
|
||||
"discovered": "2026-04-21T22:00:04.793620"
|
||||
},
|
||||
{
|
||||
"name": "weval-ux",
|
||||
@@ -868,7 +868,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T16:00:04.979610"
|
||||
"discovered": "2026-04-21T22:00:05.050057"
|
||||
},
|
||||
{
|
||||
"name": "wevia-integrity",
|
||||
@@ -881,7 +881,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T16:00:05.022215"
|
||||
"discovered": "2026-04-21T22:00:05.075527"
|
||||
},
|
||||
{
|
||||
"name": "DiffusionDB",
|
||||
@@ -894,7 +894,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T16:00:03.583864"
|
||||
"discovered": "2026-04-21T22:00:03.172024"
|
||||
},
|
||||
{
|
||||
"name": "LTX-Video",
|
||||
@@ -907,7 +907,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T16:00:03.808120"
|
||||
"discovered": "2026-04-21T22:00:03.336762"
|
||||
},
|
||||
{
|
||||
"name": "localai",
|
||||
@@ -920,7 +920,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T16:00:04.148879"
|
||||
"discovered": "2026-04-21T22:00:03.943489"
|
||||
},
|
||||
{
|
||||
"name": "wevia-finetune",
|
||||
@@ -933,6 +933,6 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-21T16:00:05.013075"
|
||||
"discovered": "2026-04-21T22:00:05.070906"
|
||||
}
|
||||
]
|
||||
126
api/playwright-opus-session-20260421-final.json
Normal file
@@ -0,0 +1,126 @@
|
||||
{
|
||||
"ts": "2026-04-21T16:50:48+0200",
|
||||
"passed": 16,
|
||||
"total": 17,
|
||||
"results": [
|
||||
{
|
||||
"label": "auth \u00b7 faq-techniques",
|
||||
"url": "https://weval-consulting.com/faq-techniques.html",
|
||||
"expect": 302,
|
||||
"got": 302,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"label": "auth \u00b7 wepredict",
|
||||
"url": "https://weval-consulting.com/wepredict.html",
|
||||
"expect": 302,
|
||||
"got": 302,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"label": "auth \u00b7 faq-knowledge-base",
|
||||
"url": "https://weval-consulting.com/faq-knowledge-base.html",
|
||||
"expect": 302,
|
||||
"got": 302,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"label": "auth \u00b7 landing-ocp",
|
||||
"url": "https://weval-consulting.com/landing-ocp.html",
|
||||
"expect": 302,
|
||||
"got": 302,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"label": "auth \u00b7 pricing",
|
||||
"url": "https://weval-consulting.com/pricing.html",
|
||||
"expect": 302,
|
||||
"got": 302,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"label": "public \u00b7 homepage",
|
||||
"url": "https://weval-consulting.com/index.html",
|
||||
"expect": 200,
|
||||
"got": 200,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"label": "public \u00b7 solutions",
|
||||
"url": "https://weval-consulting.com/solutions.html",
|
||||
"expect": 200,
|
||||
"got": 200,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"label": "public \u00b7 booking",
|
||||
"url": "https://weval-consulting.com/booking.html",
|
||||
"expect": 200,
|
||||
"got": 200,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"label": "public \u00b7 pitch (P5 clean)",
|
||||
"url": "https://weval-consulting.com/pitch.html",
|
||||
"expect": 200,
|
||||
"got": 200,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"label": "public \u00b7 ecosysteme (P5 clean)",
|
||||
"url": "https://weval-consulting.com/ecosysteme-ia-maroc.html",
|
||||
"expect": 200,
|
||||
"got": 200,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"label": "internal \u00b7 token-health-dashboard",
|
||||
"url": "https://weval-consulting.com/token-health-dashboard.html",
|
||||
"expect": 200,
|
||||
"got": 200,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"label": "internal \u00b7 coverage-dashboard",
|
||||
"url": "https://weval-consulting.com/wtp-udock-coverage.html",
|
||||
"expect": 200,
|
||||
"got": 200,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"label": "internal \u00b7 WTP ERP",
|
||||
"url": "https://weval-consulting.com/weval-technology-platform.html",
|
||||
"expect": 200,
|
||||
"got": 200,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"label": "internal \u00b7 wiki",
|
||||
"url": "https://weval-consulting.com/wiki.html",
|
||||
"expect": 200,
|
||||
"got": 302,
|
||||
"pass": false
|
||||
},
|
||||
{
|
||||
"label": "api \u00b7 KPI aggregator",
|
||||
"url": "https://weval-consulting.com/api/wtp-kpi-global.php",
|
||||
"expect": 200,
|
||||
"got": 200,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"label": "api \u00b7 coverage scanner",
|
||||
"url": "https://weval-consulting.com/api/wtp-udock-coverage.php",
|
||||
"expect": 200,
|
||||
"got": 200,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"label": "api \u00b7 orphans scanner",
|
||||
"url": "https://weval-consulting.com/api/pages-orphans-list.php",
|
||||
"expect": 200,
|
||||
"got": 200,
|
||||
"pass": true
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"date": "2026-04-21 10:00:02",
|
||||
"date": "2026-04-21 16:00:02",
|
||||
"query": "multi-agent orchestration",
|
||||
"new_repos": 0,
|
||||
"cloned": 0,
|
||||
|
||||
@@ -1 +1 @@
|
||||
[{"q":"Bonjour, comment vas-tu?","ts":"2026-04-19T17:33:48+00:00"},{"q":"Reply OK only","ts":"2026-04-19T18:21:04+00:00"},{"q":"v49_state_100pct","ts":"2026-04-19T19:30:34+00:00"},{"q":"apple entities","ts":"2026-04-20T01:59:09+00:00"},{"q":"iptables","ts":"2026-04-20T21:15:24+00:00"}]
|
||||
[{"q": "apple entities", "ts": "2026-04-20T01:59:09+00:00"}, {"q": "iptables", "ts": "2026-04-20T21:15:24+00:00"}]
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"timestamp": "2026-04-21T16:30:12",
|
||||
"timestamp": "2026-04-21T22:30:12",
|
||||
"features": {
|
||||
"total": 36,
|
||||
"pass": 35
|
||||
@@ -13,7 +13,7 @@
|
||||
"score": 97.2,
|
||||
"log": [
|
||||
"=== UX AGENT v1.0 ===",
|
||||
"Time: 2026-04-21 16:30:01",
|
||||
"Time: 2026-04-21 22:30:01",
|
||||
" core: 4/4",
|
||||
" layout: 3/4",
|
||||
" interaction: 6/6",
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"ok": true,
|
||||
"version": "V83-business-kpi",
|
||||
"ts": "2026-04-21T14:42:43+00:00",
|
||||
"ts": "2026-04-21T20:50:17+00:00",
|
||||
"summary": {
|
||||
"total_categories": 8,
|
||||
"total_kpis": 64,
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"timestamp": "2026-04-21 14:00:02",
|
||||
"timestamp": "2026-04-21 18:00:02",
|
||||
"frameworks": [
|
||||
{
|
||||
"name": "Lean Six Sigma",
|
||||
@@ -8,7 +8,7 @@
|
||||
{
|
||||
"name": "KPIs defined",
|
||||
"ok": true,
|
||||
"detail": "Quality=98.3%"
|
||||
"detail": "Quality=99%"
|
||||
},
|
||||
{
|
||||
"name": "Monitoring",
|
||||
@@ -18,7 +18,7 @@
|
||||
{
|
||||
"name": "Quality>95",
|
||||
"ok": true,
|
||||
"detail": "98.3%"
|
||||
"detail": "99%"
|
||||
},
|
||||
{
|
||||
"name": "Auto-fix",
|
||||
@@ -46,7 +46,7 @@
|
||||
{
|
||||
"name": "Change Mgmt",
|
||||
"ok": true,
|
||||
"detail": "3629 commits\/7d"
|
||||
"detail": "3658 commits\/7d"
|
||||
},
|
||||
{
|
||||
"name": "SLA Monitor",
|
||||
@@ -84,7 +84,7 @@
|
||||
{
|
||||
"name": "Nonconformity",
|
||||
"ok": true,
|
||||
"detail": "98.3%"
|
||||
"detail": "99%"
|
||||
}
|
||||
],
|
||||
"s": 3,
|
||||
@@ -153,7 +153,7 @@
|
||||
{
|
||||
"name": "CI\/CD",
|
||||
"ok": true,
|
||||
"detail": "3629 commits"
|
||||
"detail": "3658 commits"
|
||||
},
|
||||
{
|
||||
"name": "Auto testing",
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
},
|
||||
{
|
||||
"layer": "PHP-API",
|
||||
"name": "807/813 syntax OK",
|
||||
"name": "822/828 syntax OK",
|
||||
"status": "F",
|
||||
"detail": "6 errors"
|
||||
},
|
||||
@@ -58,7 +58,7 @@
|
||||
"layer": "CRON",
|
||||
"name": "quality",
|
||||
"status": "F",
|
||||
"detail": "11700min ago"
|
||||
"detail": "11940min ago"
|
||||
},
|
||||
{
|
||||
"layer": "CRON",
|
||||
@@ -75,14 +75,14 @@
|
||||
{
|
||||
"layer": "CRON",
|
||||
"name": "control-tower",
|
||||
"status": "P",
|
||||
"detail": "90min ago"
|
||||
"status": "F",
|
||||
"detail": "150min ago"
|
||||
},
|
||||
{
|
||||
"layer": "CRON",
|
||||
"name": "l99-ux",
|
||||
"status": "F",
|
||||
"detail": "270min ago"
|
||||
"detail": "150min ago"
|
||||
},
|
||||
{
|
||||
"layer": "CRON",
|
||||
@@ -117,8 +117,8 @@
|
||||
{
|
||||
"layer": "CRON",
|
||||
"name": "blade",
|
||||
"status": "P",
|
||||
"detail": "0min ago"
|
||||
"status": "F",
|
||||
"detail": "130min ago"
|
||||
},
|
||||
{
|
||||
"layer": "CRON",
|
||||
@@ -130,31 +130,31 @@
|
||||
"layer": "CRON",
|
||||
"name": "watchdog",
|
||||
"status": "F",
|
||||
"detail": "11172min ago"
|
||||
"detail": "11412min ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "l99-analysis.json",
|
||||
"status": "F",
|
||||
"detail": "valid 208h ago"
|
||||
"detail": "valid 212h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "l99-artifacts-index.json",
|
||||
"status": "F",
|
||||
"detail": "valid 263h ago"
|
||||
"detail": "valid 267h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "l99-auth-results.json",
|
||||
"status": "F",
|
||||
"detail": "valid 282h ago"
|
||||
"detail": "valid 286h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "l99-auth-selenium-results.json",
|
||||
"status": "F",
|
||||
"detail": "valid 257h ago"
|
||||
"detail": "valid 261h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
@@ -166,259 +166,259 @@
|
||||
"layer": "JSON",
|
||||
"name": "l99-autonomous-prev.json",
|
||||
"status": "F",
|
||||
"detail": "valid 260h ago"
|
||||
"detail": "valid 264h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "l99-autonomous-report.json",
|
||||
"status": "F",
|
||||
"detail": "valid 207h ago"
|
||||
"detail": "valid 211h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "l99-brain-chat-test.json",
|
||||
"status": "F",
|
||||
"detail": "valid 246h ago"
|
||||
"detail": "valid 250h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "l99-chat-user-state.json",
|
||||
"status": "F",
|
||||
"detail": "valid 234h ago"
|
||||
"detail": "valid 238h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "l99-dark-results.json",
|
||||
"status": "F",
|
||||
"detail": "valid 264h ago"
|
||||
"detail": "valid 268h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "l99-deep-scan.json",
|
||||
"status": "F",
|
||||
"detail": "valid 290h ago"
|
||||
"detail": "valid 294h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "l99-deep-test-result.json",
|
||||
"status": "F",
|
||||
"detail": "valid 231h ago"
|
||||
"detail": "valid 235h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "l99-deep-test.json",
|
||||
"status": "F",
|
||||
"detail": "valid 246h ago"
|
||||
"detail": "valid 250h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "l99-deep.json",
|
||||
"status": "F",
|
||||
"detail": "valid 370h ago"
|
||||
"detail": "valid 374h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "l99-e2e-report.json",
|
||||
"status": "F",
|
||||
"detail": "valid 329h ago"
|
||||
"detail": "valid 333h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "l99-enterprise-test.json",
|
||||
"status": "F",
|
||||
"detail": "valid 61h ago"
|
||||
"detail": "valid 65h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "l99-exhaustive.json",
|
||||
"status": "F",
|
||||
"detail": "valid 240h ago"
|
||||
"detail": "valid 244h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "l99-full-results.json",
|
||||
"status": "F",
|
||||
"detail": "valid 257h ago"
|
||||
"detail": "valid 261h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "l99-functional-result.json",
|
||||
"status": "F",
|
||||
"detail": "valid 232h ago"
|
||||
"detail": "valid 236h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "l99-godmode-results.json",
|
||||
"status": "F",
|
||||
"detail": "valid 236h ago"
|
||||
"detail": "valid 240h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "l99-meeting-results.json",
|
||||
"status": "F",
|
||||
"detail": "valid 370h ago"
|
||||
"detail": "valid 374h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "l99-mega-benchmark.json",
|
||||
"status": "F",
|
||||
"detail": "valid 208h ago"
|
||||
"detail": "valid 212h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "l99-mega-check.json",
|
||||
"status": "F",
|
||||
"detail": "valid 196h ago"
|
||||
"detail": "valid 200h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "l99-mega-latest.json",
|
||||
"status": "F",
|
||||
"detail": "valid 42h ago"
|
||||
"detail": "valid 46h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "l99-mega-results.json",
|
||||
"status": "F",
|
||||
"detail": "valid 109h ago"
|
||||
"detail": "valid 113h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "l99-opus-parity.json",
|
||||
"status": "F",
|
||||
"detail": "valid 260h ago"
|
||||
"detail": "valid 264h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "l99-pw-integration.json",
|
||||
"status": "F",
|
||||
"detail": "valid 259h ago"
|
||||
"detail": "valid 263h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "l99-pw-master.json",
|
||||
"status": "F",
|
||||
"detail": "valid 259h ago"
|
||||
"detail": "valid 263h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "l99-pw-public.json",
|
||||
"status": "F",
|
||||
"detail": "valid 259h ago"
|
||||
"detail": "valid 263h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "l99-registry.json",
|
||||
"status": "F",
|
||||
"detail": "valid 240h ago"
|
||||
"detail": "valid 244h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "l99-results.json",
|
||||
"status": "F",
|
||||
"detail": "valid 290h ago"
|
||||
"detail": "valid 294h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "l99-route-test.json",
|
||||
"status": "F",
|
||||
"detail": "valid 348h ago"
|
||||
"detail": "valid 352h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "l99-security.json",
|
||||
"status": "P",
|
||||
"detail": "valid 4h ago"
|
||||
"detail": "valid 2h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "l99-semantic-report.json",
|
||||
"status": "F",
|
||||
"detail": "valid 240h ago"
|
||||
"detail": "valid 244h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "l99-semantic-result.json",
|
||||
"status": "F",
|
||||
"detail": "valid 196h ago"
|
||||
"detail": "valid 200h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "l99-state.json",
|
||||
"status": "F",
|
||||
"detail": "valid 110h ago"
|
||||
"detail": "valid 114h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "l99-systematic.json",
|
||||
"status": "F",
|
||||
"detail": "valid 233h ago"
|
||||
"detail": "valid 237h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "l99-ultimate.json",
|
||||
"status": "F",
|
||||
"detail": "valid 257h ago"
|
||||
"detail": "valid 261h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "l99-ux-results.json",
|
||||
"status": "F",
|
||||
"detail": "valid 197h ago"
|
||||
"detail": "valid 201h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "l99-visual-analysis.json",
|
||||
"status": "F",
|
||||
"detail": "valid 370h ago"
|
||||
"detail": "valid 374h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "l99-visual-extended-result.json",
|
||||
"status": "F",
|
||||
"detail": "valid 234h ago"
|
||||
"detail": "valid 238h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "l99-visual-result.json",
|
||||
"status": "F",
|
||||
"detail": "valid 236h ago"
|
||||
"detail": "valid 240h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "l99-visual-results.json",
|
||||
"status": "F",
|
||||
"detail": "valid 26h ago"
|
||||
"detail": "valid 30h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "l99-watchdog.json",
|
||||
"status": "F",
|
||||
"detail": "valid 232h ago"
|
||||
"detail": "valid 236h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "wevia-actions-log.json",
|
||||
"status": "F",
|
||||
"detail": "valid 348h ago"
|
||||
"detail": "valid 352h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "wevia-actions-status.json",
|
||||
"status": "F",
|
||||
"detail": "valid 348h ago"
|
||||
"detail": "valid 352h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "wevia-agents-pack-status.json",
|
||||
"status": "F",
|
||||
"detail": "valid 207h ago"
|
||||
"detail": "valid 211h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "wevia-agents-registry.json",
|
||||
"status": "F",
|
||||
"detail": "valid 180h ago"
|
||||
"detail": "valid 184h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
@@ -430,7 +430,7 @@
|
||||
"layer": "JSON",
|
||||
"name": "wevia-architecture.json",
|
||||
"status": "F",
|
||||
"detail": "valid 348h ago"
|
||||
"detail": "valid 352h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
@@ -442,7 +442,7 @@
|
||||
"layer": "JSON",
|
||||
"name": "wevia-autodoc.json",
|
||||
"status": "F",
|
||||
"detail": "valid 348h ago"
|
||||
"detail": "valid 352h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
@@ -460,79 +460,79 @@
|
||||
"layer": "JSON",
|
||||
"name": "wevia-capabilities.json",
|
||||
"status": "F",
|
||||
"detail": "valid 290h ago"
|
||||
"detail": "valid 294h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "wevia-capability-test.json",
|
||||
"status": "F",
|
||||
"detail": "valid 289h ago"
|
||||
"detail": "valid 293h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "wevia-cascade-config.json",
|
||||
"status": "F",
|
||||
"detail": "valid 109h ago"
|
||||
"detail": "valid 113h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "wevia-control-tower.json",
|
||||
"status": "F",
|
||||
"detail": "valid 208h ago"
|
||||
"detail": "valid 212h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "wevia-daily-report.json",
|
||||
"status": "P",
|
||||
"detail": "valid 10h ago"
|
||||
"detail": "valid 14h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "wevia-fleet-status.json",
|
||||
"status": "F",
|
||||
"detail": "valid 351h ago"
|
||||
"detail": "valid 355h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "wevia-gap-analysis.json",
|
||||
"status": "F",
|
||||
"detail": "valid 290h ago"
|
||||
"detail": "valid 294h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "wevia-gap-filler-results.json",
|
||||
"status": "F",
|
||||
"detail": "valid 109h ago"
|
||||
"detail": "valid 113h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "wevia-live-context.json",
|
||||
"status": "F",
|
||||
"detail": "valid 259h ago"
|
||||
"detail": "valid 263h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "wevia-manifest.json",
|
||||
"status": "F",
|
||||
"detail": "valid 348h ago"
|
||||
"detail": "valid 352h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "wevia-master-brain.json",
|
||||
"status": "F",
|
||||
"detail": "valid 109h ago"
|
||||
"detail": "valid 113h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "wevia-master-test-results.json",
|
||||
"status": "F",
|
||||
"detail": "valid 289h ago"
|
||||
"detail": "valid 293h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "wevia-meeting-report.json",
|
||||
"status": "F",
|
||||
"detail": "valid 208h ago"
|
||||
"detail": "valid 212h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
@@ -544,7 +544,7 @@
|
||||
"layer": "JSON",
|
||||
"name": "wevia-page-scan.json",
|
||||
"status": "F",
|
||||
"detail": "valid 348h ago"
|
||||
"detail": "valid 352h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
@@ -556,7 +556,7 @@
|
||||
"layer": "JSON",
|
||||
"name": "wevia-plugin-registry.json",
|
||||
"status": "F",
|
||||
"detail": "valid 94h ago"
|
||||
"detail": "valid 98h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
@@ -574,7 +574,7 @@
|
||||
"layer": "JSON",
|
||||
"name": "wevia-quality.json",
|
||||
"status": "F",
|
||||
"detail": "valid 351h ago"
|
||||
"detail": "valid 355h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
@@ -586,7 +586,7 @@
|
||||
"layer": "JSON",
|
||||
"name": "wevia-regression-status.json",
|
||||
"status": "F",
|
||||
"detail": "valid 371h ago"
|
||||
"detail": "valid 375h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
@@ -598,49 +598,49 @@
|
||||
"layer": "JSON",
|
||||
"name": "wevia-sso-guardian.json",
|
||||
"status": "F",
|
||||
"detail": "valid 349h ago"
|
||||
"detail": "valid 353h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "wevia-standup-latest.json",
|
||||
"status": "F",
|
||||
"detail": "valid 42h ago"
|
||||
"detail": "valid 46h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "wevia-systematic-last.json",
|
||||
"status": "F",
|
||||
"detail": "valid 208h ago"
|
||||
"detail": "valid 212h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "wevia-systematic-status.json",
|
||||
"status": "F",
|
||||
"detail": "valid 109h ago"
|
||||
"detail": "valid 113h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "wevia-tool-registry.json",
|
||||
"status": "P",
|
||||
"detail": "valid 0h ago"
|
||||
"detail": "valid 3h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "wevia-truth-registry.json",
|
||||
"status": "F",
|
||||
"detail": "valid 46h ago"
|
||||
"detail": "valid 50h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "wevia-ux-audit.json",
|
||||
"status": "F",
|
||||
"detail": "valid 348h ago"
|
||||
"detail": "valid 352h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "wevia-wiki-entries.json",
|
||||
"status": "P",
|
||||
"detail": "valid 1h ago"
|
||||
"detail": "valid 5h ago"
|
||||
},
|
||||
{
|
||||
"layer": "PIPELINE",
|
||||
@@ -841,15 +841,15 @@
|
||||
"detail": "69 tables"
|
||||
}
|
||||
],
|
||||
"timestamp": "2026-04-21T16:30:02.265813",
|
||||
"timestamp": "2026-04-21T20:30:01.910368",
|
||||
"type": "register",
|
||||
"pass": 57,
|
||||
"fail": 83,
|
||||
"pass": 55,
|
||||
"fail": 85,
|
||||
"warn": 0,
|
||||
"total": 140,
|
||||
"pct": 40.7,
|
||||
"pct": 39.3,
|
||||
"inventory": {
|
||||
"api_php": 813,
|
||||
"api_php": 828,
|
||||
"brain_php": 34,
|
||||
"crons": 14,
|
||||
"json_status": 41,
|
||||
|
||||
@@ -3539,7 +3539,7 @@
|
||||
"id": "sovereign_providers_list",
|
||||
"kw": "sovereign.*provider|provider.*list|sovereign.*add|add.*provider|sovereign.*scale",
|
||||
"api": "exec",
|
||||
"cmd": "curl -s http://127.0.0.1:4000/health --max-time 5 | python3 -c \"import json,sys;d=json.load(sys.stdin);print('Active:',d['active'],'/',d['total']);[print(' -',p) for p in d['providers']]\" 2>/dev/null || echo \"Sovereign DOWN \u2014 restart: systemctl restart sovereign-api\""
|
||||
"cmd": "curl -s http://127.0.0.1:4000/health --max-time 5 | python3 -c \"import json,sys;d=json.load(sys.stdin);print('Active:',d['active'],'/',d['total']);[print(' -',p) for p in d['providers']]\" 2>/dev/null || echo \"Sovereign DOWN — restart: systemctl restart sovereign-api\""
|
||||
},
|
||||
{
|
||||
"id": "all_agents_status",
|
||||
@@ -4417,7 +4417,7 @@
|
||||
"file": "/api/wevia-apple-intents.php",
|
||||
"action": "POST_prompt",
|
||||
"priority": 90,
|
||||
"desc": "\u00c9tat WEVIA Apple ingestion"
|
||||
"desc": "État WEVIA Apple ingestion"
|
||||
},
|
||||
{
|
||||
"id": "apple_reco",
|
||||
@@ -4453,7 +4453,7 @@
|
||||
"file": "/api/wevia-apple-intents.php",
|
||||
"action": "POST_prompt",
|
||||
"priority": 94,
|
||||
"desc": "Entit\u00e9s extraites"
|
||||
"desc": "Entités extraites"
|
||||
},
|
||||
{
|
||||
"id": "apple_tasks",
|
||||
@@ -4481,6 +4481,33 @@
|
||||
"desc": "V93: Real auto-wire router - matches KPI intent and executes stripe/cs/growth wires",
|
||||
"since": "V93",
|
||||
"added_ts": "2026-04-20T22:36:00+02:00"
|
||||
},
|
||||
{
|
||||
"id": "token_rotate_scan",
|
||||
"kw": "token.*rotate|expired.*token|token.*expired|rotation.*token",
|
||||
"cmd": "curl -sk -X POST http://127.0.0.1/api/token-rotate-orchestrator.php -H 'Host: weval-consulting.com' -H 'Content-Type: application/json' --data '{\"action\":\"scan\"}' 2>/dev/null",
|
||||
"exec": true,
|
||||
"desc": "Scan expired tokens via orchestrator",
|
||||
"since": "opus-session-20260421-v4",
|
||||
"added_ts": "2026-04-21T16:49:18+02:00"
|
||||
},
|
||||
{
|
||||
"id": "token_rotate_plan",
|
||||
"kw": "plan.*rotation|rotation.*plan|token.*priority",
|
||||
"cmd": "curl -sk -X POST http://127.0.0.1/api/token-rotate-orchestrator.php -H 'Host: weval-consulting.com' -H 'Content-Type: application/json' --data '{\"action\":\"plan\"}' 2>/dev/null",
|
||||
"exec": true,
|
||||
"desc": "Priority rotation plan per provider",
|
||||
"since": "opus-session-20260421-v4",
|
||||
"added_ts": "2026-04-21T16:49:18+02:00"
|
||||
},
|
||||
{
|
||||
"id": "token_health_dashboard",
|
||||
"kw": "token.*health|token.*dashboard|token.*monitor",
|
||||
"cmd": "echo 'Token Health Dashboard: https://weval-consulting.com/token-health-dashboard.html · 17 providers live'",
|
||||
"exec": true,
|
||||
"desc": "Token health UI 17 providers",
|
||||
"since": "opus-session-20260421-v4",
|
||||
"added_ts": "2026-04-21T16:49:18+02:00"
|
||||
}
|
||||
],
|
||||
"opus_safe_wire": {
|
||||
|
||||
249
dashboards-index.html
Normal file
@@ -0,0 +1,249 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="fr"><head><meta charset="UTF-8"><title>📊 Dashboards Index · WEVAL Consolidated</title>
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||
<link rel="icon" type="image/svg+xml" href="/favicon.svg">
|
||||
<style>
|
||||
*{margin:0;padding:0;box-sizing:border-box;font-family:-apple-system,'Segoe UI',sans-serif}
|
||||
body{background:linear-gradient(135deg,#0b0d15 0%,#1a1f3a 100%);color:#e2e8f0;min-height:100vh;padding:20px}
|
||||
.container{max-width:1400px;margin:0 auto}
|
||||
h1{font-family:'Orbitron',sans-serif;font-weight:900;
|
||||
background:linear-gradient(135deg,#06b6d4,#8b5cf6,#ec4899);
|
||||
-webkit-background-clip:text;-webkit-text-fill-color:transparent;
|
||||
font-size:2.2rem;margin-bottom:6px;letter-spacing:1.5px;text-transform:uppercase}
|
||||
.subtitle{color:#94a3b8;margin-bottom:20px;font-size:0.9rem}
|
||||
.hero{background:linear-gradient(135deg,rgba(6,182,212,0.08),rgba(139,92,246,0.08),rgba(236,72,153,0.06));
|
||||
border:1px solid rgba(6,182,212,0.25);border-radius:16px;padding:22px;margin-bottom:24px;
|
||||
backdrop-filter:blur(16px);position:relative;overflow:hidden}
|
||||
.hero::before{content:'';position:absolute;top:-50%;right:-50%;width:100%;height:100%;
|
||||
background:radial-gradient(circle,rgba(6,182,212,0.08) 0%,transparent 70%);pointer-events:none}
|
||||
.hero-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:14px;position:relative}
|
||||
.stat{text-align:center;padding:8px 4px}
|
||||
.stat-val{font-family:'Orbitron',sans-serif;font-size:2rem;font-weight:900;line-height:1}
|
||||
.stat-val.success{color:#22c55e}
|
||||
.stat-val.warn{color:#f59e0b}
|
||||
.stat-val.info{color:#06b6d4}
|
||||
.stat-val.purple{color:#a855f7}
|
||||
.stat-lbl{font-size:0.65rem;color:#64748b;text-transform:uppercase;letter-spacing:1.5px;margin-top:4px}
|
||||
|
||||
.filters{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:20px}
|
||||
.filter{padding:6px 14px;border-radius:8px;font-size:0.78rem;font-weight:700;cursor:pointer;
|
||||
background:rgba(30,41,59,0.8);color:#94a3b8;border:1px solid rgba(100,116,139,0.2);
|
||||
transition:all 0.15s;text-transform:uppercase;letter-spacing:0.5px}
|
||||
.filter.active{background:linear-gradient(135deg,#06b6d4,#8b5cf6);color:#fff;border-color:transparent}
|
||||
.filter:hover{transform:translateY(-1px)}
|
||||
|
||||
.section-title{color:#c084fc;font-size:0.85rem;font-weight:800;text-transform:uppercase;
|
||||
letter-spacing:2px;margin:22px 0 10px;padding-left:10px;border-left:3px solid #a855f7}
|
||||
|
||||
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:14px;margin-bottom:20px}
|
||||
.card{background:rgba(15,23,42,0.85);border:1px solid rgba(100,116,139,0.15);border-radius:12px;
|
||||
padding:14px 16px;transition:all 0.2s;display:block;text-decoration:none;color:inherit;
|
||||
position:relative;overflow:hidden}
|
||||
.card:hover{transform:translateY(-2px);border-color:rgba(6,182,212,0.4);
|
||||
box-shadow:0 8px 24px rgba(6,182,212,0.12)}
|
||||
.card::after{content:'→';position:absolute;top:14px;right:14px;color:#64748b;font-size:1.2rem;
|
||||
transition:all 0.2s}
|
||||
.card:hover::after{color:#06b6d4;transform:translateX(3px)}
|
||||
.card-header{display:flex;align-items:center;gap:10px;margin-bottom:6px}
|
||||
.card-icon{font-size:1.4rem}
|
||||
.card-title{font-weight:800;font-size:0.95rem;color:#e2e8f0}
|
||||
.card-desc{color:#94a3b8;font-size:0.78rem;line-height:1.4;margin-bottom:8px}
|
||||
.card-meta{display:flex;gap:8px;font-size:0.7rem}
|
||||
.badge{padding:2px 8px;border-radius:10px;font-weight:700;text-transform:uppercase;letter-spacing:0.5px}
|
||||
.badge.new{background:rgba(34,197,94,0.15);color:#22c55e}
|
||||
.badge.flagship{background:rgba(168,85,247,0.15);color:#c084fc}
|
||||
.badge.internal{background:rgba(6,182,212,0.12);color:#06b6d4}
|
||||
|
||||
.footer{margin-top:30px;padding:14px;text-align:center;color:#64748b;font-size:0.8rem;
|
||||
border-top:1px solid rgba(100,116,139,0.15)}
|
||||
.footer a{color:#06b6d4;text-decoration:none;margin:0 8px}
|
||||
</style></head><body>
|
||||
<div class="container">
|
||||
<h1>📊 Dashboards Index · Consolidated</h1>
|
||||
<p class="subtitle">Point d'entrée unique · 17 dashboards organisés par catégorie · Source de vérité unique</p>
|
||||
|
||||
<section class="hero">
|
||||
<div class="hero-stats">
|
||||
<div class="stat"><div class="stat-val success" id="stat-dashboards">17</div><div class="stat-lbl">Dashboards</div></div>
|
||||
<div class="stat"><div class="stat-val info" id="stat-dock">—</div><div class="stat-lbl">Dock Coverage</div></div>
|
||||
<div class="stat"><div class="stat-val success" id="stat-nonreg">—</div><div class="stat-lbl">NonReg</div></div>
|
||||
<div class="stat"><div class="stat-val purple" id="stat-arch">—</div><div class="stat-lbl">Architecture</div></div>
|
||||
<div class="stat"><div class="stat-val" id="stat-health">—</div><div class="stat-lbl">Token Health</div></div>
|
||||
<div class="stat"><div class="stat-val info" id="stat-providers">—</div><div class="stat-lbl">Providers</div></div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<div class="filters">
|
||||
<div class="filter active" data-cat="all">Tous</div>
|
||||
<div class="filter" data-cat="command">🎛 Command</div>
|
||||
<div class="filter" data-cat="monitor">📡 Monitor</div>
|
||||
<div class="filter" data-cat="business">💼 Business</div>
|
||||
<div class="filter" data-cat="infra">🖥 Infra</div>
|
||||
<div class="filter" data-cat="arch">🏗 Architecture</div>
|
||||
<div class="filter" data-cat="session">🔬 Session</div>
|
||||
</div>
|
||||
|
||||
<div class="section-title">🎛 Command Centers</div>
|
||||
<div class="grid" id="grid-command">
|
||||
<a href="/weval-technology-platform.html" class="card" data-cat="command">
|
||||
<div class="card-header"><span class="card-icon">🏛</span><span class="card-title">WTP ERP Global</span></div>
|
||||
<div class="card-desc">Point d'entrée de toute l'architecture · 16 modules ERP consolidés</div>
|
||||
<div class="card-meta"><span class="badge flagship">FLAGSHIP</span></div>
|
||||
</a>
|
||||
<a href="/command-center.html" class="card" data-cat="command">
|
||||
<div class="card-header"><span class="card-icon">🎛</span><span class="card-title">Command Center</span></div>
|
||||
<div class="card-desc">Centre de commande opérationnel global · 59KB rich</div>
|
||||
</a>
|
||||
<a href="/dg-command-center.html" class="card" data-cat="command">
|
||||
<div class="card-header"><span class="card-icon">👔</span><span class="card-title">DG Command Center</span></div>
|
||||
<div class="card-desc">Direction Générale · KPI executive · pilotage stratégique</div>
|
||||
</a>
|
||||
<a href="/mega-command-center.html" class="card" data-cat="command">
|
||||
<div class="card-header"><span class="card-icon">🌐</span><span class="card-title">Mega Command Center</span></div>
|
||||
<div class="card-desc">Super dashboard cross-functional</div>
|
||||
</a>
|
||||
<a href="/wevia-master.html" class="card" data-cat="command">
|
||||
<div class="card-header"><span class="card-icon">🧠</span><span class="card-title">WEVIA Master</span></div>
|
||||
<div class="card-desc">Chat autonome multi-agent · 630 tools registry</div>
|
||||
<div class="card-meta"><span class="badge flagship">BRAIN</span></div>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="section-title">📡 Monitors</div>
|
||||
<div class="grid">
|
||||
<a href="/claude-monitor.html" class="card" data-cat="monitor">
|
||||
<div class="card-header"><span class="card-icon">🤖</span><span class="card-title">Claude Monitor</span></div>
|
||||
<div class="card-desc">Opus & Sonnet agents activity tracking</div>
|
||||
</a>
|
||||
<a href="/ethica-monitor.html" class="card" data-cat="monitor">
|
||||
<div class="card-header"><span class="card-icon">💊</span><span class="card-title">Ethica Monitor</span></div>
|
||||
<div class="card-desc">Pipeline HCP + emails + B2B campaigns</div>
|
||||
</a>
|
||||
<a href="/realtime-monitor.html" class="card" data-cat="monitor">
|
||||
<div class="card-header"><span class="card-icon">⚡</span><span class="card-title">Realtime Monitor</span></div>
|
||||
<div class="card-desc">Live events + alerts streaming</div>
|
||||
</a>
|
||||
<a href="/crons-monitor.html" class="card" data-cat="monitor">
|
||||
<div class="card-header"><span class="card-icon">⏰</span><span class="card-title">Crons Monitor</span></div>
|
||||
<div class="card-desc">37 crons S204 + 38 crons S95 status</div>
|
||||
</a>
|
||||
<a href="/cyber-monitor.html" class="card" data-cat="monitor">
|
||||
<div class="card-header"><span class="card-icon">🔒</span><span class="card-title">Cyber Monitor</span></div>
|
||||
<div class="card-desc">CrowdSec + fail2ban + SSL + CVE scan</div>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="section-title">🏗 Architecture & Session</div>
|
||||
<div class="grid">
|
||||
<a href="/wtp-udock-coverage.html" class="card" data-cat="arch">
|
||||
<div class="card-header"><span class="card-icon">🔗</span><span class="card-title">Dock Coverage</span></div>
|
||||
<div class="card-desc">Navigation dock unifié · 276/276 = 100% internes</div>
|
||||
<div class="card-meta"><span class="badge new">NEW</span></div>
|
||||
</a>
|
||||
<a href="/token-health-dashboard.html" class="card" data-cat="arch">
|
||||
<div class="card-header"><span class="card-icon">🔑</span><span class="card-title">Token Health</span></div>
|
||||
<div class="card-desc">17 providers monitoring · runbook rotation</div>
|
||||
<div class="card-meta"><span class="badge new">NEW</span></div>
|
||||
</a>
|
||||
<a href="/architecture.html" class="card" data-cat="arch">
|
||||
<div class="card-header"><span class="card-icon">🏗</span><span class="card-title">Architecture</span></div>
|
||||
<div class="card-desc">Vue d'ensemble archi · 4 serveurs · L99</div>
|
||||
</a>
|
||||
<a href="/orphans-hub.html" class="card" data-cat="arch">
|
||||
<div class="card-header"><span class="card-icon">📎</span><span class="card-title">Orphans Hub</span></div>
|
||||
<div class="card-desc">Pages rebranchées · authority = 0 orphans</div>
|
||||
</a>
|
||||
<a href="/wiki.html" class="card" data-cat="session">
|
||||
<div class="card-header"><span class="card-icon">📘</span><span class="card-title">Wiki</span></div>
|
||||
<div class="card-desc">Knowledge base + Session Control Center live</div>
|
||||
</a>
|
||||
<a href="/nonreg.html" class="card" data-cat="session">
|
||||
<div class="card-header"><span class="card-icon">✅</span><span class="card-title">NonReg Dashboard</span></div>
|
||||
<div class="card-desc">153/153 tests stable 12 tours</div>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="section-title">💼 Business & Finance</div>
|
||||
<div class="grid">
|
||||
<a href="/business-kpi-dashboard.php" class="card" data-cat="business">
|
||||
<div class="card-header"><span class="card-icon">💼</span><span class="card-title">Business KPI</span></div>
|
||||
<div class="card-desc">V83 · 7 catégories · 56 KPIs</div>
|
||||
</a>
|
||||
<a href="/sales-hub.html" class="card" data-cat="business">
|
||||
<div class="card-header"><span class="card-icon">💰</span><span class="card-title">Sales Hub</span></div>
|
||||
<div class="card-desc">Pipeline CRM + leads segmentation</div>
|
||||
</a>
|
||||
<a href="/growth-engine.html" class="card" data-cat="business">
|
||||
<div class="card-header"><span class="card-icon">📈</span><span class="card-title">Growth Engine</span></div>
|
||||
<div class="card-desc">Acquisition + conversion + retention</div>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="section-title">🖥 Infrastructure</div>
|
||||
<div class="grid">
|
||||
<a href="/infra-command.html" class="card" data-cat="infra">
|
||||
<div class="card-header"><span class="card-icon">🖥</span><span class="card-title">Infra Command</span></div>
|
||||
<div class="card-desc">S204 + S95 servers · ports · services</div>
|
||||
</a>
|
||||
<a href="/blade-control.html" class="card" data-cat="infra">
|
||||
<div class="card-header"><span class="card-icon">🗡</span><span class="card-title">Blade Control</span></div>
|
||||
<div class="card-desc">Razer Blade Windows · auto-sync 60s agent</div>
|
||||
</a>
|
||||
<a href="/cron-control.html" class="card" data-cat="infra">
|
||||
<div class="card-header"><span class="card-icon">🛠</span><span class="card-title">Cron Control</span></div>
|
||||
<div class="card-desc">Crons lifecycle + force run</div>
|
||||
</a>
|
||||
<a href="/wevia-go-live.html" class="card" data-cat="infra">
|
||||
<div class="card-header"><span class="card-icon">🚀</span><span class="card-title">WEVIA Go-Live</span></div>
|
||||
<div class="card-desc">Deployment + release checklist</div>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="footer">
|
||||
<a href="/">Home</a> · <a href="/wiki.html">Wiki</a> · <a href="/weval-technology-platform.html">WTP</a> · <a href="/wevia-master.html">WEVIA Master</a>
|
||||
<br><br>
|
||||
Point de vérité unique · Session Opus 21-avr-2026 · <a href="/api/wtp-kpi-global.php">KPI API</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
// Filters
|
||||
document.querySelectorAll('.filter').forEach(f => {
|
||||
f.addEventListener('click', () => {
|
||||
document.querySelectorAll('.filter').forEach(x => x.classList.remove('active'));
|
||||
f.classList.add('active');
|
||||
const cat = f.dataset.cat;
|
||||
document.querySelectorAll('.card').forEach(c => {
|
||||
c.style.display = (cat === 'all' || c.dataset.cat === cat) ? '' : 'none';
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
// Live KPI hero
|
||||
fetch('/api/wtp-kpi-global.php', {cache:'no-store'})
|
||||
.then(r => r.json())
|
||||
.then(d => {
|
||||
const s = d.synthesis || {};
|
||||
document.getElementById('stat-dock').textContent = s.dock_coverage_pct + '%';
|
||||
document.getElementById('stat-nonreg').textContent = s.nonreg_pct + '%';
|
||||
document.getElementById('stat-arch').textContent = s.arch_score + '/100';
|
||||
|
||||
const prov = (s.providers_active || 13) + '/13';
|
||||
document.getElementById('stat-providers').textContent = prov;
|
||||
})
|
||||
.catch(e => console.error('KPI fetch:', e));
|
||||
|
||||
fetch('/api/token-rotate-orchestrator.php', {method:'POST', headers:{'Content-Type':'application/json'}, body:JSON.stringify({action:'scan'})})
|
||||
.then(r => r.json())
|
||||
.then(d => {
|
||||
const h = d.health_pct + '%';
|
||||
const el = document.getElementById('stat-health');
|
||||
el.textContent = h;
|
||||
el.className = 'stat-val ' + (d.health_pct >= 80 ? 'success' : d.health_pct >= 60 ? 'warn' : 'info');
|
||||
})
|
||||
.catch(e => console.error('token fetch:', e));
|
||||
</script>
|
||||
|
||||
<!-- WTP_UDOCK_V1 (Opus 21-avr t40) -->
|
||||
<script src="/wtp-unified-dock.js" defer></script>
|
||||
</body></html>
|
||||
@@ -130,7 +130,7 @@ footer a{color:var(--accent)}
|
||||
<li>52 modèles IA disponibles (WEVIA Engine local + WEVIA Engine)</li>
|
||||
<li>54 modules SaaS intégrés — IA, email, data, cybersécurité</li>
|
||||
<li>SAP Ecosystem Partner + Vistex + Huawei Cloud</li>
|
||||
<li>Expertise pharma — 17 000+ professionnels de sante (Algerie, Maroc, Tunisie)</li>
|
||||
<li>Expertise pharma — large couverture MENA</li>
|
||||
<li>Presence Europe, Maroc</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
|
Before Width: | Height: | Size: 19 KiB |
@@ -0,0 +1,52 @@
|
||||
# WEVIA enterprise demo
|
||||
|
||||
**Wevia Enterprise Demo**
|
||||
=========================
|
||||
|
||||
**Introduction**
|
||||
---------------
|
||||
|
||||
Wevia Enterprise est une solution de communication collaborative permettant aux équipes de travailler ensemble de manière plus efficace. Dans ce document, nous allons présenter une démo de Wevia Enterprise, mettant en avant ses fonctionnalités clés et son utilisation pratique.
|
||||
|
||||
**Fonctionnalités Clés**
|
||||
----------------------
|
||||
|
||||
### Communication Collaborative
|
||||
|
||||
* **Messagerie instantanée** : discutez avec vos collègues en temps réel grâce à une messagerie instantanée sécurisée.
|
||||
* **Appels vidéo** : effectuez des appels vidéo de haute qualité pour des réunions et des discussions.
|
||||
* **Partage de fichiers** : partagez facilement des fichiers et des documents avec vos collègues.
|
||||
|
||||
### Gestion de Projet
|
||||
--------------------
|
||||
|
||||
* **Planning de projet** : planifiez et suivez vos projets avec une vue d'ensemble claire.
|
||||
* **Tâches et responsabilités** : attribuez des tâches et des responsabilités à vos collègues.
|
||||
* **Suivi des progrès** : suivez les progrès de vos projets en temps réel.
|
||||
|
||||
### Sécurité et Confidentialité
|
||||
------------------------------
|
||||
|
||||
* **Authentification** : authentifiez-vous avec votre adresse e-mail et votre mot de passe.
|
||||
* **Cryptage** : les données sont cryptées pour une sécurité maximale.
|
||||
* **Contrôle d'accès** : contrôlez qui a accès à vos données et vos projets.
|
||||
|
||||
**Utilisation Pratique**
|
||||
----------------------
|
||||
|
||||
### Création d'un Projet
|
||||
|
||||
1. Créez un nouveau projet en cliquant sur le bouton "Créer un projet".
|
||||
2. Entrez les informations de base du projet, telles que le nom et la description.
|
||||
3. Ajoutez les membres du projet et attribuez des rôles et des responsabilités.
|
||||
|
||||
### Gestion des Tâches
|
||||
|
||||
1. Créez de nouvelles tâches en cliquant sur le bouton "Créer une tâche".
|
||||
2. Entrez les informations de base de la tâche, telles que la description et la date limite.
|
||||
3. Attribuez la tâche à un membre du projet et suivez les progrès en temps réel.
|
||||
|
||||
**Conclusion**
|
||||
--------------
|
||||
|
||||
Wevia Enterprise est une solution de communication collaborative puissante et sécurisée qui permet aux équipes de travailler ensemble de manière plus efficace. Avec ses fonctionnalités clés telles que la messagerie instantanée, les appels vidéo et la gestion de projet, Wevia Enterprise est la solution idéale pour les entreprises qui cherchent à améliorer leur productivité et leur efficacité.
|
||||
BIN
generated/wevia-WEVIA-enterprise-demo-20260421-144958-ae6c0c.pdf
Normal file
@@ -0,0 +1,60 @@
|
||||
# WEVIA enterprise demo
|
||||
|
||||
# WEVIA Enterprise Demo
|
||||
|
||||
## Présentation
|
||||
|
||||
WEVIA est une plateforme de communication et de collaboration en ligne qui permet aux équipes de travailler ensemble de manière efficace, quelle que soit leur localisation. Notre démo Enterprise vous présentera les fonctionnalités clés de la plateforme et comment vous pouvez l'utiliser pour améliorer la collaboration et la productivité de votre entreprise.
|
||||
|
||||
## Fonctionnalités Clés
|
||||
|
||||
### Communication et Collaboration
|
||||
|
||||
* Messagerie instantanée en temps réel
|
||||
* Appels vidéo et audio de haute qualité
|
||||
* Partage de fichiers et de contenu en direct
|
||||
* Espaces de travail personnalisables pour chaque projet
|
||||
|
||||
### Gestion des Projets
|
||||
|
||||
* Planification et suivi des tâches
|
||||
* Attribution de rôles et de responsabilités
|
||||
* Suivi des progrès et des performances
|
||||
* Intégration avec d'autres outils de gestion de projet
|
||||
|
||||
### Sécurité et Confidentialité
|
||||
|
||||
* Authentification et autorisation multi-niveau
|
||||
* Chiffrement des données en transit et en stockage
|
||||
* Contrôle d'accès et de partage de fichiers
|
||||
* Respect des réglementations de confidentialité
|
||||
|
||||
### Intégration et API
|
||||
|
||||
* Intégration avec d'autres outils et plateformes
|
||||
* API pour la création de personnalisations et de intégrations
|
||||
* Support pour les développeurs pour une intégration rapide et efficace
|
||||
|
||||
## Démo
|
||||
|
||||
Dans cette démo, nous allons vous montrer comment utiliser WEVIA pour une collaboration efficace. Nous allons créer un espace de travail pour un projet fictif, partager des fichiers et des contenu, et utiliser les fonctionnalités de gestion des projets pour suivre les progrès et les performances.
|
||||
|
||||
### Création d'un Espace de Travail
|
||||
|
||||
* Création d'un espace de travail pour le projet fictif
|
||||
* Personnalisation de l'espace de travail pour les besoins spécifiques du projet
|
||||
|
||||
### Partage de Fichiers et de Contenu
|
||||
|
||||
* Partage de fichiers et de contenu en direct dans l'espace de travail
|
||||
* Utilisation de la messagerie instantanée pour discuter des fichiers et du contenu
|
||||
|
||||
### Gestion des Projets
|
||||
|
||||
* Planification et suivi des tâches dans l'espace de travail
|
||||
* Attribution de rôles et de responsabilités pour chaque tâche
|
||||
* Suivi des progrès et des performances pour chaque tâche
|
||||
|
||||
## Conclusion
|
||||
|
||||
WEVIA est une plateforme de communication et de collaboration en ligne qui peut aider votre entreprise à améliorer la collaboration et la productivité. Nous espérons que cette démo vous a montré les fonctionnalités clés de la plateforme et comment vous pouvez l'utiliser pour vos besoins spécifiques. N'hésitez pas à nous contacter pour en savoir plus sur WEVIA et comment nous pouvons vous aider à atteindre vos objectifs.
|
||||
BIN
generated/wevia-WEVIA-enterprise-demo-20260421-145633-47514c.pdf
Normal file
@@ -0,0 +1,38 @@
|
||||
# WEVIA enterprise demo
|
||||
|
||||
**WEVIA Enterprise Demo**
|
||||
=========================
|
||||
|
||||
**Sommaire**
|
||||
------------
|
||||
|
||||
* Présentation de WEVIA Enterprise
|
||||
* Fonctionnalités clés
|
||||
* Avantages de WEVIA Enterprise
|
||||
|
||||
**Présentation de WEVIA Enterprise**
|
||||
-----------------------------------
|
||||
|
||||
WEVIA Enterprise est une plateforme de communication et de collaboration en entreprise qui offre une expérience utilisateur intuitive et personnalisée. Conçue pour les équipes de grande taille, WEVIA Enterprise permet aux utilisateurs de communiquer efficacement et de travailler ensemble de manière efficace.
|
||||
|
||||
**Fonctionnalités clés**
|
||||
-------------------------
|
||||
|
||||
* **Messagerie instantanée** : les utilisateurs peuvent envoyer des messages instantanés aux collègues, avec la possibilité de partager des fichiers et des images.
|
||||
* **Appels vocaux et vidéo** : les utilisateurs peuvent effectuer des appels vocaux et vidéo, avec la possibilité de partager l'écran.
|
||||
* **Conférences en ligne** : les utilisateurs peuvent organiser des conférences en ligne avec des participants à distance.
|
||||
* **Gestion de projet** : les utilisateurs peuvent gérer leurs projets, avec la possibilité de créer des tâches, des échéances et des étiquettes.
|
||||
* **Intégration avec d'autres outils** : WEVIA Enterprise est intégré avec d'autres outils de productivité, tels que Google Drive, Trello et Slack.
|
||||
|
||||
**Avantages de WEVIA Enterprise**
|
||||
---------------------------------
|
||||
|
||||
* **Amélioration de la communication** : WEVIA Enterprise permet aux utilisateurs de communiquer efficacement, quel que soit leur emplacement.
|
||||
* **Augmentation de la productivité** : les utilisateurs peuvent travailler ensemble de manière efficace, avec la possibilité de gérer leurs projets et de collaborer en temps réel.
|
||||
* **Réduction des coûts** : WEVIA Enterprise est une plateforme cloud, ce qui signifie que les utilisateurs ne doivent pas investir dans des équipements ou des logiciels.
|
||||
* **Flexibilité** : WEVIA Enterprise est accessible depuis n'importe quel appareil, à n'importe quel moment.
|
||||
|
||||
**Conclusion**
|
||||
--------------
|
||||
|
||||
WEVIA Enterprise est une plateforme de communication et de collaboration en entreprise qui offre une expérience utilisateur intuitive et personnalisée. Avec ses fonctionnalités clés et ses avantages, WEVIA Enterprise est l'outil idéal pour les équipes de grande taille qui cherchent à améliorer leur communication et leur productivité.
|
||||
BIN
generated/wevia-WEVIA-enterprise-demo-20260421-150354-4058c1.pdf
Normal file
@@ -0,0 +1,43 @@
|
||||
# WEVIA enterprise demo
|
||||
|
||||
# WEVIA Enterprise Demo
|
||||
=====================================
|
||||
|
||||
## Présentation
|
||||
---------------
|
||||
|
||||
WEVIA est une plateforme de communication et de collaboration en entreprise qui permet aux équipes de travailler ensemble de manière efficace et sécurisée. Cette démo vous présentera les fonctionnalités clés de WEVIA Enterprise.
|
||||
|
||||
## Fonctionnalités Principales
|
||||
-----------------------------
|
||||
|
||||
### Communication
|
||||
|
||||
* **Messagerie instantanée** : discutez en temps réel avec vos collègues
|
||||
* **Appels audio et vidéo** : communiquez de manière visuelle et auditive
|
||||
* **Partage de fichiers** : partagez des documents et des ressources en toute sécurité
|
||||
|
||||
### Collaboration
|
||||
|
||||
* **Gestion de projet** : suivez et gérez vos projets de manière efficace
|
||||
* **Tâches et échéances** : attribuez et suivez les tâches et les échéances
|
||||
* **Commentaires et discussions** : discutez et commentez vos projets
|
||||
|
||||
### Sécurité
|
||||
--------------
|
||||
|
||||
* **Authentification et autorisation** : contrôlez l'accès à vos ressources
|
||||
* **Chiffrement des données** : protégez vos données sensibles
|
||||
* **Règles de partage** : contrôlez qui peut accéder à vos ressources
|
||||
|
||||
## Avantages
|
||||
------------
|
||||
|
||||
* **Amélioration de la productivité** : travaillez de manière plus efficace et plus rapide
|
||||
* **Meilleure collaboration** : travaillez ensemble de manière plus efficace
|
||||
* **Sécurité renforcée** : protégez vos données et vos ressources
|
||||
|
||||
## Conclusion
|
||||
--------------
|
||||
|
||||
WEVIA Enterprise est une plateforme de communication et de collaboration en entreprise qui offre une gamme de fonctionnalités pour améliorer la productivité, la collaboration et la sécurité. Contactez-nous pour en savoir plus sur WEVIA Enterprise et comment l'intégrer dans votre entreprise.
|
||||
BIN
generated/wevia-WEVIA-enterprise-demo-20260421-204202-247401.pdf
Normal file
15
generated/wevia-code---fibonacci-20260421-144904-08b6ff.py
Normal file
@@ -0,0 +1,15 @@
|
||||
def fibonacci(n):
|
||||
if n <= 0:
|
||||
return "Entrée non valide. Le nombre doit être positif."
|
||||
elif n == 1:
|
||||
return 0
|
||||
elif n == 2:
|
||||
return 1
|
||||
else:
|
||||
a, b = 0, 1
|
||||
for _ in range(2, n):
|
||||
a, b = b, a + b
|
||||
return b
|
||||
|
||||
# Exemple d'utilisation
|
||||
print(fibonacci(10)) # Affiche le 10ème nombre de la séquence de Fibonacci
|
||||
@@ -0,0 +1,28 @@
|
||||
def fibonacci(n):
|
||||
if n <= 0:
|
||||
return "Entrée invalid"
|
||||
elif n == 1:
|
||||
return 0
|
||||
elif n == 2:
|
||||
return 1
|
||||
else:
|
||||
return fibonacci(n-1) + fibonacci(n-2)
|
||||
|
||||
Cependant, ce code a un problème de complexité exponentielle en raison du nombre de fois où il appelle lui-même. Pour résoudre ce problème, vous pouvez utiliser une approche itérative ou une mémoire pour stocker les résultats des appels précédents.
|
||||
|
||||
Voici une version améliorée utilisant une mémoire :
|
||||
|
||||
def fibonacci(n, memo = {}):
|
||||
if n <= 0:
|
||||
return "Entrée invalid"
|
||||
elif n == 1:
|
||||
return 0
|
||||
elif n == 2:
|
||||
return 1
|
||||
elif n in memo:
|
||||
return memo[n]
|
||||
else:
|
||||
memo[n] = fibonacci(n-1, memo) + fibonacci(n-2, memo)
|
||||
return memo[n]
|
||||
|
||||
Cette version utilise un dictionnaire `memo` pour stocker les résultats des appels précédents. Elle vérifie si le résultat est déjà calculé avant de le recalculer, ce qui réduit considérablement la complexité.
|
||||
54
generated/wevia-demo-20260421-144858-6d5ad0.md
Normal file
@@ -0,0 +1,54 @@
|
||||
# demo
|
||||
|
||||
**DEMO**
|
||||
|
||||
# Présentation de la Demo
|
||||
|
||||
La demo est une démonstration de fonctionnement d'un produit ou d'un service. Elle permet aux utilisateurs potentiels de découvrir les fonctionnalités et les avantages de l'offre.
|
||||
|
||||
## Objectifs de la Demo
|
||||
|
||||
* Présenter les fonctionnalités clés du produit
|
||||
* Démontrer les avantages et les résultats obtenus grâce à l'utilisation du produit
|
||||
* Répondre aux questions et aux préoccupations des utilisateurs potentiels
|
||||
|
||||
## Contenu de la Demo
|
||||
|
||||
* Présentation du produit et de ses fonctionnalités
|
||||
* Démonstration de la navigation et de l'utilisation du produit
|
||||
* Présentation des résultats et des avantages obtenus grâce à l'utilisation du produit
|
||||
* Réponse aux questions et aux préoccupations des utilisateurs potentiels
|
||||
|
||||
### Exemples de Contenu
|
||||
|
||||
* Démonstration de la recherche et de la navigation dans le produit
|
||||
* Présentation des fonctionnalités de personnalisation et de configuration
|
||||
* Démonstration des résultats obtenus grâce à l'utilisation du produit
|
||||
|
||||
## Organisation de la Demo
|
||||
|
||||
* La demo doit être organisée de manière claire et structurée
|
||||
* Les présentations doivent être concises et visuelles
|
||||
* Les démonstrations doivent être réalisées de manière efficace et convaincante
|
||||
|
||||
### Exemples d'Organisation
|
||||
|
||||
* Utilisation de diapositives pour les présentations
|
||||
* Utilisation de démonstrations en direct pour les fonctionnalités clés
|
||||
* Utilisation de vidéos pour les présentations et les démonstrations
|
||||
|
||||
## Suivi et Évaluation
|
||||
|
||||
* Le suivi et l'évaluation de la demo sont essentiels pour mesurer l'efficacité de la démonstration
|
||||
* Les retours des utilisateurs potentiels doivent être pris en compte pour améliorer la demo
|
||||
* Les résultats de la demo doivent être analysés pour mesurer l'efficacité de la démonstration
|
||||
|
||||
### Exemples de Suivi et Évaluation
|
||||
|
||||
* Utilisation de questionnaires pour les retours des utilisateurs potentiels
|
||||
* Utilisation de statistiques pour mesurer l'efficacité de la démonstration
|
||||
* Utilisation de feedback pour améliorer la demo
|
||||
|
||||
**Conclusion**
|
||||
|
||||
La demo est un outil essentiel pour présenter les fonctionnalités et les avantages d'un produit ou d'un service. Il est important de l'organiser de manière claire et structurée, de la démontrer de manière efficace et convaincante, et de suivre et évaluer son efficacité. En suivant ces étapes, il est possible de créer une demo qui convainc les utilisateurs potentiels et leur montre les avantages de l'offre.
|
||||
BIN
generated/wevia-demo-20260421-144858-6d5ad0.pdf
Normal file
@@ -0,0 +1,12 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 400 300">
|
||||
<g id="paysage">
|
||||
<rect id="ciel" x="0" y="0" width="400" height="100" rx="10" fill="#87CEEB"/>
|
||||
<rect id="montagne" x="150" y="150" width="200" height="150" rx="20" fill="#964B00"/>
|
||||
<rect id="montagne2" x="50" y="150" width="100" height="150" rx="20" fill="#964B00"/>
|
||||
<rect id="montagne3" x="250" y="150" width="150" height="150" rx="20" fill="#964B00"/>
|
||||
<ellipse id="soleil" cx="200" cy="50" rx="50" ry="50" fill="#FFD700"/>
|
||||
<path id="nuages" d="M 100 50 L 150 70 L 200 50 L 250 70 L 300 50 Z" fill="#FFFFFF"/>
|
||||
<path id="arbre" d="M 100 200 L 120 220 L 140 200 L 160 220 L 180 200 L 200 220 L 220 200 Z" fill="#228B22"/>
|
||||
<path id="fond" d="M 0 0 L 400 0 L 400 300 L 0 300 Z" fill="#964B00"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 802 B |
@@ -0,0 +1,63 @@
|
||||
# pitch deck investor
|
||||
|
||||
# Pitch Deck Investor: Comment Convaincre les Investisseurs
|
||||
|
||||
## Présentation
|
||||
* Définition d'un pitch deck
|
||||
* Objectifs d'un pitch deck
|
||||
* Structure d'un pitch deck
|
||||
|
||||
## Éléments Clés d'un Pitch Deck
|
||||
* **Problème** :
|
||||
+ Description du problème
|
||||
+ Impact du problème
|
||||
* **Solution** :
|
||||
+ Description de la solution
|
||||
+ Avantages de la solution
|
||||
* **Marché** :
|
||||
+ Taille du marché
|
||||
+ Concurrence
|
||||
* **Équipe** :
|
||||
+ Présentation de l'équipe
|
||||
+ Expérience et compétences
|
||||
* **Modèle Commercial** :
|
||||
+ Description du modèle commercial
|
||||
+ Présentation des revenus et des dépenses
|
||||
|
||||
## Comment Rédiger un Pitch Deck Efficace
|
||||
* **Concentrez-vous sur l'essentiel** :
|
||||
+ Évitez les détails non essentiels
|
||||
+ Concentrez-vous sur les éléments clés
|
||||
* **Utilisez des chiffres et des statistiques** :
|
||||
+ Présentez des données concrètes
|
||||
+ Montrez les résultats
|
||||
* **Soyez convaincant** :
|
||||
+ Utilisez un ton enthousiaste
|
||||
+ Montrez votre passion
|
||||
|
||||
## Comment Présenter un Pitch Deck
|
||||
* **Préparez-vous** :
|
||||
+ Recherchez les informations nécessaires
|
||||
+ Répétez votre présentation
|
||||
* **Utilisez des outils visuels** :
|
||||
+ Utilisez des images, des graphiques et des vidéos
|
||||
+ Montrez les résultats
|
||||
* **Interagissez avec les investisseurs** :
|
||||
+ Répondez aux questions
|
||||
+ Soyez ouvert aux commentaires
|
||||
|
||||
## Quels sont les Meilleurs Outils pour Créer un Pitch Deck
|
||||
* **Canva** :
|
||||
+ Utilisez des modèles prêts à l'emploi
|
||||
+ Éditez facilement vos éléments
|
||||
* **Google Slides** :
|
||||
+ Utilisez des modèles prêts à l'emploi
|
||||
+ Collaborer en temps réel
|
||||
* **Pitch Deck** :
|
||||
+ Utilisez des modèles prêts à l'emploi
|
||||
+ Éditez facilement vos éléments
|
||||
|
||||
## Conclusion
|
||||
* Un pitch deck bien rédigé et présenté peut vous aider à convaincre les investisseurs
|
||||
* Concentrez-vous sur les éléments clés et utilisez des outils visuels pour montrer les résultats
|
||||
* Préparez-vous et interagissez avec les investisseurs pour obtenir le meilleur résultat
|
||||
BIN
generated/wevia-pitch-deck-investor-20260421-205132-f02161.pptx
Normal file
38
generated/wevia-pitch-investor-20260421-204215-cc2694.md
Normal file
@@ -0,0 +1,38 @@
|
||||
# pitch investor
|
||||
|
||||
# Présentation d'Entreprise pour les Investisseurs
|
||||
|
||||
## Qu'est-ce qu'un Pitch Investor ?
|
||||
|
||||
* Présentation concise d'une entreprise ou d'un projet
|
||||
* Objectif : obtenir des fonds d'investissement
|
||||
* 3-5 minutes maximum
|
||||
|
||||
## Éléments Clés d'un Pitch Investor
|
||||
|
||||
* *Problématique* : décrire le problème que votre entreprise résout
|
||||
* *Solution* : présenter votre solution innovante
|
||||
* *Marché* : décrire votre marché cible et votre position
|
||||
* *Équipe* : présenter votre équipe de direction
|
||||
* *Financements* : expliquer comment les fonds seront utilisés
|
||||
|
||||
## Comment Structurer un Pitch Investor ?
|
||||
|
||||
* Introduction (30 secondes) : présentation de l'entreprise et de l'objectif
|
||||
* Présentation de la solution (1 minute) : détailler votre produit ou service
|
||||
* Marché et concurrence (1 minute) : décrire votre marché et vos concurrents
|
||||
* Équipe et financements (1 minute) : présenter votre équipe et expliquer comment les fonds seront utilisés
|
||||
* Conclusion (30 secondes) : rappeler l'objectif et les avantages
|
||||
|
||||
## Exemples de Pitch Investor Succès
|
||||
|
||||
* Airbnb : 3 minutes pour présenter une plateforme de location de vacances
|
||||
* Uber : 5 minutes pour présenter une application de taxis partagés
|
||||
* Tesla : 10 minutes pour présenter une voiture électrique innovante
|
||||
|
||||
## Conseils pour un Pitch Investor Efficace
|
||||
|
||||
* *Préparation* : répéter votre pitch plusieurs fois avant la présentation
|
||||
* *Confiance* : parler avec assurance et conviction
|
||||
* *Visuals* : utiliser des diapositives ou un pitchdeck pour illustrer votre présentation
|
||||
* *Réponse aux questions* : être prêt à répondre aux questions des investisseurs
|
||||
BIN
generated/wevia-pitch-investor-20260421-204215-cc2694.pptx
Normal file
61
generated/wevia-pitch-investor-v2-20260421-204931-f72664.md
Normal file
@@ -0,0 +1,61 @@
|
||||
# pitch investor v2
|
||||
|
||||
# **Pitch Investor V2 : Comment Convaincre les Investisseurs**
|
||||
|
||||
## **Présentation Générale**
|
||||
|
||||
* Objectif : présenter votre projet d'investissement à des investisseurs potentiels
|
||||
* Durée : 3-5 minutes maximum
|
||||
* Contenu : clair, concis, persuasif
|
||||
|
||||
## **Éléments Clés du Pitch**
|
||||
|
||||
* **Problème** :
|
||||
+ Décrivez le problème ou la opportunité de marché
|
||||
+ Expliquez pourquoi il est important de le résoudre
|
||||
* **Solution** :
|
||||
+ Présentez votre solution ou produit
|
||||
+ Expliquez comment il répond au problème ou à l'opportunité
|
||||
* **Marché** :
|
||||
+ Présentez le marché cible
|
||||
+ Expliquez la taille et la croissance potentielle
|
||||
* **Avantages** :
|
||||
+ Présentez les avantages de votre solution ou produit
|
||||
+ Expliquez comment il se différencie des concurrents
|
||||
* **Plan d'affaires** :
|
||||
+ Présentez votre plan d'affaires
|
||||
+ Expliquez comment vous prévoyez générer des revenus et atteindre la rentabilité
|
||||
|
||||
## **Exemples de Statistiques et de Chiffres**
|
||||
|
||||
* **Marché** :
|
||||
+ 10 millions de consommateurs potentiels dans le marché cible
|
||||
+ 20% de croissance annuelle
|
||||
* **Avantages** :
|
||||
+ 80% de satisfaction client
|
||||
+ 90% de taux de fidélité
|
||||
* **Plan d'affaires** :
|
||||
+ 500 000 euros de revenus en année 1
|
||||
+ 1 million d'euros de revenus en année 3
|
||||
|
||||
## **Exemples de Cas D'Études**
|
||||
|
||||
* **Cas 1** :
|
||||
+ Présentez un cas d'étude réussi
|
||||
+ Expliquez comment votre solution ou produit a résolu un problème ou une opportunité
|
||||
* **Cas 2** :
|
||||
+ Présentez un cas d'étude en cours
|
||||
+ Expliquez comment vous prévoyez résoudre un problème ou une opportunité
|
||||
|
||||
## **Questions Fréquentes**
|
||||
|
||||
* **Q : Comment nous différenciez-vous des concurrents ?**
|
||||
* **R : Notre solution ou produit se différencie par...**
|
||||
* **Q : Comment nous prévoyez-vous générer des revenus ?**
|
||||
* **R : Nous prévoyons générer des revenus grâce à...**
|
||||
|
||||
## **Conclusion**
|
||||
|
||||
* Résumez les points clés de votre pitch
|
||||
* Appelez à l'action : demandez aux investisseurs de vous soutenir
|
||||
* Présentez vos contacts et votre site web
|
||||
BIN
generated/wevia-pitch-investor-v2-20260421-204931-f72664.pptx
Normal file
52
generated/wevia-pitch-investor-v2-20260421-204935-cb185c.md
Normal file
@@ -0,0 +1,52 @@
|
||||
# pitch investor v2
|
||||
|
||||
# Pitch Investor V2 : Comment Convaincre les Investisseurs
|
||||
|
||||
## Présentation
|
||||
* Présentation claire et concise de votre projet
|
||||
* Objectif : démontrer l'intérêt de l'investissement
|
||||
* Durée : 3-5 minutes
|
||||
|
||||
## Éléments Clés du Pitch
|
||||
* Présentation de votre équipe
|
||||
* Description de votre produit ou service
|
||||
* Marché cible et concurrence
|
||||
* Avantages concurrentiels
|
||||
* Modèle de revenu et projection de croissance
|
||||
* Utilisation des fonds investis
|
||||
|
||||
## Structures du Pitch
|
||||
* Introduction (30 secondes)
|
||||
+ Présentation de votre projet
|
||||
+ Objectif
|
||||
* Le problème et la solution (1 minute)
|
||||
+ Description du problème
|
||||
+ Présentation de la solution
|
||||
* Le marché et la concurrence (1 minute)
|
||||
+ Marché cible
|
||||
+ Concurrence
|
||||
* L'avantage concurrentiel (1 minute)
|
||||
+ Avantages de votre produit ou service
|
||||
* Le modèle de revenu et la projection de croissance (1 minute)
|
||||
+ Modèle de revenu
|
||||
+ Projection de croissance
|
||||
* Conclusion (30 secondes)
|
||||
+ Résumé du pitch
|
||||
+ Appel à l'action
|
||||
|
||||
## Présentation Visuelle
|
||||
* Utilisation de diapositives claires et concises
|
||||
* Images et graphiques pour illustrer les points clés
|
||||
* Utilisation de couleurs et de typographie pour créer un visuel cohérent
|
||||
|
||||
## Pratique et Révision
|
||||
* Pratique du pitch plusieurs fois
|
||||
* Révision du contenu et de la structure
|
||||
* Recueil de retours et de commentaires
|
||||
* Amélioration continue du pitch
|
||||
|
||||
## Réussir le Pitch
|
||||
* Confiance et conviction
|
||||
* Communication claire et concise
|
||||
* Réponse aux questions des investisseurs
|
||||
* Suivre les indications des investisseurs
|
||||
BIN
generated/wevia-pitch-investor-v2-20260421-204935-cb185c.pptx
Normal file
55
generated/wevia-pitch-investor-v2-20260421-204939-8a3f23.md
Normal file
@@ -0,0 +1,55 @@
|
||||
# pitch investor v2
|
||||
|
||||
# **Pitch Investor v2 : Comment Convaincre les Investisseurs**
|
||||
|
||||
## **Présentation**
|
||||
|
||||
* Présentation concise de l'entreprise (1 minute)
|
||||
* Objectif : présenter l'entreprise, son projet et son équipe
|
||||
|
||||
## **Problème et Solution**
|
||||
|
||||
* Définition du problème (5 minutes)
|
||||
* Présentation de la solution (5 minutes)
|
||||
* Avantages de la solution (bullet points)
|
||||
+ Résoudre le problème
|
||||
+ Augmenter les ventes
|
||||
+ Réduire les coûts
|
||||
|
||||
## **Marché et Concurrence**
|
||||
|
||||
* Analyse du marché (5 minutes)
|
||||
* Présentation des concurrents (5 minutes)
|
||||
* Avantages de l'entreprise par rapport à la concurrence (bullet points)
|
||||
+ Meilleure qualité
|
||||
+ Prix compétitif
|
||||
+ Service client exceptionnel
|
||||
|
||||
## **Équipe et Stratégie**
|
||||
|
||||
* Présentation de l'équipe (5 minutes)
|
||||
* Stratégie de développement (5 minutes)
|
||||
* Plan de mise en œuvre (bullet points)
|
||||
+ Étapes clés
|
||||
+ Ressources nécessaires
|
||||
+ Calendrier
|
||||
|
||||
## **Growth et Financement**
|
||||
|
||||
* Projections de croissance (5 minutes)
|
||||
* Besoin de financement (5 minutes)
|
||||
* Utilisation des fonds (bullet points)
|
||||
+ Développement du produit
|
||||
+ Expansion commerciale
|
||||
+ Amélioration des opérations
|
||||
|
||||
## **Conclusion**
|
||||
|
||||
* Résumé du pitch (2 minutes)
|
||||
* Appel à l'action (2 minutes)
|
||||
* Contact (email, téléphone, etc.)
|
||||
|
||||
## **Annexes**
|
||||
|
||||
* Liens vers les documents complémentaires (rapports financiers, etc.)
|
||||
* Présentation visuelle de l'entreprise (diapositives, etc.)
|
||||
BIN
generated/wevia-pitch-investor-v2-20260421-204939-8a3f23.pptx
Normal file
BIN
generated/wevia-procedure-qualite-20260421-205126-213abf.docx
Normal file
75
generated/wevia-procedure-qualite-20260421-205126-213abf.md
Normal file
@@ -0,0 +1,75 @@
|
||||
# procedure qualite
|
||||
|
||||
**PROCEDURE DE GESTION DE LA QUALITÉ**
|
||||
|
||||
**1. INTRODUCTION**
|
||||
|
||||
La qualité est un élément essentiel pour l'excellence de notre organisation. La présente procédure a pour objectif de définir les principes et les procédures à suivre pour garantir la qualité de nos produits et services.
|
||||
|
||||
**2. OBJECTIFS**
|
||||
|
||||
* Assurer la conformité aux normes et réglementations en vigueur
|
||||
* Améliorer continuellement la qualité de nos produits et services
|
||||
* Satisfaire les besoins et les attentes de nos clients
|
||||
* Réduire les coûts liés aux erreurs et aux défauts
|
||||
|
||||
**3. RESPONSABILITÉS**
|
||||
|
||||
* Le responsable de la qualité : il est chargé de la mise en œuvre de la présente procédure et de la coordination des activités de qualité.
|
||||
* Les responsables de production : ils sont responsables de la qualité des produits et services qu'ils produisent.
|
||||
* Les employés : ils sont responsables de la mise en œuvre des procédures de qualité dans leur domaine de travail.
|
||||
|
||||
**4. PROCÉDURES DE QUALITÉ**
|
||||
|
||||
### 4.1. Définition de la qualité
|
||||
|
||||
La qualité est définie comme l'aptitude d'un produit ou d'un service à répondre aux besoins et aux attentes des clients.
|
||||
|
||||
### 4.2. Conformité aux normes et réglementations
|
||||
|
||||
Tous les produits et services doivent être conformes aux normes et réglementations en vigueur.
|
||||
|
||||
### 4.3. Contrôle qualité
|
||||
|
||||
Un programme de contrôle qualité est mis en place pour s'assurer que les produits et services sont conformes aux normes et réglementations.
|
||||
|
||||
### 4.4. Analyse des défaillances
|
||||
|
||||
Les défaillances sont analysées pour identifier les causes et les solutions pour les prévenir.
|
||||
|
||||
### 4.5. Formation et sensibilisation
|
||||
|
||||
Les employés sont formés et sensibilisés aux procédures de qualité.
|
||||
|
||||
### 4.6. Suivi et évaluation
|
||||
|
||||
Le suivi et l'évaluation des procédures de qualité sont effectués régulièrement pour s'assurer que les objectifs sont atteints.
|
||||
|
||||
**5. TABLEAU DE BORD DE LA QUALITÉ**
|
||||
|
||||
| Indicateur | Définition | Objectif | Résultat actuel |
|
||||
| --- | --- | --- | --- |
|
||||
| Taux de conformité | Pourcentage de produits et services conformes aux normes et réglementations | 95% | 92% |
|
||||
| Taux de défaillance | Pourcentage de produits et services défectueux | 2% | 3% |
|
||||
| Satisfaction client | Pourcentage de clients satisfaits | 90% | 85% |
|
||||
|
||||
**6. MISE À JOUR DE LA PROCÉDURE**
|
||||
|
||||
La présente procédure sera mise à jour régulièrement pour refléter les changements et les améliorations apportés.
|
||||
|
||||
**7. APPROBATION**
|
||||
|
||||
La présente procédure a été approuvée par [nom de la personne ou du comité d'approbation].
|
||||
|
||||
**8. ENREGISTREMENT**
|
||||
|
||||
La présente procédure est enregistrée dans le [nom du système d'enregistrement].
|
||||
|
||||
**9. ANNEXES**
|
||||
|
||||
* Liste des normes et réglementations applicables
|
||||
* Programme de contrôle qualité
|
||||
* Procédures de formation et de sensibilisation
|
||||
* Tableau de bord de la qualité
|
||||
|
||||
Note : Ce document est un exemple et doit être adapté aux besoins spécifiques de votre organisation. Il est important de consulter les normes et les réglementations applicables avant de mettre en place une procédure de qualité.
|
||||