mcli-framework 8.0.42__tar.gz → 8.0.44__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.
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/PKG-INFO +1 -98
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/pyproject.toml +4 -158
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/app/new_cmd.py +33 -17
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/lib/constants/messages.py +7 -1
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/lib/pyenv/deps.py +1 -1
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/lib/pyenv/manager.py +21 -14
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli_framework.egg-info/PKG-INFO +1 -98
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli_framework.egg-info/SOURCES.txt +0 -130
- mcli_framework-8.0.44/src/mcli_framework.egg-info/entry_points.txt +2 -0
- mcli_framework-8.0.44/src/mcli_framework.egg-info/requires.txt +51 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/integration/test_module_imports.py +0 -11
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/unit/test_new_cmd.py +57 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/unit/test_pyenv.py +62 -0
- mcli_framework-8.0.42/src/mcli/ml/__init__.py +0 -16
- mcli_framework-8.0.42/src/mcli/ml/api/__init__.py +0 -30
- mcli_framework-8.0.42/src/mcli/ml/api/app.py +0 -202
- mcli_framework-8.0.42/src/mcli/ml/api/middleware.py +0 -216
- mcli_framework-8.0.42/src/mcli/ml/api/routers/__init__.py +0 -27
- mcli_framework-8.0.42/src/mcli/ml/api/routers/admin_router.py +0 -14
- mcli_framework-8.0.42/src/mcli/ml/api/routers/auth_router.py +0 -219
- mcli_framework-8.0.42/src/mcli/ml/api/routers/backtest_router.py +0 -14
- mcli_framework-8.0.42/src/mcli/ml/api/routers/data_router.py +0 -14
- mcli_framework-8.0.42/src/mcli/ml/api/routers/model_router.py +0 -262
- mcli_framework-8.0.42/src/mcli/ml/api/routers/monitoring_router.py +0 -14
- mcli_framework-8.0.42/src/mcli/ml/api/routers/portfolio_router.py +0 -14
- mcli_framework-8.0.42/src/mcli/ml/api/routers/prediction_router.py +0 -263
- mcli_framework-8.0.42/src/mcli/ml/api/routers/trade_router.py +0 -16
- mcli_framework-8.0.42/src/mcli/ml/api/routers/websocket_router.py +0 -78
- mcli_framework-8.0.42/src/mcli/ml/api/schemas.py +0 -72
- mcli_framework-8.0.42/src/mcli/ml/auth/__init__.py +0 -41
- mcli_framework-8.0.42/src/mcli/ml/auth/auth_manager.py +0 -394
- mcli_framework-8.0.42/src/mcli/ml/auth/models.py +0 -169
- mcli_framework-8.0.42/src/mcli/ml/auth/permissions.py +0 -295
- mcli_framework-8.0.42/src/mcli/ml/backtesting/__init__.py +0 -27
- mcli_framework-8.0.42/src/mcli/ml/backtesting/backtest_engine.py +0 -522
- mcli_framework-8.0.42/src/mcli/ml/backtesting/performance_metrics.py +0 -425
- mcli_framework-8.0.42/src/mcli/ml/backtesting/run.py +0 -123
- mcli_framework-8.0.42/src/mcli/ml/cache.py +0 -393
- mcli_framework-8.0.42/src/mcli/ml/cli/__init__.py +0 -5
- mcli_framework-8.0.42/src/mcli/ml/cli/main.py +0 -409
- mcli_framework-8.0.42/src/mcli/ml/config/__init__.py +0 -33
- mcli_framework-8.0.42/src/mcli/ml/config/settings.py +0 -410
- mcli_framework-8.0.42/src/mcli/ml/configs/__init__.py +0 -16
- mcli_framework-8.0.42/src/mcli/ml/configs/dvc_config.py +0 -229
- mcli_framework-8.0.42/src/mcli/ml/configs/mlflow_config.py +0 -130
- mcli_framework-8.0.42/src/mcli/ml/configs/mlops_manager.py +0 -291
- mcli_framework-8.0.42/src/mcli/ml/dashboard/__init__.py +0 -12
- mcli_framework-8.0.42/src/mcli/ml/dashboard/app.py +0 -481
- mcli_framework-8.0.42/src/mcli/ml/dashboard/app_integrated.py +0 -3026
- mcli_framework-8.0.42/src/mcli/ml/dashboard/app_supabase.py +0 -651
- mcli_framework-8.0.42/src/mcli/ml/dashboard/app_training.py +0 -613
- mcli_framework-8.0.42/src/mcli/ml/dashboard/cli.py +0 -60
- mcli_framework-8.0.42/src/mcli/ml/dashboard/common.py +0 -166
- mcli_framework-8.0.42/src/mcli/ml/dashboard/components/__init__.py +0 -7
- mcli_framework-8.0.42/src/mcli/ml/dashboard/components/charts.py +0 -219
- mcli_framework-8.0.42/src/mcli/ml/dashboard/components/metrics.py +0 -105
- mcli_framework-8.0.42/src/mcli/ml/dashboard/components/tables.py +0 -223
- mcli_framework-8.0.42/src/mcli/ml/dashboard/overview.py +0 -402
- mcli_framework-8.0.42/src/mcli/ml/dashboard/pages/__init__.py +0 -6
- mcli_framework-8.0.42/src/mcli/ml/dashboard/pages/cicd.py +0 -426
- mcli_framework-8.0.42/src/mcli/ml/dashboard/pages/debug_dependencies.py +0 -413
- mcli_framework-8.0.42/src/mcli/ml/dashboard/pages/gravity_viz.py +0 -844
- mcli_framework-8.0.42/src/mcli/ml/dashboard/pages/monte_carlo_predictions.py +0 -550
- mcli_framework-8.0.42/src/mcli/ml/dashboard/pages/predictions_enhanced.py +0 -1020
- mcli_framework-8.0.42/src/mcli/ml/dashboard/pages/scrapers_and_logs.py +0 -1100
- mcli_framework-8.0.42/src/mcli/ml/dashboard/pages/test_portfolio.py +0 -452
- mcli_framework-8.0.42/src/mcli/ml/dashboard/pages/trading.py +0 -835
- mcli_framework-8.0.42/src/mcli/ml/dashboard/pages/workflows.py +0 -568
- mcli_framework-8.0.42/src/mcli/ml/dashboard/streamlit_extras_utils.py +0 -288
- mcli_framework-8.0.42/src/mcli/ml/dashboard/styles.py +0 -55
- mcli_framework-8.0.42/src/mcli/ml/dashboard/utils.py +0 -192
- mcli_framework-8.0.42/src/mcli/ml/dashboard/warning_suppression.py +0 -36
- mcli_framework-8.0.42/src/mcli/ml/data_ingestion/__init__.py +0 -29
- mcli_framework-8.0.42/src/mcli/ml/data_ingestion/api_connectors.py +0 -466
- mcli_framework-8.0.42/src/mcli/ml/data_ingestion/data_pipeline.py +0 -559
- mcli_framework-8.0.42/src/mcli/ml/data_ingestion/stream_processor.py +0 -501
- mcli_framework-8.0.42/src/mcli/ml/database/__init__.py +0 -40
- mcli_framework-8.0.42/src/mcli/ml/database/migrations/env.py +0 -95
- mcli_framework-8.0.42/src/mcli/ml/database/models.py +0 -698
- mcli_framework-8.0.42/src/mcli/ml/database/session.py +0 -365
- mcli_framework-8.0.42/src/mcli/ml/experimentation/__init__.py +0 -29
- mcli_framework-8.0.42/src/mcli/ml/experimentation/ab_testing.py +0 -894
- mcli_framework-8.0.42/src/mcli/ml/features/__init__.py +0 -39
- mcli_framework-8.0.42/src/mcli/ml/features/ensemble_features.py +0 -603
- mcli_framework-8.0.42/src/mcli/ml/features/recommendation_engine.py +0 -810
- mcli_framework-8.0.42/src/mcli/ml/features/stock_features.py +0 -571
- mcli_framework-8.0.42/src/mcli/ml/features/test_feature_engineering.py +0 -346
- mcli_framework-8.0.42/src/mcli/ml/logging.py +0 -80
- mcli_framework-8.0.42/src/mcli/ml/mlops/__init__.py +0 -19
- mcli_framework-8.0.42/src/mcli/ml/mlops/data_versioning.py +0 -510
- mcli_framework-8.0.42/src/mcli/ml/mlops/experiment_tracker.py +0 -385
- mcli_framework-8.0.42/src/mcli/ml/mlops/model_serving.py +0 -475
- mcli_framework-8.0.42/src/mcli/ml/mlops/pipeline_orchestrator.py +0 -658
- mcli_framework-8.0.42/src/mcli/ml/models/__init__.py +0 -89
- mcli_framework-8.0.42/src/mcli/ml/models/base_models.py +0 -325
- mcli_framework-8.0.42/src/mcli/ml/models/ensemble_models.py +0 -677
- mcli_framework-8.0.42/src/mcli/ml/models/recommendation_models.py +0 -475
- mcli_framework-8.0.42/src/mcli/ml/models/test_models.py +0 -489
- mcli_framework-8.0.42/src/mcli/ml/monitoring/__init__.py +0 -25
- mcli_framework-8.0.42/src/mcli/ml/monitoring/drift_detection.py +0 -693
- mcli_framework-8.0.42/src/mcli/ml/monitoring/metrics.py +0 -33
- mcli_framework-8.0.42/src/mcli/ml/optimization/__init__.py +0 -27
- mcli_framework-8.0.42/src/mcli/ml/optimization/optimize.py +0 -52
- mcli_framework-8.0.42/src/mcli/ml/optimization/portfolio_optimizer.py +0 -872
- mcli_framework-8.0.42/src/mcli/ml/predictions/__init__.py +0 -5
- mcli_framework-8.0.42/src/mcli/ml/predictions/monte_carlo.py +0 -414
- mcli_framework-8.0.42/src/mcli/ml/predictions/prediction_engine.py +0 -233
- mcli_framework-8.0.42/src/mcli/ml/preprocessing/__init__.py +0 -33
- mcli_framework-8.0.42/src/mcli/ml/preprocessing/data_cleaners.py +0 -451
- mcli_framework-8.0.42/src/mcli/ml/preprocessing/feature_extractors.py +0 -489
- mcli_framework-8.0.42/src/mcli/ml/preprocessing/ml_pipeline.py +0 -423
- mcli_framework-8.0.42/src/mcli/ml/preprocessing/test_preprocessing.py +0 -293
- mcli_framework-8.0.42/src/mcli/ml/scripts/__init__.py +0 -1
- mcli_framework-8.0.42/src/mcli/ml/scripts/populate_sample_data.py +0 -216
- mcli_framework-8.0.42/src/mcli/ml/serving/__init__.py +0 -1
- mcli_framework-8.0.42/src/mcli/ml/serving/serve.py +0 -61
- mcli_framework-8.0.42/src/mcli/ml/tasks.py +0 -399
- mcli_framework-8.0.42/src/mcli/ml/tests/test_integration.py +0 -438
- mcli_framework-8.0.42/src/mcli/ml/tests/test_training_dashboard.py +0 -414
- mcli_framework-8.0.42/src/mcli/ml/trading/__init__.py +0 -63
- mcli_framework-8.0.42/src/mcli/ml/trading/alpaca_client.py +0 -415
- mcli_framework-8.0.42/src/mcli/ml/trading/migrations.py +0 -200
- mcli_framework-8.0.42/src/mcli/ml/trading/models.py +0 -434
- mcli_framework-8.0.42/src/mcli/ml/trading/paper_trading.py +0 -347
- mcli_framework-8.0.42/src/mcli/ml/trading/risk_management.py +0 -390
- mcli_framework-8.0.42/src/mcli/ml/trading/trading_service.py +0 -522
- mcli_framework-8.0.42/src/mcli/ml/training/__init__.py +0 -7
- mcli_framework-8.0.42/src/mcli/ml/training/train.py +0 -79
- mcli_framework-8.0.42/src/mcli/ml/training/train_model.py +0 -567
- mcli_framework-8.0.42/src/mcli/workflow/dashboard/__init__.py +0 -5
- mcli_framework-8.0.42/src/mcli/workflow/dashboard/dashboard_cmd.py +0 -179
- mcli_framework-8.0.42/src/mcli_framework.egg-info/entry_points.txt +0 -7
- mcli_framework-8.0.42/src/mcli_framework.egg-info/requires.txt +0 -163
- mcli_framework-8.0.42/tests/integration/test_ml_auth.py +0 -375
- mcli_framework-8.0.42/tests/integration/test_ml_models.py +0 -323
- mcli_framework-8.0.42/tests/integration/test_ml_pipeline.py +0 -446
- mcli_framework-8.0.42/tests/integration/test_supabase_live_connection.py +0 -216
- mcli_framework-8.0.42/tests/unit/test_dashboard_components.py +0 -451
- mcli_framework-8.0.42/tests/unit/test_dashboard_functions.py +0 -275
- mcli_framework-8.0.42/tests/unit/test_dashboard_pages.py +0 -524
- mcli_framework-8.0.42/tests/unit/test_ml_preprocessing.py +0 -165
- mcli_framework-8.0.42/tests/unit/test_prediction_engine.py +0 -550
- mcli_framework-8.0.42/tests/unit/test_supabase_connection.py +0 -297
- mcli_framework-8.0.42/tests/unit/test_supabase_pagination.py +0 -235
- mcli_framework-8.0.42/tests/unit/test_trading_imports.py +0 -125
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/.github/dependabot.yml +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/.github/dependency-review-config.yml +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/.github/workflows/build.yml +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/.github/workflows/ci.yml +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/.github/workflows/codeql.yml +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/.github/workflows/docs-links.yml +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/.github/workflows/publish-self-hosted.yml +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/.github/workflows/publish.yml +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/.github/workflows/release.yml +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/.github/workflows/security.yml +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/.github/workflows/test.yml +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/LICENSE +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/MANIFEST.in +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/README.md +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/llms-full.txt +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/llms.txt +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/mcli_rust/Cargo.toml +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/mcli_rust/src/command_parser.rs +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/mcli_rust/src/file_watcher.rs +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/mcli_rust/src/lib.rs +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/mcli_rust/src/process_manager.rs +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/mcli_rust/src/tfidf.rs +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/setup.cfg +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/__init__.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/app/__init__.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/app/commands_cmd.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/app/completion_helpers.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/app/context_cmd.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/app/create_cmd.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/app/delete_cmd.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/app/edit_cmd.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/app/import_cmd.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/app/init_cmd.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/app/list_cmd.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/app/main.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/app/migrate_cmd.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/app/model/__init__.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/app/model/model.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/app/model_cmd.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/app/mv_cmd.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/app/remove_cmd.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/app/rm_cmd.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/app/search_cmd.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/app/services_cmd.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/app/sync_cmd.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/app/video/__init__.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/app/video/video.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/config.toml +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/lib/__init__.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/lib/api/__init__.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/lib/api/api.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/lib/api/daemon_client.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/lib/api/daemon_client_local.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/lib/api/daemon_decorator.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/lib/api/mcli_decorators.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/lib/auth/__init__.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/lib/auth/auth.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/lib/auth/aws_manager.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/lib/auth/azure_manager.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/lib/auth/credential_manager.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/lib/auth/gcp_manager.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/lib/auth/key_manager.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/lib/auth/mcli_manager.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/lib/auth/token_manager.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/lib/auth/token_util.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/lib/config/__init__.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/lib/config/config.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/lib/constants/__init__.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/lib/constants/commands.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/lib/constants/defaults.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/lib/constants/env.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/lib/constants/paths.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/lib/constants/scripts.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/lib/constants/storage.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/lib/custom_commands.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/lib/discovery/__init__.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/lib/discovery/command_discovery.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/lib/erd/__init__.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/lib/erd/erd.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/lib/erd/generate_graph.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/lib/errors.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/lib/feature_detection.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/lib/files/__init__.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/lib/files/files.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/lib/folder_workflows.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/lib/fs/__init__.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/lib/fs/fs.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/lib/ipfs_sync.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/lib/ipfs_utils.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/lib/lib.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/lib/logger/__init__.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/lib/logger/correlation.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/lib/logger/logger.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/lib/logger/structured.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/lib/optional_deps.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/lib/paths.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/lib/performance/__init__.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/lib/performance/optimizer.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/lib/performance/rust_bridge.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/lib/performance/uvloop_config.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/lib/pickles/__init__.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/lib/pickles/pickles.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/lib/pyenv/__init__.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/lib/pyenv/venv.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/lib/script_loader.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/lib/script_sync.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/lib/script_watcher.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/lib/search/cached_vectorizer.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/lib/secrets/__init__.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/lib/secrets/commands.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/lib/secrets/manager.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/lib/secrets/repl.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/lib/secrets/store.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/lib/services/__init__.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/lib/services/config.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/lib/services/data_pipeline.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/lib/services/health.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/lib/services/lsh_client.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/lib/services/manager.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/lib/services/redis_service.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/lib/services/registry.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/lib/services/state.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/lib/services/supervisor.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/lib/shell/__init__.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/lib/shell/exceptions.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/lib/shell/shell.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/lib/templates/__init__.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/lib/templates/command_templates.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/lib/toml/__init__.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/lib/toml/toml.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/lib/types.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/lib/ui/styling.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/lib/ui/visual_effects.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/lib/watcher/__init__.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/lib/watcher/watcher.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/lib/workflow_models.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/lib/workspace_registry.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/mygroup/__init__.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/mygroup/test_cmd.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/public/__init__.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/public/commands/__init__.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/public/oi/oi.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/public/public.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/self/__init__.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/self/completion_cmd.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/self/env_cmd.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/self/health_cmd.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/self/ipfs_cmd.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/self/logs_cmd.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/self/migrate_cmd.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/self/self_cmd.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/self/store_cmd.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/self/test_cmd.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/self/workflows_cmd.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/storage/__init__.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/storage/backends/__init__.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/storage/backends/ipfs_backend.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/storage/base.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/storage/cache.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/storage/encryption.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/storage/factory.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/storage/registry.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/storage/storacha_cli.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/workflow/__init__.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/workflow/daemon/__init__.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/workflow/daemon/async_command_database.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/workflow/daemon/async_process_manager.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/workflow/daemon/client.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/workflow/daemon/daemon.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/workflow/daemon/daemon_api.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/workflow/daemon/enhanced_daemon.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/workflow/daemon/process_cli.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/workflow/daemon/process_manager.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/workflow/daemon/test_daemon.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/workflow/doc_convert.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/workflow/docker/__init__.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/workflow/docker/docker.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/workflow/file/__init__.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/workflow/gcloud/__init__.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/workflow/gcloud/config.toml +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/workflow/gcloud/gcloud.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/workflow/git_commit/__init__.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/workflow/git_commit/ai_service.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/workflow/interview/__init__.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/workflow/lsh_integration.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/workflow/model_service/client.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/workflow/model_service/download_and_run_efficient_models.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/workflow/model_service/lightweight_embedder.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/workflow/model_service/lightweight_model_server.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/workflow/model_service/lightweight_test.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/workflow/model_service/model_service.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/workflow/model_service/ollama_efficient_runner.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/workflow/model_service/openai_adapter.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/workflow/model_service/pdf_processor.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/workflow/model_service/test_efficient_runner.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/workflow/model_service/test_example.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/workflow/model_service/test_integration.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/workflow/model_service/test_new_features.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/workflow/notebook/__init__.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/workflow/notebook/command_loader.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/workflow/notebook/converter.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/workflow/notebook/executor.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/workflow/notebook/notebook_cmd.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/workflow/notebook/schema.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/workflow/notebook/validator.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/workflow/openai/openai.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/workflow/registry/__init__.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/workflow/registry/registry.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/workflow/repo/__init__.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/workflow/repo/repo.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/workflow/scheduler/__init__.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/workflow/scheduler/cron_parser.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/workflow/scheduler/job.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/workflow/scheduler/models.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/workflow/scheduler/monitor.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/workflow/scheduler/persistence.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/workflow/scheduler/scheduler.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/workflow/scheduler/validation.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/workflow/search/__init__.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/workflow/secrets/__init__.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/workflow/secrets/secrets_cmd.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/workflow/storage/__init__.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/workflow/storage/storage_cmd.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/workflow/sync/__init__.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/workflow/sync/test_cmd.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/workflow/videos/__init__.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/workflow/wakatime/__init__.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/workflow/wakatime/wakatime.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli/workflow/workflow.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli_framework.egg-info/dependency_links.txt +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/src/mcli_framework.egg-info/top_level.txt +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/cli/__init__.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/cli/test_all_commands.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/cli/test_app_logs_cmd.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/cli/test_app_redis_cmd.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/cli/test_logs_cmd.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/cli/test_main_app.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/cli/test_model_cmd.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/cli/test_self_cmd.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/cli/test_self_cmd_plugins.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/cli/test_self_cmd_utilities.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/cli/test_workflow_creation_commands.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/cli/test_workflow_file.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/cli/test_workflow_gcloud.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/cli/test_workflow_registry.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/conftest.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/e2e/__init__.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/e2e/test_complete_workflows.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/e2e/test_model_workflow.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/e2e/test_new_user_workflow.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/e2e/test_update_workflow.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/fixtures/__init__.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/fixtures/chat_fixtures.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/fixtures/cli_fixtures.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/fixtures/command_fixtures.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/fixtures/data_fixtures.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/fixtures/db_fixtures.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/fixtures/model_fixtures.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/integration/__init__.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/integration/test_all_commands_comprehensive.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/integration/test_daemon_server.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/integration/test_direct_file_execution.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/integration/test_e2e_dashboard_lsh_supabase.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/integration/test_flask_webapp.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/integration/test_folder_workflows_integration.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/integration/test_gcloud_services.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/integration/test_ml_data_pipeline.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/integration/test_notebook_workflows.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/integration/test_oi_service.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/integration/test_repo_operations.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/integration/test_scheduler_integration.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/integration/test_service_registry.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/integration/test_video_processing.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/integration/test_wakatime_api.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/integration/test_webapp_full.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/integration/test_workflow.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/integration/test_workflow_commands.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/performance/__init__.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/property/__init__.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/unit/__init__.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/unit/storage/__init__.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/unit/storage/test_cache.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/unit/storage/test_encryption.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/unit/storage/test_storacha_cli.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/unit/test_api_utils.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/unit/test_async_process_manager.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/unit/test_auth_modules.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/unit/test_bug_fixes.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/unit/test_command_fixtures.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/unit/test_config.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/unit/test_correlation_logging.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/unit/test_custom_commands.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/unit/test_custom_commands_filtering.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/unit/test_daemon_api.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/unit/test_dependencies.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/unit/test_doc_convert_workflow.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/unit/test_emulator_workflow.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/unit/test_erd_generation.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/unit/test_erd_generic.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/unit/test_erd_imports.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/unit/test_folder_workflows.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/unit/test_git_commit_workflow.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/unit/test_health_cmd.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/unit/test_import_cmd.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/unit/test_init_mv_cmd.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/unit/test_ipfs_cmd.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/unit/test_ipfs_retry.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/unit/test_language_suffix.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/unit/test_lib_auth.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/unit/test_lib_files.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/unit/test_lib_utils.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/unit/test_logger.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/unit/test_notebook_command_loader.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/unit/test_notebook_executor.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/unit/test_optional_deps.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/unit/test_paths.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/unit/test_pdf_compress.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/unit/test_regression.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/unit/test_scheduler.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/unit/test_scheduler_cron_parser.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/unit/test_scheduler_job.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/unit/test_scheduler_models.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/unit/test_scheduler_monitor.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/unit/test_scheduler_persistence.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/unit/test_scheduler_validation.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/unit/test_script_loader_options.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/unit/test_security_command_injection.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/unit/test_self_update.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/unit/test_service_config.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/unit/test_service_health.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/unit/test_service_manager.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/unit/test_service_state.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/unit/test_services_cmd.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/unit/test_shell_exceptions.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/unit/test_shell_functions.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/unit/test_shell_security.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/unit/test_store_cmd.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/unit/test_sync_cmd.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/unit/test_toml_utils.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/unit/test_ui_rich.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/unit/test_uv_compat.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/unit/test_workflow_file_completion.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/unit/test_workflow_models.py +0 -0
- {mcli_framework-8.0.42 → mcli_framework-8.0.44}/tests/unit/workflow/test_notebook.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mcli-framework
|
|
3
|
-
Version: 8.0.
|
|
3
|
+
Version: 8.0.44
|
|
4
4
|
Summary: Portable workflow framework - transform any script into a versioned, schedulable command. Store in ~/.mcli/workflows/, version with lockfile, run as daemon or cron job.
|
|
5
5
|
Author-email: Luis Fernandez de la Vara <luis@lefv.io>
|
|
6
6
|
Maintainer-email: Luis Fernandez de la Vara <luis@lefv.io>
|
|
@@ -64,102 +64,6 @@ Requires-Dist: aiosqlite>=0.20.0
|
|
|
64
64
|
Requires-Dist: redis>=5.0.0
|
|
65
65
|
Requires-Dist: aiohttp-sse-client>=0.2.1
|
|
66
66
|
Requires-Dist: aiomqtt>=2.0.0
|
|
67
|
-
Requires-Dist: opencv-python>=4.11.0.86
|
|
68
|
-
Requires-Dist: pillow>=11.2.1
|
|
69
|
-
Requires-Dist: numpy<2.0.0,>=1.24.0
|
|
70
|
-
Requires-Dist: scikit-image>=0.24.0
|
|
71
|
-
Requires-Dist: scipy>=1.10.0
|
|
72
|
-
Requires-Dist: pypdf2>=3.0.1
|
|
73
|
-
Requires-Dist: pymupdf>=1.26.3
|
|
74
|
-
Requires-Dist: pandas>=2.3.1
|
|
75
|
-
Requires-Dist: openpyxl>=3.1.5
|
|
76
|
-
Requires-Dist: matplotlib>=3.9.4
|
|
77
|
-
Requires-Dist: pydot>=4.0.1
|
|
78
|
-
Requires-Dist: graphviz>=0.21
|
|
79
|
-
Requires-Dist: seaborn>=0.13.0
|
|
80
|
-
Requires-Dist: plotly>=5.17.0
|
|
81
|
-
Requires-Dist: supabase>=2.8.1
|
|
82
|
-
Requires-Dist: sqlalchemy>=2.0.0
|
|
83
|
-
Requires-Dist: alembic>=1.12.0
|
|
84
|
-
Requires-Dist: psycopg2-binary>=2.9.7
|
|
85
|
-
Requires-Dist: asyncpg>=0.29.0
|
|
86
|
-
Requires-Dist: torch>=2.0.0
|
|
87
|
-
Requires-Dist: torchvision>=0.15.0
|
|
88
|
-
Requires-Dist: pytorch-lightning>=2.0.0
|
|
89
|
-
Requires-Dist: scikit-learn<2.0.0,>=1.3.0
|
|
90
|
-
Requires-Dist: mlflow>=2.9.0
|
|
91
|
-
Requires-Dist: dvc>=3.0.0
|
|
92
|
-
Requires-Dist: polars>=0.19.0
|
|
93
|
-
Requires-Dist: pyarrow>=14.0.0
|
|
94
|
-
Requires-Dist: yfinance>=0.2.18
|
|
95
|
-
Requires-Dist: alpha-vantage>=2.3.1
|
|
96
|
-
Requires-Dist: alpaca-py==0.43.2
|
|
97
|
-
Requires-Dist: cvxpy>=1.4.0
|
|
98
|
-
Requires-Dist: python-jose[cryptography]>=3.3.0
|
|
99
|
-
Requires-Dist: passlib[bcrypt]>=1.7.4
|
|
100
|
-
Requires-Dist: pydantic-settings>=2.1.0
|
|
101
|
-
Requires-Dist: dynaconf>=3.2.0
|
|
102
|
-
Requires-Dist: pandera>=0.17.0
|
|
103
|
-
Requires-Dist: pendulum>=2.1.2
|
|
104
|
-
Requires-Dist: optuna>=3.4.0
|
|
105
|
-
Requires-Dist: PyPortfolioOpt>=1.5.5
|
|
106
|
-
Requires-Dist: jupyter>=1.0.0
|
|
107
|
-
Requires-Dist: jupyterlab>=4.0.0
|
|
108
|
-
Requires-Dist: ipykernel>=6.27.0
|
|
109
|
-
Requires-Dist: prometheus-client>=0.19.0
|
|
110
|
-
Requires-Dist: structlog>=23.2.0
|
|
111
|
-
Requires-Dist: gunicorn>=21.2.0
|
|
112
|
-
Requires-Dist: newrelic>=9.2.0
|
|
113
|
-
Requires-Dist: datadog>=0.49.0
|
|
114
|
-
Requires-Dist: orjson>=3.9.0
|
|
115
|
-
Requires-Dist: kafka-python>=2.0.2
|
|
116
|
-
Requires-Dist: streamlit>=1.50.0
|
|
117
|
-
Requires-Dist: altair<5.0.0,>=4.2.1
|
|
118
|
-
Requires-Dist: streamlit-autorefresh>=1.0.1
|
|
119
|
-
Requires-Dist: typer>=0.9.0
|
|
120
|
-
Requires-Dist: flask<3.0.0,>=2.3.0
|
|
121
|
-
Provides-Extra: gpu
|
|
122
|
-
Requires-Dist: cupy-cuda12x>=12.3.0; extra == "gpu"
|
|
123
|
-
Requires-Dist: nvidia-ml-py>=12.535.0; extra == "gpu"
|
|
124
|
-
Provides-Extra: ml-plugin
|
|
125
|
-
Requires-Dist: torch>=2.0.0; extra == "ml-plugin"
|
|
126
|
-
Requires-Dist: torchvision>=0.15.0; extra == "ml-plugin"
|
|
127
|
-
Requires-Dist: pytorch-lightning>=2.0.0; extra == "ml-plugin"
|
|
128
|
-
Requires-Dist: scikit-learn<2.0.0,>=1.3.0; extra == "ml-plugin"
|
|
129
|
-
Requires-Dist: mlflow>=2.9.0; extra == "ml-plugin"
|
|
130
|
-
Requires-Dist: dvc>=3.0.0; extra == "ml-plugin"
|
|
131
|
-
Requires-Dist: optuna>=3.4.0; extra == "ml-plugin"
|
|
132
|
-
Requires-Dist: streamlit>=1.50.0; extra == "ml-plugin"
|
|
133
|
-
Requires-Dist: altair<5.0.0,>=4.2.1; extra == "ml-plugin"
|
|
134
|
-
Requires-Dist: streamlit-autorefresh>=1.0.1; extra == "ml-plugin"
|
|
135
|
-
Requires-Dist: pandas>=2.3.1; extra == "ml-plugin"
|
|
136
|
-
Requires-Dist: numpy<2.0.0,>=1.24.0; extra == "ml-plugin"
|
|
137
|
-
Requires-Dist: polars>=0.19.0; extra == "ml-plugin"
|
|
138
|
-
Requires-Dist: pyarrow>=14.0.0; extra == "ml-plugin"
|
|
139
|
-
Provides-Extra: video-plugin
|
|
140
|
-
Requires-Dist: opencv-python>=4.11.0.86; extra == "video-plugin"
|
|
141
|
-
Requires-Dist: pillow>=11.2.1; extra == "video-plugin"
|
|
142
|
-
Requires-Dist: numpy<2.0.0,>=1.24.0; extra == "video-plugin"
|
|
143
|
-
Requires-Dist: scikit-image>=0.24.0; extra == "video-plugin"
|
|
144
|
-
Requires-Dist: scipy>=1.10.0; extra == "video-plugin"
|
|
145
|
-
Provides-Extra: trading-plugin
|
|
146
|
-
Requires-Dist: yfinance>=0.2.18; extra == "trading-plugin"
|
|
147
|
-
Requires-Dist: alpha-vantage>=2.3.1; extra == "trading-plugin"
|
|
148
|
-
Requires-Dist: alpaca-py==0.43.2; extra == "trading-plugin"
|
|
149
|
-
Requires-Dist: cvxpy>=1.4.0; extra == "trading-plugin"
|
|
150
|
-
Requires-Dist: PyPortfolioOpt>=1.5.5; extra == "trading-plugin"
|
|
151
|
-
Requires-Dist: pandas>=2.3.1; extra == "trading-plugin"
|
|
152
|
-
Requires-Dist: numpy<2.0.0,>=1.24.0; extra == "trading-plugin"
|
|
153
|
-
Provides-Extra: async-extras
|
|
154
|
-
Provides-Extra: video
|
|
155
|
-
Provides-Extra: documents
|
|
156
|
-
Provides-Extra: viz
|
|
157
|
-
Provides-Extra: database
|
|
158
|
-
Provides-Extra: ml
|
|
159
|
-
Provides-Extra: monitoring
|
|
160
|
-
Provides-Extra: streaming
|
|
161
|
-
Provides-Extra: dashboard
|
|
162
|
-
Provides-Extra: web
|
|
163
67
|
Provides-Extra: dev
|
|
164
68
|
Requires-Dist: pytest>=8.4.1; extra == "dev"
|
|
165
69
|
Requires-Dist: pytest-cov<5.0.0,>=4.1.0; extra == "dev"
|
|
@@ -182,7 +86,6 @@ Requires-Dist: pre-commit>=4.5.1; extra == "dev"
|
|
|
182
86
|
Requires-Dist: build>=1.2.2.post1; extra == "dev"
|
|
183
87
|
Requires-Dist: maturin>=1.9.3; extra == "dev"
|
|
184
88
|
Requires-Dist: twine>=4.0.0; extra == "dev"
|
|
185
|
-
Provides-Extra: all
|
|
186
89
|
Dynamic: license-file
|
|
187
90
|
|
|
188
91
|
# MCLI - Universal Script Runner & Workflow Framework
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "mcli-framework"
|
|
3
|
-
version = "8.0.
|
|
3
|
+
version = "8.0.44"
|
|
4
4
|
description = "Portable workflow framework - transform any script into a versioned, schedulable command. Store in ~/.mcli/workflows/, version with lockfile, run as daemon or cron job."
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.10"
|
|
@@ -69,69 +69,6 @@ dependencies = [
|
|
|
69
69
|
"redis>=5.0.0",
|
|
70
70
|
"aiohttp-sse-client>=0.2.1",
|
|
71
71
|
"aiomqtt>=2.0.0",
|
|
72
|
-
# Video processing
|
|
73
|
-
"opencv-python>=4.11.0.86",
|
|
74
|
-
"pillow>=11.2.1",
|
|
75
|
-
"numpy>=1.24.0,<2.0.0",
|
|
76
|
-
"scikit-image>=0.24.0",
|
|
77
|
-
"scipy>=1.10.0",
|
|
78
|
-
# Document processing
|
|
79
|
-
"pypdf2>=3.0.1",
|
|
80
|
-
"pymupdf>=1.26.3",
|
|
81
|
-
"pandas>=2.3.1",
|
|
82
|
-
"openpyxl>=3.1.5",
|
|
83
|
-
# Visualization
|
|
84
|
-
"matplotlib>=3.9.4",
|
|
85
|
-
"pydot>=4.0.1",
|
|
86
|
-
"graphviz>=0.21",
|
|
87
|
-
"seaborn>=0.13.0",
|
|
88
|
-
"plotly>=5.17.0",
|
|
89
|
-
# Database support
|
|
90
|
-
"supabase>=2.8.1",
|
|
91
|
-
"sqlalchemy>=2.0.0",
|
|
92
|
-
"alembic>=1.12.0",
|
|
93
|
-
"psycopg2-binary>=2.9.7",
|
|
94
|
-
"asyncpg>=0.29.0",
|
|
95
|
-
# ML/Trading features
|
|
96
|
-
"torch>=2.0.0",
|
|
97
|
-
"torchvision>=0.15.0",
|
|
98
|
-
"pytorch-lightning>=2.0.0",
|
|
99
|
-
"scikit-learn>=1.3.0,<2.0.0",
|
|
100
|
-
"mlflow>=2.9.0",
|
|
101
|
-
"dvc>=3.0.0",
|
|
102
|
-
"polars>=0.19.0",
|
|
103
|
-
"pyarrow>=14.0.0",
|
|
104
|
-
"yfinance>=0.2.18",
|
|
105
|
-
"alpha-vantage>=2.3.1",
|
|
106
|
-
"alpaca-py==0.43.2",
|
|
107
|
-
"cvxpy>=1.4.0",
|
|
108
|
-
"python-jose[cryptography]>=3.3.0",
|
|
109
|
-
"passlib[bcrypt]>=1.7.4",
|
|
110
|
-
"pydantic-settings>=2.1.0",
|
|
111
|
-
"dynaconf>=3.2.0",
|
|
112
|
-
"pandera>=0.17.0",
|
|
113
|
-
"pendulum>=2.1.2",
|
|
114
|
-
"optuna>=3.4.0",
|
|
115
|
-
"PyPortfolioOpt>=1.5.5",
|
|
116
|
-
"jupyter>=1.0.0",
|
|
117
|
-
"jupyterlab>=4.0.0",
|
|
118
|
-
"ipykernel>=6.27.0",
|
|
119
|
-
# Production monitoring
|
|
120
|
-
"prometheus-client>=0.19.0",
|
|
121
|
-
"structlog>=23.2.0",
|
|
122
|
-
"gunicorn>=21.2.0",
|
|
123
|
-
"newrelic>=9.2.0",
|
|
124
|
-
"datadog>=0.49.0",
|
|
125
|
-
"orjson>=3.9.0",
|
|
126
|
-
# Streaming/messaging
|
|
127
|
-
"kafka-python>=2.0.2",
|
|
128
|
-
# Dashboard
|
|
129
|
-
"streamlit>=1.50.0",
|
|
130
|
-
"altair>=4.2.1,<5.0.0",
|
|
131
|
-
"streamlit-autorefresh>=1.0.1",
|
|
132
|
-
"typer>=0.9.0",
|
|
133
|
-
# Web framework
|
|
134
|
-
"flask>=2.3.0,<3.0.0",
|
|
135
72
|
]
|
|
136
73
|
|
|
137
74
|
[project.urls]
|
|
@@ -143,68 +80,6 @@ dependencies = [
|
|
|
143
80
|
"Source" = "https://github.com/gwicho38/mcli"
|
|
144
81
|
|
|
145
82
|
[project.optional-dependencies]
|
|
146
|
-
# GPU support (optional - system specific)
|
|
147
|
-
gpu = [
|
|
148
|
-
"cupy-cuda12x>=12.3.0",
|
|
149
|
-
"nvidia-ml-py>=12.535.0",
|
|
150
|
-
]
|
|
151
|
-
|
|
152
|
-
# Plugin-style optional dependencies (for migrated features)
|
|
153
|
-
# These will be required ONLY if using the corresponding workflows from mcli-commands repo
|
|
154
|
-
|
|
155
|
-
ml-plugin = [
|
|
156
|
-
# ML/Training dependencies
|
|
157
|
-
"torch>=2.0.0",
|
|
158
|
-
"torchvision>=0.15.0",
|
|
159
|
-
"pytorch-lightning>=2.0.0",
|
|
160
|
-
"scikit-learn>=1.3.0,<2.0.0",
|
|
161
|
-
"mlflow>=2.9.0",
|
|
162
|
-
"dvc>=3.0.0",
|
|
163
|
-
"optuna>=3.4.0",
|
|
164
|
-
# Dashboard dependencies
|
|
165
|
-
"streamlit>=1.50.0",
|
|
166
|
-
"altair>=4.2.1,<5.0.0",
|
|
167
|
-
"streamlit-autorefresh>=1.0.1",
|
|
168
|
-
# Data science
|
|
169
|
-
"pandas>=2.3.1",
|
|
170
|
-
"numpy>=1.24.0,<2.0.0",
|
|
171
|
-
"polars>=0.19.0",
|
|
172
|
-
"pyarrow>=14.0.0",
|
|
173
|
-
]
|
|
174
|
-
|
|
175
|
-
video-plugin = [
|
|
176
|
-
# Video processing dependencies
|
|
177
|
-
"opencv-python>=4.11.0.86",
|
|
178
|
-
"pillow>=11.2.1",
|
|
179
|
-
"numpy>=1.24.0,<2.0.0",
|
|
180
|
-
"scikit-image>=0.24.0",
|
|
181
|
-
"scipy>=1.10.0",
|
|
182
|
-
]
|
|
183
|
-
|
|
184
|
-
trading-plugin = [
|
|
185
|
-
# Trading/Finance dependencies
|
|
186
|
-
"yfinance>=0.2.18",
|
|
187
|
-
"alpha-vantage>=2.3.1",
|
|
188
|
-
"alpaca-py==0.43.2",
|
|
189
|
-
"cvxpy>=1.4.0",
|
|
190
|
-
"PyPortfolioOpt>=1.5.5",
|
|
191
|
-
"pandas>=2.3.1",
|
|
192
|
-
"numpy>=1.24.0,<2.0.0",
|
|
193
|
-
]
|
|
194
|
-
|
|
195
|
-
# Legacy extras for backward compatibility (all features now included by default)
|
|
196
|
-
# TODO: Remove in v8.0.0
|
|
197
|
-
async-extras = []
|
|
198
|
-
video = []
|
|
199
|
-
documents = []
|
|
200
|
-
viz = []
|
|
201
|
-
database = []
|
|
202
|
-
ml = []
|
|
203
|
-
monitoring = []
|
|
204
|
-
streaming = []
|
|
205
|
-
dashboard = []
|
|
206
|
-
web = []
|
|
207
|
-
|
|
208
83
|
# Development tools
|
|
209
84
|
dev = [
|
|
210
85
|
# Testing framework
|
|
@@ -235,9 +110,6 @@ dev = [
|
|
|
235
110
|
"twine>=4.0.0", # Package upload
|
|
236
111
|
]
|
|
237
112
|
|
|
238
|
-
# All optional features (all features now included by default)
|
|
239
|
-
all = []
|
|
240
|
-
|
|
241
113
|
[tool.black]
|
|
242
114
|
line-length = 100
|
|
243
115
|
include = '\.pyi?$'
|
|
@@ -263,11 +135,9 @@ known_first_party = ["mcli"]
|
|
|
263
135
|
known_third_party = [
|
|
264
136
|
"click", "rich", "requests", "tomli", "openai", "anthropic",
|
|
265
137
|
"fastapi", "uvicorn", "uvloop", "aiosqlite", "redis", "watchdog",
|
|
266
|
-
"tqdm", "humanize", "psutil", "ipython", "inquirerpy",
|
|
267
|
-
"gitpython", "maturin", "
|
|
268
|
-
"
|
|
269
|
-
"fuzzywuzzy", "pandas", "openpyxl", "ollama", "pytest", "supabase",
|
|
270
|
-
"httpx", "aiohttp", "beautifulsoup4", "python-dotenv", "matplotlib"
|
|
138
|
+
"tqdm", "humanize", "psutil", "ipython", "inquirerpy",
|
|
139
|
+
"gitpython", "maturin", "fuzzywuzzy", "ollama", "pytest",
|
|
140
|
+
"httpx", "aiohttp", "beautifulsoup4", "python-dotenv"
|
|
271
141
|
]
|
|
272
142
|
sections = ["FUTURE", "STDLIB", "THIRDPARTY", "FIRSTPARTY", "LOCALFOLDER"]
|
|
273
143
|
force_grid_wrap = 0
|
|
@@ -374,19 +244,6 @@ module = [
|
|
|
374
244
|
warn_return_any = false
|
|
375
245
|
ignore_errors = false
|
|
376
246
|
|
|
377
|
-
# Ignore missing imports for optional dependencies
|
|
378
|
-
[[tool.mypy.overrides]]
|
|
379
|
-
module = [
|
|
380
|
-
"ollama.*",
|
|
381
|
-
"streamlit.*",
|
|
382
|
-
"torch.*",
|
|
383
|
-
"transformers.*",
|
|
384
|
-
"plotly.*",
|
|
385
|
-
"supabase.*",
|
|
386
|
-
]
|
|
387
|
-
warn_return_any = false
|
|
388
|
-
ignore_missing_imports = true
|
|
389
|
-
|
|
390
247
|
# Core modules - enable stricter type checking
|
|
391
248
|
[[tool.mypy.overrides]]
|
|
392
249
|
module = [
|
|
@@ -397,12 +254,6 @@ disallow_untyped_defs = true
|
|
|
397
254
|
check_untyped_defs = true
|
|
398
255
|
strict_optional = true
|
|
399
256
|
|
|
400
|
-
# Skip mlflow entirely due to Python version syntax issues
|
|
401
|
-
[[tool.mypy.overrides]]
|
|
402
|
-
module = ["mlflow", "mlflow.*"]
|
|
403
|
-
ignore_errors = true
|
|
404
|
-
follow_imports = "skip"
|
|
405
|
-
|
|
406
257
|
[build-system]
|
|
407
258
|
requires = ["setuptools>=65.0.0", "wheel>=0.40.0"]
|
|
408
259
|
build-backend = "setuptools.build_meta"
|
|
@@ -512,11 +363,6 @@ filterwarnings = [
|
|
|
512
363
|
|
|
513
364
|
[project.scripts]
|
|
514
365
|
mcli = "mcli.app.main:main"
|
|
515
|
-
mcli-train = "mcli.ml.training.train:main"
|
|
516
|
-
mcli-serve = "mcli.ml.serving.serve:main"
|
|
517
|
-
mcli-backtest = "mcli.ml.backtesting.run:main"
|
|
518
|
-
mcli-optimize = "mcli.ml.optimization.optimize:main"
|
|
519
|
-
mcli-dashboard = "mcli.ml.dashboard:main"
|
|
520
366
|
|
|
521
367
|
[tool.bandit]
|
|
522
368
|
# Skip these test IDs - acceptable in this CLI tool context
|
|
@@ -12,8 +12,9 @@ Example:
|
|
|
12
12
|
import json
|
|
13
13
|
import os
|
|
14
14
|
import re
|
|
15
|
+
import shutil
|
|
15
16
|
import stat
|
|
16
|
-
import subprocess
|
|
17
|
+
import subprocess # nosec B404
|
|
17
18
|
import sys
|
|
18
19
|
import tempfile
|
|
19
20
|
from pathlib import Path
|
|
@@ -269,7 +270,7 @@ def restructure_file_as_command(
|
|
|
269
270
|
click.ClickException: If file cannot be read
|
|
270
271
|
"""
|
|
271
272
|
try:
|
|
272
|
-
with open(file_path,
|
|
273
|
+
with open(file_path, encoding="utf-8", errors="ignore") as f:
|
|
273
274
|
content = f.read()
|
|
274
275
|
except OSError as e:
|
|
275
276
|
logger.error(f"Failed to read file {file_path}: {e}")
|
|
@@ -329,9 +330,12 @@ def _get_python_template(t: ScriptTemplate) -> str:
|
|
|
329
330
|
import click
|
|
330
331
|
from typing import Optional, List
|
|
331
332
|
from pathlib import Path
|
|
332
|
-
from mcli.lib.logger.logger import get_logger
|
|
333
333
|
|
|
334
|
-
|
|
334
|
+
try:
|
|
335
|
+
from mcli.lib.logger.logger import get_logger
|
|
336
|
+
logger = get_logger()
|
|
337
|
+
except ImportError:
|
|
338
|
+
logger = None
|
|
335
339
|
|
|
336
340
|
|
|
337
341
|
@click.group(name="{t.name}")
|
|
@@ -346,8 +350,13 @@ def app():
|
|
|
346
350
|
@click.argument("name", default="World")
|
|
347
351
|
def hello(name: str):
|
|
348
352
|
"""Example subcommand."""
|
|
349
|
-
logger
|
|
353
|
+
if logger:
|
|
354
|
+
logger.info(f"Hello, {{name}}!")
|
|
350
355
|
click.echo(f"Hello, {{name}}!")
|
|
356
|
+
|
|
357
|
+
|
|
358
|
+
if __name__ == "__main__":
|
|
359
|
+
app()
|
|
351
360
|
'''
|
|
352
361
|
else:
|
|
353
362
|
return f'''#!/usr/bin/env python3
|
|
@@ -361,9 +370,12 @@ def hello(name: str):
|
|
|
361
370
|
import click
|
|
362
371
|
from typing import Optional, List
|
|
363
372
|
from pathlib import Path
|
|
364
|
-
from mcli.lib.logger.logger import get_logger
|
|
365
373
|
|
|
366
|
-
|
|
374
|
+
try:
|
|
375
|
+
from mcli.lib.logger.logger import get_logger
|
|
376
|
+
logger = get_logger()
|
|
377
|
+
except ImportError:
|
|
378
|
+
logger = None
|
|
367
379
|
|
|
368
380
|
|
|
369
381
|
@click.command(name="{t.name}")
|
|
@@ -372,8 +384,13 @@ def {t.name}_command(name: str):
|
|
|
372
384
|
"""
|
|
373
385
|
{t.description}
|
|
374
386
|
"""
|
|
375
|
-
logger
|
|
387
|
+
if logger:
|
|
388
|
+
logger.info(f"Hello, {{name}}! This is the {t.name} command.")
|
|
376
389
|
click.echo(f"Hello, {{name}}! This is the {t.name} command.")
|
|
390
|
+
|
|
391
|
+
|
|
392
|
+
if __name__ == "__main__":
|
|
393
|
+
{t.name}_command()
|
|
377
394
|
'''
|
|
378
395
|
|
|
379
396
|
|
|
@@ -505,7 +522,7 @@ if (args.length > 0) {{
|
|
|
505
522
|
|
|
506
523
|
def _get_ipynb_template(t: ScriptTemplate) -> str:
|
|
507
524
|
"""Generate Jupyter notebook template."""
|
|
508
|
-
notebook:
|
|
525
|
+
notebook: dict[str, Any] = {
|
|
509
526
|
"cells": [
|
|
510
527
|
{
|
|
511
528
|
"cell_type": "markdown",
|
|
@@ -609,13 +626,13 @@ def open_editor_for_script(
|
|
|
609
626
|
click.echo("Write your code and save the file to continue.")
|
|
610
627
|
click.echo("Press Ctrl+C to cancel.")
|
|
611
628
|
|
|
612
|
-
result = subprocess.run([editor, temp_file_path], check=False)
|
|
629
|
+
result = subprocess.run([editor, temp_file_path], check=False) # nosec B603
|
|
613
630
|
|
|
614
631
|
if result.returncode != 0:
|
|
615
632
|
click.echo("Editor exited with error. Command creation cancelled.")
|
|
616
633
|
return None
|
|
617
634
|
|
|
618
|
-
with open(temp_file_path
|
|
635
|
+
with open(temp_file_path) as f:
|
|
619
636
|
edited_code = f.read()
|
|
620
637
|
|
|
621
638
|
if not edited_code.strip():
|
|
@@ -642,8 +659,7 @@ def _find_editor() -> Optional[str]:
|
|
|
642
659
|
return editor
|
|
643
660
|
|
|
644
661
|
for common_editor in ["vim", "nano", "code", "subl", "atom", "emacs"]:
|
|
645
|
-
|
|
646
|
-
if result.returncode == 0:
|
|
662
|
+
if shutil.which(common_editor):
|
|
647
663
|
return common_editor
|
|
648
664
|
|
|
649
665
|
return None
|
|
@@ -783,7 +799,7 @@ def new(
|
|
|
783
799
|
description=description,
|
|
784
800
|
cmd_version=cmd_version,
|
|
785
801
|
template=template,
|
|
786
|
-
shell=shell,
|
|
802
|
+
shell=shell, # nosec B604
|
|
787
803
|
is_global=is_global,
|
|
788
804
|
source_file=source_file,
|
|
789
805
|
)
|
|
@@ -892,7 +908,7 @@ def _execute_new_command(
|
|
|
892
908
|
cmd_version=cmd_version,
|
|
893
909
|
language=language,
|
|
894
910
|
command_type=command_type,
|
|
895
|
-
shell=shell,
|
|
911
|
+
shell=shell, # nosec B604
|
|
896
912
|
template=template,
|
|
897
913
|
script_path=script_path,
|
|
898
914
|
)
|
|
@@ -913,7 +929,7 @@ def _execute_new_command(
|
|
|
913
929
|
_display_success_message(
|
|
914
930
|
command_name=command_name,
|
|
915
931
|
language=language,
|
|
916
|
-
shell=shell,
|
|
932
|
+
shell=shell, # nosec B604
|
|
917
933
|
saved_path=saved_path,
|
|
918
934
|
command_group=command_group,
|
|
919
935
|
is_global=is_global,
|
|
@@ -948,7 +964,7 @@ def _generate_or_edit_code(
|
|
|
948
964
|
version=cmd_version,
|
|
949
965
|
language=language,
|
|
950
966
|
command_type=command_type,
|
|
951
|
-
shell=shell,
|
|
967
|
+
shell=shell, # nosec B604
|
|
952
968
|
)
|
|
953
969
|
|
|
954
970
|
try:
|
|
@@ -1095,19 +1095,25 @@ class VenvMessages:
|
|
|
1095
1095
|
|
|
1096
1096
|
# Info
|
|
1097
1097
|
DETECTING_VENV = "Detecting Python environment..."
|
|
1098
|
+
USING_OVERRIDE_VENV = "Using override venv: {path}"
|
|
1098
1099
|
USING_LOCAL_VENV = "Using local venv: {path}"
|
|
1099
|
-
USING_GLOBAL_VENV = "Using global
|
|
1100
|
+
USING_GLOBAL_VENV = "Using global venv: {path}"
|
|
1100
1101
|
USING_SYSTEM_PYTHON = "Using system Python: {path}"
|
|
1102
|
+
USING_SYSTEM_PYTHON_ENV_SET = "Using system Python (MCLI_USE_SYSTEM_PYTHON set)"
|
|
1101
1103
|
CREATING_GLOBAL_VENV = "Creating global MCLI venv at {path}..."
|
|
1102
1104
|
GLOBAL_VENV_CREATED = "Created global MCLI venv at {path}"
|
|
1103
1105
|
|
|
1104
1106
|
# Dependency messages
|
|
1107
|
+
NO_DEPS_SPECIFIED = "No dependencies specified"
|
|
1105
1108
|
CHECKING_DEPS = "Checking dependencies for {script}..."
|
|
1106
1109
|
DEPS_SATISFIED = "All dependencies satisfied"
|
|
1107
1110
|
MISSING_DEPS = "Missing dependencies: {packages}"
|
|
1108
1111
|
INSTALLING_DEPS = "Installing dependencies: {packages}"
|
|
1109
1112
|
DEPS_INSTALLED = "Dependencies installed successfully"
|
|
1110
1113
|
|
|
1114
|
+
# Non-interactive
|
|
1115
|
+
NON_INTERACTIVE_AUTO_INSTALL = "Non-interactive mode detected, auto-installing dependencies"
|
|
1116
|
+
|
|
1111
1117
|
# Prompts
|
|
1112
1118
|
PROMPT_INSTALL_DEPS = "Install missing dependencies to {venv}? [{packages}]"
|
|
1113
1119
|
|
|
@@ -122,7 +122,7 @@ class DependencyChecker:
|
|
|
122
122
|
"""
|
|
123
123
|
try:
|
|
124
124
|
result = subprocess.run(
|
|
125
|
-
[
|
|
125
|
+
["uv", "pip", "list", "--format=freeze", "--python", str(self.python_executable)],
|
|
126
126
|
capture_output=True,
|
|
127
127
|
text=True,
|
|
128
128
|
timeout=30,
|
|
@@ -5,7 +5,7 @@ including environment detection, dependency checking, and script execution.
|
|
|
5
5
|
"""
|
|
6
6
|
|
|
7
7
|
import os
|
|
8
|
-
import subprocess
|
|
8
|
+
import subprocess # nosec B404
|
|
9
9
|
import sys
|
|
10
10
|
from pathlib import Path
|
|
11
11
|
from typing import Dict, List, Optional, Tuple
|
|
@@ -42,7 +42,7 @@ class PyEnvManager:
|
|
|
42
42
|
self._resolved_venv: Optional[Path] = None
|
|
43
43
|
self._resolved_source: Optional[str] = None
|
|
44
44
|
|
|
45
|
-
def resolve_environment(self) ->
|
|
45
|
+
def resolve_environment(self) -> tuple[Optional[Path], str]:
|
|
46
46
|
"""Resolve which virtual environment to use.
|
|
47
47
|
|
|
48
48
|
Resolution order:
|
|
@@ -65,14 +65,14 @@ class PyEnvManager:
|
|
|
65
65
|
if venv_path.is_dir():
|
|
66
66
|
self._resolved_venv = venv_path
|
|
67
67
|
self._resolved_source = "override"
|
|
68
|
-
logger.debug(
|
|
68
|
+
logger.debug(VenvMessages.USING_OVERRIDE_VENV.format(path=venv_path))
|
|
69
69
|
return venv_path, "override"
|
|
70
70
|
|
|
71
71
|
# Check if user wants system Python
|
|
72
72
|
if os.getenv(EnvVars.MCLI_USE_SYSTEM_PYTHON, "").lower() in ("true", "1", "yes"):
|
|
73
73
|
self._resolved_venv = None
|
|
74
74
|
self._resolved_source = "system"
|
|
75
|
-
logger.debug(
|
|
75
|
+
logger.debug(VenvMessages.USING_SYSTEM_PYTHON_ENV_SET)
|
|
76
76
|
return None, "system"
|
|
77
77
|
|
|
78
78
|
# Try to find local venv
|
|
@@ -80,14 +80,14 @@ class PyEnvManager:
|
|
|
80
80
|
if local_venv:
|
|
81
81
|
self._resolved_venv = local_venv
|
|
82
82
|
self._resolved_source = "local"
|
|
83
|
-
logger.debug(
|
|
83
|
+
logger.debug(VenvMessages.USING_LOCAL_VENV.format(path=local_venv))
|
|
84
84
|
return local_venv, "local"
|
|
85
85
|
|
|
86
86
|
# Fall back to global venv
|
|
87
87
|
global_venv = self.venv_manager.get_global_venv_path()
|
|
88
88
|
self._resolved_venv = global_venv
|
|
89
89
|
self._resolved_source = "global"
|
|
90
|
-
logger.debug(
|
|
90
|
+
logger.debug(VenvMessages.USING_GLOBAL_VENV.format(path=global_venv))
|
|
91
91
|
return global_venv, "global"
|
|
92
92
|
|
|
93
93
|
def get_python_executable(self) -> Path:
|
|
@@ -105,7 +105,7 @@ class PyEnvManager:
|
|
|
105
105
|
|
|
106
106
|
def check_and_install_deps(
|
|
107
107
|
self,
|
|
108
|
-
requires:
|
|
108
|
+
requires: list[str],
|
|
109
109
|
script_name: str,
|
|
110
110
|
auto_install: bool = False,
|
|
111
111
|
) -> bool:
|
|
@@ -120,7 +120,7 @@ class PyEnvManager:
|
|
|
120
120
|
True if all dependencies are satisfied or installed.
|
|
121
121
|
"""
|
|
122
122
|
if not requires:
|
|
123
|
-
logger.debug(
|
|
123
|
+
logger.debug(VenvMessages.NO_DEPS_SPECIFIED)
|
|
124
124
|
return True
|
|
125
125
|
|
|
126
126
|
venv_path, source = self.resolve_environment()
|
|
@@ -155,6 +155,10 @@ class PyEnvManager:
|
|
|
155
155
|
|
|
156
156
|
if auto_install or env_auto_install:
|
|
157
157
|
should_install = True
|
|
158
|
+
elif not sys.stdin.isatty():
|
|
159
|
+
# Non-interactive context (piped input, CI, subprocess) — auto-install
|
|
160
|
+
logger.info(VenvMessages.NON_INTERACTIVE_AUTO_INSTALL)
|
|
161
|
+
should_install = True
|
|
158
162
|
else:
|
|
159
163
|
# Prompt user
|
|
160
164
|
venv_display = str(venv_path) if venv_path else "system"
|
|
@@ -177,8 +181,8 @@ class PyEnvManager:
|
|
|
177
181
|
def execute_in_venv(
|
|
178
182
|
self,
|
|
179
183
|
script_path: Path,
|
|
180
|
-
args:
|
|
181
|
-
env: Optional[
|
|
184
|
+
args: list[str],
|
|
185
|
+
env: Optional[dict[str, str]] = None,
|
|
182
186
|
) -> subprocess.CompletedProcess:
|
|
183
187
|
"""Execute a Python script in the resolved virtual environment.
|
|
184
188
|
|
|
@@ -210,14 +214,17 @@ class PyEnvManager:
|
|
|
210
214
|
|
|
211
215
|
if sys.stdout.isatty():
|
|
212
216
|
# Interactive: inherit stdio so TUI frameworks work
|
|
213
|
-
return subprocess.run(cmd, env=exec_env)
|
|
217
|
+
return subprocess.run(cmd, env=exec_env) # nosec B603
|
|
214
218
|
else:
|
|
215
219
|
# Non-interactive: capture output for piping
|
|
216
|
-
return subprocess.run(
|
|
217
|
-
cmd,
|
|
220
|
+
return subprocess.run( # nosec B603
|
|
221
|
+
cmd,
|
|
222
|
+
env=exec_env,
|
|
223
|
+
capture_output=True,
|
|
224
|
+
text=True,
|
|
218
225
|
)
|
|
219
226
|
|
|
220
|
-
def get_status(self) ->
|
|
227
|
+
def get_status(self) -> dict[str, str]:
|
|
221
228
|
"""Get the current environment status for display.
|
|
222
229
|
|
|
223
230
|
Returns:
|