Files
HaBraid/docs/mempalace-integration.md
Contributor 5d5336757d feat: HaBraid v0.1.0 — host-following memory visualization engine for Obsidian
- 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
2026-04-18 15:46:42 +09:00

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 로직

  1. last_sync 타임스탬프 읽기 (없으면 전체)
  2. getDrawersSince(last_sync)로 신규 서랍 조회
  3. 각 서랍을 frontmatter 포함 마크다운으로 렌더링
  4. raw/mempalace/{wing}/{room}/{id}.md에 저장
  5. last_sync 업데이트
  6. 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"]
}