v0.1.2
Security
- Scrub
FinAPI@2026!token leak · previously hardcoded as aos.getenv
fallback default infinance_data_client.py,online_analysis/unified_fetcher.py,
agents/sentinel/unified_fetcher.py,factor_engine.py. All 4 defaults
now empty · users must provideFINANCE_DATA_TOKENexplicitly.
Trufflehog didn't catch this because it's a plain word (no entropy). - New CI guardrail:
os.getenvfallback values matching a shared-secret
pattern (6+ alphanumerics not on the whitelist) fail the build.
Added
- Provider fallback in
finance_data_client.get_quote()· when
FINANCE_DATA_URLis empty (the OSS default) it now delegates to
providers.data_source.get_data_source().get_quote()via an async→sync
bridge · users can pickakshare(A-shares, China network) or
yfinance(US/HK/A, non-China network) with a single env var. yfinance==0.2.51added torequirements.txt(was missing despite
the provider impl existing).- Quote
/api/quote/{code}cache-miss branch actively fetches via
fd_get_quotebefore returning "数据未就绪" placeholder · fills cache.
Fixed
providers/data_source/yfinance_impl.py::get_quote()rewritten to use
Ticker.history(period="5d")instead offast_info· the latter throws
KeyError: 'currentTradingPeriod'on newer yfinance when market is closed.- Shape adapter in
finance_data_client.get_quotereturnsNonewhen the
provider yields null price · UI now correctly shows "数据未就绪" instead of
misleadingprice: 0.0.
Known limitation
- The demo instance at
https://hunter-community.agentpit.ioshows null
prices for A-shares (akshare backend blocked from GCP Singapore) and US
stocks (Yahoo Finance rate-limits GCP IPs with HTTP 429). Users on other
networks or with aHUNTER_SAAS_DATA_URL/KEYare unaffected.
Container images:
ghcr.io/agentpit-io/hunter-community-api:v0.1.2ghcr.io/agentpit-io/hunter-community-web:v0.1.2