crackerjack 0.37.9__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 +30 -1
- crackerjack/__main__.py +342 -1263
- crackerjack/adapters/README.md +18 -0
- crackerjack/adapters/__init__.py +27 -5
- 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/{rust_tool_manager.py → lsp/_manager.py} +3 -3
- crackerjack/adapters/{skylos_adapter.py → lsp/skylos.py} +59 -7
- crackerjack/adapters/{zuban_adapter.py → lsp/zuban.py} +3 -6
- 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 +40 -12
- crackerjack/agents/base.py +1 -0
- crackerjack/agents/claude_code_bridge.py +641 -0
- crackerjack/agents/coordinator.py +49 -53
- crackerjack/agents/dry_agent.py +187 -3
- 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 +6 -8
- 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/performance_agent.py +121 -1152
- crackerjack/agents/refactoring_agent.py +156 -655
- crackerjack/agents/semantic_agent.py +479 -0
- crackerjack/agents/semantic_helpers.py +356 -0
- crackerjack/agents/test_creation_agent.py +19 -1605
- crackerjack/api.py +5 -7
- crackerjack/cli/README.md +394 -0
- crackerjack/cli/__init__.py +1 -1
- crackerjack/cli/cache_handlers.py +23 -18
- crackerjack/cli/cache_handlers_enhanced.py +1 -4
- crackerjack/cli/facade.py +70 -8
- 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 +249 -49
- crackerjack/cli/interactive.py +8 -5
- crackerjack/cli/options.py +203 -110
- crackerjack/cli/semantic_handlers.py +292 -0
- crackerjack/cli/version.py +19 -0
- crackerjack/code_cleaner.py +60 -24
- crackerjack/config/README.md +472 -0
- crackerjack/config/__init__.py +256 -0
- crackerjack/config/global_lock_config.py +191 -54
- crackerjack/config/hooks.py +188 -16
- 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/async_workflow_orchestrator.py +79 -53
- crackerjack/core/autofix_coordinator.py +22 -9
- crackerjack/core/container.py +10 -9
- crackerjack/core/enhanced_container.py +9 -9
- crackerjack/core/performance.py +1 -1
- crackerjack/core/performance_monitor.py +5 -3
- crackerjack/core/phase_coordinator.py +1018 -634
- crackerjack/core/proactive_workflow.py +3 -3
- crackerjack/core/retry.py +275 -0
- crackerjack/core/service_watchdog.py +167 -23
- crackerjack/core/session_coordinator.py +187 -382
- crackerjack/core/timeout_manager.py +161 -44
- 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 +1247 -953
- 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/README.md +11 -0
- crackerjack/docs/generated/api/CLI_REFERENCE.md +1 -1
- crackerjack/documentation/README.md +11 -0
- crackerjack/documentation/ai_templates.py +1 -1
- crackerjack/documentation/dual_output_generator.py +11 -9
- crackerjack/documentation/reference_generator.py +104 -59
- crackerjack/dynamic_config.py +52 -61
- crackerjack/errors.py +1 -1
- 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 +2 -0
- crackerjack/executors/async_hook_executor.py +539 -77
- crackerjack/executors/cached_hook_executor.py +3 -3
- crackerjack/executors/hook_executor.py +967 -102
- crackerjack/executors/hook_lock_manager.py +31 -22
- crackerjack/executors/individual_hook_executor.py +66 -32
- crackerjack/executors/lsp_aware_hook_executor.py +136 -57
- crackerjack/executors/progress_hook_executor.py +282 -0
- crackerjack/executors/tool_proxy.py +23 -7
- crackerjack/hooks/README.md +485 -0
- crackerjack/hooks/lsp_hook.py +8 -9
- crackerjack/intelligence/README.md +557 -0
- crackerjack/interactive.py +37 -10
- crackerjack/managers/README.md +369 -0
- crackerjack/managers/async_hook_manager.py +41 -57
- crackerjack/managers/hook_manager.py +449 -79
- crackerjack/managers/publish_manager.py +81 -36
- crackerjack/managers/test_command_builder.py +290 -12
- crackerjack/managers/test_executor.py +93 -8
- crackerjack/managers/test_manager.py +1082 -75
- crackerjack/managers/test_progress.py +118 -26
- crackerjack/mcp/README.md +374 -0
- crackerjack/mcp/cache.py +25 -2
- crackerjack/mcp/client_runner.py +35 -18
- crackerjack/mcp/context.py +9 -9
- crackerjack/mcp/dashboard.py +24 -8
- crackerjack/mcp/enhanced_progress_monitor.py +34 -23
- crackerjack/mcp/file_monitor.py +27 -6
- crackerjack/mcp/progress_components.py +45 -34
- crackerjack/mcp/progress_monitor.py +6 -9
- crackerjack/mcp/rate_limiter.py +11 -7
- crackerjack/mcp/server.py +2 -0
- crackerjack/mcp/server_core.py +187 -55
- crackerjack/mcp/service_watchdog.py +12 -9
- crackerjack/mcp/task_manager.py +2 -2
- crackerjack/mcp/tools/README.md +27 -0
- crackerjack/mcp/tools/__init__.py +2 -0
- crackerjack/mcp/tools/core_tools.py +75 -52
- crackerjack/mcp/tools/execution_tools.py +87 -31
- crackerjack/mcp/tools/intelligence_tools.py +2 -2
- crackerjack/mcp/tools/proactive_tools.py +1 -1
- crackerjack/mcp/tools/semantic_tools.py +584 -0
- crackerjack/mcp/tools/utility_tools.py +180 -132
- crackerjack/mcp/tools/workflow_executor.py +87 -46
- crackerjack/mcp/websocket/README.md +31 -0
- crackerjack/mcp/websocket/app.py +11 -1
- crackerjack/mcp/websocket/event_bridge.py +188 -0
- crackerjack/mcp/websocket/jobs.py +27 -4
- 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 +16 -2930
- crackerjack/mcp/websocket/server.py +1 -3
- crackerjack/mcp/websocket/websocket_handler.py +107 -6
- crackerjack/models/README.md +308 -0
- crackerjack/models/__init__.py +10 -1
- crackerjack/models/config.py +639 -22
- crackerjack/models/config_adapter.py +6 -6
- crackerjack/models/protocols.py +1167 -23
- crackerjack/models/pydantic_models.py +320 -0
- crackerjack/models/qa_config.py +145 -0
- crackerjack/models/qa_results.py +134 -0
- crackerjack/models/results.py +35 -0
- crackerjack/models/semantic_models.py +258 -0
- crackerjack/models/task.py +19 -3
- crackerjack/models/test_models.py +60 -0
- crackerjack/monitoring/README.md +11 -0
- crackerjack/monitoring/ai_agent_watchdog.py +5 -4
- crackerjack/monitoring/metrics_collector.py +4 -3
- crackerjack/monitoring/regression_prevention.py +4 -3
- crackerjack/monitoring/websocket_server.py +4 -241
- crackerjack/orchestration/README.md +340 -0
- crackerjack/orchestration/__init__.py +43 -0
- crackerjack/orchestration/advanced_orchestrator.py +20 -67
- 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 +13 -6
- crackerjack/orchestration/execution_strategies.py +6 -6
- 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 +1 -1
- crackerjack/plugins/README.md +11 -0
- crackerjack/plugins/hooks.py +3 -2
- crackerjack/plugins/loader.py +3 -3
- crackerjack/plugins/managers.py +1 -1
- crackerjack/py313.py +191 -0
- crackerjack/security/README.md +11 -0
- crackerjack/services/README.md +374 -0
- crackerjack/services/__init__.py +8 -21
- crackerjack/services/ai/README.md +295 -0
- crackerjack/services/ai/__init__.py +7 -0
- crackerjack/services/ai/advanced_optimizer.py +878 -0
- crackerjack/services/{contextual_ai_assistant.py → ai/contextual_ai_assistant.py} +5 -3
- 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/api_extractor.py +5 -3
- crackerjack/services/bounded_status_operations.py +45 -5
- crackerjack/services/cache.py +249 -318
- crackerjack/services/changelog_automation.py +7 -3
- crackerjack/services/command_execution_service.py +305 -0
- crackerjack/services/config_integrity.py +83 -39
- crackerjack/services/config_merge.py +9 -6
- crackerjack/services/config_service.py +198 -0
- crackerjack/services/config_template.py +13 -26
- crackerjack/services/coverage_badge_service.py +6 -4
- crackerjack/services/coverage_ratchet.py +53 -27
- crackerjack/services/debug.py +18 -7
- crackerjack/services/dependency_analyzer.py +4 -4
- crackerjack/services/dependency_monitor.py +13 -13
- crackerjack/services/documentation_generator.py +4 -2
- crackerjack/services/documentation_service.py +62 -33
- crackerjack/services/enhanced_filesystem.py +81 -27
- crackerjack/services/enterprise_optimizer.py +1 -1
- crackerjack/services/error_pattern_analyzer.py +10 -10
- crackerjack/services/file_filter.py +221 -0
- crackerjack/services/file_hasher.py +5 -7
- crackerjack/services/file_io_service.py +361 -0
- crackerjack/services/file_modifier.py +615 -0
- crackerjack/services/filesystem.py +80 -109
- crackerjack/services/git.py +99 -5
- crackerjack/services/health_metrics.py +4 -6
- crackerjack/services/heatmap_generator.py +12 -3
- crackerjack/services/incremental_executor.py +380 -0
- crackerjack/services/initialization.py +101 -49
- crackerjack/services/log_manager.py +2 -2
- crackerjack/services/logging.py +120 -68
- crackerjack/services/lsp_client.py +12 -12
- crackerjack/services/memory_optimizer.py +27 -22
- 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/{performance_benchmarks.py → monitoring/performance_benchmarks.py} +100 -14
- crackerjack/services/{performance_cache.py → monitoring/performance_cache.py} +21 -15
- crackerjack/services/{performance_monitor.py → monitoring/performance_monitor.py} +10 -6
- crackerjack/services/parallel_executor.py +166 -55
- 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 +21 -8
- 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_baseline.py → quality/quality_baseline.py} +163 -2
- crackerjack/services/{quality_baseline_enhanced.py → quality/quality_baseline_enhanced.py} +4 -1
- crackerjack/services/{quality_intelligence.py → quality/quality_intelligence.py} +180 -16
- crackerjack/services/regex_patterns.py +58 -2987
- crackerjack/services/regex_utils.py +55 -29
- crackerjack/services/secure_status_formatter.py +42 -15
- crackerjack/services/secure_subprocess.py +35 -2
- crackerjack/services/security.py +16 -8
- crackerjack/services/server_manager.py +40 -51
- crackerjack/services/smart_scheduling.py +46 -6
- crackerjack/services/status_authentication.py +3 -3
- crackerjack/services/thread_safe_status_collector.py +1 -0
- crackerjack/services/tool_filter.py +368 -0
- crackerjack/services/tool_version_service.py +9 -5
- crackerjack/services/unified_config.py +43 -351
- crackerjack/services/vector_store.py +689 -0
- crackerjack/services/version_analyzer.py +6 -4
- crackerjack/services/version_checker.py +14 -8
- crackerjack/services/zuban_lsp_service.py +5 -4
- crackerjack/slash_commands/README.md +11 -0
- crackerjack/slash_commands/init.md +2 -12
- crackerjack/slash_commands/run.md +84 -50
- 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_regex_patterns.py +7 -3
- crackerjack/ui/README.md +11 -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.37.9.dist-info → crackerjack-0.45.2.dist-info}/METADATA +678 -98
- crackerjack-0.45.2.dist-info/RECORD +478 -0
- {crackerjack-0.37.9.dist-info → crackerjack-0.45.2.dist-info}/WHEEL +1 -1
- crackerjack/managers/test_manager_backup.py +0 -1075
- crackerjack/mcp/tools/execution_tools_backup.py +0 -1011
- crackerjack/mixins/__init__.py +0 -3
- crackerjack/mixins/error_handling.py +0 -145
- crackerjack/services/config.py +0 -358
- crackerjack/ui/server_panels.py +0 -125
- crackerjack-0.37.9.dist-info/RECORD +0 -231
- /crackerjack/adapters/{rust_tool_adapter.py → lsp/_base.py} +0 -0
- /crackerjack/adapters/{lsp_client.py → lsp/_client.py} +0 -0
- {crackerjack-0.37.9.dist-info → crackerjack-0.45.2.dist-info}/entry_points.txt +0 -0
- {crackerjack-0.37.9.dist-info → crackerjack-0.45.2.dist-info}/licenses/LICENSE +0 -0
crackerjack/mcp/server_core.py
CHANGED
|
@@ -1,12 +1,17 @@
|
|
|
1
1
|
import subprocess
|
|
2
2
|
import time
|
|
3
3
|
import typing as t
|
|
4
|
+
from contextlib import suppress
|
|
4
5
|
from pathlib import Path
|
|
5
6
|
from typing import Final
|
|
7
|
+
from uuid import UUID, uuid4
|
|
6
8
|
|
|
7
|
-
from
|
|
9
|
+
from acb import console as acb_console
|
|
10
|
+
from acb.depends import depends
|
|
11
|
+
from mcp_common.ui import ServerPanels
|
|
8
12
|
|
|
9
|
-
|
|
13
|
+
# Get the actual Console instance
|
|
14
|
+
console = acb_console.console
|
|
10
15
|
|
|
11
16
|
try:
|
|
12
17
|
import tomli
|
|
@@ -21,8 +26,20 @@ except ImportError:
|
|
|
21
26
|
_mcp_available = False
|
|
22
27
|
FastMCP = None # type: ignore[misc,assignment,no-redef]
|
|
23
28
|
|
|
29
|
+
# Import FastMCP rate limiting middleware (Phase 3 Security Hardening)
|
|
30
|
+
try:
|
|
31
|
+
from fastmcp.server.middleware.rate_limiting import RateLimitingMiddleware
|
|
32
|
+
|
|
33
|
+
RATE_LIMITING_AVAILABLE = True
|
|
34
|
+
except ImportError:
|
|
35
|
+
RATE_LIMITING_AVAILABLE = False
|
|
36
|
+
|
|
24
37
|
MCP_AVAILABLE: Final[bool] = _mcp_available
|
|
25
38
|
|
|
39
|
+
# Phase 9.1: ACB Integration - Module registration for dependency injection
|
|
40
|
+
MODULE_ID: Final[UUID] = uuid4()
|
|
41
|
+
MODULE_STATUS: Final[str] = "stable"
|
|
42
|
+
|
|
26
43
|
from .context import (
|
|
27
44
|
MCPServerConfig,
|
|
28
45
|
MCPServerContext,
|
|
@@ -38,10 +55,11 @@ from .tools import (
|
|
|
38
55
|
register_monitoring_tools,
|
|
39
56
|
register_proactive_tools,
|
|
40
57
|
register_progress_tools,
|
|
58
|
+
register_semantic_tools,
|
|
41
59
|
register_utility_tools,
|
|
42
60
|
)
|
|
43
61
|
|
|
44
|
-
console
|
|
62
|
+
# console imported from acb
|
|
45
63
|
|
|
46
64
|
|
|
47
65
|
def _load_mcp_config(project_path: Path) -> dict[str, t.Any]:
|
|
@@ -128,9 +146,22 @@ def create_mcp_server(config: dict[str, t.Any] | None = None) -> t.Any | None:
|
|
|
128
146
|
|
|
129
147
|
mcp_app = FastMCP("crackerjack-mcp-server", streamable_http_path="/mcp")
|
|
130
148
|
|
|
149
|
+
# Add rate limiting middleware (Phase 3 Security Hardening)
|
|
150
|
+
if RATE_LIMITING_AVAILABLE:
|
|
151
|
+
rate_limiter = RateLimitingMiddleware(
|
|
152
|
+
max_requests_per_second=12.0, # Sustainable rate for code quality operations
|
|
153
|
+
burst_capacity=35, # Allow bursts for test/lint operations
|
|
154
|
+
global_limit=True, # Protect the crackerjack server globally
|
|
155
|
+
)
|
|
156
|
+
# Use public API (Phase 3.1 C1 fix: standardize middleware access)
|
|
157
|
+
mcp_app.add_middleware(rate_limiter)
|
|
158
|
+
|
|
131
159
|
from crackerjack.slash_commands import get_slash_command_path
|
|
132
160
|
|
|
133
|
-
@mcp_app.prompt(
|
|
161
|
+
@mcp_app.prompt(
|
|
162
|
+
"run",
|
|
163
|
+
description="Run Crackerjack quality checks with customizable options (hooks, tests, AI fixing)",
|
|
164
|
+
)
|
|
134
165
|
async def get_crackerjack_run_prompt() -> str:
|
|
135
166
|
try:
|
|
136
167
|
command_path = get_slash_command_path("run")
|
|
@@ -139,7 +170,10 @@ def create_mcp_server(config: dict[str, t.Any] | None = None) -> t.Any | None:
|
|
|
139
170
|
msg = f"Failed to read run command: {e}"
|
|
140
171
|
raise ValueError(msg)
|
|
141
172
|
|
|
142
|
-
@mcp_app.prompt(
|
|
173
|
+
@mcp_app.prompt(
|
|
174
|
+
"init",
|
|
175
|
+
description="Initialize Crackerjack in a new project (creates pyproject.toml config, pre-commit hooks)",
|
|
176
|
+
)
|
|
143
177
|
async def get_crackerjack_init_prompt() -> str:
|
|
144
178
|
try:
|
|
145
179
|
command_path = get_slash_command_path("init")
|
|
@@ -148,7 +182,10 @@ def create_mcp_server(config: dict[str, t.Any] | None = None) -> t.Any | None:
|
|
|
148
182
|
msg = f"Failed to read init command: {e}"
|
|
149
183
|
raise ValueError(msg)
|
|
150
184
|
|
|
151
|
-
@mcp_app.prompt(
|
|
185
|
+
@mcp_app.prompt(
|
|
186
|
+
"status",
|
|
187
|
+
description="Get comprehensive Crackerjack status (hooks, coverage, git state, server health)",
|
|
188
|
+
)
|
|
152
189
|
async def get_crackerjack_status_prompt() -> str:
|
|
153
190
|
try:
|
|
154
191
|
command_path = get_slash_command_path("status")
|
|
@@ -163,6 +200,7 @@ def create_mcp_server(config: dict[str, t.Any] | None = None) -> t.Any | None:
|
|
|
163
200
|
register_monitoring_tools(mcp_app)
|
|
164
201
|
register_progress_tools(mcp_app)
|
|
165
202
|
register_proactive_tools(mcp_app)
|
|
203
|
+
register_semantic_tools(mcp_app)
|
|
166
204
|
register_utility_tools(mcp_app)
|
|
167
205
|
|
|
168
206
|
return mcp_app
|
|
@@ -181,7 +219,7 @@ def handle_mcp_server_command(
|
|
|
181
219
|
|
|
182
220
|
try:
|
|
183
221
|
result = subprocess.run(
|
|
184
|
-
["pkill", "-
|
|
222
|
+
["pkill", "-f", "crackerjack-mcp-server"],
|
|
185
223
|
check=False,
|
|
186
224
|
capture_output=True,
|
|
187
225
|
text=True,
|
|
@@ -261,8 +299,6 @@ def _print_server_info(
|
|
|
261
299
|
websocket_port: int | None,
|
|
262
300
|
http_mode: bool,
|
|
263
301
|
) -> None:
|
|
264
|
-
panels = create_server_panels(console)
|
|
265
|
-
|
|
266
302
|
if mcp_config.get("http_enabled", False) or http_mode:
|
|
267
303
|
mode = "HTTP"
|
|
268
304
|
http_endpoint = (
|
|
@@ -271,12 +307,19 @@ def _print_server_info(
|
|
|
271
307
|
else:
|
|
272
308
|
mode = "STDIO"
|
|
273
309
|
http_endpoint = None
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
project_path
|
|
277
|
-
mode
|
|
278
|
-
|
|
279
|
-
|
|
310
|
+
# Use mcp-common ServerPanels info panel
|
|
311
|
+
items: dict[str, str] = {
|
|
312
|
+
"Project": project_path.name,
|
|
313
|
+
"Mode": mode,
|
|
314
|
+
}
|
|
315
|
+
if http_endpoint:
|
|
316
|
+
items["HTTP"] = http_endpoint
|
|
317
|
+
if websocket_port:
|
|
318
|
+
items["WebSocket Port"] = str(websocket_port)
|
|
319
|
+
ServerPanels.info(
|
|
320
|
+
title="Server Configuration",
|
|
321
|
+
message="Starting Crackerjack MCP Server...",
|
|
322
|
+
items=items,
|
|
280
323
|
)
|
|
281
324
|
|
|
282
325
|
|
|
@@ -300,6 +343,73 @@ def _run_mcp_server(
|
|
|
300
343
|
raise
|
|
301
344
|
|
|
302
345
|
|
|
346
|
+
def _initialize_project_and_config(
|
|
347
|
+
project_path_arg: str,
|
|
348
|
+
http_port: int | None,
|
|
349
|
+
http_mode: bool,
|
|
350
|
+
) -> tuple[Path, dict[str, t.Any]]:
|
|
351
|
+
"""Initialize project path and config."""
|
|
352
|
+
project_path = Path(project_path_arg).resolve()
|
|
353
|
+
mcp_config = _load_mcp_config(project_path)
|
|
354
|
+
mcp_config = _merge_config_with_args(mcp_config, http_port, http_mode)
|
|
355
|
+
return project_path, mcp_config
|
|
356
|
+
|
|
357
|
+
|
|
358
|
+
def _create_and_validate_server(mcp_config: dict[str, t.Any]) -> t.Any | None:
|
|
359
|
+
"""Create and validate the MCP server."""
|
|
360
|
+
mcp_app = create_mcp_server(mcp_config)
|
|
361
|
+
if not mcp_app:
|
|
362
|
+
console.print("[red]Failed to create MCP server[/ red]")
|
|
363
|
+
return mcp_app
|
|
364
|
+
|
|
365
|
+
|
|
366
|
+
def _start_websocket_if_needed(websocket_port: int | None) -> None:
|
|
367
|
+
"""Start WebSocket server if needed."""
|
|
368
|
+
if websocket_port:
|
|
369
|
+
import asyncio
|
|
370
|
+
|
|
371
|
+
try:
|
|
372
|
+
asyncio.run(_start_websocket_server())
|
|
373
|
+
console.print(
|
|
374
|
+
f"[green]✅ WebSocket server auto-started on port {websocket_port}[/green]"
|
|
375
|
+
)
|
|
376
|
+
except Exception as e:
|
|
377
|
+
console.print(f"[yellow]⚠️ WebSocket server auto-start failed: {e}[/yellow]")
|
|
378
|
+
|
|
379
|
+
|
|
380
|
+
def _show_server_startup_info(
|
|
381
|
+
project_path: Path,
|
|
382
|
+
mcp_config: dict[str, t.Any],
|
|
383
|
+
websocket_port: int | None,
|
|
384
|
+
http_mode: bool,
|
|
385
|
+
) -> None:
|
|
386
|
+
"""Show server startup information."""
|
|
387
|
+
_print_server_info(project_path, mcp_config, websocket_port, http_mode)
|
|
388
|
+
|
|
389
|
+
# Show final success panel before starting the server
|
|
390
|
+
if mcp_config.get("http_enabled", False) or http_mode:
|
|
391
|
+
http_endpoint = (
|
|
392
|
+
f"http://{mcp_config['http_host']}:{mcp_config['http_port']}/mcp"
|
|
393
|
+
)
|
|
394
|
+
else:
|
|
395
|
+
http_endpoint = None
|
|
396
|
+
|
|
397
|
+
websocket_monitor = f"ws://127.0.0.1:{websocket_port}" if websocket_port else None
|
|
398
|
+
|
|
399
|
+
# Final startup success panel via mcp-common
|
|
400
|
+
if websocket_monitor:
|
|
401
|
+
ServerPanels.startup_success(
|
|
402
|
+
server_name="Crackerjack MCP",
|
|
403
|
+
endpoint=http_endpoint,
|
|
404
|
+
websocket_monitor=websocket_monitor, # type: ignore[arg-type]
|
|
405
|
+
)
|
|
406
|
+
else:
|
|
407
|
+
ServerPanels.startup_success(
|
|
408
|
+
server_name="Crackerjack MCP",
|
|
409
|
+
endpoint=http_endpoint,
|
|
410
|
+
)
|
|
411
|
+
|
|
412
|
+
|
|
303
413
|
def main(
|
|
304
414
|
project_path_arg: str = ".",
|
|
305
415
|
websocket_port: int | None = None,
|
|
@@ -310,53 +420,19 @@ def main(
|
|
|
310
420
|
return
|
|
311
421
|
|
|
312
422
|
try:
|
|
313
|
-
project_path =
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
mcp_config = _merge_config_with_args(mcp_config, http_port, http_mode)
|
|
423
|
+
project_path, mcp_config = _initialize_project_and_config(
|
|
424
|
+
project_path_arg, http_port, http_mode
|
|
425
|
+
)
|
|
317
426
|
|
|
318
427
|
_setup_server_context(project_path, websocket_port)
|
|
319
428
|
|
|
320
|
-
mcp_app =
|
|
429
|
+
mcp_app = _create_and_validate_server(mcp_config)
|
|
321
430
|
if not mcp_app:
|
|
322
|
-
console.print("[red]Failed to create MCP server[/ red]")
|
|
323
431
|
return
|
|
324
432
|
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
# Auto-start WebSocket server if websocket_port is specified
|
|
328
|
-
if websocket_port:
|
|
329
|
-
import asyncio
|
|
330
|
-
|
|
331
|
-
try:
|
|
332
|
-
asyncio.run(_start_websocket_server())
|
|
333
|
-
console.print(
|
|
334
|
-
f"[green]✅ WebSocket server auto-started on port {websocket_port}[/green]"
|
|
335
|
-
)
|
|
336
|
-
except Exception as e:
|
|
337
|
-
console.print(
|
|
338
|
-
f"[yellow]⚠️ WebSocket server auto-start failed: {e}[/yellow]"
|
|
339
|
-
)
|
|
340
|
-
|
|
341
|
-
# Show final success panel before starting the server
|
|
342
|
-
panels = create_server_panels(console)
|
|
343
|
-
|
|
344
|
-
if mcp_config.get("http_enabled", False) or http_mode:
|
|
345
|
-
http_endpoint = (
|
|
346
|
-
f"http://{mcp_config['http_host']}:{mcp_config['http_port']}/mcp"
|
|
347
|
-
)
|
|
348
|
-
else:
|
|
349
|
-
http_endpoint = None
|
|
350
|
-
|
|
351
|
-
websocket_monitor = (
|
|
352
|
-
f"ws://127.0.0.1:{websocket_port}" if websocket_port else None
|
|
353
|
-
)
|
|
433
|
+
_show_server_startup_info(project_path, mcp_config, websocket_port, http_mode)
|
|
354
434
|
|
|
355
|
-
|
|
356
|
-
http_endpoint=http_endpoint,
|
|
357
|
-
websocket_monitor=websocket_monitor,
|
|
358
|
-
process_id=None, # Will be set by the process manager
|
|
359
|
-
)
|
|
435
|
+
_start_websocket_if_needed(websocket_port)
|
|
360
436
|
|
|
361
437
|
_run_mcp_server(mcp_app, mcp_config, http_mode)
|
|
362
438
|
|
|
@@ -392,3 +468,59 @@ if __name__ == "__main__":
|
|
|
392
468
|
http_port = int(sys.argv[port_idx + 1])
|
|
393
469
|
|
|
394
470
|
main(project_path, websocket_port, http_mode, http_port)
|
|
471
|
+
|
|
472
|
+
|
|
473
|
+
# Phase 9.1: ACB Integration - Service wrapper for dependency injection
|
|
474
|
+
class MCPServerService:
|
|
475
|
+
"""Service wrapper for MCP server to enable ACB dependency injection.
|
|
476
|
+
|
|
477
|
+
This class wraps the MCP server creation and management functions,
|
|
478
|
+
providing a clean interface for dependency injection via ACB.
|
|
479
|
+
"""
|
|
480
|
+
|
|
481
|
+
def __init__(self) -> None:
|
|
482
|
+
"""Initialize MCP server service."""
|
|
483
|
+
self.module_id = MODULE_ID
|
|
484
|
+
self.module_status = MODULE_STATUS
|
|
485
|
+
|
|
486
|
+
def create_server(self, config: dict[str, t.Any] | None = None) -> t.Any | None:
|
|
487
|
+
"""Create MCP server instance with optional configuration.
|
|
488
|
+
|
|
489
|
+
Args:
|
|
490
|
+
config: Server configuration dictionary
|
|
491
|
+
|
|
492
|
+
Returns:
|
|
493
|
+
FastMCP server instance or None if MCP unavailable
|
|
494
|
+
"""
|
|
495
|
+
return create_mcp_server(config)
|
|
496
|
+
|
|
497
|
+
def start_server(
|
|
498
|
+
self,
|
|
499
|
+
project_path: str = ".",
|
|
500
|
+
websocket_port: int | None = None,
|
|
501
|
+
http_mode: bool = False,
|
|
502
|
+
http_port: int | None = None,
|
|
503
|
+
) -> None:
|
|
504
|
+
"""Start MCP server with specified configuration.
|
|
505
|
+
|
|
506
|
+
Args:
|
|
507
|
+
project_path: Path to project directory
|
|
508
|
+
websocket_port: Optional WebSocket server port
|
|
509
|
+
http_mode: Enable HTTP mode instead of STDIO
|
|
510
|
+
http_port: Optional HTTP server port
|
|
511
|
+
"""
|
|
512
|
+
main(project_path, websocket_port, http_mode, http_port)
|
|
513
|
+
|
|
514
|
+
@property
|
|
515
|
+
def is_available(self) -> bool:
|
|
516
|
+
"""Check if MCP server functionality is available.
|
|
517
|
+
|
|
518
|
+
Returns:
|
|
519
|
+
True if FastMCP library is installed and available
|
|
520
|
+
"""
|
|
521
|
+
return MCP_AVAILABLE
|
|
522
|
+
|
|
523
|
+
|
|
524
|
+
# Phase 9.1: ACB Integration - Register service with dependency injection system
|
|
525
|
+
with suppress(Exception):
|
|
526
|
+
depends.set(MCPServerService)
|
|
@@ -3,15 +3,14 @@ import socket
|
|
|
3
3
|
import subprocess
|
|
4
4
|
import sys
|
|
5
5
|
import time
|
|
6
|
+
from contextlib import suppress
|
|
6
7
|
from typing import Any
|
|
7
8
|
|
|
8
9
|
import aiohttp
|
|
9
|
-
from
|
|
10
|
+
from acb import console
|
|
11
|
+
from rich.panel import Panel
|
|
10
12
|
from rich.table import Table
|
|
11
13
|
|
|
12
|
-
console = Console()
|
|
13
|
-
|
|
14
|
-
|
|
15
14
|
watchdog_event_queue: asyncio.Queue[dict[str, Any]] | None = None
|
|
16
15
|
|
|
17
16
|
|
|
@@ -34,7 +33,7 @@ class ServiceConfig:
|
|
|
34
33
|
self.max_restarts = max_restarts
|
|
35
34
|
self.restart_window = restart_window
|
|
36
35
|
|
|
37
|
-
self.process: subprocess.Popen[
|
|
36
|
+
self.process: subprocess.Popen[str] | None = None
|
|
38
37
|
self.restart_count = 0
|
|
39
38
|
self.restart_timestamps: list[float] = []
|
|
40
39
|
self.last_health_check = 0.0
|
|
@@ -125,7 +124,7 @@ class ServiceWatchdog:
|
|
|
125
124
|
return False
|
|
126
125
|
|
|
127
126
|
async def _launch_service_process(self, service: ServiceConfig) -> bool:
|
|
128
|
-
service.process = subprocess.Popen(
|
|
127
|
+
service.process = subprocess.Popen[str](
|
|
129
128
|
service.command,
|
|
130
129
|
stdout=subprocess.PIPE,
|
|
131
130
|
stderr=subprocess.PIPE,
|
|
@@ -137,6 +136,8 @@ class ServiceWatchdog:
|
|
|
137
136
|
return await self._check_process_startup_success(service)
|
|
138
137
|
|
|
139
138
|
async def _check_process_startup_success(self, service: ServiceConfig) -> bool:
|
|
139
|
+
if service.process is None:
|
|
140
|
+
return False
|
|
140
141
|
exit_code = service.process.poll()
|
|
141
142
|
if exit_code is not None:
|
|
142
143
|
return await self._handle_process_died(service, exit_code)
|
|
@@ -147,6 +148,8 @@ class ServiceWatchdog:
|
|
|
147
148
|
service: ServiceConfig,
|
|
148
149
|
exit_code: int,
|
|
149
150
|
) -> bool:
|
|
151
|
+
if service.process is None:
|
|
152
|
+
return False
|
|
150
153
|
stdout, stderr = service.process.communicate()
|
|
151
154
|
error_msg = f"Process died (exit: {exit_code})"
|
|
152
155
|
if stderr and stderr.strip():
|
|
@@ -402,7 +405,9 @@ class ServiceWatchdog:
|
|
|
402
405
|
|
|
403
406
|
table.add_row(service.name, status, health, restarts, error)
|
|
404
407
|
|
|
405
|
-
console.print(
|
|
408
|
+
console.print(
|
|
409
|
+
Panel(table, title="Crackerjack Service Watchdog", border_style="cyan")
|
|
410
|
+
)
|
|
406
411
|
console.print("\n[dim]Press Ctrl + C to stop monitoring[/ dim]")
|
|
407
412
|
|
|
408
413
|
def _create_status_table(self) -> Table:
|
|
@@ -441,8 +446,6 @@ class ServiceWatchdog:
|
|
|
441
446
|
message: str,
|
|
442
447
|
) -> None:
|
|
443
448
|
if self.event_queue:
|
|
444
|
-
from contextlib import suppress
|
|
445
|
-
|
|
446
449
|
with suppress(Exception):
|
|
447
450
|
event = {
|
|
448
451
|
"type": event_type,
|
crackerjack/mcp/task_manager.py
CHANGED
|
@@ -5,9 +5,9 @@ import typing as t
|
|
|
5
5
|
from contextlib import asynccontextmanager, suppress
|
|
6
6
|
from dataclasses import dataclass
|
|
7
7
|
|
|
8
|
-
from
|
|
8
|
+
from acb import console
|
|
9
9
|
|
|
10
|
-
console
|
|
10
|
+
# console imported from acb
|
|
11
11
|
logger = logging.getLogger(__name__)
|
|
12
12
|
|
|
13
13
|
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# MCP Tools
|
|
2
|
+
|
|
3
|
+
MCP tool definitions and adapters for the Crackerjack MCP server.
|
|
4
|
+
|
|
5
|
+
## Tool Categories
|
|
6
|
+
|
|
7
|
+
- **`execution_tools.py`** - Execute crackerjack workflows, get job progress
|
|
8
|
+
- **`monitoring_tools.py`** - System health, status reporting, workflow monitoring
|
|
9
|
+
- **`progress_tools.py`** - Real-time progress tracking for test execution
|
|
10
|
+
- **`semantic_tools.py`** - Semantic search, file indexing, embeddings
|
|
11
|
+
- **`intelligence_tools.py`** - AI agent selection, recommendations, performance analysis
|
|
12
|
+
- **`error_analyzer.py`** - Smart error analysis and pattern detection
|
|
13
|
+
- **`proactive_tools.py`** - Proactive monitoring and preventive quality checks
|
|
14
|
+
- **`utility_tools.py`** - Helper utilities and common operations
|
|
15
|
+
- **`workflow_executor.py`** - Workflow orchestration and execution management
|
|
16
|
+
|
|
17
|
+
## Core Tools
|
|
18
|
+
|
|
19
|
+
The MCP server provides these primary capabilities:
|
|
20
|
+
|
|
21
|
+
1. **Workflow Execution** - Run crackerjack quality checks via MCP
|
|
22
|
+
1. **Job Tracking** - Monitor async job progress and status
|
|
23
|
+
1. **Error Analysis** - Intelligent error detection and root cause analysis
|
|
24
|
+
1. **Semantic Search** - Code search with vector embeddings
|
|
25
|
+
1. **Agent Intelligence** - Smart agent selection based on task context
|
|
26
|
+
|
|
27
|
+
See parent `mcp/README.md` for server architecture details.
|
|
@@ -4,6 +4,7 @@ from .intelligence_tool_registry import register_intelligence_tools
|
|
|
4
4
|
from .monitoring_tools import register_monitoring_tools
|
|
5
5
|
from .proactive_tools import register_proactive_tools
|
|
6
6
|
from .progress_tools import register_progress_tools
|
|
7
|
+
from .semantic_tools import register_semantic_tools
|
|
7
8
|
from .utility_tools import register_utility_tools
|
|
8
9
|
|
|
9
10
|
__all__ = [
|
|
@@ -13,5 +14,6 @@ __all__ = [
|
|
|
13
14
|
"register_monitoring_tools",
|
|
14
15
|
"register_progress_tools",
|
|
15
16
|
"register_proactive_tools",
|
|
17
|
+
"register_semantic_tools",
|
|
16
18
|
"register_utility_tools",
|
|
17
19
|
]
|