py-wlcli 0.7.0__tar.gz → 0.8.0__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 (331) hide show
  1. py_wlcli-0.8.0/.gitignore +116 -0
  2. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/PKG-INFO +47 -33
  3. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/README.md +22 -7
  4. py_wlcli-0.8.0/VERSION +1 -0
  5. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/pyproject.toml +30 -33
  6. py_wlcli-0.8.0/src/wl_cli/capabilities.py +79 -0
  7. py_wlcli-0.8.0/src/wl_cli/cc/__init__.py +5 -0
  8. py_wlcli-0.8.0/src/wl_cli/cc/checks.py +1019 -0
  9. py_wlcli-0.8.0/src/wl_cli/cc/cli.py +370 -0
  10. py_wlcli-0.8.0/src/wl_cli/cc/mutate.py +1350 -0
  11. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/cli_click.py +53 -2
  12. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/buildcommands/dist.py +39 -7
  13. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/format/python_formatter.py +17 -7
  14. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/registry.py +13 -2
  15. py_wlcli-0.8.0/src/wl_cli/commands/self/common/capabilities.py +30 -0
  16. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/self/self_command.py +14 -6
  17. py_wlcli-0.8.0/src/wl_cli/env/__init__.py +5 -0
  18. py_wlcli-0.8.0/src/wl_cli/env/cli.py +167 -0
  19. py_wlcli-0.8.0/src/wl_cli/env_status.py +157 -0
  20. py_wlcli-0.8.0/src/wl_cli/envelope.py +91 -0
  21. py_wlcli-0.8.0/src/wl_cli/mcp/__init__.py +6 -0
  22. py_wlcli-0.8.0/src/wl_cli/mcp/capabilities.py +19 -0
  23. py_wlcli-0.8.0/src/wl_cli/mcp/cli.py +22 -0
  24. py_wlcli-0.8.0/src/wl_cli/mcp/gitlab.py +553 -0
  25. py_wlcli-0.8.0/src/wl_cli/mcp/k8s.py +344 -0
  26. py_wlcli-0.8.0/src/wl_cli/mcp/protocol.py +159 -0
  27. py_wlcli-0.8.0/src/wl_cli/platform.py +139 -0
  28. py_wlcli-0.8.0/src/wl_cli/quality/__init__.py +18 -0
  29. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/vendors/hooks/applypatch-msg.sample +0 -0
  30. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/vendors/hooks/commit-msg.sample +0 -0
  31. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/vendors/hooks/fsmonitor-watchman.sample +0 -0
  32. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/vendors/hooks/post-update.sample +0 -0
  33. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/vendors/hooks/pre-applypatch.sample +0 -0
  34. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/vendors/hooks/pre-commit +0 -0
  35. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/vendors/hooks/pre-commit.legacy +0 -0
  36. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/vendors/hooks/pre-commit.sample +0 -0
  37. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/vendors/hooks/pre-merge-commit.sample +0 -0
  38. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/vendors/hooks/pre-push.sample +0 -0
  39. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/vendors/hooks/pre-rebase.sample +0 -0
  40. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/vendors/hooks/pre-receive.sample +0 -0
  41. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/vendors/hooks/prepare-commit-msg.sample +0 -0
  42. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/vendors/hooks/push-to-checkout.sample +0 -0
  43. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/vendors/hooks/sendemail-validate.sample +0 -0
  44. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/vendors/hooks/unix/applypatch-msg.sample +0 -0
  45. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/vendors/hooks/unix/commit-msg.sample +0 -0
  46. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/vendors/hooks/unix/fsmonitor-watchman.sample +0 -0
  47. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/vendors/hooks/unix/post-update.sample +0 -0
  48. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/vendors/hooks/unix/pre-applypatch.sample +0 -0
  49. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/vendors/hooks/unix/pre-commit +0 -0
  50. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/vendors/hooks/unix/pre-commit.legacy +0 -0
  51. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/vendors/hooks/unix/pre-commit.sample +0 -0
  52. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/vendors/hooks/unix/pre-merge-commit.sample +0 -0
  53. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/vendors/hooks/unix/pre-push +0 -0
  54. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/vendors/hooks/unix/pre-push.sample +0 -0
  55. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/vendors/hooks/unix/pre-rebase.sample +0 -0
  56. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/vendors/hooks/unix/pre-receive.sample +0 -0
  57. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/vendors/hooks/unix/prepare-commit-msg.sample +0 -0
  58. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/vendors/hooks/update.sample +0 -0
  59. py_wlcli-0.8.0/src/wl_cli/vendors/project/README.md +0 -0
  60. py_wlcli-0.7.0/rust/Cargo.lock +0 -132
  61. py_wlcli-0.7.0/rust/Cargo.toml +0 -19
  62. py_wlcli-0.7.0/rust/LICENSE +0 -21
  63. py_wlcli-0.7.0/rust/build.rs +0 -29
  64. py_wlcli-0.7.0/rust/deny.toml +0 -22
  65. py_wlcli-0.7.0/rust/rust-analyzer.json +0 -20
  66. py_wlcli-0.7.0/src/wl_cli/commands/self/common/capabilities.py +0 -30
  67. py_wlcli-0.7.0/src/wl_cli/vendors/rust/src/lib.rs +0 -13
  68. py_wlcli-0.7.0/src/wl_cli/vendors/rust/src/main.rs +0 -3
  69. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/LICENSE +0 -0
  70. {py_wlcli-0.7.0/src/wl_cli/commands/clean/dead_code → py_wlcli-0.8.0/src}/__init__.py +0 -0
  71. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/__init__.py +0 -0
  72. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/__main__.py +0 -0
  73. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/__init__.py +0 -0
  74. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/base.py +0 -0
  75. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/buildcommands/__init__.py +0 -0
  76. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/buildcommands/build.py +0 -0
  77. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/buildcommands/build_utils.py +0 -0
  78. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/buildcommands/builders/__init__.py +0 -0
  79. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/buildcommands/builders/cleanup.py +0 -0
  80. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/buildcommands/builders/coordinator.py +0 -0
  81. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/buildcommands/builders/environment.py +0 -0
  82. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/buildcommands/builders/rust_builder.py +0 -0
  83. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/buildcommands/builders/stubs.py +0 -0
  84. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/buildcommands/test.py +0 -0
  85. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/clean/__init__.py +0 -0
  86. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/clean/build.py +0 -0
  87. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/clean/clean.py +0 -0
  88. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/clean/clean_utils.py +0 -0
  89. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/clean/core.py +0 -0
  90. /py_wlcli-0.7.0/src/wl_cli/commands/clean/dead_code/utils.py → /py_wlcli-0.8.0/src/wl_cli/commands/clean/dead_code/__init__.py +0 -0
  91. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/clean/dead_code/dead_code_command.py +0 -0
  92. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/clean/dead_code/detector.py +0 -0
  93. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/clean/dead_code/fixer.py +0 -0
  94. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/clean/dead_code/reporter.py +0 -0
  95. /py_wlcli-0.7.0/src/wl_cli/vendors/project/README.md → /py_wlcli-0.8.0/src/wl_cli/commands/clean/dead_code/utils.py +0 -0
  96. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/clean/lfs.py +0 -0
  97. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/clean/python.py +0 -0
  98. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/clean/rust.py +0 -0
  99. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/clean/utils/__init__.py +0 -0
  100. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/clean/venv.py +0 -0
  101. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/cleanup.py +0 -0
  102. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/click_base.py +0 -0
  103. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/config/__init__.py +0 -0
  104. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/config/config.py +0 -0
  105. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/debug/__init__.py +0 -0
  106. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/debug/debug.py +0 -0
  107. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/debug/debug_cache.py +0 -0
  108. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/debug/debug_subagent.py +0 -0
  109. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/debug/output_formatter.py +0 -0
  110. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/debug/source_hasher.py +0 -0
  111. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/format/__init__.py +0 -0
  112. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/format/format_cache_adapter.py +0 -0
  113. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/format/format_command.py +0 -0
  114. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/format/format_coordinator.py +0 -0
  115. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/format/format_executor.py +0 -0
  116. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/format/format_outcome.py +0 -0
  117. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/format/format_path_handler.py +0 -0
  118. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/format/format_progress.py +0 -0
  119. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/format/format_reporter.py +0 -0
  120. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/format/rust_formatter.py +0 -0
  121. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/gate/__init__.py +0 -0
  122. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/gate/gate_command.py +0 -0
  123. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/gate/preflight.py +0 -0
  124. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/git/__init__.py +0 -0
  125. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/git/config.py +0 -0
  126. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/git/git_facts.py +0 -0
  127. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/git/git_flow.py +0 -0
  128. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/git/hook.py +0 -0
  129. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/git/policy.py +0 -0
  130. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/git/push_update.py +0 -0
  131. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/initenv/__init__.py +0 -0
  132. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/initenv/common/__init__.py +0 -0
  133. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/initenv/common/check_git_bash.py +0 -0
  134. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/initenv/common/error_handler.py +0 -0
  135. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/initenv/common/exceptions.py +0 -0
  136. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/initenv/components/__init__.py +0 -0
  137. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/initenv/components/cargo_sync.py +0 -0
  138. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/initenv/components/config_manager.py +0 -0
  139. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/initenv/components/directory_utils.py +0 -0
  140. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/initenv/components/git/__init__.py +0 -0
  141. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/initenv/components/git/branch_creator.py +0 -0
  142. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/initenv/components/git/git_flow_interface.py +0 -0
  143. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/initenv/components/git/git_flow_manager.py +0 -0
  144. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/initenv/components/git/git_lfs_manager.py +0 -0
  145. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/initenv/components/git/git_utility.py +0 -0
  146. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/initenv/components/git/gitignore_manager.py +0 -0
  147. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/initenv/components/git_initializer.py +0 -0
  148. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/initenv/components/i18n_manager.py +0 -0
  149. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/initenv/components/log_manager.py +0 -0
  150. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/initenv/components/project_structure/__init__.py +0 -0
  151. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/initenv/components/project_structure/config_generator.py +0 -0
  152. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/initenv/components/project_structure/directory_creator.py +0 -0
  153. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/initenv/components/project_structure/hook_source.py +0 -0
  154. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/initenv/components/project_structure/hooks_manager.py +0 -0
  155. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/initenv/components/project_structure/readme_handler.py +0 -0
  156. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/initenv/components/project_structure/rust_files_handler.py +0 -0
  157. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/initenv/components/project_structure/setup_handler.py +0 -0
  158. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/initenv/components/project_structure/sop_generator.py +0 -0
  159. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/initenv/components/project_structure/template_copier.py +0 -0
  160. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/initenv/components/project_structure/template_manager.py +0 -0
  161. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/initenv/components/pyproject_generator.py +0 -0
  162. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/initenv/components/rust_initializer.py +0 -0
  163. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/initenv/components/symlink_cleaner.py +0 -0
  164. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/initenv/components/symlink_manager.py +0 -0
  165. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/initenv/components/venv_manager.py +0 -0
  166. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/initenv/initenv.py +0 -0
  167. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/initenv/services/__init__.py +0 -0
  168. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/initenv/services/environment_initializer.py +0 -0
  169. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/initenv/services/git_lfs_initializer.py +0 -0
  170. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/initenv/services/project_structure_initializer.py +0 -0
  171. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/lfs/README.md +0 -0
  172. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/lfs/__init__.py +0 -0
  173. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/lfs/cli.py +0 -0
  174. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/lfs/config.py +0 -0
  175. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/lfs/hook.py +0 -0
  176. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/lfs/initializer.py +0 -0
  177. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/lfs/manager.py +0 -0
  178. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/lfs/policy.py +0 -0
  179. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/lfs/watcher.py +0 -0
  180. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/lint/__init__.py +0 -0
  181. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/lint/lint_command.py +0 -0
  182. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/lint/lint_executor.py +0 -0
  183. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/lint/lint_reporter.py +0 -0
  184. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/lint/lint_run.py +0 -0
  185. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/lint/mypy_config.py +0 -0
  186. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/self/__init__.py +0 -0
  187. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/self/common/__init__.py +0 -0
  188. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/self/common/config.py +0 -0
  189. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/self/common/version_cache.py +0 -0
  190. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/self/handlers/__init__.py +0 -0
  191. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/self/handlers/base_handler.py +0 -0
  192. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/self/handlers/install_handler.py +0 -0
  193. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/self/handlers/status_handler.py +0 -0
  194. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/self/handlers/uninstall_handler.py +0 -0
  195. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/self/handlers/update_handler.py +0 -0
  196. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/self/handlers/version_handler.py +0 -0
  197. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/self/services/__init__.py +0 -0
  198. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/self/services/installation_manager.py +0 -0
  199. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/self/services/local_installer.py +0 -0
  200. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/self/services/pypi_updater.py +0 -0
  201. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/self/services/windows_update.py +0 -0
  202. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/testcommands/__init__.py +0 -0
  203. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/testcommands/base_dependency_analyzer.py +0 -0
  204. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/testcommands/batch_processor.py +0 -0
  205. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/testcommands/cache_manager.py +0 -0
  206. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/testcommands/coverage_analyzer.py +0 -0
  207. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/testcommands/coverage_cache_manager.py +0 -0
  208. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/testcommands/progress_manager.py +0 -0
  209. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/testcommands/python_env_detector.py +0 -0
  210. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/testcommands/report_generator.py +0 -0
  211. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/testcommands/single_test_executor.py +0 -0
  212. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/testcommands/speed_checker.py +0 -0
  213. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/testcommands/test_command_builder.py +0 -0
  214. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/testcommands/test_commands.py +0 -0
  215. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/testcommands/test_reporter.py +0 -0
  216. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/testcommands/test_result_handler.py +0 -0
  217. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/testcommands/test_runner.py +0 -0
  218. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/testcommands/test_utils.py +0 -0
  219. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/testcommands/utils/__init__.py +0 -0
  220. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/testcommands/utils/coverage_parser.py +0 -0
  221. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/testcommands/utils/env_info.py +0 -0
  222. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/testcommands/utils/junit_parser.py +0 -0
  223. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/testcommands/utils/markdown_utils.py +0 -0
  224. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/testcommands/utils/project_root.py +0 -0
  225. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/update/__init__.py +0 -0
  226. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/update/services/__init__.py +0 -0
  227. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/update/services/backup_manager.py +0 -0
  228. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/update/services/component_manager.py +0 -0
  229. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/update/services/conflict_resolver.py +0 -0
  230. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/update/services/vendors_updater.py +0 -0
  231. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/update/services/version_tracker.py +0 -0
  232. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/update/update_command.py +0 -0
  233. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/update/utils/__init__.py +0 -0
  234. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/version/__init__.py +0 -0
  235. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/version/version_command.py +0 -0
  236. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/commands/workflow.py +0 -0
  237. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/exceptions.py +0 -0
  238. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/lib/__init__.py +0 -0
  239. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/lib/rust_utils.py +0 -0
  240. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/utils/__init__.py +0 -0
  241. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/utils/cache.py +0 -0
  242. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/utils/cache_ledger.py +0 -0
  243. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/utils/cache_store.py +0 -0
  244. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/utils/config/__init__.py +0 -0
  245. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/utils/config/config_loader.py +0 -0
  246. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/utils/config/core.py +0 -0
  247. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/utils/config/defaults.py +0 -0
  248. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/utils/config/env_exporter.py +0 -0
  249. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/utils/config/env_parser.py +0 -0
  250. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/utils/config/validation.py +0 -0
  251. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/utils/error_handler.py +0 -0
  252. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/utils/file_copier.py +0 -0
  253. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/utils/file_operations.py +0 -0
  254. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/utils/language_utils.py +0 -0
  255. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/utils/lazy_import.py +0 -0
  256. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/utils/log_levels.py +0 -0
  257. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/utils/log_rotators.py +0 -0
  258. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/utils/logging.py +0 -0
  259. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/utils/output_context.py +0 -0
  260. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/utils/performance/__init__.py +0 -0
  261. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/utils/performance/decorators.py +0 -0
  262. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/utils/performance/exporter.py +0 -0
  263. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/utils/performance/models.py +0 -0
  264. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/utils/performance/monitor.py +0 -0
  265. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/utils/performance_monitor.py +0 -0
  266. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/utils/platform_adapter.py +0 -0
  267. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/utils/pre_commit.py +0 -0
  268. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/utils/pre_commit_config.py +0 -0
  269. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/utils/root.py +0 -0
  270. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/utils/root_fallback.py +0 -0
  271. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/utils/run_evidence.py +0 -0
  272. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/utils/structured_logger.py +0 -0
  273. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/utils/structured_logging/__init__.py +0 -0
  274. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/utils/structured_logging/config.py +0 -0
  275. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/utils/structured_logging/core.py +0 -0
  276. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/utils/structured_logging/env.py +0 -0
  277. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/utils/structured_logging/filtering.py +0 -0
  278. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/utils/structured_logging/filters.py +0 -0
  279. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/utils/structured_logging/formatters.py +0 -0
  280. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/utils/structured_logging/handlers.py +0 -0
  281. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/utils/structured_logging/logger.py +0 -0
  282. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/utils/subprocess.py +0 -0
  283. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/utils/subprocess_utils.py +0 -0
  284. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/utils/test_utils/__init__.py +0 -0
  285. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/utils/test_utils/test_filter.py +0 -0
  286. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/utils/uv_run.py +0 -0
  287. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/utils/uv_tool.py +0 -0
  288. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/utils/uv_tree.py +0 -0
  289. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/utils/uv_workspace.py +0 -0
  290. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/utils/version/__init__.py +0 -0
  291. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/utils/version/pypi_version_checker.py +0 -0
  292. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/utils/version/version_comparator.py +0 -0
  293. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/utils/version/version_detectors.py +0 -0
  294. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/utils/version/version_service.py +0 -0
  295. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/utils/version/version_updater.py +0 -0
  296. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/utils/wl_dir_updater.py +0 -0
  297. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/utils/workspace_detector/__init__.py +0 -0
  298. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/utils/workspace_detector/core.py +0 -0
  299. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/utils/workspace_detector/detection_strategies.py +0 -0
  300. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/utils/workspace_detector/exceptions.py +0 -0
  301. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/utils/workspace_detector/types.py +0 -0
  302. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/utils/workspace_detector/venv_resolver.py +0 -0
  303. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/vendors/config/.codespellrc +0 -0
  304. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/vendors/config/dependencies.toml +0 -0
  305. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/vendors/config/mypy.ini +0 -0
  306. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/vendors/config/pyproject_defaults.toml +0 -0
  307. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/vendors/config/template_config.toml +0 -0
  308. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/vendors/config/tool_configs.toml +0 -0
  309. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/vendors/git/.gitignore +0 -0
  310. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/vendors/git/.pre-commit-config.yaml +0 -0
  311. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/vendors/hooks/unix/check_lockfile.py +0 -0
  312. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/vendors/hooks/unix/check_lockfile.sh +0 -0
  313. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/vendors/hooks/unix/pre-commit.py +0 -0
  314. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/vendors/hooks/win/work.bat +0 -0
  315. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/vendors/project/.gitignore +0 -0
  316. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/vendors/project/.python-version +0 -0
  317. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/vendors/project/LICENSE +0 -0
  318. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/vendors/project/pyproject.toml +0 -0
  319. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/vendors/project/pyproject_no_workspace.toml +0 -0
  320. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/vendors/project/pyproject_workspace.toml +0 -0
  321. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/vendors/readme/README.md +0 -0
  322. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/vendors/rust/Cargo.toml +0 -0
  323. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/vendors/rust/lib/__init__.py +0 -0
  324. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/vendors/rust/lib/rust_utils.py +0 -0
  325. {py_wlcli-0.7.0 → py_wlcli-0.8.0/src/wl_cli/vendors}/rust/src/lib.rs +0 -0
  326. {py_wlcli-0.7.0 → py_wlcli-0.8.0/src/wl_cli/vendors}/rust/src/main.rs +0 -0
  327. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/vendors/rust/tests/test_rust_fallback.py +0 -0
  328. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/vendors/sop_doc/git-dev-sop.md +0 -0
  329. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/vendors/sop_doc/industrial-standard-sop.md +0 -0
  330. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/vendors/sop_doc/python-sop.md +0 -0
  331. {py_wlcli-0.7.0 → py_wlcli-0.8.0}/src/wl_cli/vendors/sop_doc/rust-readme.md +0 -0
