mcli-framework 8.0.17__tar.gz → 8.0.19__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 (449) hide show
  1. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/PKG-INFO +1 -1
  2. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/pyproject.toml +1 -1
  3. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/app/main.py +15 -4
  4. mcli_framework-8.0.19/src/mcli/app/mv_cmd.py +143 -0
  5. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/constants/__init__.py +2 -0
  6. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/constants/messages.py +32 -0
  7. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/self/self_cmd.py +5 -147
  8. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/self/workflows_cmd.py +151 -78
  9. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli_framework.egg-info/PKG-INFO +1 -1
  10. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli_framework.egg-info/SOURCES.txt +1 -0
  11. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/.github/dependabot.yml +0 -0
  12. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/.github/dependency-review-config.yml +0 -0
  13. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/.github/workflows/build.yml +0 -0
  14. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/.github/workflows/ci.yml +0 -0
  15. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/.github/workflows/codeql.yml +0 -0
  16. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/.github/workflows/docs-links.yml +0 -0
  17. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/.github/workflows/publish-self-hosted.yml +0 -0
  18. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/.github/workflows/publish.yml +0 -0
  19. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/.github/workflows/release.yml +0 -0
  20. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/.github/workflows/security.yml +0 -0
  21. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/.github/workflows/test.yml +0 -0
  22. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/LICENSE +0 -0
  23. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/MANIFEST.in +0 -0
  24. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/README.md +0 -0
  25. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/llms-full.txt +0 -0
  26. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/llms.txt +0 -0
  27. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/mcli_rust/Cargo.toml +0 -0
  28. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/mcli_rust/src/command_parser.rs +0 -0
  29. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/mcli_rust/src/file_watcher.rs +0 -0
  30. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/mcli_rust/src/lib.rs +0 -0
  31. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/mcli_rust/src/process_manager.rs +0 -0
  32. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/mcli_rust/src/tfidf.rs +0 -0
  33. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/setup.cfg +0 -0
  34. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/__init__.py +0 -0
  35. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/app/__init__.py +0 -0
  36. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/app/commands_cmd.py +0 -0
  37. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/app/completion_helpers.py +0 -0
  38. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/app/context_cmd.py +0 -0
  39. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/app/create_cmd.py +0 -0
  40. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/app/delete_cmd.py +0 -0
  41. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/app/edit_cmd.py +0 -0
  42. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/app/init_cmd.py +0 -0
  43. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/app/list_cmd.py +0 -0
  44. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/app/migrate_cmd.py +0 -0
  45. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/app/model/__init__.py +0 -0
  46. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/app/model/model.py +0 -0
  47. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/app/model_cmd.py +0 -0
  48. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/app/new_cmd.py +0 -0
  49. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/app/remove_cmd.py +0 -0
  50. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/app/rm_cmd.py +0 -0
  51. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/app/search_cmd.py +0 -0
  52. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/app/sync_cmd.py +0 -0
  53. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/app/video/__init__.py +0 -0
  54. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/app/video/video.py +0 -0
  55. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/config.toml +0 -0
  56. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/__init__.py +0 -0
  57. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/api/__init__.py +0 -0
  58. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/api/api.py +0 -0
  59. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/api/daemon_client.py +0 -0
  60. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/api/daemon_client_local.py +0 -0
  61. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/api/daemon_decorator.py +0 -0
  62. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/api/mcli_decorators.py +0 -0
  63. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/auth/__init__.py +0 -0
  64. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/auth/auth.py +0 -0
  65. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/auth/aws_manager.py +0 -0
  66. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/auth/azure_manager.py +0 -0
  67. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/auth/credential_manager.py +0 -0
  68. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/auth/gcp_manager.py +0 -0
  69. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/auth/key_manager.py +0 -0
  70. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/auth/mcli_manager.py +0 -0
  71. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/auth/token_manager.py +0 -0
  72. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/auth/token_util.py +0 -0
  73. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/config/__init__.py +0 -0
  74. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/config/config.py +0 -0
  75. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/constants/commands.py +0 -0
  76. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/constants/defaults.py +0 -0
  77. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/constants/env.py +0 -0
  78. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/constants/paths.py +0 -0
  79. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/constants/scripts.py +0 -0
  80. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/constants/storage.py +0 -0
  81. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/custom_commands.py +0 -0
  82. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/discovery/__init__.py +0 -0
  83. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/discovery/command_discovery.py +0 -0
  84. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/erd/__init__.py +0 -0
  85. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/erd/erd.py +0 -0
  86. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/erd/generate_graph.py +0 -0
  87. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/errors.py +0 -0
  88. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/feature_detection.py +0 -0
  89. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/files/__init__.py +0 -0
  90. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/files/files.py +0 -0
  91. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/folder_workflows.py +0 -0
  92. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/fs/__init__.py +0 -0
  93. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/fs/fs.py +0 -0
  94. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/ipfs_sync.py +0 -0
  95. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/lib.py +0 -0
  96. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/logger/__init__.py +0 -0
  97. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/logger/logger.py +0 -0
  98. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/optional_deps.py +0 -0
  99. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/paths.py +0 -0
  100. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/performance/__init__.py +0 -0
  101. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/performance/optimizer.py +0 -0
  102. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/performance/rust_bridge.py +0 -0
  103. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/performance/uvloop_config.py +0 -0
  104. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/pickles/__init__.py +0 -0
  105. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/pickles/pickles.py +0 -0
  106. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/pyenv/__init__.py +0 -0
  107. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/pyenv/deps.py +0 -0
  108. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/pyenv/manager.py +0 -0
  109. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/pyenv/venv.py +0 -0
  110. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/script_loader.py +0 -0
  111. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/script_sync.py +0 -0
  112. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/script_watcher.py +0 -0
  113. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/search/cached_vectorizer.py +0 -0
  114. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/secrets/__init__.py +0 -0
  115. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/secrets/commands.py +0 -0
  116. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/secrets/manager.py +0 -0
  117. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/secrets/repl.py +0 -0
  118. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/secrets/store.py +0 -0
  119. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/services/data_pipeline.py +0 -0
  120. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/services/lsh_client.py +0 -0
  121. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/services/redis_service.py +0 -0
  122. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/shell/__init__.py +0 -0
  123. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/shell/shell.py +0 -0
  124. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/templates/__init__.py +0 -0
  125. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/templates/command_templates.py +0 -0
  126. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/toml/__init__.py +0 -0
  127. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/toml/toml.py +0 -0
  128. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/types.py +0 -0
  129. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/ui/styling.py +0 -0
  130. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/ui/visual_effects.py +0 -0
  131. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/watcher/__init__.py +0 -0
  132. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/watcher/watcher.py +0 -0
  133. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/lib/workspace_registry.py +0 -0
  134. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/__init__.py +0 -0
  135. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/api/__init__.py +0 -0
  136. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/api/app.py +0 -0
  137. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/api/middleware.py +0 -0
  138. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/api/routers/__init__.py +0 -0
  139. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/api/routers/admin_router.py +0 -0
  140. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/api/routers/auth_router.py +0 -0
  141. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/api/routers/backtest_router.py +0 -0
  142. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/api/routers/data_router.py +0 -0
  143. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/api/routers/model_router.py +0 -0
  144. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/api/routers/monitoring_router.py +0 -0
  145. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/api/routers/portfolio_router.py +0 -0
  146. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/api/routers/prediction_router.py +0 -0
  147. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/api/routers/trade_router.py +0 -0
  148. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/api/routers/websocket_router.py +0 -0
  149. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/api/schemas.py +0 -0
  150. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/auth/__init__.py +0 -0
  151. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/auth/auth_manager.py +0 -0
  152. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/auth/models.py +0 -0
  153. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/auth/permissions.py +0 -0
  154. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/backtesting/__init__.py +0 -0
  155. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/backtesting/backtest_engine.py +0 -0
  156. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/backtesting/performance_metrics.py +0 -0
  157. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/backtesting/run.py +0 -0
  158. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/cache.py +0 -0
  159. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/cli/__init__.py +0 -0
  160. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/cli/main.py +0 -0
  161. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/config/__init__.py +0 -0
  162. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/config/settings.py +0 -0
  163. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/configs/__init__.py +0 -0
  164. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/configs/dvc_config.py +0 -0
  165. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/configs/mlflow_config.py +0 -0
  166. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/configs/mlops_manager.py +0 -0
  167. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/dashboard/__init__.py +0 -0
  168. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/dashboard/app.py +0 -0
  169. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/dashboard/app_integrated.py +0 -0
  170. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/dashboard/app_supabase.py +0 -0
  171. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/dashboard/app_training.py +0 -0
  172. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/dashboard/cli.py +0 -0
  173. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/dashboard/common.py +0 -0
  174. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/dashboard/components/__init__.py +0 -0
  175. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/dashboard/components/charts.py +0 -0
  176. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/dashboard/components/metrics.py +0 -0
  177. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/dashboard/components/tables.py +0 -0
  178. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/dashboard/overview.py +0 -0
  179. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/dashboard/pages/__init__.py +0 -0
  180. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/dashboard/pages/cicd.py +0 -0
  181. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/dashboard/pages/debug_dependencies.py +0 -0
  182. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/dashboard/pages/gravity_viz.py +0 -0
  183. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/dashboard/pages/monte_carlo_predictions.py +0 -0
  184. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/dashboard/pages/predictions_enhanced.py +0 -0
  185. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/dashboard/pages/scrapers_and_logs.py +0 -0
  186. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/dashboard/pages/test_portfolio.py +0 -0
  187. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/dashboard/pages/trading.py +0 -0
  188. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/dashboard/pages/workflows.py +0 -0
  189. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/dashboard/streamlit_extras_utils.py +0 -0
  190. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/dashboard/styles.py +0 -0
  191. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/dashboard/utils.py +0 -0
  192. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/dashboard/warning_suppression.py +0 -0
  193. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/data_ingestion/__init__.py +0 -0
  194. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/data_ingestion/api_connectors.py +0 -0
  195. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/data_ingestion/data_pipeline.py +0 -0
  196. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/data_ingestion/stream_processor.py +0 -0
  197. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/database/__init__.py +0 -0
  198. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/database/migrations/env.py +0 -0
  199. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/database/models.py +0 -0
  200. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/database/session.py +0 -0
  201. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/experimentation/__init__.py +0 -0
  202. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/experimentation/ab_testing.py +0 -0
  203. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/features/__init__.py +0 -0
  204. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/features/ensemble_features.py +0 -0
  205. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/features/recommendation_engine.py +0 -0
  206. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/features/stock_features.py +0 -0
  207. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/features/test_feature_engineering.py +0 -0
  208. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/logging.py +0 -0
  209. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/mlops/__init__.py +0 -0
  210. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/mlops/data_versioning.py +0 -0
  211. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/mlops/experiment_tracker.py +0 -0
  212. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/mlops/model_serving.py +0 -0
  213. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/mlops/pipeline_orchestrator.py +0 -0
  214. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/models/__init__.py +0 -0
  215. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/models/base_models.py +0 -0
  216. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/models/ensemble_models.py +0 -0
  217. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/models/recommendation_models.py +0 -0
  218. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/models/test_models.py +0 -0
  219. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/monitoring/__init__.py +0 -0
  220. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/monitoring/drift_detection.py +0 -0
  221. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/monitoring/metrics.py +0 -0
  222. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/optimization/__init__.py +0 -0
  223. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/optimization/optimize.py +0 -0
  224. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/optimization/portfolio_optimizer.py +0 -0
  225. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/predictions/__init__.py +0 -0
  226. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/predictions/monte_carlo.py +0 -0
  227. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/predictions/prediction_engine.py +0 -0
  228. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/preprocessing/__init__.py +0 -0
  229. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/preprocessing/data_cleaners.py +0 -0
  230. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/preprocessing/feature_extractors.py +0 -0
  231. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/preprocessing/ml_pipeline.py +0 -0
  232. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/preprocessing/test_preprocessing.py +0 -0
  233. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/scripts/__init__.py +0 -0
  234. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/scripts/populate_sample_data.py +0 -0
  235. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/serving/__init__.py +0 -0
  236. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/serving/serve.py +0 -0
  237. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/tasks.py +0 -0
  238. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/tests/test_integration.py +0 -0
  239. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/tests/test_training_dashboard.py +0 -0
  240. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/trading/__init__.py +0 -0
  241. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/trading/alpaca_client.py +0 -0
  242. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/trading/migrations.py +0 -0
  243. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/trading/models.py +0 -0
  244. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/trading/paper_trading.py +0 -0
  245. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/trading/risk_management.py +0 -0
  246. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/trading/trading_service.py +0 -0
  247. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/training/__init__.py +0 -0
  248. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/training/train.py +0 -0
  249. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/ml/training/train_model.py +0 -0
  250. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/mygroup/__init__.py +0 -0
  251. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/mygroup/test_cmd.py +0 -0
  252. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/public/__init__.py +0 -0
  253. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/public/commands/__init__.py +0 -0
  254. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/public/oi/oi.py +0 -0
  255. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/public/public.py +0 -0
  256. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/self/__init__.py +0 -0
  257. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/self/completion_cmd.py +0 -0
  258. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/self/health_cmd.py +0 -0
  259. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/self/logs_cmd.py +0 -0
  260. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/self/migrate_cmd.py +0 -0
  261. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/self/redis_cmd.py +0 -0
  262. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/self/store_cmd.py +0 -0
  263. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/self/test_cmd.py +0 -0
  264. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/self/visual_cmd.py +0 -0
  265. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/self/zsh_cmd.py +0 -0
  266. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/storage/__init__.py +0 -0
  267. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/storage/backends/__init__.py +0 -0
  268. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/storage/backends/ipfs_backend.py +0 -0
  269. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/storage/base.py +0 -0
  270. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/storage/cache.py +0 -0
  271. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/storage/encryption.py +0 -0
  272. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/storage/factory.py +0 -0
  273. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/storage/registry.py +0 -0
  274. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/storage/storacha_cli.py +0 -0
  275. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/__init__.py +0 -0
  276. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/daemon/__init__.py +0 -0
  277. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/daemon/async_command_database.py +0 -0
  278. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/daemon/async_process_manager.py +0 -0
  279. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/daemon/client.py +0 -0
  280. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/daemon/daemon.py +0 -0
  281. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/daemon/daemon_api.py +0 -0
  282. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/daemon/enhanced_daemon.py +0 -0
  283. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/daemon/process_cli.py +0 -0
  284. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/daemon/process_manager.py +0 -0
  285. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/daemon/test_daemon.py +0 -0
  286. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/dashboard/__init__.py +0 -0
  287. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/dashboard/dashboard_cmd.py +0 -0
  288. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/doc_convert.py +0 -0
  289. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/docker/__init__.py +0 -0
  290. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/docker/docker.py +0 -0
  291. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/file/__init__.py +0 -0
  292. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/gcloud/__init__.py +0 -0
  293. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/gcloud/config.toml +0 -0
  294. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/gcloud/gcloud.py +0 -0
  295. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/git_commit/__init__.py +0 -0
  296. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/git_commit/ai_service.py +0 -0
  297. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/interview/__init__.py +0 -0
  298. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/lsh_integration.py +0 -0
  299. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/model_service/client.py +0 -0
  300. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/model_service/download_and_run_efficient_models.py +0 -0
  301. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/model_service/lightweight_embedder.py +0 -0
  302. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/model_service/lightweight_model_server.py +0 -0
  303. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/model_service/lightweight_test.py +0 -0
  304. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/model_service/model_service.py +0 -0
  305. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/model_service/ollama_efficient_runner.py +0 -0
  306. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/model_service/openai_adapter.py +0 -0
  307. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/model_service/pdf_processor.py +0 -0
  308. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/model_service/test_efficient_runner.py +0 -0
  309. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/model_service/test_example.py +0 -0
  310. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/model_service/test_integration.py +0 -0
  311. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/model_service/test_new_features.py +0 -0
  312. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/notebook/__init__.py +0 -0
  313. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/notebook/command_loader.py +0 -0
  314. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/notebook/converter.py +0 -0
  315. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/notebook/executor.py +0 -0
  316. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/notebook/notebook_cmd.py +0 -0
  317. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/notebook/schema.py +0 -0
  318. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/notebook/validator.py +0 -0
  319. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/openai/openai.py +0 -0
  320. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/registry/__init__.py +0 -0
  321. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/registry/registry.py +0 -0
  322. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/repo/__init__.py +0 -0
  323. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/repo/repo.py +0 -0
  324. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/scheduler/__init__.py +0 -0
  325. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/scheduler/cron_parser.py +0 -0
  326. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/scheduler/job.py +0 -0
  327. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/scheduler/monitor.py +0 -0
  328. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/scheduler/persistence.py +0 -0
  329. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/scheduler/scheduler.py +0 -0
  330. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/search/__init__.py +0 -0
  331. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/secrets/__init__.py +0 -0
  332. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/secrets/secrets_cmd.py +0 -0
  333. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/storage/__init__.py +0 -0
  334. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/storage/storage_cmd.py +0 -0
  335. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/sync/__init__.py +0 -0
  336. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/sync/test_cmd.py +0 -0
  337. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/videos/__init__.py +0 -0
  338. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/wakatime/__init__.py +0 -0
  339. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/wakatime/wakatime.py +0 -0
  340. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli/workflow/workflow.py +0 -0
  341. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli_framework.egg-info/dependency_links.txt +0 -0
  342. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli_framework.egg-info/entry_points.txt +0 -0
  343. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli_framework.egg-info/requires.txt +0 -0
  344. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/src/mcli_framework.egg-info/top_level.txt +0 -0
  345. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/cli/__init__.py +0 -0
  346. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/cli/test_all_commands.py +0 -0
  347. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/cli/test_app_logs_cmd.py +0 -0
  348. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/cli/test_app_redis_cmd.py +0 -0
  349. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/cli/test_logs_cmd.py +0 -0
  350. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/cli/test_main_app.py +0 -0
  351. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/cli/test_model_cmd.py +0 -0
  352. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/cli/test_self_cmd.py +0 -0
  353. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/cli/test_self_cmd_plugins.py +0 -0
  354. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/cli/test_self_cmd_utilities.py +0 -0
  355. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/cli/test_workflow_creation_commands.py +0 -0
  356. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/cli/test_workflow_file.py +0 -0
  357. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/cli/test_workflow_gcloud.py +0 -0
  358. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/cli/test_workflow_registry.py +0 -0
  359. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/conftest.py +0 -0
  360. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/e2e/__init__.py +0 -0
  361. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/e2e/test_complete_workflows.py +0 -0
  362. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/e2e/test_model_workflow.py +0 -0
  363. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/e2e/test_new_user_workflow.py +0 -0
  364. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/e2e/test_update_workflow.py +0 -0
  365. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/fixtures/__init__.py +0 -0
  366. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/fixtures/cli_fixtures.py +0 -0
  367. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/fixtures/data_fixtures.py +0 -0
  368. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/fixtures/db_fixtures.py +0 -0
  369. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/fixtures/model_fixtures.py +0 -0
  370. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/integration/__init__.py +0 -0
  371. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/integration/test_all_commands_comprehensive.py +0 -0
  372. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/integration/test_daemon_server.py +0 -0
  373. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/integration/test_direct_file_execution.py +0 -0
  374. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/integration/test_e2e_dashboard_lsh_supabase.py +0 -0
  375. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/integration/test_flask_webapp.py +0 -0
  376. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/integration/test_folder_workflows_integration.py +0 -0
  377. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/integration/test_gcloud_services.py +0 -0
  378. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/integration/test_ml_auth.py +0 -0
  379. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/integration/test_ml_data_pipeline.py +0 -0
  380. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/integration/test_ml_models.py +0 -0
  381. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/integration/test_ml_pipeline.py +0 -0
  382. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/integration/test_module_imports.py +0 -0
  383. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/integration/test_notebook_workflows.py +0 -0
  384. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/integration/test_oi_service.py +0 -0
  385. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/integration/test_repo_operations.py +0 -0
  386. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/integration/test_scheduler_integration.py +0 -0
  387. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/integration/test_service_registry.py +0 -0
  388. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/integration/test_supabase_live_connection.py +0 -0
  389. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/integration/test_video_processing.py +0 -0
  390. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/integration/test_wakatime_api.py +0 -0
  391. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/integration/test_webapp_full.py +0 -0
  392. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/integration/test_workflow.py +0 -0
  393. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/integration/test_workflow_commands.py +0 -0
  394. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/performance/__init__.py +0 -0
  395. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/property/__init__.py +0 -0
  396. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/__init__.py +0 -0
  397. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/storage/__init__.py +0 -0
  398. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/storage/test_cache.py +0 -0
  399. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/storage/test_encryption.py +0 -0
  400. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/storage/test_storacha_cli.py +0 -0
  401. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_api_utils.py +0 -0
  402. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_async_process_manager.py +0 -0
  403. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_auth_modules.py +0 -0
  404. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_bug_fixes.py +0 -0
  405. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_config.py +0 -0
  406. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_custom_commands.py +0 -0
  407. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_custom_commands_filtering.py +0 -0
  408. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_daemon_api.py +0 -0
  409. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_dashboard_components.py +0 -0
  410. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_dashboard_functions.py +0 -0
  411. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_dashboard_pages.py +0 -0
  412. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_dependencies.py +0 -0
  413. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_doc_convert_workflow.py +0 -0
  414. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_emulator_workflow.py +0 -0
  415. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_erd_generation.py +0 -0
  416. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_erd_generic.py +0 -0
  417. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_erd_imports.py +0 -0
  418. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_folder_workflows.py +0 -0
  419. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_git_commit_workflow.py +0 -0
  420. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_health_cmd.py +0 -0
  421. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_lib_auth.py +0 -0
  422. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_lib_files.py +0 -0
  423. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_lib_utils.py +0 -0
  424. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_logger.py +0 -0
  425. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_ml_preprocessing.py +0 -0
  426. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_new_cmd.py +0 -0
  427. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_notebook_command_loader.py +0 -0
  428. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_notebook_executor.py +0 -0
  429. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_optional_deps.py +0 -0
  430. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_paths.py +0 -0
  431. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_pdf_compress.py +0 -0
  432. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_prediction_engine.py +0 -0
  433. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_pyenv.py +0 -0
  434. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_regression.py +0 -0
  435. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_scheduler.py +0 -0
  436. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_scheduler_cron_parser.py +0 -0
  437. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_scheduler_job.py +0 -0
  438. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_scheduler_monitor.py +0 -0
  439. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_scheduler_persistence.py +0 -0
  440. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_self_update.py +0 -0
  441. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_store_cmd.py +0 -0
  442. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_supabase_connection.py +0 -0
  443. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_supabase_pagination.py +0 -0
  444. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_toml_utils.py +0 -0
  445. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_trading_imports.py +0 -0
  446. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_ui_rich.py +0 -0
  447. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_uv_compat.py +0 -0
  448. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/tests/unit/test_workflow_file_completion.py +0 -0
  449. {mcli_framework-8.0.17 → mcli_framework-8.0.19}/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.17
