aether-quant 0.2.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- aether_quant-0.2.0/.dockerignore +16 -0
- aether_quant-0.2.0/.env.compose.example +12 -0
- aether_quant-0.2.0/.gitattributes +2 -0
- aether_quant-0.2.0/.github/workflows/ci.yml +43 -0
- aether_quant-0.2.0/.github/workflows/release.yml +72 -0
- aether_quant-0.2.0/.gitignore +95 -0
- aether_quant-0.2.0/Dockerfile +18 -0
- aether_quant-0.2.0/Dockerfile.retraining_worker +14 -0
- aether_quant-0.2.0/Dockerfile.telegram_worker +9 -0
- aether_quant-0.2.0/Dockerfile.trigger_worker +8 -0
- aether_quant-0.2.0/Dockerfile.worker +7 -0
- aether_quant-0.2.0/PKG-INFO +5 -0
- aether_quant-0.2.0/README.md +409 -0
- aether_quant-0.2.0/aether_quant.egg-info/PKG-INFO +5 -0
- aether_quant-0.2.0/aether_quant.egg-info/SOURCES.txt +214 -0
- aether_quant-0.2.0/aether_quant.egg-info/dependency_links.txt +1 -0
- aether_quant-0.2.0/aether_quant.egg-info/entry_points.txt +2 -0
- aether_quant-0.2.0/aether_quant.egg-info/scm_file_list.json +211 -0
- aether_quant-0.2.0/aether_quant.egg-info/scm_version.json +8 -0
- aether_quant-0.2.0/aether_quant.egg-info/top_level.txt +2 -0
- aether_quant-0.2.0/analyzer/README.md +44 -0
- aether_quant-0.2.0/analyzer/__init__.py +13 -0
- aether_quant-0.2.0/analyzer/market_analyzer.py +217 -0
- aether_quant-0.2.0/aq_cli.py +329 -0
- aether_quant-0.2.0/backtests/.gitkeep +1 -0
- aether_quant-0.2.0/data/alternative/estimize/consensus/aapl/.keep +0 -0
- aether_quant-0.2.0/data/alternative/estimize/estimate/.keep +0 -0
- aether_quant-0.2.0/data/alternative/estimize/release/.keep +0 -0
- aether_quant-0.2.0/data/alternative/sec/aapl/.keep +0 -0
- aether_quant-0.2.0/data/alternative/trading-economics/.keep +0 -0
- aether_quant-0.2.0/data/alternative/trading-economics/calendar/.keep +0 -0
- aether_quant-0.2.0/data/alternative/trading-economics/earnings/.keep +0 -0
- aether_quant-0.2.0/data/alternative/trading-economics/indicator/.keep +0 -0
- aether_quant-0.2.0/data_pipeline/README.md +37 -0
- aether_quant-0.2.0/data_pipeline/__init__.py +6 -0
- aether_quant-0.2.0/data_pipeline/v2_manifest.py +75 -0
- aether_quant-0.2.0/data_pipeline/yfinance_backfill.py +335 -0
- aether_quant-0.2.0/development/Changelog.md +482 -0
- aether_quant-0.2.0/development/Problems.md +214 -0
- aether_quant-0.2.0/development/README.md +28 -0
- aether_quant-0.2.0/development/infrastructure.md +366 -0
- aether_quant-0.2.0/development/v2_architecture.md +1073 -0
- aether_quant-0.2.0/docker-compose.yml +164 -0
- aether_quant-0.2.0/execution/README.md +9 -0
- aether_quant-0.2.0/execution/__init__.py +13 -0
- aether_quant-0.2.0/execution/order_gate.py +75 -0
- aether_quant-0.2.0/experience/README.md +47 -0
- aether_quant-0.2.0/experience/__init__.py +16 -0
- aether_quant-0.2.0/experience/observation_metrics.py +124 -0
- aether_quant-0.2.0/experience/postgres_worker.py +334 -0
- aether_quant-0.2.0/experience/redis_queue.py +173 -0
- aether_quant-0.2.0/experience/simulated_portfolio.py +166 -0
- aether_quant-0.2.0/experts/README.md +34 -0
- aether_quant-0.2.0/experts/__init__.py +17 -0
- aether_quant-0.2.0/experts/expert_datasets.py +184 -0
- aether_quant-0.2.0/liquidity/README.md +57 -0
- aether_quant-0.2.0/liquidity/__init__.py +3 -0
- aether_quant-0.2.0/liquidity/market_liquidity.py +220 -0
- aether_quant-0.2.0/main.py +1392 -0
- aether_quant-0.2.0/ml/README.md +35 -0
- aether_quant-0.2.0/moe/README.md +19 -0
- aether_quant-0.2.0/moe/__init__.py +15 -0
- aether_quant-0.2.0/moe/gating.py +206 -0
- aether_quant-0.2.0/monitoring/README.md +19 -0
- aether_quant-0.2.0/monitoring/__init__.py +2 -0
- aether_quant-0.2.0/monitoring/api_server.py +120 -0
- aether_quant-0.2.0/monitoring/neural_network_state.py +219 -0
- aether_quant-0.2.0/notifications/README.md +49 -0
- aether_quant-0.2.0/notifications/__init__.py +13 -0
- aether_quant-0.2.0/notifications/postgres_telegram.py +99 -0
- aether_quant-0.2.0/notifications/telegram_alerts.py +64 -0
- aether_quant-0.2.0/notifications/telegram_client.py +79 -0
- aether_quant-0.2.0/notifications/telegram_worker.py +203 -0
- aether_quant-0.2.0/performance/README.md +53 -0
- aether_quant-0.2.0/performance/__init__.py +45 -0
- aether_quant-0.2.0/performance/postgres_triggers.py +345 -0
- aether_quant-0.2.0/performance/trigger_worker.py +174 -0
- aether_quant-0.2.0/performance/triggers.py +827 -0
- aether_quant-0.2.0/pyproject.toml +38 -0
- aether_quant-0.2.0/regime/README.md +18 -0
- aether_quant-0.2.0/regime/__init__.py +17 -0
- aether_quant-0.2.0/regime/market_regime.py +187 -0
- aether_quant-0.2.0/requirements/README.md +26 -0
- aether_quant-0.2.0/requirements/requirements-dev.txt +26 -0
- aether_quant-0.2.0/requirements/requirements-retraining-worker.txt +15 -0
- aether_quant-0.2.0/requirements/requirements-runtime.txt +3 -0
- aether_quant-0.2.0/requirements/requirements-telegram-worker.txt +8 -0
- aether_quant-0.2.0/requirements/requirements-trigger-worker.txt +3 -0
- aether_quant-0.2.0/requirements/requirements-worker.txt +4 -0
- aether_quant-0.2.0/requirements/requirements.txt +27 -0
- aether_quant-0.2.0/retraining/README.md +72 -0
- aether_quant-0.2.0/retraining/__init__.py +89 -0
- aether_quant-0.2.0/retraining/artifacts.py +159 -0
- aether_quant-0.2.0/retraining/backtest_gate.py +63 -0
- aether_quant-0.2.0/retraining/lean_backtest.py +64 -0
- aether_quant-0.2.0/retraining/orchestrator.py +489 -0
- aether_quant-0.2.0/retraining/planning.py +238 -0
- aether_quant-0.2.0/retraining/postgres_registry.py +367 -0
- aether_quant-0.2.0/retraining/status_export.py +117 -0
- aether_quant-0.2.0/retraining/validation_gate.py +134 -0
- aether_quant-0.2.0/retraining/vault_client.py +108 -0
- aether_quant-0.2.0/retraining/vault_commands.py +52 -0
- aether_quant-0.2.0/retraining/worker.py +182 -0
- aether_quant-0.2.0/risk/README.md +19 -0
- aether_quant-0.2.0/risk/__init__.py +16 -0
- aether_quant-0.2.0/risk/manual_override.py +61 -0
- aether_quant-0.2.0/risk/position_sizing.py +113 -0
- aether_quant-0.2.0/risk_controls.py +41 -0
- aether_quant-0.2.0/setup.cfg +4 -0
- aether_quant-0.2.0/tests/README.md +41 -0
- aether_quant-0.2.0/tests/test_aq_cli.py +313 -0
- aether_quant-0.2.0/tests/test_backtest_gate.py +65 -0
- aether_quant-0.2.0/tests/test_experience_queue.py +200 -0
- aether_quant-0.2.0/tests/test_expert_datasets.py +86 -0
- aether_quant-0.2.0/tests/test_expert_models.py +153 -0
- aether_quant-0.2.0/tests/test_gating_network.py +97 -0
- aether_quant-0.2.0/tests/test_lean_backtest.py +67 -0
- aether_quant-0.2.0/tests/test_lean_backtest_ml_coverage.py +146 -0
- aether_quant-0.2.0/tests/test_learned_topology.py +344 -0
- aether_quant-0.2.0/tests/test_manual_override.py +75 -0
- aether_quant-0.2.0/tests/test_market_analyzer.py +227 -0
- aether_quant-0.2.0/tests/test_market_liquidity.py +168 -0
- aether_quant-0.2.0/tests/test_market_regime.py +109 -0
- aether_quant-0.2.0/tests/test_market_topology.py +151 -0
- aether_quant-0.2.0/tests/test_neural_network_state.py +119 -0
- aether_quant-0.2.0/tests/test_observation_metrics.py +181 -0
- aether_quant-0.2.0/tests/test_order_gate.py +124 -0
- aether_quant-0.2.0/tests/test_position_sizing.py +55 -0
- aether_quant-0.2.0/tests/test_postgres_telegram.py +101 -0
- aether_quant-0.2.0/tests/test_postgres_triggers.py +244 -0
- aether_quant-0.2.0/tests/test_postgres_worker.py +216 -0
- aether_quant-0.2.0/tests/test_retraining_artifacts.py +211 -0
- aether_quant-0.2.0/tests/test_retraining_orchestrator.py +275 -0
- aether_quant-0.2.0/tests/test_retraining_planning.py +240 -0
- aether_quant-0.2.0/tests/test_retraining_postgres_registry.py +189 -0
- aether_quant-0.2.0/tests/test_retraining_worker.py +140 -0
- aether_quant-0.2.0/tests/test_risk_controls.py +56 -0
- aether_quant-0.2.0/tests/test_simulated_portfolio.py +127 -0
- aether_quant-0.2.0/tests/test_status_export.py +67 -0
- aether_quant-0.2.0/tests/test_telegram_alerts.py +77 -0
- aether_quant-0.2.0/tests/test_telegram_client.py +66 -0
- aether_quant-0.2.0/tests/test_telegram_worker.py +199 -0
- aether_quant-0.2.0/tests/test_train_pipeline.py +219 -0
- aether_quant-0.2.0/tests/test_train_topology.py +156 -0
- aether_quant-0.2.0/tests/test_trigger_worker.py +182 -0
- aether_quant-0.2.0/tests/test_triggers.py +527 -0
- aether_quant-0.2.0/tests/test_v2_pipeline_manifest.py +41 -0
- aether_quant-0.2.0/tests/test_validation_gate.py +111 -0
- aether_quant-0.2.0/tests/test_vault_client.py +109 -0
- aether_quant-0.2.0/tests/test_vault_commands.py +65 -0
- aether_quant-0.2.0/tests/test_yfinance_backfill.py +256 -0
- aether_quant-0.2.0/topology/README.md +69 -0
- aether_quant-0.2.0/topology/__init__.py +21 -0
- aether_quant-0.2.0/topology/learned_topology.py +280 -0
- aether_quant-0.2.0/topology/market_topology.py +418 -0
- aether_quant-0.2.0/train.py +2359 -0
- aether_quant-0.2.0/train_topology.py +318 -0
- aether_quant-0.2.0/visualization/README.md +32 -0
- aether_quant-0.2.0/webui/.gitignore +24 -0
- aether_quant-0.2.0/webui/.oxlintrc.json +8 -0
- aether_quant-0.2.0/webui/README.md +66 -0
- aether_quant-0.2.0/webui/index.html +13 -0
- aether_quant-0.2.0/webui/overview_v2_12.png +0 -0
- aether_quant-0.2.0/webui/package-lock.json +2642 -0
- aether_quant-0.2.0/webui/package.json +34 -0
- aether_quant-0.2.0/webui/public/favicon.svg +1 -0
- aether_quant-0.2.0/webui/public/icons.svg +24 -0
- aether_quant-0.2.0/webui/risk_v2_12.png +0 -0
- aether_quant-0.2.0/webui/src/App.tsx +26 -0
- aether_quant-0.2.0/webui/src/api/client.ts +22 -0
- aether_quant-0.2.0/webui/src/api/hooks.ts +78 -0
- aether_quant-0.2.0/webui/src/components/heatmap/AssetHeatmap.tsx +43 -0
- aether_quant-0.2.0/webui/src/components/layout/AppShell.tsx +102 -0
- aether_quant-0.2.0/webui/src/components/layout/Panel.tsx +13 -0
- aether_quant-0.2.0/webui/src/components/monitoring/CountTable.tsx +21 -0
- aether_quant-0.2.0/webui/src/components/monitoring/MonitoringFeeds.tsx +35 -0
- aether_quant-0.2.0/webui/src/components/monitoring/ObservationPanel.tsx +50 -0
- aether_quant-0.2.0/webui/src/components/monitoring/PerformanceTriggersPanel.tsx +63 -0
- aether_quant-0.2.0/webui/src/components/monitoring/RawStateViewer.tsx +28 -0
- aether_quant-0.2.0/webui/src/components/monitoring/RetrainingStatusPanel.tsx +84 -0
- aether_quant-0.2.0/webui/src/components/neuralnet/NeuralNetworkScene3D.tsx +174 -0
- aether_quant-0.2.0/webui/src/components/neuralnet/NeuralNetworkStatsPanel.tsx +87 -0
- aether_quant-0.2.0/webui/src/components/risk/AssetSizingTable.tsx +116 -0
- aether_quant-0.2.0/webui/src/components/risk/LiquidityTable.tsx +122 -0
- aether_quant-0.2.0/webui/src/components/risk/RiskBar.tsx +14 -0
- aether_quant-0.2.0/webui/src/components/risk/RiskCore.tsx +65 -0
- aether_quant-0.2.0/webui/src/components/risk/StrategyRiskCards.tsx +35 -0
- aether_quant-0.2.0/webui/src/components/scene3d/Scene3D.tsx +94 -0
- aether_quant-0.2.0/webui/src/components/scorecards/Scorecards.tsx +27 -0
- aether_quant-0.2.0/webui/src/components/signals/Badge.tsx +30 -0
- aether_quant-0.2.0/webui/src/components/signals/PositionsList.tsx +36 -0
- aether_quant-0.2.0/webui/src/components/signals/SignalBoard.tsx +45 -0
- aether_quant-0.2.0/webui/src/components/topology/ClusterList.tsx +45 -0
- aether_quant-0.2.0/webui/src/components/topology/TopologyLearningPanel.tsx +93 -0
- aether_quant-0.2.0/webui/src/components/topology/TopologyScene3D.tsx +125 -0
- aether_quant-0.2.0/webui/src/components/tracing/AssetPerformancePanel.tsx +56 -0
- aether_quant-0.2.0/webui/src/components/tracing/BacktestEquityPanel.tsx +93 -0
- aether_quant-0.2.0/webui/src/components/tracing/DivergingBarChart.tsx +49 -0
- aether_quant-0.2.0/webui/src/components/tracing/LineChart.tsx +195 -0
- aether_quant-0.2.0/webui/src/components/tracing/MetricsSnapshotPanel.tsx +46 -0
- aether_quant-0.2.0/webui/src/components/tracing/ObservationEquityPanel.tsx +72 -0
- aether_quant-0.2.0/webui/src/index.css +11 -0
- aether_quant-0.2.0/webui/src/lib/downsample.ts +13 -0
- aether_quant-0.2.0/webui/src/lib/format.ts +25 -0
- aether_quant-0.2.0/webui/src/main.tsx +18 -0
- aether_quant-0.2.0/webui/src/pages/NeuralNetworkPage.tsx +15 -0
- aether_quant-0.2.0/webui/src/pages/Overview.tsx +34 -0
- aether_quant-0.2.0/webui/src/pages/RiskPage.tsx +16 -0
- aether_quant-0.2.0/webui/src/pages/TopologyPage.tsx +20 -0
- aether_quant-0.2.0/webui/src/pages/TracingPage.tsx +26 -0
- aether_quant-0.2.0/webui/src/types/state.ts +371 -0
- aether_quant-0.2.0/webui/src/types/tracing.ts +26 -0
- aether_quant-0.2.0/webui/tsconfig.app.json +25 -0
- aether_quant-0.2.0/webui/tsconfig.json +7 -0
- aether_quant-0.2.0/webui/tsconfig.node.json +23 -0
- aether_quant-0.2.0/webui/vite.config.ts +16 -0
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
__pycache__/
|
|
2
|
+
*.pyc
|
|
3
|
+
*.pyo
|
|
4
|
+
.venv/
|
|
5
|
+
node_modules/
|
|
6
|
+
webui/node_modules/
|
|
7
|
+
webui/dist/
|
|
8
|
+
backtests/
|
|
9
|
+
.lean/
|
|
10
|
+
.git/
|
|
11
|
+
.claude/
|
|
12
|
+
Aether-quant-Obsidian-Vault/
|
|
13
|
+
# Large data directories not needed by the FastAPI server
|
|
14
|
+
data/
|
|
15
|
+
ml/
|
|
16
|
+
storage/
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# Copy this file to .env (untracked, .gitignore'd) and fill in real values.
|
|
2
|
+
# docker-compose.yml reads .env automatically for ${VAR} substitutions.
|
|
3
|
+
|
|
4
|
+
# PostgreSQL (defaults already work for local dev — override for anything else)
|
|
5
|
+
POSTGRES_DB=aether_quant
|
|
6
|
+
POSTGRES_USER=aether
|
|
7
|
+
POSTGRES_PASSWORD=aether_dev_password
|
|
8
|
+
|
|
9
|
+
# Telegram alerts (V2-19) — required for notifications.telegram_worker to
|
|
10
|
+
# actually send messages; leave blank to run the worker as a safe no-op.
|
|
11
|
+
AETHER_TELEGRAM_BOT_TOKEN=
|
|
12
|
+
AETHER_TELEGRAM_CHAT_ID=
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
pull_request:
|
|
7
|
+
|
|
8
|
+
jobs:
|
|
9
|
+
test:
|
|
10
|
+
runs-on: ubuntu-latest
|
|
11
|
+
steps:
|
|
12
|
+
- uses: actions/checkout@v4
|
|
13
|
+
|
|
14
|
+
- uses: actions/setup-python@v5
|
|
15
|
+
with:
|
|
16
|
+
python-version: "3.11"
|
|
17
|
+
|
|
18
|
+
- name: Install dependencies
|
|
19
|
+
run: pip install -r requirements/requirements.txt -r requirements/requirements-dev.txt
|
|
20
|
+
|
|
21
|
+
- name: Run tests
|
|
22
|
+
run: pytest
|
|
23
|
+
# tests/test_lean_backtest_ml_coverage.py self-skips: it requires the
|
|
24
|
+
# QuantConnect Lean CLI, which GitHub-hosted runners don't have.
|
|
25
|
+
|
|
26
|
+
webui:
|
|
27
|
+
runs-on: ubuntu-latest
|
|
28
|
+
defaults:
|
|
29
|
+
run:
|
|
30
|
+
working-directory: webui
|
|
31
|
+
steps:
|
|
32
|
+
- uses: actions/checkout@v4
|
|
33
|
+
|
|
34
|
+
- uses: actions/setup-node@v4
|
|
35
|
+
with:
|
|
36
|
+
node-version: "20"
|
|
37
|
+
cache: "npm"
|
|
38
|
+
cache-dependency-path: webui/package-lock.json
|
|
39
|
+
|
|
40
|
+
- run: npm ci
|
|
41
|
+
- run: npx tsc -b
|
|
42
|
+
- run: npx oxlint
|
|
43
|
+
- run: npm run build
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
name: Release
|
|
2
|
+
|
|
3
|
+
# Releasing is a manual, deliberate act: tag a commit on main and push the
|
|
4
|
+
# tag. Nothing else triggers this workflow - matches this project's existing
|
|
5
|
+
# bias toward no uncontrolled automatic actions (see e.g. retraining's
|
|
6
|
+
# manual promote/rollback).
|
|
7
|
+
on:
|
|
8
|
+
push:
|
|
9
|
+
tags: ["v*.*.*"]
|
|
10
|
+
|
|
11
|
+
jobs:
|
|
12
|
+
publish-pypi:
|
|
13
|
+
runs-on: ubuntu-latest
|
|
14
|
+
environment: pypi # must match the Environment name configured in PyPI's Trusted Publisher setup
|
|
15
|
+
permissions:
|
|
16
|
+
# Required for PyPI Trusted Publishing (OIDC) - no PyPI token is ever
|
|
17
|
+
# stored as a secret. Requires a one-time Trusted Publisher setup on
|
|
18
|
+
# the PyPI project page (repo + this workflow filename).
|
|
19
|
+
id-token: write
|
|
20
|
+
steps:
|
|
21
|
+
- uses: actions/checkout@v4
|
|
22
|
+
with:
|
|
23
|
+
fetch-depth: 0 # full history/tags - required for setuptools-scm
|
|
24
|
+
|
|
25
|
+
- uses: actions/setup-python@v5
|
|
26
|
+
with:
|
|
27
|
+
python-version: "3.11"
|
|
28
|
+
|
|
29
|
+
- name: Build sdist and wheel
|
|
30
|
+
run: |
|
|
31
|
+
pip install build
|
|
32
|
+
python -m build
|
|
33
|
+
|
|
34
|
+
- name: Publish to PyPI
|
|
35
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
36
|
+
|
|
37
|
+
publish-docker:
|
|
38
|
+
runs-on: ubuntu-latest
|
|
39
|
+
permissions:
|
|
40
|
+
contents: read
|
|
41
|
+
packages: write
|
|
42
|
+
env:
|
|
43
|
+
# Hardcoded lowercase, not derived from ${{ github.repository }}:
|
|
44
|
+
# the repo is leon1706-lol/Aether-quant (capital A), but Docker image
|
|
45
|
+
# references must be all-lowercase - using github.repository directly
|
|
46
|
+
# would fail with "invalid reference format".
|
|
47
|
+
IMAGE_NAME: ghcr.io/leon1706-lol/aether-quant
|
|
48
|
+
steps:
|
|
49
|
+
- uses: actions/checkout@v4
|
|
50
|
+
|
|
51
|
+
- uses: docker/setup-buildx-action@v3
|
|
52
|
+
|
|
53
|
+
- uses: docker/login-action@v3
|
|
54
|
+
with:
|
|
55
|
+
registry: ghcr.io
|
|
56
|
+
username: ${{ github.actor }}
|
|
57
|
+
password: ${{ secrets.GITHUB_TOKEN }}
|
|
58
|
+
|
|
59
|
+
- id: meta
|
|
60
|
+
uses: docker/metadata-action@v5
|
|
61
|
+
with:
|
|
62
|
+
images: ${{ env.IMAGE_NAME }}
|
|
63
|
+
tags: |
|
|
64
|
+
type=semver,pattern={{version}}
|
|
65
|
+
type=raw,value=latest
|
|
66
|
+
|
|
67
|
+
- uses: docker/build-push-action@v6
|
|
68
|
+
with:
|
|
69
|
+
context: .
|
|
70
|
+
push: true
|
|
71
|
+
tags: ${{ steps.meta.outputs.tags }}
|
|
72
|
+
labels: ${{ steps.meta.outputs.labels }}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
# Python cache and virtual environments
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
*$py.class
|
|
5
|
+
.pytest_cache/
|
|
6
|
+
.mypy_cache/
|
|
7
|
+
.ruff_cache/
|
|
8
|
+
.venv/
|
|
9
|
+
venv/
|
|
10
|
+
env/
|
|
11
|
+
*.egg-info/
|
|
12
|
+
/dist/
|
|
13
|
+
/build/
|
|
14
|
+
|
|
15
|
+
# Local secrets and broker/API credentials
|
|
16
|
+
.env
|
|
17
|
+
.env.*
|
|
18
|
+
!.env.compose.example
|
|
19
|
+
ib_config.py
|
|
20
|
+
*_config.local.py
|
|
21
|
+
config.json
|
|
22
|
+
config.local.json
|
|
23
|
+
lean.json
|
|
24
|
+
lean.local.json
|
|
25
|
+
|
|
26
|
+
*.key
|
|
27
|
+
*.pem
|
|
28
|
+
|
|
29
|
+
# OS/editor noise
|
|
30
|
+
.DS_Store
|
|
31
|
+
Thumbs.db
|
|
32
|
+
.idea/
|
|
33
|
+
.vscode/
|
|
34
|
+
.claude/
|
|
35
|
+
docker-compose.override.yml
|
|
36
|
+
postgres-data/
|
|
37
|
+
redis-data/
|
|
38
|
+
grafana-data/
|
|
39
|
+
pgdata/
|
|
40
|
+
|
|
41
|
+
# Lean market data: too large for a public GitHub repo
|
|
42
|
+
data/**
|
|
43
|
+
!data/**/
|
|
44
|
+
!data/**/.keep
|
|
45
|
+
!data/**/.gitkeep
|
|
46
|
+
|
|
47
|
+
# Lean object store / local runtime output
|
|
48
|
+
storage/
|
|
49
|
+
objectstore/
|
|
50
|
+
|
|
51
|
+
# Backtest results and generated reports
|
|
52
|
+
backtests/**
|
|
53
|
+
!backtests/
|
|
54
|
+
!backtests/.gitkeep
|
|
55
|
+
|
|
56
|
+
# Generated ML datasets and binary artifacts
|
|
57
|
+
ml/datasets/
|
|
58
|
+
ml/expert_datasets/
|
|
59
|
+
ml/expert_models/
|
|
60
|
+
ml/model.pt
|
|
61
|
+
ml/scaler.pkl
|
|
62
|
+
ml/*.pkl
|
|
63
|
+
ml/*.pt
|
|
64
|
+
ml/*.pth
|
|
65
|
+
ml/*.onnx
|
|
66
|
+
|
|
67
|
+
# Generated ML/runtime JSON artifacts
|
|
68
|
+
ml/dataset_inventory.json
|
|
69
|
+
ml/dataset_manifest.json
|
|
70
|
+
ml/expert_dataset_manifest.json
|
|
71
|
+
ml/feature_schema.json
|
|
72
|
+
ml/model_weights.json
|
|
73
|
+
ml/scaler_stats.json
|
|
74
|
+
ml/training_metrics.json
|
|
75
|
+
ml/expert_training_metrics.json
|
|
76
|
+
|
|
77
|
+
# Generated visualization/runtime feeds
|
|
78
|
+
visualization/state.json
|
|
79
|
+
visualization/scene.json
|
|
80
|
+
visualization/topology_state.json
|
|
81
|
+
visualization/grafana/
|
|
82
|
+
|
|
83
|
+
# Logs and temporary files
|
|
84
|
+
.coverage
|
|
85
|
+
coverage.xml
|
|
86
|
+
htmlcov/
|
|
87
|
+
*.log
|
|
88
|
+
*.tmp
|
|
89
|
+
*.bak
|
|
90
|
+
# Obsidian vault for project graphs and AI handoffs
|
|
91
|
+
Aether-quant-Obsidian-Vault/
|
|
92
|
+
|
|
93
|
+
# Webui (React/Vite) build artifacts and dependencies
|
|
94
|
+
webui/node_modules/
|
|
95
|
+
webui/dist/
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# Stage 1: build webui
|
|
2
|
+
FROM node:20-alpine AS webui-builder
|
|
3
|
+
WORKDIR /app/webui
|
|
4
|
+
COPY webui/package*.json ./
|
|
5
|
+
RUN npm ci
|
|
6
|
+
COPY webui/ .
|
|
7
|
+
RUN npm run build
|
|
8
|
+
|
|
9
|
+
# Stage 2: Python runtime (FastAPI server only — no ML deps)
|
|
10
|
+
FROM python:3.11-slim
|
|
11
|
+
WORKDIR /app
|
|
12
|
+
COPY requirements/requirements-runtime.txt .
|
|
13
|
+
RUN pip install --no-cache-dir -r requirements-runtime.txt
|
|
14
|
+
COPY monitoring/ ./monitoring/
|
|
15
|
+
COPY visualization/ ./visualization/
|
|
16
|
+
COPY --from=webui-builder /app/webui/dist ./webui/dist
|
|
17
|
+
EXPOSE 8000
|
|
18
|
+
CMD ["uvicorn", "monitoring.api_server:app", "--host", "0.0.0.0", "--port", "8000"]
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
FROM python:3.11-slim
|
|
2
|
+
WORKDIR /app
|
|
3
|
+
COPY requirements/requirements-retraining-worker.txt .
|
|
4
|
+
RUN pip install --no-cache-dir -r requirements-retraining-worker.txt
|
|
5
|
+
COPY execution/ ./execution/
|
|
6
|
+
COPY experience/ ./experience/
|
|
7
|
+
COPY performance/ ./performance/
|
|
8
|
+
COPY regime/ ./regime/
|
|
9
|
+
COPY experts/ ./experts/
|
|
10
|
+
COPY topology/ ./topology/
|
|
11
|
+
COPY retraining/ ./retraining/
|
|
12
|
+
COPY train.py .
|
|
13
|
+
COPY train_topology.py .
|
|
14
|
+
CMD ["python", "-m", "retraining.worker"]
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
FROM python:3.11-slim
|
|
2
|
+
WORKDIR /app
|
|
3
|
+
COPY requirements/requirements-telegram-worker.txt .
|
|
4
|
+
RUN pip install --no-cache-dir -r requirements-telegram-worker.txt
|
|
5
|
+
COPY execution/ ./execution/
|
|
6
|
+
COPY experience/ ./experience/
|
|
7
|
+
COPY performance/ ./performance/
|
|
8
|
+
COPY notifications/ ./notifications/
|
|
9
|
+
CMD ["python", "-m", "notifications.telegram_worker"]
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
FROM python:3.11-slim
|
|
2
|
+
WORKDIR /app
|
|
3
|
+
COPY requirements/requirements-trigger-worker.txt .
|
|
4
|
+
RUN pip install --no-cache-dir -r requirements-trigger-worker.txt
|
|
5
|
+
COPY execution/ ./execution/
|
|
6
|
+
COPY experience/ ./experience/
|
|
7
|
+
COPY performance/ ./performance/
|
|
8
|
+
CMD ["python", "-m", "performance.trigger_worker"]
|