@@ -0,0 +1,116 @@
1
+ # Python 相关文件
2
+ __pycache__/
3
+ *.py[cod]
4
+ *.so
5
+ *.dll
6
+ *.dylib
7
+ *.pyd
8
+ *.egg-info/
9
+ .pytest_cache/
10
+ .coverage
11
+ htmlcov/
12
+ .tox/
13
+ .hypothesis/
14
+ .cache/
15
+ .trae/
16
+ .wl/
17
+ .claude/
18
+
19
+ # 构建目录
20
+ build/
21
+ dist/
22
+ wheels/
23
+ target/
24
+
25
+ # 虚拟环境
26
+ .venv/
27
+ env/
28
+ venv/
29
+ ENV/
30
+
31
+ # Issue #220: `env/` above is a virtualenv pattern, but the env *domain* is
32
+ # repo code. Re-include only the two in-tree paths. `!dir/` must precede
33
+ # `!dir/**`: git cannot re-include files under an excluded parent directory.
34
+ # The trailing __pycache__ rules win over `!dir/**` (last match wins) so
35
+ # bytecode stays ignored inside the re-included trees.
36
+ !src/wl_cli/env/
37
+ !src/wl_cli/env/**
38
+ !tests/domains/env/
39
+ !tests/domains/env/**
40
+ # ...but only source: virtualenvs, bytecode and nested env/venv directories
41
+ # stay ignored anywhere inside those two re-included trees (last match wins).
42
+ src/wl_cli/env/**/__pycache__/
43
+ tests/domains/env/**/__pycache__/
44
+ src/wl_cli/env/**/.venv/
45
+ src/wl_cli/env/**/env/
46
+ src/wl_cli/env/**/venv/
47
+ src/wl_cli/env/**/ENV/
48
+ tests/domains/env/**/.venv/
49
+ tests/domains/env/**/env/
50
+ tests/domains/env/**/venv/
51
+ tests/domains/env/**/ENV/
52
+
53
+ # 依赖管理
54
+ .uv/
55
+ .uv_cache/
56
+ .ruff_cache/
57
+ .mypy_cache/
58
+ node_modules/
59
+
60
+ # IDE 和编辑器
61
+ .idea/
62
+ .vscode/
63
+ .vs/
64
+ *.sln
65
+ *.suo
66
+ *.ntvs*
67
+ *.njsproj
68
+ *.sw?
69
+
70
+ # 临时文件和系统文件
71
+ .DS_Store
72
+
73
+ # Jupyter 文件
74
+ .ipynb_checkpoints/
75
+
76
+ # 日志和数据文件
77
+ *.log
78
+ logs/
79
+ results/
80
+ npm-debug.log*
81
+ yarn-debug.log*
82
+ yarn-error.log*
83
+ dev-debug.log
84
+
85
+ # 本地配置
86
+ .env
87
+ .env.local
88
+ # PyPI/twine 凭据文件(历史上曾误入库,见 docs/sop-audit/2026-10-04-sop-report.md F7)
89
+ .pypirc
90
+ auto_activate_venv.sh
91
+ deactivate_temp.sh
92
+
93
+ # 工具和脚本(本地使用,不加入版本控制)
94
+ todos/
95
+
96
+ # 类型与本地生成文件
97
+ typings/
98
+ src/wl_cli/lib/sop.md
99
+
100
+ # 任务和临时文件
101
+ tasks.json
102
+ tasks/
103
+ **/*.token
104
+
105
+ # Git worktree 和测试工具
106
+ .worktrees/
107
+ .rpytest/flakiness.json
108
+
109
+ # agent 工具链的本地状态(每次运行都会重建,不进版本控制)
110
+ .codex/
111
+ .loopx/
112
+
113
+ # 一致性语料(票 #273):语料归需求方(wlcc),按 contract-v1 克隆取用,永不入库。
114
+ # CI 的 contract job 克隆到 .contract-corpus/;本地按需克隆到 tests/contract/。
115
+ .contract-corpus/
116
+ tests/contract/
@@ -1,40 +1,41 @@
1
- Metadata-Version: 2.4
1
+ Metadata-Version: 2.5
2
2
  Name: py_wlcli
3
- Version: 0.7.0
4
- Requires-Dist: toml>=0.10.2
3
+ Version: 0.8.0
4
+ Summary: wl_cli - Python项目
5
+ Project-URL: Homepage, https://gitlab.gewinnrobo.com/Humuyuan/wl-cli
6
+ Project-URL: Issues, https://gitlab.gewinnrobo.com/Humuyuan/wl-cli/-/issues
7
+ Author-email: WL Admin <wl.admin@example.com>
8
+ License-Expression: MIT
9
+ License-File: LICENSE
10
+ Requires-Python: >=3.11
5
11
  Requires-Dist: click>=8.1.0
6
- Requires-Dist: tqdm>=4.66.0
7
12
  Requires-Dist: pre-commit>=4.5.1
8
- Requires-Dist: mypy>=1.18.2 ; extra == 'dev'
9
- Requires-Dist: ruff==0.15.21 ; extra == 'dev'
10
- Requires-Dist: types-toml>=0.10.8.20240310 ; extra == 'dev'
11
- Requires-Dist: types-tqdm>=4.67.0.20250809 ; extra == 'dev'
12
- Requires-Dist: pytest-xdist>=3.8.0 ; extra == 'dev'
13
- Requires-Dist: twine>=6.2.0 ; extra == 'dev'
14
- Requires-Dist: pyyaml>=6.0.0 ; extra == 'lfs'
15
- Requires-Dist: watchdog>=6.0.0 ; extra == 'lfs'
16
- Requires-Dist: pytest>=9.0.3 ; extra == 'test'
17
- Requires-Dist: pytest-cov>=7.0.0 ; extra == 'test'
18
- Requires-Dist: pytest-asyncio>=1.3.0 ; extra == 'test'
19
- Requires-Dist: pyyaml>=6.0.0 ; extra == 'test'
20
- Requires-Dist: watchdog>=6.0.0 ; extra == 'test'
13
+ Requires-Dist: toml>=0.10.2
14
+ Requires-Dist: tqdm>=4.66.0
21
15
  Provides-Extra: dev
16
+ Requires-Dist: mypy>=1.18.2; extra == 'dev'
17
+ Requires-Dist: pytest-xdist>=3.8.0; extra == 'dev'
18
+ Requires-Dist: ruff==0.15.21; extra == 'dev'
19
+ Requires-Dist: twine>=6.2.0; extra == 'dev'
20
+ Requires-Dist: types-toml>=0.10.8.20240310; extra == 'dev'
21
+ Requires-Dist: types-tqdm>=4.67.0.20250809; extra == 'dev'
22
22
  Provides-Extra: lfs
23
+ Requires-Dist: pyyaml>=6.0.0; extra == 'lfs'
24
+ Requires-Dist: watchdog>=6.0.0; extra == 'lfs'
23
25
  Provides-Extra: test
24
- License-File: LICENSE
25
- Summary: wl_cli - Python项目
26
- Author-email: WL Admin <wl.admin@example.com>
27
- License-Expression: MIT
28
- Requires-Python: >=3.11
29
- Description-Content-Type: text/markdown; charset=UTF-8; variant=GFM
30
- Project-URL: Homepage, https://gitlab.gewinnrobo.com/Humuyuan/wl-cli
31
- Project-URL: Issues, https://gitlab.gewinnrobo.com/Humuyuan/wl-cli/-/issues
26
+ Requires-Dist: pytest-asyncio>=1.3.0; extra == 'test'
27
+ Requires-Dist: pytest-cov>=7.0.0; extra == 'test'
28
+ Requires-Dist: pytest>=9.0.3; extra == 'test'
29
+ Requires-Dist: pyyaml>=6.0.0; extra == 'test'
30
+ Requires-Dist: watchdog>=6.0.0; extra == 'test'
31
+ Description-Content-Type: text/markdown
32
32
 
33
33
  # wl_cli(`wl` CLI)
34
34
 
35
- `wl_cli` 是一个 Python + Rust 混合的命令行工具,命令入口为 `wl`。它以 Click 构建 CLI,
36
- 以 maturin + pyo3 编译 Rust 原生扩展,面向 Python 项目的初始化、构建、测试、格式化、lint、
37
- 清理与质量门等日常开发工作流。
35
+ `wl_cli` 是一个以 Click 构建的命令行工具(入口 `wl`),面向 Python 项目的初始化、构建、
36
+ 测试、格式化、lint、清理与质量门等日常开发工作流。发行物是纯 Python wheel
37
+ (`py3-none-any`),安装与运行都不需要 Rust 工具链;Rust 扩展是可选的诊断件,
38
+ 缺失时自动回落纯 Python 实现。
38
39
 
39
40
  ## 功能概览
40
41
 
@@ -54,10 +55,23 @@ Project-URL: Issues, https://gitlab.gewinnrobo.com/Humuyuan/wl-cli/-/issues
54
55
 
55
56
  ## 环境要求
56
57
 
57
- - Python >= 3.11
58
- - 从源码构建 Rust 扩展时需要 Rust 工具链(maturin/pyo3)
58
+ - Python >= 3.11(纯 Python 路径,安装与运行都不需要 Rust/cargo)
59
59
  - 包管理器推荐 [uv](https://docs.astral.sh/uv/)
60
60
 
61
+ ### 平台支持矩阵
62
+
63
+ | 平台 | 架构 | 支持 |
64
+ |------|------|------|
65
+ | macOS | x86_64 / arm64 | ✅ |
66
+ | Linux(glibc) | x86_64 / aarch64 | ✅ |
67
+ | Linux(musl) | x86_64 / aarch64 | ✅ |
68
+ | Windows | x64 / arm64 | ✅ |
69
+
70
+ 同一个 `py3-none-any` wheel 覆盖以上全部平台。平台报告由
71
+ `wl_cli.platform.platform_payload()` 统一产出
72
+ (`platform` / `python` / `native_extension` / `supported` / `reason`),
73
+ 其中 `native_extension` 只作诊断——Rust 扩展可选,缺失不影响 `supported`。
74
+
61
75
  ## 安装
62
76
 
63
77
  ### 稳定版(PyPI)
@@ -115,11 +129,11 @@ pytest tests/ -v # 指定文件(pytest 直跑)
115
129
  ## 架构速览
116
130
 
117
131
  Click CLI([src/wl_cli/cli_click.py](https://github.com/CharlieZi/wl-cli/blob/main/src/wl_cli/cli_click.py)
118
- 经 `setup_commands()` 直接注册)→ 各命令实现(`commands/<group>/`)→ 业务逻辑;
119
- Rust 原生扩展(`rust/`、`src/wl_cli/lib/`)经 maturin 编译为 `wl_cli_native`。
132
+ 经 `setup_commands()` 直接注册)→ 各命令实现(`commands/<group>/`)→ 业务逻辑。
133
+ Rust 扩展是可选的诊断件:`src/wl_cli/lib/rust_utils.py` 在 `wl_cli_native`
134
+ 不可用时回落纯 Python;发行 wheel 不包含任何原生二进制。
120
135
  架构演进背景见 [Click 迁移设计](https://github.com/CharlieZi/wl-cli/blob/main/docs/superpowers/specs/2026-06-02-full-click-migration-design.md)。
121
136
 
122
137
  ## 许可证
123
138
 
124
139
  MIT,见 [LICENSE](https://github.com/CharlieZi/wl-cli/blob/main/LICENSE)。
125
-
@@ -1,8 +1,9 @@
1
1
  # wl_cli(`wl` CLI)
2
2
 
3
- `wl_cli` 是一个 Python + Rust 混合的命令行工具,命令入口为 `wl`。它以 Click 构建 CLI,
4
- 以 maturin + pyo3 编译 Rust 原生扩展,面向 Python 项目的初始化、构建、测试、格式化、lint、
5
- 清理与质量门等日常开发工作流。
3
+ `wl_cli` 是一个以 Click 构建的命令行工具(入口 `wl`),面向 Python 项目的初始化、构建、
4
+ 测试、格式化、lint、清理与质量门等日常开发工作流。发行物是纯 Python wheel
5
+ (`py3-none-any`),安装与运行都不需要 Rust 工具链;Rust 扩展是可选的诊断件,
6
+ 缺失时自动回落纯 Python 实现。
6
7
 
7
8
  ## 功能概览
8
9
 
@@ -22,10 +23,23 @@
22
23
 
23
24
  ## 环境要求
24
25
 
25
- - Python >= 3.11
26
- - 从源码构建 Rust 扩展时需要 Rust 工具链(maturin/pyo3)
26
+ - Python >= 3.11(纯 Python 路径,安装与运行都不需要 Rust/cargo)
27
27
  - 包管理器推荐 [uv](https://docs.astral.sh/uv/)
28
28
 
29
+ ### 平台支持矩阵
30
+
31
+ | 平台 | 架构 | 支持 |
32
+ |------|------|------|
33
+ | macOS | x86_64 / arm64 | ✅ |
34
+ | Linux(glibc) | x86_64 / aarch64 | ✅ |
35
+ | Linux(musl) | x86_64 / aarch64 | ✅ |
36
+ | Windows | x64 / arm64 | ✅ |
37
+
38
+ 同一个 `py3-none-any` wheel 覆盖以上全部平台。平台报告由
39
+ `wl_cli.platform.platform_payload()` 统一产出
40
+ (`platform` / `python` / `native_extension` / `supported` / `reason`),
41
+ 其中 `native_extension` 只作诊断——Rust 扩展可选,缺失不影响 `supported`。
42
+
29
43
  ## 安装
30
44
 
31
45
  ### 稳定版(PyPI)
@@ -83,8 +97,9 @@ pytest tests/ -v # 指定文件(pytest 直跑)
83
97
  ## 架构速览
84
98
 
85
99
  Click CLI([src/wl_cli/cli_click.py](https://github.com/CharlieZi/wl-cli/blob/main/src/wl_cli/cli_click.py)
86
- 经 `setup_commands()` 直接注册)→ 各命令实现(`commands/<group>/`)→ 业务逻辑;
87
- Rust 原生扩展(`rust/`、`src/wl_cli/lib/`)经 maturin 编译为 `wl_cli_native`。
100
+ 经 `setup_commands()` 直接注册)→ 各命令实现(`commands/<group>/`)→ 业务逻辑。
101
+ Rust 扩展是可选的诊断件:`src/wl_cli/lib/rust_utils.py` 在 `wl_cli_native`
102
+ 不可用时回落纯 Python;发行 wheel 不包含任何原生二进制。
88
103
  架构演进背景见 [Click 迁移设计](https://github.com/CharlieZi/wl-cli/blob/main/docs/superpowers/specs/2026-06-02-full-click-migration-design.md)。
89
104
 
90
105
  ## 许可证
py_wlcli-0.8.0/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.8.0
@@ -43,46 +43,43 @@ lfs = [
43
43
  url = "https://pypi.mirrors.ustc.edu.cn/simple"
44
44
  default = true
45
45
 
46
+ # Issue #226 / wlcc #321: the distribution is a pure-Python wheel
47
+ # (`py3-none-any`); installing it needs no Rust toolchain. VERSION stays the
48
+ # single source of truth and hatchling reads it directly.
46
49
  [build-system]
47
- requires = [ "maturin>=1.0,<2.0",]
48
- build-backend = "maturin"
50
+ requires = [ "hatchling>=1.27",]
51
+ build-backend = "hatchling.build"
52
+
53
+ [tool.hatch.version]
54
+ source = "regex"
55
+ path = "VERSION"
56
+ pattern = '(?P<version>\d+\.\d+\.\d+)'
57
+
58
+ [tool.hatch.build.targets.wheel]
59
+ packages = [ "src/wl_cli",]
60
+ # Runtime templates under vendors/ must ship inside the wheel (`wl init` copies
61
+ # them). Native artefacts are never part of a pure-Python wheel, even if one is
62
+ # left in the tree by an older local build.
63
+ exclude = [
64
+ "**/*.so",
65
+ "**/*.pyd",
66
+ "**/*.dll",
67
+ "**/*.dylib",
68
+ ]
49
69
 
