Releases: agentpit-io/hunter-community
Releases · agentpit-io/hunter-community
Release list
v0.2.0
Added
opencodechat engine now runs viaghcr.io/agentpit-io/hunter-opencode:latest
· docker-compose service uncommented · 5 hunter plugins loaded
(hunter-auth · hunter-audit · hunter-guard · hunter-budget · hunter-mcp-context)
· 4 MCP servers registered (watchlist · portfolio · uzi · hunter_user).- Companion image build in huntercode private repo:
packages/hunter-server/Dockerfile(bun 1.3.14-alpine + python3 +mcp+
httpx) ·.github/workflows/hunter-community-publish.ymlpublishes on
push to dev · multi-tag GHCR (branch, sha, tag). - nginx
/api/opencode/location proxies to:3921(opencode host port)
with 600s SSE-friendly timeout · Bearer JWT passed through.
Changed
- opencode basic auth OFF by default ·
OPENCODE_USER/PASSdefaults are
empty indocker-compose.yml. hunter-auth plugin (JWT via shared
JWT_SECRET) is the sole gate. Setting the vars re-enables basic auth
but requires additional nginx work. .env.exampledocumentsHUNTER_INTERNAL_KEY(shared secret for MCP →
api container callbacks),OPENCODE_TAG,HUNTER_BUDGET_ENABLED.
Fixed (during Session B / opencode enablement)
packages/hunter-server/DockerfilebroadenedCOPY . .(needs
patches/ turbo.json forbun install --frozen-lockfile) + added
python3+make+g++ to deps stage (postinstall node-gyp compile).
Verified on fin-r1
GET /api/opencode/agent→ 200 · 19.5KB (9 agents including build/plan/
explore/summary/triage/duplicate-pr)GET /api/opencode/session→ 200 ·[]GET /api/opencode/config/providers→ 200 · 6KB provider list
GHCR
ghcr.io/agentpit-io/hunter-opencode:devpublished (visibility: private
by default · needs manual UI flip to public per doc 08 for anon pull)- Alternative:
docker login ghcr.iowith a PAT to pull private image
Container images:
ghcr.io/agentpit-io/hunter-community-api:v0.2.0ghcr.io/agentpit-io/hunter-community-web:v0.2.0
v0.1.3
Added
<AuthGuard>global 401 interceptor (apps/web/app/components/AuthGuard.tsx)
· monkey-patcheswindow.fetchat layout mount · on/api/*401 with
needLogin:trueorINVALID_TOKEN/UNAUTHORIZEDerror, wipes tokens
fromlocalStorageand redirects to/login?return_to=<original>.
Fixes the infinite "初始化 session 失败" console spam when JWT expired
or DB volume was wiped. 30+ existing fetch callsites need no change.login/page.tsxhonors?return_to=so re-auth lands where you were.
Changed
- fin-r1 demo instance postgres password rotated from default
hunter/hunter
to a random 28-char string (in fin-r1.env, not in git). Applied via
ALTER USER hunter WITH PASSWORD '...'inside the running container so
no data was lost.
Deferred to v0.2.0 (documented in doc 13 · opencode-enablement.md)
- hunter-opencode GHCR image + docker-compose enable · chat features
- SaaS data key wiring · needs
hunter.agentpit.io/dev/api-keysfirst - LLM provider wiring for subagents / online_analysis / agents/graph
- GM data source refactor to yfinance
- SMTP/Slack push channels
Container images:
ghcr.io/agentpit-io/hunter-community-api:v0.1.3ghcr.io/agentpit-io/hunter-community-web:v0.1.3
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
v0.1.1
Post-release patch closing the P0 items from
doc/codex/开源整合方案/10-v0.1.0-alpha-测试报告.md.
Fixed
- Business tables now always built ·
init_db()runs unconditionally in
lifespan;HUNTER_MINIMAL_BOOT=1only gates the background schedulers
(collector · signal_monitor · gm_alerts · backtest · stocks_catalog seed).
Fixes 500 on/api/watchlist/api/alerts/list/api/user_mcp
/api/portfolio/summaryafter fresh volume. - Redis env respected ·
apps/api/app/routers/{quote,portfolio}.py+
services/collector.pyswitched from hardcodedredis://localhost:6379
toos.getenv("REDIS_URL", ...). Fixesredis.ConnectionErrorin docker. - Multi-tenant migration folded into
init_db·stocks/
position_thesis/push_tasksnow always haveuser_idcolumn and the
composite primary keys. FixesUndefinedColumn: column "user_id" does not existon/api/watchlistand/api/portfolio/summary. - Swagger closed by default · FastAPI ctor now hides
/docs/redoc
/openapi.jsonunlessHUNTER_ENABLE_DOCS=1. Fixes API-surface leak via
direct:8100/docsbypass (nginx wasn't intercepting). /api/signals/public · middleware whitelist widened so the signal
dashboard renders without auth for anonymous visitors.
Removed
apps/api/routers/andapps/api/services/dead paths (rsync artifact
from hermes' old layout; onlyapps/api/app/*is imported).POST /api/watchlist/feishu/config+GET /api/watchlist/feishu/config
routes and theirget_feishu_config/upsert_feishu_config+
feishu_bindingshelpers · P2 completion.
Added
scripts/export-openapi.py· dumpsapp.openapi()to
docs/api-reference.json(spec is generated even while HTTP endpoint is
closed)..github/workflows/ci.yml· newguardrailsjob that fails CI on
regressions: hardcodedredis://localhost:6379, stray
apps/api/{routers,services}dirs,wx_openid/feishu_bindings/
booth_admin/ADVENTUREX_leftovers..env.example· clearerHUNTER_MINIMAL_BOOTdocstring.
Container images:
ghcr.io/agentpit-io/hunter-community-api:v0.1.1ghcr.io/agentpit-io/hunter-community-web:v0.1.1
v0.1.0-alpha
First public preview cutting five compressed sprints into main.
Added
- P1 · Monorepo (
apps/{api,web}·db/migrations·docs),
Dockerfiles,docker-compose.yml(postgres 16 · redis 7 · api · web),
HUNTER_MINIMAL_BOOTboot flag - P2 · SaaS strip (WeChat / Lark / booth / SSO removed · -17k LOC)
- P3 · Local auth (
argon2idpassword · JWT HS256 · rotating refresh
token · first user auto-admin ·REGISTRATION_MODE=open|invite|closed) - P4 · Pluggable provider layer:
providers/data_source/{saas,akshare,yfinance}providers/llm/{openai_compat,anthropic}providers/forecast/{noop,kronos_http}/settingspage with per-user SaaS accelerator configurationapps/api/app/utils/crypto.pyAES-256-GCM at-rest encryption
- P5 · GitHub Actions:
ci.yml(gitleaks + api compile + web build)
·docker-publish.yml(GHCR api+web images) ·release.yml
(CHANGELOG-driven release notes)
Not yet
- Push channel refactor (SMTP · Slack) ·
HUNTER_MINIMAL_BOOTremoval - hunter-opencode GHCR image · shared
JWT_SECRETplugin - Password reset flow · rate limit · settings account tab
- Full
docs/01-13coverage (only 01-02 shipped)
Container images:
ghcr.io/agentpit-io/hunter-community-api:v0.1.0-alphaghcr.io/agentpit-io/hunter-community-web:v0.1.0-alpha