Implements the foundation of the local observation dashboard described
in docs/11-gui-streamlit.md:
* gui/data_layer.py — read-only wrappers over Repository (system_state,
open positions) and audit_log (tail iteration, chain verify). The GUI
never imports runtime/ nor calls MCP services.
* gui/main.py — Streamlit entry point with sidebar (engine health
badge, kill switch banner, last health check age), home overview.
* gui/pages/1_📊_Status.py — engine status with colored health banner,
kill switch detail, audit anchor, open positions table.
* gui/pages/2_🔍_Audit.py — live audit log stream (newest-first),
event filters, hash-chain integrity verify button.
* cli.py gui — replaces the placeholder with os.execvpe to
`python -m streamlit run` bound to 127.0.0.1, --browser.gatherUsageStats
false; --db / --audit paths exported via env to the GUI process.
* pyproject.toml — N999 ignore for src/cerbero_bite/gui/pages/* (Streamlit
auto-discovers pages whose filename contains numbers and emoji icons).
Smoke test: GUI launches, HTTP 200 on / and /_stcore/health, data layer
correctly reflects current testnet state (engine=running, kill_switch
disarmed, 0 open positions, audit chain integra 7 entries).
353/353 tests still pass; ruff clean; mypy strict src clean.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Wrapper async tipizzati sui sei servizi MCP HTTP che Cerbero Bite
consuma in autonomia. 277 test pass, copertura clients 93%, mypy
strict pulito, ruff clean.
Base layer:
- clients/_base.py: HttpToolClient con httpx + tenacity (retry
esponenziale 3x, timeout 8s, mapping HTTP→eccezioni tipizzate).
- clients/_exceptions.py: McpAuthError, McpServerError, McpToolError,
McpDataAnomalyError, McpNotFoundError, McpTimeoutError.
- config/mcp_endpoints.py: risoluzione URL via Docker DNS
(mcp-deribit:9011, ...) con override per servizio via env var;
caricamento bearer token da secrets/core.token o
CERBERO_BITE_CORE_TOKEN_FILE.
Wrapper:
- clients/macro.py: next_high_severity_within() per filtro entry §2.5.
- clients/sentiment.py: funding_cross_median_annualized() con
annualizzazione per period nativo per exchange (Binance/Bybit/OKX
1095, Hyperliquid 8760).
- clients/hyperliquid.py: funding_rate_annualized() per filtro §2.6.
- clients/portfolio.py: total_equity_eur(), asset_pct_of_portfolio()
per sizing engine + filtro §2.7.
- clients/telegram.py: notify-only (no callback queue, no
conferme — Bite auto-execute).
- clients/deribit.py: environment_info, index_price_eth,
latest_dvol, options_chain, get_tickers, orderbook_depth_top3,
get_account_summary, get_positions, place_combo_order (combo
atomico), cancel_order.
CLI:
- cerbero-bite ping: health-check parallelo di tutti gli MCP con
tabella rich (OK/FAIL/SKIPPED).
Docker:
- Dockerfile multi-stage Python 3.13 + uv, user non-root.
- docker-compose.yml con rete external "cerbero-suite", secret
core_token montato a /run/secrets/core_token, env per ogni MCP.
- secrets/README.md documenta il setup del token.
Documentazione di intervento:
- docs/12-mcp-deribit-changes.md: spec delle modifiche apportate
al server mcp-deribit (place_combo_order + override testnet via
DERIBIT_TESTNET).
Dipendenze:
- aggiunto pytest-httpx per i test HTTP.
- rimosso mcp>=1.0 (non usiamo l'SDK MCP, parliamo via HTTP REST).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Implementa i sette algoritmi puri di docs/03-algorithms.md con
disciplina TDD: 112 test, copertura statement+branch al 100% su
core/ e config/, mypy --strict pulito, ruff pulito.
Moduli:
- config/schema.py: StrategyConfig Pydantic v2 con validatori di
consistenza (kelly, delta, OTM, spread width, profit/stop).
- core/types.py: OptionQuote e OptionLeg condivisi.
- core/entry_validator.py: validate_entry (accumula motivi) e
compute_bias (bull_put/bear_call/iron_condor/None).
- core/liquidity_gate.py: check OI/volume/spread/depth + slippage
stimato in % del credito.
- core/sizing_engine.py: Quarter Kelly con cap 200/1000 EUR e
bande DVOL.
- core/combo_builder.py: select_strikes (DTE/OTM/delta/width/credit)
e build (ComboProposal con credit/max_loss/breakeven).
- core/greeks_aggregator.py: somma firmata BUY/SELL, theta in USD.
- core/exit_decision.py: 6 trigger ordinati con eccezione skip-time
vicino a profit (mark in (50%,70%] credito).
- core/kelly_recalibration.py: full/quarter Kelly, confidence per
sample size, blend medio in fascia 30-99 trade.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>