Diagrams Default Active v1.1.0

SVG 다이어그램, Mermaid 차트, 인터랙티브 시각화 — 채팅 UI에 인라인으로 렌더링됩니다. 아키텍처 개요부터 인터랙티브 데이터 대시보드까지, 이 스킬은 모든 시각적 요청을 대화 내에서 직접 렌더링된 결과물로 변환합니다.

스킬 이름diagram
버전1.1.0
기본 활성화예 — 항상 주입되므로 /skill load가 필요 없습니다
출력 형식인라인 SVG, Mermaid 코드 블록, diagram-html 위젯
트리거시각적 설명이 필요한 모든 요청: 순서도, 비교, 타임라인, 차트, 지도, 시뮬레이션, 목업
참조 모듈svg-components, color-palette, module-chart, module-widget, module-interactive, module-map, module-mockup, module-art

디자인 원칙

이 스킬이 생성하는 모든 다이어그램은 네 가지 핵심 원칙을 따릅니다:

복잡도 제한

시각적 노이즈를 방지하기 위해 모든 다이어그램에 적용되는 엄격한 제한:

제약 조건제한값초과 시 전략
박스 부제목최대 5단어세부 내용은 sendPrompt() 또는 텍스트로 이동
다이어그램당 색상 램프최대 2개카테고리 통합
가로 행 (680px)최대 4개 박스축소하거나 2행으로 줄바꿈
다이어그램당 노드최대 6개개요 + 상세 다이어그램으로 분할
연속 비주얼 블록불가SVG/위젯 블록 사이에 항상 텍스트 추가

다이어그램 유형 선택

이 스킬은 명사가 아닌 동사에 따라 분기합니다. 같은 주제라도 사용자의 요청에 따라 다른 다이어그램 유형이 생성될 수 있습니다. Mermaid 네이티브 구문으로 깔끔하게 표현 가능한 유형은 직접 작성한 SVG보다 Mermaid가 우선됩니다.

SVG 유형

사용자 의도유형출력
"X가 어떻게 작동하나요"설명적 SVG공간적 비유, 단면도, 물리적 레이아웃
"X의 아키텍처" (시스템 컨텍스트)구조적 SVG컨테이너, 영역, 중첩
"X의 단계" (일반 프로세스)순서도 SVG 또는 Mermaid flowchart위에서 아래로 박스 + 화살표
"A vs B 비교"비교 SVG나란히 배치된 열

Mermaid 유형

사용자 의도Mermaid 구문상태
DB 스키마 / 엔티티 관계erDiagram안정
클래스 다이어그램 / OOP 구조classDiagram안정
상태 머신 / 생명주기stateDiagram-v2안정
시퀀스 / 호출 순서 / API 흐름sequenceDiagram안정
타임라인 / 로드맵 / 히스토리timeline안정
마인드맵 / 브레인스토밍mindmap안정
Git 브랜칭 / 릴리스 히스토리gitGraph안정
우선순위 사분면 / 2x2 매트릭스quadrantChart안정
간트 / 프로젝트 일정gantt안정
사용자 여정 맵journey안정
파이 차트 분석pie안정
레이더 / 스파이더 / 스킬 프로필radar-beta베타 (v11.6+)
칸반 보드kanban베타 (v11.12+)
클라우드 / 인프라 아키텍처architecture-beta베타
계층 구조 / 비례 크기treemap-beta베타
자유 형식 블록 레이아웃block-beta베타

인터랙티브 HTML 위젯 유형

사용자 의도출력라이브러리
"데이터 / 차트 보여줘"diagram-html 위젯Chart.js, D3, ECharts
"시뮬레이션 / 인터랙티브"diagram-html 위젯Matter.js, Canvas, 슬라이더
"인터랙티브 지도"diagram-html 위젯Leaflet + OpenStreetMap
"정적 단계구분도"diagram-html 위젯D3 + TopoJSON
기본 동작: "X가 어떻게 작동하나요?"는 순서도가 아닌 설명적 SVG가 기본입니다. 다이어그램 유형이 위의 Mermaid 표에 해당하면 Mermaid가 사용됩니다 — classDiagram/sequenceDiagram/stateDiagram이 이미 존재하는 경우 SVG를 직접 작성하지 않습니다.

