- New fmp_client.py — Postgres fmp_bulk fast path + live /stable/* fallback
- New fmp.py — FMP-backed public API matching y_finance shapes, plus
get_ticker_info() returning a yfinance-Ticker.info-shaped dict so
downstream .get(key) lookups work unchanged
- interface.py VENDOR_METHODS: fmp added as primary for every tool;
VENDOR_LIST now [fmp, yfinance, alpha_vantage]
- default_config.py: all four data_vendors categories -> fmp
- tier1/tier2/portfolio: drop direct yfinance imports; yf.Ticker(t).info
-> fmp.get_ticker_info(t); plain-function imports rerouted to .fmp
- y_finance.py: docstring flipped to fallback-only
- macro_data_tools.py deleted (orphaned 594-LOC @tool module — not
imported anywhere, agent_utils.py wires its four siblings but skipped
this one, so @tool versions never bound)
Zero live yf.Ticker / yf.download calls remain in the TradingAgents
execution graph.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>