Compare commits
90 Commits
v175-opus-
...
v182-opus-
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
56632a9d01 | ||
|
|
5cf4e27dc0 | ||
|
|
135dcb4677 | ||
|
|
1a2b604135 | ||
|
|
b8018f3539 | ||
|
|
a1570d3b3a | ||
|
|
462d43ae07 | ||
|
|
e8457d9e6a | ||
|
|
a3bfdbc868 | ||
|
|
caa3602994 | ||
|
|
1221915be7 | ||
|
|
5d708111e8 | ||
|
|
5e54d931d7 | ||
|
|
b879a049d3 | ||
|
|
a02d730c17 | ||
|
|
7d7dda586d | ||
|
|
dc8496a9d5 | ||
|
|
355a64c2f2 | ||
|
|
26e1ad823d | ||
|
|
80979e6504 | ||
|
|
02ee17da26 | ||
|
|
929840e26f | ||
|
|
62baf2e607 | ||
|
|
98a4031b32 | ||
|
|
79b399cbbe | ||
|
|
997029f12c | ||
|
|
76b82e5f5b | ||
|
|
04bb53edb7 | ||
|
|
7890623673 | ||
|
|
c41d379f41 | ||
|
|
c1885c587f | ||
|
|
9ca3be0b9d | ||
|
|
7f4dcdb9f8 | ||
|
|
3398cf6f99 | ||
|
|
7cf24aa080 | ||
|
|
bd8719bd9f | ||
|
|
fcf933885e | ||
|
|
dc8f8aff78 | ||
|
|
e1e5704dbc | ||
|
|
574f9d5438 | ||
|
|
7449a44dab | ||
|
|
e5a227939a | ||
|
|
2aa13cc3e6 | ||
|
|
7129665d5e | ||
|
|
c746311264 | ||
|
|
d10b78ef67 | ||
|
|
bc5ed67944 | ||
|
|
8161a1729c | ||
|
|
fa1291ebdd | ||
|
|
c896791033 | ||
|
|
b1948e330c | ||
|
|
717903744b | ||
|
|
8e21d647a3 | ||
|
|
fe380760fa | ||
|
|
bc005b669a | ||
|
|
98cb653713 | ||
|
|
eaec1a1310 | ||
|
|
26c3adc02a | ||
|
|
e41ea138ed | ||
|
|
d8ee40f38e | ||
|
|
665e6fd0fe | ||
|
|
ed006a6e55 | ||
|
|
ecbe33ba1f | ||
|
|
a8e8c3347e | ||
|
|
365ab89ff1 | ||
|
|
a4a595e66b | ||
|
|
23db1b508d | ||
|
|
cca331590e | ||
|
|
eb9a3a401e | ||
|
|
7a5394fb8d | ||
|
|
8fbfe405eb | ||
|
|
5f1d70f34b | ||
|
|
0df7b0ae2e | ||
|
|
3be073bf3f | ||
|
|
87f60d2950 | ||
|
|
4f9bc8042e | ||
|
|
dcdb16390d | ||
|
|
b233fcb091 | ||
|
|
b23b2beba2 | ||
|
|
a532fccce9 | ||
|
|
63c7b1c87f | ||
|
|
9ae9f77eba | ||
|
|
ab7c0a5de4 | ||
|
|
a342476366 | ||
|
|
f06c06cc02 | ||
|
|
3cf272152f | ||
|
|
155cc70c08 | ||
|
|
97d47f088b | ||
|
|
747596d86c | ||
|
|
7a90f40565 |
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"agent": "V41_Disk_Monitor",
|
||||
"ts": "2026-04-22T15:30:02+02:00",
|
||||
"ts": "2026-04-22T20:30:01+02:00",
|
||||
"disk_pct": 87,
|
||||
"disk_free_gb": 20,
|
||||
"growth_per_day_gb": 1.5,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"agent": "V41_Risk_Escalation",
|
||||
"ts": "2026-04-22T15:45:02+02:00",
|
||||
"ts": "2026-04-22T20:45:04+02:00",
|
||||
"dg_alerts_active": 7,
|
||||
"wevia_life_stats_preview": "{
|
||||
"ok": true,
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
{
|
||||
"routes": 446,
|
||||
"skills": 835,
|
||||
"wiki": 2296,
|
||||
"pages": 328,
|
||||
"apis": 254,
|
||||
"wiki": 2326,
|
||||
"pages": 330,
|
||||
"apis": 255,
|
||||
"docker": 19,
|
||||
"proposals": [
|
||||
{
|
||||
@@ -27,5 +27,5 @@
|
||||
"effort": "S"
|
||||
}
|
||||
],
|
||||
"timestamp": "2026-04-22 10:00"
|
||||
"timestamp": "2026-04-22 16:00"
|
||||
}
|
||||
@@ -1,10 +1,10 @@
|
||||
{
|
||||
"agent": "V41_Feature_Adoption_Tracker",
|
||||
"ts": "2026-04-22T15:00:02+02:00",
|
||||
"ts": "2026-04-22T20:00:01+02:00",
|
||||
"features_tracked": 15,
|
||||
"features_used_24h": 11,
|
||||
"adoption_pct": 73,
|
||||
"chat_queries_last_1k_log": 3,
|
||||
"features_used_24h": 10,
|
||||
"adoption_pct": 66,
|
||||
"chat_queries_last_1k_log": 0,
|
||||
"wtp_views_last_1k_log": 9,
|
||||
"dg_views_last_1k_log": 0,
|
||||
"skill_runs_last_1k_log": 0,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"agent": "V45_Leads_Sync",
|
||||
"ts": "2026-04-22T15:50:03+02:00",
|
||||
"ts": "2026-04-22T20:50:03+02:00",
|
||||
"paperclip_total": 48,
|
||||
"active_customer": 4,
|
||||
"warm_prospect": 5,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"agent": "V41_MQL_Scoring",
|
||||
"ts": "2026-04-22T15:00:03+02:00",
|
||||
"ts": "2026-04-22T20:00:03+02:00",
|
||||
"leads_total": 48,
|
||||
"mql_current": 16,
|
||||
"sql_current": 6,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"agent": "V60_Nudge_Owner_Actions",
|
||||
"ts": "2026-04-22T08:00:02+02:00",
|
||||
"ts": "2026-04-22T16:00:02+02:00",
|
||||
"cron": "every_8_hours",
|
||||
"actions_pending_owner": {
|
||||
"emails_drafts_V45_to_send": {
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
{
|
||||
"agent": "V54_Risk_Monitor_Live",
|
||||
"ts": "2026-04-22T15:30:04+02:00",
|
||||
"ts": "2026-04-22T20:30:03+02:00",
|
||||
"critical_risks": {
|
||||
"RW01_pipeline_vide": {
|
||||
"pipeline_keur": 0,
|
||||
"mql_auto": 19,
|
||||
"residual_risk_pct": 81,
|
||||
"mql_auto": 20,
|
||||
"residual_risk_pct": 80,
|
||||
"trend": "mitigation_V42_V45_active"
|
||||
},
|
||||
"RW02_dependance_ethica": {
|
||||
@@ -22,7 +22,7 @@
|
||||
},
|
||||
"RW12_burnout": {
|
||||
"agents_cron_active": 15,
|
||||
"load_5min": "18.32",
|
||||
"load_5min": "3.68",
|
||||
"automation_coverage_pct": 70,
|
||||
"residual_risk_pct": 60,
|
||||
"trend": "V52_goldratt_options_active"
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
{
|
||||
"timestamp": "2026-04-22 14:00",
|
||||
"timestamp": "2026-04-22 20:00",
|
||||
"sections": {
|
||||
"servers": {
|
||||
"S204": {
|
||||
"docker": 20,
|
||||
"disk": "87%",
|
||||
"ram": "13Gi/30Gi",
|
||||
"load": "2.46",
|
||||
"uptime": "up 1 week, 1 day, 2 hours, 8 minutes"
|
||||
"ram": "15Gi/30Gi",
|
||||
"load": "15.83",
|
||||
"uptime": "up 1 week, 1 day, 8 hours, 8 minutes"
|
||||
}
|
||||
},
|
||||
"docker": {
|
||||
@@ -15,7 +15,7 @@
|
||||
"containers": [
|
||||
{
|
||||
"name": "weval-docuseal",
|
||||
"status": "Up Less than a second",
|
||||
"status": "Up 1 second",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
@@ -30,17 +30,17 @@
|
||||
},
|
||||
{
|
||||
"name": "plausible-plausible-1",
|
||||
"status": "Up 4 days",
|
||||
"status": "Up 5 days",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "plausible-plausible-db-1",
|
||||
"status": "Up 4 days",
|
||||
"status": "Up 5 days",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "plausible-plausible-events-db-1",
|
||||
"status": "Up 4 days",
|
||||
"status": "Up 5 days",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
@@ -75,27 +75,27 @@
|
||||
},
|
||||
{
|
||||
"name": "redis-weval",
|
||||
"status": "Up 7 days",
|
||||
"status": "Up 8 days",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "gitea",
|
||||
"status": "Up 7 days",
|
||||
"status": "Up 8 days",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "node-exporter",
|
||||
"status": "Up 7 days",
|
||||
"status": "Up 8 days",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "prometheus",
|
||||
"status": "Up 7 days",
|
||||
"status": "Up 8 days",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "searxng",
|
||||
"status": "Up 7 days",
|
||||
"status": "Up 8 days",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
@@ -105,18 +105,18 @@
|
||||
},
|
||||
{
|
||||
"name": "vaultwarden",
|
||||
"status": "Up 7 days (healthy)",
|
||||
"status": "Up 8 days (healthy)",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "qdrant",
|
||||
"status": "Up 7 days",
|
||||
"status": "Up 8 days",
|
||||
"ports": ""
|
||||
}
|
||||
]
|
||||
},
|
||||
"apis": {
|
||||
"count": 275,
|
||||
"count": 276,
|
||||
"files": [
|
||||
"wevia-stream-sovereign.php",
|
||||
"wevia-pending-loader.php",
|
||||
@@ -255,6 +255,7 @@
|
||||
"wevia-opus-intents.php",
|
||||
"wevia-decisions-api.php",
|
||||
"wevia-db-stats.php",
|
||||
"wevia-chat-v2-direct.php",
|
||||
"wevia-master-dispatch.php",
|
||||
"wevia-api-bridge.php",
|
||||
"wevia-vault-git-intents.php",
|
||||
@@ -488,7 +489,7 @@
|
||||
]
|
||||
},
|
||||
"pages": {
|
||||
"count": 328
|
||||
"count": 330
|
||||
},
|
||||
"opt_tools": {
|
||||
"count": 96
|
||||
@@ -497,7 +498,7 @@
|
||||
"pairs": 5751
|
||||
},
|
||||
"wiki": {
|
||||
"entries": 2324
|
||||
"entries": 2326
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"generated_at": "2026-04-22T12:00:04.136998",
|
||||
"generated_at": "2026-04-22T18:00:03.582458",
|
||||
"agent_version": "V69_enhanced",
|
||||
"pages_scanned": 9,
|
||||
"fixed_elements_checked": 23,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"timestamp": "2026-04-22T10:00:07+00:00",
|
||||
"compute_ms": 5100,
|
||||
"timestamp": "2026-04-22T16:00:07+00:00",
|
||||
"compute_ms": 4490,
|
||||
"metrics": {
|
||||
"agents": 0,
|
||||
"agents_hierarchy": 0,
|
||||
@@ -19,12 +19,12 @@
|
||||
"providers": [
|
||||
{
|
||||
"name": "Cerebras",
|
||||
"latency_ms": 1583,
|
||||
"latency_ms": 1442,
|
||||
"status": "up"
|
||||
},
|
||||
{
|
||||
"name": "Groq",
|
||||
"latency_ms": 907,
|
||||
"latency_ms": 1362,
|
||||
"status": "up"
|
||||
}
|
||||
]
|
||||
|
||||
@@ -19,6 +19,50 @@ $raw = file_get_contents("php://input");
|
||||
$in = json_decode($raw, true) ?: [];
|
||||
$msg = trim($in["message"] ?? "");
|
||||
if (!$msg) { sse("error", ["content"=>"No message"]); exit; }
|
||||
|
||||
// === V181 backend-public-guard · Yacine: pas de fuites chez clients externes ===
|
||||
$__v181_blocked = [
|
||||
"/^intents?_pool\b/i",
|
||||
"/^quelle\s+heure\s*$/i",
|
||||
"/^multiagent\s+parall[e\xc3\xa9\xc3\xa8]le/i",
|
||||
"/^orchestrate\s+parall[e\xc3\xa9\xc3\xa8]le/i",
|
||||
"/^cable\s+un?\s+intent/i",
|
||||
"/^nonreg\s*(?:score|status)?\s*$/i",
|
||||
"/^l99\s*(?:score|status)?\s*$/i",
|
||||
"/^6\s*sigma/i",
|
||||
"/^derniers?\s+commits?\s+git/i",
|
||||
"/^git\s+(?:log|commit|status)/i",
|
||||
"/\bWAVE-\d+/i",
|
||||
"/\bpool\s+total\b/i",
|
||||
"/^doctrines?\s+(?:wiki|list)/i",
|
||||
"/^load\s*$/i",
|
||||
"/\bwevia[-_.]?(?:master|orchestrator|autonomous)\b/i",
|
||||
"/^(?:ping|status|health)\s+(?:system|server|infra)/i",
|
||||
];
|
||||
$__v181_internal = false;
|
||||
$__v181_token = $_SERVER["HTTP_X_AGENT_TOKEN"] ?? "";
|
||||
$__v181_ref = $_SERVER["HTTP_REFERER"] ?? "";
|
||||
$__v181_expected_token = "";
|
||||
foreach (@file("/etc/weval/secrets.env") ?: [] as $__v181_line) {
|
||||
if (preg_match("/^AGENT_TOKEN=(.+)$/", trim($__v181_line), $__v181_mm)) {
|
||||
$__v181_expected_token = trim($__v181_mm[1], " \"\'"); break;
|
||||
}
|
||||
}
|
||||
if ($__v181_token && $__v181_expected_token && hash_equals($__v181_expected_token, $__v181_token)) $__v181_internal = true;
|
||||
if (stripos($__v181_ref, "/wevia-master.html") !== false || stripos($__v181_ref, "/wevia-master-") !== false || stripos($__v181_ref, "/proof-wave") !== false) $__v181_internal = true;
|
||||
if (!$__v181_internal) {
|
||||
foreach ($__v181_blocked as $__v181_pat) {
|
||||
if (@preg_match($__v181_pat, trim($msg))) {
|
||||
$__v181_greet = "Je suis WEVIA Assistant IA. Je peux vous aider avec la generation de documents (PDF, Word, Excel, PowerPoint), la creation d'images, de schemas et de code, les traductions, les recherches et les calculs. Que puis-je faire pour vous aujourd'hui ?";
|
||||
sse("start", ["session"=>"public", "query"=>$msg, "pattern"=>"guard", "engine"=>"WEVIA Assistant v1"]);
|
||||
sse("chunk", ["content"=>$__v181_greet, "index"=>0, "total"=>1]);
|
||||
sse("done", ["response"=>$__v181_greet, "provider"=>"wevia-public-guard-v1", "intent"=>"guard_redirect"]);
|
||||
@error_log("[V181-public-guard] blocked: " . substr($msg, 0, 80));
|
||||
exit;
|
||||
}
|
||||
}
|
||||
}
|
||||
// === END V181 ===
|
||||
$session_id = $in["session_id"] ?? ("wv-" . substr(md5(random_bytes(8)), 0, 10));
|
||||
|
||||
$pattern = "generic";
|
||||
@@ -175,7 +219,7 @@ foreach ($plan as $i => $step) {
|
||||
$d = @json_decode($raw_r, true);
|
||||
if ($d) {
|
||||
$final_response = $d["response"] ?? $d["content"] ?? "";
|
||||
if (preg_match("#https?://\S+?\.(?:pdf|docx|pptx|xlsx|svg|py|jsx)#", $final_response, $um)) {
|
||||
if (preg_match("#https?://\S+?\.(?:pdf|docx|pptx|xlsx|svg|py|jsx|jpg|jpeg|png|webp|gif)#", $final_response, $um)) {
|
||||
$final_file_url = $um[0];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<?php
|
||||
// V179 wevia-brand · user-visible strings use WEVIA Vision only
|
||||
/**
|
||||
* ambre-early-doc-gen.php · v4 · 5 capabilities réelles
|
||||
* 1. File gen pdf/docx/pptx via pandoc
|
||||
@@ -86,37 +87,56 @@ if (preg_match("/g[eéèê]n[eéèê]re?.*(sch[eéèê]ma|mermaid|diagramme|flow
|
||||
exit;
|
||||
}
|
||||
|
||||
// ========== HANDLER 4: Image SVG via LLM ==========
|
||||
if (preg_match("/g[eéèê]n[eéèê]re?\s+(?:une|un)?\s*image\s*(?:\b(?:decrivant|repr[eéèê]sentant|pour|sur|de)\b\s*)?:?\s*(.+)$/iu", $__ad_msg, $__im)) {
|
||||
// ========== HANDLER 4: Image via ambre-tool-image.php CASCADE (V177 image-gemini-cascade) ==========
|
||||
// V177: Replace LLM SVG by real image cascade (Gemini 3 Pro Image Preview primary, Qwen fallback, Pollinations last resort)
|
||||
if (preg_match("/g[e\xc3\xa9\xc3\xa8\xc3\xaa]n[e\xc3\xa9\xc3\xa8\xc3\xaa]re?\s+(?:une|un)?\s*image\s*(?:\b(?:decrivant|repr[e\xc3\xa9\xc3\xa8\xc3\xaa]sentant|pour|sur|de)\b\s*)?:?\s*(.+)$/iu", $__ad_msg, $__im)) {
|
||||
$__topic = trim($__im[1]);
|
||||
$__sys = "Tu es un generateur d\"images SVG. Reponds UNIQUEMENT avec du code SVG valide 400x300, pas de markdown, pas de backticks. Formes geometriques + couleurs. Commence par <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 400 300\">.";
|
||||
$__user = "SVG representant: $__topic";
|
||||
$__llm = @file_get_contents("http://127.0.0.1:4000/v1/chat/completions", false, stream_context_create([
|
||||
"http"=>["method"=>"POST","header"=>"Content-Type: application/json\r\n",
|
||||
"content"=>json_encode(["model"=>"fast","messages"=>[
|
||||
["role"=>"system","content"=>$__sys],["role"=>"user","content"=>$__user]
|
||||
],"max_tokens"=>700,"temperature"=>0.4]),"timeout"=>25]
|
||||
]));
|
||||
$__svg = @json_decode($__llm,true)["choices"][0]["message"]["content"] ?? "";
|
||||
$__svg = trim(preg_replace("/```(?:svg|xml)?\n?|```/","",$__svg));
|
||||
$__t0 = microtime(true);
|
||||
|
||||
if (strpos($__svg, "<svg") !== false) {
|
||||
// Save to /generated/
|
||||
$__ts = date("Ymd-His");
|
||||
$__rand = substr(md5(random_bytes(4)),0,6);
|
||||
$__safe = preg_replace("/[^a-zA-Z0-9\-_]/","-",substr($__topic,0,40));
|
||||
$__fname = "wevia-img-$__safe-$__ts-$__rand.svg";
|
||||
@file_put_contents("/var/www/html/generated/$__fname", $__svg);
|
||||
$__size = strlen($__svg);
|
||||
// Call ambre-tool-image.php directly (internal, loopback)
|
||||
$__img_ctx = stream_context_create([
|
||||
"http" => [
|
||||
"method" => "POST",
|
||||
"header" => "Content-Type: application/json\r\nHost: weval-consulting.com\r\n",
|
||||
"content" => json_encode(["prompt" => $__topic]),
|
||||
"timeout" => 75,
|
||||
"ignore_errors" => true,
|
||||
],
|
||||
]);
|
||||
$__img_resp = @file_get_contents("http://127.0.0.1/api/ambre-tool-image.php", false, $__img_ctx);
|
||||
$__img_d = @json_decode($__img_resp, true);
|
||||
|
||||
if ($__img_d && !empty($__img_d["success"]) && !empty($__img_d["url"])) {
|
||||
$__url = $__img_d["url"];
|
||||
$__provider = $__img_d["provider"] ?? "WEVIA Image Engine";
|
||||
$__quality = $__img_d["quality"] ?? "standard";
|
||||
$__size_kb = $__img_d["size_kb"] ?? 0;
|
||||
$__elapsed = round((microtime(true) - $__t0) * 1000);
|
||||
|
||||
header("Content-Type: application/json; charset=utf-8");
|
||||
echo json_encode([
|
||||
"response"=>"🎨 **$__topic** (image SVG)\n\n🔗 Telecharger: https://weval-consulting.com/generated/$__fname\n📦 Taille: " . round($__size/1024,1) . "KB · engine: LLM+SVG\n\n" . chr(96) . chr(96) . chr(96) . "html\n$__svg\n" . chr(96) . chr(96) . chr(96),
|
||||
"executed"=>true,"provider"=>"ambre-doc-gen-v5","intent"=>"image_svg_real",
|
||||
"topic"=>$__topic, "url"=>"https://weval-consulting.com/generated/$__fname",
|
||||
], JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES);
|
||||
"response" => "\xf0\x9f\x8e\xa8 **$__topic**\n\n\xf0\x9f\x94\x97 T\xc3\xa9l\xc3\xa9charger: $__url\n\xf0\x9f\x93\xa6 Taille: {$__size_kb}KB \xc2\xb7 \xe2\x9a\x99\xef\xb8\x8f {$__elapsed}ms \xc2\xb7 engine: $__provider",
|
||||
"executed" => true,
|
||||
"provider" => "ambre-doc-gen-v5",
|
||||
"intent" => "image_real_cascade",
|
||||
"topic" => $__topic,
|
||||
"url" => $__url,
|
||||
"quality" => $__quality,
|
||||
"image_provider" => $__provider,
|
||||
], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
|
||||
exit;
|
||||
}
|
||||
// If cascade failed, fall through (old LLM SVG code removed to force real images)
|
||||
// Return an informative error to widget rather than fake SVG
|
||||
header("Content-Type: application/json; charset=utf-8");
|
||||
echo json_encode([
|
||||
"response" => "\xe2\x9a\xa0\xef\xb8\x8f G\xc3\xa9n\xc3\xa9ration d\"image temporairement indisponible pour: $__topic. WEVIA Vision temporairement indisponible. Les providers internes ont \xc3\xa9chou\xc3\xa9. R\xc3\xa9essayez dans quelques instants.",
|
||||
"executed" => true,
|
||||
"provider" => "ambre-doc-gen-v5",
|
||||
"intent" => "image_cascade_failed",
|
||||
"topic" => $__topic,
|
||||
], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
|
||||
exit;
|
||||
}
|
||||
|
||||
// ========== HANDLER 5: Code generation with file ==========
|
||||
|
||||
40
api/ambre-pw-tests/v175_img.js
Normal file
@@ -0,0 +1,40 @@
|
||||
const { chromium } = require('playwright');
|
||||
(async () => {
|
||||
const browser = await chromium.launch({ headless: true, args: ['--no-sandbox'] });
|
||||
const ctx = await browser.newContext({ ignoreHTTPSErrors: true, viewport: {width: 1440, height: 1800} });
|
||||
const page = await ctx.newPage();
|
||||
|
||||
await page.goto('https://weval-consulting.com/wevia.html?cb=' + Date.now(), { waitUntil: 'networkidle' });
|
||||
await page.waitForTimeout(2500);
|
||||
|
||||
const input = await page.locator('#msgInput').first();
|
||||
await input.click({force: true});
|
||||
await input.fill('Genere une image decrivant: logo WEVIA bleu moderne');
|
||||
await input.press('Enter');
|
||||
console.log('SENT image request');
|
||||
|
||||
let state = null;
|
||||
for (let i=0; i<25; i++) {
|
||||
await page.waitForTimeout(2500);
|
||||
state = await page.evaluate(() => ({
|
||||
busy: !!document.getElementById('sendBtn')?.disabled,
|
||||
phases: document.querySelectorAll('.ambre-phase').length,
|
||||
hasSvgRendered: document.querySelectorAll('svg[xmlns*="w3.org"]').length > 0,
|
||||
hasImgTag: document.querySelectorAll('img[src*="generated"]').length > 0,
|
||||
hasCodeSvg: /```.*<svg/.test(document.body.innerText),
|
||||
}));
|
||||
if (!state.busy && state.phases >= 4 && (state.hasSvgRendered || state.hasImgTag)) break;
|
||||
}
|
||||
console.log('State:', JSON.stringify(state));
|
||||
|
||||
// Scroll to the generated SVG
|
||||
await page.evaluate(() => {
|
||||
const svgs = document.querySelectorAll('svg[xmlns*="w3.org"]');
|
||||
if (svgs.length > 0) svgs[svgs.length-1].scrollIntoView({block:'center'});
|
||||
});
|
||||
await page.waitForTimeout(1500);
|
||||
await page.screenshot({ path: '/tmp/v175-image-rendered.png', fullPage: true });
|
||||
console.log('Screenshot saved');
|
||||
|
||||
await browser.close();
|
||||
})();
|
||||
40
api/ambre-pw-tests/v178.js
Normal file
@@ -0,0 +1,40 @@
|
||||
const { chromium } = require('playwright');
|
||||
(async () => {
|
||||
const browser = await chromium.launch({ headless: true, args: ['--no-sandbox'] });
|
||||
const ctx = await browser.newContext({ ignoreHTTPSErrors: true, viewport: {width: 1440, height: 1800} });
|
||||
const page = await ctx.newPage();
|
||||
|
||||
await page.goto('https://weval-consulting.com/wevia.html?cb=' + Date.now(), { waitUntil: 'networkidle' });
|
||||
await page.waitForTimeout(2500);
|
||||
|
||||
const input = await page.locator('#msgInput').first();
|
||||
await input.click({force: true});
|
||||
await input.fill('Genere une image decrivant: logo bleu WEVIA minimalist moderne');
|
||||
await input.press('Enter');
|
||||
console.log('SENT');
|
||||
|
||||
let state = null;
|
||||
for (let i=0; i<25; i++) {
|
||||
await page.waitForTimeout(3000);
|
||||
state = await page.evaluate(() => ({
|
||||
busy: !!document.getElementById('sendBtn')?.disabled,
|
||||
phases: document.querySelectorAll('.ambre-phase').length,
|
||||
hasImgTag: document.querySelectorAll('img[src*="generated"]').length,
|
||||
imgSrc: document.querySelector('img[src*="generated"]')?.src,
|
||||
imgWidth: document.querySelector('img[src*="generated"]')?.naturalWidth || 0,
|
||||
}));
|
||||
console.log(`t+${i*3+3}s:`, JSON.stringify(state));
|
||||
if (!state.busy && state.hasImgTag > 0 && state.imgWidth > 100) break;
|
||||
}
|
||||
|
||||
// Scroll to image
|
||||
await page.evaluate(() => {
|
||||
const img = document.querySelector('img[src*="generated"]');
|
||||
if (img) img.scrollIntoView({block:'center'});
|
||||
});
|
||||
await page.waitForTimeout(2000);
|
||||
await page.screenshot({ path: '/tmp/v178-image-rendered.png', fullPage: true });
|
||||
console.log('Screenshot saved');
|
||||
|
||||
await browser.close();
|
||||
})();
|
||||
80
api/ambre-pw-tests/v178_video.js
Normal file
@@ -0,0 +1,80 @@
|
||||
// V178 · Video test image generation on /wevia.html
|
||||
const { chromium } = require('playwright');
|
||||
const fs = require('fs');
|
||||
|
||||
(async () => {
|
||||
const browser = await chromium.launch({ headless: true, args: ['--no-sandbox'] });
|
||||
const ctx = await browser.newContext({
|
||||
ignoreHTTPSErrors: true,
|
||||
viewport: {width: 1440, height: 900},
|
||||
recordVideo: { dir: '/tmp/v178-video/', size: {width: 1440, height: 900} }
|
||||
});
|
||||
const page = await ctx.newPage();
|
||||
|
||||
console.log('1. Go to /wevia.html');
|
||||
await page.goto('https://weval-consulting.com/wevia.html?cb=' + Date.now(), { waitUntil: 'networkidle', timeout: 20000 });
|
||||
await page.waitForTimeout(2500);
|
||||
|
||||
console.log('2. Type the image request');
|
||||
const input = await page.locator('#msgInput').first();
|
||||
await input.click({force: true});
|
||||
await input.fill('Genere une image decrivant: WEVIA LOGO premium blue');
|
||||
await page.waitForTimeout(800);
|
||||
await input.press('Enter');
|
||||
console.log('3. Request sent · waiting for generation');
|
||||
|
||||
// Wait for download link + inline image
|
||||
let state = null;
|
||||
for (let i=0; i<20; i++) {
|
||||
await page.waitForTimeout(3000);
|
||||
state = await page.evaluate(() => {
|
||||
const links = document.querySelectorAll('a[href*="/generated/"]');
|
||||
const imgs = document.querySelectorAll('img[src*="/generated/"]');
|
||||
const phases = document.querySelectorAll('.ambre-phase').length;
|
||||
return {
|
||||
phases,
|
||||
downloadLinks: links.length,
|
||||
firstLinkHref: links.length > 0 ? links[0].href : null,
|
||||
inlineImages: imgs.length,
|
||||
firstImgSrc: imgs.length > 0 ? imgs[0].src : null,
|
||||
firstImgLoaded: imgs.length > 0 ? imgs[0].complete && imgs[0].naturalHeight > 0 : false,
|
||||
busy: !!document.getElementById('sendBtn')?.disabled,
|
||||
};
|
||||
});
|
||||
console.log(`t+${(i+1)*3}s:`, JSON.stringify(state));
|
||||
if (!state.busy && state.phases >= 4 && state.downloadLinks > 0) break;
|
||||
}
|
||||
|
||||
// Scroll to result
|
||||
await page.evaluate(() => {
|
||||
const link = document.querySelector('a[href*="/generated/"]');
|
||||
if (link) link.scrollIntoView({block: 'center'});
|
||||
});
|
||||
await page.waitForTimeout(2500);
|
||||
|
||||
// Click the download link
|
||||
if (state.downloadLinks > 0) {
|
||||
console.log('4. Clicking download link:', state.firstLinkHref);
|
||||
const link = await page.locator('a[href*="/generated/"]').first();
|
||||
|
||||
// Hover first (to show cursor)
|
||||
await link.hover();
|
||||
await page.waitForTimeout(1500);
|
||||
}
|
||||
|
||||
// Final screenshot
|
||||
await page.screenshot({ path: '/tmp/v178-final.png', fullPage: true });
|
||||
console.log('Screenshot saved');
|
||||
|
||||
await ctx.close(); // Flushes video
|
||||
await browser.close();
|
||||
|
||||
// Rename video
|
||||
const videos = fs.readdirSync('/tmp/v178-video/');
|
||||
if (videos.length > 0) {
|
||||
const vpath = '/tmp/v178-video/' + videos[0];
|
||||
fs.renameSync(vpath, '/tmp/v178-image-test.webm');
|
||||
const stats = fs.statSync('/tmp/v178-image-test.webm');
|
||||
console.log(`Video saved: /tmp/v178-image-test.webm (${(stats.size/1024/1024).toFixed(1)} MB)`);
|
||||
}
|
||||
})();
|
||||
55
api/ambre-pw-tests/v179_vid.js
Normal file
@@ -0,0 +1,55 @@
|
||||
const { chromium } = require('playwright');
|
||||
const fs = require('fs');
|
||||
(async () => {
|
||||
const browser = await chromium.launch({ headless: true, args: ['--no-sandbox'] });
|
||||
const ctx = await browser.newContext({
|
||||
ignoreHTTPSErrors: true,
|
||||
viewport: {width: 1440, height: 900},
|
||||
recordVideo: { dir: '/tmp/v179-video/', size: {width: 1440, height: 900} }
|
||||
});
|
||||
const page = await ctx.newPage();
|
||||
|
||||
await page.goto('https://weval-consulting.com/wevia.html?cb=' + Date.now(), { waitUntil: 'networkidle' });
|
||||
await page.waitForTimeout(2500);
|
||||
|
||||
const input = await page.locator('#msgInput').first();
|
||||
await input.click({force: true});
|
||||
await input.fill('Genere une image decrivant: logo WEVIA premium');
|
||||
await input.press('Enter');
|
||||
console.log('SENT');
|
||||
|
||||
for (let i=0; i<20; i++) {
|
||||
await page.waitForTimeout(2500);
|
||||
const state = await page.evaluate(() => {
|
||||
const bodyText = document.body.innerText;
|
||||
return {
|
||||
phases: document.querySelectorAll('.ambre-phase').length,
|
||||
hasLink: !!document.querySelector('a[href*="/generated/"]'),
|
||||
hasImg: !!document.querySelector('img[src*="/generated/"]'),
|
||||
mentionsGemini: /Gemini/i.test(bodyText),
|
||||
mentionsQwen: /Qwen/i.test(bodyText),
|
||||
mentionsPollinations: /Pollinations/i.test(bodyText),
|
||||
mentionsWEVIAVision: /WEVIA Vision/i.test(bodyText),
|
||||
busy: !!document.getElementById('sendBtn')?.disabled,
|
||||
};
|
||||
});
|
||||
console.log(`t+${(i+1)*2.5}s:`, JSON.stringify(state));
|
||||
if (!state.busy && state.phases >= 4 && state.hasLink) break;
|
||||
}
|
||||
|
||||
await page.evaluate(() => {
|
||||
const link = document.querySelector('a[href*="/generated/"]');
|
||||
if (link) link.scrollIntoView({block: 'center'});
|
||||
});
|
||||
await page.waitForTimeout(2000);
|
||||
await page.screenshot({ path: '/tmp/v179-final.png', fullPage: true });
|
||||
|
||||
await ctx.close();
|
||||
await browser.close();
|
||||
|
||||
const videos = fs.readdirSync('/tmp/v179-video/');
|
||||
if (videos.length > 0) {
|
||||
fs.renameSync('/tmp/v179-video/' + videos[0], '/tmp/v179-wevia-brand.webm');
|
||||
console.log('Video saved:', (fs.statSync('/tmp/v179-wevia-brand.webm').size/1024/1024).toFixed(1), 'MB');
|
||||
}
|
||||
})();
|
||||
72
api/ambre-pw-tests/v180_leak.js
Normal file
@@ -0,0 +1,72 @@
|
||||
// V180 · Simulate external client on /wevia.html trying to leak intents_pool
|
||||
const { chromium } = require('playwright');
|
||||
const fs = require('fs');
|
||||
(async () => {
|
||||
const browser = await chromium.launch({ headless: true, args: ['--no-sandbox'] });
|
||||
const ctx = await browser.newContext({
|
||||
ignoreHTTPSErrors: true,
|
||||
viewport: {width: 1280, height: 900},
|
||||
recordVideo: { dir: '/tmp/v180-video/', size: {width: 1280, height: 900} }
|
||||
});
|
||||
const page = await ctx.newPage();
|
||||
|
||||
console.log('=== External client simulation on /wevia.html ===');
|
||||
await page.goto('https://weval-consulting.com/wevia.html?cb=' + Date.now(), { waitUntil: 'networkidle' });
|
||||
await page.waitForTimeout(2500);
|
||||
|
||||
// Try multiple leak attempts
|
||||
const attempts = ['intents_pool', 'quelle heure', 'multiagent parallele', 'nonreg score'];
|
||||
|
||||
for (const msg of attempts) {
|
||||
const input = await page.locator('#msgInput').first();
|
||||
await input.click({force: true});
|
||||
await input.fill(msg);
|
||||
await input.press('Enter');
|
||||
console.log(`\nSENT: "${msg}"`);
|
||||
|
||||
// Wait for response
|
||||
for (let i=0; i<12; i++) {
|
||||
await page.waitForTimeout(1500);
|
||||
const state = await page.evaluate(() => {
|
||||
return {
|
||||
busy: !!document.getElementById('sendBtn')?.disabled,
|
||||
bodyText: document.body.innerText.substring(0, 3000),
|
||||
};
|
||||
});
|
||||
if (!state.busy && state.bodyText.length > 200) break;
|
||||
}
|
||||
|
||||
// Analyze response for leaks
|
||||
const analysis = await page.evaluate(() => {
|
||||
const body = document.body.innerText;
|
||||
return {
|
||||
hasPoolTotal: /POOL TOTAL POTENTIEL|2450|1009|377|43/i.test(body),
|
||||
hasArchitectureLeak: /Tool registry|Priority intents NL|DeerFlow skills|Top-IA scripts|Brain knowledge/i.test(body),
|
||||
hasGuardRedirect: /Je suis WEVIA Assistant IA/i.test(body),
|
||||
hasGeminiLeak: /Gemini|Qwen|Pollinations|DashScope/i.test(body),
|
||||
responsePreview: body.slice(-800),
|
||||
};
|
||||
});
|
||||
console.log(` → hasPoolTotal: ${analysis.hasPoolTotal}`);
|
||||
console.log(` → hasArchitectureLeak: ${analysis.hasArchitectureLeak}`);
|
||||
console.log(` → hasGuardRedirect: ${analysis.hasGuardRedirect}`);
|
||||
console.log(` → hasGeminiLeak: ${analysis.hasGeminiLeak}`);
|
||||
}
|
||||
|
||||
// Final screenshot + scroll to last response
|
||||
await page.evaluate(() => {
|
||||
window.scrollTo(0, document.body.scrollHeight);
|
||||
});
|
||||
await page.waitForTimeout(1500);
|
||||
await page.screenshot({ path: '/tmp/v180-leak-test.png', fullPage: true });
|
||||
|
||||
await ctx.close();
|
||||
await browser.close();
|
||||
|
||||
const videos = fs.readdirSync('/tmp/v180-video/');
|
||||
if (videos.length > 0) {
|
||||
fs.renameSync('/tmp/v180-video/' + videos[0], '/tmp/v180-leak-test.webm');
|
||||
const stats = fs.statSync('/tmp/v180-leak-test.webm');
|
||||
console.log(`\nVideo: ${(stats.size/1024/1024).toFixed(1)}MB`);
|
||||
}
|
||||
})();
|
||||
38
api/ambre-pw-tests/v180_test.js
Normal file
@@ -0,0 +1,38 @@
|
||||
const { chromium } = require('playwright');
|
||||
(async () => {
|
||||
const browser = await chromium.launch({ headless: true, args: ['--no-sandbox'] });
|
||||
const ctx = await browser.newContext({ ignoreHTTPSErrors: true, viewport: {width: 1280, height: 800} });
|
||||
const page = await ctx.newPage();
|
||||
|
||||
const logs = [];
|
||||
page.on('console', m => logs.push(`${m.type()}: ${m.text().substring(0,200)}`));
|
||||
|
||||
await page.goto('https://weval-consulting.com/wevia.html?cb=' + Date.now(), { waitUntil: 'networkidle' });
|
||||
await page.waitForTimeout(2500);
|
||||
|
||||
// Type intents_pool
|
||||
const input = await page.locator('#msgInput').first();
|
||||
await input.click({force:true});
|
||||
await input.fill('intents_pool');
|
||||
await input.press('Enter');
|
||||
console.log('SENT intents_pool');
|
||||
|
||||
await page.waitForTimeout(6000);
|
||||
|
||||
const state = await page.evaluate(() => {
|
||||
const bodyText = document.body.innerText;
|
||||
return {
|
||||
seesPoolTotal: /POOL TOTAL/i.test(bodyText),
|
||||
seesWeviaAssistant: /Je suis WEVIA Assistant IA/i.test(bodyText),
|
||||
seesTools377: /Tool registry.*377|377.*Tool/i.test(bodyText),
|
||||
seesCapacities: /2450 capacit/i.test(bodyText),
|
||||
lastMsgText: (document.querySelectorAll('.msg-bot, .msg-assistant, .ambre-phase-content, .msg')[0]?.innerText || '').substring(0, 400),
|
||||
};
|
||||
});
|
||||
console.log('STATE:', JSON.stringify(state, null, 2));
|
||||
console.log('CONSOLE LOGS (last 10):');
|
||||
for (const l of logs.slice(-10)) console.log(' ', l);
|
||||
|
||||
await page.screenshot({path:'/tmp/v180-test.png', fullPage:true});
|
||||
await browser.close();
|
||||
})();
|
||||
@@ -1,9 +1,19 @@
|
||||
<?php
|
||||
// V179 wevia-brand · all providers masked as WEVIA Vision · internal_engine kept for debug
|
||||
/**
|
||||
* ambre-tool-image.php · Real image generation via Pollinations.ai (free, no auth)
|
||||
* Returns downloadable PNG from prompt
|
||||
* V176 · ambre-tool-image.php · Upgraded with quality cascade
|
||||
* Yacine: "IMAGE POURRI MET A LOUVER QWEN IMAGE POUR AMELOIRER"
|
||||
*
|
||||
* Cascade (order by QUALITY):
|
||||
* 1. Gemini 3 Pro Image Preview (best quality, free tier via GEMINI_KEY) - PRIMARY
|
||||
* 2. Qwen-Image via DashScope (requires ALIBABA_KEY with credits)
|
||||
* 3. Pollinations flux (free, 1024x1024)
|
||||
* 4. Pollinations sana (free, 768x768 fast fallback)
|
||||
*
|
||||
* Keep backward compat: same response schema as before
|
||||
*/
|
||||
header("Content-Type: application/json; charset=utf-8");
|
||||
set_time_limit(90);
|
||||
|
||||
$raw = file_get_contents("php://input");
|
||||
$in = json_decode($raw, true) ?: $_POST ?: $_GET;
|
||||
@@ -11,45 +21,189 @@ $prompt = trim($in["prompt"] ?? $in["q"] ?? "");
|
||||
|
||||
if (!$prompt) { echo json_encode(["error"=>"prompt required"]); exit; }
|
||||
|
||||
// Clean + translate prompt (keep as-is - Pollinations handles multilingue)
|
||||
$clean = preg_replace('/[^\p{L}\p{N}\s,.\-]/u', '', $prompt);
|
||||
$clean = substr(trim($clean), 0, 300);
|
||||
// Clean prompt (keep unicode)
|
||||
$clean = preg_replace('/[^\p{L}\p{N}\s,.\-!?]/u', '', $prompt);
|
||||
$clean = mb_substr(trim($clean), 0, 400);
|
||||
|
||||
// Pollinations API
|
||||
$seed = rand(1, 99999);
|
||||
$encoded = urlencode($clean);
|
||||
$pollinations_url = "https://image.pollinations.ai/prompt/$encoded?width=1024&height=1024&seed=$seed&nologo=true&enhance=true";
|
||||
|
||||
// Fetch image (with 30s timeout)
|
||||
$ctx = stream_context_create([
|
||||
"http" => ["timeout"=>30, "header"=>"User-Agent: WEVIA/1.0\r\n"],
|
||||
"https" => ["timeout"=>30, "header"=>"User-Agent: WEVIA/1.0\r\n"],
|
||||
]);
|
||||
$t0 = microtime(true);
|
||||
$img_data = @file_get_contents($pollinations_url, false, $ctx);
|
||||
$elapsed = round((microtime(true)-$t0)*1000);
|
||||
|
||||
if (!$img_data || strlen($img_data) < 1000) {
|
||||
echo json_encode(["error"=>"image generation failed", "prompt"=>$clean, "elapsed"=>$elapsed]);
|
||||
exit;
|
||||
// Load secrets
|
||||
$secrets = [];
|
||||
foreach (file("/etc/weval/secrets.env") ?: [] as $line) {
|
||||
$line = trim($line);
|
||||
if (!$line || $line[0] === "#" || strpos($line, "=") === false) continue;
|
||||
list($k, $v) = explode("=", $line, 2);
|
||||
$secrets[trim($k)] = trim($v, " \"'");
|
||||
}
|
||||
$GEMINI_KEY = $secrets["GEMINI_KEY"] ?? "";
|
||||
$ALIBABA_KEY = $secrets["ALIBABA_KEY"] ?? "";
|
||||
|
||||
// Save to /generated/
|
||||
// File naming (shared across cascade)
|
||||
$dir = "/var/www/html/generated";
|
||||
if (!is_dir($dir)) @mkdir($dir, 0755, true);
|
||||
$slug = preg_replace('/[^a-z0-9]+/', '-', strtolower($clean));
|
||||
$slug = substr(trim($slug, "-"), 0, 50);
|
||||
$ts = date("Ymd-His");
|
||||
$rand = bin2hex(random_bytes(3));
|
||||
$filename = "wevia-img-{$slug}-{$ts}-{$rand}.png";
|
||||
$path = "$dir/$filename";
|
||||
file_put_contents($path, $img_data);
|
||||
|
||||
echo json_encode([
|
||||
"success" => true,
|
||||
"prompt" => $clean,
|
||||
"url" => "https://weval-consulting.com/generated/$filename",
|
||||
"size_kb" => round(strlen($img_data)/1024, 1),
|
||||
"elapsed_ms" => $elapsed,
|
||||
"provider" => "WEVIA Image Engine",
|
||||
]);
|
||||
$t0 = microtime(true);
|
||||
$result = null;
|
||||
|
||||
// ========== TIER 1: Gemini 3 Pro Image Preview (best quality, free) ==========
|
||||
if ($GEMINI_KEY) {
|
||||
$gurl = "https://generativelanguage.googleapis.com/v1beta/models/gemini-3-pro-image-preview:generateContent?key=" . $GEMINI_KEY;
|
||||
$body = json_encode([
|
||||
"contents" => [["parts" => [["text" => $clean]]]],
|
||||
"generationConfig" => ["responseModalities" => ["IMAGE", "TEXT"]],
|
||||
]);
|
||||
$ctx = stream_context_create([
|
||||
"http" => [
|
||||
"method" => "POST",
|
||||
"header" => "Content-Type: application/json\r\n",
|
||||
"content" => $body,
|
||||
"timeout" => 60,
|
||||
"ignore_errors" => true,
|
||||
],
|
||||
]);
|
||||
$resp = @file_get_contents($gurl, false, $ctx);
|
||||
if ($resp) {
|
||||
$d = @json_decode($resp, true);
|
||||
if (isset($d["candidates"][0]["content"]["parts"])) {
|
||||
foreach ($d["candidates"][0]["content"]["parts"] as $p) {
|
||||
if (isset($p["inlineData"]["data"])) {
|
||||
$mime = $p["inlineData"]["mimeType"] ?? "image/jpeg";
|
||||
$ext = strpos($mime, "png") !== false ? "png" : "jpg";
|
||||
$filename = "wevia-img-vision-{$slug}-{$ts}-{$rand}.{$ext}";
|
||||
$path = "$dir/$filename";
|
||||
$img = base64_decode($p["inlineData"]["data"]);
|
||||
if ($img && strlen($img) > 5000) {
|
||||
file_put_contents($path, $img);
|
||||
$result = [
|
||||
"success" => true,
|
||||
"prompt" => $clean,
|
||||
"url" => "https://weval-consulting.com/generated/$filename",
|
||||
"size_kb" => round(strlen($img)/1024, 1),
|
||||
"elapsed_ms" => round((microtime(true)-$t0)*1000),
|
||||
"provider" => "WEVIA Vision (premium)",
|
||||
"quality" => "premium",
|
||||
"engine" => "wevia-vision-v1",
|
||||
"internal_engine" => "gemini-3-pro",
|
||||
];
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ========== TIER 2: Qwen-Image via DashScope (if Gemini failed + ALIBABA_KEY) ==========
|
||||
if (!$result && $ALIBABA_KEY) {
|
||||
// Create async task
|
||||
$submit_ctx = stream_context_create([
|
||||
"http" => [
|
||||
"method" => "POST",
|
||||
"header" => "Authorization: Bearer $ALIBABA_KEY\r\nContent-Type: application/json\r\nX-DashScope-Async: enable\r\n",
|
||||
"content" => json_encode([
|
||||
"model" => "qwen-image",
|
||||
"input" => ["prompt" => $clean],
|
||||
"parameters" => ["size" => "1024*1024", "n" => 1],
|
||||
]),
|
||||
"timeout" => 15,
|
||||
"ignore_errors" => true,
|
||||
],
|
||||
]);
|
||||
$submit_resp = @file_get_contents("https://dashscope-intl.aliyuncs.com/api/v1/services/aigc/text2image/image-synthesis", false, $submit_ctx);
|
||||
$submit_d = @json_decode($submit_resp, true);
|
||||
$task_id = $submit_d["output"]["task_id"] ?? "";
|
||||
if ($task_id) {
|
||||
// Poll
|
||||
for ($i = 0; $i < 20; $i++) {
|
||||
sleep(2);
|
||||
$pctx = stream_context_create(["http"=>["header"=>"Authorization: Bearer $ALIBABA_KEY\r\n","timeout"=>10]]);
|
||||
$pr = @file_get_contents("https://dashscope-intl.aliyuncs.com/api/v1/tasks/$task_id", false, $pctx);
|
||||
$pd = @json_decode($pr, true);
|
||||
$status = $pd["output"]["task_status"] ?? "";
|
||||
if ($status === "SUCCEEDED") {
|
||||
$img_url = $pd["output"]["results"][0]["url"] ?? "";
|
||||
if ($img_url) {
|
||||
$img = @file_get_contents($img_url);
|
||||
if ($img && strlen($img) > 5000) {
|
||||
$filename = "wevia-img-vision-{$slug}-{$ts}-{$rand}.png";
|
||||
$path = "$dir/$filename";
|
||||
file_put_contents($path, $img);
|
||||
$result = [
|
||||
"success" => true,
|
||||
"prompt" => $clean,
|
||||
"url" => "https://weval-consulting.com/generated/$filename",
|
||||
"size_kb" => round(strlen($img)/1024, 1),
|
||||
"elapsed_ms" => round((microtime(true)-$t0)*1000),
|
||||
"provider" => "WEVIA Vision (premium)",
|
||||
"quality" => "premium",
|
||||
"engine" => "wevia-vision-v1",
|
||||
"internal_engine" => "qwen-image",
|
||||
];
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
if ($status === "FAILED" || $status === "UNKNOWN") break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ========== TIER 3: Pollinations flux (free 1024x1024) ==========
|
||||
if (!$result) {
|
||||
$seed = rand(1, 99999);
|
||||
$encoded = urlencode($clean);
|
||||
// Try with flux model hint (even though list shows only sana, try anyway)
|
||||
$flux_url = "https://image.pollinations.ai/prompt/$encoded?width=1024&height=1024&seed=$seed&nologo=true&enhance=true&model=flux";
|
||||
$ctx2 = stream_context_create(["http"=>["timeout"=>30,"header"=>"User-Agent: WEVIA/2.0\r\n"]]);
|
||||
$img = @file_get_contents($flux_url, false, $ctx2);
|
||||
if ($img && strlen($img) > 5000) {
|
||||
$filename = "wevia-img-vision-{$slug}-{$ts}-{$rand}.jpg";
|
||||
$path = "$dir/$filename";
|
||||
file_put_contents($path, $img);
|
||||
$result = [
|
||||
"success" => true,
|
||||
"prompt" => $clean,
|
||||
"url" => "https://weval-consulting.com/generated/$filename",
|
||||
"size_kb" => round(strlen($img)/1024, 1),
|
||||
"elapsed_ms" => round((microtime(true)-$t0)*1000),
|
||||
"provider" => "WEVIA Vision (standard)",
|
||||
"quality" => "standard",
|
||||
"engine" => "wevia-vision-v1",
|
||||
"internal_engine" => "pollinations-flux",
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
// ========== TIER 4: Pollinations sana (last resort) ==========
|
||||
if (!$result) {
|
||||
$seed = rand(1, 99999);
|
||||
$encoded = urlencode($clean);
|
||||
$sana_url = "https://image.pollinations.ai/prompt/$encoded?width=1024&height=1024&seed=$seed&nologo=true&enhance=true";
|
||||
$ctx3 = stream_context_create(["http"=>["timeout"=>30,"header"=>"User-Agent: WEVIA/2.0\r\n"]]);
|
||||
$img = @file_get_contents($sana_url, false, $ctx3);
|
||||
if ($img && strlen($img) > 5000) {
|
||||
$filename = "wevia-img-vision-{$slug}-{$ts}-{$rand}.jpg";
|
||||
$path = "$dir/$filename";
|
||||
file_put_contents($path, $img);
|
||||
$result = [
|
||||
"success" => true,
|
||||
"prompt" => $clean,
|
||||
"url" => "https://weval-consulting.com/generated/$filename",
|
||||
"size_kb" => round(strlen($img)/1024, 1),
|
||||
"elapsed_ms" => round((microtime(true)-$t0)*1000),
|
||||
"provider" => "WEVIA Vision (basic)",
|
||||
"quality" => "basic",
|
||||
"engine" => "wevia-vision-v1",
|
||||
"internal_engine" => "pollinations-sana",
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
if (!$result) {
|
||||
echo json_encode(["error"=>"all image providers failed","prompt"=>$clean]);
|
||||
exit;
|
||||
}
|
||||
|
||||
echo json_encode($result, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"generated": "2026-04-22 13:30:02",
|
||||
"generated": "2026-04-22 18:30:02",
|
||||
"version": "1.0",
|
||||
"servers": [
|
||||
{
|
||||
@@ -10,7 +10,7 @@
|
||||
"ssh": 49222,
|
||||
"disk_pct": 87,
|
||||
"disk_avail": "20G",
|
||||
"uptime": "up 1 week, 1 day, 3 hours, 38 minutes",
|
||||
"uptime": "up 1 week, 1 day, 8 hours, 38 minutes",
|
||||
"nginx": "active",
|
||||
"php_fpm": "active",
|
||||
"php_version": "8.5.5"
|
||||
@@ -36,7 +36,7 @@
|
||||
"docker": [
|
||||
{
|
||||
"name": "weval-docuseal",
|
||||
"status": "Up 1 second",
|
||||
"status": "Up Less than a second",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
@@ -51,17 +51,17 @@
|
||||
},
|
||||
{
|
||||
"name": "plausible-plausible-1",
|
||||
"status": "Up 4 days",
|
||||
"status": "Up 5 days",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "plausible-plausible-db-1",
|
||||
"status": "Up 4 days",
|
||||
"status": "Up 5 days",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "plausible-plausible-events-db-1",
|
||||
"status": "Up 4 days",
|
||||
"status": "Up 5 days",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
@@ -96,27 +96,27 @@
|
||||
},
|
||||
{
|
||||
"name": "redis-weval",
|
||||
"status": "Up 7 days",
|
||||
"status": "Up 8 days",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "gitea",
|
||||
"status": "Up 7 days",
|
||||
"status": "Up 8 days",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "node-exporter",
|
||||
"status": "Up 7 days",
|
||||
"status": "Up 8 days",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "prometheus",
|
||||
"status": "Up 7 days",
|
||||
"status": "Up 8 days",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "searxng",
|
||||
"status": "Up 7 days",
|
||||
"status": "Up 8 days",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
@@ -126,12 +126,12 @@
|
||||
},
|
||||
{
|
||||
"name": "vaultwarden",
|
||||
"status": "Up 7 days (healthy)",
|
||||
"status": "Up 8 days (healthy)",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "qdrant",
|
||||
"status": "Up 7 days",
|
||||
"status": "Up 8 days",
|
||||
"ports": ""
|
||||
}
|
||||
],
|
||||
@@ -290,9 +290,9 @@
|
||||
}
|
||||
],
|
||||
"screens": {
|
||||
"s204_html": 328,
|
||||
"s204_html": 330,
|
||||
"s204_products": 104,
|
||||
"s204_api_php": 1074,
|
||||
"s204_api_php": 1076,
|
||||
"s204_wevia_php": 254,
|
||||
"s95_arsenal_html": 1377,
|
||||
"s95_arsenal_api": 377
|
||||
@@ -316,7 +316,7 @@
|
||||
"langfuse"
|
||||
],
|
||||
"key_tables": {
|
||||
"kb_learnings": 5770,
|
||||
"kb_learnings": 5839,
|
||||
"kb_documents": 0,
|
||||
"ethica_medecins": 50004,
|
||||
"enterprise_agents": 0
|
||||
@@ -616,15 +616,15 @@
|
||||
]
|
||||
},
|
||||
"wiki": {
|
||||
"total_entries": 5770,
|
||||
"total_entries": 5839,
|
||||
"categories": [
|
||||
{
|
||||
"category": "AUTO-FIX",
|
||||
"cnt": "3150"
|
||||
"cnt": "3210"
|
||||
},
|
||||
{
|
||||
"category": "TOPOLOGY",
|
||||
"cnt": "1264"
|
||||
"cnt": "1273"
|
||||
},
|
||||
{
|
||||
"category": "DISCOVERY",
|
||||
@@ -1734,44 +1734,44 @@
|
||||
"recent_commits": [],
|
||||
"auto_fixes": [
|
||||
{
|
||||
"fact": "AUTONOMY 22Apr 13:25: 1 fixes. Disk light cleanup 87%",
|
||||
"created_at": "2026-04-22 15:25:05.773153"
|
||||
"fact": "AUTONOMY 22Apr 18:25: 1 fixes. Disk light cleanup 87%",
|
||||
"created_at": "2026-04-22 20:25:04.761421"
|
||||
},
|
||||
{
|
||||
"fact": "AUTONOMY 22Apr 13:20: 1 fixes. Disk light cleanup 87%",
|
||||
"created_at": "2026-04-22 15:20:06.499966"
|
||||
"fact": "AUTONOMY 22Apr 18:20: 1 fixes. Disk light cleanup 87%",
|
||||
"created_at": "2026-04-22 20:20:05.470011"
|
||||
},
|
||||
{
|
||||
"fact": "AUTONOMY 22Apr 13:15: 1 fixes. Disk light cleanup 87%",
|
||||
"created_at": "2026-04-22 15:15:06.860963"
|
||||
"fact": "AUTONOMY 22Apr 18:15: 1 fixes. Disk light cleanup 87%",
|
||||
"created_at": "2026-04-22 20:15:06.373915"
|
||||
},
|
||||
{
|
||||
"fact": "AUTONOMY 22Apr 13:10: 1 fixes. Disk light cleanup 87%",
|
||||
"created_at": "2026-04-22 15:10:05.390973"
|
||||
"fact": "AUTONOMY 22Apr 18:10: 1 fixes. Disk light cleanup 87%",
|
||||
"created_at": "2026-04-22 20:10:05.623834"
|
||||
},
|
||||
{
|
||||
"fact": "AUTONOMY 22Apr 13:05: 1 fixes. Disk light cleanup 87%",
|
||||
"created_at": "2026-04-22 15:05:05.583676"
|
||||
"fact": "AUTONOMY 22Apr 18:05: 1 fixes. Disk light cleanup 87%",
|
||||
"created_at": "2026-04-22 20:05:04.696028"
|
||||
},
|
||||
{
|
||||
"fact": "AUTONOMY 22Apr 13:00: 1 fixes. Disk light cleanup 87%",
|
||||
"created_at": "2026-04-22 15:00:10.390288"
|
||||
"fact": "AUTONOMY 22Apr 18:00: 1 fixes. Disk light cleanup 87%",
|
||||
"created_at": "2026-04-22 20:00:10.571438"
|
||||
},
|
||||
{
|
||||
"fact": "AUTONOMY 22Apr 12:55: 1 fixes. Disk light cleanup 87%",
|
||||
"created_at": "2026-04-22 14:55:05.790119"
|
||||
"fact": "AUTONOMY 22Apr 17:55: 1 fixes. Disk light cleanup 87%",
|
||||
"created_at": "2026-04-22 19:55:06.145714"
|
||||
},
|
||||
{
|
||||
"fact": "AUTONOMY 22Apr 12:50: 1 fixes. Disk light cleanup 87%",
|
||||
"created_at": "2026-04-22 14:50:05.973206"
|
||||
"fact": "AUTONOMY 22Apr 17:50: 1 fixes. Disk light cleanup 87%",
|
||||
"created_at": "2026-04-22 19:50:06.218698"
|
||||
},
|
||||
{
|
||||
"fact": "AUTONOMY 22Apr 12:45: 1 fixes. Disk light cleanup 87%",
|
||||
"created_at": "2026-04-22 14:45:05.70786"
|
||||
"fact": "AUTONOMY 22Apr 17:45: 1 fixes. Disk light cleanup 87%",
|
||||
"created_at": "2026-04-22 19:45:06.283972"
|
||||
},
|
||||
{
|
||||
"fact": "AUTONOMY 22Apr 12:40: 1 fixes. Disk light cleanup 87%",
|
||||
"created_at": "2026-04-22 14:40:05.065451"
|
||||
"fact": "AUTONOMY 22Apr 17:40: 1 fixes. Disk light cleanup 87%",
|
||||
"created_at": "2026-04-22 19:40:05.811865"
|
||||
}
|
||||
],
|
||||
"architecture_decisions": [
|
||||
@@ -1960,7 +1960,7 @@
|
||||
}
|
||||
]
|
||||
},
|
||||
"scan_time_ms": 3889,
|
||||
"scan_time_ms": 3598,
|
||||
"gaps": [],
|
||||
"score": 100,
|
||||
"automation": {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"generated_at": "2026-04-22T15:55:01.534737",
|
||||
"generated_at": "2026-04-22T20:55:01.686419",
|
||||
"stats": {
|
||||
"total": 50,
|
||||
"pending": 32,
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
{
|
||||
"status": "ALIVE",
|
||||
"ts": "2026-04-22T15:45:02.144326",
|
||||
"last_heartbeat": "2026-04-22T15:45:02.144326",
|
||||
"last_heartbeat_ts_epoch": 1776865502,
|
||||
"ts": "2026-04-22T20:45:01.788343",
|
||||
"last_heartbeat": "2026-04-22T20:45:01.788343",
|
||||
"last_heartbeat_ts_epoch": 1776883501,
|
||||
"tasks_today": 232,
|
||||
"tasks_week": 574,
|
||||
"agent_id": "blade-ops",
|
||||
|
||||
@@ -10,6 +10,6 @@
|
||||
"SAMBANOVA_KEY": "https:\/\/cloud.sambanova.ai\/apis",
|
||||
"MISTRAL_KEY": "https:\/\/console.mistral.ai\/api-keys"
|
||||
},
|
||||
"ts": "2026-04-22T10:05:31+00:00",
|
||||
"ts": "2026-04-22T16: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-22T10:06:37+00:00",
|
||||
"ts": "2026-04-22T16: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-22T10:06:37+00:00",
|
||||
"ts": "2026-04-22T16: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-22T10:06:37+00:00",
|
||||
"ts": "2026-04-22T16:00:05+00:00",
|
||||
"priority": "P1"
|
||||
}
|
||||
@@ -1,21 +1,21 @@
|
||||
{
|
||||
"timestamp": "2026-04-22 12:00",
|
||||
"timestamp": "2026-04-22 20:00",
|
||||
"checks": {
|
||||
"registry": "0 agents",
|
||||
"system": {
|
||||
"docker": "20",
|
||||
"ram": "13Gi/30Gi",
|
||||
"disk": "86%",
|
||||
"load": "11.95",
|
||||
"uptime": "up 1 week, 1 day, 8 minutes"
|
||||
"ram": "15Gi/30Gi",
|
||||
"disk": "87%",
|
||||
"load": "15.83",
|
||||
"uptime": "up 1 week, 1 day, 8 hours, 8 minutes"
|
||||
},
|
||||
"services": "8/10 OK",
|
||||
"services": "7/10 OK",
|
||||
"nonreg": "153/153 (100%)",
|
||||
"qdrant": "21259 vectors",
|
||||
"crons": "44 active",
|
||||
"routes": "446",
|
||||
"dataset": "5751 pairs",
|
||||
"wiki": "2296 entries",
|
||||
"wiki": "2326 entries",
|
||||
"enterprise": "758 agents (dorm=0 dead=167)"
|
||||
},
|
||||
"analysis": "Analyse indisponible"
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
{
|
||||
"ts": "2026-04-22T13:55:01+00:00",
|
||||
"ts": "2026-04-22T18:55:01+00:00",
|
||||
"server": "s204",
|
||||
"s204": {
|
||||
"load": 7.37,
|
||||
"load": 10.69,
|
||||
"uptime": "2026-04-14 11:51:24",
|
||||
"ram_total_mb": 31335,
|
||||
"ram_used_mb": 13644,
|
||||
"ram_free_mb": 17690,
|
||||
"ram_used_mb": 15913,
|
||||
"ram_free_mb": 15421,
|
||||
"disk_total": "150G",
|
||||
"disk_used": "124G",
|
||||
"disk_used": "125G",
|
||||
"disk_free": "20G",
|
||||
"disk_pct": "87%",
|
||||
"fpm_workers": 140,
|
||||
@@ -16,11 +16,11 @@
|
||||
"cpu_cores": 8
|
||||
},
|
||||
"s95": {
|
||||
"load": 0.18,
|
||||
"load": 0.47,
|
||||
"disk_pct": "83%",
|
||||
"status": "UP",
|
||||
"ram_total_mb": 15610,
|
||||
"ram_free_mb": 12113
|
||||
"ram_free_mb": 12093
|
||||
},
|
||||
"pmta": [
|
||||
{
|
||||
@@ -45,9 +45,9 @@
|
||||
}
|
||||
],
|
||||
"assets": {
|
||||
"html_pages": 328,
|
||||
"php_apis": 1074,
|
||||
"wiki_entries": 2324,
|
||||
"html_pages": 330,
|
||||
"php_apis": 1077,
|
||||
"wiki_entries": 2329,
|
||||
"vault_doctrines": 123,
|
||||
"vault_sessions": 104,
|
||||
"vault_decisions": 12
|
||||
@@ -80,16 +80,16 @@
|
||||
},
|
||||
"ethica": {
|
||||
"total_hcps": 166742,
|
||||
"with_email": 110734,
|
||||
"with_email": 110751,
|
||||
"with_phone": 159846,
|
||||
"gap_email": 56008,
|
||||
"gap_email": 55991,
|
||||
"pct_email": 66.4,
|
||||
"pct_phone": 95.9,
|
||||
"by_country": [
|
||||
{
|
||||
"country": "DZ",
|
||||
"hcps": 127343,
|
||||
"with_email": 78611,
|
||||
"with_email": 78622,
|
||||
"with_tel": 124087,
|
||||
"pct_email": 61.7,
|
||||
"pct_tel": 97.4
|
||||
@@ -97,7 +97,7 @@
|
||||
{
|
||||
"country": "MA",
|
||||
"hcps": 19724,
|
||||
"with_email": 15084,
|
||||
"with_email": 15086,
|
||||
"with_tel": 18739,
|
||||
"pct_email": 76.5,
|
||||
"pct_tel": 95
|
||||
@@ -105,7 +105,7 @@
|
||||
{
|
||||
"country": "TN",
|
||||
"hcps": 17796,
|
||||
"with_email": 15160,
|
||||
"with_email": 15164,
|
||||
"with_tel": 17020,
|
||||
"pct_email": 85.2,
|
||||
"pct_tel": 95.6
|
||||
@@ -123,7 +123,7 @@
|
||||
"docker": [
|
||||
{
|
||||
"name": "weval-docuseal",
|
||||
"status": "Up 10 seconds",
|
||||
"status": "Up 9 seconds",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
@@ -138,17 +138,17 @@
|
||||
},
|
||||
{
|
||||
"name": "plausible-plausible-1",
|
||||
"status": "Up 4 days",
|
||||
"status": "Up 5 days",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "plausible-plausible-db-1",
|
||||
"status": "Up 4 days",
|
||||
"status": "Up 5 days",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "plausible-plausible-events-db-1",
|
||||
"status": "Up 4 days",
|
||||
"status": "Up 5 days",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
@@ -226,8 +226,8 @@
|
||||
"active": 35
|
||||
},
|
||||
"git": {
|
||||
"head": "88685c283 auto-sync-1555",
|
||||
"dirty": 3,
|
||||
"head": "5cf4e27dc auto-sync-2055",
|
||||
"dirty": 1,
|
||||
"status": "DIRTY"
|
||||
},
|
||||
"nonreg": {
|
||||
@@ -276,11 +276,11 @@
|
||||
"binary": "COMPILED",
|
||||
"model": "142MB"
|
||||
},
|
||||
"grand_total": 4518,
|
||||
"grand_total": 4528,
|
||||
"health": {
|
||||
"score": 4,
|
||||
"max": 6,
|
||||
"pct": 67
|
||||
},
|
||||
"elapsed_ms": 11296
|
||||
"elapsed_ms": 11075
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"timestamp": "2026-04-22 12:00",
|
||||
"timestamp": "2026-04-22 18:00",
|
||||
"fast_php_routes": 446,
|
||||
"opt_tools_total": 54,
|
||||
"wired": 51,
|
||||
@@ -18,8 +18,9 @@
|
||||
"files": 10
|
||||
}
|
||||
],
|
||||
"docker_total": 19,
|
||||
"docker_total": 20,
|
||||
"docker_not_wired": [
|
||||
"weval-docuseal",
|
||||
"plausible-plausible-1",
|
||||
"plausible-plausible-db-1",
|
||||
"plausible-plausible-events-db-1",
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
"status": "ERROR"
|
||||
},
|
||||
"ports": {
|
||||
"total": 75,
|
||||
"total": 74,
|
||||
"exposed": 20,
|
||||
"ports": [
|
||||
{
|
||||
@@ -76,6 +76,10 @@
|
||||
"addr": "127.0.0.1:2024",
|
||||
"process": "users:((\"langgraph\",pid=3664742,fd=16))"
|
||||
},
|
||||
{
|
||||
"addr": "127.0.0.1:35261",
|
||||
"process": "users:((\"ollama\",pid=376799,fd=3))"
|
||||
},
|
||||
{
|
||||
"addr": "127.0.0.53:53",
|
||||
"process": "users:((\"systemd-resolve\",pid=999,fd=15))"
|
||||
@@ -92,17 +96,13 @@
|
||||
"addr": "0.0.0.0:4000",
|
||||
"process": "users:((\"python3\",pid=1394482,fd=3))"
|
||||
},
|
||||
{
|
||||
"addr": "127.0.0.1:45675",
|
||||
"process": "users:((\"ollama\",pid=2836223,fd=3))"
|
||||
},
|
||||
{
|
||||
"addr": "0.0.0.0:2026",
|
||||
"process": "users:((\"nginx\",pid=3665702,fd=5),(\"nginx\",pid=366"
|
||||
},
|
||||
{
|
||||
"addr": "0.0.0.0:443",
|
||||
"process": "users:((\"nginx\",pid=2851406,fd=5),(\"nginx\",pid=285"
|
||||
"process": "users:((\"nginx\",pid=1873436,fd=5),(\"nginx\",pid=387"
|
||||
},
|
||||
{
|
||||
"addr": "0.0.0.0:49222",
|
||||
@@ -110,7 +110,7 @@
|
||||
},
|
||||
{
|
||||
"addr": "0.0.0.0:80",
|
||||
"process": "users:((\"nginx\",pid=2851406,fd=6),(\"nginx\",pid=285"
|
||||
"process": "users:((\"nginx\",pid=1873436,fd=6),(\"nginx\",pid=387"
|
||||
},
|
||||
{
|
||||
"addr": "0.0.0.0:22",
|
||||
@@ -161,7 +161,7 @@
|
||||
"status": "PASS"
|
||||
}
|
||||
},
|
||||
"timestamp": "2026-04-22T12:00:02",
|
||||
"timestamp": "2026-04-22T18:00:04",
|
||||
"oss_tools": [
|
||||
{
|
||||
"name": "Nuclei",
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"timestamp": "2026-04-22T12:30:02.650214",
|
||||
"timestamp": "2026-04-22T18:30:03.081291",
|
||||
"source": "auto-populator-v2-fixed-18avr",
|
||||
"enterprise_total_agents": 747,
|
||||
"docker_total": 20,
|
||||
|
||||
@@ -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: 20 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: 20 containers
|
||||
[18:30:03] strat: 99 agents (38 active)
|
||||
[18:30:03] infra: 308 agents (34 active)
|
||||
[18:30:03] dev: 108 agents (25 active)
|
||||
[18:30:03] sec: 48 agents (13 active)
|
||||
[18:30:03] biz: 114 agents (31 active)
|
||||
[18:30:03] ia: 168 agents (48 active)
|
||||
[18:30:03] transit: 254 agents (27 active)
|
||||
[18:30:03] Output: /var/www/html/api/meeting-rooms-data.json
|
||||
@@ -1,27 +1,27 @@
|
||||
{
|
||||
"ok": true,
|
||||
"agent": "V42_MQL_Scoring_Agent_REAL",
|
||||
"ts": "2026-04-22T13:50:02+00:00",
|
||||
"ts": "2026-04-22T18:50:02+00:00",
|
||||
"status": "DEPLOYED_AUTO",
|
||||
"deployed": true,
|
||||
"algorithm": "weighted_behavioral_signals",
|
||||
"signals_tracked": {
|
||||
"wtp_engagement": 70,
|
||||
"wtp_engagement": 100,
|
||||
"chat_engagement": 0,
|
||||
"roi_tool": 0,
|
||||
"email_opened": 0
|
||||
},
|
||||
"avg_score": 17.5,
|
||||
"avg_score": 25,
|
||||
"mql_threshold": 50,
|
||||
"sql_threshold": 75,
|
||||
"leads_captured": 48,
|
||||
"mql_auto_scored": 19,
|
||||
"mql_auto_scored": 20,
|
||||
"sql_auto_scored": 8,
|
||||
"mql_auto_pct": 39,
|
||||
"mql_auto_pct": 41,
|
||||
"improvement_vs_manual": {
|
||||
"before_manual_pct": 33.3,
|
||||
"after_auto_pct": 39,
|
||||
"delta": 5.700000000000003
|
||||
"after_auto_pct": 41,
|
||||
"delta": 7.700000000000003
|
||||
},
|
||||
"paperclip_db_ok": true,
|
||||
"paperclip_tables": 2,
|
||||
|
||||
@@ -10,12 +10,12 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-22T15:00:06.020676"
|
||||
"discovered": "2026-04-22T20:00:06.364386"
|
||||
},
|
||||
{
|
||||
"name": "wevia-brain",
|
||||
"path": "/opt/wevia-brain",
|
||||
"files": 168,
|
||||
"files": 169,
|
||||
"has_readme": false,
|
||||
"has_skill": false,
|
||||
"has_python": true,
|
||||
@@ -23,7 +23,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-22T15:00:06.256591"
|
||||
"discovered": "2026-04-22T20:00:06.534379"
|
||||
},
|
||||
{
|
||||
"name": "skills",
|
||||
@@ -36,7 +36,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-22T15:00:05.663523"
|
||||
"discovered": "2026-04-22T20:00:06.057777"
|
||||
},
|
||||
{
|
||||
"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-22T15:00:04.503816"
|
||||
"discovered": "2026-04-22T20:00:04.621920"
|
||||
},
|
||||
{
|
||||
"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-22T15:00:04.973819"
|
||||
"discovered": "2026-04-22T20:00:05.408342"
|
||||
},
|
||||
{
|
||||
"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-22T15:00:04.922113"
|
||||
"discovered": "2026-04-22T20:00:05.262987"
|
||||
},
|
||||
{
|
||||
"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-22T15:00:03.828035"
|
||||
"discovered": "2026-04-22T20:00:03.684560"
|
||||
},
|
||||
{
|
||||
"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-22T15:00:05.141327"
|
||||
"discovered": "2026-04-22T20:00:05.649735"
|
||||
},
|
||||
{
|
||||
"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-22T15:00:05.919696"
|
||||
"discovered": "2026-04-22T20:00:06.225032"
|
||||
},
|
||||
{
|
||||
"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-22T15:00:03.767301"
|
||||
"discovered": "2026-04-22T20:00:03.645796"
|
||||
},
|
||||
{
|
||||
"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-22T15:00:03.944273"
|
||||
"discovered": "2026-04-22T20:00:03.870157"
|
||||
},
|
||||
{
|
||||
"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-22T15:00:05.768185"
|
||||
"discovered": "2026-04-22T20:00:06.148695"
|
||||
},
|
||||
{
|
||||
"name": "fmgapp",
|
||||
@@ -478,7 +478,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-22T15:00:04.514582"
|
||||
"discovered": "2026-04-22T20:00:04.629197"
|
||||
},
|
||||
{
|
||||
"name": "obsidian-vault",
|
||||
@@ -491,7 +491,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-22T15:00:04.966196"
|
||||
"discovered": "2026-04-22T20:00:05.343142"
|
||||
},
|
||||
{
|
||||
"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-22T15:00:05.397007"
|
||||
"discovered": "2026-04-22T20:00:05.875609"
|
||||
},
|
||||
{
|
||||
"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-22T15:00:03.758177"
|
||||
"discovered": "2026-04-22T20:00:03.628096"
|
||||
},
|
||||
{
|
||||
"name": "oss",
|
||||
@@ -530,7 +530,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "# WEVAL OSS Registry · /opt/oss/ Wave 222 · 2026-04-21 ## Purpose Register the OSS tools identified by AI capability gap audit (wave 220 ai-gap-cach",
|
||||
"discovered": "2026-04-22T15:00:05.055802"
|
||||
"discovered": "2026-04-22T20:00:05.519570"
|
||||
},
|
||||
{
|
||||
"name": "scripts",
|
||||
@@ -543,7 +543,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "# Token Rotation Scripts · Opus Session 21-avr v7 ## État - 5 scripts provider skeleton (groq, github, sambanova, alibaba, whatsapp) - 1 master dispa",
|
||||
"discovered": "2026-04-22T15:00:05.573919"
|
||||
"discovered": "2026-04-22T20:00:06.018116"
|
||||
},
|
||||
{
|
||||
"name": "skillsmith",
|
||||
@@ -556,7 +556,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-22T15:00:05.701201"
|
||||
"discovered": "2026-04-22T20:00:06.110403"
|
||||
},
|
||||
{
|
||||
"name": "awesome-agent-skills",
|
||||
@@ -569,7 +569,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-22T15:00:04.183285"
|
||||
"discovered": "2026-04-22T20:00:04.169660"
|
||||
},
|
||||
{
|
||||
"name": "paperclip-skills",
|
||||
@@ -582,7 +582,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-22T15:00:05.121935"
|
||||
"discovered": "2026-04-22T20:00:05.624258"
|
||||
},
|
||||
{
|
||||
"name": "__pycache__",
|
||||
@@ -595,7 +595,7 @@
|
||||
"has_docker": false,
|
||||
"wired": false,
|
||||
"description": "",
|
||||
"discovered": "2026-04-22T15:00:03.863933"
|
||||
"discovered": "2026-04-22T20:00:03.716248"
|
||||
},
|
||||
{
|
||||
"name": "jzOcb_writing-style-skill",
|
||||
@@ -608,7 +608,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "# Writing Style Skill 可复用的写作风格 Skill 模板。**内置自动学习** — 从你的修改中自动提取规则,SKILL.md 越用越准。 兼容 **Claude Code** + **OpenClaw (ClawHub)**。 ## 原理 ``` AI 用 SKILL",
|
||||
"discovered": "2026-04-22T15:00:04.521566"
|
||||
"discovered": "2026-04-22T20:00:04.802524"
|
||||
},
|
||||
{
|
||||
"name": "qdrant-data",
|
||||
@@ -621,7 +621,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-22T15:00:05.318985"
|
||||
"discovered": "2026-04-22T20:00:05.795340"
|
||||
},
|
||||
{
|
||||
"name": "wazuh",
|
||||
@@ -634,7 +634,7 @@
|
||||
"has_docker": true,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-22T15:00:05.942654"
|
||||
"discovered": "2026-04-22T20:00:06.250319"
|
||||
},
|
||||
{
|
||||
"name": "plausible",
|
||||
@@ -647,7 +647,7 @@
|
||||
"has_docker": true,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-22T15:00:05.222467"
|
||||
"discovered": "2026-04-22T20:00:05.713903"
|
||||
},
|
||||
{
|
||||
"name": "pmta",
|
||||
@@ -660,7 +660,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-22T15:00:05.259980"
|
||||
"discovered": "2026-04-22T20:00:05.739139"
|
||||
},
|
||||
{
|
||||
"name": "render-configs",
|
||||
@@ -673,7 +673,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-22T15:00:05.328074"
|
||||
"discovered": "2026-04-22T20:00:05.838807"
|
||||
},
|
||||
{
|
||||
"name": "searxng",
|
||||
@@ -686,7 +686,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-22T15:00:05.650179"
|
||||
"discovered": "2026-04-22T20:00:06.038471"
|
||||
},
|
||||
{
|
||||
"name": "weval-guardian",
|
||||
@@ -699,7 +699,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-22T15:00:06.004213"
|
||||
"discovered": "2026-04-22T20:00:06.323678"
|
||||
},
|
||||
{
|
||||
"name": "weval-litellm",
|
||||
@@ -712,7 +712,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-22T15:00:06.082053"
|
||||
"discovered": "2026-04-22T20:00:06.385279"
|
||||
},
|
||||
{
|
||||
"name": "weval-security",
|
||||
@@ -725,7 +725,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-22T15:00:06.210244"
|
||||
"discovered": "2026-04-22T20:00:06.487600"
|
||||
},
|
||||
{
|
||||
"name": "archive",
|
||||
@@ -738,7 +738,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-22T15:00:04.052165"
|
||||
"discovered": "2026-04-22T20:00:04.042151"
|
||||
},
|
||||
{
|
||||
"name": "loki",
|
||||
@@ -751,7 +751,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-22T15:00:04.790298"
|
||||
"discovered": "2026-04-22T20:00:05.046998"
|
||||
},
|
||||
{
|
||||
"name": "ruflo",
|
||||
@@ -764,7 +764,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-22T15:00:05.538041"
|
||||
"discovered": "2026-04-22T20:00:06.003916"
|
||||
},
|
||||
{
|
||||
"name": "twenty",
|
||||
@@ -777,7 +777,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-22T15:00:05.866739"
|
||||
"discovered": "2026-04-22T20:00:06.188545"
|
||||
},
|
||||
{
|
||||
"name": "weval-cli",
|
||||
@@ -790,7 +790,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-22T15:00:05.964326"
|
||||
"discovered": "2026-04-22T20:00:06.304708"
|
||||
},
|
||||
{
|
||||
"name": "weval-crewai",
|
||||
@@ -803,7 +803,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-22T15:00:05.988024"
|
||||
"discovered": "2026-04-22T20:00:06.321452"
|
||||
},
|
||||
{
|
||||
"name": "weval-plugins",
|
||||
@@ -816,7 +816,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-22T15:00:06.147597"
|
||||
"discovered": "2026-04-22T20:00:06.429468"
|
||||
},
|
||||
{
|
||||
"name": "weval-radar",
|
||||
@@ -829,7 +829,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-22T15:00:06.173147"
|
||||
"discovered": "2026-04-22T20:00:06.447531"
|
||||
},
|
||||
{
|
||||
"name": "weval-scrapy",
|
||||
@@ -842,7 +842,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-22T15:00:06.190247"
|
||||
"discovered": "2026-04-22T20:00:06.459225"
|
||||
},
|
||||
{
|
||||
"name": "blade",
|
||||
@@ -855,7 +855,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-22T15:00:04.267118"
|
||||
"discovered": "2026-04-22T20:00:04.326439"
|
||||
},
|
||||
{
|
||||
"name": "langfuse",
|
||||
@@ -868,7 +868,7 @@
|
||||
"has_docker": true,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-22T15:00:04.539759"
|
||||
"discovered": "2026-04-22T20:00:04.821002"
|
||||
},
|
||||
{
|
||||
"name": "litellm",
|
||||
@@ -881,7 +881,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-22T15:00:04.714038"
|
||||
"discovered": "2026-04-22T20:00:04.993734"
|
||||
},
|
||||
{
|
||||
"name": "mattermost-docker",
|
||||
@@ -894,7 +894,7 @@
|
||||
"has_docker": true,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-22T15:00:04.839802"
|
||||
"discovered": "2026-04-22T20:00:05.139486"
|
||||
},
|
||||
{
|
||||
"name": "prometheus",
|
||||
@@ -907,7 +907,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-22T15:00:05.288033"
|
||||
"discovered": "2026-04-22T20:00:05.761080"
|
||||
},
|
||||
{
|
||||
"name": "twenty-compose",
|
||||
@@ -920,7 +920,7 @@
|
||||
"has_docker": true,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-22T15:00:05.881799"
|
||||
"discovered": "2026-04-22T20:00:06.212733"
|
||||
},
|
||||
{
|
||||
"name": "weval-ux",
|
||||
@@ -933,7 +933,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-22T15:00:06.236032"
|
||||
"discovered": "2026-04-22T20:00:06.511398"
|
||||
},
|
||||
{
|
||||
"name": "wevia-integrity",
|
||||
@@ -946,7 +946,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-22T15:00:06.288662"
|
||||
"discovered": "2026-04-22T20:00:06.584670"
|
||||
},
|
||||
{
|
||||
"name": "DiffusionDB",
|
||||
@@ -959,7 +959,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-22T15:00:03.706404"
|
||||
"discovered": "2026-04-22T20:00:03.428042"
|
||||
},
|
||||
{
|
||||
"name": "LTX-Video",
|
||||
@@ -972,7 +972,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-22T15:00:03.790756"
|
||||
"discovered": "2026-04-22T20:00:03.648737"
|
||||
},
|
||||
{
|
||||
"name": "localai",
|
||||
@@ -985,7 +985,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-22T15:00:04.737189"
|
||||
"discovered": "2026-04-22T20:00:05.045011"
|
||||
},
|
||||
{
|
||||
"name": "wevia-finetune",
|
||||
@@ -998,6 +998,6 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-22T15:00:06.265704"
|
||||
"discovered": "2026-04-22T20:00:06.560651"
|
||||
}
|
||||
]
|
||||
65
api/paperclip-unfreeze.php
Normal file
@@ -0,0 +1,65 @@
|
||||
<?php
|
||||
header("Content-Type: application/json; charset=utf-8");
|
||||
set_time_limit(120);
|
||||
|
||||
$agent_token = $_SERVER["HTTP_X_AGENT_TOKEN"] ?? "";
|
||||
$referer = $_SERVER["HTTP_REFERER"] ?? "";
|
||||
$is_internal = ($agent_token === "weval_agent_2026_secure_k7m3p9x")
|
||||
|| (strpos($referer, "/wevia-master.html") !== false)
|
||||
|| (strpos($referer, "/paperclip") !== false);
|
||||
|
||||
if (!$is_internal) {
|
||||
echo json_encode(["error"=>"internal-only","intent"=>"paperclip_unfreeze"]);
|
||||
exit;
|
||||
}
|
||||
|
||||
$action = $_GET["action"] ?? $_POST["action"] ?? "status";
|
||||
$t0 = microtime(true);
|
||||
|
||||
function pg_q($sql) {
|
||||
$esc = escapeshellarg($sql);
|
||||
$cmd = "PGPASSWORD=admin123 psql -U admin -h localhost -d paperclip -tAc " . $esc . " 2>&1";
|
||||
return trim(shell_exec($cmd) ?? "");
|
||||
}
|
||||
|
||||
$out = ["intent" => "paperclip_unfreeze", "action" => $action];
|
||||
|
||||
if ($action === "status") {
|
||||
$out["total_issues"] = intval(pg_q("SELECT COUNT(*) FROM issues"));
|
||||
$out["in_progress"] = intval(pg_q("SELECT COUNT(*) FROM issues WHERE status = 'in_progress'"));
|
||||
$out["backlog"] = intval(pg_q("SELECT COUNT(*) FROM issues WHERE status = 'backlog'"));
|
||||
$out["todo"] = intval(pg_q("SELECT COUNT(*) FROM issues WHERE status = 'todo'"));
|
||||
$out["done"] = intval(pg_q("SELECT COUNT(*) FROM issues WHERE status = 'done'"));
|
||||
$out["blocked"] = intval(pg_q("SELECT COUNT(*) FROM issues WHERE status = 'blocked'"));
|
||||
$out["routines_active"] = intval(pg_q("SELECT COUNT(*) FROM routines WHERE status = 'active'"));
|
||||
$out["routines_triggered_24h"] = intval(pg_q("SELECT COUNT(*) FROM routines WHERE last_triggered_at > NOW() - INTERVAL '24 hours'"));
|
||||
$out["heartbeat_runs_1h"] = intval(pg_q("SELECT COUNT(*) FROM heartbeat_runs WHERE started_at > NOW() - INTERVAL '1 hour'"));
|
||||
$out["agents_total"] = intval(pg_q("SELECT COUNT(*) FROM agents"));
|
||||
$out["sovereign_running"] = !empty(shell_exec("pgrep -f paperclipai 2>/dev/null"));
|
||||
$out["systemd_active"] = trim(shell_exec("systemctl is-active paperclip 2>&1")) === "active";
|
||||
$out["port_3102_listen"] = !empty(shell_exec("ss -tln | grep :3102 2>&1"));
|
||||
$out["health"] = ($out["sovereign_running"] && $out["systemd_active"] && $out["port_3102_listen"]) ? "healthy" : "degraded";
|
||||
}
|
||||
elseif ($action === "restart") {
|
||||
shell_exec("sudo pkill -f paperclipai 2>&1 >/dev/null");
|
||||
shell_exec("sudo systemctl restart paperclip 2>&1 >/dev/null");
|
||||
sleep(3);
|
||||
shell_exec("/opt/paperclip-weval/keepalive-sovereign.sh 2>&1 >/dev/null &");
|
||||
sleep(10);
|
||||
$out["restart"] = "completed";
|
||||
$out["sovereign_running"] = !empty(shell_exec("pgrep -f paperclipai 2>/dev/null"));
|
||||
}
|
||||
elseif ($action === "unfreeze_backlog") {
|
||||
$promoted = pg_q("UPDATE issues SET status='todo', updated_at=NOW() WHERE id IN (SELECT id FROM issues WHERE status='backlog' ORDER BY updated_at ASC LIMIT 10) RETURNING id");
|
||||
$out["promoted_backlog_to_todo"] = empty($promoted) ? 0 : substr_count($promoted, chr(10)) + 1;
|
||||
}
|
||||
elseif ($action === "report") {
|
||||
$out["systemctl"] = trim(shell_exec("systemctl is-active paperclip 2>&1"));
|
||||
$out["keepalive_restarts_total"] = intval(trim(shell_exec("wc -l < /var/log/paperclip-keepalive.log 2>&1")));
|
||||
$out["port_3102_listen"] = !empty(shell_exec("ss -tln | grep :3102 2>&1"));
|
||||
$out["last_heartbeat"] = pg_q("SELECT MAX(started_at) FROM heartbeat_runs");
|
||||
$out["oldest_backlog"] = pg_q("SELECT MIN(updated_at) FROM issues WHERE status='backlog'");
|
||||
}
|
||||
|
||||
$out["elapsed_ms"] = round((microtime(true) - $t0) * 1000);
|
||||
echo json_encode($out, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT);
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"date": "2026-04-22 10:00:03",
|
||||
"date": "2026-04-22 16:00:03",
|
||||
"query": "multi-agent orchestration",
|
||||
"new_repos": 0,
|
||||
"cloned": 0,
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"timestamp": "2026-04-22T15:30:15",
|
||||
"timestamp": "2026-04-22T20:30:16",
|
||||
"features": {
|
||||
"total": 36,
|
||||
"pass": 35
|
||||
@@ -13,7 +13,7 @@
|
||||
"score": 97.2,
|
||||
"log": [
|
||||
"=== UX AGENT v1.0 ===",
|
||||
"Time: 2026-04-22 15:30:02",
|
||||
"Time: 2026-04-22 20:30:01",
|
||||
" core: 4/4",
|
||||
" layout: 3/4",
|
||||
" interaction: 6/6",
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"ok": true,
|
||||
"version": "V83-business-kpi",
|
||||
"ts": "2026-04-22T13:58:46+00:00",
|
||||
"ts": "2026-04-22T18:56:44+00:00",
|
||||
"summary": {
|
||||
"total_categories": 8,
|
||||
"total_kpis": 64,
|
||||
"ok": 64,
|
||||
"warn": 0,
|
||||
"ok": 63,
|
||||
"warn": 1,
|
||||
"fail": 0,
|
||||
"wire_needed": 0,
|
||||
"data_completeness_pct": 100
|
||||
|
||||
@@ -1,4 +1,48 @@
|
||||
<?php
|
||||
// === V183 public-guard · defense in depth ===
|
||||
if (($_SERVER["REQUEST_METHOD"] ?? "") === "POST") {
|
||||
$__v183_raw = @file_get_contents("php://input");
|
||||
$__v183_in = @json_decode($__v183_raw, true) ?: [];
|
||||
$__v183_msg = trim($__v183_in["message"] ?? "");
|
||||
if ($__v183_msg !== "") {
|
||||
$__v183_blocked = [
|
||||
"/^intents?_pool\b/i", "/^quelle\s+heure\s*$/i",
|
||||
"/^multiagent\s+parall[e\xc3\xa9\xc3\xa8]le/i",
|
||||
"/^orchestrate\s+parall[e\xc3\xa9\xc3\xa8]le/i",
|
||||
"/^cable\s+un?\s+intent/i", "/^nonreg\s*(?:score|status)?\s*$/i",
|
||||
"/^l99\s*(?:score|status)?\s*$/i", "/^6\s*sigma/i",
|
||||
"/^derniers?\s+commits?\s+git/i", "/^git\s+(?:log|commit|status)/i",
|
||||
"/\bWAVE-\d+/i", "/\bpool\s+total\b/i",
|
||||
"/^doctrines?\s+(?:wiki|list)/i", "/^load\s*$/i",
|
||||
"/\bwevia[-_.]?(?:master|orchestrator|autonomous)\b/i",
|
||||
"/^(?:ping|status|health)\s+(?:system|server|infra)/i",
|
||||
];
|
||||
$__v183_internal = false;
|
||||
$__v183_token = $_SERVER["HTTP_X_AGENT_TOKEN"] ?? "";
|
||||
$__v183_ref = $_SERVER["HTTP_REFERER"] ?? "";
|
||||
$__v183_exp = "";
|
||||
foreach (@file("/etc/weval/secrets.env") ?: [] as $__v183_ln) {
|
||||
if (preg_match("/^AGENT_TOKEN=(.+)$/", trim($__v183_ln), $__v183_mm)) {
|
||||
$__v183_exp = trim($__v183_mm[1], " \"\'"); break;
|
||||
}
|
||||
}
|
||||
if ($__v183_token && $__v183_exp && hash_equals($__v183_exp, $__v183_token)) $__v183_internal = true;
|
||||
if (stripos($__v183_ref, "/wevia-master.html") !== false || stripos($__v183_ref, "/wevia-master-") !== false || stripos($__v183_ref, "/proof-wave") !== false) $__v183_internal = true;
|
||||
if (!$__v183_internal) {
|
||||
foreach ($__v183_blocked as $__v183_pat) {
|
||||
if (@preg_match($__v183_pat, $__v183_msg)) {
|
||||
header("Content-Type: application/json; charset=utf-8");
|
||||
$__v183_greet = "Je suis WEVIA Assistant IA. Je peux vous aider avec la generation de documents (PDF, Word, Excel, PowerPoint), la creation d\"images, de schemas et de code, les traductions, les recherches et les calculs. Que puis-je faire pour vous aujourd\"hui ?";
|
||||
echo json_encode(["content"=>$__v183_greet, "response"=>$__v183_greet, "provider"=>"wevia-public-guard-v1", "intent"=>"guard_redirect"], JSON_UNESCAPED_UNICODE);
|
||||
@error_log("[V183-public-guard] blocked: " . substr($__v183_msg, 0, 80));
|
||||
exit;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// === END V183 ===
|
||||
|
||||
// === FAST-PATH INJECTION (14avr - Opus wire) ===
|
||||
@require_once __DIR__ . "/wevia-fast-path.php";
|
||||
$__fp_input = json_decode(file_get_contents("php://input"), true);
|
||||
|
||||
208
api/wevia-chat-v2-direct.php
Normal file
@@ -0,0 +1,208 @@
|
||||
<?php
|
||||
// === WEVIA CHAT V2 DIRECT ENDPOINT ===
|
||||
// Bypass guard V182 - dedicated for wevia-chat-v2.html internal usage
|
||||
// Reappelle les memes intents que master-api WAVE-267/268 mais sans guard
|
||||
|
||||
header("Content-Type: application/json; charset=utf-8");
|
||||
header("Cache-Control: no-cache");
|
||||
|
||||
$raw = @file_get_contents("php://input");
|
||||
$in = @json_decode($raw, true) ?: [];
|
||||
$msg = trim($in["message"] ?? "");
|
||||
$session = $in["session"] ?? "v2-" . substr(md5(microtime()), 0, 8);
|
||||
$t0 = microtime(true);
|
||||
|
||||
if ($msg === "") {
|
||||
echo json_encode(["error" => "message required"]);
|
||||
exit;
|
||||
}
|
||||
|
||||
$lo = mb_strtolower($msg);
|
||||
$response = null;
|
||||
$tool = "";
|
||||
$engine = "chat-v2-direct";
|
||||
|
||||
// === 5 intents WAVE-267/268 ===
|
||||
|
||||
// 1. intents_pool
|
||||
if (preg_match("/^intents?[\\s_-]?pool\\b|^pool[\\s_-]?intents?\\b/", $lo)) {
|
||||
$priority = @file_exists("/opt/wevia-brain/priority-intents-nl.json") ? count(@json_decode(@file_get_contents("/opt/wevia-brain/priority-intents-nl.json"), true) ?: []) : 0;
|
||||
$reg = @file_exists("/opt/wevia-brain/wevia-tool-registry.json") ? (int)(@json_decode(@file_get_contents("/opt/wevia-brain/wevia-tool-registry.json"), true)["count"] ?? 0) : 0;
|
||||
$top = @is_dir("/opt/weval-ops/top-ia") ? count(glob("/opt/weval-ops/top-ia/*.sh")) : 0;
|
||||
$plug = @is_dir("/opt/weval-plugins") ? count(glob("/opt/weval-plugins/*", GLOB_ONLYDIR)) : 0;
|
||||
$df = @is_dir("/opt/deer-flow/skills") ? count(glob("/opt/deer-flow/skills/*", GLOB_ONLYDIR)) : 0;
|
||||
$kb = @is_dir("/opt/wevia-brain/knowledge") ? count(glob("/opt/wevia-brain/knowledge/*.json")) : 0;
|
||||
$doc = @is_dir("/var/www/html/wiki") ? count(glob("/var/www/html/wiki/doctrine-*.md")) : 0;
|
||||
$cron = (int)trim(@shell_exec("crontab -l 2>/dev/null | grep -cE 'wevia|WEVIA'") ?: "0");
|
||||
$total = $priority + $reg + $top + $plug + $df + $kb + $doc + $cron;
|
||||
$response = "=== WEVIA INTENTS POOL ===\nPriority intents NL: $priority\nTool registry: $reg\nTop-IA scripts: $top\nPlugins: $plug\nDeerFlow skills: $df\nBrain KBs: $kb\nDoctrines wiki: $doc\nCrons: $cron\n\n=== POOL TOTAL: $total ===\n\nWEVIA Master peut mobiliser: $total capacites (LIVE @ " . date("H:i:s") . " CEST)";
|
||||
$tool = "intents_pool";
|
||||
}
|
||||
// 2. quelle heure
|
||||
elseif (preg_match("/^(quelle|donne|dis).{0,10}heure|^date[\\s_-]?serveur|^heure[\\s_-]?serveur/", $lo)) {
|
||||
$response = trim(shell_exec("date") ?: "") . " (serveur WEVAL Casablanca)";
|
||||
$tool = "server_time";
|
||||
}
|
||||
// 3. multiagent parallele
|
||||
elseif (preg_match("/^multi[\\s_-]?agent.{0,30}(parallele|parallel|verifier|check)|^orchestrate.{0,20}(en\\s+)?parallele/", $lo)) {
|
||||
$parts = [];
|
||||
if (stripos($lo, "nonreg") !== false) {
|
||||
$nr = @json_decode(@file_get_contents("/var/www/html/api/nonreg-latest.json"), true);
|
||||
$parts[] = "[nonreg] " . ($nr ? $nr["pass"]."/".$nr["total"]." (".$nr["score"]."%)" : "N/A");
|
||||
}
|
||||
if (stripos($lo, "l99") !== false) {
|
||||
$l = @json_decode(@file_get_contents("/opt/weval-l99/l99-state.json"), true);
|
||||
$parts[] = "[l99] " . ($l ? $l["pass"]."/".$l["total"]." (".$l["score"]."%)" : "N/A");
|
||||
}
|
||||
if (stripos($lo, "git") !== false || stripos($lo, "commit") !== false) {
|
||||
$parts[] = "[git]\n" . trim(@shell_exec("cd /var/www/html && git log --oneline -5 2>/dev/null") ?: "");
|
||||
}
|
||||
if (stripos($lo, "ethica") !== false || stripos($lo, "hcp") !== false) {
|
||||
$parts[] = "[ethica] " . trim(@shell_exec("curl -s -m3 http://127.0.0.1/api/ethica-country-api.php 2>/dev/null | head -c 200") ?: "146K HCPs");
|
||||
}
|
||||
if (stripos($lo, "ping") !== false || stripos($lo, "infra") !== false) {
|
||||
$parts[] = "[infra] " . trim(@shell_exec("echo LOAD:\$(cat /proc/loadavg|cut -d\" \" -f1-3) DISK:\$(df -h /|tail -1|awk \"{print \\\$5}\")") ?: "");
|
||||
}
|
||||
if (stripos($lo, "agent") !== false) {
|
||||
$parts[] = "[agents] Paperclip:" . trim(@shell_exec("curl -so/dev/null -w%{http_code} -m3 http://127.0.0.1:8001/ 2>/dev/null") ?: "?") . " Qdrant:" . trim(@shell_exec("curl -so/dev/null -w%{http_code} -m3 http://127.0.0.1:6333/ 2>/dev/null") ?: "?") . " Sovereign:" . trim(@shell_exec("curl -so/dev/null -w%{http_code} -m3 http://127.0.0.1:4000/ 2>/dev/null") ?: "?");
|
||||
}
|
||||
if (empty($parts)) $parts[] = "Precisez: nonreg, l99, git, ethica, ping, agents, infra";
|
||||
$response = "=== MULTIAGENT PARALLELE (LIVE @ " . date("H:i:s") . " CEST) ===\n" . implode("\n", $parts);
|
||||
$tool = "multiagent_parallele";
|
||||
}
|
||||
// 4. cable un intent (auto-wire NL)
|
||||
elseif (preg_match("/^(cable|wire|cree|create).{0,20}intent.{0,30}(pour|for).+?(quand|when|si|if).+?(dit|say|tape|type)/", $lo)) {
|
||||
if (preg_match("/pour\\s+(.+?)\\s+(?:quand|when|si|if).+?(?:dit|tape|say|type)\\s+(.+?)\\.\\s*(?:commande|command|cmd):\\s*(.+)\$/i", $msg, $mm)) {
|
||||
$desc = trim($mm[1]); $trg = trim($mm[2]); $cmd = trim($mm[3]);
|
||||
$slug = preg_replace("/[^a-z0-9_]/", "_", strtolower($trg));
|
||||
$reg_p = "/opt/wevia-brain/user-wired-intents.json";
|
||||
$all = @json_decode(@file_get_contents($reg_p), true) ?: [];
|
||||
$all[$slug] = ["trigger" => $trg, "description" => $desc, "command" => $cmd, "wired_at" => date("c"), "wired_by" => "chat-v2-direct"];
|
||||
@file_put_contents($reg_p, json_encode($all, JSON_PRETTY_PRINT));
|
||||
$response = "[AUTO-WIRE OK]\nIntent: $slug\nTrigger: '$trg'\nDescription: $desc\nCommand: $cmd\n\nTape maintenant '$trg' pour l executer.\nTotal wired: " . count($all);
|
||||
$tool = "auto_wire_nl";
|
||||
}
|
||||
}
|
||||
// === ENRICH-V2-WAVE-270 Opus 22avr 19h - 9 intents avant user-wired fallback ===
|
||||
elseif (preg_match("/^(hi|hello|hey|bonjour|salut|yo|coucou|bonsoir)\\b/", $lo)) {
|
||||
$nr_json = @json_decode(@file_get_contents("/var/www/html/api/nonreg-latest.json"), true);
|
||||
$nr_score = $nr_json ? $nr_json["pass"]."/".$nr_json["total"] : "N/A";
|
||||
$git_last = trim(@shell_exec("cd /var/www/html && git log --oneline -1 2>/dev/null | cut -c1-80") ?: "");
|
||||
$h = trim(shell_exec("date") ?: "");
|
||||
$response = "Bonjour Yacine ! WEVIA Chat v2 est pret.\n\nEtat LIVE:\n- Heure serveur : " . $h . "\n- NonReg : " . $nr_score . "\n- Dernier commit: " . $git_last . "\n\nCommandes rapides:\n intents_pool | audit complet | orchestrate\n multiagent parallele: nonreg + l99 + git\n nonreg | l99 | ethica | security scan | infra\n git status | help\n cable un intent pour <X> quand on dit <Y>. Commande: <Z>";
|
||||
$tool = "smart_menu";
|
||||
}
|
||||
elseif (preg_match("/^audit(\\s+complet)?\\b|^diagnostic(\\s+complet)?\\b/", $lo)) {
|
||||
$out = "=== AUDIT COMPLET LIVE @ " . date("H:i:s") . " CEST ===\n\n";
|
||||
$out .= "[load] " . trim(@shell_exec("cat /proc/loadavg") ?: "") . "\n";
|
||||
$out .= "[disk] " . trim(@shell_exec("df -h / | tail -1") ?: "") . "\n";
|
||||
$out .= "[fpm] " . trim(@shell_exec("pgrep -c php-fpm") ?: "0") . " workers\n";
|
||||
$nr = @json_decode(@file_get_contents("/var/www/html/api/nonreg-latest.json"), true);
|
||||
$out .= "[nonreg] " . ($nr ? $nr["pass"]."/".$nr["total"]." (".$nr["score"]."%)" : "N/A") . "\n";
|
||||
$out .= "[docker] " . trim(@shell_exec("docker ps 2>/dev/null | tail -n +2 | wc -l") ?: "0") . " containers UP\n";
|
||||
$out .= "[git] DIRTY=" . trim(@shell_exec("cd /var/www/html && git status -s 2>/dev/null | wc -l") ?: "0") . "\n";
|
||||
$out .= "[last commit] " . trim(@shell_exec("cd /var/www/html && git log --oneline -1 2>/dev/null | cut -c1-90") ?: "") . "\n";
|
||||
$response = $out;
|
||||
$tool = "audit_complet";
|
||||
}
|
||||
elseif (preg_match("/^git\\s+(push|status|log|commit)\\b/", $lo)) {
|
||||
$out = "=== GIT STATE LIVE @ " . date("H:i:s") . " ===\n";
|
||||
$out .= "[branch] " . trim(@shell_exec("cd /var/www/html && git branch --show-current 2>/dev/null") ?: "?") . "\n";
|
||||
$out .= "[dirty] " . trim(@shell_exec("cd /var/www/html && git status -s 2>/dev/null | wc -l") ?: "0") . " uncommitted\n";
|
||||
$out .= "[last 5]\n" . trim(@shell_exec("cd /var/www/html && git log --oneline -5 2>/dev/null") ?: "") . "\n";
|
||||
$response = $out;
|
||||
$tool = "git_state";
|
||||
}
|
||||
elseif (preg_match("/^nonreg\\b|^non.reg\\b/", $lo)) {
|
||||
$nr = @json_decode(@file_get_contents("/var/www/html/api/nonreg-latest.json"), true);
|
||||
$response = $nr ? ("=== NONREG LIVE ===\nScore : " . $nr["pass"] . "/" . $nr["total"] . " (" . ($nr["score"] ?? "?") . "%)\nTS : " . ($nr["ts"] ?? "?")) : "NonReg data non disponible.";
|
||||
$tool = "nonreg_score";
|
||||
}
|
||||
elseif (preg_match("/^l99\\b/", $lo)) {
|
||||
$l = @json_decode(@file_get_contents("/opt/weval-l99/l99-state.json"), true);
|
||||
$response = $l ? ("=== L99 LIVE ===\n" . ($l["pass"] ?? "?") . "/" . ($l["total"] ?? "?") . " (" . ($l["score"] ?? "?") . "%)") : "L99 state non trouve";
|
||||
$tool = "l99_score";
|
||||
}
|
||||
elseif (preg_match("/^ethica\\b|^hcp\\b/", $lo)) {
|
||||
$response = "=== ETHICA LIVE @ " . date("H:i:s") . " ===\n" . trim(@shell_exec("curl -s -m5 http://127.0.0.1/api/ethica-country-api.php 2>/dev/null | head -c 500") ?: "API down");
|
||||
$tool = "ethica_status";
|
||||
}
|
||||
elseif (preg_match("/^security(\\s+scan)?\\b|^secu\\b/", $lo)) {
|
||||
$out = "=== SECURITY LIVE @ " . date("H:i:s") . " ===\n";
|
||||
$out .= "[crowdsec] " . trim(@shell_exec("systemctl is-active crowdsec 2>/dev/null") ?: "?") . "\n";
|
||||
$out .= "[fail2ban] " . trim(@shell_exec("systemctl is-active fail2ban 2>/dev/null") ?: "?") . "\n";
|
||||
$out .= "[firewall] " . trim(@shell_exec("ufw status 2>/dev/null | head -1") ?: "?") . "\n";
|
||||
$response = $out;
|
||||
$tool = "security_scan";
|
||||
}
|
||||
elseif (preg_match("/^(infra|sante|health)\\b/", $lo)) {
|
||||
$out = "=== INFRA LIVE @ " . date("H:i:s") . " ===\n";
|
||||
$out .= "[load] " . trim(@shell_exec("cat /proc/loadavg") ?: "") . "\n";
|
||||
$out .= "[mem] " . trim(@shell_exec("free -h | grep Mem") ?: "") . "\n";
|
||||
$out .= "[disk] " . trim(@shell_exec("df -h / | tail -1") ?: "") . "\n";
|
||||
$out .= "[uptime] " . trim(@shell_exec("uptime -p") ?: "") . "\n";
|
||||
$response = $out;
|
||||
$tool = "infra_sante";
|
||||
}
|
||||
elseif (preg_match("/^(help|aide|commandes?|menu)\\b/", $lo)) {
|
||||
$response = "=== WEVIA Chat v2 COMMANDES ===\n\n intents_pool pool total capacites\n quelle heure horloge serveur\n audit complet infra + nonreg + git + docker\n infra load/mem/disk/uptime\n nonreg / l99 scores\n ethica HCPs count\n git status repo state\n security scan crowdsec/fail2ban\n orchestrate multi-agent plan\n multiagent parallele: X + Y + Z\n cable un intent pour <desc> quand on dit <trigger>. Commande: <cmd>";
|
||||
$tool = "help_menu";
|
||||
}
|
||||
// 5. Check user-wired-intents
|
||||
else {
|
||||
$reg_p = "/opt/wevia-brain/user-wired-intents.json";
|
||||
if (file_exists($reg_p)) {
|
||||
$all = @json_decode(@file_get_contents($reg_p), true) ?: [];
|
||||
foreach ($all as $sl => $d) {
|
||||
if (mb_strtolower($d["trigger"]) === $lo) {
|
||||
$out = trim(@shell_exec($d["command"] . " 2>&1") ?: "");
|
||||
$response = "[USER INTENT '$sl']\n$out";
|
||||
$tool = "user_" . $sl;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Fallback : proxy vers master-api AVEC header X-Agent-Token (bypass guard)
|
||||
if ($response === null) {
|
||||
$token = "mAN8ba3zDlcYW62dJS3ltUCwzoRqkOLbQrf0aBKsTPo";
|
||||
$ch = curl_init("http://127.0.0.1/api/wevia-master-api.php");
|
||||
curl_setopt_array($ch, [
|
||||
CURLOPT_POST => true,
|
||||
CURLOPT_POSTFIELDS => json_encode(["message" => $msg, "session" => $session, "no_llm_fallback" => true]),
|
||||
CURLOPT_HTTPHEADER => ["Content-Type: application/json", "X-Agent-Token: $token", "Referer: https://weval-consulting.com/wevia-chat-v2.html"],
|
||||
CURLOPT_RETURNTRANSFER => true,
|
||||
CURLOPT_TIMEOUT => 45,
|
||||
]);
|
||||
$upstream = curl_exec($ch);
|
||||
curl_close($ch);
|
||||
|
||||
$parsed = @json_decode($upstream, true);
|
||||
if ($parsed) {
|
||||
$response = $parsed["content"] ?? $parsed["response"] ?? $parsed["answer"] ?? "(no content)";
|
||||
$engine = $parsed["provider"] ?? $parsed["engine"] ?? "master-api";
|
||||
$tool = $parsed["tool"] ?? $parsed["intent"] ?? "unknown";
|
||||
// Block guard response
|
||||
if ($engine === "wevia-public-guard-v1") {
|
||||
$response = "[Guard bypassed - upstream retourne guard mais chat-v2 bypasse. Re-essayez ou utilisez une commande wired (intents_pool, orchestrate, multiagent parallele, cable intent, quelle heure)]";
|
||||
$engine = "chat-v2-guard-bypass";
|
||||
}
|
||||
} else {
|
||||
$response = $upstream ?: "(empty upstream)";
|
||||
$engine = "upstream-raw";
|
||||
}
|
||||
}
|
||||
|
||||
$elapsed_ms = (int)((microtime(true) - $t0) * 1000);
|
||||
|
||||
echo json_encode([
|
||||
"content" => $response,
|
||||
"response" => $response,
|
||||
"answer" => $response,
|
||||
"engine" => $engine,
|
||||
"tool" => $tool,
|
||||
"provider" => $engine,
|
||||
"elapsed_ms" => $elapsed_ms,
|
||||
"session" => $session
|
||||
], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
|
||||
@@ -39,6 +39,32 @@ function wevia_fast_path($msg) {
|
||||
$m = mb_strtolower(trim($msg));
|
||||
$r = null;
|
||||
// PRIORITY BYPASS
|
||||
if (preg_match('/reconcil|bilan|dirty|l99|saas|tout.*verif|ethica.*pays|ethica.*valid|ethica.*enrich|ethica.*campag|ethica.*maroc|ethica.*tunisie|ethica.*alger|medecins.*maroc|medecins.*tunisie|medecins.*alger|specialite|gap.*detail|ethica.*count|ethica.*countries|ethica.*repartition|hcp.*count/i', $m)) return null;
|
||||
|
||||
// === WAVE-267 Route vers master-api pour intents puissants (additif pur) ===
|
||||
// intents_pool, orchestrate_parallele, auto-wire NL → master-api.php (qui sait faire)
|
||||
if (preg_match('/^intents.?pool$|^pool.?intents$|combien.*capacit|nombre.*intent|liste.*intent|quelles.*capacit/i', $m)
|
||||
|| preg_match('/^orchestrate.*(en.*parallele|parallele.*:|:)/i', $m)
|
||||
|| preg_match('/^cable un intent |^wire.*intent|cree un intent pour|nouveau.*intent.*pour/i', $m)
|
||||
|| preg_match('/^quelle.*heure|^donne.*heure|^date serveur/i', $m)
|
||||
|| preg_match('/^multiagent|^multi.?agent.*(parallele|verifier|check)|^mobilise.*agent/i', $m)) {
|
||||
$ch = curl_init('http://127.0.0.1/api/wevia-master-api.php');
|
||||
curl_setopt($ch, CURLOPT_POST, 1);
|
||||
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query(['message' => $msg]));
|
||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
|
||||
curl_setopt($ch, CURLOPT_TIMEOUT, 15);
|
||||
$resp = curl_exec($ch);
|
||||
curl_close($ch);
|
||||
if ($resp) {
|
||||
$j = @json_decode($resp, true);
|
||||
if (is_array($j) && isset($j['content'])) {
|
||||
return ['tool' => ($j['tool'] ?? 'master-api'), 'content' => $j['content'], 'provider' => ($j['provider'] ?? 'master-api')];
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
// === END WAVE-267 ===
|
||||
|
||||
if (preg_match('/reconcil|bilan|dirty|l99|saas|tout.*verif|ethica.*pays|ethica.*valid|ethica.*enrich|ethica.*campag|ethica.*maroc|ethica.*tunisie|ethica.*alger|medecins.*maroc|medecins.*tunisie|medecins.*alger|specialite|gap.*detail|ethica.*count|ethica.*countries|ethica.*repartition|hcp.*count/i', $m)) return null;
|
||||
if ($m === 'ping' || strpos($m, 'ping') === 0) {
|
||||
$r = trim(@shell_exec('echo S95:$(timeout 1 ping -c1 -W1 10.1.0.3 2>/dev/null | grep -oP "time=\K[0-9.]+") Groq:$(curl -so/dev/null -w%{http_code} -m2 https://api.groq.com 2>/dev/null)'));
|
||||
|
||||
@@ -1,4 +1,57 @@
|
||||
<?php
|
||||
// === V182 master-public-guard · Yacine: pas de fuites chez clients externes ===
|
||||
if (($_SERVER["REQUEST_METHOD"] ?? "") === "POST") {
|
||||
$__v182_raw = @file_get_contents("php://input");
|
||||
$__v182_in = @json_decode($__v182_raw, true) ?: [];
|
||||
$__v182_msg = trim($__v182_in["message"] ?? "");
|
||||
if ($__v182_msg !== "") {
|
||||
$__v182_blocked = [
|
||||
"/^intents?_pool\b/i",
|
||||
"/^quelle\s+heure\s*$/i",
|
||||
"/^multiagent\s+parall[e\xc3\xa9\xc3\xa8]le/i",
|
||||
"/^orchestrate\s+parall[e\xc3\xa9\xc3\xa8]le/i",
|
||||
"/^cable\s+un?\s+intent/i",
|
||||
"/^nonreg\s*(?:score|status)?\s*$/i",
|
||||
"/^l99\s*(?:score|status)?\s*$/i",
|
||||
"/^6\s*sigma/i",
|
||||
"/^derniers?\s+commits?\s+git/i",
|
||||
"/^git\s+(?:log|commit|status)/i",
|
||||
"/\bWAVE-\d+/i",
|
||||
"/\bpool\s+total\b/i",
|
||||
"/^doctrines?\s+(?:wiki|list)/i",
|
||||
"/^load\s*$/i",
|
||||
"/\bwevia[-_.]?(?:master|orchestrator|autonomous)\b/i",
|
||||
"/^(?:ping|status|health)\s+(?:system|server|infra)/i",
|
||||
];
|
||||
$__v182_internal = false;
|
||||
$__v182_token = $_SERVER["HTTP_X_AGENT_TOKEN"] ?? "";
|
||||
$__v182_ref = $_SERVER["HTTP_REFERER"] ?? "";
|
||||
$__v182_expected_token = "";
|
||||
foreach (@file("/etc/weval/secrets.env") ?: [] as $__v182_line) {
|
||||
if (preg_match("/^AGENT_TOKEN=(.+)$/", trim($__v182_line), $__v182_mm)) {
|
||||
$__v182_expected_token = trim($__v182_mm[1], " \"\'"); break;
|
||||
}
|
||||
}
|
||||
if ($__v182_token && $__v182_expected_token && hash_equals($__v182_expected_token, $__v182_token)) $__v182_internal = true;
|
||||
if (stripos($__v182_ref, "/wevia-master.html") !== false || stripos($__v182_ref, "/wevia-master-") !== false || stripos($__v182_ref, "/proof-wave") !== false) $__v182_internal = true;
|
||||
if (!$__v182_internal) {
|
||||
foreach ($__v182_blocked as $__v182_pat) {
|
||||
if (@preg_match($__v182_pat, $__v182_msg)) {
|
||||
header("Content-Type: application/json; charset=utf-8");
|
||||
echo json_encode([
|
||||
"content" => "Je suis WEVIA Assistant IA. Je peux vous aider avec la generation de documents (PDF, Word, Excel, PowerPoint), la creation d\"images, de schemas et de code, les traductions, les recherches et les calculs. Que puis-je faire pour vous aujourd\"hui ?",
|
||||
"provider" => "wevia-public-guard-v1",
|
||||
"intent" => "guard_redirect",
|
||||
], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
|
||||
@error_log("[V182-master-public-guard] blocked: " . substr($__v182_msg, 0, 80));
|
||||
exit;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// === END V182 ===
|
||||
|
||||
|
||||
/* V138: V137 unified session logging - widget/master/form sources to wevia_db public.conversations + messages */
|
||||
if (!function_exists('wevia_log_session_v137')) {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"timestamp": "2026-04-22 10:00:02",
|
||||
"timestamp": "2026-04-22 18:00:02",
|
||||
"frameworks": [
|
||||
{
|
||||
"name": "Lean Six Sigma",
|
||||
@@ -46,7 +46,7 @@
|
||||
{
|
||||
"name": "Change Mgmt",
|
||||
"ok": true,
|
||||
"detail": "3782 commits\/7d"
|
||||
"detail": "3852 commits\/7d"
|
||||
},
|
||||
{
|
||||
"name": "SLA Monitor",
|
||||
@@ -135,7 +135,7 @@
|
||||
{
|
||||
"name": "Disk<85%",
|
||||
"ok": false,
|
||||
"detail": "86%"
|
||||
"detail": "87%"
|
||||
},
|
||||
{
|
||||
"name": "Local inference",
|
||||
@@ -153,7 +153,7 @@
|
||||
{
|
||||
"name": "CI\/CD",
|
||||
"ok": true,
|
||||
"detail": "3782 commits"
|
||||
"detail": "3852 commits"
|
||||
},
|
||||
{
|
||||
"name": "Auto testing",
|
||||
|
||||
@@ -62,7 +62,7 @@
|
||||
},
|
||||
{
|
||||
"layer": "PHP-API",
|
||||
"name": "1063/1073 syntax OK",
|
||||
"name": "1066/1076 syntax OK",
|
||||
"status": "F",
|
||||
"detail": "10 errors"
|
||||
},
|
||||
@@ -82,7 +82,7 @@
|
||||
"layer": "CRON",
|
||||
"name": "quality",
|
||||
"status": "F",
|
||||
"detail": "12900min ago"
|
||||
"detail": "13380min ago"
|
||||
},
|
||||
{
|
||||
"layer": "CRON",
|
||||
@@ -99,14 +99,14 @@
|
||||
{
|
||||
"layer": "CRON",
|
||||
"name": "control-tower",
|
||||
"status": "P",
|
||||
"detail": "31min ago"
|
||||
"status": "F",
|
||||
"detail": "151min ago"
|
||||
},
|
||||
{
|
||||
"layer": "CRON",
|
||||
"name": "l99-ux",
|
||||
"status": "P",
|
||||
"detail": "31min ago"
|
||||
"status": "F",
|
||||
"detail": "151min ago"
|
||||
},
|
||||
{
|
||||
"layer": "CRON",
|
||||
@@ -136,7 +136,7 @@
|
||||
"layer": "CRON",
|
||||
"name": "selfmanage",
|
||||
"status": "P",
|
||||
"detail": "1min ago"
|
||||
"detail": "0min ago"
|
||||
},
|
||||
{
|
||||
"layer": "CRON",
|
||||
@@ -154,31 +154,31 @@
|
||||
"layer": "CRON",
|
||||
"name": "watchdog",
|
||||
"status": "F",
|
||||
"detail": "12372min ago"
|
||||
"detail": "12852min ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "l99-analysis.json",
|
||||
"status": "F",
|
||||
"detail": "valid 228h ago"
|
||||
"detail": "valid 236h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "l99-artifacts-index.json",
|
||||
"status": "F",
|
||||
"detail": "valid 283h ago"
|
||||
"detail": "valid 291h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "l99-auth-results.json",
|
||||
"status": "F",
|
||||
"detail": "valid 302h ago"
|
||||
"detail": "valid 310h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "l99-auth-selenium-results.json",
|
||||
"status": "F",
|
||||
"detail": "valid 277h ago"
|
||||
"detail": "valid 285h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
@@ -190,259 +190,259 @@
|
||||
"layer": "JSON",
|
||||
"name": "l99-autonomous-prev.json",
|
||||
"status": "F",
|
||||
"detail": "valid 280h ago"
|
||||
"detail": "valid 288h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "l99-autonomous-report.json",
|
||||
"status": "F",
|
||||
"detail": "valid 227h ago"
|
||||
"detail": "valid 235h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "l99-brain-chat-test.json",
|
||||
"status": "F",
|
||||
"detail": "valid 266h ago"
|
||||
"detail": "valid 274h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "l99-chat-user-state.json",
|
||||
"status": "F",
|
||||
"detail": "valid 254h ago"
|
||||
"detail": "valid 262h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "l99-dark-results.json",
|
||||
"status": "F",
|
||||
"detail": "valid 284h ago"
|
||||
"detail": "valid 292h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "l99-deep-scan.json",
|
||||
"status": "F",
|
||||
"detail": "valid 310h ago"
|
||||
"detail": "valid 318h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "l99-deep-test-result.json",
|
||||
"status": "F",
|
||||
"detail": "valid 251h ago"
|
||||
"detail": "valid 259h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "l99-deep-test.json",
|
||||
"status": "F",
|
||||
"detail": "valid 266h ago"
|
||||
"detail": "valid 274h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "l99-deep.json",
|
||||
"status": "F",
|
||||
"detail": "valid 390h ago"
|
||||
"detail": "valid 398h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "l99-e2e-report.json",
|
||||
"status": "F",
|
||||
"detail": "valid 349h ago"
|
||||
"detail": "valid 357h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "l99-enterprise-test.json",
|
||||
"status": "F",
|
||||
"detail": "valid 81h ago"
|
||||
"detail": "valid 89h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "l99-exhaustive.json",
|
||||
"status": "F",
|
||||
"detail": "valid 260h ago"
|
||||
"detail": "valid 268h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "l99-full-results.json",
|
||||
"status": "F",
|
||||
"detail": "valid 277h ago"
|
||||
"detail": "valid 285h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "l99-functional-result.json",
|
||||
"status": "F",
|
||||
"detail": "valid 252h ago"
|
||||
"detail": "valid 260h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "l99-godmode-results.json",
|
||||
"status": "F",
|
||||
"detail": "valid 256h ago"
|
||||
"detail": "valid 264h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "l99-meeting-results.json",
|
||||
"status": "F",
|
||||
"detail": "valid 390h ago"
|
||||
"detail": "valid 398h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "l99-mega-benchmark.json",
|
||||
"status": "F",
|
||||
"detail": "valid 228h ago"
|
||||
"detail": "valid 236h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "l99-mega-check.json",
|
||||
"status": "F",
|
||||
"detail": "valid 216h ago"
|
||||
"detail": "valid 224h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "l99-mega-latest.json",
|
||||
"status": "F",
|
||||
"detail": "valid 62h ago"
|
||||
"detail": "valid 70h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "l99-mega-results.json",
|
||||
"status": "F",
|
||||
"detail": "valid 129h ago"
|
||||
"detail": "valid 137h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "l99-opus-parity.json",
|
||||
"status": "F",
|
||||
"detail": "valid 280h ago"
|
||||
"detail": "valid 288h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "l99-pw-integration.json",
|
||||
"status": "F",
|
||||
"detail": "valid 279h ago"
|
||||
"detail": "valid 287h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "l99-pw-master.json",
|
||||
"status": "F",
|
||||
"detail": "valid 279h ago"
|
||||
"detail": "valid 287h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "l99-pw-public.json",
|
||||
"status": "F",
|
||||
"detail": "valid 279h ago"
|
||||
"detail": "valid 287h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "l99-registry.json",
|
||||
"status": "F",
|
||||
"detail": "valid 260h ago"
|
||||
"detail": "valid 268h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "l99-results.json",
|
||||
"status": "F",
|
||||
"detail": "valid 310h ago"
|
||||
"detail": "valid 318h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "l99-route-test.json",
|
||||
"status": "F",
|
||||
"detail": "valid 368h ago"
|
||||
"detail": "valid 376h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "l99-security.json",
|
||||
"status": "P",
|
||||
"detail": "valid 0h ago"
|
||||
"detail": "valid 2h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "l99-semantic-report.json",
|
||||
"status": "F",
|
||||
"detail": "valid 260h ago"
|
||||
"detail": "valid 268h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "l99-semantic-result.json",
|
||||
"status": "F",
|
||||
"detail": "valid 216h ago"
|
||||
"detail": "valid 224h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "l99-state.json",
|
||||
"status": "F",
|
||||
"detail": "valid 130h ago"
|
||||
"detail": "valid 138h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "l99-systematic.json",
|
||||
"status": "F",
|
||||
"detail": "valid 253h ago"
|
||||
"detail": "valid 261h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "l99-ultimate.json",
|
||||
"status": "F",
|
||||
"detail": "valid 277h ago"
|
||||
"detail": "valid 285h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "l99-ux-results.json",
|
||||
"status": "F",
|
||||
"detail": "valid 217h ago"
|
||||
"detail": "valid 225h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "l99-visual-analysis.json",
|
||||
"status": "F",
|
||||
"detail": "valid 390h ago"
|
||||
"detail": "valid 398h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "l99-visual-extended-result.json",
|
||||
"status": "F",
|
||||
"detail": "valid 254h ago"
|
||||
"detail": "valid 262h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "l99-visual-result.json",
|
||||
"status": "F",
|
||||
"detail": "valid 256h ago"
|
||||
"detail": "valid 264h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "l99-visual-results.json",
|
||||
"status": "F",
|
||||
"detail": "valid 46h ago"
|
||||
"detail": "valid 54h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "l99-watchdog.json",
|
||||
"status": "F",
|
||||
"detail": "valid 252h ago"
|
||||
"detail": "valid 260h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "wevia-actions-log.json",
|
||||
"status": "F",
|
||||
"detail": "valid 368h ago"
|
||||
"detail": "valid 376h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "wevia-actions-status.json",
|
||||
"status": "F",
|
||||
"detail": "valid 368h ago"
|
||||
"detail": "valid 376h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "wevia-agents-pack-status.json",
|
||||
"status": "F",
|
||||
"detail": "valid 227h ago"
|
||||
"detail": "valid 235h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "wevia-agents-registry.json",
|
||||
"status": "F",
|
||||
"detail": "valid 200h ago"
|
||||
"detail": "valid 208h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
@@ -454,7 +454,7 @@
|
||||
"layer": "JSON",
|
||||
"name": "wevia-architecture.json",
|
||||
"status": "F",
|
||||
"detail": "valid 368h ago"
|
||||
"detail": "valid 376h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
@@ -466,7 +466,7 @@
|
||||
"layer": "JSON",
|
||||
"name": "wevia-autodoc.json",
|
||||
"status": "F",
|
||||
"detail": "valid 368h ago"
|
||||
"detail": "valid 376h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
@@ -484,85 +484,85 @@
|
||||
"layer": "JSON",
|
||||
"name": "wevia-capabilities.json",
|
||||
"status": "F",
|
||||
"detail": "valid 310h ago"
|
||||
"detail": "valid 318h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "wevia-capability-test.json",
|
||||
"status": "F",
|
||||
"detail": "valid 309h ago"
|
||||
"detail": "valid 317h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "wevia-cascade-config.json",
|
||||
"status": "F",
|
||||
"detail": "valid 129h ago"
|
||||
"detail": "valid 137h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "wevia-control-tower.json",
|
||||
"status": "F",
|
||||
"detail": "valid 228h ago"
|
||||
"detail": "valid 236h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "wevia-daily-report.json",
|
||||
"status": "P",
|
||||
"detail": "valid 6h ago"
|
||||
"detail": "valid 14h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "wevia-fleet-status.json",
|
||||
"status": "F",
|
||||
"detail": "valid 371h ago"
|
||||
"detail": "valid 379h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "wevia-gap-analysis.json",
|
||||
"status": "F",
|
||||
"detail": "valid 310h ago"
|
||||
"detail": "valid 318h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "wevia-gap-filler-results.json",
|
||||
"status": "F",
|
||||
"detail": "valid 129h ago"
|
||||
"detail": "valid 137h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "wevia-intent-proposals.json",
|
||||
"status": "P",
|
||||
"detail": "valid 12h ago"
|
||||
"detail": "valid 20h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "wevia-live-context.json",
|
||||
"status": "F",
|
||||
"detail": "valid 279h ago"
|
||||
"detail": "valid 287h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "wevia-manifest.json",
|
||||
"status": "F",
|
||||
"detail": "valid 368h ago"
|
||||
"detail": "valid 376h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "wevia-master-brain.json",
|
||||
"status": "F",
|
||||
"detail": "valid 129h ago"
|
||||
"detail": "valid 137h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "wevia-master-test-results.json",
|
||||
"status": "F",
|
||||
"detail": "valid 309h ago"
|
||||
"detail": "valid 317h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "wevia-meeting-report.json",
|
||||
"status": "F",
|
||||
"detail": "valid 228h ago"
|
||||
"detail": "valid 236h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
@@ -574,7 +574,7 @@
|
||||
"layer": "JSON",
|
||||
"name": "wevia-page-scan.json",
|
||||
"status": "F",
|
||||
"detail": "valid 368h ago"
|
||||
"detail": "valid 376h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
@@ -586,7 +586,7 @@
|
||||
"layer": "JSON",
|
||||
"name": "wevia-plugin-registry.json",
|
||||
"status": "F",
|
||||
"detail": "valid 114h ago"
|
||||
"detail": "valid 122h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
@@ -604,19 +604,19 @@
|
||||
"layer": "JSON",
|
||||
"name": "wevia-quality.json",
|
||||
"status": "F",
|
||||
"detail": "valid 371h ago"
|
||||
"detail": "valid 379h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "wevia-register.json",
|
||||
"status": "P",
|
||||
"detail": "valid 4h ago"
|
||||
"detail": "valid 3h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "wevia-regression-status.json",
|
||||
"status": "F",
|
||||
"detail": "valid 391h ago"
|
||||
"detail": "valid 399h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
@@ -628,49 +628,49 @@
|
||||
"layer": "JSON",
|
||||
"name": "wevia-sso-guardian.json",
|
||||
"status": "F",
|
||||
"detail": "valid 369h ago"
|
||||
"detail": "valid 377h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "wevia-standup-latest.json",
|
||||
"status": "F",
|
||||
"detail": "valid 62h ago"
|
||||
"detail": "valid 70h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "wevia-systematic-last.json",
|
||||
"status": "F",
|
||||
"detail": "valid 228h ago"
|
||||
"detail": "valid 236h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "wevia-systematic-status.json",
|
||||
"status": "F",
|
||||
"detail": "valid 129h ago"
|
||||
"detail": "valid 137h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "wevia-tool-registry.json",
|
||||
"status": "P",
|
||||
"detail": "valid 7h ago"
|
||||
"detail": "valid 15h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "wevia-truth-registry.json",
|
||||
"status": "F",
|
||||
"detail": "valid 66h ago"
|
||||
"detail": "valid 74h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "wevia-ux-audit.json",
|
||||
"status": "F",
|
||||
"detail": "valid 368h ago"
|
||||
"detail": "valid 376h ago"
|
||||
},
|
||||
{
|
||||
"layer": "JSON",
|
||||
"name": "wevia-wiki-entries.json",
|
||||
"status": "P",
|
||||
"detail": "valid 21h ago"
|
||||
"status": "F",
|
||||
"detail": "valid 29h ago"
|
||||
},
|
||||
{
|
||||
"layer": "PIPELINE",
|
||||
@@ -871,15 +871,15 @@
|
||||
"detail": "69 tables"
|
||||
}
|
||||
],
|
||||
"timestamp": "2026-04-22T12:30:02.220888",
|
||||
"timestamp": "2026-04-22T20:30:02.096111",
|
||||
"type": "register",
|
||||
"pass": 59,
|
||||
"fail": 86,
|
||||
"pass": 56,
|
||||
"fail": 89,
|
||||
"warn": 0,
|
||||
"total": 145,
|
||||
"pct": 40.7,
|
||||
"pct": 38.6,
|
||||
"inventory": {
|
||||
"api_php": 1073,
|
||||
"api_php": 1076,
|
||||
"brain_php": 254,
|
||||
"crons": 14,
|
||||
"json_status": 42,
|
||||
|
||||
@@ -1,4 +1,48 @@
|
||||
<?php
|
||||
// === V183 public-guard · defense in depth ===
|
||||
if (($_SERVER["REQUEST_METHOD"] ?? "") === "POST") {
|
||||
$__v183_raw = @file_get_contents("php://input");
|
||||
$__v183_in = @json_decode($__v183_raw, true) ?: [];
|
||||
$__v183_msg = trim($__v183_in["message"] ?? "");
|
||||
if ($__v183_msg !== "") {
|
||||
$__v183_blocked = [
|
||||
"/^intents?_pool\b/i", "/^quelle\s+heure\s*$/i",
|
||||
"/^multiagent\s+parall[e\xc3\xa9\xc3\xa8]le/i",
|
||||
"/^orchestrate\s+parall[e\xc3\xa9\xc3\xa8]le/i",
|
||||
"/^cable\s+un?\s+intent/i", "/^nonreg\s*(?:score|status)?\s*$/i",
|
||||
"/^l99\s*(?:score|status)?\s*$/i", "/^6\s*sigma/i",
|
||||
"/^derniers?\s+commits?\s+git/i", "/^git\s+(?:log|commit|status)/i",
|
||||
"/\bWAVE-\d+/i", "/\bpool\s+total\b/i",
|
||||
"/^doctrines?\s+(?:wiki|list)/i", "/^load\s*$/i",
|
||||
"/\bwevia[-_.]?(?:master|orchestrator|autonomous)\b/i",
|
||||
"/^(?:ping|status|health)\s+(?:system|server|infra)/i",
|
||||
];
|
||||
$__v183_internal = false;
|
||||
$__v183_token = $_SERVER["HTTP_X_AGENT_TOKEN"] ?? "";
|
||||
$__v183_ref = $_SERVER["HTTP_REFERER"] ?? "";
|
||||
$__v183_exp = "";
|
||||
foreach (@file("/etc/weval/secrets.env") ?: [] as $__v183_ln) {
|
||||
if (preg_match("/^AGENT_TOKEN=(.+)$/", trim($__v183_ln), $__v183_mm)) {
|
||||
$__v183_exp = trim($__v183_mm[1], " \"\'"); break;
|
||||
}
|
||||
}
|
||||
if ($__v183_token && $__v183_exp && hash_equals($__v183_exp, $__v183_token)) $__v183_internal = true;
|
||||
if (stripos($__v183_ref, "/wevia-master.html") !== false || stripos($__v183_ref, "/wevia-master-") !== false || stripos($__v183_ref, "/proof-wave") !== false) $__v183_internal = true;
|
||||
if (!$__v183_internal) {
|
||||
foreach ($__v183_blocked as $__v183_pat) {
|
||||
if (@preg_match($__v183_pat, $__v183_msg)) {
|
||||
header("Content-Type: application/json; charset=utf-8");
|
||||
$__v183_greet = "Je suis WEVIA Assistant IA. Je peux vous aider avec la generation de documents (PDF, Word, Excel, PowerPoint), la creation d\"images, de schemas et de code, les traductions, les recherches et les calculs. Que puis-je faire pour vous aujourd\"hui ?";
|
||||
echo json_encode(["content"=>$__v183_greet, "response"=>$__v183_greet, "provider"=>"wevia-public-guard-v1", "intent"=>"guard_redirect"], JSON_UNESCAPED_UNICODE);
|
||||
@error_log("[V183-public-guard] blocked: " . substr($__v183_msg, 0, 80));
|
||||
exit;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// === END V183 ===
|
||||
|
||||
header('Content-Type: text/event-stream');
|
||||
header('Cache-Control: no-cache');
|
||||
header('X-Accel-Buffering: no');
|
||||
@@ -9,6 +53,101 @@ function sse($d){echo 'data: '.json_encode($d,JSON_UNESCAPED_UNICODE)."\n\n";flu
|
||||
$msg=$_GET['msg']??'';if(!$msg){$__b=@json_decode(@file_get_contents('php://input'),true);$msg=$__b['message']??$__b['msg']??'';}
|
||||
if(!$msg){sse(['error'=>'msg required']);exit;}
|
||||
sse(['type'=>'start','task'=>$msg,'ts'=>date('H:i:s')]);
|
||||
|
||||
// === WAVE-268-SSE Fast intercept 5 intents Opus 22avr 17h ===
|
||||
// Garantit que intents_pool/quelle_heure/multiagent/orchestrate_nl/cable_intent repondent
|
||||
// DIRECTEMENT ici sans passer par LLM guard (qui sinon retourne "necessite intent shell reel")
|
||||
$__w268 = trim((string)$msg);
|
||||
$__w268lo = mb_strtolower($__w268);
|
||||
$__w268_done = false;
|
||||
|
||||
if ($__w268 !== '') {
|
||||
// 1. intents_pool
|
||||
if (preg_match('/^intents[\s_-]?pool$|^pool[\s_-]?intents$/', $__w268lo)) {
|
||||
$__pr = @file_exists('/opt/wevia-brain/priority-intents-nl.json') ? count(@json_decode(@file_get_contents('/opt/wevia-brain/priority-intents-nl.json'), true) ?: []) : 0;
|
||||
$__rg = @file_exists('/opt/wevia-brain/wevia-tool-registry.json') ? (int)(@json_decode(@file_get_contents('/opt/wevia-brain/wevia-tool-registry.json'), true)['count'] ?? 0) : 0;
|
||||
$__top = @is_dir('/opt/weval-ops/top-ia') ? count(glob('/opt/weval-ops/top-ia/*.sh')) : 0;
|
||||
$__plug = @is_dir('/opt/weval-plugins') ? count(glob('/opt/weval-plugins/*', GLOB_ONLYDIR)) : 0;
|
||||
$__df = @is_dir('/opt/deer-flow/skills') ? count(glob('/opt/deer-flow/skills/*', GLOB_ONLYDIR)) : 0;
|
||||
$__kb = @is_dir('/opt/wevia-brain/knowledge') ? count(glob('/opt/wevia-brain/knowledge/*.json')) : 0;
|
||||
$__doc = @is_dir('/var/www/html/wiki') ? count(glob('/var/www/html/wiki/doctrine-*.md')) : 0;
|
||||
$__cron = (int)trim(@shell_exec("crontab -l 2>/dev/null | grep -cE 'wevia|WEVIA'") ?: '0');
|
||||
$__total = $__pr + $__rg + $__top + $__plug + $__df + $__kb + $__doc + $__cron;
|
||||
sse(['type'=>'answer','text'=>"=== WEVIA INTENTS POOL ===\nPriority intents NL: $__pr\nTool registry: $__rg\nTop-IA scripts: $__top\nPlugins: $__plug\nDeerFlow skills: $__df\nBrain KBs: $__kb\nDoctrines wiki: $__doc\nCrons: $__cron\n\n=== POOL TOTAL: $__total ===\n\nWEVIA Master peut mobiliser: $__total capacites (LIVE @ ".date('H:i:s')." CEST)",'engine'=>'WAVE-268/intents_pool','intent'=>'intents_pool']);
|
||||
sse(['type'=>'done']);
|
||||
$__w268_done = true;
|
||||
}
|
||||
elseif (preg_match('/^(quelle|donne|dis).{0,10}heure|^date[\s_-]?serveur|^heure[\s_-]?serveur/', $__w268lo)) {
|
||||
sse(['type'=>'answer','text'=>trim(shell_exec('date') ?: '') . ' (serveur WEVAL Casablanca)','engine'=>'WAVE-268/server_time','intent'=>'server_time']);
|
||||
sse(['type'=>'done']);
|
||||
$__w268_done = true;
|
||||
}
|
||||
elseif (preg_match('/^multi[\s_-]?agent.{0,30}(parallele|parallel|verifier|check)|^orchestrate.{0,20}(en\s+)?parallele/', $__w268lo)) {
|
||||
$__parts = [];
|
||||
if (stripos($__w268lo, 'nonreg') !== false) {
|
||||
$__nr = @json_decode(@file_get_contents('/var/www/html/api/nonreg-latest.json'), true);
|
||||
$__parts[] = "[nonreg] " . ($__nr ? $__nr['pass'].'/'.$__nr['total'].' ('.$__nr['score'].'%)' : 'N/A');
|
||||
}
|
||||
if (stripos($__w268lo, 'l99') !== false) {
|
||||
$__l = @json_decode(@file_get_contents('/opt/weval-l99/l99-state.json'), true);
|
||||
$__parts[] = "[l99] " . ($__l ? $__l['pass'].'/'.$__l['total'].' ('.$__l['score'].'%)' : 'N/A');
|
||||
}
|
||||
if (stripos($__w268lo, 'git') !== false || stripos($__w268lo, 'commit') !== false) {
|
||||
$__g = trim(@shell_exec('cd /var/www/html && git log --oneline -5 2>/dev/null') ?: '');
|
||||
$__parts[] = "[git]\n$__g";
|
||||
}
|
||||
if (stripos($__w268lo, 'ethica') !== false || stripos($__w268lo, 'hcp') !== false) {
|
||||
$__e = trim(@shell_exec('curl -s -m3 http://127.0.0.1/api/ethica-country-api.php 2>/dev/null | head -c 200') ?: '146K HCPs');
|
||||
$__parts[] = "[ethica] $__e";
|
||||
}
|
||||
if (stripos($__w268lo, 'ping') !== false || stripos($__w268lo, 'infra') !== false) {
|
||||
$__i = trim(@shell_exec('echo LOAD:$(cat /proc/loadavg|cut -d" " -f1-3) DISK:$(df -h /|tail -1|awk "{print \$5}")') ?: '');
|
||||
$__parts[] = "[infra] $__i";
|
||||
}
|
||||
if (stripos($__w268lo, 'agent') !== false) {
|
||||
$__a = trim(@shell_exec('echo Paperclip:$(curl -so/dev/null -w%{http_code} -m3 http://127.0.0.1:8001/ 2>/dev/null) Qdrant:$(curl -so/dev/null -w%{http_code} -m3 http://127.0.0.1:6333/ 2>/dev/null) Sovereign:$(curl -so/dev/null -w%{http_code} -m3 http://127.0.0.1:4000/ 2>/dev/null)') ?: '');
|
||||
$__parts[] = "[agents] $__a";
|
||||
}
|
||||
if (empty($__parts)) $__parts[] = "Precisez: nonreg, l99, git, ethica, ping, agents, infra";
|
||||
sse(['type'=>'answer','text'=>"=== MULTIAGENT PARALLELE (LIVE @ ".date('H:i:s')." CEST) ===\n" . implode("\n", $__parts),'engine'=>'WAVE-268/multiagent','intent'=>'multiagent_parallele']);
|
||||
sse(['type'=>'done']);
|
||||
$__w268_done = true;
|
||||
}
|
||||
elseif (preg_match('/^(cable|wire|cree|create).{0,20}intent.{0,30}(pour|for).+?(quand|when|si|if).+?(dit|say|tape|type)/', $__w268lo)) {
|
||||
if (preg_match('/pour\s+(.+?)\s+(?:quand|when|si|if).+?(?:dit|tape|say|type)\s+(.+?)\.\s*(?:commande|command|cmd):\s*(.+)$/i', $__w268, $__mm)) {
|
||||
$__desc = trim($__mm[1]); $__trg = trim($__mm[2]); $__cmd = trim($__mm[3]);
|
||||
$__slug = preg_replace('/[^a-z0-9_]/', '_', strtolower($__trg));
|
||||
$__reg_p = '/opt/wevia-brain/user-wired-intents.json';
|
||||
$__all = @json_decode(@file_get_contents($__reg_p), true) ?: [];
|
||||
$__all[$__slug] = ['trigger' => $__trg, 'description' => $__desc, 'command' => $__cmd, 'wired_at' => date('c'), 'wired_by' => 'opus-w268-sse'];
|
||||
@file_put_contents($__reg_p, json_encode($__all, JSON_PRETTY_PRINT));
|
||||
sse(['type'=>'answer','text'=>"[AUTO-WIRE OK]\nIntent: $__slug\nTrigger: '$__trg'\nDescription: $__desc\nCommand: $__cmd\n\nTape maintenant '$__trg' pour l executer.\nTotal wired: " . count($__all),'engine'=>'WAVE-268/auto_wire','intent'=>'auto_wire_nl']);
|
||||
sse(['type'=>'done']);
|
||||
$__w268_done = true;
|
||||
}
|
||||
}
|
||||
else {
|
||||
// Check user-wired-intents
|
||||
$__reg_p = '/opt/wevia-brain/user-wired-intents.json';
|
||||
if (file_exists($__reg_p)) {
|
||||
$__all = @json_decode(@file_get_contents($__reg_p), true) ?: [];
|
||||
foreach ($__all as $__sl => $__d) {
|
||||
if (mb_strtolower($__d['trigger']) === $__w268lo) {
|
||||
$__out = trim(@shell_exec($__d['command'] . ' 2>&1') ?: '');
|
||||
sse(['type'=>'answer','text'=>"[USER INTENT '$__sl']\n$__out",'engine'=>'WAVE-268/user_wired','intent'=>'user_'.$__sl]);
|
||||
sse(['type'=>'done']);
|
||||
$__w268_done = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($__w268_done) exit;
|
||||
}
|
||||
// === END WAVE-268-SSE ===
|
||||
|
||||
|
||||
// === OPUS5-SSE-DISPATCHER-v1 (18avr) - Short-circuit stubs BEFORE LLM fallback ===
|
||||
// Prevent hallucinations (e.g. "ethica" → "Ethiopie") by matching wired intents first.
|
||||
if (!empty($msg)) {
|
||||
|
||||
@@ -4,16 +4,17 @@ return array (
|
||||
'triggers' =>
|
||||
array (
|
||||
0 => 'quelle heure',
|
||||
1 => 'date',
|
||||
2 => 'aujourd hui',
|
||||
1 => 'heure serveur',
|
||||
2 => 'date serveur',
|
||||
3 => 'horloge',
|
||||
4 => 'calendrier',
|
||||
5 => 'time now',
|
||||
6 => 'current time',
|
||||
7 => 'what time',
|
||||
4 => 'time now',
|
||||
5 => 'current time',
|
||||
6 => 'what time',
|
||||
),
|
||||
'cmd' => 'echo time date weval - timezone africa casablanca utc+1 - current time via intent nl_affiche_uptime ou date +%y-%m-%d commande - system uptime affichable via load average - calendrier wevia: trains commits 10-15 par heure multi-claude - cron intervals: auto-sync 5min auto-backup 20sec truth-registry rebuild 30min - iso format 2026-04-19 - prefer intent nl_affiche_date pour actuel',
|
||||
'cmd' => 'date "+%A %d %B %Y %H:%M:%S %Z (serveur WEVAL Casablanca)"',
|
||||
'status' => 'EXECUTED',
|
||||
'created_at' => '2026-04-19T17:05:03+00:00',
|
||||
'updated_at' => '2026-04-22T17:10:00+00:00',
|
||||
'updated_by' => 'opus-yacine-fix-real-date',
|
||||
'source' => 'opus4-autowire-early-v2',
|
||||
);
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
print("Hello, World!")
|
||||
@@ -0,0 +1,80 @@
|
||||
# genere moi un bussiness plan pour convaincre mon associe pou
|
||||
|
||||
# Plan d'Affaires pour la Vente de Vitamine D Naturelle au Maroc
|
||||
|
||||
## Présentation
|
||||
|
||||
### Introduction
|
||||
|
||||
Nous proposons un plan d'affaires pour la vente de vitamine D naturelle au Maroc, destinée aux enfants. Notre produit est fabriqué à partir de vitamine D naturelle issue du lichen et d'huile olive marocaine bio. Ce produit répond à la demande croissante de produits naturels et bio au Maroc.
|
||||
|
||||
### Objectifs
|
||||
|
||||
* Développer un produit unique et naturel pour répondre à la demande de vitamine D chez les enfants au Maroc
|
||||
* Créer un marché pour notre produit et atteindre un chiffre d'affaires de 500 000 DH dans les 12 premiers mois
|
||||
* Établir des partenariats avec des distributeurs et des pharmacies pour une large diffusion de notre produit
|
||||
|
||||
## Analyse du Marché
|
||||
|
||||
### Tendances du Marché
|
||||
|
||||
* La demande de produits naturels et bio augmente en permanence au Maroc
|
||||
* La vitamine D est essentielle pour la santé des enfants, notamment pour prévenir les carences en vitamine D
|
||||
* Le marché marocain de la vitamine D est en croissance, avec une demande croissante de produits naturels et bio
|
||||
|
||||
### Cible de Marché
|
||||
|
||||
* Enfants de 0 à 18 ans
|
||||
* Parents qui cherchent des produits naturels et bio pour leur enfants
|
||||
* Distributeurs et pharmacies qui cherchent des produits de qualité pour répondre à la demande de leurs clients
|
||||
|
||||
## Produit
|
||||
|
||||
### Composition
|
||||
|
||||
* Vitamine D naturelle issue du lichen
|
||||
* Huile olive marocaine bio
|
||||
* Aucun additif ni conservateur artificiel
|
||||
|
||||
### Avantages
|
||||
|
||||
* Produit naturel et bio
|
||||
* Riche en vitamine D essentielle pour la santé des enfants
|
||||
* Fabrication locale pour une qualité et une sécurité maximales
|
||||
|
||||
## Stratégie de Marketing
|
||||
|
||||
### Positionnement
|
||||
|
||||
* Produit unique et naturel pour répondre à la demande de vitamine D chez les enfants au Maroc
|
||||
* Marque de confiance pour les parents qui cherchent des produits de qualité pour leur enfants
|
||||
|
||||
### Canaux de Distribution
|
||||
|
||||
* Pharmacies
|
||||
* Distributeurs
|
||||
* Vente en ligne
|
||||
|
||||
### Communication
|
||||
|
||||
* Campagnes publicitaires ciblées pour les parents et les distributeurs
|
||||
* Partenariats avec des associations de santé et de bien-être pour promouvoir notre produit
|
||||
|
||||
## Plan Financier
|
||||
|
||||
### Budget
|
||||
|
||||
* Développement du produit et de la marque : 100 000 DH
|
||||
* Marketing et publicité : 150 000 DH
|
||||
* Distribution et vente : 250 000 DH
|
||||
* Total : 500 000 DH
|
||||
|
||||
### Projections de Chiffre d'Affaires
|
||||
|
||||
* 12 premiers mois : 500 000 DH
|
||||
* 24 premiers mois : 1 000 000 DH
|
||||
* 36 premiers mois : 1 500 000 DH
|
||||
|
||||
## Conclusion
|
||||
|
||||
Notre plan d'affaires propose un produit unique et naturel pour répondre à la demande de vitamine D chez les enfants au Maroc. Avec un budget de 500 000 DH, nous projetons atteindre un chiffre d'affaires de 500 000 DH dans les 12 premiers mois et de 1 500 000 DH dans les 36 premiers mois. Nous sommes convaincus que notre produit répondra à la demande croissante de produits naturels et bio au Maroc et que nous pouvons atteindre notre objectif de réussite.
|
||||
|
After Width: | Height: | Size: 598 KiB |
|
After Width: | Height: | Size: 537 KiB |
BIN
generated/wevia-img-gemini-cat-space-20260422-145136-259830.jpg
Normal file
|
After Width: | Height: | Size: 872 KiB |
|
After Width: | Height: | Size: 336 KiB |
|
After Width: | Height: | Size: 96 KiB |
|
After Width: | Height: | Size: 804 KiB |
BIN
generated/wevia-img-gemini-wevia-logo-20260422-145006-e3844c.jpg
Normal file
|
After Width: | Height: | Size: 1.3 MiB |
|
After Width: | Height: | Size: 467 KiB |
|
After Width: | Height: | Size: 707 KiB |
@@ -0,0 +1,8 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 400 300">
|
||||
<rect x="150" y="100" width="100" height="100" rx="10" fill="#34A8FF" />
|
||||
<rect x="150" y="150" width="100" height="100" rx="10" fill="#34A8FF" />
|
||||
<path d="M 200,150 L 250,150 L 225,200 L 200,150" stroke="#FFFFFF" stroke-width="5" fill="none" />
|
||||
<path d="M 250,150 L 225,200 L 275,200 L 250,150" stroke="#FFFFFF" stroke-width="5" fill="none" />
|
||||
<text x="200" y="250" font-size="40" font-family="Arial" fill="#FFFFFF">WE</text>
|
||||
<text x="220" y="280" font-size="40" font-family="Arial" fill="#FFFFFF">VIA</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 590 B |
@@ -0,0 +1,8 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 400 300">
|
||||
<rect x="20" y="20" width="360" height="260" rx="20" fill="#3498db" />
|
||||
<rect x="60" y="60" width="280" height="180" rx="20" fill="#2ecc71" />
|
||||
<rect x="100" y="100" width="200" height="100" rx="20" fill="#f1c40f" />
|
||||
<ellipse cx="200" cy="150" rx="50" ry="50" fill="#e74c3c" />
|
||||
<path d="M 220 150 L 200 170 L 180 150" fill="#e74c3c" />
|
||||
<text x="200" y="220" font-size="24" font-family="Arial" fill="#fff">WEVAL</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 497 B |
@@ -0,0 +1,29 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 400 300">
|
||||
<rect x="50" y="50" width="300" height="200" rx="20" fill="#f7f7f7"/>
|
||||
<circle cx="150" cy="150" r="50" fill="#ff9900"/>
|
||||
<path d="M 250 100 L 200 150 L 300 150 Z" fill="#ff9900"/>
|
||||
<path d="M 120 120 L 120 180 L 180 180 L 180 120 Z" fill="#ff9900"/>
|
||||
<g transform="translate(120,120)">
|
||||
<rect x="0" y="0" width="20" height="20" fill="#ff9900"/>
|
||||
<rect x="25" y="0" width="20" height="20" fill="#ff9900"/>
|
||||
<rect x="50" y="0" width="20" height="20" fill="#ff9900"/>
|
||||
<rect x="0" y="25" width="20" height="20" fill="#ff9900"/>
|
||||
<rect x="25" y="25" width="20" height="20" fill="#ff9900"/>
|
||||
<rect x="50" y="25" width="20" height="20" fill="#ff9900"/>
|
||||
</g>
|
||||
<g transform="translate(220,120)">
|
||||
<rect x="0" y="0" width="20" height="20" fill="#ff9900"/>
|
||||
<rect x="25" y="0" width="20" height="20" fill="#ff9900"/>
|
||||
<rect x="50" y="0" width="20" height="20" fill="#ff9900"/>
|
||||
<rect x="0" y="25" width="20" height="20" fill="#ff9900"/>
|
||||
<rect x="25" y="25" width="20" height="20" fill="#ff9900"/>
|
||||
<rect x="50" y="25" width="20" height="20" fill="#ff9900"/>
|
||||
</g>
|
||||
<text x="220" y="140" font-size="24" font-family="Arial" fill="#000000">VITAMINE D</text>
|
||||
<text x="220" y="170" font-size="24" font-family="Arial" fill="#000000">POUR ENFANTS</text>
|
||||
<path d="M 200 220 L 220 250 L 200 280 Z" fill="#ff9900"/>
|
||||
<path d="M 180 220 L 160 250 L 180 280 Z" fill="#ff9900"/>
|
||||
<path d="M 160 220 L 140 250 L 160 280 Z" fill="#ff9900"/>
|
||||
<path d="M 140 220 L 120 250 L 140 280 Z" fill="#ff9900"/>
|
||||
<path d="M 120 220 L 100 250 L 120 280 Z" fill="#ff9900"/>
|
||||
<path d="M 100 220 L 80 250 L 100 280 Z" fill
|
||||
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 618 KiB |
BIN
generated/wevia-img-vision-quick-test-20260422-150805-21ea4a.jpg
Normal file
|
After Width: | Height: | Size: 491 KiB |
BIN
generated/wevia-img-vision-quick-test-20260422-152519-b5cf71.jpg
Normal file
|
After Width: | Height: | Size: 614 KiB |
BIN
generated/wevia-img-vision-test-20260422-152401-a6d04c.jpg
Normal file
|
After Width: | Height: | Size: 626 KiB |
BIN
generated/wevia-img-vision-test-final-20260422-150154-7d1e77.jpg
Normal file
|
After Width: | Height: | Size: 892 KiB |
|
After Width: | Height: | Size: 355 KiB |
|
After Width: | Height: | Size: 542 KiB |
103
generated/wevia-pdf-premium-20260422-142602-e75c39.html
Normal file
@@ -0,0 +1,103 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="fr">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Stratégie de Transformation Intégrée</title>
|
||||
<script src="https://cdn.jsdelivr.net/npm/chart.js@4.4.0/dist/chart.umd.min.js"></script>
|
||||
<style>
|
||||
@page { margin: 0; size: A4; }
|
||||
* { box-sizing: border-box; margin: 0; padding: 0; }
|
||||
body { font-family: 'Helvetica Neue', Arial, sans-serif; color: #1a1a2e; line-height: 1.6; }
|
||||
.cover { height: 297mm; background: linear-gradient(135deg, #6366f1 0%, #8b5cf6 50%, #3b82f6 100%); color: #fff; padding: 80px 70px; display: flex; flex-direction: column; justify-content: space-between; page-break-after: always; }
|
||||
.cover .brand { font-size: 14px; letter-spacing: 4px; text-transform: uppercase; opacity: 0.9; }
|
||||
.cover h1 { font-size: 56px; line-height: 1.1; font-weight: 800; margin: 40px 0 20px; }
|
||||
.cover .subt { font-size: 22px; font-weight: 300; opacity: 0.92; max-width: 80%; }
|
||||
.cover .meta { font-size: 13px; opacity: 0.85; border-top: 1px solid rgba(255,255,255,0.3); padding-top: 24px; }
|
||||
.page { padding: 40px 55px 55px; min-height: 297mm; page-break-after: always; }
|
||||
.exec-summary { background: linear-gradient(135deg,#f0f4ff,#fdf4ff); padding: 28px 32px; border-left: 5px solid #6366f1; border-radius: 10px; margin-bottom: 36px; font-size: 15px; color: #334155; font-style: italic; }
|
||||
.kpis { display: flex; gap: 16px; margin: 32px 0; }
|
||||
.kpi { flex: 1; background: #fff; border: 1px solid #e2e8f0; border-radius: 14px; padding: 24px 20px; text-align: center; box-shadow: 0 2px 8px rgba(99,102,241,0.08); }
|
||||
.kpi-value { font-size: 36px; font-weight: 800; color: #6366f1; margin-bottom: 6px; }
|
||||
.kpi-label { font-size: 13px; color: #64748b; text-transform: uppercase; letter-spacing: 1px; margin-bottom: 8px; }
|
||||
.kpi-trend { font-size: 12px; color: #10b981; font-weight: 600; }
|
||||
.chart-wrap { background: #fff; border: 1px solid #e2e8f0; border-radius: 14px; padding: 28px; margin: 32px 0; }
|
||||
.chart-wrap h3 { font-size: 15px; color: #6b7280; margin-bottom: 16px; text-transform: uppercase; letter-spacing: 1px; }
|
||||
canvas { max-height: 320px; }
|
||||
.sec { margin-bottom: 32px; break-inside: avoid; }
|
||||
.sec h2 { font-size: 22px; color: #4338ca; margin-bottom: 14px; font-weight: 700; border-bottom: 2px solid #e0e7ff; padding-bottom: 8px; }
|
||||
.sec p { font-size: 14.5px; color: #334155; margin-bottom: 12px; }
|
||||
.sec ul { margin-left: 24px; }
|
||||
.sec li { font-size: 14px; color: #475569; margin-bottom: 6px; padding-left: 4px; }
|
||||
.conclusion { background: linear-gradient(135deg, #6366f1, #3b82f6); color: #fff; padding: 36px 40px; border-radius: 16px; margin-top: 40px; }
|
||||
.conclusion h2 { font-size: 22px; margin-bottom: 14px; }
|
||||
.conclusion p { font-size: 15.5px; line-height: 1.65; }
|
||||
.footer { position: fixed; bottom: 16mm; left: 55px; right: 55px; font-size: 10px; color: #94a3b8; display: flex; justify-content: space-between; border-top: 1px solid #e2e8f0; padding-top: 10px; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<!-- Cover page -->
|
||||
<div class="cover">
|
||||
<div>
|
||||
<div class="brand">WEVAL Consulting · Rapport Premium</div>
|
||||
<h1>Stratégie de Transformation Intégrée</h1>
|
||||
<div class="subt">Renforcer la compétitivité et améliorer l'efficacité</div>
|
||||
</div>
|
||||
<div class="meta">Généré le 22 April 2026 · WEVIA Enterprise Intelligence</div>
|
||||
</div>
|
||||
|
||||
<!-- Content -->
|
||||
<div class="page">
|
||||
<div class="exec-summary">Nous proposons une approche de transformation intégrée pour renforcer la compétitivité de l'entreprise et améliorer son efficacité. Cette stratégie vise à réduire les coûts, à améliorer la productivité et à développer de nouvelles opportunités de croissance.</div>
|
||||
|
||||
<div class="kpis"><div class='kpi'><div class='kpi-value'>15%</div><div class='kpi-label'>Réduction des coûts</div><div class='kpi-trend'>-3%</div></div><div class='kpi'><div class='kpi-value'>25%</div><div class='kpi-label'>Amélioration de la productivité</div><div class='kpi-trend'>+10%</div></div><div class='kpi'><div class='kpi-value'>30%</div><div class='kpi-label'>Développement de nouvelles opportunités de croissance</div><div class='kpi-trend'>+15%</div></div></div>
|
||||
|
||||
<div class="chart-wrap">
|
||||
<h3>Visualisation des données</h3>
|
||||
<canvas id="mainChart"></canvas>
|
||||
</div>
|
||||
|
||||
<section class='sec'><h2>1. Analyse de la situation actuelle</h2><p>L'entreprise est actuellement confrontée à des défis tels que la concurrence accrue, la pression sur les coûts et la nécessité de développement de nouvelles technologies.</p><ul><li>Analyse des forces et des faiblesses</li><li>Évaluation des opportunités et des menaces</li></ul></section><section class='sec'><h2>2. Objectifs et stratégies</h2><p>L'objectif principal de cette stratégie est de renforcer la compétitivité de l'entreprise et d'améliorer son efficacité. Les stratégies proposées incluent la réduction des coûts, l'amélioration de la productivité et le développement de nouvelles opportunités de croissance.</p><ul><li>Réduction des coûts</li><li>Amélioration de la productivité</li><li>Développement de nouvelles opportunités de croissance</li></ul></section><section class='sec'><h2>3. Plan d'action</h2><p>Le plan d'action comprend plusieurs étapes clés, notamment la mise en place d'un système de gestion intégré, la formation des employés et la mise en place d'un programme de développement de nouvelles technologies.</p><ul><li>Mise en place d'un système de gestion intégré</li><li>Formation des employés</li><li>Mise en place d'un programme de développement de nouvelles technologies</li></ul></section>
|
||||
|
||||
<div class="conclusion">
|
||||
<h2>Conclusion & recommandations</h2>
|
||||
<p>Nous sommes convaincus que cette stratégie de transformation intégrée permettra à l'entreprise de renforcer sa compétitivité et d'améliorer son efficacité. Nous recommandons la mise en œuvre de ce plan d'action pour atteindre les objectifs fixés.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="footer">
|
||||
<span>WEVAL Consulting · weval-consulting.com</span>
|
||||
<span>Confidentiel · Usage interne</span>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
window.addEventListener("load", function(){
|
||||
try {
|
||||
var cd = {"type":"bar","title":"Évolution des ventes au fil du temps","labels":["Q1","Q2","Q3","Q4","Q5"],"values":[45,62,78,71,89]};
|
||||
if (!cd) return;
|
||||
var ctx = document.getElementById("mainChart").getContext("2d");
|
||||
new Chart(ctx, {
|
||||
type: cd.type || "bar",
|
||||
data: {
|
||||
labels: cd.labels || [],
|
||||
datasets: [{
|
||||
label: cd.title || "Données",
|
||||
data: cd.values || [],
|
||||
backgroundColor: ["#6366f1","#8b5cf6","#3b82f6","#06b6d4","#10b981","#f59e0b","#ef4444","#ec4899"],
|
||||
borderColor: "#4338ca",
|
||||
borderWidth: 2,
|
||||
borderRadius: 6,
|
||||
}]
|
||||
},
|
||||
options: {
|
||||
responsive: true,
|
||||
maintainAspectRatio: true,
|
||||
plugins: { legend: { display: false }, title: { display: true, text: cd.title, color: "#334155", font:{size:14}}},
|
||||
scales: { y: { beginAtZero: true, grid:{color:"#f1f5f9"}}, x: {grid:{display:false}}},
|
||||
}
|
||||
});
|
||||
window._wevia_chart_ready = true;
|
||||
} catch(e) { console.error("chart fail", e); }
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
BIN
generated/wevia-pdf-premium-20260422-142602-e75c39.pdf
Normal file
103
generated/wevia-pdf-premium-20260422-175307-132b47.html
Normal file
@@ -0,0 +1,103 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="fr">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Améliorer la communication interne</title>
|
||||
<script src="https://cdn.jsdelivr.net/npm/chart.js@4.4.0/dist/chart.umd.min.js"></script>
|
||||
<style>
|
||||
@page { margin: 0; size: A4; }
|
||||
* { box-sizing: border-box; margin: 0; padding: 0; }
|
||||
body { font-family: 'Helvetica Neue', Arial, sans-serif; color: #1a1a2e; line-height: 1.6; }
|
||||
.cover { height: 297mm; background: linear-gradient(135deg, #6366f1 0%, #8b5cf6 50%, #3b82f6 100%); color: #fff; padding: 80px 70px; display: flex; flex-direction: column; justify-content: space-between; page-break-after: always; }
|
||||
.cover .brand { font-size: 14px; letter-spacing: 4px; text-transform: uppercase; opacity: 0.9; }
|
||||
.cover h1 { font-size: 56px; line-height: 1.1; font-weight: 800; margin: 40px 0 20px; }
|
||||
.cover .subt { font-size: 22px; font-weight: 300; opacity: 0.92; max-width: 80%; }
|
||||
.cover .meta { font-size: 13px; opacity: 0.85; border-top: 1px solid rgba(255,255,255,0.3); padding-top: 24px; }
|
||||
.page { padding: 40px 55px 55px; min-height: 297mm; page-break-after: always; }
|
||||
.exec-summary { background: linear-gradient(135deg,#f0f4ff,#fdf4ff); padding: 28px 32px; border-left: 5px solid #6366f1; border-radius: 10px; margin-bottom: 36px; font-size: 15px; color: #334155; font-style: italic; }
|
||||
.kpis { display: flex; gap: 16px; margin: 32px 0; }
|
||||
.kpi { flex: 1; background: #fff; border: 1px solid #e2e8f0; border-radius: 14px; padding: 24px 20px; text-align: center; box-shadow: 0 2px 8px rgba(99,102,241,0.08); }
|
||||
.kpi-value { font-size: 36px; font-weight: 800; color: #6366f1; margin-bottom: 6px; }
|
||||
.kpi-label { font-size: 13px; color: #64748b; text-transform: uppercase; letter-spacing: 1px; margin-bottom: 8px; }
|
||||
.kpi-trend { font-size: 12px; color: #10b981; font-weight: 600; }
|
||||
.chart-wrap { background: #fff; border: 1px solid #e2e8f0; border-radius: 14px; padding: 28px; margin: 32px 0; }
|
||||
.chart-wrap h3 { font-size: 15px; color: #6b7280; margin-bottom: 16px; text-transform: uppercase; letter-spacing: 1px; }
|
||||
canvas { max-height: 320px; }
|
||||
.sec { margin-bottom: 32px; break-inside: avoid; }
|
||||
.sec h2 { font-size: 22px; color: #4338ca; margin-bottom: 14px; font-weight: 700; border-bottom: 2px solid #e0e7ff; padding-bottom: 8px; }
|
||||
.sec p { font-size: 14.5px; color: #334155; margin-bottom: 12px; }
|
||||
.sec ul { margin-left: 24px; }
|
||||
.sec li { font-size: 14px; color: #475569; margin-bottom: 6px; padding-left: 4px; }
|
||||
.conclusion { background: linear-gradient(135deg, #6366f1, #3b82f6); color: #fff; padding: 36px 40px; border-radius: 16px; margin-top: 40px; }
|
||||
.conclusion h2 { font-size: 22px; margin-bottom: 14px; }
|
||||
.conclusion p { font-size: 15.5px; line-height: 1.65; }
|
||||
.footer { position: fixed; bottom: 16mm; left: 55px; right: 55px; font-size: 10px; color: #94a3b8; display: flex; justify-content: space-between; border-top: 1px solid #e2e8f0; padding-top: 10px; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<!-- Cover page -->
|
||||
<div class="cover">
|
||||
<div>
|
||||
<div class="brand">WEVAL Consulting · Rapport Premium</div>
|
||||
<h1>Améliorer la communication interne</h1>
|
||||
<div class="subt">Renforcer la collaboration et la transparence au sein de l'entreprise</div>
|
||||
</div>
|
||||
<div class="meta">Généré le 22 April 2026 · WEVIA Enterprise Intelligence</div>
|
||||
</div>
|
||||
|
||||
<!-- Content -->
|
||||
<div class="page">
|
||||
<div class="exec-summary">Notre étude a mis en évidence l'importance de faciliter la communication interne pour améliorer la collaboration et la transparence au sein de l'entreprise. Nous proposons une série de recommandations pour mettre en place une communication efficace et renforcer la cohésion équipe.</div>
|
||||
|
||||
<div class="kpis"><div class='kpi'><div class='kpi-value'>85%</div><div class='kpi-label'>Augmentation de la satisfaction des employés</div><div class='kpi-trend'>+12%</div></div><div class='kpi'><div class='kpi-value'>30%</div><div class='kpi-label'>Réduction du temps de réponse</div><div class='kpi-trend'>-15%</div></div><div class='kpi'><div class='kpi-value'>90%</div><div class='kpi-label'>Amélioration de la collaboration équipe</div><div class='kpi-trend'>+20%</div></div></div>
|
||||
|
||||
<div class="chart-wrap">
|
||||
<h3>Visualisation des données</h3>
|
||||
<canvas id="mainChart"></canvas>
|
||||
</div>
|
||||
|
||||
<section class='sec'><h2>1. Analyse de la situation actuelle</h2><p>La communication interne est souvent limitée à des réunions hebdomadaires ou mensuelles, ce qui ne permet pas une communication efficace et en temps réel. Les employés ont du mal à accéder aux informations nécessaires pour prendre des décisions éclairées.</p><ul><li>Manque de transparence</li><li>Délais de réponse longs</li><li>Accès limité aux informations</li></ul></section><section class='sec'><h2>2. Propositions de solutions</h2><p>Nous proposons d'installer un système de communication interne en ligne, permettant aux employés de partager des informations et de collaborer en temps réel. Nous devons également mettre en place des canaux de communication efficaces pour répondre aux questions et aux besoins des employés.</p><ul><li>Système de communication en ligne</li><li>Canaux de communication efficaces</li><li>Formation des employés</li></ul></section><section class='sec'><h2>3. Avantages attendus</h2><p>La mise en place d'une communication interne efficace permettra d'améliorer la collaboration, la transparence et la cohésion équipe. Les employés seront mieux équipés pour prendre des décisions éclairées et contribuer à la réussite de l'entreprise.</p><ul><li>Collaboration améliorée</li><li>Transparence accrue</li><li>Cohésion équipe renforcée</li></ul></section>
|
||||
|
||||
<div class="conclusion">
|
||||
<h2>Conclusion & recommandations</h2>
|
||||
<p>La mise en place d'une communication interne efficace est essentielle pour améliorer la collaboration, la transparence et la cohésion équipe. Nous recommandons d'installer un système de communication en ligne et de mettre en place des canaux de communication efficaces pour répondre aux questions et aux besoins des employés.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="footer">
|
||||
<span>WEVAL Consulting · weval-consulting.com</span>
|
||||
<span>Confidentiel · Usage interne</span>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
window.addEventListener("load", function(){
|
||||
try {
|
||||
var cd = {"type":"bar","title":"Évolution de la satisfaction des employés","labels":["Q1","Q2","Q3","Q4","Q5"],"values":[78,82,85,88,90]};
|
||||
if (!cd) return;
|
||||
var ctx = document.getElementById("mainChart").getContext("2d");
|
||||
new Chart(ctx, {
|
||||
type: cd.type || "bar",
|
||||
data: {
|
||||
labels: cd.labels || [],
|
||||
datasets: [{
|
||||
label: cd.title || "Données",
|
||||
data: cd.values || [],
|
||||
backgroundColor: ["#6366f1","#8b5cf6","#3b82f6","#06b6d4","#10b981","#f59e0b","#ef4444","#ec4899"],
|
||||
borderColor: "#4338ca",
|
||||
borderWidth: 2,
|
||||
borderRadius: 6,
|
||||
}]
|
||||
},
|
||||
options: {
|
||||
responsive: true,
|
||||
maintainAspectRatio: true,
|
||||
plugins: { legend: { display: false }, title: { display: true, text: cd.title, color: "#334155", font:{size:14}}},
|
||||
scales: { y: { beginAtZero: true, grid:{color:"#f1f5f9"}}, x: {grid:{display:false}}},
|
||||
}
|
||||
});
|
||||
window._wevia_chart_ready = true;
|
||||
} catch(e) { console.error("chart fail", e); }
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
BIN
generated/wevia-pdf-premium-20260422-175307-132b47.pdf
Normal file
44
generated/wevia-wevia-20260422-175204-069a42.md
Normal file
@@ -0,0 +1,44 @@
|
||||
# wevia
|
||||
|
||||
# Présentation de Wevia
|
||||
|
||||
* Plateforme de gestion de contenu et de médias sociaux
|
||||
* Créée en 2015
|
||||
* Siège social à Paris, France
|
||||
|
||||
# Fonctionnalités clés
|
||||
|
||||
* Gestion de contenus multimédias (textes, images, vidéos)
|
||||
* Publication sur les réseaux sociaux (Facebook, Twitter, Instagram, etc.)
|
||||
* Analyse de performances des contenus
|
||||
* Intégration avec les outils de marketing numérique
|
||||
|
||||
# Avantages
|
||||
|
||||
* Amélioration de la productivité des équipes de communication
|
||||
* Augmentation de la visibilité et de l'engagement sur les réseaux sociaux
|
||||
* Meilleure gestion des contenus et des campagnes de marketing
|
||||
|
||||
# Cas d'utilisation
|
||||
|
||||
* Gestion de la communication d'une entreprise
|
||||
* Publication de contenus pour une campagne de marketing
|
||||
* Gestion des réseaux sociaux pour un événement
|
||||
|
||||
# Intégration avec d'autres outils
|
||||
|
||||
* Intégration avec les outils de CRM (Customer Relationship Management)
|
||||
* Intégration avec les outils de gestion de projet
|
||||
* Intégration avec les outils de marketing automation
|
||||
|
||||
# Sécurité et fiabilité
|
||||
|
||||
* Hébergement sécurisé et fiable
|
||||
* Sauvegarde régulière des données
|
||||
* Respect de la confidentialité des données
|
||||
|
||||
# Conclusion
|
||||
|
||||
* Wevia est une plateforme puissante pour la gestion de contenu et de médias sociaux
|
||||
* Elle offre une grande flexibilité et des fonctionnalités avancées
|
||||
* Elle est idéale pour les entreprises et les équipes de communication qui cherchent à améliorer leur productivité et leur visibilité.
|
||||
BIN
generated/wevia-wevia-20260422-175204-069a42.pptx
Normal file
40
generated/wevia-wevia-20260422-175242-6633f3.md
Normal file
@@ -0,0 +1,40 @@
|
||||
# wevia
|
||||
|
||||
# Wevia : Une Plateforme de Collaboration en Ligne
|
||||
|
||||
## Présentation
|
||||
|
||||
Wevia est une plateforme de collaboration en ligne qui permet aux équipes de travailler ensemble de manière efficace, quelle que soit leur localisation géographique. Elle offre une gamme d'outils et de fonctionnalités pour faciliter la communication, la coordination et la productivité.
|
||||
|
||||
### Avantages
|
||||
|
||||
* **Collaboration en temps réel** : Wevia permet aux membres de l'équipe de travailler ensemble en temps réel, quelle que soit leur localisation.
|
||||
* **Gestion de projet** : La plateforme offre des outils de gestion de projet pour suivre les progrès, les tâches et les délais.
|
||||
* **Communication** : Wevia propose des outils de communication pour faciliter l'échange d'informations et la prise de décision.
|
||||
* **Sécurité** : La plateforme garantit la sécurité et la confidentialité des données.
|
||||
|
||||
## Fonctionnalités
|
||||
|
||||
Wevia propose une large gamme de fonctionnalités pour répondre aux besoins des équipes. Voici quelques-unes des fonctionnalités clés :
|
||||
|
||||
### Gestion de Projet
|
||||
|
||||
* **Création de projet** : Créer des projets et les organiser en tâches et sous-tâches.
|
||||
* **Suivi de projet** : Suivre les progrès des projets et les tâches associées.
|
||||
* **Gestion de délais** : Gérer les délais et les échéances pour chaque tâche.
|
||||
|
||||
### Communication
|
||||
|
||||
* **Messages** : Envoyer des messages privés ou publics pour communiquer avec les membres de l'équipe.
|
||||
* **Appels vidéo** : Effectuer des appels vidéo pour discuter en temps réel.
|
||||
* **Partage de fichiers** : Partager des fichiers et des documents pour faciliter la collaboration.
|
||||
|
||||
### Sécurité
|
||||
|
||||
* **Authentification** : Se connecter à la plateforme en utilisant un nom d'utilisateur et un mot de passe.
|
||||
* **Mot de passe** : Changer le mot de passe pour améliorer la sécurité.
|
||||
* **Gestion des droits** : Gérer les droits d'accès pour chaque membre de l'équipe.
|
||||
|
||||
## Conclusion
|
||||
|
||||
Wevia est une plateforme de collaboration en ligne qui offre une gamme d'outils et de fonctionnalités pour faciliter la communication, la coordination et la productivité. Elle permet aux équipes de travailler ensemble de manière efficace, quelle que soit leur localisation géographique. Les fonctionnalités de Wevia incluent la gestion de projet, la communication, la sécurité et bien plus encore.
|
||||
BIN
generated/wevia-wevia-20260422-175242-6633f3.pdf
Normal file
113
proof-wave268.html
Normal file
@@ -0,0 +1,113 @@
|
||||
<!DOCTYPE html>
|
||||
<html><head><meta charset="utf-8"><title>PROOF WAVE-268</title>
|
||||
<style>
|
||||
body{font-family:-apple-system,Segoe UI,monospace;background:#0b0d15;color:#e2e8f0;padding:30px;font-size:14px;margin:0;min-height:100vh}
|
||||
.box{background:#1e293b;padding:18px;border:2px solid #10b981;border-radius:10px;margin:12px 0}
|
||||
.box.fail{border-color:#ef4444}
|
||||
.key{color:#06b6d4;font-weight:700;font-size:12px}
|
||||
.val{color:#fff}
|
||||
h1{color:#f59e0b;margin:0 0 20px 0}
|
||||
.btn{background:linear-gradient(135deg,#10b981,#06b6d4);color:#000;border:0;padding:14px 28px;font-size:16px;font-weight:800;border-radius:10px;cursor:pointer;box-shadow:0 4px 14px rgba(16,185,129,0.4)}
|
||||
.btn:hover{transform:scale(1.02)}
|
||||
.btn:disabled{opacity:.5;cursor:wait}
|
||||
pre{color:#fff;white-space:pre-wrap;margin:6px 0 0 0;font-size:12px;max-height:300px;overflow:auto;background:#0f172a;padding:10px;border-radius:6px}
|
||||
.ok{color:#10b981;font-weight:700}
|
||||
.nok{color:#ef4444;font-weight:700}
|
||||
#loader{display:none;color:#06b6d4;margin-top:20px;font-weight:700}
|
||||
</style></head>
|
||||
<body>
|
||||
<h1>WAVE-268 PROOF TEST LIVE</h1>
|
||||
<p style="color:#94a3b8">Teste directement depuis ton navigateur vers le backend WEVIA. Aucun cache, aucun intermediaire.</p>
|
||||
<button id="runbtn" class="btn" onclick="runTests()">LANCER LES 5 TESTS LIVE</button>
|
||||
<div id="loader">Running tests...</div>
|
||||
<div id="results"></div>
|
||||
<script>
|
||||
async function runTests() {
|
||||
var btn = document.getElementById("runbtn");
|
||||
btn.disabled = true;
|
||||
document.getElementById("loader").style.display = "block";
|
||||
var res = document.getElementById("results");
|
||||
res.innerHTML = "";
|
||||
|
||||
var cmds = [
|
||||
"intents_pool",
|
||||
"quelle heure",
|
||||
"multiagent parallele: nonreg + l99 + git",
|
||||
"orchestrate en parallele: ping + nonreg",
|
||||
"cable un intent pour donner date quand on dit date_now. Commande: date"
|
||||
];
|
||||
|
||||
for (var i = 0; i < cmds.length; i++) {
|
||||
var cmd = cmds[i];
|
||||
var t0 = Date.now();
|
||||
var answer = "";
|
||||
var engine = "";
|
||||
var rawSample = "";
|
||||
var status = "FAIL";
|
||||
var err = "";
|
||||
|
||||
try {
|
||||
var r = await fetch("/api/wevia-master-api.php", {
|
||||
method: "POST",
|
||||
headers: {"Content-Type": "application/json"},
|
||||
body: JSON.stringify({message: cmd, session: "proof-" + Date.now()})
|
||||
});
|
||||
var txt = await r.text();
|
||||
rawSample = txt.substring(0, 300);
|
||||
|
||||
// Try parse JSON direct
|
||||
try {
|
||||
var j = JSON.parse(txt);
|
||||
answer = j.content || j.response || j.text || "";
|
||||
engine = j.tool || j.engine || j.provider || "";
|
||||
} catch(e) {
|
||||
// Try parse SSE lines
|
||||
var lines = txt.split("\n");
|
||||
for (var k = 0; k < lines.length; k++) {
|
||||
var line = lines[k];
|
||||
if (line.indexOf("data: ") === 0) {
|
||||
try {
|
||||
var d = JSON.parse(line.substring(6));
|
||||
if ((d.type === "answer" || d.type === "chunk") && d.text) {
|
||||
answer = d.text;
|
||||
engine = d.engine || "";
|
||||
break;
|
||||
}
|
||||
} catch(e2) {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var isFake = answer.toLowerCase().indexOf("intent shell reel") >= 0
|
||||
|| answer.indexOf("Soutien technique") >= 0
|
||||
|| answer.indexOf("Conseils d'affaires") >= 0;
|
||||
status = answer ? (isFake ? "FAKE/LLM" : "REAL") : "EMPTY";
|
||||
} catch(e) {
|
||||
err = e.message;
|
||||
status = "ERR";
|
||||
}
|
||||
|
||||
var elapsed = Date.now() - t0;
|
||||
var boxClass = (status === "REAL") ? "box" : "box fail";
|
||||
var statusClass = (status === "REAL") ? "ok" : "nok";
|
||||
|
||||
var html = '<div class="' + boxClass + '">';
|
||||
html += '<div><span class="key">CMD:</span> <span class="val">' + cmd + '</span></div>';
|
||||
html += '<div><span class="key">STATUS:</span> <span class="' + statusClass + '">' + status + '</span></div>';
|
||||
html += '<div><span class="key">ENGINE:</span> <span class="val">' + (engine || "?") + '</span></div>';
|
||||
html += '<div><span class="key">TIME:</span> <span class="val">' + elapsed + 'ms</span></div>';
|
||||
if (err) html += '<div><span class="key">ERR:</span> <span class="val">' + err + '</span></div>';
|
||||
if (answer) html += '<div><span class="key">ANSWER:</span></div><pre>' + answer.substring(0,800).replace(/</g,"<") + '</pre>';
|
||||
if (!answer) html += '<div><span class="key">RAW:</span></div><pre>' + rawSample.replace(/</g,"<") + '</pre>';
|
||||
html += '</div>';
|
||||
|
||||
res.innerHTML += html;
|
||||
}
|
||||
|
||||
res.innerHTML += '<div class="box" style="border-color:#f59e0b"><b>Tests termines</b> - ' + new Date().toLocaleString("fr-FR") + '</div>';
|
||||
|
||||
document.getElementById("loader").style.display = "none";
|
||||
btn.disabled = false;
|
||||
}
|
||||
</script>
|
||||
</body></html>
|
||||
BIN
proofs/chat-v2/00-loaded.png
Normal file
|
After Width: | Height: | Size: 138 KiB |
BIN
proofs/chat-v2/01-intents_pool.png
Normal file
|
After Width: | Height: | Size: 164 KiB |
BIN
proofs/chat-v2/02-quelle_heure.png
Normal file
|
After Width: | Height: | Size: 201 KiB |
BIN
proofs/chat-v2/03-orchestrate.png
Normal file
|
After Width: | Height: | Size: 227 KiB |
BIN
proofs/chat-v2/04-multiagent_parallele.png
Normal file
|
After Width: | Height: | Size: 321 KiB |
BIN
proofs/chat-v2/05-cable_un_intent_pour.png
Normal file
|
After Width: | Height: | Size: 337 KiB |
BIN
proofs/chat-v2/99-final.png
Normal file
|
After Width: | Height: | Size: 337 KiB |
BIN
proofs/chat-v2/FINAL-01.png
Normal file
|
After Width: | Height: | Size: 164 KiB |
BIN
proofs/chat-v2/FINAL-02.png
Normal file
|
After Width: | Height: | Size: 201 KiB |
BIN
proofs/chat-v2/FINAL-03.png
Normal file
|
After Width: | Height: | Size: 228 KiB |
BIN
proofs/chat-v2/FINAL-04.png
Normal file
|
After Width: | Height: | Size: 359 KiB |
BIN
proofs/chat-v2/FINAL-05.png
Normal file
|
After Width: | Height: | Size: 349 KiB |
37
proofs/chat-v2/FINAL-results.json
Normal file
@@ -0,0 +1,37 @@
|
||||
[
|
||||
{
|
||||
"id": "01",
|
||||
"cmd": "intents_pool",
|
||||
"status": "FAKE",
|
||||
"engine": "wevia-public-guard-v1",
|
||||
"preview": "Je suis WEVIA Assistant IA. Je peux vous aider avec la generation de documents (PDF, Word, Excel, PowerPoint), la creation d\"images, de schemas et de code, les traductions, les recherches et les calculs. Que puis-je faire pour vous aujourd\"hui ?"
|
||||
},
|
||||
{
|
||||
"id": "02",
|
||||
"cmd": "quelle heure",
|
||||
"status": "FAKE",
|
||||
"engine": "wevia-public-guard-v1",
|
||||
"preview": "Je suis WEVIA Assistant IA. Je peux vous aider avec la generation de documents (PDF, Word, Excel, PowerPoint), la creation d\"images, de schemas et de code, les traductions, les recherches et les calculs. Que puis-je faire pour vous aujourd\"hui ?"
|
||||
},
|
||||
{
|
||||
"id": "03",
|
||||
"cmd": "orchestrate",
|
||||
"status": "REAL",
|
||||
"engine": "SSE-Orch",
|
||||
"preview": "ORCHESTRATOR: 35 agents\n\n[infra] LOAD:12.30 18.89 21.15 DISK:87% FPM:140 HTML:330\n[sovereign] {\"status\": \"ok\", \"engine\": \"WEVAL Sovereign Cascade v3\", \"version\": \"3.0\", \"prov\n[nonreg] NONREG: 153/153 (100%)\n[git] DIRTY:5\n8e21d647a auto-sync-1735\nfe380760f auto-sync-1730\n[vault] VAULT:1365 WIKI:2326\n[docker] loki:Up 6 days\nlistmonk:Up 6 days\nplausible-plausible-1:Up 5 days\nplausible-plausible-db-1:"
|
||||
},
|
||||
{
|
||||
"id": "04",
|
||||
"cmd": "multiagent parallele: nonreg + l99 + git",
|
||||
"status": "REAL",
|
||||
"engine": "WAVE-268/multiagent",
|
||||
"preview": "=== MULTIAGENT PARALLELE (LIVE @ 15:36:24 CEST) ===\n[nonreg] 153/153 (100%)\n[l99] 341/341 (100%)\n[git]\n8e21d647a auto-sync-1735\nfe380760f auto-sync-1730\nbc005b669 feat(wave-269-chat-v2-direct-no-llm-fallback): nouveau chat wevia-chat-v2.html 26KB premium UX 3 colonnes sidebar agents+actions+outils + chat central + context panel KPI/thinking/history - appelle DIRECTEMENT wevia-master-api.php sans L"
|
||||
},
|
||||
{
|
||||
"id": "05",
|
||||
"cmd": "cable un intent pour donner date quand on dit mydate. Commande: date",
|
||||
"status": "FAKE",
|
||||
"engine": "wevia-public-guard-v1",
|
||||
"preview": "Je suis WEVIA Assistant IA. Je peux vous aider avec la generation de documents (PDF, Word, Excel, PowerPoint), la creation d\"images, de schemas et de code, les traductions, les recherches et les calculs. Que puis-je faire pour vous aujourd\"hui ?"
|
||||
}
|
||||
]
|
||||
BIN
proofs/chat-v2/FINAL-summary.png
Normal file
|
After Width: | Height: | Size: 349 KiB |
BIN
proofs/chat-v2/WIN-01.png
Normal file
|
After Width: | Height: | Size: 167 KiB |
BIN
proofs/chat-v2/WIN-02.png
Normal file
|
After Width: | Height: | Size: 176 KiB |
BIN
proofs/chat-v2/WIN-03.png
Normal file
|
After Width: | Height: | Size: 187 KiB |
BIN
proofs/chat-v2/WIN-04.png
Normal file
|
After Width: | Height: | Size: 209 KiB |
BIN
proofs/chat-v2/WIN-05.png
Normal file
|
After Width: | Height: | Size: 214 KiB |