Mermaid 주의사항

Mermaid 다이어그램 유형 작업 시 중요한 주의사항:

C4 다이어그램을 사용하지 마세요 (C4Context, C4Container 등) — 다크 모드에서 테마 토큰이 적용되지 않아 텍스트를 읽을 수 없게 됩니다. 아래 대체 표를 사용하세요.
C4 유형대체
C4 System Context구조적 SVG (커스텀) 또는 subgraph가 있는 Mermaid flowchart
C4 ContainerMermaid architecture-beta
C4 Componentsubgraph 그룹화가 있는 Mermaid flowchart
C4 DynamicMermaid sequenceDiagram
C4 DeploymentMermaid architecture-beta

추가 참고사항:

출력 형식

1. 인라인 SVG (정적 다이어그램)

응답에 직접 출력되는 원시 <svg> 마크업입니다. 채팅 UI가 인라인으로 렌더링합니다.

<svg viewBox="0 0 680 {height}" xmlns="http://www.w3.org/2000/svg"
  role="img" aria-labelledby="title-id desc-id">
  <title id="title-id">Diagram Title</title>
  <desc id="desc-id">Brief description for screen readers</desc>
  <!-- shapes, text, paths -->
</svg>

인라인 SVG 규칙

2. Mermaid (구조화된 다이어그램)

표준 ```mermaid 코드 블록입니다. 기존 렌더러가 자동으로 처리합니다.

```mermaid
sequenceDiagram
    participant A as Client
    participant B as Server
    A->>B: GET /api/data
    B-->>A: 200 OK (JSON)
```

3. 인터랙티브 HTML 위젯 (차트, 컨트롤, 시뮬레이션)

```diagram-html 코드 블록으로 래핑됩니다. 호스트가 생성하는 샌드박스 iframe 내부에서 렌더링됩니다.

```diagram-html
<div id="chart-wrapper" style="position: relative; width: 100%; height: 300px;">
  <canvas id="myChart" role="img" aria-label="Chart description">
    Fallback text
  </canvas>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/4.4.1/chart.umd.js"
  onerror="document.body.innerHTML='<p>Chart library failed to load.</p>'">
</script>
<script>
  const isDark = window.__jawTheme?.isDark ?? true;
  // ... Chart.js code
</script>
```
스타일 먼저, 스크립트 나중에: diagram-html 위젯의 경우 항상 <style><link> 태그를 먼저 배치하고, 그 다음 HTML 구조, 마지막으로 <script> 태그를 배치하세요. 이렇게 하면 스트리밍 중 스크립트가 실행되기 전에 시각적 콘텐츠가 먼저 표시됩니다.

전달 메커니즘

세 가지 형식 모두 — 인라인 SVG, ```mermaid, ```diagram-html — 채팅 응답에 인라인으로 렌더링됩니다. jaw 프론트엔드가 응답 텍스트를 파싱하여 자동으로 마운트합니다. diagram-html은 호스트가 생성하는 샌드박스 <iframe>에 들어갑니다; 스킬이 iframe을 직접 생성하지 않습니다.

하지 마세요

.svg / .html / .png 파일로 저장 (Write 도구, cat >, fs.writeFile)

이렇게 하세요

원시 블록을 응답 텍스트에 직접 붙여넣기

하지 마세요

diagram-html<iframe> / <html> / <body> / <head>로 래핑

이렇게 하세요

<div> / <canvas> / <style>로 시작 — 호스트가 셸을 주입합니다

하지 마세요

/api/channel/send 또는 Telegram/Discord로 전송 (첨부 파일이 아닙니다)

이렇게 하세요

렌더러가 처리하도록 합니다; 다이어그램은 응답 텍스트입니다

하지 마세요

