mcli-framework 8.0.56__tar.gz → 8.0.57__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.56/src/mcli_framework.egg-info → mcli_framework-8.0.57}/PKG-INFO +1 -1
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/pyproject.toml +1 -1
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/self/self_cmd.py +4 -4
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/workflow/ci/act_runner.py +98 -29
- {mcli_framework-8.0.56 → mcli_framework-8.0.57/src/mcli_framework.egg-info}/PKG-INFO +1 -1
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli_framework.egg-info/SOURCES.txt +0 -5
- mcli_framework-8.0.56/src/mcli/app/commands_cmd.py +0 -1994
- mcli_framework-8.0.56/src/mcli/app/create_cmd.py +0 -442
- mcli_framework-8.0.56/src/mcli/app/migrate_cmd.py +0 -395
- mcli_framework-8.0.56/src/mcli/app/remove_cmd.py +0 -60
- mcli_framework-8.0.56/src/mcli/app/rm_cmd.py +0 -107
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/LICENSE +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/MANIFEST.in +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/README.md +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/llms-full.txt +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/llms.txt +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/mcli_rust/Cargo.toml +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/mcli_rust/src/command_parser.rs +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/mcli_rust/src/file_watcher.rs +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/mcli_rust/src/lib.rs +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/mcli_rust/src/process_manager.rs +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/mcli_rust/src/tfidf.rs +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/setup.cfg +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/__init__.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/__main__.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/app/__init__.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/app/completion_helpers.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/app/context_cmd.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/app/delete_cmd.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/app/edit_cmd.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/app/import_cmd.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/app/init_cmd.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/app/list_cmd.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/app/main.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/app/model/__init__.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/app/model/model.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/app/model_cmd.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/app/mv_cmd.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/app/new_cmd.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/app/search_cmd.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/app/services_cmd.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/app/setup_cmd.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/app/source_sync_cmd.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/app/sync_cmd.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/app/video/__init__.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/app/video/video.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/config.toml +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/__init__.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/api/__init__.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/api/api.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/api/daemon_client.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/api/daemon_client_local.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/api/daemon_decorator.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/api/mcli_decorators.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/auth/__init__.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/auth/auth.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/auth/aws_manager.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/auth/azure_manager.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/auth/credential_manager.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/auth/gcp_manager.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/auth/key_manager.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/auth/mcli_manager.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/auth/token_manager.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/auth/token_util.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/config/__init__.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/config/config.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/config/settings.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/constants/__init__.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/constants/commands.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/constants/defaults.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/constants/env.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/constants/messages.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/constants/paths.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/constants/scripts.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/constants/storage.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/custom_commands.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/discovery/__init__.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/discovery/command_discovery.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/erd/__init__.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/erd/erd.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/erd/generate_graph.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/errors.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/feature_detection.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/files/__init__.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/files/files.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/folder_workflows.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/fs/__init__.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/fs/fs.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/ipfs_sync.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/ipfs_utils.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/ipns_manager.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/lib.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/logger/__init__.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/logger/correlation.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/logger/logger.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/logger/structured.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/optional_deps.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/paths.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/performance/__init__.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/performance/optimizer.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/performance/rust_bridge.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/performance/uvloop_config.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/pickles/__init__.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/pickles/pickles.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/pyenv/__init__.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/pyenv/deps.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/pyenv/manager.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/pyenv/venv.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/script_loader.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/script_sync.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/script_watcher.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/search/cached_vectorizer.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/secrets/__init__.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/secrets/commands.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/secrets/manager.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/secrets/repl.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/secrets/store.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/services/__init__.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/services/config.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/services/data_pipeline.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/services/health.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/services/lsh_client.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/services/manager.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/services/redis_service.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/services/registry.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/services/state.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/services/supervisor.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/shell/__init__.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/shell/exceptions.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/shell/shell.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/sync_key_store.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/templates/__init__.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/templates/command_templates.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/toml/__init__.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/toml/toml.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/types.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/ui/styling.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/ui/visual_effects.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/watcher/__init__.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/watcher/watcher.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/workflow_models.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/lib/workspace_registry.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/mygroup/__init__.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/mygroup/test_cmd.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/public/__init__.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/public/commands/__init__.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/public/oi/oi.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/public/public.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/self/__init__.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/self/completion_cmd.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/self/env_cmd.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/self/health_cmd.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/self/ipfs_cmd.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/self/logs_cmd.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/self/migrate_cmd.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/self/release_notes_cmd.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/self/store_cmd.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/self/test_cmd.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/self/workflows_cmd.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/storage/__init__.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/storage/backends/__init__.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/storage/backends/ipfs_backend.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/storage/base.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/storage/cache.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/storage/encryption.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/storage/factory.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/storage/registry.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/storage/storacha_cli.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/workflow/__init__.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/workflow/ci/__init__.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/workflow/ci/ci.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/workflow/ci/runner_status.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/workflow/ci/workflow_transform.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/workflow/daemon/__init__.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/workflow/daemon/async_command_database.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/workflow/daemon/async_process_manager.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/workflow/daemon/client.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/workflow/daemon/daemon.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/workflow/daemon/daemon_api.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/workflow/daemon/enhanced_daemon.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/workflow/daemon/process_cli.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/workflow/daemon/process_manager.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/workflow/daemon/test_daemon.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/workflow/doc_convert.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/workflow/docker/__init__.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/workflow/docker/docker.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/workflow/file/__init__.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/workflow/gcloud/__init__.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/workflow/gcloud/config.toml +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/workflow/gcloud/gcloud.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/workflow/git_commit/__init__.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/workflow/git_commit/ai_service.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/workflow/interview/__init__.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/workflow/lsh_integration.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/workflow/model_service/client.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/workflow/model_service/download_and_run_efficient_models.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/workflow/model_service/lightweight_embedder.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/workflow/model_service/lightweight_model_server.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/workflow/model_service/lightweight_test.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/workflow/model_service/model_service.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/workflow/model_service/ollama_efficient_runner.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/workflow/model_service/openai_adapter.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/workflow/model_service/pdf_processor.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/workflow/model_service/test_efficient_runner.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/workflow/model_service/test_example.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/workflow/model_service/test_integration.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/workflow/model_service/test_new_features.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/workflow/notebook/__init__.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/workflow/notebook/command_loader.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/workflow/notebook/converter.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/workflow/notebook/executor.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/workflow/notebook/notebook_cmd.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/workflow/notebook/schema.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/workflow/notebook/validator.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/workflow/openai/openai.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/workflow/registry/__init__.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/workflow/registry/registry.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/workflow/repo/__init__.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/workflow/repo/repo.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/workflow/scheduler/__init__.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/workflow/scheduler/cron_parser.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/workflow/scheduler/job.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/workflow/scheduler/models.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/workflow/scheduler/monitor.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/workflow/scheduler/persistence.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/workflow/scheduler/scheduler.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/workflow/scheduler/validation.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/workflow/search/__init__.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/workflow/secrets/__init__.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/workflow/secrets/secrets_cmd.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/workflow/storage/__init__.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/workflow/storage/storage_cmd.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/workflow/sync/__init__.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/workflow/sync/test_cmd.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/workflow/videos/__init__.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/workflow/wakatime/__init__.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/workflow/wakatime/wakatime.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli/workflow/workflow.py +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli_framework.egg-info/dependency_links.txt +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli_framework.egg-info/entry_points.txt +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli_framework.egg-info/requires.txt +0 -0
- {mcli_framework-8.0.56 → mcli_framework-8.0.57}/src/mcli_framework.egg-info/top_level.txt +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.57
|
|
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.57"
|
|
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"
|
|
@@ -141,7 +141,7 @@ def restore_command_state(hash_value):
|
|
|
141
141
|
|
|
142
142
|
|
|
143
143
|
# On CLI startup, check and update lockfile if needed
|
|
144
|
-
# NOTE: The commands group
|
|
144
|
+
# NOTE: The commands group was removed in the v8.0.0 CLI simplification
|
|
145
145
|
|
|
146
146
|
|
|
147
147
|
def check_and_update_command_lockfile():
|
|
@@ -217,7 +217,7 @@ def {name}_command(name: str = "World"):
|
|
|
217
217
|
return template
|
|
218
218
|
|
|
219
219
|
|
|
220
|
-
# NOTE: search command
|
|
220
|
+
# NOTE: search command was removed in the v8.0.0 CLI simplification
|
|
221
221
|
|
|
222
222
|
|
|
223
223
|
def collect_commands() -> list[dict[str, Any]]:
|
|
@@ -471,7 +471,7 @@ logger = get_logger()
|
|
|
471
471
|
pass
|
|
472
472
|
|
|
473
473
|
|
|
474
|
-
# NOTE: extract-workflow-commands
|
|
474
|
+
# NOTE: extract-workflow-commands was removed in the v8.0.0 CLI simplification
|
|
475
475
|
|
|
476
476
|
|
|
477
477
|
@self_app.command("version")
|
|
@@ -800,7 +800,7 @@ try:
|
|
|
800
800
|
except ImportError as e:
|
|
801
801
|
logger.debug(f"Could not load release-notes command: {e}")
|
|
802
802
|
|
|
803
|
-
# NOTE: store command
|
|
803
|
+
# NOTE: store command was removed in the v8.0.0 CLI simplification
|
|
804
804
|
|
|
805
805
|
# This part is important to make the command available to the CLI
|
|
806
806
|
if __name__ == "__main__":
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
|
+
import platform
|
|
5
6
|
import shutil
|
|
6
7
|
import subprocess
|
|
7
8
|
import sys
|
|
@@ -27,6 +28,14 @@ _NO_STAGES_MARKERS = ("could not find any stages to run",)
|
|
|
27
28
|
_RETRY_BACKOFF = (15, 45)
|
|
28
29
|
_MAX_RETRIES = 2
|
|
29
30
|
|
|
31
|
+
# Canonical CI entrypoint created by `mcli ci migrate`: ci.yml's `primary` job
|
|
32
|
+
# runs on `workflow_dispatch` and calls the reusable `_ci-jobs.yml` with the
|
|
33
|
+
# `runner_labels` input. The reusable workflow CANNOT run standalone (its
|
|
34
|
+
# `runs-on: ${{ fromJSON(inputs.runner_labels) }}` has no value), so preflight
|
|
35
|
+
# must drive it through this caller.
|
|
36
|
+
_DISPATCH_WORKFLOW = Path(".github/workflows/ci.yml")
|
|
37
|
+
_DISPATCH_JOB = "primary"
|
|
38
|
+
|
|
30
39
|
|
|
31
40
|
class PreflightResult(Enum):
|
|
32
41
|
PASS = "pass"
|
|
@@ -67,48 +76,63 @@ def probe() -> bool:
|
|
|
67
76
|
return proc.returncode == 0
|
|
68
77
|
|
|
69
78
|
|
|
70
|
-
def
|
|
79
|
+
def default_container_arch() -> str | None:
|
|
80
|
+
"""`--container-architecture` value for the host, or None to let act decide.
|
|
81
|
+
|
|
82
|
+
act's runner images are amd64. On Apple-silicon (darwin/arm64) act warns and
|
|
83
|
+
misbehaves unless told to emulate amd64, so force it; native amd64 Linux
|
|
84
|
+
needs nothing.
|
|
85
|
+
"""
|
|
86
|
+
if sys.platform == "darwin" and platform.machine() in ("arm64", "aarch64"):
|
|
87
|
+
return "linux/amd64"
|
|
88
|
+
return None
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
def dispatch_entrypoint() -> tuple[str, str] | None:
|
|
92
|
+
"""The canonical (workflow, job) to drive via `workflow_dispatch`, or None."""
|
|
93
|
+
if _DISPATCH_WORKFLOW.exists():
|
|
94
|
+
return (str(_DISPATCH_WORKFLOW), _DISPATCH_JOB)
|
|
95
|
+
return None
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
def build_act_command(
|
|
99
|
+
event: str,
|
|
100
|
+
workflow: str | None = None,
|
|
101
|
+
job: str | None = None,
|
|
102
|
+
arch: str | None = None,
|
|
103
|
+
) -> list[str]:
|
|
71
104
|
cmd = ["act", event]
|
|
105
|
+
if workflow is not None:
|
|
106
|
+
cmd += ["-W", workflow]
|
|
107
|
+
if job is not None:
|
|
108
|
+
cmd += ["-j", job]
|
|
109
|
+
if arch is not None:
|
|
110
|
+
cmd += ["--container-architecture", arch]
|
|
72
111
|
if Path(".secrets").exists():
|
|
73
112
|
cmd += ["--secret-file", ".secrets"]
|
|
74
113
|
return cmd
|
|
75
114
|
|
|
76
115
|
|
|
77
|
-
def
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
- exit 0 -> PASS.
|
|
85
|
-
- non-zero whose output shows a Docker Hub pull rate limit
|
|
86
|
-
(``toomanyrequests``) -> retry up to ``retries`` times with backoff;
|
|
87
|
-
if still rate-limited, return UNREACHABLE (cannot validate — an
|
|
88
|
-
environment problem, not a test failure, so the gate must not block).
|
|
89
|
-
- any other non-zero exit -> FAIL.
|
|
90
|
-
|
|
91
|
-
Output is captured (to detect the rate limit) and echoed so the user still
|
|
92
|
-
sees act's progress.
|
|
93
|
-
"""
|
|
116
|
+
def _run_with_retries(
|
|
117
|
+
cmd: list[str], retries: int, backoff: tuple[int, ...]
|
|
118
|
+
) -> tuple[PreflightResult, str]:
|
|
119
|
+
"""Run one act command, retrying on Docker Hub rate limits. Returns the
|
|
120
|
+
classified result plus the combined output (so the caller can detect the
|
|
121
|
+
'no stages' no-op and decide whether to fall back)."""
|
|
94
122
|
attempt = 0
|
|
95
123
|
while True:
|
|
96
|
-
proc = subprocess.run(
|
|
124
|
+
proc = subprocess.run(cmd, capture_output=True, text=True)
|
|
97
125
|
output = (proc.stdout or "") + (proc.stderr or "")
|
|
98
126
|
if output:
|
|
99
127
|
sys.stdout.write(output if output.endswith("\n") else output + "\n")
|
|
100
128
|
|
|
101
129
|
if proc.returncode == 0:
|
|
102
|
-
return PreflightResult.PASS
|
|
130
|
+
return PreflightResult.PASS, output
|
|
103
131
|
|
|
104
|
-
# No job matches this event (e.g. workflow_dispatch-only)
|
|
105
|
-
#
|
|
132
|
+
# No job matches this event (e.g. workflow_dispatch-only). PASS here is
|
|
133
|
+
# provisional — run_act decides whether a dispatch fallback exists.
|
|
106
134
|
if _has_no_stages(output):
|
|
107
|
-
|
|
108
|
-
"ℹ️ No act stages for this event (workflow_dispatch-only?); "
|
|
109
|
-
"nothing to validate — treating as pass.\n"
|
|
110
|
-
)
|
|
111
|
-
return PreflightResult.PASS
|
|
135
|
+
return PreflightResult.PASS, output
|
|
112
136
|
|
|
113
137
|
if _is_docker_rate_limited(output):
|
|
114
138
|
if attempt < retries:
|
|
@@ -124,9 +148,54 @@ def run_act(
|
|
|
124
148
|
"⚠️ Docker Hub still rate-limited after retries — cannot validate "
|
|
125
149
|
"locally; allowing push (run `mcli ci preflight` again later).\n"
|
|
126
150
|
)
|
|
127
|
-
return PreflightResult.UNREACHABLE
|
|
151
|
+
return PreflightResult.UNREACHABLE, output
|
|
152
|
+
|
|
153
|
+
return PreflightResult.FAIL, output
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
def run_act(
|
|
157
|
+
event: str = "pull_request",
|
|
158
|
+
retries: int = _MAX_RETRIES,
|
|
159
|
+
backoff: tuple[int, ...] = _RETRY_BACKOFF,
|
|
160
|
+
) -> PreflightResult:
|
|
161
|
+
"""Run act for `event` and classify the outcome.
|
|
162
|
+
|
|
163
|
+
- exit 0 -> PASS.
|
|
164
|
+
- non-zero whose output shows a Docker Hub pull rate limit
|
|
165
|
+
(``toomanyrequests``) -> retried; if still limited, UNREACHABLE.
|
|
166
|
+
- any other non-zero exit -> FAIL.
|
|
167
|
+
|
|
168
|
+
Migrated repos are ``workflow_dispatch``-only, so the default
|
|
169
|
+
``pull_request`` event matches no jobs. Rather than hollow-pass, fall back
|
|
170
|
+
to the canonical ``ci.yml`` ``primary`` job on ``workflow_dispatch`` (which
|
|
171
|
+
drives the reusable ``_ci-jobs.yml``) and validate for real.
|
|
172
|
+
"""
|
|
173
|
+
arch = default_container_arch()
|
|
174
|
+
result, output = _run_with_retries(build_act_command(event, arch=arch), retries, backoff)
|
|
175
|
+
|
|
176
|
+
if result == PreflightResult.PASS and _has_no_stages(output):
|
|
177
|
+
entry = dispatch_entrypoint()
|
|
178
|
+
if entry is None:
|
|
179
|
+
sys.stdout.write(
|
|
180
|
+
"ℹ️ No act stages for this event and no ci.yml dispatch "
|
|
181
|
+
"entrypoint — nothing to validate; treating as pass.\n"
|
|
182
|
+
)
|
|
183
|
+
return PreflightResult.PASS
|
|
184
|
+
workflow, job = entry
|
|
185
|
+
sys.stdout.write(
|
|
186
|
+
f"ℹ️ No '{event}' stages (workflow_dispatch-only); running "
|
|
187
|
+
f"{workflow} -j {job} via workflow_dispatch…\n"
|
|
188
|
+
)
|
|
189
|
+
result, output = _run_with_retries(
|
|
190
|
+
build_act_command("workflow_dispatch", workflow=workflow, job=job, arch=arch),
|
|
191
|
+
retries,
|
|
192
|
+
backoff,
|
|
193
|
+
)
|
|
194
|
+
# If even the dispatch entrypoint has no stages, it's a genuine no-op.
|
|
195
|
+
if result == PreflightResult.PASS and _has_no_stages(output):
|
|
196
|
+
return PreflightResult.PASS
|
|
128
197
|
|
|
129
|
-
|
|
198
|
+
return result
|
|
130
199
|
|
|
131
200
|
|
|
132
201
|
def preflight(repo_slug: str, event: str = "pull_request") -> PreflightResult:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mcli-framework
|
|
3
|
-
Version: 8.0.
|
|
3
|
+
Version: 8.0.57
|
|
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>
|
|
@@ -15,22 +15,17 @@ src/mcli/__init__.py
|
|
|
15
15
|
src/mcli/__main__.py
|
|
16
16
|
src/mcli/config.toml
|
|
17
17
|
src/mcli/app/__init__.py
|
|
18
|
-
src/mcli/app/commands_cmd.py
|
|
19
18
|
src/mcli/app/completion_helpers.py
|
|
20
19
|
src/mcli/app/context_cmd.py
|
|
21
|
-
src/mcli/app/create_cmd.py
|
|
22
20
|
src/mcli/app/delete_cmd.py
|
|
23
21
|
src/mcli/app/edit_cmd.py
|
|
24
22
|
src/mcli/app/import_cmd.py
|
|
25
23
|
src/mcli/app/init_cmd.py
|
|
26
24
|
src/mcli/app/list_cmd.py
|
|
27
25
|
src/mcli/app/main.py
|
|
28
|
-
src/mcli/app/migrate_cmd.py
|
|
29
26
|
src/mcli/app/model_cmd.py
|
|
30
27
|
src/mcli/app/mv_cmd.py
|
|
31
28
|
src/mcli/app/new_cmd.py
|
|
32
|
-
src/mcli/app/remove_cmd.py
|
|
33
|
-
src/mcli/app/rm_cmd.py
|
|
34
29
|
src/mcli/app/search_cmd.py
|
|
35
30
|
src/mcli/app/services_cmd.py
|
|
36
31
|
src/mcli/app/setup_cmd.py
|