mcli-framework 8.0.40__tar.gz → 8.0.42__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 (488) hide show
  1. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/PKG-INFO +1 -1
  2. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/pyproject.toml +1 -1
  3. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/app/init_cmd.py +10 -7
  4. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/lib/constants/env.py +0 -3
  5. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/lib/constants/messages.py +0 -4
  6. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/lib/constants/paths.py +1 -3
  7. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/lib/paths.py +20 -48
  8. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/lib/pyenv/manager.py +12 -6
  9. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/lib/script_loader.py +2 -1
  10. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/lib/workspace_registry.py +23 -29
  11. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/self/env_cmd.py +2 -11
  12. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/self/migrate_cmd.py +0 -57
  13. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli_framework.egg-info/PKG-INFO +1 -1
  14. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli_framework.egg-info/SOURCES.txt +0 -1
  15. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/integration/test_all_commands_comprehensive.py +2 -2
  16. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/unit/test_init_mv_cmd.py +16 -16
  17. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/unit/test_paths.py +0 -105
  18. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/unit/test_workflow_file_completion.py +5 -5
  19. mcli_framework-8.0.40/tests/unit/test_migrate_rename_dir.py +0 -104
  20. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/.github/dependabot.yml +0 -0
  21. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/.github/dependency-review-config.yml +0 -0
  22. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/.github/workflows/build.yml +0 -0
  23. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/.github/workflows/ci.yml +0 -0
  24. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/.github/workflows/codeql.yml +0 -0
  25. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/.github/workflows/docs-links.yml +0 -0
  26. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/.github/workflows/publish-self-hosted.yml +0 -0
  27. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/.github/workflows/publish.yml +0 -0
  28. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/.github/workflows/release.yml +0 -0
  29. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/.github/workflows/security.yml +0 -0
  30. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/.github/workflows/test.yml +0 -0
  31. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/LICENSE +0 -0
  32. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/MANIFEST.in +0 -0
  33. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/README.md +0 -0
  34. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/llms-full.txt +0 -0
  35. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/llms.txt +0 -0
  36. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/mcli_rust/Cargo.toml +0 -0
  37. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/mcli_rust/src/command_parser.rs +0 -0
  38. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/mcli_rust/src/file_watcher.rs +0 -0
  39. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/mcli_rust/src/lib.rs +0 -0
  40. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/mcli_rust/src/process_manager.rs +0 -0
  41. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/mcli_rust/src/tfidf.rs +0 -0
  42. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/setup.cfg +0 -0
  43. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/__init__.py +0 -0
  44. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/app/__init__.py +0 -0
  45. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/app/commands_cmd.py +0 -0
  46. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/app/completion_helpers.py +0 -0
  47. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/app/context_cmd.py +0 -0
  48. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/app/create_cmd.py +0 -0
  49. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/app/delete_cmd.py +0 -0
  50. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/app/edit_cmd.py +0 -0
  51. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/app/import_cmd.py +0 -0
  52. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/app/list_cmd.py +0 -0
  53. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/app/main.py +0 -0
  54. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/app/migrate_cmd.py +0 -0
  55. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/app/model/__init__.py +0 -0
  56. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/app/model/model.py +0 -0
  57. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/app/model_cmd.py +0 -0
  58. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/app/mv_cmd.py +0 -0
  59. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/app/new_cmd.py +0 -0
  60. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/app/remove_cmd.py +0 -0
  61. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/app/rm_cmd.py +0 -0
  62. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/app/search_cmd.py +0 -0
  63. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/app/services_cmd.py +0 -0
  64. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/app/sync_cmd.py +0 -0
  65. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/app/video/__init__.py +0 -0
  66. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/app/video/video.py +0 -0
  67. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/config.toml +0 -0
  68. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/lib/__init__.py +0 -0
  69. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/lib/api/__init__.py +0 -0
  70. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/lib/api/api.py +0 -0
  71. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/lib/api/daemon_client.py +0 -0
  72. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/lib/api/daemon_client_local.py +0 -0
  73. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/lib/api/daemon_decorator.py +0 -0
  74. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/lib/api/mcli_decorators.py +0 -0
  75. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/lib/auth/__init__.py +0 -0
  76. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/lib/auth/auth.py +0 -0
  77. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/lib/auth/aws_manager.py +0 -0
  78. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/lib/auth/azure_manager.py +0 -0
  79. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/lib/auth/credential_manager.py +0 -0
  80. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/lib/auth/gcp_manager.py +0 -0
  81. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/lib/auth/key_manager.py +0 -0
  82. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/lib/auth/mcli_manager.py +0 -0
  83. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/lib/auth/token_manager.py +0 -0
  84. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/lib/auth/token_util.py +0 -0
  85. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/lib/config/__init__.py +0 -0
  86. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/lib/config/config.py +0 -0
  87. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/lib/constants/__init__.py +0 -0
  88. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/lib/constants/commands.py +0 -0
  89. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/lib/constants/defaults.py +0 -0
  90. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/lib/constants/scripts.py +0 -0
  91. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/lib/constants/storage.py +0 -0
  92. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/lib/custom_commands.py +0 -0
  93. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/lib/discovery/__init__.py +0 -0
  94. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/lib/discovery/command_discovery.py +0 -0
  95. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/lib/erd/__init__.py +0 -0
  96. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/lib/erd/erd.py +0 -0
  97. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/lib/erd/generate_graph.py +0 -0
  98. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/lib/errors.py +0 -0
  99. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/lib/feature_detection.py +0 -0
  100. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/lib/files/__init__.py +0 -0
  101. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/lib/files/files.py +0 -0
  102. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/lib/folder_workflows.py +0 -0
  103. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/lib/fs/__init__.py +0 -0
  104. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/lib/fs/fs.py +0 -0
  105. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/lib/ipfs_sync.py +0 -0
  106. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/lib/ipfs_utils.py +0 -0
  107. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/lib/lib.py +0 -0
  108. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/lib/logger/__init__.py +0 -0
  109. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/lib/logger/correlation.py +0 -0
  110. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/lib/logger/logger.py +0 -0
  111. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/lib/logger/structured.py +0 -0
  112. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/lib/optional_deps.py +0 -0
  113. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/lib/performance/__init__.py +0 -0
  114. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/lib/performance/optimizer.py +0 -0
  115. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/lib/performance/rust_bridge.py +0 -0
  116. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/lib/performance/uvloop_config.py +0 -0
  117. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/lib/pickles/__init__.py +0 -0
  118. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/lib/pickles/pickles.py +0 -0
  119. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/lib/pyenv/__init__.py +0 -0
  120. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/lib/pyenv/deps.py +0 -0
  121. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/lib/pyenv/venv.py +0 -0
  122. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/lib/script_sync.py +0 -0
  123. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/lib/script_watcher.py +0 -0
  124. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/lib/search/cached_vectorizer.py +0 -0
  125. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/lib/secrets/__init__.py +0 -0
  126. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/lib/secrets/commands.py +0 -0
  127. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/lib/secrets/manager.py +0 -0
  128. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/lib/secrets/repl.py +0 -0
  129. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/lib/secrets/store.py +0 -0
  130. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/lib/services/__init__.py +0 -0
  131. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/lib/services/config.py +0 -0
  132. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/lib/services/data_pipeline.py +0 -0
  133. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/lib/services/health.py +0 -0
  134. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/lib/services/lsh_client.py +0 -0
  135. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/lib/services/manager.py +0 -0
  136. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/lib/services/redis_service.py +0 -0
  137. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/lib/services/registry.py +0 -0
  138. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/lib/services/state.py +0 -0
  139. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/lib/services/supervisor.py +0 -0
  140. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/lib/shell/__init__.py +0 -0
  141. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/lib/shell/exceptions.py +0 -0
  142. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/lib/shell/shell.py +0 -0
  143. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/lib/templates/__init__.py +0 -0
  144. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/lib/templates/command_templates.py +0 -0
  145. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/lib/toml/__init__.py +0 -0
  146. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/lib/toml/toml.py +0 -0
  147. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/lib/types.py +0 -0
  148. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/lib/ui/styling.py +0 -0
  149. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/lib/ui/visual_effects.py +0 -0
  150. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/lib/watcher/__init__.py +0 -0
  151. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/lib/watcher/watcher.py +0 -0
  152. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/lib/workflow_models.py +0 -0
  153. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/__init__.py +0 -0
  154. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/api/__init__.py +0 -0
  155. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/api/app.py +0 -0
  156. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/api/middleware.py +0 -0
  157. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/api/routers/__init__.py +0 -0
  158. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/api/routers/admin_router.py +0 -0
  159. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/api/routers/auth_router.py +0 -0
  160. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/api/routers/backtest_router.py +0 -0
  161. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/api/routers/data_router.py +0 -0
  162. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/api/routers/model_router.py +0 -0
  163. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/api/routers/monitoring_router.py +0 -0
  164. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/api/routers/portfolio_router.py +0 -0
  165. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/api/routers/prediction_router.py +0 -0
  166. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/api/routers/trade_router.py +0 -0
  167. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/api/routers/websocket_router.py +0 -0
  168. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/api/schemas.py +0 -0
  169. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/auth/__init__.py +0 -0
  170. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/auth/auth_manager.py +0 -0
  171. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/auth/models.py +0 -0
  172. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/auth/permissions.py +0 -0
  173. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/backtesting/__init__.py +0 -0
  174. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/backtesting/backtest_engine.py +0 -0
  175. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/backtesting/performance_metrics.py +0 -0
  176. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/backtesting/run.py +0 -0
  177. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/cache.py +0 -0
  178. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/cli/__init__.py +0 -0
  179. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/cli/main.py +0 -0
  180. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/config/__init__.py +0 -0
  181. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/config/settings.py +0 -0
  182. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/configs/__init__.py +0 -0
  183. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/configs/dvc_config.py +0 -0
  184. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/configs/mlflow_config.py +0 -0
  185. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/configs/mlops_manager.py +0 -0
  186. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/dashboard/__init__.py +0 -0
  187. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/dashboard/app.py +0 -0
  188. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/dashboard/app_integrated.py +0 -0
  189. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/dashboard/app_supabase.py +0 -0
  190. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/dashboard/app_training.py +0 -0
  191. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/dashboard/cli.py +0 -0
  192. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/dashboard/common.py +0 -0
  193. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/dashboard/components/__init__.py +0 -0
  194. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/dashboard/components/charts.py +0 -0
  195. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/dashboard/components/metrics.py +0 -0
  196. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/dashboard/components/tables.py +0 -0
  197. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/dashboard/overview.py +0 -0
  198. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/dashboard/pages/__init__.py +0 -0
  199. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/dashboard/pages/cicd.py +0 -0
  200. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/dashboard/pages/debug_dependencies.py +0 -0
  201. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/dashboard/pages/gravity_viz.py +0 -0
  202. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/dashboard/pages/monte_carlo_predictions.py +0 -0
  203. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/dashboard/pages/predictions_enhanced.py +0 -0
  204. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/dashboard/pages/scrapers_and_logs.py +0 -0
  205. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/dashboard/pages/test_portfolio.py +0 -0
  206. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/dashboard/pages/trading.py +0 -0
  207. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/dashboard/pages/workflows.py +0 -0
  208. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/dashboard/streamlit_extras_utils.py +0 -0
  209. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/dashboard/styles.py +0 -0
  210. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/dashboard/utils.py +0 -0
  211. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/dashboard/warning_suppression.py +0 -0
  212. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/data_ingestion/__init__.py +0 -0
  213. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/data_ingestion/api_connectors.py +0 -0
  214. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/data_ingestion/data_pipeline.py +0 -0
  215. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/data_ingestion/stream_processor.py +0 -0
  216. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/database/__init__.py +0 -0
  217. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/database/migrations/env.py +0 -0
  218. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/database/models.py +0 -0
  219. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/database/session.py +0 -0
  220. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/experimentation/__init__.py +0 -0
  221. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/experimentation/ab_testing.py +0 -0
  222. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/features/__init__.py +0 -0
  223. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/features/ensemble_features.py +0 -0
  224. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/features/recommendation_engine.py +0 -0
  225. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/features/stock_features.py +0 -0
  226. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/features/test_feature_engineering.py +0 -0
  227. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/logging.py +0 -0
  228. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/mlops/__init__.py +0 -0
  229. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/mlops/data_versioning.py +0 -0
  230. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/mlops/experiment_tracker.py +0 -0
  231. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/mlops/model_serving.py +0 -0
  232. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/mlops/pipeline_orchestrator.py +0 -0
  233. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/models/__init__.py +0 -0
  234. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/models/base_models.py +0 -0
  235. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/models/ensemble_models.py +0 -0
  236. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/models/recommendation_models.py +0 -0
  237. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/models/test_models.py +0 -0
  238. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/monitoring/__init__.py +0 -0
  239. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/monitoring/drift_detection.py +0 -0
  240. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/monitoring/metrics.py +0 -0
  241. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/optimization/__init__.py +0 -0
  242. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/optimization/optimize.py +0 -0
  243. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/optimization/portfolio_optimizer.py +0 -0
  244. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/predictions/__init__.py +0 -0
  245. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/predictions/monte_carlo.py +0 -0
  246. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/predictions/prediction_engine.py +0 -0
  247. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/preprocessing/__init__.py +0 -0
  248. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/preprocessing/data_cleaners.py +0 -0
  249. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/preprocessing/feature_extractors.py +0 -0
  250. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/preprocessing/ml_pipeline.py +0 -0
  251. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/preprocessing/test_preprocessing.py +0 -0
  252. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/scripts/__init__.py +0 -0
  253. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/scripts/populate_sample_data.py +0 -0
  254. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/serving/__init__.py +0 -0
  255. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/serving/serve.py +0 -0
  256. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/tasks.py +0 -0
  257. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/tests/test_integration.py +0 -0
  258. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/tests/test_training_dashboard.py +0 -0
  259. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/trading/__init__.py +0 -0
  260. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/trading/alpaca_client.py +0 -0
  261. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/trading/migrations.py +0 -0
  262. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/trading/models.py +0 -0
  263. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/trading/paper_trading.py +0 -0
  264. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/trading/risk_management.py +0 -0
  265. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/trading/trading_service.py +0 -0
  266. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/training/__init__.py +0 -0
  267. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/training/train.py +0 -0
  268. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/ml/training/train_model.py +0 -0
  269. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/mygroup/__init__.py +0 -0
  270. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/mygroup/test_cmd.py +0 -0
  271. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/public/__init__.py +0 -0
  272. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/public/commands/__init__.py +0 -0
  273. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/public/oi/oi.py +0 -0
  274. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/public/public.py +0 -0
  275. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/self/__init__.py +0 -0
  276. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/self/completion_cmd.py +0 -0
  277. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/self/health_cmd.py +0 -0
  278. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/self/ipfs_cmd.py +0 -0
  279. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/self/logs_cmd.py +0 -0
  280. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/self/self_cmd.py +0 -0
  281. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/self/store_cmd.py +0 -0
  282. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/self/test_cmd.py +0 -0
  283. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/self/workflows_cmd.py +0 -0
  284. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/storage/__init__.py +0 -0
  285. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/storage/backends/__init__.py +0 -0
  286. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/storage/backends/ipfs_backend.py +0 -0
  287. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/storage/base.py +0 -0
  288. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/storage/cache.py +0 -0
  289. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/storage/encryption.py +0 -0
  290. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/storage/factory.py +0 -0
  291. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/storage/registry.py +0 -0
  292. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/storage/storacha_cli.py +0 -0
  293. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/workflow/__init__.py +0 -0
  294. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/workflow/daemon/__init__.py +0 -0
  295. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/workflow/daemon/async_command_database.py +0 -0
  296. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/workflow/daemon/async_process_manager.py +0 -0
  297. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/workflow/daemon/client.py +0 -0
  298. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/workflow/daemon/daemon.py +0 -0
  299. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/workflow/daemon/daemon_api.py +0 -0
  300. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/workflow/daemon/enhanced_daemon.py +0 -0
  301. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/workflow/daemon/process_cli.py +0 -0
  302. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/workflow/daemon/process_manager.py +0 -0
  303. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/workflow/daemon/test_daemon.py +0 -0
  304. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/workflow/dashboard/__init__.py +0 -0
  305. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/workflow/dashboard/dashboard_cmd.py +0 -0
  306. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/workflow/doc_convert.py +0 -0
  307. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/workflow/docker/__init__.py +0 -0
  308. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/workflow/docker/docker.py +0 -0
  309. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/workflow/file/__init__.py +0 -0
  310. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/workflow/gcloud/__init__.py +0 -0
  311. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/workflow/gcloud/config.toml +0 -0
  312. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/workflow/gcloud/gcloud.py +0 -0
  313. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/workflow/git_commit/__init__.py +0 -0
  314. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/workflow/git_commit/ai_service.py +0 -0
  315. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/workflow/interview/__init__.py +0 -0
  316. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/workflow/lsh_integration.py +0 -0
  317. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/workflow/model_service/client.py +0 -0
  318. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/workflow/model_service/download_and_run_efficient_models.py +0 -0
  319. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/workflow/model_service/lightweight_embedder.py +0 -0
  320. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/workflow/model_service/lightweight_model_server.py +0 -0
  321. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/workflow/model_service/lightweight_test.py +0 -0
  322. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/workflow/model_service/model_service.py +0 -0
  323. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/workflow/model_service/ollama_efficient_runner.py +0 -0
  324. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/workflow/model_service/openai_adapter.py +0 -0
  325. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/workflow/model_service/pdf_processor.py +0 -0
  326. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/workflow/model_service/test_efficient_runner.py +0 -0
  327. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/workflow/model_service/test_example.py +0 -0
  328. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/workflow/model_service/test_integration.py +0 -0
  329. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/workflow/model_service/test_new_features.py +0 -0
  330. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/workflow/notebook/__init__.py +0 -0
  331. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/workflow/notebook/command_loader.py +0 -0
  332. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/workflow/notebook/converter.py +0 -0
  333. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/workflow/notebook/executor.py +0 -0
  334. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/workflow/notebook/notebook_cmd.py +0 -0
  335. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/workflow/notebook/schema.py +0 -0
  336. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/workflow/notebook/validator.py +0 -0
  337. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/workflow/openai/openai.py +0 -0
  338. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/workflow/registry/__init__.py +0 -0
  339. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/workflow/registry/registry.py +0 -0
  340. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/workflow/repo/__init__.py +0 -0
  341. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/workflow/repo/repo.py +0 -0
  342. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/workflow/scheduler/__init__.py +0 -0
  343. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/workflow/scheduler/cron_parser.py +0 -0
  344. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/workflow/scheduler/job.py +0 -0
  345. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/workflow/scheduler/models.py +0 -0
  346. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/workflow/scheduler/monitor.py +0 -0
  347. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/workflow/scheduler/persistence.py +0 -0
  348. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/workflow/scheduler/scheduler.py +0 -0
  349. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/workflow/scheduler/validation.py +0 -0
  350. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/workflow/search/__init__.py +0 -0
  351. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/workflow/secrets/__init__.py +0 -0
  352. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/workflow/secrets/secrets_cmd.py +0 -0
  353. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/workflow/storage/__init__.py +0 -0
  354. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/workflow/storage/storage_cmd.py +0 -0
  355. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/workflow/sync/__init__.py +0 -0
  356. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/workflow/sync/test_cmd.py +0 -0
  357. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/workflow/videos/__init__.py +0 -0
  358. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/workflow/wakatime/__init__.py +0 -0
  359. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/workflow/wakatime/wakatime.py +0 -0
  360. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli/workflow/workflow.py +0 -0
  361. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli_framework.egg-info/dependency_links.txt +0 -0
  362. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli_framework.egg-info/entry_points.txt +0 -0
  363. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli_framework.egg-info/requires.txt +0 -0
  364. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/src/mcli_framework.egg-info/top_level.txt +0 -0
  365. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/cli/__init__.py +0 -0
  366. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/cli/test_all_commands.py +0 -0
  367. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/cli/test_app_logs_cmd.py +0 -0
  368. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/cli/test_app_redis_cmd.py +0 -0
  369. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/cli/test_logs_cmd.py +0 -0
  370. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/cli/test_main_app.py +0 -0
  371. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/cli/test_model_cmd.py +0 -0
  372. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/cli/test_self_cmd.py +0 -0
  373. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/cli/test_self_cmd_plugins.py +0 -0
  374. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/cli/test_self_cmd_utilities.py +0 -0
  375. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/cli/test_workflow_creation_commands.py +0 -0
  376. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/cli/test_workflow_file.py +0 -0
  377. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/cli/test_workflow_gcloud.py +0 -0
  378. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/cli/test_workflow_registry.py +0 -0
  379. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/conftest.py +0 -0
  380. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/e2e/__init__.py +0 -0
  381. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/e2e/test_complete_workflows.py +0 -0
  382. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/e2e/test_model_workflow.py +0 -0
  383. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/e2e/test_new_user_workflow.py +0 -0
  384. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/e2e/test_update_workflow.py +0 -0
  385. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/fixtures/__init__.py +0 -0
  386. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/fixtures/chat_fixtures.py +0 -0
  387. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/fixtures/cli_fixtures.py +0 -0
  388. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/fixtures/command_fixtures.py +0 -0
  389. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/fixtures/data_fixtures.py +0 -0
  390. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/fixtures/db_fixtures.py +0 -0
  391. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/fixtures/model_fixtures.py +0 -0
  392. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/integration/__init__.py +0 -0
  393. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/integration/test_daemon_server.py +0 -0
  394. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/integration/test_direct_file_execution.py +0 -0
  395. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/integration/test_e2e_dashboard_lsh_supabase.py +0 -0
  396. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/integration/test_flask_webapp.py +0 -0
  397. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/integration/test_folder_workflows_integration.py +0 -0
  398. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/integration/test_gcloud_services.py +0 -0
  399. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/integration/test_ml_auth.py +0 -0
  400. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/integration/test_ml_data_pipeline.py +0 -0
  401. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/integration/test_ml_models.py +0 -0
  402. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/integration/test_ml_pipeline.py +0 -0
  403. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/integration/test_module_imports.py +0 -0
  404. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/integration/test_notebook_workflows.py +0 -0
  405. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/integration/test_oi_service.py +0 -0
  406. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/integration/test_repo_operations.py +0 -0
  407. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/integration/test_scheduler_integration.py +0 -0
  408. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/integration/test_service_registry.py +0 -0
  409. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/integration/test_supabase_live_connection.py +0 -0
  410. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/integration/test_video_processing.py +0 -0
  411. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/integration/test_wakatime_api.py +0 -0
  412. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/integration/test_webapp_full.py +0 -0
  413. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/integration/test_workflow.py +0 -0
  414. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/integration/test_workflow_commands.py +0 -0
  415. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/performance/__init__.py +0 -0
  416. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/property/__init__.py +0 -0
  417. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/unit/__init__.py +0 -0
  418. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/unit/storage/__init__.py +0 -0
  419. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/unit/storage/test_cache.py +0 -0
  420. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/unit/storage/test_encryption.py +0 -0
  421. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/unit/storage/test_storacha_cli.py +0 -0
  422. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/unit/test_api_utils.py +0 -0
  423. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/unit/test_async_process_manager.py +0 -0
  424. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/unit/test_auth_modules.py +0 -0
  425. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/unit/test_bug_fixes.py +0 -0
  426. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/unit/test_command_fixtures.py +0 -0
  427. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/unit/test_config.py +0 -0
  428. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/unit/test_correlation_logging.py +0 -0
  429. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/unit/test_custom_commands.py +0 -0
  430. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/unit/test_custom_commands_filtering.py +0 -0
  431. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/unit/test_daemon_api.py +0 -0
  432. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/unit/test_dashboard_components.py +0 -0
  433. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/unit/test_dashboard_functions.py +0 -0
  434. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/unit/test_dashboard_pages.py +0 -0
  435. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/unit/test_dependencies.py +0 -0
  436. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/unit/test_doc_convert_workflow.py +0 -0
  437. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/unit/test_emulator_workflow.py +0 -0
  438. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/unit/test_erd_generation.py +0 -0
  439. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/unit/test_erd_generic.py +0 -0
  440. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/unit/test_erd_imports.py +0 -0
  441. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/unit/test_folder_workflows.py +0 -0
  442. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/unit/test_git_commit_workflow.py +0 -0
  443. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/unit/test_health_cmd.py +0 -0
  444. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/unit/test_import_cmd.py +0 -0
  445. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/unit/test_ipfs_cmd.py +0 -0
  446. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/unit/test_ipfs_retry.py +0 -0
  447. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/unit/test_language_suffix.py +0 -0
  448. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/unit/test_lib_auth.py +0 -0
  449. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/unit/test_lib_files.py +0 -0
  450. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/unit/test_lib_utils.py +0 -0
  451. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/unit/test_logger.py +0 -0
  452. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/unit/test_ml_preprocessing.py +0 -0
  453. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/unit/test_new_cmd.py +0 -0
  454. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/unit/test_notebook_command_loader.py +0 -0
  455. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/unit/test_notebook_executor.py +0 -0
  456. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/unit/test_optional_deps.py +0 -0
  457. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/unit/test_pdf_compress.py +0 -0
  458. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/unit/test_prediction_engine.py +0 -0
  459. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/unit/test_pyenv.py +0 -0
  460. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/unit/test_regression.py +0 -0
  461. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/unit/test_scheduler.py +0 -0
  462. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/unit/test_scheduler_cron_parser.py +0 -0
  463. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/unit/test_scheduler_job.py +0 -0
  464. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/unit/test_scheduler_models.py +0 -0
  465. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/unit/test_scheduler_monitor.py +0 -0
  466. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/unit/test_scheduler_persistence.py +0 -0
  467. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/unit/test_scheduler_validation.py +0 -0
  468. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/unit/test_script_loader_options.py +0 -0
  469. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/unit/test_security_command_injection.py +0 -0
  470. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/unit/test_self_update.py +0 -0
  471. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/unit/test_service_config.py +0 -0
  472. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/unit/test_service_health.py +0 -0
  473. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/unit/test_service_manager.py +0 -0
  474. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/unit/test_service_state.py +0 -0
  475. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/unit/test_services_cmd.py +0 -0
  476. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/unit/test_shell_exceptions.py +0 -0
  477. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/unit/test_shell_functions.py +0 -0
  478. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/unit/test_shell_security.py +0 -0
  479. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/unit/test_store_cmd.py +0 -0
  480. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/unit/test_supabase_connection.py +0 -0
  481. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/unit/test_supabase_pagination.py +0 -0
  482. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/unit/test_sync_cmd.py +0 -0
  483. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/unit/test_toml_utils.py +0 -0
  484. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/unit/test_trading_imports.py +0 -0
  485. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/unit/test_ui_rich.py +0 -0
  486. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/unit/test_uv_compat.py +0 -0
  487. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/unit/test_workflow_models.py +0 -0
  488. {mcli_framework-8.0.40 → mcli_framework-8.0.42}/tests/unit/workflow/test_notebook.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mcli-framework
