mcli-framework 7.0.6__tar.gz → 7.1.1__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.

Potentially problematic release.


This version of mcli-framework might be problematic. Click here for more details.

Files changed (288) hide show
  1. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/.github/workflows/security.yml +2 -2
  2. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/PKG-INFO +14 -3
  3. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/pyproject.toml +21 -6
  4. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/app/logs_cmd.py +42 -13
  5. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/app/model_cmd.py +33 -6
  6. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/lib/services/lsh_client.py +1 -1
  7. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/ml/dashboard/app_integrated.py +173 -65
  8. mcli_framework-7.1.1/src/mcli/ml/predictions/prediction_engine.py +223 -0
  9. mcli_framework-7.1.1/src/mcli/mygroup/test_cmd.py +1 -0
  10. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/self/self_cmd.py +10 -5
  11. mcli_framework-7.1.1/src/mcli/self/test_cmd.py +1 -0
  12. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli_framework.egg-info/PKG-INFO +14 -3
  13. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli_framework.egg-info/SOURCES.txt +66 -52
  14. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli_framework.egg-info/requires.txt +13 -2
  15. mcli_framework-7.1.1/tests/cli/test_logs_cmd.py +284 -0
  16. {mcli_framework-7.0.6/tests → mcli_framework-7.1.1/tests/cli}/test_model_cmd.py +252 -1
  17. mcli_framework-7.1.1/tests/cli/test_self_cmd.py +1061 -0
  18. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/tests/conftest.py +14 -0
  19. mcli_framework-7.1.1/tests/e2e/test_model_workflow.py +145 -0
  20. mcli_framework-7.1.1/tests/e2e/test_new_user_workflow.py +141 -0
  21. mcli_framework-7.1.1/tests/e2e/test_update_workflow.py +194 -0
  22. mcli_framework-7.1.1/tests/fixtures/chat_fixtures.py +84 -0
  23. mcli_framework-7.1.1/tests/fixtures/cli_fixtures.py +91 -0
  24. mcli_framework-7.1.1/tests/fixtures/data_fixtures.py +100 -0
  25. mcli_framework-7.1.1/tests/fixtures/db_fixtures.py +95 -0
  26. mcli_framework-7.1.1/tests/fixtures/model_fixtures.py +69 -0
  27. mcli_framework-7.1.1/tests/integration/test_module_imports.py +160 -0
  28. mcli_framework-7.1.1/tests/unit/test_api_utils.py +116 -0
  29. mcli_framework-7.1.1/tests/unit/test_config.py +104 -0
  30. mcli_framework-7.1.1/tests/unit/test_dashboard_functions.py +266 -0
  31. mcli_framework-7.1.1/tests/unit/test_logger.py +218 -0
  32. mcli_framework-7.1.1/tests/unit/test_paths.py +197 -0
  33. mcli_framework-7.1.1/tests/unit/test_prediction_engine.py +490 -0
  34. mcli_framework-7.1.1/tests/unit/test_self_update.py +183 -0
  35. mcli_framework-7.1.1/tests/unit/test_toml_utils.py +194 -0
  36. mcli_framework-7.0.6/tests/pytest.ini +0 -9
  37. mcli_framework-7.0.6/tests/simple_integration_test.py +0 -163
  38. mcli_framework-7.0.6/tests/test_command_discovery.py +0 -295
  39. mcli_framework-7.0.6/tests/test_enhanced_chat.py +0 -276
  40. mcli_framework-7.0.6/tests/test_main_app_functions.py +0 -144
  41. mcli_framework-7.0.6/tests/test_self.py +0 -469
  42. mcli_framework-7.0.6/tests/test_utility_functions.py +0 -343
  43. mcli_framework-7.0.6/tests/test_utility_functions_simple.py +0 -107
  44. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/.github/dependabot.yml +0 -0
  45. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/.github/workflows/build.yml +0 -0
  46. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/.github/workflows/ci.yml +0 -0
  47. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/.github/workflows/ml-pipeline.yml +0 -0
  48. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/.github/workflows/publish-self-hosted.yml +0 -0
  49. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/.github/workflows/publish.yml +0 -0
  50. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/.github/workflows/release.yml +0 -0
  51. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/.github/workflows/test.yml +0 -0
  52. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/LICENSE +0 -0
  53. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/MANIFEST.in +0 -0
  54. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/PERFORMANCE_OPTIMIZATIONS.md +0 -0
  55. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/README.md +0 -0
  56. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/mcli_rust/Cargo.toml +0 -0
  57. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/mcli_rust/src/command_parser.rs +0 -0
  58. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/mcli_rust/src/file_watcher.rs +0 -0
  59. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/mcli_rust/src/lib.rs +0 -0
  60. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/mcli_rust/src/process_manager.rs +0 -0
  61. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/mcli_rust/src/tfidf.rs +0 -0
  62. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/setup.cfg +0 -0
  63. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/app/chat_cmd.py +0 -0
  64. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/app/commands_cmd.py +0 -0
  65. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/app/completion_cmd.py +0 -0
  66. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/app/completion_helpers.py +0 -0
  67. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/app/cron_test_cmd.py +0 -0
  68. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/app/main.py +0 -0
  69. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/app/model/model.py +0 -0
  70. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/app/redis_cmd.py +0 -0
  71. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/app/video/video.py +0 -0
  72. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/app/visual_cmd.py +0 -0
  73. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/chat/chat.py +0 -0
  74. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/chat/command_rag.py +0 -0
  75. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/chat/enhanced_chat.py +0 -0
  76. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/chat/system_controller.py +0 -0
  77. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/chat/system_integration.py +0 -0
  78. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/cli.py +0 -0
  79. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/config.toml +0 -0
  80. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/lib/api/api.py +0 -0
  81. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/lib/api/daemon_client.py +0 -0
  82. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/lib/api/daemon_client_local.py +0 -0
  83. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/lib/api/daemon_decorator.py +0 -0
  84. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/lib/api/mcli_decorators.py +0 -0
  85. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/lib/auth/auth.py +0 -0
  86. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/lib/auth/aws_manager.py +0 -0
  87. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/lib/auth/azure_manager.py +0 -0
  88. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/lib/auth/credential_manager.py +0 -0
  89. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/lib/auth/gcp_manager.py +0 -0
  90. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/lib/auth/key_manager.py +0 -0
  91. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/lib/auth/mcli_manager.py +0 -0
  92. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/lib/auth/token_manager.py +0 -0
  93. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/lib/auth/token_util.py +0 -0
  94. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/lib/config/config.py +0 -0
  95. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/lib/discovery/__init__.py +0 -0
  96. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/lib/discovery/command_discovery.py +0 -0
  97. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/lib/erd/erd.py +0 -0
  98. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/lib/erd/generate_graph.py +0 -0
  99. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/lib/files/files.py +0 -0
  100. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/lib/fs/fs.py +0 -0
  101. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/lib/lib.py +0 -0
  102. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/lib/logger/logger.py +0 -0
  103. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/lib/paths.py +0 -0
  104. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/lib/performance/optimizer.py +0 -0
  105. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/lib/performance/rust_bridge.py +0 -0
  106. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/lib/performance/uvloop_config.py +0 -0
  107. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/lib/pickles/pickles.py +0 -0
  108. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/lib/search/cached_vectorizer.py +0 -0
  109. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/lib/services/data_pipeline.py +0 -0
  110. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/lib/services/redis_service.py +0 -0
  111. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/lib/shell/shell.py +0 -0
  112. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/lib/toml/toml.py +0 -0
  113. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/lib/ui/styling.py +0 -0
  114. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/lib/ui/visual_effects.py +0 -0
  115. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/lib/watcher/watcher.py +0 -0
  116. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/ml/api/app.py +0 -0
  117. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/ml/api/middleware.py +0 -0
  118. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/ml/api/routers/admin_router.py +0 -0
  119. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/ml/api/routers/auth_router.py +0 -0
  120. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/ml/api/routers/backtest_router.py +0 -0
  121. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/ml/api/routers/data_router.py +0 -0
  122. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/ml/api/routers/model_router.py +0 -0
  123. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/ml/api/routers/monitoring_router.py +0 -0
  124. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/ml/api/routers/portfolio_router.py +0 -0
  125. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/ml/api/routers/prediction_router.py +0 -0
  126. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/ml/api/routers/trade_router.py +0 -0
  127. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/ml/api/routers/websocket_router.py +0 -0
  128. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/ml/api/schemas.py +0 -0
  129. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/ml/auth/auth_manager.py +0 -0
  130. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/ml/auth/models.py +0 -0
  131. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/ml/auth/permissions.py +0 -0
  132. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/ml/backtesting/backtest_engine.py +0 -0
  133. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/ml/backtesting/performance_metrics.py +0 -0
  134. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/ml/cache.py +0 -0
  135. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/ml/cli/main.py +0 -0
  136. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/ml/config/settings.py +0 -0
  137. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/ml/configs/dvc_config.py +0 -0
  138. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/ml/configs/mlflow_config.py +0 -0
  139. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/ml/configs/mlops_manager.py +0 -0
  140. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/ml/dashboard/app.py +0 -0
  141. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/ml/dashboard/app_supabase.py +0 -0
  142. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/ml/dashboard/app_training.py +0 -0
  143. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/ml/dashboard/cli.py +0 -0
  144. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/ml/data_ingestion/api_connectors.py +0 -0
  145. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/ml/data_ingestion/data_pipeline.py +0 -0
  146. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/ml/data_ingestion/stream_processor.py +0 -0
  147. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/ml/database/migrations/env.py +0 -0
  148. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/ml/database/models.py +0 -0
  149. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/ml/database/session.py +0 -0
  150. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/ml/experimentation/ab_testing.py +0 -0
  151. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/ml/features/ensemble_features.py +0 -0
  152. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/ml/features/political_features.py +0 -0
  153. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/ml/features/recommendation_engine.py +0 -0
  154. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/ml/features/stock_features.py +0 -0
  155. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/ml/features/test_feature_engineering.py +0 -0
  156. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/ml/logging.py +0 -0
  157. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/ml/mlops/data_versioning.py +0 -0
  158. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/ml/mlops/experiment_tracker.py +0 -0
  159. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/ml/mlops/model_serving.py +0 -0
  160. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/ml/mlops/pipeline_orchestrator.py +0 -0
  161. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/ml/models/base_models.py +0 -0
  162. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/ml/models/ensemble_models.py +0 -0
  163. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/ml/models/recommendation_models.py +0 -0
  164. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/ml/models/test_models.py +0 -0
  165. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/ml/monitoring/drift_detection.py +0 -0
  166. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/ml/monitoring/metrics.py +0 -0
  167. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/ml/optimization/portfolio_optimizer.py +0 -0
  168. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/ml/preprocessing/data_cleaners.py +0 -0
  169. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/ml/preprocessing/feature_extractors.py +0 -0
  170. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/ml/preprocessing/ml_pipeline.py +0 -0
  171. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/ml/preprocessing/politician_trading_preprocessor.py +0 -0
  172. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/ml/preprocessing/test_preprocessing.py +0 -0
  173. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/ml/scripts/populate_sample_data.py +0 -0
  174. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/ml/tasks.py +0 -0
  175. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/ml/tests/test_integration.py +0 -0
  176. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/ml/tests/test_training_dashboard.py +0 -0
  177. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/public/oi/oi.py +0 -0
  178. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/public/public.py +0 -0
  179. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/workflow/daemon/api_daemon.py +0 -0
  180. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/workflow/daemon/async_command_database.py +0 -0
  181. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/workflow/daemon/async_process_manager.py +0 -0
  182. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/workflow/daemon/client.py +0 -0
  183. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/workflow/daemon/commands.py +0 -0
  184. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/workflow/daemon/daemon.py +0 -0
  185. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/workflow/daemon/daemon_api.py +0 -0
  186. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/workflow/daemon/enhanced_daemon.py +0 -0
  187. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/workflow/daemon/process_cli.py +0 -0
  188. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/workflow/daemon/process_manager.py +0 -0
  189. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/workflow/daemon/test_daemon.py +0 -0
  190. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/workflow/dashboard/dashboard_cmd.py +0 -0
  191. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/workflow/docker/docker.py +0 -0
  192. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/workflow/file/file.py +0 -0
  193. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/workflow/gcloud/config.toml +0 -0
  194. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/workflow/gcloud/gcloud.py +0 -0
  195. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/workflow/git_commit/ai_service.py +0 -0
  196. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/workflow/git_commit/commands.py +0 -0
  197. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/workflow/lsh_integration.py +0 -0
  198. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/workflow/model_service/client.py +0 -0
  199. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/workflow/model_service/download_and_run_efficient_models.py +0 -0
  200. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/workflow/model_service/lightweight_embedder.py +0 -0
  201. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/workflow/model_service/lightweight_model_server.py +0 -0
  202. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/workflow/model_service/lightweight_test.py +0 -0
  203. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/workflow/model_service/model_service.py +0 -0
  204. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/workflow/model_service/ollama_efficient_runner.py +0 -0
  205. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/workflow/model_service/pdf_processor.py +0 -0
  206. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/workflow/model_service/test_efficient_runner.py +0 -0
  207. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/workflow/model_service/test_example.py +0 -0
  208. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/workflow/model_service/test_integration.py +0 -0
  209. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/workflow/model_service/test_new_features.py +0 -0
  210. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/workflow/openai/openai.py +0 -0
  211. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/workflow/politician_trading/commands.py +0 -0
  212. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/workflow/politician_trading/config.py +0 -0
  213. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/workflow/politician_trading/connectivity.py +0 -0
  214. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/workflow/politician_trading/data_sources.py +0 -0
  215. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/workflow/politician_trading/database.py +0 -0
  216. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/workflow/politician_trading/demo.py +0 -0
  217. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/workflow/politician_trading/models.py +0 -0
  218. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/workflow/politician_trading/monitoring.py +0 -0
  219. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/workflow/politician_trading/scrapers.py +0 -0
  220. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/workflow/politician_trading/scrapers_california.py +0 -0
  221. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/workflow/politician_trading/scrapers_eu.py +0 -0
  222. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/workflow/politician_trading/scrapers_uk.py +0 -0
  223. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/workflow/politician_trading/scrapers_us_states.py +0 -0
  224. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/workflow/politician_trading/supabase_functions.py +0 -0
  225. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/workflow/politician_trading/workflow.py +0 -0
  226. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/workflow/registry/registry.py +0 -0
  227. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/workflow/repo/repo.py +0 -0
  228. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/workflow/scheduler/commands.py +0 -0
  229. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/workflow/scheduler/cron_parser.py +0 -0
  230. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/workflow/scheduler/job.py +0 -0
  231. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/workflow/scheduler/monitor.py +0 -0
  232. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/workflow/scheduler/persistence.py +0 -0
  233. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/workflow/scheduler/scheduler.py +0 -0
  234. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/workflow/sync/sync_cmd.py +0 -0
  235. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/workflow/sync/test_cmd.py +0 -0
  236. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/workflow/videos/videos.py +0 -0
  237. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/workflow/wakatime/wakatime.py +0 -0
  238. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli/workflow/workflow.py +0 -0
  239. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli_framework.egg-info/dependency_links.txt +0 -0
  240. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli_framework.egg-info/entry_points.txt +0 -0
  241. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/src/mcli_framework.egg-info/top_level.txt +0 -0
  242. /mcli_framework-7.0.6/tests/test_all_cli.py → /mcli_framework-7.1.1/tests/cli/test_all_commands.py +0 -0
  243. {mcli_framework-7.0.6/tests → mcli_framework-7.1.1/tests/cli}/test_chat_cmd.py +0 -0
  244. {mcli_framework-7.0.6/tests → mcli_framework-7.1.1/tests/cli}/test_main_app.py +0 -0
  245. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/tests/demo_generate_graph.py +0 -0
  246. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/tests/demo_hierarchical_transform.py +0 -0
  247. /mcli_framework-7.0.6/tests/end_to_end_integration_test.py → /mcli_framework-7.1.1/tests/e2e/test_complete_workflows.py +0 -0
  248. /mcli_framework-7.0.6/tests/test_agent_functionality.py → /mcli_framework-7.1.1/tests/integration/test_agent.py +0 -0
  249. {mcli_framework-7.0.6/tests → mcli_framework-7.1.1/tests/integration}/test_california_scraper.py +0 -0
  250. {mcli_framework-7.0.6/tests → mcli_framework-7.1.1/tests/integration}/test_chat_client.py +0 -0
  251. /mcli_framework-7.0.6/tests/test_chat_system_control.py → /mcli_framework-7.1.1/tests/integration/test_chat_system.py +0 -0
  252. {mcli_framework-7.0.6/tests → mcli_framework-7.1.1/tests/integration}/test_congress_scraper.py +0 -0
  253. {mcli_framework-7.0.6/tests → mcli_framework-7.1.1/tests/integration}/test_daemon_client.py +0 -0
  254. /mcli_framework-7.0.6/tests/test_daemon.py → /mcli_framework-7.1.1/tests/integration/test_daemon_server.py +0 -0
  255. /mcli_framework-7.0.6/tests/test_webapp.py → /mcli_framework-7.1.1/tests/integration/test_flask_webapp.py +0 -0
  256. /mcli_framework-7.0.6/tests/test_gcloud.py → /mcli_framework-7.1.1/tests/integration/test_gcloud_services.py +0 -0
  257. {mcli_framework-7.0.6/tests → mcli_framework-7.1.1/tests/integration}/test_lsh_client.py +0 -0
  258. /mcli_framework-7.0.6/tests/test_lsh_integration.py → /mcli_framework-7.1.1/tests/integration/test_lsh_service.py +0 -0
  259. {mcli_framework-7.0.6/tests → mcli_framework-7.1.1/tests/integration}/test_ml_auth.py +0 -0
  260. /mcli_framework-7.0.6/tests/test_data_pipeline.py → /mcli_framework-7.1.1/tests/integration/test_ml_data_pipeline.py +0 -0
  261. {mcli_framework-7.0.6/tests → mcli_framework-7.1.1/tests/integration}/test_ml_models.py +0 -0
  262. {mcli_framework-7.0.6/tests → mcli_framework-7.1.1/tests/integration}/test_ml_pipeline.py +0 -0
  263. /mcli_framework-7.0.6/tests/test_oi.py → /mcli_framework-7.1.1/tests/integration/test_oi_service.py +0 -0
  264. /mcli_framework-7.0.6/tests/test_politician_trading_integration.py → /mcli_framework-7.1.1/tests/integration/test_politician_trading.py +0 -0
  265. /mcli_framework-7.0.6/tests/test_repo.py → /mcli_framework-7.1.1/tests/integration/test_repo_operations.py +0 -0
  266. /mcli_framework-7.0.6/tests/test_registry.py → /mcli_framework-7.1.1/tests/integration/test_service_registry.py +0 -0
  267. {mcli_framework-7.0.6/tests → mcli_framework-7.1.1/tests/integration}/test_uk_scraper.py +0 -0
  268. {mcli_framework-7.0.6/tests → mcli_framework-7.1.1/tests/integration}/test_us_states_scraper.py +0 -0
  269. /mcli_framework-7.0.6/tests/test_videos.py → /mcli_framework-7.1.1/tests/integration/test_video_processing.py +0 -0
  270. /mcli_framework-7.0.6/tests/test_wakatime.py → /mcli_framework-7.1.1/tests/integration/test_wakatime_api.py +0 -0
  271. /mcli_framework-7.0.6/tests/test_webapp_comprehensive.py → /mcli_framework-7.1.1/tests/integration/test_webapp_full.py +0 -0
  272. {mcli_framework-7.0.6/tests → mcli_framework-7.1.1/tests/integration}/test_workflow.py +0 -0
  273. /mcli_framework-7.0.6/tests/test_workflow_integration.py → /mcli_framework-7.1.1/tests/integration/test_workflow_commands.py +0 -0
  274. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/tests/run_tests.py +0 -0
  275. {mcli_framework-7.0.6 → mcli_framework-7.1.1}/tests/test_harness.py +0 -0
  276. /mcli_framework-7.0.6/tests/test_fix.py → /mcli_framework-7.1.1/tests/unit/test_bug_fixes.py +0 -0
  277. /mcli_framework-7.0.6/tests/test_optional_dependencies.py → /mcli_framework-7.1.1/tests/unit/test_dependencies.py +0 -0
  278. /mcli_framework-7.0.6/tests/test_erd.py → /mcli_framework-7.1.1/tests/unit/test_erd_generation.py +0 -0
  279. /mcli_framework-7.0.6/tests/test_generic_erd.py → /mcli_framework-7.1.1/tests/unit/test_erd_generic.py +0 -0
  280. /mcli_framework-7.0.6/tests/test_erd_import.py → /mcli_framework-7.1.1/tests/unit/test_erd_imports.py +0 -0
  281. /mcli_framework-7.0.6/tests/test_generate_graph.py → /mcli_framework-7.1.1/tests/unit/test_graph_generation.py +0 -0
  282. /mcli_framework-7.0.6/tests/test_auth.py → /mcli_framework-7.1.1/tests/unit/test_lib_auth.py +0 -0
  283. /mcli_framework-7.0.6/tests/test_file.py → /mcli_framework-7.1.1/tests/unit/test_lib_files.py +0 -0
  284. /mcli_framework-7.0.6/tests/test_lib.py → /mcli_framework-7.1.1/tests/unit/test_lib_utils.py +0 -0
  285. /mcli_framework-7.0.6/tests/test_preprocessing_simple.py → /mcli_framework-7.1.1/tests/unit/test_ml_preprocessing.py +0 -0
  286. /mcli_framework-7.0.6/tests/test_fixed_issues.py → /mcli_framework-7.1.1/tests/unit/test_regression.py +0 -0
  287. /mcli_framework-7.0.6/tests/test_rich.py → /mcli_framework-7.1.1/tests/unit/test_ui_rich.py +0 -0
  288. /mcli_framework-7.0.6/tests/test_uv_compatibility.py → /mcli_framework-7.1.1/tests/unit/test_uv_compat.py +0 -0
