mcli-framework 8.0.68__tar.gz → 8.0.69__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 (239) hide show
  1. {mcli_framework-8.0.68/src/mcli_framework.egg-info → mcli_framework-8.0.69}/PKG-INFO +1 -1
  2. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/pyproject.toml +1 -1
  3. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/workflow/ci/act_runner.py +48 -30
  4. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/workflow/ci/ci.py +18 -3
  5. {mcli_framework-8.0.68 → mcli_framework-8.0.69/src/mcli_framework.egg-info}/PKG-INFO +1 -1
  6. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/LICENSE +0 -0
  7. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/MANIFEST.in +0 -0
  8. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/README.md +0 -0
  9. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/llms-full.txt +0 -0
  10. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/llms.txt +0 -0
  11. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/mcli_rust/Cargo.toml +0 -0
  12. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/mcli_rust/src/command_parser.rs +0 -0
  13. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/mcli_rust/src/file_watcher.rs +0 -0
  14. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/mcli_rust/src/lib.rs +0 -0
  15. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/mcli_rust/src/process_manager.rs +0 -0
  16. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/mcli_rust/src/tfidf.rs +0 -0
  17. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/setup.cfg +0 -0
  18. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/__init__.py +0 -0
  19. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/__main__.py +0 -0
  20. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/app/__init__.py +0 -0
  21. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/app/completion_helpers.py +0 -0
  22. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/app/context_cmd.py +0 -0
  23. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/app/delete_cmd.py +0 -0
  24. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/app/edit_cmd.py +0 -0
  25. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/app/import_cmd.py +0 -0
  26. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/app/init_cmd.py +0 -0
  27. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/app/list_cmd.py +0 -0
  28. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/app/main.py +0 -0
  29. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/app/model/__init__.py +0 -0
  30. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/app/model/model.py +0 -0
  31. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/app/model_cmd.py +0 -0
  32. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/app/mv_cmd.py +0 -0
  33. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/app/new_cmd.py +0 -0
  34. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/app/search_cmd.py +0 -0
  35. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/app/services_cmd.py +0 -0
  36. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/app/setup_cmd.py +0 -0
  37. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/app/source_sync_cmd.py +0 -0
  38. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/app/sync_cmd.py +0 -0
  39. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/app/video/__init__.py +0 -0
  40. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/app/video/video.py +0 -0
  41. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/config.toml +0 -0
  42. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/__init__.py +0 -0
  43. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/api/__init__.py +0 -0
  44. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/api/api.py +0 -0
  45. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/api/daemon_client.py +0 -0
  46. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/api/daemon_client_local.py +0 -0
  47. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/api/daemon_decorator.py +0 -0
  48. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/api/mcli_decorators.py +0 -0
  49. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/auth/__init__.py +0 -0
  50. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/auth/auth.py +0 -0
  51. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/auth/aws_manager.py +0 -0
  52. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/auth/azure_manager.py +0 -0
  53. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/auth/credential_manager.py +0 -0
  54. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/auth/gcp_manager.py +0 -0
  55. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/auth/key_manager.py +0 -0
  56. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/auth/mcli_manager.py +0 -0
  57. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/auth/token_manager.py +0 -0
  58. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/auth/token_util.py +0 -0
  59. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/config/__init__.py +0 -0
  60. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/config/config.py +0 -0
  61. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/config/settings.py +0 -0
  62. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/constants/__init__.py +0 -0
  63. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/constants/commands.py +0 -0
  64. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/constants/defaults.py +0 -0
  65. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/constants/env.py +0 -0
  66. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/constants/messages.py +0 -0
  67. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/constants/paths.py +0 -0
  68. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/constants/scripts.py +0 -0
  69. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/constants/storage.py +0 -0
  70. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/custom_commands.py +0 -0
  71. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/discovery/__init__.py +0 -0
  72. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/discovery/command_discovery.py +0 -0
  73. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/erd/__init__.py +0 -0
  74. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/erd/erd.py +0 -0
  75. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/erd/generate_graph.py +0 -0
  76. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/errors.py +0 -0
  77. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/feature_detection.py +0 -0
  78. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/files/__init__.py +0 -0
  79. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/files/files.py +0 -0
  80. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/folder_workflows.py +0 -0
  81. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/fs/__init__.py +0 -0
  82. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/fs/fs.py +0 -0
  83. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/ipfs_sync.py +0 -0
  84. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/ipfs_utils.py +0 -0
  85. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/ipns_manager.py +0 -0
  86. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/lib.py +0 -0
  87. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/logger/__init__.py +0 -0
  88. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/logger/correlation.py +0 -0
  89. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/logger/logger.py +0 -0
  90. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/logger/structured.py +0 -0
  91. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/optional_deps.py +0 -0
  92. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/paths.py +0 -0
  93. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/performance/__init__.py +0 -0
  94. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/performance/optimizer.py +0 -0
  95. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/performance/rust_bridge.py +0 -0
  96. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/performance/uvloop_config.py +0 -0
  97. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/pickles/__init__.py +0 -0
  98. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/pickles/pickles.py +0 -0
  99. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/pyenv/__init__.py +0 -0
  100. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/pyenv/deps.py +0 -0
  101. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/pyenv/manager.py +0 -0
  102. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/pyenv/venv.py +0 -0
  103. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/script_loader.py +0 -0
  104. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/script_sync.py +0 -0
  105. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/script_watcher.py +0 -0
  106. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/search/cached_vectorizer.py +0 -0
  107. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/secrets/__init__.py +0 -0
  108. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/secrets/commands.py +0 -0
  109. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/secrets/manager.py +0 -0
  110. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/secrets/repl.py +0 -0
  111. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/secrets/store.py +0 -0
  112. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/services/__init__.py +0 -0
  113. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/services/config.py +0 -0
  114. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/services/data_pipeline.py +0 -0
  115. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/services/health.py +0 -0
  116. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/services/lsh_client.py +0 -0
  117. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/services/manager.py +0 -0
  118. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/services/redis_service.py +0 -0
  119. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/services/registry.py +0 -0
  120. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/services/state.py +0 -0
  121. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/services/supervisor.py +0 -0
  122. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/shell/__init__.py +0 -0
  123. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/shell/exceptions.py +0 -0
  124. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/shell/shell.py +0 -0
  125. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/sync_key_store.py +0 -0
  126. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/templates/__init__.py +0 -0
  127. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/templates/command_templates.py +0 -0
  128. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/toml/__init__.py +0 -0
  129. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/toml/toml.py +0 -0
  130. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/types.py +0 -0
  131. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/ui/styling.py +0 -0
  132. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/ui/visual_effects.py +0 -0
  133. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/watcher/__init__.py +0 -0
  134. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/watcher/watcher.py +0 -0
  135. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/workflow_models.py +0 -0
  136. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/workflow_runtime.py +0 -0
  137. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/lib/workspace_registry.py +0 -0
  138. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/mygroup/__init__.py +0 -0
  139. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/mygroup/test_cmd.py +0 -0
  140. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/public/__init__.py +0 -0
  141. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/public/commands/__init__.py +0 -0
  142. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/public/oi/oi.py +0 -0
  143. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/public/public.py +0 -0
  144. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/self/__init__.py +0 -0
  145. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/self/completion_cmd.py +0 -0
  146. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/self/env_cmd.py +0 -0
  147. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/self/health_cmd.py +0 -0
  148. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/self/ipfs_cmd.py +0 -0
  149. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/self/logs_cmd.py +0 -0
  150. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/self/migrate_cmd.py +0 -0
  151. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/self/release_notes_cmd.py +0 -0
  152. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/self/self_cmd.py +0 -0
  153. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/self/store_cmd.py +0 -0
  154. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/self/test_cmd.py +0 -0
  155. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/self/workflows_cmd.py +0 -0
  156. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/storage/__init__.py +0 -0
  157. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/storage/backends/__init__.py +0 -0
  158. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/storage/backends/ipfs_backend.py +0 -0
  159. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/storage/base.py +0 -0
  160. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/storage/cache.py +0 -0
  161. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/storage/encryption.py +0 -0
  162. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/storage/factory.py +0 -0
  163. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/storage/registry.py +0 -0
  164. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/storage/storacha_cli.py +0 -0
  165. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/workflow/__init__.py +0 -0
  166. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/workflow/ci/__init__.py +0 -0
  167. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/workflow/ci/act_lock.py +0 -0
  168. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/workflow/ci/runner_status.py +0 -0
  169. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/workflow/ci/workflow_transform.py +0 -0
  170. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/workflow/daemon/__init__.py +0 -0
  171. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/workflow/daemon/async_command_database.py +0 -0
  172. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/workflow/daemon/async_process_manager.py +0 -0
  173. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/workflow/daemon/client.py +0 -0
  174. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/workflow/daemon/daemon.py +0 -0
  175. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/workflow/daemon/daemon_api.py +0 -0
  176. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/workflow/daemon/enhanced_daemon.py +0 -0
  177. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/workflow/daemon/process_cli.py +0 -0
  178. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/workflow/daemon/process_manager.py +0 -0
  179. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/workflow/daemon/test_daemon.py +0 -0
  180. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/workflow/doc_convert.py +0 -0
  181. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/workflow/docker/__init__.py +0 -0
  182. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/workflow/docker/docker.py +0 -0
  183. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/workflow/file/__init__.py +0 -0
  184. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/workflow/gcloud/__init__.py +0 -0
  185. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/workflow/gcloud/config.toml +0 -0
  186. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/workflow/gcloud/gcloud.py +0 -0
  187. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/workflow/git_commit/__init__.py +0 -0
  188. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/workflow/git_commit/ai_service.py +0 -0
  189. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/workflow/interview/__init__.py +0 -0
  190. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/workflow/lsh_integration.py +0 -0
  191. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/workflow/model_service/client.py +0 -0
  192. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/workflow/model_service/download_and_run_efficient_models.py +0 -0
  193. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/workflow/model_service/lightweight_embedder.py +0 -0
  194. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/workflow/model_service/lightweight_model_server.py +0 -0
  195. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/workflow/model_service/lightweight_test.py +0 -0
  196. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/workflow/model_service/model_service.py +0 -0
  197. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/workflow/model_service/ollama_efficient_runner.py +0 -0
  198. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/workflow/model_service/openai_adapter.py +0 -0
  199. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/workflow/model_service/pdf_processor.py +0 -0
  200. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/workflow/model_service/test_efficient_runner.py +0 -0
  201. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/workflow/model_service/test_example.py +0 -0
  202. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/workflow/model_service/test_integration.py +0 -0
  203. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/workflow/model_service/test_new_features.py +0 -0
  204. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/workflow/notebook/__init__.py +0 -0
  205. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/workflow/notebook/command_loader.py +0 -0
  206. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/workflow/notebook/converter.py +0 -0
  207. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/workflow/notebook/executor.py +0 -0
  208. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/workflow/notebook/notebook_cmd.py +0 -0
  209. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/workflow/notebook/schema.py +0 -0
  210. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/workflow/notebook/validator.py +0 -0
  211. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/workflow/openai/openai.py +0 -0
  212. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/workflow/registry/__init__.py +0 -0
  213. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/workflow/registry/registry.py +0 -0
  214. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/workflow/repo/__init__.py +0 -0
  215. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/workflow/repo/repo.py +0 -0
  216. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/workflow/scheduler/__init__.py +0 -0
  217. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/workflow/scheduler/cron_parser.py +0 -0
  218. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/workflow/scheduler/job.py +0 -0
  219. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/workflow/scheduler/models.py +0 -0
  220. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/workflow/scheduler/monitor.py +0 -0
  221. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/workflow/scheduler/persistence.py +0 -0
  222. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/workflow/scheduler/scheduler.py +0 -0
  223. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/workflow/scheduler/validation.py +0 -0
  224. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/workflow/search/__init__.py +0 -0
  225. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/workflow/secrets/__init__.py +0 -0
  226. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/workflow/secrets/secrets_cmd.py +0 -0
  227. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/workflow/storage/__init__.py +0 -0
  228. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/workflow/storage/storage_cmd.py +0 -0
  229. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/workflow/sync/__init__.py +0 -0
  230. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/workflow/sync/test_cmd.py +0 -0
  231. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/workflow/videos/__init__.py +0 -0
  232. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/workflow/wakatime/__init__.py +0 -0
  233. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/workflow/wakatime/wakatime.py +0 -0
  234. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli/workflow/workflow.py +0 -0
  235. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli_framework.egg-info/SOURCES.txt +0 -0
  236. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli_framework.egg-info/dependency_links.txt +0 -0
  237. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli_framework.egg-info/entry_points.txt +0 -0
  238. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/src/mcli_framework.egg-info/requires.txt +0 -0
  239. {mcli_framework-8.0.68 → mcli_framework-8.0.69}/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.68