3
- Version: 8.0.40
3
+ Version: 8.0.42
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.40"
3
+ version = "8.0.42"
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"
@@ -30,11 +30,11 @@ def init(is_global, git, force):
30
30
  """🚀 Initialize workflows directory structure.
31
31
 
32
32
  Creates the necessary directories and configuration files for managing
33
- custom workflows. By default, creates a local mcli/workflows/ directory
33
+ custom workflows. By default, creates a local .mcli/workflows/ directory
34
34
  in the current directory.
35
35
 
36
36
  Examples:
37
- mcli init # Initialize local mcli/workflows/ in current directory
37
+ mcli init # Initialize local .mcli/workflows/ in current directory
38
38
  mcli init --global # Initialize global ~/.mcli/workflows/
39
39
  mcli init --git # Also initialize git repository
40
40
  """
@@ -50,13 +50,11 @@ def init(is_global, git, force):
50
50
  workflows_dir = get_mcli_home() / "workflows"
51
51
  is_local = False
52
52
  else:
53
- # Local: mcli/workflows in current directory (default behavior)
53
+ # Local: .mcli/workflows in current directory (default behavior)
54
54
  from pathlib import Path
55
55
 
56
- from mcli.lib.constants.paths import DirNames
57
-
58
56
  cwd = Path.cwd()
