personal memory agent

Add owner voice identification system master

HDBSCAN clustering detects the journal owner's voice from accumulated embeddings, surfaces a confirmation prompt in the speakers app with 3 audio samples, stores the confirmed centroid on the principal entity, and provides per-sentence owner/non-owner classification via cosine similarity (threshold 0.82). All processing is local, numpy-only. New files: - apps/speakers/owner.py — detection pipeline, centroid storage, classification - apps/speakers/tests/test_owner.py — 16 tests covering all paths Modified: - apps/speakers/routes.py — owner status/detect/confirm/reject/classify endpoints - apps/speakers/workspace.html — owner confirmation banner with audio playback - convey/apps.py — attention surface for voiceprint candidate notification


+1155 -3
5 changed files