mcli-framework 8.0.60__tar.gz → 8.0.61__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 (237) hide show
  1. {mcli_framework-8.0.60/src/mcli_framework.egg-info → mcli_framework-8.0.61}/PKG-INFO +1 -1
  2. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/pyproject.toml +1 -1
  3. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/ci/act_runner.py +90 -27
  4. {mcli_framework-8.0.60 → mcli_framework-8.0.61/src/mcli_framework.egg-info}/PKG-INFO +1 -1
  5. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/LICENSE +0 -0
  6. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/MANIFEST.in +0 -0
  7. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/README.md +0 -0
  8. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/llms-full.txt +0 -0
  9. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/llms.txt +0 -0
  10. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/mcli_rust/Cargo.toml +0 -0
  11. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/mcli_rust/src/command_parser.rs +0 -0
  12. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/mcli_rust/src/file_watcher.rs +0 -0
  13. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/mcli_rust/src/lib.rs +0 -0
  14. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/mcli_rust/src/process_manager.rs +0 -0
  15. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/mcli_rust/src/tfidf.rs +0 -0
  16. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/setup.cfg +0 -0
  17. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/__init__.py +0 -0
  18. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/__main__.py +0 -0
  19. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/app/__init__.py +0 -0
  20. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/app/completion_helpers.py +0 -0
  21. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/app/context_cmd.py +0 -0
  22. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/app/delete_cmd.py +0 -0
  23. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/app/edit_cmd.py +0 -0
  24. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/app/import_cmd.py +0 -0
  25. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/app/init_cmd.py +0 -0
  26. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/app/list_cmd.py +0 -0
  27. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/app/main.py +0 -0
  28. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/app/model/__init__.py +0 -0
  29. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/app/model/model.py +0 -0
  30. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/app/model_cmd.py +0 -0
  31. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/app/mv_cmd.py +0 -0
  32. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/app/new_cmd.py +0 -0
  33. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/app/search_cmd.py +0 -0
  34. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/app/services_cmd.py +0 -0
  35. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/app/setup_cmd.py +0 -0
  36. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/app/source_sync_cmd.py +0 -0
  37. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/app/sync_cmd.py +0 -0
  38. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/app/video/__init__.py +0 -0
  39. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/app/video/video.py +0 -0
  40. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/config.toml +0 -0
  41. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/__init__.py +0 -0
  42. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/api/__init__.py +0 -0
  43. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/api/api.py +0 -0
  44. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/api/daemon_client.py +0 -0
  45. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/api/daemon_client_local.py +0 -0
  46. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/api/daemon_decorator.py +0 -0
  47. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/api/mcli_decorators.py +0 -0
  48. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/auth/__init__.py +0 -0
  49. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/auth/auth.py +0 -0
  50. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/auth/aws_manager.py +0 -0
  51. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/auth/azure_manager.py +0 -0
  52. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/auth/credential_manager.py +0 -0
  53. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/auth/gcp_manager.py +0 -0
  54. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/auth/key_manager.py +0 -0
  55. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/auth/mcli_manager.py +0 -0
  56. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/auth/token_manager.py +0 -0
  57. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/auth/token_util.py +0 -0
  58. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/config/__init__.py +0 -0
  59. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/config/config.py +0 -0
  60. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/config/settings.py +0 -0
  61. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/constants/__init__.py +0 -0
  62. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/constants/commands.py +0 -0
  63. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/constants/defaults.py +0 -0
  64. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/constants/env.py +0 -0
  65. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/constants/messages.py +0 -0
  66. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/constants/paths.py +0 -0
  67. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/constants/scripts.py +0 -0
  68. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/constants/storage.py +0 -0
  69. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/custom_commands.py +0 -0
  70. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/discovery/__init__.py +0 -0
  71. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/discovery/command_discovery.py +0 -0
  72. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/erd/__init__.py +0 -0
  73. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/erd/erd.py +0 -0
  74. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/erd/generate_graph.py +0 -0
  75. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/errors.py +0 -0
  76. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/feature_detection.py +0 -0
  77. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/files/__init__.py +0 -0
  78. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/files/files.py +0 -0
  79. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/folder_workflows.py +0 -0
  80. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/fs/__init__.py +0 -0
  81. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/fs/fs.py +0 -0
  82. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/ipfs_sync.py +0 -0
  83. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/ipfs_utils.py +0 -0
  84. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/ipns_manager.py +0 -0
  85. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/lib.py +0 -0
  86. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/logger/__init__.py +0 -0
  87. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/logger/correlation.py +0 -0
  88. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/logger/logger.py +0 -0
  89. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/logger/structured.py +0 -0
  90. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/optional_deps.py +0 -0
  91. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/paths.py +0 -0
  92. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/performance/__init__.py +0 -0
  93. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/performance/optimizer.py +0 -0
  94. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/performance/rust_bridge.py +0 -0
  95. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/performance/uvloop_config.py +0 -0
  96. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/pickles/__init__.py +0 -0
  97. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/pickles/pickles.py +0 -0
  98. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/pyenv/__init__.py +0 -0
  99. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/pyenv/deps.py +0 -0
  100. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/pyenv/manager.py +0 -0
  101. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/pyenv/venv.py +0 -0
  102. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/script_loader.py +0 -0
  103. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/script_sync.py +0 -0
  104. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/script_watcher.py +0 -0
  105. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/search/cached_vectorizer.py +0 -0
  106. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/secrets/__init__.py +0 -0
  107. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/secrets/commands.py +0 -0
  108. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/secrets/manager.py +0 -0
  109. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/secrets/repl.py +0 -0
  110. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/secrets/store.py +0 -0
  111. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/services/__init__.py +0 -0
  112. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/services/config.py +0 -0
  113. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/services/data_pipeline.py +0 -0
  114. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/services/health.py +0 -0
  115. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/services/lsh_client.py +0 -0
  116. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/services/manager.py +0 -0
  117. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/services/redis_service.py +0 -0
  118. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/services/registry.py +0 -0
  119. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/services/state.py +0 -0
  120. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/services/supervisor.py +0 -0
  121. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/shell/__init__.py +0 -0
  122. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/shell/exceptions.py +0 -0
  123. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/shell/shell.py +0 -0
  124. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/sync_key_store.py +0 -0
  125. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/templates/__init__.py +0 -0
  126. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/templates/command_templates.py +0 -0
  127. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/toml/__init__.py +0 -0
  128. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/toml/toml.py +0 -0
  129. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/types.py +0 -0
  130. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/ui/styling.py +0 -0
  131. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/ui/visual_effects.py +0 -0
  132. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/watcher/__init__.py +0 -0
  133. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/watcher/watcher.py +0 -0
  134. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/workflow_models.py +0 -0
  135. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/lib/workspace_registry.py +0 -0
  136. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/mygroup/__init__.py +0 -0
  137. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/mygroup/test_cmd.py +0 -0
  138. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/public/__init__.py +0 -0
  139. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/public/commands/__init__.py +0 -0
  140. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/public/oi/oi.py +0 -0
  141. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/public/public.py +0 -0
  142. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/self/__init__.py +0 -0
  143. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/self/completion_cmd.py +0 -0
  144. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/self/env_cmd.py +0 -0
  145. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/self/health_cmd.py +0 -0
  146. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/self/ipfs_cmd.py +0 -0
  147. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/self/logs_cmd.py +0 -0
  148. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/self/migrate_cmd.py +0 -0
  149. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/self/release_notes_cmd.py +0 -0
  150. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/self/self_cmd.py +0 -0
  151. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/self/store_cmd.py +0 -0
  152. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/self/test_cmd.py +0 -0
  153. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/self/workflows_cmd.py +0 -0
  154. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/storage/__init__.py +0 -0
  155. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/storage/backends/__init__.py +0 -0
  156. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/storage/backends/ipfs_backend.py +0 -0
  157. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/storage/base.py +0 -0
  158. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/storage/cache.py +0 -0
  159. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/storage/encryption.py +0 -0
  160. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/storage/factory.py +0 -0
  161. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/storage/registry.py +0 -0
  162. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/storage/storacha_cli.py +0 -0
  163. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/__init__.py +0 -0
  164. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/ci/__init__.py +0 -0
  165. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/ci/ci.py +0 -0
  166. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/ci/runner_status.py +0 -0
  167. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/ci/workflow_transform.py +0 -0
  168. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/daemon/__init__.py +0 -0
  169. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/daemon/async_command_database.py +0 -0
  170. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/daemon/async_process_manager.py +0 -0
  171. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/daemon/client.py +0 -0
  172. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/daemon/daemon.py +0 -0
  173. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/daemon/daemon_api.py +0 -0
  174. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/daemon/enhanced_daemon.py +0 -0
  175. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/daemon/process_cli.py +0 -0
  176. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/daemon/process_manager.py +0 -0
  177. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/daemon/test_daemon.py +0 -0
  178. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/doc_convert.py +0 -0
  179. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/docker/__init__.py +0 -0
  180. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/docker/docker.py +0 -0
  181. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/file/__init__.py +0 -0
  182. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/gcloud/__init__.py +0 -0
  183. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/gcloud/config.toml +0 -0
  184. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/gcloud/gcloud.py +0 -0
  185. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/git_commit/__init__.py +0 -0
  186. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/git_commit/ai_service.py +0 -0
  187. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/interview/__init__.py +0 -0
  188. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/lsh_integration.py +0 -0
  189. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/model_service/client.py +0 -0
  190. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/model_service/download_and_run_efficient_models.py +0 -0
  191. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/model_service/lightweight_embedder.py +0 -0
  192. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/model_service/lightweight_model_server.py +0 -0
  193. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/model_service/lightweight_test.py +0 -0
  194. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/model_service/model_service.py +0 -0
  195. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/model_service/ollama_efficient_runner.py +0 -0
  196. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/model_service/openai_adapter.py +0 -0
  197. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/model_service/pdf_processor.py +0 -0
  198. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/model_service/test_efficient_runner.py +0 -0
  199. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/model_service/test_example.py +0 -0
  200. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/model_service/test_integration.py +0 -0
  201. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/model_service/test_new_features.py +0 -0
  202. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/notebook/__init__.py +0 -0
  203. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/notebook/command_loader.py +0 -0
  204. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/notebook/converter.py +0 -0
  205. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/notebook/executor.py +0 -0
  206. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/notebook/notebook_cmd.py +0 -0
  207. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/notebook/schema.py +0 -0
  208. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/notebook/validator.py +0 -0
  209. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/openai/openai.py +0 -0
  210. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/registry/__init__.py +0 -0
  211. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/registry/registry.py +0 -0
  212. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/repo/__init__.py +0 -0
  213. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/repo/repo.py +0 -0
  214. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/scheduler/__init__.py +0 -0
  215. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/scheduler/cron_parser.py +0 -0
  216. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/scheduler/job.py +0 -0
  217. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/scheduler/models.py +0 -0
  218. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/scheduler/monitor.py +0 -0
  219. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/scheduler/persistence.py +0 -0
  220. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/scheduler/scheduler.py +0 -0
  221. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/scheduler/validation.py +0 -0
  222. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/search/__init__.py +0 -0
  223. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/secrets/__init__.py +0 -0
  224. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/secrets/secrets_cmd.py +0 -0
  225. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/storage/__init__.py +0 -0
  226. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/storage/storage_cmd.py +0 -0
  227. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/sync/__init__.py +0 -0
  228. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/sync/test_cmd.py +0 -0
  229. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/videos/__init__.py +0 -0
  230. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/wakatime/__init__.py +0 -0
  231. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/wakatime/wakatime.py +0 -0
  232. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli/workflow/workflow.py +0 -0
  233. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli_framework.egg-info/SOURCES.txt +0 -0
  234. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli_framework.egg-info/dependency_links.txt +0 -0
  235. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli_framework.egg-info/entry_points.txt +0 -0
  236. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/src/mcli_framework.egg-info/requires.txt +0 -0
  237. {mcli_framework-8.0.60 → mcli_framework-8.0.61}/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.60