59
- workflows_dir = cwd / DirNames.LOCAL_MCLI / "workflows"
57
+ workflows_dir = cwd / ".mcli" / "workflows"
60
58
  is_local = True
61
59
 
62
60
  lockfile_path = workflows_dir / "commands.lock.json"
@@ -254,7 +252,12 @@ Thumbs.db
254
252
  if git_root:
255
253
  table.add_row("Git Repository", str(git_root))
256
254
  table.add_row("Lockfile", str(lockfile_path))
257
- table.add_row("Git Initialized", "Yes" if git and (workflows_dir / ".git").exists() else "No")
255
+ table.add_row("Git Tracked", "Yes" if in_git_repo else "No")
256
+ if git:
257
+ table.add_row(
258
+ "Workflows Git",
259
+ "Yes" if (workflows_dir / ".git").exists() else "No",
260
+ )
258
261
 
259
262
  console.print(table)
260
263
  console.print()
@@ -68,8 +68,5 @@ class EnvVars:
68
68
  MCLI_USE_SYSTEM_PYTHON = "MCLI_USE_SYSTEM_PYTHON" # Skip venv detection
69
69
  MCLI_VENV_PATH = "MCLI_VENV_PATH" # Override venv path
70
70
 
71
- # Local workspace directory override
72
- MCLI_LOCAL_DIR = "MCLI_LOCAL_DIR" # Override local workspace dir name
73
-
74
71
 
