feat: Obsidian vault sync backend + Settings UI
Add ObsidianSyncBackend implementing SyncableBackend protocol for
continuous incremental sync of Obsidian vault notes. Edit-as-activity
model: edits create new journal segments at edit time, building a
history of engagement with each note.
Backend (obsidian.py):
- Two-level change detection: mtime fast path, SHA-256 content hash
- New notes: full content import via existing parsing, segment at mtime
- Edited notes: new segment at current mtime, edit_count tracked
- Deleted notes: status "removed", journal segments preserved
- Vault auto-detection: ~/Documents/Obsidian/, ~/Obsidian/, or --path
- Sync state at {journal}/imports/obsidian.json
- Registered as "obsidian" in SYNCABLE_REGISTRY
UI (Settings > Sync):
- Obsidian Vault card alongside Plaud and Granola
- Toggle for hourly sync schedule
- GET/PUT /api/sync endpoints handle obsidian
CLI: sol import --sync obsidian [--save] [--force] [--path /custom]
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>