mcli-framework 8.0.60__tar.gz → 8.0.61__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.60/src/mcli_framework.egg-info → mcli_framework-8.0.61}/PKG-INFO +1 -1
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/pyproject.toml +1 -1
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/ci/act_runner.py +90 -27
- {mcli_framework-8.0.60 → mcli_framework-8.0.61/src/mcli_framework.egg-info}/PKG-INFO +1 -1
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/LICENSE +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/MANIFEST.in +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/README.md +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/llms-full.txt +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/llms.txt +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/mcli_rust/Cargo.toml +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/mcli_rust/src/command_parser.rs +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/mcli_rust/src/file_watcher.rs +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/mcli_rust/src/lib.rs +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/mcli_rust/src/process_manager.rs +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/mcli_rust/src/tfidf.rs +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/setup.cfg +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/__init__.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/__main__.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/app/__init__.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/app/completion_helpers.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/app/context_cmd.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/app/delete_cmd.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/app/edit_cmd.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/app/import_cmd.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/app/init_cmd.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/app/list_cmd.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/app/main.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/app/model/__init__.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/app/model/model.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/app/model_cmd.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/app/mv_cmd.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/app/new_cmd.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/app/search_cmd.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/app/services_cmd.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/app/setup_cmd.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/app/source_sync_cmd.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/app/sync_cmd.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/app/video/__init__.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/app/video/video.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/config.toml +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/__init__.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/api/__init__.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/api/api.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/api/daemon_client.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/api/daemon_client_local.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/api/daemon_decorator.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/api/mcli_decorators.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/auth/__init__.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/auth/auth.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/auth/aws_manager.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/auth/azure_manager.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/auth/credential_manager.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/auth/gcp_manager.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/auth/key_manager.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/auth/mcli_manager.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/auth/token_manager.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/auth/token_util.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/config/__init__.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/config/config.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/config/settings.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/constants/__init__.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/constants/commands.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/constants/defaults.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/constants/env.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/constants/messages.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/constants/paths.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/constants/scripts.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/constants/storage.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/custom_commands.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/discovery/__init__.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/discovery/command_discovery.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/erd/__init__.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/erd/erd.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/erd/generate_graph.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/errors.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/feature_detection.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/files/__init__.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/files/files.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/folder_workflows.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/fs/__init__.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/fs/fs.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/ipfs_sync.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/ipfs_utils.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/ipns_manager.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/lib.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/logger/__init__.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/logger/correlation.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/logger/logger.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/logger/structured.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/optional_deps.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/paths.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/performance/__init__.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/performance/optimizer.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/performance/rust_bridge.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/performance/uvloop_config.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/pickles/__init__.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/pickles/pickles.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/pyenv/__init__.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/pyenv/deps.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/pyenv/manager.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/pyenv/venv.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/script_loader.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/script_sync.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/script_watcher.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/search/cached_vectorizer.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/secrets/__init__.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/secrets/commands.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/secrets/manager.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/secrets/repl.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/secrets/store.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/services/__init__.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/services/config.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/services/data_pipeline.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/services/health.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/services/lsh_client.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/services/manager.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/services/redis_service.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/services/registry.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/services/state.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/services/supervisor.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/shell/__init__.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/shell/exceptions.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/shell/shell.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/sync_key_store.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/templates/__init__.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/templates/command_templates.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/toml/__init__.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/toml/toml.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/types.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/ui/styling.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/ui/visual_effects.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/watcher/__init__.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/watcher/watcher.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/workflow_models.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/workspace_registry.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/mygroup/__init__.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/mygroup/test_cmd.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/public/__init__.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/public/commands/__init__.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/public/oi/oi.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/public/public.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/self/__init__.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/self/completion_cmd.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/self/env_cmd.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/self/health_cmd.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/self/ipfs_cmd.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/self/logs_cmd.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/self/migrate_cmd.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/self/release_notes_cmd.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/self/self_cmd.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/self/store_cmd.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/self/test_cmd.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/self/workflows_cmd.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/storage/__init__.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/storage/backends/__init__.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/storage/backends/ipfs_backend.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/storage/base.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/storage/cache.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/storage/encryption.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/storage/factory.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/storage/registry.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/storage/storacha_cli.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/__init__.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/ci/__init__.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/ci/ci.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/ci/runner_status.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/ci/workflow_transform.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/daemon/__init__.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/daemon/async_command_database.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/daemon/async_process_manager.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/daemon/client.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/daemon/daemon.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/daemon/daemon_api.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/daemon/enhanced_daemon.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/daemon/process_cli.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/daemon/process_manager.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/daemon/test_daemon.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/doc_convert.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/docker/__init__.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/docker/docker.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/file/__init__.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/gcloud/__init__.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/gcloud/config.toml +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/gcloud/gcloud.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/git_commit/__init__.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/git_commit/ai_service.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/interview/__init__.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/lsh_integration.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/model_service/client.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/model_service/download_and_run_efficient_models.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/model_service/lightweight_embedder.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/model_service/lightweight_model_server.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/model_service/lightweight_test.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/model_service/model_service.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/model_service/ollama_efficient_runner.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/model_service/openai_adapter.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/model_service/pdf_processor.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/model_service/test_efficient_runner.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/model_service/test_example.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/model_service/test_integration.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/model_service/test_new_features.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/notebook/__init__.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/notebook/command_loader.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/notebook/converter.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/notebook/executor.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/notebook/notebook_cmd.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/notebook/schema.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/notebook/validator.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/openai/openai.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/registry/__init__.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/registry/registry.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/repo/__init__.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/repo/repo.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/scheduler/__init__.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/scheduler/cron_parser.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/scheduler/job.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/scheduler/models.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/scheduler/monitor.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/scheduler/persistence.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/scheduler/scheduler.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/scheduler/validation.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/search/__init__.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/secrets/__init__.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/secrets/secrets_cmd.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/storage/__init__.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/storage/storage_cmd.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/sync/__init__.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/sync/test_cmd.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/videos/__init__.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/wakatime/__init__.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/wakatime/wakatime.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/workflow.py +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli_framework.egg-info/SOURCES.txt +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli_framework.egg-info/dependency_links.txt +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli_framework.egg-info/entry_points.txt +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli_framework.egg-info/requires.txt +0 -0
- {mcli_framework-8.0.60 → mcli_framework-8.0.61}/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.61
|
|
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.61"
|
|
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"
|
|
@@ -28,13 +28,14 @@ _NO_STAGES_MARKERS = ("could not find any stages to run",)
|
|
|
28
28
|
_RETRY_BACKOFF = (15, 45)
|
|
29
29
|
_MAX_RETRIES = 2
|
|
30
30
|
|
|
31
|
-
# Canonical CI entrypoint created by `mcli ci migrate`: ci.yml
|
|
32
|
-
#
|
|
33
|
-
# `
|
|
34
|
-
#
|
|
35
|
-
# must drive it through this caller.
|
|
31
|
+
# Canonical CI entrypoint created by `mcli ci migrate`: ci.yml runs on
|
|
32
|
+
# `workflow_dispatch`. The job id is NOT fixed (`mcli ci migrate` keeps the
|
|
33
|
+
# repo's original job name, e.g. `test`) — so preflight discovers the real job
|
|
34
|
+
# id(s) from `act --list` rather than assuming a hardcoded name.
|
|
36
35
|
_DISPATCH_WORKFLOW = Path(".github/workflows/ci.yml")
|
|
37
|
-
|
|
36
|
+
|
|
37
|
+
# Header label of the job-id column in `act --list` table output.
|
|
38
|
+
_JOB_ID_HEADER = "Job ID"
|
|
38
39
|
|
|
39
40
|
|
|
40
41
|
class PreflightResult(Enum):
|
|
@@ -115,13 +116,53 @@ def default_container_arch() -> str | None:
|
|
|
115
116
|
return None
|
|
116
117
|
|
|
117
118
|
|
|
118
|
-
def
|
|
119
|
-
"""The canonical
|
|
119
|
+
def dispatch_workflow() -> str | None:
|
|
120
|
+
"""The canonical workflow file to drive via `workflow_dispatch`, or None."""
|
|
120
121
|
if _DISPATCH_WORKFLOW.exists():
|
|
121
|
-
return
|
|
122
|
+
return str(_DISPATCH_WORKFLOW)
|
|
122
123
|
return None
|
|
123
124
|
|
|
124
125
|
|
|
126
|
+
def list_jobs(event: str, workflow: str | None = None) -> list[str]:
|
|
127
|
+
"""Real job ids act would run for `event`, parsed from the `act --list` table.
|
|
128
|
+
|
|
129
|
+
`act --list` prints a table whose first row is a header containing a `Job ID`
|
|
130
|
+
column; each subsequent row is a runnable job. Returns job ids in table order
|
|
131
|
+
(deduplicated). Returns ``[]`` when act lists no jobs for the event (including
|
|
132
|
+
the "could not find any stages" no-op) or when act can't be invoked — never
|
|
133
|
+
raises, so callers can treat an empty result as "nothing to run".
|
|
134
|
+
"""
|
|
135
|
+
cmd = ["act", event, "--list"]
|
|
136
|
+
if workflow is not None:
|
|
137
|
+
cmd += ["-W", workflow]
|
|
138
|
+
try:
|
|
139
|
+
proc = subprocess.run(cmd, capture_output=True, text=True, timeout=120)
|
|
140
|
+
except (FileNotFoundError, subprocess.TimeoutExpired):
|
|
141
|
+
return []
|
|
142
|
+
return _parse_job_ids(proc.stdout or "")
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
def _parse_job_ids(listing: str) -> list[str]:
|
|
146
|
+
"""Extract the `Job ID` column from `act --list` table output."""
|
|
147
|
+
lines = [ln for ln in listing.splitlines() if ln.strip()]
|
|
148
|
+
if not lines:
|
|
149
|
+
return []
|
|
150
|
+
header = lines[0]
|
|
151
|
+
if _JOB_ID_HEADER not in header:
|
|
152
|
+
return []
|
|
153
|
+
# Columns are whitespace-separated; the job id is the second field in act's
|
|
154
|
+
# fixed-order table (Stage, Job ID, Job name, ...).
|
|
155
|
+
col = header.split().index(_JOB_ID_HEADER.split()[1]) - 1
|
|
156
|
+
job_ids: list[str] = []
|
|
157
|
+
for row in lines[1:]:
|
|
158
|
+
fields = row.split()
|
|
159
|
+
if len(fields) > col:
|
|
160
|
+
jid = fields[col]
|
|
161
|
+
if jid not in job_ids:
|
|
162
|
+
job_ids.append(jid)
|
|
163
|
+
return job_ids
|
|
164
|
+
|
|
165
|
+
|
|
125
166
|
def build_act_command(
|
|
126
167
|
event: str,
|
|
127
168
|
workflow: str | None = None,
|
|
@@ -194,35 +235,57 @@ def run_act(
|
|
|
194
235
|
|
|
195
236
|
Migrated repos are ``workflow_dispatch``-only, so the default
|
|
196
237
|
``pull_request`` event matches no jobs. Rather than hollow-pass, fall back
|
|
197
|
-
to the canonical ``ci.yml``
|
|
198
|
-
|
|
238
|
+
to the canonical ``ci.yml`` on ``workflow_dispatch``: discover its real job
|
|
239
|
+
id(s) via ``act --list`` (the job name is NOT fixed — ``mcli ci migrate``
|
|
240
|
+
keeps the repo's original name) and run each so the gate validates for real.
|
|
241
|
+
|
|
242
|
+
A green result means act actually executed ≥1 job and every job passed. If
|
|
243
|
+
``act --list`` shows jobs but a run reports "could not find any stages"
|
|
244
|
+
(i.e. act ran nothing), that is a FAILURE, not a no-op — never a hollow pass.
|
|
199
245
|
"""
|
|
200
246
|
arch = default_container_arch()
|
|
201
247
|
result, output = _run_with_retries(build_act_command(event, arch=arch), retries, backoff)
|
|
202
248
|
|
|
203
|
-
if result == PreflightResult.PASS and _has_no_stages(output):
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
)
|
|
210
|
-
return PreflightResult.PASS
|
|
211
|
-
workflow, job = entry
|
|
249
|
+
if not (result == PreflightResult.PASS and _has_no_stages(output)):
|
|
250
|
+
return result
|
|
251
|
+
|
|
252
|
+
# No stages for the requested event — try the workflow_dispatch entrypoint.
|
|
253
|
+
workflow = dispatch_workflow()
|
|
254
|
+
if workflow is None:
|
|
212
255
|
sys.stdout.write(
|
|
213
|
-
|
|
214
|
-
|
|
256
|
+
"ℹ️ No act stages for this event and no ci.yml dispatch "
|
|
257
|
+
"entrypoint — nothing to validate; treating as pass.\n"
|
|
215
258
|
)
|
|
259
|
+
return PreflightResult.PASS
|
|
260
|
+
|
|
261
|
+
jobs = list_jobs("workflow_dispatch", workflow)
|
|
262
|
+
if not jobs:
|
|
263
|
+
# The dispatch entrypoint genuinely has no jobs — a real no-op.
|
|
264
|
+
sys.stdout.write(
|
|
265
|
+
f"ℹ️ {workflow} has no workflow_dispatch jobs — nothing to "
|
|
266
|
+
"validate; treating as pass.\n"
|
|
267
|
+
)
|
|
268
|
+
return PreflightResult.PASS
|
|
269
|
+
|
|
270
|
+
targets = f"{workflow} {jobs}"
|
|
271
|
+
sys.stdout.write(
|
|
272
|
+
f"ℹ️ No '{event}' stages (workflow_dispatch-only); running "
|
|
273
|
+
f"{targets} via workflow_dispatch…\n"
|
|
274
|
+
)
|
|
275
|
+
for job in jobs:
|
|
216
276
|
result, output = _run_with_retries(
|
|
217
277
|
build_act_command("workflow_dispatch", workflow=workflow, job=job, arch=arch),
|
|
218
278
|
retries,
|
|
219
279
|
backoff,
|
|
220
280
|
)
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
281
|
+
if result == PreflightResult.UNREACHABLE:
|
|
282
|
+
return PreflightResult.UNREACHABLE
|
|
283
|
+
# We KNOW this job exists (it came from `act --list`), so "no stages"
|
|
284
|
+
# here means act ran nothing — a failure, not a no-op. Do not pass.
|
|
285
|
+
if result != PreflightResult.PASS or _has_no_stages(output):
|
|
286
|
+
return PreflightResult.FAIL
|
|
287
|
+
|
|
288
|
+
return PreflightResult.PASS
|
|
226
289
|
|
|
227
290
|
|
|
228
291
|
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.61
|
|
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
|
|
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
|
|
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
|
{mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/daemon/async_command_database.py
RENAMED
|
File without changes
|
{mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/daemon/async_process_manager.py
RENAMED
|
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
|
{mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/model_service/lightweight_test.py
RENAMED
|
File without changes
|
{mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/model_service/model_service.py
RENAMED
|
File without changes
|
|
File without changes
|
{mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/model_service/openai_adapter.py
RENAMED
|
File without changes
|
{mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/model_service/pdf_processor.py
RENAMED
|
File without changes
|
|
File without changes
|
{mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/model_service/test_example.py
RENAMED
|
File without changes
|
{mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/model_service/test_integration.py
RENAMED
|
File without changes
|
{mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/model_service/test_new_features.py
RENAMED
|
File without changes
|
|
File without changes
|
{mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/notebook/command_loader.py
RENAMED
|
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
|
{mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli_framework.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
{mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli_framework.egg-info/entry_points.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|