py-wlcli 0.6.13__tar.gz → 0.7.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 (348) hide show
  1. {py_wlcli-0.6.13/rust → py_wlcli-0.7.0}/LICENSE +1 -1
  2. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/PKG-INFO +21 -22
  3. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/README.md +18 -19
  4. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/pyproject.toml +17 -5
  5. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/rust/Cargo.lock +21 -54
  6. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/rust/Cargo.toml +3 -2
  7. py_wlcli-0.7.0/rust/deny.toml +22 -0
  8. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/__init__.py +1 -1
  9. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/__main__.py +17 -4
  10. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/cli_click.py +7 -9
  11. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/__init__.py +1 -1
  12. py_wlcli-0.7.0/src/wl_cli/commands/buildcommands/__init__.py +1 -0
  13. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/buildcommands/build_utils.py +0 -24
  14. py_wlcli-0.7.0/src/wl_cli/commands/buildcommands/builders/coordinator.py +122 -0
  15. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/buildcommands/builders/environment.py +2 -2
  16. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/buildcommands/builders/rust_builder.py +5 -3
  17. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/buildcommands/dist.py +14 -11
  18. py_wlcli-0.7.0/src/wl_cli/commands/clean/__init__.py +1 -0
  19. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/clean/build.py +21 -18
  20. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/clean/clean.py +25 -16
  21. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/clean/clean_utils.py +11 -0
  22. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/clean/core.py +56 -50
  23. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/clean/dead_code/dead_code_command.py +14 -23
  24. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/clean/dead_code/detector.py +36 -12
  25. py_wlcli-0.7.0/src/wl_cli/commands/clean/dead_code/fixer.py +176 -0
  26. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/clean/dead_code/reporter.py +41 -51
  27. py_wlcli-0.7.0/src/wl_cli/commands/clean/lfs.py +215 -0
  28. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/clean/python.py +28 -21
  29. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/clean/rust.py +27 -37
  30. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/clean/venv.py +31 -27
  31. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/cleanup.py +9 -5
  32. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/config/config.py +66 -16
  33. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/debug/debug.py +26 -5
  34. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/debug/debug_cache.py +23 -8
  35. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/debug/source_hasher.py +2 -0
  36. py_wlcli-0.7.0/src/wl_cli/commands/format/__init__.py +13 -0
  37. py_wlcli-0.7.0/src/wl_cli/commands/format/format_cache_adapter.py +125 -0
  38. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/format/format_command.py +59 -14
  39. py_wlcli-0.7.0/src/wl_cli/commands/format/format_coordinator.py +191 -0
  40. py_wlcli-0.7.0/src/wl_cli/commands/format/format_executor.py +470 -0
  41. py_wlcli-0.7.0/src/wl_cli/commands/format/format_outcome.py +44 -0
  42. py_wlcli-0.7.0/src/wl_cli/commands/format/format_path_handler.py +1016 -0
  43. py_wlcli-0.7.0/src/wl_cli/commands/format/python_formatter.py +496 -0
  44. py_wlcli-0.7.0/src/wl_cli/commands/format/rust_formatter.py +106 -0
  45. py_wlcli-0.7.0/src/wl_cli/commands/gate/__init__.py +1 -0
  46. py_wlcli-0.7.0/src/wl_cli/commands/gate/gate_command.py +862 -0
  47. py_wlcli-0.7.0/src/wl_cli/commands/gate/preflight.py +445 -0
  48. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/git/config.py +19 -7
  49. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/git/git_facts.py +18 -1
  50. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/git/hook.py +22 -9
  51. py_wlcli-0.7.0/src/wl_cli/commands/git/push_update.py +82 -0
  52. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/initenv/common/check_git_bash.py +2 -1
  53. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/initenv/common/error_handler.py +6 -8
  54. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/initenv/components/cargo_sync.py +6 -3
  55. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/initenv/components/config_manager.py +9 -8
  56. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/initenv/components/git/__init__.py +0 -2
  57. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/initenv/components/git/branch_creator.py +49 -42
  58. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/initenv/components/git/git_flow_manager.py +29 -23
  59. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/initenv/components/git/git_lfs_manager.py +79 -56
  60. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/initenv/components/git/git_utility.py +22 -13
  61. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/initenv/components/git/gitignore_manager.py +13 -8
  62. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/initenv/components/git_initializer.py +51 -32
  63. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/initenv/components/project_structure/__init__.py +2 -0
  64. py_wlcli-0.7.0/src/wl_cli/commands/initenv/components/project_structure/config_generator.py +360 -0
  65. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/initenv/components/project_structure/directory_creator.py +26 -19
  66. py_wlcli-0.7.0/src/wl_cli/commands/initenv/components/project_structure/hook_source.py +110 -0
  67. py_wlcli-0.7.0/src/wl_cli/commands/initenv/components/project_structure/hooks_manager.py +995 -0
  68. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/initenv/components/project_structure/readme_handler.py +11 -11
  69. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/initenv/components/project_structure/rust_files_handler.py +11 -2
  70. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/initenv/components/project_structure/setup_handler.py +31 -12
  71. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/initenv/components/project_structure/sop_generator.py +28 -10
  72. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/initenv/components/project_structure/template_copier.py +20 -12
  73. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/initenv/components/project_structure/template_manager.py +45 -20
  74. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/initenv/components/pyproject_generator.py +3 -22
  75. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/initenv/components/rust_initializer.py +28 -19
  76. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/initenv/components/symlink_manager.py +3 -2
  77. py_wlcli-0.7.0/src/wl_cli/commands/initenv/components/venv_manager.py +118 -0
  78. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/initenv/initenv.py +22 -4
  79. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/initenv/services/environment_initializer.py +116 -90
  80. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/initenv/services/git_lfs_initializer.py +5 -5
  81. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/initenv/services/project_structure_initializer.py +10 -7
  82. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/lfs/README.md +2 -2
  83. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/lfs/cli.py +14 -2
  84. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/lfs/config.py +25 -13
  85. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/lfs/initializer.py +53 -8
  86. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/lfs/watcher.py +41 -12
  87. py_wlcli-0.7.0/src/wl_cli/commands/lint/lint_command.py +297 -0
  88. py_wlcli-0.7.0/src/wl_cli/commands/lint/lint_executor.py +409 -0
  89. py_wlcli-0.7.0/src/wl_cli/commands/lint/lint_reporter.py +579 -0
  90. py_wlcli-0.7.0/src/wl_cli/commands/lint/lint_run.py +258 -0
  91. py_wlcli-0.7.0/src/wl_cli/commands/lint/mypy_config.py +90 -0
  92. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/registry.py +1 -0
  93. py_wlcli-0.7.0/src/wl_cli/commands/self/common/capabilities.py +30 -0
  94. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/self/handlers/base_handler.py +2 -3
  95. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/self/handlers/install_handler.py +23 -18
  96. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/self/handlers/status_handler.py +21 -19
  97. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/self/handlers/uninstall_handler.py +16 -15
  98. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/self/handlers/update_handler.py +25 -20
  99. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/self/handlers/version_handler.py +2 -3
  100. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/self/self_command.py +46 -25
  101. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/self/services/installation_manager.py +36 -31
  102. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/self/services/local_installer.py +38 -40
  103. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/self/services/pypi_updater.py +52 -47
  104. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/self/services/windows_update.py +50 -48
  105. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/testcommands/base_dependency_analyzer.py +3 -2
  106. py_wlcli-0.7.0/src/wl_cli/commands/testcommands/cache_manager.py +1156 -0
  107. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/testcommands/coverage_analyzer.py +364 -28
  108. py_wlcli-0.7.0/src/wl_cli/commands/testcommands/coverage_cache_manager.py +183 -0
  109. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/testcommands/progress_manager.py +25 -12
  110. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/testcommands/python_env_detector.py +39 -11
  111. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/testcommands/report_generator.py +25 -13
  112. py_wlcli-0.7.0/src/wl_cli/commands/testcommands/single_test_executor.py +250 -0
  113. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/testcommands/speed_checker.py +1 -1
  114. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/testcommands/test_command_builder.py +47 -22
  115. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/testcommands/test_commands.py +213 -43
  116. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/testcommands/test_reporter.py +21 -11
  117. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/testcommands/test_result_handler.py +10 -2
  118. py_wlcli-0.7.0/src/wl_cli/commands/testcommands/test_runner.py +1343 -0
  119. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/testcommands/test_utils.py +34 -1
  120. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/testcommands/utils/coverage_parser.py +2 -2
  121. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/testcommands/utils/env_info.py +1 -1
  122. py_wlcli-0.7.0/src/wl_cli/commands/testcommands/utils/project_root.py +61 -0
  123. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/update/services/__init__.py +0 -2
  124. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/update/services/backup_manager.py +33 -21
  125. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/update/services/component_manager.py +0 -9
  126. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/update/services/conflict_resolver.py +22 -14
  127. py_wlcli-0.7.0/src/wl_cli/commands/update/services/vendors_updater.py +85 -0
  128. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/update/services/version_tracker.py +3 -2
  129. py_wlcli-0.7.0/src/wl_cli/commands/update/update_command.py +270 -0
  130. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/workflow.py +10 -6
  131. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/lib/rust_utils.py +2 -1
  132. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/utils/cache.py +13 -1
  133. py_wlcli-0.7.0/src/wl_cli/utils/cache_ledger.py +355 -0
  134. py_wlcli-0.7.0/src/wl_cli/utils/cache_store.py +546 -0
  135. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/utils/config/config_loader.py +14 -6
  136. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/utils/config/core.py +223 -38
  137. py_wlcli-0.7.0/src/wl_cli/utils/config/defaults.py +142 -0
  138. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/utils/config/validation.py +2 -2
  139. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/utils/error_handler.py +2 -2
  140. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/utils/file_copier.py +2 -1
  141. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/utils/file_operations.py +8 -5
  142. py_wlcli-0.7.0/src/wl_cli/utils/logging.py +458 -0
  143. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/utils/platform_adapter.py +37 -0
  144. py_wlcli-0.7.0/src/wl_cli/utils/pre_commit.py +266 -0
  145. py_wlcli-0.7.0/src/wl_cli/utils/pre_commit_config.py +72 -0
  146. py_wlcli-0.7.0/src/wl_cli/utils/root.py +521 -0
  147. py_wlcli-0.7.0/src/wl_cli/utils/root_fallback.py +256 -0
  148. py_wlcli-0.7.0/src/wl_cli/utils/run_evidence.py +236 -0
  149. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/utils/structured_logging/config.py +28 -40
  150. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/utils/structured_logging/core.py +4 -41
  151. py_wlcli-0.7.0/src/wl_cli/utils/structured_logging/env.py +56 -0
  152. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/utils/structured_logging/formatters.py +1 -1
  153. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/utils/structured_logging/handlers.py +6 -14
  154. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/utils/structured_logging/logger.py +31 -72
  155. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/utils/subprocess.py +2 -2
  156. py_wlcli-0.7.0/src/wl_cli/utils/subprocess_utils.py +260 -0
  157. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/utils/test_utils/test_filter.py +3 -3
  158. py_wlcli-0.7.0/src/wl_cli/utils/uv_run.py +79 -0
  159. py_wlcli-0.7.0/src/wl_cli/utils/uv_tree.py +71 -0
  160. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/utils/uv_workspace.py +17 -41
  161. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/utils/version/pypi_version_checker.py +23 -12
  162. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/utils/version/version_detectors.py +15 -5
  163. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/utils/version/version_service.py +29 -16
  164. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/utils/version/version_updater.py +25 -13
  165. py_wlcli-0.7.0/src/wl_cli/utils/wl_dir_updater.py +1440 -0
  166. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/utils/workspace_detector/core.py +8 -0
  167. py_wlcli-0.7.0/src/wl_cli/utils/workspace_detector/detection_strategies.py +107 -0
  168. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/vendors/config/mypy.ini +7 -4
  169. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/vendors/config/template_config.toml +1 -1
  170. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/vendors/git/.gitignore +3 -0
  171. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/vendors/hooks/unix/pre-commit +12 -8
  172. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/vendors/hooks/unix/pre-push +137 -23
  173. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/vendors/project/.gitignore +3 -0
  174. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/vendors/rust/lib/rust_utils.py +3 -1
  175. py_wlcli-0.7.0/src/wl_cli/vendors/sop_doc/git-dev-sop.md +220 -0
  176. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/vendors/sop_doc/python-sop.md +3 -6
  177. py_wlcli-0.6.13/src/wl_cli/commands/buildcommands/__init__.py +0 -4
  178. py_wlcli-0.6.13/src/wl_cli/commands/buildcommands/builders/coordinator.py +0 -135
  179. py_wlcli-0.6.13/src/wl_cli/commands/clean/__init__.py +0 -6
  180. py_wlcli-0.6.13/src/wl_cli/commands/clean/dead_code/fixer.py +0 -124
  181. py_wlcli-0.6.13/src/wl_cli/commands/clean/lfs.py +0 -278
  182. py_wlcli-0.6.13/src/wl_cli/commands/dependency_resolver.py +0 -25
  183. py_wlcli-0.6.13/src/wl_cli/commands/format/__init__.py +0 -31
  184. py_wlcli-0.6.13/src/wl_cli/commands/format/format_cache.py +0 -75
  185. py_wlcli-0.6.13/src/wl_cli/commands/format/format_coordinator.py +0 -97
  186. py_wlcli-0.6.13/src/wl_cli/commands/format/format_executor.py +0 -366
  187. py_wlcli-0.6.13/src/wl_cli/commands/format/format_path_handler.py +0 -352
  188. py_wlcli-0.6.13/src/wl_cli/commands/format/python_formatter.py +0 -236
  189. py_wlcli-0.6.13/src/wl_cli/commands/format/rust_formatter.py +0 -80
  190. py_wlcli-0.6.13/src/wl_cli/commands/initenv/components/git/pre_commit_manager.py +0 -127
  191. py_wlcli-0.6.13/src/wl_cli/commands/initenv/components/project_structure/config_generator.py +0 -161
  192. py_wlcli-0.6.13/src/wl_cli/commands/initenv/components/project_structure/hooks_manager.py +0 -152
  193. py_wlcli-0.6.13/src/wl_cli/commands/initenv/components/venv_manager.py +0 -103
  194. py_wlcli-0.6.13/src/wl_cli/commands/lint/lint.py +0 -11
  195. py_wlcli-0.6.13/src/wl_cli/commands/lint/lint_command.py +0 -196
  196. py_wlcli-0.6.13/src/wl_cli/commands/lint/lint_executor.py +0 -93
  197. py_wlcli-0.6.13/src/wl_cli/commands/lint/lint_reporter.py +0 -352
  198. py_wlcli-0.6.13/src/wl_cli/commands/lint/mypy_config.py +0 -20
  199. py_wlcli-0.6.13/src/wl_cli/commands/testcommands/cache_manager.py +0 -937
  200. py_wlcli-0.6.13/src/wl_cli/commands/testcommands/coverage_cache_manager.py +0 -210
  201. py_wlcli-0.6.13/src/wl_cli/commands/testcommands/single_test_executor.py +0 -158
  202. py_wlcli-0.6.13/src/wl_cli/commands/testcommands/test_runner.py +0 -225
  203. py_wlcli-0.6.13/src/wl_cli/commands/testcommands/utils/project_root.py +0 -37
  204. py_wlcli-0.6.13/src/wl_cli/commands/update/services/gstack_updater.py +0 -576
  205. py_wlcli-0.6.13/src/wl_cli/commands/update/services/vendors_updater.py +0 -71
  206. py_wlcli-0.6.13/src/wl_cli/commands/update/update_command.py +0 -371
  207. py_wlcli-0.6.13/src/wl_cli/infrastructure/dependency_injection.py +0 -417
  208. py_wlcli-0.6.13/src/wl_cli/utils/config/defaults.py +0 -94
  209. py_wlcli-0.6.13/src/wl_cli/utils/logging.py +0 -340
  210. py_wlcli-0.6.13/src/wl_cli/utils/project_root.py +0 -86
  211. py_wlcli-0.6.13/src/wl_cli/utils/subprocess_utils.py +0 -164
  212. py_wlcli-0.6.13/src/wl_cli/utils/wl_dir_updater.py +0 -571
  213. py_wlcli-0.6.13/src/wl_cli/utils/workspace_detector/detection_strategies.py +0 -89
  214. py_wlcli-0.6.13/src/wl_cli/vendors/config/.coveragerc +0 -16
  215. {py_wlcli-0.6.13 → py_wlcli-0.7.0/rust}/LICENSE +0 -0
  216. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/rust/build.rs +0 -0
  217. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/rust/rust-analyzer.json +0 -0
  218. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/rust/src/lib.rs +0 -0
  219. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/rust/src/main.rs +0 -0
  220. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/base.py +0 -0
  221. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/buildcommands/build.py +0 -0
  222. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/buildcommands/builders/__init__.py +0 -0
  223. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/buildcommands/builders/cleanup.py +0 -0
  224. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/buildcommands/builders/stubs.py +0 -0
  225. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/buildcommands/test.py +0 -0
  226. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/clean/dead_code/__init__.py +0 -0
  227. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/clean/dead_code/utils.py +0 -0
  228. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/clean/utils/__init__.py +0 -0
  229. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/click_base.py +0 -0
  230. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/config/__init__.py +0 -0
  231. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/debug/__init__.py +0 -0
  232. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/debug/debug_subagent.py +0 -0
  233. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/debug/output_formatter.py +0 -0
  234. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/format/format_progress.py +0 -0
  235. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/format/format_reporter.py +0 -0
  236. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/git/__init__.py +0 -0
  237. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/git/git_flow.py +0 -0
  238. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/git/policy.py +0 -0
  239. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/initenv/__init__.py +0 -0
  240. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/initenv/common/__init__.py +0 -0
  241. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/initenv/common/exceptions.py +0 -0
  242. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/initenv/components/__init__.py +0 -0
  243. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/initenv/components/directory_utils.py +0 -0
  244. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/initenv/components/git/git_flow_interface.py +0 -0
  245. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/initenv/components/i18n_manager.py +0 -0
  246. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/initenv/components/log_manager.py +0 -0
  247. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/initenv/components/symlink_cleaner.py +0 -0
  248. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/initenv/services/__init__.py +0 -0
  249. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/lfs/__init__.py +0 -0
  250. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/lfs/hook.py +0 -0
  251. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/lfs/manager.py +0 -0
  252. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/lfs/policy.py +0 -0
  253. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/lint/__init__.py +0 -0
  254. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/self/__init__.py +0 -0
  255. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/self/common/__init__.py +0 -0
  256. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/self/common/config.py +0 -0
  257. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/self/common/version_cache.py +0 -0
  258. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/self/handlers/__init__.py +0 -0
  259. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/self/services/__init__.py +0 -0
  260. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/testcommands/__init__.py +0 -0
  261. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/testcommands/batch_processor.py +0 -0
  262. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/testcommands/utils/__init__.py +0 -0
  263. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/testcommands/utils/junit_parser.py +0 -0
  264. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/testcommands/utils/markdown_utils.py +0 -0
  265. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/update/__init__.py +0 -0
  266. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/update/utils/__init__.py +0 -0
  267. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/version/__init__.py +0 -0
  268. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/commands/version/version_command.py +0 -0
  269. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/exceptions.py +0 -0
  270. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/lib/__init__.py +0 -0
  271. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/utils/__init__.py +0 -0
  272. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/utils/config/__init__.py +0 -0
  273. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/utils/config/env_exporter.py +0 -0
  274. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/utils/config/env_parser.py +0 -0
  275. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/utils/language_utils.py +0 -0
  276. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/utils/lazy_import.py +0 -0
  277. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/utils/log_levels.py +0 -0
  278. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/utils/log_rotators.py +0 -0
  279. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/utils/output_context.py +0 -0
  280. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/utils/performance/__init__.py +0 -0
  281. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/utils/performance/decorators.py +0 -0
  282. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/utils/performance/exporter.py +0 -0
  283. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/utils/performance/models.py +0 -0
  284. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/utils/performance/monitor.py +0 -0
  285. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/utils/performance_monitor.py +0 -0
  286. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/utils/structured_logger.py +0 -0
  287. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/utils/structured_logging/__init__.py +0 -0
  288. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/utils/structured_logging/filtering.py +0 -0
  289. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/utils/structured_logging/filters.py +0 -0
  290. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/utils/test_utils/__init__.py +0 -0
  291. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/utils/uv_tool.py +0 -0
  292. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/utils/version/__init__.py +0 -0
  293. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/utils/version/version_comparator.py +0 -0
  294. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/utils/workspace_detector/__init__.py +0 -0
  295. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/utils/workspace_detector/exceptions.py +0 -0
  296. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/utils/workspace_detector/types.py +0 -0
  297. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/utils/workspace_detector/venv_resolver.py +0 -0
  298. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/vendors/config/.codespellrc +0 -0
  299. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/vendors/config/dependencies.toml +0 -0
  300. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/vendors/config/pyproject_defaults.toml +0 -0
  301. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/vendors/config/tool_configs.toml +0 -0
  302. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/vendors/git/.pre-commit-config.yaml +0 -0
  303. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/vendors/hooks/applypatch-msg.sample +0 -0
  304. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/vendors/hooks/commit-msg.sample +0 -0
  305. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/vendors/hooks/fsmonitor-watchman.sample +0 -0
  306. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/vendors/hooks/post-update.sample +0 -0
  307. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/vendors/hooks/pre-applypatch.sample +0 -0
  308. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/vendors/hooks/pre-commit +0 -0
  309. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/vendors/hooks/pre-commit.legacy +0 -0
  310. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/vendors/hooks/pre-commit.sample +0 -0
  311. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/vendors/hooks/pre-merge-commit.sample +0 -0
  312. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/vendors/hooks/pre-push.sample +0 -0
  313. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/vendors/hooks/pre-rebase.sample +0 -0
  314. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/vendors/hooks/pre-receive.sample +0 -0
  315. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/vendors/hooks/prepare-commit-msg.sample +0 -0
  316. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/vendors/hooks/push-to-checkout.sample +0 -0
  317. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/vendors/hooks/sendemail-validate.sample +0 -0
  318. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/vendors/hooks/unix/applypatch-msg.sample +0 -0
  319. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/vendors/hooks/unix/check_lockfile.py +0 -0
  320. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/vendors/hooks/unix/check_lockfile.sh +0 -0
  321. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/vendors/hooks/unix/commit-msg.sample +0 -0
  322. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/vendors/hooks/unix/fsmonitor-watchman.sample +0 -0
  323. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/vendors/hooks/unix/post-update.sample +0 -0
  324. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/vendors/hooks/unix/pre-applypatch.sample +0 -0
  325. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/vendors/hooks/unix/pre-commit.legacy +0 -0
  326. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/vendors/hooks/unix/pre-commit.py +0 -0
  327. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/vendors/hooks/unix/pre-commit.sample +0 -0
  328. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/vendors/hooks/unix/pre-merge-commit.sample +0 -0
  329. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/vendors/hooks/unix/pre-push.sample +0 -0
  330. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/vendors/hooks/unix/pre-rebase.sample +0 -0
  331. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/vendors/hooks/unix/pre-receive.sample +0 -0
  332. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/vendors/hooks/unix/prepare-commit-msg.sample +0 -0
  333. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/vendors/hooks/update.sample +0 -0
  334. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/vendors/hooks/win/work.bat +0 -0
  335. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/vendors/project/.python-version +0 -0
  336. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/vendors/project/LICENSE +0 -0
  337. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/vendors/project/README.md +0 -0
  338. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/vendors/project/pyproject.toml +0 -0
  339. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/vendors/project/pyproject_no_workspace.toml +0 -0
  340. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/vendors/project/pyproject_workspace.toml +0 -0
  341. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/vendors/readme/README.md +0 -0
  342. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/vendors/rust/Cargo.toml +0 -0
  343. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/vendors/rust/lib/__init__.py +0 -0
  344. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/vendors/rust/src/lib.rs +0 -0
  345. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/vendors/rust/src/main.rs +0 -0
  346. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/vendors/rust/tests/test_rust_fallback.py +0 -0
  347. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/vendors/sop_doc/industrial-standard-sop.md +0 -0
  348. {py_wlcli-0.6.13 → py_wlcli-0.7.0}/src/wl_cli/vendors/sop_doc/rust-readme.md +0 -0
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2025 Admin
3
+ Copyright (c) 2025 WL Admin
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: py_wlcli
3
- Version: 0.6.13
3
+ Version: 0.7.0
4
4
  Requires-Dist: toml>=0.10.2
