mcli-framework 8.0.46__tar.gz → 8.0.47__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 (236) hide show
  1. {mcli_framework-8.0.46/src/mcli_framework.egg-info → mcli_framework-8.0.47}/PKG-INFO +1 -1
  2. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/pyproject.toml +1 -1
  3. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/app/sync_cmd.py +109 -0
  4. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/ipns_manager.py +17 -2
  5. mcli_framework-8.0.47/src/mcli/lib/sync_key_store.py +69 -0
  6. {mcli_framework-8.0.46 → mcli_framework-8.0.47/src/mcli_framework.egg-info}/PKG-INFO +1 -1
  7. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli_framework.egg-info/SOURCES.txt +1 -0
  8. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/LICENSE +0 -0
  9. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/MANIFEST.in +0 -0
  10. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/README.md +0 -0
  11. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/llms-full.txt +0 -0
  12. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/llms.txt +0 -0
  13. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/mcli_rust/Cargo.toml +0 -0
  14. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/mcli_rust/src/command_parser.rs +0 -0
  15. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/mcli_rust/src/file_watcher.rs +0 -0
  16. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/mcli_rust/src/lib.rs +0 -0
  17. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/mcli_rust/src/process_manager.rs +0 -0
  18. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/mcli_rust/src/tfidf.rs +0 -0
  19. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/setup.cfg +0 -0
  20. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/__init__.py +0 -0
  21. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/app/__init__.py +0 -0
  22. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/app/commands_cmd.py +0 -0
  23. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/app/completion_helpers.py +0 -0
  24. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/app/context_cmd.py +0 -0
  25. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/app/create_cmd.py +0 -0
  26. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/app/delete_cmd.py +0 -0
  27. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/app/edit_cmd.py +0 -0
  28. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/app/import_cmd.py +0 -0
  29. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/app/init_cmd.py +0 -0
  30. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/app/list_cmd.py +0 -0
  31. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/app/main.py +0 -0
  32. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/app/migrate_cmd.py +0 -0
  33. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/app/model/__init__.py +0 -0
  34. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/app/model/model.py +0 -0
  35. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/app/model_cmd.py +0 -0
  36. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/app/mv_cmd.py +0 -0
  37. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/app/new_cmd.py +0 -0
  38. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/app/remove_cmd.py +0 -0
  39. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/app/rm_cmd.py +0 -0
  40. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/app/search_cmd.py +0 -0
  41. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/app/services_cmd.py +0 -0
  42. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/app/setup_cmd.py +0 -0
  43. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/app/source_sync_cmd.py +0 -0
  44. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/app/video/__init__.py +0 -0
  45. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/app/video/video.py +0 -0
  46. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/config.toml +0 -0
  47. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/__init__.py +0 -0
  48. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/api/__init__.py +0 -0
  49. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/api/api.py +0 -0
  50. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/api/daemon_client.py +0 -0
  51. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/api/daemon_client_local.py +0 -0
  52. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/api/daemon_decorator.py +0 -0
  53. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/api/mcli_decorators.py +0 -0
  54. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/auth/__init__.py +0 -0
  55. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/auth/auth.py +0 -0
  56. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/auth/aws_manager.py +0 -0
  57. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/auth/azure_manager.py +0 -0
  58. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/auth/credential_manager.py +0 -0
  59. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/auth/gcp_manager.py +0 -0
  60. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/auth/key_manager.py +0 -0
  61. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/auth/mcli_manager.py +0 -0
  62. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/auth/token_manager.py +0 -0
  63. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/auth/token_util.py +0 -0
  64. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/config/__init__.py +0 -0
  65. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/config/config.py +0 -0
  66. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/config/settings.py +0 -0
  67. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/constants/__init__.py +0 -0
  68. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/constants/commands.py +0 -0
  69. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/constants/defaults.py +0 -0
  70. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/constants/env.py +0 -0
  71. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/constants/messages.py +0 -0
  72. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/constants/paths.py +0 -0
  73. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/constants/scripts.py +0 -0
  74. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/constants/storage.py +0 -0
  75. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/custom_commands.py +0 -0
  76. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/discovery/__init__.py +0 -0
  77. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/discovery/command_discovery.py +0 -0
  78. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/erd/__init__.py +0 -0
  79. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/erd/erd.py +0 -0
  80. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/erd/generate_graph.py +0 -0
  81. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/errors.py +0 -0
  82. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/feature_detection.py +0 -0
  83. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/files/__init__.py +0 -0
  84. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/files/files.py +0 -0
  85. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/folder_workflows.py +0 -0
  86. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/fs/__init__.py +0 -0
  87. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/fs/fs.py +0 -0
  88. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/ipfs_sync.py +0 -0
  89. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/ipfs_utils.py +0 -0
  90. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/lib.py +0 -0
  91. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/logger/__init__.py +0 -0
  92. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/logger/correlation.py +0 -0
  93. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/logger/logger.py +0 -0
  94. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/logger/structured.py +0 -0
  95. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/optional_deps.py +0 -0
  96. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/paths.py +0 -0
  97. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/performance/__init__.py +0 -0
  98. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/performance/optimizer.py +0 -0
  99. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/performance/rust_bridge.py +0 -0
  100. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/performance/uvloop_config.py +0 -0
  101. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/pickles/__init__.py +0 -0
  102. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/pickles/pickles.py +0 -0
  103. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/pyenv/__init__.py +0 -0
  104. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/pyenv/deps.py +0 -0
  105. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/pyenv/manager.py +0 -0
  106. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/pyenv/venv.py +0 -0
  107. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/script_loader.py +0 -0
  108. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/script_sync.py +0 -0
  109. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/script_watcher.py +0 -0
  110. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/search/cached_vectorizer.py +0 -0
  111. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/secrets/__init__.py +0 -0
  112. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/secrets/commands.py +0 -0
  113. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/secrets/manager.py +0 -0
  114. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/secrets/repl.py +0 -0
  115. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/secrets/store.py +0 -0
  116. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/services/__init__.py +0 -0
  117. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/services/config.py +0 -0
  118. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/services/data_pipeline.py +0 -0
  119. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/services/health.py +0 -0
  120. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/services/lsh_client.py +0 -0
  121. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/services/manager.py +0 -0
  122. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/services/redis_service.py +0 -0
  123. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/services/registry.py +0 -0
  124. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/services/state.py +0 -0
  125. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/services/supervisor.py +0 -0
  126. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/shell/__init__.py +0 -0
  127. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/shell/exceptions.py +0 -0
  128. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/shell/shell.py +0 -0
  129. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/templates/__init__.py +0 -0
  130. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/templates/command_templates.py +0 -0
  131. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/toml/__init__.py +0 -0
  132. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/toml/toml.py +0 -0
  133. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/types.py +0 -0
  134. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/ui/styling.py +0 -0
  135. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/ui/visual_effects.py +0 -0
  136. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/watcher/__init__.py +0 -0
  137. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/watcher/watcher.py +0 -0
  138. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/workflow_models.py +0 -0
  139. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/lib/workspace_registry.py +0 -0
  140. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/mygroup/__init__.py +0 -0
  141. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/mygroup/test_cmd.py +0 -0
  142. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/public/__init__.py +0 -0
  143. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/public/commands/__init__.py +0 -0
  144. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/public/oi/oi.py +0 -0
  145. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/public/public.py +0 -0
  146. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/self/__init__.py +0 -0
  147. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/self/completion_cmd.py +0 -0
  148. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/self/env_cmd.py +0 -0
  149. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/self/health_cmd.py +0 -0
  150. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/self/ipfs_cmd.py +0 -0
  151. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/self/logs_cmd.py +0 -0
  152. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/self/migrate_cmd.py +0 -0
  153. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/self/release_notes_cmd.py +0 -0
  154. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/self/self_cmd.py +0 -0
  155. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/self/store_cmd.py +0 -0
  156. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/self/test_cmd.py +0 -0
  157. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/self/workflows_cmd.py +0 -0
  158. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/storage/__init__.py +0 -0
  159. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/storage/backends/__init__.py +0 -0
  160. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/storage/backends/ipfs_backend.py +0 -0
  161. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/storage/base.py +0 -0
  162. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/storage/cache.py +0 -0
  163. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/storage/encryption.py +0 -0
  164. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/storage/factory.py +0 -0
  165. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/storage/registry.py +0 -0
  166. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/storage/storacha_cli.py +0 -0
  167. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/workflow/__init__.py +0 -0
  168. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/workflow/daemon/__init__.py +0 -0
  169. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/workflow/daemon/async_command_database.py +0 -0
  170. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/workflow/daemon/async_process_manager.py +0 -0
  171. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/workflow/daemon/client.py +0 -0
  172. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/workflow/daemon/daemon.py +0 -0
  173. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/workflow/daemon/daemon_api.py +0 -0
  174. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/workflow/daemon/enhanced_daemon.py +0 -0
  175. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/workflow/daemon/process_cli.py +0 -0
  176. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/workflow/daemon/process_manager.py +0 -0
  177. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/workflow/daemon/test_daemon.py +0 -0
  178. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/workflow/doc_convert.py +0 -0
  179. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/workflow/docker/__init__.py +0 -0
  180. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/workflow/docker/docker.py +0 -0
  181. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/workflow/file/__init__.py +0 -0
  182. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/workflow/gcloud/__init__.py +0 -0
  183. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/workflow/gcloud/config.toml +0 -0
  184. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/workflow/gcloud/gcloud.py +0 -0
  185. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/workflow/git_commit/__init__.py +0 -0
  186. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/workflow/git_commit/ai_service.py +0 -0
  187. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/workflow/interview/__init__.py +0 -0
  188. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/workflow/lsh_integration.py +0 -0
  189. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/workflow/model_service/client.py +0 -0
  190. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/workflow/model_service/download_and_run_efficient_models.py +0 -0
  191. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/workflow/model_service/lightweight_embedder.py +0 -0
  192. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/workflow/model_service/lightweight_model_server.py +0 -0
  193. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/workflow/model_service/lightweight_test.py +0 -0
  194. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/workflow/model_service/model_service.py +0 -0
  195. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/workflow/model_service/ollama_efficient_runner.py +0 -0
  196. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/workflow/model_service/openai_adapter.py +0 -0
  197. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/workflow/model_service/pdf_processor.py +0 -0
  198. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/workflow/model_service/test_efficient_runner.py +0 -0
  199. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/workflow/model_service/test_example.py +0 -0
  200. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/workflow/model_service/test_integration.py +0 -0
  201. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/workflow/model_service/test_new_features.py +0 -0
  202. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/workflow/notebook/__init__.py +0 -0
  203. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/workflow/notebook/command_loader.py +0 -0
  204. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/workflow/notebook/converter.py +0 -0
  205. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/workflow/notebook/executor.py +0 -0
  206. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/workflow/notebook/notebook_cmd.py +0 -0
  207. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/workflow/notebook/schema.py +0 -0
  208. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/workflow/notebook/validator.py +0 -0
  209. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/workflow/openai/openai.py +0 -0
  210. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/workflow/registry/__init__.py +0 -0
  211. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/workflow/registry/registry.py +0 -0
  212. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/workflow/repo/__init__.py +0 -0
  213. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/workflow/repo/repo.py +0 -0
  214. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/workflow/scheduler/__init__.py +0 -0
  215. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/workflow/scheduler/cron_parser.py +0 -0
  216. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/workflow/scheduler/job.py +0 -0
  217. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/workflow/scheduler/models.py +0 -0
  218. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/workflow/scheduler/monitor.py +0 -0
  219. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/workflow/scheduler/persistence.py +0 -0
  220. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/workflow/scheduler/scheduler.py +0 -0
  221. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/workflow/scheduler/validation.py +0 -0
  222. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/workflow/search/__init__.py +0 -0
  223. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/workflow/secrets/__init__.py +0 -0
  224. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/workflow/secrets/secrets_cmd.py +0 -0
  225. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/workflow/storage/__init__.py +0 -0
  226. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/workflow/storage/storage_cmd.py +0 -0
  227. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/workflow/sync/__init__.py +0 -0
  228. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/workflow/sync/test_cmd.py +0 -0
  229. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/workflow/videos/__init__.py +0 -0
  230. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/workflow/wakatime/__init__.py +0 -0
  231. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/workflow/wakatime/wakatime.py +0 -0
  232. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli/workflow/workflow.py +0 -0
  233. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli_framework.egg-info/dependency_links.txt +0 -0
  234. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli_framework.egg-info/entry_points.txt +0 -0
  235. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli_framework.egg-info/requires.txt +0 -0
  236. {mcli_framework-8.0.46 → mcli_framework-8.0.47}/src/mcli_framework.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mcli-framework