@@ -109,6 +109,6 @@ jobs:
109
109
  uses: trufflesecurity/trufflehog@main
110
110
  with:
111
111
  path: ./
112
- base: main
113
- head: HEAD
112
+ base: ${{ github.event.before || 'main' }}
113
+ head: ${{ github.sha }}
114
114
  extra_args: --debug --only-verified
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mcli-framework
3
- Version: 7.0.6
3
+ Version: 7.1.1
4
4
  Summary: 🚀 High-performance CLI framework with Rust extensions, AI chat, and stunning visuals
5
5
  Author-email: Luis Fernandez de la Vara <luis@lefv.io>
6
6
  Maintainer-email: Luis Fernandez de la Vara <luis@lefv.io>
@@ -63,7 +63,7 @@ Requires-Dist: uvloop>=0.19.0
63
63
  Requires-Dist: aiosqlite>=0.20.0
64
64
  Requires-Dist: redis>=5.0.0
65
65
  Requires-Dist: aiohttp-sse-client>=0.2.1
66
- Requires-Dist: asyncio-mqtt>=0.13.0
66
+ Requires-Dist: aiomqtt>=2.0.0
67
67
  Requires-Dist: opencv-python>=4.11.0.86
68
68
  Requires-Dist: pillow>=11.2.1