5
5
  Requires-Dist: click>=8.1.0
6
6
  Requires-Dist: tqdm>=4.66.0
@@ -27,8 +27,8 @@ Author-email: WL Admin <wl.admin@example.com>
27
27
  License-Expression: MIT
28
28
  Requires-Python: >=3.11
29
29
  Description-Content-Type: text/markdown; charset=UTF-8; variant=GFM
30
- Project-URL: Homepage, https://gitlab.gewinnrobo.com/Humuyuan/py_wlcommands
31
- Project-URL: Issues, https://gitlab.gewinnrobo.com/Humuyuan/py_wlcommands/-/issues
30
+ Project-URL: Homepage, https://gitlab.gewinnrobo.com/Humuyuan/wl-cli
31
+ Project-URL: Issues, https://gitlab.gewinnrobo.com/Humuyuan/wl-cli/-/issues
32
32
 
33
33
  # wl_cli(`wl` CLI)
34
34
 
@@ -46,11 +46,11 @@ Project-URL: Issues, https://gitlab.gewinnrobo.com/Humuyuan/py_wlcommands/-/issu
46
46
  | `wl format` | 格式化 Python 与 Rust 代码 |
47
47
  | `wl lint` | 代码质量检查(ruff/mypy 等) |
48
48
  | `wl clean` | 清理构建产物与临时文件 |
