mcli-framework 8.0.17__tar.gz → 8.0.18__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 (448) hide show
  1. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/PKG-INFO +1 -1
  2. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/pyproject.toml +1 -1
  3. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/self/self_cmd.py +5 -147
  4. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/self/workflows_cmd.py +151 -78
  5. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli_framework.egg-info/PKG-INFO +1 -1
  6. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/.github/dependabot.yml +0 -0
  7. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/.github/dependency-review-config.yml +0 -0
  8. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/.github/workflows/build.yml +0 -0
  9. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/.github/workflows/ci.yml +0 -0
  10. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/.github/workflows/codeql.yml +0 -0
  11. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/.github/workflows/docs-links.yml +0 -0
  12. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/.github/workflows/publish-self-hosted.yml +0 -0
  13. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/.github/workflows/publish.yml +0 -0
  14. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/.github/workflows/release.yml +0 -0
  15. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/.github/workflows/security.yml +0 -0
  16. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/.github/workflows/test.yml +0 -0
  17. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/LICENSE +0 -0
  18. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/MANIFEST.in +0 -0
  19. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/README.md +0 -0
  20. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/llms-full.txt +0 -0
  21. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/llms.txt +0 -0
  22. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/mcli_rust/Cargo.toml +0 -0
  23. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/mcli_rust/src/command_parser.rs +0 -0
  24. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/mcli_rust/src/file_watcher.rs +0 -0
  25. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/mcli_rust/src/lib.rs +0 -0
  26. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/mcli_rust/src/process_manager.rs +0 -0
  27. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/mcli_rust/src/tfidf.rs +0 -0
  28. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/setup.cfg +0 -0
  29. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/__init__.py +0 -0
  30. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/app/__init__.py +0 -0
  31. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/app/commands_cmd.py +0 -0
  32. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/app/completion_helpers.py +0 -0
  33. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/app/context_cmd.py +0 -0
  34. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/app/create_cmd.py +0 -0
  35. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/app/delete_cmd.py +0 -0
  36. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/app/edit_cmd.py +0 -0
  37. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/app/init_cmd.py +0 -0
  38. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/app/list_cmd.py +0 -0
  39. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/app/main.py +0 -0
  40. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/app/migrate_cmd.py +0 -0
  41. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/app/model/__init__.py +0 -0
  42. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/app/model/model.py +0 -0
  43. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/app/model_cmd.py +0 -0
  44. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/app/new_cmd.py +0 -0
  45. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/app/remove_cmd.py +0 -0
  46. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/app/rm_cmd.py +0 -0
  47. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/app/search_cmd.py +0 -0
  48. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/app/sync_cmd.py +0 -0
  49. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/app/video/__init__.py +0 -0
  50. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/app/video/video.py +0 -0
  51. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/config.toml +0 -0
  52. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/__init__.py +0 -0
  53. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/api/__init__.py +0 -0
  54. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/api/api.py +0 -0
  55. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/api/daemon_client.py +0 -0
  56. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/api/daemon_client_local.py +0 -0
  57. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/api/daemon_decorator.py +0 -0
  58. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/api/mcli_decorators.py +0 -0
  59. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/auth/__init__.py +0 -0
  60. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/auth/auth.py +0 -0
  61. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/auth/aws_manager.py +0 -0
  62. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/auth/azure_manager.py +0 -0
  63. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/auth/credential_manager.py +0 -0
  64. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/auth/gcp_manager.py +0 -0
  65. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/auth/key_manager.py +0 -0
  66. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/auth/mcli_manager.py +0 -0
  67. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/auth/token_manager.py +0 -0
  68. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/auth/token_util.py +0 -0
  69. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/config/__init__.py +0 -0
  70. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/config/config.py +0 -0
  71. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/constants/__init__.py +0 -0
  72. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/constants/commands.py +0 -0
  73. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/constants/defaults.py +0 -0
  74. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/constants/env.py +0 -0
  75. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/constants/messages.py +0 -0
  76. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/constants/paths.py +0 -0
  77. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/constants/scripts.py +0 -0
  78. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/constants/storage.py +0 -0
  79. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/custom_commands.py +0 -0
  80. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/discovery/__init__.py +0 -0
  81. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/discovery/command_discovery.py +0 -0
  82. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/erd/__init__.py +0 -0
  83. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/erd/erd.py +0 -0
  84. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/erd/generate_graph.py +0 -0
  85. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/errors.py +0 -0
  86. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/feature_detection.py +0 -0
  87. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/files/__init__.py +0 -0
  88. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/files/files.py +0 -0
  89. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/folder_workflows.py +0 -0
  90. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/fs/__init__.py +0 -0
  91. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/fs/fs.py +0 -0
  92. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/ipfs_sync.py +0 -0
  93. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/lib.py +0 -0
  94. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/logger/__init__.py +0 -0
  95. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/logger/logger.py +0 -0
  96. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/optional_deps.py +0 -0
  97. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/paths.py +0 -0
  98. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/performance/__init__.py +0 -0
  99. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/performance/optimizer.py +0 -0
  100. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/performance/rust_bridge.py +0 -0
  101. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/performance/uvloop_config.py +0 -0
  102. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/pickles/__init__.py +0 -0
  103. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/pickles/pickles.py +0 -0
  104. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/pyenv/__init__.py +0 -0
  105. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/pyenv/deps.py +0 -0
  106. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/pyenv/manager.py +0 -0
  107. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/pyenv/venv.py +0 -0
  108. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/script_loader.py +0 -0
  109. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/script_sync.py +0 -0
  110. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/script_watcher.py +0 -0
  111. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/search/cached_vectorizer.py +0 -0
  112. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/secrets/__init__.py +0 -0
  113. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/secrets/commands.py +0 -0
  114. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/secrets/manager.py +0 -0
  115. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/secrets/repl.py +0 -0
  116. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/secrets/store.py +0 -0
  117. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/services/data_pipeline.py +0 -0
  118. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/services/lsh_client.py +0 -0
  119. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/services/redis_service.py +0 -0
  120. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/shell/__init__.py +0 -0
  121. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/shell/shell.py +0 -0
  122. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/templates/__init__.py +0 -0
  123. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/templates/command_templates.py +0 -0
  124. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/toml/__init__.py +0 -0
  125. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/toml/toml.py +0 -0
  126. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/types.py +0 -0
  127. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/ui/styling.py +0 -0
  128. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/ui/visual_effects.py +0 -0
  129. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/watcher/__init__.py +0 -0
  130. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/watcher/watcher.py +0 -0
  131. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/lib/workspace_registry.py +0 -0
  132. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/__init__.py +0 -0
  133. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/api/__init__.py +0 -0
  134. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/api/app.py +0 -0
  135. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/api/middleware.py +0 -0
  136. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/api/routers/__init__.py +0 -0
  137. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/api/routers/admin_router.py +0 -0
  138. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/api/routers/auth_router.py +0 -0
  139. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/api/routers/backtest_router.py +0 -0
  140. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/api/routers/data_router.py +0 -0
  141. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/api/routers/model_router.py +0 -0
  142. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/api/routers/monitoring_router.py +0 -0
  143. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/api/routers/portfolio_router.py +0 -0
  144. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/api/routers/prediction_router.py +0 -0
  145. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/api/routers/trade_router.py +0 -0
  146. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/api/routers/websocket_router.py +0 -0
  147. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/api/schemas.py +0 -0
  148. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/auth/__init__.py +0 -0
  149. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/auth/auth_manager.py +0 -0
  150. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/auth/models.py +0 -0
  151. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/auth/permissions.py +0 -0
  152. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/backtesting/__init__.py +0 -0
  153. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/backtesting/backtest_engine.py +0 -0
  154. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/backtesting/performance_metrics.py +0 -0
  155. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/backtesting/run.py +0 -0
  156. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/cache.py +0 -0
  157. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/cli/__init__.py +0 -0
  158. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/cli/main.py +0 -0
  159. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/config/__init__.py +0 -0
  160. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/config/settings.py +0 -0
  161. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/configs/__init__.py +0 -0
  162. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/configs/dvc_config.py +0 -0
  163. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/configs/mlflow_config.py +0 -0
  164. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/configs/mlops_manager.py +0 -0
  165. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/dashboard/__init__.py +0 -0
  166. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/dashboard/app.py +0 -0
  167. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/dashboard/app_integrated.py +0 -0
  168. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/dashboard/app_supabase.py +0 -0
  169. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/dashboard/app_training.py +0 -0
  170. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/dashboard/cli.py +0 -0
  171. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/dashboard/common.py +0 -0
  172. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/dashboard/components/__init__.py +0 -0
  173. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/dashboard/components/charts.py +0 -0
  174. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/dashboard/components/metrics.py +0 -0
  175. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/dashboard/components/tables.py +0 -0
  176. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/dashboard/overview.py +0 -0
  177. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/dashboard/pages/__init__.py +0 -0
  178. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/dashboard/pages/cicd.py +0 -0
  179. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/dashboard/pages/debug_dependencies.py +0 -0
  180. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/dashboard/pages/gravity_viz.py +0 -0
  181. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/dashboard/pages/monte_carlo_predictions.py +0 -0
  182. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/dashboard/pages/predictions_enhanced.py +0 -0
  183. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/dashboard/pages/scrapers_and_logs.py +0 -0
  184. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/dashboard/pages/test_portfolio.py +0 -0
  185. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/dashboard/pages/trading.py +0 -0
  186. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/dashboard/pages/workflows.py +0 -0
  187. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/dashboard/streamlit_extras_utils.py +0 -0
  188. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/dashboard/styles.py +0 -0
  189. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/dashboard/utils.py +0 -0
  190. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/dashboard/warning_suppression.py +0 -0
  191. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/data_ingestion/__init__.py +0 -0
  192. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/data_ingestion/api_connectors.py +0 -0
  193. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/data_ingestion/data_pipeline.py +0 -0
  194. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/data_ingestion/stream_processor.py +0 -0
  195. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/database/__init__.py +0 -0
  196. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/database/migrations/env.py +0 -0
  197. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/database/models.py +0 -0
  198. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/database/session.py +0 -0
  199. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/experimentation/__init__.py +0 -0
  200. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/experimentation/ab_testing.py +0 -0
  201. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/features/__init__.py +0 -0
  202. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/features/ensemble_features.py +0 -0
  203. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/features/recommendation_engine.py +0 -0
  204. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/features/stock_features.py +0 -0
  205. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/features/test_feature_engineering.py +0 -0
  206. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/logging.py +0 -0
  207. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/mlops/__init__.py +0 -0
  208. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/mlops/data_versioning.py +0 -0
  209. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/mlops/experiment_tracker.py +0 -0
  210. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/mlops/model_serving.py +0 -0
  211. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/mlops/pipeline_orchestrator.py +0 -0
  212. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/models/__init__.py +0 -0
  213. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/models/base_models.py +0 -0
  214. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/models/ensemble_models.py +0 -0
  215. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/models/recommendation_models.py +0 -0
  216. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/models/test_models.py +0 -0
  217. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/monitoring/__init__.py +0 -0
  218. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/monitoring/drift_detection.py +0 -0
  219. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/monitoring/metrics.py +0 -0
  220. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/optimization/__init__.py +0 -0
  221. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/optimization/optimize.py +0 -0
  222. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/optimization/portfolio_optimizer.py +0 -0
  223. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/predictions/__init__.py +0 -0
  224. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/predictions/monte_carlo.py +0 -0
  225. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/predictions/prediction_engine.py +0 -0
  226. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/preprocessing/__init__.py +0 -0
  227. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/preprocessing/data_cleaners.py +0 -0
  228. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/preprocessing/feature_extractors.py +0 -0
  229. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/preprocessing/ml_pipeline.py +0 -0
  230. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/preprocessing/test_preprocessing.py +0 -0
  231. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/scripts/__init__.py +0 -0
  232. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/scripts/populate_sample_data.py +0 -0
  233. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/serving/__init__.py +0 -0
  234. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/serving/serve.py +0 -0
  235. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/tasks.py +0 -0
  236. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/tests/test_integration.py +0 -0
  237. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/tests/test_training_dashboard.py +0 -0
  238. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/trading/__init__.py +0 -0
  239. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/trading/alpaca_client.py +0 -0
  240. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/trading/migrations.py +0 -0
  241. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/trading/models.py +0 -0
  242. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/trading/paper_trading.py +0 -0
  243. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/trading/risk_management.py +0 -0
  244. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/trading/trading_service.py +0 -0
  245. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/training/__init__.py +0 -0
  246. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/training/train.py +0 -0
  247. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/ml/training/train_model.py +0 -0
  248. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/mygroup/__init__.py +0 -0
  249. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/mygroup/test_cmd.py +0 -0
  250. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/public/__init__.py +0 -0
  251. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/public/commands/__init__.py +0 -0
  252. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/public/oi/oi.py +0 -0
  253. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/public/public.py +0 -0
  254. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/self/__init__.py +0 -0
  255. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/self/completion_cmd.py +0 -0
  256. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/self/health_cmd.py +0 -0
  257. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/self/logs_cmd.py +0 -0
  258. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/self/migrate_cmd.py +0 -0
  259. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/self/redis_cmd.py +0 -0
  260. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/self/store_cmd.py +0 -0
  261. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/self/test_cmd.py +0 -0
  262. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/self/visual_cmd.py +0 -0
  263. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/self/zsh_cmd.py +0 -0
  264. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/storage/__init__.py +0 -0
  265. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/storage/backends/__init__.py +0 -0
  266. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/storage/backends/ipfs_backend.py +0 -0
  267. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/storage/base.py +0 -0
  268. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/storage/cache.py +0 -0
  269. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/storage/encryption.py +0 -0
  270. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/storage/factory.py +0 -0
  271. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/storage/registry.py +0 -0
  272. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/storage/storacha_cli.py +0 -0
  273. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/__init__.py +0 -0
  274. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/daemon/__init__.py +0 -0
  275. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/daemon/async_command_database.py +0 -0
  276. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/daemon/async_process_manager.py +0 -0
  277. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/daemon/client.py +0 -0
  278. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/daemon/daemon.py +0 -0
  279. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/daemon/daemon_api.py +0 -0
  280. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/daemon/enhanced_daemon.py +0 -0
  281. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/daemon/process_cli.py +0 -0
  282. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/daemon/process_manager.py +0 -0
  283. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/daemon/test_daemon.py +0 -0
  284. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/dashboard/__init__.py +0 -0
  285. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/dashboard/dashboard_cmd.py +0 -0
  286. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/doc_convert.py +0 -0
  287. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/docker/__init__.py +0 -0
  288. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/docker/docker.py +0 -0
  289. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/file/__init__.py +0 -0
  290. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/gcloud/__init__.py +0 -0
  291. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/gcloud/config.toml +0 -0
  292. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/gcloud/gcloud.py +0 -0
  293. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/git_commit/__init__.py +0 -0
  294. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/git_commit/ai_service.py +0 -0
  295. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/interview/__init__.py +0 -0
  296. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/lsh_integration.py +0 -0
  297. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/model_service/client.py +0 -0
  298. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/model_service/download_and_run_efficient_models.py +0 -0
  299. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/model_service/lightweight_embedder.py +0 -0
  300. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/model_service/lightweight_model_server.py +0 -0
  301. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/model_service/lightweight_test.py +0 -0
  302. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/model_service/model_service.py +0 -0
  303. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/model_service/ollama_efficient_runner.py +0 -0
  304. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/model_service/openai_adapter.py +0 -0
  305. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/model_service/pdf_processor.py +0 -0
  306. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/model_service/test_efficient_runner.py +0 -0
  307. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/model_service/test_example.py +0 -0
  308. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/model_service/test_integration.py +0 -0
  309. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/model_service/test_new_features.py +0 -0
  310. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/notebook/__init__.py +0 -0
  311. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/notebook/command_loader.py +0 -0
  312. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/notebook/converter.py +0 -0
  313. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/notebook/executor.py +0 -0
  314. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/notebook/notebook_cmd.py +0 -0
  315. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/notebook/schema.py +0 -0
  316. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/notebook/validator.py +0 -0
  317. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/openai/openai.py +0 -0
  318. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/registry/__init__.py +0 -0
  319. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/registry/registry.py +0 -0
  320. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/repo/__init__.py +0 -0
  321. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/repo/repo.py +0 -0
  322. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/scheduler/__init__.py +0 -0
  323. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/scheduler/cron_parser.py +0 -0
  324. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/scheduler/job.py +0 -0
  325. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/scheduler/monitor.py +0 -0
  326. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/scheduler/persistence.py +0 -0
  327. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/scheduler/scheduler.py +0 -0
  328. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/search/__init__.py +0 -0
  329. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/secrets/__init__.py +0 -0
  330. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/secrets/secrets_cmd.py +0 -0
  331. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/storage/__init__.py +0 -0
  332. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/storage/storage_cmd.py +0 -0
  333. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/sync/__init__.py +0 -0
  334. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/sync/test_cmd.py +0 -0
  335. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/videos/__init__.py +0 -0
  336. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/wakatime/__init__.py +0 -0
  337. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/wakatime/wakatime.py +0 -0
  338. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli/workflow/workflow.py +0 -0
  339. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli_framework.egg-info/SOURCES.txt +0 -0
  340. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli_framework.egg-info/dependency_links.txt +0 -0
  341. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli_framework.egg-info/entry_points.txt +0 -0
  342. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli_framework.egg-info/requires.txt +0 -0
  343. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/src/mcli_framework.egg-info/top_level.txt +0 -0
  344. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/cli/__init__.py +0 -0
  345. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/cli/test_all_commands.py +0 -0
  346. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/cli/test_app_logs_cmd.py +0 -0
  347. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/cli/test_app_redis_cmd.py +0 -0
  348. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/cli/test_logs_cmd.py +0 -0
  349. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/cli/test_main_app.py +0 -0
  350. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/cli/test_model_cmd.py +0 -0
  351. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/cli/test_self_cmd.py +0 -0
  352. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/cli/test_self_cmd_plugins.py +0 -0
  353. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/cli/test_self_cmd_utilities.py +0 -0
  354. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/cli/test_workflow_creation_commands.py +0 -0
  355. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/cli/test_workflow_file.py +0 -0
  356. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/cli/test_workflow_gcloud.py +0 -0
  357. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/cli/test_workflow_registry.py +0 -0
  358. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/conftest.py +0 -0
  359. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/e2e/__init__.py +0 -0
  360. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/e2e/test_complete_workflows.py +0 -0
  361. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/e2e/test_model_workflow.py +0 -0
  362. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/e2e/test_new_user_workflow.py +0 -0
  363. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/e2e/test_update_workflow.py +0 -0
  364. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/fixtures/__init__.py +0 -0
  365. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/fixtures/cli_fixtures.py +0 -0
  366. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/fixtures/data_fixtures.py +0 -0
  367. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/fixtures/db_fixtures.py +0 -0
  368. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/fixtures/model_fixtures.py +0 -0
  369. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/integration/__init__.py +0 -0
  370. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/integration/test_all_commands_comprehensive.py +0 -0
  371. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/integration/test_daemon_server.py +0 -0
  372. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/integration/test_direct_file_execution.py +0 -0
  373. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/integration/test_e2e_dashboard_lsh_supabase.py +0 -0
  374. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/integration/test_flask_webapp.py +0 -0
  375. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/integration/test_folder_workflows_integration.py +0 -0
  376. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/integration/test_gcloud_services.py +0 -0
  377. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/integration/test_ml_auth.py +0 -0
  378. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/integration/test_ml_data_pipeline.py +0 -0
  379. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/integration/test_ml_models.py +0 -0
  380. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/integration/test_ml_pipeline.py +0 -0
  381. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/integration/test_module_imports.py +0 -0
  382. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/integration/test_notebook_workflows.py +0 -0
  383. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/integration/test_oi_service.py +0 -0
  384. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/integration/test_repo_operations.py +0 -0
  385. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/integration/test_scheduler_integration.py +0 -0
  386. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/integration/test_service_registry.py +0 -0
  387. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/integration/test_supabase_live_connection.py +0 -0
  388. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/integration/test_video_processing.py +0 -0
  389. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/integration/test_wakatime_api.py +0 -0
  390. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/integration/test_webapp_full.py +0 -0
  391. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/integration/test_workflow.py +0 -0
  392. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/integration/test_workflow_commands.py +0 -0
  393. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/performance/__init__.py +0 -0
  394. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/property/__init__.py +0 -0
  395. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/__init__.py +0 -0
  396. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/storage/__init__.py +0 -0
  397. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/storage/test_cache.py +0 -0
  398. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/storage/test_encryption.py +0 -0
  399. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/storage/test_storacha_cli.py +0 -0
  400. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_api_utils.py +0 -0
  401. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_async_process_manager.py +0 -0
  402. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_auth_modules.py +0 -0
  403. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_bug_fixes.py +0 -0
  404. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_config.py +0 -0
  405. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_custom_commands.py +0 -0
  406. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_custom_commands_filtering.py +0 -0
  407. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_daemon_api.py +0 -0
  408. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_dashboard_components.py +0 -0
  409. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_dashboard_functions.py +0 -0
  410. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_dashboard_pages.py +0 -0
  411. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_dependencies.py +0 -0
  412. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_doc_convert_workflow.py +0 -0
  413. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_emulator_workflow.py +0 -0
  414. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_erd_generation.py +0 -0
  415. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_erd_generic.py +0 -0
  416. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_erd_imports.py +0 -0
  417. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_folder_workflows.py +0 -0
  418. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_git_commit_workflow.py +0 -0
  419. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_health_cmd.py +0 -0
  420. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_lib_auth.py +0 -0
  421. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_lib_files.py +0 -0
  422. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_lib_utils.py +0 -0
  423. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_logger.py +0 -0
  424. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_ml_preprocessing.py +0 -0
  425. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_new_cmd.py +0 -0
  426. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_notebook_command_loader.py +0 -0
  427. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_notebook_executor.py +0 -0
  428. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_optional_deps.py +0 -0
  429. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_paths.py +0 -0
  430. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_pdf_compress.py +0 -0
  431. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_prediction_engine.py +0 -0
  432. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_pyenv.py +0 -0
  433. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_regression.py +0 -0
  434. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_scheduler.py +0 -0
  435. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_scheduler_cron_parser.py +0 -0
  436. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_scheduler_job.py +0 -0
  437. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_scheduler_monitor.py +0 -0
  438. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_scheduler_persistence.py +0 -0
  439. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_self_update.py +0 -0
  440. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_store_cmd.py +0 -0
  441. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_supabase_connection.py +0 -0
  442. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_supabase_pagination.py +0 -0
  443. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_toml_utils.py +0 -0
  444. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_trading_imports.py +0 -0
  445. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_ui_rich.py +0 -0
  446. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_uv_compat.py +0 -0
  447. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/tests/unit/test_workflow_file_completion.py +0 -0
  448. {mcli_framework-8.0.17 → mcli_framework-8.0.18}/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.18
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.18"
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"
@@ -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
 
