mcli-framework 8.0.61__tar.gz → 8.0.62__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.61/src/mcli_framework.egg-info → mcli_framework-8.0.62}/PKG-INFO +1 -1
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/pyproject.toml +1 -1
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/constants/defaults.py +1 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/constants/messages.py +4 -0
- mcli_framework-8.0.62/src/mcli/lib/workflow_runtime.py +100 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/workflow.py +3 -2
- {mcli_framework-8.0.61 → mcli_framework-8.0.62/src/mcli_framework.egg-info}/PKG-INFO +1 -1
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli_framework.egg-info/SOURCES.txt +1 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/LICENSE +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/MANIFEST.in +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/README.md +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/llms-full.txt +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/llms.txt +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/mcli_rust/Cargo.toml +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/mcli_rust/src/command_parser.rs +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/mcli_rust/src/file_watcher.rs +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/mcli_rust/src/lib.rs +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/mcli_rust/src/process_manager.rs +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/mcli_rust/src/tfidf.rs +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/setup.cfg +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/__init__.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/__main__.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/app/__init__.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/app/completion_helpers.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/app/context_cmd.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/app/delete_cmd.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/app/edit_cmd.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/app/import_cmd.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/app/init_cmd.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/app/list_cmd.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/app/main.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/app/model/__init__.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/app/model/model.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/app/model_cmd.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/app/mv_cmd.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/app/new_cmd.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/app/search_cmd.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/app/services_cmd.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/app/setup_cmd.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/app/source_sync_cmd.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/app/sync_cmd.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/app/video/__init__.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/app/video/video.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/config.toml +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/__init__.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/api/__init__.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/api/api.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/api/daemon_client.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/api/daemon_client_local.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/api/daemon_decorator.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/api/mcli_decorators.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/auth/__init__.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/auth/auth.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/auth/aws_manager.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/auth/azure_manager.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/auth/credential_manager.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/auth/gcp_manager.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/auth/key_manager.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/auth/mcli_manager.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/auth/token_manager.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/auth/token_util.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/config/__init__.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/config/config.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/config/settings.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/constants/__init__.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/constants/commands.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/constants/env.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/constants/paths.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/constants/scripts.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/constants/storage.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/custom_commands.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/discovery/__init__.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/discovery/command_discovery.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/erd/__init__.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/erd/erd.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/erd/generate_graph.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/errors.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/feature_detection.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/files/__init__.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/files/files.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/folder_workflows.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/fs/__init__.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/fs/fs.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/ipfs_sync.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/ipfs_utils.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/ipns_manager.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/lib.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/logger/__init__.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/logger/correlation.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/logger/logger.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/logger/structured.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/optional_deps.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/paths.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/performance/__init__.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/performance/optimizer.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/performance/rust_bridge.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/performance/uvloop_config.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/pickles/__init__.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/pickles/pickles.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/pyenv/__init__.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/pyenv/deps.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/pyenv/manager.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/pyenv/venv.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/script_loader.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/script_sync.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/script_watcher.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/search/cached_vectorizer.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/secrets/__init__.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/secrets/commands.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/secrets/manager.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/secrets/repl.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/secrets/store.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/services/__init__.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/services/config.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/services/data_pipeline.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/services/health.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/services/lsh_client.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/services/manager.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/services/redis_service.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/services/registry.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/services/state.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/services/supervisor.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/shell/__init__.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/shell/exceptions.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/shell/shell.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/sync_key_store.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/templates/__init__.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/templates/command_templates.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/toml/__init__.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/toml/toml.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/types.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/ui/styling.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/ui/visual_effects.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/watcher/__init__.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/watcher/watcher.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/workflow_models.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/workspace_registry.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/mygroup/__init__.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/mygroup/test_cmd.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/public/__init__.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/public/commands/__init__.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/public/oi/oi.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/public/public.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/self/__init__.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/self/completion_cmd.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/self/env_cmd.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/self/health_cmd.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/self/ipfs_cmd.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/self/logs_cmd.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/self/migrate_cmd.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/self/release_notes_cmd.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/self/self_cmd.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/self/store_cmd.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/self/test_cmd.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/self/workflows_cmd.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/storage/__init__.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/storage/backends/__init__.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/storage/backends/ipfs_backend.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/storage/base.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/storage/cache.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/storage/encryption.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/storage/factory.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/storage/registry.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/storage/storacha_cli.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/__init__.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/ci/__init__.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/ci/act_runner.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/ci/ci.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/ci/runner_status.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/ci/workflow_transform.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/daemon/__init__.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/daemon/async_command_database.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/daemon/async_process_manager.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/daemon/client.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/daemon/daemon.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/daemon/daemon_api.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/daemon/enhanced_daemon.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/daemon/process_cli.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/daemon/process_manager.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/daemon/test_daemon.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/doc_convert.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/docker/__init__.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/docker/docker.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/file/__init__.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/gcloud/__init__.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/gcloud/config.toml +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/gcloud/gcloud.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/git_commit/__init__.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/git_commit/ai_service.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/interview/__init__.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/lsh_integration.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/model_service/client.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/model_service/download_and_run_efficient_models.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/model_service/lightweight_embedder.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/model_service/lightweight_model_server.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/model_service/lightweight_test.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/model_service/model_service.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/model_service/ollama_efficient_runner.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/model_service/openai_adapter.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/model_service/pdf_processor.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/model_service/test_efficient_runner.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/model_service/test_example.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/model_service/test_integration.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/model_service/test_new_features.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/notebook/__init__.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/notebook/command_loader.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/notebook/converter.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/notebook/executor.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/notebook/notebook_cmd.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/notebook/schema.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/notebook/validator.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/openai/openai.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/registry/__init__.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/registry/registry.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/repo/__init__.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/repo/repo.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/scheduler/__init__.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/scheduler/cron_parser.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/scheduler/job.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/scheduler/models.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/scheduler/monitor.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/scheduler/persistence.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/scheduler/scheduler.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/scheduler/validation.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/search/__init__.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/secrets/__init__.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/secrets/secrets_cmd.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/storage/__init__.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/storage/storage_cmd.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/sync/__init__.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/sync/test_cmd.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/videos/__init__.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/wakatime/__init__.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/wakatime/wakatime.py +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli_framework.egg-info/dependency_links.txt +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli_framework.egg-info/entry_points.txt +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli_framework.egg-info/requires.txt +0 -0
- {mcli_framework-8.0.61 → mcli_framework-8.0.62}/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.62
|
|
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.62"
|
|
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"
|
|
@@ -39,6 +39,7 @@ class URLs:
|
|
|
39
39
|
GITHUB_API = "https://api.github.com"
|
|
40
40
|
GITHUB_API_MCLI = "https://api.github.com/repos/gwicho38/mcli"
|
|
41
41
|
GITHUB_API_ACTIONS = "https://api.github.com/repos/gwicho38/mcli/actions/runs"
|
|
42
|
+
GITHUB_ISSUES_MCLI = "https://github.com/gwicho38/mcli/issues"
|
|
42
43
|
|
|
43
44
|
# PyPI
|
|
44
45
|
PYPI_API = "https://pypi.org/pypi"
|
|
@@ -17,6 +17,7 @@ class ErrorMessages:
|
|
|
17
17
|
)
|
|
18
18
|
COMMAND_NOT_FOUND = "Command '{name}' not found"
|
|
19
19
|
COMMAND_NOT_AVAILABLE = "Command {name} is not available"
|
|
20
|
+
WORKFLOW_CRASHED = "Workflow '{name}' crashed: {error}"
|
|
20
21
|
GIT_COMMAND_FAILED = "Git command failed: {error}"
|
|
21
22
|
FILE_NOT_FOUND = "File not found: {path}"
|
|
22
23
|
DIRECTORY_NOT_FOUND = "Directory not found: {path}"
|
|
@@ -66,6 +67,9 @@ class InfoMessages:
|
|
|
66
67
|
|
|
67
68
|
COPYING_COMMANDS = "Copying commands from {source} to {dest}..."
|
|
68
69
|
NO_CHANGES_TO_COMMIT = "No changes to commit"
|
|
70
|
+
WORKFLOW_CRASH_LOCATION = " in {location}"
|
|
71
|
+
WORKFLOW_CRASH_TRACE_HINT = " Set MCLI_TRACE_LEVEL=1 (or MCLI_DEBUG=1) for the full traceback."
|
|
72
|
+
WORKFLOW_CRASH_REPORT = " Report this: {url}"
|
|
69
73
|
LOADING = "Loading {item}..."
|
|
70
74
|
PROCESSING = "Processing {item}..."
|
|
71
75
|
CONNECTING = "Connecting to {service}..."
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
"""Runtime helpers for executing user workflow scripts safely.
|
|
2
|
+
|
|
3
|
+
When a dynamically-loaded workflow script raises an unhandled exception at
|
|
4
|
+
*invoke* time (i.e. it loads fine but crashes while running), Click/Python
|
|
5
|
+
would dump a raw traceback at the user. That tells them little about which
|
|
6
|
+
script failed or what to do next.
|
|
7
|
+
|
|
8
|
+
``wrap_command_invoke`` wraps a loaded command so such crashes are rendered as
|
|
9
|
+
a concise, actionable message — which workflow crashed, the error, the script
|
|
10
|
+
location, and how to report it. The full traceback stays one env var away
|
|
11
|
+
(``MCLI_TRACE_LEVEL`` / ``MCLI_DEBUG``) for debugging.
|
|
12
|
+
|
|
13
|
+
Click usage errors, ``Abort`` and ``SystemExit`` are deliberately *not*
|
|
14
|
+
swallowed — those are normal control flow, not script crashes.
|
|
15
|
+
"""
|
|
16
|
+
|
|
17
|
+
from __future__ import annotations
|
|
18
|
+
|
|
19
|
+
import os
|
|
20
|
+
import sys
|
|
21
|
+
import traceback
|
|
22
|
+
from pathlib import Path
|
|
23
|
+
|
|
24
|
+
import click
|
|
25
|
+
from rich.console import Console
|
|
26
|
+
|
|
27
|
+
from mcli.lib.constants.defaults import URLs
|
|
28
|
+
from mcli.lib.constants.env import EnvVars
|
|
29
|
+
from mcli.lib.constants.messages import ErrorMessages, InfoMessages
|
|
30
|
+
|
|
31
|
+
# Module-level so tests can redirect it to a buffer.
|
|
32
|
+
_console = Console(stderr=True)
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def _wants_traceback() -> bool:
|
|
36
|
+
"""Whether to print the full traceback (debug/trace modes)."""
|
|
37
|
+
trace = os.environ.get(EnvVars.MCLI_TRACE_LEVEL, "").strip()
|
|
38
|
+
if trace and trace != "0":
|
|
39
|
+
return True
|
|
40
|
+
debug = os.environ.get(EnvVars.MCLI_DEBUG, "").strip().lower()
|
|
41
|
+
return debug in ("1", "true", "yes", "on")
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
def _deepest_script_line(script_path: Path, exc: BaseException) -> int | None:
|
|
45
|
+
"""Return the deepest line number within the user's script, if any."""
|
|
46
|
+
target = str(script_path)
|
|
47
|
+
line: int | None = None
|
|
48
|
+
for frame, lineno in traceback.walk_tb(exc.__traceback__):
|
|
49
|
+
if frame.f_code.co_filename == target:
|
|
50
|
+
line = lineno
|
|
51
|
+
return line
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def render_script_error(name: str, script_path: str | Path, exc: BaseException) -> None:
|
|
55
|
+
"""Print a concise, actionable crash summary for a workflow script."""
|
|
56
|
+
script_path = Path(script_path)
|
|
57
|
+
line = _deepest_script_line(script_path, exc)
|
|
58
|
+
location = str(script_path) if line is None else f"{script_path}:{line}"
|
|
59
|
+
|
|
60
|
+
summary = ErrorMessages.WORKFLOW_CRASHED.format(name=name, error=f"{type(exc).__name__}: {exc}")
|
|
61
|
+
_console.print(f"[bold red]✗[/bold red] {summary}", soft_wrap=True, highlight=False)
|
|
62
|
+
_console.print(
|
|
63
|
+
InfoMessages.WORKFLOW_CRASH_LOCATION.format(location=location),
|
|
64
|
+
soft_wrap=True,
|
|
65
|
+
highlight=False,
|
|
66
|
+
)
|
|
67
|
+
_console.print(InfoMessages.WORKFLOW_CRASH_TRACE_HINT, soft_wrap=True, highlight=False)
|
|
68
|
+
_console.print(
|
|
69
|
+
InfoMessages.WORKFLOW_CRASH_REPORT.format(url=URLs.GITHUB_ISSUES_MCLI),
|
|
70
|
+
soft_wrap=True,
|
|
71
|
+
highlight=False,
|
|
72
|
+
)
|
|
73
|
+
|
|
74
|
+
if _wants_traceback():
|
|
75
|
+
traceback.print_exception(type(exc), exc, exc.__traceback__, file=sys.stderr)
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
def wrap_command_invoke(command: click.BaseCommand, script_path: str | Path):
|
|
79
|
+
"""Wrap a loaded command so runtime crashes render a friendly message.
|
|
80
|
+
|
|
81
|
+
Returns the same command (mutated in place). ``None`` passes through so
|
|
82
|
+
callers don't need to guard.
|
|
83
|
+
"""
|
|
84
|
+
if command is None:
|
|
85
|
+
return command
|
|
86
|
+
|
|
87
|
+
path = Path(script_path)
|
|
88
|
+
original_invoke = command.invoke
|
|
89
|
+
|
|
90
|
+
def safe_invoke(ctx):
|
|
91
|
+
try:
|
|
92
|
+
return original_invoke(ctx)
|
|
93
|
+
except (click.ClickException, click.Abort, SystemExit, KeyboardInterrupt):
|
|
94
|
+
raise
|
|
95
|
+
except Exception as exc: # noqa: BLE001 - intentional catch-all for user scripts
|
|
96
|
+
render_script_error(command.name or path.stem, path, exc)
|
|
97
|
+
raise SystemExit(1) from exc
|
|
98
|
+
|
|
99
|
+
command.invoke = safe_invoke # type: ignore[method-assign]
|
|
100
|
+
return command
|
|
@@ -140,6 +140,7 @@ class ScopedWorkflowsGroup(click.Group):
|
|
|
140
140
|
from mcli.lib.constants.messages import WarningMessages
|
|
141
141
|
from mcli.lib.logger.logger import get_logger
|
|
142
142
|
from mcli.lib.script_loader import LANGUAGE_TO_SUFFIX, ScriptLoader, parse_command_name
|
|
143
|
+
from mcli.lib.workflow_runtime import wrap_command_invoke
|
|
143
144
|
|
|
144
145
|
logger = get_logger()
|
|
145
146
|
|
|
@@ -171,7 +172,7 @@ class ScopedWorkflowsGroup(click.Group):
|
|
|
171
172
|
command = loader.load_command(matches[0])
|
|
172
173
|
if command:
|
|
173
174
|
logger.debug(f"Loaded native script command: {cmd_name}")
|
|
174
|
-
return command
|
|
175
|
+
return wrap_command_invoke(command, matches[0])
|
|
175
176
|
except Exception as e:
|
|
176
177
|
logger.debug(f"Failed to load script '{cmd_name}': {e}")
|
|
177
178
|
elif len(matches) > 1 and not lang_filter:
|
|
@@ -185,7 +186,7 @@ class ScopedWorkflowsGroup(click.Group):
|
|
|
185
186
|
command = loader.load_command(matches[0])
|
|
186
187
|
if command:
|
|
187
188
|
logger.debug(f"Loaded first match for ambiguous command: {base_name}")
|
|
188
|
-
return command
|
|
189
|
+
return wrap_command_invoke(command, matches[0])
|
|
189
190
|
except Exception as e:
|
|
190
191
|
logger.debug(f"Failed to load script '{base_name}': {e}")
|
|
191
192
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mcli-framework
|
|
3
|
-
Version: 8.0.
|
|
3
|
+
Version: 8.0.62
|
|
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
|
{mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/daemon/async_command_database.py
RENAMED
|
File without changes
|
{mcli_framework-8.0.61 → mcli_framework-8.0.62}/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.61 → mcli_framework-8.0.62}/src/mcli/workflow/model_service/lightweight_test.py
RENAMED
|
File without changes
|
{mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/model_service/model_service.py
RENAMED
|
File without changes
|
|
File without changes
|
{mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/model_service/openai_adapter.py
RENAMED
|
File without changes
|
{mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/model_service/pdf_processor.py
RENAMED
|
File without changes
|
|
File without changes
|
{mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/model_service/test_example.py
RENAMED
|
File without changes
|
{mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/model_service/test_integration.py
RENAMED
|
File without changes
|
{mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/model_service/test_new_features.py
RENAMED
|
File without changes
|
|
File without changes
|
{mcli_framework-8.0.61 → mcli_framework-8.0.62}/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
|
{mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli_framework.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
{mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli_framework.egg-info/entry_points.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|