외부 이미지 URL을 참조하고 그것을 다이어그램이라고 부르기

이렇게 하세요

SVG/위젯 코드 자체를 출력

파일 저장: 사용자가 "이 다이어그램 저장해줘" 또는 "다운로드해줘"라고 해도, 렌더링된 모습을 볼 수 있도록 먼저 인라인으로 출력하세요. 사용자가 명시적으로 파일을 요청한 경우에만 디스크에 파일을 작성하세요 — 그 경우에도 인라인 버전이 정식 전달 방식입니다.

SVG 디자인 시스템

디자인 금지 목록

모든 SVG 출력에 적용되는 품질 규칙 (아래 보안 제한 사항과 별도):

보안 제한 사항 (인라인 SVG)

다음 요소와 속성은 DOMPurify에 의해 제거됩니다. 인라인 <svg>에서 절대 사용하지 마세요:

금지된 요소 / 속성이유대안
<foreignObject>SVG에 HTML 삽입 (XSS 벡터)네이티브 SVG 요소 사용
<animate>, <set>, <animateTransform>, <animateMotion>애니메이션 XSS 벡터정적 SVG만 허용
중첩된 <svg>파싱 문제<g> 그룹 사용
xlink:href외부 URL 삽입<use>에서 href="#fragment"만 사용
모든 on* 이벤트 핸들러DOMPurify에 의해 제거됨인라인 SVG에서 사용 불가
참고: diagram-html 콘텐츠는 샌드박스 iframe 내부에서 실행되므로 <script>, on* 핸들러, CDN 임포트가 허용됩니다. 위 제한 사항은 메인 문서에서 렌더링되는 인라인 SVG에만 적용됩니다.

색상 램프 (9가지 시맨틱 색상)

각 램프에는 3가지 쉐이드가 있습니다: fill (배경), stroke (테두리), text (라벨). 인라인 색상이 아닌 항상 CSS 클래스 이름을 사용하세요.

램프CSS 접두사권장 용도
Cyan.c-cyan일반 카테고리 (중립 정보에 권장)
Pink.c-pink일반 카테고리, 강조
Purple.c-purple일반 카테고리, 그룹화
Orange.c-orange일반 카테고리, 악센트
Slate.c-slate중립, 비활성, 구조적 (시작/종료 노드)
Blue.c-blue정보성 (시맨틱 — "정보"에만 사용)
Green.c-green성공, 긍정 (시맨틱)
Amber.c-amber경고, 주의 (시맨틱)
Red.c-red오류, 부정 (시맨틱)
색상 할당 규칙: 색상은 순서가 아닌 의미를 인코딩합니다. 무지개처럼 색상을 순환시키지 마세요. 카테고리별로 그룹화하세요 — 같은 유형의 모든 노드는 하나의 색상을 공유합니다. 일반 카테고리에는 cyan/pink/purple/orange를 권장합니다. blue/green/amber/red는 진정한 시맨틱 개념에만 사용하세요.

레이아웃 패턴

패턴레이아웃크기
순서도위에서 아래로680 x auto
비교나란히 배치된 열680 x auto
타임라인수평 마커 배치680 x auto
조직도계층적 트리680 x auto

테마 통합

CSS 변수 매핑

cli-jaw 호스트는 다이어그램 테마를 위해 다음 CSS 변수를 제공합니다:

변수용도
--bg페이지 배경
--surface카드/서피스 배경
--text기본 텍스트
--text-dim흐린/보조 텍스트
--border기본 테두리
--accent악센트 색상
--font-uiUI 폰트 패밀리
--font-mono코드 폰트 패밀리
--radius-md8px 테두리 반경
--radius-lg12px 테두리 반경

형식별 테마 감지

형식테마 방법
인라인 SVGCSS 클래스가 호스트 테마에 자동으로 적응
diagram-html iframe (JS)window.__jawTheme.isDark (boolean)
diagram-html iframe (CSS 값)window.__jawTokens['--bg'], ['--text']
Mermaidcli-jaw themeVariables를 통해 자동 적용
절대 다이어그램에서 matchMedia('prefers-color-scheme')을 사용하지 마세요. 테마는 OS 설정이 아닌 호스트가 제어합니다.

