mcli-framework 8.0.17__tar.gz → 8.0.19__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.17 → mcli_framework-8.0.19}/PKG-INFO +1 -1
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/pyproject.toml +1 -1
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/app/main.py +15 -4
- mcli_framework-8.0.19/src/mcli/app/mv_cmd.py +143 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/constants/__init__.py +2 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/constants/messages.py +32 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/self/self_cmd.py +5 -147
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/self/workflows_cmd.py +151 -78
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli_framework.egg-info/PKG-INFO +1 -1
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli_framework.egg-info/SOURCES.txt +1 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/.github/dependabot.yml +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/.github/dependency-review-config.yml +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/.github/workflows/build.yml +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/.github/workflows/ci.yml +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/.github/workflows/codeql.yml +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/.github/workflows/docs-links.yml +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/.github/workflows/publish-self-hosted.yml +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/.github/workflows/publish.yml +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/.github/workflows/release.yml +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/.github/workflows/security.yml +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/.github/workflows/test.yml +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/LICENSE +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/MANIFEST.in +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/README.md +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/llms-full.txt +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/llms.txt +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/mcli_rust/Cargo.toml +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/mcli_rust/src/command_parser.rs +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/mcli_rust/src/file_watcher.rs +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/mcli_rust/src/lib.rs +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/mcli_rust/src/process_manager.rs +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/mcli_rust/src/tfidf.rs +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/setup.cfg +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/app/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/app/commands_cmd.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/app/completion_helpers.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/app/context_cmd.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/app/create_cmd.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/app/delete_cmd.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/app/edit_cmd.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/app/init_cmd.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/app/list_cmd.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/app/migrate_cmd.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/app/model/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/app/model/model.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/app/model_cmd.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/app/new_cmd.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/app/remove_cmd.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/app/rm_cmd.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/app/search_cmd.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/app/sync_cmd.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/app/video/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/app/video/video.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/config.toml +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/api/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/api/api.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/api/daemon_client.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/api/daemon_client_local.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/api/daemon_decorator.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/api/mcli_decorators.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/auth/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/auth/auth.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/auth/aws_manager.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/auth/azure_manager.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/auth/credential_manager.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/auth/gcp_manager.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/auth/key_manager.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/auth/mcli_manager.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/auth/token_manager.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/auth/token_util.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/config/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/config/config.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/constants/commands.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/constants/defaults.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/constants/env.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/constants/paths.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/constants/scripts.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/constants/storage.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/custom_commands.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/discovery/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/discovery/command_discovery.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/erd/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/erd/erd.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/erd/generate_graph.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/errors.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/feature_detection.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/files/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/files/files.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/folder_workflows.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/fs/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/fs/fs.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/ipfs_sync.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/lib.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/logger/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/logger/logger.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/optional_deps.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/paths.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/performance/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/performance/optimizer.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/performance/rust_bridge.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/performance/uvloop_config.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/pickles/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/pickles/pickles.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/pyenv/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/pyenv/deps.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/pyenv/manager.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/pyenv/venv.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/script_loader.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/script_sync.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/script_watcher.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/search/cached_vectorizer.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/secrets/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/secrets/commands.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/secrets/manager.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/secrets/repl.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/secrets/store.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/services/data_pipeline.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/services/lsh_client.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/services/redis_service.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/shell/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/shell/shell.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/templates/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/templates/command_templates.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/toml/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/toml/toml.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/types.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/ui/styling.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/ui/visual_effects.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/watcher/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/watcher/watcher.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/workspace_registry.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/api/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/api/app.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/api/middleware.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/api/routers/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/api/routers/admin_router.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/api/routers/auth_router.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/api/routers/backtest_router.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/api/routers/data_router.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/api/routers/model_router.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/api/routers/monitoring_router.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/api/routers/portfolio_router.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/api/routers/prediction_router.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/api/routers/trade_router.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/api/routers/websocket_router.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/api/schemas.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/auth/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/auth/auth_manager.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/auth/models.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/auth/permissions.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/backtesting/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/backtesting/backtest_engine.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/backtesting/performance_metrics.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/backtesting/run.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/cache.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/cli/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/cli/main.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/config/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/config/settings.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/configs/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/configs/dvc_config.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/configs/mlflow_config.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/configs/mlops_manager.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/dashboard/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/dashboard/app.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/dashboard/app_integrated.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/dashboard/app_supabase.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/dashboard/app_training.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/dashboard/cli.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/dashboard/common.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/dashboard/components/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/dashboard/components/charts.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/dashboard/components/metrics.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/dashboard/components/tables.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/dashboard/overview.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/dashboard/pages/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/dashboard/pages/cicd.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/dashboard/pages/debug_dependencies.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/dashboard/pages/gravity_viz.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/dashboard/pages/monte_carlo_predictions.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/dashboard/pages/predictions_enhanced.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/dashboard/pages/scrapers_and_logs.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/dashboard/pages/test_portfolio.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/dashboard/pages/trading.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/dashboard/pages/workflows.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/dashboard/streamlit_extras_utils.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/dashboard/styles.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/dashboard/utils.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/dashboard/warning_suppression.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/data_ingestion/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/data_ingestion/api_connectors.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/data_ingestion/data_pipeline.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/data_ingestion/stream_processor.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/database/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/database/migrations/env.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/database/models.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/database/session.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/experimentation/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/experimentation/ab_testing.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/features/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/features/ensemble_features.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/features/recommendation_engine.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/features/stock_features.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/features/test_feature_engineering.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/logging.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/mlops/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/mlops/data_versioning.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/mlops/experiment_tracker.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/mlops/model_serving.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/mlops/pipeline_orchestrator.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/models/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/models/base_models.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/models/ensemble_models.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/models/recommendation_models.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/models/test_models.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/monitoring/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/monitoring/drift_detection.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/monitoring/metrics.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/optimization/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/optimization/optimize.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/optimization/portfolio_optimizer.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/predictions/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/predictions/monte_carlo.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/predictions/prediction_engine.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/preprocessing/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/preprocessing/data_cleaners.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/preprocessing/feature_extractors.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/preprocessing/ml_pipeline.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/preprocessing/test_preprocessing.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/scripts/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/scripts/populate_sample_data.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/serving/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/serving/serve.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/tasks.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/tests/test_integration.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/tests/test_training_dashboard.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/trading/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/trading/alpaca_client.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/trading/migrations.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/trading/models.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/trading/paper_trading.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/trading/risk_management.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/trading/trading_service.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/training/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/training/train.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/training/train_model.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/mygroup/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/mygroup/test_cmd.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/public/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/public/commands/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/public/oi/oi.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/public/public.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/self/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/self/completion_cmd.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/self/health_cmd.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/self/logs_cmd.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/self/migrate_cmd.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/self/redis_cmd.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/self/store_cmd.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/self/test_cmd.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/self/visual_cmd.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/self/zsh_cmd.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/storage/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/storage/backends/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/storage/backends/ipfs_backend.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/storage/base.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/storage/cache.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/storage/encryption.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/storage/factory.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/storage/registry.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/storage/storacha_cli.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/daemon/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/daemon/async_command_database.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/daemon/async_process_manager.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/daemon/client.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/daemon/daemon.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/daemon/daemon_api.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/daemon/enhanced_daemon.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/daemon/process_cli.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/daemon/process_manager.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/daemon/test_daemon.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/dashboard/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/dashboard/dashboard_cmd.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/doc_convert.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/docker/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/docker/docker.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/file/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/gcloud/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/gcloud/config.toml +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/gcloud/gcloud.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/git_commit/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/git_commit/ai_service.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/interview/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/lsh_integration.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/model_service/client.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/model_service/download_and_run_efficient_models.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/model_service/lightweight_embedder.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/model_service/lightweight_model_server.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/model_service/lightweight_test.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/model_service/model_service.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/model_service/ollama_efficient_runner.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/model_service/openai_adapter.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/model_service/pdf_processor.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/model_service/test_efficient_runner.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/model_service/test_example.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/model_service/test_integration.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/model_service/test_new_features.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/notebook/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/notebook/command_loader.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/notebook/converter.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/notebook/executor.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/notebook/notebook_cmd.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/notebook/schema.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/notebook/validator.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/openai/openai.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/registry/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/registry/registry.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/repo/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/repo/repo.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/scheduler/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/scheduler/cron_parser.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/scheduler/job.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/scheduler/monitor.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/scheduler/persistence.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/scheduler/scheduler.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/search/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/secrets/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/secrets/secrets_cmd.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/storage/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/storage/storage_cmd.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/sync/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/sync/test_cmd.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/videos/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/wakatime/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/wakatime/wakatime.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/workflow.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli_framework.egg-info/dependency_links.txt +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli_framework.egg-info/entry_points.txt +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli_framework.egg-info/requires.txt +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli_framework.egg-info/top_level.txt +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/cli/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/cli/test_all_commands.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/cli/test_app_logs_cmd.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/cli/test_app_redis_cmd.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/cli/test_logs_cmd.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/cli/test_main_app.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/cli/test_model_cmd.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/cli/test_self_cmd.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/cli/test_self_cmd_plugins.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/cli/test_self_cmd_utilities.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/cli/test_workflow_creation_commands.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/cli/test_workflow_file.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/cli/test_workflow_gcloud.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/cli/test_workflow_registry.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/conftest.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/e2e/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/e2e/test_complete_workflows.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/e2e/test_model_workflow.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/e2e/test_new_user_workflow.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/e2e/test_update_workflow.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/fixtures/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/fixtures/cli_fixtures.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/fixtures/data_fixtures.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/fixtures/db_fixtures.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/fixtures/model_fixtures.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/integration/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/integration/test_all_commands_comprehensive.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/integration/test_daemon_server.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/integration/test_direct_file_execution.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/integration/test_e2e_dashboard_lsh_supabase.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/integration/test_flask_webapp.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/integration/test_folder_workflows_integration.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/integration/test_gcloud_services.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/integration/test_ml_auth.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/integration/test_ml_data_pipeline.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/integration/test_ml_models.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/integration/test_ml_pipeline.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/integration/test_module_imports.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/integration/test_notebook_workflows.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/integration/test_oi_service.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/integration/test_repo_operations.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/integration/test_scheduler_integration.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/integration/test_service_registry.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/integration/test_supabase_live_connection.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/integration/test_video_processing.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/integration/test_wakatime_api.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/integration/test_webapp_full.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/integration/test_workflow.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/integration/test_workflow_commands.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/performance/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/property/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/storage/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/storage/test_cache.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/storage/test_encryption.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/storage/test_storacha_cli.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_api_utils.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_async_process_manager.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_auth_modules.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_bug_fixes.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_config.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_custom_commands.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_custom_commands_filtering.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_daemon_api.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_dashboard_components.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_dashboard_functions.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_dashboard_pages.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_dependencies.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_doc_convert_workflow.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_emulator_workflow.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_erd_generation.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_erd_generic.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_erd_imports.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_folder_workflows.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_git_commit_workflow.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_health_cmd.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_lib_auth.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_lib_files.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_lib_utils.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_logger.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_ml_preprocessing.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_new_cmd.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_notebook_command_loader.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_notebook_executor.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_optional_deps.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_paths.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_pdf_compress.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_prediction_engine.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_pyenv.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_regression.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_scheduler.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_scheduler_cron_parser.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_scheduler_job.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_scheduler_monitor.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_scheduler_persistence.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_self_update.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_store_cmd.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_supabase_connection.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_supabase_pagination.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_toml_utils.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_trading_imports.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_ui_rich.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_uv_compat.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_workflow_file_completion.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.19}/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.19
|
|
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>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "mcli-framework"
|
|
3
|
-
version = "8.0.
|
|
3
|
+
version = "8.0.19"
|
|
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"
|
|
@@ -11,16 +11,18 @@ from mcli.lib.logger.logger import disable_runtime_tracing, enable_runtime_traci
|
|
|
11
11
|
|
|
12
12
|
# Desired command order for help display
|
|
13
13
|
COMMAND_ORDER = [
|
|
14
|
-
"
|
|
15
|
-
"list",
|
|
16
|
-
"search",
|
|
14
|
+
"init",
|
|
17
15
|
"new",
|
|
18
16
|
"edit",
|
|
17
|
+
"mv",
|
|
19
18
|
"rm",
|
|
19
|
+
"search",
|
|
20
|
+
"list",
|
|
21
|
+
"run",
|
|
22
|
+
"context",
|
|
20
23
|
"health",
|
|
21
24
|
"sync",
|
|
22
25
|
"self",
|
|
23
|
-
"init",
|
|
24
26
|
]
|
|
25
27
|
|
|
26
28
|
|
|
@@ -401,6 +403,15 @@ def _add_lazy_commands(app: click.Group):
|
|
|
401
403
|
except ImportError as e:
|
|
402
404
|
logger.debug(f"Could not load edit command: {e}")
|
|
403
405
|
|
|
406
|
+
# mcli mv - Move/rename a command
|
|
407
|
+
try:
|
|
408
|
+
from mcli.app.mv_cmd import mv
|
|
409
|
+
|
|
410
|
+
app.add_command(mv, name="mv")
|
|
411
|
+
logger.debug("Added mv command")
|
|
412
|
+
except ImportError as e:
|
|
413
|
+
logger.debug(f"Could not load mv command: {e}")
|
|
414
|
+
|
|
404
415
|
# mcli rm - Delete a command
|
|
405
416
|
try:
|
|
406
417
|
from mcli.app.delete_cmd import rm
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
"""Top-level mv command for MCLI.
|
|
2
|
+
|
|
3
|
+
This module provides the `mcli mv` command for moving/renaming workflow commands.
|
|
4
|
+
Supports moving between local and global locations.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import shutil
|
|
8
|
+
from pathlib import Path
|
|
9
|
+
|
|
10
|
+
import click
|
|
11
|
+
from rich.prompt import Prompt
|
|
12
|
+
|
|
13
|
+
from mcli.lib.constants import MoveMessages
|
|
14
|
+
from mcli.lib.custom_commands import get_command_manager
|
|
15
|
+
from mcli.lib.logger.logger import get_logger
|
|
16
|
+
from mcli.lib.paths import get_custom_commands_dir
|
|
17
|
+
from mcli.lib.ui.styling import console
|
|
18
|
+
|
|
19
|
+
logger = get_logger(__name__)
|
|
20
|
+
MM = MoveMessages # Short alias for cleaner code
|
|
21
|
+
|
|
22
|
+
# Supported native script extensions
|
|
23
|
+
NATIVE_SCRIPT_EXTENSIONS = [".py", ".sh", ".bash", ".js", ".ts", ".ipynb"]
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def find_command_file(workflows_dir: Path, command_name: str) -> Path | None:
|
|
27
|
+
"""Find a command file by name (native script or JSON)."""
|
|
28
|
+
# Check native scripts first
|
|
29
|
+
for ext in NATIVE_SCRIPT_EXTENSIONS:
|
|
30
|
+
script_path = workflows_dir / f"{command_name}{ext}"
|
|
31
|
+
if script_path.exists():
|
|
32
|
+
return script_path
|
|
33
|
+
|
|
34
|
+
# Check JSON file
|
|
35
|
+
json_path = workflows_dir / f"{command_name}.json"
|
|
36
|
+
if json_path.exists():
|
|
37
|
+
return json_path
|
|
38
|
+
|
|
39
|
+
return None
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
@click.command("mv")
|
|
43
|
+
@click.argument("from_name", required=True)
|
|
44
|
+
@click.argument("to_name", required=True)
|
|
45
|
+
@click.option(
|
|
46
|
+
"--global",
|
|
47
|
+
"-g",
|
|
48
|
+
"from_global",
|
|
49
|
+
is_flag=True,
|
|
50
|
+
help="Source is a global command",
|
|
51
|
+
)
|
|
52
|
+
@click.option(
|
|
53
|
+
"--to-global",
|
|
54
|
+
"-G",
|
|
55
|
+
"to_global",
|
|
56
|
+
is_flag=True,
|
|
57
|
+
help="Move destination to global commands",
|
|
58
|
+
)
|
|
59
|
+
@click.option("--yes", "-y", is_flag=True, help="Skip confirmation prompt")
|
|
60
|
+
def mv(from_name: str, to_name: str, from_global: bool, to_global: bool, yes: bool):
|
|
61
|
+
"""📦 Move or rename a workflow command.
|
|
62
|
+
|
|
63
|
+
Move a command from one location to another, or rename it within the same scope.
|
|
64
|
+
|
|
65
|
+
\b
|
|
66
|
+
Examples:
|
|
67
|
+
mcli mv old-name new-name # Rename local command
|
|
68
|
+
mcli mv my-cmd --to-global # Move local to global (keep same name)
|
|
69
|
+
mcli mv my-cmd -g new-name # Move global to local with new name
|
|
70
|
+
mcli mv my-cmd -g -G new-name # Rename global command
|
|
71
|
+
"""
|
|
72
|
+
# Get source and destination directories
|
|
73
|
+
source_dir = get_custom_commands_dir(global_mode=from_global)
|
|
74
|
+
dest_dir = get_custom_commands_dir(global_mode=to_global)
|
|
75
|
+
|
|
76
|
+
# Find the source file
|
|
77
|
+
source_file = find_command_file(source_dir, from_name)
|
|
78
|
+
|
|
79
|
+
if not source_file:
|
|
80
|
+
console.print(MM.COMMAND_NOT_FOUND.format(name=from_name))
|
|
81
|
+
console.print(MM.SEARCHED_IN.format(path=source_dir))
|
|
82
|
+
return 1
|
|
83
|
+
|
|
84
|
+
# Determine destination path (preserve extension)
|
|
85
|
+
dest_file = dest_dir / f"{to_name}{source_file.suffix}"
|
|
86
|
+
|
|
87
|
+
# Check if destination already exists
|
|
88
|
+
if dest_file.exists():
|
|
89
|
+
console.print(MM.ALREADY_EXISTS.format(name=to_name))
|
|
90
|
+
console.print(MM.PATH_DISPLAY.format(path=dest_file))
|
|
91
|
+
return 1
|
|
92
|
+
|
|
93
|
+
# Describe the operation
|
|
94
|
+
if from_global == to_global:
|
|
95
|
+
# Same scope - just renaming
|
|
96
|
+
if from_name == to_name:
|
|
97
|
+
console.print(MM.NO_CHANGE_NEEDED)
|
|
98
|
+
return 0
|
|
99
|
+
operation = MM.RENAME_OP.format(from_name=from_name, to_name=to_name)
|
|
100
|
+
scope = "global" if from_global else "local"
|
|
101
|
+
console.print(MM.RENAMING_COMMAND.format(scope=scope))
|
|
102
|
+
else:
|
|
103
|
+
# Moving between scopes
|
|
104
|
+
from_scope = "global" if from_global else "local"
|
|
105
|
+
to_scope = "global" if to_global else "local"
|
|
106
|
+
operation = MM.MOVE_OP.format(from_name=from_name, from_scope=from_scope, to_scope=to_scope)
|
|
107
|
+
if from_name != to_name:
|
|
108
|
+
operation += MM.MOVE_AS_OP.format(to_name=to_name)
|
|
109
|
+
console.print(MM.MOVING_COMMAND)
|
|
110
|
+
|
|
111
|
+
console.print(MM.FROM_PATH.format(path=source_file))
|
|
112
|
+
console.print(MM.TO_PATH.format(path=dest_file))
|
|
113
|
+
|
|
114
|
+
# Confirm
|
|
115
|
+
if not yes:
|
|
116
|
+
should_move = Prompt.ask(MM.PROCEED_PROMPT, choices=["y", "n"], default="n")
|
|
117
|
+
if should_move.lower() != "y":
|
|
118
|
+
console.print(MM.CANCELLED)
|
|
119
|
+
return 0
|
|
120
|
+
|
|
121
|
+
# Ensure destination directory exists
|
|
122
|
+
dest_dir.mkdir(parents=True, exist_ok=True)
|
|
123
|
+
|
|
124
|
+
# Perform the move
|
|
125
|
+
try:
|
|
126
|
+
shutil.move(str(source_file), str(dest_file))
|
|
127
|
+
|
|
128
|
+
# Update lockfiles for both source and destination managers
|
|
129
|
+
source_manager = get_command_manager(global_mode=from_global)
|
|
130
|
+
source_manager.update_lockfile()
|
|
131
|
+
|
|
132
|
+
if from_global != to_global:
|
|
133
|
+
dest_manager = get_command_manager(global_mode=to_global)
|
|
134
|
+
dest_manager.update_lockfile()
|
|
135
|
+
|
|
136
|
+
console.print(MM.MOVE_SUCCESS.format(operation=operation))
|
|
137
|
+
console.print(MM.NEW_LOCATION.format(path=dest_file))
|
|
138
|
+
return 0
|
|
139
|
+
|
|
140
|
+
except Exception as e:
|
|
141
|
+
console.print(MM.MOVE_FAILED.format(error=e))
|
|
142
|
+
logger.exception("Failed to move command")
|
|
143
|
+
return 1
|
|
@@ -39,6 +39,7 @@ from .messages import (
|
|
|
39
39
|
ErrorMessages,
|
|
40
40
|
InfoMessages,
|
|
41
41
|
ModelServiceMessages,
|
|
42
|
+
MoveMessages,
|
|
42
43
|
PromptMessages,
|
|
43
44
|
SuccessMessages,
|
|
44
45
|
SyncMessages,
|
|
@@ -86,6 +87,7 @@ __all__ = [
|
|
|
86
87
|
"ChatMessages",
|
|
87
88
|
"CommandMessages",
|
|
88
89
|
"EditMessages",
|
|
90
|
+
"MoveMessages",
|
|
89
91
|
"ModelServiceMessages",
|
|
90
92
|
"SystemIntegrationMessages",
|
|
91
93
|
"SyncMessages",
|
|
@@ -942,6 +942,37 @@ class SyncMessages:
|
|
|
942
942
|
DIR_NOT_EXIST = "Commands directory does not exist: {path}"
|
|
943
943
|
|
|
944
944
|
|
|
945
|
+
class MoveMessages:
|
|
946
|
+
"""Move/rename command message constants."""
|
|
947
|
+
|
|
948
|
+
# Info messages
|
|
949
|
+
RENAMING_COMMAND = "[cyan]Renaming {scope} command:[/cyan]"
|
|
950
|
+
MOVING_COMMAND = "[cyan]Moving command:[/cyan]"
|
|
951
|
+
FROM_PATH = " From: {path}"
|
|
952
|
+
TO_PATH = " To: {path}"
|
|
953
|
+
PROCEED_PROMPT = "Proceed?"
|
|
954
|
+
|
|
955
|
+
# Success messages
|
|
956
|
+
MOVE_SUCCESS = "[green]✅ {operation}[/green]"
|
|
957
|
+
NEW_LOCATION = "[dim]New location: {path}[/dim]"
|
|
958
|
+
|
|
959
|
+
# Warning messages
|
|
960
|
+
NO_CHANGE_NEEDED = "[yellow]Source and destination are the same. Nothing to do.[/yellow]"
|
|
961
|
+
CANCELLED = "[yellow]Cancelled.[/yellow]"
|
|
962
|
+
|
|
963
|
+
# Error messages
|
|
964
|
+
COMMAND_NOT_FOUND = "[red]Command '{name}' not found.[/red]"
|
|
965
|
+
SEARCHED_IN = "[dim]Searched in: {path}[/dim]"
|
|
966
|
+
ALREADY_EXISTS = "[red]Command '{name}' already exists at destination.[/red]"
|
|
967
|
+
PATH_DISPLAY = "[dim]Path: {path}[/dim]"
|
|
968
|
+
MOVE_FAILED = "[red]Failed to move command: {error}[/red]"
|
|
969
|
+
|
|
970
|
+
# Operation descriptions
|
|
971
|
+
RENAME_OP = "Rename '{from_name}' to '{to_name}'"
|
|
972
|
+
MOVE_OP = "Move '{from_name}' from {from_scope} to {to_scope}"
|
|
973
|
+
MOVE_AS_OP = " as '{to_name}'"
|
|
974
|
+
|
|
975
|
+
|
|
945
976
|
class VenvMessages:
|
|
946
977
|
"""Virtual environment related messages."""
|
|
947
978
|
|
|
@@ -984,5 +1015,6 @@ __all__ = [
|
|
|
984
1015
|
"SystemIntegrationMessages",
|
|
985
1016
|
"EditMessages",
|
|
986
1017
|
"SyncMessages",
|
|
1018
|
+
"MoveMessages",
|
|
987
1019
|
"VenvMessages",
|
|
988
1020
|
]
|
|
@@ -1085,157 +1085,15 @@ except ImportError as e:
|
|
|
1085
1085
|
logger.debug(f"Could not load migrate command: {e}")
|
|
1086
1086
|
|
|
1087
1087
|
try:
|
|
1088
|
-
from mcli.self.
|
|
1088
|
+
from mcli.self.workflows_cmd import workflows_group
|
|
1089
1089
|
|
|
1090
|
-
self_app.add_command(
|
|
1091
|
-
logger.debug("Added
|
|
1092
|
-
except ImportError as e:
|
|
1093
|
-
logger.debug(f"Could not load health command: {e}")
|
|
1094
|
-
|
|
1095
|
-
|
|
1096
|
-
try:
|
|
1097
|
-
from mcli.self.workflows_cmd import workflows_cmd
|
|
1098
|
-
|
|
1099
|
-
self_app.add_command(workflows_cmd, name="workflows")
|
|
1100
|
-
logger.debug("Added workflows command to self group")
|
|
1090
|
+
self_app.add_command(workflows_group, name="workflows")
|
|
1091
|
+
logger.debug("Added workflows command group to self group")
|
|
1101
1092
|
except ImportError as e:
|
|
1102
1093
|
logger.debug(f"Could not load workflows command: {e}")
|
|
1103
1094
|
|
|
1104
|
-
|
|
1105
|
-
#
|
|
1106
|
-
@click.group("workspace")
|
|
1107
|
-
def workspace():
|
|
1108
|
-
"""📁 Manage registered workflow workspaces.
|
|
1109
|
-
|
|
1110
|
-
Track workflow locations across multiple repositories for unified
|
|
1111
|
-
command listing with 'mcli list --all'.
|
|
1112
|
-
|
|
1113
|
-
Examples:
|
|
1114
|
-
mcli self workspace list # List registered workspaces
|
|
1115
|
-
mcli self workspace add # Register current directory
|
|
1116
|
-
mcli self workspace add ~/myrepo # Register specific directory
|
|
1117
|
-
mcli self workspace remove # Unregister current directory
|
|
1118
|
-
"""
|
|
1119
|
-
pass
|
|
1120
|
-
|
|
1121
|
-
|
|
1122
|
-
@workspace.command("list")
|
|
1123
|
-
@click.option("--json", "as_json", is_flag=True, help="Output as JSON")
|
|
1124
|
-
def workspace_list(as_json: bool):
|
|
1125
|
-
"""📋 List all registered workspaces."""
|
|
1126
|
-
import json as json_module
|
|
1127
|
-
|
|
1128
|
-
from mcli.lib.workspace_registry import list_registered_workspaces
|
|
1129
|
-
|
|
1130
|
-
workspaces = list_registered_workspaces()
|
|
1131
|
-
|
|
1132
|
-
if as_json:
|
|
1133
|
-
click.echo(
|
|
1134
|
-
json_module.dumps({"workspaces": workspaces, "total": len(workspaces)}, indent=2)
|
|
1135
|
-
)
|
|
1136
|
-
return
|
|
1137
|
-
|
|
1138
|
-
if not workspaces:
|
|
1139
|
-
console.print("[yellow]No workspaces registered.[/yellow]")
|
|
1140
|
-
console.print("\n[dim]Register a workspace:[/dim]")
|
|
1141
|
-
console.print(" mcli self workspace add [PATH]")
|
|
1142
|
-
return
|
|
1143
|
-
|
|
1144
|
-
table = Table(title="Registered Workspaces")
|
|
1145
|
-
table.add_column("Name", style="cyan")
|
|
1146
|
-
table.add_column("Path", style="dim")
|
|
1147
|
-
table.add_column("Status", style="green")
|
|
1148
|
-
|
|
1149
|
-
for ws in workspaces:
|
|
1150
|
-
status = "✅ Active" if ws["exists"] else "⚠️ Missing"
|
|
1151
|
-
table.add_row(ws["name"], ws["path"], status)
|
|
1152
|
-
|
|
1153
|
-
console.print(table)
|
|
1154
|
-
console.print(f"\n[dim]Total: {len(workspaces)} workspace(s)[/dim]")
|
|
1155
|
-
|
|
1156
|
-
|
|
1157
|
-
@workspace.command("add")
|
|
1158
|
-
@click.argument("path", required=False, type=click.Path(exists=True))
|
|
1159
|
-
@click.option("--name", "-n", help="Custom name for the workspace")
|
|
1160
|
-
def workspace_add(path: Optional[str], name: Optional[str]):
|
|
1161
|
-
"""➕ Register a workspace (current directory if no path given)."""
|
|
1162
|
-
from mcli.lib.workspace_registry import register_workspace
|
|
1163
|
-
|
|
1164
|
-
workspace_path = Path(path).resolve() if path else None
|
|
1165
|
-
|
|
1166
|
-
result = register_workspace(workspace_path, name)
|
|
1167
|
-
if result:
|
|
1168
|
-
console.print(f"[green]✅ Workspace registered successfully![/green]")
|
|
1169
|
-
console.print(f"[dim]ID: {result}[/dim]")
|
|
1170
|
-
console.print("\n[dim]View all workflows with:[/dim]")
|
|
1171
|
-
console.print(" mcli list --all")
|
|
1172
|
-
else:
|
|
1173
|
-
console.print("[red]❌ Failed to register workspace[/red]")
|
|
1174
|
-
console.print("[dim]Make sure the directory has .mcli/workflows/[/dim]")
|
|
1175
|
-
|
|
1176
|
-
|
|
1177
|
-
@workspace.command("remove")
|
|
1178
|
-
@click.argument("path", required=False, type=click.Path())
|
|
1179
|
-
@click.option("--yes", "-y", is_flag=True, help="Skip confirmation")
|
|
1180
|
-
def workspace_remove(path: Optional[str], yes: bool):
|
|
1181
|
-
"""➖ Unregister a workspace (current directory if no path given)."""
|
|
1182
|
-
from rich.prompt import Confirm
|
|
1183
|
-
|
|
1184
|
-
from mcli.lib.workspace_registry import unregister_workspace
|
|
1185
|
-
|
|
1186
|
-
workspace_path = Path(path).resolve() if path else None
|
|
1187
|
-
|
|
1188
|
-
if not yes:
|
|
1189
|
-
path_str = str(workspace_path) if workspace_path else "current directory"
|
|
1190
|
-
if not Confirm.ask(f"[yellow]Unregister workspace at {path_str}?[/yellow]"):
|
|
1191
|
-
console.print("[yellow]Cancelled[/yellow]")
|
|
1192
|
-
return
|
|
1193
|
-
|
|
1194
|
-
if unregister_workspace(workspace_path):
|
|
1195
|
-
console.print("[green]✅ Workspace unregistered[/green]")
|
|
1196
|
-
else:
|
|
1197
|
-
console.print("[red]❌ Failed to unregister workspace[/red]")
|
|
1198
|
-
console.print("[dim]Make sure the path is registered[/dim]")
|
|
1199
|
-
|
|
1200
|
-
|
|
1201
|
-
@workspace.command("prune")
|
|
1202
|
-
@click.option("--yes", "-y", is_flag=True, help="Skip confirmation")
|
|
1203
|
-
def workspace_prune(yes: bool):
|
|
1204
|
-
"""🧹 Remove workspaces that no longer exist."""
|
|
1205
|
-
from rich.prompt import Confirm
|
|
1206
|
-
|
|
1207
|
-
from mcli.lib.workspace_registry import list_registered_workspaces, load_registry, save_registry
|
|
1208
|
-
|
|
1209
|
-
workspaces = list_registered_workspaces()
|
|
1210
|
-
missing = [ws for ws in workspaces if not ws["exists"]]
|
|
1211
|
-
|
|
1212
|
-
if not missing:
|
|
1213
|
-
console.print("[green]✅ All registered workspaces exist[/green]")
|
|
1214
|
-
return
|
|
1215
|
-
|
|
1216
|
-
console.print(f"[yellow]Found {len(missing)} missing workspace(s):[/yellow]")
|
|
1217
|
-
for ws in missing:
|
|
1218
|
-
console.print(f" - {ws['name']} ({ws['path']})")
|
|
1219
|
-
|
|
1220
|
-
if not yes:
|
|
1221
|
-
if not Confirm.ask("[yellow]Remove these workspaces from registry?[/yellow]"):
|
|
1222
|
-
console.print("[yellow]Cancelled[/yellow]")
|
|
1223
|
-
return
|
|
1224
|
-
|
|
1225
|
-
# Remove missing workspaces
|
|
1226
|
-
registry = load_registry()
|
|
1227
|
-
for ws in missing:
|
|
1228
|
-
if ws["id"] in registry.get("workspaces", {}):
|
|
1229
|
-
del registry["workspaces"][ws["id"]]
|
|
1230
|
-
|
|
1231
|
-
if save_registry(registry):
|
|
1232
|
-
console.print(f"[green]✅ Removed {len(missing)} missing workspace(s)[/green]")
|
|
1233
|
-
else:
|
|
1234
|
-
console.print("[red]❌ Failed to update registry[/red]")
|
|
1235
|
-
|
|
1236
|
-
|
|
1237
|
-
self_app.add_command(workspace)
|
|
1238
|
-
logger.debug("Added workspace command to self group")
|
|
1095
|
+
# NOTE: workspace commands have been merged into 'mcli self workflows'
|
|
1096
|
+
# Use: mcli self workflows add/remove/prune
|
|
1239
1097
|
|
|
1240
1098
|
# NOTE: store command has been moved to mcli.app.commands_cmd for better organization
|
|
1241
1099
|
|