69
69
  Requires-Dist: numpy<2.0.0,>=1.24.0
@@ -136,13 +136,24 @@ Requires-Dist: pytest>=8.4.1; extra == "dev"
136
136
  Requires-Dist: pytest-cov<5.0.0,>=4.1.0; extra == "dev"
137
137
  Requires-Dist: pytest-mock>=3.14.1; extra == "dev"
138
138
  Requires-Dist: pytest-asyncio>=1.1.0; extra == "dev"
139
+ Requires-Dist: pytest-benchmark>=4.0.0; extra == "dev"
140
+ Requires-Dist: pytest-timeout>=2.2.0; extra == "dev"
141
+ Requires-Dist: pytest-xdist>=3.5.0; extra == "dev"
142
+ Requires-Dist: hypothesis>=6.92.0; extra == "dev"
143
+ Requires-Dist: faker>=22.0.0; extra == "dev"
144
+ Requires-Dist: responses>=0.24.0; extra == "dev"
145
+ Requires-Dist: freezegun>=1.4.0; extra == "dev"
146
+ Requires-Dist: pytest-html>=4.1.0; extra == "dev"
147
+ Requires-Dist: pytest-json-report>=1.5.0; extra == "dev"
139
148
  Requires-Dist: black>=23.0.0; extra == "dev"
