- Hybrid BM25 + HNSW vector search with context enrichment - Knowledge graph with entities, relations, and community detection - Host-following LLM route with fallback backends - 3-tier lint system (static + HNSW dup + contradiction detection) - Q&A Synthesis (Karpathy LLM Wiki pattern) - 16 MCP tools for agent-driven workflows - Incremental wiki generation with checkpointing - SQLite-backed item store with FTS5 + vector indexes
2.0 KiB
2.0 KiB
MemPalace 연동 명세
MemPalace 데이터 구조
MemPalace는 SQLite + ChromaDB로 구성:
- SQLite (
palace.db): 서랍 메타데이터 + Knowledge Graph - ChromaDB (
chroma_db/): 벡터 임베딩 (직접 접근 안 함)
DB 스키마 (SQLite)
drawers 테이블
CREATE TABLE drawers (
id TEXT PRIMARY KEY,
wing TEXT NOT NULL,
room TEXT NOT NULL,
content TEXT NOT NULL,
added_by TEXT DEFAULT 'mcp',
source_file TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
knowledge_graph 테이블
CREATE TABLE kg_facts (
id INTEGER PRIMARY KEY AUTOINCREMENT,
subject TEXT NOT NULL,
predicate TEXT NOT NULL,
object TEXT NOT NULL,
valid_from DATE,
valid_to DATE,
source_closet TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
reader.ts 인터페이스
interface MemPalaceReader {
// DB 열기 (read-only, WAL 모드)
open(dbPath: string): Promise<void>;
// 전체 서랍 조회
getAllDrawers(): Promise<MemPalaceDrawer[]>;
// 특정 시간 이후 변경된 서랍
getDrawersSince(since: Date): Promise<MemPalaceDrawer[]>;
// 특정 wing/room의 서랍
getDrawersByWingRoom(wing: string, room?: string): Promise<MemPalaceDrawer[]>;
// 전체 KG 팩트
getAllFacts(): Promise<KGFact[]>;
// DB 닫기
close(): void;
}
ingest.ts 로직
last_sync타임스탬프 읽기 (없으면 전체)getDrawersSince(last_sync)로 신규 서랍 조회- 각 서랍을 frontmatter 포함 마크다운으로 렌더링
raw/mempalace/{wing}/{room}/{id}.md에 저장last_sync업데이트- index.md, log.md 갱신
동기화 상태 저장
{vault}/.sync-state.json:
{
"last_ingest": "2026-04-15T13:00:00+09:00",
"last_wiki_update": "2026-04-15T13:05:00+09:00",
"last_git_push": "2026-04-15T13:05:30+09:00",
"ingested_drawers": ["abc123", "def456"],
"wiki_pages": ["project-alpha", "project-beta"]
}