HIGH: Unknown indicator now returns clear error with supported list instead of
silently falling back to technicals() which has a different response structure
MEDIUM: Use _safe_get consistently in get_sentiment_score (was data.get)
MEDIUM: Validate start_date < end_date (return error instead of large API call)
MEDIUM: get_cashflow returns tabular format when available, matching other vendors
MEDIUM: Remove formatting chars from CSV data (no $ or % in values)
HIGH: Remove cachetools fallback — require it directly (it's in requirements.txt)
HIGH: Fix get_global_news — return empty result instead of unfiltered fallback
HIGH: Fail fast if POLARIS_API_KEY not set (no silent 'demo' fallback)
MEDIUM: Merge get_competitors into get_sector_analysis (remove duplication)
MEDIUM: Extract _extract_briefs() and _format_brief_detail() shared helpers
MEDIUM: Add trailing newline to get_news for consistency
MEDIUM: All .get() calls use _safe_get with proper defaults
Fixes all 9 Gemini issues:
- HIGH: get_news/get_global_news now pass start_date/end_date to API
- HIGH: get_sec_filings (renamed from get_insider_transactions) has caching
- MEDIUM: Replaced _get2 duplicate with shared _safe_get at module level
- MEDIUM: _safe_get returns default instead of None (no more 'None' in strings)
- MEDIUM: balance_sheet/cashflow/income_statement now cache formatted results
- MEDIUM: String concatenation replaced with list join pattern throughout
- MEDIUM: _days_to_range helper eliminates range calculation duplication
- MEDIUM: Fallback for unknown indicator types formats dict keys as CSV
New Polaris-exclusive methods:
- get_technicals: 20 indicators + buy/sell signal in one call
- get_competitors: same-sector peers with live price, RSI, sentiment
Adds Polaris Knowledge API as a third data vendor alongside yfinance and
Alpha Vantage. Polaris provides sentiment-scored intelligence, composite
trading signals, and news impact analysis that raw data feeds don't offer.
Implements all existing vendor methods plus 3 Polaris-exclusive methods
(sentiment_score, sector_analysis, news_impact).
Uses cachetools.TTLCache for thread-safe caching, shared financials fetch
to avoid redundant API calls, and polaris-news SDK for all API access.
Tested with real API calls — all functions return valid data.
Addresses #305, #11, #86.
Add _clean_dataframe() to normalize stock DataFrames before stockstats:
coerce invalid dates/prices, drop rows missing Close, fill price gaps.
Also add on_bad_lines="skip" to all cached CSV reads.
- Replace hardcoded column indices with column name lookup
- Add mapping for all supported indicators to their expected CSV column names
- Handle missing columns gracefully with descriptive error messages
- Strip whitespace from header parsing for reliability
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Replace FinnHub with Alpha Vantage API in README documentation
- Implement comprehensive Alpha Vantage modules:
- Stock data (daily OHLCV with date filtering)
- Technical indicators (SMA, EMA, MACD, RSI, Bollinger Bands, ATR)
- Fundamental data (overview, balance sheet, cashflow, income statement)
- News and sentiment data with insider transactions
- Update news analyst tools to use ticker-based news search
- Integrate Alpha Vantage vendor methods into interface routing
- Maintain backward compatibility with existing vendor system
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>