140
149
  Requires-Dist: isort<6.0.0,>=5.12.0; extra == "dev"
141
150
  Requires-Dist: mypy<2.0.0,>=1.7.1; extra == "dev"
151
+ Requires-Dist: ruff>=0.1.0; extra == "dev"
152
+ Requires-Dist: pre-commit>=3.6.0; extra == "dev"
142
153
  Requires-Dist: build>=1.2.2.post1; extra == "dev"
143
154
  Requires-Dist: maturin>=1.9.3; extra == "dev"
155
+ Requires-Dist: twine>=4.0.0; extra == "dev"
144
156
  Provides-Extra: all
145
- Requires-Dist: mcli[async-extras,chat,dashboard,database,documents,gpu,ml,monitoring,streaming,video,viz,web]; extra == "all"
146
157
  Dynamic: license-file
147
158
 
148
159
  # MCLI
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "mcli-framework"
3
- version = "7.0.6"
3
+ version = "7.1.1"
4
4
  description = "🚀 High-performance CLI framework with Rust extensions, AI chat, and stunning visuals"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.9"
@@ -73,7 +73,7 @@ dependencies = [
73
73
  "aiosqlite>=0.20.0",
74
74
  "redis>=5.0.0",
75
75
  "aiohttp-sse-client>=0.2.1",
76
- "asyncio-mqtt>=0.13.0",
76
+ "aiomqtt>=2.0.0",
77
77
 
78
78
  # Video processing
79
79
  "opencv-python>=4.11.0.86",
@@ -177,21 +177,36 @@ web = []
177
177
 
178
178
  # Development tools
179
179
  dev = [
180
+ # Testing framework
180
181
  "pytest>=8.4.1",
181
182
  "pytest-cov>=4.1.0,<5.0.0",
182
183
  "pytest-mock>=3.14.1",
183
184
  "pytest-asyncio>=1.1.0",
185
+ "pytest-benchmark>=4.0.0", # Performance testing
186
+ "pytest-timeout>=2.2.0", # Timeout control
187
+ "pytest-xdist>=3.5.0", # Parallel testing
188
+ "hypothesis>=6.92.0", # Property-based testing
189
+ "faker>=22.0.0", # Test data generation
190
+ "responses>=0.24.0", # HTTP mocking
191
+ "freezegun>=1.4.0", # Time mocking
192
+ "pytest-html>=4.1.0", # HTML reports
193
+ "pytest-json-report>=1.5.0", # JSON reports
194
+
195
+ # Code quality
184
196
  "black>=23.0.0",
185
197
  "isort>=5.12.0,<6.0.0",
186
198
  "mypy>=1.7.1,<2.0.0",
199
+ "ruff>=0.1.0", # Fast linter
200
+ "pre-commit>=3.6.0", # Git hooks
201
+
202
+ # Build tools
187
203
  "build>=1.2.2.post1",
188
204
  "maturin>=1.9.3",
205
+ "twine>=4.0.0", # Package upload
189
206
  ]
190
207
 
191
- # All optional features
192
- all = [
193
- "mcli[chat,async-extras,video,documents,viz,database,ml,gpu,monitoring,streaming,dashboard,web]",
194
- ]
208
+ # All optional features (all features now included by default)
209
+ all = []
195
210
 
196
211
  [tool.black]
197
212
  line-length = 100
@@ -120,8 +120,18 @@ def list_logs(date: Optional[str]):
120
120
  @click.argument("log_type", type=click.Choice(["main", "trace", "system"]))
121
121
  @click.option("--lines", "-n", type=int, default=20, help="Number of lines to show (default: 20)")
122
122
  @click.option("--date", "-d", help="Date for log file (YYYYMMDD format, default: today)")
123
- def tail_logs(log_type: str, lines: int, date: Optional[str]):
124
- """Show the last N lines of a specific log file"""
123
+ @click.option(
124
+ "--follow",
125
+ "-f",
126
+ is_flag=True,
127
+ help="Follow log output in real-time (like tail -f)",
128
+ )
129
+ def tail_logs(log_type: str, lines: int, date: Optional[str], follow: bool):
130
+ """Show the last N lines of a specific log file
131
+
132
+ By default, shows the last N lines and exits. Use --follow/-f to
133
+ continuously monitor the log file for new entries (similar to tail -f).
134
+ """
125
135
  logs_dir = get_logs_dir()
126
136
 
127
137
  # Note: get_logs_dir() creates the directory automatically
@@ -144,17 +154,36 @@ def tail_logs(log_type: str, lines: int, date: Optional[str]):
144
154
  return
145
155
 
146
156
  try:
147
- # Read last N lines
148
- with open(log_file, "r") as f:
149
- all_lines = f.readlines()
150
- tail_lines = all_lines[-lines:] if len(all_lines) > lines else all_lines
151
-
152
- # Display with formatting
153
- console.print(f"\n📋 **Last {len(tail_lines)} lines from {log_file.name}**\n", style="cyan")
154
-
155
- for line in tail_lines:
156
- formatted_line = _format_log_line(line.rstrip())
157
- console.print(formatted_line)
157
+ if follow:
158
+ # Follow mode: continuously stream new lines
159
+ console.print(f"\n📡 **Following {log_file.name}** (last {lines} lines)", style="cyan")
160
+ console.print("Press Ctrl+C to stop\n")
161
+
162
+ # Use tail -f for real-time following
163
+ cmd = ["tail", f"-n{lines}", "-f", str(log_file)]
164
+ process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
165
+
166
+ try:
167
+ for line in iter(process.stdout.readline, ""):
168
+ if line:
169
+ formatted_line = _format_log_line(line.rstrip())
170
+ console.print(formatted_line)
171
+ except KeyboardInterrupt:
172
+ process.terminate()
173
+ console.print("\n👋 Log following stopped", style="cyan")
174
+ else:
175
+ # Standard mode: just show last N lines
176
+ # Read last N lines
177
+ with open(log_file, "r") as f:
178
+ all_lines = f.readlines()
179
+ tail_lines = all_lines[-lines:] if len(all_lines) > lines else all_lines
180
+
181
+ # Display with formatting
182
+ console.print(f"\n📋 **Last {len(tail_lines)} lines from {log_file.name}**\n", style="cyan")
183
+
184
+ for line in tail_lines:
185
+ formatted_line = _format_log_line(line.rstrip())
186
+ console.print(formatted_line)
158
187
 
159
188
  except Exception as e:
160
189
  console.print(f"❌ Error reading log file: {e}", style="red")
@@ -100,15 +100,24 @@ def download(model_name: str):
100
100
 
101
101
  @model.command()
102
102
  @click.option("--model", "-m", help="Specific model to use")
103
- @click.option("--port", "-p", default=8080, help="Port to run server on")
103
+ @click.option("--port", "-p", default=None, help="Port to run server on (default: from config or 51234)")
104
104
  @click.option(
105
105
  "--auto-download",
106
106
  is_flag=True,
107
107
  default=True,
108
108
  help="Automatically download model if not available",
109
109
  )
110
- def start(model: Optional[str], port: int, auto_download: bool):
110
+ def start(model: Optional[str], port: Optional[int], auto_download: bool):
111
111
  """Start the lightweight model server."""
112
+ # Load port from config if not specified
113
+ if port is None:
114
+ try:
115
+ from mcli.lib.config.config import load_config
116
+ config = load_config()
117
+ port = config.get("model", {}).get("server_port", 51234)
118
+ except Exception:
119
+ port = 51234 # Default ephemeral port
120
+
112
121
  server = LightweightModelServer(port=port)
113
122
 
114
123
  # Determine which model to use
@@ -192,9 +201,18 @@ def recommend():
192
201
 
193
202
 
194
203
  @model.command()
195
- @click.option("--port", "-p", default=8080, help="Port where server is running")
196
- def status(port: int):
204
+ @click.option("--port", "-p", default=None, help="Port where server is running (default: from config or 51234)")
205
+ def status(port: Optional[int]):
197
206
  """Check status of the lightweight model server."""
207
+ # Load port from config if not specified
208
+ if port is None:
209
+ try:
210
+ from mcli.lib.config.config import load_config
211
+ config = load_config()
212
+ port = config.get("model", {}).get("server_port", 51234)
213
+ except Exception:
214
+ port = 51234 # Default ephemeral port
215
+
198
216
  import requests
199
217
 
200
218
  try:
@@ -225,9 +243,18 @@ def status(port: int):
225
243
 
226
244
 
227
245
  @model.command()
228
- @click.option("--port", "-p", default=8080, help="Port where server is running")
229
- def stop(port: int):
246
+ @click.option("--port", "-p", default=None, help="Port where server is running (default: from config or 51234)")
247
+ def stop(port: Optional[int]):
230
248
  """Stop the lightweight model server."""
249
+ # Load port from config if not specified
250
+ if port is None:
251
+ try:
252
+ from mcli.lib.config.config import load_config
253
+ config = load_config()
254
+ port = config.get("model", {}).get("server_port", 51234)
255
+ except Exception:
256
+ port = 51234 # Default ephemeral port
257
+
231
258
  import requests
232
259
  import psutil
233
260
 
@@ -12,7 +12,7 @@ from typing import Any, Dict, List, Optional, Callable
12
12
  from urllib.parse import urljoin
13
13
 
14
14
  import aiohttp
15
- import asyncio_mqtt
15
+ import aiomqtt
16
16
  from aiohttp_sse_client import client as sse_client
17
17
 
18
18
  from mcli.lib.logger.logger import get_logger