# LLM 마크다운을 깨지지 않게 채팅 채널로

> LLM 이 쓴 마크다운을 깨지지 않게 텔레그램 · 슬랙 · GitHub 로 보낸다 — 고치고, 채널에 맞게 렌더하고, 한도 안에서 나눈다. 스트리밍까지. Rust · npm(WASM) · Go · CLI.

HTML: https://mdwire.minjun.dev/ko/

mdwire 는 **렌더러가 아니라 브릿지다.** 에이전트가 쓴 마크다운을 받아, 채널마다 그 채널이
실제로 받는 문법으로 넘긴다 — 고치고, 이스케이프하고, 길이 한도 안에서 나눠서. 그려 주는
것은 여전히 채널의 몫이다.

```
LLM 마크다운  →  정규화  →  채널별 렌더  →  안전한 분할  →  전송
```

1. **정규화.** 에이전트 출력은 온전하지 않다. 짝 없는 `**`, 줄을 접어 쓴 글에서 줄을 넘는 강조,
   닫히지 않은 코드펜스. 렌더하기 전에 고친다.
2. **렌더.** 채널이 받는 문법으로 낸다. 텔레그램 HTML 은 태그 아홉 개만 받고, 슬랙
   `markdown_text` 는 표준 마크다운을 그대로 받는다.
3. **분할.** 채널의 한도를 지키되 마크업 한가운데를 자르지 않는다 — 스트리밍에서도 조각
   경계가 `**굵게**` 안에 떨어지면 안 된다.

## 대상

텔레그램 HTML, 슬랙 `markdown_text`, GitHub 코멘트(GFM), 노션 페이지, 평문, 브라우저용
HTML. 구현은 Rust 코어, CLI, npm 패키지(WASM), 그리고 같은 코퍼스를 통과하는 Go 이식이 있다.

## 써 보기

[데모](https://mdwire.minjun.dev/ko/demo/)는 npm 패키지를 브라우저에서 돌린다. 에이전트 답 하나를
[텔레그램용과 슬랙용으로 나란히 옮겨 보고](https://mdwire.minjun.dev/ko/demo/channels/), 같은 답을
[렌더러 다섯에 흘려 보고](https://mdwire.minjun.dev/ko/demo/streaming/), 깨진 에이전트 출력을
[정규화 전후](https://mdwire.minjun.dev/ko/demo/repair/)로 맞대 본다.

## 설치

```sh
npm install @minjun0219/mdwire     # npm — 번들러, Node, Bun
cargo add mdwire-core              # Rust 라이브러리 (`use mdwire::…`)
cargo install mdwire-cli           # `mdwire` CLI
go get github.com/minjun0219/mdwire/go@latest
```

[문서](https://mdwire.minjun.dev/ko/docs/)에는 넷이 같이 쓰는 개념과 언어별 API 가 있다: [npm](https://mdwire.minjun.dev/ko/docs/npm/), [Rust](https://mdwire.minjun.dev/ko/docs/rust/),
[Go](https://mdwire.minjun.dev/ko/docs/go/), [CLI](https://mdwire.minjun.dev/ko/docs/cli/).
