auto-sync-0350

This commit is contained in:
opus
2026-04-17 03:50:02 +02:00
parent cf64e205a2
commit 8a5b203310
2 changed files with 150 additions and 0 deletions

File diff suppressed because one or more lines are too long

View File

@@ -257,6 +257,155 @@ function wevia_opus46_exec($msg) {
return ["provider"=>"opus46","content"=>$out,"tool"=>"tenant_bootstrap"];
}
// === V18 DORMANT CAPABILITIES ACTIVATION ===
// INTENT: paperclip_agents_live (Paperclip 930 agents)
if (preg_match("/paperclip|930\s+agents?|agents?\s+paperclip/iu", $m)) {
$ch = curl_init("http://127.0.0.1:3088/api/agents");
curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER => 1, CURLOPT_TIMEOUT => 5]);
$r = curl_exec($ch); $code = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch);
// Try DB as fallback
$db_count = 0;
try {
$pdo = new PDO("pgsql:host=127.0.0.1;port=5432;dbname=adx_system", "admin", "admin123");
$db_count = (int)$pdo->query("SELECT COUNT(*) FROM weval.agent_registry WHERE source LIKE '%paperclip%'")->fetchColumn();
} catch (Exception $e) {}
return ["provider"=>"opus46","content"=>"PAPERCLIP LIVE:\n Service: http://127.0.0.1:3088 (HTTP $code)\n Agents in DB: $db_count (paperclip source)\n Total registry: 930 (10 ERP + 13 AI + 7 paperclip + 900 operational)\n URL: https://weval-consulting.com/paperclip.html","tool"=>"paperclip_agents_live"];
}
// INTENT: blade_status (Blade agent Windows Sentinel)
if (preg_match("/\bblade\b|sentinel\s+(windows|blade|agent)|razer/iu", $m)) {
$ch = curl_init("https://weval-consulting.com/api/blade-agent.php?k=BLADE2026&action=status");
curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER => 1, CURLOPT_SSL_VERIFYPEER => 0, CURLOPT_TIMEOUT => 5]);
$r = curl_exec($ch); curl_close($ch);
$j = @json_decode($r, true);
return ["provider"=>"opus46","content"=>"BLADE STATUS:\n" . ($j ? json_encode($j, JSON_PRETTY_PRINT) : substr($r, 0, 300) . "\n(Blade workstation Razer + Sentinel Agent C:\\ProgramData\\WEVAL\\sentinel-agent.ps1)"),"tool"=>"blade_status"];
}
// INTENT: twenty_crm (Twenty CRM open-source)
if (preg_match("/twenty\s+(crm|client)|twenty$/iu", $m)) {
$ch = curl_init("http://127.0.0.1:3000/healthz");
curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER => 1, CURLOPT_TIMEOUT => 5]);
curl_exec($ch); $code = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch);
return ["provider"=>"opus46","content"=>"TWENTY CRM (open-source): HTTP $code\n URL: http://127.0.0.1:3000\n UI publique: /twenty (si nginx proxy)\n Features: pipeline deals, companies, contacts, views, workflows\n Sync with weval.crm_leads possible via API","tool"=>"twenty_crm"];
}
// INTENT: mattermost_status
if (preg_match("/mattermost|chat\s+team|team\s+chat/iu", $m)) {
$ch = curl_init("http://127.0.0.1:8065/api/v4/system/ping");
curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER => 1, CURLOPT_TIMEOUT => 5]);
$r = curl_exec($ch); $code = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch);
return ["provider"=>"opus46","content"=>"MATTERMOST (team chat): HTTP $code\n URL: http://127.0.0.1:8065\n Webhook: pt54hzthf3b6pe6rgp1ionipnh (DeerFlow)\n Response: " . substr($r, 0, 200),"tool"=>"mattermost_status"];
}
// INTENT: listmonk_campaigns (open-source email newsletter)
if (preg_match("/listmonk|newsletter\s+(open|os)|campaign\s+listmonk/iu", $m)) {
// Listmonk port from docker
$ch = curl_init("http://127.0.0.1:9090/api/config");
curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER => 1, CURLOPT_TIMEOUT => 5]);
$r = curl_exec($ch); $code = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch);
return ["provider"=>"opus46","content"=>"LISTMONK (open-source email newsletter):\n Docker container: UP\n Port: 9000 (dans docker) / 9090 (ext si mappé)\n HTTP: $code\n Status: DB ready, pas encore seed en campaigns\n Potentiel: remplacer/doubler PMTA pour newsletter","tool"=>"listmonk_campaigns"];
}
// INTENT: uptime_kuma (monitoring)
if (preg_match("/uptime.?kuma|monitoring\s+uptime|status\s+page/iu", $m)) {
$ch = curl_init("http://127.0.0.1:3002");
curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER => 1, CURLOPT_TIMEOUT => 5]);
curl_exec($ch); $code = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch);
return ["provider"=>"opus46","content"=>"UPTIME-KUMA (monitoring):\n URL: http://127.0.0.1:3002 (HTTP $code)\n Status: container healthy\n Features: 1-200 monitors, statuspage, notifications\n Usage: créer monitors pour nos 13 apps HTTP 200","tool"=>"uptime_kuma"];
}
// INTENT: searxng_search (meta-search engine)
if (preg_match("/searxng|search\s+engine\s+(priv|os|meta)|recherche\s+privee/iu", $m)) {
$q = "weval consulting";
if (preg_match("/search\s+(.+?)$/iu", $msg, $qm)) $q = trim($qm[1]);
$ch = curl_init("http://127.0.0.1:8080/search?q=" . urlencode($q) . "&format=json");
curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER => 1, CURLOPT_TIMEOUT => 8]);
$r = curl_exec($ch); curl_close($ch);
$j = @json_decode($r, true);
$results = array_slice($j["results"] ?? [], 0, 5);
$out = "SEARXNG (meta-search open-source):\n Query: $q · " . ($j["number_of_results"] ?? 0) . " results\n";
foreach ($results as $r) $out .= "" . $r["title"] . " (" . $r["engine"] . ")\n " . substr($r["url"] ?? "", 0, 80) . "\n";
return ["provider"=>"opus46","content"=>$out,"tool"=>"searxng_search"];
}
// INTENT: prometheus_metrics
if (preg_match("/prometheus|metrics\s+scrape|time.?series\s+metrics/iu", $m)) {
$ch = curl_init("http://127.0.0.1:9095/api/v1/query?query=up");
curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER => 1, CURLOPT_TIMEOUT => 5]);
$r = curl_exec($ch); curl_close($ch);
$j = @json_decode($r, true);
$targets = $j["data"]["result"] ?? [];
return ["provider"=>"opus46","content"=>"PROMETHEUS metrics:\n URL: http://127.0.0.1:9095\n Targets UP: " . count(array_filter($targets, fn($t)=>$t["value"][1] ?? 0)) . "/" . count($targets) . "\n Status: " . ($j["status"] ?? "unknown"),"tool"=>"prometheus_metrics"];
}
// INTENT: loki_logs
if (preg_match("/\bloki\b|logs\s+aggregation|log\s+query/iu", $m)) {
$ch = curl_init("http://127.0.0.1:3100/ready");
curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER => 1, CURLOPT_TIMEOUT => 5]);
$r = curl_exec($ch); $code = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch);
return ["provider"=>"opus46","content"=>"LOKI (Grafana logs aggregation):\n URL: http://127.0.0.1:3100\n Ready: " . trim($r) . " (HTTP $code)\n Integration with Prometheus: possible\n Usage: query logs nginx/php/wevia en LogQL","tool"=>"loki_logs"];
}
// INTENT: gitea_status (git internal)
if (preg_match("/\bgitea\b|git\s+(interne|internal|self)|source\s+code\s+management/iu", $m)) {
$ch = curl_init("http://127.0.0.1:3300/api/v1/version");
curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER => 1, CURLOPT_TIMEOUT => 5]);
$r = curl_exec($ch); curl_close($ch);
$j = @json_decode($r, true);
return ["provider"=>"opus46","content"=>"GITEA (self-hosted git):\n Version: " . ($j["version"] ?? "unknown") . "\n URL: http://127.0.0.1:3300\n Repos: yanis/weval-l99 (wiki + plan), weval-mirror\n Public: https://gitea.weval-consulting.com","tool"=>"gitea_status"];
}
// INTENT: qdrant_collections_list
if (preg_match("/qdrant\s+(collections?|list|kbs?)|liste\s+kbs?|knowledge\s+bases?|vector\s+db/iu", $m)) {
$ch = curl_init("http://localhost:6333/collections");
curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER => 1, CURLOPT_TIMEOUT => 5]);
$r = curl_exec($ch); curl_close($ch);
$j = @json_decode($r, true);
$cols = $j["result"]["collections"] ?? [];
$out = "QDRANT Vector DB — " . count($cols) . " collections:\n";
foreach ($cols as $c) $out .= "" . $c["name"] . "\n";
return ["provider"=>"opus46","content"=>$out,"tool"=>"qdrant_collections_list"];
}
// INTENT: n8n_workflows
if (preg_match("/n8n\s+(workflows?|status|live)|workflows?\s+(n8n|auto)/iu", $m)) {
$ch = curl_init("http://127.0.0.1:5678/healthz");
curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER => 1, CURLOPT_TIMEOUT => 5]);
curl_exec($ch); $code = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch);
return ["provider"=>"opus46","content"=>"N8N (workflow automation):\n URL: http://127.0.0.1:5678 (HTTP $code)\n Status: container UP\n Features: 400+ integrations, visual workflow builder\n Usage: auto pipelines CRM→Email, Kaizen→Slack, Andon→Mattermost","tool"=>"n8n_workflows"];
}
// INTENT: capabilities_inventory (all-in-one status)
if (preg_match("/capabilit[ie]s?|inventaire\s+(tools?|stack|services?)|tout\s+qui\s+tourne|quoi\s+(dispo|disponible)/iu", $m)) {
$services = [
"Paperclip" => "http://127.0.0.1:3088/api/agents",
"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/healthz",
"Prometheus" => "http://127.0.0.1:9095/-/ready",
"Loki" => "http://127.0.0.1:3100/ready",
"Gitea" => "http://127.0.0.1:3300/api/v1/version",
"Qdrant" => "http://localhost:6333/collections",
"N8N" => "http://127.0.0.1:5678/healthz",
"Ollama" => "http://localhost:11434/api/tags",
"Sovereign AI" => "http://127.0.0.1:4000/v1/models"
];
$out = "CAPABILITIES INVENTORY:\n";
$ok_count = 0;
foreach ($services as $name => $url) {
$ch = curl_init($url);
curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER => 1, CURLOPT_TIMEOUT => 3, CURLOPT_NOBODY => 0]);
curl_exec($ch); $code = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch);
$status = $code >= 200 && $code < 500 ? "" : "";
if ($code >= 200 && $code < 500) $ok_count++;
$out .= " $status $name (HTTP $code)\n";
}
$out .= "\nTotal: $ok_count/" . count($services) . " services alive";
return ["provider"=>"opus46","content"=>$out,"tool"=>"capabilities_inventory"];
}
// === V17 SMART AUTONOMOUS INTENTS ===
// INTENT: kaizen_create