From c212a0a34e6373680990b8432ddbb2477647563b Mon Sep 17 00:00:00 2001 From: Deploy Bot Date: Mon, 25 May 2026 22:31:32 +0100 Subject: [PATCH] fix(build): remove broken heatmap string replacement - build-standalone-fixed.cjs: removed renderHeatmap() replacement block - The replacement used string concatenation with '\'' which broke single quotes in generated HTML, causing SyntaxError: unexpected token - Original renderHeatmap() in index.html uses template literals (`...`) which are safe and already contain showCellDetail onclick handler - Rebuilt index.standalone.html from fixed source - Zero console errors, zero JS syntax errors verified on port 3003 --- agent-evolution/index.standalone.html | 7003 +++++++++++++++++ .../scripts/build-standalone-fixed.cjs | 111 +- 2 files changed, 7004 insertions(+), 110 deletions(-) create mode 100644 agent-evolution/index.standalone.html diff --git a/agent-evolution/index.standalone.html b/agent-evolution/index.standalone.html new file mode 100644 index 0000000..7c05374 --- /dev/null +++ b/agent-evolution/index.standalone.html @@ -0,0 +1,7003 @@ + + + + + + APAW Agent Evolution Dashboard + + + + + + +
+
+

APAW Agent Evolution

+
Real-time agent model & performance tracking
+
+ Loading... + โ€ข + 0 agents + โ€ข + 0 with history +
+
+ +
+ + + + + + +
+ + +
+
+ +
+
+

Recent Changes

+ 0 +
+
+
+
+
+ +
+
+

Pending Recommendations

+ 0 +
+
+
+
+ + +
+ +
+ + + + + + + +
+
+
+ + +
+
+

Evolution Timeline

+
+
+
+ + +
+
+ + + +
+
+
+ + +
+
+
Agent ร— Model Compatibility Heatmap
+
Weighted score = benchmark ร— instruction-following multiplier ยท โ˜… = best fit ยท outlined = current ยท click for details
+
+
+
+
+ 100806040200 +
+
+ โ†‘ Ideal Match + Mismatch โ†“ +
+
+
+
+ + +
+
+ + +
+
Agent Performance Scores
+
Composite score per agent based on model benchmarks
+
+
+ + +
+
+
Model Distribution
+
Agents per model
+
+
+
+
Migration Impact
+
Before vs after model change score
+
+
+
+
+
+ + + + + + + + +
+
+
Applying Fixes...
+
+
+
+
Preparing...
+
+

+ +
+
+
+ + + + + +
+ + + + + + + + + + \ No newline at end of file diff --git a/agent-evolution/scripts/build-standalone-fixed.cjs b/agent-evolution/scripts/build-standalone-fixed.cjs index ed71fa0..09eb492 100644 --- a/agent-evolution/scripts/build-standalone-fixed.cjs +++ b/agent-evolution/scripts/build-standalone-fixed.cjs @@ -93,116 +93,7 @@ async function init() { html = html.substring(0, initStart.index) + newInit + html.substring(endIdx); } - // ---------- Replace renderHeatmap function ---------- - const heatmapStartPattern = /function renderHeatmap\(\)\s*\{/; - const heatmapStart = html.match(heatmapStartPattern); - if (heatmapStart) { - let brace = 0, inFn = false, endIdx = heatmapStart.index; - for (let i = heatmapStart.index; i < html.length; i++) { - if (html[i] === '{') { brace++; inFn = true; } - else if (html[i] === '}') { brace--; if (inFn && brace === 0) { endIdx = i + 1; break; } } - } - - const newHeatmap = `// Render Heatmap (read from agentData.model_benchmarks) -function renderHeatmap() { - const agents = Object.entries(agentData.agents); - if (agents.length === 0) return; - - // Build unique model list from all agents - const modelSet = new Set(); - const modelIfScores = {}; - agents.forEach(([_, a]) => { - const model = a.current.model; - if (model) { - modelSet.add(model); - // Try to get IF score from benchmark, default to 70 - modelIfScores[model] = a.current.benchmark?.instruction_following || 70; - } - }); - - // Build hmModels array - const hmModels = [...modelSet].map(m => { - // Extract short name from full model ID - let shortName = m; - if (m.includes('qwen3-coder')) shortName = 'Qwen3-Coder'; - else if (m.includes('glm-')) shortName = m.includes('5.1') ? 'GLM-5.1' : 'GLM-5'; - else if (m.includes('nemotron')) shortName = m.includes('nano') ? 'Nem. Nano' : 'Nem. Super'; - else if (m.includes('minimax')) shortName = 'MiniMax M2.5'; - else if (m.includes('kimi')) shortName = 'Kimi K2.6'; - else if (m.includes('deepseek')) shortName = 'DeepSeek V3'; - else if (m.includes('qwen3.5')) shortName = 'Qwen3.5'; - else if (m.includes('gemma4')) shortName = 'Gemma4'; - - // Provider - let provider = 'Ollama'; - if (m.includes('cloud') || m.includes('ollama-cloud')) provider = 'Ollama Cloud'; - else if (m.includes('openrouter')) provider = 'OpenRouter'; - else if (m.includes('groq')) provider = 'Groq'; - - return { - n: shortName, - p: provider, - if: modelIfScores[m] || 70, - full: m - }; - }); - - // Build hmAgents array with scores per model - const hmAgents = agents.map(([name, agent]) => { - const currentModel = agent.current.model; - const currentIdx = hmModels.findIndex(m => m.full === currentModel); - const fitScore = agent.current.benchmark?.fit_score || 70; - - // Generate scores per model using hash-based randomization - const scores = hmModels.map((m, idx) => { - if (m.full === currentModel) return fitScore; - // Hash-based pseudo-random score between 50-75 - const hash = (name + m.full).split('').reduce((a, c) => a + c.charCodeAt(0), 0); - return 50 + (hash % 26); - }); - - return { - n: name, - c: currentIdx, - s: scores - }; - }); - - // Render the table - const t = document.getElementById('hmTable'); - let h = 'Agent'; - hmModels.forEach(m => { - const ifColor = m.if >= 85 ? '#00ff94' : m.if >= 75 ? '#facc15' : '#ff6b81'; - h += '' + - m.n + '
' + - '' + m.p + '
' + - 'IF:' + m.if + '' + - ''; - }); - h += ''; - - hmAgents.forEach(ag => { - const mx = Math.max(...ag.s); - h += '' + ag.n + ''; - ag.s.forEach((s, j) => { - const best = s === mx; - const cur = j === ag.c; - const ifLow = hmModels[j].if < 75; - let marks = ''; - if (best) marks += 'โ˜…'; - if (ifLow) marks += 'โš '; - h += '' + s + marks + ''; - }); - h += ''; - }); - t.innerHTML = h + ''; -}`; - - html = html.substring(0, heatmapStart.index) + newHeatmap + html.substring(endIdx); - } + // ---------- Heatmap: original renderHeatmap() in index.html is correct ---------- // ---------- Replace renderRecommendations function ---------- const recStartPattern = /function renderRecommendations\(\)\s*\{/;