crackerjack 0.31.8__tar.gz → 0.31.9__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of crackerjack might be problematic. Click here for more details.
- crackerjack-0.31.9/CHANGELOG.md +302 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/PKG-INFO +1 -1
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/core/async_workflow_orchestrator.py +186 -20
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/core/workflow_orchestrator.py +225 -57
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/executors/hook_executor.py +95 -47
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/mcp/tools/workflow_executor.py +8 -7
- {crackerjack-0.31.8 → crackerjack-0.31.9/crackerjack}/pyproject.toml +5 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/services/git.py +48 -12
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/services/initialization.py +55 -6
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/uv.lock +151 -4
- {crackerjack-0.31.8/crackerjack → crackerjack-0.31.9}/pyproject.toml +6 -1
- {crackerjack-0.31.8 → crackerjack-0.31.9}/uv.lock +151 -4
- crackerjack-0.31.8/.mcp.json.bak +0 -154
- crackerjack-0.31.8/CHANGELOG.md +0 -469
- crackerjack-0.31.8/crackerjack/.mcp.json.bak +0 -186
- {crackerjack-0.31.8 → crackerjack-0.31.9}/.github/FUNDING.yml +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/.gitignore +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/.pre-commit-config.yaml +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/AGENTS.md +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/AI-AGENT-RULES.md +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/CLAUDE.md +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/LICENSE +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/README-AI-AGENT.md +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/README.md +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/RULES.md +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/UVXUSAGE.md +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/.gitignore +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/.pre-commit-config.yaml +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/CLAUDE.md +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/RULES.md +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/__init__.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/__main__.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/agents/__init__.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/agents/architect_agent.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/agents/base.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/agents/coordinator.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/agents/documentation_agent.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/agents/dry_agent.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/agents/formatting_agent.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/agents/import_optimization_agent.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/agents/performance_agent.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/agents/proactive_agent.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/agents/refactoring_agent.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/agents/security_agent.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/agents/test_creation_agent.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/agents/test_specialist_agent.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/agents/tracker.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/api.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/cli/__init__.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/cli/facade.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/cli/handlers.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/cli/interactive.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/cli/options.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/cli/utils.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/code_cleaner.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/config/__init__.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/config/hooks.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/core/__init__.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/core/autofix_coordinator.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/core/container.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/core/enhanced_container.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/core/performance.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/core/phase_coordinator.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/core/proactive_workflow.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/core/session_coordinator.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/dynamic_config.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/errors.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/executors/__init__.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/executors/async_hook_executor.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/executors/cached_hook_executor.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/executors/individual_hook_executor.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/intelligence/__init__.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/intelligence/adaptive_learning.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/intelligence/agent_orchestrator.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/intelligence/agent_registry.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/intelligence/agent_selector.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/intelligence/integration.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/interactive.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/managers/__init__.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/managers/async_hook_manager.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/managers/hook_manager.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/managers/publish_manager.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/managers/test_command_builder.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/managers/test_executor.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/managers/test_manager.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/managers/test_manager_backup.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/managers/test_progress.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/mcp/__init__.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/mcp/cache.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/mcp/client_runner.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/mcp/context.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/mcp/dashboard.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/mcp/enhanced_progress_monitor.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/mcp/enhanced_progress_monitor.tcss +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/mcp/file_monitor.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/mcp/progress_components.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/mcp/progress_monitor.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/mcp/progress_monitor.tcss +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/mcp/rate_limiter.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/mcp/server.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/mcp/server_core.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/mcp/service_watchdog.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/mcp/state.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/mcp/task_manager.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/mcp/tools/__init__.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/mcp/tools/core_tools.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/mcp/tools/error_analyzer.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/mcp/tools/execution_tools.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/mcp/tools/execution_tools_backup.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/mcp/tools/intelligence_tool_registry.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/mcp/tools/intelligence_tools.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/mcp/tools/monitoring_tools.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/mcp/tools/monitoring_tools.py.backup +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/mcp/tools/proactive_tools.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/mcp/tools/progress_tools.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/mcp/tools/utility_tools.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/mcp/websocket/__init__.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/mcp/websocket/app.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/mcp/websocket/endpoints.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/mcp/websocket/jobs.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/mcp/websocket/server.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/mcp/websocket/websocket_handler.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/mcp/websocket_server.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/models/__init__.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/models/config.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/models/config_adapter.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/models/protocols.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/models/task.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/monitoring/ai_agent_watchdog.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/monitoring/regression_prevention.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/orchestration/__init__.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/orchestration/advanced_orchestrator.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/orchestration/coverage_improvement.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/orchestration/execution_strategies.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/orchestration/test_progress_streamer.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/plugins/__init__.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/plugins/base.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/plugins/hooks.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/plugins/loader.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/plugins/managers.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/py313.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/services/__init__.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/services/cache.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/services/config.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/services/config_integrity.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/services/contextual_ai_assistant.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/services/coverage_ratchet.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/services/debug.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/services/dependency_monitor.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/services/enhanced_filesystem.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/services/file_hasher.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/services/filesystem.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/services/health_metrics.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/services/log_manager.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/services/logging.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/services/metrics.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/services/pattern_cache.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/services/pattern_detector.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/services/performance_benchmarks.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/services/security.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/services/server_manager.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/services/smart_scheduling.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/services/tool_version_service.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/services/unified_config.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/services/version_checker.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/slash_commands/__init__.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/slash_commands/init.md +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/slash_commands/run.md +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/crackerjack/slash_commands/status.md +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/docs/AI_AGENT_DEBUGGING.md +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/docs/API_REFERENCE.md +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/docs/ARCHITECTURE.md +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/docs/FUTURE-ENHANCEMENTS.md +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/docs/SUB_AGENT_MONITORING_DESIGN.md +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/docs/VERIFICATION_WORKFLOW.md +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/docs/WORKFLOW_KNOWLEDGE_BASE.md +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/example.mcp.json +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/excalidraw.log +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/fix_terminal.sh +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/requirements.txt +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/.coverage +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/HEALTH_METRICS_TESTING_SUMMARY.md +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/TESTING.md +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/TEST_COVERAGE_PLAN.md +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/__init__.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/conftest.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/coverage.json +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/data/comments_sample.txt +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/data/docstrings_sample.txt +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/data/expected_comments_sample.txt +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/data/init.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/scripts/__init__.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/scripts/agent_audit_report.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/scripts/run_test_suite.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/test___main__.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/test_advanced_orchestrator_strategic.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/test_ai_agent_comprehensive.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/test_ai_agent_workflow.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/test_async_hook_executor.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/test_cli_strategic.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/test_code_cleaner.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/test_contextual_ai_assistant_strategic.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/test_core_additional_strategic.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/test_core_autofix_coordinator.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/test_core_comprehensive.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/test_core_coverage.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/test_core_enhanced_container.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/test_core_modules.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/test_core_performance.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/test_core_strategic.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/test_core_strategic_coverage.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/test_core_workflow_orchestration_deep_quality.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/test_dependency_monitor_strategic.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/test_documentation_agent.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/test_documentation_agent_simple.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/test_dynamic_config.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/test_dynamic_config_coverage.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/test_enhanced_filesystem.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/test_enhanced_filesystem_comprehensive.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/test_enhanced_filesystem_coverage.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/test_enhanced_filesystem_integration.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/test_enhanced_filesystem_strategic.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/test_filesystem_coverage.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/test_health_metrics_strategic.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/test_hook_manager_simple.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/test_import_coverage_consolidated.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/test_import_optimization_agent.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/test_intelligence_system.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/test_large_modules_coverage.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/test_main_entry_coverage.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/test_main_module.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/test_managers_consolidated.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/test_managers_strategic_coverage.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/test_mcp_additional_strategic.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/test_mcp_core_strategic.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/test_mcp_progress_monitor.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/test_mcp_progress_strategic.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/test_mcp_server.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/test_mcp_strategic.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/test_mcp_websocket_lifecycle_deep_quality.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/test_models_comprehensive.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/test_models_config_adapter_coverage.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/test_models_focused.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/test_models_strategic.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/test_models_task_coverage.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/test_modernized_code.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/test_orchestration_advanced_strategic.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/test_orchestration_strategic.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/test_performance_agent.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/test_performance_agent_simple.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/test_performance_benchmarks_focused.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/test_performance_benchmarks_strategic.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/test_phase_coordinator_simple.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/test_plugins_base_strategic.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/test_plugins_comprehensive.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/test_plugins_coverage.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/test_plugins_strategic.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/test_plugins_system_strategic.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/test_proactive_agent_system.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/test_protocol_compliance.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/test_publish_manager_coverage.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/test_py313_coverage.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/test_pytest_features.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/test_refactoring_agent.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/test_server_manager_strategic.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/test_services_coverage.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/test_services_strategic.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/test_session_coordinator.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/test_session_coordinator_coverage.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/test_simple_tool_version_service.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/test_structured_errors.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/test_structured_logging.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/test_terminal_restoration.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/test_terminal_state.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/test_tool_version_service_advanced.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/test_tool_version_service_business_logic.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/test_tool_version_service_coverage.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/test_tool_version_service_deep_coverage.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/test_tool_version_service_functional.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/test_tool_version_service_simple_working.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/test_tool_version_service_strategic.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/test_unified_api.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/test_unified_config.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/test_workflow_integration.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tests/test_workflow_orchestrator.py +0 -0
- {crackerjack-0.31.8 → crackerjack-0.31.9}/tools.yaml +0 -0
|
@@ -0,0 +1,302 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
## [Unreleased] - 2025-09-01
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- feat: add new feature
|
|
13
|
+
|
|
14
|
+
### Fixed
|
|
15
|
+
|
|
16
|
+
- fix: resolve bug in parser
|
|
17
|
+
|
|
18
|
+
## [Unreleased] - 2025-09-01
|
|
19
|
+
|
|
20
|
+
### Added
|
|
21
|
+
|
|
22
|
+
- feat: add new feature
|
|
23
|
+
|
|
24
|
+
### Fixed
|
|
25
|
+
|
|
26
|
+
- fix: resolve bug in parser
|
|
27
|
+
|
|
28
|
+
## [Unreleased] - 2025-09-01
|
|
29
|
+
|
|
30
|
+
### Added
|
|
31
|
+
|
|
32
|
+
- feat: add new feature
|
|
33
|
+
|
|
34
|
+
### Fixed
|
|
35
|
+
|
|
36
|
+
- fix: resolve bug in parser
|
|
37
|
+
|
|
38
|
+
## [Unreleased] - 2025-09-01
|
|
39
|
+
|
|
40
|
+
### Added
|
|
41
|
+
|
|
42
|
+
- feat: add new feature
|
|
43
|
+
|
|
44
|
+
### Fixed
|
|
45
|
+
|
|
46
|
+
- fix: resolve bug in parser
|
|
47
|
+
|
|
48
|
+
## [Unreleased] - 2025-09-01
|
|
49
|
+
|
|
50
|
+
### Added
|
|
51
|
+
|
|
52
|
+
- feat: add new feature
|
|
53
|
+
|
|
54
|
+
### Fixed
|
|
55
|
+
|
|
56
|
+
- fix: resolve bug in parser
|
|
57
|
+
|
|
58
|
+
## [Unreleased] - 2025-09-01
|
|
59
|
+
|
|
60
|
+
### Added
|
|
61
|
+
|
|
62
|
+
- feat: add new feature
|
|
63
|
+
|
|
64
|
+
### Fixed
|
|
65
|
+
|
|
66
|
+
- fix: resolve bug in parser
|
|
67
|
+
|
|
68
|
+
## [Unreleased] - 2025-09-01
|
|
69
|
+
|
|
70
|
+
### Added
|
|
71
|
+
|
|
72
|
+
- feat: add new feature
|
|
73
|
+
|
|
74
|
+
### Fixed
|
|
75
|
+
|
|
76
|
+
- fix: resolve bug in parser
|
|
77
|
+
|
|
78
|
+
## [Unreleased] - 2025-09-01
|
|
79
|
+
|
|
80
|
+
### Added
|
|
81
|
+
|
|
82
|
+
- feat: add new feature
|
|
83
|
+
|
|
84
|
+
### Fixed
|
|
85
|
+
|
|
86
|
+
- fix: resolve bug in parser
|
|
87
|
+
|
|
88
|
+
## [Unreleased] - 2025-09-01
|
|
89
|
+
|
|
90
|
+
### Added
|
|
91
|
+
|
|
92
|
+
- feat: add new feature
|
|
93
|
+
|
|
94
|
+
### Fixed
|
|
95
|
+
|
|
96
|
+
- fix: resolve bug in parser
|
|
97
|
+
|
|
98
|
+
## [Unreleased] - 2025-09-01
|
|
99
|
+
|
|
100
|
+
### Added
|
|
101
|
+
|
|
102
|
+
- feat: add new feature
|
|
103
|
+
|
|
104
|
+
### Fixed
|
|
105
|
+
|
|
106
|
+
- fix: resolve bug in parser
|
|
107
|
+
|
|
108
|
+
## [Unreleased] - 2025-09-01
|
|
109
|
+
|
|
110
|
+
### Added
|
|
111
|
+
|
|
112
|
+
- feat: add new feature
|
|
113
|
+
|
|
114
|
+
### Fixed
|
|
115
|
+
|
|
116
|
+
- fix: resolve bug in parser
|
|
117
|
+
|
|
118
|
+
## [0.31.8] - 2025-09-01
|
|
119
|
+
|
|
120
|
+
### Fixed
|
|
121
|
+
|
|
122
|
+
- Critical bug in AI agent workflow where specific error details were not being captured from hook failures
|
|
123
|
+
- Fixed `HookExecutor` to properly capture subprocess output in `issues_found` field
|
|
124
|
+
- Fixed `AsyncWorkflowOrchestrator._collect_comprehensive_hook_issues_async()` to extract specific issues from `HookResult.issues_found`
|
|
125
|
+
- Fixed `_collect_test_issues_async()` to use `test_manager.get_test_failures()` for detailed error information
|
|
126
|
+
- Connected `_apply_ai_fixes_async()` to existing `AgentCoordinator` system for structured issue processing
|
|
127
|
+
- Added `_parse_issues_for_agents()` method to convert string issues to structured `Issue` objects
|
|
128
|
+
- Resolved pyright type errors in async workflow orchestrator
|
|
129
|
+
|
|
130
|
+
### Improved
|
|
131
|
+
|
|
132
|
+
- Enhanced AI agent error collection to provide specific details instead of generic messages
|
|
133
|
+
- Improved iterative fixing workflow to process all collected issues in batch rather than stopping on first failure
|
|
134
|
+
- Better integration between hook execution and AI agent fixing phases
|
|
135
|
+
|
|
136
|
+
## [0.31.7] - 2025-09-01
|
|
137
|
+
|
|
138
|
+
### Added
|
|
139
|
+
|
|
140
|
+
- Enhanced configuration management and dependency updates
|
|
141
|
+
- Improved core workflow orchestration patterns
|
|
142
|
+
|
|
143
|
+
### Fixed
|
|
144
|
+
|
|
145
|
+
- Configuration consistency across different execution modes
|
|
146
|
+
- Core dependency management improvements
|
|
147
|
+
|
|
148
|
+
## [0.31.6] - 2025-09-01
|
|
149
|
+
|
|
150
|
+
### Added
|
|
151
|
+
|
|
152
|
+
- Documentation updates for AI agent workflow rules
|
|
153
|
+
- Enhanced configuration management for modular architecture
|
|
154
|
+
|
|
155
|
+
### Fixed
|
|
156
|
+
|
|
157
|
+
- Core workflow improvements and configuration consistency
|
|
158
|
+
- Documentation accuracy for recent architectural changes
|
|
159
|
+
|
|
160
|
+
## [0.31.5] - 2025-09-01
|
|
161
|
+
|
|
162
|
+
### Added
|
|
163
|
+
|
|
164
|
+
- Comprehensive AI agent workflow documentation (AI-AGENT-RULES.md)
|
|
165
|
+
- Detailed iteration protocol specifications for AI agent fixing
|
|
166
|
+
- Sub-agent architecture documentation with 9 specialized agents
|
|
167
|
+
- Enhanced error collection and batch fixing patterns
|
|
168
|
+
|
|
169
|
+
### Fixed
|
|
170
|
+
|
|
171
|
+
- AI agent workflow iteration boundaries and fix application timing
|
|
172
|
+
- Progress validation between iterations
|
|
173
|
+
- WebSocket progress reporting for MCP server integration
|
|
174
|
+
|
|
175
|
+
## [0.31.4] - 2025-09-01
|
|
176
|
+
|
|
177
|
+
### Added
|
|
178
|
+
|
|
179
|
+
- Modular MCP server architecture (70% line reduction from 3,116 to 921 lines)
|
|
180
|
+
- WebSocket server refactoring (35% reduction from 1,479 to 944 lines)
|
|
181
|
+
- Enhanced filesystem operations with XDG compliance and atomic operations
|
|
182
|
+
- Plugin system architecture with dynamic loading and dependency resolution
|
|
183
|
+
|
|
184
|
+
### Fixed
|
|
185
|
+
|
|
186
|
+
- CLI entry point complexity reduction (80% reduction from 601 to 122 lines)
|
|
187
|
+
- Protocol-based dependency injection improvements
|
|
188
|
+
- Thread-safe session state management with async locks
|
|
189
|
+
- Service lifecycle management with enhanced container patterns
|
|
190
|
+
|
|
191
|
+
## [0.31.3] - 2025-09-01
|
|
192
|
+
|
|
193
|
+
### Added
|
|
194
|
+
|
|
195
|
+
- Enhanced container with service lifetime management (SINGLETON, TRANSIENT, SCOPED)
|
|
196
|
+
- Advanced filesystem operations with backup management and security validation
|
|
197
|
+
- Comprehensive health metrics and performance benchmarking
|
|
198
|
+
- Plugin-based hook system with custom validation rules
|
|
199
|
+
|
|
200
|
+
### Fixed
|
|
201
|
+
|
|
202
|
+
- Service descriptor with factory support and dependency resolution
|
|
203
|
+
- Thread-local scoping for singleton services
|
|
204
|
+
- Circular dependency detection in enhanced container
|
|
205
|
+
- Performance monitoring for file operations
|
|
206
|
+
|
|
207
|
+
## [0.31.0] - 2025-08-31
|
|
208
|
+
|
|
209
|
+
### Added
|
|
210
|
+
|
|
211
|
+
- Major architectural refactoring from monolithic to modular design
|
|
212
|
+
- Dependency injection container with protocol-based interfaces
|
|
213
|
+
- Advanced workflow orchestration with parallel execution strategies
|
|
214
|
+
- Session coordination with cleanup handlers and progress management
|
|
215
|
+
- Comprehensive manager pattern for hook, test, and publish operations
|
|
216
|
+
|
|
217
|
+
### Changed
|
|
218
|
+
|
|
219
|
+
- **BREAKING**: Migrated from monolithic `Crackerjack` class to modular `WorkflowOrchestrator`
|
|
220
|
+
- Restructured CLI interface with dedicated options and handlers modules
|
|
221
|
+
- Enhanced async/await patterns throughout the codebase
|
|
222
|
+
- Protocol-based interfaces in `models/protocols.py` for better testability
|
|
223
|
+
|
|
224
|
+
### Fixed
|
|
225
|
+
|
|
226
|
+
- All 31+ refurb violations in agents directory (FURB107, FURB109, FURB118, etc.)
|
|
227
|
+
- Major complexity reductions in critical functions (34→3, 33→2)
|
|
228
|
+
- Import error prevention with proper protocol usage
|
|
229
|
+
- Fast hooks consistency and reliability improvements
|
|
230
|
+
|
|
231
|
+
## [0.30.3] - 2025-08-29
|
|
232
|
+
|
|
233
|
+
### Added
|
|
234
|
+
|
|
235
|
+
- Coverage ratchet system targeting 100% test coverage
|
|
236
|
+
- Milestone celebration system for coverage achievements
|
|
237
|
+
- Progressive coverage improvement with no regression policy
|
|
238
|
+
- Enhanced test management with intelligent parallelization
|
|
239
|
+
|
|
240
|
+
### Changed
|
|
241
|
+
|
|
242
|
+
- Replaced arbitrary coverage limits with continuous improvement model
|
|
243
|
+
- Enhanced testing framework with timeout and worker configuration
|
|
244
|
+
- Rich terminal displays for coverage progress visualization
|
|
245
|
+
|
|
246
|
+
### Fixed
|
|
247
|
+
|
|
248
|
+
- Test execution reliability and performance optimization
|
|
249
|
+
- Coverage measurement accuracy and consistency
|
|
250
|
+
- Memory usage optimization for large test suites
|
|
251
|
+
|
|
252
|
+
## [0.30.2] - 2025-08-29
|
|
253
|
+
|
|
254
|
+
### Added
|
|
255
|
+
|
|
256
|
+
- AI agent integration with MCP (Model Context Protocol) server
|
|
257
|
+
- WebSocket-based progress streaming for real-time monitoring
|
|
258
|
+
- Comprehensive pre-commit hook management with fast/comprehensive stages
|
|
259
|
+
- Service watchdog for automatic MCP and WebSocket server monitoring
|
|
260
|
+
|
|
261
|
+
### Changed
|
|
262
|
+
|
|
263
|
+
- Enhanced CLI with AI agent mode and interactive Rich UI
|
|
264
|
+
- Improved error handling and structured output for AI agents
|
|
265
|
+
- Advanced workflow orchestration with session coordination
|
|
266
|
+
|
|
267
|
+
### Fixed
|
|
268
|
+
|
|
269
|
+
- MCP server stability and connection handling
|
|
270
|
+
- WebSocket progress reporting accuracy
|
|
271
|
+
- Pre-commit hook execution reliability and performance
|
|
272
|
+
|
|
273
|
+
______________________________________________________________________
|
|
274
|
+
|
|
275
|
+
## Historical Context
|
|
276
|
+
|
|
277
|
+
This changelog was reconstructed from git history on 2025-09-02. Prior to v0.30.2, Crackerjack underwent significant development including:
|
|
278
|
+
|
|
279
|
+
- Initial Python project management tool creation
|
|
280
|
+
- UV package manager integration
|
|
281
|
+
- Ruff, pytest, and pre-commit hook unification
|
|
282
|
+
- Basic quality enforcement workflow implementation
|
|
283
|
+
- Foundation for modular architecture patterns
|
|
284
|
+
|
|
285
|
+
For detailed commit history, use: `git log --oneline --since="2025-08-01"`
|
|
286
|
+
|
|
287
|
+
## Contributing
|
|
288
|
+
|
|
289
|
+
When updating this changelog:
|
|
290
|
+
|
|
291
|
+
1. Follow [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) format
|
|
292
|
+
1. Group changes under Added, Changed, Deprecated, Removed, Fixed, Security
|
|
293
|
+
1. Include version numbers and dates for all releases
|
|
294
|
+
1. Link to relevant issues and pull requests when applicable
|
|
295
|
+
1. Focus on user-facing changes rather than internal refactoring details
|
|
296
|
+
|
|
297
|
+
## Version Links
|
|
298
|
+
|
|
299
|
+
- \[0.31.8\]: Latest release with AI agent workflow fixes
|
|
300
|
+
- \[0.31.0\]: Major architectural refactoring to modular design
|
|
301
|
+
- \[0.30.3\]: Coverage ratchet system introduction
|
|
302
|
+
- \[0.30.2\]: AI agent and MCP server integration
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: crackerjack
|
|
3
|
-
Version: 0.31.
|
|
3
|
+
Version: 0.31.9
|
|
4
4
|
Summary: Opinionated Python project management tool
|
|
5
5
|
Project-URL: documentation, https://github.com/lesleslie/crackerjack
|
|
6
6
|
Project-URL: homepage, https://github.com/lesleslie/crackerjack
|
|
@@ -6,6 +6,7 @@ from pathlib import Path
|
|
|
6
6
|
|
|
7
7
|
from rich.console import Console
|
|
8
8
|
|
|
9
|
+
from crackerjack.agents.base import FixResult, Issue, IssueType, Priority
|
|
9
10
|
from crackerjack.models.protocols import OptionsProtocol
|
|
10
11
|
|
|
11
12
|
from .phase_coordinator import PhaseCoordinator
|
|
@@ -233,6 +234,113 @@ class AsyncWorkflowPipeline:
|
|
|
233
234
|
|
|
234
235
|
return "continue"
|
|
235
236
|
|
|
237
|
+
def _parse_issues_for_agents(
|
|
238
|
+
self, test_issues: list[str], hook_issues: list[str]
|
|
239
|
+
) -> list[Issue]:
|
|
240
|
+
"""Parse string issues into structured Issue objects for AI agent processing."""
|
|
241
|
+
structured_issues = []
|
|
242
|
+
|
|
243
|
+
# Parse hook issues using dedicated parsers
|
|
244
|
+
for issue in hook_issues:
|
|
245
|
+
parsed_issue = self._parse_single_hook_issue(issue)
|
|
246
|
+
structured_issues.append(parsed_issue)
|
|
247
|
+
|
|
248
|
+
# Parse test issues using dedicated parser
|
|
249
|
+
for issue in test_issues:
|
|
250
|
+
parsed_issue = self._parse_single_test_issue(issue)
|
|
251
|
+
structured_issues.append(parsed_issue)
|
|
252
|
+
|
|
253
|
+
return structured_issues
|
|
254
|
+
|
|
255
|
+
def _parse_single_hook_issue(self, issue: str) -> Issue:
|
|
256
|
+
"""Parse a single hook issue into structured format."""
|
|
257
|
+
from crackerjack.agents.base import IssueType, Priority
|
|
258
|
+
|
|
259
|
+
# Try refurb-specific parsing first
|
|
260
|
+
if "refurb:" in issue and "[FURB" in issue:
|
|
261
|
+
return self._parse_refurb_issue(issue)
|
|
262
|
+
|
|
263
|
+
# Use generic hook issue parsers
|
|
264
|
+
hook_type_mapping = {
|
|
265
|
+
"pyright:": (IssueType.TYPE_ERROR, Priority.HIGH, "pyright"),
|
|
266
|
+
"Type error": (IssueType.TYPE_ERROR, Priority.HIGH, "pyright"),
|
|
267
|
+
"bandit:": (IssueType.SECURITY, Priority.HIGH, "bandit"),
|
|
268
|
+
"vulture:": (IssueType.DEAD_CODE, Priority.MEDIUM, "vulture"),
|
|
269
|
+
"complexipy:": (IssueType.COMPLEXITY, Priority.MEDIUM, "complexipy"),
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
for keyword, (issue_type, priority, stage) in hook_type_mapping.items():
|
|
273
|
+
if keyword in issue:
|
|
274
|
+
return self._create_generic_issue(issue, issue_type, priority, stage)
|
|
275
|
+
|
|
276
|
+
# Default to generic hook issue
|
|
277
|
+
return self._create_generic_issue(
|
|
278
|
+
issue, IssueType.FORMATTING, Priority.MEDIUM, "hook"
|
|
279
|
+
)
|
|
280
|
+
|
|
281
|
+
def _parse_refurb_issue(self, issue: str) -> Issue:
|
|
282
|
+
"""Parse refurb-specific issue format."""
|
|
283
|
+
import re
|
|
284
|
+
import uuid
|
|
285
|
+
|
|
286
|
+
from crackerjack.agents.base import Issue, IssueType, Priority
|
|
287
|
+
|
|
288
|
+
match = re.search(r"refurb:\s*(.+?):(\d+):(\d+)\s+\[(\w+)\]:\s*(.+)", issue)
|
|
289
|
+
if match:
|
|
290
|
+
file_path, line_num, _, error_code, message = match.groups()
|
|
291
|
+
return Issue(
|
|
292
|
+
id=str(uuid.uuid4()),
|
|
293
|
+
type=IssueType.FORMATTING,
|
|
294
|
+
severity=Priority.MEDIUM,
|
|
295
|
+
message=f"[{error_code}] {message}",
|
|
296
|
+
file_path=file_path,
|
|
297
|
+
line_number=int(line_num),
|
|
298
|
+
details=[issue],
|
|
299
|
+
stage="refurb",
|
|
300
|
+
)
|
|
301
|
+
|
|
302
|
+
# Fallback to generic parsing if regex fails
|
|
303
|
+
return self._create_generic_issue(
|
|
304
|
+
issue, IssueType.FORMATTING, Priority.MEDIUM, "refurb"
|
|
305
|
+
)
|
|
306
|
+
|
|
307
|
+
def _parse_single_test_issue(self, issue: str) -> Issue:
|
|
308
|
+
"""Parse a single test issue into structured format."""
|
|
309
|
+
import uuid
|
|
310
|
+
|
|
311
|
+
from crackerjack.agents.base import Issue, IssueType, Priority
|
|
312
|
+
|
|
313
|
+
if "FAILED" in issue or "ERROR" in issue:
|
|
314
|
+
severity = Priority.HIGH
|
|
315
|
+
else:
|
|
316
|
+
severity = Priority.MEDIUM
|
|
317
|
+
|
|
318
|
+
return Issue(
|
|
319
|
+
id=str(uuid.uuid4()),
|
|
320
|
+
type=IssueType.TEST_FAILURE,
|
|
321
|
+
severity=severity,
|
|
322
|
+
message=issue,
|
|
323
|
+
details=[issue],
|
|
324
|
+
stage="test",
|
|
325
|
+
)
|
|
326
|
+
|
|
327
|
+
def _create_generic_issue(
|
|
328
|
+
self, issue: str, issue_type: IssueType, priority: Priority, stage: str
|
|
329
|
+
) -> Issue:
|
|
330
|
+
"""Create a generic Issue object with standard fields."""
|
|
331
|
+
import uuid
|
|
332
|
+
|
|
333
|
+
from crackerjack.agents.base import Issue
|
|
334
|
+
|
|
335
|
+
return Issue(
|
|
336
|
+
id=str(uuid.uuid4()),
|
|
337
|
+
type=issue_type,
|
|
338
|
+
severity=priority,
|
|
339
|
+
message=issue,
|
|
340
|
+
details=[issue],
|
|
341
|
+
stage=stage,
|
|
342
|
+
)
|
|
343
|
+
|
|
236
344
|
async def _run_final_workflow_phases(self, options: OptionsProtocol) -> bool:
|
|
237
345
|
"""Run the final publishing and commit phases."""
|
|
238
346
|
if not self.phases.run_publishing_phase(options):
|
|
@@ -263,7 +371,13 @@ class AsyncWorkflowPipeline:
|
|
|
263
371
|
if success:
|
|
264
372
|
return []
|
|
265
373
|
else:
|
|
266
|
-
|
|
374
|
+
# Get specific test failure details from test manager
|
|
375
|
+
test_failures = self.phases.test_manager.get_test_failures()
|
|
376
|
+
if test_failures:
|
|
377
|
+
return [f"Test failure: {failure}" for failure in test_failures]
|
|
378
|
+
else:
|
|
379
|
+
# Fallback if no specific failures captured
|
|
380
|
+
return ["Test failures detected - see logs for details"]
|
|
267
381
|
except Exception as e:
|
|
268
382
|
return [f"Test execution error: {e}"]
|
|
269
383
|
|
|
@@ -272,11 +386,25 @@ class AsyncWorkflowPipeline:
|
|
|
272
386
|
) -> list[str]:
|
|
273
387
|
"""Collect all comprehensive hook issues without stopping on first failure."""
|
|
274
388
|
try:
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
389
|
+
# Run hooks and capture detailed results
|
|
390
|
+
hook_results = await asyncio.to_thread(
|
|
391
|
+
self.phases.hook_manager.run_comprehensive_hooks,
|
|
392
|
+
)
|
|
393
|
+
|
|
394
|
+
# Extract specific issues from failed hooks
|
|
395
|
+
all_issues = []
|
|
396
|
+
for result in hook_results:
|
|
397
|
+
if (
|
|
398
|
+
result.status in ("failed", "error", "timeout")
|
|
399
|
+
and result.issues_found
|
|
400
|
+
):
|
|
401
|
+
# Add hook context to each issue for better AI agent understanding
|
|
402
|
+
hook_context = f"{result.name}: "
|
|
403
|
+
for issue in result.issues_found:
|
|
404
|
+
all_issues.append(hook_context + issue)
|
|
405
|
+
|
|
406
|
+
return all_issues
|
|
407
|
+
|
|
280
408
|
except Exception as e:
|
|
281
409
|
return [f"Comprehensive hooks error: {e}"]
|
|
282
410
|
|
|
@@ -287,7 +415,7 @@ class AsyncWorkflowPipeline:
|
|
|
287
415
|
hook_issues: list[str],
|
|
288
416
|
iteration: int,
|
|
289
417
|
) -> bool:
|
|
290
|
-
"""Apply AI fixes for all collected issues in batch."""
|
|
418
|
+
"""Apply AI fixes for all collected issues in batch using AgentCoordinator."""
|
|
291
419
|
all_issues = test_issues + hook_issues
|
|
292
420
|
if not all_issues:
|
|
293
421
|
return True
|
|
@@ -296,24 +424,62 @@ class AsyncWorkflowPipeline:
|
|
|
296
424
|
f"🔧 Applying AI fixes for {len(all_issues)} issues in iteration {iteration}"
|
|
297
425
|
)
|
|
298
426
|
|
|
299
|
-
# This would integrate with the AI agent system to actually apply fixes
|
|
300
|
-
# For now, we'll simulate the fixing process
|
|
301
427
|
try:
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
428
|
+
return await self._execute_ai_fix_workflow(
|
|
429
|
+
test_issues, hook_issues, iteration
|
|
430
|
+
)
|
|
431
|
+
except Exception as e:
|
|
432
|
+
return self._handle_ai_fix_error(e)
|
|
307
433
|
|
|
308
|
-
|
|
309
|
-
|
|
434
|
+
async def _execute_ai_fix_workflow(
|
|
435
|
+
self, test_issues: list[str], hook_issues: list[str], iteration: int
|
|
436
|
+
) -> bool:
|
|
437
|
+
"""Execute the AI fix workflow and return success status."""
|
|
438
|
+
structured_issues = self._parse_issues_for_agents(test_issues, hook_issues)
|
|
310
439
|
|
|
311
|
-
|
|
440
|
+
if not structured_issues:
|
|
441
|
+
self.console.print("⚠️ No actionable issues found for AI agents")
|
|
312
442
|
return True
|
|
313
443
|
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
444
|
+
coordinator = self._create_agent_coordinator()
|
|
445
|
+
fix_result = await coordinator.handle_issues(structured_issues)
|
|
446
|
+
|
|
447
|
+
self._report_fix_results(fix_result, iteration)
|
|
448
|
+
return fix_result.success
|
|
449
|
+
|
|
450
|
+
def _create_agent_coordinator(self):
|
|
451
|
+
"""Create and configure the AI agent coordinator."""
|
|
452
|
+
from crackerjack.agents.base import AgentContext
|
|
453
|
+
from crackerjack.agents.coordinator import AgentCoordinator
|
|
454
|
+
|
|
455
|
+
context = AgentContext(project_path=self.pkg_path)
|
|
456
|
+
return AgentCoordinator(context)
|
|
457
|
+
|
|
458
|
+
def _report_fix_results(self, fix_result: FixResult, iteration: int) -> None:
|
|
459
|
+
"""Report the results of AI fix attempts to the console."""
|
|
460
|
+
if fix_result.success:
|
|
461
|
+
self._report_successful_fixes(fix_result, iteration)
|
|
462
|
+
else:
|
|
463
|
+
self._report_failed_fixes(fix_result, iteration)
|
|
464
|
+
|
|
465
|
+
def _report_successful_fixes(self, fix_result: FixResult, iteration: int) -> None:
|
|
466
|
+
"""Report successful AI fixes to the console."""
|
|
467
|
+
self.console.print(f"✅ AI fixes applied successfully in iteration {iteration}")
|
|
468
|
+
if fix_result.fixes_applied:
|
|
469
|
+
self.console.print(f" Applied {len(fix_result.fixes_applied)} fixes")
|
|
470
|
+
|
|
471
|
+
def _report_failed_fixes(self, fix_result: FixResult, iteration: int) -> None:
|
|
472
|
+
"""Report failed AI fixes to the console."""
|
|
473
|
+
self.console.print(f"⚠️ Some AI fixes failed in iteration {iteration}")
|
|
474
|
+
if fix_result.remaining_issues:
|
|
475
|
+
for error in fix_result.remaining_issues[:3]: # Show first 3 errors
|
|
476
|
+
self.console.print(f" Error: {error}")
|
|
477
|
+
|
|
478
|
+
def _handle_ai_fix_error(self, error: Exception) -> bool:
|
|
479
|
+
"""Handle errors during AI fix execution."""
|
|
480
|
+
self.logger.error(f"AI fixing failed: {error}")
|
|
481
|
+
self.console.print(f"❌ AI agent system error: {error}")
|
|
482
|
+
return False
|
|
317
483
|
|
|
318
484
|
|
|
319
485
|
class AsyncWorkflowOrchestrator:
|