3
+ Version: 8.0.19
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.17"
3
+ version = "8.0.19"
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"
@@ -11,16 +11,18 @@ from mcli.lib.logger.logger import disable_runtime_tracing, enable_runtime_traci
11
11
 
12
12
  # Desired command order for help display
13
13
  COMMAND_ORDER = [
14
- "run",
15
- "list",
16
- "search",
14
+ "init",
17
15
  "new",
18
16
  "edit",
17
+ "mv",
19
18
  "rm",
19
+ "search",
20
+ "list",
21
+ "run",
22
+ "context",
20
23
  "health",
21
24
  "sync",
22
25
  "self",
23
- "init",
24
26
  ]
25
27
 
26
28
 
@@ -401,6 +403,15 @@ def _add_lazy_commands(app: click.Group):
401
403
  except ImportError as e:
402
404
  logger.debug(f"Could not load edit command: {e}")
403
405
 
406
+ # mcli mv - Move/rename a command
407
+ try:
408
+ from mcli.app.mv_cmd import mv
409
+
410
+ app.add_command(mv, name="mv")
411
+ logger.debug("Added mv command")
412
+ except ImportError as e:
413
+ logger.debug(f"Could not load mv command: {e}")
414
+
404
415
  # mcli rm - Delete a command
405
416
  try:
