v0.1.6

HKUDS/Vibe-Tradingv0.1.6Apr 28, 2026by warren618

AI Summary

A critical packaging fix for swarm presets and community-driven features including benchmark comparison, file upload streaming, and a Futu data loader.

Key Highlights

  • Fix for swarm presets packaging bug affecting installed wheels.
  • Benchmark comparison panel in backtest output.
  • Streaming /upload endpoint with size limits.
  • Futu data loader for Hong Kong and A-share equities.
  • vnpy CtaTemplate export skill.

New Features

  • Swarm presets packaging fix.
  • Benchmark comparison panel.
  • Streaming /upload endpoint.
  • Futu data loader.
  • vnpy CtaTemplate export skill.
  • AKShare loader fixes.
  • Frontend route-level lazy loading.

Full Release Notes

## 🚀 v0.1.6 — Critical packaging fix + community-driven features

If you installed `vibe-trading-ai==0.1.5` via `pip install` or `uv tool install`, **`vibe-trading --swarm-presets` returned `No presets available` and `run_swarm` was unusable**. This release fixes that — please upgrade.

```bash
pip install -U vibe-trading-ai
# or
uv tool install --reinstall vibe-trading-ai
```

## Highlights

### 🐛 Swarm presets packaging fix (#55)

Preset YAMLs were declared via `[tool.setuptools.data-files]` in `pyproject.toml`, which lands them under `<install-prefix>/.data/data/config/swarm/` rather than at `<site-packages>/config/swarm/` where the loader looked. Editable installs (`pip install -e .`) happened to work because the source-tree path resolved correctly, so the bug only surfaced in published wheels — every `pip install vibe-trading-ai==0.1.5` was broken on this code path.

**Resolution**: 29 preset YAMLs moved into `agent/src/swarm/presets/` so they ship as ordinary `package-data`. Loader now resolves via `Path(__file__).parent / "presets"` — identical under editable installs and built wheels. Pinned by a 6-test packaging regression suite so this can't silently regress again.

Bug reported by @qxj — screenshots made it a 5-minute root cause hunt.

### 📊 Benchmark comparison panel
Backtest output now ships a benchmark comparison panel (ticker / benchmark return / excess return / information ratio) with yfinance-backed resolution for SPY, CSI 300, and other major indices. Contributed by @MB-Ndhlovu (#48).

### 🛡️ `/upload` streaming + size limits
The `/upload` endpoint streams the request body in 1 MB chunks and aborts past `MAX_UPLOAD_SIZE` with partial-file cleanup. The 50 MB cap is now actually enforced under malicious / oversized clients. Pinned by 4 regression tests. Contributed by @genoshide (#53).

### 📈 Futu data loader (HK + A-share)
6th data source — Futu OpenAPI integration for Hong Kong and A-share equities, with broker-grade real-time quotes. Contributed by @hamza-mobeen (#47).

### 🔧 vnpy CtaTemplate export skill
72nd skill — `vnpy-export` generates ready-to-run `CtaTemplate` strategy code for the vnpy backtest framework. Contributed by @hamza-mobeen (#46).

## 0.1.6 maintenance

- **Loader**: AKShare loader correctly routes ETFs (`510300.SH`) and forex (`USDCNH`) to the right endpoints with hardened registry fallback
- **Workspace**: Relative `run_dir` normalized to active run dir — fixes empty/relative paths in tool calls (#43, @Mothilal-M)
- **Security**: Path containment enforced in `safe_path` + sandboxing for journal / shadow account tools
- **Build**: `MANIFEST.in` ships `.env.example` / tests / Docker files in sdist
- **Frontend**: Route-level lazy loading shrinks initial bundle 688 KB → 262 KB
- **Docs**: README usage examples (#45, @hamza-mobeen)
- **SKILL manifest**: synced to 22 MCP tools / 72 skills / 6 data sources / 29 swarm presets

## Install / upgrade

| Channel | Command |
|---|---|
| **PyPI** | `pip install -U vibe-trading-ai` |
| **uv tool** | `uv tool install --reinstall vibe-trading-ai` |
| **ClawHub** (Claude Desktop / OpenClaw) | `clawhub install vibe-trading` |
| **Docker** | `docker compose pull && docker compose up -d` |

## By the numbers

- 27 agent tools (22 exposed via MCP)
- 72 bundled skills (+ user-created via full CRUD)
- 6 data sources with auto-fallback: tushare, yfinance, okx, akshare, ccxt, **futu** *(new)*
- 29 swarm presets, 7 backtest engines + options portfolio
- 13 LLM providers

## 🙌 New contributors

Huge thanks to everyone who opened a PR in this cycle — **all 4 are first-time contributions** to Vibe-Trading:

- @hamza-mobeen — Futu data loader (#47), vnpy CtaTemplate export skill (#46), README usage examples (#45) — three first-time PRs in one cycle 👏
- @MB-Ndhlovu — backtest benchmark comparison panel (#48)
- @genoshide — `/upload` streaming + size limits (#53)
- @Mothilal-M — `_normalize_tool_run_dir` workspace fix (#43)

Issue reporters who kept the surface area honest: thanks to @qxj for the high-quality #55 reproduction and to @myrassel for the OAuth feature suggestion (#49) we are tracking for a future release.

## Changelog

**Full changes**: https://github.com/HKUDS/Vibe-Trading/compare/v0.1.5...v0.1.6

<details>
<summary><b>Merged PRs since v0.1.5</b> (6)</summary>

- #53 fix: stream uploads while enforcing API size limit — @genoshide
- #48 feat(cli): add benchmark comparison to backtest output — @MB-Ndhlovu
- #47 feat: add Futu data loader for HK and A-share equities — @hamza-mobeen
- #46 feat: add vnpy export skill for CtaTemplate strategies — @hamza-mobeen
- #45 docs: add usage examples to README — @hamza-mobeen
- #43 feat(loop): add _normalize_tool_run_dir function and corresponding tests — @Mothilal-M

</details>