49
- | `wl debug` | 质量门(测试 + 格式检查) |
49
+ | `wl debug` | (已弃用)质量门 — 改用 `wl test -s` 与 `wl format -s` |
50
50
  | `wl self` | 自管理命令 |
51
51
 
52
52
  命令行别名:`b`→build、`c`→clean、`f`→format、`i`→init。
53
- 完整命令参考见 [CLI_COMMANDS.md](https://github.com/CharlieZi/py_wlcommands/blob/main/CLI_COMMANDS.md)。
53
+ 完整命令参考见 [CLI_COMMANDS.md](https://github.com/CharlieZi/wl-cli/blob/main/CLI_COMMANDS.md)。
54
54
 
55
55
  ## 环境要求
56
56
 
@@ -63,23 +63,23 @@ Project-URL: Issues, https://gitlab.gewinnrobo.com/Humuyuan/py_wlcommands/-/issu
63
63
  ### 稳定版(PyPI)
64
64
 
65
65
  ```bash
66
- pip install wl-cli
66
+ pip install py-wlcli
67
67
  ```
68
68
 
69
- 按需安装可选 extra:`pip install "wl-cli[lfs]"`(LFS watch)、
70
- `pip install "wl-cli[test]"`(测试套件)、`pip install "wl-cli[dev]"`(开发工具)。
71
- 详见[安装文档](https://github.com/CharlieZi/py_wlcommands/blob/main/docs/user/installation.md)。
69
+ 按需安装可选 extra:`pip install "py-wlcli[lfs]"`(LFS watch)、
70
+ `pip install "py-wlcli[test]"`(测试套件)、`pip install "py-wlcli[dev]"`(开发工具)。
71
+ 详见[安装文档](https://github.com/CharlieZi/wl-cli/blob/main/docs/user/installation.md)。
72
72
 
73
73
  ### 开发版(从源码)
74
74
 
75
75
  ```bash
76
76
  # 以 GitLab 为主仓(origin),GitHub 为镜像
77
- git clone https://gitlab.gewinnrobo.com/Humuyuan/py_wlcommands.git
77
+ git clone https://gitlab.gewinnrobo.com/Humuyuan/wl-cli.git
78
78
  cd wl_cli
79
79
  uv pip install -e ".[dev,test]"
80
80
  ```
81
81
 
82
- GitHub 镜像:<https://github.com/CharlieZi/py_wlcommands.git>
82
+ GitHub 镜像:<https://github.com/CharlieZi/wl-cli.git>
83
83
 
84
84
  ## 快速开始
85
85
 
@@ -102,25 +102,24 @@ pytest tests/ -v # 指定文件(pytest 直跑)
102
102
  ```
103
103
 
104
104
  提交前请确保 pre-commit 通过(ruff、codespell、lockfile 一致性等)。
105
- 开发约束详见 [CLAUDE.md](https://github.com/CharlieZi/py_wlcommands/blob/main/CLAUDE.md),
106
- 贡献流程见 [CONTRIBUTING.md](https://github.com/CharlieZi/py_wlcommands/blob/main/CONTRIBUTING.md)。
105
+ 开发约束详见 [CLAUDE.md](https://github.com/CharlieZi/wl-cli/blob/main/CLAUDE.md),
106
+ 贡献流程见 [CONTRIBUTING.md](https://github.com/CharlieZi/wl-cli/blob/main/CONTRIBUTING.md)。
107
107
 
108
108
  ## 文档
109
109
 
110
- - [CLI_COMMANDS.md](https://github.com/CharlieZi/py_wlcommands/blob/main/CLI_COMMANDS.md) — 命令参考
111
- - [CONTEXT.md](https://github.com/CharlieZi/py_wlcommands/blob/main/CONTEXT.md) — 架构术语(Click 迁移语境)
112
- - [docs/](https://github.com/CharlieZi/py_wlcommands/tree/main/docs) — 设计、ADR、章节与 CICD/发布文档
113
- - [安装文档](https://github.com/CharlieZi/py_wlcommands/blob/main/docs/user/installation.md) — 安装细节与 shell 补全
110
+ - [CLI_COMMANDS.md](https://github.com/CharlieZi/wl-cli/blob/main/CLI_COMMANDS.md) — 命令参考
111
+ - [CONTEXT.md](https://github.com/CharlieZi/wl-cli/blob/main/CONTEXT.md) — 架构术语(Click 迁移语境)
112
+ - [docs/](https://github.com/CharlieZi/wl-cli/tree/main/docs) — 设计、ADR、章节与 CICD/发布文档
113
+ - [安装文档](https://github.com/CharlieZi/wl-cli/blob/main/docs/user/installation.md) — 安装细节与 shell 补全
114
114
 
115
115
  ## 架构速览
116
116
 
117
- Click CLI([src/py_wlcommands/cli_click.py](https://github.com/CharlieZi/py_wlcommands/blob/main/src/py_wlcommands/cli_click.py)
117
+ Click CLI([src/wl_cli/cli_click.py](https://github.com/CharlieZi/wl-cli/blob/main/src/wl_cli/cli_click.py)
118
118
  经 `setup_commands()` 直接注册)→ 各命令实现(`commands/<group>/`)→ 业务逻辑;
119
- Rust 原生扩展(`rust/`、`src/wl_cli/lib/`)经 maturin 编译为 `wl_cli_native`;
120
- 依赖注入容器集中管理共享服务(`infrastructure/dependency_injection.py`)。
121
- 架构演进背景见 [Click 迁移设计](https://github.com/CharlieZi/py_wlcommands/blob/main/docs/superpowers/specs/2026-06-02-full-click-migration-design.md)。
119
+ Rust 原生扩展(`rust/`、`src/wl_cli/lib/`)经 maturin 编译为 `wl_cli_native`。
120
+ 架构演进背景见 [Click 迁移设计](https://github.com/CharlieZi/wl-cli/blob/main/docs/superpowers/specs/2026-06-02-full-click-migration-design.md)。
122
121
 
123
122
  ## 许可证
124
123
 
125
- MIT,见 [LICENSE](https://github.com/CharlieZi/py_wlcommands/blob/main/LICENSE)。
124
+ MIT,见 [LICENSE](https://github.com/CharlieZi/wl-cli/blob/main/LICENSE)。
126
125
 
@@ -14,11 +14,11 @@
14
14
  | `wl format` | 格式化 Python 与 Rust 代码 |
15
15
  | `wl lint` | 代码质量检查(ruff/mypy 等) |
16
16
  | `wl clean` | 清理构建产物与临时文件 |
17
- | `wl debug` | 质量门(测试 + 格式检查) |
17
+ | `wl debug` | (已弃用)质量门 — 改用 `wl test -s` 与 `wl format -s` |
18
18
  | `wl self` | 自管理命令 |
19
19
 
20
20
  命令行别名:`b`→build、`c`→clean、`f`→format、`i`→init。
21
- 完整命令参考见 [CLI_COMMANDS.md](https://github.com/CharlieZi/py_wlcommands/blob/main/CLI_COMMANDS.md)。
21
+ 完整命令参考见 [CLI_COMMANDS.md](https://github.com/CharlieZi/wl-cli/blob/main/CLI_COMMANDS.md)。
22
22
 
23
23
  ## 环境要求
24
24
 
@@ -31,23 +31,23 @@
31
31
  ### 稳定版(PyPI)
32
32
 
33
33
  ```bash
34
- pip install wl-cli
34
+ pip install py-wlcli
35
35
  ```
36
36
 
37
- 按需安装可选 extra:`pip install "wl-cli[lfs]"`(LFS watch)、
38
- `pip install "wl-cli[test]"`(测试套件)、`pip install "wl-cli[dev]"`(开发工具)。
39
- 详见[安装文档](https://github.com/CharlieZi/py_wlcommands/blob/main/docs/user/installation.md)。
37
+ 按需安装可选 extra:`pip install "py-wlcli[lfs]"`(LFS watch)、
38
+ `pip install "py-wlcli[test]"`(测试套件)、`pip install "py-wlcli[dev]"`(开发工具)。
39
+ 详见[安装文档](https://github.com/CharlieZi/wl-cli/blob/main/docs/user/installation.md)。
40
40
 
41
41
  ### 开发版(从源码)
42
42
 
43
43
  ```bash
44
44
  # 以 GitLab 为主仓(origin),GitHub 为镜像
45
- git clone https://gitlab.gewinnrobo.com/Humuyuan/py_wlcommands.git
45
+ git clone https://gitlab.gewinnrobo.com/Humuyuan/wl-cli.git
46
46
  cd wl_cli
47
47
  uv pip install -e ".[dev,test]"
48
48
  ```
49
49
 
50
- GitHub 镜像:<https://github.com/CharlieZi/py_wlcommands.git>
50
+ GitHub 镜像:<https://github.com/CharlieZi/wl-cli.git>
51
51
 
52
52
  ## 快速开始
53
53
 
@@ -70,24 +70,23 @@ pytest tests/ -v # 指定文件(pytest 直跑)
70
70
  ```
71
71
 
72
72
  提交前请确保 pre-commit 通过(ruff、codespell、lockfile 一致性等)。
73
- 开发约束详见 [CLAUDE.md](https://github.com/CharlieZi/py_wlcommands/blob/main/CLAUDE.md),
74
- 贡献流程见 [CONTRIBUTING.md](https://github.com/CharlieZi/py_wlcommands/blob/main/CONTRIBUTING.md)。
73
+ 开发约束详见 [CLAUDE.md](https://github.com/CharlieZi/wl-cli/blob/main/CLAUDE.md),
74
+ 贡献流程见 [CONTRIBUTING.md](https://github.com/CharlieZi/wl-cli/blob/main/CONTRIBUTING.md)。
75
75
 
76
76
  ## 文档
77
77
 
78
- - [CLI_COMMANDS.md](https://github.com/CharlieZi/py_wlcommands/blob/main/CLI_COMMANDS.md) — 命令参考
79
- - [CONTEXT.md](https://github.com/CharlieZi/py_wlcommands/blob/main/CONTEXT.md) — 架构术语(Click 迁移语境)
80
- - [docs/](https://github.com/CharlieZi/py_wlcommands/tree/main/docs) — 设计、ADR、章节与 CICD/发布文档
81
- - [安装文档](https://github.com/CharlieZi/py_wlcommands/blob/main/docs/user/installation.md) — 安装细节与 shell 补全
78
+ - [CLI_COMMANDS.md](https://github.com/CharlieZi/wl-cli/blob/main/CLI_COMMANDS.md) — 命令参考
79
+ - [CONTEXT.md](https://github.com/CharlieZi/wl-cli/blob/main/CONTEXT.md) — 架构术语(Click 迁移语境)
80
+ - [docs/](https://github.com/CharlieZi/wl-cli/tree/main/docs) — 设计、ADR、章节与 CICD/发布文档
81
+ - [安装文档](https://github.com/CharlieZi/wl-cli/blob/main/docs/user/installation.md) — 安装细节与 shell 补全
82
82
 
83
83
  ## 架构速览
84
84
 
85
- Click CLI([src/py_wlcommands/cli_click.py](https://github.com/CharlieZi/py_wlcommands/blob/main/src/py_wlcommands/cli_click.py)
85
+ Click CLI([src/wl_cli/cli_click.py](https://github.com/CharlieZi/wl-cli/blob/main/src/wl_cli/cli_click.py)
86
86
  经 `setup_commands()` 直接注册)→ 各命令实现(`commands/<group>/`)→ 业务逻辑;
87
- Rust 原生扩展(`rust/`、`src/wl_cli/lib/`)经 maturin 编译为 `wl_cli_native`;
88
- 依赖注入容器集中管理共享服务(`infrastructure/dependency_injection.py`)。
89
- 架构演进背景见 [Click 迁移设计](https://github.com/CharlieZi/py_wlcommands/blob/main/docs/superpowers/specs/2026-06-02-full-click-migration-design.md)。
87
+ Rust 原生扩展(`rust/`、`src/wl_cli/lib/`)经 maturin 编译为 `wl_cli_native`。
88
+ 架构演进背景见 [Click 迁移设计](https://github.com/CharlieZi/wl-cli/blob/main/docs/superpowers/specs/2026-06-02-full-click-migration-design.md)。
90
89
 
91
90
  ## 许可证
92
91
 
93
- MIT,见 [LICENSE](https://github.com/CharlieZi/py_wlcommands/blob/main/LICENSE)。
92
+ MIT,见 [LICENSE](https://github.com/CharlieZi/wl-cli/blob/main/LICENSE)。
@@ -49,8 +49,8 @@ build-backend = "maturin"
49
49
 
50
50
 
51
51
  [project.urls]
52
- Homepage = "https://gitlab.gewinnrobo.com/Humuyuan/py_wlcommands"
53
- Issues = "https://gitlab.gewinnrobo.com/Humuyuan/py_wlcommands/-/issues"
52
+ Homepage = "https://gitlab.gewinnrobo.com/Humuyuan/wl-cli"
53
+ Issues = "https://gitlab.gewinnrobo.com/Humuyuan/wl-cli/-/issues"
54
54
 
55
55
  [tool.maturin]
56
56
  manifest-path = "rust/Cargo.toml"
@@ -89,11 +89,24 @@ target-version = "py310"
89
89
 
90
90
  [tool.ruff.format]
91
91
  preview = false
92
+ # Vendored upstream assets are not this repo's code, so they must never redden
93
+ # the format leg -- same 口径 as the existing codespell exclusion
94
+ # (^src/wl_cli/vendors/ in .wl/.pre-commit-config.yaml). `lint` and `format`
95
+ # keep separate exclude lists, so the pattern is written in both; the dual
96
+ # assertion in tests/test_gate_lint_scope.py pins both legs so neither can be
97
+ # silently widened. The glob needs `/**` (ruff matches file paths, so a bare
98
+ # directory path matches nothing).
99
+ exclude = [ "src/wl_cli/vendors/**",]
92
100
 
93
101
  [tool.ruff.lint]
94
102
  select = ["E", "W", "F", "I", "C4", "UP", "N", "B", "C90", "TCH"]
95
- ignore = ["E501", "B904", "F401", "F841", "E402", "F811", "S607", "N802", "N817"]
96
- exclude = [ ".git", ".ruff_cache", "__pycache__", "build", "dist", "*.egg-info", "uv.lock", "tmp",]
103
+ ignore = ["E501", "B904", "E402", "F811", "S607", "N802", "N817"]
104
+ exclude = [ ".git", ".ruff_cache", "__pycache__", "build", "dist", "*.egg-info", "uv.lock", "tmp", "src/wl_cli/vendors/**",]
105
+
106
+ # F841 (unused local variable) is enabled for package code as a dead-code
107
+ # backstop, but exempted in tests where unused locals are often scaffolding.
108
+ [tool.ruff.lint.per-file-ignores]
109
+ "tests/*" = ["F841"]
97
110
 
98
111
  [tool.ruff.lint.mccabe]
99
112
  max-complexity = 14
@@ -133,5 +146,4 @@ omit = [
133
146
  "tests/*",
134
147
  "*/__pycache__/*",
135
148
  ".venv/*",
136
- "wl_cli/commands/selfcommands/*",
137
149
  ]
@@ -2,22 +2,6 @@
2
2
  # It is not intended for manual editing.
3
3
  version = 4
4
4
 
5
- [[package]]
6
- name = "cc"
7
- version = "1.4.5"
8
- source = "registry+https://github.com/rust-lang/crates.io-index"
9
- checksum = "005ec2760ca554fae18df7a11195552ec576cd665632a881bc011d5bb2fd4d80"
10
- dependencies = [
11
- "find-msvc-tools",
12
- "shlex",
13
- ]
14
-
15
- [[package]]
16
- name = "find-msvc-tools"
17
- version = "0.1.12"
18
- source = "registry+https://github.com/rust-lang/crates.io-index"
19
- checksum = "3e0f1c7c3a72c66fd80abe965175f7523475c0489a87d3ff9d6e8c87d87a9d2d"
20
-
21
5
  [[package]]
22
6
  name = "heck"
23
7
  version = "0.5.0"
@@ -26,9 +10,9 @@ checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
26
10
 
27
11
  [[package]]
28
12
  name = "libc"
29
- version = "0.2.189"
13
+ version = "0.2.186"
30
14
  source = "registry+https://github.com/rust-lang/crates.io-index"
31
- checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2"
15
+ checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66"
32
16
 
33
17
  [[package]]
34
18
  name = "once_cell"
@@ -38,24 +22,24 @@ checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50"
38
22
 
39
23
  [[package]]
40
24
  name = "portable-atomic"
41
- version = "1.15.0"
25
+ version = "1.13.1"
42
26
  source = "registry+https://github.com/rust-lang/crates.io-index"
43
- checksum = "05c8b63e8d9609db387f0324918f81d68fe27748f084ef092fb35954d0539a85"
27
+ checksum = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49"
44
28
 
45
29
  [[package]]
46
30
  name = "proc-macro2"
47
- version = "1.0.107"
31
+ version = "1.0.106"
48
32
  source = "registry+https://github.com/rust-lang/crates.io-index"
49
- checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9"
33
+ checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934"
50
34
  dependencies = [
51
35
  "unicode-ident",
52
36
  ]
53
37
 
54
38
  [[package]]
55
39
  name = "pyo3"
56
- version = "0.28.3"
40
+ version = "0.29.2"
57
41
  source = "registry+https://github.com/rust-lang/crates.io-index"
58
- checksum = "91fd8e38a3b50ed1167fb981cd6fd60147e091784c427b8f7183a7ee32c31c12"
42
+ checksum = "4688ddedf473e32662b9b067670129a8afb8c18e351482c70d62ba4a88171e8b"
59
43
  dependencies = [
60
44
  "libc",
61
45
  "once_cell",
@@ -67,19 +51,18 @@ dependencies = [
67
51
 
68
52
  [[package]]
69
53
  name = "pyo3-build-config"
70
- version = "0.28.3"
54
+ version = "0.29.2"
71
55
  source = "registry+https://github.com/rust-lang/crates.io-index"
72
- checksum = "e368e7ddfdeb98c9bca7f8383be1648fd84ab466bf2bc015e94008db6d35611e"
56
+ checksum = "f41027e41b4bd03f6e60f9f417fe24a6341a6bb744edd62b6f709f2a52ea30e9"
73
57
  dependencies = [
74
- "python3-dll-a",
75
58
  "target-lexicon",
76
59
  ]
77
60
 
78
61
  [[package]]
79
62
  name = "pyo3-ffi"
80
- version = "0.28.3"
63
+ version = "0.29.2"
81
64
  source = "registry+https://github.com/rust-lang/crates.io-index"
82
- checksum = "7f29e10af80b1f7ccaf7f69eace800a03ecd13e883acfacc1e5d0988605f651e"
65
+ checksum = "e591a95526fead067432c3b3a33fc74770b87b1e04e73671090d9c2055a2b327"
83
66
  dependencies = [
84
67
  "libc",
85
68
  "pyo3-build-config",
@@ -87,9 +70,9 @@ dependencies = [
87
70
 
88
71
  [[package]]
89
72
  name = "pyo3-macros"
90
- version = "0.28.3"
73
+ version = "0.29.2"
91
74
  source = "registry+https://github.com/rust-lang/crates.io-index"
92
- checksum = "df6e520eff47c45997d2fc7dd8214b25dd1310918bbb2642156ef66a67f29813"
75
+ checksum = "73225868fc1cd84eef2c3c230ddb91273bf1de46aeb8a4248da76d32a0924a1c"
93
76
  dependencies = [
94
77
  "proc-macro2",
95
78
  "pyo3-macros-backend",
@@ -99,46 +82,30 @@ dependencies = [
99
82
 
100
83
  [[package]]
101
84
  name = "pyo3-macros-backend"
102
- version = "0.28.3"
85
+ version = "0.29.2"
103
86
  source = "registry+https://github.com/rust-lang/crates.io-index"
104
- checksum = "c4cdc218d835738f81c2338f822078af45b4afdf8b2e33cbb5916f108b813acb"
87
+ checksum = "571575aa3749fa6216757dd47d2a3e7ef360f329a40f0666a9fbd14889024952"
105
88
  dependencies = [
106
89
  "heck",
107
90
  "proc-macro2",
108
- "pyo3-build-config",
109
91
  "quote",
110
92
  "syn",
111
93
  ]
112
94
 
113
- [[package]]
114
- name = "python3-dll-a"
115
- version = "0.2.15"
116
- source = "registry+https://github.com/rust-lang/crates.io-index"
117
- checksum = "d80ba7540edb18890d444c5aa8e1f1f99b1bdf26fb26ae383135325f4a36042b"
118
- dependencies = [
119
- "cc",
120
- ]
121
-
122
95
  [[package]]
123
96
  name = "quote"
124
- version = "1.0.47"
97
+ version = "1.0.46"
125
98
  source = "registry+https://github.com/rust-lang/crates.io-index"
126
- checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001"
99
+ checksum = "dfbc457d0c7a0759a614551b11a6409e5951f6c7537be1f1b7682b9ae9230368"
127
100
  dependencies = [
128
101
  "proc-macro2",
129
102
  ]
130
103
 
131
- [[package]]
132
- name = "shlex"
133
- version = "2.0.1"
134
- source = "registry+https://github.com/rust-lang/crates.io-index"
135
- checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba"
136
-
137
104
  [[package]]
138
105
  name = "syn"
139
- version = "2.0.119"
106
+ version = "2.0.118"
140
107
  source = "registry+https://github.com/rust-lang/crates.io-index"
141
- checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297"
108
+ checksum = "1b9ae57f904213ebb649ce6895b8a66c66f0203b9319718f69a5612a065b1422"
142
109
  dependencies = [
143
110
  "proc-macro2",
144
111
  "quote",
@@ -159,7 +126,7 @@ checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75"
159
126
 
160
127
  [[package]]
161
128
  name = "wl_cli_native"
162
- version = "0.6.13"
129
+ version = "0.7.0"
163
130
  dependencies = [
164
131
  "pyo3",
165
132
  ]
@@ -1,7 +1,7 @@
1
1
 
2
2
  [package]
3
3
  name = "wl_cli_native"
4
- version = "0.6.13"
4
+ version = "0.7.0"
5
5
  edition = "2024"
6
6
  description = "wl_cli - Python项目"
7
7
  authors = ["WL Admin <wl.admin@example.com>"]
@@ -10,7 +10,8 @@ license = "MIT"
10
10
  [dependencies]
11
11
  # 与 pyproject.toml [tool.maturin] features 保持同步(lockstep)——二者取并集,改动需同步。
12
12
  # Keep in lockstep with [tool.maturin] features in pyproject.toml — cargo unions both sets.
13
- pyo3 = { version = "0.28.2", features = ["extension-module", "abi3", "abi3-py311", "generate-import-lib"] }
13
+ # IS-5: 0.28.3 had RUSTSEC-2026-0176/-0177 (fixed in >=0.29.0); 0.29 keeps the same features.
14
+ pyo3 = { version = "0.29.0", features = ["extension-module", "abi3", "abi3-py311", "generate-import-lib"] }
14
15
 
15
16
  [lib]
16
17
  name = "wl_cli_native"
@@ -0,0 +1,22 @@
1
+ # cargo-deny license policy (IS-16).
2
+ # Allow list covers every license in the resolved rust/Cargo.lock graph
3
+ # (pyo3 + its proc-macro/build deps). Derived from `cargo metadata`:
4
+ # MIT OR Apache-2.0 pyo3 & friends, heck, libc, once_cell, ...
5
+ # Apache-2.0 OR MIT portable-atomic
6
+ # Apache-2.0 WITH LLVM-exception target-lexicon
7
+ # (MIT OR Apache-2.0) AND Unicode-3.0 unicode-ident
8
+ [licenses]
9
+ allow = [
10
+ "MIT",
11
+ "Apache-2.0",
12
+ "Apache-2.0 WITH LLVM-exception",
13
+ "Unicode-3.0",
14
+ ]
15
+
16
+ # Source allow-list (issue #85): every crate in rust/Cargo.lock resolves from
17
+ # the crates.io registry (there are no git dependencies), so allow exactly that
18
+ # and nothing else. `cargo deny check sources` fails if a dependency is ever
19
+ # pulled from an unexpected registry or git host.
20
+ [sources]
21
+ allow-registry = ["https://github.com/rust-lang/crates.io-index"]
22
+ allow-git = []
@@ -24,4 +24,4 @@ def _read_version_from_file() -> str:
24
24
 
25
25
  __version__ = _read_version_from_file()
26
26
 
27
- from .commands import Command
27
+ from .commands import Command # noqa: F401 # public re-export: wl_cli.Command
@@ -16,7 +16,14 @@ def _setup_stdio_encoding() -> None:
16
16
  characters crash print(). This wraps stdout/stderr with explicit
17
17
  UTF-8 encoding so all output works regardless of terminal locale.
18
18
  """
19
- if not sys.platform.startswith("win"):
19
+ # Imported here (with a script-execution fallback, matching the cli_click
20
+ # import below) so this module stays runnable as a plain script.
21
+ try:
22
+ from .utils import platform_adapter
23
+ except ImportError: # pragma: no cover - direct script execution
24
+ from wl_cli.utils import platform_adapter # type: ignore[no-redef]
25
+
26
+ if not platform_adapter.PlatformAdapter.is_windows():
20
27
  return
21
28
  # PYTHONIOENCODING also helps subprocess pipe encoding
22
29
  os.environ.setdefault("PYTHONIOENCODING", "utf-8")
@@ -48,7 +55,7 @@ def check_installation() -> bool:
48
55
  True if installed correctly, False otherwise.
49
56
  """
50
57
  try:
51
- import wl_cli
58
+ import wl_cli # noqa: F401 # availability probe: import must succeed
52
59
 
53
60
  return True
54
61
  except ImportError:
@@ -105,8 +112,14 @@ except ImportError:
105
112
 
106
113
 
107
114
  def main() -> None:
108
- """Main entry point for WL Commands."""
109
- cli_main()
115
+ """Main entry point for WL Commands.
116
+
117
+ ``cli_click.main`` returns the process exit code (0 on success, 1 when a
118
+ command raises), so the entry point must hand that value to the
119
+ interpreter instead of discarding it. Without the ``SystemExit`` every
120
+ ``return 1`` path inside ``cli_click.main`` exited 0 (#186).
121
+ """
122
+ raise SystemExit(cli_main())
110
123
 
111
124
 
112
125
  # Alias for compatibility with tests
@@ -36,21 +36,19 @@ def _register_click_command(
36
36
  ) -> None:
37
37
  """Register a Click command function with the wl group.
38
38
 
39
+ Aliases register the *same* Click object under a second name (Click keeps
40
+ the object's own ``name`` untouched), so an alias accepts exactly the
41
+ canonical command's options, arguments and subcommands. A zero-option
42
+ wrapper shell would reject every parameter an alias was given (#194).
43
+
39
44
  Args:
40
45
  name: Command name
41
46
  click_func: Click command function
42
47
  aliases: List of command aliases
43
48
  """
44
49
  wl.add_command(click_func, name=name)
45
- if aliases:
46
- for alias in aliases:
47
-
48
- @click.command(name=alias, help=click_func.help or "")
49
- @click.pass_context
50
- def alias_func(ctx, *args, **kwargs):
51
- return click_func(click.get_current_context().args, **kwargs)
52
-
53
- wl.add_command(alias_func, name=alias)
50
+ for alias in aliases or ():
51
+ wl.add_command(click_func, name=alias)
54
52
 
55
53
 
56
54
  def setup_commands():
@@ -4,7 +4,7 @@ import functools
4
4
  from collections.abc import Callable
5
5
  from typing import Any
6
6
 
7
- from ..exceptions import CommandError, ErrorCode
7
+ from ..exceptions import ErrorCode
8
8
  from .base import CommandBase
9
9
  from .registry import get_command, list_commands
10
10
 
@@ -0,0 +1 @@
1
+ """Build commands package (registered lazily via COMMAND_TABLE)."""
@@ -23,28 +23,6 @@ def build_project_full() -> None:
23
23
  coordinator.build_project_full()
24
24
 
25
25
 
26
- def build_windows() -> None:
27
- """Build the project on Windows."""
28
- try:
29
- coordinator = BuildCoordinator()
30
- coordinator.build_windows()
31
- except Exception as e:
32
- from wl_cli.exceptions import CommandError
33
-
34
- raise CommandError(f"Build failed: {e}")
35
-
36
-
37
- def build_unix() -> None:
38
- """Build the project on Unix-like systems."""
39
- try:
40
- coordinator = BuildCoordinator()
41
- coordinator.build_unix()
42
- except Exception as e:
43
- from wl_cli.exceptions import CommandError
44
-
45
- raise CommandError(f"Build failed: {e}")
46
-
47
-
48
26
  def build_project() -> None:
49
27
  """Build the project based on the current platform."""
50
28
  try:
@@ -60,8 +38,6 @@ def build_project() -> None:
60
38
  __all__ = [
61
39
  "is_rust_enabled",
62
40
  "build_project_full",
63
- "build_windows",
64
- "build_unix",
65
41
  "build_project",
66
42
  "EnvironmentDetector",
67
43
  "StubsManager",