v0.4.1: Catalog SQLite index, bls_search_series restored, OES gate
Catalog SQLite index, bls_search_series restored, OES gate
Moves the LABSTAT series catalog from in-memory parse to an on-disk SQLite FTS5 store (sqliteMirrorStore). Off-heap storage removes the multi-GB heap footprint; search narrows via FTS5 then applies the bespoke relevance rescore.
Restores bls_search_series (#34) — download.bls.gov (Akamai) was returning 403 for any User-Agent containing a URL. The default UA drops the embedded GitHub URL, keeping name + contact email only.
Changed:
- BlsCatalogService backed by sqliteMirrorStore FTS5 index, queried on demand (#33)
- BLS_CATALOG_CACHE_PATH renamed BLS_CATALOG_DB_PATH (default .cache/bls-catalog.db)
- User-Agent URL removed — cyanheads-bls-mcp/1.0 (casey@caseyjhand.com)
- Dockerfile: mkdir .cache/.mirror + chown bun for non-root container user
Fixed:
- bls_search_series returning 0 results — Akamai 403 on catalog download was silently emptying the index (#34)
Added:
- BLS_CATALOG_INCLUDE_OES gate (default false) — OES/OEWS (~6M series / ~1.2 GB) opt-in; stays fetchable by ID when off (#33)
157 tests pass; bun run devcheck clean.