diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index 8ca70ee..820ac61 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -63,7 +63,8 @@ "./skills/korean-docs/SKILL.md", "./skills/qa/SKILL.md", "./skills/qa-list/SKILL.md", - "./skills/qa-merge/SKILL.md" + "./skills/qa-merge/SKILL.md", + "./skills/llm-wiki/SKILL.md" ] }, { diff --git a/CHANGELOG.md b/CHANGELOG.md index 156e17b..106b233 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - **serverless-migration-advisor** (workflow): AWS always-on 아키텍처를 서버리스+Spot 패턴으로 이행할 때 사용하는 업스트림 어드바이저. 5-Phase 인터뷰 → 타겟 아키텍처 매핑 → 단계별 체크리스트 리포트 생성. AWS Docs 인용 의무 + serverless-autoresearch($3.94/48실험) 및 serverless-openclaw($1/월) 검증 사례 인용. 구현 how-to는 `sagemaker-spot-training` 등으로 위임. (#3) - development 플러그인에 `sagemaker-spot-training` 스킬 등록 (marketplace.json + plugins/development/README.md). `serverless-migration-advisor`의 Delegation 타겟으로 참조되는 스킬을 실제 설치 가능 상태로 전환. (#5) +- **llm-wiki** (documentation): Karpathy LLM Wiki 패턴 구현 스킬. 8개 서브커맨드(init/ingest/query/lint/sync/export/qmd-index/lancedb-sync). qmd 설치 시 하이브리드 검색 자동 활성, 미설치 시 INDEX.md 라우팅으로 graceful degrade. LanceDB + Embedding Atlas 선택적 벡터 인덱스 지원. Obsidian 호환 `[[wiki-link]]`. 워크스페이스 CLAUDE.md "LLM Wiki 활용 규칙"과 통합. (#8) ### Changed diff --git a/README.md b/README.md index 89ae319..f578a78 100644 --- a/README.md +++ b/README.md @@ -53,6 +53,7 @@ Git 워크플로우 및 협업 관련 | [qa](plugins/documentation/skills/qa) | 기술/수학적 개념 Q&A 기록 | | [qa-list](plugins/documentation/skills/qa-list) | 저장된 Q&A 문서 목록 표시 | | [qa-merge](plugins/documentation/skills/qa-merge) | Q&A 문서를 통합 레퍼런스로 병합 | +| [llm-wiki](plugins/documentation/skills/llm-wiki) | Karpathy LLM Wiki 패턴 - 프로젝트 문서를 컴파일 위키로 유지 (qmd 하이브리드 검색, Obsidian 호환) | ### Memory diff --git a/issues/8-llm-wiki/PLAN.md b/issues/8-llm-wiki/PLAN.md new file mode 100644 index 0000000..360643b --- /dev/null +++ b/issues/8-llm-wiki/PLAN.md @@ -0,0 +1,126 @@ +# Issue #8: llm-wiki 구현 계획 + +> **전제**: `SPEC.md` 승인 완료 (2026-04-19). +> **구현 위치**: `plugins/documentation/skills/llm-wiki/`. +> **총 예상 공수**: ~1.5일(1인). 포팅 0.5일 + 신규 references+scripts 0.5일 + SKILL.md+통합 0.5일. + +## 0. 선행 조건 + +- [x] HANDOFF.md 읽음 (~/Downloads/LLM_WIKI_HANDOFF.md) +- [x] Research report 읽음 (~/Downloads/llm-wiki-qmd-vectordb-complete-report.md) +- [x] SPEC.md 작성 및 승인 +- [x] TASKS.md bite-sized 계획 작성 +- [x] 포팅 원본 접근 확인 (wjtb-cmc/.claude/skills/llm-wiki/) + +--- + +## 1. 구현 단계 + +### Stage B — 스킬 스캐폴드 (~0.2일) + +- SKILL.md stub (frontmatter만) + 6 reference stubs + 5 script stubs +- `.claude-plugin/marketplace.json` documentation.skills 배열에 등록 +- `npm test` green 확인 +- **Deliverable**: 스킬 구조 존재, 내용은 이후 단계에서 채움 + +### Stage C — 스크립트 포팅 + 신규 (~0.5일) + +- C1 init.sh 포팅 + `wiki/` 컨벤션 반영 + qmd/LanceDB 감지 +- C2 sync_index.py 포팅 + zero-dep frontmatter 파싱 +- C3 lint_wiki.py 포팅 + 끊어진 링크·고아·frontmatter 검증 +- C4 qmd_index.sh 신규 (qmd CLI 래퍼 + 설치 안내) +- C5 lancedb_sync.py 신규 (LanceDB 벡터 인덱스 + 의존성 graceful) +- 각 스크립트 sanity test로 동작 확인 + +### Stage D — references 포팅 + 신규 (~0.5일) + +- D1 page-templates.md 포팅 + LEP-특수 예시 제거 +- D2 ingest-workflow.md 포팅 + 일반화 +- D3 claude-md-block.md 포팅 + `wiki/` 경로 반영 + 워크스페이스 CLAUDE.md 규칙 정렬 +- D4 qmd-integration.md 신규 (설치·MCP·검색 모드 3종) +- D5 lancedb-integration.md 신규 (Phase 3 옵션, Embedding Atlas 연결) +- D6 karpathy-pattern.md 신규 (원본 패턴 + 본 구현 결정 기록) + +### Stage E — SKILL.md 본문 (~0.2일) + +- E1 8-command 오케스트레이터 본문 (≤300 lines) +- Phase 1-5 워크플로가 아닌 8개 명령 실행 순서로 구성 (SKILL.md는 sub-command dispatcher) +- Graceful degrade 원칙 명시 +- Progressive disclosure로 상세는 references/로 + +### Stage F — 통합 (~0.1일) + +- F1 root README.md Documentation 섹션에 llm-wiki 행 추가 +- F2 plugins/documentation/README.md 특징·스킬 테이블·사용 예시 업데이트 +- F3 CHANGELOG.md [Unreleased] ### Added 엔트리 + +### Stage G — 검증 + PR (~0.1일) + +- G1 E2E 라운드트립: init → sync → lint (clean + broken link 감지) +- G1 graceful degrade: qmd 없는 환경에서 qmd_index/lancedb_sync 설치 안내 exit 1 +- G2 `npm test` 전부 green +- G2 SKILL.md 줄 수 ≤300 +- G3 브랜치 push + PR 생성 (#8 closes) + +--- + +## 2. 리스크 및 완화 + +| 리스크 | 영향 | 완화 | +|-------|------|------| +| wjtb-cmc 스킬에 LEP 특수 로직이 숨어있음 | 일반화 누락 시 다른 프로젝트에서 오동작 | 포팅 시 `grep -i lep`로 전부 제거 후 sanity test | +| qmd CLI 옵션이 2026-04 기준과 달라짐 | qmd_index.sh 동작 실패 | 스크립트 상단에 snapshot 주석, qmd 미설치 graceful | +| Python 표준에 YAML 부재 | sync_index/lint_wiki 파싱 실패 | 수동 frontmatter 파싱 (zero-dep), 복잡 YAML은 미지원 명시 | +| LanceDB v0.23.x 베타 | API 변경 위험 | lancedb-sync.py가 LanceDB 미설치 시 graceful degrade, 버전 변경 시 스크립트 수정 | +| 명령 8개가 많음 | SKILL.md description 토큰 낭비 | 핵심 트리거 키워드만 description에, 나머지는 argument-hint로 | + +--- + +## 3. 의사결정 (구현 중) + +- **Python 버전**: 3.8+ (표준 라이브러리만 사용, f-string·pathlib 전제) +- **frontmatter 파싱**: zero-dep 수동 파서 (pyyaml 의존 회피) +- **임베딩 모델 기본**: `all-MiniLM-L6-v2` (CPU에서 빠름) — 한국어 필요 시 `Qwen3-Embedding-0.6B` 권장 +- **qmd 컨텍스트 명칭**: `qmd://wiki` (프로젝트 루트 기준 basename 사용) +- **exit code 정책**: graceful degrade는 exit 0 + 경고, 명시 명령 의존성 미설치는 exit 1 + 설치 안내 + +--- + +## 4. 산출물 체크리스트 + +- [ ] `plugins/documentation/skills/llm-wiki/SKILL.md` +- [ ] `references/page-templates.md` +- [ ] `references/ingest-workflow.md` +- [ ] `references/claude-md-block.md` +- [ ] `references/qmd-integration.md` +- [ ] `references/lancedb-integration.md` +- [ ] `references/karpathy-pattern.md` +- [ ] `scripts/init.sh` +- [ ] `scripts/sync_index.py` +- [ ] `scripts/lint_wiki.py` +- [ ] `scripts/qmd_index.sh` +- [ ] `scripts/lancedb_sync.py` +- [ ] `.claude-plugin/marketplace.json` 업데이트 +- [ ] root `README.md` 목록 업데이트 +- [ ] `plugins/documentation/README.md` 업데이트 +- [ ] `CHANGELOG.md` 엔트리 +- [ ] `npm test` green +- [ ] E2E sanity 통과 + +--- + +## 5. 수락 기준 + +SPEC §11 성공 기준 + 다음: + +- [ ] `npm test` 전부 green (Stage B 이후 유지) +- [ ] SKILL.md 300줄 이하 +- [ ] 모든 references/*.md에 `Snapshot date` 표기 +- [ ] init → sync → lint 라운드트립 exit 0 +- [ ] 깨진 링크·고아 페이지 주입 시 lint exit 1 +- [ ] qmd 미설치 환경에서 `query` INDEX.md 라우팅 동작 +- [ ] `lancedb-sync` 미설치 시 `pip install` 안내 exit 1 + +--- + +*본 계획 생성: 2026-04-19. SPEC 승인 후 TASKS.md 기준으로 구현.* diff --git a/issues/8-llm-wiki/SPEC.md b/issues/8-llm-wiki/SPEC.md new file mode 100644 index 0000000..780e7ac --- /dev/null +++ b/issues/8-llm-wiki/SPEC.md @@ -0,0 +1,346 @@ +# Issue #8: llm-wiki 스킬 스펙 + +> **스코프**: Karpathy LLM Wiki 패턴 + qmd 하이브리드 검색(Phase 2) + LanceDB 선택적 벡터 인덱스. +> **출발점**: `wjtb-cmc`의 `llm-wiki` 스킬 포팅 + 일반화. +> **이슈**: #8 + +## 1. 개요 + +### 1.1 목적 + +프로젝트 문서(스펙/ADR/회의록/코드 설명 등)를 `wiki/raw/`에 모으고 LLM이 컴파일하여 `wiki/`에 교차참조된 마크다운 위키를 생성·유지한다. **검색이 아닌 컴파일**이 핵심 — 한 번 이해한 지식을 계속 다듬어 복리로 축적한다. + +### 1.2 핵심 가치 + +- **복리 지식 축적**: RAG가 매번 재발견하는 반면, 위키는 한 번 정리한 지식을 계속 갱신 +- **Obsidian 호환**: `[[wiki-link]]` 형식, 그래프 뷰 가능 +- **qmd 하이브리드 검색**: BM25 + 벡터 + LLM 재순위 (설치 시 자동 활성) +- **선택적 벡터 인덱스**: LanceDB + DuckDB + Embedding Atlas (대규모 위키 대응) +- **Graceful degrade**: qmd 없어도 INDEX.md 라우팅으로 작동 +- **워크스페이스 컨벤션 정렬**: `wiki/` 노출형, 워크스페이스 CLAUDE.md의 "LLM Wiki 활용 규칙"과 일치 + +--- + +## 2. 아키텍처 + +### 2.1 스킬 배치 + +```text +plugins/documentation/skills/llm-wiki/ +├── SKILL.md # 메인 지침 (~300줄) +├── references/ +│ ├── page-templates.md # 6개 페이지 유형 템플릿 (포팅) +│ ├── ingest-workflow.md # 인제스트 5단계 상세 가이드 (포팅) +│ ├── claude-md-block.md # CLAUDE.md 추가 블록 템플릿 (포팅 + wiki/ 반영) +│ ├── qmd-integration.md # qmd 설치·컨텍스트·검색 옵션 (신규) +│ ├── lancedb-integration.md # LanceDB + Embedding Atlas 연결 (신규) +│ └── karpathy-pattern.md # 원본 패턴 + 본 구현 결정 기록 (신규) +└── scripts/ + ├── init.sh # wiki/ 구조 초기화 (포팅) + ├── sync_index.py # wiki/index.md 자동 재빌드 (포팅) + ├── lint_wiki.py # 끊어진 링크·고아·frontmatter 검증 (포팅) + ├── qmd_index.sh # qmd 인덱스 빌드/갱신 래퍼 (신규) + └── lancedb_sync.py # LanceDB 벡터 인덱스 동기화 (신규) +``` + +### 2.2 카테고리 및 등록 + +- `plugins/documentation/` (기존) +- `.claude-plugin/marketplace.json` documentation.skills 배열에 추가 +- `plugin.json` 그대로 유지 (버전 bump은 릴리스 시) + +### 2.3 디렉토리 컨벤션 (프로젝트 쪽) + +사용자 프로젝트 루트에 생성되는 구조: + +```text +{user-project}/ +├── wiki/ # 노출형 (워크스페이스 CLAUDE.md 규칙) +│ ├── index.md # 자동 재빌드 (sync_index.py) +│ ├── log.md # ingest 이력 +│ ├── raw/ # 원본 소스 드롭존 (불변) +│ │ └── YYYY-MM-DD_{source}.md +│ ├── {page}.md # 컴파일된 위키 페이지 (LLM 관리) +│ └── .gitignore # raw/private/** 등 +├── CLAUDE.md # "LLM Wiki 활용 규칙" 블록 추가 +└── ... +``` + +--- + +## 3. 명령어 세트 (8개) + +| 명령 | 역할 | 구현 위치 | qmd 필요? | +|------|------|----------|-----------| +| `init` | `wiki/` 구조 + `wiki/index.md` + `CLAUDE.md` 블록 생성 | `scripts/init.sh` | 아니오 | +| `ingest ` | `raw/`에 드롭된 소스를 LLM이 컴파일, 10-15 페이지 갱신 | SKILL.md 워크플로 + `references/ingest-workflow.md` | 아니오 | +| `query <질문>` | qmd 있음 → 하이브리드 검색 → LLM 합성 / qmd 없음 → INDEX.md 2-hop 라우팅 | SKILL.md 워크플로 | **선택(graceful)** | +| `lint` | 끊어진 `[[link]]`, 고아 페이지, frontmatter 불완전 탐지 | `scripts/lint_wiki.py` | 아니오 | +| `sync` | `wiki/index.md` 자동 재빌드 | `scripts/sync_index.py` | 아니오 | +| `export