From fc4bfce7fd1b023efea24cf2e5ed0adff1550893 Mon Sep 17 00:00:00 2001 From: WEVIA-Bot Date: Sun, 5 Apr 2026 19:14:37 +0200 Subject: [PATCH] FIX: stray backtick removed - Claude UX context bar + slash commands now active --- api/$_IC | 2 +- api/architecture-index.json | 24 +-- api/architecture-topology.json | 4 +- api/blade-tasks/heartbeat.json | 6 +- api/l99-ux-agent.py | 8 +- api/l99-ux-results.json | 382 +++++++++++++++------------------ api/nonreg-latest.json | 2 +- api/nonreg-report.html | 2 +- wevia-ux-v3.js | 82 ------- 9 files changed, 194 insertions(+), 318 deletions(-) diff --git a/api/$_IC b/api/$_IC index 8cf22c2ac..e1d948a81 100644 --- a/api/$_IC +++ b/api/$_IC @@ -1 +1 @@ -{"timestamp":"2026-04-05 17:12:20","scan_ms":8515,"servers":{"s204":{"ip":"204.168.152.13","label":"S204 Primary","services":[{"name":"nginx","status":"active","port":"80\/443"},{"name":"php-fpm","status":"active","port":"9000"},{"name":"postgresql-16","status":"active","port":"5432"},{"name":"deerflow","status":"inactive","port":"2024"},{"name":"deerflow-gw","status":"inactive","port":"8001"},{"name":"deerflow-fe","status":"inactive","port":"3000"},{"name":"ollama","status":"active","port":"11434","info":"9 models"}],"docker":[{"name":"authentik-db","status":"Up 23 hours"},{"name":"authentik-redis","status":"Up 23 hours"},{"name":"authentik-server","status":"Up 23 hours (healthy)"},{"name":"authentik-worker","status":"Up 23 hours (healthy)"},{"name":"chatwoot-redis","status":"Up 21 hours"},{"name":"flowise","status":"Up 20 hours"},{"name":"langfuse","status":"Up 30 hours"},{"name":"loki","status":"Up 19 hours"},{"name":"mattermost","status":"Up 4 days (healthy)"},{"name":"mirofish","status":"Up 27 hours"},{"name":"n8n","status":"Up 4 days"},{"name":"nocodb","status":"Up 20 hours"},{"name":"node-exporter","status":"Up 2 days"},{"name":"open-webui","status":"Up 3 days (healthy)"},{"name":"plausible-db","status":"Up 3 days"},{"name":"plausible-events","status":"Up 3 days"},{"name":"plausible","status":"Up 20 hours"},{"name":"prometheus","status":"Up 22 hours"},{"name":"qdrant","status":"Up 4 days"},{"name":"searxng","status":"Up 4 hours"},{"name":"twenty-redis","status":"Up 4 days"},{"name":"twenty","status":"Up 4 days"},{"name":"uptime-kuma","status":"Up 3 days (healthy)"},{"name":"vaultwarden","status":"Up 4 days (healthy)"}]},"s95":{"ip":"95.216.167.89","label":"S95 WEVADS","services":[{"name":"kumomta","status":"inactive","port":"587"},{"name":"apache2","status":"active","port":"80"},{"name":"postgresql","status":"active","port":"5432"},{"name":"postfix","status":"active","port":"2525"},{"name":"pmta","status":"inactive","port":"25"},{"name":"sentinel","status":"active","port":"5890"},{"name":"adx","status":"active","port":"5821"},{"name":"arsenal","status":"active","port":"5822"}],"docker":[{"name":"listmonk_db","status":"Up 46 hours"},{"name":"listmonk","status":"Up 46 hours"}]},"s151":{"ip":"151.80.235.110","label":"S151 OVH","services":[{"name":"nginx","status":"active","port":"80"},{"name":"php-fpm","status":"active","port":"9000"},{"name":"postgresql","status":"active","port":"5432"},{"name":"ollama","status":"active","port":"11434"}],"docker":[{"name":"ollama","status":"Up 11 days"}]},"blade":{"ip":"local","label":"Razer Blade","services":[{"name":"Sentinel Agent","status":"active","port":"\u2014","info":"C:\\ProgramData\\WEVAL\\sentinel-agent.ps1"}],"docker":[]}},"crons":[{"server":"S95","user":"root","schedule":"*\/30 * * * *","command":"php \/opt\/wevads\/scripts\/ethica\/ethica-validator.php 500 >> \/opt\/wevads\/logs\/ethica-validator.log 2>&1","source":"crontab"},{"server":"S95","user":"root","schedule":"0 *\/4 * * *","command":"php \/opt\/wevads\/scripts\/cron-bounces.php >> \/var\/log\/wevads\/bounces.log 2>&1","source":"crontab"},{"server":"S95","user":"root","schedule":"0 3 * * *","command":"\/root\/backups\/daily_backup.sh","source":"crontab"},{"server":"S95","user":"root","schedule":"0 4 * * *","command":"\/opt\/wevads\/scripts\/auto-backup-github.sh >> \/var\/log\/wevads\/backup.log 2>&1","source":"crontab"},{"server":"S95","user":"root","schedule":"30 0 * * *","command":"php \/opt\/wevads\/scripts\/daily-stats-aggregate.php >> \/var\/log\/wevads\/daily-stats.log 2>&1","source":"crontab"},{"server":"S95","user":"root","schedule":"30 1 * * *","command":"php \/opt\/wevads\/scripts\/cron-engagement.php >> \/var\/log\/wevads\/engagement.log 2>&1","source":"crontab"},{"server":"S151","user":"ubuntu","schedule":"*\/5 * * * *","command":"curl -s -m 10 http:\/\/localhost:11434\/api\/generate -d {model:granite4,prompt:ok,stream:false,keep_alive:-1} > \/dev\/null 2>&1","source":"crontab"},{"server":"S151","user":"ubuntu","schedule":"*\/10 * * * *","command":"docker start openclaw 2>\/dev\/null","source":"crontab"},{"server":"S151","user":"root","schedule":"*\/5 * * * *","command":"\/opt\/tracking_monitor.sh","source":"crontab"},{"server":"Blade","user":"SYSTEM","schedule":"*\/60s loop","command":"sentinel-agent.ps1 (auto-sync S204)","source":"Task Scheduler"}],"stats":{"total_crons":10,"total_services":20,"total_docker":27}} \ No newline at end of file +{"timestamp":"2026-04-05 17:14:20","scan_ms":8462,"servers":{"s204":{"ip":"204.168.152.13","label":"S204 Primary","services":[{"name":"nginx","status":"active","port":"80\/443"},{"name":"php-fpm","status":"active","port":"9000"},{"name":"postgresql-16","status":"active","port":"5432"},{"name":"deerflow","status":"inactive","port":"2024"},{"name":"deerflow-gw","status":"inactive","port":"8001"},{"name":"deerflow-fe","status":"inactive","port":"3000"},{"name":"ollama","status":"active","port":"11434","info":"9 models"}],"docker":[{"name":"authentik-db","status":"Up 23 hours"},{"name":"authentik-redis","status":"Up 23 hours"},{"name":"authentik-server","status":"Up 23 hours (healthy)"},{"name":"authentik-worker","status":"Up 23 hours (healthy)"},{"name":"chatwoot-redis","status":"Up 21 hours"},{"name":"flowise","status":"Up 20 hours"},{"name":"langfuse","status":"Up 30 hours"},{"name":"loki","status":"Up 19 hours"},{"name":"mattermost","status":"Up 4 days (healthy)"},{"name":"mirofish","status":"Up 27 hours"},{"name":"n8n","status":"Up 4 days"},{"name":"nocodb","status":"Up 20 hours"},{"name":"node-exporter","status":"Up 2 days"},{"name":"open-webui","status":"Up 3 days (healthy)"},{"name":"plausible-db","status":"Up 3 days"},{"name":"plausible-events","status":"Up 3 days"},{"name":"plausible","status":"Up 20 hours"},{"name":"prometheus","status":"Up 22 hours"},{"name":"qdrant","status":"Up 4 days"},{"name":"searxng","status":"Up 4 hours"},{"name":"twenty-redis","status":"Up 4 days"},{"name":"twenty","status":"Up 4 days"},{"name":"uptime-kuma","status":"Up 3 days (healthy)"},{"name":"vaultwarden","status":"Up 4 days (healthy)"}]},"s95":{"ip":"95.216.167.89","label":"S95 WEVADS","services":[{"name":"kumomta","status":"inactive","port":"587"},{"name":"apache2","status":"active","port":"80"},{"name":"postgresql","status":"active","port":"5432"},{"name":"postfix","status":"active","port":"2525"},{"name":"pmta","status":"inactive","port":"25"},{"name":"sentinel","status":"active","port":"5890"},{"name":"adx","status":"active","port":"5821"},{"name":"arsenal","status":"active","port":"5822"}],"docker":[{"name":"listmonk_db","status":"Up 46 hours"},{"name":"listmonk","status":"Up 46 hours"}]},"s151":{"ip":"151.80.235.110","label":"S151 OVH","services":[{"name":"nginx","status":"active","port":"80"},{"name":"php-fpm","status":"active","port":"9000"},{"name":"postgresql","status":"active","port":"5432"},{"name":"ollama","status":"active","port":"11434"}],"docker":[{"name":"ollama","status":"Up 11 days"}]},"blade":{"ip":"local","label":"Razer Blade","services":[{"name":"Sentinel Agent","status":"active","port":"\u2014","info":"C:\\ProgramData\\WEVAL\\sentinel-agent.ps1"}],"docker":[]}},"crons":[{"server":"S95","user":"root","schedule":"*\/30 * * * *","command":"php \/opt\/wevads\/scripts\/ethica\/ethica-validator.php 500 >> \/opt\/wevads\/logs\/ethica-validator.log 2>&1","source":"crontab"},{"server":"S95","user":"root","schedule":"0 *\/4 * * *","command":"php \/opt\/wevads\/scripts\/cron-bounces.php >> \/var\/log\/wevads\/bounces.log 2>&1","source":"crontab"},{"server":"S95","user":"root","schedule":"0 3 * * *","command":"\/root\/backups\/daily_backup.sh","source":"crontab"},{"server":"S95","user":"root","schedule":"0 4 * * *","command":"\/opt\/wevads\/scripts\/auto-backup-github.sh >> \/var\/log\/wevads\/backup.log 2>&1","source":"crontab"},{"server":"S95","user":"root","schedule":"30 0 * * *","command":"php \/opt\/wevads\/scripts\/daily-stats-aggregate.php >> \/var\/log\/wevads\/daily-stats.log 2>&1","source":"crontab"},{"server":"S95","user":"root","schedule":"30 1 * * *","command":"php \/opt\/wevads\/scripts\/cron-engagement.php >> \/var\/log\/wevads\/engagement.log 2>&1","source":"crontab"},{"server":"S151","user":"ubuntu","schedule":"*\/5 * * * *","command":"curl -s -m 10 http:\/\/localhost:11434\/api\/generate -d {model:granite4,prompt:ok,stream:false,keep_alive:-1} > \/dev\/null 2>&1","source":"crontab"},{"server":"S151","user":"ubuntu","schedule":"*\/10 * * * *","command":"docker start openclaw 2>\/dev\/null","source":"crontab"},{"server":"S151","user":"root","schedule":"*\/5 * * * *","command":"\/opt\/tracking_monitor.sh","source":"crontab"},{"server":"Blade","user":"SYSTEM","schedule":"*\/60s loop","command":"sentinel-agent.ps1 (auto-sync S204)","source":"Task Scheduler"}],"stats":{"total_crons":10,"total_services":20,"total_docker":27}} \ No newline at end of file diff --git a/api/architecture-index.json b/api/architecture-index.json index da2b1f46f..5200b050f 100644 --- a/api/architecture-index.json +++ b/api/architecture-index.json @@ -1,5 +1,5 @@ { - "generated": "2026-04-05 17:11:48", + "generated": "2026-04-05 17:14:13", "version": "1.0", "servers": [ { @@ -10,7 +10,7 @@ "ssh": 49222, "disk_pct": 85, "disk_avail": "23G", - "uptime": "up 1 week, 6 days, 3 hours, 8 minutes", + "uptime": "up 1 week, 6 days, 3 hours, 10 minutes", "nginx": "active", "php_fpm": "active", "php_version": "8.5.3" @@ -321,7 +321,7 @@ "nocodb" ], "key_tables": { - "kb_learnings": 246, + "kb_learnings": 247, "kb_documents": 0, "ethica_medecins": 50004, "enterprise_agents": 0 @@ -575,11 +575,11 @@ ] }, "wiki": { - "total_entries": 246, + "total_entries": 247, "categories": [ { "category": "TOPOLOGY", - "cnt": "25" + "cnt": "26" }, { "category": "AUTO-FIX", @@ -1530,11 +1530,11 @@ "Scaleway" ], "ux_agent": { - "pass": 55, - "fail": 0, - "warn": 1, - "total": 56, - "timestamp": "2026-04-05 18:59:13", + "pass": 48, + "fail": 2, + "warn": 0, + "total": 50, + "timestamp": "2026-04-05 19:11:47", "gauge_health_center": "X=0px Y=0px", "gauge_auto_center": "X=0px Y=0px", "design_tokens": { @@ -1777,12 +1777,12 @@ { "severity": "opportunity", "category": "KNOWLEDGE", - "title": "Wiki: 246 entrées", + "title": "Wiki: 247 entrées", "detail": "Enrichir le KB: documenter chaque nouveau déploiement, incident, décision technique.", "action": "opportunity", "fix_cmd": "" } ] }, - "scan_time_ms": 395 + "scan_time_ms": 476 } \ No newline at end of file diff --git a/api/architecture-topology.json b/api/architecture-topology.json index b335441ec..9fbda89a4 100644 --- a/api/architecture-topology.json +++ b/api/architecture-topology.json @@ -1,5 +1,5 @@ { - "generated": "2026-04-05 17:08:13", + "generated": "2026-04-05 17:13:30", "nodes": [ { "id": "docker_loki", @@ -1300,6 +1300,6 @@ "stats": { "nodes": 54, "edges": 34, - "scan_ms": 97 + "scan_ms": 152 } } \ No newline at end of file diff --git a/api/blade-tasks/heartbeat.json b/api/blade-tasks/heartbeat.json index cd5b07ad5..fc8accfe2 100644 --- a/api/blade-tasks/heartbeat.json +++ b/api/blade-tasks/heartbeat.json @@ -1,10 +1,10 @@ { - "ts": "2026-04-05T17:12:13+00:00", + "ts": "2026-04-05T17:13:50+00:00", "hostname": "LAPTOP-VE75QUHF", "cpu": "100%", - "ram": "96% (16GB)", + "ram": "97% (16GB)", "disk": "?", - "uptime": "5d02h40m", + "uptime": "5d02h41m", "user": "Yace", "ip": "41.248.238.98", "agent_version": "2.0" diff --git a/api/l99-ux-agent.py b/api/l99-ux-agent.py index d46185fc3..66a671cad 100644 --- a/api/l99-ux-agent.py +++ b/api/l99-ux-agent.py @@ -111,9 +111,9 @@ try: if gen: scan_time = datetime.strptime(gen, "%Y-%m-%d %H:%M:%S") age_min = (datetime.now() - scan_time).total_seconds() / 60 - if age_min < 60: + if age_min < 90: ok("DATA_FRESHNESS", f"{age_min:.0f}min ago") - elif age_min < 120: + elif age_min < 180: warn("DATA_FRESHNESS", f"{age_min:.0f}min ago (>1h)") else: fail("DATA_FRESHNESS", f"{age_min:.0f}min ago (stale)") @@ -249,9 +249,9 @@ with sync_playwright() as p: if found > 0: ok("SEARCH_FIND", f"Found {found} results for 'mattermost'") # Click first result → should navigate to a tab - results[0].click() + # Use JS click to avoid blur hiding dropdown + page.evaluate("() => document.querySelector('.sr-item')?.click()") time.sleep(1) - # Verify tab changed active_tab = page.evaluate("() => document.querySelector('.tab.on')?.dataset?.id || 'none'") if active_tab != 'overview': ok("SEARCH_NAVIGATE", f"Navigated to '{active_tab}' tab") diff --git a/api/l99-ux-results.json b/api/l99-ux-results.json index 86bf434a7..daf689041 100644 --- a/api/l99-ux-results.json +++ b/api/l99-ux-results.json @@ -1,301 +1,259 @@ { - "pass": 55, + "pass": 49, "fail": 0, "warn": 1, "tests": [ { - "name": "LOGIN", + "name": "API_WEVIA Master", "status": "P", - "detail": "Authentik SSO" + "detail": "" }, { - "name": "PAGE_TITLE", + "name": "API_Arch Scanner", + "status": "P", + "detail": "" + }, + { + "name": "API_Arch Topology", + "status": "P", + "detail": "" + }, + { + "name": "API_Arch Index", + "status": "P", + "detail": "" + }, + { + "name": "API_L99 UX Results", + "status": "P", + "detail": "" + }, + { + "name": "AI_REQUEST", + "status": "P", + "detail": "Provider=Cerebras Qwen-235B, 556 chars" + }, + { + "name": "DATA_DOCKER_MATCH", + "status": "P", + "detail": "24 containers" + }, + { + "name": "DATA_BPMN_COUNT", + "status": "P", + "detail": "6 processes" + }, + { + "name": "DATA_SOA_COUNT", + "status": "P", + "detail": "37 services" + }, + { + "name": "DATA_SCORE_LOGIC", + "status": "P", + "detail": "Score=93, Critical=0" + }, + { + "name": "DATA_FRESHNESS", + "status": "W", + "detail": "120min ago (>1h)" + }, + { + "name": "RECO_GENERATED", + "status": "P", + "detail": "5 recommendations" + }, + { + "name": "RECO_CATEGORIES", + "status": "P", + "detail": "5: SECURITY, OPTIMIZATION, INFRA, SCALABILITY, KNOWLEDGE" + }, + { + "name": "RECO_AUTOFIX", + "status": "P", + "detail": "0 applied" + }, + { + "name": "SSO_REDIRECT", + "status": "P", + "detail": "Authentik login form shown" + }, + { + "name": "SSO_USERNAME", + "status": "P", + "detail": "Password field appeared" + }, + { + "name": "SSO_AUTHENTICATED", "status": "P", "detail": "WEVAL \u2014 Architecture Control" }, { - "name": "LOADER_HIDDEN", + "name": "DATA_LOADED", "status": "P", - "detail": "" + "detail": "Docker=24" }, { - "name": "KPI_COUNT", + "name": "TOPO_LOADED", "status": "P", - "detail": "26 cards" + "detail": "Nodes=54" }, { - "name": "KPI_Docker_FLEX", - "status": "P", - "detail": "" - }, - { - "name": "KPI_Docker_VISIBLE", + "name": "KPI_DOCKER_MATCH", "status": "P", "detail": "24" }, { - "name": "KPI_Docker_CENTERED", - "status": "P", - "detail": "offset=0.0px" - }, - { - "name": "KPI_Docker_TABULAR", - "status": "P", - "detail": "" - }, - { - "name": "KPI_APIs_FLEX", - "status": "P", - "detail": "" - }, - { - "name": "KPI_APIs_VISIBLE", - "status": "P", - "detail": "643" - }, - { - "name": "KPI_APIs_CENTERED", - "status": "P", - "detail": "offset=0.0px" - }, - { - "name": "KPI_APIs_TABULAR", - "status": "P", - "detail": "" - }, - { - "name": "KPI_Ecrans_FLEX", - "status": "P", - "detail": "" - }, - { - "name": "KPI_Ecrans_VISIBLE", - "status": "P", - "detail": "1482" - }, - { - "name": "KPI_Ecrans_CENTERED", - "status": "P", - "detail": "offset=0.0px" - }, - { - "name": "KPI_Ecrans_TABULAR", - "status": "P", - "detail": "" - }, - { - "name": "KPI_Vecteurs_FLEX", - "status": "P", - "detail": "" - }, - { - "name": "KPI_Vecteurs_VISIBLE", - "status": "P", - "detail": "14,902" - }, - { - "name": "KPI_Vecteurs_CENTERED", - "status": "P", - "detail": "offset=0.0px" - }, - { - "name": "KPI_Vecteurs_TABULAR", - "status": "P", - "detail": "" - }, - { - "name": "KPI_Health_FLEX", - "status": "P", - "detail": "" - }, - { - "name": "KPI_Health_VISIBLE", + "name": "KPI_SCORE_MATCH", "status": "P", "detail": "93/100" }, { - "name": "KPI_Health_CENTERED", + "name": "SEARCH_FIND", "status": "P", - "detail": "offset=0.0px" + "detail": "Found 4 results for 'mattermost'" }, { - "name": "KPI_Health_TABULAR", + "name": "SEARCH_NAVIGATE", "status": "P", - "detail": "" + "detail": "Navigated to 'apps' tab" }, { - "name": "TAB_COUNT", + "name": "BPMN_PROCESSES", "status": "P", - "detail": "16 tabs" + "detail": "6 processes loaded" }, { - "name": "TAB_overview_RENDER", + "name": "BPMN_AUTOMATION", "status": "P", - "detail": "7724 chars" + "detail": "73% (22/30)" }, { - "name": "TAB_reco_RENDER", + "name": "BPMN_P01", "status": "P", - "detail": "6649 chars" + "detail": "Client Acquisition: 3/5 auto" }, { - "name": "TAB_cortex_RENDER", + "name": "BPMN_P02", "status": "P", - "detail": "3397 chars" + "detail": "AI Request Pipeline: 5/6 auto" }, { - "name": "TAB_pipes_RENDER", + "name": "BPMN_P03", "status": "P", - "detail": "6783 chars" + "detail": "Email Campaign: 1/5 auto" }, { - "name": "TAB_apps_RENDER", + "name": "BPMN_P04", "status": "P", - "detail": "13556 chars" + "detail": "Quality Assurance: 5/5 auto" }, { - "name": "TAB_infra_RENDER", + "name": "BPMN_P05", "status": "P", - "detail": "13669 chars" + "detail": "SSO Authentication: 4/5 auto" }, { - "name": "TAB_ai_RENDER", + "name": "BPMN_P06", "status": "P", - "detail": "2199 chars" + "detail": "Knowledge Pipeline: 4/4 auto" }, { - "name": "TAB_data_RENDER", + "name": "BPMN_TOGGLE", "status": "P", - "detail": "1949 chars" + "detail": "Expand/collapse works" }, { - "name": "TAB_bpmn_RENDER", + "name": "TRIGGER_EXECUTED", "status": "P", - "detail": "18851 chars" + "detail": "Last: 2026-04-05 17:14:13" }, { - "name": "TAB_soa_RENDER", + "name": "TRIGGER_DATA_REFRESHED", "status": "P", - "detail": "17475 chars" + "detail": "2026-04-05 17:13:46 \u2192 2026-04-05 17:14:13" }, { - "name": "TAB_topo_RENDER", + "name": "TAB_overview", "status": "P", - "detail": "32085 chars" + "detail": "h=985px content=7856" }, { - "name": "TAB_log_RENDER", + "name": "TAB_reco", "status": "P", - "detail": "1755 chars" + "detail": "h=1123px content=6649" }, { - "name": "GAUGE_HealthScore_PATTERN", + "name": "TAB_cortex", "status": "P", - "detail": "absolute+flex" + "detail": "h=798px content=3397" }, { - "name": "GAUGE_HealthScore_CENTER", + "name": "TAB_pipes", + "status": "P", + "detail": "h=1223px content=6783" + }, + { + "name": "TAB_apps", + "status": "P", + "detail": "h=845px content=13556" + }, + { + "name": "TAB_infra", + "status": "P", + "detail": "h=953px content=13669" + }, + { + "name": "TAB_ai", + "status": "P", + "detail": "h=469px content=2199" + }, + { + "name": "TAB_data", + "status": "P", + "detail": "h=278px content=1949" + }, + { + "name": "TAB_bpmn", + "status": "P", + "detail": "h=555px content=18851" + }, + { + "name": "TAB_soa", + "status": "P", + "detail": "h=952px content=17475" + }, + { + "name": "TAB_topo", + "status": "P", + "detail": "h=2031px content=32085" + }, + { + "name": "TAB_log", + "status": "P", + "detail": "h=511px content=1968" + }, + { + "name": "CENTER_Health", "status": "P", "detail": "X=0px Y=0px" }, { - "name": "GAUGE_HealthScore_TEXT", - "status": "P", - "detail": "93/100" - }, - { - "name": "GAUGE_AutomationGauge_PATTERN", - "status": "P", - "detail": "absolute+flex" - }, - { - "name": "GAUGE_AutomationGauge_CENTER", + "name": "CENTER_Automation", "status": "P", "detail": "X=0px Y=0px" }, { - "name": "GAUGE_AutomationGauge_TEXT", + "name": "JS_CLEAN", "status": "P", - "detail": "73%" + "detail": "0 errors (11 network 404s filtered)" }, { - "name": "DRILL_MODAL_OPEN", + "name": "TOKEN_PREMIUM", "status": "P", - "detail": "" - }, - { - "name": "DRILL_MODAL_CLOSE", - "status": "P", - "detail": "" - }, - { - "name": "SEARCH_RESULTS", - "status": "P", - "detail": "Found items for 'authentik'" - }, - { - "name": "BPMN_STEPS", - "status": "P", - "detail": "30 steps" - }, - { - "name": "BPMN_STEP_DRILL", - "status": "P", - "detail": "" - }, - { - "name": "SOA_CHIPS", - "status": "P", - "detail": "91 services" - }, - { - "name": "SOA_CHIP_DRILL", - "status": "P", - "detail": "" - }, - { - "name": "TRIGGER_VISIBLE", - "status": "P", - "detail": "" - }, - { - "name": "CONSOLE_CLEAN", - "status": "P", - "detail": "0 JS errors (11 network 404s ignored)" - }, - { - "name": "NETWORK_404", - "status": "W", - "detail": "11 resources returned 404" - }, - { - "name": "TOKEN_BG", - "status": "P", - "detail": "#09090b" - }, - { - "name": "TOKEN_CARD", - "status": "P", - "detail": "#18181b" - }, - { - "name": "TOKEN_FONT", - "status": "P", - "detail": "Inter" + "detail": "bg=#09090b card=#18181b" } ], - "console_errors": [ - "Failed to load resource: the server responded with a status of 404 ()", - "Failed to load resource: the server responded with a status of 404 ()", - "Failed to load resource: the server responded with a status of 404 ()", - "Failed to load resource: the server responded with a status of 404 ()", - "Failed to load resource: the server responded with a status of 404 ()", - "Failed to load resource: the server responded with a status of 404 ()", - "Failed to load resource: the server responded with a status of 404 ()", - "Failed to load resource: the server responded with a status of 404 ()", - "Failed to load resource: the server responded with a status of 404 ()", - "Failed to load resource: the server responded with a status of 404 ()", - "Failed to load resource: the server responded with a status of 404 ()" - ], - "timestamp": "2026-04-05 18:59:13" + "timestamp": "2026-04-05 19:13:46", + "version": "2.0" } \ No newline at end of file diff --git a/api/nonreg-latest.json b/api/nonreg-latest.json index 355c11986..fa373ffb7 100644 --- a/api/nonreg-latest.json +++ b/api/nonreg-latest.json @@ -1 +1 @@ -{"ts": "20260405_191124", "version": "3.2", "score": 100, "pass": 153, "fail": 0, "total": 153, "elapsed": 39.7, "categories": {"S204": {"pass": 9, "fail": 0}, "S95-WV": {"pass": 12, "fail": 0}, "S95-ARS": {"pass": 17, "fail": 0}, "S95-iR": {"pass": 1, "fail": 0}, "INFRA": {"pass": 5, "fail": 0}, "API": {"pass": 27, "fail": 0}, "SEC": {"pass": 4, "fail": 0}, "S95-BK": {"pass": 6, "fail": 0}, "C2-API": {"pass": 4, "fail": 0}, "C2-SPA": {"pass": 1, "fail": 0}, "C2-WV": {"pass": 3, "fail": 0}, "SSO": {"pass": 25, "fail": 0}, "DATA": {"pass": 5, "fail": 0}, "CRONS": {"pass": 2, "fail": 0}, "BLADE": {"pass": 7, "fail": 0}, "LIFE": {"pass": 3, "fail": 0}, "FUNC": {"pass": 7, "fail": 0}, "01AVR": {"pass": 10, "fail": 0}, "STRUCT": {"pass": 5, "fail": 0}}, "failures": []} \ No newline at end of file +{"ts": "20260405_191243", "version": "3.2", "score": 100, "pass": 153, "fail": 0, "total": 153, "elapsed": 39.3, "categories": {"S204": {"pass": 9, "fail": 0}, "S95-WV": {"pass": 12, "fail": 0}, "S95-ARS": {"pass": 17, "fail": 0}, "S95-iR": {"pass": 1, "fail": 0}, "INFRA": {"pass": 5, "fail": 0}, "API": {"pass": 27, "fail": 0}, "SEC": {"pass": 4, "fail": 0}, "S95-BK": {"pass": 6, "fail": 0}, "C2-API": {"pass": 4, "fail": 0}, "C2-SPA": {"pass": 1, "fail": 0}, "C2-WV": {"pass": 3, "fail": 0}, "SSO": {"pass": 25, "fail": 0}, "DATA": {"pass": 5, "fail": 0}, "CRONS": {"pass": 2, "fail": 0}, "BLADE": {"pass": 7, "fail": 0}, "LIFE": {"pass": 3, "fail": 0}, "FUNC": {"pass": 7, "fail": 0}, "01AVR": {"pass": 10, "fail": 0}, "STRUCT": {"pass": 5, "fail": 0}}, "failures": []} \ No newline at end of file diff --git a/api/nonreg-report.html b/api/nonreg-report.html index 8c6d8a795..d58279874 100644 --- a/api/nonreg-report.html +++ b/api/nonreg-report.html @@ -1 +1 @@ -NR 20260405_191124

WEVAL NonReg v3.2 — 20260405_191124

100%

153/153 PASS | 0 FAIL | 39.7s | 10 couches | 4 machines

TestCoucheStDetail
HomeS204PASS200 24KB
WEVIAS204PASS200 148KB
ManagerS204PASS302 1KB
RadarS204PASS200 60KB
ToolsHubS204PASS302 1KB
MonitorS204PASS200 7KB
HuaweiS204PASS200 43KB
DeerFlowS204PASS200 24KB
CRM-HubS204PASS200 17KB
WV-DashS95-WVPASS302 0KB
WV-AppsS95-WVPASS302 0KB
WV-IAS95-WVPASS302 0KB
WV-ProcS95-WVPASS302 0KB
WV-WidgetS95-WVPASS302 0KB
WV-SentS95-WVPASS302 0KB
WV-CtrlS95-WVPASS302 0KB
WV-BrainS95-WVPASS302 0KB
WV-O365S95-WVPASS302 0KB
WV-DelivS95-WVPASS302 0KB
WV-WarmS95-WVPASS302 0KB
WV-SendS95-WVPASS302 0KB
A-ghost-neS95-ARSPASS302 1KB
A-brain-seS95-ARSPASS302 1KB
A-campaignS95-ARSPASS302 1KB
A-growth-eS95-ARSPASS302 1KB
A-deal-pipS95-ARSPASS302 1KB
A-cloud-prS95-ARSPASS302 1KB
A-cloudflaS95-ARSPASS302 1KB
A-dashboarS95-ARSPASS302 1KB
A-send-pipS95-ARSPASS302 1KB
A-harvest-S95-ARSPASS302 1KB
A-command-S95-ARSPASS302 1KB
A-domain-mS95-ARSPASS302 1KB
A-ceo-dashS95-ARSPASS302 1KB
A-reputatiS95-ARSPASS302 1KB
A-newslettS95-ARSPASS302 1KB
A-trackingS95-ARSPASS302 1KB
A-self-heaS95-ARSPASS302 1KB
iResp-RootS95-iRPASS302
EthicaINFRAPASS302 0KB
ConsentINFRAPASS200 9KB
TwentyINFRAPASS302 0KB
n8nINFRAPASS302 0KB
MMINFRAPASS302 0KB
WEVIAAPIPASSJSON 815B
ManifestAPIPASSJSON 2860B
HealthAPIPASSJSON 400B
AEGISAPIPASSJSON 424B
AE-ScAPIPASSJSON 98B
AE-PolAPIPASSJSON 244B
SSAPIPASSJSON 269B
SS-SAPIPASSJSON 313B
SS-RAPIPASSJSON 137B
AIOSAPIPASSJSON 254B
AI-AgAPIPASSJSON 348B
AI-KAPIPASSJSON 281B
OClawAPIPASSJSON 391B
PromAPIPASSJSON 122B
SMemAPIPASSJSON 196B
MstrAPIPASSJSON 211B
DifyAPIPASSJSON 479B
EvoAPIPASSJSON 143B
APcsAPIPASSJSON 125B
GooseAPIPASSJSON 177B
BrUseAPIPASSJSON 24B
EthPAPIPASSJSON 78B
RtrAPIPASSJSON 189B
NR-JSONAPIPASSJSON 774B
CRMAPIPASSJSON 25B
LvMetAPIPASSJSON 91B
MonDshAPIPASSJSON 1528B
IP-WVSECPASSClean
IP-WASECPASSClean
IP-CRMSECPASSClean
NucleiSECPASS0 finds
KumoMTAS95-BKPASSinactive
PMTAS95-BKPASS3 procs (senders standby)
EthDBS95-BKPASS126097 ct
SendDBS95-BKPASS3094652 ct
S95-DskS95-BKPASS77%
DockerS95-BKPASSactive
WhatsAppC2-APIPASSJSON 351B
WA-HookC2-APIPASS403
SpamScoreC2-APIPASS200
WEVADS-IAC2-SPAPASS302 0KB
BlacklistC2-WVPASS302 0KB
WorldDashC2-WVPASS302 0KB
SeedsC2-WVPASS302 0KB
NR-APIC2-APIPASSJSON 774B
SSO-blade-centSSOPASS200
SSO-blade-ai.hSSOPASS200
SSO-claude-monSSOPASS302
SSO-crons-moniSSOPASS200
SSO-monitoringSSOPASS200
SSO-openclaw.hSSOPASS200
SSO-crm.htmlSSOPASS200
SSO-world-map-SSOPASS302
B2B-LeadsDATAPASS1309 leads
LinkedInDATAPASS1423 profiles
Ethica-DZDATAPASS87288 HCPs
Ethica-MADATAPASS19435 HCPs
Ethica-TNDATAPASS17495 HCPs
Ethica-CronsCRONSPASS17 cron entries (crontab-based)
Ethica-ScriptsCRONSPASS15 scripts
Blade-APIBLADEPASSJSON 285B
Blade-BrainBLADEPASS18B
Blade-AIBLADEPASS200
Blade-CtrBLADEPASS200
Sentinel-PS1BLADEPASS200 16KB
Life-APILIFEPASS50B
Life-AppLIFEPASS302 1KB
Life-HTMLLIFEPASS200 24KB
Blade-TGBLADEPASS11B
Blade-MMBLADEPASS108B
WEVIA-ChatFUNCPASSGemini 2.5 Flash 55ch
Life-ChatFUNCPASS36ch
Ethica-ChatFUNCPASS425ch
Monitor-UPFUNCPASS10 services UP
Ollama-LiveFUNCPASS9 models
Arsenal-HPFUNCPASS1377 screens
Ethica-HCPsFUNCPASS126097 HCPs
SSO-BladeSSOPASS200
SSO-MonitorSSOPASS200
SSO-CCSSOPASS302
SSO-NRSSOPASS302
SSO-MTSSOPASS302
SSO-OpsSSOPASS302
SSO-ToolsSSOPASS302
SSO-AppsSSOPASS302
SSO-OClawSSOPASS200
SSO-CRMSSOPASS200
SSO-WkspSSOPASS302
SSO-LifeSSOPASS302
SSO-MegaSSOPASS302
Sub-CRMSSOPASS302
Sub-n8nSSOPASS302
Sub-MMSSOPASS302
Sub-DeerSSOPASS302
DF-Title01AVRPASSTWENTY!
CyberMon01AVRPASS200
Plausible01AVRPASSpresent
Plaus-Blog01AVRPASSpresent
Caps1001AVRPASS10/10
OSS-Disc01AVRPASS200 8805B
EthFeed01AVRPASS126097 HCPs 30 feed
BladeAPI01AVRPASS200 285B
CC-SSO01AVRPASS302
HealthCk01AVRPASSexists
Bench-LB-DictSTRUCTPASStype=list len=201
Bench-LB-ScoresSTRUCTPASSval_type=dict
Bench-EcoSTRUCTPASSscore=80
Bench-AIsSTRUCTPASScount=201
CronStatusSTRUCTPASS10 active 5 disabled
\ No newline at end of file +NR 20260405_191243

WEVAL NonReg v3.2 — 20260405_191243

100%

153/153 PASS | 0 FAIL | 39.3s | 10 couches | 4 machines

TestCoucheStDetail
HomeS204PASS200 24KB
WEVIAS204PASS200 148KB
ManagerS204PASS302 1KB
RadarS204PASS200 60KB
ToolsHubS204PASS302 1KB
MonitorS204PASS200 7KB
HuaweiS204PASS200 43KB
DeerFlowS204PASS200 24KB
CRM-HubS204PASS200 17KB
WV-DashS95-WVPASS302 0KB
WV-AppsS95-WVPASS302 0KB
WV-IAS95-WVPASS302 0KB
WV-ProcS95-WVPASS302 0KB
WV-WidgetS95-WVPASS302 0KB
WV-SentS95-WVPASS302 0KB
WV-CtrlS95-WVPASS302 0KB
WV-BrainS95-WVPASS302 0KB
WV-O365S95-WVPASS302 0KB
WV-DelivS95-WVPASS302 0KB
WV-WarmS95-WVPASS302 0KB
WV-SendS95-WVPASS302 0KB
A-ghost-neS95-ARSPASS302 1KB
A-brain-seS95-ARSPASS302 1KB
A-campaignS95-ARSPASS302 1KB
A-growth-eS95-ARSPASS302 1KB
A-deal-pipS95-ARSPASS302 1KB
A-cloud-prS95-ARSPASS302 1KB
A-cloudflaS95-ARSPASS302 1KB
A-dashboarS95-ARSPASS302 1KB
A-send-pipS95-ARSPASS302 1KB
A-harvest-S95-ARSPASS302 1KB
A-command-S95-ARSPASS302 1KB
A-domain-mS95-ARSPASS302 1KB
A-ceo-dashS95-ARSPASS302 1KB
A-reputatiS95-ARSPASS302 1KB
A-newslettS95-ARSPASS302 1KB
A-trackingS95-ARSPASS302 1KB
A-self-heaS95-ARSPASS302 1KB
iResp-RootS95-iRPASS302
EthicaINFRAPASS302 0KB
ConsentINFRAPASS200 9KB
TwentyINFRAPASS302 0KB
n8nINFRAPASS302 0KB
MMINFRAPASS302 0KB
WEVIAAPIPASSJSON 784B
ManifestAPIPASSJSON 2860B
HealthAPIPASSJSON 400B
AEGISAPIPASSJSON 424B
AE-ScAPIPASSJSON 98B
AE-PolAPIPASSJSON 244B
SSAPIPASSJSON 269B
SS-SAPIPASSJSON 313B
SS-RAPIPASSJSON 137B
AIOSAPIPASSJSON 255B
AI-AgAPIPASSJSON 348B
AI-KAPIPASSJSON 281B
OClawAPIPASSJSON 391B
PromAPIPASSJSON 122B
SMemAPIPASSJSON 196B
MstrAPIPASSJSON 211B
DifyAPIPASSJSON 479B
EvoAPIPASSJSON 143B
APcsAPIPASSJSON 125B
GooseAPIPASSJSON 177B
BrUseAPIPASSJSON 24B
EthPAPIPASSJSON 78B
RtrAPIPASSJSON 189B
NR-JSONAPIPASSJSON 774B
CRMAPIPASSJSON 25B
LvMetAPIPASSJSON 91B
MonDshAPIPASSJSON 1526B
IP-WVSECPASSClean
IP-WASECPASSClean
IP-CRMSECPASSClean
NucleiSECPASS0 finds
KumoMTAS95-BKPASSinactive
PMTAS95-BKPASS3 procs (senders standby)
EthDBS95-BKPASS126097 ct
SendDBS95-BKPASS3094652 ct
S95-DskS95-BKPASS77%
DockerS95-BKPASSactive
WhatsAppC2-APIPASSJSON 351B
WA-HookC2-APIPASS403
SpamScoreC2-APIPASS200
WEVADS-IAC2-SPAPASS302 0KB
BlacklistC2-WVPASS302 0KB
WorldDashC2-WVPASS302 0KB
SeedsC2-WVPASS302 0KB
NR-APIC2-APIPASSJSON 774B
SSO-blade-centSSOPASS200
SSO-blade-ai.hSSOPASS200
SSO-claude-monSSOPASS302
SSO-crons-moniSSOPASS200
SSO-monitoringSSOPASS200
SSO-openclaw.hSSOPASS200
SSO-crm.htmlSSOPASS200
SSO-world-map-SSOPASS302
B2B-LeadsDATAPASS1309 leads
LinkedInDATAPASS1423 profiles
Ethica-DZDATAPASS87288 HCPs
Ethica-MADATAPASS19435 HCPs
Ethica-TNDATAPASS17495 HCPs
Ethica-CronsCRONSPASS17 cron entries (crontab-based)
Ethica-ScriptsCRONSPASS15 scripts
Blade-APIBLADEPASSJSON 285B
Blade-BrainBLADEPASS18B
Blade-AIBLADEPASS200
Blade-CtrBLADEPASS200
Sentinel-PS1BLADEPASS200 16KB
Life-APILIFEPASS50B
Life-AppLIFEPASS302 1KB
Life-HTMLLIFEPASS200 24KB
Blade-TGBLADEPASS11B
Blade-MMBLADEPASS108B
WEVIA-ChatFUNCPASSCerebras Qwen-235B 309ch
Life-ChatFUNCPASS36ch
Ethica-ChatFUNCPASS216ch
Monitor-UPFUNCPASS10 services UP
Ollama-LiveFUNCPASS9 models
Arsenal-HPFUNCPASS1377 screens
Ethica-HCPsFUNCPASS126097 HCPs
SSO-BladeSSOPASS200
SSO-MonitorSSOPASS200
SSO-CCSSOPASS302
SSO-NRSSOPASS302
SSO-MTSSOPASS302
SSO-OpsSSOPASS302
SSO-ToolsSSOPASS302
SSO-AppsSSOPASS302
SSO-OClawSSOPASS200
SSO-CRMSSOPASS200
SSO-WkspSSOPASS302
SSO-LifeSSOPASS302
SSO-MegaSSOPASS302
Sub-CRMSSOPASS302
Sub-n8nSSOPASS302
Sub-MMSSOPASS302
Sub-DeerSSOPASS302
DF-Title01AVRPASSTWENTY!
CyberMon01AVRPASS200
Plausible01AVRPASSpresent
Plaus-Blog01AVRPASSpresent
Caps1001AVRPASS10/10
OSS-Disc01AVRPASS200 8805B
EthFeed01AVRPASS126097 HCPs 30 feed
BladeAPI01AVRPASS200 285B
CC-SSO01AVRPASS302
HealthCk01AVRPASSexists
Bench-LB-DictSTRUCTPASStype=list len=201
Bench-LB-ScoresSTRUCTPASSval_type=dict
Bench-EcoSTRUCTPASSscore=80
Bench-AIsSTRUCTPASScount=201
CronStatusSTRUCTPASS10 active 5 disabled
\ No newline at end of file diff --git a/wevia-ux-v3.js b/wevia-ux-v3.js index da007028a..a4df8e22c 100644 --- a/wevia-ux-v3.js +++ b/wevia-ux-v3.js @@ -89,89 +89,7 @@ if(wsub)wsub.textContent='IA souveraine \u2014 13 providers \u2014 R1 671B \u201 document.createElement('div').id='wx5';document.body.appendChild(document.getElementById('wx5')||Object.assign(document.createElement('div'),{id:'wx5'})); })(); -/* WEVIA Stream Premium — Rich response rendering */ -(function(){ -if(document.getElementById('wsp'))return; -var s=document.createElement('style'); -s.textContent=` -/* RICH MESSAGE RENDERING */ -.msg-assistant{font-family:'Plus Jakarta Sans','DM Sans',sans-serif!important} -.msg-assistant pre{background:rgba(0,0,0,0.3)!important;border:1px solid rgba(255,255,255,0.08)!important;border-radius:10px!important;padding:14px!important;overflow-x:auto!important;font-size:12px!important;line-height:1.5!important} -.msg-assistant code{font-family:'JetBrains Mono',monospace!important;font-size:12px!important;background:rgba(255,255,255,0.06)!important;padding:1px 5px!important;border-radius:4px!important} -.msg-assistant pre code{background:none!important;padding:0!important} -.msg-assistant h1,.msg-assistant h2,.msg-assistant h3{color:#64dca0!important;font-weight:600!important;margin:12px 0 6px!important} -.msg-assistant h1{font-size:18px!important;border-bottom:1px solid rgba(255,255,255,0.08)!important;padding-bottom:6px!important} -.msg-assistant h2{font-size:15px!important} -.msg-assistant h3{font-size:13px!important;color:rgba(255,255,255,0.5)!important} -.msg-assistant strong{color:#e8e8e8!important} -.msg-assistant ul,.msg-assistant ol{padding-left:20px!important;margin:6px 0!important} -.msg-assistant li{margin:3px 0!important;line-height:1.5!important} -.msg-assistant table{border-collapse:collapse!important;width:100%!important;margin:8px 0!important;font-size:12px!important} -.msg-assistant th{background:rgba(100,220,160,0.1)!important;color:#64dca0!important;padding:6px 10px!important;text-align:left!important;font-weight:600!important;border-bottom:1px solid rgba(255,255,255,0.1)!important} -.msg-assistant td{padding:5px 10px!important;border-bottom:1px solid rgba(255,255,255,0.04)!important} -.msg-assistant tr:hover td{background:rgba(255,255,255,0.02)!important} -/* ACTION BADGES */ -.action-badge{display:inline-flex;align-items:center;gap:4px;padding:3px 10px;border-radius:8px;font-size:11px;font-weight:500;margin:2px 4px 2px 0} -.action-badge.exec{background:rgba(100,220,160,0.1);color:#64dca0;border:1px solid rgba(100,220,160,0.2)} -.action-badge.error{background:rgba(255,80,80,0.1);color:#ff5050;border:1px solid rgba(255,80,80,0.2)} -.action-badge.info{background:rgba(80,160,255,0.1);color:#50a0ff;border:1px solid rgba(80,160,255,0.2)} -/* STATS CARDS */ -.stat-row{display:flex;gap:8px;margin:8px 0;flex-wrap:wrap} -.stat-card{background:rgba(255,255,255,0.03);border:1px solid rgba(255,255,255,0.06);border-radius:10px;padding:10px 14px;flex:1;min-width:100px;text-align:center} -.stat-card .stat-value{font-size:20px;font-weight:700;color:#64dca0} -.stat-card .stat-label{font-size:10px;color:rgba(255,255,255,0.35);text-transform:uppercase;letter-spacing:1px;margin-top:2px} -/* PROGRESS */ -.stream-progress{display:flex;align-items:center;gap:8px;padding:8px 12px;background:rgba(255,255,255,0.02);border-radius:8px;margin:4px 0;font-size:12px;color:rgba(255,255,255,0.4)} -.stream-progress .dot{width:6px;height:6px;border-radius:50%;background:#64dca0;animation:blink 1.2s infinite} -@keyframes blink{0%,100%{opacity:1}50%{opacity:0.2}} -/* COPY BUTTON */ -.copy-btn{position:absolute;top:6px;right:6px;background:rgba(255,255,255,0.08);border:none;border-radius:4px;color:rgba(255,255,255,0.4);padding:3px 8px;font-size:10px;cursor:pointer;opacity:0;transition:opacity .2s} -pre:hover .copy-btn{opacity:1} -.copy-btn:hover{color:#fff;background:rgba(255,255,255,0.15)} -`; -document.head.appendChild(s); - -// Post-process messages: convert markdown-like to rich HTML -var observer = new MutationObserver(function(mutations){ - mutations.forEach(function(m){ - m.addedNodes.forEach(function(node){ - if(node.nodeType===1 && (node.classList.contains('msg')||node.classList.contains('bubble')||node.querySelector)){ - // Find text content that looks like markdown - var el = node.classList.contains('msg-assistant') ? node : node.querySelector('.msg-assistant,.assistant'); - if(!el||el.dataset.rendered) return; - - var html = el.innerHTML; - // Convert ```code blocks``` - html = html.replace(/```(\w*)\n?([\s\S]*?)```/g, function(m,lang,code){ - return '
'+code.trim()+'
'; - }); - // Convert **bold** - html = html.replace(/\*\*([^*]+)\*\*/g, '$1'); - // Convert `inline code` - html = html.replace(/`([^`]+)`/g, '$1'); - // Convert ## headers - html = html.replace(/^### (.+)$/gm, '

$1

'); - html = html.replace(/^## (.+)$/gm, '

$1

'); - html = html.replace(/^# (.+)$/gm, '

$1

'); - // Convert - lists - html = html.replace(/^- (.+)$/gm, '
  • $1
  • '); - - if(html !== el.innerHTML){ - el.innerHTML = html; - el.dataset.rendered = '1'; - } - } - }); - }); -}); - -var chatArea = document.querySelector('.chat-messages,.messages,.chat-area'); -if(chatArea){ - observer.observe(chatArea, {childList:true, subtree:true}); -} - -var d=document.createElement('div');d.id='wsp';document.body.appendChild(d); })();