Implements VT-001 through VT-010 from the 2026-07-10 external security audit (Trivy/Semgrep/ZAP/Gitleaks/pip-audit against a real deployment): - VT-001 (Critical): AST hardening in backtest/runner.py rejects network/subprocess/eval/os.environ/unsafe-open calls reachable from generated SignalEngine method bodies (previously only checked top-level statements). Defense-in-depth: ephemeral per-run HOME, RLIMIT_AS/NOFILE caps, best-effort UID-drop to a new vibe-sandbox user (currently inert under Docker's cap model - see session doc; accepted as documented residual gap, primary AST defense unaffected). - VT-002: multi-stage Dockerfile split so build-essential never reaches the runtime image. - VT-003: SSE auth moved from a long-lived API key in the URL query string to short-lived single-use tickets; access-log redaction for any remaining query secrets. - VT-004: agent/.env split-brain fixed (bind mount + atomic 0600 writes) between docker-compose and Web UI settings writes. - VT-005: /correlation now requires auth + per-IP rate limit; generic exceptions no longer leak raw text to clients. - VT-006: CSP-Report-Only + security headers middleware; Google Fonts replaced with self-hosted @fontsource packages. - VT-007: docker-compose hardening (cap_drop ALL + minimal cap_add, no-new-privileges, read_only rootfs, resource limits). - VT-008: /health split into /live (liveness) and /ready (real provider-config readiness check); /health kept as a compat alias. - VT-009: base images pinned by digest, GitHub Actions pinned by commit SHA, dependabot.yml added, hash-verified requirements-lock.txt now actually wired into the Docker build via --require-hashes. - VT-010: universe-panel pickle cache sidecar upgraded from an unkeyed SHA-256 (forgeable by anyone with cache-dir write access) to a keyed HMAC. Implemented via a 5-parcel Workflow (file-disjoint, independent adversarial verification per parcel, then a holistic final audit). The final audit caught a real regression (CI env-var-gate violation) and confirmed a dependency-pinning gap, both fixed and re-verified here, including a latent transitive-dependency bug the fix surfaced (smartmoneyconcepts<0.0.27 pulls an unbuildable zigzag package) - see docs/sessions/2026-07-13_session_vt476_security_hardening.md (local, gitignored) for full evidence trail. Full suite: 5191 passed, 6 pre-existing/environmental failures (unchanged from main). Docker build + hardened compose boot verified end-to-end.
63 lines
1.3 KiB
Plaintext
63 lines
1.3 KiB
Plaintext
# Core LLM & Orchestration
|
|
rich>=13.0.0
|
|
prompt_toolkit>=3.0.0
|
|
pyyaml>=6.0.0
|
|
langchain>=1.3.9,<2
|
|
langchain-core>=1.0.0,<2
|
|
langchain-openai>=1.0.0,<2
|
|
# optional: pip install "vibe-trading-ai[deepseek]" — native DeepSeek adapter (langchain-deepseek)
|
|
langgraph>=1.2.5,<1.3
|
|
langgraph-checkpoint>=2.1.0,<5
|
|
python-dotenv>=1.0.0
|
|
httpx>=0.28.0
|
|
oauth-cli-kit>=0.1.3
|
|
|
|
# Data & Computation
|
|
pandas>=2.0.0,<3.0.0
|
|
numpy>=1.24.0
|
|
scipy>=1.10.0
|
|
bottleneck>=1.3.7
|
|
duckdb>=1.2.0
|
|
|
|
# Document Readers (doc_reader_tool)
|
|
openpyxl>=3.1.0
|
|
python-docx>=1.1.0
|
|
python-pptx>=0.6.23
|
|
pypdfium2>=4.0.0
|
|
Pillow>=12.2.0
|
|
|
|
# ML Strategy
|
|
scikit-learn>=1.3.0
|
|
joblib>=1.3.0
|
|
|
|
# Signal Skills
|
|
smartmoneyconcepts>=0.0.27 # floor bumped 2026-07-13: 0.0.10 pulls in zigzag, an abandoned transitive dep with no arm64/py3.11 wheel (sdist Cython build fails); 0.0.27 (current latest) confirmed dependency-free of it
|
|
# optional: pip install "vibe-trading-ai[harmonic]" for the pyharmonics-backed harmonic pattern detector
|
|
|
|
# Data Providers
|
|
tushare>=1.2.89
|
|
requests>=2.31.0
|
|
defusedxml>=0.7.1
|
|
yfinance>=0.2.30
|
|
akshare>=1.12.0
|
|
ccxt>=4.0.0
|
|
|
|
# REST API & SSE
|
|
fastapi>=0.104.0
|
|
uvicorn[standard]>=0.24.0
|
|
websockets>=12.0
|
|
pydantic>=2.0.0
|
|
python-multipart>=0.0.18
|
|
sse-starlette>=1.6.0
|
|
|
|
# MCP Server
|
|
fastmcp>=2.14.0
|
|
|
|
# Web Search
|
|
ddgs>=6.0.0
|
|
|
|
# Shadow Account HTML/PDF Report
|
|
jinja2>=3.1.0
|
|
matplotlib>=3.7.0
|
|
weasyprint>=60.0
|