3
+ Version: 8.0.69
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.68"
3
+ version = "8.0.69"
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"
@@ -4,6 +4,7 @@ from __future__ import annotations
4
4
 
5
5
  import os
6
6
  import platform
7
+ import re
7
8
  import shutil
8
9
  import subprocess
9
10
  import sys
@@ -23,8 +24,10 @@ _RATE_LIMIT_MARKERS = (
23
24
  )
24
25
 
25
26
  # act emits this when no job matches the requested event (e.g. a
26
- # workflow_dispatch-only workflow queried for pull_request). That is a no-op,
27
- # not a failure, so the gate must treat it as PASS rather than block the push.
27
+ # workflow_dispatch-only workflow queried for pull_request). That is not a
28
+ # failure (it must not block the push, #205), but it is not a pass either:
29
+ # run_act falls back to workflow_dispatch gates, and reports NOT_VALIDATED when
30
+ # no job ran at all (#242).
28
31
  _NO_STAGES_MARKERS = ("could not find any stages to run",)
29
32
 
30
33
  # Backoff (seconds) between docker rate-limit retries; the last value repeats.
@@ -32,9 +35,17 @@ _RETRY_BACKOFF = (15, 45)
32
35
  _MAX_RETRIES = 2
33
36
 
34
37
  # Dispatch-only workflows that are safe and expected to run as local gates.
