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

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

npm install @minjun0219/mdwire

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

답변 하나, 채널 다섯

모델이 쓴 실제 봇 답변 원문과 mdwire 가 채널마다 보내는 결과입니다.

에이전트 출력
**상품 상세 화면**은 `web-app` 에 있어요.
**첫 줄 설명이
둘째 줄까지** 이어져요.

**영향 범위: 세 화면
예시:
```ts
const a = 1;

| 화면 | 경로 |
|---|---|
| 상품 상세 | /items/[id] |
  • 조사 옆 굵게
  • 줄을 넘는 굵게
  • 닫히지 않은 굵게
  • 닫히지 않은 코드펜스
보내는 곳
<b>상품 상세 화면</b>은 <code>web-app</code> 에 있어요.
<b>첫 줄 설명이
둘째 줄까지</b> 이어져요.

<b>영향 범위: 세 화면
예시:</b>
<pre><code class="language-ts">const a = 1;

| 화면 | 경로 |
|---|---|
| 상품 상세 | /items/[id] |</code></pre>

telegram-html

테스트 케이스: chat-bot-answer

왜 또 만들었나

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

대상

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

데모

데모는 npm 패키지를 브라우저에서 실행합니다.

설치

npm versionnpm monthly downloadscrates.io versionGo reference

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

문서에서 네 구현이 함께 쓰는 규칙(Concepts)과 언어별 API 를 볼 수 있습니다: npm, Rust, Go, CLI.