File size: 2,932 Bytes
053ee0d d256fda 053ee0d 9f9873b 053ee0d 9f9873b 053ee0d ea20131 053ee0d d256fda 053ee0d d4e1d86 053ee0d d256fda 053ee0d d4e1d86 053ee0d | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 | let currentTokens = [];
let streamBuffer = "";
export function appendToken(token) {
streamBuffer += token;
currentTokens.push(token);
const display = document.getElementById("stream-display");
if (display) {
display.textContent = cleanVisibleStream(streamBuffer);
display.scrollTop = display.scrollHeight;
}
}
export function setStatus(text, type = "neutral") {
const el = document.getElementById("status-text");
const phase = document.getElementById("stream-phase");
if (el) {
el.textContent = text;
el.className = `status-${type}`;
}
if (phase) {
phase.textContent = text;
phase.className = `status-${type}`;
}
}
export function setVerifierStatus(verdict) {
const el = document.getElementById("verifier-status");
if (!el) return;
const labels = {
IDLE: "Verifier idle",
PASS: "Verified",
FIX: "Fixed",
REWRITE: "Rewritten",
ERROR: "Verifier error",
CHECKING: "Verifying...",
};
el.textContent = labels[verdict] || "";
el.className = `verdict-${String(verdict || "idle").toLowerCase()}`;
}
export async function rollbackAndReplace(correctedCode, reason, verdict = "FIX") {
const display = document.getElementById("stream-display");
if (!display) return;
display.classList.add("rollback-flash");
setVerifierStatus(verdict);
setStatus(`Verifier corrected: ${reason}`, "warning");
await sleep(450);
display.classList.remove("rollback-flash");
display.textContent = "";
streamBuffer = correctedCode;
currentTokens = [];
for (let i = 0; i < correctedCode.length; i += 1) {
display.textContent += correctedCode[i];
if (i % 5 === 0) await sleep(8);
}
setVerifierStatus("PASS");
setStatus("Corrected block verified", "success");
}
export function getCurrentCode() {
return cleanVisibleStream(streamBuffer);
}
export function setCode(code) {
streamBuffer = code;
currentTokens = [];
const display = document.getElementById("stream-display");
if (display) {
display.textContent = code;
display.scrollTop = display.scrollHeight;
}
}
export function reset() {
streamBuffer = "";
currentTokens = [];
const display = document.getElementById("stream-display");
if (display) display.textContent = "";
const tokenCount = document.getElementById("token-count");
if (tokenCount) tokenCount.textContent = "0 tok/s";
}
function sleep(ms) {
return new Promise((resolve) => setTimeout(resolve, ms));
}
function cleanVisibleStream(code) {
if (typeof window.stripMarkdownCodeFence === "function") {
return window.stripMarkdownCodeFence(code);
}
return code;
}
Object.assign(window, {
appendToken,
setStatus,
setVerifierStatus,
rollbackAndReplace,
getCurrentCode,
setCode,
reset,
});
|