mcli-framework 8.0.55__tar.gz → 8.0.57__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 (369) hide show
  1. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/PKG-INFO +5 -1
  2. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/pyproject.toml +13 -1
  3. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/self/self_cmd.py +4 -4
  4. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/workflow/ci/act_runner.py +98 -29
  5. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli_framework.egg-info/PKG-INFO +5 -1
  6. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli_framework.egg-info/SOURCES.txt +1 -133
  7. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli_framework.egg-info/requires.txt +4 -0
  8. mcli_framework-8.0.55/.github/dependabot.yml +0 -49
  9. mcli_framework-8.0.55/.github/dependency-review-config.yml +0 -17
  10. mcli_framework-8.0.55/.github/workflows/build.yml +0 -102
  11. mcli_framework-8.0.55/.github/workflows/ci.yml +0 -274
  12. mcli_framework-8.0.55/.github/workflows/codeql.yml +0 -43
  13. mcli_framework-8.0.55/.github/workflows/docs-links.yml +0 -48
  14. mcli_framework-8.0.55/.github/workflows/publish-self-hosted.yml +0 -244
  15. mcli_framework-8.0.55/.github/workflows/publish.yml +0 -225
  16. mcli_framework-8.0.55/.github/workflows/release.yml +0 -77
  17. mcli_framework-8.0.55/.github/workflows/security.yml +0 -128
  18. mcli_framework-8.0.55/.github/workflows/test.yml +0 -154
  19. mcli_framework-8.0.55/src/mcli/app/commands_cmd.py +0 -1994
  20. mcli_framework-8.0.55/src/mcli/app/create_cmd.py +0 -442
  21. mcli_framework-8.0.55/src/mcli/app/migrate_cmd.py +0 -395
  22. mcli_framework-8.0.55/src/mcli/app/remove_cmd.py +0 -60
  23. mcli_framework-8.0.55/src/mcli/app/rm_cmd.py +0 -107
  24. mcli_framework-8.0.55/tests/cli/__init__.py +0 -0
  25. mcli_framework-8.0.55/tests/cli/test_all_commands.py +0 -7
  26. mcli_framework-8.0.55/tests/cli/test_app_logs_cmd.py +0 -206
  27. mcli_framework-8.0.55/tests/cli/test_app_redis_cmd.py +0 -276
  28. mcli_framework-8.0.55/tests/cli/test_logs_cmd.py +0 -287
  29. mcli_framework-8.0.55/tests/cli/test_main_app.py +0 -36
  30. mcli_framework-8.0.55/tests/cli/test_model_cmd.py +0 -619
  31. mcli_framework-8.0.55/tests/cli/test_self_cmd.py +0 -788
  32. mcli_framework-8.0.55/tests/cli/test_self_cmd_plugins.py +0 -273
  33. mcli_framework-8.0.55/tests/cli/test_self_cmd_utilities.py +0 -225
  34. mcli_framework-8.0.55/tests/cli/test_workflow_creation_commands.py +0 -109
  35. mcli_framework-8.0.55/tests/cli/test_workflow_file.py +0 -137
  36. mcli_framework-8.0.55/tests/cli/test_workflow_gcloud.py +0 -120
  37. mcli_framework-8.0.55/tests/cli/test_workflow_registry.py +0 -231
  38. mcli_framework-8.0.55/tests/conftest.py +0 -149
  39. mcli_framework-8.0.55/tests/e2e/__init__.py +0 -0
  40. mcli_framework-8.0.55/tests/e2e/test_complete_workflows.py +0 -422
  41. mcli_framework-8.0.55/tests/e2e/test_model_workflow.py +0 -155
  42. mcli_framework-8.0.55/tests/e2e/test_new_user_workflow.py +0 -144
  43. mcli_framework-8.0.55/tests/e2e/test_update_workflow.py +0 -195
  44. mcli_framework-8.0.55/tests/fixtures/__init__.py +0 -75
  45. mcli_framework-8.0.55/tests/fixtures/chat_fixtures.py +0 -82
  46. mcli_framework-8.0.55/tests/fixtures/cli_fixtures.py +0 -93
  47. mcli_framework-8.0.55/tests/fixtures/command_fixtures.py +0 -325
  48. mcli_framework-8.0.55/tests/fixtures/data_fixtures.py +0 -97
  49. mcli_framework-8.0.55/tests/fixtures/db_fixtures.py +0 -100
  50. mcli_framework-8.0.55/tests/fixtures/model_fixtures.py +0 -66
  51. mcli_framework-8.0.55/tests/integration/__init__.py +0 -0
  52. mcli_framework-8.0.55/tests/integration/test_all_commands_comprehensive.py +0 -878
  53. mcli_framework-8.0.55/tests/integration/test_daemon_server.py +0 -824
  54. mcli_framework-8.0.55/tests/integration/test_direct_file_execution.py +0 -257
  55. mcli_framework-8.0.55/tests/integration/test_e2e_dashboard_lsh_supabase.py +0 -695
  56. mcli_framework-8.0.55/tests/integration/test_flask_webapp.py +0 -7
  57. mcli_framework-8.0.55/tests/integration/test_folder_workflows_integration.py +0 -382
  58. mcli_framework-8.0.55/tests/integration/test_gcloud_services.py +0 -58
  59. mcli_framework-8.0.55/tests/integration/test_ml_data_pipeline.py +0 -642
  60. mcli_framework-8.0.55/tests/integration/test_module_imports.py +0 -132
  61. mcli_framework-8.0.55/tests/integration/test_notebook_workflows.py +0 -503
  62. mcli_framework-8.0.55/tests/integration/test_oi_service.py +0 -10
  63. mcli_framework-8.0.55/tests/integration/test_repo_operations.py +0 -77
  64. mcli_framework-8.0.55/tests/integration/test_scheduler_integration.py +0 -482
  65. mcli_framework-8.0.55/tests/integration/test_service_registry.py +0 -141
  66. mcli_framework-8.0.55/tests/integration/test_video_processing.py +0 -69
  67. mcli_framework-8.0.55/tests/integration/test_wakatime_api.py +0 -10
  68. mcli_framework-8.0.55/tests/integration/test_webapp_full.py +0 -7
  69. mcli_framework-8.0.55/tests/integration/test_workflow.py +0 -7
  70. mcli_framework-8.0.55/tests/integration/test_workflow_commands.py +0 -7
  71. mcli_framework-8.0.55/tests/performance/__init__.py +0 -0
  72. mcli_framework-8.0.55/tests/property/__init__.py +0 -0
  73. mcli_framework-8.0.55/tests/unit/__init__.py +0 -0
  74. mcli_framework-8.0.55/tests/unit/storage/__init__.py +0 -1
  75. mcli_framework-8.0.55/tests/unit/storage/test_cache.py +0 -244
  76. mcli_framework-8.0.55/tests/unit/storage/test_encryption.py +0 -118
  77. mcli_framework-8.0.55/tests/unit/storage/test_storacha_cli.py +0 -285
  78. mcli_framework-8.0.55/tests/unit/test_api_utils.py +0 -98
  79. mcli_framework-8.0.55/tests/unit/test_async_process_manager.py +0 -571
  80. mcli_framework-8.0.55/tests/unit/test_auth_modules.py +0 -324
  81. mcli_framework-8.0.55/tests/unit/test_bug_fixes.py +0 -41
  82. mcli_framework-8.0.55/tests/unit/test_command_fixtures.py +0 -240
  83. mcli_framework-8.0.55/tests/unit/test_config.py +0 -98
  84. mcli_framework-8.0.55/tests/unit/test_correlation_logging.py +0 -698
  85. mcli_framework-8.0.55/tests/unit/test_custom_commands.py +0 -338
  86. mcli_framework-8.0.55/tests/unit/test_custom_commands_filtering.py +0 -164
  87. mcli_framework-8.0.55/tests/unit/test_daemon_api.py +0 -266
  88. mcli_framework-8.0.55/tests/unit/test_dependencies.py +0 -60
  89. mcli_framework-8.0.55/tests/unit/test_doc_convert_workflow.py +0 -259
  90. mcli_framework-8.0.55/tests/unit/test_emulator_workflow.py +0 -618
  91. mcli_framework-8.0.55/tests/unit/test_erd_generation.py +0 -1365
  92. mcli_framework-8.0.55/tests/unit/test_erd_generic.py +0 -254
  93. mcli_framework-8.0.55/tests/unit/test_erd_imports.py +0 -21
  94. mcli_framework-8.0.55/tests/unit/test_folder_workflows.py +0 -401
  95. mcli_framework-8.0.55/tests/unit/test_git_commit_workflow.py +0 -343
  96. mcli_framework-8.0.55/tests/unit/test_health_cmd.py +0 -589
  97. mcli_framework-8.0.55/tests/unit/test_import_cmd.py +0 -866
  98. mcli_framework-8.0.55/tests/unit/test_init_mv_cmd.py +0 -293
  99. mcli_framework-8.0.55/tests/unit/test_ipfs_cmd.py +0 -320
  100. mcli_framework-8.0.55/tests/unit/test_ipfs_retry.py +0 -233
  101. mcli_framework-8.0.55/tests/unit/test_language_suffix.py +0 -467
  102. mcli_framework-8.0.55/tests/unit/test_lib_auth.py +0 -10
  103. mcli_framework-8.0.55/tests/unit/test_lib_files.py +0 -55
  104. mcli_framework-8.0.55/tests/unit/test_lib_utils.py +0 -9
  105. mcli_framework-8.0.55/tests/unit/test_logger.py +0 -214
  106. mcli_framework-8.0.55/tests/unit/test_new_cmd.py +0 -819
  107. mcli_framework-8.0.55/tests/unit/test_notebook_command_loader.py +0 -525
  108. mcli_framework-8.0.55/tests/unit/test_notebook_executor.py +0 -233
  109. mcli_framework-8.0.55/tests/unit/test_optional_deps.py +0 -211
  110. mcli_framework-8.0.55/tests/unit/test_paths.py +0 -202
  111. mcli_framework-8.0.55/tests/unit/test_pdf_compress.py +0 -257
  112. mcli_framework-8.0.55/tests/unit/test_pyenv.py +0 -427
  113. mcli_framework-8.0.55/tests/unit/test_regression.py +0 -129
  114. mcli_framework-8.0.55/tests/unit/test_scheduler.py +0 -439
  115. mcli_framework-8.0.55/tests/unit/test_scheduler_cron_parser.py +0 -509
  116. mcli_framework-8.0.55/tests/unit/test_scheduler_job.py +0 -505
  117. mcli_framework-8.0.55/tests/unit/test_scheduler_models.py +0 -419
  118. mcli_framework-8.0.55/tests/unit/test_scheduler_monitor.py +0 -509
  119. mcli_framework-8.0.55/tests/unit/test_scheduler_persistence.py +0 -709
  120. mcli_framework-8.0.55/tests/unit/test_scheduler_validation.py +0 -390
  121. mcli_framework-8.0.55/tests/unit/test_script_loader_options.py +0 -210
  122. mcli_framework-8.0.55/tests/unit/test_security_command_injection.py +0 -225
  123. mcli_framework-8.0.55/tests/unit/test_self_update.py +0 -200
  124. mcli_framework-8.0.55/tests/unit/test_service_config.py +0 -82
  125. mcli_framework-8.0.55/tests/unit/test_service_health.py +0 -88
  126. mcli_framework-8.0.55/tests/unit/test_service_manager.py +0 -150
  127. mcli_framework-8.0.55/tests/unit/test_service_state.py +0 -93
  128. mcli_framework-8.0.55/tests/unit/test_services_cmd.py +0 -162
  129. mcli_framework-8.0.55/tests/unit/test_shell_exceptions.py +0 -428
  130. mcli_framework-8.0.55/tests/unit/test_shell_functions.py +0 -329
  131. mcli_framework-8.0.55/tests/unit/test_shell_security.py +0 -215
  132. mcli_framework-8.0.55/tests/unit/test_store_cmd.py +0 -445
  133. mcli_framework-8.0.55/tests/unit/test_sync_cmd.py +0 -391
  134. mcli_framework-8.0.55/tests/unit/test_toml_utils.py +0 -192
  135. mcli_framework-8.0.55/tests/unit/test_ui_rich.py +0 -22
  136. mcli_framework-8.0.55/tests/unit/test_uv_compat.py +0 -224
  137. mcli_framework-8.0.55/tests/unit/test_workflow_file_completion.py +0 -219
  138. mcli_framework-8.0.55/tests/unit/test_workflow_models.py +0 -337
  139. mcli_framework-8.0.55/tests/unit/workflow/test_notebook.py +0 -443
  140. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/LICENSE +0 -0
  141. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/MANIFEST.in +0 -0
  142. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/README.md +0 -0
  143. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/llms-full.txt +0 -0
  144. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/llms.txt +0 -0
  145. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/mcli_rust/Cargo.toml +0 -0
  146. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/mcli_rust/src/command_parser.rs +0 -0
  147. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/mcli_rust/src/file_watcher.rs +0 -0
  148. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/mcli_rust/src/lib.rs +0 -0
  149. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/mcli_rust/src/process_manager.rs +0 -0
  150. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/mcli_rust/src/tfidf.rs +0 -0
  151. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/setup.cfg +0 -0
  152. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/__init__.py +0 -0
  153. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/__main__.py +0 -0
  154. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/app/__init__.py +0 -0
  155. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/app/completion_helpers.py +0 -0
  156. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/app/context_cmd.py +0 -0
  157. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/app/delete_cmd.py +0 -0
  158. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/app/edit_cmd.py +0 -0
  159. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/app/import_cmd.py +0 -0
  160. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/app/init_cmd.py +0 -0
  161. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/app/list_cmd.py +0 -0
  162. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/app/main.py +0 -0
  163. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/app/model/__init__.py +0 -0
  164. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/app/model/model.py +0 -0
  165. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/app/model_cmd.py +0 -0
  166. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/app/mv_cmd.py +0 -0
  167. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/app/new_cmd.py +0 -0
  168. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/app/search_cmd.py +0 -0
  169. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/app/services_cmd.py +0 -0
  170. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/app/setup_cmd.py +0 -0
  171. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/app/source_sync_cmd.py +0 -0
  172. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/app/sync_cmd.py +0 -0
  173. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/app/video/__init__.py +0 -0
  174. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/app/video/video.py +0 -0
  175. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/config.toml +0 -0
  176. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/__init__.py +0 -0
  177. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/api/__init__.py +0 -0
  178. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/api/api.py +0 -0
  179. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/api/daemon_client.py +0 -0
  180. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/api/daemon_client_local.py +0 -0
  181. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/api/daemon_decorator.py +0 -0
  182. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/api/mcli_decorators.py +0 -0
  183. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/auth/__init__.py +0 -0
  184. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/auth/auth.py +0 -0
  185. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/auth/aws_manager.py +0 -0
  186. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/auth/azure_manager.py +0 -0
  187. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/auth/credential_manager.py +0 -0
  188. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/auth/gcp_manager.py +0 -0
  189. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/auth/key_manager.py +0 -0
  190. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/auth/mcli_manager.py +0 -0
  191. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/auth/token_manager.py +0 -0
  192. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/auth/token_util.py +0 -0
  193. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/config/__init__.py +0 -0
  194. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/config/config.py +0 -0
  195. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/config/settings.py +0 -0
  196. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/constants/__init__.py +0 -0
  197. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/constants/commands.py +0 -0
  198. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/constants/defaults.py +0 -0
  199. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/constants/env.py +0 -0
  200. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/constants/messages.py +0 -0
  201. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/constants/paths.py +0 -0
  202. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/constants/scripts.py +0 -0
  203. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/constants/storage.py +0 -0
  204. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/custom_commands.py +0 -0
  205. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/discovery/__init__.py +0 -0
  206. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/discovery/command_discovery.py +0 -0
  207. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/erd/__init__.py +0 -0
  208. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/erd/erd.py +0 -0
  209. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/erd/generate_graph.py +0 -0
  210. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/errors.py +0 -0
  211. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/feature_detection.py +0 -0
  212. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/files/__init__.py +0 -0
  213. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/files/files.py +0 -0
  214. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/folder_workflows.py +0 -0
  215. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/fs/__init__.py +0 -0
  216. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/fs/fs.py +0 -0
  217. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/ipfs_sync.py +0 -0
  218. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/ipfs_utils.py +0 -0
  219. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/ipns_manager.py +0 -0
  220. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/lib.py +0 -0
  221. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/logger/__init__.py +0 -0
  222. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/logger/correlation.py +0 -0
  223. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/logger/logger.py +0 -0
  224. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/logger/structured.py +0 -0
  225. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/optional_deps.py +0 -0
  226. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/paths.py +0 -0
  227. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/performance/__init__.py +0 -0
  228. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/performance/optimizer.py +0 -0
  229. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/performance/rust_bridge.py +0 -0
  230. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/performance/uvloop_config.py +0 -0
  231. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/pickles/__init__.py +0 -0
  232. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/pickles/pickles.py +0 -0
  233. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/pyenv/__init__.py +0 -0
  234. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/pyenv/deps.py +0 -0
  235. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/pyenv/manager.py +0 -0
  236. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/pyenv/venv.py +0 -0
  237. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/script_loader.py +0 -0
  238. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/script_sync.py +0 -0
  239. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/script_watcher.py +0 -0
  240. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/search/cached_vectorizer.py +0 -0
  241. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/secrets/__init__.py +0 -0
  242. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/secrets/commands.py +0 -0
  243. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/secrets/manager.py +0 -0
  244. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/secrets/repl.py +0 -0
  245. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/secrets/store.py +0 -0
  246. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/services/__init__.py +0 -0
  247. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/services/config.py +0 -0
  248. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/services/data_pipeline.py +0 -0
  249. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/services/health.py +0 -0
  250. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/services/lsh_client.py +0 -0
  251. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/services/manager.py +0 -0
  252. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/services/redis_service.py +0 -0
  253. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/services/registry.py +0 -0
  254. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/services/state.py +0 -0
  255. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/services/supervisor.py +0 -0
  256. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/shell/__init__.py +0 -0
  257. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/shell/exceptions.py +0 -0
  258. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/shell/shell.py +0 -0
  259. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/sync_key_store.py +0 -0
  260. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/templates/__init__.py +0 -0
  261. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/templates/command_templates.py +0 -0
  262. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/toml/__init__.py +0 -0
  263. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/toml/toml.py +0 -0
  264. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/types.py +0 -0
  265. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/ui/styling.py +0 -0
  266. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/ui/visual_effects.py +0 -0
  267. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/watcher/__init__.py +0 -0
  268. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/watcher/watcher.py +0 -0
  269. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/workflow_models.py +0 -0
  270. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/lib/workspace_registry.py +0 -0
  271. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/mygroup/__init__.py +0 -0
  272. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/mygroup/test_cmd.py +0 -0
  273. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/public/__init__.py +0 -0
  274. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/public/commands/__init__.py +0 -0
  275. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/public/oi/oi.py +0 -0
  276. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/public/public.py +0 -0
  277. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/self/__init__.py +0 -0
  278. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/self/completion_cmd.py +0 -0
  279. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/self/env_cmd.py +0 -0
  280. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/self/health_cmd.py +0 -0
  281. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/self/ipfs_cmd.py +0 -0
  282. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/self/logs_cmd.py +0 -0
  283. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/self/migrate_cmd.py +0 -0
  284. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/self/release_notes_cmd.py +0 -0
  285. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/self/store_cmd.py +0 -0
  286. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/self/test_cmd.py +0 -0
  287. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/self/workflows_cmd.py +0 -0
  288. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/storage/__init__.py +0 -0
  289. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/storage/backends/__init__.py +0 -0
  290. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/storage/backends/ipfs_backend.py +0 -0
  291. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/storage/base.py +0 -0
  292. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/storage/cache.py +0 -0
  293. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/storage/encryption.py +0 -0
  294. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/storage/factory.py +0 -0
  295. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/storage/registry.py +0 -0
  296. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/storage/storacha_cli.py +0 -0
  297. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/workflow/__init__.py +0 -0
  298. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/workflow/ci/__init__.py +0 -0
  299. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/workflow/ci/ci.py +0 -0
  300. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/workflow/ci/runner_status.py +0 -0
  301. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/workflow/ci/workflow_transform.py +0 -0
  302. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/workflow/daemon/__init__.py +0 -0
  303. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/workflow/daemon/async_command_database.py +0 -0
  304. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/workflow/daemon/async_process_manager.py +0 -0
  305. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/workflow/daemon/client.py +0 -0
  306. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/workflow/daemon/daemon.py +0 -0
  307. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/workflow/daemon/daemon_api.py +0 -0
  308. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/workflow/daemon/enhanced_daemon.py +0 -0
  309. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/workflow/daemon/process_cli.py +0 -0
  310. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/workflow/daemon/process_manager.py +0 -0
  311. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/workflow/daemon/test_daemon.py +0 -0
  312. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/workflow/doc_convert.py +0 -0
  313. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/workflow/docker/__init__.py +0 -0
  314. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/workflow/docker/docker.py +0 -0
  315. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/workflow/file/__init__.py +0 -0
  316. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/workflow/gcloud/__init__.py +0 -0
  317. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/workflow/gcloud/config.toml +0 -0
  318. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/workflow/gcloud/gcloud.py +0 -0
  319. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/workflow/git_commit/__init__.py +0 -0
  320. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/workflow/git_commit/ai_service.py +0 -0
  321. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/workflow/interview/__init__.py +0 -0
  322. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/workflow/lsh_integration.py +0 -0
  323. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/workflow/model_service/client.py +0 -0
  324. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/workflow/model_service/download_and_run_efficient_models.py +0 -0
  325. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/workflow/model_service/lightweight_embedder.py +0 -0
  326. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/workflow/model_service/lightweight_model_server.py +0 -0
  327. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/workflow/model_service/lightweight_test.py +0 -0
  328. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/workflow/model_service/model_service.py +0 -0
  329. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/workflow/model_service/ollama_efficient_runner.py +0 -0
  330. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/workflow/model_service/openai_adapter.py +0 -0
  331. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/workflow/model_service/pdf_processor.py +0 -0
  332. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/workflow/model_service/test_efficient_runner.py +0 -0
  333. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/workflow/model_service/test_example.py +0 -0
  334. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/workflow/model_service/test_integration.py +0 -0
  335. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/workflow/model_service/test_new_features.py +0 -0
  336. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/workflow/notebook/__init__.py +0 -0
  337. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/workflow/notebook/command_loader.py +0 -0
  338. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/workflow/notebook/converter.py +0 -0
  339. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/workflow/notebook/executor.py +0 -0
  340. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/workflow/notebook/notebook_cmd.py +0 -0
  341. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/workflow/notebook/schema.py +0 -0
  342. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/workflow/notebook/validator.py +0 -0
  343. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/workflow/openai/openai.py +0 -0
  344. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/workflow/registry/__init__.py +0 -0
  345. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/workflow/registry/registry.py +0 -0
  346. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/workflow/repo/__init__.py +0 -0
  347. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/workflow/repo/repo.py +0 -0
  348. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/workflow/scheduler/__init__.py +0 -0
  349. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/workflow/scheduler/cron_parser.py +0 -0
  350. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/workflow/scheduler/job.py +0 -0
  351. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/workflow/scheduler/models.py +0 -0
  352. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/workflow/scheduler/monitor.py +0 -0
  353. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/workflow/scheduler/persistence.py +0 -0
  354. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/workflow/scheduler/scheduler.py +0 -0
  355. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/workflow/scheduler/validation.py +0 -0
  356. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/workflow/search/__init__.py +0 -0
  357. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/workflow/secrets/__init__.py +0 -0
  358. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/workflow/secrets/secrets_cmd.py +0 -0
  359. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/workflow/storage/__init__.py +0 -0
  360. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/workflow/storage/storage_cmd.py +0 -0
  361. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/workflow/sync/__init__.py +0 -0
  362. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/workflow/sync/test_cmd.py +0 -0
  363. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/workflow/videos/__init__.py +0 -0
  364. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/workflow/wakatime/__init__.py +0 -0
  365. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/workflow/wakatime/wakatime.py +0 -0
  366. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli/workflow/workflow.py +0 -0
  367. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli_framework.egg-info/dependency_links.txt +0 -0
  368. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/src/mcli_framework.egg-info/entry_points.txt +0 -0
  369. {mcli_framework-8.0.55 → mcli_framework-8.0.57}/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.55
