// ── Utility Functions ───────────────────────────────────────── function escapeHtml(str) { const div = document.createElement("div"); div.textContent = str ?? ""; return div.innerHTML; } function createMaterialIcon(name, className = "material-icons-round") { const icon = document.createElement("span"); icon.className = className; icon.textContent = name; return icon; } function buildFileAttachmentLink(file, onOpen) { const link = document.createElement("a"); link.href = "#"; link.className = "file-attachment-link"; link.title = file?.name || "attachment"; link.appendChild(createMaterialIcon("insert_drive_file")); const label = document.createElement("span"); label.textContent = file?.name || "attachment"; link.appendChild(label); link.addEventListener("click", (e) => { e.preventDefault(); if (typeof onOpen === "function") { onOpen(); } }); return link; } // ── Marked.js Configuration ────────────────────────────────── if (typeof marked !== "undefined") { const safeMarkedRenderer = new marked.Renderer(); safeMarkedRenderer.html = function (token) { if (typeof token === "string") { return escapeHtml(token); } return escapeHtml(token?.text ?? token?.raw ?? ""); }; marked.setOptions({ breaks: true, gfm: true, renderer: safeMarkedRenderer, highlight: function (code, lang) { if (typeof hljs !== "undefined" && lang && hljs.getLanguage(lang)) { try { return hljs.highlight(code, { language: lang }).value; } catch (e) { /* fallback */ } } return code; }, }); } function truncate(str, maxLen) { if (!str) return ""; return str.length > maxLen ? str.slice(0, maxLen) + "…" : str; } function fmtTokens(n) { if (n >= 1000) return (n / 1000).toFixed(1).replace(/\.0$/, "") + "k"; return String(n); } function usageTier(pct) { if (pct < 40) return "low"; if (pct < 70) return "mid"; if (pct < 90) return "high"; return "crit"; } function usageColor(pct) { if (pct < 40) return "#4ade80"; if (pct < 70) return "var(--shiba-gold)"; if (pct < 90) return "#f97316"; return "#ef4444"; } function buildTokenCard(t) { const pct = t.usage_pct || 0; const tier = usageTier(pct); return `
| System Prompt | ~${(t.system_prompt || 0).toLocaleString()} |
| Tool definitions | ~${(t.tools || 0).toLocaleString()} |
| Session messages | ~${(t.messages || 0).toLocaleString()} |
| Total | ~${(t.total || 0).toLocaleString()} |