@@ -1,14 +1,16 @@
1
1
  """
2
- Workflows command for mcli self.
2
+ Workflows command group for mcli self.
3
3
 
4
- Provides a comprehensive view of all workflows tracked by mcli,
5
- including a dashboard summary and detailed listings.
4
+ Provides comprehensive workflow and workspace management:
5
+ - Dashboard summary of all workflows
6
+ - Detailed workflow listings
7
+ - Workspace registration and management
6
8
  """
7
9
 
8
10
  import json
9
11
  from datetime import datetime
10
12
  from pathlib import Path
11
- from typing import Any, Dict, List
13
+ from typing import Any, Dict, List, Optional
12
14
 
13
15
  import click
14
16
  from rich.console import Console
@@ -24,6 +26,9 @@ from mcli.lib.workspace_registry import (
24
26
  get_registry_path,
25
27
  list_registered_workspaces,
26
28
  load_registry,
29
+ register_workspace,
30
+ save_registry,
31
+ unregister_workspace,
27
32
  )
28
33
 
29
34
  logger = get_logger(__name__)
@@ -211,94 +216,162 @@ def _render_workflow_list(
211
216
  console.print(f"\n[bold]Total: {total} workflow(s)[/bold]")
212
217
 
213
218
 
214
- @click.command("workflows")
215
- @click.option(
216
- "--all",
217
- "-a",
218
- "show_all",
219
- is_flag=True,
220
- help="Show detailed list of all workflows",
221
- )
222
- @click.option(
223
- "--global",
224
- "-g",
225
- "is_global",
226
- is_flag=True,
227
- help="Show only global workflows (~/.mcli/workflows/)",
228
- )
219
+ # =============================================================================
220
+ # CLI Group and Commands
221
+ # =============================================================================
222
+
223
+
224
+ @click.group("workflows", invoke_without_command=True)
229
225
  @click.option("--json", "as_json", is_flag=True, help="Output as JSON")
230
- @click.option(
231
- "--dashboard",
232
- "-d",
233
- is_flag=True,
234
- help="Show dashboard view (default when no flags)",
235
- )
236
- def workflows_cmd(show_all: bool, is_global: bool, as_json: bool, dashboard: bool):
237
- """📊 View all workflows tracked by mcli.
226
+ @click.pass_context
227
+ def workflows_group(ctx, as_json: bool):
228
+ """📊 Manage workflows and workspaces.
238
229
 
239
- Shows a dashboard summary of all registered workspaces and their workflows.
240
- Use flags to get different views:
230
+ View all workflows tracked by mcli and manage workspace registrations.
241
231
 
242
232
  \b
243
- Default (no flags): Dashboard with summary stats
244
- --all/-a: Detailed list of all workflows
245
- --global/-g: Show only global workflows
246
- --json: Output as JSON for scripting
247
- --dashboard/-d: Force dashboard view
233
+ Commands:
234
+ (default) Dashboard with summary stats
235
+ list Detailed list of all workflows
236
+ add Register a workspace
237
+ remove Unregister a workspace
238
+ prune Remove missing workspaces
248
239
 
249
240
  \b
250
241
  Examples:
251
242
  mcli self workflows # Dashboard summary
252
- mcli self workflows --all # List all workflows
253
- mcli self workflows --global # Global workflows only
254
- mcli self workflows --json # JSON output
243
+ mcli self workflows list # List all workflows
244
+ mcli self workflows list -g # Global workflows only
245
+ mcli self workflows add # Register current directory
246
+ mcli self workflows remove # Unregister current directory
255
247
  """
248
+ # If no subcommand, show dashboard
249
+ if ctx.invoked_subcommand is None:
250
+ try:
251
+ auto_register_current()
252
+ stats = _get_workflow_stats()
253
+
254
+ if as_json:
255
+ output = {
256
+ "summary": {
257
+ "total_workflows": stats["total_workflows"],
258
+ "total_workspaces": stats["total_workspaces"],
259
+ "active_workspaces": stats["active_workspaces"],
260
+ "missing_workspaces": stats["missing_workspaces"],
261
+ "global_workflows": stats["global_workflows"],
262
+ "local_workflows": stats["local_workflows"],
263
+ "current_workspace": stats["current_workspace"],
264
+ "registry_updated": stats["registry_updated"],
265
+ },
266
+ "language_counts": stats["language_counts"],
267
+ "workspaces": stats["workspaces"],
268
+ }
269
+ click.echo(json.dumps(output, indent=2, default=str))
270
+ else:
271
+ _render_dashboard(stats)
272
+ except Exception as e:
273
+ console.print(f"[red]Error: {e}[/red]")
274
+ logger.exception("Failed to display workflows")
275
+
276
+
277
+ @workflows_group.command("list")
278
+ @click.option("--global", "-g", "is_global", is_flag=True, help="Show only global workflows")
279
+ @click.option("--json", "as_json", is_flag=True, help="Output as JSON")
280
+ def workflows_list(is_global: bool, as_json: bool):
281
+ """📋 List all workflows in detail."""
256
282
  try:
257
- # Auto-register current workspace if applicable
258
283
  auto_register_current()
259
-
260
- # Gather stats
261
284
  stats = _get_workflow_stats()
262
285
 
263
- # JSON output
264
286
  if as_json:
265
- output = {
266
- "summary": {
267
- "total_workflows": stats["total_workflows"],
268
- "total_workspaces": stats["total_workspaces"],
269
- "active_workspaces": stats["active_workspaces"],
270
- "missing_workspaces": stats["missing_workspaces"],
271
- "global_workflows": stats["global_workflows"],
272
- "local_workflows": stats["local_workflows"],
273
- "current_workspace": stats["current_workspace"],
274
- "registry_updated": stats["registry_updated"],
275
- },
276
- "language_counts": stats["language_counts"],
277
- "workspaces": stats["workspaces"],
278
- }
279
-
280
- # Add full workflow details if --all
281
- if show_all:
282
- flat_workflows = []
283
- for workspace_name, workflows in stats["all_workflows"].items():
284
- for wf in workflows:
285
- wf["workspace"] = workspace_name
286
- flat_workflows.append(wf)
287
- output["workflows"] = flat_workflows
288
-
289
- click.echo(json.dumps(output, indent=2, default=str))
290
- return 0
291
-
292
- # Detailed list mode
293
- if show_all or is_global:
287
+ flat_workflows = []
288
+ for workspace_name, workflows in stats["all_workflows"].items():
289
+ if is_global and "global" not in workspace_name.lower():
290
+ continue
291
+ for wf in workflows:
292
+ wf["workspace"] = workspace_name
293
+ flat_workflows.append(wf)
294
+ click.echo(json.dumps({"workflows": flat_workflows, "total": len(flat_workflows)}, indent=2, default=str))
295
+ else:
294
296
  _render_workflow_list(stats["all_workflows"], is_global)
295
- return 0
296
-
297
- # Default: dashboard view
298
- _render_dashboard(stats)
299
- return 0
300
-
301
297
  except Exception as e:
302
298
  console.print(f"[red]Error: {e}[/red]")
303
- logger.exception("Failed to display workflows")
304
- return 1
299
+ logger.exception("Failed to list workflows")
300
+
301
+
302
+ @workflows_group.command("add")
303
+ @click.argument("path", required=False, type=click.Path(exists=True))
304
+ @click.option("--name", "-n", help="Custom name for the workspace")
305
+ def workflows_add(path: Optional[str], name: Optional[str]):
306
+ """➕ Register a workspace (current directory if no path given)."""
307
+ workspace_path = Path(path).resolve() if path else None
308
+
309
+ result = register_workspace(workspace_path, name)
310
+ if result:
311
+ console.print("[green]✅ Workspace registered successfully![/green]")
312
+ console.print(f"[dim]ID: {result}[/dim]")
313
+ console.print("\n[dim]View all workflows with:[/dim]")
314
+ console.print(" mcli self workflows list")
315
+ else:
316
+ console.print("[red]❌ Failed to register workspace[/red]")
317
+ console.print("[dim]Make sure the directory has .mcli/workflows/[/dim]")
318
+
319
+
320
+ @workflows_group.command("remove")
321
+ @click.argument("path", required=False, type=click.Path())
322
+ @click.option("--yes", "-y", is_flag=True, help="Skip confirmation")
323
+ def workflows_remove(path: Optional[str], yes: bool):
324
+ """➖ Unregister a workspace (current directory if no path given)."""
325
+ from rich.prompt import Confirm
326
+
327
+ workspace_path = Path(path).resolve() if path else None
328
+
329
+ if not yes:
330
+ path_str = str(workspace_path) if workspace_path else "current directory"
331
+ if not Confirm.ask(f"[yellow]Unregister workspace at {path_str}?[/yellow]"):
332
+ console.print("[yellow]Cancelled[/yellow]")
333
+ return
334
+
335
+ if unregister_workspace(workspace_path):
336
+ console.print("[green]✅ Workspace unregistered[/green]")
337
+ else:
338
+ console.print("[red]❌ Failed to unregister workspace[/red]")
339
+ console.print("[dim]Make sure the path is registered[/dim]")
340
+
341
+
342
+ @workflows_group.command("prune")
343
+ @click.option("--yes", "-y", is_flag=True, help="Skip confirmation")
344
+ def workflows_prune(yes: bool):
345
+ """🧹 Remove workspaces that no longer exist."""
346
+ from rich.prompt import Confirm
347
+
348
+ workspaces = list_registered_workspaces()
349
+ missing = [ws for ws in workspaces if not ws["exists"]]
350
+
351
+ if not missing:
352
+ console.print("[green]✅ All registered workspaces exist[/green]")
353
+ return
354
+
355
+ console.print(f"[yellow]Found {len(missing)} missing workspace(s):[/yellow]")
356
+ for ws in missing:
357
+ console.print(f" - {ws['name']} ({ws['path']})")
358
+
359
+ if not yes:
360
+ if not Confirm.ask("[yellow]Remove these workspaces from registry?[/yellow]"):
361
+ console.print("[yellow]Cancelled[/yellow]")
362
+ return
363
+
364
+ # Remove missing workspaces
365
+ registry = load_registry()
366
+ for ws in missing:
367
+ if ws["id"] in registry.get("workspaces", {}):
368
+ del registry["workspaces"][ws["id"]]
369
+
370
+ if save_registry(registry):
371
+ console.print(f"[green]✅ Removed {len(missing)} missing workspace(s)[/green]")
372
+ else:
373
+ console.print("[red]❌ Failed to update registry[/red]")
374
+
375
+
376
+ # Export the group
377
+ workflows = workflows_group
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mcli-framework
3
- Version: 8.0.17
3
+ Version: 8.0.18
4
4
  Summary: Portable workflow framework - transform any script into a versioned, schedulable command. Store in ~/.mcli/workflows/, version with lockfile, run as daemon or cron job.
5
5
  Author-email: Luis Fernandez de la Vara <luis@lefv.io>
6
6
  Maintainer-email: Luis Fernandez de la Vara <luis@lefv.io>
File without changes