mcli-framework 8.0.65__tar.gz → 8.0.67__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.65/src/mcli_framework.egg-info → mcli_framework-8.0.67}/PKG-INFO +1 -1
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/pyproject.toml +1 -1
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/script_loader.py +67 -7
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/workflow/ci/act_runner.py +32 -2
- {mcli_framework-8.0.65 → mcli_framework-8.0.67/src/mcli_framework.egg-info}/PKG-INFO +1 -1
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/LICENSE +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/MANIFEST.in +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/README.md +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/llms-full.txt +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/llms.txt +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/mcli_rust/Cargo.toml +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/mcli_rust/src/command_parser.rs +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/mcli_rust/src/file_watcher.rs +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/mcli_rust/src/lib.rs +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/mcli_rust/src/process_manager.rs +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/mcli_rust/src/tfidf.rs +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/setup.cfg +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/__main__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/app/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/app/completion_helpers.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/app/context_cmd.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/app/delete_cmd.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/app/edit_cmd.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/app/import_cmd.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/app/init_cmd.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/app/list_cmd.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/app/main.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/app/model/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/app/model/model.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/app/model_cmd.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/app/mv_cmd.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/app/new_cmd.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/app/search_cmd.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/app/services_cmd.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/app/setup_cmd.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/app/source_sync_cmd.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/app/sync_cmd.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/app/video/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/app/video/video.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/config.toml +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/api/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/api/api.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/api/daemon_client.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/api/daemon_client_local.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/api/daemon_decorator.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/api/mcli_decorators.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/auth/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/auth/auth.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/auth/aws_manager.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/auth/azure_manager.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/auth/credential_manager.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/auth/gcp_manager.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/auth/key_manager.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/auth/mcli_manager.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/auth/token_manager.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/auth/token_util.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/config/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/config/config.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/config/settings.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/constants/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/constants/commands.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/constants/defaults.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/constants/env.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/constants/messages.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/constants/paths.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/constants/scripts.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/constants/storage.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/custom_commands.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/discovery/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/discovery/command_discovery.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/erd/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/erd/erd.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/erd/generate_graph.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/errors.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/feature_detection.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/files/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/files/files.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/folder_workflows.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/fs/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/fs/fs.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/ipfs_sync.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/ipfs_utils.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/ipns_manager.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/lib.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/logger/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/logger/correlation.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/logger/logger.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/logger/structured.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/optional_deps.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/paths.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/performance/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/performance/optimizer.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/performance/rust_bridge.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/performance/uvloop_config.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/pickles/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/pickles/pickles.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/pyenv/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/pyenv/deps.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/pyenv/manager.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/pyenv/venv.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/script_sync.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/script_watcher.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/search/cached_vectorizer.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/secrets/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/secrets/commands.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/secrets/manager.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/secrets/repl.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/secrets/store.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/services/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/services/config.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/services/data_pipeline.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/services/health.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/services/lsh_client.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/services/manager.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/services/redis_service.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/services/registry.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/services/state.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/services/supervisor.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/shell/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/shell/exceptions.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/shell/shell.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/sync_key_store.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/templates/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/templates/command_templates.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/toml/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/toml/toml.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/types.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/ui/styling.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/ui/visual_effects.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/watcher/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/watcher/watcher.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/workflow_models.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/workflow_runtime.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/lib/workspace_registry.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/mygroup/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/mygroup/test_cmd.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/public/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/public/commands/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/public/oi/oi.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/public/public.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/self/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/self/completion_cmd.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/self/env_cmd.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/self/health_cmd.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/self/ipfs_cmd.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/self/logs_cmd.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/self/migrate_cmd.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/self/release_notes_cmd.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/self/self_cmd.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/self/store_cmd.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/self/test_cmd.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/self/workflows_cmd.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/storage/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/storage/backends/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/storage/backends/ipfs_backend.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/storage/base.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/storage/cache.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/storage/encryption.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/storage/factory.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/storage/registry.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/storage/storacha_cli.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/workflow/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/workflow/ci/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/workflow/ci/act_lock.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/workflow/ci/ci.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/workflow/ci/runner_status.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/workflow/ci/workflow_transform.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/workflow/daemon/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/workflow/daemon/async_command_database.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/workflow/daemon/async_process_manager.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/workflow/daemon/client.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/workflow/daemon/daemon.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/workflow/daemon/daemon_api.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/workflow/daemon/enhanced_daemon.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/workflow/daemon/process_cli.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/workflow/daemon/process_manager.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/workflow/daemon/test_daemon.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/workflow/doc_convert.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/workflow/docker/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/workflow/docker/docker.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/workflow/file/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/workflow/gcloud/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/workflow/gcloud/config.toml +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/workflow/gcloud/gcloud.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/workflow/git_commit/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/workflow/git_commit/ai_service.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/workflow/interview/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/workflow/lsh_integration.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/workflow/model_service/client.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/workflow/model_service/download_and_run_efficient_models.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/workflow/model_service/lightweight_embedder.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/workflow/model_service/lightweight_model_server.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/workflow/model_service/lightweight_test.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/workflow/model_service/model_service.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/workflow/model_service/ollama_efficient_runner.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/workflow/model_service/openai_adapter.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/workflow/model_service/pdf_processor.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/workflow/model_service/test_efficient_runner.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/workflow/model_service/test_example.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/workflow/model_service/test_integration.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/workflow/model_service/test_new_features.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/workflow/notebook/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/workflow/notebook/command_loader.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/workflow/notebook/converter.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/workflow/notebook/executor.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/workflow/notebook/notebook_cmd.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/workflow/notebook/schema.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/workflow/notebook/validator.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/workflow/openai/openai.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/workflow/registry/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/workflow/registry/registry.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/workflow/repo/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/workflow/repo/repo.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/workflow/scheduler/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/workflow/scheduler/cron_parser.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/workflow/scheduler/job.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/workflow/scheduler/models.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/workflow/scheduler/monitor.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/workflow/scheduler/persistence.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/workflow/scheduler/scheduler.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/workflow/scheduler/validation.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/workflow/search/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/workflow/secrets/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/workflow/secrets/secrets_cmd.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/workflow/storage/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/workflow/storage/storage_cmd.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/workflow/sync/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/workflow/sync/test_cmd.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/workflow/videos/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/workflow/wakatime/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/workflow/wakatime/wakatime.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/workflow/workflow.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli_framework.egg-info/SOURCES.txt +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli_framework.egg-info/dependency_links.txt +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli_framework.egg-info/entry_points.txt +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli_framework.egg-info/requires.txt +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.67}/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.67
|
|
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.67"
|
|
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"
|
|
@@ -22,7 +22,7 @@ import stat
|
|
|
22
22
|
import subprocess
|
|
23
23
|
import sys
|
|
24
24
|
import tempfile
|
|
25
|
-
from datetime import datetime
|
|
25
|
+
from datetime import datetime, timedelta
|
|
26
26
|
from pathlib import Path
|
|
27
27
|
from typing import Any, Optional
|
|
28
28
|
|
|
@@ -68,6 +68,9 @@ LANGUAGE_TO_SUFFIX: dict[str, str] = {
|
|
|
68
68
|
"ipynb": "ipynb",
|
|
69
69
|
}
|
|
70
70
|
|
|
71
|
+
VOLATILE_COMMAND_FIELDS = frozenset({"last_modified"})
|
|
72
|
+
LOCKFILE_SCHEMA_VERSION = "2.0"
|
|
73
|
+
|
|
71
74
|
|
|
72
75
|
def parse_command_name(cmd_name: str) -> tuple[str, Optional[str]]:
|
|
73
76
|
"""Parse 'name:suffix' into (base_name, language_or_None).
|
|
@@ -187,7 +190,7 @@ class ScriptLoader:
|
|
|
187
190
|
|
|
188
191
|
scripts.append(script_path)
|
|
189
192
|
|
|
190
|
-
return sorted(scripts, key=lambda
|
|
193
|
+
return sorted(scripts, key=lambda path: path.relative_to(self.workflows_dir).as_posix())
|
|
191
194
|
|
|
192
195
|
def find_scripts_by_stem(self, stem: str) -> list[Path]:
|
|
193
196
|
"""Return all discovered scripts whose stem matches the given name.
|
|
@@ -853,20 +856,70 @@ class ScriptLoader:
|
|
|
853
856
|
Dictionary containing lockfile data with v2 schema
|
|
854
857
|
"""
|
|
855
858
|
scripts = self.discover_scripts()
|
|
859
|
+
existing_lockfile = self.load_lockfile()
|
|
860
|
+
existing_commands_value = existing_lockfile.get("commands", {}) if existing_lockfile else {}
|
|
861
|
+
existing_commands = (
|
|
862
|
+
existing_commands_value if isinstance(existing_commands_value, dict) else {}
|
|
863
|
+
)
|
|
864
|
+
commands: dict[str, Any] = {}
|
|
865
|
+
can_reuse_entries = bool(
|
|
866
|
+
existing_lockfile
|
|
867
|
+
and existing_lockfile.get("version") == LOCKFILE_SCHEMA_VERSION
|
|
868
|
+
and isinstance(existing_commands_value, dict)
|
|
869
|
+
)
|
|
856
870
|
|
|
857
|
-
lockfile_data = {
|
|
858
|
-
"version":
|
|
871
|
+
lockfile_data: dict[str, Any] = {
|
|
872
|
+
"version": LOCKFILE_SCHEMA_VERSION,
|
|
859
873
|
"generated_at": datetime.utcnow().isoformat() + "Z",
|
|
860
|
-
"commands":
|
|
874
|
+
"commands": commands,
|
|
861
875
|
}
|
|
862
876
|
|
|
863
877
|
keys = self._assign_command_keys(scripts)
|
|
864
878
|
for script_path in scripts:
|
|
865
879
|
info = self.get_script_info(script_path)
|
|
866
|
-
|
|
880
|
+
command_key = keys[script_path]
|
|
881
|
+
existing_info = existing_commands.get(command_key)
|
|
882
|
+
if (
|
|
883
|
+
can_reuse_entries
|
|
884
|
+
and isinstance(existing_info, dict)
|
|
885
|
+
and self._is_valid_utc_timestamp(existing_info.get("last_modified"))
|
|
886
|
+
and self._semantic_command_info(existing_info) == self._semantic_command_info(info)
|
|
887
|
+
):
|
|
888
|
+
commands[command_key] = existing_info
|
|
889
|
+
else:
|
|
890
|
+
commands[command_key] = info
|
|
891
|
+
|
|
892
|
+
if (
|
|
893
|
+
existing_lockfile
|
|
894
|
+
and existing_lockfile.get("version") == lockfile_data["version"]
|
|
895
|
+
and existing_commands == commands
|
|
896
|
+
and self._is_valid_utc_timestamp(existing_lockfile.get("generated_at"))
|
|
897
|
+
):
|
|
898
|
+
lockfile_data["generated_at"] = existing_lockfile["generated_at"]
|
|
867
899
|
|
|
868
900
|
return lockfile_data
|
|
869
901
|
|
|
902
|
+
@staticmethod
|
|
903
|
+
def _semantic_command_info(command_info: Any) -> Any:
|
|
904
|
+
"""Return command metadata without filesystem-derived volatile fields."""
|
|
905
|
+
if not isinstance(command_info, dict):
|
|
906
|
+
return command_info
|
|
907
|
+
return {
|
|
908
|
+
key: value for key, value in command_info.items() if key not in VOLATILE_COMMAND_FIELDS
|
|
909
|
+
}
|
|
910
|
+
|
|
911
|
+
@staticmethod
|
|
912
|
+
def _is_valid_utc_timestamp(value: Any) -> bool:
|
|
913
|
+
"""Return whether a value is an ISO timestamp with an explicit UTC offset."""
|
|
914
|
+
if not isinstance(value, str):
|
|
915
|
+
return False
|
|
916
|
+
try:
|
|
917
|
+
normalized = f"{value[:-1]}+00:00" if value.endswith("Z") else value
|
|
918
|
+
timestamp = datetime.fromisoformat(normalized)
|
|
919
|
+
except ValueError:
|
|
920
|
+
return False
|
|
921
|
+
return timestamp.tzinfo is not None and timestamp.utcoffset() == timedelta(0)
|
|
922
|
+
|
|
870
923
|
def _assign_command_keys(self, scripts: list[Path]) -> dict[Path, str]:
|
|
871
924
|
"""Assign a unique lockfile/command key to every discovered script.
|
|
872
925
|
|
|
@@ -934,10 +987,17 @@ class ScriptLoader:
|
|
|
934
987
|
"""
|
|
935
988
|
try:
|
|
936
989
|
lockfile_data = self.generate_lockfile()
|
|
990
|
+
serialized_lockfile = json.dumps(lockfile_data, indent=2)
|
|
991
|
+
if (
|
|
992
|
+
self.lockfile_path.exists()
|
|
993
|
+
and self.lockfile_path.read_text() == serialized_lockfile
|
|
994
|
+
):
|
|
995
|
+
logger.debug(f"Lockfile unchanged: {self.lockfile_path}")
|
|
996
|
+
return True
|
|
937
997
|
with open(self.lockfile_path, "w") as f:
|
|
938
998
|
fcntl.flock(f, fcntl.LOCK_EX)
|
|
939
999
|
try:
|
|
940
|
-
|
|
1000
|
+
f.write(serialized_lockfile)
|
|
941
1001
|
finally:
|
|
942
1002
|
fcntl.flock(f, fcntl.LOCK_UN)
|
|
943
1003
|
logger.info(f"Saved lockfile: {self.lockfile_path}")
|
|
@@ -65,6 +65,36 @@ def act_available() -> bool:
|
|
|
65
65
|
return shutil.which("act") is not None
|
|
66
66
|
|
|
67
67
|
|
|
68
|
+
# Git exports these to every hook (`git rev-parse --local-env-vars`). They point
|
|
69
|
+
# at the repo being pushed, so a tool inside the gate that runs git on its own
|
|
70
|
+
# checkout reads the wrong repo: Flutter computes its SDK version with
|
|
71
|
+
# `git describe` and reports the pushed commit, which then fails any
|
|
72
|
+
# `environment: flutter:` constraint. The gate runs from the repo root, so
|
|
73
|
+
# git finds the right repo without them.
|
|
74
|
+
_GIT_HOOK_ENV = (
|
|
75
|
+
"GIT_ALTERNATE_OBJECT_DIRECTORIES",
|
|
76
|
+
"GIT_CONFIG",
|
|
77
|
+
"GIT_CONFIG_PARAMETERS",
|
|
78
|
+
"GIT_CONFIG_COUNT",
|
|
79
|
+
"GIT_OBJECT_DIRECTORY",
|
|
80
|
+
"GIT_DIR",
|
|
81
|
+
"GIT_WORK_TREE",
|
|
82
|
+
"GIT_IMPLICIT_WORK_TREE",
|
|
83
|
+
"GIT_GRAFT_FILE",
|
|
84
|
+
"GIT_INDEX_FILE",
|
|
85
|
+
"GIT_NO_REPLACE_OBJECTS",
|
|
86
|
+
"GIT_REPLACE_REF_BASE",
|
|
87
|
+
"GIT_PREFIX",
|
|
88
|
+
"GIT_SHALLOW_FILE",
|
|
89
|
+
"GIT_COMMON_DIR",
|
|
90
|
+
)
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
def _gate_env() -> dict[str, str]:
|
|
94
|
+
"""The current environment without the repo-local variables git sets for hooks."""
|
|
95
|
+
return {k: v for k, v in os.environ.items() if k not in _GIT_HOOK_ENV}
|
|
96
|
+
|
|
97
|
+
|
|
68
98
|
# Preferred over act when present: a repo-defined `make ci-native` target runs
|
|
69
99
|
# the same gates directly on the host toolchain. On Apple-silicon (and any host
|
|
70
100
|
# without nested-virt) act's amd64 emulation under podman is flaky for heavy
|
|
@@ -88,7 +118,7 @@ def run_native() -> PreflightResult:
|
|
|
88
118
|
"""Run the repo's native gate (`make ci-native`) on the host. PASS on exit 0,
|
|
89
119
|
FAIL otherwise. Output streams straight to the terminal (these runs are long;
|
|
90
120
|
no need to buffer)."""
|
|
91
|
-
proc = subprocess.run(["make", _NATIVE_GATE])
|
|
121
|
+
proc = subprocess.run(["make", _NATIVE_GATE], env=_gate_env())
|
|
92
122
|
return PreflightResult.PASS if proc.returncode == 0 else PreflightResult.FAIL
|
|
93
123
|
|
|
94
124
|
|
|
@@ -220,7 +250,7 @@ def _run_with_retries(
|
|
|
220
250
|
'no stages' no-op and decide whether to fall back)."""
|
|
221
251
|
attempt = 0
|
|
222
252
|
while True:
|
|
223
|
-
proc = subprocess.run(cmd, capture_output=True, text=True)
|
|
253
|
+
proc = subprocess.run(cmd, capture_output=True, text=True, env=_gate_env())
|
|
224
254
|
output = (proc.stdout or "") + (proc.stderr or "")
|
|
225
255
|
if output:
|
|
226
256
|
sys.stdout.write(output if output.endswith("\n") else output + "\n")
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mcli-framework
|
|
3
|
-
Version: 8.0.
|
|
3
|
+
Version: 8.0.67
|
|
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
|
|
File without changes
|
{mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/workflow/daemon/async_command_database.py
RENAMED
|
File without changes
|
{mcli_framework-8.0.65 → mcli_framework-8.0.67}/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.65 → mcli_framework-8.0.67}/src/mcli/workflow/model_service/lightweight_test.py
RENAMED
|
File without changes
|
{mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/workflow/model_service/model_service.py
RENAMED
|
File without changes
|
|
File without changes
|
{mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/workflow/model_service/openai_adapter.py
RENAMED
|
File without changes
|
{mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/workflow/model_service/pdf_processor.py
RENAMED
|
File without changes
|
|
File without changes
|
{mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/workflow/model_service/test_example.py
RENAMED
|
File without changes
|
{mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/workflow/model_service/test_integration.py
RENAMED
|
File without changes
|
{mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli/workflow/model_service/test_new_features.py
RENAMED
|
File without changes
|
|
File without changes
|
{mcli_framework-8.0.65 → mcli_framework-8.0.67}/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.65 → mcli_framework-8.0.67}/src/mcli_framework.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
{mcli_framework-8.0.65 → mcli_framework-8.0.67}/src/mcli_framework.egg-info/entry_points.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|