Drove staging post-merge of #8644 and noticed the natural LLM query
"find Boost 1.88" returned zero results — `list_libraries({match:
"boost 1.88"})` only matched against `{id, name}` of each library, so
the version token never matched anything. To find a specific version
an agent had to first query for "boost", read the response, and scan
the `versions` array for the right id.
Fix: include each version's `version` (human form) and `id` in the
haystack `applyMatch` sees. The library entry is still returned in
full (with all versions), so the caller still has everything they
need to pass to `compile`. Schema description updated to make the
contract explicit.
Numeric-token version-prefix semantics are inherited from applyMatch
unchanged: "boost 1.88" matches "1.88.0" but not "1.880" or "1.8".
Tests cover the canonical case ("boost 1.88") and version-id form
("188" by itself).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>