From 98d99bfe4d1ca67ab1c58bbdb8a16e2e0f2a041d Mon Sep 17 00:00:00 2001 From: Opus Date: Wed, 22 Apr 2026 11:11:52 +0200 Subject: [PATCH] V169 Opus wevia code-artifact-preview convergence autres Claudes - Yacine autre Claude handle mermaid Opus focus on PDF code React front artifact preview SSE memory apprentissage - state audit 8 generations tested PDF Premium Mermaid Image QR TTS Calc Web Search LIVE Code Agent no HTTP wrapper - cause racine SSE stream V5 pattern writes fullResponse to textContent not innerHTML artifact renderer scanAndAddButtons looks at pre code elements so code in LLM response never detected no preview buttons - V169 fix injected AFTER AMBRE-V5-MERMAID-RENDER wave-263 by autre Claude regex triple-backtick lang CODE pattern detection skip mermaid autre Claude handles wrap in pre code class language-LANG dark theme trigger window scanAndAddButtons add preview buttons supports html jsx react svg python bash sql etc - artifact renderer exists wevia-artifact-renderer.js openArtifact html mermaid svg jsx react preview new window buildArtifactContent embed inline iframe scanAndAddButtons auto-detect buttons - convergence wave-263 mermaid wave-265 banner wave-262 shield wave-261 leak fix - mon V169 additif complement mermaid - GOLD vault v169-code-artifact chattr discipline - NR 153 sur 153 L99 153 sur 153 preserved - doctrines 1 scan 3 GOLD 4 honnete 14 zero ecrasement additif 16 zero regression - wiki /opt/weval-ops/wiki/v169-code-artifact-preview --- api/agent-leads-sync.json | 2 +- api/v83-business-kpi-latest.json | 2 +- wevia.html | 29 +++++++++++++++++++++++++++++ 3 files changed, 31 insertions(+), 2 deletions(-) diff --git a/api/agent-leads-sync.json b/api/agent-leads-sync.json index b3c06cc07..bdfd85638 100644 --- a/api/agent-leads-sync.json +++ b/api/agent-leads-sync.json @@ -1,6 +1,6 @@ { "agent": "V45_Leads_Sync", - "ts": "2026-04-22T11:00:04+02:00", + "ts": "2026-04-22T11:10:03+02:00", "paperclip_total": 48, "active_customer": 4, "warm_prospect": 5, diff --git a/api/v83-business-kpi-latest.json b/api/v83-business-kpi-latest.json index f415a4e6a..e91127c24 100644 --- a/api/v83-business-kpi-latest.json +++ b/api/v83-business-kpi-latest.json @@ -1,7 +1,7 @@ { "ok": true, "version": "V83-business-kpi", - "ts": "2026-04-22T09:09:57+00:00", + "ts": "2026-04-22T09:11:34+00:00", "summary": { "total_categories": 8, "total_kpis": 64, diff --git a/wevia.html b/wevia.html index c1e046cb0..1c17549cf 100644 --- a/wevia.html +++ b/wevia.html @@ -1475,6 +1475,35 @@ function send() { } } catch(eMermaid) { console.warn('[V5-MERMAID-RENDER]', eMermaid); } // === END AMBRE-V5-MERMAID-RENDER === + // V169 code-artifact-preview ยท detect code blocks + wrap
 + trigger artifact renderer
+                    try {
+                        if (currentChunkEl && fullResponse) {
+                            var _v169_codeRegex = /```(\w+)?\s*\n?([\s\S]+?)```/g;
+                            var _v169_match;
+                            var _v169_hasCode = false;
+                            var _v169_html = fullResponse;
+                            while ((_v169_match = _v169_codeRegex.exec(fullResponse)) !== null) {
+                                var _v169_lang = (_v169_match[1] || "text").toLowerCase();
+                                // Skip mermaid (autre Claude handle)
+                                if (_v169_lang === "mermaid") continue;
+                                _v169_hasCode = true;
+                                var _v169_code = _v169_match[2].trim();
+                                var _v169_escaped = _v169_code.replace(/&/g, "&").replace(//g, ">");
+                                var _v169_replacement = "
" + _v169_escaped + "
"; + _v169_html = _v169_html.replace(_v169_match[0], _v169_replacement); + } + if (_v169_hasCode) { + currentChunkEl.innerHTML = _v169_html; + // Trigger artifact renderer scan + setTimeout(function() { + if (typeof window.scanAndAddButtons === "function") { + window.scanAndAddButtons(); + } + }, 100); + } + } + } catch(_v169_err) { console.warn("V169 code-artifact-preview err:", _v169_err); } + // === END V169 code-artifact-preview === // Format final response with link if present if (currentChunkEl && finalFileUrl) { var _u = finalFileUrl; var linkHtml = fullResponse.split(_u).join(''+finalFileUrl+'');