참조 모듈

다이어그램 스킬은 특수 다이어그램 유형을 위한 추가 참조 파일을 로드합니다. 이 파일들은 상세한 패턴, 라이브러리 통합 가이드, 템플릿을 제공합니다:

모듈파일다루는 내용
SVG 컴포넌트reference/svg-components.mdSVG 프리미티브, viewBox 체크리스트, 레이아웃 템플릿
색상 팔레트reference/color-palette.md전체 색상 값 (라이트 + 다크), 할당 규칙
차트reference/module-chart.mdChart.js + D3 + ECharts 6 — 바, 라인, 파이, 단계구분도, 히트맵, 생키, 레이더, 트리맵, 게이지, 퍼널, 캔들스틱, 코드
위젯reference/module-widget.md물리 (Matter.js), 수학 그래프 (Math.js), 3D (Three.js), 크리에이티브 코딩 (p5.js), 오디오 (Tone.js), 미니게임
인터랙티브reference/module-interactive.md슬라이더, 셀렉트, 세그먼트 버튼, 토글, 재생/일시정지/리셋, 디바운싱, sendPrompt, 키보드 접근성
지도reference/module-map.mdLeaflet 인터랙티브 지도 — OpenStreetMap 타일, 마커, 팝업, 다크 모드
UI 목업reference/module-mockup.mdUI 목업 패턴
아트reference/module-art.md장식적 SVG 패턴

사용 예시

~해주 example 1 — 아키텍처 다이어그램
"마이크로서비스 아키텍처 그려줄" # 트리거: 구조적 SVG — 컨테이너, 영역, 중첩 # 스킬이 서비스 박스, 화살표, 그룹 영역이 포함된 인라인 SVG를 생성합니다. # Mermaid C4 미사용 (다크 모드 문제) — 대신 커스텀 구조적 SVG를 사용합니다.
~해주 example 2 — 데이터베이스 ER 다이어그램
"이 DB 스키마 ER 다이어그램으로 보여주" # 트리거: Mermaid erDiagram # erDiagram 구문이 포함된 ```mermaid 블록을 출력합니다. # 테마가 자동으로 적응합니다 — 수동 색상 설정이 필요 없습니다.
~해주 example 3 — 인터랙티브 데이터 차트
"월별 매출 데이터 차트로 그려주" # 트리거: diagram-html + Chart.js # Chart.js 바/라인 차트가 포함된 ```diagram-html 블록을 생성합니다. # 다크 모드 색상에 window.__jawTheme.isDark를 사용합니다.
~해주 example 4 — API 시퀀스 흐름
"로그인 API 흐름 시켐스 다이어그램으로 그려주" # 트리거: Mermaid sequenceDiagram # Client → Auth Server → API → DB — 전체 요청/응답 흐름. # sequenceDiagram이 이를 네이티브로 지원하므로 SVG 대신 Mermaid를 선택합니다.
~해주 example 5 — 비교 다이어그램
"React vs Vue vs Svelte 비교해주" # 트리거: 비교 SVG (나란히 배치된 열) # 3개 열, 주요 속성이 시각적으로 비교된 인라인 SVG를 생성합니다. # 최대 2개 색상 램프 — 하나는 카테고리 헤더, 하나는 강조용.

빠른 참조

올바른 출력 형식을 선택하기 위한 의사결정 트리:

질문답변형식
Mermaid에 이를 위한 네이티브 구문이 있나요?```mermaid 사용
정적 레이아웃/아키텍처/비교인가요?인라인 <svg> 사용
인터랙티브, 데이터 시각화, 또는 JS 라이브러리가 필요한가요?```diagram-html 사용
C4 다이어그램인가요?위의 C4 매핑 표에 따라 대체
"X가 어떻게 작동하나요" 질문인가요?설명적 SVG (순서도가 아님)