* fix: SPX and other US indices real-time/daily data support (Issue #273)
- Add us_index_mapping module for SPX/DJI/IXIC/NDX/VIX/RUT mapping
- Route US index requests directly to YfinanceFetcher
- Deduplicate US stock code detection via is_us_stock_code()
- Fast-path get_daily_data for US indices/stocks to avoid redundant fetcher attempts
- Add unit tests for us_index_mapping
* docs: sync README, CHANGELOG, full-guide for Issue #273
- Add report_summary_only config (env: REPORT_SUMMARY_ONLY, default false)
- When true, notification shows only summary block without per-stock details
- Applies to generate_dashboard_report, generate_wechat_dashboard, generate_daily_report
- Update README, full-guide, CHANGELOG, .env.example
- Register in Web UI config (config_registry, systemConfigI18n)
- No workflow change: GitHub Actions users can add REPORT_SUMMARY_ONLY via repo vars when needed
- Add MERGE_EMAIL_NOTIFICATION env var (default false) to control merged push
- When enabled, combine个股分析 and 大盘复盘 into single notification
- Reduces email count and spam detection risk
- Incompatible with SINGLE_STOCK_NOTIFY, merge disabled in single-stock mode
- Update README, .env.example, full-guide, CHANGELOG
Fixes#190
* feat: Add image stock code extraction, Anthropic API, and Pytdx config (Fixes#257)
- Add POST /api/v1/stocks/extract-from-image with Vision LLM (Gemini/Anthropic/OpenAI)
- Add image_stock_extractor service with 60s timeout, rate limit (10/min), X-Forwarded-For support
- Add ImageStockExtractor UI in Settings for upload and merge-to-watchlist
- Add ANTHROPIC_API_KEY, ANTHROPIC_MODEL to config and analyzer fallback chain
- Add PYTDX_HOST, PYTDX_PORT, PYTDX_SERVERS for custom Pytdx server
- Add OPENAI_VISION_MODEL for image-only models
- Handle 409 conflict in merge flow with user-friendly message
* fix: resolve TypeScript build error in stocks.ts (avoid Record<> generic parsing)
* feat: Redis rate limiter, API field unification, anthropic_max_tokens
- Add rate_limiter.py: Memory + Redis implementations for extract-from-image
- Integrate get_extract_rate_limiter() in stocks.py; remove image param, keep file only
- Add anthropic_max_tokens config for analyzer
- Update .env.example, config_registry, full-guide, CHANGELOG
- Add redis>=5.0 as optional dependency
* refactor: rename GeminiAnalyzer to LLMAnalyzer for multi-backend clarity
* revert: restore GeminiAnalyzer naming (keep original upstream convention)
* docs: add image extraction and from-image-add usage to README
* fix: Anthropic runtime fallback to OpenAI; remove Redis rate limiter
- Init both Anthropic and OpenAI at startup so Anthropic 429/network glitch can fall back to OpenAI
- Check Anthropic before OpenAI in _call_api_with_retry to preserve priority
- Remove Redis rate limiter per review; keep in-memory only
* remove rate limiter for extract-from-image per review
- Delete rate_limiter.py; extract-from-image has no rate limiting
- Remove Request param and 429 response from stocks endpoint
- Update docs to drop rate limit mentions
- Add STOCK_GROUP_N + EMAIL_GROUP_N config for routing reports to different emails
- Market review sends to all configured email receivers
- Minimal changes: optional params on send_to_email and send(), new helpers
* fix: report signal accuracy, data source reliability, and market review quality #patch
- Fix signal emoji mismatch for compound advice and *ST markdown escaping
- Inject structured data (indices/stats/sectors) into market review
- Fix tushare return type and API endpoint; auto-inject realtime priority
- Add search cache (500-cap FIFO), limit supplement requests to 1
- Fix analysis API report=None and ReportStrategy type inconsistency
- Update CHANGELOG for v3.0.1 ~ v3.0.5
* fix: F821 undefined name 'UnifiedRealtimeQuote'
* feat!: replace legacy WebUI with unified FastAPI architecture #major
- Remove legacy WebUI (web/ package based on ThreadingHTTPServer)
- Unify CLI commands: --webui now seamlessly launches the new FastAPI service
- Migrate task service from web/services.py to src/services/task_service.py
- Update documentation to reflect the new simplified usage
* refactor(service): support parameterized query source in TaskService
- Implement US stock history fetching in AkshareFetcher
- Implement US stock realtime quotes in YfinanceFetcher
- Add US stock filter to unsupported fetchers (Baostock, Tushare, etc.) to trigger fallback
- Optimize realtime quote fallback strategy to prioritize Yfinance for US stocks
fixes#153
# minor
- Add Pytdx (通达信) to data sources list
- Add multi-source stock name resolution feature
- Add enhanced search fallback feature
- Update roadmap with Pytdx data source