35
- # Deploy, release, and audit workflows are intentionally not selected.
38
+ # A workflow file is a gate when its stem (split on "-", "_", ".") has a gate
39
+ # token and no side-effect token. Deploy, release, publish, build and audit
40
+ # workflows are never selected; neither is the dormant self-hosted fallback.
36
41
  _WORKFLOW_DIR = Path(".github/workflows")
37
- _DISPATCH_GATE_NAMES = {"ci", "secret-scan", "security-scan"}
42
+ _DISPATCH_GATE_TOKENS = frozenset(
43
+ {"ci", "test", "tests", "lint", "typecheck", "check", "checks", "scan", "security", "quality"}
44
+ )
45
+ _DISPATCH_SKIP_TOKENS = frozenset(
46
+ {"deploy", "release", "publish", "build", "audit", "ops", "upload", "notify", "sync"}
47
+ )
48
+ _DISPATCH_SKIP_STEMS = frozenset({"self-hosted-ci"})
38
49
 
39
50
  # Header label of the job-id column in `act --list` table output.
40
51
  _JOB_ID_HEADER = "Job ID"
@@ -46,9 +57,10 @@ def _act_command(*args: str) -> list[str]:
46
57
 
47
58
 
48
59
  class PreflightResult(Enum):
49
- PASS = "pass"
60
+ PASS = "pass" # act ran >=1 job and every job passed
50
61
  FAIL = "fail"
