mcli-framework 8.0.56__tar.gz → 8.0.58__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 (243) hide show
  1. {mcli_framework-8.0.56/src/mcli_framework.egg-info → mcli_framework-8.0.58}/PKG-INFO +1 -1
  2. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/pyproject.toml +1 -1
  3. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/self/self_cmd.py +4 -4
  4. mcli_framework-8.0.58/src/mcli/workflow/ci/act_runner.py +242 -0
  5. {mcli_framework-8.0.56 → mcli_framework-8.0.58/src/mcli_framework.egg-info}/PKG-INFO +1 -1
  6. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli_framework.egg-info/SOURCES.txt +0 -5
  7. mcli_framework-8.0.56/src/mcli/app/commands_cmd.py +0 -1994
  8. mcli_framework-8.0.56/src/mcli/app/create_cmd.py +0 -442
  9. mcli_framework-8.0.56/src/mcli/app/migrate_cmd.py +0 -395
  10. mcli_framework-8.0.56/src/mcli/app/remove_cmd.py +0 -60
  11. mcli_framework-8.0.56/src/mcli/app/rm_cmd.py +0 -107
  12. mcli_framework-8.0.56/src/mcli/workflow/ci/act_runner.py +0 -140
  13. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/LICENSE +0 -0
  14. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/MANIFEST.in +0 -0
  15. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/README.md +0 -0
  16. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/llms-full.txt +0 -0
  17. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/llms.txt +0 -0
  18. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/mcli_rust/Cargo.toml +0 -0
  19. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/mcli_rust/src/command_parser.rs +0 -0
  20. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/mcli_rust/src/file_watcher.rs +0 -0
  21. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/mcli_rust/src/lib.rs +0 -0
  22. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/mcli_rust/src/process_manager.rs +0 -0
  23. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/mcli_rust/src/tfidf.rs +0 -0
  24. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/setup.cfg +0 -0
  25. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/__init__.py +0 -0
  26. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/__main__.py +0 -0
  27. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/app/__init__.py +0 -0
  28. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/app/completion_helpers.py +0 -0
  29. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/app/context_cmd.py +0 -0
  30. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/app/delete_cmd.py +0 -0
  31. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/app/edit_cmd.py +0 -0
  32. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/app/import_cmd.py +0 -0
  33. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/app/init_cmd.py +0 -0
  34. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/app/list_cmd.py +0 -0
  35. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/app/main.py +0 -0
  36. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/app/model/__init__.py +0 -0
  37. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/app/model/model.py +0 -0
  38. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/app/model_cmd.py +0 -0
  39. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/app/mv_cmd.py +0 -0
  40. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/app/new_cmd.py +0 -0
  41. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/app/search_cmd.py +0 -0
  42. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/app/services_cmd.py +0 -0
  43. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/app/setup_cmd.py +0 -0
  44. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/app/source_sync_cmd.py +0 -0
  45. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/app/sync_cmd.py +0 -0
  46. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/app/video/__init__.py +0 -0
  47. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/app/video/video.py +0 -0
  48. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/config.toml +0 -0
  49. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/__init__.py +0 -0
  50. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/api/__init__.py +0 -0
  51. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/api/api.py +0 -0
  52. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/api/daemon_client.py +0 -0
  53. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/api/daemon_client_local.py +0 -0
  54. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/api/daemon_decorator.py +0 -0
  55. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/api/mcli_decorators.py +0 -0
  56. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/auth/__init__.py +0 -0
  57. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/auth/auth.py +0 -0
  58. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/auth/aws_manager.py +0 -0
  59. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/auth/azure_manager.py +0 -0
  60. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/auth/credential_manager.py +0 -0
  61. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/auth/gcp_manager.py +0 -0
  62. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/auth/key_manager.py +0 -0
  63. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/auth/mcli_manager.py +0 -0
  64. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/auth/token_manager.py +0 -0
  65. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/auth/token_util.py +0 -0
  66. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/config/__init__.py +0 -0
  67. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/config/config.py +0 -0
  68. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/config/settings.py +0 -0
  69. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/constants/__init__.py +0 -0
  70. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/constants/commands.py +0 -0
  71. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/constants/defaults.py +0 -0
  72. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/constants/env.py +0 -0
  73. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/constants/messages.py +0 -0
  74. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/constants/paths.py +0 -0
  75. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/constants/scripts.py +0 -0
  76. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/constants/storage.py +0 -0
  77. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/custom_commands.py +0 -0
  78. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/discovery/__init__.py +0 -0
  79. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/discovery/command_discovery.py +0 -0
  80. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/erd/__init__.py +0 -0
  81. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/erd/erd.py +0 -0
  82. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/erd/generate_graph.py +0 -0
  83. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/errors.py +0 -0
  84. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/feature_detection.py +0 -0
  85. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/files/__init__.py +0 -0
  86. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/files/files.py +0 -0
  87. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/folder_workflows.py +0 -0
  88. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/fs/__init__.py +0 -0
  89. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/fs/fs.py +0 -0
  90. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/ipfs_sync.py +0 -0
  91. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/ipfs_utils.py +0 -0
  92. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/ipns_manager.py +0 -0
  93. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/lib.py +0 -0
  94. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/logger/__init__.py +0 -0
  95. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/logger/correlation.py +0 -0
  96. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/logger/logger.py +0 -0
  97. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/logger/structured.py +0 -0
  98. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/optional_deps.py +0 -0
  99. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/paths.py +0 -0
  100. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/performance/__init__.py +0 -0
  101. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/performance/optimizer.py +0 -0
  102. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/performance/rust_bridge.py +0 -0
  103. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/performance/uvloop_config.py +0 -0
  104. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/pickles/__init__.py +0 -0
  105. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/pickles/pickles.py +0 -0
  106. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/pyenv/__init__.py +0 -0
  107. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/pyenv/deps.py +0 -0
  108. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/pyenv/manager.py +0 -0
  109. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/pyenv/venv.py +0 -0
  110. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/script_loader.py +0 -0
  111. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/script_sync.py +0 -0
  112. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/script_watcher.py +0 -0
  113. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/search/cached_vectorizer.py +0 -0
  114. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/secrets/__init__.py +0 -0
  115. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/secrets/commands.py +0 -0
  116. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/secrets/manager.py +0 -0
  117. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/secrets/repl.py +0 -0
  118. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/secrets/store.py +0 -0
  119. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/services/__init__.py +0 -0
  120. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/services/config.py +0 -0
  121. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/services/data_pipeline.py +0 -0
  122. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/services/health.py +0 -0
  123. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/services/lsh_client.py +0 -0
  124. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/services/manager.py +0 -0
  125. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/services/redis_service.py +0 -0
  126. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/services/registry.py +0 -0
  127. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/services/state.py +0 -0
  128. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/services/supervisor.py +0 -0
  129. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/shell/__init__.py +0 -0
  130. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/shell/exceptions.py +0 -0
  131. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/shell/shell.py +0 -0
  132. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/sync_key_store.py +0 -0
  133. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/templates/__init__.py +0 -0
  134. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/templates/command_templates.py +0 -0
  135. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/toml/__init__.py +0 -0
  136. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/toml/toml.py +0 -0
  137. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/types.py +0 -0
  138. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/ui/styling.py +0 -0
  139. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/ui/visual_effects.py +0 -0
  140. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/watcher/__init__.py +0 -0
  141. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/watcher/watcher.py +0 -0
  142. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/workflow_models.py +0 -0
  143. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/lib/workspace_registry.py +0 -0
  144. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/mygroup/__init__.py +0 -0
  145. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/mygroup/test_cmd.py +0 -0
  146. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/public/__init__.py +0 -0
  147. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/public/commands/__init__.py +0 -0
  148. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/public/oi/oi.py +0 -0
  149. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/public/public.py +0 -0
  150. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/self/__init__.py +0 -0
  151. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/self/completion_cmd.py +0 -0
  152. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/self/env_cmd.py +0 -0
  153. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/self/health_cmd.py +0 -0
  154. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/self/ipfs_cmd.py +0 -0
  155. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/self/logs_cmd.py +0 -0
  156. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/self/migrate_cmd.py +0 -0
  157. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/self/release_notes_cmd.py +0 -0
  158. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/self/store_cmd.py +0 -0
  159. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/self/test_cmd.py +0 -0
  160. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/self/workflows_cmd.py +0 -0
  161. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/storage/__init__.py +0 -0
  162. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/storage/backends/__init__.py +0 -0
  163. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/storage/backends/ipfs_backend.py +0 -0
  164. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/storage/base.py +0 -0
  165. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/storage/cache.py +0 -0
  166. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/storage/encryption.py +0 -0
  167. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/storage/factory.py +0 -0
  168. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/storage/registry.py +0 -0
  169. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/storage/storacha_cli.py +0 -0
  170. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/workflow/__init__.py +0 -0
  171. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/workflow/ci/__init__.py +0 -0
  172. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/workflow/ci/ci.py +0 -0
  173. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/workflow/ci/runner_status.py +0 -0
  174. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/workflow/ci/workflow_transform.py +0 -0
  175. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/workflow/daemon/__init__.py +0 -0
  176. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/workflow/daemon/async_command_database.py +0 -0
  177. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/workflow/daemon/async_process_manager.py +0 -0
  178. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/workflow/daemon/client.py +0 -0
  179. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/workflow/daemon/daemon.py +0 -0
  180. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/workflow/daemon/daemon_api.py +0 -0
  181. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/workflow/daemon/enhanced_daemon.py +0 -0
  182. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/workflow/daemon/process_cli.py +0 -0
  183. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/workflow/daemon/process_manager.py +0 -0
  184. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/workflow/daemon/test_daemon.py +0 -0
  185. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/workflow/doc_convert.py +0 -0
  186. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/workflow/docker/__init__.py +0 -0
  187. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/workflow/docker/docker.py +0 -0
  188. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/workflow/file/__init__.py +0 -0
  189. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/workflow/gcloud/__init__.py +0 -0
  190. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/workflow/gcloud/config.toml +0 -0
  191. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/workflow/gcloud/gcloud.py +0 -0
  192. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/workflow/git_commit/__init__.py +0 -0
  193. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/workflow/git_commit/ai_service.py +0 -0
  194. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/workflow/interview/__init__.py +0 -0
  195. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/workflow/lsh_integration.py +0 -0
  196. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/workflow/model_service/client.py +0 -0
  197. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/workflow/model_service/download_and_run_efficient_models.py +0 -0
  198. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/workflow/model_service/lightweight_embedder.py +0 -0
  199. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/workflow/model_service/lightweight_model_server.py +0 -0
  200. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/workflow/model_service/lightweight_test.py +0 -0
  201. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/workflow/model_service/model_service.py +0 -0
  202. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/workflow/model_service/ollama_efficient_runner.py +0 -0
  203. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/workflow/model_service/openai_adapter.py +0 -0
  204. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/workflow/model_service/pdf_processor.py +0 -0
  205. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/workflow/model_service/test_efficient_runner.py +0 -0
  206. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/workflow/model_service/test_example.py +0 -0
  207. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/workflow/model_service/test_integration.py +0 -0
  208. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/workflow/model_service/test_new_features.py +0 -0
  209. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/workflow/notebook/__init__.py +0 -0
  210. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/workflow/notebook/command_loader.py +0 -0
  211. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/workflow/notebook/converter.py +0 -0
  212. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/workflow/notebook/executor.py +0 -0
  213. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/workflow/notebook/notebook_cmd.py +0 -0
  214. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/workflow/notebook/schema.py +0 -0
  215. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/workflow/notebook/validator.py +0 -0
  216. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/workflow/openai/openai.py +0 -0
  217. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/workflow/registry/__init__.py +0 -0
  218. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/workflow/registry/registry.py +0 -0
  219. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/workflow/repo/__init__.py +0 -0
  220. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/workflow/repo/repo.py +0 -0
  221. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/workflow/scheduler/__init__.py +0 -0
  222. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/workflow/scheduler/cron_parser.py +0 -0
  223. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/workflow/scheduler/job.py +0 -0
  224. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/workflow/scheduler/models.py +0 -0
  225. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/workflow/scheduler/monitor.py +0 -0
  226. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/workflow/scheduler/persistence.py +0 -0
  227. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/workflow/scheduler/scheduler.py +0 -0
  228. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/workflow/scheduler/validation.py +0 -0
  229. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/workflow/search/__init__.py +0 -0
  230. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/workflow/secrets/__init__.py +0 -0
  231. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/workflow/secrets/secrets_cmd.py +0 -0
  232. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/workflow/storage/__init__.py +0 -0
  233. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/workflow/storage/storage_cmd.py +0 -0
  234. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/workflow/sync/__init__.py +0 -0
  235. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/workflow/sync/test_cmd.py +0 -0
  236. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/workflow/videos/__init__.py +0 -0
  237. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/workflow/wakatime/__init__.py +0 -0
  238. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/workflow/wakatime/wakatime.py +0 -0
  239. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli/workflow/workflow.py +0 -0
  240. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli_framework.egg-info/dependency_links.txt +0 -0
  241. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli_framework.egg-info/entry_points.txt +0 -0
  242. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/src/mcli_framework.egg-info/requires.txt +0 -0
  243. {mcli_framework-8.0.56 → mcli_framework-8.0.58}/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.56