75
72
  __all__ = ["EnvVars"]
@@ -59,10 +59,6 @@ class WarningMessages:
59
59
  RATE_LIMIT_WARNING = "Approaching rate limit for {service}"
60
60
  LARGE_FILE_WARNING = "Large file detected: {path} ({size})"
61
61
  AMBIGUOUS_COMMAND = "Multiple versions of '{name}' found. Specify language: {options}"
62
- DEPRECATED_LOCAL_DIR = (
63
- "[yellow]Using legacy '.mcli/' directory. "
64
- "Run 'mcli self migrate --rename-dir' to upgrade to 'mcli/'.[/yellow]"
65
- )
66
62
 
67
63
 
68
64
  class InfoMessages:
@@ -8,9 +8,7 @@ Using these constants ensures consistency across the codebase.
8
8
  class DirNames:
9
9
  """Directory name constants."""
10
10
 
11
- MCLI = ".mcli" # Global home (~/.mcli) — UNCHANGED
12
- LOCAL_MCLI = "mcli" # New local workspace dir (visible in IDE/ls)
13
- LEGACY_LOCAL_MCLI = ".mcli" # Legacy local dir (for fallback)
11
+ MCLI = ".mcli"
14
12
  GIT = ".git"
15
13
  LOGS = "logs"
