diff --git a/dashboard/index.html b/dashboard/index.html
index f08ec95..8a32984 100644
--- a/dashboard/index.html
+++ b/dashboard/index.html
@@ -35,12 +35,21 @@
Promptimprover Swarm Dashboard
const tr = document.createElement('tr');
const fmtTime = new Date(log.timestamp).toLocaleTimeString();
const reason = log.reasoning_path && log.reasoning_path.length > 60 ? log.reasoning_path.slice(0,57) + '...' : log.reasoning_path;
- ['time', 'span', 'persona', 'action', 'tokens', 'reasoning'].forEach((k, i) => {
- const td = document.createElement('td');
- const values = [fmtTime, log.span_id || 'N/A', log.persona || 'Unknown', log.action_type || 'Unknown', log.metrics?.total_tokens || 0, reason || ''];
- td.textContent = values[i];
- tr.appendChild(td);
- });
+ const escapeHtml = (unsafe) => (unsafe || '').toString()
+ .replace(/&/g, "&")
+ .replace(//g, ">")
+ .replace(/"/g, """)
+ .replace(/'/g, "'");
+
+ tr.innerHTML = `
+ ${escapeHtml(fmtTime)} |
+ ${escapeHtml(log.span_id || 'N/A')} |
+ ${escapeHtml(log.persona || 'Unknown')} |
+ ${escapeHtml(log.action_type || 'Unknown')} |
+ ${escapeHtml(log.metrics?.total_tokens || 0)} |
+ ${escapeHtml(reason || '')} |
+ `;
tbody.appendChild(tr);
});
}