docs: update CHANGELOG for v0.4.0
This commit is contained in:
parent
f4947da143
commit
3e72c0a805
@ -5,127 +5,89 @@ 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/),
|
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).
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||||
|
|
||||||
|
## [0.4.0] — 2026-05-11
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- **Hooks event system** (`salior/hooks/`)
|
||||||
|
- `hooks/registry.py` — `HookRegistry` with `on()` / `off()` / `emit()` and global instance
|
||||||
|
- Built-in events: `on_signal`, `on_fill`, `on_execution`, `on_error`, `on_risk_breach`, `on_agent_health`
|
||||||
|
- `HookEvent` dataclass: name, data, timestamp, source
|
||||||
|
|
||||||
|
- **Scheduler** (`salior/scheduler.py`)
|
||||||
|
- `Scheduler` — run multiple async tasks on independent fixed intervals
|
||||||
|
- `IntervalTask` — wraps a coroutine, runs on a `loop_interval`, handles timeouts
|
||||||
|
- `schedule(name, coro, interval)` to register tasks
|
||||||
|
|
||||||
|
- **Telegram bot** (`salior/telegram_bot.py`)
|
||||||
|
- `TelegramBot` — poll-based bot with `/start`, `/status`, `/signals`, `/pnl`, `/help` commands
|
||||||
|
- Hook integration: fires alerts on `on_fill`, `on_risk_breach`, `on_error`
|
||||||
|
- Chat IDs stored in `~/.salior/telegram_chats.txt`
|
||||||
|
- `emit_signal()`, `emit_fill()`, `emit_risk_breach()` helpers for agents
|
||||||
|
|
||||||
|
- **CLI groups fully wired** (`salior/cli.py`)
|
||||||
|
- `salior agent [list|start]` — agent management
|
||||||
|
- `salior dashboard serve` — web dashboard
|
||||||
|
- `salior mcp serve` — MCP server
|
||||||
|
- `salior daemon [start|stop|status]` — PID-file daemon
|
||||||
|
- `salior telegram serve` — Telegram bot
|
||||||
|
- `salior compute [list|add|remove|ping|deploy]` — node management
|
||||||
|
- `salior plugin [list|enable|disable]` — plugin management
|
||||||
|
- `salior skill [list|show]` — skill management
|
||||||
|
- `salior hook [list|fire]` — hook event system
|
||||||
|
- `salior status --verbose` — nodes + plugins summary
|
||||||
|
|
||||||
|
- **Compute status module** (`salior/compute/status.py`)
|
||||||
|
- `full_status()` — nodes + plugins overview
|
||||||
|
- `node_status(name)` — per-node detail
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
- `agent start` remains: data + signal + exec + risk
|
||||||
|
- `compute/__init__.py` now exports `Node`, `NodeManager`, `deploy_plugin`, `status_plugin`, `full_status`, `node_status`
|
||||||
|
|
||||||
|
### 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)
|
||||||
|
- Telegram bot requires `TELEGRAM_BOT_TOKEN` env var
|
||||||
|
- Risk agent position sizing needs total portfolio value from DB to be fully functional
|
||||||
|
|
||||||
## [0.3.0] — 2026-05-11
|
## [0.3.0] — 2026-05-11
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|
||||||
- **Dashboard web UI** (`salior/dashboard/`)
|
- **Dashboard web UI** (`salior/dashboard/`)
|
||||||
- `dashboard/server.py` — FastAPI-alternative via aiohttp (`salior dashboard serve`)
|
- `dashboard/server.py` — aiohttp server (`salior dashboard serve`)
|
||||||
- `dashboard/templates/index.html` — Dark-themed trading dashboard (wallet bar, signal feed, portfolio, order form, agent health)
|
- `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/app.js` — Vanilla JS wallet connect + live data polling (30s signals, 10s agents)
|
||||||
- `dashboard/static/favicon.svg` — SVG favicon
|
- `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`
|
- 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 orchestration** (`salior/compute/`)
|
||||||
- `compute/node_manager.py` — Node registry (YAML), SSH connect, `ping()`, `run()`, GPU filtering
|
- `node_manager.py` — Node registry (YAML at `~/.salior/nodes.yaml`), SSH ping/run, GPU filtering
|
||||||
- `compute/deploy.py` — `deploy_plugin()` via rsync to remote nodes, `status_plugin()` via SSH
|
- `deploy.py` — `deploy_plugin()` via rsync to remote nodes
|
||||||
- Nodes stored at `~/.salior/nodes.yaml`
|
|
||||||
|
|
||||||
- **Risk agent** (`salior/agents/risk/agent.py`)
|
- **Risk agent** (`salior/agents/risk/agent.py`)
|
||||||
- `RiskAgent` — position sizing, max drawdown check, max daily loss pause
|
- `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()` circuit breaker controls
|
||||||
- `pause()` / `resume()` / `is_paused()` controls for circuit breaker behavior
|
|
||||||
|
|
||||||
- **Daemon** (`salior/daemon.py`)
|
- **Daemon** (`salior/daemon.py`)
|
||||||
- `Daemon` class — PID file at `~/.salior/run/<name>.pid`, graceful SIGTERM/SIGINT handling
|
- `Daemon` class — PID file at `~/.salior/run/<name>.pid`, graceful SIGTERM/SIGINT handling
|
||||||
- `make_daemon(name)` factory
|
|
||||||
|
|
||||||
- **6 skills** (`salior/skills/`) — now includes:
|
- **6 skills** (`salior/skills/`)
|
||||||
- `plan.md` — Task decomposition into atomic verifiable steps
|
- `plan.md` — task decomposition
|
||||||
- `test.md` — Red-green-refactor, test pyramid, what to/not test
|
- `test.md` — red-green-refactor
|
||||||
|
|
||||||
### 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
|
## [0.2.0] — 2026-05-11
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|
||||||
- **4 built-in plugins** (`plugins/`)
|
- **4 built-in plugins** (`plugins/`)
|
||||||
- `llm_batcher/` — Batch multiple LLM calls into one request (cost + speed)
|
- `llm_batcher/`, `backtest_engine/`, `rl_trainer/`, `ml_predictor/`
|
||||||
- `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
|
## [0.1.0] — 2026-05-11
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|
||||||
- **Core package skeleton** (`salior/`)
|
- Core skeleton, 3 agents, database layer, LLM client, skills, MCP server, plugin system, wallet connect, CLI
|
||||||
- `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)
|
|
||||||
Loading…
Reference in New Issue
Block a user