16
14
  CONFIG = "config"
@@ -158,45 +158,16 @@ def get_git_root(path: Optional[Path] = None) -> Optional[Path]:
158
158
 
159
159
  def get_local_mcli_dir() -> Optional[Path]:
160
160
  """
161
- Get the local mcli workspace directory for the current git repository.
162
-
163
- Resolution order:
164
- 1. MCLI_LOCAL_DIR env var override
165
- 2. New 'mcli/' directory (visible in IDE/ls)
166
- 3. Legacy '.mcli/' directory (with deprecation warning)
167
- 4. Default to new 'mcli/' path (for fresh init)
161
+ Get the local .mcli directory for the current git repository.
168
162
 
169
163
  Returns:
170
- Path to local mcli directory in git root, or None if not in a git repository
164
+ Path to .mcli directory in git root, or None if not in a git repository
171
165
  """
172
166
  git_root = get_git_root()
173
- if not git_root:
174
- return None
175
-
176
- # 1. Check MCLI_LOCAL_DIR env var override
177
- custom_dir = os.environ.get("MCLI_LOCAL_DIR")
178
- if custom_dir:
179
- return git_root / custom_dir
180
-
181
- # 2. Check new "mcli/" directory
182
- new_dir = git_root / DirNames.LOCAL_MCLI
183
- if new_dir.exists():
184
- return new_dir
185
-
186
- # 3. Fall back to legacy ".mcli/"
187
- legacy_dir = git_root / DirNames.LEGACY_LOCAL_MCLI
188
- if legacy_dir.exists():
189
- import warnings
190
-
191
- warnings.warn(
192
- "Using legacy '.mcli/' directory. " "Run 'mcli self migrate --rename-dir' to upgrade.",
193
- DeprecationWarning,
194
- stacklevel=2,
195
- )
196
- return legacy_dir
197
-
198
- # 4. Neither exists — return new path (for fresh init)
199
- return git_root / DirNames.LOCAL_MCLI
167
+ if git_root:
168
+ local_mcli = git_root / DirNames.MCLI
169
+ return local_mcli
170
+ return None
200
171
 
201
172
 
202
173
  def get_local_commands_dir() -> Optional[Path]:
@@ -286,7 +257,7 @@ def resolve_workspace(workspace_path: str) -> Optional[Path]:
286
257
  Resolve a workspace path to a workflows directory.
287
258
 
288
259
  Accepts either:
289
- - A directory path (uses <dir>/mcli/workflows/ or <dir>/.mcli/workflows/)
260
+ - A directory path (uses <dir>/.mcli/workflows/)
290
261
  - A config file path (parses for workflows location)
291
262
 
292
263
  Args:
@@ -300,19 +271,20 @@ def resolve_workspace(workspace_path: str) -> Optional[Path]:
300
271
  if not path.exists():
301
272
  return None
302
273
 
303
- # If it's a directory, look for mcli/workflows/ or .mcli/workflows/ inside it
274
+ # If it's a directory, look for .mcli/workflows/ inside it
304
275
  if path.is_dir():
305
- # Check new mcli/ first, then legacy .mcli/
306
- for dir_name in [DirNames.LOCAL_MCLI, DirNames.LEGACY_LOCAL_MCLI]:
307
- workflows_dir = path / dir_name / "workflows"
308
- if workflows_dir.exists():
309
- return workflows_dir
310
- commands_dir = path / dir_name / "commands"
311
- if commands_dir.exists():
312
- return commands_dir
313
-
314
- # If neither exists, return the expected new path
315
- return path / DirNames.LOCAL_MCLI / "workflows"
276
+ # Check for .mcli/workflows/
277
+ workflows_dir = path / DirNames.MCLI / "workflows"
278
+ if workflows_dir.exists():
279
+ return workflows_dir
280
+
281
+ # Check for legacy .mcli/commands/
282
+ commands_dir = path / DirNames.MCLI / "commands"
283
+ if commands_dir.exists():
284
+ return commands_dir
285
+
286
+ # If neither exists, return the expected workflows path
287
+ return workflows_dir
316
288
 
