py-wlcli 0.8.0__tar.gz → 0.8.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.
Files changed (323) hide show
  1. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/PKG-INFO +1 -1
  2. py_wlcli-0.8.1/VERSION +1 -0
  3. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/capabilities.py +1 -0
  4. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/cc/checks.py +105 -19
  5. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/cc/cli.py +1 -1
  6. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/cc/mutate.py +18 -27
  7. py_wlcli-0.8.0/VERSION +0 -1
  8. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/.gitignore +0 -0
  9. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/LICENSE +0 -0
  10. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/README.md +0 -0
  11. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/pyproject.toml +0 -0
  12. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/__init__.py +0 -0
  13. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/__init__.py +0 -0
  14. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/__main__.py +0 -0
  15. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/cc/__init__.py +0 -0
  16. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/cli_click.py +0 -0
  17. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/__init__.py +0 -0
  18. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/base.py +0 -0
  19. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/buildcommands/__init__.py +0 -0
  20. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/buildcommands/build.py +0 -0
  21. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/buildcommands/build_utils.py +0 -0
  22. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/buildcommands/builders/__init__.py +0 -0
  23. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/buildcommands/builders/cleanup.py +0 -0
  24. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/buildcommands/builders/coordinator.py +0 -0
  25. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/buildcommands/builders/environment.py +0 -0
  26. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/buildcommands/builders/rust_builder.py +0 -0
  27. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/buildcommands/builders/stubs.py +0 -0
  28. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/buildcommands/dist.py +0 -0
  29. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/buildcommands/test.py +0 -0
  30. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/clean/__init__.py +0 -0
  31. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/clean/build.py +0 -0
  32. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/clean/clean.py +0 -0
  33. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/clean/clean_utils.py +0 -0
  34. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/clean/core.py +0 -0
  35. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/clean/dead_code/__init__.py +0 -0
  36. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/clean/dead_code/dead_code_command.py +0 -0
  37. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/clean/dead_code/detector.py +0 -0
  38. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/clean/dead_code/fixer.py +0 -0
  39. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/clean/dead_code/reporter.py +0 -0
  40. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/clean/dead_code/utils.py +0 -0
  41. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/clean/lfs.py +0 -0
  42. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/clean/python.py +0 -0
  43. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/clean/rust.py +0 -0
  44. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/clean/utils/__init__.py +0 -0
  45. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/clean/venv.py +0 -0
  46. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/cleanup.py +0 -0
  47. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/click_base.py +0 -0
  48. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/config/__init__.py +0 -0
  49. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/config/config.py +0 -0
  50. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/debug/__init__.py +0 -0
  51. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/debug/debug.py +0 -0
  52. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/debug/debug_cache.py +0 -0
  53. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/debug/debug_subagent.py +0 -0
  54. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/debug/output_formatter.py +0 -0
  55. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/debug/source_hasher.py +0 -0
  56. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/format/__init__.py +0 -0
  57. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/format/format_cache_adapter.py +0 -0
  58. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/format/format_command.py +0 -0
  59. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/format/format_coordinator.py +0 -0
  60. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/format/format_executor.py +0 -0
  61. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/format/format_outcome.py +0 -0
  62. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/format/format_path_handler.py +0 -0
  63. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/format/format_progress.py +0 -0
  64. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/format/format_reporter.py +0 -0
  65. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/format/python_formatter.py +0 -0
  66. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/format/rust_formatter.py +0 -0
  67. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/gate/__init__.py +0 -0
  68. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/gate/gate_command.py +0 -0
  69. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/gate/preflight.py +0 -0
  70. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/git/__init__.py +0 -0
  71. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/git/config.py +0 -0
  72. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/git/git_facts.py +0 -0
  73. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/git/git_flow.py +0 -0
  74. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/git/hook.py +0 -0
  75. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/git/policy.py +0 -0
  76. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/git/push_update.py +0 -0
  77. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/initenv/__init__.py +0 -0
  78. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/initenv/common/__init__.py +0 -0
  79. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/initenv/common/check_git_bash.py +0 -0
  80. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/initenv/common/error_handler.py +0 -0
  81. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/initenv/common/exceptions.py +0 -0
  82. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/initenv/components/__init__.py +0 -0
  83. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/initenv/components/cargo_sync.py +0 -0
  84. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/initenv/components/config_manager.py +0 -0
  85. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/initenv/components/directory_utils.py +0 -0
  86. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/initenv/components/git/__init__.py +0 -0
  87. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/initenv/components/git/branch_creator.py +0 -0
  88. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/initenv/components/git/git_flow_interface.py +0 -0
  89. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/initenv/components/git/git_flow_manager.py +0 -0
  90. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/initenv/components/git/git_lfs_manager.py +0 -0
  91. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/initenv/components/git/git_utility.py +0 -0
  92. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/initenv/components/git/gitignore_manager.py +0 -0
  93. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/initenv/components/git_initializer.py +0 -0
  94. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/initenv/components/i18n_manager.py +0 -0
  95. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/initenv/components/log_manager.py +0 -0
  96. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/initenv/components/project_structure/__init__.py +0 -0
  97. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/initenv/components/project_structure/config_generator.py +0 -0
  98. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/initenv/components/project_structure/directory_creator.py +0 -0
  99. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/initenv/components/project_structure/hook_source.py +0 -0
  100. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/initenv/components/project_structure/hooks_manager.py +0 -0
  101. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/initenv/components/project_structure/readme_handler.py +0 -0
  102. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/initenv/components/project_structure/rust_files_handler.py +0 -0
  103. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/initenv/components/project_structure/setup_handler.py +0 -0
  104. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/initenv/components/project_structure/sop_generator.py +0 -0
  105. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/initenv/components/project_structure/template_copier.py +0 -0
  106. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/initenv/components/project_structure/template_manager.py +0 -0
  107. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/initenv/components/pyproject_generator.py +0 -0
  108. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/initenv/components/rust_initializer.py +0 -0
  109. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/initenv/components/symlink_cleaner.py +0 -0
  110. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/initenv/components/symlink_manager.py +0 -0
  111. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/initenv/components/venv_manager.py +0 -0
  112. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/initenv/initenv.py +0 -0
  113. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/initenv/services/__init__.py +0 -0
  114. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/initenv/services/environment_initializer.py +0 -0
  115. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/initenv/services/git_lfs_initializer.py +0 -0
  116. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/initenv/services/project_structure_initializer.py +0 -0
  117. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/lfs/README.md +0 -0
  118. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/lfs/__init__.py +0 -0
  119. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/lfs/cli.py +0 -0
  120. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/lfs/config.py +0 -0
  121. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/lfs/hook.py +0 -0
  122. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/lfs/initializer.py +0 -0
  123. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/lfs/manager.py +0 -0
  124. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/lfs/policy.py +0 -0
  125. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/lfs/watcher.py +0 -0
  126. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/lint/__init__.py +0 -0
  127. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/lint/lint_command.py +0 -0
  128. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/lint/lint_executor.py +0 -0
  129. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/lint/lint_reporter.py +0 -0
  130. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/lint/lint_run.py +0 -0
  131. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/lint/mypy_config.py +0 -0
  132. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/registry.py +0 -0
  133. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/self/__init__.py +0 -0
  134. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/self/common/__init__.py +0 -0
  135. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/self/common/capabilities.py +0 -0
  136. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/self/common/config.py +0 -0
  137. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/self/common/version_cache.py +0 -0
  138. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/self/handlers/__init__.py +0 -0
  139. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/self/handlers/base_handler.py +0 -0
  140. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/self/handlers/install_handler.py +0 -0
  141. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/self/handlers/status_handler.py +0 -0
  142. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/self/handlers/uninstall_handler.py +0 -0
  143. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/self/handlers/update_handler.py +0 -0
  144. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/self/handlers/version_handler.py +0 -0
  145. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/self/self_command.py +0 -0
  146. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/self/services/__init__.py +0 -0
  147. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/self/services/installation_manager.py +0 -0
  148. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/self/services/local_installer.py +0 -0
  149. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/self/services/pypi_updater.py +0 -0
  150. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/self/services/windows_update.py +0 -0
  151. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/testcommands/__init__.py +0 -0
  152. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/testcommands/base_dependency_analyzer.py +0 -0
  153. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/testcommands/batch_processor.py +0 -0
  154. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/testcommands/cache_manager.py +0 -0
  155. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/testcommands/coverage_analyzer.py +0 -0
  156. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/testcommands/coverage_cache_manager.py +0 -0
  157. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/testcommands/progress_manager.py +0 -0
  158. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/testcommands/python_env_detector.py +0 -0
  159. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/testcommands/report_generator.py +0 -0
  160. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/testcommands/single_test_executor.py +0 -0
  161. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/testcommands/speed_checker.py +0 -0
  162. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/testcommands/test_command_builder.py +0 -0
  163. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/testcommands/test_commands.py +0 -0
  164. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/testcommands/test_reporter.py +0 -0
  165. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/testcommands/test_result_handler.py +0 -0
  166. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/testcommands/test_runner.py +0 -0
  167. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/testcommands/test_utils.py +0 -0
  168. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/testcommands/utils/__init__.py +0 -0
  169. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/testcommands/utils/coverage_parser.py +0 -0
  170. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/testcommands/utils/env_info.py +0 -0
  171. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/testcommands/utils/junit_parser.py +0 -0
  172. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/testcommands/utils/markdown_utils.py +0 -0
  173. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/testcommands/utils/project_root.py +0 -0
  174. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/update/__init__.py +0 -0
  175. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/update/services/__init__.py +0 -0
  176. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/update/services/backup_manager.py +0 -0
  177. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/update/services/component_manager.py +0 -0
  178. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/update/services/conflict_resolver.py +0 -0
  179. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/update/services/vendors_updater.py +0 -0
  180. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/update/services/version_tracker.py +0 -0
  181. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/update/update_command.py +0 -0
  182. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/update/utils/__init__.py +0 -0
  183. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/version/__init__.py +0 -0
  184. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/version/version_command.py +0 -0
  185. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/workflow.py +0 -0
  186. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/env/__init__.py +0 -0
  187. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/env/cli.py +0 -0
  188. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/env_status.py +0 -0
  189. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/envelope.py +0 -0
  190. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/exceptions.py +0 -0
  191. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/lib/__init__.py +0 -0
  192. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/lib/rust_utils.py +0 -0
  193. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/mcp/__init__.py +0 -0
  194. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/mcp/capabilities.py +0 -0
  195. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/mcp/cli.py +0 -0
  196. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/mcp/gitlab.py +0 -0
  197. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/mcp/k8s.py +0 -0
  198. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/mcp/protocol.py +0 -0
  199. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/platform.py +0 -0
  200. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/quality/__init__.py +0 -0
  201. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/__init__.py +0 -0
  202. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/cache.py +0 -0
  203. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/cache_ledger.py +0 -0
  204. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/cache_store.py +0 -0
  205. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/config/__init__.py +0 -0
  206. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/config/config_loader.py +0 -0
  207. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/config/core.py +0 -0
  208. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/config/defaults.py +0 -0
  209. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/config/env_exporter.py +0 -0
  210. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/config/env_parser.py +0 -0
  211. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/config/validation.py +0 -0
  212. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/error_handler.py +0 -0
  213. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/file_copier.py +0 -0
  214. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/file_operations.py +0 -0
  215. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/language_utils.py +0 -0
  216. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/lazy_import.py +0 -0
  217. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/log_levels.py +0 -0
  218. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/log_rotators.py +0 -0
  219. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/logging.py +0 -0
  220. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/output_context.py +0 -0
  221. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/performance/__init__.py +0 -0
  222. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/performance/decorators.py +0 -0
  223. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/performance/exporter.py +0 -0
  224. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/performance/models.py +0 -0
  225. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/performance/monitor.py +0 -0
  226. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/performance_monitor.py +0 -0
  227. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/platform_adapter.py +0 -0
  228. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/pre_commit.py +0 -0
  229. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/pre_commit_config.py +0 -0
  230. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/root.py +0 -0
  231. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/root_fallback.py +0 -0
  232. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/run_evidence.py +0 -0
  233. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/structured_logger.py +0 -0
  234. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/structured_logging/__init__.py +0 -0
  235. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/structured_logging/config.py +0 -0
  236. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/structured_logging/core.py +0 -0
  237. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/structured_logging/env.py +0 -0
  238. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/structured_logging/filtering.py +0 -0
  239. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/structured_logging/filters.py +0 -0
  240. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/structured_logging/formatters.py +0 -0
  241. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/structured_logging/handlers.py +0 -0
  242. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/structured_logging/logger.py +0 -0
  243. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/subprocess.py +0 -0
  244. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/subprocess_utils.py +0 -0
  245. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/test_utils/__init__.py +0 -0
  246. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/test_utils/test_filter.py +0 -0
  247. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/uv_run.py +0 -0
  248. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/uv_tool.py +0 -0
  249. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/uv_tree.py +0 -0
  250. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/uv_workspace.py +0 -0
  251. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/version/__init__.py +0 -0
  252. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/version/pypi_version_checker.py +0 -0
  253. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/version/version_comparator.py +0 -0
  254. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/version/version_detectors.py +0 -0
  255. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/version/version_service.py +0 -0
  256. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/version/version_updater.py +0 -0
  257. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/wl_dir_updater.py +0 -0
  258. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/workspace_detector/__init__.py +0 -0
  259. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/workspace_detector/core.py +0 -0
  260. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/workspace_detector/detection_strategies.py +0 -0
  261. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/workspace_detector/exceptions.py +0 -0
  262. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/workspace_detector/types.py +0 -0
  263. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/workspace_detector/venv_resolver.py +0 -0
  264. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/config/.codespellrc +0 -0
  265. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/config/dependencies.toml +0 -0
  266. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/config/mypy.ini +0 -0
  267. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/config/pyproject_defaults.toml +0 -0
  268. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/config/template_config.toml +0 -0
  269. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/config/tool_configs.toml +0 -0
  270. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/git/.gitignore +0 -0
  271. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/git/.pre-commit-config.yaml +0 -0
  272. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/hooks/applypatch-msg.sample +0 -0
  273. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/hooks/commit-msg.sample +0 -0
  274. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/hooks/fsmonitor-watchman.sample +0 -0
  275. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/hooks/post-update.sample +0 -0
  276. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/hooks/pre-applypatch.sample +0 -0
  277. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/hooks/pre-commit +0 -0
  278. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/hooks/pre-commit.legacy +0 -0
  279. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/hooks/pre-commit.sample +0 -0
  280. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/hooks/pre-merge-commit.sample +0 -0
  281. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/hooks/pre-push.sample +0 -0
  282. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/hooks/pre-rebase.sample +0 -0
  283. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/hooks/pre-receive.sample +0 -0
  284. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/hooks/prepare-commit-msg.sample +0 -0
  285. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/hooks/push-to-checkout.sample +0 -0
  286. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/hooks/sendemail-validate.sample +0 -0
  287. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/hooks/unix/applypatch-msg.sample +0 -0
  288. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/hooks/unix/check_lockfile.py +0 -0
  289. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/hooks/unix/check_lockfile.sh +0 -0
  290. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/hooks/unix/commit-msg.sample +0 -0
  291. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/hooks/unix/fsmonitor-watchman.sample +0 -0
  292. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/hooks/unix/post-update.sample +0 -0
  293. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/hooks/unix/pre-applypatch.sample +0 -0
  294. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/hooks/unix/pre-commit +0 -0
  295. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/hooks/unix/pre-commit.legacy +0 -0
  296. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/hooks/unix/pre-commit.py +0 -0
  297. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/hooks/unix/pre-commit.sample +0 -0
  298. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/hooks/unix/pre-merge-commit.sample +0 -0
  299. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/hooks/unix/pre-push +0 -0
  300. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/hooks/unix/pre-push.sample +0 -0
  301. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/hooks/unix/pre-rebase.sample +0 -0
  302. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/hooks/unix/pre-receive.sample +0 -0
  303. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/hooks/unix/prepare-commit-msg.sample +0 -0
  304. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/hooks/update.sample +0 -0
  305. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/hooks/win/work.bat +0 -0
  306. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/project/.gitignore +0 -0
  307. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/project/.python-version +0 -0
  308. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/project/LICENSE +0 -0
  309. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/project/README.md +0 -0
  310. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/project/pyproject.toml +0 -0
  311. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/project/pyproject_no_workspace.toml +0 -0
  312. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/project/pyproject_workspace.toml +0 -0
  313. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/readme/README.md +0 -0
  314. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/rust/Cargo.toml +0 -0
  315. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/rust/lib/__init__.py +0 -0
  316. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/rust/lib/rust_utils.py +0 -0
  317. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/rust/src/lib.rs +0 -0
  318. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/rust/src/main.rs +0 -0
  319. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/rust/tests/test_rust_fallback.py +0 -0
  320. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/sop_doc/git-dev-sop.md +0 -0
  321. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/sop_doc/industrial-standard-sop.md +0 -0
  322. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/sop_doc/python-sop.md +0 -0
  323. {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/sop_doc/rust-readme.md +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: py_wlcli
3
- Version: 0.8.0
3
+ Version: 0.8.1
4
4
  Summary: wl_cli - Python项目
5
5
  Project-URL: Homepage, https://gitlab.gewinnrobo.com/Humuyuan/wl-cli
6
6
  Project-URL: Issues, https://gitlab.gewinnrobo.com/Humuyuan/wl-cli/-/issues
py_wlcli-0.8.1/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.8.1
@@ -46,6 +46,7 @@ CAPABILITY_SINCE: dict[str, str] = {
46
46
  "env.repair": "0.8.0",
47
47
  "mcp.gitlab": "0.8.0",
48
48
  "mcp.k8s": "0.8.0",
49
+ "mcp.serve": "0.8.1",
49
50
  "test.clean_cache": "0.7.0",
50
51
  }
51
52
 
@@ -15,7 +15,7 @@ the ticket cannot drift from the implementation:
15
15
  section wlcc source
16
16
  =========== ============================================================
17
17
  plugins §1 required plugins + §7 context-mode (optional plugin)
18
- mcp §3 plugin root, version stamp and interpreter visibility
18
+ mcp §3 registered wl command, version stamp, interpreter visibility
19
19
  settings §5 gstack + §6 claude-mem (host-side configuration)
20
20
  stamps §8 stamp registry (report only -- never delete)
21
21
  hooks §9 dangling hook commands (read-only plan)
@@ -98,6 +98,20 @@ RETIRED_STAMPS = frozenset({"gemini-key.enc", "mcp-visionary-pending"})
98
98
  #: MCP servers check.sh §3 registers.
99
99
  MCP_SERVERS: tuple[str, ...] = ("gitlab", "k8s-diagnose")
100
100
 
101
+ #: Registered server name -> ``wl mcp serve`` subcommand (#228). The server
102
+ #: names are the stable interface (tool schema and existing user config); only
103
+ #: the execution path moved from the plugin's ``mcp-tools/server.py`` to the
104
+ #: wl CLI. ``k8s-diagnose`` keeps its name but serves ``wl mcp serve k8s``.
105
+ MCP_SERVE_ARGS: dict[str, str] = {
106
+ "gitlab": "gitlab",
107
+ "k8s-diagnose": "k8s",
108
+ }
109
+
110
+ #: Capability the ``wl`` on ``PATH`` must advertise before a registration argv
111
+ #: counts as verifiable (#228). Consumers (wlcc) use the same bit to decide
112
+ #: that registration goes through ``wl mcp serve``.
113
+ MCP_SERVE_CAPABILITY = "mcp.serve"
114
+
101
115
  #: Literal absolute path anchor from wlcc ``hooks-drift.py``: the dangling rule
102
116
  #: is exactly ``*/.claude/*``. Kept with the trailing slash on purpose.
103
117
  CLAUDE_SEG = "/.claude/"
@@ -475,7 +489,10 @@ def _interpreter_state(path: str, version: str, returncode: int) -> dict[str, An
475
489
 
476
490
 
477
491
  def _probe_python() -> dict[str, Any]:
478
- """Resolve the interpreter MCP servers will run under (check.sh §3).
492
+ """Report the interpreter check.sh §3 used to run the MCP servers under.
493
+
494
+ Since #228 the servers run under ``wl mcp serve`` and no interpreter is
495
+ part of the registered argv, so the result is informational only.
479
496
 
480
497
  ``uv --no-cache python find 3.12`` resolves a local installation without
481
498
  downloading and keeps its cache in a temporary directory for the duration
@@ -518,8 +535,88 @@ def _probe_python() -> dict[str, Any]:
518
535
  return _interpreter_state(path, probe.stdout.strip(), probe.returncode)
519
536
 
520
537
 
538
+ def _probe_wl_serve() -> dict[str, Any]:
539
+ """Probe the ``wl`` on ``PATH`` for the ``mcp.serve`` capability (#228).
540
+
541
+ The registration argv is ``<wl> mcp serve <sub>``, so the executable that
542
+ will be registered has to exist *and* advertise the capability. Asking it
543
+ for ``wl env check --json`` reads the same capability registry wlcc keys
544
+ off, instead of trusting the wl that happens to be running ``cc check``.
545
+ Every failure is a state value, never an exception.
546
+
547
+ Returns:
548
+ Fields ``path`` / ``state`` / ``version`` / ``capability``. ``state``
549
+ is ``ok:<version>`` when the capability is advertised, ``fail:absent``
550
+ when no ``wl`` is on ``PATH``, and ``fail:unusable`` /
551
+ ``fail:missing_capability`` (with a readable ``reason``) otherwise.
552
+ """
553
+ fields: dict[str, Any] = {
554
+ "path": None,
555
+ "state": "fail:absent",
556
+ "version": None,
557
+ "capability": MCP_SERVE_CAPABILITY,
558
+ }
559
+ wl = shutil.which("wl")
560
+ if wl is None:
561
+ return fields
562
+ fields["path"] = wl
563
+ try:
564
+ probe = subprocess.run(
565
+ [wl, "env", "check", "--json"],
566
+ capture_output=True,
567
+ text=True,
568
+ check=False,
569
+ timeout=30,
570
+ )
571
+ except (OSError, subprocess.SubprocessError) as exc:
572
+ fields.update(state="fail:unusable", reason=str(exc))
573
+ return fields
574
+ # ``env check`` exits 1 when the platform matrix says ``unverifiable`` but
575
+ # still emits the payload; parse first so a supported capability is not
576
+ # rejected because of an unrelated platform warning.
577
+ try:
578
+ payload = json.loads(probe.stdout)
579
+ except ValueError:
580
+ payload = None
581
+ if not isinstance(payload, dict):
582
+ fields.update(
583
+ state="fail:unusable",
584
+ reason=f"wl env check exited {probe.returncode} without a JSON payload",
585
+ )
586
+ return fields
587
+ version = payload.get("version")
588
+ fields["version"] = version if isinstance(version, str) else None
589
+ capabilities = payload.get("capabilities")
590
+ if isinstance(capabilities, list) and MCP_SERVE_CAPABILITY in capabilities:
591
+ fields["state"] = f"ok:{fields['version'] or 'unknown'}"
592
+ return fields
593
+ fields.update(
594
+ state="fail:missing_capability",
595
+ reason=f"{wl} does not advertise {MCP_SERVE_CAPABILITY}",
596
+ )
597
+ return fields
598
+
599
+
600
+ def _wl_reason(fields: dict[str, Any]) -> str:
601
+ """Return a readable reason for a ``wl`` probe that is not ``ok``."""
602
+ state = str(fields.get("state", ""))
603
+ if state == "fail:absent":
604
+ return "the wl CLI is not on PATH"
605
+ reason = fields.get("reason")
606
+ if isinstance(reason, str) and reason:
607
+ return reason
608
+ return f"the wl CLI on PATH is not usable ({state or 'unknown state'})"
609
+
610
+
521
611
  def probe_mcp(host: HostContext) -> dict[str, Any]:
522
- """§3: plugin-root trust, version stamp and interpreter visibility."""
612
+ """§3: the registration target, version stamp and interpreter visibility.
613
+
614
+ Since #228 the registered argv is ``<wl> mcp serve <sub>``: the probe
615
+ verifies that the ``wl`` on ``PATH`` exists and advertises ``mcp.serve``
616
+ instead of looking for a plugin-root ``mcp-tools/server.py``. The
617
+ interpreter probe stays a report field but can no longer gate the section
618
+ -- ``python`` is not part of the registered command any more.
619
+ """
523
620
  cache = _wlcc_cache(host)
524
621
  fields: dict[str, Any] = {
525
622
  "cache_root": str(cache),
@@ -528,6 +625,7 @@ def probe_mcp(host: HostContext) -> dict[str, Any]:
528
625
  "plugin_root": None,
529
626
  "rejected": False,
530
627
  "servers": list(MCP_SERVERS),
628
+ "wl": _probe_wl_serve(),
531
629
  "python": _probe_python(),
532
630
  }
533
631
  try:
@@ -552,17 +650,10 @@ def probe_mcp(host: HostContext) -> dict[str, Any]:
552
650
  fields["rejected"] = True
553
651
  return _result("unverifiable", root_error, **fields)
554
652
  fields["plugin_root"] = str(root)
555
- server = root / ".claude" / "mcp-tools" / "server.py"
556
- if server.is_symlink():
557
- fields["rejected"] = True
558
- return _result(
559
- "unverifiable", f"MCP server script is a symlink: {server}", **fields
560
- )
561
- if not server.is_file():
562
- fields["rejected"] = True
563
- return _result(
564
- "unverifiable", f"MCP server script is missing: {server}", **fields
565
- )
653
+
654
+ wl_state = str(fields["wl"].get("state", ""))
655
+ if not wl_state.startswith("ok:"):
656
+ return _result("unverifiable", _wl_reason(fields["wl"]), **fields)
566
657
 
567
658
  if registered != version:
568
659
  return _result(
@@ -571,11 +662,6 @@ def probe_mcp(host: HostContext) -> dict[str, Any]:
571
662
  "wl cc repair will re-register",
572
663
  **fields,
573
664
  )
574
- python_state = str(fields["python"].get("state", ""))
575
- if not python_state.startswith(("supplied:", "ok:")):
576
- return _result(
577
- "dangling", f"MCP interpreter is not usable: {python_state}", **fields
578
- )
579
665
  return _result("ok", None, **fields)
580
666
 
581
667
 
@@ -278,7 +278,7 @@ def mcp_ensure(as_json: bool) -> None:
278
278
  @mcp_group.command(name="list")
279
279
  @click.option("--json", "as_json", is_flag=True, help=_JSON_HELP)
280
280
  def mcp_list(as_json: bool) -> None:
281
- """Report the plugin root, interpreter, stamp and servers without writing."""
281
+ """Report the wl target, plugin root, interpreter, stamp and servers."""
282
282
  _run_single("cc mcp list", lambda: mutate.probe_section("mcp"), as_json)
283
283
 
284
284
 
@@ -488,22 +488,15 @@ def ensure_plugins() -> dict[str, Any]:
488
488
  # --------------------------------------------------------------------------- #
489
489
 
490
490
 
491
- def _mcp_script(plugin_root: Path, name: str) -> Path:
492
- """Return the registered server script for *name* under the plugin root."""
493
- tools = plugin_root / ".claude" / "mcp-tools"
494
- if name == "gitlab":
495
- return tools / "server.py"
496
- return tools / name / "server.py"
497
-
498
-
499
491
  def ensure_mcp() -> dict[str, Any]:
500
- """Re-register both MCP servers and write the version stamp only on success.
501
-
502
- A rejected plugin root or an unusable interpreter is reported as
503
- ``unverifiable`` and never registered -- the same closed set of states
504
- ``check.sh`` §3 uses. The stamp is the idempotency latch, so it is written
505
- only after *both* ``claude mcp add`` calls returned 0; one failure leaves
506
- the old stamp in place and the next run retries.
492
+ """Re-register both MCP servers as ``wl mcp serve`` and stamp on success.
493
+
494
+ Since #228 the registered argv is ``<wl> mcp serve <sub>`` -- the plugin
495
+ tree's ``mcp-tools/server.py`` is neither required nor kept as a fallback.
496
+ A rejected plugin root or a missing/unusable ``wl`` is reported as
497
+ ``unverifiable`` and never registered. The stamp is the idempotency latch,
498
+ so it is written only after *both* ``claude mcp add`` calls returned 0; one
499
+ failure leaves the old stamp in place and the next run retries.
507
500
  """
508
501
  before = checks.probe_mcp(checks.load_host_context())
509
502
  fields = _section_fields(before)
@@ -521,15 +514,12 @@ def ensure_mcp() -> dict[str, Any]:
521
514
  changed,
522
515
  **fields,
523
516
  )
524
- python = before.get("python")
525
- python_path = python.get("path") if isinstance(python, dict) else None
526
- python_state = python.get("state") if isinstance(python, dict) else None
527
- if not isinstance(python_path, str) or not str(python_state).startswith(
528
- ("supplied:", "ok:")
529
- ):
517
+ wl_probe = before.get("wl")
518
+ wl = wl_probe.get("path") if isinstance(wl_probe, dict) else None
519
+ if not isinstance(wl, str) or not wl:
530
520
  return _result(
531
521
  "unverifiable",
532
- f"MCP interpreter is not usable: {python_state}",
522
+ before.get("reason") or "the wl CLI is not on PATH",
533
523
  changed,
534
524
  **fields,
535
525
  )
@@ -541,9 +531,8 @@ def ensure_mcp() -> dict[str, Any]:
541
531
  )
542
532
 
543
533
  failures: list[str] = []
544
- root = Path(plugin_root)
545
534
  for name in checks.MCP_SERVERS:
546
- script = str(_mcp_script(root, name))
535
+ subcommand = checks.MCP_SERVE_ARGS[name]
547
536
  try:
548
537
  _run([claude, "mcp", "remove", name])
549
538
  proc = _run(
@@ -556,15 +545,17 @@ def ensure_mcp() -> dict[str, Any]:
556
545
  "-s",
557
546
  "user",
558
547
  "--",
559
- python_path,
560
- script,
548
+ wl,
549
+ "mcp",
550
+ "serve",
551
+ subcommand,
561
552
  ]
562
553
  )
563
554
  except (OSError, subprocess.SubprocessError) as exc:
564
555
  failures.append(f"{name}: {exc}")
565
556
  continue
566
557
  if proc.returncode == 0:
567
- changed.append(f"mcp: registered {name} -> {script}")
558
+ changed.append(f"mcp: registered {name} -> {wl} mcp serve {subcommand}")
568
559
  else:
569
560
  failures.append(f"{name}: {_failure(proc)}")
570
561
 
py_wlcli-0.8.0/VERSION DELETED
@@ -1 +0,0 @@
1
- 0.8.0
File without changes
File without changes
File without changes
File without changes
File without changes