3
+ Version: 8.0.61
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.60"
3
+ version = "8.0.61"
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"
@@ -28,13 +28,14 @@ _NO_STAGES_MARKERS = ("could not find any stages to run",)
28
28
  _RETRY_BACKOFF = (15, 45)
29
29
  _MAX_RETRIES = 2
30
30
 
31
- # Canonical CI entrypoint created by `mcli ci migrate`: ci.yml's `primary` job
32
- # runs on `workflow_dispatch` and calls the reusable `_ci-jobs.yml` with the
33
- # `runner_labels` input. The reusable workflow CANNOT run standalone (its
34
- # `runs-on: ${{ fromJSON(inputs.runner_labels) }}` has no value), so preflight
35
- # must drive it through this caller.
31
+ # Canonical CI entrypoint created by `mcli ci migrate`: ci.yml runs on
32
+ # `workflow_dispatch`. The job id is NOT fixed (`mcli ci migrate` keeps the
33
+ # repo's original job name, e.g. `test`) — so preflight discovers the real job
34
+ # id(s) from `act --list` rather than assuming a hardcoded name.
36
35
  _DISPATCH_WORKFLOW = Path(".github/workflows/ci.yml")
37
- _DISPATCH_JOB = "primary"
36
+
37
+ # Header label of the job-id column in `act --list` table output.
38
+ _JOB_ID_HEADER = "Job ID"
38
39
 
