Files
Haozhe Wu d3c76819c3 fix: complete October 11-12 maintenance and research updates
Fix live option guards, grounding operand evidence, source-bound benchmarks, trade artifacts, attribution, drawdowns, valuation tolerances, and SEC point-in-time factor inputs.

Add Brazil research data and market support, 13 fundamental and valuation factors, channel progress forwarding, and opt-in ZimaOS templates. Update seven README News sections with three visible dates.

Validation: 17,635 backend tests passed; 1,084 final targeted tests and 103 frontend tests passed. Frontend build, package build, documentation checks, and CI gates passed.
2026-10-12 02:29:46 +08:00

182 lines
7.0 KiB
YAML

# ZimaOS custom-app template. Configure required variables before importing.
# Daily data sync and Watchtower updates are opt-in; see README.md.
name: vibe-trading
services:
# One-shot: creates the AppData folders and hands them to the image's
# unprivileged `vibe` user. Docker creates missing bind-mount folders as
# root, which `vibe` could not write to. Only files not already owned by
# `vibe` are touched, so restarts stay fast even with GBs of data.
vibe-trading-init:
image: ${VIBE_TRADING_IMAGE:?Set VIBE_TRADING_IMAGE to a reviewed image tag}
container_name: vibe-trading-init
pull_policy: always
user: "0:0"
restart: "no"
# Plain argv, no shell and no variables: ZimaOS interpolates the compose
# file more than once, so an escaped shell variable reaches the shell as
# an empty string. find also descends into the nested br-data mount.
entrypoint: ["find"]
command:
- /app/agent/runs
- /app/agent/sessions
- /home/vibe/.vibe-trading
- /app/agent/.swarm/runs
- /app/agent/uploads
- "!"
- -user
- vibe
- -exec
- chown
- vibe:vibe
- "{}"
- +
healthcheck:
disable: true
volumes:
- ${VIBE_TRADING_APPDATA:-/DATA/AppData/vibe-trading}/runs:/app/agent/runs
- ${VIBE_TRADING_APPDATA:-/DATA/AppData/vibe-trading}/sessions:/app/agent/sessions
- ${VIBE_TRADING_APPDATA:-/DATA/AppData/vibe-trading}/home:/home/vibe/.vibe-trading
- ${VIBE_TRADING_APPDATA:-/DATA/AppData/vibe-trading}/br-data:/home/vibe/.vibe-trading/br-data
- ${VIBE_TRADING_APPDATA:-/DATA/AppData/vibe-trading}/swarm-runs:/app/agent/.swarm/runs
- ${VIBE_TRADING_APPDATA:-/DATA/AppData/vibe-trading}/uploads:/app/agent/uploads
vibe-trading:
image: ${VIBE_TRADING_IMAGE:?Set VIBE_TRADING_IMAGE to a reviewed image tag}
container_name: vibe-trading
pull_policy: always
restart: unless-stopped
depends_on:
vibe-trading-init:
condition: service_completed_successfully
ports:
- "8899:8899"
environment:
# REQUIRED: the port is published on the LAN, and the API refuses
# non-loopback clients without a key. Use a long random value
# (e.g. `openssl rand -hex 32`) and enter it in the Web UI when asked.
API_AUTH_KEY: "${API_AUTH_KEY:?Set a strong API_AUTH_KEY}"
TZ: America/Sao_Paulo
# LLM via OpenRouter (https://openrouter.ai/keys). Values set here win
# over the Web UI Settings after every restart, so change the model
# here, not in the UI.
LANGCHAIN_PROVIDER: openrouter
LANGCHAIN_MODEL_NAME: "${LANGCHAIN_MODEL_NAME:-deepseek/deepseek-v3.2}"
OPENROUTER_API_KEY: "${OPENROUTER_API_KEY:?Set OPENROUTER_API_KEY}"
OPENROUTER_BASE_URL: https://openrouter.ai/api/v1
# Do NOT set VIBE_TRADING_TRUST_DOCKER_LOOPBACK here: with a LAN-published
# port it would treat LAN clients as local.
volumes:
- ${VIBE_TRADING_APPDATA:-/DATA/AppData/vibe-trading}/runs:/app/agent/runs
- ${VIBE_TRADING_APPDATA:-/DATA/AppData/vibe-trading}/sessions:/app/agent/sessions
- ${VIBE_TRADING_APPDATA:-/DATA/AppData/vibe-trading}/home:/home/vibe/.vibe-trading
- ${VIBE_TRADING_APPDATA:-/DATA/AppData/vibe-trading}/br-data:/home/vibe/.vibe-trading/br-data
- ${VIBE_TRADING_APPDATA:-/DATA/AppData/vibe-trading}/swarm-runs:/app/agent/.swarm/runs
- ${VIBE_TRADING_APPDATA:-/DATA/AppData/vibe-trading}/uploads:/app/agent/uploads
cap_drop:
- ALL
cap_add:
- SETUID
- SETGID
security_opt:
- "no-new-privileges:true"
read_only: true
tmpfs:
- /tmp
- /home/vibe/.cache
- /home/vibe/.config
mem_limit: 4g
cpus: 2
pids_limit: 512
labels:
com.centurylinklabs.watchtower.enable: "false"
x-casaos:
envs:
- container: API_AUTH_KEY
description:
en_us: Required. Secret key for LAN access to the Web UI / API.
pt_br: Obrigatório. Chave secreta para acesso ao Web UI / API pela rede.
- container: OPENROUTER_API_KEY
description:
en_us: OpenRouter API key (https://openrouter.ai/keys)
pt_br: Chave da API do OpenRouter (https://openrouter.ai/keys)
- container: LANGCHAIN_MODEL_NAME
description:
en_us: OpenRouter model id, e.g. deepseek/deepseek-v4-pro
pt_br: Modelo do OpenRouter, ex. deepseek/deepseek-v4-pro
- container: TZ
description:
en_us: Time zone
ports:
- container: "8899"
description:
en_us: Web UI / API
volumes:
- container: /home/vibe/.vibe-trading
description:
en_us: Settings, memory and skills
pt_br: Configurações, memória e skills
- container: /home/vibe/.vibe-trading/br-data
description:
en_us: Brazilian official datasets (SQLite)
pt_br: Base oficial de dados brasileiros (SQLite)
# Daily sync of the official Brazilian datasets (B3 COTAHIST, CVM funds and
# companies, Banco Central, Tesouro Direto) into br-data/, where the app's
# get_br_market_data tool and the B3 loader read them. The first run
# downloads several GB and can take hours; later runs only fetch what changed.
vibe-trading-br-data:
profiles: ["br-data-sync"]
image: ${VIBE_TRADING_IMAGE:?Set VIBE_TRADING_IMAGE to a reviewed image tag}
container_name: vibe-trading-br-data
pull_policy: always
restart: unless-stopped
depends_on:
vibe-trading-init:
condition: service_completed_successfully
command: ["python", "-m", "src.br_data", "daemon"]
environment:
TZ: America/Sao_Paulo
# First years to download (B3 publishes from 1986; each year of
# COTAHIST is a few hundred MB in SQLite, options included).
VIBE_BR_COTAHIST_START_YEAR: "2015"
VIBE_BR_CVM_START_YEAR: "2022"
# Daily run time (Sao Paulo), after B3 and CVM publish the day's files.
VIBE_BR_SYNC_TIME: "21:30"
volumes:
- ${VIBE_TRADING_APPDATA:-/DATA/AppData/vibe-trading}/home:/home/vibe/.vibe-trading
- ${VIBE_TRADING_APPDATA:-/DATA/AppData/vibe-trading}/br-data:/home/vibe/.vibe-trading/br-data
# The image's healthcheck probes the web server, which this service does
# not run.
healthcheck:
disable: true
cap_drop:
- ALL
security_opt:
- "no-new-privileges:true"
read_only: true
tmpfs:
- /tmp
mem_limit: 2g
labels:
com.centurylinklabs.watchtower.enable: "false"
x-casaos:
architectures:
- amd64
main: vibe-trading
author: incorpore
developer: HKUDS
category: Finance
icon: https://raw.githubusercontent.com/HKUDS/Vibe-Trading/main/assets/icon.png
index: /
port_map: "8899"
scheme: http
title:
en_us: Vibe-Trading
tagline:
en_us: Natural-language finance research agent with backtesting
pt_br: Agente de pesquisa financeira com backtesting
description:
en_us: Vibe-Trading with optional Brazilian dataset sync.