crackerjack 0.18.2__py3-none-any.whl → 0.45.2__py3-none-any.whl
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.
- crackerjack/README.md +19 -0
- crackerjack/__init__.py +96 -2
- crackerjack/__main__.py +637 -138
- crackerjack/adapters/README.md +18 -0
- crackerjack/adapters/__init__.py +39 -0
- crackerjack/adapters/_output_paths.py +167 -0
- crackerjack/adapters/_qa_adapter_base.py +309 -0
- crackerjack/adapters/_tool_adapter_base.py +706 -0
- crackerjack/adapters/ai/README.md +65 -0
- crackerjack/adapters/ai/__init__.py +5 -0
- crackerjack/adapters/ai/claude.py +853 -0
- crackerjack/adapters/complexity/README.md +53 -0
- crackerjack/adapters/complexity/__init__.py +10 -0
- crackerjack/adapters/complexity/complexipy.py +641 -0
- crackerjack/adapters/dependency/__init__.py +22 -0
- crackerjack/adapters/dependency/pip_audit.py +418 -0
- crackerjack/adapters/format/README.md +72 -0
- crackerjack/adapters/format/__init__.py +11 -0
- crackerjack/adapters/format/mdformat.py +313 -0
- crackerjack/adapters/format/ruff.py +516 -0
- crackerjack/adapters/lint/README.md +47 -0
- crackerjack/adapters/lint/__init__.py +11 -0
- crackerjack/adapters/lint/codespell.py +273 -0
- crackerjack/adapters/lsp/README.md +49 -0
- crackerjack/adapters/lsp/__init__.py +27 -0
- crackerjack/adapters/lsp/_base.py +194 -0
- crackerjack/adapters/lsp/_client.py +358 -0
- crackerjack/adapters/lsp/_manager.py +193 -0
- crackerjack/adapters/lsp/skylos.py +283 -0
- crackerjack/adapters/lsp/zuban.py +557 -0
- crackerjack/adapters/refactor/README.md +59 -0
- crackerjack/adapters/refactor/__init__.py +12 -0
- crackerjack/adapters/refactor/creosote.py +318 -0
- crackerjack/adapters/refactor/refurb.py +406 -0
- crackerjack/adapters/refactor/skylos.py +494 -0
- crackerjack/adapters/sast/README.md +132 -0
- crackerjack/adapters/sast/__init__.py +32 -0
- crackerjack/adapters/sast/_base.py +201 -0
- crackerjack/adapters/sast/bandit.py +423 -0
- crackerjack/adapters/sast/pyscn.py +405 -0
- crackerjack/adapters/sast/semgrep.py +241 -0
- crackerjack/adapters/security/README.md +111 -0
- crackerjack/adapters/security/__init__.py +17 -0
- crackerjack/adapters/security/gitleaks.py +339 -0
- crackerjack/adapters/type/README.md +52 -0
- crackerjack/adapters/type/__init__.py +12 -0
- crackerjack/adapters/type/pyrefly.py +402 -0
- crackerjack/adapters/type/ty.py +402 -0
- crackerjack/adapters/type/zuban.py +522 -0
- crackerjack/adapters/utility/README.md +51 -0
- crackerjack/adapters/utility/__init__.py +10 -0
- crackerjack/adapters/utility/checks.py +884 -0
- crackerjack/agents/README.md +264 -0
- crackerjack/agents/__init__.py +66 -0
- crackerjack/agents/architect_agent.py +238 -0
- crackerjack/agents/base.py +167 -0
- crackerjack/agents/claude_code_bridge.py +641 -0
- crackerjack/agents/coordinator.py +600 -0
- crackerjack/agents/documentation_agent.py +520 -0
- crackerjack/agents/dry_agent.py +585 -0
- crackerjack/agents/enhanced_coordinator.py +279 -0
- crackerjack/agents/enhanced_proactive_agent.py +185 -0
- crackerjack/agents/error_middleware.py +53 -0
- crackerjack/agents/formatting_agent.py +230 -0
- crackerjack/agents/helpers/__init__.py +9 -0
- crackerjack/agents/helpers/performance/__init__.py +22 -0
- crackerjack/agents/helpers/performance/performance_ast_analyzer.py +357 -0
- crackerjack/agents/helpers/performance/performance_pattern_detector.py +909 -0
- crackerjack/agents/helpers/performance/performance_recommender.py +572 -0
- crackerjack/agents/helpers/refactoring/__init__.py +22 -0
- crackerjack/agents/helpers/refactoring/code_transformer.py +536 -0
- crackerjack/agents/helpers/refactoring/complexity_analyzer.py +344 -0
- crackerjack/agents/helpers/refactoring/dead_code_detector.py +437 -0
- crackerjack/agents/helpers/test_creation/__init__.py +19 -0
- crackerjack/agents/helpers/test_creation/test_ast_analyzer.py +216 -0
- crackerjack/agents/helpers/test_creation/test_coverage_analyzer.py +643 -0
- crackerjack/agents/helpers/test_creation/test_template_generator.py +1031 -0
- crackerjack/agents/import_optimization_agent.py +1181 -0
- crackerjack/agents/performance_agent.py +325 -0
- crackerjack/agents/performance_helpers.py +205 -0
- crackerjack/agents/proactive_agent.py +55 -0
- crackerjack/agents/refactoring_agent.py +511 -0
- crackerjack/agents/refactoring_helpers.py +247 -0
- crackerjack/agents/security_agent.py +793 -0
- crackerjack/agents/semantic_agent.py +479 -0
- crackerjack/agents/semantic_helpers.py +356 -0
- crackerjack/agents/test_creation_agent.py +570 -0
- crackerjack/agents/test_specialist_agent.py +526 -0
- crackerjack/agents/tracker.py +110 -0
- crackerjack/api.py +647 -0
- crackerjack/cli/README.md +394 -0
- crackerjack/cli/__init__.py +24 -0
- crackerjack/cli/cache_handlers.py +209 -0
- crackerjack/cli/cache_handlers_enhanced.py +680 -0
- crackerjack/cli/facade.py +162 -0
- crackerjack/cli/formatting.py +13 -0
- crackerjack/cli/handlers/__init__.py +85 -0
- crackerjack/cli/handlers/advanced.py +103 -0
- crackerjack/cli/handlers/ai_features.py +62 -0
- crackerjack/cli/handlers/analytics.py +479 -0
- crackerjack/cli/handlers/changelog.py +271 -0
- crackerjack/cli/handlers/config_handlers.py +16 -0
- crackerjack/cli/handlers/coverage.py +84 -0
- crackerjack/cli/handlers/documentation.py +280 -0
- crackerjack/cli/handlers/main_handlers.py +497 -0
- crackerjack/cli/handlers/monitoring.py +371 -0
- crackerjack/cli/handlers.py +700 -0
- crackerjack/cli/interactive.py +488 -0
- crackerjack/cli/options.py +1216 -0
- crackerjack/cli/semantic_handlers.py +292 -0
- crackerjack/cli/utils.py +19 -0
- crackerjack/cli/version.py +19 -0
- crackerjack/code_cleaner.py +1307 -0
- crackerjack/config/README.md +472 -0
- crackerjack/config/__init__.py +275 -0
- crackerjack/config/global_lock_config.py +207 -0
- crackerjack/config/hooks.py +390 -0
- crackerjack/config/loader.py +239 -0
- crackerjack/config/settings.py +141 -0
- crackerjack/config/tool_commands.py +331 -0
- crackerjack/core/README.md +393 -0
- crackerjack/core/__init__.py +0 -0
- crackerjack/core/async_workflow_orchestrator.py +738 -0
- crackerjack/core/autofix_coordinator.py +282 -0
- crackerjack/core/container.py +105 -0
- crackerjack/core/enhanced_container.py +583 -0
- crackerjack/core/file_lifecycle.py +472 -0
- crackerjack/core/performance.py +244 -0
- crackerjack/core/performance_monitor.py +357 -0
- crackerjack/core/phase_coordinator.py +1227 -0
- crackerjack/core/proactive_workflow.py +267 -0
- crackerjack/core/resource_manager.py +425 -0
- crackerjack/core/retry.py +275 -0
- crackerjack/core/service_watchdog.py +601 -0
- crackerjack/core/session_coordinator.py +239 -0
- crackerjack/core/timeout_manager.py +563 -0
- crackerjack/core/websocket_lifecycle.py +410 -0
- crackerjack/core/workflow/__init__.py +21 -0
- crackerjack/core/workflow/workflow_ai_coordinator.py +863 -0
- crackerjack/core/workflow/workflow_event_orchestrator.py +1107 -0
- crackerjack/core/workflow/workflow_issue_parser.py +714 -0
- crackerjack/core/workflow/workflow_phase_executor.py +1158 -0
- crackerjack/core/workflow/workflow_security_gates.py +400 -0
- crackerjack/core/workflow_orchestrator.py +2243 -0
- crackerjack/data/README.md +11 -0
- crackerjack/data/__init__.py +8 -0
- crackerjack/data/models.py +79 -0
- crackerjack/data/repository.py +210 -0
- crackerjack/decorators/README.md +180 -0
- crackerjack/decorators/__init__.py +35 -0
- crackerjack/decorators/error_handling.py +649 -0
- crackerjack/decorators/error_handling_decorators.py +334 -0
- crackerjack/decorators/helpers.py +58 -0
- crackerjack/decorators/patterns.py +281 -0
- crackerjack/decorators/utils.py +58 -0
- crackerjack/docs/INDEX.md +11 -0
- crackerjack/docs/README.md +11 -0
- crackerjack/docs/generated/api/API_REFERENCE.md +10895 -0
- crackerjack/docs/generated/api/CLI_REFERENCE.md +109 -0
- crackerjack/docs/generated/api/CROSS_REFERENCES.md +1755 -0
- crackerjack/docs/generated/api/PROTOCOLS.md +3 -0
- crackerjack/docs/generated/api/SERVICES.md +1252 -0
- crackerjack/documentation/README.md +11 -0
- crackerjack/documentation/__init__.py +31 -0
- crackerjack/documentation/ai_templates.py +756 -0
- crackerjack/documentation/dual_output_generator.py +767 -0
- crackerjack/documentation/mkdocs_integration.py +518 -0
- crackerjack/documentation/reference_generator.py +1065 -0
- crackerjack/dynamic_config.py +678 -0
- crackerjack/errors.py +378 -0
- crackerjack/events/README.md +11 -0
- crackerjack/events/__init__.py +16 -0
- crackerjack/events/telemetry.py +175 -0
- crackerjack/events/workflow_bus.py +346 -0
- crackerjack/exceptions/README.md +301 -0
- crackerjack/exceptions/__init__.py +5 -0
- crackerjack/exceptions/config.py +4 -0
- crackerjack/exceptions/tool_execution_error.py +245 -0
- crackerjack/executors/README.md +591 -0
- crackerjack/executors/__init__.py +13 -0
- crackerjack/executors/async_hook_executor.py +938 -0
- crackerjack/executors/cached_hook_executor.py +316 -0
- crackerjack/executors/hook_executor.py +1295 -0
- crackerjack/executors/hook_lock_manager.py +708 -0
- crackerjack/executors/individual_hook_executor.py +739 -0
- crackerjack/executors/lsp_aware_hook_executor.py +349 -0
- crackerjack/executors/progress_hook_executor.py +282 -0
- crackerjack/executors/tool_proxy.py +433 -0
- crackerjack/hooks/README.md +485 -0
- crackerjack/hooks/lsp_hook.py +93 -0
- crackerjack/intelligence/README.md +557 -0
- crackerjack/intelligence/__init__.py +37 -0
- crackerjack/intelligence/adaptive_learning.py +693 -0
- crackerjack/intelligence/agent_orchestrator.py +485 -0
- crackerjack/intelligence/agent_registry.py +377 -0
- crackerjack/intelligence/agent_selector.py +439 -0
- crackerjack/intelligence/integration.py +250 -0
- crackerjack/interactive.py +719 -0
- crackerjack/managers/README.md +369 -0
- crackerjack/managers/__init__.py +11 -0
- crackerjack/managers/async_hook_manager.py +135 -0
- crackerjack/managers/hook_manager.py +585 -0
- crackerjack/managers/publish_manager.py +631 -0
- crackerjack/managers/test_command_builder.py +391 -0
- crackerjack/managers/test_executor.py +474 -0
- crackerjack/managers/test_manager.py +1357 -0
- crackerjack/managers/test_progress.py +187 -0
- crackerjack/mcp/README.md +374 -0
- crackerjack/mcp/__init__.py +0 -0
- crackerjack/mcp/cache.py +352 -0
- crackerjack/mcp/client_runner.py +121 -0
- crackerjack/mcp/context.py +802 -0
- crackerjack/mcp/dashboard.py +657 -0
- crackerjack/mcp/enhanced_progress_monitor.py +493 -0
- crackerjack/mcp/file_monitor.py +394 -0
- crackerjack/mcp/progress_components.py +607 -0
- crackerjack/mcp/progress_monitor.py +1016 -0
- crackerjack/mcp/rate_limiter.py +336 -0
- crackerjack/mcp/server.py +24 -0
- crackerjack/mcp/server_core.py +526 -0
- crackerjack/mcp/service_watchdog.py +505 -0
- crackerjack/mcp/state.py +407 -0
- crackerjack/mcp/task_manager.py +259 -0
- crackerjack/mcp/tools/README.md +27 -0
- crackerjack/mcp/tools/__init__.py +19 -0
- crackerjack/mcp/tools/core_tools.py +469 -0
- crackerjack/mcp/tools/error_analyzer.py +283 -0
- crackerjack/mcp/tools/execution_tools.py +384 -0
- crackerjack/mcp/tools/intelligence_tool_registry.py +46 -0
- crackerjack/mcp/tools/intelligence_tools.py +264 -0
- crackerjack/mcp/tools/monitoring_tools.py +628 -0
- crackerjack/mcp/tools/proactive_tools.py +367 -0
- crackerjack/mcp/tools/progress_tools.py +222 -0
- crackerjack/mcp/tools/semantic_tools.py +584 -0
- crackerjack/mcp/tools/utility_tools.py +358 -0
- crackerjack/mcp/tools/workflow_executor.py +699 -0
- crackerjack/mcp/websocket/README.md +31 -0
- crackerjack/mcp/websocket/__init__.py +14 -0
- crackerjack/mcp/websocket/app.py +54 -0
- crackerjack/mcp/websocket/endpoints.py +492 -0
- crackerjack/mcp/websocket/event_bridge.py +188 -0
- crackerjack/mcp/websocket/jobs.py +406 -0
- crackerjack/mcp/websocket/monitoring/__init__.py +25 -0
- crackerjack/mcp/websocket/monitoring/api/__init__.py +19 -0
- crackerjack/mcp/websocket/monitoring/api/dependencies.py +141 -0
- crackerjack/mcp/websocket/monitoring/api/heatmap.py +154 -0
- crackerjack/mcp/websocket/monitoring/api/intelligence.py +199 -0
- crackerjack/mcp/websocket/monitoring/api/metrics.py +203 -0
- crackerjack/mcp/websocket/monitoring/api/telemetry.py +101 -0
- crackerjack/mcp/websocket/monitoring/dashboard.py +18 -0
- crackerjack/mcp/websocket/monitoring/factory.py +109 -0
- crackerjack/mcp/websocket/monitoring/filters.py +10 -0
- crackerjack/mcp/websocket/monitoring/metrics.py +64 -0
- crackerjack/mcp/websocket/monitoring/models.py +90 -0
- crackerjack/mcp/websocket/monitoring/utils.py +171 -0
- crackerjack/mcp/websocket/monitoring/websocket_manager.py +78 -0
- crackerjack/mcp/websocket/monitoring/websockets/__init__.py +17 -0
- crackerjack/mcp/websocket/monitoring/websockets/dependencies.py +126 -0
- crackerjack/mcp/websocket/monitoring/websockets/heatmap.py +176 -0
- crackerjack/mcp/websocket/monitoring/websockets/intelligence.py +291 -0
- crackerjack/mcp/websocket/monitoring/websockets/metrics.py +291 -0
- crackerjack/mcp/websocket/monitoring_endpoints.py +21 -0
- crackerjack/mcp/websocket/server.py +174 -0
- crackerjack/mcp/websocket/websocket_handler.py +276 -0
- crackerjack/mcp/websocket_server.py +10 -0
- crackerjack/models/README.md +308 -0
- crackerjack/models/__init__.py +40 -0
- crackerjack/models/config.py +730 -0
- crackerjack/models/config_adapter.py +265 -0
- crackerjack/models/protocols.py +1535 -0
- crackerjack/models/pydantic_models.py +320 -0
- crackerjack/models/qa_config.py +145 -0
- crackerjack/models/qa_results.py +134 -0
- crackerjack/models/resource_protocols.py +299 -0
- crackerjack/models/results.py +35 -0
- crackerjack/models/semantic_models.py +258 -0
- crackerjack/models/task.py +173 -0
- crackerjack/models/test_models.py +60 -0
- crackerjack/monitoring/README.md +11 -0
- crackerjack/monitoring/__init__.py +0 -0
- crackerjack/monitoring/ai_agent_watchdog.py +405 -0
- crackerjack/monitoring/metrics_collector.py +427 -0
- crackerjack/monitoring/regression_prevention.py +580 -0
- crackerjack/monitoring/websocket_server.py +406 -0
- crackerjack/orchestration/README.md +340 -0
- crackerjack/orchestration/__init__.py +43 -0
- crackerjack/orchestration/advanced_orchestrator.py +894 -0
- crackerjack/orchestration/cache/README.md +312 -0
- crackerjack/orchestration/cache/__init__.py +37 -0
- crackerjack/orchestration/cache/memory_cache.py +338 -0
- crackerjack/orchestration/cache/tool_proxy_cache.py +340 -0
- crackerjack/orchestration/config.py +297 -0
- crackerjack/orchestration/coverage_improvement.py +180 -0
- crackerjack/orchestration/execution_strategies.py +361 -0
- crackerjack/orchestration/hook_orchestrator.py +1398 -0
- crackerjack/orchestration/strategies/README.md +401 -0
- crackerjack/orchestration/strategies/__init__.py +39 -0
- crackerjack/orchestration/strategies/adaptive_strategy.py +630 -0
- crackerjack/orchestration/strategies/parallel_strategy.py +237 -0
- crackerjack/orchestration/strategies/sequential_strategy.py +299 -0
- crackerjack/orchestration/test_progress_streamer.py +647 -0
- crackerjack/plugins/README.md +11 -0
- crackerjack/plugins/__init__.py +15 -0
- crackerjack/plugins/base.py +200 -0
- crackerjack/plugins/hooks.py +254 -0
- crackerjack/plugins/loader.py +335 -0
- crackerjack/plugins/managers.py +264 -0
- crackerjack/py313.py +191 -0
- crackerjack/security/README.md +11 -0
- crackerjack/security/__init__.py +0 -0
- crackerjack/security/audit.py +197 -0
- crackerjack/services/README.md +374 -0
- crackerjack/services/__init__.py +9 -0
- crackerjack/services/ai/README.md +295 -0
- crackerjack/services/ai/__init__.py +7 -0
- crackerjack/services/ai/advanced_optimizer.py +878 -0
- crackerjack/services/ai/contextual_ai_assistant.py +542 -0
- crackerjack/services/ai/embeddings.py +444 -0
- crackerjack/services/ai/intelligent_commit.py +328 -0
- crackerjack/services/ai/predictive_analytics.py +510 -0
- crackerjack/services/anomaly_detector.py +392 -0
- crackerjack/services/api_extractor.py +617 -0
- crackerjack/services/backup_service.py +467 -0
- crackerjack/services/bounded_status_operations.py +530 -0
- crackerjack/services/cache.py +369 -0
- crackerjack/services/changelog_automation.py +399 -0
- crackerjack/services/command_execution_service.py +305 -0
- crackerjack/services/config_integrity.py +132 -0
- crackerjack/services/config_merge.py +546 -0
- crackerjack/services/config_service.py +198 -0
- crackerjack/services/config_template.py +493 -0
- crackerjack/services/coverage_badge_service.py +173 -0
- crackerjack/services/coverage_ratchet.py +381 -0
- crackerjack/services/debug.py +733 -0
- crackerjack/services/dependency_analyzer.py +460 -0
- crackerjack/services/dependency_monitor.py +622 -0
- crackerjack/services/documentation_generator.py +493 -0
- crackerjack/services/documentation_service.py +704 -0
- crackerjack/services/enhanced_filesystem.py +497 -0
- crackerjack/services/enterprise_optimizer.py +865 -0
- crackerjack/services/error_pattern_analyzer.py +676 -0
- crackerjack/services/file_filter.py +221 -0
- crackerjack/services/file_hasher.py +149 -0
- crackerjack/services/file_io_service.py +361 -0
- crackerjack/services/file_modifier.py +615 -0
- crackerjack/services/filesystem.py +381 -0
- crackerjack/services/git.py +422 -0
- crackerjack/services/health_metrics.py +615 -0
- crackerjack/services/heatmap_generator.py +744 -0
- crackerjack/services/incremental_executor.py +380 -0
- crackerjack/services/initialization.py +823 -0
- crackerjack/services/input_validator.py +668 -0
- crackerjack/services/intelligent_commit.py +327 -0
- crackerjack/services/log_manager.py +289 -0
- crackerjack/services/logging.py +228 -0
- crackerjack/services/lsp_client.py +628 -0
- crackerjack/services/memory_optimizer.py +414 -0
- crackerjack/services/metrics.py +587 -0
- crackerjack/services/monitoring/README.md +30 -0
- crackerjack/services/monitoring/__init__.py +9 -0
- crackerjack/services/monitoring/dependency_monitor.py +678 -0
- crackerjack/services/monitoring/error_pattern_analyzer.py +676 -0
- crackerjack/services/monitoring/health_metrics.py +716 -0
- crackerjack/services/monitoring/metrics.py +587 -0
- crackerjack/services/monitoring/performance_benchmarks.py +410 -0
- crackerjack/services/monitoring/performance_cache.py +388 -0
- crackerjack/services/monitoring/performance_monitor.py +569 -0
- crackerjack/services/parallel_executor.py +527 -0
- crackerjack/services/pattern_cache.py +333 -0
- crackerjack/services/pattern_detector.py +478 -0
- crackerjack/services/patterns/__init__.py +142 -0
- crackerjack/services/patterns/agents.py +107 -0
- crackerjack/services/patterns/code/__init__.py +15 -0
- crackerjack/services/patterns/code/detection.py +118 -0
- crackerjack/services/patterns/code/imports.py +107 -0
- crackerjack/services/patterns/code/paths.py +159 -0
- crackerjack/services/patterns/code/performance.py +119 -0
- crackerjack/services/patterns/code/replacement.py +36 -0
- crackerjack/services/patterns/core.py +212 -0
- crackerjack/services/patterns/documentation/__init__.py +14 -0
- crackerjack/services/patterns/documentation/badges_markdown.py +96 -0
- crackerjack/services/patterns/documentation/comments_blocks.py +83 -0
- crackerjack/services/patterns/documentation/docstrings.py +89 -0
- crackerjack/services/patterns/formatting.py +226 -0
- crackerjack/services/patterns/operations.py +339 -0
- crackerjack/services/patterns/security/__init__.py +23 -0
- crackerjack/services/patterns/security/code_injection.py +122 -0
- crackerjack/services/patterns/security/credentials.py +190 -0
- crackerjack/services/patterns/security/path_traversal.py +221 -0
- crackerjack/services/patterns/security/unsafe_operations.py +216 -0
- crackerjack/services/patterns/templates.py +62 -0
- crackerjack/services/patterns/testing/__init__.py +18 -0
- crackerjack/services/patterns/testing/error_patterns.py +107 -0
- crackerjack/services/patterns/testing/pytest_output.py +126 -0
- crackerjack/services/patterns/tool_output/__init__.py +16 -0
- crackerjack/services/patterns/tool_output/bandit.py +72 -0
- crackerjack/services/patterns/tool_output/other.py +97 -0
- crackerjack/services/patterns/tool_output/pyright.py +67 -0
- crackerjack/services/patterns/tool_output/ruff.py +44 -0
- crackerjack/services/patterns/url_sanitization.py +114 -0
- crackerjack/services/patterns/utilities.py +42 -0
- crackerjack/services/patterns/utils.py +339 -0
- crackerjack/services/patterns/validation.py +46 -0
- crackerjack/services/patterns/versioning.py +62 -0
- crackerjack/services/predictive_analytics.py +523 -0
- crackerjack/services/profiler.py +280 -0
- crackerjack/services/quality/README.md +415 -0
- crackerjack/services/quality/__init__.py +11 -0
- crackerjack/services/quality/anomaly_detector.py +392 -0
- crackerjack/services/quality/pattern_cache.py +333 -0
- crackerjack/services/quality/pattern_detector.py +479 -0
- crackerjack/services/quality/qa_orchestrator.py +491 -0
- crackerjack/services/quality/quality_baseline.py +395 -0
- crackerjack/services/quality/quality_baseline_enhanced.py +649 -0
- crackerjack/services/quality/quality_intelligence.py +949 -0
- crackerjack/services/regex_patterns.py +58 -0
- crackerjack/services/regex_utils.py +483 -0
- crackerjack/services/secure_path_utils.py +524 -0
- crackerjack/services/secure_status_formatter.py +450 -0
- crackerjack/services/secure_subprocess.py +635 -0
- crackerjack/services/security.py +239 -0
- crackerjack/services/security_logger.py +495 -0
- crackerjack/services/server_manager.py +411 -0
- crackerjack/services/smart_scheduling.py +167 -0
- crackerjack/services/status_authentication.py +460 -0
- crackerjack/services/status_security_manager.py +315 -0
- crackerjack/services/terminal_utils.py +0 -0
- crackerjack/services/thread_safe_status_collector.py +441 -0
- crackerjack/services/tool_filter.py +368 -0
- crackerjack/services/tool_version_service.py +43 -0
- crackerjack/services/unified_config.py +115 -0
- crackerjack/services/validation_rate_limiter.py +220 -0
- crackerjack/services/vector_store.py +689 -0
- crackerjack/services/version_analyzer.py +461 -0
- crackerjack/services/version_checker.py +223 -0
- crackerjack/services/websocket_resource_limiter.py +438 -0
- crackerjack/services/zuban_lsp_service.py +391 -0
- crackerjack/slash_commands/README.md +11 -0
- crackerjack/slash_commands/__init__.py +59 -0
- crackerjack/slash_commands/init.md +112 -0
- crackerjack/slash_commands/run.md +197 -0
- crackerjack/slash_commands/status.md +127 -0
- crackerjack/tools/README.md +11 -0
- crackerjack/tools/__init__.py +30 -0
- crackerjack/tools/_git_utils.py +105 -0
- crackerjack/tools/check_added_large_files.py +139 -0
- crackerjack/tools/check_ast.py +105 -0
- crackerjack/tools/check_json.py +103 -0
- crackerjack/tools/check_jsonschema.py +297 -0
- crackerjack/tools/check_toml.py +103 -0
- crackerjack/tools/check_yaml.py +110 -0
- crackerjack/tools/codespell_wrapper.py +72 -0
- crackerjack/tools/end_of_file_fixer.py +202 -0
- crackerjack/tools/format_json.py +128 -0
- crackerjack/tools/mdformat_wrapper.py +114 -0
- crackerjack/tools/trailing_whitespace.py +198 -0
- crackerjack/tools/validate_input_validator_patterns.py +236 -0
- crackerjack/tools/validate_regex_patterns.py +188 -0
- crackerjack/ui/README.md +11 -0
- crackerjack/ui/__init__.py +1 -0
- crackerjack/ui/dashboard_renderer.py +28 -0
- crackerjack/ui/templates/README.md +11 -0
- crackerjack/utils/console_utils.py +13 -0
- crackerjack/utils/dependency_guard.py +230 -0
- crackerjack/utils/retry_utils.py +275 -0
- crackerjack/workflows/README.md +590 -0
- crackerjack/workflows/__init__.py +46 -0
- crackerjack/workflows/actions.py +811 -0
- crackerjack/workflows/auto_fix.py +444 -0
- crackerjack/workflows/container_builder.py +499 -0
- crackerjack/workflows/definitions.py +443 -0
- crackerjack/workflows/engine.py +177 -0
- crackerjack/workflows/event_bridge.py +242 -0
- crackerjack-0.45.2.dist-info/METADATA +1678 -0
- crackerjack-0.45.2.dist-info/RECORD +478 -0
- {crackerjack-0.18.2.dist-info → crackerjack-0.45.2.dist-info}/WHEEL +1 -1
- crackerjack-0.45.2.dist-info/entry_points.txt +2 -0
- crackerjack/.gitignore +0 -14
- crackerjack/.libcst.codemod.yaml +0 -18
- crackerjack/.pdm.toml +0 -1
- crackerjack/.pre-commit-config.yaml +0 -91
- crackerjack/.pytest_cache/.gitignore +0 -2
- crackerjack/.pytest_cache/CACHEDIR.TAG +0 -4
- crackerjack/.pytest_cache/README.md +0 -8
- crackerjack/.pytest_cache/v/cache/nodeids +0 -1
- crackerjack/.pytest_cache/v/cache/stepwise +0 -1
- crackerjack/.ruff_cache/.gitignore +0 -1
- crackerjack/.ruff_cache/0.1.11/3256171999636029978 +0 -0
- crackerjack/.ruff_cache/0.1.14/602324811142551221 +0 -0
- crackerjack/.ruff_cache/0.1.4/10355199064880463147 +0 -0
- crackerjack/.ruff_cache/0.1.6/15140459877605758699 +0 -0
- crackerjack/.ruff_cache/0.1.7/1790508110482614856 +0 -0
- crackerjack/.ruff_cache/0.1.9/17041001205004563469 +0 -0
- crackerjack/.ruff_cache/0.11.2/4070660268492669020 +0 -0
- crackerjack/.ruff_cache/0.11.3/9818742842212983150 +0 -0
- crackerjack/.ruff_cache/0.11.4/9818742842212983150 +0 -0
- crackerjack/.ruff_cache/0.11.6/3557596832929915217 +0 -0
- crackerjack/.ruff_cache/0.11.7/10386934055395314831 +0 -0
- crackerjack/.ruff_cache/0.11.7/3557596832929915217 +0 -0
- crackerjack/.ruff_cache/0.11.8/530407680854991027 +0 -0
- crackerjack/.ruff_cache/0.2.0/10047773857155985907 +0 -0
- crackerjack/.ruff_cache/0.2.1/8522267973936635051 +0 -0
- crackerjack/.ruff_cache/0.2.2/18053836298936336950 +0 -0
- crackerjack/.ruff_cache/0.3.0/12548816621480535786 +0 -0
- crackerjack/.ruff_cache/0.3.3/11081883392474770722 +0 -0
- crackerjack/.ruff_cache/0.3.4/676973378459347183 +0 -0
- crackerjack/.ruff_cache/0.3.5/16311176246009842383 +0 -0
- crackerjack/.ruff_cache/0.5.7/1493622539551733492 +0 -0
- crackerjack/.ruff_cache/0.5.7/6231957614044513175 +0 -0
- crackerjack/.ruff_cache/0.5.7/9932762556785938009 +0 -0
- crackerjack/.ruff_cache/0.6.0/11982804814124138945 +0 -0
- crackerjack/.ruff_cache/0.6.0/12055761203849489982 +0 -0
- crackerjack/.ruff_cache/0.6.2/1206147804896221174 +0 -0
- crackerjack/.ruff_cache/0.6.4/1206147804896221174 +0 -0
- crackerjack/.ruff_cache/0.6.5/1206147804896221174 +0 -0
- crackerjack/.ruff_cache/0.6.7/3657366982708166874 +0 -0
- crackerjack/.ruff_cache/0.6.9/285614542852677309 +0 -0
- crackerjack/.ruff_cache/0.7.1/1024065805990144819 +0 -0
- crackerjack/.ruff_cache/0.7.1/285614542852677309 +0 -0
- crackerjack/.ruff_cache/0.7.3/16061516852537040135 +0 -0
- crackerjack/.ruff_cache/0.8.4/16354268377385700367 +0 -0
- crackerjack/.ruff_cache/0.9.10/12813592349865671909 +0 -0
- crackerjack/.ruff_cache/0.9.10/923908772239632759 +0 -0
- crackerjack/.ruff_cache/0.9.3/13948373885254993391 +0 -0
- crackerjack/.ruff_cache/0.9.9/12813592349865671909 +0 -0
- crackerjack/.ruff_cache/0.9.9/8843823720003377982 +0 -0
- crackerjack/.ruff_cache/CACHEDIR.TAG +0 -1
- crackerjack/crackerjack.py +0 -855
- crackerjack/pyproject.toml +0 -214
- crackerjack-0.18.2.dist-info/METADATA +0 -420
- crackerjack-0.18.2.dist-info/RECORD +0 -59
- crackerjack-0.18.2.dist-info/entry_points.txt +0 -4
- {crackerjack-0.18.2.dist-info → crackerjack-0.45.2.dist-info}/licenses/LICENSE +0 -0
|
@@ -0,0 +1,1216 @@
|
|
|
1
|
+
import typing as t
|
|
2
|
+
import warnings
|
|
3
|
+
from enum import Enum
|
|
4
|
+
|
|
5
|
+
import click
|
|
6
|
+
import typer
|
|
7
|
+
from pydantic import BaseModel, field_validator, model_validator
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def parse_bump_option_with_flag_support(
|
|
11
|
+
ctx: click.Context, param: click.Parameter, value: str | None
|
|
12
|
+
) -> str | None:
|
|
13
|
+
"""Parse bump option that supports both flag usage (-p) and value usage (-p patch)."""
|
|
14
|
+
if value is None:
|
|
15
|
+
return None
|
|
16
|
+
|
|
17
|
+
# If the value starts with a dash, it's likely another flag that typer mistakenly captured
|
|
18
|
+
if value.startswith("-"):
|
|
19
|
+
# Map of consumed flags to their corresponding parameter names
|
|
20
|
+
flag_mapping = {
|
|
21
|
+
"-c": "commit",
|
|
22
|
+
"--commit": "commit",
|
|
23
|
+
"-v": "verbose",
|
|
24
|
+
"--verbose": "verbose",
|
|
25
|
+
"-s": "skip_hooks",
|
|
26
|
+
"--skip-hooks": "skip_hooks",
|
|
27
|
+
"-i": "interactive",
|
|
28
|
+
"--interactive": "interactive",
|
|
29
|
+
"-n": "no_config_updates",
|
|
30
|
+
"--no-config-updates": "no_config_updates",
|
|
31
|
+
"-u": "update_precommit",
|
|
32
|
+
"--update-precommit": "update_precommit",
|
|
33
|
+
"-t": "run_tests",
|
|
34
|
+
"--run-tests": "run_tests",
|
|
35
|
+
"-x": "strip_code",
|
|
36
|
+
"--strip-code": "strip_code",
|
|
37
|
+
"--debug": "debug",
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
# Handle any consumed flag
|
|
41
|
+
if value in flag_mapping:
|
|
42
|
+
param_name = flag_mapping[value]
|
|
43
|
+
# Set the parameter directly in the context
|
|
44
|
+
if not hasattr(ctx, "params"):
|
|
45
|
+
ctx.params = {}
|
|
46
|
+
ctx.params[param_name] = True
|
|
47
|
+
|
|
48
|
+
# CRITICAL FIX: Remove the consumed flag from sys.argv to prevent double processing
|
|
49
|
+
import sys
|
|
50
|
+
|
|
51
|
+
if value in sys.argv:
|
|
52
|
+
sys.argv.remove(value)
|
|
53
|
+
|
|
54
|
+
# Default to interactive mode when used as a flag
|
|
55
|
+
return "interactive"
|
|
56
|
+
|
|
57
|
+
return value
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
class BumpOption(str, Enum):
|
|
61
|
+
patch = "patch"
|
|
62
|
+
minor = "minor"
|
|
63
|
+
major = "major"
|
|
64
|
+
interactive = "interactive"
|
|
65
|
+
auto = "auto"
|
|
66
|
+
|
|
67
|
+
def __str__(self) -> str:
|
|
68
|
+
return str(self.value)
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
class Options(BaseModel):
|
|
72
|
+
commit: bool = False
|
|
73
|
+
interactive: bool = False
|
|
74
|
+
no_config_updates: bool = False
|
|
75
|
+
update_precommit: bool = False
|
|
76
|
+
publish: BumpOption | None = None
|
|
77
|
+
all: BumpOption | None = None
|
|
78
|
+
bump: BumpOption | None = None
|
|
79
|
+
verbose: bool = False
|
|
80
|
+
debug: bool = False
|
|
81
|
+
ai_debug: bool = False # Enable verbose debugging for AI auto-fixing mode
|
|
82
|
+
benchmark: bool = False
|
|
83
|
+
test_workers: int = 0
|
|
84
|
+
test_timeout: int = 0
|
|
85
|
+
start_mcp_server: bool = False
|
|
86
|
+
stop_mcp_server: bool = False
|
|
87
|
+
restart_mcp_server: bool = False
|
|
88
|
+
create_pr: bool = False
|
|
89
|
+
skip_hooks: bool = False
|
|
90
|
+
fast: bool = False
|
|
91
|
+
comp: bool = False
|
|
92
|
+
fast_iteration: bool = False # Phase 10.2.4: Skip comprehensive hooks
|
|
93
|
+
tool: str | None = None # Phase 10.2.4: Run only specific tool
|
|
94
|
+
changed_only: bool = False # Phase 10.2.4: Run on changed files only
|
|
95
|
+
all_files: bool = False # Run hooks on all files (not just changed)
|
|
96
|
+
async_mode: bool = False
|
|
97
|
+
experimental_hooks: bool = False
|
|
98
|
+
enable_pyrefly: bool = False
|
|
99
|
+
enable_ty: bool = False
|
|
100
|
+
cleanup: t.Any | None = None
|
|
101
|
+
no_git_tags: bool = False
|
|
102
|
+
skip_version_check: bool = False
|
|
103
|
+
cleanup_pypi: bool = False
|
|
104
|
+
keep_releases: int = 10
|
|
105
|
+
track_progress: bool = False
|
|
106
|
+
orchestrated: bool = False
|
|
107
|
+
boost_coverage: bool = True
|
|
108
|
+
coverage: bool = False
|
|
109
|
+
orchestration_strategy: str = "adaptive"
|
|
110
|
+
orchestration_progress: str = "granular"
|
|
111
|
+
orchestration_ai_mode: str = "single-agent"
|
|
112
|
+
monitor: bool = False
|
|
113
|
+
enhanced_monitor: bool = False
|
|
114
|
+
watchdog: bool = False
|
|
115
|
+
start_websocket_server: bool = False
|
|
116
|
+
stop_websocket_server: bool = False
|
|
117
|
+
restart_websocket_server: bool = False
|
|
118
|
+
websocket_port: int | None = None
|
|
119
|
+
start_zuban_lsp: bool = False
|
|
120
|
+
stop_zuban_lsp: bool = False
|
|
121
|
+
restart_zuban_lsp: bool = False
|
|
122
|
+
no_zuban_lsp: bool = False
|
|
123
|
+
zuban_lsp_port: int = 8677
|
|
124
|
+
zuban_lsp_mode: str = "tcp"
|
|
125
|
+
zuban_lsp_timeout: int = 120
|
|
126
|
+
enable_lsp_hooks: bool = False
|
|
127
|
+
dev: bool = False
|
|
128
|
+
dashboard: bool = False
|
|
129
|
+
unified_dashboard: bool = False
|
|
130
|
+
unified_dashboard_port: int | None = None
|
|
131
|
+
max_iterations: int = 5
|
|
132
|
+
advanced_batch: str | None = None
|
|
133
|
+
monitor_dashboard: str | None = None
|
|
134
|
+
coverage_status: bool = False
|
|
135
|
+
coverage_goal: float | None = None
|
|
136
|
+
no_coverage_ratchet: bool = False
|
|
137
|
+
skip_config_merge: bool = False
|
|
138
|
+
disable_global_locks: bool = False
|
|
139
|
+
global_lock_timeout: int = 1800
|
|
140
|
+
global_lock_cleanup: bool = True
|
|
141
|
+
global_lock_dir: str | None = None
|
|
142
|
+
quick: bool = False
|
|
143
|
+
thorough: bool = False
|
|
144
|
+
clear_cache: bool = False
|
|
145
|
+
|
|
146
|
+
# Semantic search options
|
|
147
|
+
index: str | None = None
|
|
148
|
+
search: str | None = None
|
|
149
|
+
semantic_stats: bool = False
|
|
150
|
+
remove_from_index: str | None = None
|
|
151
|
+
cache_stats: bool = False
|
|
152
|
+
|
|
153
|
+
# ACB workflow integration (Phase 4.2 COMPLETE: ACB is now the default)
|
|
154
|
+
# Use --use-legacy-orchestrator to revert to the old orchestration system
|
|
155
|
+
use_acb_workflows: bool = True # ACB workflow engine is now the default
|
|
156
|
+
use_legacy_orchestrator: bool = False # Opt-in to legacy orchestrator
|
|
157
|
+
refresh_cache: bool = False
|
|
158
|
+
|
|
159
|
+
# Semantic field names (new primary interface)
|
|
160
|
+
strip_code: bool | None = None # Replaces clean
|
|
161
|
+
run_tests: bool = False # Replaces test
|
|
162
|
+
ai_fix: bool | None = None # Replaces ai_agent
|
|
163
|
+
dry_run: bool = False # Preview fixes without applying
|
|
164
|
+
full_release: str | None = None # Replaces all
|
|
165
|
+
show_progress: bool | None = None # Replaces track_progress
|
|
166
|
+
advanced_monitor: bool | None = None # Replaces enhanced_monitor
|
|
167
|
+
coverage_report: bool | None = None # Replaces coverage_status
|
|
168
|
+
clean_releases: bool | None = None # Replaces cleanup_pypi
|
|
169
|
+
|
|
170
|
+
# Documentation and changelog generation fields
|
|
171
|
+
generate_docs: bool = False
|
|
172
|
+
docs_format: str = "markdown"
|
|
173
|
+
validate_docs: bool = False
|
|
174
|
+
generate_changelog: bool = False
|
|
175
|
+
changelog_version: str | None = None
|
|
176
|
+
changelog_since: str | None = None
|
|
177
|
+
changelog_dry_run: bool = False
|
|
178
|
+
auto_version: bool = False
|
|
179
|
+
version_since: str | None = None
|
|
180
|
+
accept_version: bool = False
|
|
181
|
+
|
|
182
|
+
# Intelligent features
|
|
183
|
+
smart_commit: bool = True # Default enabled for advanced services integration
|
|
184
|
+
|
|
185
|
+
# Analytics and visualization features
|
|
186
|
+
heatmap: bool = False
|
|
187
|
+
heatmap_type: str = "error_frequency"
|
|
188
|
+
heatmap_output: str | None = None
|
|
189
|
+
anomaly_detection: bool = False
|
|
190
|
+
anomaly_sensitivity: float = 2.0
|
|
191
|
+
anomaly_report: str | None = None
|
|
192
|
+
predictive_analytics: bool = False
|
|
193
|
+
prediction_periods: int = 10
|
|
194
|
+
analytics_dashboard: str | None = None
|
|
195
|
+
|
|
196
|
+
# Configuration management features
|
|
197
|
+
check_config_updates: bool = False
|
|
198
|
+
apply_config_updates: bool = False
|
|
199
|
+
diff_config: str | None = None
|
|
200
|
+
config_interactive: bool = False
|
|
201
|
+
# Advanced features
|
|
202
|
+
advanced_optimizer: bool = False
|
|
203
|
+
advanced_profile: str | None = None
|
|
204
|
+
advanced_report: str | None = None
|
|
205
|
+
mkdocs_integration: bool = False
|
|
206
|
+
mkdocs_serve: bool = False
|
|
207
|
+
mkdocs_theme: str = "material"
|
|
208
|
+
mkdocs_output: str | None = None
|
|
209
|
+
contextual_ai: bool = False
|
|
210
|
+
ai_recommendations: int = 5
|
|
211
|
+
ai_help_query: str | None = None
|
|
212
|
+
|
|
213
|
+
def _map_legacy_flag(
|
|
214
|
+
self, old_attr: str, new_attr: str, deprecation_msg: str | None = None
|
|
215
|
+
) -> None:
|
|
216
|
+
"""Helper to map legacy flag to new flag with optional deprecation warning."""
|
|
217
|
+
old_value = getattr(self, old_attr)
|
|
218
|
+
new_value = getattr(self, new_attr)
|
|
219
|
+
|
|
220
|
+
if old_value and new_value is None:
|
|
221
|
+
setattr(self, new_attr, old_value)
|
|
222
|
+
if deprecation_msg:
|
|
223
|
+
warnings.warn(deprecation_msg, DeprecationWarning, stacklevel=4)
|
|
224
|
+
elif new_value is not None:
|
|
225
|
+
setattr(self, old_attr, new_value)
|
|
226
|
+
|
|
227
|
+
@model_validator(mode="after")
|
|
228
|
+
def handle_legacy_mappings(self) -> "Options":
|
|
229
|
+
"""Handle backward compatibility for deprecated flags."""
|
|
230
|
+
# Map flags without deprecation warnings
|
|
231
|
+
self._map_legacy_flag("all", "full_release")
|
|
232
|
+
self._map_legacy_flag("track_progress", "show_progress")
|
|
233
|
+
self._map_legacy_flag("enhanced_monitor", "advanced_monitor")
|
|
234
|
+
self._map_legacy_flag("coverage_status", "coverage_report")
|
|
235
|
+
self._map_legacy_flag("cleanup_pypi", "clean_releases")
|
|
236
|
+
|
|
237
|
+
return self
|
|
238
|
+
|
|
239
|
+
@property
|
|
240
|
+
def test(self) -> bool:
|
|
241
|
+
"""Compatibility property for run_tests field."""
|
|
242
|
+
return self.run_tests
|
|
243
|
+
|
|
244
|
+
@test.setter
|
|
245
|
+
def test(self, value: bool) -> None:
|
|
246
|
+
"""Setter for test property."""
|
|
247
|
+
self.run_tests = value
|
|
248
|
+
|
|
249
|
+
@property
|
|
250
|
+
def ai_agent(self) -> bool:
|
|
251
|
+
"""Compatibility property for ai_fix field."""
|
|
252
|
+
return bool(self.ai_fix)
|
|
253
|
+
|
|
254
|
+
@ai_agent.setter
|
|
255
|
+
def ai_agent(self, value: bool) -> None:
|
|
256
|
+
"""Setter for ai_agent property."""
|
|
257
|
+
self.ai_fix = value if self.ai_fix is not None else value
|
|
258
|
+
|
|
259
|
+
@property
|
|
260
|
+
def clean(self) -> bool:
|
|
261
|
+
"""Compatibility property for strip_code field."""
|
|
262
|
+
return bool(self.strip_code)
|
|
263
|
+
|
|
264
|
+
@clean.setter
|
|
265
|
+
def clean(self, value: bool) -> None:
|
|
266
|
+
"""Setter for clean property."""
|
|
267
|
+
self.strip_code = value
|
|
268
|
+
|
|
269
|
+
@property
|
|
270
|
+
def update_docs_index(self) -> bool:
|
|
271
|
+
"""Compatibility property for generate_docs field."""
|
|
272
|
+
return self.generate_docs
|
|
273
|
+
|
|
274
|
+
@update_docs_index.setter
|
|
275
|
+
def update_docs_index(self, value: bool) -> None:
|
|
276
|
+
"""Setter for update_docs_index property."""
|
|
277
|
+
self.generate_docs = value
|
|
278
|
+
|
|
279
|
+
@property
|
|
280
|
+
def effective_max_iterations(self) -> int:
|
|
281
|
+
if self.quick:
|
|
282
|
+
return 2
|
|
283
|
+
if self.thorough:
|
|
284
|
+
return 8
|
|
285
|
+
return self.max_iterations
|
|
286
|
+
|
|
287
|
+
@classmethod
|
|
288
|
+
@field_validator("publish", "bump", "full_release", mode="before")
|
|
289
|
+
def validate_bump_options(cls, value: t.Any) -> BumpOption | None:
|
|
290
|
+
if value is None:
|
|
291
|
+
return None
|
|
292
|
+
if value == "":
|
|
293
|
+
return BumpOption.interactive
|
|
294
|
+
|
|
295
|
+
# Handle case where typer parsed a flag as the value (e.g., -p -c becomes value="-c")
|
|
296
|
+
if isinstance(value, str) and value.startswith("-"):
|
|
297
|
+
return BumpOption.interactive
|
|
298
|
+
|
|
299
|
+
try:
|
|
300
|
+
return BumpOption(value.lower())
|
|
301
|
+
except ValueError:
|
|
302
|
+
valid_options = ", ".join([o.value for o in BumpOption])
|
|
303
|
+
msg = f"Invalid bump option: {value}. Must be one of: {valid_options}"
|
|
304
|
+
raise ValueError(
|
|
305
|
+
msg,
|
|
306
|
+
)
|
|
307
|
+
|
|
308
|
+
@classmethod
|
|
309
|
+
@field_validator("zuban_lsp_mode", mode="before")
|
|
310
|
+
def validate_zuban_lsp_mode(cls, value: t.Any) -> str:
|
|
311
|
+
if value is None:
|
|
312
|
+
return "tcp"
|
|
313
|
+
valid_modes = ["tcp", "stdio"]
|
|
314
|
+
if value.lower() not in valid_modes:
|
|
315
|
+
msg = f"Invalid zuban LSP mode: {value}. Must be one of: {', '.join(valid_modes)}"
|
|
316
|
+
raise ValueError(msg)
|
|
317
|
+
return str(value).lower()
|
|
318
|
+
|
|
319
|
+
|
|
320
|
+
CLI_OPTIONS = {
|
|
321
|
+
"commit": typer.Option(
|
|
322
|
+
False,
|
|
323
|
+
"-c",
|
|
324
|
+
"--commit",
|
|
325
|
+
help="Commit and push changes to Git.",
|
|
326
|
+
),
|
|
327
|
+
"interactive": typer.Option(
|
|
328
|
+
False,
|
|
329
|
+
"-i",
|
|
330
|
+
"--interactive",
|
|
331
|
+
help="Use the interactive Rich UI for a better experience.",
|
|
332
|
+
),
|
|
333
|
+
"no_config_updates": typer.Option(
|
|
334
|
+
False,
|
|
335
|
+
"-n",
|
|
336
|
+
"--no-config-updates",
|
|
337
|
+
help="Do not update configuration files.",
|
|
338
|
+
),
|
|
339
|
+
"update_precommit": typer.Option(
|
|
340
|
+
False,
|
|
341
|
+
"-u",
|
|
342
|
+
"--update-hooks",
|
|
343
|
+
help="Update hooks configuration.",
|
|
344
|
+
),
|
|
345
|
+
"verbose": typer.Option(False, "-v", "--verbose", help="Enable verbose output."),
|
|
346
|
+
"debug": typer.Option(False, "--debug", help="Enable debug output."),
|
|
347
|
+
"publish": typer.Option(
|
|
348
|
+
None,
|
|
349
|
+
"-p",
|
|
350
|
+
"--publish",
|
|
351
|
+
callback=parse_bump_option_with_flag_support,
|
|
352
|
+
help=(
|
|
353
|
+
"Bump version and publish to PyPI (patch, minor, major, auto). "
|
|
354
|
+
"Use 'interactive' to be prompted for version selection. "
|
|
355
|
+
"Use 'auto' to automatically use AI recommendations. "
|
|
356
|
+
"When used as a flag (-p), defaults to 'interactive'."
|
|
357
|
+
),
|
|
358
|
+
case_sensitive=False,
|
|
359
|
+
),
|
|
360
|
+
"all": typer.Option(
|
|
361
|
+
None,
|
|
362
|
+
"-a",
|
|
363
|
+
"--all",
|
|
364
|
+
callback=parse_bump_option_with_flag_support,
|
|
365
|
+
help="Full release workflow: bump version, run quality checks, and publish (patch, minor, major, auto). When used as a flag (-a), defaults to 'interactive'.",
|
|
366
|
+
case_sensitive=False,
|
|
367
|
+
),
|
|
368
|
+
"bump": typer.Option(
|
|
369
|
+
None,
|
|
370
|
+
"-b",
|
|
371
|
+
"--bump",
|
|
372
|
+
callback=parse_bump_option_with_flag_support,
|
|
373
|
+
help="Bump version (patch, minor, major, auto). When used as a flag (-b), defaults to 'interactive'.",
|
|
374
|
+
case_sensitive=False,
|
|
375
|
+
),
|
|
376
|
+
"benchmark": typer.Option(
|
|
377
|
+
False,
|
|
378
|
+
"--benchmark",
|
|
379
|
+
help="Run tests in benchmark mode (disables parallel execution).",
|
|
380
|
+
),
|
|
381
|
+
"test_workers": typer.Option(
|
|
382
|
+
0,
|
|
383
|
+
"--test-workers",
|
|
384
|
+
help=(
|
|
385
|
+
"Number of parallel workers for running tests. "
|
|
386
|
+
"0 = auto-detect via pytest-xdist (default), "
|
|
387
|
+
"1 = sequential execution, "
|
|
388
|
+
">1 = explicit worker count, "
|
|
389
|
+
"<0 = fractional (e.g., -2 = half of CPU cores). "
|
|
390
|
+
"Set CRACKERJACK_DISABLE_AUTO_WORKERS=1 to force sequential."
|
|
391
|
+
),
|
|
392
|
+
),
|
|
393
|
+
"test_timeout": typer.Option(
|
|
394
|
+
0,
|
|
395
|
+
"--test-timeout",
|
|
396
|
+
help=(
|
|
397
|
+
"Timeout in seconds for individual tests "
|
|
398
|
+
"(0 = use default based on project size)."
|
|
399
|
+
),
|
|
400
|
+
),
|
|
401
|
+
"skip_hooks": typer.Option(
|
|
402
|
+
False,
|
|
403
|
+
"-s",
|
|
404
|
+
"--skip-hooks",
|
|
405
|
+
help="Skip running hooks (useful with -t).",
|
|
406
|
+
),
|
|
407
|
+
"fast": typer.Option(
|
|
408
|
+
False,
|
|
409
|
+
"--fast",
|
|
410
|
+
help="Run only fast hooks (formatting and basic checks).",
|
|
411
|
+
),
|
|
412
|
+
"comp": typer.Option(
|
|
413
|
+
False,
|
|
414
|
+
"--comp",
|
|
415
|
+
help=(
|
|
416
|
+
"Run only comprehensive hooks (type checking, security, "
|
|
417
|
+
"complexity analysis)."
|
|
418
|
+
),
|
|
419
|
+
),
|
|
420
|
+
"fast_iteration": typer.Option(
|
|
421
|
+
False,
|
|
422
|
+
"--fast-iteration",
|
|
423
|
+
help="Skip comprehensive hooks during active development (formatters only).",
|
|
424
|
+
),
|
|
425
|
+
"tool": typer.Option(
|
|
426
|
+
None,
|
|
427
|
+
"--tool",
|
|
428
|
+
help="Run only the specified tool (e.g., 'ruff-check', 'zuban').",
|
|
429
|
+
),
|
|
430
|
+
"changed_only": typer.Option(
|
|
431
|
+
False,
|
|
432
|
+
"--changed-only",
|
|
433
|
+
help="Run quality checks only on files changed in git.",
|
|
434
|
+
),
|
|
435
|
+
"all_files": typer.Option(
|
|
436
|
+
False,
|
|
437
|
+
"--all-files",
|
|
438
|
+
help="Run hooks on all files (not just changed files). Useful for CI/CD or after dependency updates.",
|
|
439
|
+
),
|
|
440
|
+
"create_pr": typer.Option(
|
|
441
|
+
False,
|
|
442
|
+
"-r",
|
|
443
|
+
"--pr",
|
|
444
|
+
"--new-pull-request",
|
|
445
|
+
help="Create a new pull request to the upstream repository.",
|
|
446
|
+
),
|
|
447
|
+
"start_mcp_server": typer.Option(
|
|
448
|
+
False,
|
|
449
|
+
"--start-mcp-server",
|
|
450
|
+
help="Start MCP server for AI agent integration.",
|
|
451
|
+
),
|
|
452
|
+
"stop_mcp_server": typer.Option(
|
|
453
|
+
False,
|
|
454
|
+
"--stop-mcp-server",
|
|
455
|
+
help="Stop all running MCP servers.",
|
|
456
|
+
),
|
|
457
|
+
"restart_mcp_server": typer.Option(
|
|
458
|
+
False,
|
|
459
|
+
"--restart-mcp-server",
|
|
460
|
+
help="Restart MCP server (stop and start again).",
|
|
461
|
+
),
|
|
462
|
+
"async_mode": typer.Option(
|
|
463
|
+
False,
|
|
464
|
+
"--async",
|
|
465
|
+
help="Enable async mode for faster file operations (experimental).",
|
|
466
|
+
hidden=True,
|
|
467
|
+
),
|
|
468
|
+
"experimental_hooks": typer.Option(
|
|
469
|
+
False,
|
|
470
|
+
"--experimental-hooks",
|
|
471
|
+
help="Enable experimental hooks (includes pyrefly and ty).",
|
|
472
|
+
),
|
|
473
|
+
"enable_pyrefly": typer.Option(
|
|
474
|
+
False,
|
|
475
|
+
"--enable-pyrefly",
|
|
476
|
+
help=(
|
|
477
|
+
"Enable pyrefly experimental type checking "
|
|
478
|
+
"(requires experimental hooks mode)."
|
|
479
|
+
),
|
|
480
|
+
),
|
|
481
|
+
"enable_ty": typer.Option(
|
|
482
|
+
False,
|
|
483
|
+
"--enable-ty",
|
|
484
|
+
help=(
|
|
485
|
+
"Enable ty experimental type verification "
|
|
486
|
+
"(requires experimental hooks mode)."
|
|
487
|
+
),
|
|
488
|
+
),
|
|
489
|
+
"no_git_tags": typer.Option(
|
|
490
|
+
False,
|
|
491
|
+
"--no-git-tags",
|
|
492
|
+
help=(
|
|
493
|
+
"Skip creating git tags during version bumping "
|
|
494
|
+
"(tags are created by default)."
|
|
495
|
+
),
|
|
496
|
+
),
|
|
497
|
+
"skip_version_check": typer.Option(
|
|
498
|
+
False,
|
|
499
|
+
"--skip-version-check",
|
|
500
|
+
help=(
|
|
501
|
+
"Skip version consistency verification between pyproject.toml and git tags."
|
|
502
|
+
),
|
|
503
|
+
),
|
|
504
|
+
"start_websocket_server": typer.Option(
|
|
505
|
+
False,
|
|
506
|
+
"--start-websocket-server",
|
|
507
|
+
help="Start WebSocket progress server on port 8675.",
|
|
508
|
+
),
|
|
509
|
+
"stop_websocket_server": typer.Option(
|
|
510
|
+
False,
|
|
511
|
+
"--stop-websocket-server",
|
|
512
|
+
help="Stop all running WebSocket servers.",
|
|
513
|
+
),
|
|
514
|
+
"restart_websocket_server": typer.Option(
|
|
515
|
+
False,
|
|
516
|
+
"--restart-websocket-server",
|
|
517
|
+
help="Restart WebSocket server (stop and start again).",
|
|
518
|
+
),
|
|
519
|
+
"websocket_port": typer.Option(
|
|
520
|
+
None,
|
|
521
|
+
"--websocket-port",
|
|
522
|
+
help="Port for WebSocket server when using --start-mcp-server (e.g., 8675).",
|
|
523
|
+
),
|
|
524
|
+
"start_zuban_lsp": typer.Option(
|
|
525
|
+
False,
|
|
526
|
+
"--start-zuban-lsp",
|
|
527
|
+
help="Start Zuban LSP server for real-time type checking.",
|
|
528
|
+
),
|
|
529
|
+
"stop_zuban_lsp": typer.Option(
|
|
530
|
+
False,
|
|
531
|
+
"--stop-zuban-lsp",
|
|
532
|
+
help="Stop all running Zuban LSP servers.",
|
|
533
|
+
),
|
|
534
|
+
"restart_zuban_lsp": typer.Option(
|
|
535
|
+
False,
|
|
536
|
+
"--restart-zuban-lsp",
|
|
537
|
+
help="Restart Zuban LSP server (stop and start again).",
|
|
538
|
+
),
|
|
539
|
+
"no_zuban_lsp": typer.Option(
|
|
540
|
+
False,
|
|
541
|
+
"--no-zuban-lsp",
|
|
542
|
+
help="Disable automatic Zuban LSP server startup.",
|
|
543
|
+
),
|
|
544
|
+
"zuban_lsp_port": typer.Option(
|
|
545
|
+
8677,
|
|
546
|
+
"--zuban-lsp-port",
|
|
547
|
+
help="Port for Zuban LSP server (default: 8677).",
|
|
548
|
+
),
|
|
549
|
+
"zuban_lsp_mode": typer.Option(
|
|
550
|
+
"tcp",
|
|
551
|
+
"--zuban-lsp-mode",
|
|
552
|
+
help="Transport mode for Zuban LSP: tcp or stdio (default: tcp).",
|
|
553
|
+
),
|
|
554
|
+
"zuban_lsp_timeout": typer.Option(
|
|
555
|
+
30,
|
|
556
|
+
"--zuban-lsp-timeout",
|
|
557
|
+
help="Timeout in seconds for LSP server operations (default: 30).",
|
|
558
|
+
),
|
|
559
|
+
"enable_lsp_hooks": typer.Option(
|
|
560
|
+
False,
|
|
561
|
+
"--enable-lsp-hooks",
|
|
562
|
+
help="Enable LSP-optimized hook execution for faster type checking.",
|
|
563
|
+
),
|
|
564
|
+
"watchdog": typer.Option(
|
|
565
|
+
False,
|
|
566
|
+
"--watchdog",
|
|
567
|
+
help=(
|
|
568
|
+
"Start service watchdog to monitor and auto-restart "
|
|
569
|
+
"MCP and WebSocket servers."
|
|
570
|
+
),
|
|
571
|
+
),
|
|
572
|
+
"monitor": typer.Option(
|
|
573
|
+
False,
|
|
574
|
+
"--monitor",
|
|
575
|
+
help=(
|
|
576
|
+
"Start multi-project progress monitor with WebSocket polling, "
|
|
577
|
+
"watchdog services, and autodiscovery."
|
|
578
|
+
),
|
|
579
|
+
),
|
|
580
|
+
"enhanced_monitor": typer.Option(
|
|
581
|
+
False,
|
|
582
|
+
"--enhanced-monitor",
|
|
583
|
+
help=(
|
|
584
|
+
"Start enhanced progress monitor with advanced MetricCard widgets "
|
|
585
|
+
"and modern web UI patterns."
|
|
586
|
+
),
|
|
587
|
+
),
|
|
588
|
+
"dev": typer.Option(
|
|
589
|
+
False,
|
|
590
|
+
"--dev",
|
|
591
|
+
help=(
|
|
592
|
+
"Enable development mode for progress monitors "
|
|
593
|
+
"(enables textual --dev mode)."
|
|
594
|
+
),
|
|
595
|
+
),
|
|
596
|
+
"dashboard": typer.Option(
|
|
597
|
+
False,
|
|
598
|
+
"--dashboard",
|
|
599
|
+
help=(
|
|
600
|
+
"Start the comprehensive dashboard with system metrics, "
|
|
601
|
+
"job tracking, and performance monitoring."
|
|
602
|
+
),
|
|
603
|
+
),
|
|
604
|
+
"unified_dashboard": typer.Option(
|
|
605
|
+
False,
|
|
606
|
+
"--unified-dashboard",
|
|
607
|
+
help=(
|
|
608
|
+
"Start the unified monitoring dashboard with real-time WebSocket streaming, "
|
|
609
|
+
"web UI, and comprehensive system metrics aggregation."
|
|
610
|
+
),
|
|
611
|
+
),
|
|
612
|
+
"unified_dashboard_port": typer.Option(
|
|
613
|
+
None,
|
|
614
|
+
"--unified-dashboard-port",
|
|
615
|
+
help="Port for unified dashboard server (default: 8675).",
|
|
616
|
+
),
|
|
617
|
+
"max_iterations": typer.Option(
|
|
618
|
+
10,
|
|
619
|
+
"--max-iterations",
|
|
620
|
+
help="Maximum auto-fix iterations (default: 10).",
|
|
621
|
+
),
|
|
622
|
+
"ai_debug": typer.Option(
|
|
623
|
+
False,
|
|
624
|
+
"--ai-debug",
|
|
625
|
+
help="Enable verbose debugging for AI auto-fixing mode (implies --ai-fix).",
|
|
626
|
+
),
|
|
627
|
+
"job_id": typer.Option(
|
|
628
|
+
None,
|
|
629
|
+
"--job-id",
|
|
630
|
+
help="Job ID for WebSocket progress tracking (internal use).",
|
|
631
|
+
hidden=True,
|
|
632
|
+
),
|
|
633
|
+
"orchestrated": typer.Option(
|
|
634
|
+
False,
|
|
635
|
+
"--orchestrated",
|
|
636
|
+
help="Enable advanced orchestrated workflow mode with intelligent execution strategies, granular progress tracking, and multi-agent AI coordination.",
|
|
637
|
+
),
|
|
638
|
+
"orchestration_strategy": typer.Option(
|
|
639
|
+
"adaptive",
|
|
640
|
+
"--orchestration-strategy",
|
|
641
|
+
help="Execution strategy for orchestrated mode: batch, individual, adaptive, selective (default: adaptive).",
|
|
642
|
+
),
|
|
643
|
+
"orchestration_progress": typer.Option(
|
|
644
|
+
"granular",
|
|
645
|
+
"--orchestration-progress",
|
|
646
|
+
help="Progress tracking level: basic, detailed, granular, streaming (default: granular).",
|
|
647
|
+
),
|
|
648
|
+
"orchestration_ai_mode": typer.Option(
|
|
649
|
+
"single-agent",
|
|
650
|
+
"--orchestration-ai-mode",
|
|
651
|
+
help=(
|
|
652
|
+
"AI coordination mode: single-agent, multi-agent, coordinator "
|
|
653
|
+
"(default: single-agent)."
|
|
654
|
+
),
|
|
655
|
+
),
|
|
656
|
+
"coverage_status": typer.Option(
|
|
657
|
+
False,
|
|
658
|
+
"--coverage-status",
|
|
659
|
+
help="Show current coverage ratchet status and progress toward 100%.",
|
|
660
|
+
),
|
|
661
|
+
"coverage_goal": typer.Option(
|
|
662
|
+
None,
|
|
663
|
+
"--coverage-goal",
|
|
664
|
+
help="Set explicit coverage target for this session (e.g., 15.0).",
|
|
665
|
+
),
|
|
666
|
+
"no_coverage_ratchet": typer.Option(
|
|
667
|
+
False,
|
|
668
|
+
"--no-coverage-ratchet",
|
|
669
|
+
help="Disable coverage ratchet system temporarily (for experiments).",
|
|
670
|
+
),
|
|
671
|
+
"boost_coverage": typer.Option(
|
|
672
|
+
True,
|
|
673
|
+
"--boost-coverage/--no-boost-coverage",
|
|
674
|
+
help=(
|
|
675
|
+
"Automatically improve test coverage after successful "
|
|
676
|
+
"workflow execution (default: True)."
|
|
677
|
+
),
|
|
678
|
+
),
|
|
679
|
+
"disable_global_locks": typer.Option(
|
|
680
|
+
False,
|
|
681
|
+
"--disable-global-locks",
|
|
682
|
+
help=(
|
|
683
|
+
"Disable global locking (allow concurrent hook execution across sessions)."
|
|
684
|
+
),
|
|
685
|
+
),
|
|
686
|
+
"global_lock_timeout": typer.Option(
|
|
687
|
+
600,
|
|
688
|
+
"--global-lock-timeout",
|
|
689
|
+
help="Global lock timeout in seconds (default: 600).",
|
|
690
|
+
),
|
|
691
|
+
"global_lock_cleanup": typer.Option(
|
|
692
|
+
True,
|
|
693
|
+
"--cleanup-stale-locks/--no-cleanup-stale-locks",
|
|
694
|
+
help="Clean up stale global lock files before execution (default: True).",
|
|
695
|
+
),
|
|
696
|
+
"global_lock_dir": typer.Option(
|
|
697
|
+
None,
|
|
698
|
+
"--global-lock-dir",
|
|
699
|
+
help="Custom directory for global lock files (default: ~/.crackerjack/locks).",
|
|
700
|
+
),
|
|
701
|
+
"quick": typer.Option(
|
|
702
|
+
False,
|
|
703
|
+
"--quick",
|
|
704
|
+
help="Quick mode: Run with maximum 3 iterations (ideal for CI/CD).",
|
|
705
|
+
),
|
|
706
|
+
"thorough": typer.Option(
|
|
707
|
+
False,
|
|
708
|
+
"--thorough",
|
|
709
|
+
help="Thorough mode: Run with maximum 8 iterations (for complex refactoring).",
|
|
710
|
+
),
|
|
711
|
+
"clear_cache": typer.Option(
|
|
712
|
+
False,
|
|
713
|
+
"--clear-cache",
|
|
714
|
+
help="Clear all caches (hook results, file hashes, agent decisions) and exit.",
|
|
715
|
+
),
|
|
716
|
+
"cache_stats": typer.Option(
|
|
717
|
+
False,
|
|
718
|
+
"--cache-stats",
|
|
719
|
+
help="Display cache statistics (hit rates, sizes, entries) and exit.",
|
|
720
|
+
),
|
|
721
|
+
# New semantic CLI options with backward compatibility
|
|
722
|
+
"strip_code": typer.Option(
|
|
723
|
+
None,
|
|
724
|
+
"-x",
|
|
725
|
+
"--strip-code",
|
|
726
|
+
help="Remove docstrings, line comments, and unnecessary whitespace from source code with automatic backup protection (doesn't affect test files).",
|
|
727
|
+
),
|
|
728
|
+
"run_tests": typer.Option(
|
|
729
|
+
False,
|
|
730
|
+
"-t",
|
|
731
|
+
"--run-tests",
|
|
732
|
+
help=(
|
|
733
|
+
"Execute the test suite with automatic worker detection "
|
|
734
|
+
"and timeout handling."
|
|
735
|
+
),
|
|
736
|
+
),
|
|
737
|
+
"ai_fix": typer.Option(
|
|
738
|
+
None,
|
|
739
|
+
"--ai-fix",
|
|
740
|
+
help=(
|
|
741
|
+
"Enable AI-powered auto-fixing. "
|
|
742
|
+
"Iteratively fixes code issues using Claude AI. "
|
|
743
|
+
"Requires ANTHROPIC_API_KEY environment variable. "
|
|
744
|
+
"Max 10 iterations, stops when all hooks pass."
|
|
745
|
+
),
|
|
746
|
+
),
|
|
747
|
+
"dry_run": typer.Option(
|
|
748
|
+
False,
|
|
749
|
+
"--dry-run",
|
|
750
|
+
help="Preview fixes without modifying files (implies --ai-fix).",
|
|
751
|
+
),
|
|
752
|
+
"full_release": typer.Option(
|
|
753
|
+
None,
|
|
754
|
+
"-a",
|
|
755
|
+
"--full-release",
|
|
756
|
+
callback=parse_bump_option_with_flag_support,
|
|
757
|
+
help="Complete release workflow: strip code, run tests, bump version, and publish (patch, minor, major, auto). Equivalent to `-x -t -p <version> -c`. When used as a flag (-a), defaults to 'interactive'.",
|
|
758
|
+
case_sensitive=False,
|
|
759
|
+
),
|
|
760
|
+
"show_progress": typer.Option(
|
|
761
|
+
None,
|
|
762
|
+
"--show-progress",
|
|
763
|
+
help=(
|
|
764
|
+
"Display detailed progress tracking during execution. "
|
|
765
|
+
"[Semantic alias for --track-progress]"
|
|
766
|
+
),
|
|
767
|
+
),
|
|
768
|
+
"advanced_monitor": typer.Option(
|
|
769
|
+
None,
|
|
770
|
+
"--advanced-monitor",
|
|
771
|
+
help=(
|
|
772
|
+
"Enable advanced monitoring dashboard with detailed metrics "
|
|
773
|
+
"and analytics. [Semantic alias for --enhanced-monitor]"
|
|
774
|
+
),
|
|
775
|
+
),
|
|
776
|
+
"coverage_report": typer.Option(
|
|
777
|
+
None,
|
|
778
|
+
"--coverage-report",
|
|
779
|
+
help=(
|
|
780
|
+
"Display comprehensive coverage analysis and report. "
|
|
781
|
+
"[Semantic alias for --coverage-status]"
|
|
782
|
+
),
|
|
783
|
+
),
|
|
784
|
+
"clean_releases": typer.Option(
|
|
785
|
+
None,
|
|
786
|
+
"--clean-releases",
|
|
787
|
+
help=(
|
|
788
|
+
"Clean up old releases from PyPI, keeping only the most recent "
|
|
789
|
+
"versions. [Semantic alias for --cleanup-pypi]"
|
|
790
|
+
),
|
|
791
|
+
),
|
|
792
|
+
"generate_docs": typer.Option(
|
|
793
|
+
False,
|
|
794
|
+
"--generate-docs",
|
|
795
|
+
help=(
|
|
796
|
+
"Generate comprehensive API documentation from source code "
|
|
797
|
+
"with AST analysis and cross-references."
|
|
798
|
+
),
|
|
799
|
+
),
|
|
800
|
+
"docs_format": typer.Option(
|
|
801
|
+
"markdown",
|
|
802
|
+
"--docs-format",
|
|
803
|
+
help="Documentation output format: 'markdown' (default), 'rst', or 'html'.",
|
|
804
|
+
),
|
|
805
|
+
"validate_docs": typer.Option(
|
|
806
|
+
False,
|
|
807
|
+
"--validate-docs",
|
|
808
|
+
help="Validate existing documentation for completeness and consistency.",
|
|
809
|
+
),
|
|
810
|
+
"generate_changelog": typer.Option(
|
|
811
|
+
False,
|
|
812
|
+
"--generate-changelog",
|
|
813
|
+
help="Generate changelog entries from git commits.",
|
|
814
|
+
),
|
|
815
|
+
"changelog_version": typer.Option(
|
|
816
|
+
None,
|
|
817
|
+
"--changelog-version",
|
|
818
|
+
help="Version number for changelog generation (default: next version).",
|
|
819
|
+
),
|
|
820
|
+
"changelog_since": typer.Option(
|
|
821
|
+
None,
|
|
822
|
+
"--changelog-since",
|
|
823
|
+
help="Generate changelog since this version/tag (default: last release).",
|
|
824
|
+
),
|
|
825
|
+
"changelog_dry_run": typer.Option(
|
|
826
|
+
False,
|
|
827
|
+
"--changelog-dry-run",
|
|
828
|
+
help="Preview changelog generation without writing to file.",
|
|
829
|
+
),
|
|
830
|
+
"auto_version": typer.Option(
|
|
831
|
+
False,
|
|
832
|
+
"--auto-version",
|
|
833
|
+
help="Automatically analyze changes and recommend version bump.",
|
|
834
|
+
),
|
|
835
|
+
"version_since": typer.Option(
|
|
836
|
+
None,
|
|
837
|
+
"--version-since",
|
|
838
|
+
help="Analyze changes since this version/tag for version bump recommendation.",
|
|
839
|
+
),
|
|
840
|
+
"accept_version": typer.Option(
|
|
841
|
+
False,
|
|
842
|
+
"--accept-version",
|
|
843
|
+
help="Automatically accept version bump recommendation without confirmation.",
|
|
844
|
+
),
|
|
845
|
+
"smart_commit": typer.Option(
|
|
846
|
+
True, # Now enabled by default for advanced services integration
|
|
847
|
+
"--smart-commit/--basic-commit",
|
|
848
|
+
help="Generate intelligent commit messages using AI analysis (default: enabled). Use --basic-commit for simple messages.",
|
|
849
|
+
),
|
|
850
|
+
"heatmap": typer.Option(
|
|
851
|
+
False,
|
|
852
|
+
"--heatmap",
|
|
853
|
+
help="Generate visual heat map analysis of code quality patterns and error distributions.",
|
|
854
|
+
),
|
|
855
|
+
"heatmap_type": typer.Option(
|
|
856
|
+
"error_frequency",
|
|
857
|
+
"--heatmap-type",
|
|
858
|
+
help="Type of heat map to generate: error_frequency, complexity, quality_metrics, test_failures.",
|
|
859
|
+
),
|
|
860
|
+
"heatmap_output": typer.Option(
|
|
861
|
+
None,
|
|
862
|
+
"--heatmap-output",
|
|
863
|
+
help="Output file path for heat map data (JSON/CSV) or HTML visualization.",
|
|
864
|
+
),
|
|
865
|
+
"anomaly_detection": typer.Option(
|
|
866
|
+
False,
|
|
867
|
+
"--anomaly-detection",
|
|
868
|
+
help="Enable ML-based anomaly detection for quality metrics monitoring.",
|
|
869
|
+
),
|
|
870
|
+
"anomaly_sensitivity": typer.Option(
|
|
871
|
+
2.0,
|
|
872
|
+
"--anomaly-sensitivity",
|
|
873
|
+
help="Sensitivity level for anomaly detection (1.0=very sensitive, 3.0=less sensitive).",
|
|
874
|
+
),
|
|
875
|
+
"anomaly_report": typer.Option(
|
|
876
|
+
None,
|
|
877
|
+
"--anomaly-report",
|
|
878
|
+
help="Output file path for anomaly detection report (JSON format).",
|
|
879
|
+
),
|
|
880
|
+
"predictive_analytics": typer.Option(
|
|
881
|
+
False,
|
|
882
|
+
"--predictive-analytics",
|
|
883
|
+
help="Enable predictive analytics for quality metrics forecasting and trend analysis.",
|
|
884
|
+
),
|
|
885
|
+
"prediction_periods": typer.Option(
|
|
886
|
+
10,
|
|
887
|
+
"--prediction-periods",
|
|
888
|
+
help="Number of future periods to predict (default: 10).",
|
|
889
|
+
),
|
|
890
|
+
"analytics_dashboard": typer.Option(
|
|
891
|
+
None,
|
|
892
|
+
"--analytics-dashboard",
|
|
893
|
+
help="Output file path for analytics dashboard (HTML format).",
|
|
894
|
+
),
|
|
895
|
+
# Advanced features
|
|
896
|
+
"advanced_optimizer": typer.Option(
|
|
897
|
+
False,
|
|
898
|
+
"--advanced-optimizer",
|
|
899
|
+
help="Enable advanced-scale optimization engine with resource monitoring and scaling analysis.",
|
|
900
|
+
),
|
|
901
|
+
"advanced_profile": typer.Option(
|
|
902
|
+
None,
|
|
903
|
+
"--advanced-profile",
|
|
904
|
+
help="Advanced optimization profile: balanced, performance, memory, throughput.",
|
|
905
|
+
),
|
|
906
|
+
"advanced_report": typer.Option(
|
|
907
|
+
None,
|
|
908
|
+
"--advanced-report",
|
|
909
|
+
help="Output file path for advanced optimization report (JSON format).",
|
|
910
|
+
),
|
|
911
|
+
"mkdocs_integration": typer.Option(
|
|
912
|
+
False,
|
|
913
|
+
"--mkdocs-integration",
|
|
914
|
+
help="Generate complete MkDocs documentation site with Material theme and automation.",
|
|
915
|
+
),
|
|
916
|
+
"mkdocs_serve": typer.Option(
|
|
917
|
+
False,
|
|
918
|
+
"--mkdocs-serve",
|
|
919
|
+
help="Start MkDocs development server after building documentation site.",
|
|
920
|
+
),
|
|
921
|
+
"mkdocs_theme": typer.Option(
|
|
922
|
+
"material",
|
|
923
|
+
"--mkdocs-theme",
|
|
924
|
+
help="MkDocs theme to use for documentation generation (default: material).",
|
|
925
|
+
),
|
|
926
|
+
"mkdocs_output": typer.Option(
|
|
927
|
+
None,
|
|
928
|
+
"--mkdocs-output",
|
|
929
|
+
help="Output directory for MkDocs site generation (default: ./docs_site).",
|
|
930
|
+
),
|
|
931
|
+
"contextual_ai": typer.Option(
|
|
932
|
+
False,
|
|
933
|
+
"--contextual-ai",
|
|
934
|
+
help="Enable contextual AI assistant with project-specific recommendations and insights.",
|
|
935
|
+
),
|
|
936
|
+
"ai_recommendations": typer.Option(
|
|
937
|
+
5,
|
|
938
|
+
"--ai-recommendations",
|
|
939
|
+
help="Maximum number of AI recommendations to display (default: 5).",
|
|
940
|
+
),
|
|
941
|
+
"ai_help_query": typer.Option(
|
|
942
|
+
None,
|
|
943
|
+
"--ai-help-query",
|
|
944
|
+
help="Get contextual help for specific query using AI assistant.",
|
|
945
|
+
),
|
|
946
|
+
# Configuration management features
|
|
947
|
+
"check_config_updates": typer.Option(
|
|
948
|
+
False,
|
|
949
|
+
"--check-config-updates",
|
|
950
|
+
help="Check for available configuration template updates.",
|
|
951
|
+
),
|
|
952
|
+
"apply_config_updates": typer.Option(
|
|
953
|
+
False,
|
|
954
|
+
"--apply-config-updates",
|
|
955
|
+
help="Apply available configuration template updates.",
|
|
956
|
+
),
|
|
957
|
+
"diff_config": typer.Option(
|
|
958
|
+
None,
|
|
959
|
+
"--diff-config",
|
|
960
|
+
help="Show diff preview for a specific configuration type.",
|
|
961
|
+
),
|
|
962
|
+
"config_interactive": typer.Option(
|
|
963
|
+
False,
|
|
964
|
+
"--config-interactive",
|
|
965
|
+
help="Apply configuration updates interactively with confirmations.",
|
|
966
|
+
),
|
|
967
|
+
"refresh_cache": typer.Option(
|
|
968
|
+
False,
|
|
969
|
+
"--refresh-cache",
|
|
970
|
+
help="Refresh cache to ensure fresh environment.",
|
|
971
|
+
),
|
|
972
|
+
# ACB workflow integration (Phase 4.2 COMPLETE - ACB is now the default)
|
|
973
|
+
"use_acb_workflows": typer.Option(
|
|
974
|
+
True, # ACB workflows are now the default
|
|
975
|
+
"--use-acb-workflows",
|
|
976
|
+
help="[DEFAULT - REDUNDANT] ACB is now always used (kept for compatibility).",
|
|
977
|
+
hidden=True, # Hidden since it's redundant (ACB is always the default)
|
|
978
|
+
),
|
|
979
|
+
"use_legacy_orchestrator": typer.Option(
|
|
980
|
+
False,
|
|
981
|
+
"--use-legacy-orchestrator/--no-use-legacy-orchestrator",
|
|
982
|
+
help="Opt out of ACB workflows and use legacy orchestrator (for compatibility).",
|
|
983
|
+
hidden=False,
|
|
984
|
+
),
|
|
985
|
+
# Semantic search options
|
|
986
|
+
"index": typer.Option(
|
|
987
|
+
None,
|
|
988
|
+
"--index",
|
|
989
|
+
help="Index a file or directory for semantic search (e.g., --index path/to/file.py).",
|
|
990
|
+
),
|
|
991
|
+
"search": typer.Option(
|
|
992
|
+
None,
|
|
993
|
+
"--search",
|
|
994
|
+
help="Perform semantic search across indexed files (e.g., --search 'similarity calculation').",
|
|
995
|
+
),
|
|
996
|
+
"semantic_stats": typer.Option(
|
|
997
|
+
False,
|
|
998
|
+
"--semantic-stats",
|
|
999
|
+
help="Display statistics about the semantic search index.",
|
|
1000
|
+
),
|
|
1001
|
+
"remove_from_index": typer.Option(
|
|
1002
|
+
None,
|
|
1003
|
+
"--remove-from-index",
|
|
1004
|
+
help="Remove a file from the semantic search index (e.g., --remove-from-index path/to/file.py).",
|
|
1005
|
+
),
|
|
1006
|
+
}
|
|
1007
|
+
|
|
1008
|
+
|
|
1009
|
+
def create_options(
|
|
1010
|
+
commit: bool,
|
|
1011
|
+
interactive: bool,
|
|
1012
|
+
no_config_updates: bool,
|
|
1013
|
+
update_precommit: bool,
|
|
1014
|
+
verbose: bool,
|
|
1015
|
+
debug: bool,
|
|
1016
|
+
publish: BumpOption | None,
|
|
1017
|
+
bump: BumpOption | None,
|
|
1018
|
+
benchmark: bool,
|
|
1019
|
+
test_workers: int,
|
|
1020
|
+
test_timeout: int,
|
|
1021
|
+
skip_hooks: bool,
|
|
1022
|
+
fast: bool,
|
|
1023
|
+
comp: bool,
|
|
1024
|
+
fast_iteration: bool = False,
|
|
1025
|
+
tool: str | None = None,
|
|
1026
|
+
changed_only: bool = False,
|
|
1027
|
+
all_files: bool = False,
|
|
1028
|
+
create_pr: bool = False,
|
|
1029
|
+
async_mode: bool = False,
|
|
1030
|
+
experimental_hooks: bool = False,
|
|
1031
|
+
enable_pyrefly: bool = False,
|
|
1032
|
+
enable_ty: bool = False,
|
|
1033
|
+
start_zuban_lsp: bool = False,
|
|
1034
|
+
stop_zuban_lsp: bool = False,
|
|
1035
|
+
restart_zuban_lsp: bool = False,
|
|
1036
|
+
no_zuban_lsp: bool = False,
|
|
1037
|
+
zuban_lsp_port: int = 8677,
|
|
1038
|
+
zuban_lsp_mode: str = "tcp",
|
|
1039
|
+
zuban_lsp_timeout: int = 120,
|
|
1040
|
+
enable_lsp_hooks: bool = False,
|
|
1041
|
+
no_git_tags: bool = False,
|
|
1042
|
+
skip_version_check: bool = False,
|
|
1043
|
+
orchestrated: bool = False,
|
|
1044
|
+
orchestration_strategy: str = "adaptive",
|
|
1045
|
+
orchestration_progress: str = "granular",
|
|
1046
|
+
orchestration_ai_mode: str = "single-agent",
|
|
1047
|
+
dev: bool = False,
|
|
1048
|
+
dashboard: bool = False,
|
|
1049
|
+
unified_dashboard: bool = False,
|
|
1050
|
+
unified_dashboard_port: int | None = None,
|
|
1051
|
+
max_iterations: int = 10,
|
|
1052
|
+
coverage_status: bool = False,
|
|
1053
|
+
coverage_goal: float | None = None,
|
|
1054
|
+
no_coverage_ratchet: bool = False,
|
|
1055
|
+
boost_coverage: bool = True,
|
|
1056
|
+
disable_global_locks: bool = False,
|
|
1057
|
+
global_lock_timeout: int = 1800,
|
|
1058
|
+
global_lock_cleanup: bool = True,
|
|
1059
|
+
global_lock_dir: str | None = None,
|
|
1060
|
+
quick: bool = False,
|
|
1061
|
+
thorough: bool = False,
|
|
1062
|
+
clear_cache: bool = False,
|
|
1063
|
+
cache_stats: bool = False,
|
|
1064
|
+
generate_docs: bool = False,
|
|
1065
|
+
docs_format: str = "markdown",
|
|
1066
|
+
validate_docs: bool = False,
|
|
1067
|
+
generate_changelog: bool = False,
|
|
1068
|
+
changelog_version: str | None = None,
|
|
1069
|
+
changelog_since: str | None = None,
|
|
1070
|
+
changelog_dry_run: bool = False,
|
|
1071
|
+
auto_version: bool = False,
|
|
1072
|
+
version_since: str | None = None,
|
|
1073
|
+
accept_version: bool = False,
|
|
1074
|
+
smart_commit: bool = True,
|
|
1075
|
+
heatmap: bool = False,
|
|
1076
|
+
heatmap_type: str = "error_frequency",
|
|
1077
|
+
heatmap_output: str | None = None,
|
|
1078
|
+
anomaly_detection: bool = False,
|
|
1079
|
+
anomaly_sensitivity: float = 2.0,
|
|
1080
|
+
anomaly_report: str | None = None,
|
|
1081
|
+
predictive_analytics: bool = False,
|
|
1082
|
+
prediction_periods: int = 10,
|
|
1083
|
+
analytics_dashboard: str | None = None,
|
|
1084
|
+
# Advanced features
|
|
1085
|
+
advanced_optimizer: bool = False,
|
|
1086
|
+
advanced_profile: str | None = None,
|
|
1087
|
+
advanced_report: str | None = None,
|
|
1088
|
+
mkdocs_integration: bool = False,
|
|
1089
|
+
mkdocs_serve: bool = False,
|
|
1090
|
+
mkdocs_theme: str = "material",
|
|
1091
|
+
mkdocs_output: str | None = None,
|
|
1092
|
+
contextual_ai: bool = False,
|
|
1093
|
+
ai_recommendations: int = 5,
|
|
1094
|
+
ai_help_query: str | None = None,
|
|
1095
|
+
check_config_updates: bool = False,
|
|
1096
|
+
apply_config_updates: bool = False,
|
|
1097
|
+
diff_config: str | None = None,
|
|
1098
|
+
config_interactive: bool = False,
|
|
1099
|
+
refresh_cache: bool = False,
|
|
1100
|
+
use_acb_workflows: bool = True,
|
|
1101
|
+
use_legacy_orchestrator: bool = False,
|
|
1102
|
+
# New semantic parameters
|
|
1103
|
+
strip_code: bool | None = None,
|
|
1104
|
+
run_tests: bool = False,
|
|
1105
|
+
ai_fix: bool | None = None,
|
|
1106
|
+
dry_run: bool = False,
|
|
1107
|
+
full_release: str | None = None,
|
|
1108
|
+
show_progress: bool | None = None,
|
|
1109
|
+
advanced_monitor: bool | None = None,
|
|
1110
|
+
coverage_report: bool | None = None,
|
|
1111
|
+
clean_releases: bool | None = None,
|
|
1112
|
+
) -> Options:
|
|
1113
|
+
return Options(
|
|
1114
|
+
commit=commit,
|
|
1115
|
+
interactive=interactive,
|
|
1116
|
+
no_config_updates=no_config_updates,
|
|
1117
|
+
update_precommit=update_precommit,
|
|
1118
|
+
verbose=verbose,
|
|
1119
|
+
debug=debug,
|
|
1120
|
+
publish=publish,
|
|
1121
|
+
bump=bump,
|
|
1122
|
+
benchmark=benchmark,
|
|
1123
|
+
test_workers=test_workers,
|
|
1124
|
+
test_timeout=test_timeout,
|
|
1125
|
+
skip_hooks=skip_hooks,
|
|
1126
|
+
fast=fast,
|
|
1127
|
+
comp=comp,
|
|
1128
|
+
fast_iteration=fast_iteration,
|
|
1129
|
+
tool=tool,
|
|
1130
|
+
changed_only=changed_only,
|
|
1131
|
+
all_files=all_files,
|
|
1132
|
+
create_pr=create_pr,
|
|
1133
|
+
async_mode=async_mode,
|
|
1134
|
+
experimental_hooks=experimental_hooks,
|
|
1135
|
+
enable_pyrefly=enable_pyrefly,
|
|
1136
|
+
enable_ty=enable_ty,
|
|
1137
|
+
start_zuban_lsp=start_zuban_lsp,
|
|
1138
|
+
stop_zuban_lsp=stop_zuban_lsp,
|
|
1139
|
+
restart_zuban_lsp=restart_zuban_lsp,
|
|
1140
|
+
no_zuban_lsp=no_zuban_lsp,
|
|
1141
|
+
zuban_lsp_port=zuban_lsp_port,
|
|
1142
|
+
zuban_lsp_mode=zuban_lsp_mode,
|
|
1143
|
+
zuban_lsp_timeout=zuban_lsp_timeout,
|
|
1144
|
+
enable_lsp_hooks=enable_lsp_hooks,
|
|
1145
|
+
no_git_tags=no_git_tags,
|
|
1146
|
+
skip_version_check=skip_version_check,
|
|
1147
|
+
orchestrated=orchestrated,
|
|
1148
|
+
orchestration_strategy=orchestration_strategy,
|
|
1149
|
+
orchestration_progress=orchestration_progress,
|
|
1150
|
+
orchestration_ai_mode=orchestration_ai_mode,
|
|
1151
|
+
dev=dev,
|
|
1152
|
+
dashboard=dashboard,
|
|
1153
|
+
unified_dashboard=unified_dashboard,
|
|
1154
|
+
unified_dashboard_port=unified_dashboard_port,
|
|
1155
|
+
max_iterations=max_iterations,
|
|
1156
|
+
coverage_status=coverage_status,
|
|
1157
|
+
coverage_goal=coverage_goal,
|
|
1158
|
+
no_coverage_ratchet=no_coverage_ratchet,
|
|
1159
|
+
boost_coverage=boost_coverage,
|
|
1160
|
+
disable_global_locks=disable_global_locks,
|
|
1161
|
+
global_lock_timeout=global_lock_timeout,
|
|
1162
|
+
global_lock_cleanup=global_lock_cleanup,
|
|
1163
|
+
global_lock_dir=global_lock_dir,
|
|
1164
|
+
quick=quick,
|
|
1165
|
+
thorough=thorough,
|
|
1166
|
+
clear_cache=clear_cache,
|
|
1167
|
+
cache_stats=cache_stats,
|
|
1168
|
+
generate_docs=generate_docs,
|
|
1169
|
+
docs_format=docs_format,
|
|
1170
|
+
validate_docs=validate_docs,
|
|
1171
|
+
generate_changelog=generate_changelog,
|
|
1172
|
+
changelog_version=changelog_version,
|
|
1173
|
+
changelog_since=changelog_since,
|
|
1174
|
+
changelog_dry_run=changelog_dry_run,
|
|
1175
|
+
auto_version=auto_version,
|
|
1176
|
+
version_since=version_since,
|
|
1177
|
+
accept_version=accept_version,
|
|
1178
|
+
smart_commit=smart_commit,
|
|
1179
|
+
heatmap=heatmap,
|
|
1180
|
+
heatmap_type=heatmap_type,
|
|
1181
|
+
heatmap_output=heatmap_output,
|
|
1182
|
+
anomaly_detection=anomaly_detection,
|
|
1183
|
+
anomaly_sensitivity=anomaly_sensitivity,
|
|
1184
|
+
anomaly_report=anomaly_report,
|
|
1185
|
+
predictive_analytics=predictive_analytics,
|
|
1186
|
+
prediction_periods=prediction_periods,
|
|
1187
|
+
analytics_dashboard=analytics_dashboard,
|
|
1188
|
+
# Advanced features
|
|
1189
|
+
advanced_optimizer=advanced_optimizer,
|
|
1190
|
+
advanced_profile=advanced_profile,
|
|
1191
|
+
advanced_report=advanced_report,
|
|
1192
|
+
mkdocs_integration=mkdocs_integration,
|
|
1193
|
+
mkdocs_serve=mkdocs_serve,
|
|
1194
|
+
mkdocs_theme=mkdocs_theme,
|
|
1195
|
+
mkdocs_output=mkdocs_output,
|
|
1196
|
+
contextual_ai=contextual_ai,
|
|
1197
|
+
ai_recommendations=ai_recommendations,
|
|
1198
|
+
ai_help_query=ai_help_query,
|
|
1199
|
+
check_config_updates=check_config_updates,
|
|
1200
|
+
apply_config_updates=apply_config_updates,
|
|
1201
|
+
diff_config=diff_config,
|
|
1202
|
+
config_interactive=config_interactive,
|
|
1203
|
+
refresh_cache=refresh_cache,
|
|
1204
|
+
use_acb_workflows=use_acb_workflows,
|
|
1205
|
+
use_legacy_orchestrator=use_legacy_orchestrator,
|
|
1206
|
+
# New semantic parameters
|
|
1207
|
+
strip_code=strip_code,
|
|
1208
|
+
run_tests=run_tests,
|
|
1209
|
+
ai_fix=ai_fix,
|
|
1210
|
+
dry_run=dry_run,
|
|
1211
|
+
full_release=full_release,
|
|
1212
|
+
show_progress=show_progress,
|
|
1213
|
+
advanced_monitor=advanced_monitor,
|
|
1214
|
+
coverage_report=coverage_report,
|
|
1215
|
+
clean_releases=clean_releases,
|
|
1216
|
+
)
|