3
- Version: 8.0.46
3
+ Version: 8.0.47
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.46"
3
+ version = "8.0.47"
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"
@@ -7,6 +7,7 @@ Provides:
7
7
  """
8
8
 
9
9
  import json
10
+ import os
10
11
  import shutil
11
12
  import subprocess
12
13
  import sys
@@ -832,3 +833,111 @@ def sync_info(is_global: bool):
832
833
  else:
833
834
  console.print(" Installed: No")
834
835
  console.print(" [dim]Install with: brew install ipfs[/dim]")
836
+
837
+
838
+ @sync_group.group(name="key")
839
+ def sync_key_group():
840
+ """🔑 Manage the persistent IPNS sync key.
841
+
842
+ Generates / shows / sets / clears the shared secret used to derive
843
+ a deterministic IPNS name for cross-host workflow sync. The
844
+ ``MCLI_SYNC_KEY`` environment variable, if set, always wins over
845
+ the on-disk value.
846
+ """
847
+
848
+
849
+ def _mask_key(key: str) -> str:
850
+ if len(key) <= 12:
851
+ return "*" * len(key)
852
+ return f"{key[:4]}...{key[-4:]}"
853
+
854
+
855
+ @sync_key_group.command(name="gen")
856
+ @click.option("--force", "-f", is_flag=True, help="Overwrite an existing key")
857
+ @click.option("--show", is_flag=True, help="Print the full key (default masks it)")
858
+ def sync_key_gen(force: bool, show: bool):
859
+ """Generate and persist a new 64-char hex sync key.
860
+
861
+ Examples:
862
+ mcli sync key gen
863
+ mcli sync key gen --show
864
+ mcli sync key gen --force --show
865
+ """
866
+ from mcli.lib.sync_key_store import SyncKeyStore
867
+
868
+ store = SyncKeyStore()
869
+ try:
870
+ key = store.generate(force=force)
871
+ except FileExistsError:
872
+ error("A sync key is already configured.")
873
+ info("Use --force to overwrite, or 'mcli sync key show' to view it.")
874
+ return 1
875
+
876
+ success(f"Generated sync key at {store.path}")
877
+ if show:
878
+ console.print(f"[bold cyan]{key}[/bold cyan]")
879
+ else:
880
+ console.print(f"[dim]Key: {_mask_key(key)} (use --show to print full)[/dim]")
881
+ console.print(
882
+ "[dim]Share this key with teammates / your other hosts. "
883
+ "Then run `mcli sync key set <key>` on each peer.[/dim]"
884
+ )
885
+ return 0
886
+
887
+
888
+ @sync_key_group.command(name="set")
889
+ @click.argument("key")
890
+ def sync_key_set(key: str):
891
+ """Persist an existing 64-char hex sync key.
892
+
893
+ Use this on a second host after copying the key generated on the
894
+ first.
895
+ """
896
+ from mcli.lib.sync_key_store import SyncKeyStore
897
+
898
+ try:
899
+ SyncKeyStore().set(key.strip())
900
+ except ValueError as exc:
901
+ error(str(exc))
902
+ return 1
903
+ success("Sync key stored.")
904
+ return 0
905
+
906
+
907
+ @sync_key_group.command(name="show")
908
+ @click.option("--reveal", is_flag=True, help="Print the full key (default masks it)")
909
+ def sync_key_show(reveal: bool):
910
+ """Show the currently configured sync key (masked unless --reveal)."""
911
+ from mcli.lib.sync_key_store import SyncKeyStore
912
+
913
+ env_value = os.environ.get("MCLI_SYNC_KEY")
914
+ stored = SyncKeyStore().get()
915
+
916
+ if not env_value and not stored:
917
+ info("No sync key configured.")
918
+ console.print("[dim]Generate one with: mcli sync key gen[/dim]")
919
+ return 1
920
+
921
+ if env_value:
922
+ label = "MCLI_SYNC_KEY env var (overrides on-disk value)"
923
+ value = env_value
924
+ else:
925
+ label = "stored at " + str(SyncKeyStore().path)
926
+ value = stored
927
+
928
+ console.print(f"[bold]Source:[/bold] {label}")
929
+ console.print(f"[bold]Key:[/bold] [cyan]{value if reveal else _mask_key(value)}[/cyan]")
930
+ if not reveal:
931
+ console.print("[dim]Use --reveal to print the full key.[/dim]")
932
+ return 0
933
+
934
+
935
+ @sync_key_group.command(name="clear")
936
+ @click.confirmation_option(prompt="Remove the stored sync key?")
937
+ def sync_key_clear():
938
+ """Delete the persisted sync key (env var, if set, is untouched)."""
939
+ from mcli.lib.sync_key_store import SyncKeyStore
940
+
941
+ SyncKeyStore().clear()
942
+ success("Stored sync key removed.")
943
+ return 0
@@ -174,8 +174,23 @@ def resolve_ipns(ipns_name: str) -> Optional[str]:
174
174
 
175
175
 
176
176
  def get_sync_key() -> Optional[str]:
177
- """Return the MCLI_SYNC_KEY environment variable, or None if unset."""
178
- return os.environ.get(EnvVars.MCLI_SYNC_KEY) or None
177
+ """Return the active sync key.
178
+
179
+ Resolution order:
180
+ 1. ``MCLI_SYNC_KEY`` environment variable (lets users override per-shell).
181
+ 2. The persistent on-disk store at ``$MCLI_HOME/sync_key.json``.
182
+
183
+ Returns ``None`` when neither source has a value.
184
+ """
185
+ env_key = os.environ.get(EnvVars.MCLI_SYNC_KEY)
186
+ if env_key:
187
+ return env_key
188
+
189
+ # Lazy import to avoid a hard dependency cycle if the store module is
190
+ # ever extended to read IPNS state.
191
+ from mcli.lib.sync_key_store import SyncKeyStore
192
+
193
+ return SyncKeyStore().get()
179
194
 
180
195
 
181
196
  def get_repo_name() -> str:
@@ -0,0 +1,69 @@
1
+ """Persistent storage for the shared workflow sync key.
2
+
3
+ The store keeps a 64-character hex secret on disk so users do not have
4
+ to ``export MCLI_SYNC_KEY=...`` in every shell. The env var still wins
5
+ when set — see :func:`mcli.lib.ipns_manager.get_sync_key`.
6
+
7
+ File: ``$MCLI_HOME/sync_key.json`` (default ``~/.mcli/sync_key.json``)
8
+ mode 0600. JSON shape: ``{"key": "<64 hex chars>"}``.
9
+ """
10
+
11
+ from __future__ import annotations
12
+
13
+ import json
14
+ import os
15
+ import re
16
+ import secrets
17
+ from pathlib import Path
18
+ from typing import Optional
19
+
20
+ from mcli.lib.paths import get_mcli_home
21
+
22
+ _FILENAME = "sync_key.json"
23
+ _HEX64 = re.compile(r"^[0-9a-fA-F]{64}$")
24
+
25
+
26
+ class SyncKeyStore:
27
+ """Read/write the persistent sync key on disk."""
28
+
29
+ @property
30
+ def path(self) -> Path:
31
+ return get_mcli_home() / _FILENAME
32
+
33
+ def get(self) -> Optional[str]:
34
+ path = self.path
35
+ if not path.is_file():
36
+ return None
37
+ try:
38
+ data = json.loads(path.read_text())
39
+ except (json.JSONDecodeError, OSError):
40
+ return None
41
+ key = data.get("key")
42
+ return key if isinstance(key, str) and _HEX64.match(key) else None
43
+
44
+ def set(self, key: str) -> None:
45
+ if not isinstance(key, str) or not _HEX64.match(key):
46
+ raise ValueError("sync key must be a 64-char hex string")
47
+ self._write(key)
48
+
49
+ def generate(self, force: bool = False) -> str:
50
+ if self.path.exists() and not force:
51
+ raise FileExistsError(
52
+ f"sync key already exists at {self.path}; use force=True to overwrite"
53
+ )
54
+ key = secrets.token_hex(32)
55
+ self._write(key)
56
+ return key
57
+
58
+ def clear(self) -> None:
59
+ try:
60
+ self.path.unlink()
61
+ except FileNotFoundError:
62
+ pass
63
+
64
+ def _write(self, key: str) -> None:
65
+ path = self.path
66
+ path.parent.mkdir(parents=True, exist_ok=True)
67
+ # Write then chmod so the secret is never world-readable.
68
+ path.write_text(json.dumps({"key": key}))
69
+ os.chmod(path, 0o600)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mcli-framework
3
- Version: 8.0.46
3
+ Version: 8.0.47
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>
@@ -53,6 +53,7 @@ src/mcli/lib/paths.py
53
53
  src/mcli/lib/script_loader.py
54
54
  src/mcli/lib/script_sync.py
55
55
  src/mcli/lib/script_watcher.py
56
+ src/mcli/lib/sync_key_store.py
56
57
  src/mcli/lib/types.py
57
58
  src/mcli/lib/workflow_models.py
58
59
  src/mcli/lib/workspace_registry.py
File without changes