py-wlcli 0.8.0__tar.gz → 0.8.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/PKG-INFO +1 -1
- py_wlcli-0.8.1/VERSION +1 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/capabilities.py +1 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/cc/checks.py +105 -19
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/cc/cli.py +1 -1
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/cc/mutate.py +18 -27
- py_wlcli-0.8.0/VERSION +0 -1
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/.gitignore +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/LICENSE +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/README.md +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/pyproject.toml +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/__init__.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/__init__.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/__main__.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/cc/__init__.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/cli_click.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/__init__.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/base.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/buildcommands/__init__.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/buildcommands/build.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/buildcommands/build_utils.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/buildcommands/builders/__init__.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/buildcommands/builders/cleanup.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/buildcommands/builders/coordinator.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/buildcommands/builders/environment.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/buildcommands/builders/rust_builder.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/buildcommands/builders/stubs.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/buildcommands/dist.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/buildcommands/test.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/clean/__init__.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/clean/build.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/clean/clean.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/clean/clean_utils.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/clean/core.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/clean/dead_code/__init__.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/clean/dead_code/dead_code_command.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/clean/dead_code/detector.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/clean/dead_code/fixer.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/clean/dead_code/reporter.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/clean/dead_code/utils.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/clean/lfs.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/clean/python.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/clean/rust.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/clean/utils/__init__.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/clean/venv.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/cleanup.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/click_base.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/config/__init__.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/config/config.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/debug/__init__.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/debug/debug.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/debug/debug_cache.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/debug/debug_subagent.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/debug/output_formatter.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/debug/source_hasher.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/format/__init__.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/format/format_cache_adapter.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/format/format_command.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/format/format_coordinator.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/format/format_executor.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/format/format_outcome.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/format/format_path_handler.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/format/format_progress.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/format/format_reporter.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/format/python_formatter.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/format/rust_formatter.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/gate/__init__.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/gate/gate_command.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/gate/preflight.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/git/__init__.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/git/config.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/git/git_facts.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/git/git_flow.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/git/hook.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/git/policy.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/git/push_update.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/initenv/__init__.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/initenv/common/__init__.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/initenv/common/check_git_bash.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/initenv/common/error_handler.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/initenv/common/exceptions.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/initenv/components/__init__.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/initenv/components/cargo_sync.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/initenv/components/config_manager.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/initenv/components/directory_utils.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/initenv/components/git/__init__.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/initenv/components/git/branch_creator.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/initenv/components/git/git_flow_interface.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/initenv/components/git/git_flow_manager.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/initenv/components/git/git_lfs_manager.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/initenv/components/git/git_utility.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/initenv/components/git/gitignore_manager.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/initenv/components/git_initializer.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/initenv/components/i18n_manager.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/initenv/components/log_manager.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/initenv/components/project_structure/__init__.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/initenv/components/project_structure/config_generator.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/initenv/components/project_structure/directory_creator.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/initenv/components/project_structure/hook_source.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/initenv/components/project_structure/hooks_manager.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/initenv/components/project_structure/readme_handler.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/initenv/components/project_structure/rust_files_handler.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/initenv/components/project_structure/setup_handler.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/initenv/components/project_structure/sop_generator.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/initenv/components/project_structure/template_copier.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/initenv/components/project_structure/template_manager.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/initenv/components/pyproject_generator.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/initenv/components/rust_initializer.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/initenv/components/symlink_cleaner.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/initenv/components/symlink_manager.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/initenv/components/venv_manager.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/initenv/initenv.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/initenv/services/__init__.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/initenv/services/environment_initializer.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/initenv/services/git_lfs_initializer.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/initenv/services/project_structure_initializer.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/lfs/README.md +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/lfs/__init__.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/lfs/cli.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/lfs/config.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/lfs/hook.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/lfs/initializer.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/lfs/manager.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/lfs/policy.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/lfs/watcher.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/lint/__init__.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/lint/lint_command.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/lint/lint_executor.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/lint/lint_reporter.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/lint/lint_run.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/lint/mypy_config.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/registry.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/self/__init__.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/self/common/__init__.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/self/common/capabilities.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/self/common/config.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/self/common/version_cache.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/self/handlers/__init__.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/self/handlers/base_handler.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/self/handlers/install_handler.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/self/handlers/status_handler.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/self/handlers/uninstall_handler.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/self/handlers/update_handler.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/self/handlers/version_handler.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/self/self_command.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/self/services/__init__.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/self/services/installation_manager.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/self/services/local_installer.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/self/services/pypi_updater.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/self/services/windows_update.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/testcommands/__init__.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/testcommands/base_dependency_analyzer.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/testcommands/batch_processor.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/testcommands/cache_manager.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/testcommands/coverage_analyzer.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/testcommands/coverage_cache_manager.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/testcommands/progress_manager.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/testcommands/python_env_detector.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/testcommands/report_generator.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/testcommands/single_test_executor.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/testcommands/speed_checker.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/testcommands/test_command_builder.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/testcommands/test_commands.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/testcommands/test_reporter.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/testcommands/test_result_handler.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/testcommands/test_runner.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/testcommands/test_utils.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/testcommands/utils/__init__.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/testcommands/utils/coverage_parser.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/testcommands/utils/env_info.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/testcommands/utils/junit_parser.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/testcommands/utils/markdown_utils.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/testcommands/utils/project_root.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/update/__init__.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/update/services/__init__.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/update/services/backup_manager.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/update/services/component_manager.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/update/services/conflict_resolver.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/update/services/vendors_updater.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/update/services/version_tracker.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/update/update_command.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/update/utils/__init__.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/version/__init__.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/version/version_command.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/workflow.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/env/__init__.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/env/cli.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/env_status.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/envelope.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/exceptions.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/lib/__init__.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/lib/rust_utils.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/mcp/__init__.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/mcp/capabilities.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/mcp/cli.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/mcp/gitlab.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/mcp/k8s.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/mcp/protocol.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/platform.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/quality/__init__.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/__init__.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/cache.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/cache_ledger.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/cache_store.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/config/__init__.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/config/config_loader.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/config/core.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/config/defaults.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/config/env_exporter.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/config/env_parser.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/config/validation.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/error_handler.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/file_copier.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/file_operations.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/language_utils.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/lazy_import.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/log_levels.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/log_rotators.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/logging.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/output_context.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/performance/__init__.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/performance/decorators.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/performance/exporter.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/performance/models.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/performance/monitor.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/performance_monitor.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/platform_adapter.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/pre_commit.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/pre_commit_config.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/root.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/root_fallback.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/run_evidence.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/structured_logger.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/structured_logging/__init__.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/structured_logging/config.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/structured_logging/core.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/structured_logging/env.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/structured_logging/filtering.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/structured_logging/filters.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/structured_logging/formatters.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/structured_logging/handlers.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/structured_logging/logger.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/subprocess.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/subprocess_utils.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/test_utils/__init__.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/test_utils/test_filter.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/uv_run.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/uv_tool.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/uv_tree.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/uv_workspace.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/version/__init__.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/version/pypi_version_checker.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/version/version_comparator.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/version/version_detectors.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/version/version_service.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/version/version_updater.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/wl_dir_updater.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/workspace_detector/__init__.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/workspace_detector/core.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/workspace_detector/detection_strategies.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/workspace_detector/exceptions.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/workspace_detector/types.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/utils/workspace_detector/venv_resolver.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/config/.codespellrc +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/config/dependencies.toml +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/config/mypy.ini +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/config/pyproject_defaults.toml +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/config/template_config.toml +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/config/tool_configs.toml +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/git/.gitignore +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/git/.pre-commit-config.yaml +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/hooks/applypatch-msg.sample +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/hooks/commit-msg.sample +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/hooks/fsmonitor-watchman.sample +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/hooks/post-update.sample +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/hooks/pre-applypatch.sample +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/hooks/pre-commit +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/hooks/pre-commit.legacy +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/hooks/pre-commit.sample +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/hooks/pre-merge-commit.sample +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/hooks/pre-push.sample +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/hooks/pre-rebase.sample +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/hooks/pre-receive.sample +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/hooks/prepare-commit-msg.sample +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/hooks/push-to-checkout.sample +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/hooks/sendemail-validate.sample +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/hooks/unix/applypatch-msg.sample +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/hooks/unix/check_lockfile.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/hooks/unix/check_lockfile.sh +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/hooks/unix/commit-msg.sample +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/hooks/unix/fsmonitor-watchman.sample +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/hooks/unix/post-update.sample +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/hooks/unix/pre-applypatch.sample +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/hooks/unix/pre-commit +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/hooks/unix/pre-commit.legacy +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/hooks/unix/pre-commit.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/hooks/unix/pre-commit.sample +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/hooks/unix/pre-merge-commit.sample +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/hooks/unix/pre-push +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/hooks/unix/pre-push.sample +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/hooks/unix/pre-rebase.sample +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/hooks/unix/pre-receive.sample +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/hooks/unix/prepare-commit-msg.sample +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/hooks/update.sample +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/hooks/win/work.bat +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/project/.gitignore +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/project/.python-version +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/project/LICENSE +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/project/README.md +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/project/pyproject.toml +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/project/pyproject_no_workspace.toml +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/project/pyproject_workspace.toml +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/readme/README.md +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/rust/Cargo.toml +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/rust/lib/__init__.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/rust/lib/rust_utils.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/rust/src/lib.rs +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/rust/src/main.rs +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/rust/tests/test_rust_fallback.py +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/sop_doc/git-dev-sop.md +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/sop_doc/industrial-standard-sop.md +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/sop_doc/python-sop.md +0 -0
- {py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/vendors/sop_doc/rust-readme.md +0 -0
py_wlcli-0.8.1/VERSION
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0.8.1
|
|
@@ -15,7 +15,7 @@ the ticket cannot drift from the implementation:
|
|
|
15
15
|
section wlcc source
|
|
16
16
|
=========== ============================================================
|
|
17
17
|
plugins §1 required plugins + §7 context-mode (optional plugin)
|
|
18
|
-
mcp §3
|
|
18
|
+
mcp §3 registered wl command, version stamp, interpreter visibility
|
|
19
19
|
settings §5 gstack + §6 claude-mem (host-side configuration)
|
|
20
20
|
stamps §8 stamp registry (report only -- never delete)
|
|
21
21
|
hooks §9 dangling hook commands (read-only plan)
|
|
@@ -98,6 +98,20 @@ RETIRED_STAMPS = frozenset({"gemini-key.enc", "mcp-visionary-pending"})
|
|
|
98
98
|
#: MCP servers check.sh §3 registers.
|
|
99
99
|
MCP_SERVERS: tuple[str, ...] = ("gitlab", "k8s-diagnose")
|
|
100
100
|
|
|
101
|
+
#: Registered server name -> ``wl mcp serve`` subcommand (#228). The server
|
|
102
|
+
#: names are the stable interface (tool schema and existing user config); only
|
|
103
|
+
#: the execution path moved from the plugin's ``mcp-tools/server.py`` to the
|
|
104
|
+
#: wl CLI. ``k8s-diagnose`` keeps its name but serves ``wl mcp serve k8s``.
|
|
105
|
+
MCP_SERVE_ARGS: dict[str, str] = {
|
|
106
|
+
"gitlab": "gitlab",
|
|
107
|
+
"k8s-diagnose": "k8s",
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
#: Capability the ``wl`` on ``PATH`` must advertise before a registration argv
|
|
111
|
+
#: counts as verifiable (#228). Consumers (wlcc) use the same bit to decide
|
|
112
|
+
#: that registration goes through ``wl mcp serve``.
|
|
113
|
+
MCP_SERVE_CAPABILITY = "mcp.serve"
|
|
114
|
+
|
|
101
115
|
#: Literal absolute path anchor from wlcc ``hooks-drift.py``: the dangling rule
|
|
102
116
|
#: is exactly ``*/.claude/*``. Kept with the trailing slash on purpose.
|
|
103
117
|
CLAUDE_SEG = "/.claude/"
|
|
@@ -475,7 +489,10 @@ def _interpreter_state(path: str, version: str, returncode: int) -> dict[str, An
|
|
|
475
489
|
|
|
476
490
|
|
|
477
491
|
def _probe_python() -> dict[str, Any]:
|
|
478
|
-
"""
|
|
492
|
+
"""Report the interpreter check.sh §3 used to run the MCP servers under.
|
|
493
|
+
|
|
494
|
+
Since #228 the servers run under ``wl mcp serve`` and no interpreter is
|
|
495
|
+
part of the registered argv, so the result is informational only.
|
|
479
496
|
|
|
480
497
|
``uv --no-cache python find 3.12`` resolves a local installation without
|
|
481
498
|
downloading and keeps its cache in a temporary directory for the duration
|
|
@@ -518,8 +535,88 @@ def _probe_python() -> dict[str, Any]:
|
|
|
518
535
|
return _interpreter_state(path, probe.stdout.strip(), probe.returncode)
|
|
519
536
|
|
|
520
537
|
|
|
538
|
+
def _probe_wl_serve() -> dict[str, Any]:
|
|
539
|
+
"""Probe the ``wl`` on ``PATH`` for the ``mcp.serve`` capability (#228).
|
|
540
|
+
|
|
541
|
+
The registration argv is ``<wl> mcp serve <sub>``, so the executable that
|
|
542
|
+
will be registered has to exist *and* advertise the capability. Asking it
|
|
543
|
+
for ``wl env check --json`` reads the same capability registry wlcc keys
|
|
544
|
+
off, instead of trusting the wl that happens to be running ``cc check``.
|
|
545
|
+
Every failure is a state value, never an exception.
|
|
546
|
+
|
|
547
|
+
Returns:
|
|
548
|
+
Fields ``path`` / ``state`` / ``version`` / ``capability``. ``state``
|
|
549
|
+
is ``ok:<version>`` when the capability is advertised, ``fail:absent``
|
|
550
|
+
when no ``wl`` is on ``PATH``, and ``fail:unusable`` /
|
|
551
|
+
``fail:missing_capability`` (with a readable ``reason``) otherwise.
|
|
552
|
+
"""
|
|
553
|
+
fields: dict[str, Any] = {
|
|
554
|
+
"path": None,
|
|
555
|
+
"state": "fail:absent",
|
|
556
|
+
"version": None,
|
|
557
|
+
"capability": MCP_SERVE_CAPABILITY,
|
|
558
|
+
}
|
|
559
|
+
wl = shutil.which("wl")
|
|
560
|
+
if wl is None:
|
|
561
|
+
return fields
|
|
562
|
+
fields["path"] = wl
|
|
563
|
+
try:
|
|
564
|
+
probe = subprocess.run(
|
|
565
|
+
[wl, "env", "check", "--json"],
|
|
566
|
+
capture_output=True,
|
|
567
|
+
text=True,
|
|
568
|
+
check=False,
|
|
569
|
+
timeout=30,
|
|
570
|
+
)
|
|
571
|
+
except (OSError, subprocess.SubprocessError) as exc:
|
|
572
|
+
fields.update(state="fail:unusable", reason=str(exc))
|
|
573
|
+
return fields
|
|
574
|
+
# ``env check`` exits 1 when the platform matrix says ``unverifiable`` but
|
|
575
|
+
# still emits the payload; parse first so a supported capability is not
|
|
576
|
+
# rejected because of an unrelated platform warning.
|
|
577
|
+
try:
|
|
578
|
+
payload = json.loads(probe.stdout)
|
|
579
|
+
except ValueError:
|
|
580
|
+
payload = None
|
|
581
|
+
if not isinstance(payload, dict):
|
|
582
|
+
fields.update(
|
|
583
|
+
state="fail:unusable",
|
|
584
|
+
reason=f"wl env check exited {probe.returncode} without a JSON payload",
|
|
585
|
+
)
|
|
586
|
+
return fields
|
|
587
|
+
version = payload.get("version")
|
|
588
|
+
fields["version"] = version if isinstance(version, str) else None
|
|
589
|
+
capabilities = payload.get("capabilities")
|
|
590
|
+
if isinstance(capabilities, list) and MCP_SERVE_CAPABILITY in capabilities:
|
|
591
|
+
fields["state"] = f"ok:{fields['version'] or 'unknown'}"
|
|
592
|
+
return fields
|
|
593
|
+
fields.update(
|
|
594
|
+
state="fail:missing_capability",
|
|
595
|
+
reason=f"{wl} does not advertise {MCP_SERVE_CAPABILITY}",
|
|
596
|
+
)
|
|
597
|
+
return fields
|
|
598
|
+
|
|
599
|
+
|
|
600
|
+
def _wl_reason(fields: dict[str, Any]) -> str:
|
|
601
|
+
"""Return a readable reason for a ``wl`` probe that is not ``ok``."""
|
|
602
|
+
state = str(fields.get("state", ""))
|
|
603
|
+
if state == "fail:absent":
|
|
604
|
+
return "the wl CLI is not on PATH"
|
|
605
|
+
reason = fields.get("reason")
|
|
606
|
+
if isinstance(reason, str) and reason:
|
|
607
|
+
return reason
|
|
608
|
+
return f"the wl CLI on PATH is not usable ({state or 'unknown state'})"
|
|
609
|
+
|
|
610
|
+
|
|
521
611
|
def probe_mcp(host: HostContext) -> dict[str, Any]:
|
|
522
|
-
"""§3:
|
|
612
|
+
"""§3: the registration target, version stamp and interpreter visibility.
|
|
613
|
+
|
|
614
|
+
Since #228 the registered argv is ``<wl> mcp serve <sub>``: the probe
|
|
615
|
+
verifies that the ``wl`` on ``PATH`` exists and advertises ``mcp.serve``
|
|
616
|
+
instead of looking for a plugin-root ``mcp-tools/server.py``. The
|
|
617
|
+
interpreter probe stays a report field but can no longer gate the section
|
|
618
|
+
-- ``python`` is not part of the registered command any more.
|
|
619
|
+
"""
|
|
523
620
|
cache = _wlcc_cache(host)
|
|
524
621
|
fields: dict[str, Any] = {
|
|
525
622
|
"cache_root": str(cache),
|
|
@@ -528,6 +625,7 @@ def probe_mcp(host: HostContext) -> dict[str, Any]:
|
|
|
528
625
|
"plugin_root": None,
|
|
529
626
|
"rejected": False,
|
|
530
627
|
"servers": list(MCP_SERVERS),
|
|
628
|
+
"wl": _probe_wl_serve(),
|
|
531
629
|
"python": _probe_python(),
|
|
532
630
|
}
|
|
533
631
|
try:
|
|
@@ -552,17 +650,10 @@ def probe_mcp(host: HostContext) -> dict[str, Any]:
|
|
|
552
650
|
fields["rejected"] = True
|
|
553
651
|
return _result("unverifiable", root_error, **fields)
|
|
554
652
|
fields["plugin_root"] = str(root)
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
return _result(
|
|
559
|
-
"unverifiable", f"MCP server script is a symlink: {server}", **fields
|
|
560
|
-
)
|
|
561
|
-
if not server.is_file():
|
|
562
|
-
fields["rejected"] = True
|
|
563
|
-
return _result(
|
|
564
|
-
"unverifiable", f"MCP server script is missing: {server}", **fields
|
|
565
|
-
)
|
|
653
|
+
|
|
654
|
+
wl_state = str(fields["wl"].get("state", ""))
|
|
655
|
+
if not wl_state.startswith("ok:"):
|
|
656
|
+
return _result("unverifiable", _wl_reason(fields["wl"]), **fields)
|
|
566
657
|
|
|
567
658
|
if registered != version:
|
|
568
659
|
return _result(
|
|
@@ -571,11 +662,6 @@ def probe_mcp(host: HostContext) -> dict[str, Any]:
|
|
|
571
662
|
"wl cc repair will re-register",
|
|
572
663
|
**fields,
|
|
573
664
|
)
|
|
574
|
-
python_state = str(fields["python"].get("state", ""))
|
|
575
|
-
if not python_state.startswith(("supplied:", "ok:")):
|
|
576
|
-
return _result(
|
|
577
|
-
"dangling", f"MCP interpreter is not usable: {python_state}", **fields
|
|
578
|
-
)
|
|
579
665
|
return _result("ok", None, **fields)
|
|
580
666
|
|
|
581
667
|
|
|
@@ -278,7 +278,7 @@ def mcp_ensure(as_json: bool) -> None:
|
|
|
278
278
|
@mcp_group.command(name="list")
|
|
279
279
|
@click.option("--json", "as_json", is_flag=True, help=_JSON_HELP)
|
|
280
280
|
def mcp_list(as_json: bool) -> None:
|
|
281
|
-
"""Report the plugin root, interpreter, stamp and servers
|
|
281
|
+
"""Report the wl target, plugin root, interpreter, stamp and servers."""
|
|
282
282
|
_run_single("cc mcp list", lambda: mutate.probe_section("mcp"), as_json)
|
|
283
283
|
|
|
284
284
|
|
|
@@ -488,22 +488,15 @@ def ensure_plugins() -> dict[str, Any]:
|
|
|
488
488
|
# --------------------------------------------------------------------------- #
|
|
489
489
|
|
|
490
490
|
|
|
491
|
-
def _mcp_script(plugin_root: Path, name: str) -> Path:
|
|
492
|
-
"""Return the registered server script for *name* under the plugin root."""
|
|
493
|
-
tools = plugin_root / ".claude" / "mcp-tools"
|
|
494
|
-
if name == "gitlab":
|
|
495
|
-
return tools / "server.py"
|
|
496
|
-
return tools / name / "server.py"
|
|
497
|
-
|
|
498
|
-
|
|
499
491
|
def ensure_mcp() -> dict[str, Any]:
|
|
500
|
-
"""Re-register both MCP servers
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
``
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
492
|
+
"""Re-register both MCP servers as ``wl mcp serve`` and stamp on success.
|
|
493
|
+
|
|
494
|
+
Since #228 the registered argv is ``<wl> mcp serve <sub>`` -- the plugin
|
|
495
|
+
tree's ``mcp-tools/server.py`` is neither required nor kept as a fallback.
|
|
496
|
+
A rejected plugin root or a missing/unusable ``wl`` is reported as
|
|
497
|
+
``unverifiable`` and never registered. The stamp is the idempotency latch,
|
|
498
|
+
so it is written only after *both* ``claude mcp add`` calls returned 0; one
|
|
499
|
+
failure leaves the old stamp in place and the next run retries.
|
|
507
500
|
"""
|
|
508
501
|
before = checks.probe_mcp(checks.load_host_context())
|
|
509
502
|
fields = _section_fields(before)
|
|
@@ -521,15 +514,12 @@ def ensure_mcp() -> dict[str, Any]:
|
|
|
521
514
|
changed,
|
|
522
515
|
**fields,
|
|
523
516
|
)
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
if not isinstance(python_path, str) or not str(python_state).startswith(
|
|
528
|
-
("supplied:", "ok:")
|
|
529
|
-
):
|
|
517
|
+
wl_probe = before.get("wl")
|
|
518
|
+
wl = wl_probe.get("path") if isinstance(wl_probe, dict) else None
|
|
519
|
+
if not isinstance(wl, str) or not wl:
|
|
530
520
|
return _result(
|
|
531
521
|
"unverifiable",
|
|
532
|
-
|
|
522
|
+
before.get("reason") or "the wl CLI is not on PATH",
|
|
533
523
|
changed,
|
|
534
524
|
**fields,
|
|
535
525
|
)
|
|
@@ -541,9 +531,8 @@ def ensure_mcp() -> dict[str, Any]:
|
|
|
541
531
|
)
|
|
542
532
|
|
|
543
533
|
failures: list[str] = []
|
|
544
|
-
root = Path(plugin_root)
|
|
545
534
|
for name in checks.MCP_SERVERS:
|
|
546
|
-
|
|
535
|
+
subcommand = checks.MCP_SERVE_ARGS[name]
|
|
547
536
|
try:
|
|
548
537
|
_run([claude, "mcp", "remove", name])
|
|
549
538
|
proc = _run(
|
|
@@ -556,15 +545,17 @@ def ensure_mcp() -> dict[str, Any]:
|
|
|
556
545
|
"-s",
|
|
557
546
|
"user",
|
|
558
547
|
"--",
|
|
559
|
-
|
|
560
|
-
|
|
548
|
+
wl,
|
|
549
|
+
"mcp",
|
|
550
|
+
"serve",
|
|
551
|
+
subcommand,
|
|
561
552
|
]
|
|
562
553
|
)
|
|
563
554
|
except (OSError, subprocess.SubprocessError) as exc:
|
|
564
555
|
failures.append(f"{name}: {exc}")
|
|
565
556
|
continue
|
|
566
557
|
if proc.returncode == 0:
|
|
567
|
-
changed.append(f"mcp: registered {name} -> {
|
|
558
|
+
changed.append(f"mcp: registered {name} -> {wl} mcp serve {subcommand}")
|
|
568
559
|
else:
|
|
569
560
|
failures.append(f"{name}: {_failure(proc)}")
|
|
570
561
|
|
py_wlcli-0.8.0/VERSION
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
0.8.0
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/buildcommands/builders/rust_builder.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/initenv/components/git/branch_creator.py
RENAMED
|
File without changes
|
{py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/initenv/components/git/git_flow_interface.py
RENAMED
|
File without changes
|
{py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/initenv/components/git/git_flow_manager.py
RENAMED
|
File without changes
|
{py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/initenv/components/git/git_lfs_manager.py
RENAMED
|
File without changes
|
|
File without changes
|
{py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/initenv/components/git/gitignore_manager.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/initenv/components/pyproject_generator.py
RENAMED
|
File without changes
|
{py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/initenv/components/rust_initializer.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/initenv/services/environment_initializer.py
RENAMED
|
File without changes
|
{py_wlcli-0.8.0 → py_wlcli-0.8.1}/src/wl_cli/commands/initenv/services/git_lfs_initializer.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|