317
289
  # If it's a file, try to parse it as a config file
318
290
  if path.is_file():
@@ -182,6 +182,9 @@ class PyEnvManager:
182
182
  ) -> subprocess.CompletedProcess:
183
183
  """Execute a Python script in the resolved virtual environment.
184
184
 
185
+ When running in a TTY, stdio is inherited so interactive/TUI apps
186
+ (e.g. Textual, curses) work correctly. Otherwise output is captured.
187
+
185
188
  Args:
186
189
  script_path: Path to the Python script.
187
190
  args: Command line arguments for the script.
@@ -203,13 +206,16 @@ class PyEnvManager:
203
206
  exec_env.update(env)
204
207
 
205
208
  python_exe = self.get_python_executable()
209
+ cmd = [str(python_exe), str(script_path)] + args
206
210
 
207
- return subprocess.run(
208
- [str(python_exe), str(script_path)] + args,
209
- env=exec_env,
210
- capture_output=True,
211
- text=True,
212
- )
211
+ if sys.stdout.isatty():
212
+ # Interactive: inherit stdio so TUI frameworks work
213
+ return subprocess.run(cmd, env=exec_env)
214
+ else:
215
+ # Non-interactive: capture output for piping
216
+ return subprocess.run(
217
+ cmd, env=exec_env, capture_output=True, text=True,
218
+ )
213
219
 
214
220
  def get_status(self) -> Dict[str, str]:
215
221
  """Get the current environment status for display.
@@ -518,7 +518,7 @@ class ScriptLoader:
518
518
  ctx.exit(1)
519
519
  return
520
520
 
521
- # Execute in venv
521
+ # Execute in venv (inherits stdio when TTY, captures otherwise)
522
522
  logger.info(f"Executing Python command in venv: {name}")
523
523
  result = env_manager.execute_in_venv(
524
524
  script_path,
@@ -526,6 +526,7 @@ class ScriptLoader:
526
526
  env={"MCLI_COMMAND": name},
527
527
  )
528
528
 
529
+ # Only echo captured output (non-TTY mode)
529
530
  if result.stdout:
530
531
  click.echo(result.stdout, nl=False)
531
532
  if result.stderr:
@@ -12,7 +12,6 @@ from datetime import datetime
12
12
  from pathlib import Path
13
13
  from typing import Any, Dict, List, Optional
14
14
 
15
- from mcli.lib.constants.paths import DirNames
16
15
  from mcli.lib.logger.logger import get_logger
17
16
  from mcli.lib.paths import get_git_root, get_mcli_home, is_git_repository
18
17
  from mcli.lib.script_loader import ScriptLoader
@@ -20,23 +19,6 @@ from mcli.lib.script_loader import ScriptLoader
20
19
  logger = get_logger(__name__)
21
20
 
22
21
 
23
- def _resolve_local_workflows(workspace_path: Path) -> Optional[Path]:
24
- """Find the workflows dir in a workspace, checking new and legacy paths."""
25
- for dir_name in [DirNames.LOCAL_MCLI, DirNames.LEGACY_LOCAL_MCLI]:
26
- workflows_dir = workspace_path / dir_name / "workflows"
27
- if workflows_dir.exists():
28
- return workflows_dir
29
- commands_dir = workspace_path / dir_name / "commands"
30
- if commands_dir.exists():
31
- return commands_dir
32
- return None
33
-
34
-
35
- def _local_workflows_exist(workspace_path: Path) -> bool:
36
- """Check if any local workflows directory exists in a workspace."""
37
- return _resolve_local_workflows(workspace_path) is not None
38
-
39
-
40
22
  def get_registry_path() -> Path:
41
23
  """Get the path to the workspaces registry file."""
42
24
  return get_mcli_home() / "workspaces.json"
