Real embedding provider backed by the bundled embed.py subprocess
(sentence-transformers / MiniLM). Wire protocol (see embed.py):
the script writes a u32 LE dimension header on stdout, then for every
line it reads on stdin it writes dim * f32 LE bytes on stdout.
Build the embedding provider requested by config with an honest fallback:
a configured provider that cannot be initialized is reported on stderr
instead of silently degrading to the mock. The mock is returned for
“mock”/“none” (and as a last resort), with idx_dim as its dimension.