import { marked } from 'marked' import DOMPurify from 'dompurify' /** * Render a markdown string to safe, sanitized HTML. * * Used by the AI chat drawer to render assistant responses. Even though * the AI provider controls the immediate source of the content, the model * can echo anything it's fed — including user input from earlier in the * conversation or tool results from the database. We therefore parse * markdown → HTML via marked and then sanitize the result with DOMPurify * before handing it to Vue's v-html. * * Marked is configured with: * - gfm: true — GitHub-flavored markdown (tables, fenced code, * strikethrough, task lists). Matches what users * already expect from any modern chat UI. * - breaks: true — newlines become
so a single user-typed line * break renders as a visual break without needing * two trailing spaces. * - async: false — force synchronous parsing so the caller doesn't * have to await; marked defaults to returning a * Promise when extensions are registered. * * DOMPurify is run in its default browser profile which strips