@open330/kiwimu 0.7.1 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -4,28 +4,63 @@
4
4
 
5
5
  # Kiwi Mu
6
6
 
7
- **나만의 학습 위키를 만드세요**
7
+ **Turn any textbook into your personal learning wiki**
8
8
 
9
- 전공책, PDF, 웹 콘텐츠를 넣으면 — LLM이 챕터/개념별로 분석하여 상호 링크된 학습 위키를 자동 생성합니다.
9
+ 전공책, PDF, 웹 콘텐츠를 넣으면 — LLM이 자동으로 상호 링크된 학습 위키 + 퀴즈를 생성합니다.
10
10
 
11
+ [![npm](https://img.shields.io/npm/v/@open330/kiwimu?style=flat-square&color=cb3837&logo=npm)](https://www.npmjs.com/package/@open330/kiwimu)
11
12
  [![Bun](https://img.shields.io/badge/Bun-1.0+-fbf0df?style=flat-square&logo=bun&logoColor=black)](https://bun.sh)
12
13
  [![TypeScript](https://img.shields.io/badge/TypeScript-5.0+-3178C6?style=flat-square&logo=typescript&logoColor=white)](https://typescriptlang.org)
13
14
  [![License](https://img.shields.io/badge/License-MIT-green?style=flat-square)](LICENSE)
14
15
 
16
+ <br>
17
+
18
+ <img src="https://github.com/Open330/kiwimu/raw/main/.context/marketing/demo.gif" alt="kiwimu v1.1 데모: 본문 드래그 → 질문 → 위키 페이지로 저장" width="720">
19
+
20
+ <br>
21
+
22
+ > **v1.1 — 위키는 만드는 게 아니라 자라는 거였다.**
23
+ > 본문 드래그 → 팝오버 질문 → AI 답변 → 한 번 클릭으로 정식 위키 페이지로 승격. ([상세 글](https://jiun.dev/posts/kiwimu-v1-1))
24
+
15
25
  </div>
16
26
 
17
27
  ---
18
28
 
29
+ ## What's new in v1.1
30
+
31
+ - 🔖 **출처 추적 (Provenance Tracking)** — 모든 AI 생성 문장에 인라인 인용 자동 부착, 출처 커버리지 행렬 제공
32
+ - 🧱 **스키마 레이어** — `kiwi.toml`의 5줄로 카테고리·용어·페이지 템플릿을 정의하면 LLM이 그 안에서만 작동
33
+ - 💬 **질문 → 위키 승격** — 본문 드래그 → 질문 → "위키에 저장" 한 번이면 정식 페이지. 중복 자동 감지
34
+ - 📑 **콘텐츠 카탈로그** — 자동 카테고리 분류 + 출처 커버리지 한눈 보기
35
+ - 📈 **활동 로그** — 페이지 생성·질문·프로모트·스키마 변경이 시간선으로 누적
36
+ - 👁️ **링크 미리보기 (Peek Panel)** — `/wiki/*` 링크 클릭 시 우측 슬라이드 패널로 미리보기, 확장 버튼으로 전체 이동. 너비 드래그 조절·다이어그램·인라인 편집·드래그 Q&A까지 패널 안에서 그대로 동작
37
+ - 🗂️ **트랙 그룹핑 (Track Grouping)** — `kiwi.toml` 설정으로 사이드바·인덱스를 자동 카테고리(트랙)별로 묶어서 표시
38
+ - 🔑 **인증 토큰 영속화** — 서버 재시작해도 쿠키 기반으로 인증 유지 (관리 페이지·동적 Q&A 한 번 로그인하면 끝)
39
+
40
+ ---
41
+
42
+ ## 30초 데모 체험
43
+
44
+ API key 없이 바로 체험할 수 있습니다:
45
+
46
+ ```bash
47
+ mkdir my-wiki && cd my-wiki
48
+ bunx @open330/kiwimu init --demo
49
+ # → 양자역학 샘플 위키 + 학습 퀴즈가 즉시 생성됩니다
50
+ # → http://localhost:8000 에서 확인하세요
51
+ ```
52
+
53
+ ---
54
+
19
55
  ## Quickstart for Agents
20
56
 
21
57
  <div><img src="https://quickstart-for-agents.vercel.app/api/header.svg?theme=claude-code&logo=kiwimu&title=Set+up+a+learning+wiki+from+any+textbook+or+URL&lang=Agents&font=mono&mascot=hat" width="100%" /></div>
22
58
 
23
59
  ```
24
- git clone https://github.com/Open330/kiwimu.git && cd kiwimu && bun install
25
60
  mkdir my-wiki && cd my-wiki
26
- bunx kiwimu init
27
- bunx kiwimu add "<YOUR_URL_OR_PDF>"
28
- bunx kiwimu serve
61
+ bunx @open330/kiwimu init
62
+ bunx @open330/kiwimu add "<YOUR_URL_OR_PDF>"
63
+ bunx @open330/kiwimu serve
29
64
  ```
30
65
 
31
66
  <div><img src="https://quickstart-for-agents.vercel.app/api/footer.svg?theme=claude-code&text=copy+this+prompt+%C2%B7+paste+into+your+agent+%C2%B7+get+a+learning+wiki&font=mono" width="100%" /></div>
@@ -40,27 +75,69 @@ Kiwi Mu는 LLM을 활용해 이 연결을 **자동으로** 만들어, 지식을
40
75
  - **LLM 기반 문서 분석** — 챕터/섹션 구조를 보존한 원본 페이지 + 핵심 개념별 자동 생성 페이지
41
76
  - **원본/개념 분리** — 📖 원본 문서와 📝 개념 문서를 시각적으로 구분
42
77
  - **자동 상호 링크** — 원본↔개념 간 유기적 cross-link + 외부 참고 자료 (Wikipedia 등)
78
+ - **Dynamic Q&A** — 텍스트 드래그 → 팝오버 질문 → LLM이 새 개념 페이지 자동 생성 + 하이라이트 링크
79
+ - **웹 페이지 편집** — serve 모드에서 ✏️ 마크다운 편집
80
+ - **SM-2 간격 반복** — Anki 스타일 SRS (퀴즈 자동 생성 포함)
81
+ - **학습 대시보드** — 숙달도, 약한 개념, 복습 일정 시각화
82
+ - **MD 파일 + 디렉토리 일괄 인제스트** — `kiwimu add <directory>`로 .md 파일 일괄 처리
83
+ - **LaTeX 수식 렌더링** — KaTeX 기반 수학 수식 지원
84
+ - **Mermaid 다이어그램 지원** — Mermaid.js 기반 다이어그램 렌더링
43
85
  - **지식 그래프** — D3.js 인터랙티브 그래프 (원본: 파란색, 개념: 초록색)
86
+ - **데모 모드** — API key 없이 `--demo`로 즉시 체험 (양자역학 + 자료구조)
87
+ - **다양한 파일 지원** — URL, PDF, DOCX, PPTX, PPT, DOC, KEY, RTF, **MD** (디렉토리 일괄 인제스트 지원)
88
+ - **4개 LLM 프로바이더** — Google Gemini, Azure OpenAI, OpenAI, Anthropic
89
+ - **다크 모드** — 시스템 테마에 자동 대응 (100% 커버리지)
90
+ - **모바일 지원** — 햄버거 메뉴 + 슬라이드 사이드바
91
+ - **접근성** — ARIA 속성, 검색 키보드 네비게이션
44
92
  - **웹 UI** — 브라우저에서 문서 추가, 설정 변경, 빌드 실행
45
- - **다양한 파일 지원** — URL, PDF, DOCX, PPTX, PPT, DOC, KEY
46
- - **다중 LLM 프로바이더** — Google Gemini, Azure OpenAI, OpenAI, Anthropic
47
93
  - **토큰 사용량 추적** — API 호출 수, 토큰, 예상 비용을 웹에서 확인
48
94
  - **원클릭 배포** — GitHub Pages / Vercel
95
+ - **라이브 데모** — [kiwimu.internal.jiun.dev](https://kiwimu.internal.jiun.dev)
96
+
97
+ ## vs. Alternatives
98
+
99
+ | Feature | Kiwi Mu | NotebookLM | Obsidian | Anki |
100
+ |---------|---------|------------|----------|------|
101
+ | Auto wiki from PDF | ✅ | ❌ | ❌ | ❌ |
102
+ | Knowledge graph | ✅ | ❌ | ✅ (plugin) | ❌ |
103
+ | Auto quiz generation | ✅ | ❌ | ❌ | ❌ (manual) |
104
+ | Spaced repetition | ✅ (basic) | ❌ | ❌ | ✅ |
105
+ | Self-hosted | ✅ | ❌ | ✅ | ✅ |
106
+ | One-click deploy | ✅ | ❌ | ❌ | ❌ |
107
+ | Open source | ✅ | ❌ | ❌ | ✅ |
108
+ | Free | ✅ | ✅ | Freemium | ✅ |
49
109
 
50
110
  ## Quick Start
51
111
 
52
112
  ### 설치
53
113
 
54
114
  ```bash
55
- git clone https://github.com/Open330/kiwimu.git
56
- cd kiwimu && bun install
115
+ # npm/bunx로 바로 사용 (설치 불필요)
116
+ bunx @open330/kiwimu init
117
+
118
+ # 또는 글로벌 설치
119
+ bun add -g @open330/kiwimu
120
+ ```
121
+
122
+ ### 데모 모드 (API key 불필요)
123
+
124
+ ```bash
125
+ mkdir my-wiki && cd my-wiki
126
+ bunx @open330/kiwimu init --demo
57
127
  ```
58
128
 
129
+ 양자역학 샘플 위키가 생성되어 바로 체험할 수 있습니다:
130
+ - 📖 원본 문서 + 📝 개념 페이지
131
+ - 🔗 자동 상호 링크
132
+ - 📊 지식 그래프
133
+ - 📝 학습 퀴즈
134
+ - 🎲 임의 문서 탐험
135
+
59
136
  ### 프로젝트 생성 (Interactive CLI)
60
137
 
61
138
  ```bash
62
139
  mkdir my-wiki && cd my-wiki
63
- bunx kiwimu init
140
+ bunx @open330/kiwimu init
64
141
  ```
65
142
 
66
143
  Interactive 프롬프트가 실행됩니다:
@@ -78,7 +155,7 @@ Interactive 프롬프트가 실행됩니다:
78
155
  │ ○ Anthropic Claude
79
156
 
80
157
  ◆ 모델명
81
- │ gemini-2.0-flash-lite
158
+ │ gemini-3.1-flash-lite-preview
82
159
 
83
160
  ◆ API Key
84
161
  │ ••••••••••••
@@ -86,68 +163,79 @@ Interactive 프롬프트가 실행됩니다:
86
163
  🥝 'Radio Astronomy Wiki' 위키가 생성되었습니다!
87
164
  ```
88
165
 
89
- 이름을 바로 지정할 수도 있습니다:
90
-
91
- ```bash
92
- bunx kiwimu init "My Study Wiki"
93
- ```
94
-
95
166
  ### 문서 추가
96
167
 
97
168
  ```bash
98
169
  # URL 추가
99
- bunx kiwimu add "https://www.cv.nrao.edu/~sransom/web/Ch1.html"
170
+ bunx @open330/kiwimu add "https://www.cv.nrao.edu/~sransom/web/Ch1.html"
100
171
 
101
- # PDF 추가
102
- bunx kiwimu add textbook.pdf
172
+ # 파일 추가 (PDF, DOCX, PPTX, DOC, PPT, KEY, RTF)
173
+ bunx @open330/kiwimu add textbook.pdf
174
+ bunx @open330/kiwimu add lecture.pptx
103
175
  ```
104
176
 
105
177
  LLM이 문서를 분석하여:
106
178
  1. 📖 **원본 페이지** — 원래 챕터/섹션 구조 보존
107
179
  2. 📝 **개념 페이지** — 핵심 용어·정의·법칙 자동 생성
108
180
  3. 🔗 **Cross-link** — 원본↔개념 간 유기적 연결
181
+ 4. 📝 **퀴즈** — 개념별 학습 퀴즈 자동 생성
182
+
183
+ ### 학습 퀴즈
184
+
185
+ ```bash
186
+ # 터미널에서 퀴즈 풀기
187
+ bunx @open330/kiwimu quiz
188
+
189
+ # 문제 수 지정
190
+ bunx @open330/kiwimu quiz -n 10
191
+ ```
192
+
193
+ 웹에서도 `http://localhost:8000/quiz.html`에서 카드 플립 방식으로 퀴즈를 풀 수 있습니다.
194
+
195
+ ### Dynamic Q&A
196
+
197
+ 위키 페이지에서 이해가 안 되는 부분을 드래그하면, 팝오버가 나타나 LLM에게 질문할 수 있습니다.
198
+
199
+ 1. **텍스트 드래그** — 궁금한 구절을 선택
200
+ 2. **팝오버 질문** — "이게 뭐야?", 자유 질문, 또는 자동 생성 질문 선택
201
+ 3. **새 개념 페이지 생성** — LLM이 답변을 새로운 개념 페이지로 자동 생성
202
+ 4. **하이라이트 링크** — 드래그한 텍스트가 새 페이지로의 링크로 변환
203
+
204
+ `kiwimu serve` 모드에서 실시간으로 동작합니다. 학습 중 발생하는 궁금증을 즉시 해결하고, 위키가 유기적으로 확장됩니다.
109
205
 
110
206
  ### 빌드 및 서버
111
207
 
112
208
  ```bash
113
209
  # 정적 사이트 빌드
114
- bunx kiwimu build
210
+ bunx @open330/kiwimu build
115
211
 
116
212
  # 로컬 서버 실행 (웹에서 문서 추가 가능)
117
- bunx kiwimu serve
213
+ bunx @open330/kiwimu serve
118
214
  # → http://localhost:8000
119
215
 
120
216
  # 포트 변경
121
- bunx kiwimu serve -p 3000
122
-
123
- # 네트워크에 공개 (0.0.0.0)
124
- bunx kiwimu serve --host 0.0.0.0
217
+ bunx @open330/kiwimu serve -p 3000
125
218
  ```
126
219
 
127
- ### 웹 UI에서 문서 추가
128
-
129
- `kiwimu serve` 실행 후 http://localhost:8000 에서:
130
- - **🔗 URL 탭** — URL 입력 후 추가
131
- - **📄 파일 업로드 탭** — PDF, DOCX, PPTX 등 드래그앤드롭 업로드
132
- - 진행 상태 실시간 표시, 완료 시 자동 새로고침
133
-
134
220
  ### 관리 페이지
135
221
 
136
- http://localhost:8000/admin 에서:
222
+ `kiwimu serve` 실행 후 콘솔에 표시되는 관리 URL (`/manage?token=...`)로 접속:
137
223
  - 위키 이름 변경
138
224
  - LLM 프로바이더/모델/API Key 설정
139
225
  - 토큰 사용량 및 예상 비용 확인
140
- - 등록된 소스 목록
226
+ - 파일 업로드 (PDF, DOCX, PPTX 등)
227
+ - URL 추가
141
228
  - 수동 빌드 실행
229
+ - 페르소나 관리
142
230
 
143
231
  ### 배포
144
232
 
145
233
  ```bash
146
234
  # GitHub Pages (기본)
147
- bunx kiwimu deploy
235
+ bunx @open330/kiwimu deploy
148
236
 
149
237
  # Vercel
150
- bunx kiwimu deploy --target vercel
238
+ bunx @open330/kiwimu deploy --target vercel
151
239
  ```
152
240
 
153
241
  ## Commands
@@ -155,10 +243,14 @@ bunx kiwimu deploy --target vercel
155
243
  | 명령 | 설명 |
156
244
  |------|------|
157
245
  | `kiwimu init [name]` | 새 위키 프로젝트 생성 (interactive CLI) |
158
- | `kiwimu add <source>` | URL 또는 파일 추가 (LLM 분석 + 링크 생성) |
246
+ | `kiwimu init --demo` | 샘플 데이터로 즉시 체험 (API key 불필요) |
247
+ | `kiwimu add <source>` | URL 또는 파일 추가 (PDF, DOCX, PPTX, DOC, PPT, KEY, RTF, MD) |
248
+ | `kiwimu add <directory>` | 디렉토리 내 모든 .md 파일 일괄 인제스트 |
159
249
  | `kiwimu build` | 정적 위키 사이트 빌드 |
160
- | `kiwimu serve [-p port] [--host host]` | 웹 서버 실행 (문서 추가/관리 가능) |
161
- | `kiwimu deploy` | GitHub Pages / Vercel에 배포 |
250
+ | `kiwimu serve [-p port]` | 웹 서버 실행 (문서 추가/관리 가능) |
251
+ | `kiwimu quiz [-n count]` | 터미널에서 학습 퀴즈 풀기 |
252
+ | `kiwimu expand [--provider]` | LLM으로 문서 내용 확장 (선택) |
253
+ | `kiwimu deploy [--target]` | GitHub Pages / Vercel에 배포 |
162
254
  | `kiwimu status` | 현재 위키 상태 표시 |
163
255
 
164
256
  ## Supported File Formats
@@ -171,45 +263,71 @@ bunx kiwimu deploy --target vercel
171
263
  | PPTX | ZIP/XML 파싱 |
172
264
  | DOC / PPT / RTF | macOS textutil |
173
265
  | KEY (Keynote) | 텍스트 추출 (제한적) |
266
+ | Markdown (.md) | 직접 텍스트 추출 (디렉토리 일괄 지원) |
174
267
 
175
268
  ## Supported LLM Providers
176
269
 
177
270
  | 프로바이더 | 추천 모델 | 비고 |
178
271
  |-----------|----------|------|
179
- | **Google Gemini** | `gemini-2.0-flash-lite` | [무료 API key](https://aistudio.google.com/) |
180
- | Azure OpenAI | `gpt-5-nano` | Azure 구독 필요 |
181
- | OpenAI | `gpt-4o-mini` | API key 필요 |
182
- | Anthropic | `claude-sonnet-4-20250514` | API key 필요 |
272
+ | **Google Gemini** | `gemini-3.1-flash-lite-preview` | [무료 API key](https://aistudio.google.com/) |
273
+ | Azure OpenAI | `gpt-5.4-nano` | Azure 구독 필요 |
274
+ | OpenAI | `gpt-5.4` | API key 필요 |
275
+ | Anthropic | `claude-sonnet-4-6` | API key 필요 |
183
276
 
184
277
  ## Architecture
185
278
 
186
279
  ```
187
- 소스 (URL / PDF / DOCX / PPTX)
280
+ 소스 (URL / PDF / DOCX / PPTX / DOC / PPT / KEY / RTF / MD)
188
281
 
189
- [ Ingest ] ── Cheerio / pdf-parse / mammoth / jszip
282
+ [ Ingest ] ── Cheerio / pdf-parse / mammoth / jszip / textutil / MD 직접 추출
190
283
 
191
- [ Phase 1 ] ── LLM: 원본 구조 추출 (📖 원본 페이지)
284
+ [ Phase 1 ] ── LLM: 원본 구조 추출 (📖 원본 페이지) — 병렬 처리 (concurrency=3)
192
285
 
193
- [ Phase 2 ] ── LLM: 개념 추출 (📝 개념 페이지)
286
+ [ Phase 2 ] ── LLM: 개념 추출 (📝 개념 페이지)
194
287
 
195
- [ Phase 3 ] ── [[wiki link]] 해석 + 원본↔개념 cross-link
288
+ [ Phase 2.5 ] ── LLM: 학습 퀴즈 자동 생성 (📝 퀴즈) — 병렬 처리
196
289
 
197
- [ Build ] ── 정적 HTML 생성 (탭 사이드바, KaTeX, 지식 그래프)
290
+ [ Phase 3 ] ── [[wiki link]] 해석 + 원본↔개념 cross-link
198
291
 
199
- [ Deploy ] ── GitHub Pages / Vercel
292
+ [ Build ] ── 정적 HTML (사이드바, KaTeX, Mermaid, 지식 그래프, 퀴즈, 다크 모드)
293
+
294
+ [ Deploy ] ── GitHub Pages / Vercel
295
+
296
+ [ Dynamic Q&A ] ── 텍스트 드래그 → 팝오버 → LLM 질문 → 새 개념 페이지 생성 + 하이라이트 링크
297
+ (serve 모드에서 실시간 동작)
200
298
  ```
201
299
 
202
300
  ```
203
301
  project-dir/
204
- ├── kiwi.toml # 프로젝트 + LLM 설정
205
- ├── kiwi.db # SQLite (문서, 링크, 사용량)
206
- ├── uploads/ # 업로드된 파일
207
- └── _site/ # 빌드 결과
208
- ├── index.html # 홈 (문서 추가 UI + 사용량 대시보드)
209
- ├── graph.html # 지식 그래프
210
- ├── wiki/ # 문서 페이지
211
- ├── static/ # CSS, JS, 로고
302
+ ├── kiwi.toml # 프로젝트 + LLM 설정
303
+ ├── kiwi.db # SQLite (문서, 링크, 퀴즈, 사용량)
304
+ ├── uploads/ # 업로드된 파일
305
+ └── _site/ # 빌드 결과
306
+ ├── index.html # 홈 (문서 목록)
307
+ ├── graph.html # 지식 그래프
308
+ ├── quiz.html # 학습 퀴즈
309
+ ├── dashboard.html # 학습 대시보드
310
+ ├── wiki/ # 각 문서 페이지
311
+ │ └── random.html # 임의 문서
312
+ ├── static/ # CSS, JS, 로고
313
+ │ ├── dynamic-qa.js # Dynamic Q&A (드래그→팝오버→질문)
314
+ │ └── edit-page.js # 웹 페이지 편집 모달
212
315
  └── search-index.json
316
+
317
+ src/
318
+ ├── services/
319
+ │ ├── dynamic-qa.ts # Dynamic Q&A 서버 로직
320
+ │ └── ingest.ts # 공유 인제스트 로직
321
+ ├── ingest/
322
+ │ ├── markdown.ts # Markdown 파일 파싱 (디렉토리 일괄 지원)
323
+ │ ├── web.ts / pdf.ts / docx.ts / pptx.ts
324
+ │ └── ...
325
+ ├── demo/
326
+ │ ├── sample-data.ts # 데모 샘플 데이터
327
+ │ └── setup.ts # 데모 초기화
328
+ └── build/static/
329
+ ├── dynamic-qa.js # Dynamic Q&A 클라이언트
330
+ └── edit-page.js # 페이지 편집 클라이언트
213
331
  ```
214
332
 
215
333
  ## Tech Stack
@@ -220,11 +338,20 @@ project-dir/
220
338
  - **Cheerio** — 웹 페이지 파싱
221
339
  - **Mammoth** — DOCX 파싱
222
340
  - **JSZip** — PPTX 파싱
223
- - **Marked** — Markdown → HTML
341
+ - **Marked** + **sanitize-html** — Markdown → 안전한 HTML
224
342
  - **D3.js** — 지식 그래프
225
- - **KaTeX** — 수학 수식 렌더링
343
+ - **KaTeX** — LaTeX 수학 수식 렌더링
344
+ - **Mermaid.js** — 다이어그램 렌더링
226
345
  - **gh-pages** — GitHub Pages 배포
227
346
 
347
+ ## Security
348
+
349
+ - Bearer 토큰 인증 (serve 모드)
350
+ - SSRF 방지 (프라이빗 IP 차단, 리다이렉트 재검증)
351
+ - Path Traversal 방지 (resolve 검증)
352
+ - XSS 방지 (sanitize-html, CSP 헤더, escapeHtml)
353
+ - 파일 업로드 제한 (50MB)
354
+
228
355
  ## License
229
356
 
230
357
  MIT
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@open330/kiwimu",
3
- "version": "0.7.1",
3
+ "version": "1.1.0",
4
4
  "description": "Turn textbooks, PDFs, and web content into your own interlinked learning wiki powered by LLM",
5
5
  "type": "module",
6
6
  "bin": {