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

> LLM 이 쓴 마크다운을 깨지지 않게 텔레그램 · 슬랙 · GitHub 로 보냅니다. 고치고 채널에 맞게 렌더링한 뒤 길이 제한 안에서 나눕니다. 스트리밍도 됩니다. Rust · npm(WASM) · Go · CLI.

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

mdwire 는 마크다운을 완성된 화면으로 바꾸지 않습니다. 에이전트가 쓴 마크다운을 **채널에 맞게 다듬어
넘깁니다.** 문제가 되는 곳을 고쳐 채널이 받는 문법으로 바꾼 뒤 길이 제한 안에서 나눕니다.
화면에 렌더링하는 일은 채널이 맡습니다.

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

1. **정규화.** 에이전트가 쓴 마크다운은 표준 마크다운 변환으로는 제대로 표현되지 않을 수 있습니다. 짝 없는 `**`, 줄을 접어 쓴 글에서 줄을 넘는 강조,
   닫히지 않은 코드펜스가 흔합니다. 렌더링하기 전에 고칩니다.
2. **렌더링.** 채널이 받는 문법으로 출력합니다. 텔레그램 HTML 은 태그 아홉 개만 받고, 슬랙
   `markdown_text` 는 표준 마크다운을 그대로 받습니다.
3. **분할.** 채널의 길이 제한을 지키되 마크업 한가운데를 자르지 않습니다. 스트리밍할 때도 청크
   경계가 `**굵게**` 안에 걸리면 안 됩니다.

## 왜 또 만들었나

기존 도구에서 실제로 확인한 빈틈은 세 가지입니다. 줄을 넘는 강조가 흔합니다. 한국어에서 자주 쓰는 표기는
마크다운과 부딪힙니다. 채팅 채널용 변환기는 스트리밍을 고려하지 못합니다. 자세한 내용은
[왜 또 만들었나](https://minjun.kim/mdwire/ko/why/)에, 실제로 겪은 고장은 [사례](https://minjun.kim/mdwire/ko/why/cases/)에 있습니다.

## 대상

텔레그램 HTML, 슬랙 `markdown_text`, GitHub 코멘트(GFM), 노션 페이지, 평문, 브라우저용 HTML 을
지원합니다. Rust 코어, CLI, npm 패키지(WASM), Go 구현이 있고, 모두 같은 테스트 케이스를 통과합니다.

## 데모

[데모](https://minjun.kim/mdwire/ko/demo/)는 npm 패키지를 브라우저에서 실행합니다.

- [Telegram vs. Slack](https://minjun.kim/mdwire/ko/demo/channels/)\
  에이전트 답변 하나를 텔레그램용과 슬랙용으로 나란히 변환합니다.
- [Streaming](https://minjun.kim/mdwire/ko/demo/streaming/)\
  같은 답변을 렌더러 다섯 개에 스트리밍합니다.
- [깨진 마크다운 고치기](https://minjun.kim/mdwire/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://minjun.kim/mdwire/ko/docs/)에서 네 구현이 함께 쓰는 규칙([Concepts](https://minjun.kim/mdwire/ko/docs/))과 언어별 API 를 볼 수 있습니다:
[npm](https://minjun.kim/mdwire/ko/docs/npm/), [Rust](https://minjun.kim/mdwire/ko/docs/rust/), [Go](https://minjun.kim/mdwire/ko/docs/go/), [CLI](https://minjun.kim/mdwire/ko/docs/cli/).
