Plugin · Local Indexer
Local Indexer — kiwipiepy + pymupdf4llm + FTS5 + LanceDB
지정한 폴더의 문서를 청크/임베딩하여 채팅 RAG 컨텍스트로 가져옵니다. v0.4.11. 한국어는 kiwi 형태소 → unicode61 토크나이저 결합 (LVIS Phase 1 Pattern B), 검색은 BM25 + tree + vector + cloud 의 RRF (RRF_K=60) 결합.
폴더 감시 — chokidar
src/folderIndexer.ts:8 가 chokidar로 add/change/unlink 이벤트 watch. polling default off (:133).청킹 — Pattern B + 토큰 윈도우
target=256, overlap=32 tokens (worker/pageindex_indexer.py:58-59).검색 — RRF 결합
worker/pageindex_search.py:35 RRF_K = 60. 기본 weights bm25=1.5, tree=1.0, vector=1.0, cloud=1.0.제공 도구 18개
index_scan · index_scan_cancel · index_scan_status · index_documents
index_folders · index_folders_purge_orphans · index_refresh_folder
index_add_folder · index_add_folders · index_remove_folder
index_pick_folder · index_preview_folder · chat_preview
index_search · index_get_document · document_index_scan
index_get_settings · index_set_image_embeddingSkill 키워드
plugin.json:416-453 에 9개 등록 — 문서, 인덱스, 검색, 문서검색,PDF, 파일검색, 문서찾기, 인덱싱, 파일인덱스 →chat_preview 또는 index_scan 로 매핑.
폴더 추가 흐름
- 01
폴더 picker
UI에서
index_pick_folder→ OS 다이얼로그 → 경로 반환. - 02
Preview
index_preview_folder가 파일 수 / 추정 청크 수 / 대상 확장자 미리보기. - 03
Add
index_add_folder호출 →folderIndexer.ts가 chokidar watch 시작 + initial scan 큐잉. - 04
Scan + index
pymupdf4llmindex_scan→ worker가 파일 파싱 (md/pdf/docx). PDF는pymupdf4llm.to_markdown(path, page_chunks=True)(worker/pageindex_indexer.py:690). PyPDF2 사용 안 함. - 05
Chunk + embed + FTS5 + Lance
kiwi sentence splitter → token-window buffer → unicode61 FTS5 + LanceDB vectors. 저장:
<pluginDataDir>/index/{workspace, fts5.sqlite, vectors.lance}. - 06
Watch — incremental
이벤트 기반이후 파일 add/change/unlink 발생 시 chokidar 이벤트 → incremental re-index.
~/.lvis/plugins/local-indexer/index/ 아래 (workspace/, fts5.sqlite, vectors.lance). 다른 플러그인 / 호스트 영역 직접 접근 불가 — hostApi.storage.* sandbox FS 강제.