70
+ [tool.hatch.build.targets.sdist]
71
+ include = [
72
+ "/src",
73
+ "/VERSION",
74
+ "/LICENSE",
75
+ "/README.md",
76
+ "/pyproject.toml",
77
+ ]
50
78
 
51
79
  [project.urls]
52
80
  Homepage = "https://gitlab.gewinnrobo.com/Humuyuan/wl-cli"
53
81
  Issues = "https://gitlab.gewinnrobo.com/Humuyuan/wl-cli/-/issues"
54
82
 
55
- [tool.maturin]
56
- manifest-path = "rust/Cargo.toml"
57
- module-name = "wl_cli.lib.wl_cli_native"
58
- python-source = "src"
59
- include = [
60
- "src/wl_cli/**/*",
61
- "typings/**/*",
62
- "LICENSE",
63
- ]
64
- bindings = "pyo3"
65
- # 与 rust/Cargo.toml 的 pyo3 features 保持同步(lockstep):maturin 将此处特性作为 --features
66
- # 透传给 cargo,与 Cargo.toml 取并集,任一处即可生效;两处必须一致。
67
- # Keep in lockstep with pyo3.features in rust/Cargo.toml — maturin forwards these to
68
- # cargo as --features, unioned with the Cargo.toml features; both must match.
69
- features = [
70
- "pyo3/extension-module",
71
- "pyo3/abi3",
72
- "pyo3/abi3-py311",
73
- "pyo3/generate-import-lib",
74
- ]
75
- sdist-include = [
76
- "src/**/*",
77
- "typings/**/*",
78
- "VERSION",
79
- "LICENSE",
80
- ]
81
- sdist-exclude = [
82
- "src/wl_cli/vendors/**/*",
83
- ]
84
- python-packages = [ "wl_cli",]
85
-
86
83
  [tool.ruff]
