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,499 @@
|
|
|
1
|
+
"""DI container builder for ACB workflow integration.
|
|
2
|
+
|
|
3
|
+
This module provides WorkflowContainerBuilder which handles the complex task of
|
|
4
|
+
registering all WorkflowPipeline dependencies with ACB's DI container in the
|
|
5
|
+
correct initialization order.
|
|
6
|
+
|
|
7
|
+
The builder follows a level-based registration strategy:
|
|
8
|
+
- Level 1: Primitives (Console, Config, Logger)
|
|
9
|
+
- Level 2: Core Services (MemoryOptimizer, Caches, etc.)
|
|
10
|
+
- Level 3: Filesystem & Git Services
|
|
11
|
+
- Level 4: Managers (HookManager, TestManager, etc.)
|
|
12
|
+
- Level 5: Executors (ParallelHookExecutor, AsyncCommandExecutor)
|
|
13
|
+
- Level 6: Coordinators (SessionCoordinator, PhaseCoordinator)
|
|
14
|
+
- Level 7: Pipeline (WorkflowPipeline)
|
|
15
|
+
|
|
16
|
+
Example:
|
|
17
|
+
```python
|
|
18
|
+
from crackerjack.workflows.container_builder import WorkflowContainerBuilder
|
|
19
|
+
|
|
20
|
+
# Build container with all services
|
|
21
|
+
builder = WorkflowContainerBuilder(options)
|
|
22
|
+
builder.build()
|
|
23
|
+
|
|
24
|
+
# Verify all services available
|
|
25
|
+
health = builder.health_check()
|
|
26
|
+
if not health["all_available"]:
|
|
27
|
+
print(f"Missing: {health['missing']}")
|
|
28
|
+
|
|
29
|
+
# Get WorkflowPipeline
|
|
30
|
+
from acb.depends import depends
|
|
31
|
+
|
|
32
|
+
pipeline = depends.get_sync(WorkflowPipeline)
|
|
33
|
+
```
|
|
34
|
+
"""
|
|
35
|
+
|
|
36
|
+
from __future__ import annotations
|
|
37
|
+
|
|
38
|
+
import typing as t
|
|
39
|
+
from pathlib import Path
|
|
40
|
+
|
|
41
|
+
from acb.config import Config
|
|
42
|
+
from acb.console import Console
|
|
43
|
+
from acb.depends import depends
|
|
44
|
+
|
|
45
|
+
if t.TYPE_CHECKING:
|
|
46
|
+
from crackerjack.models.protocols import OptionsProtocol
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
class WorkflowContainerBuilder:
|
|
50
|
+
"""Builds and initializes DI container for ACB workflows.
|
|
51
|
+
|
|
52
|
+
Handles dependency registration in correct order, validates all services
|
|
53
|
+
are available, and provides health checks for debugging.
|
|
54
|
+
|
|
55
|
+
Attributes:
|
|
56
|
+
options: CLI options containing configuration
|
|
57
|
+
_console: Console instance (optional override for testing)
|
|
58
|
+
_root_path: Project root path
|
|
59
|
+
_registered: Set of registered service names for tracking
|
|
60
|
+
"""
|
|
61
|
+
|
|
62
|
+
def __init__(
|
|
63
|
+
self,
|
|
64
|
+
options: OptionsProtocol,
|
|
65
|
+
console: Console | None = None,
|
|
66
|
+
root_path: Path | None = None,
|
|
67
|
+
) -> None:
|
|
68
|
+
"""Initialize builder with options and optional overrides.
|
|
69
|
+
|
|
70
|
+
Args:
|
|
71
|
+
options: CLI options containing configuration
|
|
72
|
+
console: Optional console override (for testing)
|
|
73
|
+
root_path: Optional root path override (for testing)
|
|
74
|
+
"""
|
|
75
|
+
self.options = options
|
|
76
|
+
self._console = console
|
|
77
|
+
self._root_path = root_path or getattr(options, "project_root", Path.cwd())
|
|
78
|
+
self._registered: set[str] = set()
|
|
79
|
+
|
|
80
|
+
def build(self) -> None:
|
|
81
|
+
"""Build container by registering all services in dependency order.
|
|
82
|
+
|
|
83
|
+
This method orchestrates the registration of all services required by
|
|
84
|
+
WorkflowPipeline, ensuring proper initialization order.
|
|
85
|
+
|
|
86
|
+
The registration is split into levels to ensure dependencies are
|
|
87
|
+
available before services that need them.
|
|
88
|
+
|
|
89
|
+
Raises:
|
|
90
|
+
RuntimeError: If service registration fails
|
|
91
|
+
"""
|
|
92
|
+
self._register_level1_primitives()
|
|
93
|
+
self._register_level2_core_services()
|
|
94
|
+
self._register_level3_filesystem_git()
|
|
95
|
+
self._register_level3_5_publishing_services()
|
|
96
|
+
self._register_level4_managers()
|
|
97
|
+
self._register_level5_executors()
|
|
98
|
+
self._register_level6_coordinators()
|
|
99
|
+
self._register_level7_pipeline()
|
|
100
|
+
|
|
101
|
+
def health_check(self) -> dict[str, t.Any]:
|
|
102
|
+
"""Check which services are registered and available.
|
|
103
|
+
|
|
104
|
+
Returns:
|
|
105
|
+
dict with:
|
|
106
|
+
- registered: set of service names that were registered
|
|
107
|
+
- available: dict mapping service names to availability status
|
|
108
|
+
- missing: list of expected but missing services
|
|
109
|
+
- all_available: boolean indicating if all services are available
|
|
110
|
+
"""
|
|
111
|
+
from crackerjack.models import protocols
|
|
112
|
+
from crackerjack.services.monitoring.performance_cache import (
|
|
113
|
+
FileSystemCache,
|
|
114
|
+
GitOperationCache,
|
|
115
|
+
)
|
|
116
|
+
|
|
117
|
+
# All expected protocols/services
|
|
118
|
+
expected = [
|
|
119
|
+
# Level 1: Primitives
|
|
120
|
+
("Console", Console),
|
|
121
|
+
("Config", Config),
|
|
122
|
+
("LoggerProtocol", protocols.LoggerProtocol),
|
|
123
|
+
# Level 2: Core Services
|
|
124
|
+
("MemoryOptimizerProtocol", protocols.MemoryOptimizerProtocol),
|
|
125
|
+
("PerformanceCacheProtocol", protocols.PerformanceCacheProtocol),
|
|
126
|
+
("DebugServiceProtocol", protocols.DebugServiceProtocol),
|
|
127
|
+
("PerformanceMonitorProtocol", protocols.PerformanceMonitorProtocol),
|
|
128
|
+
# Level 3: Filesystem & Git
|
|
129
|
+
("FileSystemInterface", protocols.FileSystemInterface),
|
|
130
|
+
("GitInterface", protocols.GitInterface),
|
|
131
|
+
("GitOperationCache", GitOperationCache),
|
|
132
|
+
("FileSystemCache", FileSystemCache),
|
|
133
|
+
# Add more as we implement them
|
|
134
|
+
]
|
|
135
|
+
|
|
136
|
+
available = {}
|
|
137
|
+
for name, protocol_type in expected:
|
|
138
|
+
try:
|
|
139
|
+
service = depends.get_sync(protocol_type)
|
|
140
|
+
available[name] = service is not None
|
|
141
|
+
except Exception:
|
|
142
|
+
available[name] = False
|
|
143
|
+
|
|
144
|
+
missing = [name for name, avail in available.items() if not avail]
|
|
145
|
+
|
|
146
|
+
return {
|
|
147
|
+
"registered": self._registered,
|
|
148
|
+
"available": available,
|
|
149
|
+
"missing": missing,
|
|
150
|
+
"all_available": len(missing) == 0,
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
def _register_level1_primitives(self) -> None:
|
|
154
|
+
"""Register Level 1 primitives: Console, Config, Logger, Path.
|
|
155
|
+
|
|
156
|
+
These are the foundation services with no dependencies (except Config
|
|
157
|
+
which uses the current directory by default).
|
|
158
|
+
"""
|
|
159
|
+
# Console - Configure width from settings for progress bars
|
|
160
|
+
if not self._console:
|
|
161
|
+
self._console = Console()
|
|
162
|
+
# Set console width from configuration
|
|
163
|
+
from crackerjack.config import get_console_width
|
|
164
|
+
|
|
165
|
+
self._console.width = get_console_width()
|
|
166
|
+
depends.set(Console, self._console)
|
|
167
|
+
self._registered.add("Console")
|
|
168
|
+
|
|
169
|
+
# Path - project root path for dependency injection
|
|
170
|
+
depends.set(Path, self._root_path)
|
|
171
|
+
self._registered.add("Path")
|
|
172
|
+
|
|
173
|
+
# Config - ACB's Config auto-detects root_path from current directory
|
|
174
|
+
config = Config()
|
|
175
|
+
depends.set(Config, config)
|
|
176
|
+
self._registered.add("Config")
|
|
177
|
+
|
|
178
|
+
# Logger
|
|
179
|
+
from crackerjack.models.protocols import LoggerProtocol
|
|
180
|
+
from crackerjack.services.logging import get_logger
|
|
181
|
+
|
|
182
|
+
logger = get_logger(__name__)
|
|
183
|
+
depends.set(LoggerProtocol, logger)
|
|
184
|
+
self._registered.add("LoggerProtocol")
|
|
185
|
+
|
|
186
|
+
def _register_level2_core_services(self) -> None:
|
|
187
|
+
"""Register Level 2 core services: MemoryOptimizer, Caches, etc.
|
|
188
|
+
|
|
189
|
+
These services use @depends.inject and will auto-inject their dependencies
|
|
190
|
+
from the container. We just need to create instances and register them.
|
|
191
|
+
"""
|
|
192
|
+
from crackerjack.models.protocols import (
|
|
193
|
+
DebugServiceProtocol,
|
|
194
|
+
MemoryOptimizerProtocol,
|
|
195
|
+
PerformanceCacheProtocol,
|
|
196
|
+
PerformanceMonitorProtocol,
|
|
197
|
+
)
|
|
198
|
+
|
|
199
|
+
# Memory Optimizer - uses @depends.inject, takes Logger
|
|
200
|
+
from crackerjack.services.memory_optimizer import MemoryOptimizer
|
|
201
|
+
|
|
202
|
+
memory_optimizer = MemoryOptimizer()
|
|
203
|
+
depends.set(MemoryOptimizerProtocol, memory_optimizer)
|
|
204
|
+
self._registered.add("MemoryOptimizerProtocol")
|
|
205
|
+
|
|
206
|
+
# Performance Cache - in monitoring/
|
|
207
|
+
from crackerjack.services.monitoring.performance_cache import PerformanceCache
|
|
208
|
+
|
|
209
|
+
perf_cache = PerformanceCache()
|
|
210
|
+
depends.set(PerformanceCacheProtocol, perf_cache)
|
|
211
|
+
self._registered.add("PerformanceCacheProtocol")
|
|
212
|
+
|
|
213
|
+
# Debug Service - AIAgentDebugger
|
|
214
|
+
from crackerjack.services.debug import AIAgentDebugger
|
|
215
|
+
|
|
216
|
+
debug_service = AIAgentDebugger()
|
|
217
|
+
depends.set(DebugServiceProtocol, debug_service)
|
|
218
|
+
self._registered.add("DebugServiceProtocol")
|
|
219
|
+
|
|
220
|
+
# Performance Monitor - in monitoring/
|
|
221
|
+
from crackerjack.services.monitoring.performance_monitor import (
|
|
222
|
+
PerformanceMonitor,
|
|
223
|
+
)
|
|
224
|
+
|
|
225
|
+
perf_monitor = PerformanceMonitor()
|
|
226
|
+
depends.set(PerformanceMonitorProtocol, perf_monitor)
|
|
227
|
+
self._registered.add("PerformanceMonitorProtocol")
|
|
228
|
+
|
|
229
|
+
# WorkflowEventBus - event-driven workflow coordination (Phase 7.1)
|
|
230
|
+
from crackerjack.events.workflow_bus import WorkflowEventBus
|
|
231
|
+
|
|
232
|
+
event_bus = WorkflowEventBus()
|
|
233
|
+
depends.set(WorkflowEventBus, event_bus)
|
|
234
|
+
self._registered.add("WorkflowEventBus")
|
|
235
|
+
|
|
236
|
+
# EventBusWebSocketBridge - WebSocket streaming for real-time updates (Phase 7.3)
|
|
237
|
+
from crackerjack.mcp.websocket.event_bridge import EventBusWebSocketBridge
|
|
238
|
+
|
|
239
|
+
ws_bridge = EventBusWebSocketBridge()
|
|
240
|
+
depends.set(EventBusWebSocketBridge, ws_bridge)
|
|
241
|
+
self._registered.add("EventBusWebSocketBridge")
|
|
242
|
+
|
|
243
|
+
def _register_level3_filesystem_git(self) -> None:
|
|
244
|
+
"""Register Level 3 filesystem and git services.
|
|
245
|
+
|
|
246
|
+
These depend on Console (Level 1) and caches/logger from previous levels.
|
|
247
|
+
"""
|
|
248
|
+
from crackerjack.models.protocols import (
|
|
249
|
+
FileSystemInterface,
|
|
250
|
+
GitInterface,
|
|
251
|
+
LoggerProtocol,
|
|
252
|
+
PerformanceCacheProtocol,
|
|
253
|
+
)
|
|
254
|
+
from crackerjack.services.filesystem import FileSystemService
|
|
255
|
+
from crackerjack.services.git import GitService
|
|
256
|
+
from crackerjack.services.monitoring.performance_cache import (
|
|
257
|
+
FileSystemCache,
|
|
258
|
+
GitOperationCache,
|
|
259
|
+
)
|
|
260
|
+
|
|
261
|
+
# FileSystemService - static methods, no dependencies
|
|
262
|
+
filesystem = FileSystemService()
|
|
263
|
+
depends.set(FileSystemInterface, filesystem)
|
|
264
|
+
self._registered.add("FileSystemInterface")
|
|
265
|
+
|
|
266
|
+
# GitService - uses @depends.inject with Console
|
|
267
|
+
git_service = GitService(pkg_path=self._root_path)
|
|
268
|
+
depends.set(GitInterface, git_service)
|
|
269
|
+
self._registered.add("GitInterface")
|
|
270
|
+
|
|
271
|
+
# Cache services need PerformanceCache (Level 2) and Logger (Level 1)
|
|
272
|
+
perf_cache = depends.get_sync(PerformanceCacheProtocol)
|
|
273
|
+
logger = depends.get_sync(LoggerProtocol)
|
|
274
|
+
|
|
275
|
+
# GitOperationCache
|
|
276
|
+
git_cache = GitOperationCache(cache=perf_cache, logger=logger)
|
|
277
|
+
depends.set(GitOperationCache, git_cache)
|
|
278
|
+
self._registered.add("GitOperationCache")
|
|
279
|
+
|
|
280
|
+
# FileSystemCache
|
|
281
|
+
filesystem_cache = FileSystemCache(cache=perf_cache, logger=logger)
|
|
282
|
+
depends.set(FileSystemCache, filesystem_cache)
|
|
283
|
+
self._registered.add("FileSystemCache")
|
|
284
|
+
|
|
285
|
+
def _register_level3_5_publishing_services(self) -> None:
|
|
286
|
+
"""Register Level 3.5 publishing services needed by PublishManager.
|
|
287
|
+
|
|
288
|
+
These services must be registered before Level 4 managers can be instantiated.
|
|
289
|
+
"""
|
|
290
|
+
from crackerjack.models.protocols import (
|
|
291
|
+
ChangelogGeneratorProtocol,
|
|
292
|
+
GitServiceProtocol,
|
|
293
|
+
SecurityServiceProtocol,
|
|
294
|
+
VersionAnalyzerProtocol,
|
|
295
|
+
)
|
|
296
|
+
from crackerjack.services.changelog_automation import ChangelogGenerator
|
|
297
|
+
from crackerjack.services.security import SecurityService
|
|
298
|
+
from crackerjack.services.version_analyzer import VersionAnalyzer
|
|
299
|
+
|
|
300
|
+
# SecurityService - no dependencies
|
|
301
|
+
security_service = SecurityService()
|
|
302
|
+
depends.set(SecurityServiceProtocol, security_service)
|
|
303
|
+
self._registered.add("SecurityServiceProtocol")
|
|
304
|
+
|
|
305
|
+
# GitService as GitServiceProtocol - reuse Level 3 instance
|
|
306
|
+
from crackerjack.models.protocols import GitInterface
|
|
307
|
+
|
|
308
|
+
git_service = depends.get_sync(GitInterface)
|
|
309
|
+
depends.set(GitServiceProtocol, git_service)
|
|
310
|
+
self._registered.add("GitServiceProtocol")
|
|
311
|
+
|
|
312
|
+
# ChangelogGenerator - uses @depends.inject (Console, GitServiceProtocol)
|
|
313
|
+
changelog_generator = ChangelogGenerator()
|
|
314
|
+
depends.set(ChangelogGeneratorProtocol, changelog_generator)
|
|
315
|
+
self._registered.add("ChangelogGeneratorProtocol")
|
|
316
|
+
|
|
317
|
+
# VersionAnalyzer - uses @depends.inject (Console, GitService)
|
|
318
|
+
# Note: git_service parameter doesn't use Inject[] type hint, so we pass it manually
|
|
319
|
+
# VersionAnalyzer internally creates ChangelogGenerator()
|
|
320
|
+
version_analyzer = VersionAnalyzer(git_service=git_service)
|
|
321
|
+
depends.set(VersionAnalyzerProtocol, version_analyzer)
|
|
322
|
+
self._registered.add("VersionAnalyzerProtocol")
|
|
323
|
+
|
|
324
|
+
# RegexPatternsProtocol - service wrapper for module functions
|
|
325
|
+
from crackerjack.models.protocols import RegexPatternsProtocol
|
|
326
|
+
from crackerjack.services.regex_patterns import RegexPatternsService
|
|
327
|
+
|
|
328
|
+
regex_patterns_service = RegexPatternsService()
|
|
329
|
+
depends.set(RegexPatternsProtocol, regex_patterns_service)
|
|
330
|
+
self._registered.add("RegexPatternsProtocol")
|
|
331
|
+
|
|
332
|
+
def _register_level4_managers(self) -> None:
|
|
333
|
+
"""Register Level 4 managers: HookManager, TestManager, etc.
|
|
334
|
+
|
|
335
|
+
These depend on Level 1-3.5 services.
|
|
336
|
+
"""
|
|
337
|
+
from crackerjack.managers.hook_manager import HookManagerImpl
|
|
338
|
+
from crackerjack.models.protocols import HookManager
|
|
339
|
+
|
|
340
|
+
# HookManager - simplest, just needs pkg_path + options
|
|
341
|
+
# Retrieves Console internally via depends.get_sync
|
|
342
|
+
hook_manager = HookManagerImpl(
|
|
343
|
+
pkg_path=self._root_path,
|
|
344
|
+
verbose=getattr(self.options, "verbose", False),
|
|
345
|
+
quiet=getattr(self.options, "quiet", False),
|
|
346
|
+
enable_lsp_optimization=getattr(
|
|
347
|
+
self.options, "enable_lsp_optimization", False
|
|
348
|
+
),
|
|
349
|
+
enable_tool_proxy=getattr(self.options, "enable_tool_proxy", True),
|
|
350
|
+
)
|
|
351
|
+
depends.set(HookManager, hook_manager)
|
|
352
|
+
self._registered.add("HookManager")
|
|
353
|
+
|
|
354
|
+
# Level 4.5: Register TestManager dependencies
|
|
355
|
+
self._register_level4_5_test_manager_dependencies()
|
|
356
|
+
|
|
357
|
+
# TestCommandBuilder - needed by TestManager
|
|
358
|
+
from crackerjack.managers.test_command_builder import TestCommandBuilder
|
|
359
|
+
|
|
360
|
+
test_command_builder = TestCommandBuilder()
|
|
361
|
+
depends.set(TestCommandBuilder, test_command_builder)
|
|
362
|
+
self._registered.add("TestCommandBuilder")
|
|
363
|
+
|
|
364
|
+
# TestManager - uses @depends.inject (all Level 4.5 dependencies registered)
|
|
365
|
+
from crackerjack.managers.test_manager import TestManager
|
|
366
|
+
from crackerjack.models.protocols import TestManagerProtocol
|
|
367
|
+
|
|
368
|
+
test_manager = TestManager()
|
|
369
|
+
depends.set(TestManagerProtocol, test_manager)
|
|
370
|
+
self._registered.add("TestManagerProtocol")
|
|
371
|
+
|
|
372
|
+
# PublishManager - uses @depends.inject (all Level 3.5 dependencies registered)
|
|
373
|
+
from crackerjack.managers.publish_manager import PublishManagerImpl
|
|
374
|
+
from crackerjack.models.protocols import PublishManager
|
|
375
|
+
|
|
376
|
+
# Instantiate with NO parameters to trigger full DI resolution
|
|
377
|
+
# The @depends.inject decorator will inject all dependencies including console, pkg_path
|
|
378
|
+
publish_manager = PublishManagerImpl()
|
|
379
|
+
depends.set(PublishManager, publish_manager)
|
|
380
|
+
self._registered.add("PublishManager")
|
|
381
|
+
|
|
382
|
+
def _register_level4_5_test_manager_dependencies(self) -> None:
|
|
383
|
+
"""Register Level 4.5: TestManager dependencies.
|
|
384
|
+
|
|
385
|
+
These services must be registered before TestManager can be instantiated.
|
|
386
|
+
"""
|
|
387
|
+
from crackerjack.models.protocols import (
|
|
388
|
+
CoverageBadgeServiceProtocol,
|
|
389
|
+
CoverageRatchetProtocol,
|
|
390
|
+
)
|
|
391
|
+
from crackerjack.services.coverage_badge_service import CoverageBadgeService
|
|
392
|
+
from crackerjack.services.coverage_ratchet import CoverageRatchetService
|
|
393
|
+
from crackerjack.services.lsp_client import LSPClient
|
|
394
|
+
|
|
395
|
+
# CoverageRatchetService - uses @depends.inject (pkg_path, Console)
|
|
396
|
+
coverage_ratchet = CoverageRatchetService(pkg_path=self._root_path)
|
|
397
|
+
depends.set(CoverageRatchetProtocol, coverage_ratchet)
|
|
398
|
+
self._registered.add("CoverageRatchetProtocol")
|
|
399
|
+
|
|
400
|
+
# CoverageBadgeService - uses @depends.inject (Console, project_root)
|
|
401
|
+
coverage_badge = CoverageBadgeService(project_root=self._root_path)
|
|
402
|
+
depends.set(CoverageBadgeServiceProtocol, coverage_badge)
|
|
403
|
+
self._registered.add("CoverageBadgeServiceProtocol")
|
|
404
|
+
|
|
405
|
+
# LSPClient - uses @depends.inject (Console only)
|
|
406
|
+
lsp_client = LSPClient()
|
|
407
|
+
depends.set(LSPClient, lsp_client)
|
|
408
|
+
self._registered.add("LSPClient")
|
|
409
|
+
|
|
410
|
+
def _register_level5_executors(self) -> None:
|
|
411
|
+
"""Register Level 5 executors: ParallelHookExecutor, AsyncCommandExecutor.
|
|
412
|
+
|
|
413
|
+
These depend on Logger (Level 1) and PerformanceCacheProtocol (Level 2).
|
|
414
|
+
"""
|
|
415
|
+
from crackerjack.services.parallel_executor import (
|
|
416
|
+
AsyncCommandExecutor,
|
|
417
|
+
ExecutionStrategy,
|
|
418
|
+
ParallelHookExecutor,
|
|
419
|
+
)
|
|
420
|
+
|
|
421
|
+
# ParallelHookExecutor - uses @depends.inject (Logger, PerformanceCache)
|
|
422
|
+
parallel_executor = ParallelHookExecutor(
|
|
423
|
+
max_workers=3,
|
|
424
|
+
timeout_seconds=300,
|
|
425
|
+
strategy=ExecutionStrategy.PARALLEL_SAFE,
|
|
426
|
+
)
|
|
427
|
+
depends.set(ParallelHookExecutor, parallel_executor)
|
|
428
|
+
self._registered.add("ParallelHookExecutor")
|
|
429
|
+
|
|
430
|
+
# AsyncCommandExecutor - uses @depends.inject (Logger, PerformanceCache)
|
|
431
|
+
async_executor = AsyncCommandExecutor(max_workers=4, cache_results=True)
|
|
432
|
+
depends.set(AsyncCommandExecutor, async_executor)
|
|
433
|
+
self._registered.add("AsyncCommandExecutor")
|
|
434
|
+
|
|
435
|
+
def _register_level6_coordinators(self) -> None:
|
|
436
|
+
"""Register Level 6 coordinators: SessionCoordinator, PhaseCoordinator.
|
|
437
|
+
|
|
438
|
+
These depend on Level 1-5 services.
|
|
439
|
+
"""
|
|
440
|
+
from crackerjack.core.phase_coordinator import PhaseCoordinator
|
|
441
|
+
from crackerjack.core.session_coordinator import SessionCoordinator
|
|
442
|
+
from crackerjack.models.protocols import ConfigMergeServiceProtocol
|
|
443
|
+
from crackerjack.services.config_merge import ConfigMergeService
|
|
444
|
+
|
|
445
|
+
# ConfigMergeService - needed by PhaseCoordinator
|
|
446
|
+
# Uses @depends.inject (Console, FileSystemInterface, GitInterface, Logger)
|
|
447
|
+
config_merge_service = ConfigMergeService()
|
|
448
|
+
depends.set(ConfigMergeServiceProtocol, config_merge_service)
|
|
449
|
+
self._registered.add("ConfigMergeServiceProtocol")
|
|
450
|
+
|
|
451
|
+
# SessionCoordinator - uses @depends.inject (Console, pkg_path)
|
|
452
|
+
session_coordinator = SessionCoordinator(
|
|
453
|
+
pkg_path=self._root_path, web_job_id=None
|
|
454
|
+
)
|
|
455
|
+
depends.set(SessionCoordinator, session_coordinator)
|
|
456
|
+
self._registered.add("SessionCoordinator")
|
|
457
|
+
|
|
458
|
+
# PhaseCoordinator - uses @depends.inject (all Level 1-5 services)
|
|
459
|
+
# Depends on SessionCoordinator (registered above)
|
|
460
|
+
phase_coordinator = PhaseCoordinator(pkg_path=self._root_path)
|
|
461
|
+
depends.set(PhaseCoordinator, phase_coordinator)
|
|
462
|
+
self._registered.add("PhaseCoordinator")
|
|
463
|
+
|
|
464
|
+
def _register_level7_pipeline(self) -> None:
|
|
465
|
+
"""Register Level 7 pipeline: WorkflowPhaseExecutor and WorkflowPipeline.
|
|
466
|
+
|
|
467
|
+
This is the top-level service that depends on all previous levels.
|
|
468
|
+
"""
|
|
469
|
+
from crackerjack.core.workflow.workflow_phase_executor import (
|
|
470
|
+
WorkflowPhaseExecutor,
|
|
471
|
+
)
|
|
472
|
+
from crackerjack.core.workflow_orchestrator import WorkflowPipeline
|
|
473
|
+
|
|
474
|
+
# Since WorkflowPhaseExecutor has @depends.inject on its __init__ method,
|
|
475
|
+
# Bevy should automatically handle creating instances when WorkflowPipeline
|
|
476
|
+
# requests it via dependency injection. But we still need to make sure
|
|
477
|
+
# Bevy recognizes it as a class it can instantiate using its @depends.inject
|
|
478
|
+
# decorated constructor.
|
|
479
|
+
# For this to work, all of WorkflowPhaseExecutor's dependencies must be in the container:
|
|
480
|
+
# - Console (Level 1) ✓
|
|
481
|
+
# - LoggerProtocol (Level 1) ✓
|
|
482
|
+
# - Path (Level 1) ✓
|
|
483
|
+
# - DebugServiceProtocol (Level 2) ✓
|
|
484
|
+
# - QualityIntelligenceProtocol (Level 2 or 4.5) ✓
|
|
485
|
+
# If all dependencies are available, Bevy's @depends.inject should work automatically.
|
|
486
|
+
# But let's explicitly signal that this type can be handled by Bevy's injection system.
|
|
487
|
+
|
|
488
|
+
# Register the type with Bevy so it knows it can create instances when requested
|
|
489
|
+
# The Bevy system should handle the @depends.inject automatically when this type is requested
|
|
490
|
+
depends.set(WorkflowPhaseExecutor, WorkflowPhaseExecutor)
|
|
491
|
+
self._registered.add("WorkflowPhaseExecutor")
|
|
492
|
+
|
|
493
|
+
# WorkflowPipeline - uses @depends.inject (all Level 1-6 services + WorkflowPhaseExecutor)
|
|
494
|
+
# Auto-wires: Console, Config, PerformanceMonitor, MemoryOptimizer,
|
|
495
|
+
# PerformanceCache, Debugger, Logger, SessionCoordinator, PhaseCoordinator, WorkflowPhaseExecutor
|
|
496
|
+
# Optional: QualityIntelligence, PerformanceBenchmarks
|
|
497
|
+
workflow_pipeline = WorkflowPipeline()
|
|
498
|
+
depends.set(WorkflowPipeline, workflow_pipeline)
|
|
499
|
+
self._registered.add("WorkflowPipeline")
|