# Changelog All notable changes to Salior are documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [0.3.0] — 2026-05-11 ### Added - **Dashboard web UI** (`salior/dashboard/`) - `dashboard/server.py` — FastAPI-alternative via aiohttp (`salior dashboard serve`) - `dashboard/templates/index.html` — Dark-themed trading dashboard (wallet bar, signal feed, portfolio, order form, agent health) - `dashboard/static/app.js` — Vanilla JS wallet connect + live data polling (30s signals, 10s agents) - `dashboard/static/favicon.svg` — SVG favicon - API endpoints: `/api/portfolio`, `/api/signals`, `/api/performance`, `/api/wallet/connect`, `/api/wallet/session`, `/api/wallet/auth-message`, `/api/order` - **Compute orchestration** (`salior/compute/`) - `compute/node_manager.py` — Node registry (YAML), SSH connect, `ping()`, `run()`, GPU filtering - `compute/deploy.py` — `deploy_plugin()` via rsync to remote nodes, `status_plugin()` via SSH - Nodes stored at `~/.salior/nodes.yaml` - **Risk agent** (`salior/agents/risk/agent.py`) - `RiskAgent` — position sizing, max drawdown check, max daily loss pause - Rules: `MAX_POSITION_PCT=0.10`, `MAX_DRAWDOWN=0.20`, `MAX_DAILY_LOSS=0.05` - `pause()` / `resume()` / `is_paused()` controls for circuit breaker behavior - **Daemon** (`salior/daemon.py`) - `Daemon` class — PID file at `~/.salior/run/.pid`, graceful SIGTERM/SIGINT handling - `make_daemon(name)` factory - **6 skills** (`salior/skills/`) — now includes: - `plan.md` — Task decomposition into atomic verifiable steps - `test.md` — Red-green-refactor, test pyramid, what to/not test ### Changed - `salior/cli.py` — Added `dashboard serve`, `skill list`, `compute status` commands - `agent start` now starts 4 agents: data + signal + exec + risk - `mcp serve` fires up MCP server on configured host/port - Skills registry now finds 6 skills (was 4) ### Fixed - Skills registry imports (was importing schema module causing double-nesting issues) ### Known Limitations - `exec_agent` is a stub for live trading — requires HL API wallet private key (secp256k1 ECDSA) - `place_order` MCP tool requires wallet approval flow (frontend not wired yet) - Risk agent position sizing needs total portfolio value from DB to be fully functional ## [0.2.0] — 2026-05-11 ### Added - **4 built-in plugins** (`plugins/`) - `llm_batcher/` — Batch multiple LLM calls into one request (cost + speed) - `backtest_engine/` — Vectorized historical backtesting on TimescaleDB candles - `rl_trainer/` — PPO reinforcement learning agent training (GPU node required) - `ml_predictor/` — scikit-learn signal enhancement model ### Changed - `plugins/` directory now populated (was empty in v0.1.0) - `CHANGELOG.md` added at `docs/changelog/CHANGELOG.md` ## [0.1.0] — 2026-05-11 ### Added - **Core package skeleton** (`salior/`) - `salior/core/config.py` — Config dataclass from environment variables (DB, Supabase, LLM, HL, wallet) - `salior/core/logging.py` — structlog setup with console output - `salior/core/memory.py` — File-backed long-term memory (`~/.salior/memory/`) - `salior/core/agent.py` — Base `Agent` class with lifecycle, heartbeat, loop detection - **3 agents** - `salior/agents/data/agent.py` — HL WebSocket collector → TimescaleDB (candles_1m, candles_5m, trades) - `salior/agents/signal/agent.py` — Candles → regime + conviction → Supabase signals (60s cycle) - `salior/agents/exec/agent.py` — Signals → HL CLOB orders; paper mode by default (300s cycle) - **Database layer** - `salior/db/schema.sql` — Full PostgreSQL + TimescaleDB schema (8 hypertables, 8 app tables) - `salior/db/timescale_client.py` — asyncpg client for market data (candles, trades, orderbook) - `salior/db/supabase_client.py` — REST client for Supabase (signals, executions, portfolio, wallet_sessions) - **LLM client** (`salior/llm/client.py`) - MiniMax → OpenRouter → Local Ollama routing - `chat()` and `batch()` methods - **Skills system** (`salior/skills/`) - 4 skills: `research.md`, `build.md`, `spec.md`, `review.md` - `skills/registry.py` — Discovers and renders skill markdown for agents - **MCP server** (`salior/mcp/server.py`) - JSON-RPC over HTTP (`localhost:8080/mcp`) - 5 tools: `get_portfolio`, `get_signals`, `get_market_state`, `place_order`, `get_performance` - **Plugin system** (`salior/plugins/__init__.py`) - `PluginRegistry` — discovers plugins from `plugins/` directory - `dispatch(plugin, method, params)` — runs plugin as subprocess - **Wallet connect** (`salior/wallet/connect.py`) - EIP-4361 sign-in message generation - 180-day session storage via Supabase - Rabby + MetaMask compatible (both inject `window.ethereum`) - **CLI** (`salior/cli.py`) - `salior status` — print config - `salior db init` — apply schema.sql - `salior agent start` — run data + signal agents - `salior mcp serve` — start MCP server - `salior plugin list` — show available plugins ### Changed - Project structure: `salior/` Python package at repository root (no nested `src/`) - `pyproject.toml` — hatch build, click CLI entrypoint, all dependencies declared ### Fixed - `wallet/connect.py` — syntax error in auth message f-string (triple-quote bleed) ### Known Limitations - `exec_agent` is a stub for live trading — requires HL API wallet private key (secp256k1 ECDSA) - Dashboard web UI not yet built - No risk agent (`agents/risk/`) - `place_order` MCP tool requires wallet approval flow (frontend not wired yet)