jesse 3.3.2__tar.gz → 3.3.3__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.
- {jesse-3.3.2/jesse.egg-info → jesse-3.3.3}/PKG-INFO +3 -2
- {jesse-3.3.2 → jesse-3.3.3}/jesse/modes/monte_carlo_mode/MonteCarloRunner.py +4 -3
- {jesse-3.3.2 → jesse-3.3.3}/jesse/modes/optimize_mode/Optimize.py +4 -3
- {jesse-3.3.2 → jesse-3.3.3}/jesse/research/monte_carlo/monte_carlo_candles.py +2 -1
- {jesse-3.3.2 → jesse-3.3.3}/jesse/research/monte_carlo/monte_carlo_trades.py +2 -1
- {jesse-3.3.2 → jesse-3.3.3}/jesse/research/optimize/__init__.py +2 -1
- {jesse-3.3.2 → jesse-3.3.3}/jesse/services/analysis_jobs.py +127 -69
- jesse-3.3.3/jesse/services/nofollow_fs.py +667 -0
- jesse-3.3.3/jesse/services/process_tree.py +435 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/services/project_files.py +72 -125
- {jesse-3.3.2 → jesse-3.3.3}/jesse/services/ray_runtime.py +24 -1
- {jesse-3.3.2 → jesse-3.3.3}/jesse/services/research_jobs.py +153 -55
- {jesse-3.3.2 → jesse-3.3.3}/jesse/services/strategy_handler/__init__.py +37 -10
- jesse-3.3.3/jesse/version.py +1 -0
- {jesse-3.3.2 → jesse-3.3.3/jesse.egg-info}/PKG-INFO +3 -2
- {jesse-3.3.2 → jesse-3.3.3}/jesse.egg-info/SOURCES.txt +2 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse.egg-info/requires.txt +6 -1
- {jesse-3.3.2 → jesse-3.3.3}/requirements.txt +3 -1
- jesse-3.3.3/tests/conftest.py +61 -0
- {jesse-3.3.2 → jesse-3.3.3}/tests/test_mcp_analysis.py +24 -21
- {jesse-3.3.2 → jesse-3.3.3}/tests/test_mcp_candle_management.py +1 -11
- {jesse-3.3.2 → jesse-3.3.3}/tests/test_mcp_live_history.py +2 -10
- {jesse-3.3.2 → jesse-3.3.3}/tests/test_mcp_project_files.py +24 -10
- {jesse-3.3.2 → jesse-3.3.3}/tests/test_mcp_proxy.py +14 -7
- {jesse-3.3.2 → jesse-3.3.3}/tests/test_mcp_research_scripts.py +4 -7
- {jesse-3.3.2 → jesse-3.3.3}/tests/test_mcp_strategy_reports.py +8 -2
- {jesse-3.3.2 → jesse-3.3.3}/tests/test_mcp_tool_offloading.py +2 -5
- {jesse-3.3.2 → jesse-3.3.3}/tests/test_ray_runtime.py +51 -0
- {jesse-3.3.2 → jesse-3.3.3}/tests/test_research_monte_carlo.py +70 -0
- {jesse-3.3.2 → jesse-3.3.3}/tests/test_research_optimization_isolation.py +54 -0
- {jesse-3.3.2 → jesse-3.3.3}/tests/test_research_session_lifecycle.py +44 -0
- jesse-3.3.2/jesse/version.py +0 -1
- jesse-3.3.2/tests/conftest.py +0 -17
- {jesse-3.3.2 → jesse-3.3.3}/LICENSE +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/MANIFEST.in +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/README.md +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/app.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/candle_pipelines/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/candle_pipelines/base_candles.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/candle_pipelines/gaussian_noise.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/candle_pipelines/gaussian_resampler.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/candle_pipelines/moving_block_bootstrap.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/cli.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/config.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/constants.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/controllers/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/controllers/ai_model_controller.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/controllers/analysis_controller.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/controllers/auth_controller.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/controllers/backtest_controller.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/controllers/candles_controller.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/controllers/closed_trade_controller.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/controllers/config_controller.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/controllers/data_provider_credentials_controller.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/controllers/e2e_controller.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/controllers/exchange_controller.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/controllers/file_controller.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/controllers/live_controller.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/controllers/lsp_controller.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/controllers/mcp_controller.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/controllers/monte_carlo_controller.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/controllers/notification_controller.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/controllers/optimization_controller.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/controllers/order_controller.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/controllers/period_templates_controller.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/controllers/project_files_controller.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/controllers/research_scripts_controller.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/controllers/route_templates_controller.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/controllers/session_results_controller.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/controllers/significance_test_controller.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/controllers/strategy_controller.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/controllers/system_controller.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/controllers/tabs_controller.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/controllers/websocket_controller.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/enums/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/exceptions/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/exchanges/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/exchanges/exchange.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/exchanges/sandbox/Sandbox.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/exchanges/sandbox/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/factories/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/factories/candle_factory.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/factories/order_factory.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/helpers.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/acosc.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/ad.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/adosc.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/adx.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/adxr.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/alligator.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/alma.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/ao.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/apo.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/aroon.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/aroonosc.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/atr.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/avgprice.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/bandpass.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/beta.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/bollinger_bands.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/bollinger_bands_width.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/bop.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/cc.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/cci.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/cfo.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/cg.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/chande.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/chop.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/cksp.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/cmo.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/correl.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/correlation_cycle.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/cvi.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/cwma.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/damiani_volatmeter.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/dec_osc.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/decycler.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/dema.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/devstop.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/di.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/dm.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/donchian.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/dpo.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/dti.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/dx.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/edcf.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/efi.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/ema.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/emd.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/emv.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/epma.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/er.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/eri.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/fisher.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/fosc.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/frama.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/fwma.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/gatorosc.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/gauss.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/heikin_ashi_candles.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/high_pass.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/high_pass_2_pole.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/hma.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/hull_suit.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/hurst_exponent.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/hwma.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/ichimoku_cloud.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/ichimoku_cloud_seq.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/ift_rsi.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/itrend.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/jma.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/jsa.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/kama.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/kaufmanstop.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/kdj.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/keltner.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/kst.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/kurtosis.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/kvo.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/linearreg.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/linearreg_angle.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/linearreg_intercept.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/linearreg_slope.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/lrsi.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/ma.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/maaq.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/mab.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/macd.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/mama.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/marketfi.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/mass.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/mcginley_dynamic.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/mean_ad.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/median_ad.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/medprice.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/mfi.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/midpoint.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/midprice.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/minmax.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/mom.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/mwdx.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/natr.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/nma.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/nvi.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/obv.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/pfe.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/pivot.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/pma.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/ppo.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/pvi.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/pwma.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/qstick.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/reflex.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/rma.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/roc.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/rocp.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/rocr.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/rocr100.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/roofing.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/rsi.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/rsmk.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/rsx.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/rvi.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/safezonestop.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/sar.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/sinwma.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/skew.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/sma.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/smma.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/squeeze_momentum.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/sqwma.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/srsi.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/srwma.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/stc.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/stddev.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/stiffness.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/stochastic.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/stochf.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/supersmoother.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/supersmoother_3_pole.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/supertrend.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/support_resistance_with_break.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/swma.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/t3.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/tema.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/trange.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/trendflex.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/trima.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/trix.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/tsf.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/tsi.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/ttm_squeeze.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/ttm_trend.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/typprice.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/ui.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/ultosc.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/var.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/vi.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/vidya.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/vlma.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/volume.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/vosc.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/voss.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/vpci.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/vpt.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/vpwma.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/vwap.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/vwma.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/vwmacd.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/wad.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/waddah_attr_explosion.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/wclprice.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/wilders.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/willr.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/wma.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/wt.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/zlema.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/indicators/zscore.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/info.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/libs/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/libs/custom_json/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/libs/dynamic_numpy_array/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/mcp/USAGE_LIMITS.md +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/mcp/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/mcp/agent_rules.md +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/mcp/agent_rules.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/mcp/auth.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/mcp/manager.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/mcp/mcp_config.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/mcp/resources/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/mcp/resources/backtest_management.md +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/mcp/resources/backtest_metrics.md +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/mcp/resources/candle.md +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/mcp/resources/charts.md +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/mcp/resources/configuration.md +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/mcp/resources/credentials.md +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/mcp/resources/indicator.md +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/mcp/resources/live_trading.md +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/mcp/resources/monte_carlo.md +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/mcp/resources/optimization.md +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/mcp/resources/position_risk.md +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/mcp/resources/research_scripts.md +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/mcp/resources/session_analysis.md +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/mcp/resources/significance_test.md +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/mcp/resources/strategy.md +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/mcp/resources/strategy_catalog.md +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/mcp/resources/strategy_examples.md +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/mcp/resources/utilities.md +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/mcp/server.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/mcp/test.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/mcp/tools/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/mcp/tools/analysis.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/mcp/tools/backtest.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/mcp/tools/candles.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/mcp/tools/config.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/mcp/tools/credentials.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/mcp/tools/general.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/mcp/tools/indicator.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/mcp/tools/live.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/mcp/tools/monte_carlo.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/mcp/tools/offload.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/mcp/tools/optimization.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/mcp/tools/project_files.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/mcp/tools/research_scripts.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/mcp/tools/services/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/mcp/tools/services/auth.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/mcp/tools/services/backtest.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/mcp/tools/services/candles.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/mcp/tools/services/config.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/mcp/tools/services/credentials.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/mcp/tools/services/general.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/mcp/tools/services/indicator.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/mcp/tools/services/live.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/mcp/tools/services/locks.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/mcp/tools/services/monte_carlo.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/mcp/tools/services/optimization.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/mcp/tools/services/project_files.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/mcp/tools/services/session_analysis.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/mcp/tools/services/session_config.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/mcp/tools/services/significance_test.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/mcp/tools/services/strategy.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/mcp/tools/services/strategy_catalog.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/mcp/tools/session_results.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/mcp/tools/significance_test.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/mcp/tools/strategy.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/mcp/tools/strategy_catalog.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/mcp/tools/strict_arguments.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/mcp/usage_limits.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/models/AiModel.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/models/BacktestSession.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/models/Candle.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/models/ClosedTrade.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/models/DataProviderCredentials.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/models/Exchange.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/models/ExchangeApiKeys.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/models/FuturesExchange.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/models/LiveChart.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/models/LiveEquitySnapshot.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/models/LiveSession.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/models/Log.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/models/MonteCarloSession.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/models/NotificationApiKeys.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/models/OpenTab.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/models/OptimizationSession.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/models/Option.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/models/Order.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/models/Orderbook.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/models/PeriodTemplate.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/models/Position.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/models/Route.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/models/RouteTemplate.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/models/SignificanceTestSession.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/models/SpotExchange.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/models/Ticker.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/models/Trade.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/models/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/modes/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/modes/backtest_mode.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/modes/data_provider.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/modes/exchange_api_keys.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/modes/import_candles_mode/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/modes/import_candles_mode/drivers/Apex/ApexOmniPerpetual.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/modes/import_candles_mode/drivers/Apex/ApexOmniPerpetualMain.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/modes/import_candles_mode/drivers/Apex/ApexOmniPerpetualTestnet.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/modes/import_candles_mode/drivers/Apex/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/modes/import_candles_mode/drivers/Apex/apex_omni_utils.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/modes/import_candles_mode/drivers/Apex/omni_files/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/modes/import_candles_mode/drivers/Apex/omni_files/libzklink_sdk-arm.dylib +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/modes/import_candles_mode/drivers/Apex/omni_files/libzklink_sdk-x86.dylib +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/modes/import_candles_mode/drivers/Apex/omni_files/libzklink_sdk.dylib +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/modes/import_candles_mode/drivers/Apex/omni_files/libzklink_sdk.so +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/modes/import_candles_mode/drivers/Apex/omni_files/zklink_sdk-arm.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/modes/import_candles_mode/drivers/Apex/omni_files/zklink_sdk-pc.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/modes/import_candles_mode/drivers/Apex/omni_files/zklink_sdk-x86.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/modes/import_candles_mode/drivers/Apex/omni_files/zklink_sdk.dll +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/modes/import_candles_mode/drivers/Apex/omni_files/zklink_sdk.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/modes/import_candles_mode/drivers/Binance/BinanceMain.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/modes/import_candles_mode/drivers/Binance/BinancePerpetualFutures.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/modes/import_candles_mode/drivers/Binance/BinancePerpetualFuturesTestnet.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/modes/import_candles_mode/drivers/Binance/BinanceSpot.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/modes/import_candles_mode/drivers/Binance/BinanceUSSpot.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/modes/import_candles_mode/drivers/Binance/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/modes/import_candles_mode/drivers/Binance/binance_utils.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/modes/import_candles_mode/drivers/Bitfinex/BitfinexSpot.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/modes/import_candles_mode/drivers/Bitfinex/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/modes/import_candles_mode/drivers/Bitfinex/bitfinex_utils.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/modes/import_candles_mode/drivers/Bybit/BybitMain.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/modes/import_candles_mode/drivers/Bybit/BybitSpot.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/modes/import_candles_mode/drivers/Bybit/BybitSpotTestnet.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/modes/import_candles_mode/drivers/Bybit/BybitUSDCPerpetual.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/modes/import_candles_mode/drivers/Bybit/BybitUSDCPerpetualTestnet.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/modes/import_candles_mode/drivers/Bybit/BybitUSDTPerpetual.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/modes/import_candles_mode/drivers/Bybit/BybitUSDTPerpetualTestnet.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/modes/import_candles_mode/drivers/Bybit/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/modes/import_candles_mode/drivers/Bybit/bybit_utils.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/modes/import_candles_mode/drivers/Coinbase/CoinbaseSpot.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/modes/import_candles_mode/drivers/Coinbase/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/modes/import_candles_mode/drivers/Coinbase/coinbase_utils.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/modes/import_candles_mode/drivers/Gate/GateSpot.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/modes/import_candles_mode/drivers/Gate/GateSpotMain.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/modes/import_candles_mode/drivers/Gate/GateUSDTMain.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/modes/import_candles_mode/drivers/Gate/GateUSDTPerpetual.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/modes/import_candles_mode/drivers/Gate/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/modes/import_candles_mode/drivers/Gate/gate_utils.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/modes/import_candles_mode/drivers/Hyperliquid/HyperliquidPerpetual.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/modes/import_candles_mode/drivers/Hyperliquid/HyperliquidPerpetualMain.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/modes/import_candles_mode/drivers/Hyperliquid/HyperliquidPerpetualTestnet.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/modes/import_candles_mode/drivers/Hyperliquid/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/modes/import_candles_mode/drivers/Hyperliquid/hyperliquid_utils.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/modes/import_candles_mode/drivers/Kraken/KrakenPerpetual.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/modes/import_candles_mode/drivers/Kraken/KrakenPerpetualMain.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/modes/import_candles_mode/drivers/Kraken/KrakenPerpetualTestnet.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/modes/import_candles_mode/drivers/Kraken/KrakenSpot.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/modes/import_candles_mode/drivers/Kraken/KrakenSpotMain.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/modes/import_candles_mode/drivers/Kraken/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/modes/import_candles_mode/drivers/Kraken/kraken_utils.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/modes/import_candles_mode/drivers/KuCoin/KuCoinFuturesMain.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/modes/import_candles_mode/drivers/KuCoin/KuCoinSpot.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/modes/import_candles_mode/drivers/KuCoin/KuCoinSpotMain.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/modes/import_candles_mode/drivers/KuCoin/KuCoinUSDTPerpetual.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/modes/import_candles_mode/drivers/KuCoin/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/modes/import_candles_mode/drivers/KuCoin/kucoin_utils.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/modes/import_candles_mode/drivers/Lighter/LighterMain.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/modes/import_candles_mode/drivers/Lighter/LighterPerpetual.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/modes/import_candles_mode/drivers/Lighter/LighterPerpetualTestnet.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/modes/import_candles_mode/drivers/Lighter/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/modes/import_candles_mode/drivers/Lighter/lighter_utils.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/modes/import_candles_mode/drivers/Lighter/signer_libs/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/modes/import_candles_mode/drivers/Lighter/signer_libs/lighter-signer-darwin-arm64.dylib +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/modes/import_candles_mode/drivers/Lighter/signer_libs/lighter-signer-linux-amd64.so +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/modes/import_candles_mode/drivers/Lighter/signer_libs/lighter-signer-linux-arm64.so +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/modes/import_candles_mode/drivers/Lighter/signer_libs/lighter-signer-windows-amd64.dll +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/modes/import_candles_mode/drivers/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/modes/import_candles_mode/drivers/interface.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/modes/monte_carlo_mode/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/modes/notification_api_keys.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/modes/optimize_mode/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/modes/optimize_mode/fitness.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/modes/significance_test_mode/SignificanceTestRunner.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/modes/significance_test_mode/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/modes/utils.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/repositories/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/repositories/candle_repository.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/repositories/closed_trade_repository.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/repositories/data_provider_credentials_repository.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/repositories/live_chart_repository.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/repositories/live_equity_repository.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/repositories/live_session_repository.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/repositories/open_tab_repository.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/repositories/order_repository.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/repositories/period_template_repository.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/repositories/route_template_repository.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/research/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/research/backtest.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/research/candles.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/research/import_candles.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/research/ml.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/research/monte_carlo/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/research/monte_carlo/common.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/research/rule_significance_testing/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/research/rule_significance_testing/bootstrap.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/research/rule_significance_testing/common.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/research/rule_significance_testing/plots.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/research/rule_significance_testing/rule_significance.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/research/rule_significance_testing/simulator.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/routes/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/services/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/services/api.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/services/auth.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/services/broker.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/services/cache.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/services/candle_service.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/services/charts.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/services/closed_trade_service.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/services/color.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/services/coordination_client.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/services/coordination_runtime.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/services/custom_candle_import.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/services/dashboard_url.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/services/db.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/services/e2e_database.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/services/env.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/services/exchange_service.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/services/failure.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/services/file.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/services/general_info.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/services/historical_data/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/services/historical_data/contracts.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/services/historical_data/credential_validation.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/services/historical_data/errors.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/services/historical_data/massive_stocks.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/services/historical_data/providers/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/services/historical_data/registry.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/services/installer.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/services/jesse_trade.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/services/live_chart_service.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/services/live_history.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/services/logger.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/services/lsp.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/services/lsp_download.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/services/metrics.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/services/migrator.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/services/multiprocessing.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/services/notifier.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/services/order_service.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/services/position_service.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/services/progress.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/services/progressbar.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/services/redis.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/services/report.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/services/session_results.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/services/simulation_assumptions.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/services/strategy_handler/ExampleStrategy/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/services/strategy_service.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/services/symbol_catalog.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/services/table.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/services/timescale.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/services/trading_hours.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/services/transformers.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/services/validators.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/services/web.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/services/ws_manager.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/200.html +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/404.html +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/-QFIf-8y.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/08VXUWAP.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/0ONmXmPL.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/1OJtSa29.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/2IIEA8gg.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/2LnYzLCR.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/32DixAac.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/32_DOadk.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/35Gd1l6b.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/3KuTZQMl.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/3kHYRJ9h.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/43DmfD33.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/4G7pJPwS.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/5eyTD99u.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/6RTg0lbw.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/6d_DINYp.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/95zPyYrn.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/9S921ylM.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/9SuGUQxQ.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/Agoi6m7K.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/Aw9tIJeK.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/B1E1h4Tw.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/B26H0THF.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/B2OO5cIa.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/B2kYdT-M.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/B3Tmza7s.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/B40NqdSB.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/B4CnDxnp.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/B4t1Dpxy.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/B5-_aFwp.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/B55fAccV.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/B5W6OYN7.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/B5e22D9r.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/B5ulf6Jh.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/B68TUdTA.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/B6UiomQj.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/B6cMlEJd.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/B6kMFxG1.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/B8J7ngcE.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/B8_t_EnB.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/B9C647eN.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/B9JPFI3C.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/BA0WJkYB.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/BB8QmrLY.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/BBDov63s.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/BBRdoL6s.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/BC-YRYM7.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/BD87b4dR.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/BDNMzG2s.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/BDy3RgVq.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/BEEn4gHE.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/BEtHBSE6.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/BGFFIZX_.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/BGRKdXyl.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/BG_RkxjH.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/BHVL4DrI.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/BHWKrbxM.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/BI3Y1cOA.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/BIEGKqOo.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/BIfCV4Ms.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/BK0UMAm8.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/BKD0O2_Q.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/BKPLz4po.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/BKcRqSit.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/BKc_k7G-.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/BKxtCVv1.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/BLhvb9Y-.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/BMrGqELX.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/BN08jTvb.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/BOINE9jH.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/BOotOW0E.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/BQYoEE-E.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/BRSARzao.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/BRgglKlM.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/BSFCf8l4.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/BSSBbjzH.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/BSWPekZh.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/BSkKS2hE.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/BSt81nX4.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/BTkZN-kY.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/BUvLBkUT.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/BWB_6_ms.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/BWPQTe0t.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/BXViO-2h.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/BY-ye-pC.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/BYdfvclj.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/BYgofb2h.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/BZ4HG2rr.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/BZCL-v6S.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/B_aZeMMh.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/B_tTalzw.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/Ba7i2nA0.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/BaTYBKiJ.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/BacktestTabs.BijLvS3O.css +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/BbAZZZ7p.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/BbMWPibr.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/Bc_sGQ0U.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/BdwtN8NV.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/BeGwcela.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/Beywemwu.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/Bf9kHOm6.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/BfbyNUB7.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/Bh7THQLS.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/BhjAJghj.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/BiX_3ZGn.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/Bk0mhOc9.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/Bkml37m-.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/BkrtENUF.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/Bm3Qr25_.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/BmHiIK7b.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/Bn7V5xpM.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/BnjxR4X6.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/Bnr-372i.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/Bo9Dl7tn.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/BoEzQrVW.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/BoK4YRpC.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/BolyLLo5.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/Bp8RYZPa.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/Bpxkdeyh.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/BrD0VTWt.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/Bri6UV-V.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/Brm5PLIv.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/BtUnaqJ2.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/Btx78D0D.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/Buu8uHmp.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/BvzEE6Lm.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/BwWrilGY.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/BwjZg7Kw.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/Bx1FflLF.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/Bxkupp3x.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/By-L4I7w.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/By1ptfmn.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/ByqV7_Wn.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/Bz4Y3fRF.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/BzGFDp20.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/BzMNZVT7.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/BzRncHX3.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/C-LZuMrd.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/C-y9NEjX.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/C1BzkLxr.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/C1IaaOeX.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/C25aelnV.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/C2u17_gr.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/C44XaChS.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/C531GsRP.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/C5_-GSwl.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/C7h46wYY.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/C8468PWD.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/C8Ef5oNN.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/C8r90Shi.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/CAi0_s86.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/CC2rA5mh.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/CC3Dc58n.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/CCQjLJmZ.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/CCUjCBK5.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/CDeNXAV0.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/CErjEBUy.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/CFAvbRBv.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/CGx505Mf.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/CHQ94UKr.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/CIPQ_RoX.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/CIpIsXEF.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/CJ3rzSJv.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/CKgYSDhl.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/CNhAU_yo.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/COeFqPAd.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/COju__tp.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/CQihkeLA.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/CRal5XOA.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/CRfGWb83.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/CRyZUaTi.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/CRzLMJPS.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/CSDNxAMC.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/CTweb8Dz.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/CUKGrt9p.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/CVaqCwHa.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/CW42rLZD.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/CWDvEqlu.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/CXHoNUfW.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/CXtmUGW6.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/CXuuVbXE.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/CYsHHI_Y.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/CZLZPU9y.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/CZiHAFz-.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/CZoCCMwk.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/CZsCp6_J.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/C_8bwKvT.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/CaLoWpdj.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/CaP30uTv.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/Cb4Vim4T.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/Cba4tSYP.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/CcwsVR0C.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/CdkpiU2Y.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/Ce441ncu.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/Ceyelwdz.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/Cf9Ao90m.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/CfSJPG6W.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/Cfl0F_Ix.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/CfvQ0GVj.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/ChJth8dy.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/Cimd5fb3.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/CircleProgressbar.yGgm_qEa.css +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/CjM6HreG.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/CjSZG47B.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/CkJ3IzwM.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/CkRax0sH.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/Cl4KV_tk.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/ClA4MMiD.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/ClQpkZ_L.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/ClamHrr6.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/Cm7r79vr.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/Cn3B6b9t.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/Cnfgdmp5.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/CoKYUvtC.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/CoMST1W2.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/ComPDbET.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/CopQ2nXW.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/CowLSvep.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/CozAH55r.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/CpL23Fmb.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/CpzslTdj.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/Cr7JoK-F.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/CrVSgIkM.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/CroGarxd.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/Cs2F2srj.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/CsQS60Ue.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/CsvMBhTu.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/Cu5M3efA.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/CvrMaf9k.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/CximN0RY.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/CyaoTIaz.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/CytPyiJO.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/Cz7rf_X8.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/Czxs1Lr1.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/D-9WcGfc.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/D-kcNTYM.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/D-oSqn_W.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/D-ptJ9y-.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/D05T4iGw.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/D0mw5jGK.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/D1Ny8MsW.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/D2VuFIIh.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/D2ymy_yS.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/D3hlyOfw.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/D4-rlkSU.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/D5GhRiPb.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/D5ROd09N.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/D76weKjv.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/D94iqX0Y.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/D9y3cZ0N.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/DBG_jd69.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/DBrRvF6k.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/DCMvuGdi.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/DCQb3MpD.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/DD3ehtKZ.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/DDpmG2fV.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/DDwmkQR0.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/DE9FIzhz.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/DEzv-VFF.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/DFfOA-Hn.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/DFfgcuRt.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/DFwEHpFD.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/DGnxmmBi.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/DHBI_yxQ.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/DHPkxzYJ.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/DHpiXF5c.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/DIMkf-bt.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/DISqw1ZD.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/DJW761E_.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/DK0GhfdP.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/DKCQ3kY7.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/DLJdWeDZ.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/DLMcThcU.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/DLSXrvMj.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/DMUM7wLl.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/DMZUnbo6.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/DMnEoi8l.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/DNvWHFeH.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/DOTl9kKz.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/DOwBwxAc.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/DPDvM2ct.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/DPUBG1Sa.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/DQ-b8cau.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/DQPPsGdR.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/DQU07tlD.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/DQeMqN38.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/DQwYfKfQ.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/DRFjx7u4.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/DRQTUBBy.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/DSRkZAVd.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/DSh2HLQt.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/DSxVysNG.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/DT7zqm-g.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/DTj74zXo.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/DUxEecLs.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/DV17i1UV.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/DV3o63ZY.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/DVG0V4jx.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/DVQuIRkW.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/DWiCCCWX.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/DX9HmIul.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/DXG-b-1a.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/DXgieCCJ.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/DYRyhno9.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/DYlRzrDj.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/DZFCIeNp.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/DZWexK4Q.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/D_Lu-MrJ.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/D_Qp7VhD.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/D_Sm39l5.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/D_XYh1V1.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/DajP-uHd.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/DauUninz.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/DaxD0QDq.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/DaxQctDl.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/Db4fpp4X.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/DbInun42.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/Dbw3yKNo.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/Dc0bEyG5.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/DdL9SqIa.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/DdZzhEjZ.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/Dduc7CfM.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/De2hgUGE.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/DezsRK8O.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/Df2xbC6M.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/DfC9-Oas.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/DgPtEepw.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/DgfQ8roX.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/DhmEMT88.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/DiqhDmo8.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/Diy88_8O.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/DjAgHZrJ.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/DkiUMXvE.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/DkmNSMHY.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/DkqhCAOL.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/Dl3pNQBR.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/DlxfLgwf.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/DmFYnCc9.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/DmHpPYUd.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/DmNVVboZ.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/Dmf8Y0ON.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/Dmhjelgj.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/DmnVzVBc.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/DnKPLd6d.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/DnToyrRv.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/Do35n8oq.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/DpFanUEy.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/DpTtcPZs.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/Dpc0kmwU.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/Dq8dNoUO.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/DqJzYO7Y.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/DqXIJaHE.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/DrH0SRf2.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/Ds29f9ZA.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/Ds9iBrvx.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/Dt39crSB.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/Dt9aNFbE.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/DtX02f_x.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/DtiqU4Ud.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/DtqQGdEG.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/Dw3KmPTn.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/DxSv1ANE.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/Dxj8dFzq.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/Dxp_UTNE.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/Dyqgk9ID.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/Dz8kfdTw.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/E1ZWqqYd.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/EJNjM-U5.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/EUqPIrTm.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/EkTgQK41.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/Ffc-wpi1.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/FvmIjYaQ.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/G2qN-x4c.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/HSRijeU2.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/HVfn8BjE.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/HbO86Wj8.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/Hsn-rFuA.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/Hza2DNlp.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/ICt9zdTY.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/IKeJ43Xq.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/IXshMDJQ.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/Inter-VariableFont_slnt_wght.Cl4AQHp9.ttf +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/J0iKGLDy.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/JVoApnG_.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/JjuYFqoF.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/JpkrmRYq.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/JxrqHDML.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/KgIFLbLy.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/L2jIIa9o.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/LO_BkMJ8.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/LiveTabs.rsQh4sN8.css +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/MajH5w9w.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/NEE52Syq.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/OwFc4i_0.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/ProgressStatusText.BQK0FaGL.css +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/QZfQtQzF.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/QoymgQo0.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/SOo6toE5.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/SRo1HocX.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/StrategiesSidebar.B-brLowb.css +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/TDhf81zB.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/TGksF7tq.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/TradeHistoryChart.Bs0aEPiQ.css +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/VbXTXTou.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/WF6tEroY.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/WFnVOHr3.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/WGRu4rDx.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/WZ5HE0X3.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/Y2pL5qgw.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/YdFKNLmY.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/Z5eAx3Zn.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/_3zCpt1T.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/_7BVYBMY.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/_b8AQjYy.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/_id_.B7_JgFfA.css +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/_id_.Cb3WvDCW.css +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/_id_.j0n5fqTK.css +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/_z_6LxFK.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/aYLzAr85.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/axvP9fKg.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/b50CsBaQ.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/bBgN0Y0r.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/bTuwJoIa.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/bWuRL8Ho.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/codicon.Brq4_Ui5.ttf +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/css.worker-B_vtbeex.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/dhy_KTgc.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/eENhBx9Z.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/editor.BVn6Eoal.css +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/entry.DU6LnkKz.css +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/error-404.DjFB7pgG.css +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/error-500.BG9pmads.css +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/fmXr3nnJ.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/foABv0nJ.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/fwtXNY1n.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/gEsa7Idh.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/gp-XZpBa.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/hBpBmjHp.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/hdxB67uV.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/hePW80VL.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/html.worker-C0o__ma4.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/i0X4ZdIN.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/ibI1KQep.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/j5_BjaI1.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/json.worker-YsJGeJy7.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/jz3gp08z.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/lP7_xLqx.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/live.BHsUui2i.css +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/logo-dark.tKoQPl1k.svg +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/logo-light.CS4l4ePq.png +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/mnTiCSRt.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/monte-carlo.SA-Jni4T.css +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/nFMaYfgc.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/nr791fC2.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/nrRF7I-f.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/nuxt-monaco-editor/node_modules/monaco-editor/esm/metadata.d.ts +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/nuxt-monaco-editor/node_modules/monaco-editor/esm/metadata.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/oN7GSZWc.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/onAF5SnQ.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/oz_6vUea.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/paCCX65n.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/pages.2jeyaLEx.css +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/qpEHnBAB.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/sB-x3p7T.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/sBoK_t0W.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/sTdyETAW.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/significance-test.C3_9t58f.css +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/sltzmVWM.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/strategies.CZAezJwX.css +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/toggleHighContrast.BIHgMxab.css +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/ts.worker-BN13fC-t.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/u9_Y1g7K.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/uFMmaQO6.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/uHUmCDd7.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/uR-B8b7I.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/u_o9HDF2.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/uhdI0v04.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/v-e-WZYS.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/v5am0c2l.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/vC0cNbDJ.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/vc9XnyOF.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/wbypxrpR.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/xAOFb7cl.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/xQegFPeJ.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/xgNQ-z8D.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/xk2_4sNk.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/y2WM_oP3.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/y_x7m0Ik.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/yjvMp0c6.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/_nuxt/yqdSDlAg.js +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/favicon.ico +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/favicons/android-chrome-192x192.png +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/favicons/android-chrome-512x512.png +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/favicons/apple-touch-icon.png +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/favicons/favicon-16x16.png +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/favicons/favicon-32x32.png +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/index.html +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/static/robots.txt +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/store/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/store/state_app.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/store/state_candles.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/store/state_closed_trades.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/store/state_exchanges.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/store/state_logs.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/store/state_orderbook.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/store/state_orders.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/store/state_positions.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/store/state_tickers.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/store/state_trades.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/CanAddClosedTradeToStore/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/RealStrategyRegression1/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/RealStrategyRegression2/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/RealStrategyRegression3/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/Strategy.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/Test01/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/Test02/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/Test04/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/Test05/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/Test06/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/Test07/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/Test08/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/Test09/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/Test10/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/Test11/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/Test12/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/Test13/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/Test14/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/Test15/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/Test16/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/Test17/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/Test18/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/Test19/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/Test20/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/Test21/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/Test22/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/Test23/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/Test24/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/Test25/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/Test26/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/Test27/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/Test28/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/Test29/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/Test30/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/Test31/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/Test32/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/Test33/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/Test34/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/Test35/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/Test36/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/Test37/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/Test38/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/Test39/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/Test40/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/Test41/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/Test44/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/Test45/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/Test46/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/Test47/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/Test48/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestAddHorizontalLineToCandleChart/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestAddHorizontalLineToExtraChart/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestAddLineToCandleChart/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestAddLineToExtraChart/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestAfterMethod/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestAverageEntryPriceProperty/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestBalanceAndFeeReductionWorksCorrectlyInSpotModeInBothBuyAndSellOrders/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestBalancesAreHandledCorrectlyForCancellingOrdersInSpot/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestBaseAndQuoteAssetProperties/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestBeforeMethod/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestBeforeTerminate/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestCanCancelEntryOrdersAfterOpenPositionLong1/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestCanCancelEntryOrdersAfterOpenPositionLong2/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestCanCancelEntryOrdersAfterOpenPositionShort1/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestCanCancelEntryOrdersAfterOpenPositionShort2/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestCanOpenANewPositionImmediatelyAfterClosingViaUpdatePosition/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestCanRunWithoutShorting/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestCanSubmitStopLossOrderWithSizeEqualToCurrentPositionQty/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestCanSubmitStopLossOrderWithSizeLessThanCurrentPositionQty/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestCanSubmitTakeProfitAndStopLossAtSameTimeInSpot/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestCanSubmitTakeProfitOrderWithSizeEqualToCurrentPositionQty/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestCanSubmitTakeProfitOrderWithSizeLessThanCurrentPositionQty/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestCannotSetStopLossOrderInGoLong/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestCannotSetTakeProfitOrderInGoLong/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestCannotSpendMoreThanAvailableBalance/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestCannotSubmitStopLossOrderWithSizeMoreThanCurrentPositionQty/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestCannotSubmitTakeProfitOrderWithSizeMoreThanCurrentPositionQty/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestCapitalPropertyRaisesNotImplementedError/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestClosedTradeAfterExitingTrade/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestCommonWarmupStart/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestCurrentRouteIndex1/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestCurrentRouteIndex2/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestDailyBalanceStoresPortfolioValue/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestDailyBalancesProperty/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestDataRoutes1/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestDataRoutes2/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestDefaultHyperparameters/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestDnaMethod/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestEmptyStrategy/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestEntryOrdersAndExitOrdersProperties/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestExchangeTypeProperty1/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestExchangeTypeProperty2/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestFuturesExchangeAvailableMargin/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestGeneratedDataRouteExecutionBTC/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestGeneratedDataRouteExecutionETH/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestHasLongAndShortEntryOrdersPropertiesInFilters/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestHasLongEntryOrdersProperty/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestHasShortEntryOrdersProperty/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestIncreasedAndReducedCount/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestIncreasingShortPosition/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestInsufficientMargin1/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestInsufficientMargin2/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestInsufficientMargin3/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestLeverageProperty1/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestLeverageProperty2/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestLiquidationInCrossModeForShortTrade/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestLiquidationInIsolatedModeForLongTrade/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestLiquidationInIsolatedModeForShortTrade/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestLogMethodInStrategyClass/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestLongLifecycleAcrossTradingModes/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestLongSparseGap/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestMarkPrice/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestMarketOrderForLowPriceDifference/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestMetrics1/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestMultiInstrumentReplayA/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestMultiInstrumentReplayB/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestMultipleEntryOrdersUpdateEntryLongPositions/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestMultipleEntryOrdersUpdateEntryShortPositions/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestOnCancelMethod/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestOnClosePosition/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestOnRouteOpenPosition/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestOnRouteOpenPosition2/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestOptimizationIsolation/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestOrderIsStopLossProperty/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestOrderIsTakeProfitProperty/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestOrderPriceCannotBeGreaterThanZero/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestOrderValueProperty/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestOrdersAreSortedBeforeExecution/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestOversizedReduceOnlyExitAccounting/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestPortfolioValue/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestPortfolioValueIncludesPositionValueAndOpenOrdersValue/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestPositionExchangeTypeProperty1/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestPositionExchangeTypeProperty2/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestPositionOpenIncreaseReduceCloseEventsInSpot/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestPositionTotalCostProperty/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestPositionWithLeverage1/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestPositionWithLeverage2/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestPositions/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestProperBalanceHanldingInSpotAfterOrderCancellation/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestProtectiveOrdersAcrossTradingModes/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestReduceOnlyMarketOrders/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestRuleSignificanceAlignment/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestRuleSignificanceFailure/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestShortInSpot/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestSparseTimestampRoutes/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestStopLossPriceIsReplacedWithMarketOrderForBetterPriceLongPosition/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestStopLossPriceIsReplacedWithMarketOrderForBetterPriceShortPosition/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestStopOrderShouldConsiderExecutedTakeProfitOrdersInSpot/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestStrategyChartsReport/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestStrategyVariablesAreResetBeforeOpeningNewPosition/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestTakeProfitPriceIsReplacedWithMarketOrderWhenMoreConvenientLongPosition/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestTakeProfitPriceIsReplacedWithMarketOrderWhenMoreConvenientShortPosition/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestTerminate/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestTradingHours/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestUsageOfShouldCancelRaisesNotImplementedError/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestVanillaStrategy/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestWalletBalance/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/TestWithoutCancelMethod/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/strategies/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/testing_utils.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse/utils.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse.egg-info/dependency_links.txt +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse.egg-info/entry_points.txt +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/jesse.egg-info/top_level.txt +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/setup.cfg +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/setup.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/tests/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/tests/data/__init__.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/tests/data/test_candles_0.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/tests/data/test_candles_1.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/tests/data/test_candles_indicators.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/tests/mcp_tool_adapters.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/tests/test_backtest.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/tests/test_backtest_session_chart_data.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/tests/test_backtest_session_chart_images.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/tests/test_broker.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/tests/test_candle_copy.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/tests/test_candle_service.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/tests/test_candle_timeframe_filter.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/tests/test_chart_data_serialization.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/tests/test_completed_trade.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/tests/test_config_safety.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/tests/test_conflicting_orders.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/tests/test_coordination.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/tests/test_coordination_helpers.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/tests/test_dashboard_url.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/tests/test_dynamic_numpy_array.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/tests/test_e2e_database.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/tests/test_exchange.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/tests/test_helpers.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/tests/test_historical_data_contracts.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/tests/test_import_and_backtest_request_boundaries.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/tests/test_import_candle_drivers.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/tests/test_import_candles.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/tests/test_import_candles_workflow.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/tests/test_indicators.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/tests/test_isolated_backtest.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/tests/test_jesse_trade_routes.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/tests/test_live_session_chart_data.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/tests/test_live_strategy_charts.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/tests/test_lsp.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/tests/test_mcp_auth.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/tests/test_mcp_config.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/tests/test_mcp_credentials.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/tests/test_mcp_live_sessions.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/tests/test_mcp_resources.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/tests/test_mcp_session_analysis_integration.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/tests/test_mcp_session_results.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/tests/test_mcp_strategy_catalog.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/tests/test_mcp_usage_limits.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/tests/test_mcp_worker_port.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/tests/test_metrics.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/tests/test_optimization_and_monte_carlo_session_failures.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/tests/test_order.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/tests/test_parent_strategy.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/tests/test_position.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/tests/test_price_gap_backtest.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/tests/test_progressbar.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/tests/test_real_strategy_regression.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/tests/test_research.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/tests/test_router.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/tests/test_rule_significance_testing.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/tests/test_session_scoped_configuration.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/tests/test_significance_test_session.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/tests/test_simulator_parity.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/tests/test_spot_mode.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/tests/test_state_candle.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/tests/test_state_exchanges.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/tests/test_state_logs.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/tests/test_state_orderbook.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/tests/test_state_orders.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/tests/test_state_ticker.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/tests/test_state_trades.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/tests/test_trading_hours.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/tests/test_trading_mode_contracts.py +0 -0
- {jesse-3.3.2 → jesse-3.3.3}/tests/test_utils.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: jesse
|
|
3
|
-
Version: 3.3.
|
|
3
|
+
Version: 3.3.3
|
|
4
4
|
Summary: A trading framework for cryptocurrencies
|
|
5
5
|
Home-page: https://jesse.trade
|
|
6
6
|
Author: Saleh Mir
|
|
@@ -42,7 +42,8 @@ Requires-Dist: PyJWT~=2.11.0
|
|
|
42
42
|
Requires-Dist: cryptography~=42.0.5
|
|
43
43
|
Requires-Dist: ecdsa>=0.16.0
|
|
44
44
|
Requires-Dist: optuna~=4.2.0
|
|
45
|
-
Requires-Dist: ray
|
|
45
|
+
Requires-Dist: ray; sys_platform != "win32"
|
|
46
|
+
Requires-Dist: ray>=2.48.0; sys_platform == "win32"
|
|
46
47
|
Requires-Dist: eth-account~=0.13.5
|
|
47
48
|
Requires-Dist: msgpack~=1.1.0
|
|
48
49
|
Requires-Dist: starkbank-ecdsa~=1.1.0
|
|
@@ -5,7 +5,7 @@ import ray
|
|
|
5
5
|
import numpy as np
|
|
6
6
|
import jesse.helpers as jh
|
|
7
7
|
from jesse.services.progress import publish_status
|
|
8
|
-
from jesse.services.ray_runtime import initialize_ray
|
|
8
|
+
from jesse.services.ray_runtime import UnsupportedRayVersionError, initialize_ray
|
|
9
9
|
import jesse.services.logger as logger
|
|
10
10
|
from jesse import exceptions
|
|
11
11
|
from jesse.services.redis import sync_publish, is_process_active
|
|
@@ -82,8 +82,9 @@ class MonteCarloRunner:
|
|
|
82
82
|
initialize_ray(self.cpu_cores)
|
|
83
83
|
logger.log_monte_carlo(f"Successfully started Monte Carlo session with {self.cpu_cores} CPU cores", session_id=self.session_id)
|
|
84
84
|
self.ray_started_here = True
|
|
85
|
-
except MemoryError:
|
|
86
|
-
# Startup memory limits also cover Ray services and the worker heap
|
|
85
|
+
except (MemoryError, UnsupportedRayVersionError):
|
|
86
|
+
# Startup memory limits also cover Ray services and the worker heap, and
|
|
87
|
+
# fewer CPUs cannot make an unsupported Ray start.
|
|
87
88
|
raise
|
|
88
89
|
except Exception as e:
|
|
89
90
|
logger.log_monte_carlo(f"Error initializing Ray: {e}. Falling back to 1 CPU.", session_id=self.session_id)
|
|
@@ -7,7 +7,7 @@ import ray
|
|
|
7
7
|
import numpy as np
|
|
8
8
|
import jesse.helpers as jh
|
|
9
9
|
from jesse.services.progress import publish_status
|
|
10
|
-
from jesse.services.ray_runtime import initialize_ray
|
|
10
|
+
from jesse.services.ray_runtime import UnsupportedRayVersionError, initialize_ray
|
|
11
11
|
import jesse.services.logger as logger
|
|
12
12
|
from jesse import exceptions
|
|
13
13
|
from jesse.services.redis import sync_publish
|
|
@@ -163,8 +163,9 @@ class Optimizer:
|
|
|
163
163
|
initialize_ray(self.cpu_cores)
|
|
164
164
|
logger.log_optimize_mode(f"Successfully started optimization session with {self.cpu_cores} CPU cores", self.session_id )
|
|
165
165
|
self.ray_started_here = True
|
|
166
|
-
except MemoryError:
|
|
167
|
-
# Startup memory limits also cover Ray services and the worker heap
|
|
166
|
+
except (MemoryError, UnsupportedRayVersionError):
|
|
167
|
+
# Startup memory limits also cover Ray services and the worker heap, and
|
|
168
|
+
# fewer CPUs cannot make an unsupported Ray start.
|
|
168
169
|
raise
|
|
169
170
|
except Exception as e:
|
|
170
171
|
logger.log_optimize_mode(f"Error initializing Ray: {e}. Falling back to 1 CPU.", self.session_id )
|
|
@@ -6,6 +6,7 @@ import os
|
|
|
6
6
|
from datetime import datetime
|
|
7
7
|
import jesse.helpers as jh
|
|
8
8
|
from jesse.research import backtest
|
|
9
|
+
from jesse.services.ray_runtime import initialize_ray
|
|
9
10
|
import matplotlib
|
|
10
11
|
matplotlib.use('Agg') # Use non-interactive backend
|
|
11
12
|
from matplotlib import pyplot as plt
|
|
@@ -132,7 +133,7 @@ def monte_carlo_candles(
|
|
|
132
133
|
ray_started_here = False
|
|
133
134
|
if not ray.is_initialized():
|
|
134
135
|
try:
|
|
135
|
-
|
|
136
|
+
initialize_ray(cpu_cores)
|
|
136
137
|
print(f"Successfully started Monte Carlo simulation with {cpu_cores} CPU cores")
|
|
137
138
|
ray_started_here = True
|
|
138
139
|
except Exception as e:
|
|
@@ -7,6 +7,7 @@ import os
|
|
|
7
7
|
from datetime import datetime
|
|
8
8
|
import jesse.helpers as jh
|
|
9
9
|
from jesse.research import backtest
|
|
10
|
+
from jesse.services.ray_runtime import initialize_ray
|
|
10
11
|
from jesse.services.simulation_assumptions import resolve_annualization
|
|
11
12
|
import matplotlib
|
|
12
13
|
matplotlib.use('Agg') # Use non-interactive backend
|
|
@@ -156,7 +157,7 @@ def monte_carlo_trades(
|
|
|
156
157
|
ray_started_here = False
|
|
157
158
|
if not ray.is_initialized():
|
|
158
159
|
try:
|
|
159
|
-
|
|
160
|
+
initialize_ray(cpu_cores)
|
|
160
161
|
print(f"Successfully started Monte Carlo simulation with {cpu_cores} CPU cores")
|
|
161
162
|
ray_started_here = True
|
|
162
163
|
except Exception as e:
|
|
@@ -14,6 +14,7 @@ from jesse import exceptions
|
|
|
14
14
|
from jesse.config import config as jesse_config, set_config
|
|
15
15
|
from jesse.research.backtest import _reset_research_runtime_state
|
|
16
16
|
from jesse.research.monte_carlo.common import DEFAULT_CPU_USAGE_RATIO, MIN_CPU_CORES
|
|
17
|
+
from jesse.services.ray_runtime import initialize_ray
|
|
17
18
|
|
|
18
19
|
from jesse.routes import router
|
|
19
20
|
|
|
@@ -227,7 +228,7 @@ def _execute_optimize(
|
|
|
227
228
|
# ------------------------------------------------------------ init Ray
|
|
228
229
|
ray_started_here = False
|
|
229
230
|
if not ray.is_initialized():
|
|
230
|
-
|
|
231
|
+
initialize_ray(cpu_cores)
|
|
231
232
|
ray_started_here = True
|
|
232
233
|
|
|
233
234
|
best_trials: list = []
|
|
@@ -22,13 +22,19 @@ the assistant: one stored session each (jesse.services.session_results), or the
|
|
|
22
22
|
trades or orders of a date window across sessions (jesse.services.live_history), streamed to
|
|
23
23
|
disk one batch at a time.
|
|
24
24
|
|
|
25
|
+
Workspace privacy: on POSIX, workspaces and snapshots are created 0o700 / 0o600. On Windows those
|
|
26
|
+
modes are not applied; workspaces inherit their parent folder's ACL. Jesse does not set a private
|
|
27
|
+
DACL, so snapshot privacy depends on the project's storage-folder permissions.
|
|
28
|
+
|
|
25
29
|
The code is NOT sandboxed: it runs as the Jesse user with Jesse's environment, filesystem,
|
|
26
30
|
database, and network access. The workspace layout and the artifact path checks below only
|
|
27
31
|
decide which files Jesse serves back; they do not limit what the code can do. After a Jesse
|
|
28
32
|
crash, a job's process may outlive its record; cleanup treats that record as finished, so
|
|
29
|
-
the workspace can be deleted while the orphaned process still runs.
|
|
33
|
+
the workspace can be deleted while the orphaned process still runs. (On Windows the job's
|
|
34
|
+
processes are ended by the kernel when Jesse exits, so they do not outlive a crash.)
|
|
30
35
|
"""
|
|
31
36
|
import base64
|
|
37
|
+
import errno
|
|
32
38
|
import io
|
|
33
39
|
import json
|
|
34
40
|
import os
|
|
@@ -41,7 +47,7 @@ from datetime import datetime, timezone
|
|
|
41
47
|
from typing import Dict, List, Optional, Sequence, Set, Tuple
|
|
42
48
|
from uuid import uuid4
|
|
43
49
|
|
|
44
|
-
from jesse.services import live_history, research_jobs, session_results
|
|
50
|
+
from jesse.services import live_history, nofollow_fs, research_jobs, session_results
|
|
45
51
|
from jesse.services import project_files
|
|
46
52
|
from jesse.services.project_files import ProjectFileError
|
|
47
53
|
|
|
@@ -87,11 +93,11 @@ MAX_IMAGE_DIMENSION = 8000
|
|
|
87
93
|
# Text artifacts (CSV, JSON, Markdown) are returned up to this many characters.
|
|
88
94
|
MAX_TEXT_ARTIFACT_CHARS = 128 * 1024
|
|
89
95
|
LIST_LIMIT = 20
|
|
96
|
+
# Windows delete retries while a reader's open file blocks the folder move: about two seconds in total.
|
|
97
|
+
DELETE_RETRY_ATTEMPTS = 40
|
|
98
|
+
DELETE_RETRY_SECONDS = 0.05
|
|
90
99
|
|
|
91
100
|
_NAME = re.compile(r'[A-Za-z0-9_-]{1,64}')
|
|
92
|
-
_DIR_FLAGS = os.O_RDONLY | getattr(os, 'O_DIRECTORY', 0) | getattr(os, 'O_NOFOLLOW', 0)
|
|
93
|
-
_FILE_READ_FLAGS = os.O_RDONLY | getattr(os, 'O_NOFOLLOW', 0) | getattr(os, 'O_NONBLOCK', 0)
|
|
94
|
-
_FILE_CREATE_FLAGS = os.O_WRONLY | os.O_CREAT | os.O_EXCL | getattr(os, 'O_NOFOLLOW', 0)
|
|
95
101
|
|
|
96
102
|
IMAGE_FORMATS = ('image/png', 'image/jpeg', 'image/gif', 'image/webp')
|
|
97
103
|
|
|
@@ -132,19 +138,19 @@ _workspace_lock = threading.Lock()
|
|
|
132
138
|
def _open_root(create: bool = False) -> int:
|
|
133
139
|
"""
|
|
134
140
|
Open storage/mcp/analysis. The root itself is part of Jesse's own storage folder and is
|
|
135
|
-
opened normally; every path below it is opened
|
|
141
|
+
opened normally; every path below it is opened without following links.
|
|
136
142
|
"""
|
|
137
143
|
if create:
|
|
138
144
|
os.makedirs(ANALYSIS_ROOT, exist_ok=True)
|
|
139
145
|
try:
|
|
140
|
-
return
|
|
146
|
+
return nofollow_fs.open_path(ANALYSIS_ROOT)
|
|
141
147
|
except FileNotFoundError:
|
|
142
148
|
raise _error('not_found', 'No analysis job exists yet.', 404)
|
|
143
149
|
|
|
144
150
|
|
|
145
151
|
def _open_dir(dir_fd: int, name: str, missing_message: str) -> int:
|
|
146
152
|
try:
|
|
147
|
-
return
|
|
153
|
+
return nofollow_fs.open_dir(dir_fd, name)
|
|
148
154
|
except FileNotFoundError:
|
|
149
155
|
raise _error('not_found', missing_message, 404)
|
|
150
156
|
except OSError:
|
|
@@ -156,9 +162,13 @@ def _open_dir(dir_fd: int, name: str, missing_message: str) -> int:
|
|
|
156
162
|
|
|
157
163
|
def _lstat(dir_fd: int, name: str) -> Optional[os.stat_result]:
|
|
158
164
|
try:
|
|
159
|
-
return
|
|
165
|
+
return nofollow_fs.lstat(dir_fd, name)
|
|
160
166
|
except FileNotFoundError:
|
|
161
167
|
return None
|
|
168
|
+
except OSError as exc:
|
|
169
|
+
if exc.errno == errno.EINVAL: # A name Windows refuses to open; see project_files._lstat.
|
|
170
|
+
return None
|
|
171
|
+
raise
|
|
162
172
|
|
|
163
173
|
|
|
164
174
|
def _gone_message(job_id: str) -> str:
|
|
@@ -177,7 +187,7 @@ def _open_workspace(job_id: str) -> int:
|
|
|
177
187
|
|
|
178
188
|
def _write_new_file(dir_fd: int, name: str, chunks, cap: int, label: str) -> int:
|
|
179
189
|
"""Create `name` exclusively and write chunks, refusing with too_large past `cap` bytes."""
|
|
180
|
-
fd =
|
|
190
|
+
fd = nofollow_fs.create_file(dir_fd, name, 0o600)
|
|
181
191
|
written = 0
|
|
182
192
|
try:
|
|
183
193
|
with os.fdopen(fd, 'wb') as f:
|
|
@@ -189,7 +199,7 @@ def _write_new_file(dir_fd: int, name: str, chunks, cap: int, label: str) -> int
|
|
|
189
199
|
f.write(data)
|
|
190
200
|
except BaseException:
|
|
191
201
|
try:
|
|
192
|
-
|
|
202
|
+
nofollow_fs.unlink(dir_fd, name)
|
|
193
203
|
except OSError:
|
|
194
204
|
pass
|
|
195
205
|
raise
|
|
@@ -199,24 +209,22 @@ def _write_new_file(dir_fd: int, name: str, chunks, cap: int, label: str) -> int
|
|
|
199
209
|
def _remove_tree(dir_fd: int, name: str) -> None:
|
|
200
210
|
"""Delete a folder and everything in it; symlinks are unlinked, never followed."""
|
|
201
211
|
try:
|
|
202
|
-
sub =
|
|
212
|
+
sub = nofollow_fs.open_dir(dir_fd, name)
|
|
203
213
|
except FileNotFoundError:
|
|
204
214
|
return
|
|
205
215
|
try:
|
|
206
|
-
|
|
207
|
-
children = list(entries)
|
|
208
|
-
for child in children:
|
|
216
|
+
for child in list(nofollow_fs.scandir(sub)):
|
|
209
217
|
if child.is_dir(follow_symlinks=False):
|
|
210
218
|
_remove_tree(sub, child.name)
|
|
211
219
|
else:
|
|
212
220
|
try:
|
|
213
|
-
|
|
221
|
+
nofollow_fs.unlink(sub, child.name)
|
|
214
222
|
except FileNotFoundError:
|
|
215
223
|
pass
|
|
216
224
|
finally:
|
|
217
225
|
os.close(sub)
|
|
218
226
|
try:
|
|
219
|
-
|
|
227
|
+
nofollow_fs.rmdir(dir_fd, name)
|
|
220
228
|
except FileNotFoundError:
|
|
221
229
|
pass
|
|
222
230
|
|
|
@@ -224,21 +232,20 @@ def _remove_tree(dir_fd: int, name: str) -> None:
|
|
|
224
232
|
def _tree_size(dir_fd: int, name: str) -> int:
|
|
225
233
|
"""Bytes used by regular files below a folder, without following symlinks."""
|
|
226
234
|
try:
|
|
227
|
-
sub =
|
|
235
|
+
sub = nofollow_fs.open_dir(dir_fd, name)
|
|
228
236
|
except OSError:
|
|
229
237
|
return 0
|
|
230
238
|
total = 0
|
|
231
239
|
try:
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
total += st.st_size
|
|
240
|
+
for entry in nofollow_fs.scandir(sub):
|
|
241
|
+
try:
|
|
242
|
+
st = entry.stat(follow_symlinks=False)
|
|
243
|
+
except OSError:
|
|
244
|
+
continue
|
|
245
|
+
if stat.S_ISDIR(st.st_mode):
|
|
246
|
+
total += _tree_size(sub, entry.name)
|
|
247
|
+
elif stat.S_ISREG(st.st_mode):
|
|
248
|
+
total += st.st_size
|
|
242
249
|
finally:
|
|
243
250
|
os.close(sub)
|
|
244
251
|
return total
|
|
@@ -265,7 +272,7 @@ def _discard(root_fd: int, job_id: str) -> None:
|
|
|
265
272
|
"""
|
|
266
273
|
trash = f'.trash-{job_id}-{uuid4().hex}'
|
|
267
274
|
try:
|
|
268
|
-
|
|
275
|
+
nofollow_fs.rename(root_fd, job_id, root_fd, trash, replace=False)
|
|
269
276
|
except FileNotFoundError:
|
|
270
277
|
return
|
|
271
278
|
_remove_trash(root_fd, trash)
|
|
@@ -319,7 +326,7 @@ def cleanup_workspaces(now: Optional[float] = None) -> List[str]:
|
|
|
319
326
|
root = _open_root()
|
|
320
327
|
try:
|
|
321
328
|
candidates: List[Tuple[float, str]] = []
|
|
322
|
-
for entry in
|
|
329
|
+
for entry in nofollow_fs.scandir(root):
|
|
323
330
|
name = entry.name
|
|
324
331
|
if name.startswith('.trash-'):
|
|
325
332
|
_remove_trash(root, name) # Left over from an interrupted or failed deletion.
|
|
@@ -470,10 +477,10 @@ def start_analysis(code: str, inputs: Optional[list] = None, timeout_minutes: in
|
|
|
470
477
|
raise _error('too_large', f'code is limited to {MAX_CODE_BYTES // 1024} KiB.', 413)
|
|
471
478
|
research_jobs.validate_timeout(timeout_minutes, MAX_TIMEOUT_MINUTES)
|
|
472
479
|
validated = _validate_inputs(inputs)
|
|
473
|
-
# Workspace confinement needs no-follow directory
|
|
480
|
+
# Workspace confinement needs no-follow directory access; refuse unsupported
|
|
474
481
|
# hosts before reserving a job or creating files rather than weakening those guarantees.
|
|
475
482
|
if not project_files._platform_supported():
|
|
476
|
-
raise _error('unsupported_platform', 'Analysis jobs require Linux
|
|
483
|
+
raise _error('unsupported_platform', 'Analysis jobs require Linux, macOS, or Windows.', 501)
|
|
477
484
|
job_id = _reserve_slot()
|
|
478
485
|
# From here on the reservation is released in `finally`, whatever fails.
|
|
479
486
|
try:
|
|
@@ -485,7 +492,7 @@ def start_analysis(code: str, inputs: Optional[list] = None, timeout_minutes: in
|
|
|
485
492
|
try:
|
|
486
493
|
root = _open_root(create=True)
|
|
487
494
|
try:
|
|
488
|
-
|
|
495
|
+
nofollow_fs.make_dir(root, job_id, 0o700)
|
|
489
496
|
finally:
|
|
490
497
|
os.close(root)
|
|
491
498
|
except OSError as exc:
|
|
@@ -525,8 +532,8 @@ def _prepare_and_launch(job_id: str, validated: List[dict], code_bytes: bytes, t
|
|
|
525
532
|
try:
|
|
526
533
|
workspace = _open_workspace(job_id)
|
|
527
534
|
try:
|
|
528
|
-
|
|
529
|
-
|
|
535
|
+
nofollow_fs.make_dir(workspace, INPUTS_DIR, 0o700)
|
|
536
|
+
nofollow_fs.make_dir(workspace, OUTPUT_DIR, 0o700)
|
|
530
537
|
manifest = _write_inputs(workspace, validated)
|
|
531
538
|
_write_new_file(workspace, CODE_FILE, [code_bytes], MAX_CODE_BYTES, 'code')
|
|
532
539
|
except OSError as exc:
|
|
@@ -549,6 +556,18 @@ def _prepare_and_launch(job_id: str, validated: List[dict], code_bytes: bytes, t
|
|
|
549
556
|
{'MPLBACKEND': 'Agg'},
|
|
550
557
|
)
|
|
551
558
|
except BaseException:
|
|
559
|
+
_discard_after_failed_start(job_id)
|
|
560
|
+
raise
|
|
561
|
+
|
|
562
|
+
|
|
563
|
+
def _discard_after_failed_start(job_id: str) -> None:
|
|
564
|
+
"""
|
|
565
|
+
Remove the workspace of a job that failed to start, without replacing the error that caused it.
|
|
566
|
+
|
|
567
|
+
Best-effort: if the removal itself fails (on Windows the folder cannot move while a file in it
|
|
568
|
+
is open), the workspace stays on disk and cleanup_workspaces removes it later.
|
|
569
|
+
"""
|
|
570
|
+
try:
|
|
552
571
|
with _workspace_lock:
|
|
553
572
|
root = _open_root()
|
|
554
573
|
try:
|
|
@@ -556,7 +575,8 @@ def _prepare_and_launch(job_id: str, validated: List[dict], code_bytes: bytes, t
|
|
|
556
575
|
_discard(root, job_id)
|
|
557
576
|
finally:
|
|
558
577
|
os.close(root)
|
|
559
|
-
|
|
578
|
+
except (OSError, ProjectFileError):
|
|
579
|
+
pass
|
|
560
580
|
|
|
561
581
|
|
|
562
582
|
def _public(record: dict) -> dict:
|
|
@@ -634,17 +654,43 @@ def delete_job(job_id: str) -> dict:
|
|
|
634
654
|
try:
|
|
635
655
|
if _lstat(root, job_id) is None:
|
|
636
656
|
raise _error('not_found', _gone_message(job_id), 404)
|
|
637
|
-
|
|
657
|
+
_discard_for_delete(root, job_id)
|
|
638
658
|
except OSError as exc:
|
|
659
|
+
if os.name == 'nt' and exc.errno in (errno.EACCES, errno.EBUSY):
|
|
660
|
+
raise _error('job_busy', f'Analysis job {job_id} is still open by another request. Try again shortly.', 409)
|
|
639
661
|
raise _error('io_error', f'Could not delete analysis job {job_id}: {exc.strerror or exc}.', 500)
|
|
640
662
|
finally:
|
|
641
663
|
os.close(root)
|
|
642
664
|
return {'job_id': job_id, 'deleted': True}
|
|
643
665
|
|
|
644
666
|
|
|
667
|
+
def _discard_for_delete(root_fd: int, job_id: str) -> None:
|
|
668
|
+
"""
|
|
669
|
+
Discard a workspace for an explicit delete. On Windows NTFS will not move a folder while a
|
|
670
|
+
file inside it is open by someone else, and a reader holds its file only for the moment it
|
|
671
|
+
reads it (read_artifact closes before checking). Retrying briefly lets that reader finish;
|
|
672
|
+
cleanup_workspaces remains best-effort and simply retries later.
|
|
673
|
+
|
|
674
|
+
Tradeoff: the retries run while _workspace_lock is held, so on Windows other workspace
|
|
675
|
+
operations wait at most DELETE_RETRY_ATTEMPTS * DELETE_RETRY_SECONDS (about two seconds) before
|
|
676
|
+
this delete reports job_busy (409) instead of blocking longer.
|
|
677
|
+
"""
|
|
678
|
+
if os.name != 'nt':
|
|
679
|
+
_discard(root_fd, job_id)
|
|
680
|
+
return
|
|
681
|
+
for attempt in range(DELETE_RETRY_ATTEMPTS):
|
|
682
|
+
try:
|
|
683
|
+
_discard(root_fd, job_id)
|
|
684
|
+
return
|
|
685
|
+
except OSError as exc:
|
|
686
|
+
if exc.errno not in (errno.EACCES, errno.EBUSY) or attempt == DELETE_RETRY_ATTEMPTS - 1:
|
|
687
|
+
raise
|
|
688
|
+
time.sleep(DELETE_RETRY_SECONDS)
|
|
689
|
+
|
|
690
|
+
|
|
645
691
|
def _sniff(fd: int) -> Tuple[str, Optional[str]]:
|
|
646
692
|
"""Classify a file as ('image', mime), ('text', None) or ('binary', None) from its first bytes."""
|
|
647
|
-
head =
|
|
693
|
+
head = nofollow_fs.read_at(fd, 8192, 0)
|
|
648
694
|
mime = _image_mime(head)
|
|
649
695
|
if mime:
|
|
650
696
|
return 'image', mime
|
|
@@ -739,6 +785,11 @@ def _parse_artifact_path(path: object) -> List[str]:
|
|
|
739
785
|
parts = parts[1:]
|
|
740
786
|
if not parts:
|
|
741
787
|
raise _error('invalid_path', 'path must name a file inside the output folder.', 400)
|
|
788
|
+
if os.name == 'nt':
|
|
789
|
+
for part in parts:
|
|
790
|
+
problem = nofollow_fs.component_problem(part)
|
|
791
|
+
if problem is not None:
|
|
792
|
+
raise _error('invalid_path', f'{part!r} {problem}; artifact names must be names Windows accepts.', 400)
|
|
742
793
|
return parts
|
|
743
794
|
|
|
744
795
|
|
|
@@ -759,8 +810,7 @@ def list_artifacts(job_id: str) -> dict:
|
|
|
759
810
|
|
|
760
811
|
def walk(dir_fd: int, prefix: Sequence[str]) -> None:
|
|
761
812
|
nonlocal truncated
|
|
762
|
-
|
|
763
|
-
children = sorted(iterator, key=lambda entry: entry.name)
|
|
813
|
+
children = sorted(nofollow_fs.scandir(dir_fd), key=lambda entry: entry.name)
|
|
764
814
|
for child in children:
|
|
765
815
|
if len(artifacts) >= MAX_ARTIFACTS_LISTED:
|
|
766
816
|
truncated = True
|
|
@@ -772,7 +822,7 @@ def list_artifacts(job_id: str) -> dict:
|
|
|
772
822
|
continue
|
|
773
823
|
if stat.S_ISDIR(st.st_mode):
|
|
774
824
|
try:
|
|
775
|
-
sub =
|
|
825
|
+
sub = nofollow_fs.open_dir(dir_fd, child.name)
|
|
776
826
|
except OSError:
|
|
777
827
|
continue
|
|
778
828
|
try:
|
|
@@ -785,7 +835,7 @@ def list_artifacts(job_id: str) -> dict:
|
|
|
785
835
|
item.update(kind='symlink', size_bytes=None)
|
|
786
836
|
elif stat.S_ISREG(st.st_mode):
|
|
787
837
|
try:
|
|
788
|
-
fd =
|
|
838
|
+
fd = nofollow_fs.open_read(dir_fd, child.name)
|
|
789
839
|
except OSError:
|
|
790
840
|
continue
|
|
791
841
|
try:
|
|
@@ -826,7 +876,7 @@ def read_artifact(job_id: str, path: str) -> dict:
|
|
|
826
876
|
os.close(dir_fd)
|
|
827
877
|
dir_fd = child
|
|
828
878
|
try:
|
|
829
|
-
fd =
|
|
879
|
+
fd = nofollow_fs.open_read(dir_fd, parts[-1])
|
|
830
880
|
except FileNotFoundError:
|
|
831
881
|
raise _error('not_found', f'{display} does not exist in the output folder of analysis job {job_id}.', 404)
|
|
832
882
|
except OSError:
|
|
@@ -836,40 +886,48 @@ def read_artifact(job_id: str, path: str) -> dict:
|
|
|
836
886
|
raise _error('wrong_type', f'{display} cannot be opened as a file.', 409)
|
|
837
887
|
finally:
|
|
838
888
|
os.close(dir_fd)
|
|
889
|
+
# The bytes are read and the handle closed before any checks run. Nothing holds the file open
|
|
890
|
+
# while Pillow or the caller works, so deleting the job never has to wait for a reader on Windows.
|
|
839
891
|
try:
|
|
840
892
|
st = os.fstat(fd)
|
|
841
893
|
if not stat.S_ISREG(st.st_mode):
|
|
842
894
|
raise _error('wrong_type', f'{display} is not a regular file.', 409)
|
|
843
895
|
kind, mime = _sniff(fd)
|
|
844
|
-
|
|
845
|
-
'modified_at': datetime.fromtimestamp(st.st_mtime, timezone.utc).isoformat(timespec='seconds')}
|
|
896
|
+
data = b''
|
|
846
897
|
if kind == 'image' and mime:
|
|
847
898
|
if st.st_size > MAX_IMAGE_BYTES:
|
|
848
899
|
raise _error('artifact_too_large', f'{display} is {st.st_size} bytes; images are returned up to '
|
|
849
900
|
f'{MAX_IMAGE_BYTES // (1024 * 1024)} MiB. Save it smaller (lower dpi or figure size).', 413)
|
|
850
|
-
data =
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
size = _image_size(data, mime)
|
|
854
|
-
if size is None:
|
|
855
|
-
raise _error('invalid_image', f'{display} starts like a {mime} file but is not a valid image.', 422)
|
|
856
|
-
width, height = size
|
|
857
|
-
# Dimensions are checked before Pillow opens the image: Pillow refuses very large
|
|
858
|
-
# pixel counts as decompression bombs, which would misreport a legitimately
|
|
859
|
-
# oversized chart as invalid instead of telling the caller to shrink it.
|
|
860
|
-
if not (1 <= width <= MAX_IMAGE_DIMENSION and 1 <= height <= MAX_IMAGE_DIMENSION):
|
|
861
|
-
raise _error('artifact_too_large', f'{display} is {width}x{height} pixels; images are returned up to '
|
|
862
|
-
f'{MAX_IMAGE_DIMENSION} pixels per side. Save it smaller (lower dpi or figure size).', 413)
|
|
863
|
-
if not _verify_image(data):
|
|
864
|
-
raise _error('invalid_image', f'{display} starts like a {mime} file but is not a valid image.', 422)
|
|
865
|
-
return {**base, 'kind': 'image', 'mime_type': mime, 'width': width, 'height': height,
|
|
866
|
-
'data_base64': base64.b64encode(data).decode('ascii')}
|
|
867
|
-
if kind == 'text':
|
|
868
|
-
raw = os.pread(fd, MAX_TEXT_ARTIFACT_CHARS * 4 + 4, 0)
|
|
869
|
-
text = raw.decode('utf-8', errors='replace')
|
|
870
|
-
truncated = len(text) > MAX_TEXT_ARTIFACT_CHARS or len(raw) < st.st_size
|
|
871
|
-
return {**base, 'kind': 'text', 'content': text[:MAX_TEXT_ARTIFACT_CHARS], 'truncated': truncated}
|
|
872
|
-
return {**base, 'kind': 'binary', 'message': (
|
|
873
|
-
f'{display} is a binary file; only PNG, JPEG, GIF and WebP images and text files are returned.')}
|
|
901
|
+
data = nofollow_fs.read_at(fd, MAX_IMAGE_BYTES + 1, 0)
|
|
902
|
+
elif kind == 'text':
|
|
903
|
+
data = nofollow_fs.read_at(fd, MAX_TEXT_ARTIFACT_CHARS * 4 + 4, 0)
|
|
874
904
|
finally:
|
|
875
905
|
os.close(fd)
|
|
906
|
+
base = {'job_id': job_id, 'path': display, 'size_bytes': st.st_size,
|
|
907
|
+
'modified_at': datetime.fromtimestamp(st.st_mtime, timezone.utc).isoformat(timespec='seconds')}
|
|
908
|
+
if kind == 'image' and mime:
|
|
909
|
+
if len(data) != st.st_size:
|
|
910
|
+
raise _error('artifact_changed', f'{display} changed while it was being read; fetch it again.', 409)
|
|
911
|
+
size = _image_size(data, mime)
|
|
912
|
+
if size is None:
|
|
913
|
+
raise _error('invalid_image', f'{display} starts like a {mime} file but is not a valid image.', 422)
|
|
914
|
+
width, height = size
|
|
915
|
+
# Dimensions are checked before Pillow opens the image: Pillow refuses very large
|
|
916
|
+
# pixel counts as decompression bombs, which would misreport a legitimately
|
|
917
|
+
# oversized chart as invalid instead of telling the caller to shrink it.
|
|
918
|
+
if not (1 <= width <= MAX_IMAGE_DIMENSION and 1 <= height <= MAX_IMAGE_DIMENSION):
|
|
919
|
+
raise _error('artifact_too_large', f'{display} is {width}x{height} pixels; images are returned up to '
|
|
920
|
+
f'{MAX_IMAGE_DIMENSION} pixels per side. Save it smaller (lower dpi or figure size).', 413)
|
|
921
|
+
if not _verify_image(data):
|
|
922
|
+
raise _error('invalid_image', f'{display} starts like a {mime} file but is not a valid image.', 422)
|
|
923
|
+
return {**base, 'kind': 'image', 'mime_type': mime, 'width': width, 'height': height,
|
|
924
|
+
'data_base64': base64.b64encode(data).decode('ascii')}
|
|
925
|
+
if kind == 'text':
|
|
926
|
+
text = data.decode('utf-8', errors='replace')
|
|
927
|
+
if os.name == 'nt':
|
|
928
|
+
# Text written by Python on Windows has CRLF line endings; return the same text as on POSIX.
|
|
929
|
+
text = text.replace('\r\n', '\n')
|
|
930
|
+
truncated = len(text) > MAX_TEXT_ARTIFACT_CHARS or len(data) < st.st_size
|
|
931
|
+
return {**base, 'kind': 'text', 'content': text[:MAX_TEXT_ARTIFACT_CHARS], 'truncated': truncated}
|
|
932
|
+
return {**base, 'kind': 'binary', 'message': (
|
|
933
|
+
f'{display} is a binary file; only PNG, JPEG, GIF and WebP images and text files are returned.')}
|