51
- UNREACHABLE = "unreachable"
62
+ UNREACHABLE = "unreachable" # act cannot run here
63
+ NOT_VALIDATED = "not_validated" # act ran, but no job matched: nothing validated
52
64
 
53
65
 
54
66
  def _is_docker_rate_limited(output: str) -> bool:
@@ -152,26 +164,28 @@ def default_container_arch() -> str | None:
152
164
  return None
153
165
 
154
166
 
167
+ def _is_dispatch_gate(stem: str) -> bool:
168
+ """True if a workflow file stem names a check (ci/test/lint/scan…), not a
169
+ deploy/release/publish/build job."""
170
+ stem = stem.lower()
171
+ if stem in _DISPATCH_SKIP_STEMS:
172
+ return False
173
+ tokens = set(re.split(r"[-_.]", stem))
174
+ return bool(tokens & _DISPATCH_GATE_TOKENS) and not tokens & _DISPATCH_SKIP_TOKENS
175
+
176
+
155
177
  def dispatch_workflows() -> list[str]:
156
- """Return dispatch-only CI and security workflows safe to run locally.
178
+ """Return dispatch-only check workflows safe to run locally, sorted by path.
157
179
 
158
- The act-first migration historically preserved workflow filenames, so a
159
- real gate may be ``elixir-ci.yml`` rather than the newer canonical
160
- ``ci.yml``. Select those CI names plus explicit security scans, while
161
- excluding the dormant self-hosted fallback and every deploy/release job.
180
+ The act-first migration preserved workflow filenames, so a real gate may be
181
+ ``elixir-ci.yml``, ``test.yml`` or ``lint.yml`` rather than ``ci.yml``.
182
+ Select by name token (see ``_DISPATCH_GATE_TOKENS``), and never select a
183
+ deploy/release/publish/build workflow or the dormant self-hosted fallback.
162
184
  """
163
185
  if not _WORKFLOW_DIR.is_dir():
164
186
  return []
165
-
166
- workflows: list[str] = []
167
- for path in sorted((*_WORKFLOW_DIR.glob("*.yml"), *_WORKFLOW_DIR.glob("*.yaml"))):
168
- stem = path.stem.lower()
169
- is_ci = stem == "ci" or stem.startswith("ci-") or stem.endswith("-ci")
170
- if stem == "self-hosted-ci":
171
- continue
172
- if is_ci or stem in _DISPATCH_GATE_NAMES:
173
- workflows.append(str(path))
174
- return workflows
187
+ paths = sorted((*_WORKFLOW_DIR.glob("*.yml"), *_WORKFLOW_DIR.glob("*.yaml")))
188
+ return [str(path) for path in paths if _is_dispatch_gate(path.stem)]
175
189
 
176
190
 
177
191
  def list_jobs(event: str, workflow: str | None = None) -> list[str] | None:
@@ -296,12 +310,14 @@ def run_act(
296
310
 
297
311
  Migrated repos are ``workflow_dispatch``-only, so the default
298
312
  ``pull_request`` event matches no jobs. Rather than hollow-pass, discover
299
- CI and security gate workflows and run their real job ids via
300
- ``workflow_dispatch``. Deploy and release workflows are never selected.
313
+ check workflows (ci/test/lint/scan…, see ``dispatch_workflows``) and run
314
+ their real job ids via ``workflow_dispatch``. Deploy, release, publish and
315
+ build workflows are never selected.
301
316
 
302
317
  A green result means act actually executed ≥1 job and every job passed. If
303
318
  ``act --list`` shows jobs but a run reports "could not find any stages"
304
- (i.e. act ran nothing), that is a FAILURE, not a no-op — never a hollow pass.
319
+ (i.e. act ran nothing), that is a FAILURE. If no job matched the event and
320
+ no dispatch gate has a job, the result is NOT_VALIDATED — never PASS (#242).
305
321
  """
