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.
Files changed (238) hide show
  1. {mcli_framework-8.0.61/src/mcli_framework.egg-info → mcli_framework-8.0.62}/PKG-INFO +1 -1
  2. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/pyproject.toml +1 -1
  3. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/constants/defaults.py +1 -0
  4. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/constants/messages.py +4 -0
  5. mcli_framework-8.0.62/src/mcli/lib/workflow_runtime.py +100 -0
  6. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/workflow.py +3 -2
  7. {mcli_framework-8.0.61 → mcli_framework-8.0.62/src/mcli_framework.egg-info}/PKG-INFO +1 -1
  8. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli_framework.egg-info/SOURCES.txt +1 -0
  9. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/LICENSE +0 -0
  10. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/MANIFEST.in +0 -0
  11. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/README.md +0 -0
  12. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/llms-full.txt +0 -0
  13. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/llms.txt +0 -0
  14. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/mcli_rust/Cargo.toml +0 -0
  15. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/mcli_rust/src/command_parser.rs +0 -0
  16. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/mcli_rust/src/file_watcher.rs +0 -0
  17. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/mcli_rust/src/lib.rs +0 -0
  18. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/mcli_rust/src/process_manager.rs +0 -0
  19. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/mcli_rust/src/tfidf.rs +0 -0
  20. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/setup.cfg +0 -0
  21. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/__init__.py +0 -0
  22. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/__main__.py +0 -0
  23. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/app/__init__.py +0 -0
  24. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/app/completion_helpers.py +0 -0
  25. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/app/context_cmd.py +0 -0
  26. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/app/delete_cmd.py +0 -0
  27. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/app/edit_cmd.py +0 -0
  28. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/app/import_cmd.py +0 -0
  29. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/app/init_cmd.py +0 -0
  30. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/app/list_cmd.py +0 -0
  31. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/app/main.py +0 -0
  32. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/app/model/__init__.py +0 -0
  33. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/app/model/model.py +0 -0
  34. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/app/model_cmd.py +0 -0
  35. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/app/mv_cmd.py +0 -0
  36. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/app/new_cmd.py +0 -0
  37. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/app/search_cmd.py +0 -0
  38. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/app/services_cmd.py +0 -0
  39. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/app/setup_cmd.py +0 -0
  40. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/app/source_sync_cmd.py +0 -0
  41. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/app/sync_cmd.py +0 -0
  42. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/app/video/__init__.py +0 -0
  43. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/app/video/video.py +0 -0
  44. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/config.toml +0 -0
  45. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/__init__.py +0 -0
  46. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/api/__init__.py +0 -0
  47. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/api/api.py +0 -0
  48. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/api/daemon_client.py +0 -0
  49. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/api/daemon_client_local.py +0 -0
  50. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/api/daemon_decorator.py +0 -0
  51. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/api/mcli_decorators.py +0 -0
  52. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/auth/__init__.py +0 -0
  53. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/auth/auth.py +0 -0
  54. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/auth/aws_manager.py +0 -0
  55. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/auth/azure_manager.py +0 -0
  56. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/auth/credential_manager.py +0 -0
  57. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/auth/gcp_manager.py +0 -0
  58. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/auth/key_manager.py +0 -0
  59. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/auth/mcli_manager.py +0 -0
  60. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/auth/token_manager.py +0 -0
  61. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/auth/token_util.py +0 -0
  62. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/config/__init__.py +0 -0
  63. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/config/config.py +0 -0
  64. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/config/settings.py +0 -0
  65. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/constants/__init__.py +0 -0
  66. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/constants/commands.py +0 -0
  67. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/constants/env.py +0 -0
  68. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/constants/paths.py +0 -0
  69. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/constants/scripts.py +0 -0
  70. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/constants/storage.py +0 -0
  71. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/custom_commands.py +0 -0
  72. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/discovery/__init__.py +0 -0
  73. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/discovery/command_discovery.py +0 -0
  74. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/erd/__init__.py +0 -0
  75. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/erd/erd.py +0 -0
  76. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/erd/generate_graph.py +0 -0
  77. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/errors.py +0 -0
  78. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/feature_detection.py +0 -0
  79. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/files/__init__.py +0 -0
  80. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/files/files.py +0 -0
  81. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/folder_workflows.py +0 -0
  82. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/fs/__init__.py +0 -0
  83. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/fs/fs.py +0 -0
  84. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/ipfs_sync.py +0 -0
  85. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/ipfs_utils.py +0 -0
  86. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/ipns_manager.py +0 -0
  87. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/lib.py +0 -0
  88. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/logger/__init__.py +0 -0
  89. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/logger/correlation.py +0 -0
  90. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/logger/logger.py +0 -0
  91. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/logger/structured.py +0 -0
  92. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/optional_deps.py +0 -0
  93. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/paths.py +0 -0
  94. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/performance/__init__.py +0 -0
  95. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/performance/optimizer.py +0 -0
  96. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/performance/rust_bridge.py +0 -0
  97. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/performance/uvloop_config.py +0 -0
  98. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/pickles/__init__.py +0 -0
  99. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/pickles/pickles.py +0 -0
  100. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/pyenv/__init__.py +0 -0
  101. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/pyenv/deps.py +0 -0
  102. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/pyenv/manager.py +0 -0
  103. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/pyenv/venv.py +0 -0
  104. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/script_loader.py +0 -0
  105. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/script_sync.py +0 -0
  106. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/script_watcher.py +0 -0
  107. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/search/cached_vectorizer.py +0 -0
  108. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/secrets/__init__.py +0 -0
  109. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/secrets/commands.py +0 -0
  110. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/secrets/manager.py +0 -0
  111. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/secrets/repl.py +0 -0
  112. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/secrets/store.py +0 -0
  113. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/services/__init__.py +0 -0
  114. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/services/config.py +0 -0
  115. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/services/data_pipeline.py +0 -0
  116. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/services/health.py +0 -0
  117. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/services/lsh_client.py +0 -0
  118. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/services/manager.py +0 -0
  119. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/services/redis_service.py +0 -0
  120. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/services/registry.py +0 -0
  121. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/services/state.py +0 -0
  122. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/services/supervisor.py +0 -0
  123. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/shell/__init__.py +0 -0
  124. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/shell/exceptions.py +0 -0
  125. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/shell/shell.py +0 -0
  126. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/sync_key_store.py +0 -0
  127. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/templates/__init__.py +0 -0
  128. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/templates/command_templates.py +0 -0
  129. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/toml/__init__.py +0 -0
  130. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/toml/toml.py +0 -0
  131. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/types.py +0 -0
  132. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/ui/styling.py +0 -0
  133. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/ui/visual_effects.py +0 -0
  134. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/watcher/__init__.py +0 -0
  135. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/watcher/watcher.py +0 -0
  136. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/workflow_models.py +0 -0
  137. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/lib/workspace_registry.py +0 -0
  138. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/mygroup/__init__.py +0 -0
  139. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/mygroup/test_cmd.py +0 -0
  140. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/public/__init__.py +0 -0
  141. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/public/commands/__init__.py +0 -0
  142. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/public/oi/oi.py +0 -0
  143. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/public/public.py +0 -0
  144. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/self/__init__.py +0 -0
  145. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/self/completion_cmd.py +0 -0
  146. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/self/env_cmd.py +0 -0
  147. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/self/health_cmd.py +0 -0
  148. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/self/ipfs_cmd.py +0 -0
  149. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/self/logs_cmd.py +0 -0
  150. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/self/migrate_cmd.py +0 -0
  151. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/self/release_notes_cmd.py +0 -0
  152. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/self/self_cmd.py +0 -0
  153. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/self/store_cmd.py +0 -0
  154. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/self/test_cmd.py +0 -0
  155. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/self/workflows_cmd.py +0 -0
  156. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/storage/__init__.py +0 -0
  157. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/storage/backends/__init__.py +0 -0
  158. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/storage/backends/ipfs_backend.py +0 -0
  159. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/storage/base.py +0 -0
  160. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/storage/cache.py +0 -0
  161. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/storage/encryption.py +0 -0
  162. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/storage/factory.py +0 -0
  163. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/storage/registry.py +0 -0
  164. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/storage/storacha_cli.py +0 -0
  165. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/__init__.py +0 -0
  166. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/ci/__init__.py +0 -0
  167. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/ci/act_runner.py +0 -0
  168. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/ci/ci.py +0 -0
  169. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/ci/runner_status.py +0 -0
  170. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/ci/workflow_transform.py +0 -0
  171. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/daemon/__init__.py +0 -0
  172. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/daemon/async_command_database.py +0 -0
  173. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/daemon/async_process_manager.py +0 -0
  174. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/daemon/client.py +0 -0
  175. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/daemon/daemon.py +0 -0
  176. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/daemon/daemon_api.py +0 -0
  177. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/daemon/enhanced_daemon.py +0 -0
  178. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/daemon/process_cli.py +0 -0
  179. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/daemon/process_manager.py +0 -0
  180. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/daemon/test_daemon.py +0 -0
  181. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/doc_convert.py +0 -0
  182. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/docker/__init__.py +0 -0
  183. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/docker/docker.py +0 -0
  184. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/file/__init__.py +0 -0
  185. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/gcloud/__init__.py +0 -0
  186. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/gcloud/config.toml +0 -0
  187. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/gcloud/gcloud.py +0 -0
  188. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/git_commit/__init__.py +0 -0
  189. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/git_commit/ai_service.py +0 -0
  190. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/interview/__init__.py +0 -0
  191. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/lsh_integration.py +0 -0
  192. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/model_service/client.py +0 -0
  193. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/model_service/download_and_run_efficient_models.py +0 -0
  194. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/model_service/lightweight_embedder.py +0 -0
  195. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/model_service/lightweight_model_server.py +0 -0
  196. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/model_service/lightweight_test.py +0 -0
  197. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/model_service/model_service.py +0 -0
  198. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/model_service/ollama_efficient_runner.py +0 -0
  199. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/model_service/openai_adapter.py +0 -0
  200. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/model_service/pdf_processor.py +0 -0
  201. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/model_service/test_efficient_runner.py +0 -0
  202. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/model_service/test_example.py +0 -0
  203. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/model_service/test_integration.py +0 -0
  204. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/model_service/test_new_features.py +0 -0
  205. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/notebook/__init__.py +0 -0
  206. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/notebook/command_loader.py +0 -0
  207. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/notebook/converter.py +0 -0
  208. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/notebook/executor.py +0 -0
  209. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/notebook/notebook_cmd.py +0 -0
  210. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/notebook/schema.py +0 -0
  211. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/notebook/validator.py +0 -0
  212. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/openai/openai.py +0 -0
  213. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/registry/__init__.py +0 -0
  214. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/registry/registry.py +0 -0
  215. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/repo/__init__.py +0 -0
  216. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/repo/repo.py +0 -0
  217. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/scheduler/__init__.py +0 -0
  218. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/scheduler/cron_parser.py +0 -0
  219. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/scheduler/job.py +0 -0
  220. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/scheduler/models.py +0 -0
  221. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/scheduler/monitor.py +0 -0
  222. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/scheduler/persistence.py +0 -0
  223. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/scheduler/scheduler.py +0 -0
  224. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/scheduler/validation.py +0 -0
  225. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/search/__init__.py +0 -0
  226. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/secrets/__init__.py +0 -0
  227. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/secrets/secrets_cmd.py +0 -0
  228. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/storage/__init__.py +0 -0
  229. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/storage/storage_cmd.py +0 -0
  230. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/sync/__init__.py +0 -0
  231. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/sync/test_cmd.py +0 -0
  232. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/videos/__init__.py +0 -0
  233. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/wakatime/__init__.py +0 -0
  234. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli/workflow/wakatime/wakatime.py +0 -0
  235. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli_framework.egg-info/dependency_links.txt +0 -0
  236. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli_framework.egg-info/entry_points.txt +0 -0
  237. {mcli_framework-8.0.61 → mcli_framework-8.0.62}/src/mcli_framework.egg-info/requires.txt +0 -0
  238. {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.61
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.61"
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.61
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>
@@ -52,6 +52,7 @@ src/mcli/lib/script_watcher.py
52
52
  src/mcli/lib/sync_key_store.py
53
53
  src/mcli/lib/types.py
54
54
  src/mcli/lib/workflow_models.py
55
+ src/mcli/lib/workflow_runtime.py
55
56
  src/mcli/lib/workspace_registry.py
56
57
  src/mcli/lib/api/__init__.py
57
58
  src/mcli/lib/api/api.py
File without changes