@@ -123,11 +105,15 @@ def register_workspace(
123
105
 
124
106
  workspace_path = workspace_path.resolve()
125
107
 
126
- # Check if workflows directory exists (new mcli/ or legacy .mcli/)
127
- if not _local_workflows_exist(workspace_path):
128
- logger.warning(f"No workflows found at {workspace_path}")
129
- logger.info("Initialize with: mcli init")
130
- return None
108
+ # Check if workflows directory exists
109
+ workflows_dir = workspace_path / ".mcli" / "workflows"
110
+ if not workflows_dir.exists():
111
+ # Also check for legacy commands directory
112
+ legacy_dir = workspace_path / ".mcli" / "commands"
113
+ if not legacy_dir.exists():
114
+ logger.warning(f"No workflows found at {workspace_path}")
115
+ logger.info("Initialize with: mcli init")
116
+ return None
131
117
 
132
118
  # Load registry
133
119
  registry = load_registry()
@@ -205,7 +191,9 @@ def list_registered_workspaces() -> List[Dict[str, Any]]:
205
191
  workspace_path = Path(workspace_data["path"])
206
192
 
207
193
  # Check if workspace still exists
208
- exists = _local_workflows_exist(workspace_path)
194
+ workflows_dir = workspace_path / ".mcli" / "workflows"
195
+ legacy_dir = workspace_path / ".mcli" / "commands"
196
+ exists = workflows_dir.exists() or legacy_dir.exists()
209
197
 
210
198
  workspaces.append(
211
199
  {
@@ -254,9 +242,12 @@ def get_all_workflows() -> Dict[str, List[Dict[str, Any]]]:
254
242
  workspace_path = Path(workspace_data["path"])
255
243
  workspace_name = workspace_data.get("name", workspace_path.name)
256
244
 
257
- # Determine workflows directory (check new mcli/ then legacy .mcli/)
258
- workflows_dir = _resolve_local_workflows(workspace_path)
259
- if workflows_dir is None:
245
+ # Determine workflows directory
246
+ workflows_dir = workspace_path / ".mcli" / "workflows"
247
+ if not workflows_dir.exists():
248
+ workflows_dir = workspace_path / ".mcli" / "commands"
249
+
250
+ if not workflows_dir.exists():
260
251
  continue
261
252
 
262
253
  loader = ScriptLoader(workflows_dir)
@@ -299,8 +290,11 @@ def auto_register_current() -> Optional[str]:
299
290
  if workspace_id in registry.get("workspaces", {}):
300
291
  return workspace_id
301
292
 
302
- # Check if has workflows (new mcli/ or legacy .mcli/)
303
- if _local_workflows_exist(git_root):
293
+ # Check if has workflows
294
+ workflows_dir = git_root / ".mcli" / "workflows"
295
+ legacy_dir = git_root / ".mcli" / "commands"
296
+
297
+ if workflows_dir.exists() or legacy_dir.exists():
304
298
  return register_workspace(git_root)
305
299
 
306
300
  return None
@@ -175,17 +175,8 @@ def env_command(
175
175
  # Get workflows directory for this workspace
176
176
  _workflows_dir = get_custom_commands_dir(global_mode=False) # noqa: F841
177
177
  if workspace_dir and is_git_repository():
178
- from mcli.lib.constants.paths import DirNames
179
-
180
- # Check both new mcli/ and legacy .mcli/ local dir
181
- local_workflows = None
182
- for dir_name in [DirNames.LOCAL_MCLI, DirNames.LEGACY_LOCAL_MCLI]:
183
- candidate = workspace_dir / dir_name / "workflows"
184
- if candidate.exists():
185
- local_workflows = candidate
186
- break
187
-
188
- if local_workflows is not None:
178
+ local_workflows = workspace_dir / ".mcli" / "workflows"
179
+ if local_workflows.exists():
189
180
  env_info["workflows_dir"] = str(local_workflows)
190
181
  # Count workflow scripts
191
182
  script_count = sum(
@@ -194,11 +194,6 @@ def get_migration_status() -> dict:
194
194
  local_old = git_root / DirNames.MCLI / "commands"
195
195
  local_new = git_root / DirNames.MCLI / "workflows"
196
196
 
197
- # Check if local dir needs rename (.mcli/ → mcli/)
198
- legacy_local = git_root / DirNames.LEGACY_LOCAL_MCLI
199
- new_local = git_root / DirNames.LOCAL_MCLI
200
- needs_dir_rename = legacy_local.exists() and not new_local.exists()
201
-
202
197
  local_status: dict = {
203
198
  "git_root": str(git_root),
204
199
  "old_dir_exists": local_old.exists(),
@@ -208,7 +203,6 @@ def get_migration_status() -> dict:
208
203
  "needs_migration": False,
209
204
  "files_to_migrate": [],
210
205
  "migration_done": False,
211
- "needs_dir_rename": needs_dir_rename,
212
206
  }
213
207
  status["local"] = local_status
214
208
 
@@ -417,11 +411,6 @@ def migrate_commands_to_workflows(
417
411
  is_flag=True,
418
412
  help="Remove JSON files after successful conversion (use with --json-to-scripts)",
419
413
  )
420
- @click.option(
421
- "--rename-dir",
422
- is_flag=True,
423
- help="Rename local '.mcli/' directories to 'mcli/' in current git repo",
424
- )
425
414
  def migrate_command(
426
415
  dry_run: bool,
427
416
  force: bool,
@@ -431,7 +420,6 @@ def migrate_command(
431
420
  description: str,
432
421
  json_to_scripts: bool,
433
422
  remove_json: bool,
434
- rename_dir: bool,
435
423
  ):
436
424
  """
437
425
  Migrate mcli configuration and data to new structure.
@@ -439,7 +427,6 @@ def migrate_command(
439
427
  Currently handles:
440
428
  - Moving ~/.mcli/commands to ~/.mcli/workflows (global)
441
429
  - Moving .mcli/commands to .mcli/workflows (local, in git repos)
442
- - Renaming local .mcli/ to mcli/ for visibility (--rename-dir)
443
430
  - Converting JSON workflow files to native scripts (--json-to-scripts)
444
431
  - Optionally pushing to IPFS for decentralized backup
445
432
 
@@ -450,7 +437,6 @@ def migrate_command(
450
437
  mcli self migrate --scope global # Migrate only global
451
438
  mcli self migrate --scope local # Migrate only local (current repo)
452
439
  mcli self migrate --force # Force migration (overwrite existing)
453
- mcli self migrate --rename-dir # Rename .mcli/ to mcli/ in current repo
454
440
  mcli self migrate --json-to-scripts # Convert JSON workflows to scripts
455
441
  mcli self migrate --to-ipfs -d "Migrated workflows v1.0" # Push to IPFS after
456
442
  """
@@ -495,12 +481,6 @@ def migrate_command(
495
481
  else:
496
482
  console.print(" [green]✓ No migration needed[/green]")
497
483
 
498
- if local_status.get("needs_dir_rename"):
499
- console.print(
500
- " [yellow]⚠ Directory rename needed: "
501
- ".mcli/ → mcli/ (run --rename-dir)[/yellow]"
502
- )
503
-
504
484
  # Show files to migrate if any
505
485
  all_files = global_status.get("files_to_migrate", [])
506
486
  if migration_status["local"]:
@@ -524,43 +504,6 @@ def migrate_command(
524
504
 
525
505
  return
526
506
 
527
- # Handle --rename-dir: rename local .mcli/ → mcli/
528
- if rename_dir:
529
- from mcli.lib.paths import get_git_root, is_git_repository
530
-
531
- if not is_git_repository():
532
- error("Not in a git repository")
533
- return
534
-
535
- git_root = get_git_root()
536
- if not git_root:
537
- error("Could not determine git root")
538
- return
539
-
540
- old_dir = git_root / DirNames.LEGACY_LOCAL_MCLI # .mcli
541
- new_dir = git_root / DirNames.LOCAL_MCLI # mcli
542
-
543
- if new_dir.exists() and not old_dir.exists():
544
- info("Already using 'mcli/' directory — no migration needed")
545
- return
546
-
547
- if not old_dir.exists():
548
- info("No '.mcli/' directory found — nothing to migrate")
549
- return
550
-
551
- if new_dir.exists() and old_dir.exists():
552
- error("Both 'mcli/' and '.mcli/' exist. Resolve manually.")
553
- return
554
-
555
- if dry_run:
556
- console.print(f"[yellow]Would rename:[/yellow] {old_dir} → {new_dir}")
557
- return
558
-
559
- shutil.move(str(old_dir), str(new_dir))
560
- success(f"Renamed '{old_dir.name}/' → '{new_dir.name}/'")
561
- console.print("[dim]Tip: Update your .gitignore if it references .mcli/[/dim]")
562
- return
563
-
564
507
  # Handle --json-to-scripts conversion
565
508
  if json_to_scripts:
566
509
  from mcli.lib.paths import get_custom_commands_dir, get_git_root, is_git_repository
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mcli-framework
3
- Version: 8.0.40
3
+ Version: 8.0.42
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>
@@ -441,7 +441,6 @@ tests/unit/test_lib_auth.py
441
441
  tests/unit/test_lib_files.py
442
442
  tests/unit/test_lib_utils.py
443
443
  tests/unit/test_logger.py
444
- tests/unit/test_migrate_rename_dir.py
445
444
  tests/unit/test_ml_preprocessing.py
446
445
  tests/unit/test_new_cmd.py
447
446
  tests/unit/test_notebook_command_loader.py
@@ -42,8 +42,8 @@ def mock_repo(tmp_path):
42
42
  repo_dir = tmp_path / "mock_repo"
43
43
  repo_dir.mkdir()
44
44
 
45
- # Create mcli directory structure (local workspace)
46
- mcli_dir = repo_dir / "mcli"
45
+ # Create .mcli directory structure
46
+ mcli_dir = repo_dir / ".mcli"
47
47
  mcli_dir.mkdir()
48
48
 
49
49
  commands_dir = mcli_dir / "commands"
@@ -1,7 +1,7 @@
1
1
  """Unit tests for mcli init and mv commands.
2
2
 
3
3
  Tests the new behaviors added in v8.0.26:
4
- - mcli init defaults to local mcli/workflows in current directory
4
+ - mcli init defaults to local .mcli/workflows in current directory
5
5
  - mcli mv auto-detects directory paths as workspace destinations
6
6
  """
7
7
 
@@ -31,13 +31,13 @@ class TestInitCommand:
31
31
  return tmp_path
32
32
 
33
33
  def test_init_defaults_to_local(self, cli_runner, temp_dir):
34
- """Test that mcli init creates local mcli/workflows by default."""
34
+ """Test that mcli init creates local .mcli/workflows by default."""
35
35
  with cli_runner.isolated_filesystem(temp_dir=temp_dir):
36
36
  result = cli_runner.invoke(init, [])
37
37
 
38
38
  assert result.exit_code == 0
39
- assert Path("mcli/workflows").exists()
40
- assert Path("mcli/workflows/commands.lock.json").exists()
39
+ assert Path(".mcli/workflows").exists()
40
+ assert Path(".mcli/workflows/commands.lock.json").exists()
41
41
  assert "Local (directory-specific)" in result.output
42
42
 
43
43
  def test_init_global_flag_uses_home(self, cli_runner, temp_dir):
@@ -59,7 +59,7 @@ class TestInitCommand:
59
59
 
60
60
  assert result.exit_code == 0
61
61
 
62
- lockfile_path = Path("mcli/workflows/commands.lock.json")
62
+ lockfile_path = Path(".mcli/workflows/commands.lock.json")
63
63
  with open(lockfile_path) as f:
64
64
  lockfile = json.load(f)
65
65
 
@@ -87,7 +87,7 @@ class TestInitCommand:
87
87
  result = cli_runner.invoke(init, [])
88
88
 
89
89
  assert result.exit_code == 0
90
- assert Path("mcli/workflows/README.md").exists()
90
+ assert Path(".mcli/workflows/README.md").exists()
91
91
 
92
92
  def test_init_creates_gitignore(self, cli_runner, temp_dir):
93
93
  """Test that init creates a .gitignore file."""
@@ -95,7 +95,7 @@ class TestInitCommand:
95
95
  result = cli_runner.invoke(init, [])
96
96
 
97
97
  assert result.exit_code == 0
98
- assert Path("mcli/workflows/.gitignore").exists()
98
+ assert Path(".mcli/workflows/.gitignore").exists()
99
99
 
100
100
  def test_init_force_reinitializes(self, cli_runner, temp_dir):
101
101
  """Test that --force flag allows reinitialization."""
@@ -134,7 +134,7 @@ class TestMvCommand:
134
134
  def setup_workflows(self, tmp_path):
135
135
  """Create a mock workflow setup for testing."""
136
136
  # Create source workflows directory with a test command
137
- workflows_dir = tmp_path / "mcli" / "workflows"
137
+ workflows_dir = tmp_path / ".mcli" / "workflows"
138
138
  workflows_dir.mkdir(parents=True)
139
139
 
140
140
  # Create a test command file
@@ -152,7 +152,7 @@ class TestMvCommand:
152
152
  # Setup source
153
153
  source_dir = tmp_path / "source"
154
154
  source_dir.mkdir()
155
- source_workflows = source_dir / "mcli" / "workflows"
155
+ source_workflows = source_dir / ".mcli" / "workflows"
156
156
  source_workflows.mkdir(parents=True)
157
157
 
158
158
  test_cmd = source_workflows / "my-cmd.py"
@@ -172,7 +172,7 @@ class TestMvCommand:
172
172
  result = cli_runner.invoke(mv, ["my-cmd", str(dest_dir) + "/"], input="y\n")
173
173
 
174
174
  # Should recognize it's a directory and try to move there
175
- # The command may fail because dest doesn't have mcli/workflows but
175
+ # The command may fail because dest doesn't have .mcli/workflows but
176
176
  # the important thing is it recognized the directory path
177
177
  assert "destination" in result.output.lower() or "workspace" in result.output.lower()
178
178
 
@@ -181,7 +181,7 @@ class TestMvCommand:
181
181
  # This tests the path detection logic
182
182
  source_dir = tmp_path / "source"
183
183
  source_dir.mkdir()
184
- source_workflows = source_dir / "mcli" / "workflows"
184
+ source_workflows = source_dir / ".mcli" / "workflows"
185
185
  source_workflows.mkdir(parents=True)
186
186
 
187
187
  test_cmd = source_workflows / "my-cmd.py"
@@ -204,7 +204,7 @@ class TestMvCommand:
204
204
  """Test that providing both directory path and -w option fails."""
205
205
  source_dir = tmp_path / "source"
206
206
  source_dir.mkdir()
207
- source_workflows = source_dir / "mcli" / "workflows"
207
+ source_workflows = source_dir / ".mcli" / "workflows"
208
208
  source_workflows.mkdir(parents=True)
209
209
 
210
210
  test_cmd = source_workflows / "my-cmd.py"
@@ -236,7 +236,7 @@ class TestMvCommand:
236
236
  # Setup source
237
237
  source_dir = tmp_path / "source"
238
238
  source_dir.mkdir()
239
- source_workflows = source_dir / "mcli" / "workflows"
239
+ source_workflows = source_dir / ".mcli" / "workflows"
240
240
  source_workflows.mkdir(parents=True)
241
241
 
242
242
  test_cmd = source_workflows / "original-name.py"
@@ -245,10 +245,10 @@ class TestMvCommand:
245
245
  lockfile = source_workflows / "commands.lock.json"
246
246
  lockfile.write_text(json.dumps({"version": "1.0", "scope": "local", "commands": {}}))
247
247
 
248
- # Setup destination with mcli/workflows
248
+ # Setup destination with .mcli/workflows
249
249
  dest_dir = tmp_path / "destination"
250
250
  dest_dir.mkdir()
251
- dest_workflows = dest_dir / "mcli" / "workflows"
251
+ dest_workflows = dest_dir / ".mcli" / "workflows"
252
252
  dest_workflows.mkdir(parents=True)
253
253
 
254
254
  dest_lockfile = dest_workflows / "commands.lock.json"
@@ -275,7 +275,7 @@ class TestMvCommandRename:
275
275
 
276
276
  def test_mv_same_source_dest_no_change(self, cli_runner, tmp_path):
277
277
  """Test that mv with same source and dest does nothing."""
278
- workflows_dir = tmp_path / "mcli" / "workflows"
278
+ workflows_dir = tmp_path / ".mcli" / "workflows"
279
279
  workflows_dir.mkdir(parents=True)
280
280
 
281
281
  test_cmd = workflows_dir / "my-cmd.py"