mcli-framework 8.0.17__tar.gz → 8.0.18__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.18}/PKG-INFO +1 -1
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/pyproject.toml +1 -1
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/self/self_cmd.py +5 -147
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/self/workflows_cmd.py +151 -78
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli_framework.egg-info/PKG-INFO +1 -1
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/.github/dependabot.yml +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/.github/dependency-review-config.yml +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/.github/workflows/build.yml +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/.github/workflows/ci.yml +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/.github/workflows/codeql.yml +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/.github/workflows/docs-links.yml +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/.github/workflows/publish-self-hosted.yml +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/.github/workflows/publish.yml +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/.github/workflows/release.yml +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/.github/workflows/security.yml +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/.github/workflows/test.yml +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/LICENSE +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/MANIFEST.in +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/README.md +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/llms-full.txt +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/llms.txt +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/mcli_rust/Cargo.toml +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/mcli_rust/src/command_parser.rs +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/mcli_rust/src/file_watcher.rs +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/mcli_rust/src/lib.rs +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/mcli_rust/src/process_manager.rs +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/mcli_rust/src/tfidf.rs +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/setup.cfg +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/app/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/app/commands_cmd.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/app/completion_helpers.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/app/context_cmd.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/app/create_cmd.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/app/delete_cmd.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/app/edit_cmd.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/app/init_cmd.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/app/list_cmd.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/app/main.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/app/migrate_cmd.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/app/model/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/app/model/model.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/app/model_cmd.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/app/new_cmd.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/app/remove_cmd.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/app/rm_cmd.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/app/search_cmd.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/app/sync_cmd.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/app/video/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/app/video/video.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/config.toml +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/api/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/api/api.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/api/daemon_client.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/api/daemon_client_local.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/api/daemon_decorator.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/api/mcli_decorators.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/auth/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/auth/auth.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/auth/aws_manager.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/auth/azure_manager.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/auth/credential_manager.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/auth/gcp_manager.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/auth/key_manager.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/auth/mcli_manager.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/auth/token_manager.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/auth/token_util.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/config/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/config/config.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/constants/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/constants/commands.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/constants/defaults.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/constants/env.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/constants/messages.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/constants/paths.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/constants/scripts.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/constants/storage.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/custom_commands.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/discovery/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/discovery/command_discovery.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/erd/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/erd/erd.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/erd/generate_graph.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/errors.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/feature_detection.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/files/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/files/files.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/folder_workflows.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/fs/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/fs/fs.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/ipfs_sync.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/lib.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/logger/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/logger/logger.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/optional_deps.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/paths.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/performance/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/performance/optimizer.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/performance/rust_bridge.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/performance/uvloop_config.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/pickles/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/pickles/pickles.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/pyenv/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/pyenv/deps.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/pyenv/manager.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/pyenv/venv.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/script_loader.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/script_sync.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/script_watcher.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/search/cached_vectorizer.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/secrets/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/secrets/commands.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/secrets/manager.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/secrets/repl.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/secrets/store.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/services/data_pipeline.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/services/lsh_client.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/services/redis_service.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/shell/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/shell/shell.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/templates/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/templates/command_templates.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/toml/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/toml/toml.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/types.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/ui/styling.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/ui/visual_effects.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/watcher/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/watcher/watcher.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/workspace_registry.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/api/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/api/app.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/api/middleware.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/api/routers/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/api/routers/admin_router.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/api/routers/auth_router.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/api/routers/backtest_router.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/api/routers/data_router.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/api/routers/model_router.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/api/routers/monitoring_router.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/api/routers/portfolio_router.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/api/routers/prediction_router.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/api/routers/trade_router.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/api/routers/websocket_router.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/api/schemas.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/auth/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/auth/auth_manager.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/auth/models.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/auth/permissions.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/backtesting/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/backtesting/backtest_engine.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/backtesting/performance_metrics.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/backtesting/run.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/cache.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/cli/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/cli/main.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/config/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/config/settings.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/configs/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/configs/dvc_config.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/configs/mlflow_config.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/configs/mlops_manager.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/dashboard/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/dashboard/app.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/dashboard/app_integrated.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/dashboard/app_supabase.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/dashboard/app_training.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/dashboard/cli.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/dashboard/common.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/dashboard/components/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/dashboard/components/charts.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/dashboard/components/metrics.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/dashboard/components/tables.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/dashboard/overview.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/dashboard/pages/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/dashboard/pages/cicd.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/dashboard/pages/debug_dependencies.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/dashboard/pages/gravity_viz.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/dashboard/pages/monte_carlo_predictions.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/dashboard/pages/predictions_enhanced.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/dashboard/pages/scrapers_and_logs.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/dashboard/pages/test_portfolio.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/dashboard/pages/trading.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/dashboard/pages/workflows.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/dashboard/streamlit_extras_utils.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/dashboard/styles.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/dashboard/utils.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/dashboard/warning_suppression.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/data_ingestion/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/data_ingestion/api_connectors.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/data_ingestion/data_pipeline.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/data_ingestion/stream_processor.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/database/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/database/migrations/env.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/database/models.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/database/session.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/experimentation/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/experimentation/ab_testing.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/features/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/features/ensemble_features.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/features/recommendation_engine.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/features/stock_features.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/features/test_feature_engineering.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/logging.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/mlops/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/mlops/data_versioning.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/mlops/experiment_tracker.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/mlops/model_serving.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/mlops/pipeline_orchestrator.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/models/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/models/base_models.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/models/ensemble_models.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/models/recommendation_models.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/models/test_models.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/monitoring/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/monitoring/drift_detection.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/monitoring/metrics.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/optimization/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/optimization/optimize.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/optimization/portfolio_optimizer.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/predictions/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/predictions/monte_carlo.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/predictions/prediction_engine.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/preprocessing/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/preprocessing/data_cleaners.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/preprocessing/feature_extractors.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/preprocessing/ml_pipeline.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/preprocessing/test_preprocessing.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/scripts/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/scripts/populate_sample_data.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/serving/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/serving/serve.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/tasks.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/tests/test_integration.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/tests/test_training_dashboard.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/trading/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/trading/alpaca_client.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/trading/migrations.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/trading/models.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/trading/paper_trading.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/trading/risk_management.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/trading/trading_service.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/training/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/training/train.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/training/train_model.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/mygroup/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/mygroup/test_cmd.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/public/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/public/commands/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/public/oi/oi.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/public/public.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/self/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/self/completion_cmd.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/self/health_cmd.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/self/logs_cmd.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/self/migrate_cmd.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/self/redis_cmd.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/self/store_cmd.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/self/test_cmd.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/self/visual_cmd.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/self/zsh_cmd.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/storage/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/storage/backends/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/storage/backends/ipfs_backend.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/storage/base.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/storage/cache.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/storage/encryption.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/storage/factory.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/storage/registry.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/storage/storacha_cli.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/daemon/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/daemon/async_command_database.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/daemon/async_process_manager.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/daemon/client.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/daemon/daemon.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/daemon/daemon_api.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/daemon/enhanced_daemon.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/daemon/process_cli.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/daemon/process_manager.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/daemon/test_daemon.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/dashboard/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/dashboard/dashboard_cmd.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/doc_convert.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/docker/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/docker/docker.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/file/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/gcloud/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/gcloud/config.toml +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/gcloud/gcloud.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/git_commit/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/git_commit/ai_service.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/interview/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/lsh_integration.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/model_service/client.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/model_service/download_and_run_efficient_models.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/model_service/lightweight_embedder.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/model_service/lightweight_model_server.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/model_service/lightweight_test.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/model_service/model_service.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/model_service/ollama_efficient_runner.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/model_service/openai_adapter.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/model_service/pdf_processor.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/model_service/test_efficient_runner.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/model_service/test_example.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/model_service/test_integration.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/model_service/test_new_features.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/notebook/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/notebook/command_loader.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/notebook/converter.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/notebook/executor.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/notebook/notebook_cmd.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/notebook/schema.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/notebook/validator.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/openai/openai.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/registry/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/registry/registry.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/repo/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/repo/repo.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/scheduler/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/scheduler/cron_parser.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/scheduler/job.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/scheduler/monitor.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/scheduler/persistence.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/scheduler/scheduler.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/search/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/secrets/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/secrets/secrets_cmd.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/storage/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/storage/storage_cmd.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/sync/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/sync/test_cmd.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/videos/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/wakatime/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/wakatime/wakatime.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/workflow.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli_framework.egg-info/SOURCES.txt +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli_framework.egg-info/dependency_links.txt +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli_framework.egg-info/entry_points.txt +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli_framework.egg-info/requires.txt +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli_framework.egg-info/top_level.txt +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/cli/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/cli/test_all_commands.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/cli/test_app_logs_cmd.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/cli/test_app_redis_cmd.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/cli/test_logs_cmd.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/cli/test_main_app.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/cli/test_model_cmd.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/cli/test_self_cmd.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/cli/test_self_cmd_plugins.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/cli/test_self_cmd_utilities.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/cli/test_workflow_creation_commands.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/cli/test_workflow_file.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/cli/test_workflow_gcloud.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/cli/test_workflow_registry.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/conftest.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/e2e/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/e2e/test_complete_workflows.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/e2e/test_model_workflow.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/e2e/test_new_user_workflow.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/e2e/test_update_workflow.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/fixtures/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/fixtures/cli_fixtures.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/fixtures/data_fixtures.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/fixtures/db_fixtures.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/fixtures/model_fixtures.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/integration/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/integration/test_all_commands_comprehensive.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/integration/test_daemon_server.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/integration/test_direct_file_execution.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/integration/test_e2e_dashboard_lsh_supabase.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/integration/test_flask_webapp.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/integration/test_folder_workflows_integration.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/integration/test_gcloud_services.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/integration/test_ml_auth.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/integration/test_ml_data_pipeline.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/integration/test_ml_models.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/integration/test_ml_pipeline.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/integration/test_module_imports.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/integration/test_notebook_workflows.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/integration/test_oi_service.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/integration/test_repo_operations.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/integration/test_scheduler_integration.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/integration/test_service_registry.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/integration/test_supabase_live_connection.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/integration/test_video_processing.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/integration/test_wakatime_api.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/integration/test_webapp_full.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/integration/test_workflow.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/integration/test_workflow_commands.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/performance/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/property/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/storage/__init__.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/storage/test_cache.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/storage/test_encryption.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/storage/test_storacha_cli.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_api_utils.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_async_process_manager.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_auth_modules.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_bug_fixes.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_config.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_custom_commands.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_custom_commands_filtering.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_daemon_api.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_dashboard_components.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_dashboard_functions.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_dashboard_pages.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_dependencies.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_doc_convert_workflow.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_emulator_workflow.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_erd_generation.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_erd_generic.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_erd_imports.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_folder_workflows.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_git_commit_workflow.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_health_cmd.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_lib_auth.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_lib_files.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_lib_utils.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_logger.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_ml_preprocessing.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_new_cmd.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_notebook_command_loader.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_notebook_executor.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_optional_deps.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_paths.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_pdf_compress.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_prediction_engine.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_pyenv.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_regression.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_scheduler.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_scheduler_cron_parser.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_scheduler_job.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_scheduler_monitor.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_scheduler_persistence.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_self_update.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_store_cmd.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_supabase_connection.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_supabase_pagination.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_toml_utils.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_trading_imports.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_ui_rich.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_uv_compat.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_workflow_file_completion.py +0 -0
- {mcli_framework-8.0.17 → mcli_framework-8.0.18}/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.18
|
|
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.18"
|
|
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"
|
|
@@ -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
|
|
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
"""
|
|
2
|
-
Workflows command for mcli self.
|
|
2
|
+
Workflows command group for mcli self.
|
|
3
3
|
|
|
4
|
-
Provides
|
|
5
|
-
|
|
4
|
+
Provides comprehensive workflow and workspace management:
|
|
5
|
+
- Dashboard summary of all workflows
|
|
6
|
+
- Detailed workflow listings
|
|
7
|
+
- Workspace registration and management
|
|
6
8
|
"""
|
|
7
9
|
|
|
8
10
|
import json
|
|
9
11
|
from datetime import datetime
|
|
10
12
|
from pathlib import Path
|
|
11
|
-
from typing import Any, Dict, List
|
|
13
|
+
from typing import Any, Dict, List, Optional
|
|
12
14
|
|
|
13
15
|
import click
|
|
14
16
|
from rich.console import Console
|
|
@@ -24,6 +26,9 @@ from mcli.lib.workspace_registry import (
|
|
|
24
26
|
get_registry_path,
|
|
25
27
|
list_registered_workspaces,
|
|
26
28
|
load_registry,
|
|
29
|
+
register_workspace,
|
|
30
|
+
save_registry,
|
|
31
|
+
unregister_workspace,
|
|
27
32
|
)
|
|
28
33
|
|
|
29
34
|
logger = get_logger(__name__)
|
|
@@ -211,94 +216,162 @@ def _render_workflow_list(
|
|
|
211
216
|
console.print(f"\n[bold]Total: {total} workflow(s)[/bold]")
|
|
212
217
|
|
|
213
218
|
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
help="Show detailed list of all workflows",
|
|
221
|
-
)
|
|
222
|
-
@click.option(
|
|
223
|
-
"--global",
|
|
224
|
-
"-g",
|
|
225
|
-
"is_global",
|
|
226
|
-
is_flag=True,
|
|
227
|
-
help="Show only global workflows (~/.mcli/workflows/)",
|
|
228
|
-
)
|
|
219
|
+
# =============================================================================
|
|
220
|
+
# CLI Group and Commands
|
|
221
|
+
# =============================================================================
|
|
222
|
+
|
|
223
|
+
|
|
224
|
+
@click.group("workflows", invoke_without_command=True)
|
|
229
225
|
@click.option("--json", "as_json", is_flag=True, help="Output as JSON")
|
|
230
|
-
@click.
|
|
231
|
-
|
|
232
|
-
"
|
|
233
|
-
is_flag=True,
|
|
234
|
-
help="Show dashboard view (default when no flags)",
|
|
235
|
-
)
|
|
236
|
-
def workflows_cmd(show_all: bool, is_global: bool, as_json: bool, dashboard: bool):
|
|
237
|
-
"""📊 View all workflows tracked by mcli.
|
|
226
|
+
@click.pass_context
|
|
227
|
+
def workflows_group(ctx, as_json: bool):
|
|
228
|
+
"""📊 Manage workflows and workspaces.
|
|
238
229
|
|
|
239
|
-
|
|
240
|
-
Use flags to get different views:
|
|
230
|
+
View all workflows tracked by mcli and manage workspace registrations.
|
|
241
231
|
|
|
242
232
|
\b
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
233
|
+
Commands:
|
|
234
|
+
(default) Dashboard with summary stats
|
|
235
|
+
list Detailed list of all workflows
|
|
236
|
+
add Register a workspace
|
|
237
|
+
remove Unregister a workspace
|
|
238
|
+
prune Remove missing workspaces
|
|
248
239
|
|
|
249
240
|
\b
|
|
250
241
|
Examples:
|
|
251
242
|
mcli self workflows # Dashboard summary
|
|
252
|
-
mcli self workflows
|
|
253
|
-
mcli self workflows
|
|
254
|
-
mcli self workflows
|
|
243
|
+
mcli self workflows list # List all workflows
|
|
244
|
+
mcli self workflows list -g # Global workflows only
|
|
245
|
+
mcli self workflows add # Register current directory
|
|
246
|
+
mcli self workflows remove # Unregister current directory
|
|
255
247
|
"""
|
|
248
|
+
# If no subcommand, show dashboard
|
|
249
|
+
if ctx.invoked_subcommand is None:
|
|
250
|
+
try:
|
|
251
|
+
auto_register_current()
|
|
252
|
+
stats = _get_workflow_stats()
|
|
253
|
+
|
|
254
|
+
if as_json:
|
|
255
|
+
output = {
|
|
256
|
+
"summary": {
|
|
257
|
+
"total_workflows": stats["total_workflows"],
|
|
258
|
+
"total_workspaces": stats["total_workspaces"],
|
|
259
|
+
"active_workspaces": stats["active_workspaces"],
|
|
260
|
+
"missing_workspaces": stats["missing_workspaces"],
|
|
261
|
+
"global_workflows": stats["global_workflows"],
|
|
262
|
+
"local_workflows": stats["local_workflows"],
|
|
263
|
+
"current_workspace": stats["current_workspace"],
|
|
264
|
+
"registry_updated": stats["registry_updated"],
|
|
265
|
+
},
|
|
266
|
+
"language_counts": stats["language_counts"],
|
|
267
|
+
"workspaces": stats["workspaces"],
|
|
268
|
+
}
|
|
269
|
+
click.echo(json.dumps(output, indent=2, default=str))
|
|
270
|
+
else:
|
|
271
|
+
_render_dashboard(stats)
|
|
272
|
+
except Exception as e:
|
|
273
|
+
console.print(f"[red]Error: {e}[/red]")
|
|
274
|
+
logger.exception("Failed to display workflows")
|
|
275
|
+
|
|
276
|
+
|
|
277
|
+
@workflows_group.command("list")
|
|
278
|
+
@click.option("--global", "-g", "is_global", is_flag=True, help="Show only global workflows")
|
|
279
|
+
@click.option("--json", "as_json", is_flag=True, help="Output as JSON")
|
|
280
|
+
def workflows_list(is_global: bool, as_json: bool):
|
|
281
|
+
"""📋 List all workflows in detail."""
|
|
256
282
|
try:
|
|
257
|
-
# Auto-register current workspace if applicable
|
|
258
283
|
auto_register_current()
|
|
259
|
-
|
|
260
|
-
# Gather stats
|
|
261
284
|
stats = _get_workflow_stats()
|
|
262
285
|
|
|
263
|
-
# JSON output
|
|
264
286
|
if as_json:
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
"registry_updated": stats["registry_updated"],
|
|
275
|
-
},
|
|
276
|
-
"language_counts": stats["language_counts"],
|
|
277
|
-
"workspaces": stats["workspaces"],
|
|
278
|
-
}
|
|
279
|
-
|
|
280
|
-
# Add full workflow details if --all
|
|
281
|
-
if show_all:
|
|
282
|
-
flat_workflows = []
|
|
283
|
-
for workspace_name, workflows in stats["all_workflows"].items():
|
|
284
|
-
for wf in workflows:
|
|
285
|
-
wf["workspace"] = workspace_name
|
|
286
|
-
flat_workflows.append(wf)
|
|
287
|
-
output["workflows"] = flat_workflows
|
|
288
|
-
|
|
289
|
-
click.echo(json.dumps(output, indent=2, default=str))
|
|
290
|
-
return 0
|
|
291
|
-
|
|
292
|
-
# Detailed list mode
|
|
293
|
-
if show_all or is_global:
|
|
287
|
+
flat_workflows = []
|
|
288
|
+
for workspace_name, workflows in stats["all_workflows"].items():
|
|
289
|
+
if is_global and "global" not in workspace_name.lower():
|
|
290
|
+
continue
|
|
291
|
+
for wf in workflows:
|
|
292
|
+
wf["workspace"] = workspace_name
|
|
293
|
+
flat_workflows.append(wf)
|
|
294
|
+
click.echo(json.dumps({"workflows": flat_workflows, "total": len(flat_workflows)}, indent=2, default=str))
|
|
295
|
+
else:
|
|
294
296
|
_render_workflow_list(stats["all_workflows"], is_global)
|
|
295
|
-
return 0
|
|
296
|
-
|
|
297
|
-
# Default: dashboard view
|
|
298
|
-
_render_dashboard(stats)
|
|
299
|
-
return 0
|
|
300
|
-
|
|
301
297
|
except Exception as e:
|
|
302
298
|
console.print(f"[red]Error: {e}[/red]")
|
|
303
|
-
logger.exception("Failed to
|
|
304
|
-
|
|
299
|
+
logger.exception("Failed to list workflows")
|
|
300
|
+
|
|
301
|
+
|
|
302
|
+
@workflows_group.command("add")
|
|
303
|
+
@click.argument("path", required=False, type=click.Path(exists=True))
|
|
304
|
+
@click.option("--name", "-n", help="Custom name for the workspace")
|
|
305
|
+
def workflows_add(path: Optional[str], name: Optional[str]):
|
|
306
|
+
"""➕ Register a workspace (current directory if no path given)."""
|
|
307
|
+
workspace_path = Path(path).resolve() if path else None
|
|
308
|
+
|
|
309
|
+
result = register_workspace(workspace_path, name)
|
|
310
|
+
if result:
|
|
311
|
+
console.print("[green]✅ Workspace registered successfully![/green]")
|
|
312
|
+
console.print(f"[dim]ID: {result}[/dim]")
|
|
313
|
+
console.print("\n[dim]View all workflows with:[/dim]")
|
|
314
|
+
console.print(" mcli self workflows list")
|
|
315
|
+
else:
|
|
316
|
+
console.print("[red]❌ Failed to register workspace[/red]")
|
|
317
|
+
console.print("[dim]Make sure the directory has .mcli/workflows/[/dim]")
|
|
318
|
+
|
|
319
|
+
|
|
320
|
+
@workflows_group.command("remove")
|
|
321
|
+
@click.argument("path", required=False, type=click.Path())
|
|
322
|
+
@click.option("--yes", "-y", is_flag=True, help="Skip confirmation")
|
|
323
|
+
def workflows_remove(path: Optional[str], yes: bool):
|
|
324
|
+
"""➖ Unregister a workspace (current directory if no path given)."""
|
|
325
|
+
from rich.prompt import Confirm
|
|
326
|
+
|
|
327
|
+
workspace_path = Path(path).resolve() if path else None
|
|
328
|
+
|
|
329
|
+
if not yes:
|
|
330
|
+
path_str = str(workspace_path) if workspace_path else "current directory"
|
|
331
|
+
if not Confirm.ask(f"[yellow]Unregister workspace at {path_str}?[/yellow]"):
|
|
332
|
+
console.print("[yellow]Cancelled[/yellow]")
|
|
333
|
+
return
|
|
334
|
+
|
|
335
|
+
if unregister_workspace(workspace_path):
|
|
336
|
+
console.print("[green]✅ Workspace unregistered[/green]")
|
|
337
|
+
else:
|
|
338
|
+
console.print("[red]❌ Failed to unregister workspace[/red]")
|
|
339
|
+
console.print("[dim]Make sure the path is registered[/dim]")
|
|
340
|
+
|
|
341
|
+
|
|
342
|
+
@workflows_group.command("prune")
|
|
343
|
+
@click.option("--yes", "-y", is_flag=True, help="Skip confirmation")
|
|
344
|
+
def workflows_prune(yes: bool):
|
|
345
|
+
"""🧹 Remove workspaces that no longer exist."""
|
|
346
|
+
from rich.prompt import Confirm
|
|
347
|
+
|
|
348
|
+
workspaces = list_registered_workspaces()
|
|
349
|
+
missing = [ws for ws in workspaces if not ws["exists"]]
|
|
350
|
+
|
|
351
|
+
if not missing:
|
|
352
|
+
console.print("[green]✅ All registered workspaces exist[/green]")
|
|
353
|
+
return
|
|
354
|
+
|
|
355
|
+
console.print(f"[yellow]Found {len(missing)} missing workspace(s):[/yellow]")
|
|
356
|
+
for ws in missing:
|
|
357
|
+
console.print(f" - {ws['name']} ({ws['path']})")
|
|
358
|
+
|
|
359
|
+
if not yes:
|
|
360
|
+
if not Confirm.ask("[yellow]Remove these workspaces from registry?[/yellow]"):
|
|
361
|
+
console.print("[yellow]Cancelled[/yellow]")
|
|
362
|
+
return
|
|
363
|
+
|
|
364
|
+
# Remove missing workspaces
|
|
365
|
+
registry = load_registry()
|
|
366
|
+
for ws in missing:
|
|
367
|
+
if ws["id"] in registry.get("workspaces", {}):
|
|
368
|
+
del registry["workspaces"][ws["id"]]
|
|
369
|
+
|
|
370
|
+
if save_registry(registry):
|
|
371
|
+
console.print(f"[green]✅ Removed {len(missing)} missing workspace(s)[/green]")
|
|
372
|
+
else:
|
|
373
|
+
console.print("[red]❌ Failed to update registry[/red]")
|
|
374
|
+
|
|
375
|
+
|
|
376
|
+
# Export the group
|
|
377
|
+
workflows = workflows_group
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mcli-framework
|
|
3
|
-
Version: 8.0.
|
|
3
|
+
Version: 8.0.18
|
|
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>
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|