39
40
 
40
41
  class PreflightResult(Enum):
@@ -115,13 +116,53 @@ def default_container_arch() -> str | None:
115
116
  return None
116
117
 
117
118
 
118
- def dispatch_entrypoint() -> tuple[str, str] | None:
119
- """The canonical (workflow, job) to drive via `workflow_dispatch`, or None."""
119
+ def dispatch_workflow() -> str | None:
120
+ """The canonical workflow file to drive via `workflow_dispatch`, or None."""
120
121
  if _DISPATCH_WORKFLOW.exists():
121
- return (str(_DISPATCH_WORKFLOW), _DISPATCH_JOB)
122
+ return str(_DISPATCH_WORKFLOW)
122
123
  return None
123
124
 
124
125
 
126
+ def list_jobs(event: str, workflow: str | None = None) -> list[str]:
127
+ """Real job ids act would run for `event`, parsed from the `act --list` table.
128
+
129
+ `act --list` prints a table whose first row is a header containing a `Job ID`
130
+ column; each subsequent row is a runnable job. Returns job ids in table order
131
+ (deduplicated). Returns ``[]`` when act lists no jobs for the event (including
132
+ the "could not find any stages" no-op) or when act can't be invoked — never
133
+ raises, so callers can treat an empty result as "nothing to run".
134
+ """
135
+ cmd = ["act", event, "--list"]
136
+ if workflow is not None:
137
+ cmd += ["-W", workflow]
138
+ try:
139
+ proc = subprocess.run(cmd, capture_output=True, text=True, timeout=120)
140
+ except (FileNotFoundError, subprocess.TimeoutExpired):
141
+ return []
142
+ return _parse_job_ids(proc.stdout or "")
143
+
144
+
145
+ def _parse_job_ids(listing: str) -> list[str]:
146
+ """Extract the `Job ID` column from `act --list` table output."""
147
+ lines = [ln for ln in listing.splitlines() if ln.strip()]
148
+ if not lines:
149
+ return []
150
+ header = lines[0]
151
+ if _JOB_ID_HEADER not in header:
152
+ return []
153
+ # Columns are whitespace-separated; the job id is the second field in act's
154
+ # fixed-order table (Stage, Job ID, Job name, ...).
155
+ col = header.split().index(_JOB_ID_HEADER.split()[1]) - 1
156
+ job_ids: list[str] = []
157
+ for row in lines[1:]:
158
+ fields = row.split()
159
+ if len(fields) > col:
160
+ jid = fields[col]
161
+ if jid not in job_ids:
162
+ job_ids.append(jid)
163
+ return job_ids
164
+
165
+
125
166
  def build_act_command(
126
167
  event: str,
127
168
  workflow: str | None = None,
@@ -194,35 +235,57 @@ def run_act(
194
235
 
195
236
  Migrated repos are ``workflow_dispatch``-only, so the default
196
237
  ``pull_request`` event matches no jobs. Rather than hollow-pass, fall back
197
- to the canonical ``ci.yml`` ``primary`` job on ``workflow_dispatch`` (which
198
- drives the reusable ``_ci-jobs.yml``) and validate for real.
238
+ to the canonical ``ci.yml`` on ``workflow_dispatch``: discover its real job
239
+ id(s) via ``act --list`` (the job name is NOT fixed — ``mcli ci migrate``
240
+ keeps the repo's original name) and run each so the gate validates for real.
241
+
242
+ A green result means act actually executed ≥1 job and every job passed. If
243
+ ``act --list`` shows jobs but a run reports "could not find any stages"
244
+ (i.e. act ran nothing), that is a FAILURE, not a no-op — never a hollow pass.
199
245
  """
200
246
  arch = default_container_arch()
201
247
  result, output = _run_with_retries(build_act_command(event, arch=arch), retries, backoff)
202
248
 
203
- if result == PreflightResult.PASS and _has_no_stages(output):
204
- entry = dispatch_entrypoint()
205
- if entry is None:
206
- sys.stdout.write(
207
- "ℹ️ No act stages for this event and no ci.yml dispatch "
208
- "entrypoint — nothing to validate; treating as pass.\n"
209
- )
210
- return PreflightResult.PASS
211
- workflow, job = entry
249
+ if not (result == PreflightResult.PASS and _has_no_stages(output)):
250
+ return result
251
+
252
+ # No stages for the requested event — try the workflow_dispatch entrypoint.
253
+ workflow = dispatch_workflow()
254
+ if workflow is None:
212
255
  sys.stdout.write(
213
- f"ℹ️ No '{event}' stages (workflow_dispatch-only); running "
214
- f"{workflow} -j {job} via workflow_dispatch…\n"
256
+ "ℹ️ No act stages for this event and no ci.yml dispatch "
257
+ "entrypoint — nothing to validate; treating as pass.\n"
215
258
  )
259
+ return PreflightResult.PASS
260
+
261
+ jobs = list_jobs("workflow_dispatch", workflow)
262
+ if not jobs:
263
+ # The dispatch entrypoint genuinely has no jobs — a real no-op.
264
+ sys.stdout.write(
265
+ f"ℹ️ {workflow} has no workflow_dispatch jobs — nothing to "
266
+ "validate; treating as pass.\n"
267
+ )
268
+ return PreflightResult.PASS
269
+
270
+ targets = f"{workflow} {jobs}"
271
+ sys.stdout.write(
272
+ f"ℹ️ No '{event}' stages (workflow_dispatch-only); running "
273
+ f"{targets} via workflow_dispatch…\n"
274
+ )
275
+ for job in jobs:
216
276
  result, output = _run_with_retries(
217
277
  build_act_command("workflow_dispatch", workflow=workflow, job=job, arch=arch),
218
278
  retries,
219
279
  backoff,
220
280
  )
221
- # If even the dispatch entrypoint has no stages, it's a genuine no-op.
222
- if result == PreflightResult.PASS and _has_no_stages(output):
223
- return PreflightResult.PASS
224
-
225
- return result
281
+ if result == PreflightResult.UNREACHABLE:
282
+ return PreflightResult.UNREACHABLE
283
+ # We KNOW this job exists (it came from `act --list`), so "no stages"
284
+ # here means act ran nothing — a failure, not a no-op. Do not pass.
285
+ if result != PreflightResult.PASS or _has_no_stages(output):
286
+ return PreflightResult.FAIL
287
+
288
+ return PreflightResult.PASS
226
289
 
227
290
 
228
291
  def preflight(repo_slug: str, event: str = "pull_request") -> PreflightResult:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mcli-framework
3
- Version: 8.0.60
3
+ Version: 8.0.61
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