306
322
  arch = default_container_arch()
307
323
  result, output = _run_with_retries(build_act_command(event, arch=arch), retries, backoff)
@@ -313,10 +329,10 @@ def run_act(
313
329
  workflows = dispatch_workflows()
314
330
  if not workflows:
315
331
  sys.stdout.write(
316
- "ℹ️ No act stages for this event and no CI/security dispatch "
317
- "entrypoint — nothing to validate; treating as pass.\n"
332
+ f"⚠️ No '{event}' jobs and no ci/test/lint/scan workflow_dispatch "
333
+ "workflow — nothing was validated.\n"
318
334
  )
319
- return PreflightResult.PASS
335
+ return PreflightResult.NOT_VALIDATED
320
336
 
321
337
  ran_job = False
322
338
  for workflow in workflows:
@@ -351,9 +367,10 @@ def run_act(
351
367
 
352
368
  if not ran_job:
353
369
  sys.stdout.write(
354
- "ℹ️ CI/security dispatch workflows contain no runnable jobs — "
355
- "nothing to validate; treating as pass.\n"
370
+ f"⚠️ No '{event}' jobs, and {', '.join(workflows)} "
371
+ "have no workflow_dispatch jobs — nothing was validated.\n"
356
372
  )
373
+ return PreflightResult.NOT_VALIDATED
357
374
 
358
375
  return PreflightResult.PASS
359
376
 
@@ -361,7 +378,8 @@ def run_act(
361
378
  def preflight(
362
379
  repo_slug: str, event: str = "pull_request", lock_timeout: float | None = None
363
380
  ) -> PreflightResult:
364
- """Primary gate. PASS/FAIL if act can run; UNREACHABLE if act can't start here.
381
+ """Primary gate. PASS/FAIL if act can run; UNREACHABLE if act can't start here;
382
+ NOT_VALIDATED if act ran but no job matched (nothing was validated).
365
383
 
366
384
  `repo_slug` is accepted for symmetry and future use; the runner fallback is
367
385
  orchestrated by the CLI layer based on runner_status.has_online_runner.
@@ -120,6 +120,13 @@ def preflight(event, lock_timeout):
120
120
  if result == PreflightResult.FAIL:
121
121
  click.echo("❌ act failed — fix before opening PR.")
122
122
  raise SystemExit(1)
123
+ if result == PreflightResult.NOT_VALIDATED:
124
+ click.echo(
125
+ "⚠️ act ran no job — nothing was validated (this is NOT a pass). Add a "
126
+ "ci/test/lint workflow with a workflow_dispatch trigger, or validate "
127
+ "this PR by other means."
128
+ )
129
+ raise SystemExit(2)
123
130
  # UNREACHABLE
124
131
  if slug and has_online_runner(slug):
125
132
  click.echo(
@@ -144,6 +151,9 @@ def pr():
144
151
  if result == PreflightResult.FAIL:
145
152
  click.echo("act failed; not opening PR.")
146
153
  raise SystemExit(1)
154
+ if result == PreflightResult.NOT_VALIDATED:
155
+ click.echo("act ran no job; refusing to open an unvalidated PR.")
156
+ raise SystemExit(2)
147
157
  if slug and has_online_runner(slug):
148
158
  click.echo("act unreachable; pushing so the runner can validate.")
149
159
  subprocess.run(["git", "push", "-u", "origin", "HEAD"], check=False, timeout=120)
@@ -156,9 +166,11 @@ def pr():
156
166
  PRE_PUSH_HOOK = """#!/usr/bin/env bash
157
167
  # mcli-ci pre-push gate: validate with act before pushing.
158
168
  # Blocks ONLY on a real act failure (exit 1). When act cannot validate locally
159
- # — e.g. Docker Hub rate-limit (toomanyrequests, retried first), no docker, or
160
- # an online runner will validate instead (exit 2/3) — the push is allowed so an
161
- # environment hiccup never wedges your workflow.
169
+ # — e.g. Docker Hub rate-limit (toomanyrequests, retried first), no docker, an
170
+ # online runner will validate instead, or the repo has no workflow job act can
171
+ # run (exit 2/3) — the push is allowed so an environment hiccup or a repo with
172
+ # no gate never wedges your workflow, but the hook says loudly that the push
173
+ # was NOT validated. It never reports such a push as green.
162
174
  # act runs are serialised machine-wide, so this may wait for another repo's
163
175
  # preflight to finish (bounded; see --lock-timeout / MCLI_CI_LOCK_TIMEOUT).
164
176
  # Override a real failure with:
@@ -183,6 +195,9 @@ if [ "$code" -eq 1 ]; then
183
195
  echo "mcli-ci: act reported failures — push blocked. Override: git push --no-verify" >&2
184
196
  exit 1
185
197
  fi
198
+ if [ "$code" -ne 0 ]; then
199
+ echo "mcli-ci: WARNING — this push was NOT validated (preflight exit $code). Push allowed." >&2
200
+ fi
186
201
  exit 0
187
202
  """
188
203
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mcli-framework
3
- Version: 8.0.68
3
+ Version: 8.0.69
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