406
417
  from mcli.app.delete_cmd import rm
@@ -0,0 +1,143 @@
1
+ """Top-level mv command for MCLI.
2
+
3
+ This module provides the `mcli mv` command for moving/renaming workflow commands.
4
+ Supports moving between local and global locations.
5
+ """
6
+
7
+ import shutil
8
+ from pathlib import Path
9
+
10
+ import click
11
+ from rich.prompt import Prompt
12
+
13
+ from mcli.lib.constants import MoveMessages
14
+ from mcli.lib.custom_commands import get_command_manager
15
+ from mcli.lib.logger.logger import get_logger
16
+ from mcli.lib.paths import get_custom_commands_dir
17
+ from mcli.lib.ui.styling import console
18
+
19
+ logger = get_logger(__name__)
20
+ MM = MoveMessages # Short alias for cleaner code
21
+
22
+ # Supported native script extensions
23
+ NATIVE_SCRIPT_EXTENSIONS = [".py", ".sh", ".bash", ".js", ".ts", ".ipynb"]
24
+
25
+
26
+ def find_command_file(workflows_dir: Path, command_name: str) -> Path | None:
27
+ """Find a command file by name (native script or JSON)."""
28
+ # Check native scripts first
29
+ for ext in NATIVE_SCRIPT_EXTENSIONS:
30
+ script_path = workflows_dir / f"{command_name}{ext}"
31
+ if script_path.exists():
32
+ return script_path
33
+
34
+ # Check JSON file
35
+ json_path = workflows_dir / f"{command_name}.json"
36
+ if json_path.exists():
37
+ return json_path
38
+
39
+ return None
40
+
41
+
42
+ @click.command("mv")
43
+ @click.argument("from_name", required=True)
44
+ @click.argument("to_name", required=True)
45
+ @click.option(
46
+ "--global",
47
+ "-g",
48
+ "from_global",
49
+ is_flag=True,
50
+ help="Source is a global command",
51
+ )
52
+ @click.option(
53
+ "--to-global",
54
+ "-G",
55
+ "to_global",
56
+ is_flag=True,
57
+ help="Move destination to global commands",
58
+ )
59
+ @click.option("--yes", "-y", is_flag=True, help="Skip confirmation prompt")
60
+ def mv(from_name: str, to_name: str, from_global: bool, to_global: bool, yes: bool):
61
+ """📦 Move or rename a workflow command.
62
+
63
+ Move a command from one location to another, or rename it within the same scope.
64
+
65
+ \b
66
+ Examples:
67
+ mcli mv old-name new-name # Rename local command
68
+ mcli mv my-cmd --to-global # Move local to global (keep same name)
69
+ mcli mv my-cmd -g new-name # Move global to local with new name
70
+ mcli mv my-cmd -g -G new-name # Rename global command
71
+ """
72
+ # Get source and destination directories
73
+ source_dir = get_custom_commands_dir(global_mode=from_global)
74
+ dest_dir = get_custom_commands_dir(global_mode=to_global)
75
+
76
+ # Find the source file
77
+ source_file = find_command_file(source_dir, from_name)
78
+
79
+ if not source_file:
80
+ console.print(MM.COMMAND_NOT_FOUND.format(name=from_name))
81
+ console.print(MM.SEARCHED_IN.format(path=source_dir))
82
+ return 1
83
+
84
+ # Determine destination path (preserve extension)
85
+ dest_file = dest_dir / f"{to_name}{source_file.suffix}"
86
+
87
+ # Check if destination already exists
88
+ if dest_file.exists():
89
+ console.print(MM.ALREADY_EXISTS.format(name=to_name))
90
+ console.print(MM.PATH_DISPLAY.format(path=dest_file))
91
+ return 1
92
+
93
+ # Describe the operation
94
+ if from_global == to_global:
95
+ # Same scope - just renaming
96
+ if from_name == to_name:
97
+ console.print(MM.NO_CHANGE_NEEDED)
98
+ return 0
99
+ operation = MM.RENAME_OP.format(from_name=from_name, to_name=to_name)
100
+ scope = "global" if from_global else "local"
101
+ console.print(MM.RENAMING_COMMAND.format(scope=scope))
102
+ else:
103
+ # Moving between scopes
104
+ from_scope = "global" if from_global else "local"
105
+ to_scope = "global" if to_global else "local"
106
+ operation = MM.MOVE_OP.format(from_name=from_name, from_scope=from_scope, to_scope=to_scope)
107
+ if from_name != to_name:
108
+ operation += MM.MOVE_AS_OP.format(to_name=to_name)
109
+ console.print(MM.MOVING_COMMAND)
110
+
111
+ console.print(MM.FROM_PATH.format(path=source_file))
112
+ console.print(MM.TO_PATH.format(path=dest_file))
113
+
114
+ # Confirm
115
+ if not yes:
116
+ should_move = Prompt.ask(MM.PROCEED_PROMPT, choices=["y", "n"], default="n")
117
+ if should_move.lower() != "y":
118
+ console.print(MM.CANCELLED)
119
+ return 0
120
+
121
+ # Ensure destination directory exists
122
+ dest_dir.mkdir(parents=True, exist_ok=True)
123
+
124
+ # Perform the move
125
+ try:
126
+ shutil.move(str(source_file), str(dest_file))
127
+
128
+ # Update lockfiles for both source and destination managers
129
+ source_manager = get_command_manager(global_mode=from_global)
130
+ source_manager.update_lockfile()
131
+
132
+ if from_global != to_global:
133
+ dest_manager = get_command_manager(global_mode=to_global)
134
+ dest_manager.update_lockfile()
135
+
136
+ console.print(MM.MOVE_SUCCESS.format(operation=operation))
137
+ console.print(MM.NEW_LOCATION.format(path=dest_file))
138
+ return 0
139
+
140
+ except Exception as e:
141
+ console.print(MM.MOVE_FAILED.format(error=e))
142
+ logger.exception("Failed to move command")
143
+ return 1
@@ -39,6 +39,7 @@ from .messages import (
39
39
  ErrorMessages,
40
40
  InfoMessages,
41
41
  ModelServiceMessages,
42
+ MoveMessages,
42
43
  PromptMessages,
43
44
  SuccessMessages,
44
45
  SyncMessages,
@@ -86,6 +87,7 @@ __all__ = [
86
87
  "ChatMessages",
87
88
  "CommandMessages",
88
89
  "EditMessages",
90
+ "MoveMessages",
89
91
  "ModelServiceMessages",
90
92
  "SystemIntegrationMessages",
91
93
  "SyncMessages",
@@ -942,6 +942,37 @@ class SyncMessages:
942
942
  DIR_NOT_EXIST = "Commands directory does not exist: {path}"
943
943
 
944
944
 
945
+ class MoveMessages:
946
+ """Move/rename command message constants."""
947
+
948
+ # Info messages
949
+ RENAMING_COMMAND = "[cyan]Renaming {scope} command:[/cyan]"
950
+ MOVING_COMMAND = "[cyan]Moving command:[/cyan]"
951
+ FROM_PATH = " From: {path}"
952
+ TO_PATH = " To: {path}"
953
+ PROCEED_PROMPT = "Proceed?"
954
+
955
+ # Success messages
956
+ MOVE_SUCCESS = "[green]✅ {operation}[/green]"
957
+ NEW_LOCATION = "[dim]New location: {path}[/dim]"
958
+
959
+ # Warning messages
960
+ NO_CHANGE_NEEDED = "[yellow]Source and destination are the same. Nothing to do.[/yellow]"
961
+ CANCELLED = "[yellow]Cancelled.[/yellow]"
962
+
963
+ # Error messages
964
+ COMMAND_NOT_FOUND = "[red]Command '{name}' not found.[/red]"
965
+ SEARCHED_IN = "[dim]Searched in: {path}[/dim]"
966
+ ALREADY_EXISTS = "[red]Command '{name}' already exists at destination.[/red]"
967
+ PATH_DISPLAY = "[dim]Path: {path}[/dim]"
968
+ MOVE_FAILED = "[red]Failed to move command: {error}[/red]"
969
+
970
+ # Operation descriptions
971
+ RENAME_OP = "Rename '{from_name}' to '{to_name}'"
972
+ MOVE_OP = "Move '{from_name}' from {from_scope} to {to_scope}"
973
+ MOVE_AS_OP = " as '{to_name}'"
974
+
975
+
945
976
  class VenvMessages:
946
977
  """Virtual environment related messages."""
947
978
 
@@ -984,5 +1015,6 @@ __all__ = [
984
1015
  "SystemIntegrationMessages",
985
1016
  "EditMessages",
986
1017
  "SyncMessages",
1018
+ "MoveMessages",
987
1019
  "VenvMessages",
988
1020
  ]
@@ -1085,157 +1085,15 @@ except ImportError as e:
1085
1085
  logger.debug(f"Could not load migrate command: {e}")
1086
1086
 
1087
1087
  try:
1088
- from mcli.self.health_cmd import health
1088
+ from mcli.self.workflows_cmd import workflows_group
1089
1089
 
1090
- self_app.add_command(health, name="health")
1091
- logger.debug("Added health command to self group")
1092
- except ImportError as e:
1093
- logger.debug(f"Could not load health command: {e}")
1094
-
1095
-
1096
- try:
1097
- from mcli.self.workflows_cmd import workflows_cmd
1098
-
1099
- self_app.add_command(workflows_cmd, name="workflows")
1100
- logger.debug("Added workflows command to self group")
1090
+ self_app.add_command(workflows_group, name="workflows")
1091
+ logger.debug("Added workflows command group to self group")
1101
1092
  except ImportError as e:
1102
1093
  logger.debug(f"Could not load workflows command: {e}")
1103
1094
 
1104
-
1105
- # Workspace management commands
1106
- @click.group("workspace")
1107
- def workspace():
1108
- """📁 Manage registered workflow workspaces.
1109
-
1110
- Track workflow locations across multiple repositories for unified
1111
- command listing with 'mcli list --all'.
1112
-
1113
- Examples:
1114
- mcli self workspace list # List registered workspaces
1115
- mcli self workspace add # Register current directory
1116
- mcli self workspace add ~/myrepo # Register specific directory
1117
- mcli self workspace remove # Unregister current directory
1118
- """
1119
- pass
1120
-
1121
-
1122
- @workspace.command("list")
1123
- @click.option("--json", "as_json", is_flag=True, help="Output as JSON")
1124
- def workspace_list(as_json: bool):
1125
- """📋 List all registered workspaces."""
1126
- import json as json_module
1127
-
1128
- from mcli.lib.workspace_registry import list_registered_workspaces
1129
-
1130
- workspaces = list_registered_workspaces()
1131
-
1132
- if as_json:
1133
- click.echo(
1134
- json_module.dumps({"workspaces": workspaces, "total": len(workspaces)}, indent=2)
1135
- )
1136
- return
1137
-
1138
- if not workspaces:
1139
- console.print("[yellow]No workspaces registered.[/yellow]")
1140
- console.print("\n[dim]Register a workspace:[/dim]")
1141
- console.print(" mcli self workspace add [PATH]")
1142
- return
1143
-
1144
- table = Table(title="Registered Workspaces")
1145
- table.add_column("Name", style="cyan")
1146
- table.add_column("Path", style="dim")
1147
- table.add_column("Status", style="green")
1148
-
1149
- for ws in workspaces:
1150
- status = "✅ Active" if ws["exists"] else "⚠️ Missing"
1151
- table.add_row(ws["name"], ws["path"], status)
1152
-
1153
- console.print(table)
1154
- console.print(f"\n[dim]Total: {len(workspaces)} workspace(s)[/dim]")
1155
-
1156
-
1157
- @workspace.command("add")
1158
- @click.argument("path", required=False, type=click.Path(exists=True))
1159
- @click.option("--name", "-n", help="Custom name for the workspace")
1160
- def workspace_add(path: Optional[str], name: Optional[str]):
1161
- """➕ Register a workspace (current directory if no path given)."""
1162
- from mcli.lib.workspace_registry import register_workspace
1163
-
1164
- workspace_path = Path(path).resolve() if path else None
1165
-
1166
- result = register_workspace(workspace_path, name)
1167
- if result:
1168
- console.print(f"[green]✅ Workspace registered successfully![/green]")
1169
- console.print(f"[dim]ID: {result}[/dim]")
1170
- console.print("\n[dim]View all workflows with:[/dim]")
1171
- console.print(" mcli list --all")
1172
- else:
1173
- console.print("[red]❌ Failed to register workspace[/red]")
1174
- console.print("[dim]Make sure the directory has .mcli/workflows/[/dim]")
1175
-
1176
-
1177
- @workspace.command("remove")
1178
- @click.argument("path", required=False, type=click.Path())
1179
- @click.option("--yes", "-y", is_flag=True, help="Skip confirmation")
1180
- def workspace_remove(path: Optional[str], yes: bool):
1181
- """➖ Unregister a workspace (current directory if no path given)."""
1182
- from rich.prompt import Confirm
1183
-
1184
- from mcli.lib.workspace_registry import unregister_workspace
1185
-
1186
- workspace_path = Path(path).resolve() if path else None
1187
-
1188
- if not yes:
1189
- path_str = str(workspace_path) if workspace_path else "current directory"
1190
- if not Confirm.ask(f"[yellow]Unregister workspace at {path_str}?[/yellow]"):
1191
- console.print("[yellow]Cancelled[/yellow]")
1192
- return
1193
-
1194
- if unregister_workspace(workspace_path):
1195
- console.print("[green]✅ Workspace unregistered[/green]")
1196
- else:
1197
- console.print("[red]❌ Failed to unregister workspace[/red]")
1198
- console.print("[dim]Make sure the path is registered[/dim]")
1199
-
1200
-
1201
- @workspace.command("prune")
1202
- @click.option("--yes", "-y", is_flag=True, help="Skip confirmation")
1203
- def workspace_prune(yes: bool):
1204
- """🧹 Remove workspaces that no longer exist."""
1205
- from rich.prompt import Confirm
1206
-
1207
- from mcli.lib.workspace_registry import list_registered_workspaces, load_registry, save_registry
1208
-
1209
- workspaces = list_registered_workspaces()
1210
- missing = [ws for ws in workspaces if not ws["exists"]]
1211
-
1212
- if not missing:
1213
- console.print("[green]✅ All registered workspaces exist[/green]")
1214
- return
1215
-
1216
- console.print(f"[yellow]Found {len(missing)} missing workspace(s):[/yellow]")
1217
- for ws in missing:
1218
- console.print(f" - {ws['name']} ({ws['path']})")
1219
-
1220
- if not yes:
1221
- if not Confirm.ask("[yellow]Remove these workspaces from registry?[/yellow]"):
1222
- console.print("[yellow]Cancelled[/yellow]")
1223
- return
1224
-
1225
- # Remove missing workspaces
1226
- registry = load_registry()
1227
- for ws in missing:
1228
- if ws["id"] in registry.get("workspaces", {}):
1229
- del registry["workspaces"][ws["id"]]
1230
-
1231
- if save_registry(registry):
1232
- console.print(f"[green]✅ Removed {len(missing)} missing workspace(s)[/green]")
1233
- else:
1234
- console.print("[red]❌ Failed to update registry[/red]")
1235
-
1236
-
1237
- self_app.add_command(workspace)
1238
- logger.debug("Added workspace command to self group")
1095
+ # NOTE: workspace commands have been merged into 'mcli self workflows'
1096
+ # Use: mcli self workflows add/remove/prune
1239
1097
 
1240
1098
  # NOTE: store command has been moved to mcli.app.commands_cmd for better organization
1241
1099