mcli-framework 8.0.65__tar.gz → 8.0.66__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.66}/PKG-INFO +1 -1
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/pyproject.toml +1 -1
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/script_loader.py +67 -7
- {mcli_framework-8.0.65 → mcli_framework-8.0.66/src/mcli_framework.egg-info}/PKG-INFO +1 -1
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/LICENSE +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/MANIFEST.in +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/README.md +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/llms-full.txt +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/llms.txt +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/mcli_rust/Cargo.toml +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/mcli_rust/src/command_parser.rs +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/mcli_rust/src/file_watcher.rs +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/mcli_rust/src/lib.rs +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/mcli_rust/src/process_manager.rs +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/mcli_rust/src/tfidf.rs +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/setup.cfg +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/__main__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/app/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/app/completion_helpers.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/app/context_cmd.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/app/delete_cmd.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/app/edit_cmd.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/app/import_cmd.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/app/init_cmd.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/app/list_cmd.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/app/main.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/app/model/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/app/model/model.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/app/model_cmd.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/app/mv_cmd.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/app/new_cmd.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/app/search_cmd.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/app/services_cmd.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/app/setup_cmd.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/app/source_sync_cmd.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/app/sync_cmd.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/app/video/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/app/video/video.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/config.toml +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/api/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/api/api.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/api/daemon_client.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/api/daemon_client_local.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/api/daemon_decorator.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/api/mcli_decorators.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/auth/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/auth/auth.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/auth/aws_manager.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/auth/azure_manager.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/auth/credential_manager.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/auth/gcp_manager.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/auth/key_manager.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/auth/mcli_manager.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/auth/token_manager.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/auth/token_util.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/config/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/config/config.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/config/settings.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/constants/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/constants/commands.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/constants/defaults.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/constants/env.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/constants/messages.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/constants/paths.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/constants/scripts.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/constants/storage.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/custom_commands.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/discovery/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/discovery/command_discovery.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/erd/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/erd/erd.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/erd/generate_graph.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/errors.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/feature_detection.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/files/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/files/files.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/folder_workflows.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/fs/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/fs/fs.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/ipfs_sync.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/ipfs_utils.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/ipns_manager.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/lib.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/logger/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/logger/correlation.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/logger/logger.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/logger/structured.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/optional_deps.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/paths.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/performance/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/performance/optimizer.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/performance/rust_bridge.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/performance/uvloop_config.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/pickles/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/pickles/pickles.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/pyenv/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/pyenv/deps.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/pyenv/manager.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/pyenv/venv.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/script_sync.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/script_watcher.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/search/cached_vectorizer.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/secrets/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/secrets/commands.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/secrets/manager.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/secrets/repl.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/secrets/store.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/services/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/services/config.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/services/data_pipeline.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/services/health.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/services/lsh_client.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/services/manager.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/services/redis_service.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/services/registry.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/services/state.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/services/supervisor.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/shell/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/shell/exceptions.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/shell/shell.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/sync_key_store.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/templates/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/templates/command_templates.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/toml/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/toml/toml.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/types.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/ui/styling.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/ui/visual_effects.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/watcher/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/watcher/watcher.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/workflow_models.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/workflow_runtime.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/lib/workspace_registry.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/mygroup/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/mygroup/test_cmd.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/public/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/public/commands/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/public/oi/oi.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/public/public.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/self/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/self/completion_cmd.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/self/env_cmd.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/self/health_cmd.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/self/ipfs_cmd.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/self/logs_cmd.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/self/migrate_cmd.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/self/release_notes_cmd.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/self/self_cmd.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/self/store_cmd.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/self/test_cmd.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/self/workflows_cmd.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/storage/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/storage/backends/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/storage/backends/ipfs_backend.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/storage/base.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/storage/cache.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/storage/encryption.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/storage/factory.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/storage/registry.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/storage/storacha_cli.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/workflow/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/workflow/ci/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/workflow/ci/act_lock.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/workflow/ci/act_runner.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/workflow/ci/ci.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/workflow/ci/runner_status.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/workflow/ci/workflow_transform.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/workflow/daemon/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/workflow/daemon/async_command_database.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/workflow/daemon/async_process_manager.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/workflow/daemon/client.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/workflow/daemon/daemon.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/workflow/daemon/daemon_api.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/workflow/daemon/enhanced_daemon.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/workflow/daemon/process_cli.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/workflow/daemon/process_manager.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/workflow/daemon/test_daemon.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/workflow/doc_convert.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/workflow/docker/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/workflow/docker/docker.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/workflow/file/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/workflow/gcloud/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/workflow/gcloud/config.toml +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/workflow/gcloud/gcloud.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/workflow/git_commit/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/workflow/git_commit/ai_service.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/workflow/interview/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/workflow/lsh_integration.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/workflow/model_service/client.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/workflow/model_service/download_and_run_efficient_models.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/workflow/model_service/lightweight_embedder.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/workflow/model_service/lightweight_model_server.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/workflow/model_service/lightweight_test.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/workflow/model_service/model_service.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/workflow/model_service/ollama_efficient_runner.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/workflow/model_service/openai_adapter.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/workflow/model_service/pdf_processor.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/workflow/model_service/test_efficient_runner.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/workflow/model_service/test_example.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/workflow/model_service/test_integration.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/workflow/model_service/test_new_features.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/workflow/notebook/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/workflow/notebook/command_loader.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/workflow/notebook/converter.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/workflow/notebook/executor.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/workflow/notebook/notebook_cmd.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/workflow/notebook/schema.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/workflow/notebook/validator.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/workflow/openai/openai.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/workflow/registry/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/workflow/registry/registry.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/workflow/repo/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/workflow/repo/repo.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/workflow/scheduler/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/workflow/scheduler/cron_parser.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/workflow/scheduler/job.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/workflow/scheduler/models.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/workflow/scheduler/monitor.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/workflow/scheduler/persistence.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/workflow/scheduler/scheduler.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/workflow/scheduler/validation.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/workflow/search/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/workflow/secrets/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/workflow/secrets/secrets_cmd.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/workflow/storage/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/workflow/storage/storage_cmd.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/workflow/sync/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/workflow/sync/test_cmd.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/workflow/videos/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/workflow/wakatime/__init__.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/workflow/wakatime/wakatime.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/workflow/workflow.py +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli_framework.egg-info/SOURCES.txt +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli_framework.egg-info/dependency_links.txt +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli_framework.egg-info/entry_points.txt +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli_framework.egg-info/requires.txt +0 -0
- {mcli_framework-8.0.65 → mcli_framework-8.0.66}/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.66
|
|
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.66"
|
|
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}")
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mcli-framework
|
|
3
|
-
Version: 8.0.
|
|
3
|
+
Version: 8.0.66
|
|
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
|
|
File without changes
|
{mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/workflow/daemon/async_command_database.py
RENAMED
|
File without changes
|
{mcli_framework-8.0.65 → mcli_framework-8.0.66}/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.66}/src/mcli/workflow/model_service/lightweight_test.py
RENAMED
|
File without changes
|
{mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/workflow/model_service/model_service.py
RENAMED
|
File without changes
|
|
File without changes
|
{mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/workflow/model_service/openai_adapter.py
RENAMED
|
File without changes
|
{mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/workflow/model_service/pdf_processor.py
RENAMED
|
File without changes
|
|
File without changes
|
{mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/workflow/model_service/test_example.py
RENAMED
|
File without changes
|
{mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli/workflow/model_service/test_integration.py
RENAMED
|
File without changes
|
{mcli_framework-8.0.65 → mcli_framework-8.0.66}/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.66}/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.66}/src/mcli_framework.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
{mcli_framework-8.0.65 → mcli_framework-8.0.66}/src/mcli_framework.egg-info/entry_points.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|