AI-foundation slice 1 (per docs/discovery/06). Adds the embeddings abstraction that
semantic search / near-dup / find-similar will build on: IEmbeddingProvider with a
NullEmbeddingProvider (AI-off: IsAvailable=false, empty vectors) and an
OllamaEmbeddingProvider (/api/embeddings, nomic-embed-text). DI registers embeddings
by AI mode (Ollama local, else Null). Kept separate from IAiProvider since embeddings
are a distinct model/capability. AI remains fully optional — callers fall back to
lexical search when unavailable.
Buildable/testable without a live Ollama; unit test locks the Null fallback contract.
Build + all 41 tests pass.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>