87
84
  line-length = 88
88
85
  target-version = "py310"
@@ -0,0 +1,79 @@
1
+ """The shared capability registry for the ``wl`` CLI (issues #270, #221).
2
+
3
+ Capabilities are the stable, dotted names a consumer (wlcc) probes instead of
4
+ grepping ``--help`` for an implementation flag (wlcc ADR-0010, decision 6):
5
+ ``test.clean_cache`` says *what wl can do*; ``--clean-cache`` is only how it is
6
+ spelled today. The dotted names are the interface -- treat them as stable.
7
+
8
+ The registry lives in the shared layer rather than under ``wl_cli.env`` or
9
+ ``wl_cli.commands`` because two commands in different domains must serve the
10
+ same names: ``wl env check`` (``wl_cli.env``) and the deprecated
11
+ ``wl self capabilities`` alias (``wl_cli.commands``). The quality domain may
12
+ not import the env domain (#220), so one shared data owner is the only
13
+ arrangement that does not fork the answer.
14
+
15
+ Adding a capability is a data change here plus an entry in the surface table
16
+ of ``tests/test_self_capabilities_270.py`` proving some CLI surface still
17
+ backs it, so a name cannot outlive its implementation.
18
+
19
+ A domain may keep a domain-local view of its own entries
20
+ (``wl_cli.mcp.capabilities.CAPABILITIES``, #224) derived from this mapping;
21
+ the data itself lives here only, and ``tests/test_capability_registry.py``
22
+ pins that the view cannot drift.
23
+ """
24
+
25
+ from __future__ import annotations
26
+
27
+ #: Bump only when the payload *shape* changes -- never when a capability is
28
+ #: added. Consumers key off this; adding a capability is backwards compatible.
29
+ SCHEMA_VERSION = 1
30
+
31
+ #: Capability name -> first release that ships its implementation. Adding an
32
+ #: entry is a data change; ``since`` must never be newer than the release this
33
+ #: data ships in (the release bump happens outside this change).
34
+ CAPABILITY_SINCE: dict[str, str] = {
35
+ "cc.check": "0.8.0",
36
+ "cc.hooks": "0.8.0",
37
+ "cc.init": "0.8.0",
38
+ "cc.mcp": "0.8.0",
39
+ "cc.plugins": "0.8.0",
40
+ "cc.repair": "0.8.0",
41
+ "cc.settings": "0.8.0",
42
+ "cc.stamps": "0.8.0",
43
+ "cc.statusline": "0.8.0",
44
+ "cc.upgrade": "0.8.0",
45
+ "env.check": "0.8.0",
46
+ "env.repair": "0.8.0",
47
+ "mcp.gitlab": "0.8.0",
48
+ "mcp.k8s": "0.8.0",
49
+ "test.clean_cache": "0.7.0",
50
+ }
51
+
52
+ #: The advertised names, sorted for stable output. Derived from the mapping so
53
+ #: there is exactly one source of truth.
54
+ CAPABILITIES: tuple[str, ...] = tuple(sorted(CAPABILITY_SINCE))
55
+
56
+
57
+ def capability_names() -> list[str]:
58
+ """Return the advertised capability names, sorted for stable output."""
59
+ return list(CAPABILITIES)
60
+
61
+
62
+ def capability_details() -> list[dict[str, str]]:
63
+ """Return ``[{"name": ..., "since": ...}, ...]`` in sorted-name order."""
64
+ return [{"name": name, "since": CAPABILITY_SINCE[name]} for name in CAPABILITIES]
65
+
66
+
67
+ def capability_since() -> dict[str, str]:
68
+ """Return ``{name: since}`` in sorted-name order."""
69
+ return {name: CAPABILITY_SINCE[name] for name in CAPABILITIES}
70
+
71
+
72
+ def capabilities_payload() -> dict[str, object]:
73
+ """Return the legacy ``wl self capabilities --json`` payload (#270).
74
+
75
+ ``wl self capabilities`` is a deprecated alias since #221 and emits the
76
+ ``wl env check`` envelope instead, but the old shape stays importable so a
77
+ library consumer does not break in the same release that deprecates it.
78
+ """
79
+ return {"schema": SCHEMA_VERSION, "capabilities": capability_names()}
@@ -0,0 +1,5 @@
1
+ """Claude Code integration domain (may depend on ``wl_cli.env``, never the reverse)."""
2
+
3
+ from .cli import cc_group
4
+
5
+ __all__ = ["cc_group"]