@ai37/copilotkit-md-renderer
v0.1.1
Published
CopilotKit assistant markdown renderer with KaTeX formula support, built on Streamdown. KaTeX core + extension points.
Readme
@ai37/copilotkit-md-renderer
Рендерер markdown ответов ассистента для CopilotKit v2 с поддержкой
KaTeX-формул ($…$ / $$…$$) и безопасным sanitize. Обёртка над
streamdown.
Ядро + точки расширения: компонент владеет порядком рехайп-пайплайна
[rehypeKatex, …extra, rehypeSanitize], а приложение добавляет свои плагины/схему
снаружи, не форкая компонент.
Установка
pnpm add @ai37/copilotkit-md-renderer
# peer: react ^18 || ^19Важно: пакет не несёт CSS KaTeX. Подключи стили один раз в корне приложения:
import "katex/dist/katex.min.css"Использование
Слот рендерера ассистента <CopilotChat>:
import { AssistantMarkdown } from "@ai37/copilotkit-md-renderer"
<CopilotChat
chatView={{
messageView: {
assistantMessage: { markdownRenderer: AssistantMarkdown },
},
}}
/>Точки расширения
| Проп | Назначение |
| --- | --- |
| content: string | Markdown-источник. |
| extraRemarkPlugins?: PluggableList | Доп. remark-плагины, ПОСЛЕ remark-math. |
| extraRehypePlugins?: PluggableList | Доп. rehype-плагины, ПОСЛЕ rehype-katex и ПЕРЕД rehype-sanitize. |
| sanitizeSchema?: Schema | Схема финального sanitize. По умолчанию katexSchema. |
remarkPlugins/rehypePlugins намеренно недоступны — базовый KaTeX-пайплайн
заменить нельзя, только дополнить.
Пример: своя rehype-надстройка
Если extra-плагин эмитит свою разметку, разреши её в sanitizeSchema (иначе
sanitize её срежет):
import { AssistantMarkdown, katexSchema } from "@ai37/copilotkit-md-renderer"
import type { Schema } from "hast-util-sanitize"
import { myRehypePlugin } from "./myRehypePlugin"
const schema: Schema = {
...katexSchema,
tagNames: [...(katexSchema.tagNames ?? []), "section"],
attributes: {
...katexSchema.attributes,
"*": [...((katexSchema.attributes?.["*"] as string[]) ?? []), "data-foo"],
},
}
function MyRenderer(props: { content: string }) {
return (
<AssistantMarkdown
{...props}
extraRehypePlugins={[myRehypePlugin]}
sanitizeSchema={schema}
/>
)
}Спредь
katexSchema.attributesцеликом — иначе потеряются per-tag KaTeX-атрибуты и формулы сломаются.
Экспорты
AssistantMarkdown,AssistantMarkdownPropskatexSchema— KaTeX-friendly схема sanitize (база для расширения)MATHML_TAGS— список MathML-тегов, которые эмитит KaTeX
License
Apache-2.0