3
+ Version: 8.0.58
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.56"
3
+ version = "8.0.58"
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"
@@ -141,7 +141,7 @@ def restore_command_state(hash_value):
141
141
 
142
142
 
143
143
  # On CLI startup, check and update lockfile if needed
144
- # NOTE: The commands group has been moved to mcli.app.commands_cmd for better organization
144
+ # NOTE: The commands group was removed in the v8.0.0 CLI simplification
145
145
 
146
146
 
147
147
  def check_and_update_command_lockfile():
@@ -217,7 +217,7 @@ def {name}_command(name: str = "World"):
217
217
  return template
218
218
 
219
219
 
220
- # NOTE: search command has been moved to mcli.app.commands_cmd for better organization
220
+ # NOTE: search command was removed in the v8.0.0 CLI simplification
221
221
 
222
222
 
223
223
  def collect_commands() -> list[dict[str, Any]]:
@@ -471,7 +471,7 @@ logger = get_logger()
471
471
  pass
472
472
 
473
473
 
474
- # NOTE: extract-workflow-commands has been moved to mcli.app.commands_cmd for better organization
474
+ # NOTE: extract-workflow-commands was removed in the v8.0.0 CLI simplification
475
475
 
476
476
 
477
477
  @self_app.command("version")
@@ -800,7 +800,7 @@ try:
800
800
  except ImportError as e:
801
801
  logger.debug(f"Could not load release-notes command: {e}")
802
802
 
803
- # NOTE: store command has been moved to mcli.app.commands_cmd for better organization
803
+ # NOTE: store command was removed in the v8.0.0 CLI simplification
804
804
 
805
805
  # This part is important to make the command available to the CLI
806
806
  if __name__ == "__main__":
@@ -0,0 +1,242 @@
1
+ """Run `act` locally and classify the outcome for the PR gate."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import platform
6
+ import shutil
7
+ import subprocess
8
+ import sys
9
+ import time
10
+ from enum import Enum
11
+ from pathlib import Path
12
+
13
+ # Docker Hub returns these when the unauthenticated image-pull rate limit is hit.
14
+ # act surfaces them while pulling the runner image — this is an environment
15
+ # problem, NOT a test failure, so it must not hard-block a push.
16
+ _RATE_LIMIT_MARKERS = (
17
+ "toomanyrequests",
18
+ "you have reached your unauthenticated pull rate limit",
19
+ "pull rate limit",
20
+ )
21
+
22
+ # act emits this when no job matches the requested event (e.g. a
23
+ # workflow_dispatch-only workflow queried for pull_request). That is a no-op,
24
+ # not a failure, so the gate must treat it as PASS rather than block the push.
25
+ _NO_STAGES_MARKERS = ("could not find any stages to run",)
26
+
27
+ # Backoff (seconds) between docker rate-limit retries; the last value repeats.
28
+ _RETRY_BACKOFF = (15, 45)
29
+ _MAX_RETRIES = 2
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.
36
+ _DISPATCH_WORKFLOW = Path(".github/workflows/ci.yml")
37
+ _DISPATCH_JOB = "primary"
38
+
39
+
40
+ class PreflightResult(Enum):
41
+ PASS = "pass"
42
+ FAIL = "fail"
43
+ UNREACHABLE = "unreachable"
44
+
45
+
46
+ def _is_docker_rate_limited(output: str) -> bool:
47
+ low = (output or "").lower()
48
+ return any(marker in low for marker in _RATE_LIMIT_MARKERS)
49
+
50
+
51
+ def _has_no_stages(output: str) -> bool:
52
+ low = (output or "").lower()
53
+ return any(marker in low for marker in _NO_STAGES_MARKERS)
54
+
55
+
56
+ def act_available() -> bool:
57
+ return shutil.which("act") is not None
58
+
59
+
60
+ # Preferred over act when present: a repo-defined `make ci-native` target runs
61
+ # the same gates directly on the host toolchain. On Apple-silicon (and any host
62
+ # without nested-virt) act's amd64 emulation under podman is flaky for heavy
63
+ # jobs (container-vanish races, action-clone failures), so a native run is both
64
+ # faster and more reliable. Repos opt in simply by defining the target.
65
+ _NATIVE_GATE = "ci-native"
66
+
67
+
68
+ def native_gate_available() -> bool:
69
+ """True if the repo defines a `make ci-native` target (preferred over act)."""
70
+ try:
71
+ proc = subprocess.run(
72
+ ["make", "-n", _NATIVE_GATE], capture_output=True, text=True, timeout=30
73
+ )
74
+ return proc.returncode == 0
75
+ except (FileNotFoundError, subprocess.TimeoutExpired):
76
+ return False
77
+
78
+
79
+ def run_native() -> PreflightResult:
80
+ """Run the repo's native gate (`make ci-native`) on the host. PASS on exit 0,
81
+ FAIL otherwise. Output streams straight to the terminal (these runs are long;
82
+ no need to buffer)."""
83
+ proc = subprocess.run(["make", _NATIVE_GATE])
84
+ return PreflightResult.PASS if proc.returncode == 0 else PreflightResult.FAIL
85
+
86
+
87
+ def docker_running() -> bool:
88
+ try:
89
+ proc = subprocess.run(["docker", "info"], capture_output=True, timeout=30)
90
+ return proc.returncode == 0
91
+ except (FileNotFoundError, subprocess.TimeoutExpired):
92
+ return False
93
+
94
+
95
+ def probe() -> bool:
96
+ """Can act actually run here? Needs the binary, a live docker daemon, and `act -l`."""
97
+ if not act_available() or not docker_running():
98
+ return False
99
+ try:
100
+ proc = subprocess.run(["act", "-l"], capture_output=True, text=True, timeout=60)
101
+ except (FileNotFoundError, subprocess.TimeoutExpired):
102
+ return False
103
+ return proc.returncode == 0
104
+
105
+
106
+ def default_container_arch() -> str | None:
107
+ """`--container-architecture` value for the host, or None to let act decide.
108
+
109
+ act's runner images are amd64. On Apple-silicon (darwin/arm64) act warns and
110
+ misbehaves unless told to emulate amd64, so force it; native amd64 Linux
111
+ needs nothing.
112
+ """
113
+ if sys.platform == "darwin" and platform.machine() in ("arm64", "aarch64"):
114
+ return "linux/amd64"
115
+ return None
116
+
117
+
118
+ def dispatch_entrypoint() -> tuple[str, str] | None:
119
+ """The canonical (workflow, job) to drive via `workflow_dispatch`, or None."""
120
+ if _DISPATCH_WORKFLOW.exists():
121
+ return (str(_DISPATCH_WORKFLOW), _DISPATCH_JOB)
122
+ return None
123
+
124
+
125
+ def build_act_command(
126
+ event: str,
127
+ workflow: str | None = None,
128
+ job: str | None = None,
129
+ arch: str | None = None,
130
+ ) -> list[str]:
131
+ cmd = ["act", event]
132
+ if workflow is not None:
133
+ cmd += ["-W", workflow]
134
+ if job is not None:
135
+ cmd += ["-j", job]
136
+ if arch is not None:
137
+ cmd += ["--container-architecture", arch]
138
+ if Path(".secrets").exists():
139
+ cmd += ["--secret-file", ".secrets"]
140
+ return cmd
141
+
142
+
143
+ def _run_with_retries(
144
+ cmd: list[str], retries: int, backoff: tuple[int, ...]
145
+ ) -> tuple[PreflightResult, str]:
146
+ """Run one act command, retrying on Docker Hub rate limits. Returns the
147
+ classified result plus the combined output (so the caller can detect the
148
+ 'no stages' no-op and decide whether to fall back)."""
149
+ attempt = 0
150
+ while True:
151
+ proc = subprocess.run(cmd, capture_output=True, text=True)
152
+ output = (proc.stdout or "") + (proc.stderr or "")
153
+ if output:
154
+ sys.stdout.write(output if output.endswith("\n") else output + "\n")
155
+
156
+ if proc.returncode == 0:
157
+ return PreflightResult.PASS, output
158
+
159
+ # No job matches this event (e.g. workflow_dispatch-only). PASS here is
160
+ # provisional — run_act decides whether a dispatch fallback exists.
161
+ if _has_no_stages(output):
162
+ return PreflightResult.PASS, output
163
+
164
+ if _is_docker_rate_limited(output):
165
+ if attempt < retries:
166
+ delay = backoff[min(attempt, len(backoff) - 1)]
167
+ sys.stdout.write(
168
+ f"⚠️ Docker Hub rate limit (toomanyrequests); retrying in {delay}s "
169
+ f"(attempt {attempt + 1}/{retries})…\n"
170
+ )
171
+ time.sleep(delay)
172
+ attempt += 1
173
+ continue
174
+ sys.stdout.write(
175
+ "⚠️ Docker Hub still rate-limited after retries — cannot validate "
176
+ "locally; allowing push (run `mcli ci preflight` again later).\n"
177
+ )
178
+ return PreflightResult.UNREACHABLE, output
179
+
180
+ return PreflightResult.FAIL, output
181
+
182
+
183
+ def run_act(
184
+ event: str = "pull_request",
185
+ retries: int = _MAX_RETRIES,
186
+ backoff: tuple[int, ...] = _RETRY_BACKOFF,
187
+ ) -> PreflightResult:
188
+ """Run act for `event` and classify the outcome.
189
+
190
+ - exit 0 -> PASS.
191
+ - non-zero whose output shows a Docker Hub pull rate limit
192
+ (``toomanyrequests``) -> retried; if still limited, UNREACHABLE.
193
+ - any other non-zero exit -> FAIL.
194
+
195
+ Migrated repos are ``workflow_dispatch``-only, so the default
196
+ ``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.
199
+ """
200
+ arch = default_container_arch()
201
+ result, output = _run_with_retries(build_act_command(event, arch=arch), retries, backoff)
202
+
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
212
+ sys.stdout.write(
213
+ f"ℹ️ No '{event}' stages (workflow_dispatch-only); running "
214
+ f"{workflow} -j {job} via workflow_dispatch…\n"
215
+ )
216
+ result, output = _run_with_retries(
217
+ build_act_command("workflow_dispatch", workflow=workflow, job=job, arch=arch),
218
+ retries,
219
+ backoff,
220
+ )
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
226
+
227
+
228
+ def preflight(repo_slug: str, event: str = "pull_request") -> PreflightResult:
229
+ """Primary gate. PASS/FAIL if act can run; UNREACHABLE if act can't start here.
230
+
231
+ `repo_slug` is accepted for symmetry and future use; the runner fallback is
232
+ orchestrated by the CLI layer based on runner_status.has_online_runner.
233
+
234
+ Prefers a repo-defined native gate (`make ci-native`) over act: it runs the
235
+ same checks on the host toolchain, avoiding act's flaky container emulation.
236
+ """
237
+ if native_gate_available():
238
+ sys.stdout.write("▶ Native CI gate found — running `make ci-native` (no act)…\n")
239
+ return run_native()
240
+ if not probe():
241
+ return PreflightResult.UNREACHABLE
242
+ return run_act(event)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mcli-framework
3
- Version: 8.0.56
3
+ Version: 8.0.58
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>
@@ -15,22 +15,17 @@ src/mcli/__init__.py
15
15
  src/mcli/__main__.py
16
16
  src/mcli/config.toml
17
17
  src/mcli/app/__init__.py
18
- src/mcli/app/commands_cmd.py
19
18
  src/mcli/app/completion_helpers.py
20
19
  src/mcli/app/context_cmd.py
21
- src/mcli/app/create_cmd.py
22
20
  src/mcli/app/delete_cmd.py
23
21
  src/mcli/app/edit_cmd.py
24
22
  src/mcli/app/import_cmd.py
25
23
  src/mcli/app/init_cmd.py
26
24
  src/mcli/app/list_cmd.py
27
25
  src/mcli/app/main.py
28
- src/mcli/app/migrate_cmd.py
29
26
  src/mcli/app/model_cmd.py
30
27
  src/mcli/app/mv_cmd.py
31
28
  src/mcli/app/new_cmd.py
32
- src/mcli/app/remove_cmd.py
33
- src/mcli/app/rm_cmd.py
34
29
  src/mcli/app/search_cmd.py
35
30
  src/mcli/app/services_cmd.py
36
31
  src/mcli/app/setup_cmd.py