auto-push

This commit is contained in:
opus
2026-04-16 22:01:31 +02:00
parent 6fdc9d7d7c
commit c66f51270c
46 changed files with 2075 additions and 134 deletions

View File

@@ -301,7 +301,7 @@ async function tick(){
try{
const r=await fetch(U,{cache:'no-cache'});
if(!r.ok) return;
/* HTML_GUARD_V2_BATCH */ const _t_d=await r.text(); const d; {var _q=(_t_d||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){d={error:"[HTTP "+(r.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{d=JSON.parse(_q)}catch(e){d={error:"[JSON] "+e.message}}}}
/* HTML_GUARD_V2_BATCH */ const _t_d=await r.text(); const d=null; {var _q=(_t_d||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){d={error:"[HTTP "+(r.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{d=JSON.parse(_q)}catch(e){d={error:"[JSON] "+e.message}}}}
const body=document.getElementById('ulo-body');
const ts=document.getElementById('ulo-ts');
if(!body) return;

View File

@@ -296,7 +296,7 @@ async function tick(){
try{
const r=await fetch(U,{cache:'no-cache'});
if(!r.ok) return;
/* HTML_GUARD_V2_BATCH */ const _t_d=await r.text(); const d; {var _q=(_t_d||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){d={error:"[HTTP "+(r.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{d=JSON.parse(_q)}catch(e){d={error:"[JSON] "+e.message}}}}
/* HTML_GUARD_V2_BATCH */ const _t_d=await r.text(); const d=null; {var _q=(_t_d||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){d={error:"[HTTP "+(r.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{d=JSON.parse(_q)}catch(e){d={error:"[JSON] "+e.message}}}}
const body=document.getElementById('ulo-body');
const ts=document.getElementById('ulo-ts');
if(!body) return;

View File

@@ -225,7 +225,7 @@ let activeFilter = 'all';
async function load() {
try {
const r = await fetch('/api/agents-status.php');
/* HTML_GUARD_V2_BATCH */ const _t_d=await r.text(); const d; {var _q=(_t_d||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){d={error:"[HTTP "+(r.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{d=JSON.parse(_q)}catch(e){d={error:"[JSON] "+e.message}}}}
/* HTML_GUARD_V2_BATCH */ const _t_d=await r.text(); const d=null; {var _q=(_t_d||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){d={error:"[HTTP "+(r.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{d=JSON.parse(_q)}catch(e){d={error:"[JSON] "+e.message}}}}
allAgents = d.agents || [];
document.getElementById('s-total').textContent = d.total;
document.getElementById('s-active').textContent = d.active;

View File

@@ -87,7 +87,7 @@ let statusData = {};
async function loadStatus() {
try {
const res = await fetch('/api/api-key-hub.php');
/* HTML_GUARD_V2_BATCH */ const _t_data=await res.text(); const data; {var _q=(_t_data||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){data={error:"[HTTP "+(res.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{data=JSON.parse(_q)}catch(e){data={error:"[JSON] "+e.message}}}}
/* HTML_GUARD_V2_BATCH */ const _t_data=await res.text(); const data=null; {var _q=(_t_data||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){data={error:"[HTTP "+(res.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{data=JSON.parse(_q)}catch(e){data={error:"[JSON] "+e.message}}}}
statusData = {};
(data.providers||[]).forEach(p => statusData[p.name] = p);
document.getElementById('kOk').textContent = data.ok || 0;
@@ -143,7 +143,7 @@ async function saveKey(keyName, btn) {
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({action: 'update_key', key: 'WEVADS2026', provider: keyName, new_key: newKey})
});
/* HTML_GUARD_V2_BATCH */ const _t_data=await res.text(); const data; {var _q=(_t_data||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){data={error:"[HTTP "+(res.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{data=JSON.parse(_q)}catch(e){data={error:"[JSON] "+e.message}}}}
/* HTML_GUARD_V2_BATCH */ const _t_data=await res.text(); const data=null; {var _q=(_t_data||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){data={error:"[HTTP "+(res.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{data=JSON.parse(_q)}catch(e){data={error:"[JSON] "+e.message}}}}
if (data.test && data.test.ok) {
result.textContent = '✅ Sauvegardé + Testé OK (HTTP ' + data.test.code + ')';
result.style.color = 'var(--cy)';

View File

@@ -591,7 +591,7 @@
"infra": 90,
"ecosystem": 90
},
"generated": "2026-04-16T20:00:01",
"generated": "2026-04-16T22:00:01",
"leaderboard": [
{
"name": "WEVAL_COMBINED",

View File

@@ -1,5 +1,5 @@
{
"generated": "2026-04-16 19:50:32",
"generated": "2026-04-16 20:00:01",
"version": "1.0",
"servers": [
{
@@ -10,7 +10,7 @@
"ssh": 49222,
"disk_pct": 84,
"disk_avail": "24G",
"uptime": "up 2 days, 9 hours, 59 minutes",
"uptime": "up 2 days, 10 hours, 8 minutes",
"nginx": "active",
"php_fpm": "active",
"php_version": "8.5.5"
@@ -66,12 +66,12 @@
},
{
"name": "mattermost-docker-mm-db-1",
"status": "Up 16 hours",
"status": "Up 17 hours",
"ports": ""
},
{
"name": "mattermost-docker-mattermost-1",
"status": "Up 16 hours (healthy)",
"status": "Up 17 hours (healthy)",
"ports": ""
},
{
@@ -277,7 +277,7 @@
"screens": {
"s204_html": 185,
"s204_products": 88,
"s204_api_php": 462,
"s204_api_php": 463,
"s204_wevia_php": 18,
"s95_arsenal_html": 1377,
"s95_arsenal_api": 377
@@ -301,7 +301,7 @@
"langfuse"
],
"key_tables": {
"kb_learnings": 5106,
"kb_learnings": 5107,
"kb_documents": 0,
"ethica_medecins": 50004,
"enterprise_agents": 0
@@ -539,7 +539,7 @@
]
},
"wiki": {
"total_entries": 5106,
"total_entries": 5107,
"categories": [
{
"category": "AUTO-FIX",
@@ -547,7 +547,7 @@
},
{
"category": "TOPOLOGY",
"cnt": "957"
"cnt": "958"
},
{
"category": "DISCOVERY",
@@ -1874,7 +1874,7 @@
"fixes_log": [],
"recommendations": []
},
"scan_time_ms": 542,
"scan_time_ms": 1127,
"gaps": [],
"score": 100,
"automation": {

File diff suppressed because it is too large Load Diff

View File

@@ -1374,5 +1374,21 @@
"avg": 89,
"provider": "Cerebras-fast",
"latency": 0.46
},
{
"ts": "2026-04-16T22:00:01",
"scores": {
"conversation": 74,
"speed": 93,
"code_gen": 90,
"diagram": 92,
"multilingual": 90,
"cost_efficiency": 95,
"sovereign_deploy": 92,
"model_routing": 90
},
"avg": 89,
"provider": "Cerebras-fast",
"latency": 0.46
}
]

View File

@@ -1,5 +1,5 @@
{
"ts": "2026-04-16T19:59:56+00:00",
"ts": "2026-04-16T20:01:31+00:00",
"hostname": "blade",
"cpu": "?",
"ram": "?",

View File

@@ -1,5 +1,5 @@
{
"timestamp": "2026-04-16T21:45:18.905268",
"timestamp": "2026-04-16T22:00:18.567347",
"layers": {
"DOCKER": {
"n": "DOCKER",

View File

@@ -5,7 +5,12 @@
"not_wired": 0,
"with_readme": 34,
"with_docker": 14,
"scan_time": "2026-04-16T22:00:01.926567"
"scan_time": "2026-04-16T22:00:01.926567",
"by_status": {
"integrated": 69,
"discovered": 0,
"evaluated": 0
}
},
"tools": {
"weval-l99": {
@@ -57,7 +62,7 @@
"has_node": true,
"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.",
"description": "**Language:** English | [Portugu\u00eas (Brasil)](docs/pt-BR/README.md) | [\u7b80\u4f53\u4e2d\u6587](README.zh-CN.md) | [\u7e41\u9ad4\u4e2d\u6587](docs/zh-TW/README.md) | [\u65e5\u672c\u8a9e](docs/ja-JP/README.",
"discovered": "2026-04-16T22:00:01.748828"
},
"open-webui-fresh": {
@@ -70,7 +75,7 @@
"has_node": true,
"has_docker": true,
"wired": true,
"description": "# Open WebUI 👋 ![GitHub stars](https://img.shields.io/github/stars/open-webui/open-webui?style=social) ![GitHub forks](https://img.shields.io/github/",
"description": "# Open WebUI \ud83d\udc4b ![GitHub stars](https://img.shields.io/github/stars/open-webui/open-webui?style=social) ![GitHub forks](https://img.shields.io/github/",
"discovered": "2026-04-16T22:00:01.830132"
},
"activepieces": {
@@ -96,7 +101,7 @@
"has_node": true,
"has_docker": false,
"wired": true,
"description": "English | [한국어](README.ko.md) | [中文](README.zh.md) | [日本語](README.ja.md) | [Español](README.es.md) | [Tiếng Việt](README.vi.md) | [Português](README.p",
"description": "English | [\ud55c\uad6d\uc5b4](README.ko.md) | [\u4e2d\u6587](README.zh.md) | [\u65e5\u672c\u8a9e](README.ja.md) | [Espa\u00f1ol](README.es.md) | [Ti\u1ebfng Vi\u1ec7t](README.vi.md) | [Portugu\u00eas](README.p",
"discovered": "2026-04-16T22:00:01.828029"
},
"mxyhi_ok-skills": {
@@ -109,7 +114,7 @@
"has_node": false,
"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) | ",
"description": "# OK Skills: AI Coding Agent Skills for Codex, Claude Code, Cursor, OpenClaw, and More English | [\u7b80\u4f53\u4e2d\u6587](README.zh-CN.md) | [\u7e41\u9ad4\u4e2d\u6587](README.zh-TW.md) | ",
"discovered": "2026-04-16T22:00:01.823654"
},
"SuperClaude_Framework": {
@@ -122,7 +127,7 @@
"has_node": true,
"has_docker": false,
"wired": true,
"description": "<div align=\"center\"> # 🚀 SuperClaude Framework [![Run in Smithery](https://smithery.ai/badge/skills/SuperClaude-Org)](https://smithery.ai/skills?ns=",
"description": "<div align=\"center\"> # \ud83d\ude80 SuperClaude Framework [![Run in Smithery](https://smithery.ai/badge/skills/SuperClaude-Org)](https://smithery.ai/skills?ns=",
"discovered": "2026-04-16T22:00:01.621615"
},
"paperclip-weval": {
@@ -135,7 +140,7 @@
"has_node": true,
"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",
"description": "<p align=\"center\"> <img src=\"doc/assets/header.png\" alt=\"Paperclip \u2014 runs your business\" width=\"720\" /> </p> <p align=\"center\"> <a href=\"#quickst",
"discovered": "2026-04-16T22:00:01.834057"
},
"vllm": {
@@ -161,7 +166,7 @@
"has_node": false,
"has_docker": false,
"wired": true,
"description": "# 🦌 DeerFlow - 2.0 English | [中文](./README_zh.md) | [日本語](./README_ja.md) | [Français](./README_fr.md) | [Русский](./README_ru.md) [![Python](https:",
"description": "# \ud83e\udd8c DeerFlow - 2.0 English | [\u4e2d\u6587](./README_zh.md) | [\u65e5\u672c\u8a9e](./README_ja.md) | [Fran\u00e7ais](./README_fr.md) | [\u0420\u0443\u0441\u0441\u043a\u0438\u0439](./README_ru.md) [![Python](https:",
"discovered": "2026-04-16T22:00:01.746310"
},
"system-prompts-ai": {
@@ -174,7 +179,7 @@
"has_node": false,
"has_docker": false,
"wired": true,
"description": "<p align=\"center\"> Support my work here: <a href=\"https://bags.fm/DEffWzJyaFRNyA4ogUox631hfHuv3KLeCcpBh2ipBAGS\">Bags.fm</a> <a href=\"https://",
"description": "<p align=\"center\"> Support my work here: <a href=\"https://bags.fm/DEffWzJyaFRNyA4ogUox631hfHuv3KLeCcpBh2ipBAGS\">Bags.fm</a> \u2022 <a href=\"https://",
"discovered": "2026-04-16T22:00:01.876938"
},
"librechat": {
@@ -213,7 +218,7 @@
"has_node": false,
"has_docker": true,
"wired": true,
"description": "<h1 align=\"center\">⚔️ 三省六部 · Edict</h1> <p align=\"center\"> <strong>我用 1300 年前的帝国制度,重新设计了 AI 多 Agent 协作架构。<br>结果发现,古人比现代 AI 框架更懂分权制衡。</strong> </p> ",
"description": "<h1 align=\"center\">\u2694\ufe0f \u4e09\u7701\u516d\u90e8 \u00b7 Edict</h1> <p align=\"center\"> <strong>\u6211\u7528 1300 \u5e74\u524d\u7684\u5e1d\u56fd\u5236\u5ea6\uff0c\u91cd\u65b0\u8bbe\u8ba1\u4e86 AI \u591a Agent \u534f\u4f5c\u67b6\u6784\u3002<br>\u7ed3\u679c\u53d1\u73b0\uff0c\u53e4\u4eba\u6bd4\u73b0\u4ee3 AI \u6846\u67b6\u66f4\u61c2\u5206\u6743\u5236\u8861\u3002</strong> </p> ",
"discovered": "2026-04-16T22:00:01.855367"
},
"anythingllm": {
@@ -278,7 +283,7 @@
"has_node": true,
"has_docker": false,
"wired": true,
"description": "<!-- registry-sync: version=9.4.0; skills=1340; stars=28867; updated_at=2026-03-31T16:30:41+00:00 --> # 🌌 Antigravity Awesome Skills: 1,340+ Agentic S",
"description": "<!-- registry-sync: version=9.4.0; skills=1340; stars=28867; updated_at=2026-03-31T16:30:41+00:00 --> # \ud83c\udf0c Antigravity Awesome Skills: 1,340+ Agentic S",
"discovered": "2026-04-16T22:00:01.652717"
},
"deepagent": {
@@ -291,7 +296,7 @@
"has_node": false,
"has_docker": false,
"wired": true,
"description": "# DeepAgents 기반 Research Multi Agent System Agent 2.0 Paradigm 을 잘 구현하는 DeepAgent 를 활용해서, FileSystem 기반 Context Engineering 을 원활히 수행하는 Research Mul",
"description": "# DeepAgents \uae30\ubc18 Research Multi Agent System Agent 2.0 Paradigm \uc744 \uc798 \uad6c\ud604\ud558\ub294 DeepAgent \ub97c \ud65c\uc6a9\ud574\uc11c, FileSystem \uae30\ubc18 Context Engineering \uc744 \uc6d0\ud65c\ud788 \uc218\ud589\ud558\ub294 Research \uc6a9 Mul",
"discovered": "2026-04-16T22:00:01.731892"
},
"rnd-astron-agent": {
@@ -330,7 +335,7 @@
"has_node": false,
"has_docker": true,
"wired": true,
"description": "🌍 **English** | [Español](docs/translations/README.es.md) | [Français](docs/translations/README.fr.md) | [Italiano](docs/translations/README.it.md) | ",
"description": "\ud83c\udf0d **English** | [Espa\u00f1ol](docs/translations/README.es.md) | [Fran\u00e7ais](docs/translations/README.fr.md) | [Italiano](docs/translations/README.it.md) | ",
"discovered": "2026-04-16T22:00:01.605720"
},
"aios": {
@@ -473,7 +478,7 @@
"has_node": false,
"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",
"description": "# Claude Code Plugins: Orchestration and Automation > **\u26a1 Updated for Opus 4.6, Sonnet 4.6 & Haiku 4.5** \u2014 Three-tier model strategy for optimal perf",
"discovered": "2026-04-16T22:00:01.848962"
},
"FrancyJGLisboa_agent-skill-creator": {
@@ -486,7 +491,7 @@
"has_node": false,
"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",
"description": "# Agent Skill Creator **Turn any workflow into reusable AI agent software that installs on 14+ tools \u2014 no spec writing, no prompt engineering, no cod",
"discovered": "2026-04-16T22:00:01.598537"
},
"obsidian-vault": {
@@ -564,7 +569,7 @@
"has_node": false,
"has_docker": false,
"wired": true,
"description": "# Writing Style Skill 可复用的写作风格 Skill 模板。**内置自动学习** — 从你的修改中自动提取规则SKILL.md 越用越准。 兼容 **Claude Code** + **OpenClaw (ClawHub)**。 ## 原理 ``` AI SKILL",
"description": "# Writing Style Skill \u53ef\u590d\u7528\u7684\u5199\u4f5c\u98ce\u683c Skill \u6a21\u677f\u3002**\u5185\u7f6e\u81ea\u52a8\u5b66\u4e60** \u2014 \u4ece\u4f60\u7684\u4fee\u6539\u4e2d\u81ea\u52a8\u63d0\u53d6\u89c4\u5219\uff0cSKILL.md \u8d8a\u7528\u8d8a\u51c6\u3002 \u517c\u5bb9 **Claude Code** + **OpenClaw (ClawHub)**\u3002 ## \u539f\u7406 ``` AI \u7528 SKILL",
"discovered": "2026-04-16T22:00:01.789051"
},
"qdrant-data": {
@@ -905,5 +910,41 @@
"description": "",
"discovered": "2026-04-16T22:00:01.922770"
}
}
},
"skills": {
"total": 6178,
"injected": 694
},
"trending": [
{
"name": "weval-l99"
},
{
"name": "wevia-brain"
},
{
"name": "skills"
},
{
"name": "everything-claude-code"
},
{
"name": "open-webui-fresh"
},
{
"name": "activepieces"
},
{
"name": "oh-my-claudecode"
},
{
"name": "mxyhi_ok-skills"
},
{
"name": "SuperClaude_Framework"
},
{
"name": "paperclip-weval"
}
]
}

View File

@@ -1 +1 @@
[{"q": "Aide-moi a comprendre notre architecture serveur en langage simple", "ts": "2026-04-14T21:53:44+00:00"}, {"q": "aide", "ts": "2026-04-14T22:15:06+00:00"}, {"q": "aide: quelles sont les pages ou services qui ne marchent pas actuellement? Liste moi tout ce qui est cassé ou en erreur.", "ts": "2026-04-14T22:17:56+00:00"}, {"q": "Propose moi un plan pour lancer les campagnes Ethica au Maroc", "ts": "2026-04-14T22:20:12+00:00"}, {"q": "Propose moi un plan sur 3 mois pour lancer des campagnes email ciblées vers les médecins au Maghreb", "ts": "2026-04-14T22:20:22+00:00"}, {"q": "aide: quels sont les problèmes en cours et les risques pour demain?", "ts": "2026-04-14T22:20:24+00:00"}, {"q": "aide: explique moi MonDsh et Monitor qui sont en erreur et comment les corriger", "ts": "2026-04-14T22:20:34+00:00"}, {"q": "Propose moi un plan sur 3 mois pour lancer des campagnes email ciblées vers les médecins au Maghreb", "ts": "2026-04-14T22:21:20+00:00"}, {"q": "aide: détaille les tests en echec MonDsh et Monitor", "ts": "2026-04-14T22:28:08+00:00"}, {"q": "aide: détaille les tests en echec MonDsh et Monitor", "ts": "2026-04-14T22:28:12+00:00"}, {"q": "diagnostic wevia.html il y a un message erreur avec des caractères bizarres, corrige le", "ts": "2026-04-15T19:35:22+00:00"}, {"q": "buginv", "ts": "2026-04-16T12:07:00+00:00"}, {"q": "Bonjour, comment vas-tu?", "ts": "2026-04-16T14:09:18+00:00"}]
[{"q": "aide", "ts": "2026-04-14T22:15:06+00:00"}, {"q": "aide: quelles sont les pages ou services qui ne marchent pas actuellement? Liste moi tout ce qui est cassé ou en erreur.", "ts": "2026-04-14T22:17:56+00:00"}, {"q": "Propose moi un plan pour lancer les campagnes Ethica au Maroc", "ts": "2026-04-14T22:20:12+00:00"}, {"q": "Propose moi un plan sur 3 mois pour lancer des campagnes email ciblées vers les médecins au Maghreb", "ts": "2026-04-14T22:20:22+00:00"}, {"q": "aide: quels sont les problèmes en cours et les risques pour demain?", "ts": "2026-04-14T22:20:24+00:00"}, {"q": "aide: explique moi MonDsh et Monitor qui sont en erreur et comment les corriger", "ts": "2026-04-14T22:20:34+00:00"}, {"q": "Propose moi un plan sur 3 mois pour lancer des campagnes email ciblées vers les médecins au Maghreb", "ts": "2026-04-14T22:21:20+00:00"}, {"q": "aide: détaille les tests en echec MonDsh et Monitor", "ts": "2026-04-14T22:28:08+00:00"}, {"q": "aide: détaille les tests en echec MonDsh et Monitor", "ts": "2026-04-14T22:28:12+00:00"}, {"q": "diagnostic wevia.html il y a un message erreur avec des caractères bizarres, corrige le", "ts": "2026-04-15T19:35:22+00:00"}, {"q": "buginv", "ts": "2026-04-16T12:07:00+00:00"}, {"q": "Bonjour, comment vas-tu?", "ts": "2026-04-16T14:09:18+00:00"}]

View File

@@ -1,5 +1,5 @@
{
"timestamp": "2026-04-16T21:30:06",
"timestamp": "2026-04-16T22:00:06",
"features": {
"total": 36,
"pass": 35
@@ -13,7 +13,7 @@
"score": 97.2,
"log": [
"=== UX AGENT v1.0 ===",
"Time: 2026-04-16 21:30:01",
"Time: 2026-04-16 22:00:01",
" core: 4/4",
" layout: 3/4",
" interaction: 6/6",

View File

@@ -1,5 +1,5 @@
{
"timestamp": "2026-04-16 21:55:05",
"timestamp": "2026-04-16 22:00:06",
"healthy": true,
"issues": [],
"fixes": [],

View File

@@ -1,5 +1,5 @@
{
"timestamp": "2026-04-16 19:55:08",
"timestamp": "2026-04-16 20:00:08",
"healthy": false,
"checks": {
"outpost": "DOWN",
@@ -19,7 +19,7 @@
"docker:authentik-worker": "NOT_FOUND",
"docker:authentik-db": "NOT_FOUND",
"docker:authentik-redis": "NOT_FOUND",
"open_ports": 66,
"open_ports": 65,
"nginx": "OK"
},
"flow_ok": 2,
@@ -30,62 +30,62 @@
{
"level": "critical",
"msg": "Outpost DOWN 9090",
"ts": "2026-04-16T19:55:02+00:00"
"ts": "2026-04-16T20:00:01+00:00"
},
{
"level": "critical",
"msg": "Outpost STILL DOWN",
"ts": "2026-04-16T19:55:07+00:00"
"ts": "2026-04-16T20:00:06+00:00"
},
{
"level": "warning",
"msg": "Auth flow wevads.weval-consulting.com: 200",
"ts": "2026-04-16T19:55:07+00:00"
"ts": "2026-04-16T20:00:06+00:00"
},
{
"level": "warning",
"msg": "Auth flow ethica.weval-consulting.com: 200",
"ts": "2026-04-16T19:55:07+00:00"
"ts": "2026-04-16T20:00:07+00:00"
},
{
"level": "warning",
"msg": "Auth flow n8n.weval-consulting.com: 200",
"ts": "2026-04-16T19:55:07+00:00"
"ts": "2026-04-16T20:00:07+00:00"
},
{
"level": "warning",
"msg": "Auth flow crm.weval-consulting.com: 200",
"ts": "2026-04-16T19:55:08+00:00"
"ts": "2026-04-16T20:00:07+00:00"
},
{
"level": "warning",
"msg": "Auth flow mm.weval-consulting.com: 200",
"ts": "2026-04-16T19:55:08+00:00"
"ts": "2026-04-16T20:00:07+00:00"
},
{
"level": "warning",
"msg": "Auth flow analytics.weval-consulting.com: 200",
"ts": "2026-04-16T19:55:08+00:00"
"ts": "2026-04-16T20:00:07+00:00"
},
{
"level": "warning",
"msg": "Auth flow deerflow.weval-consulting.com: 200",
"ts": "2026-04-16T19:55:08+00:00"
"ts": "2026-04-16T20:00:07+00:00"
},
{
"level": "warning",
"msg": "Callback location missing in nginx",
"ts": "2026-04-16T19:55:08+00:00"
"ts": "2026-04-16T20:00:07+00:00"
}
],
"fixes": [
{
"title": "Restart authentik",
"ts": "2026-04-16T19:55:02+00:00"
"ts": "2026-04-16T20:00:01+00:00"
},
{
"title": "Callback location auto-added",
"ts": "2026-04-16T19:55:08+00:00"
"ts": "2026-04-16T20:00:07+00:00"
}
]
}

View File

@@ -1,8 +1,8 @@
{
"timestamp": "2026-04-16 19:55:02",
"timestamp": "2026-04-16 20:00:01",
"version": "1.0",
"disk": 84,
"ram": 27,
"ram": 18,
"docker": 19,
"ssl_days": 354,
"ollama_models": 5,
@@ -14,26 +14,26 @@
{
"level": "critical",
"msg": "S204:authentik DOWN (:9090)",
"time": "19:55:02"
"time": "20:00:01"
},
{
"level": "warning",
"msg": "Token : expired",
"time": "19:55:03"
"time": "20:00:03"
},
{
"level": "warning",
"msg": "Token : expired",
"time": "19:55:03"
"time": "20:00:03"
}
],
"log": [
"19:55:02 Disk: 84%",
"19:55:02 SSL: 354d remaining",
"19:55:02 Docker: 19 containers",
"19:55:02 Ollama: 5 models, 5.2GB",
"19:55:02 RAM: 27%",
"19:55:03 Arch score: 100\/100"
"20:00:01 Disk: 84%",
"20:00:01 SSL: 354d remaining",
"20:00:01 Docker: 19 containers",
"20:00:01 Ollama: 5 models, 5.2GB",
"20:00:01 RAM: 18%",
"20:00:03 Arch score: 100\/100"
],
"s204_services": 8,
"s95_mta": 5

View File

@@ -1 +1 @@
{"ts":"21:58","status":"offline"}
{"ts":"22:00","status":"offline"}

View File

@@ -1,12 +1,10 @@
{
"date": "2026-04-16 19:45:02",
"date": "2026-04-16 20:00:01",
"score": "8\/13 (61.5%)",
"passed": 8,
"failed": 5,
"total": 13,
"regressions": [
"eng:Code"
],
"regressions": [],
"auto_fixes": [],
"tests": [
{
@@ -32,12 +30,12 @@
{
"name": "eng:SSL",
"ok": true,
"detail": "20t 0a"
"detail": "28t 0a"
},
{
"name": "eng:Compare",
"ok": true,
"detail": "178t 3a"
"detail": "144t 3a"
},
{
"name": "api:Dream",

View File

@@ -1,2 +1,2 @@
{"ts":"21:50","disk":"84%","swap":"40%","docker_dead":"none","http":"200","ssl":"Certificate will not expire
{"ts":"22:00","disk":"84%","swap":"40%","docker_dead":"none","http":"200","ssl":"Certificate will not expire
ok","alerts":"none","crons":64}

View File

@@ -1,5 +1,5 @@
{
"timestamp": "2026-04-16 19:50:12",
"timestamp": "2026-04-16 20:00:03",
"healthy": false,
"global_pass": 286,
"global_fail": 8,
@@ -34,8 +34,8 @@
"total": 93
},
"chat_monitor": {
"pass": 3,
"fail": 0,
"pass": 2,
"fail": 1,
"total": 3,
"caps": {
"Lean Six Sigma": {
@@ -49,9 +49,9 @@
"json": true
},
"SearXNG": {
"ok": true,
"code": 200,
"json": true
"ok": false,
"code": 429,
"json": false
}
}
},
@@ -65,8 +65,8 @@
},
"chatbot_post": {
"healthy": false,
"provider": "none",
"code": 502
"provider": "Cerebras-fast",
"code": 200
},
"regression_scan": {
"ok": 250,
@@ -84,9 +84,10 @@
"issues": [
"Full NonReg: 6\/28 failures (79%)",
"L99 Command: 2 failures",
"Chat Monitor: 1 capabilities returning non-JSON",
"Auth Agent: unhealthy",
"Chatbot POST: returning maintenance\/crash (provider cascade broken)",
"L99 Mission: 2 failures (QUALITY, ssl)"
],
"issues_count": 5
"issues_count": 6
}

View File

@@ -1 +1 @@
{"ts": "21:55", "status": "ok"}
{"ts": "22:00", "status": "ok"}

View File

@@ -243,7 +243,7 @@ async function checkStatus() {
const c = new AbortController();
setTimeout(() => c.abort(), 8000);
const r = await fetch('/api/blade-poll.php?k=BLADE2026&action=status', { signal: c.signal });
/* HTML_GUARD_V2_BATCH */ const _t_d=await r.text(); const d; {var _q=(_t_d||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){d={error:"[HTTP "+(r.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{d=JSON.parse(_q)}catch(e){d={error:"[JSON] "+e.message}}}}
/* HTML_GUARD_V2_BATCH */ const _t_d=await r.text(); const d=null; {var _q=(_t_d||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){d={error:"[HTTP "+(r.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{d=JSON.parse(_q)}catch(e){d={error:"[JSON] "+e.message}}}}
const on = d.heartbeat && d.heartbeat.ts;
_fails = 0;
@@ -344,7 +344,7 @@ async function sendChat() {
addChat('user', esc(msg));
// Try AI brain first
let parsed = null;
try { const r = await fetch('/api/blade-brain.php?msg=' + encodeURIComponent(msg)); /* HTML_GUARD_V2_BATCH */ const _t_d=await r.text(); const d; {var _q=(_t_d||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){d={error:"[HTTP "+(r.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{d=JSON.parse(_q)}catch(e){d={error:"[JSON] "+e.message}}}} if (d.ok && d.tasks?.length) parsed = d.tasks; } catch(e) {}
try { const r = await fetch('/api/blade-brain.php?msg=' + encodeURIComponent(msg)); /* HTML_GUARD_V2_BATCH */ const _t_d=await r.text(); const d=null; {var _q=(_t_d||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){d={error:"[HTTP "+(r.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{d=JSON.parse(_q)}catch(e){d={error:"[JSON] "+e.message}}}} if (d.ok && d.tasks?.length) parsed = d.tasks; } catch(e) {}
// Fallback to keyword
if (!parsed) { const kp = parseIntent(msg); if (kp) parsed = [kp]; }
if (parsed && parsed.length) {
@@ -408,7 +408,7 @@ async function pollAndExecute() {
if (document.hidden) return;
try {
const r = await fetch('/api/blade-poll.php?k=BLADE2026&action=poll');
/* HTML_GUARD_V2_BATCH */ const _t_d=await r.text(); const d; {var _q=(_t_d||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){d={error:"[HTTP "+(r.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{d=JSON.parse(_q)}catch(e){d={error:"[JSON] "+e.message}}}}
/* HTML_GUARD_V2_BATCH */ const _t_d=await r.text(); const d=null; {var _q=(_t_d||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){d={error:"[HTTP "+(r.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{d=JSON.parse(_q)}catch(e){d={error:"[JSON] "+e.message}}}}
if (d.task && d.task.command) {
await fetch('/api/blade-poll.php?k=BLADE2026&action=done&file=' + encodeURIComponent(d.task._file) + '&result=browser_dispatched');
if (d.task.name && d.task.name.includes('RELOAD')) location.reload();

View File

@@ -116,7 +116,7 @@ async function tick(){
try{
const r=await fetch(U,{cache:'no-cache'});
if(!r.ok) return;
/* HTML_GUARD_V2_BATCH */ const _t_d=await r.text(); const d; {var _q=(_t_d||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){d={error:"[HTTP "+(r.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{d=JSON.parse(_q)}catch(e){d={error:"[JSON] "+e.message}}}}
/* HTML_GUARD_V2_BATCH */ const _t_d=await r.text(); const d=null; {var _q=(_t_d||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){d={error:"[HTTP "+(r.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{d=JSON.parse(_q)}catch(e){d={error:"[JSON] "+e.message}}}}
const body=document.getElementById('ulo-body');
const ts=document.getElementById('ulo-ts');
if(!body) return;

View File

@@ -816,7 +816,7 @@ async function send(){
addMsg('user',msg);history.push({role:'user',content:msg});addLoading();
try{
const _ep=(()=>{const m=currentModel||'auto';const np=['cf-','nim-','or-','groq','cerebras','mistral','ollama','web-'];if(np.some(p=>m.startsWith(p)))return'/api/wevia-multi-provider.php';return'/api/wevia-deepseek-proxy.php';})();const res=await fetch(_ep,{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({message:msg,mode:getMode(),model:currentModel,history:history.slice(-12)})});
/* HTML_GUARD_V2_BATCH */ const _t_data=await res.text(); const data; {var _q=(_t_data||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){data={error:"[HTTP "+(res.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{data=JSON.parse(_q)}catch(e){data={error:"[JSON] "+e.message}}}}document.getElementById('loading')?.remove();
/* HTML_GUARD_V2_BATCH */ const _t_data=await res.text(); const data=null; {var _q=(_t_data||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){data={error:"[HTTP "+(res.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{data=JSON.parse(_q)}catch(e){data={error:"[JSON] "+e.message}}}}document.getElementById('loading')?.remove();
if(data.content){addMsg('bot',data.content,data);history.push({role:'assistant',content:data.content})}
else addMsg('bot',data.error||'Erreur','Error');
}catch(e){document.getElementById('loading')?.remove();addMsg('bot','Erreur: '+e.message)}
@@ -827,7 +827,7 @@ async function masterExec(cmd){
addMsg('user','[Master] '+cmd);addLoading();
try{
const res=await fetch('/api/wevia-full-exec.php?m='+encodeURIComponent(cmd));
/* HTML_GUARD_V2_BATCH */ const _t_data=await res.text(); const data; {var _q=(_t_data||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){data={error:"[HTTP "+(res.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{data=JSON.parse(_q)}catch(e){data={error:"[JSON] "+e.message}}}}document.getElementById('loading')?.remove();
/* HTML_GUARD_V2_BATCH */ const _t_data=await res.text(); const data=null; {var _q=(_t_data||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){data={error:"[HTTP "+(res.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{data=JSON.parse(_q)}catch(e){data={error:"[JSON] "+e.message}}}}document.getElementById('loading')?.remove();
addMsg('bot',data.response||data.content||'OK',{provider:'WEVIA Master',model:'intent-exec'});
}catch(e){document.getElementById('loading')?.remove();addMsg('bot','Erreur Master: '+e.message)}
}
@@ -837,7 +837,7 @@ async function searchKB(){
const div=document.getElementById('kbResults');div.innerHTML='<div style="color:var(--fg3);font-size:11px">Recherche...</div>';
try{
const res=await fetch('/api/wevia-full-exec.php?m='+encodeURIComponent('cherche kb '+q));
/* HTML_GUARD_V2_BATCH */ const _t_data=await res.text(); const data; {var _q=(_t_data||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){data={error:"[HTTP "+(res.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{data=JSON.parse(_q)}catch(e){data={error:"[JSON] "+e.message}}}}
/* HTML_GUARD_V2_BATCH */ const _t_data=await res.text(); const data=null; {var _q=(_t_data||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){data={error:"[HTTP "+(res.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{data=JSON.parse(_q)}catch(e){data={error:"[JSON] "+e.message}}}}
div.innerHTML=`<div class="sb-item" style="font-size:11px;white-space:pre-wrap">${(data.response||'Aucun résultat').slice(0,300)}</div>`;
}catch(e){div.innerHTML='<div style="color:var(--rd);font-size:11px">Erreur</div>'}
}
@@ -885,7 +885,7 @@ async function connectDS() {
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({action: 'set_ds_token', token: token})
});
/* HTML_GUARD_V2_BATCH */ const _t_data=await res.text(); const data; {var _q=(_t_data||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){data={error:"[HTTP "+(res.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{data=JSON.parse(_q)}catch(e){data={error:"[JSON] "+e.message}}}}
/* HTML_GUARD_V2_BATCH */ const _t_data=await res.text(); const data=null; {var _q=(_t_data||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){data={error:"[HTTP "+(res.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{data=JSON.parse(_q)}catch(e){data={error:"[JSON] "+e.message}}}}
if (data.status === 'token_saved') {
document.getElementById('dsConnect').style.background = 'var(--cy)22';
document.getElementById('dsConnect').style.borderColor = 'var(--cy)';
@@ -906,7 +906,7 @@ async function checkDS() {
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({action: 'ds_token_status'})
});
/* HTML_GUARD_V2_BATCH */ const _t_data=await res.text(); const data; {var _q=(_t_data||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){data={error:"[HTTP "+(res.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{data=JSON.parse(_q)}catch(e){data={error:"[JSON] "+e.message}}}}
/* HTML_GUARD_V2_BATCH */ const _t_data=await res.text(); const data=null; {var _q=(_t_data||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){data={error:"[HTTP "+(res.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{data=JSON.parse(_q)}catch(e){data={error:"[JSON] "+e.message}}}}
if (data.has_token) {
document.getElementById('dsConnect').style.background = 'var(--cy)22';
document.getElementById('dsConnect').style.borderColor = 'var(--cy)';
@@ -925,7 +925,7 @@ async function checkArenaHealth() {
const ctrl = new AbortController();
setTimeout(() => ctrl.abort(), 90000);
const r = await fetch("/api/wevia-arena-health.php", {signal: ctrl.signal});
/* HTML_GUARD_V2_BATCH */ const _t_d=await r.text(); const d; {var _q=(_t_d||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){d={error:"[HTTP "+(r.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{d=JSON.parse(_q)}catch(e){d={error:"[JSON] "+e.message}}}}
/* HTML_GUARD_V2_BATCH */ const _t_d=await r.text(); const d=null; {var _q=(_t_d||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){d={error:"[HTTP "+(r.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{d=JSON.parse(_q)}catch(e){d={error:"[JSON] "+e.message}}}}
const sel = document.getElementById("modelSelect");
if (!sel || !d.models) return;

View File

@@ -433,7 +433,7 @@ setInterval(loadData,30000);
try{
const r=await fetch(U,{cache:'no-cache'});
if(!r.ok) return;
/* HTML_GUARD_V2_BATCH */ const _t_d=await r.text(); const d; {var _q=(_t_d||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){d={error:"[HTTP "+(r.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{d=JSON.parse(_q)}catch(e){d={error:"[JSON] "+e.message}}}}
/* HTML_GUARD_V2_BATCH */ const _t_d=await r.text(); const d=null; {var _q=(_t_d||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){d={error:"[HTTP "+(r.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{d=JSON.parse(_q)}catch(e){d={error:"[JSON] "+e.message}}}}
const body=document.getElementById('ulo-body');
const ts=document.getElementById('ulo-ts');
if(!body) return;

View File

@@ -235,7 +235,7 @@ async function loadAll() {
async function loadFiability() {
try {
const r = await fetch('/api/wevia-fiability.php?report');
/* HTML_GUARD_V2_BATCH */ const _t_d=await r.text(); const d; {var _q=(_t_d||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){d={error:"[HTTP "+(r.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{d=JSON.parse(_q)}catch(e){d={error:"[JSON] "+e.message}}}}
/* HTML_GUARD_V2_BATCH */ const _t_d=await r.text(); const d=null; {var _q=(_t_d||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){d={error:"[HTTP "+(r.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{d=JSON.parse(_q)}catch(e){d={error:"[JSON] "+e.message}}}}
if (d.status === 'no_report') {
document.getElementById('fiaScore').textContent = '—';
document.getElementById('fiaDetail').textContent = 'Aucun scan';
@@ -260,7 +260,7 @@ async function loadFiability() {
async function loadStatus() {
try {
const r = await fetch(API + '?status');
/* HTML_GUARD_V2_BATCH */ const _t_d=await r.text(); const d; {var _q=(_t_d||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){d={error:"[HTTP "+(r.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{d=JSON.parse(_q)}catch(e){d={error:"[JSON] "+e.message}}}}
/* HTML_GUARD_V2_BATCH */ const _t_d=await r.text(); const d=null; {var _q=(_t_d||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){d={error:"[HTTP "+(r.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{d=JSON.parse(_q)}catch(e){d={error:"[JSON] "+e.message}}}}
if (d.status === 'never_run') {
document.getElementById('liveStatus').textContent = '● NEVER RUN';
@@ -315,7 +315,7 @@ async function loadStatus() {
async function loadHistory() {
try {
const r = await fetch(API + '?history&n=30');
/* HTML_GUARD_V2_BATCH */ const _t_data=await r.text(); const data; {var _q=(_t_data||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){data={error:"[HTTP "+(r.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{data=JSON.parse(_q)}catch(e){data={error:"[JSON] "+e.message}}}}
/* HTML_GUARD_V2_BATCH */ const _t_data=await r.text(); const data=null; {var _q=(_t_data||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){data={error:"[HTTP "+(r.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{data=JSON.parse(_q)}catch(e){data={error:"[JSON] "+e.message}}}}
if (!Array.isArray(data) || !data.length) {
document.getElementById('timeline').innerHTML = '<div style="color:var(--t3);text-align:center;padding:40px;">Aucun historique. Lancez un cycle.</div>';
document.getElementById('stCycles').textContent = '0';
@@ -346,14 +346,14 @@ async function loadHistory() {
async function loadHealth() {
try {
const r = await fetch(API + '?health');
/* HTML_GUARD_V2_BATCH */ const _t_d=await r.text(); const d; {var _q=(_t_d||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){d={error:"[HTTP "+(r.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{d=JSON.parse(_q)}catch(e){d={error:"[JSON] "+e.message}}}}
/* HTML_GUARD_V2_BATCH */ const _t_d=await r.text(); const d=null; {var _q=(_t_d||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){d={error:"[HTTP "+(r.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{d=JSON.parse(_q)}catch(e){d={error:"[JSON] "+e.message}}}}
document.getElementById('stUptime').textContent = d.uptime || '?';
} catch(e) {}
// Agents status
try {
const r2 = await fetch(MASTER_API + '?health');
/* HTML_GUARD_V2_BATCH */ const _t_h=await r2.text(); const h; {var _q=(_t_h||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){h={error:"[HTTP "+(r2.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{h=JSON.parse(_q)}catch(e){h={error:"[JSON] "+e.message}}}}
/* HTML_GUARD_V2_BATCH */ const _t_h=await r2.text(); const h=null; {var _q=(_t_h||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){h={error:"[HTTP "+(r2.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{h=JSON.parse(_q)}catch(e){h={error:"[JSON] "+e.message}}}}
updateAgents(h);
} catch(e) {}
}
@@ -404,7 +404,7 @@ async function triggerCycle(force = false) {
try {
const url = force ? API + '?run&force=1' : API + '?run';
const r = await fetch(url);
/* HTML_GUARD_V2_BATCH */ const _t_d=await r.text(); const d; {var _q=(_t_d||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){d={error:"[HTTP "+(r.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{d=JSON.parse(_q)}catch(e){d={error:"[JSON] "+e.message}}}}
/* HTML_GUARD_V2_BATCH */ const _t_d=await r.text(); const d=null; {var _q=(_t_d||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){d={error:"[HTTP "+(r.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{d=JSON.parse(_q)}catch(e){d={error:"[JSON] "+e.message}}}}
btn.textContent = d.skipped ? '⏭ Skipped' : '✅ Done';
await loadAll();
} catch(e) {

View File

@@ -107,7 +107,7 @@ async function send(){
const typing=document.createElement('div');typing.className='typing';typing.textContent='Ethica AI réfléchit...';chat.appendChild(typing);chat.scrollTop=chat.scrollHeight;
try{
const r=await fetch(API,{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({message:ETHICA_PREFIX+q})});
/* HTML_GUARD_V2_BATCH */ const _t_d=await r.text(); const d; {var _q=(_t_d||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){d={error:"[HTTP "+(r.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{d=JSON.parse(_q)}catch(e){d={error:"[JSON] "+e.message}}}}
/* HTML_GUARD_V2_BATCH */ const _t_d=await r.text(); const d=null; {var _q=(_t_d||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){d={error:"[HTTP "+(r.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{d=JSON.parse(_q)}catch(e){d={error:"[JSON] "+e.message}}}}
typing.remove();
addMsg(d.response||d.content||d.error||'Erreur','bot');
}catch(e){typing.remove();addMsg('Erreur de connexion','bot')}

View File

@@ -28,7 +28,7 @@ th{background:#0f172a;font-weight:600}
async function loadStats() {
try {
const r = await fetch('/api/ethica-stats.php');
/* HTML_GUARD_V2_BATCH */ const _t_d=await r.text(); const d; {var _q=(_t_d||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){d={error:"[HTTP "+(r.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{d=JSON.parse(_q)}catch(e){d={error:"[JSON] "+e.message}}}}
/* HTML_GUARD_V2_BATCH */ const _t_d=await r.text(); const d=null; {var _q=(_t_d||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){d={error:"[HTTP "+(r.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{d=JSON.parse(_q)}catch(e){d={error:"[JSON] "+e.message}}}}
document.getElementById('subtitle').textContent =
`contacts: ${d.total||0}${d.countries||3} pays`;
document.getElementById('stats').innerHTML =
@@ -64,13 +64,13 @@ async function sendWA(){
const to=document.getElementById('wa-to').value;
const msg=document.getElementById('wa-msg').value;
const r=await fetch('/api/whatsapp-api.php',{method:'POST',headers:{'Content-Type':'application/x-www-form-urlencoded'},body:'action=send&to='+encodeURIComponent(to)+'&message='+encodeURIComponent(msg)});
/* HTML_GUARD_V2_BATCH */ const _t_d=await r.text(); const d; {var _q=(_t_d||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){d={error:"[HTTP "+(r.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{d=JSON.parse(_q)}catch(e){d={error:"[JSON] "+e.message}}}}
/* HTML_GUARD_V2_BATCH */ const _t_d=await r.text(); const d=null; {var _q=(_t_d||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){d={error:"[HTTP "+(r.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{d=JSON.parse(_q)}catch(e){d={error:"[JSON] "+e.message}}}}
document.getElementById('wa-result').innerHTML=d.ok?'<span style="color:#25D366">✅ Envoyé!</span>':'<span style="color:#ff4444">❌ '+JSON.stringify(d.response?.error?.message||d.error)+'</span>';
}
async function sendWATemplate(){
const to=document.getElementById('wa-to').value;
const r=await fetch('/api/whatsapp-api.php',{method:'POST',headers:{'Content-Type':'application/x-www-form-urlencoded'},body:'action=send&to='+encodeURIComponent(to)+'&template=hello_world&lang=en_US'});
/* HTML_GUARD_V2_BATCH */ const _t_d=await r.text(); const d; {var _q=(_t_d||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){d={error:"[HTTP "+(r.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{d=JSON.parse(_q)}catch(e){d={error:"[JSON] "+e.message}}}}
/* HTML_GUARD_V2_BATCH */ const _t_d=await r.text(); const d=null; {var _q=(_t_d||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){d={error:"[HTTP "+(r.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{d=JSON.parse(_q)}catch(e){d={error:"[JSON] "+e.message}}}}
document.getElementById('wa-result').innerHTML=d.ok?'<span style="color:#25D366">✅ Template envoyé!</span>':'<span style="color:#ff4444">❌ '+JSON.stringify(d.response?.error?.message||d.error)+'</span>';
}
</script>

View File

@@ -94,7 +94,7 @@ h2{padding:12px 40px 0;font-size:15px;color:#7c3aed;text-transform:uppercase;let
(async function(){
try{
const r=await fetch('/api/wevia-action-engine.php',{method:'POST',headers:{'Content-Type':'application/x-www-form-urlencoded'},body:'action=ethica_stats'});
/* HTML_GUARD_V2_BATCH */ const _t_d=await r.text(); const d; {var _q=(_t_d||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){d={error:"[HTTP "+(r.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{d=JSON.parse(_q)}catch(e){d={error:"[JSON] "+e.message}}}}
/* HTML_GUARD_V2_BATCH */ const _t_d=await r.text(); const d=null; {var _q=(_t_d||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){d={error:"[HTTP "+(r.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{d=JSON.parse(_q)}catch(e){d={error:"[JSON] "+e.message}}}}
if(d.ok){
const el=document.getElementById('hcp-count');
if(el && d.total) el.textContent=Math.round(d.total/1000)+'K';

View File

@@ -193,7 +193,7 @@ async function tick(){
try{
const r=await fetch(U,{cache:'no-cache'});
if(!r.ok) return;
/* HTML_GUARD_V2_BATCH */ const _t_d=await r.text(); const d; {var _q=(_t_d||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){d={error:"[HTTP "+(r.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{d=JSON.parse(_q)}catch(e){d={error:"[JSON] "+e.message}}}}
/* HTML_GUARD_V2_BATCH */ const _t_d=await r.text(); const d=null; {var _q=(_t_d||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){d={error:"[HTTP "+(r.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{d=JSON.parse(_q)}catch(e){d={error:"[JSON] "+e.message}}}}
const body=document.getElementById('ulo-body');
const ts=document.getElementById('ulo-ts');
if(!body) return;

View File

@@ -278,7 +278,7 @@ let lastFeedTs='';
async function loadFeed(){
try{
const r=await fetch('/api/ethica-feed-api.php');
/* HTML_GUARD_V2_BATCH */ const _t_d=await r.text(); const d; {var _q=(_t_d||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){d={error:"[HTTP "+(r.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{d=JSON.parse(_q)}catch(e){d={error:"[JSON] "+e.message}}}}
/* HTML_GUARD_V2_BATCH */ const _t_d=await r.text(); const d=null; {var _q=(_t_d||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){d={error:"[HTTP "+(r.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{d=JSON.parse(_q)}catch(e){d={error:"[JSON] "+e.message}}}}
if(!d.feed||!d.feed.length)return;
const newTs=d.feed[0].ts;
if(newTs===lastFeedTs)return;
@@ -299,7 +299,7 @@ setInterval(loadFeed,30000);
async function loadData(){
try{
const r=await fetch('/api/ethica-api.php?action=stats&token=ETHICA_API_2026_SECURE');
/* HTML_GUARD_V2_BATCH */ const _t_d=await r.text(); const d; {var _q=(_t_d||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){d={error:"[HTTP "+(r.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{d=JSON.parse(_q)}catch(e){d={error:"[JSON] "+e.message}}}}
/* HTML_GUARD_V2_BATCH */ const _t_d=await r.text(); const d=null; {var _q=(_t_d||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){d={error:"[HTTP "+(r.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{d=JSON.parse(_q)}catch(e){d={error:"[JSON] "+e.message}}}}
if(d.total){
document.getElementById('kpi-total').textContent=d.total.toLocaleString();
document.getElementById('p-collecte').textContent=d.total.toLocaleString();

Binary file not shown.

View File

@@ -190,7 +190,7 @@ async function send(){
try{
const r=await fetch('/api/wevia-master-api.php',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({message:q,history:c.msgs.slice(-6)})});
/* HTML_GUARD_V2_BATCH */ const _t_d=await r.text(); const d; {var _q=(_t_d||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){d={error:"[HTTP "+(r.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{d=JSON.parse(_q)}catch(e){d={error:"[JSON] "+e.message}}}}
/* HTML_GUARD_V2_BATCH */ const _t_d=await r.text(); const d=null; {var _q=(_t_d||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){d={error:"[HTTP "+(r.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{d=JSON.parse(_q)}catch(e){d={error:"[JSON] "+e.message}}}}
let reply=d.content||d.response||d.text||'';
let prov=d.provider||d.model||'unknown';
document.getElementById('ld').classList.remove('on');

View File

@@ -112,7 +112,7 @@ setInterval(()=>{document.getElementById('clock').textContent=new Date().toLocal
async function fetchLive(){
try{
const r=await fetch('/api/l99-api.php?action=results');
/* HTML_GUARD_V2_BATCH */ const _t_d=await r.text(); const d; {var _q=(_t_d||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){d={error:"[HTTP "+(r.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{d=JSON.parse(_q)}catch(e){d={error:"[JSON] "+e.message}}}}
/* HTML_GUARD_V2_BATCH */ const _t_d=await r.text(); const d=null; {var _q=(_t_d||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){d={error:"[HTTP "+(r.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{d=JSON.parse(_q)}catch(e){d={error:"[JSON] "+e.message}}}}
if(d.tests){
DATA.tests=d.tests.length;
DATA.pass=d.tests.filter(t=>t.status==='P').length;

View File

@@ -213,7 +213,7 @@ async function tick(){
try{
const r=await fetch(U,{cache:'no-cache'});
if(!r.ok) return;
/* HTML_GUARD_V2_BATCH */ const _t_d=await r.text(); const d; {var _q=(_t_d||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){d={error:"[HTTP "+(r.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{d=JSON.parse(_q)}catch(e){d={error:"[JSON] "+e.message}}}}
/* HTML_GUARD_V2_BATCH */ const _t_d=await r.text(); const d=null; {var _q=(_t_d||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){d={error:"[HTTP "+(r.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{d=JSON.parse(_q)}catch(e){d={error:"[JSON] "+e.message}}}}
const body=document.getElementById('ulo-body');
const ts=document.getElementById('ulo-ts');
if(!body) return;

View File

@@ -112,7 +112,7 @@ async function tick(){
try{
const r=await fetch(U,{cache:'no-cache'});
if(!r.ok) return;
/* HTML_GUARD_V2_BATCH */ const _t_d=await r.text(); const d; {var _q=(_t_d||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){d={error:"[HTTP "+(r.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{d=JSON.parse(_q)}catch(e){d={error:"[JSON] "+e.message}}}}
/* HTML_GUARD_V2_BATCH */ const _t_d=await r.text(); const d=null; {var _q=(_t_d||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){d={error:"[HTTP "+(r.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{d=JSON.parse(_q)}catch(e){d={error:"[JSON] "+e.message}}}}
const body=document.getElementById('ulo-body');
const ts=document.getElementById('ulo-ts');
if(!body) return;

View File

@@ -180,7 +180,7 @@ async function runScan(){
b.textContent='⏳ Scanning...';b.disabled=true;
try{
const r=await fetch(API+'&action=auto_run').catch(()=>fetch('/api/oss-cache.json'));
/* HTML_GUARD_V2_BATCH */ const _t_d=await r.text(); const d; {var _q=(_t_d||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){d={error:"[HTTP "+(r.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{d=JSON.parse(_q)}catch(e){d={error:"[JSON] "+e.message}}}}
/* HTML_GUARD_V2_BATCH */ const _t_d=await r.text(); const d=null; {var _q=(_t_d||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){d={error:"[HTTP "+(r.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{d=JSON.parse(_q)}catch(e){d={error:"[JSON] "+e.message}}}}
b.textContent=`✅ +${d.new_tools} tools`;
setTimeout(()=>{b.textContent='⚡ Scan Now';b.disabled=false;load()},3000);
}catch(e){b.textContent='❌ Error';setTimeout(()=>{b.textContent='⚡ Scan Now';b.disabled=false},2000)}
@@ -192,7 +192,7 @@ async function loadTrending(){
box.innerHTML='<div class="card"><div class="card-b" style="text-align:center;padding:30px;color:var(--mu)">Loading trending...</div></div>';
try{
const r=await fetch('/api/oss-trending.json?t='+Date.now());
/* HTML_GUARD_V2_BATCH */ const _t_d=await r.text(); const d; {var _q=(_t_d||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){d={error:"[HTTP "+(r.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{d=JSON.parse(_q)}catch(e){d={error:"[JSON] "+e.message}}}}
/* HTML_GUARD_V2_BATCH */ const _t_d=await r.text(); const d=null; {var _q=(_t_d||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){d={error:"[HTTP "+(r.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{d=JSON.parse(_q)}catch(e){d={error:"[JSON] "+e.message}}}}
box.innerHTML=`<div class="card"><div class="card-h"><div class="card-t">📈 GitHub Trending</div><span class="badge b-ac">${(d.trending||[]).length}</span></div>
<div class="card-b" style="padding:0;max-height:400px;overflow-y:auto"><table class="tbl"><tr><th>Score</th><th>★</th><th>Repo</th><th>Lang</th><th>Needs</th></tr>
${(d.trending||[]).map(t=>`<tr><td class="score" style="color:${t.score>=30?'var(--ac)':t.score>=15?'var(--gn)':'var(--mu2)'}">${t.score}</td><td class="stars">${fmt(t.stars)}</td><td><a href="${t.url}" target="_blank">${t.name.split('/').pop()}</a><br><span style="font-size:9px;color:var(--mu)">${(t.description||'').slice(0,70)}</span></td><td style="font-family:var(--mono);font-size:10px">${t.language||'?'}</td><td>${(t.needs||[]).slice(0,3).map(n=>tag(n)).join('')}</td></tr>`).join('')}

View File

@@ -50,7 +50,7 @@ const API='/api/secret-scanner-api.php';
async function load(){
try{
const r=await fetch(API+'?action=results');
/* HTML_GUARD_V2_BATCH */ const _t_d=await r.text(); const d; {var _q=(_t_d||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){d={error:"[HTTP "+(r.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{d=JSON.parse(_q)}catch(e){d={error:"[JSON] "+e.message}}}}
/* HTML_GUARD_V2_BATCH */ const _t_d=await r.text(); const d=null; {var _q=(_t_d||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){d={error:"[HTTP "+(r.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{d=JSON.parse(_q)}catch(e){d={error:"[JSON] "+e.message}}}}
if(d.error){document.getElementById('history').textContent='No scan yet. Click Scan Now.';return}
// KPIs
const s=d.summary||{};
@@ -118,7 +118,7 @@ async function tick(){
try{
const r=await fetch(U,{cache:'no-cache'});
if(!r.ok) return;
/* HTML_GUARD_V2_BATCH */ const _t_d=await r.text(); const d; {var _q=(_t_d||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){d={error:"[HTTP "+(r.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{d=JSON.parse(_q)}catch(e){d={error:"[JSON] "+e.message}}}}
/* HTML_GUARD_V2_BATCH */ const _t_d=await r.text(); const d=null; {var _q=(_t_d||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){d={error:"[HTTP "+(r.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{d=JSON.parse(_q)}catch(e){d={error:"[JSON] "+e.message}}}}
const body=document.getElementById('ulo-body');
const ts=document.getElementById('ulo-ts');
if(!body) return;

View File

@@ -387,7 +387,7 @@ async function sendMsg() {
headers: {'Content-Type':'application/json'},
body: JSON.stringify(webModels.includes(currentModel) ? {service:currentModel.replace('web-',''), message:msg} : {message:msg, mode:currentMode, model:currentModel, history:history.slice(-12)})
});
/* HTML_GUARD_V2_BATCH */ const _t_d=await res.text(); const d; {var _q=(_t_d||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){d={error:"[HTTP "+(res.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{d=JSON.parse(_q)}catch(e){d={error:"[JSON] "+e.message}}}}
/* HTML_GUARD_V2_BATCH */ const _t_d=await res.text(); const d=null; {var _q=(_t_d||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){d={error:"[HTTP "+(res.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{d=JSON.parse(_q)}catch(e){d={error:"[JSON] "+e.message}}}}
const content = d.content || d.response || 'Pas de réponse';
const prov = d.provider || currentModel;
addMsg(content, 'ai', `${prov} · ${d.cost || '0€'}`);

View File

@@ -829,7 +829,7 @@ async function send(){
addMsg('user',msg);history.push({role:'user',content:msg});addLoading();
try{
const _ep=(()=>{const m=currentModel||'auto';const np=['cf-','nim-','or-','groq','cerebras','mistral','ollama','web-','anthropic','deepseek','sambanova','trinity','minimax','mimo','maestro'];if(np.some(p=>m.startsWith(p)))return'/api/wevia-multi-provider.php';return'/api/wevia-deepseek-proxy.php';})();const res=await fetch(_ep,{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({message:msg,mode:getMode(),model:currentModel,history:history.slice(-12)})});
/* HTML_GUARD_V2_BATCH */ const _t_data=await res.text(); const data; {var _q=(_t_data||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){data={error:"[HTTP "+(res.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{data=JSON.parse(_q)}catch(e){data={error:"[JSON] "+e.message}}}}document.getElementById('loading')?.remove();
/* HTML_GUARD_V2_BATCH */ const _t_data=await res.text(); const data=null; {var _q=(_t_data||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){data={error:"[HTTP "+(res.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{data=JSON.parse(_q)}catch(e){data={error:"[JSON] "+e.message}}}}document.getElementById('loading')?.remove();
if(data.content){addMsg('bot',data.content,data);history.push({role:'assistant',content:data.content})}
else addMsg('bot',data.error||'Erreur','Error');
}catch(e){document.getElementById('loading')?.remove();addMsg('bot','Erreur: '+e.message)}
@@ -840,7 +840,7 @@ async function masterExec(cmd){
addMsg('user','[Master] '+cmd);addLoading();
try{
const res=await fetch('/api/wevia-full-exec.php?m='+encodeURIComponent(cmd));
/* HTML_GUARD_V2_BATCH */ const _t_data=await res.text(); const data; {var _q=(_t_data||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){data={error:"[HTTP "+(res.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{data=JSON.parse(_q)}catch(e){data={error:"[JSON] "+e.message}}}}document.getElementById('loading')?.remove();
/* HTML_GUARD_V2_BATCH */ const _t_data=await res.text(); const data=null; {var _q=(_t_data||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){data={error:"[HTTP "+(res.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{data=JSON.parse(_q)}catch(e){data={error:"[JSON] "+e.message}}}}document.getElementById('loading')?.remove();
addMsg('bot',data.response||data.content||'OK',{provider:'WEVIA Master',model:'intent-exec'});
}catch(e){document.getElementById('loading')?.remove();addMsg('bot','Erreur Master: '+e.message)}
}
@@ -850,7 +850,7 @@ async function searchKB(){
const div=document.getElementById('kbResults');div.innerHTML='<div style="color:var(--fg3);font-size:11px">Recherche...</div>';
try{
const res=await fetch('/api/wevia-full-exec.php?m='+encodeURIComponent('cherche kb '+q));
/* HTML_GUARD_V2_BATCH */ const _t_data=await res.text(); const data; {var _q=(_t_data||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){data={error:"[HTTP "+(res.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{data=JSON.parse(_q)}catch(e){data={error:"[JSON] "+e.message}}}}
/* HTML_GUARD_V2_BATCH */ const _t_data=await res.text(); const data=null; {var _q=(_t_data||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){data={error:"[HTTP "+(res.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{data=JSON.parse(_q)}catch(e){data={error:"[JSON] "+e.message}}}}
div.innerHTML=`<div class="sb-item" style="font-size:11px;white-space:pre-wrap">${(data.response||'Aucun résultat').slice(0,300)}</div>`;
}catch(e){div.innerHTML='<div style="color:var(--rd);font-size:11px">Erreur</div>'}
}
@@ -898,7 +898,7 @@ async function connectDS() {
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({action: 'set_ds_token', token: token})
});
/* HTML_GUARD_V2_BATCH */ const _t_data=await res.text(); const data; {var _q=(_t_data||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){data={error:"[HTTP "+(res.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{data=JSON.parse(_q)}catch(e){data={error:"[JSON] "+e.message}}}}
/* HTML_GUARD_V2_BATCH */ const _t_data=await res.text(); const data=null; {var _q=(_t_data||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){data={error:"[HTTP "+(res.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{data=JSON.parse(_q)}catch(e){data={error:"[JSON] "+e.message}}}}
if (data.status === 'token_saved') {
document.getElementById('dsConnect').style.background = 'var(--cy)22';
document.getElementById('dsConnect').style.borderColor = 'var(--cy)';
@@ -919,7 +919,7 @@ async function checkDS() {
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({action: 'ds_token_status'})
});
/* HTML_GUARD_V2_BATCH */ const _t_data=await res.text(); const data; {var _q=(_t_data||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){data={error:"[HTTP "+(res.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{data=JSON.parse(_q)}catch(e){data={error:"[JSON] "+e.message}}}}
/* HTML_GUARD_V2_BATCH */ const _t_data=await res.text(); const data=null; {var _q=(_t_data||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){data={error:"[HTTP "+(res.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{data=JSON.parse(_q)}catch(e){data={error:"[JSON] "+e.message}}}}
if (data.has_token) {
document.getElementById('dsConnect').style.background = 'var(--cy)22';
document.getElementById('dsConnect').style.borderColor = 'var(--cy)';
@@ -938,7 +938,7 @@ async function checkArenaHealth() {
const ctrl = new AbortController();
setTimeout(() => ctrl.abort(), 90000);
const r = await fetch("/api/wevia-arena-health.php", {signal: ctrl.signal});
/* HTML_GUARD_V2_BATCH */ const _t_d=await r.text(); const d; {var _q=(_t_d||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){d={error:"[HTTP "+(r.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{d=JSON.parse(_q)}catch(e){d={error:"[JSON] "+e.message}}}}
/* HTML_GUARD_V2_BATCH */ const _t_d=await r.text(); const d=null; {var _q=(_t_d||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){d={error:"[HTTP "+(r.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{d=JSON.parse(_q)}catch(e){d={error:"[JSON] "+e.message}}}}
const sel = document.getElementById("modelSelect");
if (!sel || !d.models) return;

View File

@@ -336,7 +336,7 @@ async function send() {
async function loadStats() {
try {
const r = await fetch('/api/source-of-truth.json?t=' + Date.now());
/* HTML_GUARD_V2_BATCH */ const _t_d=await r.text(); const d; {var _q=(_t_d||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){d={error:"[HTTP "+(r.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{d=JSON.parse(_q)}catch(e){d={error:"[JSON] "+e.message}}}}
/* HTML_GUARD_V2_BATCH */ const _t_d=await r.text(); const d=null; {var _q=(_t_d||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){d={error:"[HTTP "+(r.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{d=JSON.parse(_q)}catch(e){d={error:"[JSON] "+e.message}}}}
document.getElementById('prov-count').textContent = Object.keys(d.providers || {}).length;
document.getElementById('footer-stats').textContent = Object.keys(d.agents || {}).length + ' agents | Sovereign';
} catch(e) {}

View File

@@ -235,7 +235,7 @@ async function loadAll() {
async function loadFiability() {
try {
const r = await fetch('/api/wevia-fiability.php?report');
/* HTML_GUARD_V2_BATCH */ const _t_d=await r.text(); const d; {var _q=(_t_d||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){d={error:"[HTTP "+(r.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{d=JSON.parse(_q)}catch(e){d={error:"[JSON] "+e.message}}}}
/* HTML_GUARD_V2_BATCH */ const _t_d=await r.text(); const d=null; {var _q=(_t_d||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){d={error:"[HTTP "+(r.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{d=JSON.parse(_q)}catch(e){d={error:"[JSON] "+e.message}}}}
if (d.status === 'no_report') {
document.getElementById('fiaScore').textContent = '—';
document.getElementById('fiaDetail').textContent = 'Aucun scan';
@@ -260,7 +260,7 @@ async function loadFiability() {
async function loadStatus() {
try {
const r = await fetch(API + '?status');
/* HTML_GUARD_V2_BATCH */ const _t_d=await r.text(); const d; {var _q=(_t_d||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){d={error:"[HTTP "+(r.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{d=JSON.parse(_q)}catch(e){d={error:"[JSON] "+e.message}}}}
/* HTML_GUARD_V2_BATCH */ const _t_d=await r.text(); const d=null; {var _q=(_t_d||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){d={error:"[HTTP "+(r.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{d=JSON.parse(_q)}catch(e){d={error:"[JSON] "+e.message}}}}
if (d.status === 'never_run') {
document.getElementById('liveStatus').textContent = '● NEVER RUN';
@@ -315,7 +315,7 @@ async function loadStatus() {
async function loadHistory() {
try {
const r = await fetch(API + '?history&n=30');
/* HTML_GUARD_V2_BATCH */ const _t_data=await r.text(); const data; {var _q=(_t_data||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){data={error:"[HTTP "+(r.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{data=JSON.parse(_q)}catch(e){data={error:"[JSON] "+e.message}}}}
/* HTML_GUARD_V2_BATCH */ const _t_data=await r.text(); const data=null; {var _q=(_t_data||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){data={error:"[HTTP "+(r.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{data=JSON.parse(_q)}catch(e){data={error:"[JSON] "+e.message}}}}
if (!Array.isArray(data) || !data.length) {
document.getElementById('timeline').innerHTML = '<div style="color:var(--t3);text-align:center;padding:40px;">Aucun historique. Lancez un cycle.</div>';
document.getElementById('stCycles').textContent = '0';
@@ -346,14 +346,14 @@ async function loadHistory() {
async function loadHealth() {
try {
const r = await fetch(API + '?health');
/* HTML_GUARD_V2_BATCH */ const _t_d=await r.text(); const d; {var _q=(_t_d||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){d={error:"[HTTP "+(r.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{d=JSON.parse(_q)}catch(e){d={error:"[JSON] "+e.message}}}}
/* HTML_GUARD_V2_BATCH */ const _t_d=await r.text(); const d=null; {var _q=(_t_d||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){d={error:"[HTTP "+(r.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{d=JSON.parse(_q)}catch(e){d={error:"[JSON] "+e.message}}}}
document.getElementById('stUptime').textContent = d.uptime || '?';
} catch(e) {}
// Agents status
try {
const r2 = await fetch(MASTER_API + '?health');
/* HTML_GUARD_V2_BATCH */ const _t_h=await r2.text(); const h; {var _q=(_t_h||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){h={error:"[HTTP "+(r2.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{h=JSON.parse(_q)}catch(e){h={error:"[JSON] "+e.message}}}}
/* HTML_GUARD_V2_BATCH */ const _t_h=await r2.text(); const h=null; {var _q=(_t_h||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){h={error:"[HTTP "+(r2.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{h=JSON.parse(_q)}catch(e){h={error:"[JSON] "+e.message}}}}
updateAgents(h);
} catch(e) {}
}
@@ -404,7 +404,7 @@ async function triggerCycle(force = false) {
try {
const url = force ? API + '?run&force=1' : API + '?run';
const r = await fetch(url);
/* HTML_GUARD_V2_BATCH */ const _t_d=await r.text(); const d; {var _q=(_t_d||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){d={error:"[HTTP "+(r.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{d=JSON.parse(_q)}catch(e){d={error:"[JSON] "+e.message}}}}
/* HTML_GUARD_V2_BATCH */ const _t_d=await r.text(); const d=null; {var _q=(_t_d||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){d={error:"[HTTP "+(r.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{d=JSON.parse(_q)}catch(e){d={error:"[JSON] "+e.message}}}}
btn.textContent = d.skipped ? '⏭ Skipped' : '✅ Done';
await loadAll();
} catch(e) {
@@ -433,7 +433,7 @@ async function tick(){
try{
const r=await fetch(U,{cache:'no-cache'});
if(!r.ok) return;
/* HTML_GUARD_V2_BATCH */ const _t_d=await r.text(); const d; {var _q=(_t_d||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){d={error:"[HTTP "+(r.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{d=JSON.parse(_q)}catch(e){d={error:"[JSON] "+e.message}}}}
/* HTML_GUARD_V2_BATCH */ const _t_d=await r.text(); const d=null; {var _q=(_t_d||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){d={error:"[HTTP "+(r.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{d=JSON.parse(_q)}catch(e){d={error:"[JSON] "+e.message}}}}
const body=document.getElementById('ulo-body');
const ts=document.getElementById('ulo-ts');
if(!body) return;

View File

@@ -356,7 +356,7 @@ async function send(){
const s1=addThinkStep(`Lancement agent ${id}...`);
const s2=addThinkStep('Exécution des étapes...');
const r=await fetch(`${AGENT}?agent=${id}&goal=${encodeURIComponent(goal)}`,{signal:AbortSignal.timeout(120000)});
/* HTML_GUARD_V2_BATCH */ const _t_data=await r.text(); const data; {var _q=(_t_data||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){data={error:"[HTTP "+(r.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{data=JSON.parse(_q)}catch(e){data={error:"[JSON] "+e.message}}}}
/* HTML_GUARD_V2_BATCH */ const _t_data=await r.text(); const data=null; {var _q=(_t_data||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){data={error:"[HTTP "+(r.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{data=JSON.parse(_q)}catch(e){data={error:"[JSON] "+e.message}}}}
completeStep(s1,`${data.steps_count||'?'} étapes`);
completeStep(s2,`${data.total_time_ms||'?'}ms`);
setTimeout(()=>{
@@ -577,7 +577,7 @@ send = async function() {
body: JSON.stringify({ image_base64: imageFile.data.split(',')[1], prompt: msg }),
signal: AbortSignal.timeout(30000)
});
/* HTML_GUARD_V2_BATCH */ const _t_data=await resp.text(); const data; {var _q=(_t_data||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){data={error:"[HTTP "+(resp.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{data=JSON.parse(_q)}catch(e){data={error:"[JSON] "+e.message}}}}
/* HTML_GUARD_V2_BATCH */ const _t_data=await resp.text(); const data=null; {var _q=(_t_data||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){data={error:"[HTTP "+(resp.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{data=JSON.parse(_q)}catch(e){data={error:"[JSON] "+e.message}}}}
completeStep(s1, `${data.provider} ${data.latency_ms}ms`);
setTimeout(() => {
removeThinking();

View File

@@ -209,7 +209,7 @@ async function apiCall(action, params = '') {
document.getElementById('loading').classList.add('show');
try {
const r = await fetch(`${API}?action=${action}${params}`);
/* HTML_GUARD_V2_BATCH */ const _t_d=await r.text(); const d; {var _q=(_t_d||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){d={error:"[HTTP "+(r.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{d=JSON.parse(_q)}catch(e){d={error:"[JSON] "+e.message}}}}
/* HTML_GUARD_V2_BATCH */ const _t_d=await r.text(); const d=null; {var _q=(_t_d||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){d={error:"[HTTP "+(r.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{d=JSON.parse(_q)}catch(e){d={error:"[JSON] "+e.message}}}}
document.getElementById('loading').classList.remove('show');
return d;
} catch (e) {

View File

@@ -423,7 +423,7 @@ async function runTask(preset){
(async function loadAgentFleet() {
try {
const r = await fetch("/api/agents-catalog-api.php");
/* HTML_GUARD_V2_BATCH */ const _t_d=await r.text(); const d; {var _q=(_t_d||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){d={error:"[HTTP "+(r.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{d=JSON.parse(_q)}catch(e){d={error:"[JSON] "+e.message}}}}
/* HTML_GUARD_V2_BATCH */ const _t_d=await r.text(); const d=null; {var _q=(_t_d||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){d={error:"[HTTP "+(r.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{d=JSON.parse(_q)}catch(e){d={error:"[JSON] "+e.message}}}}
const fleet = document.querySelector(".fleet");
if (!fleet || !d.agents) return;

View File

@@ -134,7 +134,7 @@ async function send(){
body:JSON.stringify({model:'auto',messages:msgs,max_tokens:1200}),
signal:AbortSignal.timeout(15000)
});
/* HTML_GUARD_V2_BATCH */ const _t_d=await res2.text(); const d; {var _q=(_t_d||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){d={error:"[HTTP "+(res2.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{d=JSON.parse(_q)}catch(e){d={error:"[JSON] "+e.message}}}}
/* HTML_GUARD_V2_BATCH */ const _t_d=await res2.text(); const d=null; {var _q=(_t_d||"").trim();if(_q.startsWith("<!DOCTYPE")||_q.startsWith("<html")){d={error:"[HTTP "+(res2.status||"?")+"] Backend indisponible",isHtmlError:true};}else{try{d=JSON.parse(_q)}catch(e){d={error:"[JSON] "+e.message}}}}
const t=d.choices?.[0]?.message?.content||'Service temporairement indisponible.';
typing.classList.remove('show');
addMsg(t,'a',{provider:d.provider||'sovereign',time:((Date.now()-t0)/1000).toFixed(1)+'s'});