3
+ Version: 8.0.57
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>
@@ -94,6 +94,10 @@ Requires-Dist: flake8-simplify>=0.21.0; extra == "dev"
94
94
  Requires-Dist: pre-commit>=4.5.1; extra == "dev"
95
95
  Requires-Dist: bandit>=1.7.0; extra == "dev"
96
96
  Requires-Dist: safety>=3.0.0; extra == "dev"
97
+ Requires-Dist: pandas>=2.0.0; extra == "dev"
98
+ Requires-Dist: pydot>=2.0.0; extra == "dev"
99
+ Requires-Dist: openpyxl>=3.1.0; extra == "dev"
100
+ Requires-Dist: scikit-learn>=1.3.0; extra == "dev"
97
101
  Requires-Dist: build>=1.2.2.post1; extra == "dev"
98
102
  Requires-Dist: maturin>=1.9.3; extra == "dev"
99
103
  Requires-Dist: twine>=4.0.0; extra == "dev"
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "mcli-framework"
3
- version = "8.0.55"
3
+ version = "8.0.57"
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"
@@ -117,6 +117,12 @@ dev = [
117
117
  "bandit>=1.7.0",
118
118
  "safety>=3.0.0",
119
119
 
120
+ # Optional-feature deps exercised by the test suite (ERD/repo graphs) — kept
121
+ # in dev so CI can run those tests strictly instead of best-effort (#169).
122
+ "pandas>=2.0.0",
123
+ "pydot>=2.0.0",
124
+ "openpyxl>=3.1.0", # Excel engine for repo.py pd.ExcelWriter (#169)
125
+ "scikit-learn>=1.3.0", # sklearn TF-IDF fallback for cached_vectorizer (pulls scipy) (#169)
120
126
  # Build tools
121
127
  "build>=1.2.2.post1",
122
128
  "maturin>=1.9.3",
@@ -298,6 +304,12 @@ dev = [
298
304
  # Security
299
305
  "bandit>=1.7.0",
300
306
  "safety>=3.0.0",
307
+ # Optional-feature deps exercised by the test suite (ERD/repo graphs) — kept
308
+ # in dev so CI can run those tests strictly instead of best-effort (#169).
309
+ "pandas>=2.0.0",
310
+ "pydot>=2.0.0",
311
+ "openpyxl>=3.1.0", # Excel engine for repo.py pd.ExcelWriter (#169)
312
+ "scikit-learn>=1.3.0", # sklearn TF-IDF fallback for cached_vectorizer (pulls scipy) (#169)
301
313
  # Pre-commit / build / publish
302
314
  "pre-commit>=4.5.1",
303
315
  "build>=1.2.2.post1",
@@ -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__":
@@ -2,6 +2,7 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
+ import platform
5
6
  import shutil
6
7
  import subprocess
7
8
  import sys
@@ -27,6 +28,14 @@ _NO_STAGES_MARKERS = ("could not find any stages to run",)
27
28
  _RETRY_BACKOFF = (15, 45)
28
29
  _MAX_RETRIES = 2
29
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
+
30
39
 
31
40
  class PreflightResult(Enum):
32
41
  PASS = "pass"
@@ -67,48 +76,63 @@ def probe() -> bool:
67
76
  return proc.returncode == 0
68
77
 
69
78
 
70
- def build_act_command(event: str) -> list[str]:
79
+ def default_container_arch() -> str | None:
80
+ """`--container-architecture` value for the host, or None to let act decide.
81
+
82
+ act's runner images are amd64. On Apple-silicon (darwin/arm64) act warns and
83
+ misbehaves unless told to emulate amd64, so force it; native amd64 Linux
84
+ needs nothing.
85
+ """
86
+ if sys.platform == "darwin" and platform.machine() in ("arm64", "aarch64"):
87
+ return "linux/amd64"
88
+ return None
89
+
90
+
91
+ def dispatch_entrypoint() -> tuple[str, str] | None:
92
+ """The canonical (workflow, job) to drive via `workflow_dispatch`, or None."""
93
+ if _DISPATCH_WORKFLOW.exists():
94
+ return (str(_DISPATCH_WORKFLOW), _DISPATCH_JOB)
95
+ return None
96
+
97
+
98
+ def build_act_command(
99
+ event: str,
100
+ workflow: str | None = None,
101
+ job: str | None = None,
102
+ arch: str | None = None,
103
+ ) -> list[str]:
71
104
  cmd = ["act", event]
105
+ if workflow is not None:
106
+ cmd += ["-W", workflow]
107
+ if job is not None:
108
+ cmd += ["-j", job]
109
+ if arch is not None:
110
+ cmd += ["--container-architecture", arch]
72
111
  if Path(".secrets").exists():
73
112
  cmd += ["--secret-file", ".secrets"]
74
113
  return cmd
75
114
 
76
115
 
77
- def run_act(
78
- event: str = "pull_request",
79
- retries: int = _MAX_RETRIES,
80
- backoff: tuple[int, ...] = _RETRY_BACKOFF,
81
- ) -> PreflightResult:
82
- """Run act for `event` and classify the outcome.
83
-
84
- - exit 0 -> PASS.
85
- - non-zero whose output shows a Docker Hub pull rate limit
86
- (``toomanyrequests``) -> retry up to ``retries`` times with backoff;
87
- if still rate-limited, return UNREACHABLE (cannot validate — an
88
- environment problem, not a test failure, so the gate must not block).
89
- - any other non-zero exit -> FAIL.
90
-
91
- Output is captured (to detect the rate limit) and echoed so the user still
92
- sees act's progress.
93
- """
116
+ def _run_with_retries(
117
+ cmd: list[str], retries: int, backoff: tuple[int, ...]
118
+ ) -> tuple[PreflightResult, str]:
119
+ """Run one act command, retrying on Docker Hub rate limits. Returns the
120
+ classified result plus the combined output (so the caller can detect the
121
+ 'no stages' no-op and decide whether to fall back)."""
94
122
  attempt = 0
95
123
  while True:
96
- proc = subprocess.run(build_act_command(event), capture_output=True, text=True)
124
+ proc = subprocess.run(cmd, capture_output=True, text=True)
97
125
  output = (proc.stdout or "") + (proc.stderr or "")
98
126
  if output:
99
127
  sys.stdout.write(output if output.endswith("\n") else output + "\n")
100
128
 
101
129
  if proc.returncode == 0:
102
- return PreflightResult.PASS
130
+ return PreflightResult.PASS, output
103
131
 
104
- # No job matches this event (e.g. workflow_dispatch-only) nothing to
105
- # validate, so this is a pass, not a gate failure.
132
+ # No job matches this event (e.g. workflow_dispatch-only). PASS here is
133
+ # provisional run_act decides whether a dispatch fallback exists.
106
134
  if _has_no_stages(output):
107
- sys.stdout.write(
108
- "ℹ️ No act stages for this event (workflow_dispatch-only?); "
109
- "nothing to validate — treating as pass.\n"
110
- )
111
- return PreflightResult.PASS
135
+ return PreflightResult.PASS, output
112
136
 
113
137
  if _is_docker_rate_limited(output):
114
138
  if attempt < retries:
@@ -124,9 +148,54 @@ def run_act(
124
148
  "⚠️ Docker Hub still rate-limited after retries — cannot validate "
125
149
  "locally; allowing push (run `mcli ci preflight` again later).\n"
126
150
  )
127
- return PreflightResult.UNREACHABLE
151
+ return PreflightResult.UNREACHABLE, output
152
+
153
+ return PreflightResult.FAIL, output
154
+
155
+
156
+ def run_act(
157
+ event: str = "pull_request",
158
+ retries: int = _MAX_RETRIES,
159
+ backoff: tuple[int, ...] = _RETRY_BACKOFF,
160
+ ) -> PreflightResult:
161
+ """Run act for `event` and classify the outcome.
162
+
163
+ - exit 0 -> PASS.
164
+ - non-zero whose output shows a Docker Hub pull rate limit
165
+ (``toomanyrequests``) -> retried; if still limited, UNREACHABLE.
166
+ - any other non-zero exit -> FAIL.
167
+
168
+ Migrated repos are ``workflow_dispatch``-only, so the default
169
+ ``pull_request`` event matches no jobs. Rather than hollow-pass, fall back
170
+ to the canonical ``ci.yml`` ``primary`` job on ``workflow_dispatch`` (which
171
+ drives the reusable ``_ci-jobs.yml``) and validate for real.
172
+ """
173
+ arch = default_container_arch()
174
+ result, output = _run_with_retries(build_act_command(event, arch=arch), retries, backoff)
175
+
176
+ if result == PreflightResult.PASS and _has_no_stages(output):
177
+ entry = dispatch_entrypoint()
178
+ if entry is None:
179
+ sys.stdout.write(
180
+ "ℹ️ No act stages for this event and no ci.yml dispatch "
181
+ "entrypoint — nothing to validate; treating as pass.\n"
182
+ )
183
+ return PreflightResult.PASS
184
+ workflow, job = entry
185
+ sys.stdout.write(
186
+ f"ℹ️ No '{event}' stages (workflow_dispatch-only); running "
187
+ f"{workflow} -j {job} via workflow_dispatch…\n"
188
+ )
189
+ result, output = _run_with_retries(
190
+ build_act_command("workflow_dispatch", workflow=workflow, job=job, arch=arch),
191
+ retries,
192
+ backoff,
193
+ )
194
+ # If even the dispatch entrypoint has no stages, it's a genuine no-op.
195
+ if result == PreflightResult.PASS and _has_no_stages(output):
196
+ return PreflightResult.PASS
128
197
 
129
- return PreflightResult.FAIL
198
+ return result
130
199
 
131
200
 
132
201
  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.55
3
+ Version: 8.0.57
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>
@@ -94,6 +94,10 @@ Requires-Dist: flake8-simplify>=0.21.0; extra == "dev"
94
94
  Requires-Dist: pre-commit>=4.5.1; extra == "dev"
95
95
  Requires-Dist: bandit>=1.7.0; extra == "dev"
96
96
  Requires-Dist: safety>=3.0.0; extra == "dev"
97
+ Requires-Dist: pandas>=2.0.0; extra == "dev"
98
+ Requires-Dist: pydot>=2.0.0; extra == "dev"
99
+ Requires-Dist: openpyxl>=3.1.0; extra == "dev"
100
+ Requires-Dist: scikit-learn>=1.3.0; extra == "dev"
97
101
  Requires-Dist: build>=1.2.2.post1; extra == "dev"
98
102
  Requires-Dist: maturin>=1.9.3; extra == "dev"
99
103
  Requires-Dist: twine>=4.0.0; extra == "dev"
@@ -5,17 +5,6 @@ llms-full.txt
5
5
  llms.txt
6
6
  pyproject.toml
7
7
  setup.cfg
8
- .github/dependabot.yml
9
- .github/dependency-review-config.yml
10
- .github/workflows/build.yml
11
- .github/workflows/ci.yml
12
- .github/workflows/codeql.yml
13
- .github/workflows/docs-links.yml
14
- .github/workflows/publish-self-hosted.yml
15
- .github/workflows/publish.yml
16
- .github/workflows/release.yml
17
- .github/workflows/security.yml
18
- .github/workflows/test.yml
19
8
  mcli_rust/Cargo.toml
20
9
  mcli_rust/src/command_parser.rs
21
10
  mcli_rust/src/file_watcher.rs
@@ -26,22 +15,17 @@ src/mcli/__init__.py
26
15
  src/mcli/__main__.py
27
16
  src/mcli/config.toml
28
17
  src/mcli/app/__init__.py
29
- src/mcli/app/commands_cmd.py
30
18
  src/mcli/app/completion_helpers.py
31
19
  src/mcli/app/context_cmd.py
32
- src/mcli/app/create_cmd.py
33
20
  src/mcli/app/delete_cmd.py
34
21
  src/mcli/app/edit_cmd.py
35
22
  src/mcli/app/import_cmd.py
36
23
  src/mcli/app/init_cmd.py
37
24
  src/mcli/app/list_cmd.py
38
25
  src/mcli/app/main.py
39
- src/mcli/app/migrate_cmd.py
40
26
  src/mcli/app/model_cmd.py
41
27
  src/mcli/app/mv_cmd.py
42
28
  src/mcli/app/new_cmd.py
43
- src/mcli/app/remove_cmd.py
44
- src/mcli/app/rm_cmd.py
45
29
  src/mcli/app/search_cmd.py
46
30
  src/mcli/app/services_cmd.py
47
31
  src/mcli/app/setup_cmd.py
@@ -249,120 +233,4 @@ src/mcli_framework.egg-info/SOURCES.txt
249
233
  src/mcli_framework.egg-info/dependency_links.txt
250
234
  src/mcli_framework.egg-info/entry_points.txt
251
235
  src/mcli_framework.egg-info/requires.txt
252
- src/mcli_framework.egg-info/top_level.txt
253
- tests/conftest.py
254
- tests/cli/__init__.py
255
- tests/cli/test_all_commands.py
256
- tests/cli/test_app_logs_cmd.py
257
- tests/cli/test_app_redis_cmd.py
258
- tests/cli/test_logs_cmd.py
259
- tests/cli/test_main_app.py
260
- tests/cli/test_model_cmd.py
261
- tests/cli/test_self_cmd.py
262
- tests/cli/test_self_cmd_plugins.py
263
- tests/cli/test_self_cmd_utilities.py
264
- tests/cli/test_workflow_creation_commands.py
265
- tests/cli/test_workflow_file.py
266
- tests/cli/test_workflow_gcloud.py
267
- tests/cli/test_workflow_registry.py
268
- tests/e2e/__init__.py
269
- tests/e2e/test_complete_workflows.py
270
- tests/e2e/test_model_workflow.py
271
- tests/e2e/test_new_user_workflow.py
272
- tests/e2e/test_update_workflow.py
273
- tests/fixtures/__init__.py
274
- tests/fixtures/chat_fixtures.py
275
- tests/fixtures/cli_fixtures.py
276
- tests/fixtures/command_fixtures.py
277
- tests/fixtures/data_fixtures.py
278
- tests/fixtures/db_fixtures.py
279
- tests/fixtures/model_fixtures.py
280
- tests/integration/__init__.py
281
- tests/integration/test_all_commands_comprehensive.py
282
- tests/integration/test_daemon_server.py
283
- tests/integration/test_direct_file_execution.py
284
- tests/integration/test_e2e_dashboard_lsh_supabase.py
285
- tests/integration/test_flask_webapp.py
286
- tests/integration/test_folder_workflows_integration.py
287
- tests/integration/test_gcloud_services.py
288
- tests/integration/test_ml_data_pipeline.py
289
- tests/integration/test_module_imports.py
290
- tests/integration/test_notebook_workflows.py
291
- tests/integration/test_oi_service.py
292
- tests/integration/test_repo_operations.py
293
- tests/integration/test_scheduler_integration.py
294
- tests/integration/test_service_registry.py
295
- tests/integration/test_video_processing.py
296
- tests/integration/test_wakatime_api.py
297
- tests/integration/test_webapp_full.py
298
- tests/integration/test_workflow.py
299
- tests/integration/test_workflow_commands.py
300
- tests/performance/__init__.py
301
- tests/property/__init__.py
302
- tests/unit/__init__.py
303
- tests/unit/test_api_utils.py
304
- tests/unit/test_async_process_manager.py
305
- tests/unit/test_auth_modules.py
306
- tests/unit/test_bug_fixes.py
307
- tests/unit/test_command_fixtures.py
308
- tests/unit/test_config.py
309
- tests/unit/test_correlation_logging.py
310
- tests/unit/test_custom_commands.py
311
- tests/unit/test_custom_commands_filtering.py
312
- tests/unit/test_daemon_api.py
313
- tests/unit/test_dependencies.py
314
- tests/unit/test_doc_convert_workflow.py
315
- tests/unit/test_emulator_workflow.py
316
- tests/unit/test_erd_generation.py
317
- tests/unit/test_erd_generic.py
318
- tests/unit/test_erd_imports.py
319
- tests/unit/test_folder_workflows.py
320
- tests/unit/test_git_commit_workflow.py
321
- tests/unit/test_health_cmd.py
322
- tests/unit/test_import_cmd.py
323
- tests/unit/test_init_mv_cmd.py
324
- tests/unit/test_ipfs_cmd.py
325
- tests/unit/test_ipfs_retry.py
326
- tests/unit/test_language_suffix.py
327
- tests/unit/test_lib_auth.py
328
- tests/unit/test_lib_files.py
329
- tests/unit/test_lib_utils.py
330
- tests/unit/test_logger.py
331
- tests/unit/test_new_cmd.py
332
- tests/unit/test_notebook_command_loader.py
333
- tests/unit/test_notebook_executor.py
334
- tests/unit/test_optional_deps.py
335
- tests/unit/test_paths.py
336
- tests/unit/test_pdf_compress.py
337
- tests/unit/test_pyenv.py
338
- tests/unit/test_regression.py
339
- tests/unit/test_scheduler.py
340
- tests/unit/test_scheduler_cron_parser.py
341
- tests/unit/test_scheduler_job.py
342
- tests/unit/test_scheduler_models.py
343
- tests/unit/test_scheduler_monitor.py
344
- tests/unit/test_scheduler_persistence.py
345
- tests/unit/test_scheduler_validation.py
346
- tests/unit/test_script_loader_options.py
347
- tests/unit/test_security_command_injection.py
348
- tests/unit/test_self_update.py
349
- tests/unit/test_service_config.py
350
- tests/unit/test_service_health.py
351
- tests/unit/test_service_manager.py
352
- tests/unit/test_service_state.py
353
- tests/unit/test_services_cmd.py
354
- tests/unit/test_shell_exceptions.py
355
- tests/unit/test_shell_functions.py
356
- tests/unit/test_shell_security.py
357
- tests/unit/test_store_cmd.py
358
- tests/unit/test_sync_cmd.py
359
- tests/unit/test_toml_utils.py
360
- tests/unit/test_ui_rich.py
361
- tests/unit/test_uv_compat.py
362
- tests/unit/test_workflow_file_completion.py
363
- tests/unit/test_workflow_models.py
364
- tests/unit/storage/__init__.py
365
- tests/unit/storage/test_cache.py
366
- tests/unit/storage/test_encryption.py
367
- tests/unit/storage/test_storacha_cli.py
368
- tests/unit/workflow/test_notebook.py
236
+ src/mcli_framework.egg-info/top_level.txt
@@ -57,6 +57,10 @@ flake8-simplify>=0.21.0
57
57
  pre-commit>=4.5.1
58
58
  bandit>=1.7.0
59
59
  safety>=3.0.0
60
+ pandas>=2.0.0
61
+ pydot>=2.0.0
62
+ openpyxl>=3.1.0
63
+ scikit-learn>=1.3.0
60
64
  build>=1.2.2.post1
61
65
  maturin>=1.9.3
62
66
  twine>=4.0.0
@@ -1,49 +0,0 @@
1
- version: 2
2
- updates:
3
- # Python dependencies
4
- - package-ecosystem: "pip"
5
- directory: "/"
6
- schedule:
7
- interval: "weekly"
8
- day: "monday"
9
- open-pull-requests-limit: 10
10
- reviewers:
11
- - "gwicho38"
12
- labels:
13
- - "dependencies"
14
- - "python"
15
- commit-message:
16
- prefix: "chore"
17
- include: "scope"
18
-
19
- # GitHub Actions
20
- - package-ecosystem: "github-actions"
21
- directory: "/"
22
- schedule:
23
- interval: "weekly"
24
- day: "monday"
25
- open-pull-requests-limit: 5
26
- reviewers:
27
- - "gwicho38"
28
- labels:
29
- - "dependencies"
30
- - "github-actions"
31
- commit-message:
32
- prefix: "chore"
33
- include: "scope"
34
-
35
- # Docker
36
- - package-ecosystem: "docker"
37
- directory: "/"
38
- schedule:
39
- interval: "weekly"
40
- day: "monday"
41
- open-pull-requests-limit: 5
42
- reviewers:
43
- - "gwicho38"
44
- labels:
45
- - "dependencies"
46
- - "docker"
47
- commit-message:
48
- prefix: "chore"
49
- include: "scope"
@@ -1,17 +0,0 @@
1
- # Dependency Review configuration
2
- # https://docs.github.com/en/code-security/supply-chain-security/understanding-your-software-supply-chain/configuring-dependency-review
3
-
4
- # Fail on moderate and above vulnerabilities
5
- fail-on-severity: moderate
6
-
7
- # Allow specific licenses commonly used in npm packages
8
- allow-licenses:
9
- - MIT
10
- - Apache-2.0
11
- - BSD-2-Clause
12
- - BSD-3-Clause
13
- - ISC
14
- - 0BSD
15
-
16
- # Comment on PRs with dependency changes
17
- comment-summary-in-pr: on-failure
@@ -1,102 +0,0 @@
1
- name: Build and Package
2
-
3
- on:
4
- push:
5
- branches: [ main ]
6
- pull_request:
7
- branches: [ main ]
8
- workflow_dispatch:
9
- inputs:
10
- debug:
11
- description: 'Enable debug mode'
12
- required: false
13
- default: false
14
- type: boolean
15
-
16
- env:
17
- PYTHON_VERSION: '3.11'
18
- UV_VERSION: 'latest'
19
-
20
- jobs:
21
- build:
22
- name: Build Package
23
- strategy:
24
- matrix:
25
- platform: [ubuntu-latest] # self-hosted linux
26
-
27
- runs-on: [self-hosted, linux, x64]
28
-
29
- steps:
30
- - name: Checkout code
31
- uses: actions/checkout@v4
32
-
33
- - name: Set up Python
34
- uses: actions/setup-python@v4
35
- with:
36
- python-version: ${{ env.PYTHON_VERSION }}
37
-
38
- - name: Install UV
39
- run: |
40
- if [[ "${{ matrix.platform }}" == "ubuntu-latest" ]]; then
41
- curl -LsSf https://astral.sh/uv/install.sh | sh
42
- echo "$HOME/.cargo/bin" >> $GITHUB_PATH
43
- elif [[ "${{ matrix.platform }}" == "macos-latest" ]]; then
44
- curl -LsSf https://astral.sh/uv/install.sh | sh
45
- echo "$HOME/.cargo/bin" >> $GITHUB_PATH
46
- fi
47
-
48
- - name: Set up environment
49
- run: |
50
- if command -v uv >/dev/null 2>&1; then
51
- make setup
52
- else
53
- python -m pip install --upgrade pip build
54
- pip install -e .
55
- fi
56
-
57
- - name: Build wheel
58
- run: |
59
- if command -v uv >/dev/null 2>&1; then
60
- make wheel
61
- else
62
- python -m build --wheel
63
- fi
64
-
65
- - name: Test basic functionality
66
- run: |
67
- if command -v uv >/dev/null 2>&1; then
68
- make test
69
- else
70
- python -c "import mcli; print('✅ Package imports successfully')"
71
- python -m mcli --help
72
- fi
73
-
74
- - name: Upload wheel artifact
75
- uses: actions/upload-artifact@v4
76
- with:
77
- name: mcli-wheel-${{ matrix.platform }}
78
- path: dist/*.whl
79
- retention-days: 30
80
-
81
-
82
- build-summary:
83
- name: Build Summary
84
- needs: build
85
- runs-on: [self-hosted, linux, x64]
86
- if: always()
87
-
88
- steps:
89
- - name: Build Status Summary
90
- run: |
91
- echo "## Build Results" >> $GITHUB_STEP_SUMMARY
92
- echo "| Platform | Status |" >> $GITHUB_STEP_SUMMARY
93
- echo "|----------|--------|" >> $GITHUB_STEP_SUMMARY
94
- echo "| Ubuntu | ${{ needs.build.result }} |" >> $GITHUB_STEP_SUMMARY
95
- echo "| macOS | ${{ needs.build.result }} |" >> $GITHUB_STEP_SUMMARY
96
- echo "| Windows | ${{ needs.build.result }} |" >> $GITHUB_STEP_SUMMARY
97
-
98
- if [ "${{ needs.build.result }}" = "success" ]; then
99
- echo "✅ All builds completed successfully!" >> $GITHUB_STEP_SUMMARY
100
- else
101
- echo "❌ Some builds failed. Check the logs for details." >> $GITHUB_STEP_SUMMARY
102
- fi