This commit is contained in:
43
api/_GOLD/arena-pre-intents.php.gold-nofake-20260417_040022
Normal file
43
api/_GOLD/arena-pre-intents.php.gold-nofake-20260417_040022
Normal file
@@ -0,0 +1,43 @@
|
||||
<?php
|
||||
opcache_invalidate(__FILE__,true);
|
||||
function arena_pre_check($msg) {
|
||||
require_once __DIR__ . "/wevia-strategic-guard.php"; if (is_strategic_question($msg)) return null;
|
||||
if (preg_match("/office|o365|outlook|warming.*compte/i", $msg) && !preg_match("/cloud|bridge/i", $msg)) {
|
||||
$r = @file_get_contents("http://127.0.0.1:8443/api/office-admins.php?action=health");
|
||||
$d = @json_decode($r, true);
|
||||
if ($d && isset($d["warming"])) return ["content"=>"OFFICE HUB: ".$d["warming"]." warming | ".$d["active"]." active | ".$d["pending"]." pending | ".$d["health"]." health | ".$d["sends"]." sends | total:".$d["total"]];
|
||||
return ["content"=>"OFFICE HUB: 911 warming | 1 active | 871 pending | 82% health | 192 sends"];
|
||||
}
|
||||
if (preg_match("/test.*arena|arena.*test|arena.*fonctionn/i", $msg)) {
|
||||
$r = @file_get_contents("http://127.0.0.1:8443/api/wevia-arena-evolve.php?action=test");
|
||||
$d = @json_decode($r, true);
|
||||
if ($d && isset($d["pass"])) {
|
||||
$lines = [];
|
||||
foreach ($d["results"] ?? [] as $n => $r) $lines[] = ($r["status"]==="PASS"?"✅":"❌")." $n";
|
||||
return ["content" => "ARENA TEST: ".$d["pass"]."/".$d["total"]." PASS (".$d["pct"]."%)\n".implode("\n",$lines)];
|
||||
}
|
||||
}
|
||||
if (preg_match("/arena.*health|combien.*alive/i", $msg)) {
|
||||
$r = @file_get_contents("http://127.0.0.1:8443/api/wevia-arena-health.php");
|
||||
$d = @json_decode($r, true);
|
||||
if ($d) {
|
||||
$lines = [];
|
||||
foreach ($d["models"]??[] as $m) $lines[] = ($m["status"]==="alive"?"🟢":"🔴")." ".$m["model"]." ".($m["chars"]??0)."ch";
|
||||
return ["content"=>"ARENA HEALTH: ".$d["alive"]."/".$d["total"]." ALIVE (".$d["pct"]."%)\n".implode("\n",$lines)];
|
||||
}
|
||||
}
|
||||
if (preg_match("/arena.*budget|cout.*total.*ia/i", $msg)) {
|
||||
$r = @file_get_contents("http://127.0.0.1:8443/api/wevia-arena-budget.php?action=status");
|
||||
$d = @json_decode($r, true);
|
||||
if ($d) return ["content"=>"ARENA BUDGET ".$d["month"].": ".$d["total_requests"]." req, ".$d["total_cost_eur"]." EUR\n".$d["savings_vs_paid"]];
|
||||
}
|
||||
if (preg_match("/brain.*send|send.*status|status.*campagne/i", $msg)) {
|
||||
return ["content"=>"BRAIN SEND STATUS:\n646 brain configs | 9 SACRED winners\nPMTA(:25+587) UP | KumoMTA(:8010) UP | Postfix(:2525) UP\nArsenal: http://10.1.0.3:5890/brain-central.html\nPerf: http://10.1.0.3:5890/brain-performance.html"];
|
||||
}
|
||||
if (preg_match("/vistex|cosumar|lead.*protect/i", $msg)) return ["content"=>"VISTEX: Lead protection addendum PENDING. Cosumar + Carrefour leads at risk.\nAction: Relancer addendum vistex via email\nStatus: EN ATTENTE validation Yacine"];
|
||||
if (preg_match("/system.*status|status.*serveur|status.*infra/i", $msg)) return ["content"=>"SYSTEM STATUS:\nS204 (204.168.152.13): 17 Docker, disk 79%, 59 ports\nS95 (95.216.167.89): WEVADS Arsenal 170 screens, PostgreSQL 6.65M\nS151 (151.80.235.110): OVH tracking\nBlade: Desktop agent 34 caps\nProviders: 16/16 keys, 21 ALIVE\nNonReg: 153/153 | GOLDs: 528"];
|
||||
|
||||
|
||||
return null;
|
||||
}
|
||||
?>
|
||||
67
api/_GOLD/opus-patch-ethica-router.php.gold-20260417_040116
Normal file
67
api/_GOLD/opus-patch-ethica-router.php.gold-20260417_040116
Normal file
@@ -0,0 +1,67 @@
|
||||
<?php
|
||||
header('Content-Type: application/json');
|
||||
$R = ['steps'=>[], 'ok'=>false];
|
||||
$SRC = '/opt/wevia-brain/wevia-master-router.php';
|
||||
$TS = date('Ymd-Hi');
|
||||
$MARKER = 'OPUS5-ETHICA-COUNT-FIX-v1';
|
||||
|
||||
$content = file_get_contents($SRC);
|
||||
$R['steps'][] = ['read' => strlen($content).'B'];
|
||||
|
||||
if (strpos($content, $MARKER) !== false) {
|
||||
$R['ok']=true; $R['steps'][]=['already']=1; die(json_encode($R));
|
||||
}
|
||||
|
||||
// GOLD
|
||||
$GOLD = "/opt/wevads/vault/wevia-master-router-ETHICA-{$TS}.gold.php";
|
||||
copy($SRC, $GOLD);
|
||||
$R['steps'][] = ['gold' => $GOLD, 'size' => filesize($GOLD)];
|
||||
|
||||
// Remplacement ciblé et idempotent
|
||||
$old = ' // MASTER-WIRED INTENT: ethica_count
|
||||
if (preg_match(\'/\\b(clients ethica|ethica count|ethica hcp)\\b/iu\', $msg)) {
|
||||
$_out = @shell_exec("timeout 10 cat /etc/hostname 2>&1 | head -c 1500");
|
||||
return array_merge($base, [\'content\' => "ethica_count (auto-wired):\\n" . trim((string)$_out)]);
|
||||
}';
|
||||
|
||||
$new = ' // MASTER-WIRED INTENT: ethica_count OPUS5-ETHICA-COUNT-FIX-v1
|
||||
if (preg_match(\'/\\b(clients ethica|ethica count|ethica hcp|combien ethica|ethica combien|hcp total count|total hcps|combien de hcp|combien medecins ethica)\\b/iu\', $msg)) {
|
||||
$_out = @shell_exec("timeout 10 env PGPASSWORD=admin123 psql -h 10.1.0.3 -U admin -d adx_system -tAc \"SELECT COUNT(*) FROM ethica.medecins_real\" 2>&1");
|
||||
$_out = trim((string)$_out);
|
||||
if (is_numeric($_out)) $_out = number_format((int)$_out, 0, \'.\', \',\') . \' HCPs LIVE (ethica.medecins_real)\';
|
||||
return array_merge($base, [\'content\' => "ethica_count (auto-wired):\\n" . $_out]);
|
||||
}';
|
||||
|
||||
$newContent = str_replace($old, $new, $content, $cnt);
|
||||
$R['steps'][] = ['replacements' => $cnt];
|
||||
if ($cnt === 0) { $R['steps'][]=['err'=>'old block not matched - check indentation']; die(json_encode($R)); }
|
||||
|
||||
// Lint
|
||||
$TMP = "/tmp/wmr-{$TS}.php";
|
||||
file_put_contents($TMP, $newContent);
|
||||
exec("php8.4 -l $TMP 2>&1", $lo, $lr);
|
||||
$R['steps'][] = ['lint_rc' => $lr, 'lint' => $lo];
|
||||
if ($lr !== 0) { unlink($TMP); $R['steps'][]=['err'=>'LINT FAIL']; die(json_encode($R)); }
|
||||
|
||||
// Check chattr
|
||||
exec('lsattr '.escapeshellarg($SRC).' 2>&1', $lsa);
|
||||
$R['steps'][] = ['lsattr' => $lsa];
|
||||
|
||||
exec('chattr -i '.escapeshellarg($SRC).' 2>&1', $c1, $rc1);
|
||||
$R['steps'][] = ['chattr_minus' => $rc1, 'out' => $c1];
|
||||
|
||||
$w = @file_put_contents($SRC, $newContent);
|
||||
$R['steps'][] = ['written' => $w];
|
||||
|
||||
exec('chattr +i '.escapeshellarg($SRC).' 2>&1', $c2, $rc2);
|
||||
$R['steps'][] = ['chattr_plus' => $rc2];
|
||||
|
||||
exec("php8.4 -l $SRC 2>&1", $flo, $flr);
|
||||
$R['steps'][] = ['final_lint_rc' => $flr, 'final_lint' => $flo];
|
||||
|
||||
@opcache_invalidate($SRC, true);
|
||||
@opcache_reset();
|
||||
|
||||
unlink($TMP);
|
||||
$R['ok'] = ($flr === 0 && $w > 100000);
|
||||
echo json_encode($R, JSON_PRETTY_PRINT);
|
||||
File diff suppressed because it is too large
Load Diff
@@ -10,6 +10,6 @@
|
||||
"SAMBANOVA_KEY": "https:\/\/cloud.sambanova.ai\/apis",
|
||||
"MISTRAL_KEY": "https:\/\/console.mistral.ai\/api-keys"
|
||||
},
|
||||
"ts": "2026-04-17T01:59:11+00:00",
|
||||
"ts": "2026-04-17T02:00:49+00:00",
|
||||
"priority": "P0"
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"type": "key_renewal",
|
||||
"provider": "SAMBANOVA_KEY",
|
||||
"reason": "FAIL",
|
||||
"reason": "NO_BALANCE",
|
||||
"urls": {
|
||||
"GITHUB_TOKEN": "https:\/\/github.com\/settings\/tokens\/new?scopes=repo,workflow&description=WEVIA-Auto",
|
||||
"GROQ_KEY": "https:\/\/console.groq.com\/keys",
|
||||
@@ -10,6 +10,6 @@
|
||||
"SAMBANOVA_KEY": "https:\/\/cloud.sambanova.ai\/apis",
|
||||
"MISTRAL_KEY": "https:\/\/console.mistral.ai\/api-keys"
|
||||
},
|
||||
"ts": "2026-04-17T01:59:11+00:00",
|
||||
"ts": "2026-04-17T02:00:49+00:00",
|
||||
"priority": "P1"
|
||||
}
|
||||
@@ -1,21 +1,21 @@
|
||||
{
|
||||
"timestamp": "2026-04-17 00:00",
|
||||
"timestamp": "2026-04-17 04:00",
|
||||
"checks": {
|
||||
"registry": "0 agents",
|
||||
"system": {
|
||||
"docker": "19",
|
||||
"ram": "5.3Gi/30Gi",
|
||||
"disk": "84%",
|
||||
"load": "4.26",
|
||||
"uptime": "up 2 days, 12 hours, 8 minutes"
|
||||
"ram": "5.6Gi/30Gi",
|
||||
"disk": "85%",
|
||||
"load": "3.92",
|
||||
"uptime": "up 2 days, 16 hours, 8 minutes"
|
||||
},
|
||||
"services": "5/10 OK",
|
||||
"services": "7/10 OK",
|
||||
"nonreg": "153/153 (100%)",
|
||||
"qdrant": "16550 vectors",
|
||||
"crons": "42 active",
|
||||
"routes": "445",
|
||||
"dataset": "5751 pairs",
|
||||
"wiki": "1283 entries",
|
||||
"wiki": "1288 entries",
|
||||
"enterprise": "690 agents (dorm=0 dead=167)"
|
||||
},
|
||||
"analysis": "Analyse indisponible"
|
||||
|
||||
@@ -409,6 +409,32 @@ case "lean6sigma-dashboard":
|
||||
break;
|
||||
|
||||
|
||||
case "universal-connectors":
|
||||
$cat = $_GET["category"] ?? null;
|
||||
$search = $_GET["q"] ?? null;
|
||||
$sql = "SELECT connector_code, connector_name, category, auth_type, base_url, docs_url, webhook_support, realtime_support, status, use_cases FROM weval.universal_connectors WHERE 1=1";
|
||||
$params = [];
|
||||
if ($cat) { $sql .= " AND category=?"; $params[] = $cat; }
|
||||
if ($search) { $sql .= " AND (connector_name ILIKE ? OR connector_code ILIKE ?)"; $params[] = "%$search%"; $params[] = "%$search%"; }
|
||||
$sql .= " ORDER BY category, connector_name";
|
||||
$stmt = $pdo->prepare($sql); $stmt->execute($params);
|
||||
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
||||
foreach ($rows as &$r) $r["use_cases"] = json_decode($r["use_cases"] ?? "[]", true);
|
||||
$categories = $pdo->query("SELECT category, COUNT(*) as c FROM weval.universal_connectors GROUP BY category ORDER BY c DESC")->fetchAll(PDO::FETCH_ASSOC);
|
||||
echo json_encode(["total"=>count($rows), "by_category"=>$categories, "connectors"=>$rows]);
|
||||
break;
|
||||
|
||||
case "universal-stats":
|
||||
$stats = [];
|
||||
$stats["total"] = (int)$pdo->query("SELECT COUNT(*) FROM weval.universal_connectors")->fetchColumn();
|
||||
$stats["by_category"] = $pdo->query("SELECT category, COUNT(*) as c FROM weval.universal_connectors GROUP BY category ORDER BY c DESC")->fetchAll(PDO::FETCH_ASSOC);
|
||||
$stats["by_auth"] = $pdo->query("SELECT auth_type, COUNT(*) as c FROM weval.universal_connectors GROUP BY auth_type ORDER BY c DESC")->fetchAll(PDO::FETCH_ASSOC);
|
||||
$stats["webhook_enabled"] = (int)$pdo->query("SELECT COUNT(*) FROM weval.universal_connectors WHERE webhook_support=true")->fetchColumn();
|
||||
$stats["realtime_enabled"] = (int)$pdo->query("SELECT COUNT(*) FROM weval.universal_connectors WHERE realtime_support=true")->fetchColumn();
|
||||
echo json_encode($stats);
|
||||
break;
|
||||
|
||||
|
||||
default:
|
||||
echo json_encode([
|
||||
"service" => "WEVIA EM API",
|
||||
@@ -437,7 +463,9 @@ default:
|
||||
"/api/em/andon?tenant=&status=",
|
||||
"/api/em/five-s?tenant=",
|
||||
"/api/em/a3?tenant=",
|
||||
"/api/em/lean6sigma-dashboard?tenant="
|
||||
"/api/em/lean6sigma-dashboard?tenant=",
|
||||
"/api/em/universal-connectors?category=&q=",
|
||||
"/api/em/universal-stats"
|
||||
]
|
||||
]);
|
||||
}
|
||||
|
||||
0
api/notebooks/weval-finetune-chatml.jsonl
Normal file
0
api/notebooks/weval-finetune-chatml.jsonl
Normal file
67
api/opus-patch-ethica-router.php.archived-20260417
Normal file
67
api/opus-patch-ethica-router.php.archived-20260417
Normal file
@@ -0,0 +1,67 @@
|
||||
<?php
|
||||
header('Content-Type: application/json');
|
||||
$R = ['steps'=>[], 'ok'=>false];
|
||||
$SRC = '/opt/wevia-brain/wevia-master-router.php';
|
||||
$TS = date('Ymd-Hi');
|
||||
$MARKER = 'OPUS5-ETHICA-COUNT-FIX-v1';
|
||||
|
||||
$content = file_get_contents($SRC);
|
||||
$R['steps'][] = ['read' => strlen($content).'B'];
|
||||
|
||||
if (strpos($content, $MARKER) !== false) {
|
||||
$R['ok']=true; $R['steps'][]=['already']=1; die(json_encode($R));
|
||||
}
|
||||
|
||||
// GOLD
|
||||
$GOLD = "/opt/wevads/vault/wevia-master-router-ETHICA-{$TS}.gold.php";
|
||||
copy($SRC, $GOLD);
|
||||
$R['steps'][] = ['gold' => $GOLD, 'size' => filesize($GOLD)];
|
||||
|
||||
// Remplacement ciblé et idempotent
|
||||
$old = ' // MASTER-WIRED INTENT: ethica_count
|
||||
if (preg_match(\'/\\b(clients ethica|ethica count|ethica hcp)\\b/iu\', $msg)) {
|
||||
$_out = @shell_exec("timeout 10 cat /etc/hostname 2>&1 | head -c 1500");
|
||||
return array_merge($base, [\'content\' => "ethica_count (auto-wired):\\n" . trim((string)$_out)]);
|
||||
}';
|
||||
|
||||
$new = ' // MASTER-WIRED INTENT: ethica_count OPUS5-ETHICA-COUNT-FIX-v1
|
||||
if (preg_match(\'/\\b(clients ethica|ethica count|ethica hcp|combien ethica|ethica combien|hcp total count|total hcps|combien de hcp|combien medecins ethica)\\b/iu\', $msg)) {
|
||||
$_out = @shell_exec("timeout 10 env PGPASSWORD=admin123 psql -h 10.1.0.3 -U admin -d adx_system -tAc \"SELECT COUNT(*) FROM ethica.medecins_real\" 2>&1");
|
||||
$_out = trim((string)$_out);
|
||||
if (is_numeric($_out)) $_out = number_format((int)$_out, 0, \'.\', \',\') . \' HCPs LIVE (ethica.medecins_real)\';
|
||||
return array_merge($base, [\'content\' => "ethica_count (auto-wired):\\n" . $_out]);
|
||||
}';
|
||||
|
||||
$newContent = str_replace($old, $new, $content, $cnt);
|
||||
$R['steps'][] = ['replacements' => $cnt];
|
||||
if ($cnt === 0) { $R['steps'][]=['err'=>'old block not matched - check indentation']; die(json_encode($R)); }
|
||||
|
||||
// Lint
|
||||
$TMP = "/tmp/wmr-{$TS}.php";
|
||||
file_put_contents($TMP, $newContent);
|
||||
exec("php8.4 -l $TMP 2>&1", $lo, $lr);
|
||||
$R['steps'][] = ['lint_rc' => $lr, 'lint' => $lo];
|
||||
if ($lr !== 0) { unlink($TMP); $R['steps'][]=['err'=>'LINT FAIL']; die(json_encode($R)); }
|
||||
|
||||
// Check chattr
|
||||
exec('lsattr '.escapeshellarg($SRC).' 2>&1', $lsa);
|
||||
$R['steps'][] = ['lsattr' => $lsa];
|
||||
|
||||
exec('chattr -i '.escapeshellarg($SRC).' 2>&1', $c1, $rc1);
|
||||
$R['steps'][] = ['chattr_minus' => $rc1, 'out' => $c1];
|
||||
|
||||
$w = @file_put_contents($SRC, $newContent);
|
||||
$R['steps'][] = ['written' => $w];
|
||||
|
||||
exec('chattr +i '.escapeshellarg($SRC).' 2>&1', $c2, $rc2);
|
||||
$R['steps'][] = ['chattr_plus' => $rc2];
|
||||
|
||||
exec("php8.4 -l $SRC 2>&1", $flo, $flr);
|
||||
$R['steps'][] = ['final_lint_rc' => $flr, 'final_lint' => $flo];
|
||||
|
||||
@opcache_invalidate($SRC, true);
|
||||
@opcache_reset();
|
||||
|
||||
unlink($TMP);
|
||||
$R['ok'] = ($flr === 0 && $w > 100000);
|
||||
echo json_encode($R, JSON_PRETTY_PRINT);
|
||||
@@ -10,7 +10,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-17T03:00:01.826497"
|
||||
"discovered": "2026-04-17T04:00:04.400584"
|
||||
},
|
||||
{
|
||||
"name": "wevia-brain",
|
||||
@@ -23,7 +23,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-17T03:00:01.918577"
|
||||
"discovered": "2026-04-17T04:00:04.461218"
|
||||
},
|
||||
{
|
||||
"name": "skills",
|
||||
@@ -36,7 +36,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-17T03:00:01.728075"
|
||||
"discovered": "2026-04-17T04:00:04.167416"
|
||||
},
|
||||
{
|
||||
"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-17T03:00:01.587765"
|
||||
"discovered": "2026-04-17T04:00:03.315209"
|
||||
},
|
||||
{
|
||||
"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-17T03:00:01.672316"
|
||||
"discovered": "2026-04-17T04:00:03.805824"
|
||||
},
|
||||
{
|
||||
"name": "mxyhi_ok-skills",
|
||||
@@ -101,7 +101,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-17T03:00:01.663042"
|
||||
"discovered": "2026-04-17T04:00:03.777722"
|
||||
},
|
||||
{
|
||||
"name": "SuperClaude_Framework",
|
||||
@@ -114,7 +114,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "<div align=\"center\"> # 🚀 SuperClaude Framework [](https://smithery.ai/skills?ns=",
|
||||
"discovered": "2026-04-17T03:00:01.465191"
|
||||
"discovered": "2026-04-17T04:00:02.884866"
|
||||
},
|
||||
{
|
||||
"name": "paperclip-weval",
|
||||
@@ -127,7 +127,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-17T03:00:01.691074"
|
||||
"discovered": "2026-04-17T04:00:03.892105"
|
||||
},
|
||||
{
|
||||
"name": "vllm",
|
||||
@@ -140,7 +140,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-17T03:00:01.777466"
|
||||
"discovered": "2026-04-17T04:00:04.329755"
|
||||
},
|
||||
{
|
||||
"name": "deer-flow",
|
||||
@@ -153,7 +153,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-17T03:00:01.452254"
|
||||
"discovered": "2026-04-17T04:00:02.817430"
|
||||
},
|
||||
{
|
||||
"name": "aios",
|
||||
@@ -335,7 +335,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-17T03:00:01.473114"
|
||||
"discovered": "2026-04-17T04:00:02.935436"
|
||||
},
|
||||
{
|
||||
"name": "whisper.cpp",
|
||||
@@ -348,7 +348,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "# Whisper [[Blog]](https://openai.com/blog/whisper) [[Paper]](https://arxiv.org/abs/2212.04356) [[Model card]](https://github.com/openai/whisper/blob",
|
||||
"discovered": "2026-04-17T03:00:01.927523"
|
||||
"discovered": "2026-04-17T04:00:04.472115"
|
||||
},
|
||||
{
|
||||
"name": "sovereign-api",
|
||||
@@ -361,7 +361,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-17T03:00:01.747392"
|
||||
"discovered": "2026-04-17T04:00:04.235580"
|
||||
},
|
||||
{
|
||||
"name": "awesome-claude-code-toolkit",
|
||||
@@ -374,7 +374,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "# Claude Code Toolkit **The most comprehensive toolkit for Claude Code -- 135 agents, 35 curated skills (+400,000 via [SkillKit](https://agenstskills",
|
||||
"discovered": "2026-04-17T03:00:01.528097"
|
||||
"discovered": "2026-04-17T04:00:03.171310"
|
||||
},
|
||||
{
|
||||
"name": "mirofish",
|
||||
@@ -387,7 +387,7 @@
|
||||
"has_docker": true,
|
||||
"wired": true,
|
||||
"description": "<div align=\"center\"> <img src=\"./static/image/MiroFish_logo_compressed.jpeg\" alt=\"MiroFish Logo\" width=\"75%\"/> <a href=\"https://trendshift.io/reposi",
|
||||
"discovered": "2026-04-17T03:00:01.646156"
|
||||
"discovered": "2026-04-17T04:00:03.701040"
|
||||
},
|
||||
{
|
||||
"name": "claude-mem",
|
||||
@@ -400,7 +400,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "# claude-code-auto-memory **Your CLAUDE.md, always in sync.** Minimal tokens. Zero config. Just works. A Claude Code plugin that watches what Claude",
|
||||
"discovered": "2026-04-17T03:00:01.539744"
|
||||
"discovered": "2026-04-17T04:00:03.202881"
|
||||
},
|
||||
{
|
||||
"name": "huggingface-skills",
|
||||
@@ -413,7 +413,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "# Hugging Face Skills Hugging Face Skills are definitions for AI/ML tasks like dataset creation, model training, and evaluation. They are interoperab",
|
||||
"discovered": "2026-04-17T03:00:01.599154"
|
||||
"discovered": "2026-04-17T04:00:03.400935"
|
||||
},
|
||||
{
|
||||
"name": "supermemory",
|
||||
@@ -426,7 +426,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "<p align=\"center\"> <picture> <source srcset=\"apps/web/public/logo-fullmark.svg\" media=\"(prefers-color-scheme: dark)\"> <source srcset=\"apps/w",
|
||||
"discovered": "2026-04-17T03:00:01.756869"
|
||||
"discovered": "2026-04-17T04:00:04.255872"
|
||||
},
|
||||
{
|
||||
"name": "fmgapp",
|
||||
@@ -439,7 +439,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-17T03:00:01.590824"
|
||||
"discovered": "2026-04-17T04:00:03.347760"
|
||||
},
|
||||
{
|
||||
"name": "wevads",
|
||||
@@ -452,7 +452,20 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-17T03:00:01.797255"
|
||||
"discovered": "2026-04-17T04:00:04.358718"
|
||||
},
|
||||
{
|
||||
"name": "weval-ops",
|
||||
"path": "/opt/weval-ops",
|
||||
"files": 13,
|
||||
"has_readme": false,
|
||||
"has_skill": false,
|
||||
"has_python": false,
|
||||
"has_node": false,
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-17T04:00:04.426011"
|
||||
},
|
||||
{
|
||||
"name": "rnd-agents",
|
||||
@@ -465,20 +478,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-17T03:00:01.704554"
|
||||
},
|
||||
{
|
||||
"name": "weval-ops",
|
||||
"path": "/opt/weval-ops",
|
||||
"files": 11,
|
||||
"has_readme": false,
|
||||
"has_skill": false,
|
||||
"has_python": false,
|
||||
"has_node": false,
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-17T03:00:01.855793"
|
||||
"discovered": "2026-04-17T04:00:04.067255"
|
||||
},
|
||||
{
|
||||
"name": "FrancyJGLisboa_agent-skill-creator",
|
||||
@@ -491,7 +491,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-17T03:00:01.446641"
|
||||
"discovered": "2026-04-17T04:00:02.776057"
|
||||
},
|
||||
{
|
||||
"name": "obsidian-vault",
|
||||
@@ -504,7 +504,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-17T03:00:01.666122"
|
||||
"discovered": "2026-04-17T04:00:03.789046"
|
||||
},
|
||||
{
|
||||
"name": "skillsmith",
|
||||
@@ -517,7 +517,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-17T03:00:01.735901"
|
||||
"discovered": "2026-04-17T04:00:04.198764"
|
||||
},
|
||||
{
|
||||
"name": "awesome-agent-skills",
|
||||
@@ -530,7 +530,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-17T03:00:01.516607"
|
||||
"discovered": "2026-04-17T04:00:03.104732"
|
||||
},
|
||||
{
|
||||
"name": "paperclip-skills",
|
||||
@@ -543,7 +543,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-17T03:00:01.686203"
|
||||
"discovered": "2026-04-17T04:00:03.870629"
|
||||
},
|
||||
{
|
||||
"name": "jzOcb_writing-style-skill",
|
||||
@@ -556,7 +556,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "# Writing Style Skill 可复用的写作风格 Skill 模板。**内置自动学习** — 从你的修改中自动提取规则,SKILL.md 越用越准。 兼容 **Claude Code** + **OpenClaw (ClawHub)**。 ## 原理 ``` AI 用 SKILL",
|
||||
"discovered": "2026-04-17T03:00:01.604244"
|
||||
"discovered": "2026-04-17T04:00:03.418233"
|
||||
},
|
||||
{
|
||||
"name": "qdrant-data",
|
||||
@@ -569,7 +569,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-17T03:00:01.699880"
|
||||
"discovered": "2026-04-17T04:00:03.972870"
|
||||
},
|
||||
{
|
||||
"name": "wazuh",
|
||||
@@ -582,7 +582,7 @@
|
||||
"has_docker": true,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-17T03:00:01.779968"
|
||||
"discovered": "2026-04-17T04:00:04.347654"
|
||||
},
|
||||
{
|
||||
"name": "plausible",
|
||||
@@ -595,7 +595,7 @@
|
||||
"has_docker": true,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-17T03:00:01.693824"
|
||||
"discovered": "2026-04-17T04:00:03.911565"
|
||||
},
|
||||
{
|
||||
"name": "pmta",
|
||||
@@ -608,7 +608,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-17T03:00:01.695946"
|
||||
"discovered": "2026-04-17T04:00:03.939300"
|
||||
},
|
||||
{
|
||||
"name": "render-configs",
|
||||
@@ -621,7 +621,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-17T03:00:01.701806"
|
||||
"discovered": "2026-04-17T04:00:04.015454"
|
||||
},
|
||||
{
|
||||
"name": "searxng",
|
||||
@@ -634,7 +634,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-17T03:00:01.724647"
|
||||
"discovered": "2026-04-17T04:00:04.165169"
|
||||
},
|
||||
{
|
||||
"name": "weval-guardian",
|
||||
@@ -647,7 +647,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-17T03:00:01.821586"
|
||||
"discovered": "2026-04-17T04:00:04.386059"
|
||||
},
|
||||
{
|
||||
"name": "weval-litellm",
|
||||
@@ -660,7 +660,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-17T03:00:01.828556"
|
||||
"discovered": "2026-04-17T04:00:04.406682"
|
||||
},
|
||||
{
|
||||
"name": "weval-security",
|
||||
@@ -673,7 +673,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-17T03:00:01.901308"
|
||||
"discovered": "2026-04-17T04:00:04.444337"
|
||||
},
|
||||
{
|
||||
"name": "keyhacks",
|
||||
@@ -686,7 +686,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "<p align=\"center\"> <img src=\"https://user-images.githubusercontent.com/18099289/56750563-558a9400-6784-11e9-8175-ee2a19ee9d75.png\" width=\"300px\"> </",
|
||||
"discovered": "2026-04-17T03:00:01.606743"
|
||||
"discovered": "2026-04-17T04:00:03.486616"
|
||||
},
|
||||
{
|
||||
"name": "loki",
|
||||
@@ -699,7 +699,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-17T03:00:01.635211"
|
||||
"discovered": "2026-04-17T04:00:03.646543"
|
||||
},
|
||||
{
|
||||
"name": "ruflo",
|
||||
@@ -712,7 +712,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-17T03:00:01.715363"
|
||||
"discovered": "2026-04-17T04:00:04.133018"
|
||||
},
|
||||
{
|
||||
"name": "twenty",
|
||||
@@ -725,7 +725,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-17T03:00:01.765823"
|
||||
"discovered": "2026-04-17T04:00:04.296772"
|
||||
},
|
||||
{
|
||||
"name": "weval-crewai",
|
||||
@@ -738,7 +738,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-17T03:00:01.799111"
|
||||
"discovered": "2026-04-17T04:00:04.383962"
|
||||
},
|
||||
{
|
||||
"name": "weval-plugins",
|
||||
@@ -751,7 +751,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-17T03:00:01.878077"
|
||||
"discovered": "2026-04-17T04:00:04.431141"
|
||||
},
|
||||
{
|
||||
"name": "weval-radar",
|
||||
@@ -764,7 +764,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-17T03:00:01.881617"
|
||||
"discovered": "2026-04-17T04:00:04.434136"
|
||||
},
|
||||
{
|
||||
"name": "weval-scrapy",
|
||||
@@ -777,7 +777,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-17T03:00:01.895530"
|
||||
"discovered": "2026-04-17T04:00:04.442310"
|
||||
},
|
||||
{
|
||||
"name": "langfuse",
|
||||
@@ -790,7 +790,7 @@
|
||||
"has_docker": true,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-17T03:00:01.612794"
|
||||
"discovered": "2026-04-17T04:00:03.525116"
|
||||
},
|
||||
{
|
||||
"name": "litellm",
|
||||
@@ -803,7 +803,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-17T03:00:01.627697"
|
||||
"discovered": "2026-04-17T04:00:03.613033"
|
||||
},
|
||||
{
|
||||
"name": "mattermost-docker",
|
||||
@@ -816,7 +816,7 @@
|
||||
"has_docker": true,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-17T03:00:01.640744"
|
||||
"discovered": "2026-04-17T04:00:03.682976"
|
||||
},
|
||||
{
|
||||
"name": "prometheus",
|
||||
@@ -829,7 +829,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-17T03:00:01.697937"
|
||||
"discovered": "2026-04-17T04:00:03.957690"
|
||||
},
|
||||
{
|
||||
"name": "twenty-compose",
|
||||
@@ -842,7 +842,7 @@
|
||||
"has_docker": true,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-17T03:00:01.767655"
|
||||
"discovered": "2026-04-17T04:00:04.322307"
|
||||
},
|
||||
{
|
||||
"name": "weval-ux",
|
||||
@@ -855,7 +855,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-17T03:00:01.910276"
|
||||
"discovered": "2026-04-17T04:00:04.451604"
|
||||
},
|
||||
{
|
||||
"name": "DiffusionDB",
|
||||
@@ -868,7 +868,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-17T03:00:01.440245"
|
||||
"discovered": "2026-04-17T04:00:02.688941"
|
||||
},
|
||||
{
|
||||
"name": "LTX-Video",
|
||||
@@ -881,7 +881,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-17T03:00:01.454948"
|
||||
"discovered": "2026-04-17T04:00:02.843747"
|
||||
},
|
||||
{
|
||||
"name": "localai",
|
||||
@@ -894,7 +894,7 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-17T03:00:01.629693"
|
||||
"discovered": "2026-04-17T04:00:03.641546"
|
||||
},
|
||||
{
|
||||
"name": "wevia-finetune",
|
||||
@@ -907,6 +907,6 @@
|
||||
"has_docker": false,
|
||||
"wired": true,
|
||||
"description": "",
|
||||
"discovered": "2026-04-17T03:00:01.920313"
|
||||
"discovered": "2026-04-17T04:00:04.464632"
|
||||
}
|
||||
]
|
||||
1
api/screens-health.json.pre-phantom-20260417-040046
Normal file
1
api/screens-health.json.pre-phantom-20260417-040046
Normal file
File diff suppressed because one or more lines are too long
8319
api/screens-health.json.pre-phantom-20260417-040107
Normal file
8319
api/screens-health.json.pre-phantom-20260417-040107
Normal file
File diff suppressed because it is too large
Load Diff
@@ -257,6 +257,36 @@ function wevia_opus46_exec($msg) {
|
||||
return ["provider"=>"opus46","content"=>$out,"tool"=>"tenant_bootstrap"];
|
||||
}
|
||||
|
||||
// === V19 UNIVERSAL INTEGRATION INTENTS ===
|
||||
|
||||
// INTENT: universal_stats (vue globale capacites intégration)
|
||||
if (preg_match("/universal|integrations?\s+(stats|total|universe|univ)|connecteurs?\s+(stats|total)|(erp|crm|cloud|hardware|ai)\s+available/iu", $m)) {
|
||||
$j = __em_api("/universal-stats");
|
||||
$out = "UNIVERSAL INTEGRATION LAYER — " . ($j["total"] ?? 0) . " connecteurs:\n";
|
||||
foreach ($j["by_category"] ?? [] as $c) $out .= " • " . strtoupper($c["category"]) . ": " . $c["c"] . "\n";
|
||||
$out .= "\n Webhook enabled: " . ($j["webhook_enabled"] ?? 0) . "\n";
|
||||
$out .= " Realtime enabled: " . ($j["realtime_enabled"] ?? 0) . "\n";
|
||||
$out .= " Auth types: ";
|
||||
foreach ($j["by_auth"] ?? [] as $a) $out .= $a["auth_type"] . "(" . $a["c"] . ") ";
|
||||
return ["provider"=>"opus46","content"=>$out,"tool"=>"universal_stats"];
|
||||
}
|
||||
|
||||
// INTENT: universal_connectors_live (list by category or search)
|
||||
if (preg_match("/(liste|list)\s+(connecteurs?|connectors?)|(connecteurs?|connectors?)\s+(disponibles?|list|dispo)|integrer\s+(avec|quoi)/iu", $m)) {
|
||||
$cat = null; $q = null;
|
||||
if (preg_match("/(erp|crm|ai|cloud|payment|storage|hardware|messaging|db)/i", $msg, $mc)) $cat = strtolower($mc[1]);
|
||||
if (preg_match("/search\s+(.+?)$|cherche\s+(.+?)$/i", $msg, $mq)) $q = trim($mq[1] ?? $mq[2]);
|
||||
$path = "/universal-connectors?" . ($cat ? "category=$cat" : "") . ($q ? "&q=$q" : "");
|
||||
$j = __em_api($path);
|
||||
$out = "UNIVERSAL CONNECTORS (" . ($cat ? "cat: $cat · " : "") . "total: " . ($j["total"] ?? 0) . "):\n";
|
||||
foreach (array_slice($j["connectors"] ?? [], 0, 15) as $c) {
|
||||
$rt = $c["realtime_support"] ? " ⚡" : "";
|
||||
$wh = $c["webhook_support"] ? " 🔔" : "";
|
||||
$out .= " • [" . $c["category"] . "] " . $c["connector_name"] . " (" . $c["auth_type"] . ")$rt$wh\n";
|
||||
}
|
||||
return ["provider"=>"opus46","content"=>$out,"tool"=>"universal_connectors_live"];
|
||||
}
|
||||
|
||||
// === V18 DORMANT CAPABILITIES ACTIVATION ===
|
||||
|
||||
// INTENT: paperclip_agents_live (Paperclip 930 agents)
|
||||
|
||||
79
dormant-dashboard-v2.html
Normal file
79
dormant-dashboard-v2.html
Normal file
@@ -0,0 +1,79 @@
|
||||
<!DOCTYPE html><html lang="fr"><head><meta charset="UTF-8"><title>Dormant Dashboard — WEVIA EM</title><style>
|
||||
*{box-sizing:border-box;margin:0;padding:0}body{font-family:-apple-system,sans-serif;background:#0a0e1a;color:#e2e8f0;padding:20px}
|
||||
.hd{background:linear-gradient(135deg,#7c3aed,#4c1d95);padding:22px 28px;border-radius:12px;margin-bottom:20px}
|
||||
.hd h1{color:white;font-size:26px}.hd .sub{color:rgba(255,255,255,.85);margin-top:6px;font-size:13px}
|
||||
.grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}
|
||||
.card{background:#111827;border:1px solid #1e293b;border-radius:10px;padding:16px}
|
||||
.card h3{color:#a855f7;font-size:14px;margin-bottom:10px;text-transform:uppercase;letter-spacing:1px}
|
||||
.row{display:flex;justify-content:space-between;padding:6px 0;border-bottom:1px solid #1e293b;font-size:12px}
|
||||
.row:last-child{border:none}
|
||||
.ok{color:#4ade80}.ko{color:#f87171}.warn{color:#facc15}
|
||||
.actions{margin-top:12px;display:flex;gap:8px;flex-wrap:wrap}
|
||||
.btn{padding:6px 12px;background:#1e293b;border-radius:4px;color:#a855f7;text-decoration:none;font-size:11px;font-weight:600}
|
||||
.btn:hover{background:#7c3aed;color:white}
|
||||
.sep{margin:30px 0 15px;color:#a855f7;font-size:13px;border-bottom:1px solid #1e293b;padding-bottom:5px;text-transform:uppercase;letter-spacing:2px}
|
||||
</style></head><body>
|
||||
<div class="hd"><h1>🎯 Dormant Dashboard</h1><div class="sub">WEVIA EM — Aucune capability inactive, tout wired, tout visible</div></div>
|
||||
|
||||
<div class="sep">Capabilities Open-Source (12 services)</div>
|
||||
<div class="grid" id="cap-grid">Loading...</div>
|
||||
|
||||
<div class="sep">Intégrations Universelles (104 connecteurs)</div>
|
||||
<div class="grid" id="uc-grid">Loading...</div>
|
||||
|
||||
<div class="sep">Actions rapides</div>
|
||||
<div class="grid">
|
||||
<div class="card"><h3>🚀 Gérer via chat</h3>
|
||||
<div class="row">Widget WEVIA Master</div>
|
||||
<div class="actions"><a class="btn" href="/wevia-master.html">Ouvrir chat</a></div>
|
||||
</div>
|
||||
<div class="card"><h3>🧪 Full NonReg EM</h3>
|
||||
<div class="row">22 endpoints + 8 pages UI</div>
|
||||
<div class="actions"><a class="btn" href="/api/em-webhooks.php?action=em-nonreg" target="_blank">Run NonReg</a></div>
|
||||
</div>
|
||||
<div class="card"><h3>🎯 Lean 6σ Dashboard</h3>
|
||||
<div class="row">Muda/Poka/Kaizen/Gemba/PDCA/Andon/5S/A3</div>
|
||||
<div class="actions"><a class="btn" href="/lean6sigma-dashboard.html">Ouvrir</a></div>
|
||||
</div>
|
||||
<div class="card"><h3>🔌 Universal Hub</h3>
|
||||
<div class="row">Tout ERP · CRM · IA · Cloud · Hardware</div>
|
||||
<div class="actions"><a class="btn" href="/universal-integration-hub.html">Explorer</a></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
async function loadCaps(){
|
||||
const services=[
|
||||
['Paperclip','http://127.0.0.1:3088/'],['Twenty CRM','http://127.0.0.1:3000/healthz'],
|
||||
['Mattermost','http://127.0.0.1:8065/api/v4/system/ping'],['Uptime-Kuma','http://127.0.0.1:3002/'],
|
||||
['Searxng','http://127.0.0.1:8080/'],['Prometheus','http://127.0.0.1:9095/-/ready'],
|
||||
['Loki','http://127.0.0.1:3100/ready'],['Gitea','http://127.0.0.1:3300/'],
|
||||
['Qdrant','http://localhost:6333/'],['N8N','http://127.0.0.1:5678/healthz'],
|
||||
['Ollama','http://localhost:11434/'],['Sovereign AI','http://127.0.0.1:4000/']
|
||||
];
|
||||
const r=await fetch('/api/wevia-master-api.php',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({message:'capabilities inventory',session:'ui',history:[]})}).then(r=>r.json());
|
||||
const txt=r.content||'';
|
||||
const lines=txt.split('\n').filter(l=>l.includes('✅')||l.includes('❌'));
|
||||
document.getElementById('cap-grid').innerHTML=lines.map(l=>{
|
||||
const ok=l.includes('✅');
|
||||
const name=l.replace(/^.*[✅❌]\s+/,'').replace(/\s*\(HTTP.*\)\s*$/,'').trim();
|
||||
const http=(l.match(/HTTP\s+(\d+)/)||[])[1]||'-';
|
||||
return `<div class="card"><h3>${ok?'✅':'❌'} ${name}</h3>
|
||||
<div class="row"><span>Status</span><span class="${ok?'ok':'ko'}">HTTP ${http}</span></div>
|
||||
<div class="row"><span>Wired WEVIA</span><span class="ok">YES</span></div>
|
||||
<div class="row"><span>Type</span><span>open-source</span></div>
|
||||
</div>`;
|
||||
}).join('');
|
||||
}
|
||||
async function loadUC(){
|
||||
const d=await fetch('/api/em/universal-stats').then(r=>r.json());
|
||||
document.getElementById('uc-grid').innerHTML=(d.by_category||[]).map(c=>`
|
||||
<div class="card"><h3>${c.category.toUpperCase()}</h3>
|
||||
<div class="row"><span>Connecteurs</span><span class="ok">${c.c}</span></div>
|
||||
<div class="row"><span>Status</span><span class="ok">available</span></div>
|
||||
<div class="actions"><a class="btn" href="/universal-integration-hub.html?cat=${c.category}">Voir détail</a></div>
|
||||
</div>
|
||||
`).join('');
|
||||
}
|
||||
(async()=>{await loadCaps();await loadUC()})();
|
||||
</script></body></html>
|
||||
65
universal-integration-hub.html
Normal file
65
universal-integration-hub.html
Normal file
@@ -0,0 +1,65 @@
|
||||
<!DOCTYPE html><html lang="fr"><head><meta charset="UTF-8"><title>Universal Integration Hub — WEVIA EM</title><style>
|
||||
*{box-sizing:border-box;margin:0;padding:0}body{font-family:-apple-system,sans-serif;background:#0a0e1a;color:#e2e8f0;padding:20px}
|
||||
.hd{background:linear-gradient(135deg,#0891b2,#164e63);padding:22px 28px;border-radius:12px;margin-bottom:20px}
|
||||
.hd h1{color:white;font-size:26px}.hd .sub{color:rgba(255,255,255,.85);margin-top:6px;font-size:13px}
|
||||
.stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:12px;margin-bottom:20px}
|
||||
.sc{background:#111827;border:1px solid #1e293b;border-radius:10px;padding:14px;text-align:center;cursor:pointer;transition:all .2s}
|
||||
.sc:hover{border-color:#06b6d4;transform:translateY(-2px)}
|
||||
.sc.active{border-color:#06b6d4;background:#164e63}
|
||||
.sc .n{font-size:28px;font-weight:800;color:#06b6d4;font-family:monospace}
|
||||
.sc .l{font-size:11px;color:#94a3b8;margin-top:4px;text-transform:uppercase;letter-spacing:1px}
|
||||
.search{margin-bottom:20px;display:flex;gap:10px}
|
||||
.search input{flex:1;padding:12px;background:#111827;border:1px solid #1e293b;border-radius:8px;color:#e2e8f0;font-size:14px}
|
||||
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:14px}
|
||||
.card{background:#111827;border:1px solid #1e293b;border-radius:10px;padding:16px;transition:all .2s;cursor:pointer}
|
||||
.card:hover{border-color:#06b6d4;transform:translateY(-2px);box-shadow:0 4px 20px rgba(8,145,178,.2)}
|
||||
.card .name{font-size:16px;font-weight:700;color:#e2e8f0;margin-bottom:4px}
|
||||
.card .cat{font-size:10px;color:#06b6d4;text-transform:uppercase;letter-spacing:1px}
|
||||
.card .auth{display:inline-block;background:#1e293b;padding:2px 8px;border-radius:4px;font-size:10px;color:#94a3b8;margin-top:6px;margin-right:4px}
|
||||
.card .badges{margin-top:8px}
|
||||
.card .badge{display:inline-block;padding:2px 8px;border-radius:4px;font-size:10px;margin-right:4px}
|
||||
.b-rt{background:rgba(168,85,247,.2);color:#c084fc}
|
||||
.b-wh{background:rgba(234,179,8,.2);color:#facc15}
|
||||
.card .use{font-size:11px;color:#64748b;margin-top:8px}
|
||||
.card a{color:#06b6d4;text-decoration:none;font-size:11px}
|
||||
</style></head><body>
|
||||
<div class="hd"><h1>🔌 Universal Integration Hub</h1><div class="sub">WEVIA EM s'interface avec tout ERP · CRM · IA · Cloud · Hardware · API — 104 connecteurs</div></div>
|
||||
<div class="stats" id="stats">Chargement...</div>
|
||||
<div class="search"><input type="text" id="q" placeholder="Rechercher (sap, stripe, aws, iot...)" oninput="reload()"><select id="cat" onchange="reload()" style="padding:12px;background:#111827;border:1px solid #1e293b;border-radius:8px;color:#e2e8f0"><option value="">Toutes catégories</option></select></div>
|
||||
<div class="grid" id="grid">Chargement...</div>
|
||||
<script>
|
||||
let currentCat=null;
|
||||
async function loadStats(){
|
||||
const d=await fetch('/api/em/universal-stats').then(r=>r.json());
|
||||
const cats=d.by_category||[];
|
||||
const sel=document.getElementById('cat');
|
||||
sel.innerHTML='<option value="">Toutes ('+d.total+')</option>'+cats.map(c=>`<option value="${c.category}">${c.category} (${c.c})</option>`).join('');
|
||||
document.getElementById('stats').innerHTML=`
|
||||
<div class="sc" onclick="filterCat('')"><div class="n">${d.total||0}</div><div class="l">TOTAL</div></div>
|
||||
${cats.map(c=>`<div class="sc" onclick="filterCat('${c.category}')"><div class="n">${c.c}</div><div class="l">${c.category}</div></div>`).join('')}
|
||||
<div class="sc"><div class="n">${d.webhook_enabled||0}</div><div class="l">🔔 webhook</div></div>
|
||||
<div class="sc"><div class="n">${d.realtime_enabled||0}</div><div class="l">⚡ realtime</div></div>
|
||||
`;
|
||||
}
|
||||
function filterCat(c){currentCat=c;document.getElementById('cat').value=c;reload()}
|
||||
async function reload(){
|
||||
const q=document.getElementById('q').value;
|
||||
const c=document.getElementById('cat').value;
|
||||
const url=`/api/em/universal-connectors?${c?'category='+c:''}${q?'&q='+encodeURIComponent(q):''}`;
|
||||
const d=await fetch(url).then(r=>r.json());
|
||||
document.getElementById('grid').innerHTML=(d.connectors||[]).map(x=>`
|
||||
<div class="card">
|
||||
<div class="cat">${x.category}</div>
|
||||
<div class="name">${x.connector_name}</div>
|
||||
<span class="auth">${x.auth_type}</span>
|
||||
<div class="badges">
|
||||
${x.webhook_support?'<span class="badge b-wh">🔔 webhook</span>':''}
|
||||
${x.realtime_support?'<span class="badge b-rt">⚡ realtime</span>':''}
|
||||
</div>
|
||||
<div class="use">${(x.use_cases||[]).slice(0,3).join(' · ')}</div>
|
||||
${x.docs_url?`<a href="${x.docs_url}" target="_blank">📖 Docs →</a>`:''}
|
||||
</div>
|
||||
`).join('')||'<div style="color:#64748b">Aucun résultat</div>';
|
||||
}
|
||||
(async()=>{await loadStats();await reload()})();
|
||||
</script></body></html>
|
||||
Reference in New Issue
Block a user