agent: foundation — sync incremental changes from legacy codebase

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
jake
2026-03-21 10:50:32 +00:00
parent 387e7d7acc
commit 4c0fd0aeda
10 changed files with 22 additions and 15 deletions

View File

@@ -54,6 +54,10 @@ function toCSV(segments) {
return csv;
}
function escapeHtml(str) {
return str.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;');
}
function toHTML(text, segments) {
let html = `<!DOCTYPE html>
<html lang="en">
@@ -67,7 +71,6 @@ function toHTML(text, segments) {
.segment { display: flex; gap: 1rem; padding: 0.4rem 0; }
.timestamp { color: #9a9486; font-size: 0.8rem; min-width: 3rem; font-variant-numeric: tabular-nums; padding-top: 0.15rem; }
.text { flex: 1; }
.starred { border-left: 3px solid #e8a87c; padding-left: 0.5rem; }
</style>
</head>
<body>
@@ -83,11 +86,10 @@ function toHTML(text, segments) {
for (const seg of segments) {
const mins = Math.floor(seg.start / 60);
const secs = Math.floor(seg.start % 60);
const starClass = seg.starred ? ' starred' : '';
html += `<div class="segment${starClass}"><span class="timestamp">${pad(mins)}:${pad(secs)}</span><span class="text">${seg.text.trim()}</span></div>\n`;
html += `<div class="segment"><span class="timestamp">${pad(mins)}:${pad(secs)}</span><span class="text">${escapeHtml(seg.text.trim())}</span></div>\n`;
}
} else {
html += `<p>${text.replace(/\n/g, "<br>")}</p>`;
html += `<p>${escapeHtml(text).replace(/\n/g, "<br>")}</p>`;
}
html += `</body></html>`;
return html;