v1.2.0 — Concept pages, Graph Insights, MCP, two-way Obsidian sync
A large "LLM Wiki"-inspired feature drop — turn the library from per-article storage into an interconnected, synthesizable knowledge base — plus stronger multi-tenant isolation.
Added
- 🧩 Concept pages (
/api/concepts,/concepts) — synthesize everything about one concept into a single cited "living encyclopedia entry." Sources gathered by semantic coherence (not raw tags); broad tags auto-split into sub-concepts via embedding clustering (networkx + Louvain); contradictions get their own section. Per-page auto-update (semantic-centroid stale detection). - 🕸️ Graph Insights (
/api/knowledge/insights) — Louvain communities, hubs, Adamic-Adar "surprising connections", knowledge gaps; one-line insight appended to the periodic review digest. - 🔗 Graph-augmented retrieval — RAG/research expand along knowledge edges, not just vector similarity.
- 🎯 Knowledge-base purpose injected into Q&A/research prompts.
- ⚖️ Contradiction detection on ingest (creates a
contradictsedge + optional WeChat alert). - 🐙 GitHub repo capture (README + metadata via REST API).
- 🔄 Obsidian two-way sync —
PATCH /api/sync/articles/{id}writeback with LWW + timestamp-guard conflicts (companion plugin: trove-sync-obsidian 0.2.0). - 🔌 MCP server (
POST /api/mcp, Streamable-HTTP, Bearer) — KB tools for external AI agents; in-app access card with connection tutorial. - ♻️ SHA256
content_hashde-duplication.
Changed / Fixed
- Multi-tenant isolation hardening — folders/tags/stats default to current user even for superadmins (
?username=to override); tags isolated per user (UNIQUE(user_id, name)); graph generation user-scoped (no cross-user content to the LLM). - Removed the standalone Spark page (inspiration writing stays in the Add-content dialog).
Dependencies
networkx>=3.2,<4,python-louvain>=0.16. Migrations 008–011.
Full notes: see CHANGELOG.md.