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
|
@@ -0,0 +1,557 @@
|
|
|
1
|
+
> Crackerjack Docs: [Main](<../../README.md>) | [CLAUDE.md](../../docs/guides/CLAUDE.md) | Intelligence
|
|
2
|
+
|
|
3
|
+
# Intelligence
|
|
4
|
+
|
|
5
|
+
AI-powered agent orchestration, selection, and adaptive learning for intelligent code quality automation.
|
|
6
|
+
|
|
7
|
+
## Overview
|
|
8
|
+
|
|
9
|
+
The intelligence package provides the core AI agent system for crackerjack, including agent registry, orchestration, selection, and adaptive learning. This system coordinates 12 specialized AI agents to automatically fix code quality issues with confidence scoring and pattern learning.
|
|
10
|
+
|
|
11
|
+
## Core Components
|
|
12
|
+
|
|
13
|
+
### Agent Registry (`agent_registry.py`)
|
|
14
|
+
|
|
15
|
+
Central registry for all AI agents with capability tracking:
|
|
16
|
+
|
|
17
|
+
**Features:**
|
|
18
|
+
|
|
19
|
+
- **Agent Registration** - Register agents with metadata and capabilities
|
|
20
|
+
- **Capability Discovery** - Find agents by capability requirements
|
|
21
|
+
- **Source Tracking** - Track agent origin (built-in, plugin, custom)
|
|
22
|
+
- **Metadata Management** - Store agent descriptions, versions, and configuration
|
|
23
|
+
- **Dynamic Loading** - Load agents on-demand from various sources
|
|
24
|
+
|
|
25
|
+
**Agent Metadata:**
|
|
26
|
+
|
|
27
|
+
```python
|
|
28
|
+
@dataclass
|
|
29
|
+
class AgentMetadata:
|
|
30
|
+
name: str # Agent identifier
|
|
31
|
+
description: str # Human-readable description
|
|
32
|
+
version: str # Agent version
|
|
33
|
+
capabilities: list[AgentCapability] # What the agent can do
|
|
34
|
+
confidence_threshold: float # Minimum confidence to execute
|
|
35
|
+
source: AgentSource # Where agent came from
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
**Agent Capabilities:**
|
|
39
|
+
|
|
40
|
+
```python
|
|
41
|
+
class AgentCapability(Enum):
|
|
42
|
+
REFACTORING = "refactoring" # Code restructuring
|
|
43
|
+
PERFORMANCE = "performance" # Performance optimization
|
|
44
|
+
SECURITY = "security" # Security fixes
|
|
45
|
+
DOCUMENTATION = "documentation" # Documentation updates
|
|
46
|
+
TESTING = "testing" # Test creation/fixes
|
|
47
|
+
DRY = "dry" # Code deduplication
|
|
48
|
+
FORMATTING = "formatting" # Code formatting
|
|
49
|
+
IMPORT_OPTIMIZATION = "import_opt" # Import cleanup
|
|
50
|
+
SEMANTIC_ANALYSIS = "semantic" # Semantic understanding
|
|
51
|
+
ARCHITECTURE = "architecture" # Architecture recommendations
|
|
52
|
+
PROACTIVE_PREVENTION = "proactive" # Proactive issue prevention
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
**Agent Sources:**
|
|
56
|
+
|
|
57
|
+
```python
|
|
58
|
+
class AgentSource(Enum):
|
|
59
|
+
BUILTIN = "builtin" # Crackerjack built-in agents
|
|
60
|
+
PLUGIN = "plugin" # Third-party plugins
|
|
61
|
+
CUSTOM = "custom" # User-defined agents
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### Agent Selector (`agent_selector.py`)
|
|
65
|
+
|
|
66
|
+
Intelligent agent selection based on task requirements:
|
|
67
|
+
|
|
68
|
+
**Features:**
|
|
69
|
+
|
|
70
|
+
- **Task Analysis** - Analyzes error context to determine requirements
|
|
71
|
+
- **Capability Matching** - Matches tasks to agent capabilities
|
|
72
|
+
- **Confidence Scoring** - Scores each agent's suitability for task
|
|
73
|
+
- **Multi-Agent Selection** - Can select multiple agents for complex tasks
|
|
74
|
+
- **Fallback Strategy** - Provides fallback agents if primary unavailable
|
|
75
|
+
|
|
76
|
+
**Task Context:**
|
|
77
|
+
|
|
78
|
+
```python
|
|
79
|
+
@dataclass
|
|
80
|
+
class TaskContext:
|
|
81
|
+
error_type: str # Type of error/issue
|
|
82
|
+
file_path: Path # Affected file
|
|
83
|
+
error_message: str # Full error message
|
|
84
|
+
stack_trace: str | None # Stack trace if available
|
|
85
|
+
code_snippet: str | None # Relevant code snippet
|
|
86
|
+
severity: str # Error severity level
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
**Agent Scoring:**
|
|
90
|
+
|
|
91
|
+
```python
|
|
92
|
+
@dataclass
|
|
93
|
+
class AgentScore:
|
|
94
|
+
agent_name: str # Agent identifier
|
|
95
|
+
score: float # Suitability score (0.0-1.0)
|
|
96
|
+
confidence: float # Agent confidence threshold
|
|
97
|
+
reasoning: str # Why this agent was selected
|
|
98
|
+
capabilities_matched: list[str] # Matched capabilities
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
### Agent Orchestrator (`agent_orchestrator.py`)
|
|
102
|
+
|
|
103
|
+
Coordinates agent execution with strategy patterns:
|
|
104
|
+
|
|
105
|
+
**Features:**
|
|
106
|
+
|
|
107
|
+
- **Execution Strategies** - Sequential, parallel, or pipeline execution
|
|
108
|
+
- **Result Aggregation** - Combines results from multiple agents
|
|
109
|
+
- **Error Handling** - Graceful degradation on agent failures
|
|
110
|
+
- **Progress Tracking** - Real-time execution progress
|
|
111
|
+
- **Rollback Support** - Can rollback failed agent changes
|
|
112
|
+
|
|
113
|
+
**Execution Strategies:**
|
|
114
|
+
|
|
115
|
+
```python
|
|
116
|
+
class ExecutionStrategy(Enum):
|
|
117
|
+
SEQUENTIAL = "sequential" # One agent at a time
|
|
118
|
+
PARALLEL = "parallel" # All agents concurrently
|
|
119
|
+
PIPELINE = "pipeline" # Output of one feeds next
|
|
120
|
+
CONDITIONAL = "conditional" # Execute based on conditions
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
**Execution Request:**
|
|
124
|
+
|
|
125
|
+
```python
|
|
126
|
+
@dataclass
|
|
127
|
+
class ExecutionRequest:
|
|
128
|
+
task_context: TaskContext # What to fix
|
|
129
|
+
selected_agents: list[str] # Which agents to use
|
|
130
|
+
strategy: ExecutionStrategy # How to execute
|
|
131
|
+
max_concurrent: int = 3 # Max parallel agents
|
|
132
|
+
timeout: int = 300 # Execution timeout
|
|
133
|
+
rollback_on_failure: bool = True # Rollback if failed
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
**Execution Result:**
|
|
137
|
+
|
|
138
|
+
```python
|
|
139
|
+
@dataclass
|
|
140
|
+
class ExecutionResult:
|
|
141
|
+
success: bool # Overall success
|
|
142
|
+
agents_executed: list[str] # Agents that ran
|
|
143
|
+
changes_made: list[dict] # Code changes applied
|
|
144
|
+
errors: list[str] # Errors encountered
|
|
145
|
+
execution_time: float # Total execution time
|
|
146
|
+
confidence_scores: dict[str, float] # Agent confidence scores
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
### Adaptive Learning (`adaptive_learning.py`)
|
|
150
|
+
|
|
151
|
+
Learns from successful/failed fixes to improve over time:
|
|
152
|
+
|
|
153
|
+
**Features:**
|
|
154
|
+
|
|
155
|
+
- **Pattern Learning** - Learns successful fix patterns
|
|
156
|
+
- **Failure Analysis** - Analyzes why fixes failed
|
|
157
|
+
- **Confidence Adjustment** - Adjusts agent confidence based on history
|
|
158
|
+
- **Pattern Caching** - Caches successful patterns for reuse
|
|
159
|
+
- **Success Rate Tracking** - Tracks per-agent success rates
|
|
160
|
+
|
|
161
|
+
**Learning System:**
|
|
162
|
+
|
|
163
|
+
```python
|
|
164
|
+
class AdaptiveLearningSystem:
|
|
165
|
+
def record_success(
|
|
166
|
+
self, agent_name: str, task_context: TaskContext, fix_applied: str
|
|
167
|
+
) -> None:
|
|
168
|
+
"""Record successful fix for learning."""
|
|
169
|
+
|
|
170
|
+
def record_failure(
|
|
171
|
+
self, agent_name: str, task_context: TaskContext, error: str
|
|
172
|
+
) -> None:
|
|
173
|
+
"""Record failed fix for analysis."""
|
|
174
|
+
|
|
175
|
+
def get_success_rate(self, agent_name: str) -> float:
|
|
176
|
+
"""Get agent success rate."""
|
|
177
|
+
|
|
178
|
+
def recommend_agent(self, task_context: TaskContext) -> tuple[str, float]:
|
|
179
|
+
"""Recommend best agent based on learning."""
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
### Integration (`integration.py`)
|
|
183
|
+
|
|
184
|
+
Integration layer connecting intelligence system to crackerjack:
|
|
185
|
+
|
|
186
|
+
**Features:**
|
|
187
|
+
|
|
188
|
+
- **Workflow Integration** - Integrates agents with ACB workflows
|
|
189
|
+
- **Error Routing** - Routes errors to appropriate agents
|
|
190
|
+
- **Result Processing** - Processes agent results for display
|
|
191
|
+
- **Configuration Management** - Manages agent system configuration
|
|
192
|
+
|
|
193
|
+
## The 12 Specialized Agents
|
|
194
|
+
|
|
195
|
+
Crackerjack's intelligence system coordinates 12 specialized agents (defined in `/home/user/crackerjack/crackerjack/agents/`):
|
|
196
|
+
|
|
197
|
+
### Code Quality Agents
|
|
198
|
+
|
|
199
|
+
1. **RefactoringAgent** (0.9 confidence)
|
|
200
|
+
|
|
201
|
+
- **Capabilities**: REFACTORING
|
|
202
|
+
- **Focus**: Complexity ≤15, dead code removal, method extraction
|
|
203
|
+
- **Triggers**: Cognitive complexity violations, long methods
|
|
204
|
+
|
|
205
|
+
1. **DRYAgent** (0.8 confidence)
|
|
206
|
+
|
|
207
|
+
- **Capabilities**: DRY
|
|
208
|
+
- **Focus**: Code duplication detection and elimination
|
|
209
|
+
- **Triggers**: Duplicate code patterns, repeated logic
|
|
210
|
+
|
|
211
|
+
1. **FormattingAgent** (0.8 confidence)
|
|
212
|
+
|
|
213
|
+
- **Capabilities**: FORMATTING
|
|
214
|
+
- **Focus**: Code style, formatting violations
|
|
215
|
+
- **Triggers**: Ruff format issues, style violations
|
|
216
|
+
|
|
217
|
+
1. **ImportOptimizationAgent**
|
|
218
|
+
|
|
219
|
+
- **Capabilities**: IMPORT_OPTIMIZATION
|
|
220
|
+
- **Focus**: Import cleanup, unused imports, import organization
|
|
221
|
+
- **Triggers**: Unused imports, import violations
|
|
222
|
+
|
|
223
|
+
### Performance & Security Agents
|
|
224
|
+
|
|
225
|
+
5. **PerformanceAgent** (0.85 confidence)
|
|
226
|
+
|
|
227
|
+
- **Capabilities**: PERFORMANCE
|
|
228
|
+
- **Focus**: O(n²) detection, optimization opportunities
|
|
229
|
+
- **Triggers**: Performance anti-patterns, slow code
|
|
230
|
+
|
|
231
|
+
1. **SecurityAgent** (0.8 confidence)
|
|
232
|
+
|
|
233
|
+
- **Capabilities**: SECURITY
|
|
234
|
+
- **Focus**: Hardcoded paths, unsafe operations, injection vulnerabilities
|
|
235
|
+
- **Triggers**: Bandit violations, security warnings
|
|
236
|
+
|
|
237
|
+
### Testing & Documentation Agents
|
|
238
|
+
|
|
239
|
+
7. **TestCreationAgent** (0.8 confidence)
|
|
240
|
+
|
|
241
|
+
- **Capabilities**: TESTING
|
|
242
|
+
- **Focus**: Test failures, fixture creation, test coverage
|
|
243
|
+
- **Triggers**: Test failures, missing tests, low coverage
|
|
244
|
+
|
|
245
|
+
1. **TestSpecialistAgent** (0.8 confidence)
|
|
246
|
+
|
|
247
|
+
- **Capabilities**: TESTING
|
|
248
|
+
- **Focus**: Advanced testing scenarios, complex fixtures, mocking
|
|
249
|
+
- **Triggers**: Complex test failures, async test issues
|
|
250
|
+
|
|
251
|
+
1. **DocumentationAgent** (0.8 confidence)
|
|
252
|
+
|
|
253
|
+
- **Capabilities**: DOCUMENTATION
|
|
254
|
+
- **Focus**: Changelog, README consistency, API documentation
|
|
255
|
+
- **Triggers**: Documentation inconsistencies, missing docs
|
|
256
|
+
|
|
257
|
+
### Advanced Intelligence Agents
|
|
258
|
+
|
|
259
|
+
10. **SemanticAgent** (0.85 confidence)
|
|
260
|
+
|
|
261
|
+
- **Capabilities**: SEMANTIC_ANALYSIS
|
|
262
|
+
- **Focus**: Semantic analysis, code comprehension, intelligent refactoring
|
|
263
|
+
- **Triggers**: Semantic violations, architectural issues
|
|
264
|
+
|
|
265
|
+
01. **ArchitectAgent** (0.85 confidence)
|
|
266
|
+
|
|
267
|
+
- **Capabilities**: ARCHITECTURE
|
|
268
|
+
- **Focus**: Architecture patterns, design recommendations, system optimization
|
|
269
|
+
- **Triggers**: Architectural violations, design issues
|
|
270
|
+
|
|
271
|
+
01. **EnhancedProactiveAgent** (0.9 confidence)
|
|
272
|
+
|
|
273
|
+
- **Capabilities**: PROACTIVE_PREVENTION
|
|
274
|
+
- **Focus**: Proactive prevention, predictive monitoring, preemptive optimization
|
|
275
|
+
- **Triggers**: Quality trends, predicted issues
|
|
276
|
+
|
|
277
|
+
## Usage Examples
|
|
278
|
+
|
|
279
|
+
### Agent Registry
|
|
280
|
+
|
|
281
|
+
```python
|
|
282
|
+
from crackerjack.intelligence import AgentRegistry, AgentCapability, get_agent_registry
|
|
283
|
+
|
|
284
|
+
registry = get_agent_registry()
|
|
285
|
+
|
|
286
|
+
# Find agents by capability
|
|
287
|
+
refactoring_agents = registry.get_agents_by_capability(AgentCapability.REFACTORING)
|
|
288
|
+
|
|
289
|
+
for agent in refactoring_agents:
|
|
290
|
+
print(f"Agent: {agent.name}")
|
|
291
|
+
print(f" Confidence: {agent.confidence_threshold}")
|
|
292
|
+
print(f" Description: {agent.description}")
|
|
293
|
+
|
|
294
|
+
# Get specific agent
|
|
295
|
+
agent = registry.get_agent("refactoring")
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
### Agent Selection
|
|
299
|
+
|
|
300
|
+
```python
|
|
301
|
+
from crackerjack.intelligence import AgentSelector, TaskContext
|
|
302
|
+
from pathlib import Path
|
|
303
|
+
|
|
304
|
+
selector = AgentSelector(registry=registry)
|
|
305
|
+
|
|
306
|
+
# Create task context from error
|
|
307
|
+
task = TaskContext(
|
|
308
|
+
error_type="complexity",
|
|
309
|
+
file_path=Path("src/complex_module.py"),
|
|
310
|
+
error_message="Complexity of 18 exceeds maximum of 15",
|
|
311
|
+
severity="high",
|
|
312
|
+
)
|
|
313
|
+
|
|
314
|
+
# Select best agents for task
|
|
315
|
+
selected = selector.select_agents(task, max_agents=3)
|
|
316
|
+
|
|
317
|
+
for agent_score in selected:
|
|
318
|
+
print(f"Agent: {agent_score.agent_name}")
|
|
319
|
+
print(f" Score: {agent_score.score:.2f}")
|
|
320
|
+
print(f" Reasoning: {agent_score.reasoning}")
|
|
321
|
+
```
|
|
322
|
+
|
|
323
|
+
### Agent Orchestration
|
|
324
|
+
|
|
325
|
+
```python
|
|
326
|
+
from crackerjack.intelligence import (
|
|
327
|
+
AgentOrchestrator,
|
|
328
|
+
ExecutionRequest,
|
|
329
|
+
ExecutionStrategy,
|
|
330
|
+
get_agent_orchestrator,
|
|
331
|
+
)
|
|
332
|
+
|
|
333
|
+
orchestrator = get_agent_orchestrator()
|
|
334
|
+
|
|
335
|
+
# Execute agents with strategy
|
|
336
|
+
request = ExecutionRequest(
|
|
337
|
+
task_context=task,
|
|
338
|
+
selected_agents=["refactoring", "semantic"],
|
|
339
|
+
strategy=ExecutionStrategy.SEQUENTIAL,
|
|
340
|
+
timeout=300,
|
|
341
|
+
rollback_on_failure=True,
|
|
342
|
+
)
|
|
343
|
+
|
|
344
|
+
result = await orchestrator.execute(request)
|
|
345
|
+
|
|
346
|
+
if result.success:
|
|
347
|
+
print(f"✅ Fixed in {result.execution_time:.1f}s")
|
|
348
|
+
print(f"Agents used: {', '.join(result.agents_executed)}")
|
|
349
|
+
print(f"Changes made: {len(result.changes_made)}")
|
|
350
|
+
else:
|
|
351
|
+
print(f"❌ Failed: {', '.join(result.errors)}")
|
|
352
|
+
```
|
|
353
|
+
|
|
354
|
+
### Adaptive Learning
|
|
355
|
+
|
|
356
|
+
```python
|
|
357
|
+
from crackerjack.intelligence import AdaptiveLearningSystem, get_learning_system
|
|
358
|
+
|
|
359
|
+
learning = get_learning_system()
|
|
360
|
+
|
|
361
|
+
# Record successful fix
|
|
362
|
+
learning.record_success(
|
|
363
|
+
agent_name="refactoring",
|
|
364
|
+
task_context=task,
|
|
365
|
+
fix_applied="Extracted method to reduce complexity",
|
|
366
|
+
)
|
|
367
|
+
|
|
368
|
+
# Get success rate
|
|
369
|
+
success_rate = learning.get_success_rate("refactoring")
|
|
370
|
+
print(f"RefactoringAgent success rate: {success_rate:.1%}")
|
|
371
|
+
|
|
372
|
+
# Get recommendation based on learning
|
|
373
|
+
recommended_agent, confidence = learning.recommend_agent(task)
|
|
374
|
+
print(f"Recommended: {recommended_agent} (confidence: {confidence:.2f})")
|
|
375
|
+
```
|
|
376
|
+
|
|
377
|
+
### Full AI-Fixing Workflow
|
|
378
|
+
|
|
379
|
+
```python
|
|
380
|
+
from crackerjack.intelligence import (
|
|
381
|
+
get_agent_registry,
|
|
382
|
+
AgentSelector,
|
|
383
|
+
get_agent_orchestrator,
|
|
384
|
+
get_learning_system,
|
|
385
|
+
ExecutionRequest,
|
|
386
|
+
ExecutionStrategy,
|
|
387
|
+
TaskContext,
|
|
388
|
+
)
|
|
389
|
+
from pathlib import Path
|
|
390
|
+
|
|
391
|
+
|
|
392
|
+
async def ai_fix_error(error_message: str, file_path: Path) -> bool:
|
|
393
|
+
# Setup
|
|
394
|
+
registry = get_agent_registry()
|
|
395
|
+
selector = AgentSelector(registry=registry)
|
|
396
|
+
orchestrator = get_agent_orchestrator()
|
|
397
|
+
learning = get_learning_system()
|
|
398
|
+
|
|
399
|
+
# Create task context
|
|
400
|
+
task = TaskContext(
|
|
401
|
+
error_type="auto_detected",
|
|
402
|
+
file_path=file_path,
|
|
403
|
+
error_message=error_message,
|
|
404
|
+
severity="high",
|
|
405
|
+
)
|
|
406
|
+
|
|
407
|
+
# Select agents
|
|
408
|
+
selected = selector.select_agents(task, max_agents=2)
|
|
409
|
+
agent_names = [score.agent_name for score in selected]
|
|
410
|
+
|
|
411
|
+
# Execute agents
|
|
412
|
+
request = ExecutionRequest(
|
|
413
|
+
task_context=task,
|
|
414
|
+
selected_agents=agent_names,
|
|
415
|
+
strategy=ExecutionStrategy.SEQUENTIAL,
|
|
416
|
+
timeout=300,
|
|
417
|
+
)
|
|
418
|
+
|
|
419
|
+
result = await orchestrator.execute(request)
|
|
420
|
+
|
|
421
|
+
# Record for learning
|
|
422
|
+
if result.success:
|
|
423
|
+
for agent_name in result.agents_executed:
|
|
424
|
+
learning.record_success(
|
|
425
|
+
agent_name=agent_name,
|
|
426
|
+
task_context=task,
|
|
427
|
+
fix_applied=str(result.changes_made),
|
|
428
|
+
)
|
|
429
|
+
else:
|
|
430
|
+
for agent_name in result.agents_executed:
|
|
431
|
+
learning.record_failure(
|
|
432
|
+
agent_name=agent_name, task_context=task, error=str(result.errors)
|
|
433
|
+
)
|
|
434
|
+
|
|
435
|
+
return result.success
|
|
436
|
+
```
|
|
437
|
+
|
|
438
|
+
## Configuration
|
|
439
|
+
|
|
440
|
+
Intelligence system configuration through ACB Settings:
|
|
441
|
+
|
|
442
|
+
```yaml
|
|
443
|
+
# settings/crackerjack.yaml
|
|
444
|
+
|
|
445
|
+
# Agent system
|
|
446
|
+
ai_fix_enabled: true
|
|
447
|
+
ai_debug: false # Debug mode for agent development
|
|
448
|
+
min_agent_confidence: 0.7 # Minimum confidence to execute
|
|
449
|
+
|
|
450
|
+
# Agent selection
|
|
451
|
+
max_agents_per_task: 3
|
|
452
|
+
agent_timeout: 300
|
|
453
|
+
agent_parallel_execution: false
|
|
454
|
+
|
|
455
|
+
# Adaptive learning
|
|
456
|
+
learning_enabled: true
|
|
457
|
+
learning_cache_ttl: 86400 # 24 hours
|
|
458
|
+
success_rate_window: 100 # Last 100 executions
|
|
459
|
+
|
|
460
|
+
# Execution strategy
|
|
461
|
+
default_execution_strategy: "sequential" # sequential, parallel, pipeline
|
|
462
|
+
rollback_on_failure: true
|
|
463
|
+
max_rollback_attempts: 1
|
|
464
|
+
|
|
465
|
+
# Agent-specific configuration
|
|
466
|
+
agent_config:
|
|
467
|
+
refactoring:
|
|
468
|
+
max_complexity: 15
|
|
469
|
+
enable_method_extraction: true
|
|
470
|
+
security:
|
|
471
|
+
check_hardcoded_secrets: true
|
|
472
|
+
check_sql_injection: true
|
|
473
|
+
testing:
|
|
474
|
+
auto_create_fixtures: true
|
|
475
|
+
min_coverage_target: 80
|
|
476
|
+
```
|
|
477
|
+
|
|
478
|
+
## Integration with Workflows
|
|
479
|
+
|
|
480
|
+
Intelligence system integrates with ACB workflows for automated fixing:
|
|
481
|
+
|
|
482
|
+
```python
|
|
483
|
+
from crackerjack.workflows import CrackerjackWorkflowEngine
|
|
484
|
+
from crackerjack.intelligence import get_agent_orchestrator
|
|
485
|
+
|
|
486
|
+
engine = CrackerjackWorkflowEngine()
|
|
487
|
+
orchestrator = get_agent_orchestrator()
|
|
488
|
+
|
|
489
|
+
|
|
490
|
+
# Register AI fixing as workflow action
|
|
491
|
+
@engine.register_action("ai_fix")
|
|
492
|
+
async def ai_fix_action(context):
|
|
493
|
+
errors = context.get("errors", [])
|
|
494
|
+
fixed_count = 0
|
|
495
|
+
|
|
496
|
+
for error in errors:
|
|
497
|
+
task = create_task_from_error(error)
|
|
498
|
+
selected = selector.select_agents(task)
|
|
499
|
+
request = create_execution_request(task, selected)
|
|
500
|
+
|
|
501
|
+
result = await orchestrator.execute(request)
|
|
502
|
+
if result.success:
|
|
503
|
+
fixed_count += 1
|
|
504
|
+
|
|
505
|
+
return {"fixed_count": fixed_count, "total_errors": len(errors)}
|
|
506
|
+
```
|
|
507
|
+
|
|
508
|
+
## Best Practices
|
|
509
|
+
|
|
510
|
+
1. **Set Appropriate Confidence Thresholds** - Don't set too low or agents may make incorrect changes
|
|
511
|
+
1. **Use Learning System** - Enable adaptive learning to improve agent selection over time
|
|
512
|
+
1. **Start with High-Confidence Agents** - Begin with RefactoringAgent (0.9) and EnhancedProactiveAgent (0.9)
|
|
513
|
+
1. **Monitor Success Rates** - Track agent success rates and adjust confidence thresholds
|
|
514
|
+
1. **Sequential for Safety** - Use sequential execution strategy for safety-critical fixes
|
|
515
|
+
1. **Enable Rollback** - Always enable rollback for automatic agent execution
|
|
516
|
+
1. **Batch Similar Issues** - Group similar errors for more efficient agent execution
|
|
517
|
+
1. **Use Semantic Agent** - Leverage SemanticAgent for complex refactoring scenarios
|
|
518
|
+
1. **Debug Mode** - Use `--ai-debug` flag when developing or testing agents
|
|
519
|
+
1. **Review Changes** - Always review agent-generated changes before committing
|
|
520
|
+
|
|
521
|
+
## Performance Considerations
|
|
522
|
+
|
|
523
|
+
### Agent Execution Time
|
|
524
|
+
|
|
525
|
+
```
|
|
526
|
+
Single agent (RefactoringAgent): ~5-15s per fix
|
|
527
|
+
Multiple agents (sequential): ~15-45s per task
|
|
528
|
+
Multiple agents (parallel): ~10-20s per task
|
|
529
|
+
Adaptive learning overhead: ~1-2s per task
|
|
530
|
+
```
|
|
531
|
+
|
|
532
|
+
### Learning System Performance
|
|
533
|
+
|
|
534
|
+
```
|
|
535
|
+
Pattern cache size: ~10-50MB (typical project)
|
|
536
|
+
Learning lookup time: <100ms
|
|
537
|
+
Success rate calculation: <50ms
|
|
538
|
+
Recommendation generation: <200ms
|
|
539
|
+
```
|
|
540
|
+
|
|
541
|
+
## Related
|
|
542
|
+
|
|
543
|
+
- [Agents](<../agents/README.md>) - Individual agent implementations
|
|
544
|
+
- [Workflows](<../workflows/README.md>) - Workflow integration
|
|
545
|
+
- [Services/AI](<../services/ai/README.md>) - AI service layer
|
|
546
|
+
- [CLAUDE.md](../../docs/guides/CLAUDE.md) - AI agent system overview
|
|
547
|
+
|
|
548
|
+
## Future Enhancements
|
|
549
|
+
|
|
550
|
+
- [ ] Agent marketplace for community-contributed agents
|
|
551
|
+
- [ ] Multi-agent collaboration for complex tasks
|
|
552
|
+
- [ ] Real-time agent performance dashboard
|
|
553
|
+
- [ ] Agent A/B testing framework
|
|
554
|
+
- [ ] Transfer learning between projects
|
|
555
|
+
- [ ] Agent ensemble methods for higher accuracy
|
|
556
|
+
- [ ] Custom agent development SDK
|
|
557
|
+
- [ ] Agent explainability improvements
|
crackerjack/interactive.py
CHANGED
|
@@ -5,7 +5,8 @@ from enum import Enum, auto
|
|
|
5
5
|
from functools import partial
|
|
6
6
|
from typing import Protocol
|
|
7
7
|
|
|
8
|
-
from
|
|
8
|
+
from acb.console import Console
|
|
9
|
+
from acb.depends import depends
|
|
9
10
|
from rich.panel import Panel
|
|
10
11
|
from rich.prompt import Confirm
|
|
11
12
|
from rich.table import Table
|
|
@@ -24,7 +25,7 @@ class TaskStatus(Enum):
|
|
|
24
25
|
|
|
25
26
|
|
|
26
27
|
@dataclass
|
|
27
|
-
class
|
|
28
|
+
class InteractiveWorkflowOptions:
|
|
28
29
|
clean: bool = False
|
|
29
30
|
test: bool = False
|
|
30
31
|
publish: str | None = None
|
|
@@ -34,8 +35,28 @@ class WorkflowOptions:
|
|
|
34
35
|
interactive: bool = True
|
|
35
36
|
dry_run: bool = False
|
|
36
37
|
|
|
38
|
+
def __init__(
|
|
39
|
+
self,
|
|
40
|
+
clean: bool = False,
|
|
41
|
+
test: bool = False,
|
|
42
|
+
publish: str | None = None,
|
|
43
|
+
bump: str | None = None,
|
|
44
|
+
commit: bool = False,
|
|
45
|
+
create_pr: bool = False,
|
|
46
|
+
interactive: bool = True,
|
|
47
|
+
dry_run: bool = False,
|
|
48
|
+
) -> None:
|
|
49
|
+
self.clean = clean
|
|
50
|
+
self.test = test
|
|
51
|
+
self.publish = publish
|
|
52
|
+
self.bump = bump
|
|
53
|
+
self.commit = commit
|
|
54
|
+
self.create_pr = create_pr
|
|
55
|
+
self.interactive = interactive
|
|
56
|
+
self.dry_run = dry_run
|
|
57
|
+
|
|
37
58
|
@classmethod
|
|
38
|
-
def from_args(cls, args: t.Any) -> "
|
|
59
|
+
def from_args(cls, args: t.Any) -> "InteractiveWorkflowOptions":
|
|
39
60
|
return cls(
|
|
40
61
|
clean=getattr(args, "clean", False),
|
|
41
62
|
test=getattr(args, "test", False),
|
|
@@ -393,16 +414,16 @@ class WorkflowManager:
|
|
|
393
414
|
|
|
394
415
|
class InteractiveCLI:
|
|
395
416
|
def __init__(self, console: Console | None = None) -> None:
|
|
396
|
-
self.console = console or Console
|
|
417
|
+
self.console = console or depends.get_sync(Console)
|
|
397
418
|
self.workflow = WorkflowManager(self.console)
|
|
398
419
|
import logging
|
|
399
420
|
|
|
400
421
|
self.logger = logging.getLogger("crackerjack.interactive.cli")
|
|
401
422
|
|
|
402
|
-
def create_dynamic_workflow(self, options:
|
|
423
|
+
def create_dynamic_workflow(self, options: InteractiveWorkflowOptions) -> None:
|
|
403
424
|
builder = WorkflowBuilder(self.console)
|
|
404
425
|
|
|
405
|
-
workflow_steps = [
|
|
426
|
+
workflow_steps: list[t.Callable[[WorkflowBuilder, str], str]] = [
|
|
406
427
|
self._add_setup_phase,
|
|
407
428
|
self._add_config_phase,
|
|
408
429
|
partial(self._add_cleaning_phase, enabled=options.clean),
|
|
@@ -581,7 +602,7 @@ class InteractiveCLI:
|
|
|
581
602
|
or last_task
|
|
582
603
|
)
|
|
583
604
|
|
|
584
|
-
def run_interactive_workflow(self, options:
|
|
605
|
+
def run_interactive_workflow(self, options: InteractiveWorkflowOptions) -> bool:
|
|
585
606
|
self.logger.info(
|
|
586
607
|
f"Starting interactive workflow with options: {options.__dict__}",
|
|
587
608
|
)
|
|
@@ -647,6 +668,8 @@ class InteractiveCLI:
|
|
|
647
668
|
|
|
648
669
|
self.console.print("\n[bold]📊 Workflow Summary[/ bold]")
|
|
649
670
|
|
|
671
|
+
from rich.panel import Panel
|
|
672
|
+
|
|
650
673
|
table = Table(show_header=True, header_style="bold magenta")
|
|
651
674
|
table.add_column("Status", style="cyan")
|
|
652
675
|
table.add_column("Count", justify="right")
|
|
@@ -663,11 +686,13 @@ class InteractiveCLI:
|
|
|
663
686
|
style = status_styles.get(status, "white")
|
|
664
687
|
table.add_row(f"[{style}]{status.title()}[/{style}]", str(count))
|
|
665
688
|
|
|
666
|
-
self.console.print(
|
|
689
|
+
self.console.print(
|
|
690
|
+
Panel(table, title="Workflow Summary", border_style="magenta")
|
|
691
|
+
)
|
|
667
692
|
|
|
668
693
|
|
|
669
694
|
def launch_interactive_cli(version: str, options: t.Any = None) -> None:
|
|
670
|
-
console = Console
|
|
695
|
+
console = depends.get_sync(Console)
|
|
671
696
|
cli = InteractiveCLI(console)
|
|
672
697
|
|
|
673
698
|
title = Text("Crackerjack", style="bold cyan")
|
|
@@ -682,7 +707,9 @@ def launch_interactive_cli(version: str, options: t.Any = None) -> None:
|
|
|
682
707
|
console.print()
|
|
683
708
|
|
|
684
709
|
workflow_options = (
|
|
685
|
-
|
|
710
|
+
InteractiveWorkflowOptions.from_args(options)
|
|
711
|
+
if options
|
|
712
|
+
else InteractiveWorkflowOptions()
|
|
686
713
|
)
|
|
687
714
|
cli.create_dynamic_workflow(workflow_options)
|
|
688
715
|
cli.run_interactive_workflow(workflow_options)
|