Commit Graph
194 Commits
Author SHA1 Message Date
Haozhe Wu c8741e34bf docs(readme): add 2026-07-29 news 2026-07-29 16:04:30 +08:00
Haozhe Wu 749c37b09f chore(frontend): declare the Node 22 requirement
React Router 8 requires Node >=22.22.0, so `npm install` now fails for anyone
still on Node 20 with an error that does not name the cause. Declare it in
package.json engines, and say it on the Quick Start line that tells people to
run it, in all five READMEs.
2026-07-28 15:59:33 +08:00
Haozhe Wu bd9a9b70b8 docs(readme): add 2026-07-28 news 2026-07-28 15:58:42 +08:00
Haozhe Wu d528066646 docs(readme): fix Windows install steps in all five READMEs (#888)
CMD has no `cp`, so `cp agent/.env.example agent/.env` fails there; add the
`copy` form and note that PowerShell's `cp` alias already works. Also add the
CMD activation line and the execution-policy hint that blocks Activate.ps1.

Reported by @brady-cec in discussion #29.
2026-07-28 01:54:41 +08:00
Haozhe Wu a69c55944b docs(readme): add 2026-07-27 news 2026-07-27 17:15:06 +08:00
Haozhe Wu f56a3d398f fix(background): prevent Windows host self-termination
Add task-scoped cancellation, reject broad Python process-name kills, expose timeout context, and cover the lifecycle on Windows 11 and Windows x64 with Python 3.14.

Signed-off-by: Haozhe Wu <haozhe_wu@connect.hku.hk>
2026-07-27 02:20:50 +08:00
Haozhe Wu d5ea0ec519 docs(readme): add 2026-07-26 news and ignore workbuddy 2026-07-26 19:13:36 +08:00
Haozhe Wu 93d666c5e6 docs(readme): add 2026-07-25 news across all 5 READMEs, keep 3 visible entries 2026-07-25 23:01:23 +08:00
Haozhe Wu 65bab10f32 docs(readme): add 2026-07-24 news across all 5 READMEs 2026-07-24 22:46:19 +08:00
Dvir Arad 170722e31b docs: fix broken Contributing nav anchor in README (#840)
The header nav links to #-contributing, but the 'Contributing' heading
has no leading emoji, so GitHub renders its anchor as #contributing (no
leading hyphen). Clicking 'Contributing' in the nav therefore does not
scroll to the section. README_ja.md already uses the correct #contributing
target; align README.md and README_zh.md with it.

Signed-off-by: dvir arad <dvirarad@gmail.com>
2026-07-24 22:10:46 +08:00
Haozhe Wu 43c444292c docs(readme): add 2026-07-23 news across all 5 READMEs 2026-07-23 13:44:46 +08:00
Haozhe Wu 761d52155c docs(readme): sync all 5 READMEs to v0.1.12 features + counts
News: 🚀 v0.1.12 entry (3-visible, demote 07-19). Counts synced to code:
462 alphas (academic 12), 88 skills, 23 data sources, 12 broker connectors.
Data Sources: add binance + mt5 rows + forex/metals fallback chain. New
Broker Connectors (12) and Backtest Engines (8) capability tables. Providers
list + native Anthropic / SiliconFlow / NVIDIA. Roadmap: SDM + Correlation
Regime rows. en/ja/ko English descriptions; zh/ar translated.
2026-07-22 22:47:39 +08:00
Haozhe Wu 43331c3221 docs(readme): v0.1.12 contributor credits across all 5 READMEs
Add the v0.1.12 cycle cohort (28 contributors) and demote the v0.1.11 list
into a collapsible block, in en/ja/ko/zh/ar. en/ja/ko keep English
descriptions; zh/ar translated.
2026-07-22 21:13:25 +08:00
Haozhe Wu a44e1be357 docs: add 2026-07-21 news across all 5 READMEs 2026-07-21 14:58:18 +08:00
Haozhe Wu 7abc2a8a03 docs: add 2026-07-20 news across all 5 READMEs
Providers (Anthropic native/SiliconFlow/iFlytek), MetaTrader 5 connector + mt5
source, llm-vision OCR, 80x signal vectorization, USD-M funding data, reliability
consolidation (#584, 13 issues), options partial-close fix, and more. Keeps 3
entries visible; 2026-07-17 moved into the earlier-news details.
2026-07-20 19:07:11 +08:00
Haozhe Wu 7ba3bf2f5d Merge PR #537: feat(providers): add iFlytek Spark as an OpenAI-compatible provider 2026-07-20 18:31:33 +08:00
Haozhe Wu 97e762e51c docs: add 2026-07-19 news across all 5 READMEs
Real US/HK Yahoo Finance news articles (#730), MCP factor_analysis contract
fix (#715/#635), Kimi K-series temperature=1 forcing (#701), and inverted/
degenerate-input fail-fast across split_message/PDF pages/journal filters
(#727-#729). Keeps 3 entries visible; 07-16 moves into the details block.
2026-07-19 19:50:02 +08:00
Haozhe Wu b79e4c54bd docs: add July 18 news (Binance loader + parallel-exec / correctness fixes) 2026-07-18 22:39:31 +08:00
Haozhe Wu a8f75628d6 fix(channels): operator-gate IM /pairing control plane (GHSA-fwpw)
IM /pairing ran with no authorization, so any allow-listed chat participant could
take over pairing across channels (+ Signal group members bypassed the sender
check, + code/sender_id leak). Add a config-driven operators allowlist (global +
per-channel, fail-closed when empty); gate every /pairing on operator identity in
runtime; scope store list/approve/revoke by channel; require per-sender auth for
control-plane slash-commands in Signal groups (ordinary /new /reset unchanged).
README documents the operator requirement.
2026-07-18 21:46:44 +08:00
Haozhe Wu 106edbdb41 fix(mcp): stop stdio transport from force-enabling shell tools (GHSA-6wjh)
MCP stdio previously force-enabled bash/background_run with no opt-out and the
module-level default was fail-open. Default to fail-closed and gate every
transport behind explicit opt-in (--enable-shell-tools flag or
VIBE_TRADING_ENABLE_SHELL_TOOLS). Local CLI is unaffected (still opts in
explicitly). Also shrinks the network-reachable surface of the bash
OS-command-injection sink (GHSA-m768). Adds regression tests + doc alignment.
2026-07-18 21:46:43 +08:00
Haozhe Wu d9cbce553b docs: add July 17 project news (correlation-regime skill + correctness pass) 2026-07-17 23:05:35 +08:00
Haozhe Wu ac9889a5ba revert(loaders): remove feitu / FTShare data source
#567 added feitu, a client SDK for the contributor-operated FTShare data
service. Reverting it: a 3-week-old, author-affiliated backend whose free tier
is at the operator's discretion is not a neutral public data source, and the
A/HK fallback chains already carry ample free coverage (tencent, mootdx,
eastmoney, baostock, akshare, yahoo, futu). Removed the loader, its test,
registry entries, fallback-chain slots, and doc/source-count references
(sources 22->21, free 20->19).
2026-07-17 22:41:55 +08:00
Haozhe Wu facc97cec1 Merge PR #570 2026-07-17 21:29:25 +08:00
Haozhe Wu ff4effb16d Merge PR #569 2026-07-17 21:27:58 +08:00
Haozhe Wu 65446854f8 Merge PR #567 2026-07-17 21:26:15 +08:00
Ali EmadiandClaude Fable 5 e04c98ca5b feat(swarm): discover user presets from ~/.vibe-trading/swarm/presets
Preset YAMLs dropped into ~/.vibe-trading/swarm/presets/ are now discovered
alongside the bundled roster, mirroring the user-skills pattern
(src/agent/skills.py): the user directory is searched first, same-name files
override bundled presets, and user files survive pip install -U (previously
the only way to add a preset was copying into site-packages, which upgrades
wipe).

- load_preset()/resolve_preset_path(): user dir first, then bundled; the
  not-found error names both locations.
- list_presets(): union with user-wins-by-stem override; entries gain a
  source: "user"|"bundled" field (additive — CLI/MCP/API consumers read
  keys individually or serialize the whole dict).
- Preset names are validated to a single path segment before any filesystem
  lookup (rejects separators and '..'); the bundled lookup had the same
  latent exposure, so validation covers both paths.
- run_swarm(preset_name=...): an explicitly named user preset now resolves;
  keyword auto-routing intentionally stays limited to the curated table, so
  a user preset is reachable only by naming it.
- Packaging regression suite extended (6 new tests: discovery, override,
  absent-dir no-op, traversal rejection, error message, tool gating); the
  roster-count test now filters to bundled entries so a developer's own user
  presets cannot make it flap.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Signed-off-by: Ali Emadi <ali@gatekeeperai.com>
2026-07-16 16:50:15 +02:00
Haozhe Wu db2ff578ae docs: add July 16 project news 2026-07-16 20:12:02 +08:00
root 0de5a78ccd build: add Longbridge credentials module and optional dependency
- Add credentials.py: unified credential resolution for data and trading
- Add test_longbridge_credentials.py: coverage for credential resolution
- Remove longbridge from requirements.txt (optional extra only)
- Update requirements-lock.txt
- Update .env.example with Longbridge credential hints
2026-07-16 19:23:54 +08:00
FenjuFu c5f6afabaf feat(providers): add iFlytek Spark as an OpenAI-compatible provider
Wire iFlytek Spark's OpenAI-compatible HTTP endpoint
(https://spark-api-open.xf-yun.com/v1, Bearer APIPassword) through the
provider registry, capabilities, legacy CLI onboarding, .env.example, and
the README provider list, with "iflytek" accepted as an alias. Spark rides
the generic OpenAI-compatible path with no special capability flags; the
default model is 4.0Ultra, which supports function calling.

Signed-off-by: FenjuFu <92919259+FenjuFu@users.noreply.github.com>
2026-07-16 18:11:28 +08:00
JellyfishKnight bca9d49593 feat(data): add FTShare market data source
Signed-off-by: JellyfishKnight <knightjellyfish@gmail.com>
2026-07-16 16:49:52 +08:00
Haozhe Wu bd51782647 docs: add July 15 project news 2026-07-15 21:06:04 +08:00
Haozhe Wu 7cd7dad3f1 docs: add July 14 project news 2026-07-14 13:46:31 +08:00
HUANG Cheng 06d742c4b6 feat(mcp): add Streamable HTTP transport for modern clients
Add --transport http exposing the MCP Streamable HTTP transport (spec 2025-03-26+) as a single POST/GET /mcp endpoint, alongside the existing stdio and legacy SSE transports. The legacy sse transport is unchanged.

Modern clients (e.g. QwenPaw) negotiate by POSTing an InitializeRequest; the deprecated two-endpoint SSE transport rejects that POST on /sse with 405 Method Not Allowed. Streamable HTTP accepts POST on its single endpoint.

FastMCP 3.4.4 (already a dependency) provides the transport via mcp.run(transport=streamable-http). Adds a --host option scoped to the http transport (default 127.0.0.1).

Signed-off-by: HUANG Cheng <cheng@duck.com>
2026-07-14 11:38:36 +08:00
Haozhe Wu 8855e654ed docs: log today's security-hardening + PR batch in CHANGELOG and news
Covers issue #476 (all 10 audit findings), #377/#478/#480/#487/#479/#484.
Propagated to all 5 locale READMEs' News section (3 visible + moved
2026-07-10 into <details>, per convention).
2026-07-13 12:55:36 +08:00
Yogesh ModiandYogesh Modi 4f0d5aa04a feat(factors): add Frazzini-Pedersen betting-against-beta (BAB) to ac… (#480)
Adds Frazzini-Pedersen (2014) "Betting Against Beta" to the academic zoo,
following the existing OHLCV-only proxy pattern: rolling 252-day per-stock
beta against an equal-weighted cross-sectional market return, cross-sectional
z-scored negative (so low-beta names rank highest, matching the long leg of
the original long-short construction). Proxy limitations vs. the original
(equal- vs value-weighted market, single window vs separate 1y-vol/5y-corr,
no explicit leverage) are disclosed in both the module docstring and
academic/LICENSE.md, matching the zoo's existing disclosure convention.

Verified locally: full purity + lookahead suites green (923 passed, 5
pre-existing skips), env-var CI gate passes, ruff clean.

One thing the PR's own test plan missed (it only ran the purity/lookahead
suites): SKILL.md has a manifest guard test
(test_alpha_zoo_counts_match_factor_modules) asserting the documented alpha
count matches the actual factor-module count. Adding a 461st alpha without
updating it fails that test. Folded in a fix bumping the count in SKILL.md
(460->461, academic 10->11) and propagated to all 5 locale READMEs' current-
state references (left the historical changelog entries describing past
counts untouched).

Co-authored-by: Yogesh Modi <YogeshModi24@users.noreply.github.com>
2026-07-13 12:47:58 +08:00
0xZKnwand0xZKnw fb6713e303 feat(trading): opt-in TAP mode — full Alpaca key isolation (reads + orders + cancel) (#377)
Opt-in TAP (Tool Authorization Protocol) mode for Alpaca: when TAP_PROXY_URL +
TAP_AGENT_KEY are configured, all broker egress (reads, order placement,
cancel) routes through a self-hosted TAP proxy instead of the direct SDK, so
the agent process never holds the raw Alpaca key — only a policy-scoped TAP
agent key. Writes block on human approval; the direct-SDK path is unchanged
when TAP isn't configured.

Reviewed: self-hosted deployment (holonym-foundation/tap-oss) resolves the
custody question; the TAP write path sits strictly downstream of the existing
mandate gate; with TAP env vars unset the direct path is byte-for-byte
unchanged; SSRF guard on the poll URL confirmed. 60/60 tests green
(agent/tests/test_tap_forward.py + test_alpaca_tap_routing.py).

Maintainer fix folded in before merge: tools/ci_env_var_gate.py (#440) landed
after this branch was cut and flagged TAP's raw os.environ reads — annotated
with the established `# noqa: env-gate` escape hatch (module is deliberately
independent of EnvConfig so it keeps working outside the app's normal
startup/config bootstrap).

Co-authored-by: 0xZKnw <0xZKnw@users.noreply.github.com>
2026-07-13 11:57:57 +08:00
Haozhe Wu 2f4ba89733 docs: remove dead Star History badge from all 5 READMEs
GitHub restricted the stargazers API on 2026-06-30 to repo admins/
collaborators only; api.star-history.com's SVG badge renders server-side
and can't authenticate as a collaborator on every embedding repo, so the
badge now fails with a server timeout instead of rendering (confirmed
live, no fix path per star-history.com's own postmortem).
2026-07-12 18:41:59 +08:00
Haozhe Wu 87b17daa55 docs: warn about unauthorized Vibe-Trading token 2026-07-12 17:35:11 +08:00
Haozhe Wu c0e3bbd1ec docs: propagate Requesty provider (#474) to all 5 locale READMEs + today's news entry 2026-07-12 16:49:08 +08:00
Thibault Jaigu 4b21586e10 feat(providers): add Requesty as an OpenAI-compatible provider
Mirror the existing OpenRouter wiring for Requesty (router.requesty.ai/v1,
REQUESTY_API_KEY/REQUESTY_BASE_URL, provider/model naming, opt-in
extra_body.reasoning). Add it to the capability registry, llm_providers.json,
onboarding + legacy CLI provider lists, .env.example, README, and add a
capability mirror test.

Signed-off-by: Thibault Jaigu <thibault.jaigu@gmail.com>
2026-07-12 09:36:11 +01:00
Haozhe Wu 39241e0ac3 docs: 2026-07-12 news entry + skill counts 86→87 for strategy-dev-manager (#457) 2026-07-12 15:54:41 +08:00
shadowinlife 68b8434b1a fix: address maintainer review + CI env var gate failures
1. CI env var gate: replace os.getenv() with centralized config accessor
   in sqlite_store.py, ocr/engine.py, ocr/qwen_vision_ocr.py — add
   OcrConfig + dashscope_api_key + strategy_store_db_path to EnvConfig
2. is_readonly=False on sdm_decay_scan and sdm_status (maintainer #1)
3. read_document: skip low-text pages instead of hard-failing on first
   scanned page; only error when entire doc is image-only (maintainer #2)
4. Wire Sharpe metric into evaluate_decay() for strategy artifacts
   (maintainer #3)
5. UNIQUE(name) → UNIQUE(name, universe) in sqlite schema (maintainer minor)
6. Remove unused imports: asdict, DecaySignal x3 (maintainer minor)
7. Wire consecutive_warnings field in decay snapshots (maintainer minor)
8. Add non-dry-run active→monitoring transition test (maintainer minor)
9. Extract shared compute_decay_metrics() to strategy_store/metrics.py
   eliminating duplication between sdm_decay_scan and sdm_status
10. Update skill count 86→87 in SKILL.md and README.md

All 5055 tests pass. CI env var gate passes. LSP diagnostics clean.

Co-Authored-By: OpenCode <noreply@opencode.ai>
AI-Model: alibaba-cn/glm-5.2
Co-Authored-By: opencode <noreply@ai-tool.com>
Co-Authored-By: Claude Code <noreply@anthropic.com>
AI-Contributed/Feature: 314/314
AI-Contributed/UT: 49/49
2026-07-12 13:17:06 +08:00
Haozhe Wu fa5e098143 fix(docs): propagate the fundamental zoo family + 0.1.11 counts to frontend, skills, and wiki
Post-release cross-audit findings: the 5th Alpha Zoo family never reached the
frontend (AlphaZoo card grid missing fundamental, academic still 6, '4 zoos'
i18n strings x5 locales), factors/__init__ docstring, or the asset-allocation
skill ('4 optimizers'). Wiki: 29->30 presets, docs version selector bumped to
0.1.11 (labels only; content is unversioned). README x5: locale parity for the
07-04 UTC news entry, india_broker in the loaders tree comment (20 sources),
ja/ko contributor headings translated.
2026-07-11 01:31:22 +08:00
Haozhe Wu ecd43ad7d2 release: v0.1.11 — India equity, fundamental factors, IM channels roll-up
Version bump + release paperwork: detailed CHANGELOG for 0.1.11 (plus the
missing 0.1.10 backfill), README news + counts across all 5 locales
(30 presets / 460 alphas across 5 families / 19 free sources + india_broker
row and India fallback chain / roadmap), v0.1.11 contributor cycle credits,
SKILL.md version, and the opt-in scheduler flag documented in .env.example.
2026-07-11 01:11:35 +08:00
Haozhe Wu aaa9945792 docs: add July 10 news — India equity support, centralized env config, UX guard batch 2026-07-10 12:50:25 +08:00
Haozhe Wu f0213c14bc docs: add July 9 news 2026-07-09 13:48:52 +08:00
Haozhe Wu ef0335286c docs: add July 8 news — fundamental factor layer Phase 1, QVeris optional premium data, maintainer day 2026-07-08 15:06:24 +08:00
Haozhe Wu 035673b065 revert: back out IRR-AGL reliability/governance stack (#405, #416)
Reverts merge commits 0b867a7 (#405) and 474f5e4 (#416), and removes the
now-orphaned #406 artifact metadata store (src/reliability + tests, zero
references left outside its own tests).

Why: the stack wrapped the tool registry in every session path (even
governance mode=off) without exposing the registry surface AgentContext
reads, breaking all session-runtime chats within a day (#433, #431). It
also modified protected core files (src/agent/loop.py, src/session/
service.py), shipped 12 internal-convention docs/ files into the public
tree, and its enforcement layer already has reported bypass paths (#420).
Trading safety stays on the single mandate-gate design (#31, #144).

README news entries for 2026-07-07/07-06 updated accordingly.
2026-07-08 14:15:56 +08:00
Haozhe Wu be117a24b4 feat: QVeris paid data marketplace integration (pluggable, single-commit revertable)
Provider: qveris.ai capability marketplace (search/inspect/execute + usage/ledger).
All logic lives in new files; every touch to an existing file is a tagged
QVERIS-INTEGRATION line so 'git revert' of this commit removes the feature cleanly.

- agent tools: qveris_search / qveris_inspect (free) / qveris_execute
  (paid; preview-by-default, allow_paid gated by per-session credit budget)
- REST: GET/PUT /qveris/config + GET /qveris/status (masked key, signup url)
- CLI: vibe-trading qveris status|enable|disable|usage (+ /qveris slash)
- backtest loader: source="qveris" (explicit-only; structurally excluded
  from every auto fallback chain; granularity-aware capability selection;
  top-3 candidate fallback; provider-named series container parsing;
  truncated-result full-content download)
- frontend: Settings QVeris card (toggle/base URL/key/mode/budget/balance/
  recent usage/referral signup CTA), 5 locales aligned (21 keys)
- skill: qveris SKILL.md + references (rest-api, coverage map) + data-routing row
- README x5: free-vs-premium dual-track data section (QVERIS-START/END)

Live-verified end to end against the real API: CLI enable/status, REST config,
search/inspect/preview-refusal/paid execute (charged 1-2 credits, ledger
reconciled), loader fetched 9 real AAPL daily bars. Full backend suite
5025 passed with no regressions; frontend vitest + tsc clean.
2026-07-08 13:42:31 +08:00
Haozhe Wu a2b68e8e6b docs: add July 7 contributor batch news 2026-07-07 13:24:51 +08:00