crackerjack 0.18.2__py3-none-any.whl → 0.45.2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- crackerjack/README.md +19 -0
- crackerjack/__init__.py +96 -2
- crackerjack/__main__.py +637 -138
- crackerjack/adapters/README.md +18 -0
- crackerjack/adapters/__init__.py +39 -0
- crackerjack/adapters/_output_paths.py +167 -0
- crackerjack/adapters/_qa_adapter_base.py +309 -0
- crackerjack/adapters/_tool_adapter_base.py +706 -0
- crackerjack/adapters/ai/README.md +65 -0
- crackerjack/adapters/ai/__init__.py +5 -0
- crackerjack/adapters/ai/claude.py +853 -0
- crackerjack/adapters/complexity/README.md +53 -0
- crackerjack/adapters/complexity/__init__.py +10 -0
- crackerjack/adapters/complexity/complexipy.py +641 -0
- crackerjack/adapters/dependency/__init__.py +22 -0
- crackerjack/adapters/dependency/pip_audit.py +418 -0
- crackerjack/adapters/format/README.md +72 -0
- crackerjack/adapters/format/__init__.py +11 -0
- crackerjack/adapters/format/mdformat.py +313 -0
- crackerjack/adapters/format/ruff.py +516 -0
- crackerjack/adapters/lint/README.md +47 -0
- crackerjack/adapters/lint/__init__.py +11 -0
- crackerjack/adapters/lint/codespell.py +273 -0
- crackerjack/adapters/lsp/README.md +49 -0
- crackerjack/adapters/lsp/__init__.py +27 -0
- crackerjack/adapters/lsp/_base.py +194 -0
- crackerjack/adapters/lsp/_client.py +358 -0
- crackerjack/adapters/lsp/_manager.py +193 -0
- crackerjack/adapters/lsp/skylos.py +283 -0
- crackerjack/adapters/lsp/zuban.py +557 -0
- crackerjack/adapters/refactor/README.md +59 -0
- crackerjack/adapters/refactor/__init__.py +12 -0
- crackerjack/adapters/refactor/creosote.py +318 -0
- crackerjack/adapters/refactor/refurb.py +406 -0
- crackerjack/adapters/refactor/skylos.py +494 -0
- crackerjack/adapters/sast/README.md +132 -0
- crackerjack/adapters/sast/__init__.py +32 -0
- crackerjack/adapters/sast/_base.py +201 -0
- crackerjack/adapters/sast/bandit.py +423 -0
- crackerjack/adapters/sast/pyscn.py +405 -0
- crackerjack/adapters/sast/semgrep.py +241 -0
- crackerjack/adapters/security/README.md +111 -0
- crackerjack/adapters/security/__init__.py +17 -0
- crackerjack/adapters/security/gitleaks.py +339 -0
- crackerjack/adapters/type/README.md +52 -0
- crackerjack/adapters/type/__init__.py +12 -0
- crackerjack/adapters/type/pyrefly.py +402 -0
- crackerjack/adapters/type/ty.py +402 -0
- crackerjack/adapters/type/zuban.py +522 -0
- crackerjack/adapters/utility/README.md +51 -0
- crackerjack/adapters/utility/__init__.py +10 -0
- crackerjack/adapters/utility/checks.py +884 -0
- crackerjack/agents/README.md +264 -0
- crackerjack/agents/__init__.py +66 -0
- crackerjack/agents/architect_agent.py +238 -0
- crackerjack/agents/base.py +167 -0
- crackerjack/agents/claude_code_bridge.py +641 -0
- crackerjack/agents/coordinator.py +600 -0
- crackerjack/agents/documentation_agent.py +520 -0
- crackerjack/agents/dry_agent.py +585 -0
- crackerjack/agents/enhanced_coordinator.py +279 -0
- crackerjack/agents/enhanced_proactive_agent.py +185 -0
- crackerjack/agents/error_middleware.py +53 -0
- crackerjack/agents/formatting_agent.py +230 -0
- crackerjack/agents/helpers/__init__.py +9 -0
- crackerjack/agents/helpers/performance/__init__.py +22 -0
- crackerjack/agents/helpers/performance/performance_ast_analyzer.py +357 -0
- crackerjack/agents/helpers/performance/performance_pattern_detector.py +909 -0
- crackerjack/agents/helpers/performance/performance_recommender.py +572 -0
- crackerjack/agents/helpers/refactoring/__init__.py +22 -0
- crackerjack/agents/helpers/refactoring/code_transformer.py +536 -0
- crackerjack/agents/helpers/refactoring/complexity_analyzer.py +344 -0
- crackerjack/agents/helpers/refactoring/dead_code_detector.py +437 -0
- crackerjack/agents/helpers/test_creation/__init__.py +19 -0
- crackerjack/agents/helpers/test_creation/test_ast_analyzer.py +216 -0
- crackerjack/agents/helpers/test_creation/test_coverage_analyzer.py +643 -0
- crackerjack/agents/helpers/test_creation/test_template_generator.py +1031 -0
- crackerjack/agents/import_optimization_agent.py +1181 -0
- crackerjack/agents/performance_agent.py +325 -0
- crackerjack/agents/performance_helpers.py +205 -0
- crackerjack/agents/proactive_agent.py +55 -0
- crackerjack/agents/refactoring_agent.py +511 -0
- crackerjack/agents/refactoring_helpers.py +247 -0
- crackerjack/agents/security_agent.py +793 -0
- crackerjack/agents/semantic_agent.py +479 -0
- crackerjack/agents/semantic_helpers.py +356 -0
- crackerjack/agents/test_creation_agent.py +570 -0
- crackerjack/agents/test_specialist_agent.py +526 -0
- crackerjack/agents/tracker.py +110 -0
- crackerjack/api.py +647 -0
- crackerjack/cli/README.md +394 -0
- crackerjack/cli/__init__.py +24 -0
- crackerjack/cli/cache_handlers.py +209 -0
- crackerjack/cli/cache_handlers_enhanced.py +680 -0
- crackerjack/cli/facade.py +162 -0
- crackerjack/cli/formatting.py +13 -0
- crackerjack/cli/handlers/__init__.py +85 -0
- crackerjack/cli/handlers/advanced.py +103 -0
- crackerjack/cli/handlers/ai_features.py +62 -0
- crackerjack/cli/handlers/analytics.py +479 -0
- crackerjack/cli/handlers/changelog.py +271 -0
- crackerjack/cli/handlers/config_handlers.py +16 -0
- crackerjack/cli/handlers/coverage.py +84 -0
- crackerjack/cli/handlers/documentation.py +280 -0
- crackerjack/cli/handlers/main_handlers.py +497 -0
- crackerjack/cli/handlers/monitoring.py +371 -0
- crackerjack/cli/handlers.py +700 -0
- crackerjack/cli/interactive.py +488 -0
- crackerjack/cli/options.py +1216 -0
- crackerjack/cli/semantic_handlers.py +292 -0
- crackerjack/cli/utils.py +19 -0
- crackerjack/cli/version.py +19 -0
- crackerjack/code_cleaner.py +1307 -0
- crackerjack/config/README.md +472 -0
- crackerjack/config/__init__.py +275 -0
- crackerjack/config/global_lock_config.py +207 -0
- crackerjack/config/hooks.py +390 -0
- crackerjack/config/loader.py +239 -0
- crackerjack/config/settings.py +141 -0
- crackerjack/config/tool_commands.py +331 -0
- crackerjack/core/README.md +393 -0
- crackerjack/core/__init__.py +0 -0
- crackerjack/core/async_workflow_orchestrator.py +738 -0
- crackerjack/core/autofix_coordinator.py +282 -0
- crackerjack/core/container.py +105 -0
- crackerjack/core/enhanced_container.py +583 -0
- crackerjack/core/file_lifecycle.py +472 -0
- crackerjack/core/performance.py +244 -0
- crackerjack/core/performance_monitor.py +357 -0
- crackerjack/core/phase_coordinator.py +1227 -0
- crackerjack/core/proactive_workflow.py +267 -0
- crackerjack/core/resource_manager.py +425 -0
- crackerjack/core/retry.py +275 -0
- crackerjack/core/service_watchdog.py +601 -0
- crackerjack/core/session_coordinator.py +239 -0
- crackerjack/core/timeout_manager.py +563 -0
- crackerjack/core/websocket_lifecycle.py +410 -0
- crackerjack/core/workflow/__init__.py +21 -0
- crackerjack/core/workflow/workflow_ai_coordinator.py +863 -0
- crackerjack/core/workflow/workflow_event_orchestrator.py +1107 -0
- crackerjack/core/workflow/workflow_issue_parser.py +714 -0
- crackerjack/core/workflow/workflow_phase_executor.py +1158 -0
- crackerjack/core/workflow/workflow_security_gates.py +400 -0
- crackerjack/core/workflow_orchestrator.py +2243 -0
- crackerjack/data/README.md +11 -0
- crackerjack/data/__init__.py +8 -0
- crackerjack/data/models.py +79 -0
- crackerjack/data/repository.py +210 -0
- crackerjack/decorators/README.md +180 -0
- crackerjack/decorators/__init__.py +35 -0
- crackerjack/decorators/error_handling.py +649 -0
- crackerjack/decorators/error_handling_decorators.py +334 -0
- crackerjack/decorators/helpers.py +58 -0
- crackerjack/decorators/patterns.py +281 -0
- crackerjack/decorators/utils.py +58 -0
- crackerjack/docs/INDEX.md +11 -0
- crackerjack/docs/README.md +11 -0
- crackerjack/docs/generated/api/API_REFERENCE.md +10895 -0
- crackerjack/docs/generated/api/CLI_REFERENCE.md +109 -0
- crackerjack/docs/generated/api/CROSS_REFERENCES.md +1755 -0
- crackerjack/docs/generated/api/PROTOCOLS.md +3 -0
- crackerjack/docs/generated/api/SERVICES.md +1252 -0
- crackerjack/documentation/README.md +11 -0
- crackerjack/documentation/__init__.py +31 -0
- crackerjack/documentation/ai_templates.py +756 -0
- crackerjack/documentation/dual_output_generator.py +767 -0
- crackerjack/documentation/mkdocs_integration.py +518 -0
- crackerjack/documentation/reference_generator.py +1065 -0
- crackerjack/dynamic_config.py +678 -0
- crackerjack/errors.py +378 -0
- crackerjack/events/README.md +11 -0
- crackerjack/events/__init__.py +16 -0
- crackerjack/events/telemetry.py +175 -0
- crackerjack/events/workflow_bus.py +346 -0
- crackerjack/exceptions/README.md +301 -0
- crackerjack/exceptions/__init__.py +5 -0
- crackerjack/exceptions/config.py +4 -0
- crackerjack/exceptions/tool_execution_error.py +245 -0
- crackerjack/executors/README.md +591 -0
- crackerjack/executors/__init__.py +13 -0
- crackerjack/executors/async_hook_executor.py +938 -0
- crackerjack/executors/cached_hook_executor.py +316 -0
- crackerjack/executors/hook_executor.py +1295 -0
- crackerjack/executors/hook_lock_manager.py +708 -0
- crackerjack/executors/individual_hook_executor.py +739 -0
- crackerjack/executors/lsp_aware_hook_executor.py +349 -0
- crackerjack/executors/progress_hook_executor.py +282 -0
- crackerjack/executors/tool_proxy.py +433 -0
- crackerjack/hooks/README.md +485 -0
- crackerjack/hooks/lsp_hook.py +93 -0
- crackerjack/intelligence/README.md +557 -0
- crackerjack/intelligence/__init__.py +37 -0
- crackerjack/intelligence/adaptive_learning.py +693 -0
- crackerjack/intelligence/agent_orchestrator.py +485 -0
- crackerjack/intelligence/agent_registry.py +377 -0
- crackerjack/intelligence/agent_selector.py +439 -0
- crackerjack/intelligence/integration.py +250 -0
- crackerjack/interactive.py +719 -0
- crackerjack/managers/README.md +369 -0
- crackerjack/managers/__init__.py +11 -0
- crackerjack/managers/async_hook_manager.py +135 -0
- crackerjack/managers/hook_manager.py +585 -0
- crackerjack/managers/publish_manager.py +631 -0
- crackerjack/managers/test_command_builder.py +391 -0
- crackerjack/managers/test_executor.py +474 -0
- crackerjack/managers/test_manager.py +1357 -0
- crackerjack/managers/test_progress.py +187 -0
- crackerjack/mcp/README.md +374 -0
- crackerjack/mcp/__init__.py +0 -0
- crackerjack/mcp/cache.py +352 -0
- crackerjack/mcp/client_runner.py +121 -0
- crackerjack/mcp/context.py +802 -0
- crackerjack/mcp/dashboard.py +657 -0
- crackerjack/mcp/enhanced_progress_monitor.py +493 -0
- crackerjack/mcp/file_monitor.py +394 -0
- crackerjack/mcp/progress_components.py +607 -0
- crackerjack/mcp/progress_monitor.py +1016 -0
- crackerjack/mcp/rate_limiter.py +336 -0
- crackerjack/mcp/server.py +24 -0
- crackerjack/mcp/server_core.py +526 -0
- crackerjack/mcp/service_watchdog.py +505 -0
- crackerjack/mcp/state.py +407 -0
- crackerjack/mcp/task_manager.py +259 -0
- crackerjack/mcp/tools/README.md +27 -0
- crackerjack/mcp/tools/__init__.py +19 -0
- crackerjack/mcp/tools/core_tools.py +469 -0
- crackerjack/mcp/tools/error_analyzer.py +283 -0
- crackerjack/mcp/tools/execution_tools.py +384 -0
- crackerjack/mcp/tools/intelligence_tool_registry.py +46 -0
- crackerjack/mcp/tools/intelligence_tools.py +264 -0
- crackerjack/mcp/tools/monitoring_tools.py +628 -0
- crackerjack/mcp/tools/proactive_tools.py +367 -0
- crackerjack/mcp/tools/progress_tools.py +222 -0
- crackerjack/mcp/tools/semantic_tools.py +584 -0
- crackerjack/mcp/tools/utility_tools.py +358 -0
- crackerjack/mcp/tools/workflow_executor.py +699 -0
- crackerjack/mcp/websocket/README.md +31 -0
- crackerjack/mcp/websocket/__init__.py +14 -0
- crackerjack/mcp/websocket/app.py +54 -0
- crackerjack/mcp/websocket/endpoints.py +492 -0
- crackerjack/mcp/websocket/event_bridge.py +188 -0
- crackerjack/mcp/websocket/jobs.py +406 -0
- crackerjack/mcp/websocket/monitoring/__init__.py +25 -0
- crackerjack/mcp/websocket/monitoring/api/__init__.py +19 -0
- crackerjack/mcp/websocket/monitoring/api/dependencies.py +141 -0
- crackerjack/mcp/websocket/monitoring/api/heatmap.py +154 -0
- crackerjack/mcp/websocket/monitoring/api/intelligence.py +199 -0
- crackerjack/mcp/websocket/monitoring/api/metrics.py +203 -0
- crackerjack/mcp/websocket/monitoring/api/telemetry.py +101 -0
- crackerjack/mcp/websocket/monitoring/dashboard.py +18 -0
- crackerjack/mcp/websocket/monitoring/factory.py +109 -0
- crackerjack/mcp/websocket/monitoring/filters.py +10 -0
- crackerjack/mcp/websocket/monitoring/metrics.py +64 -0
- crackerjack/mcp/websocket/monitoring/models.py +90 -0
- crackerjack/mcp/websocket/monitoring/utils.py +171 -0
- crackerjack/mcp/websocket/monitoring/websocket_manager.py +78 -0
- crackerjack/mcp/websocket/monitoring/websockets/__init__.py +17 -0
- crackerjack/mcp/websocket/monitoring/websockets/dependencies.py +126 -0
- crackerjack/mcp/websocket/monitoring/websockets/heatmap.py +176 -0
- crackerjack/mcp/websocket/monitoring/websockets/intelligence.py +291 -0
- crackerjack/mcp/websocket/monitoring/websockets/metrics.py +291 -0
- crackerjack/mcp/websocket/monitoring_endpoints.py +21 -0
- crackerjack/mcp/websocket/server.py +174 -0
- crackerjack/mcp/websocket/websocket_handler.py +276 -0
- crackerjack/mcp/websocket_server.py +10 -0
- crackerjack/models/README.md +308 -0
- crackerjack/models/__init__.py +40 -0
- crackerjack/models/config.py +730 -0
- crackerjack/models/config_adapter.py +265 -0
- crackerjack/models/protocols.py +1535 -0
- crackerjack/models/pydantic_models.py +320 -0
- crackerjack/models/qa_config.py +145 -0
- crackerjack/models/qa_results.py +134 -0
- crackerjack/models/resource_protocols.py +299 -0
- crackerjack/models/results.py +35 -0
- crackerjack/models/semantic_models.py +258 -0
- crackerjack/models/task.py +173 -0
- crackerjack/models/test_models.py +60 -0
- crackerjack/monitoring/README.md +11 -0
- crackerjack/monitoring/__init__.py +0 -0
- crackerjack/monitoring/ai_agent_watchdog.py +405 -0
- crackerjack/monitoring/metrics_collector.py +427 -0
- crackerjack/monitoring/regression_prevention.py +580 -0
- crackerjack/monitoring/websocket_server.py +406 -0
- crackerjack/orchestration/README.md +340 -0
- crackerjack/orchestration/__init__.py +43 -0
- crackerjack/orchestration/advanced_orchestrator.py +894 -0
- crackerjack/orchestration/cache/README.md +312 -0
- crackerjack/orchestration/cache/__init__.py +37 -0
- crackerjack/orchestration/cache/memory_cache.py +338 -0
- crackerjack/orchestration/cache/tool_proxy_cache.py +340 -0
- crackerjack/orchestration/config.py +297 -0
- crackerjack/orchestration/coverage_improvement.py +180 -0
- crackerjack/orchestration/execution_strategies.py +361 -0
- crackerjack/orchestration/hook_orchestrator.py +1398 -0
- crackerjack/orchestration/strategies/README.md +401 -0
- crackerjack/orchestration/strategies/__init__.py +39 -0
- crackerjack/orchestration/strategies/adaptive_strategy.py +630 -0
- crackerjack/orchestration/strategies/parallel_strategy.py +237 -0
- crackerjack/orchestration/strategies/sequential_strategy.py +299 -0
- crackerjack/orchestration/test_progress_streamer.py +647 -0
- crackerjack/plugins/README.md +11 -0
- crackerjack/plugins/__init__.py +15 -0
- crackerjack/plugins/base.py +200 -0
- crackerjack/plugins/hooks.py +254 -0
- crackerjack/plugins/loader.py +335 -0
- crackerjack/plugins/managers.py +264 -0
- crackerjack/py313.py +191 -0
- crackerjack/security/README.md +11 -0
- crackerjack/security/__init__.py +0 -0
- crackerjack/security/audit.py +197 -0
- crackerjack/services/README.md +374 -0
- crackerjack/services/__init__.py +9 -0
- crackerjack/services/ai/README.md +295 -0
- crackerjack/services/ai/__init__.py +7 -0
- crackerjack/services/ai/advanced_optimizer.py +878 -0
- crackerjack/services/ai/contextual_ai_assistant.py +542 -0
- crackerjack/services/ai/embeddings.py +444 -0
- crackerjack/services/ai/intelligent_commit.py +328 -0
- crackerjack/services/ai/predictive_analytics.py +510 -0
- crackerjack/services/anomaly_detector.py +392 -0
- crackerjack/services/api_extractor.py +617 -0
- crackerjack/services/backup_service.py +467 -0
- crackerjack/services/bounded_status_operations.py +530 -0
- crackerjack/services/cache.py +369 -0
- crackerjack/services/changelog_automation.py +399 -0
- crackerjack/services/command_execution_service.py +305 -0
- crackerjack/services/config_integrity.py +132 -0
- crackerjack/services/config_merge.py +546 -0
- crackerjack/services/config_service.py +198 -0
- crackerjack/services/config_template.py +493 -0
- crackerjack/services/coverage_badge_service.py +173 -0
- crackerjack/services/coverage_ratchet.py +381 -0
- crackerjack/services/debug.py +733 -0
- crackerjack/services/dependency_analyzer.py +460 -0
- crackerjack/services/dependency_monitor.py +622 -0
- crackerjack/services/documentation_generator.py +493 -0
- crackerjack/services/documentation_service.py +704 -0
- crackerjack/services/enhanced_filesystem.py +497 -0
- crackerjack/services/enterprise_optimizer.py +865 -0
- crackerjack/services/error_pattern_analyzer.py +676 -0
- crackerjack/services/file_filter.py +221 -0
- crackerjack/services/file_hasher.py +149 -0
- crackerjack/services/file_io_service.py +361 -0
- crackerjack/services/file_modifier.py +615 -0
- crackerjack/services/filesystem.py +381 -0
- crackerjack/services/git.py +422 -0
- crackerjack/services/health_metrics.py +615 -0
- crackerjack/services/heatmap_generator.py +744 -0
- crackerjack/services/incremental_executor.py +380 -0
- crackerjack/services/initialization.py +823 -0
- crackerjack/services/input_validator.py +668 -0
- crackerjack/services/intelligent_commit.py +327 -0
- crackerjack/services/log_manager.py +289 -0
- crackerjack/services/logging.py +228 -0
- crackerjack/services/lsp_client.py +628 -0
- crackerjack/services/memory_optimizer.py +414 -0
- crackerjack/services/metrics.py +587 -0
- crackerjack/services/monitoring/README.md +30 -0
- crackerjack/services/monitoring/__init__.py +9 -0
- crackerjack/services/monitoring/dependency_monitor.py +678 -0
- crackerjack/services/monitoring/error_pattern_analyzer.py +676 -0
- crackerjack/services/monitoring/health_metrics.py +716 -0
- crackerjack/services/monitoring/metrics.py +587 -0
- crackerjack/services/monitoring/performance_benchmarks.py +410 -0
- crackerjack/services/monitoring/performance_cache.py +388 -0
- crackerjack/services/monitoring/performance_monitor.py +569 -0
- crackerjack/services/parallel_executor.py +527 -0
- crackerjack/services/pattern_cache.py +333 -0
- crackerjack/services/pattern_detector.py +478 -0
- crackerjack/services/patterns/__init__.py +142 -0
- crackerjack/services/patterns/agents.py +107 -0
- crackerjack/services/patterns/code/__init__.py +15 -0
- crackerjack/services/patterns/code/detection.py +118 -0
- crackerjack/services/patterns/code/imports.py +107 -0
- crackerjack/services/patterns/code/paths.py +159 -0
- crackerjack/services/patterns/code/performance.py +119 -0
- crackerjack/services/patterns/code/replacement.py +36 -0
- crackerjack/services/patterns/core.py +212 -0
- crackerjack/services/patterns/documentation/__init__.py +14 -0
- crackerjack/services/patterns/documentation/badges_markdown.py +96 -0
- crackerjack/services/patterns/documentation/comments_blocks.py +83 -0
- crackerjack/services/patterns/documentation/docstrings.py +89 -0
- crackerjack/services/patterns/formatting.py +226 -0
- crackerjack/services/patterns/operations.py +339 -0
- crackerjack/services/patterns/security/__init__.py +23 -0
- crackerjack/services/patterns/security/code_injection.py +122 -0
- crackerjack/services/patterns/security/credentials.py +190 -0
- crackerjack/services/patterns/security/path_traversal.py +221 -0
- crackerjack/services/patterns/security/unsafe_operations.py +216 -0
- crackerjack/services/patterns/templates.py +62 -0
- crackerjack/services/patterns/testing/__init__.py +18 -0
- crackerjack/services/patterns/testing/error_patterns.py +107 -0
- crackerjack/services/patterns/testing/pytest_output.py +126 -0
- crackerjack/services/patterns/tool_output/__init__.py +16 -0
- crackerjack/services/patterns/tool_output/bandit.py +72 -0
- crackerjack/services/patterns/tool_output/other.py +97 -0
- crackerjack/services/patterns/tool_output/pyright.py +67 -0
- crackerjack/services/patterns/tool_output/ruff.py +44 -0
- crackerjack/services/patterns/url_sanitization.py +114 -0
- crackerjack/services/patterns/utilities.py +42 -0
- crackerjack/services/patterns/utils.py +339 -0
- crackerjack/services/patterns/validation.py +46 -0
- crackerjack/services/patterns/versioning.py +62 -0
- crackerjack/services/predictive_analytics.py +523 -0
- crackerjack/services/profiler.py +280 -0
- crackerjack/services/quality/README.md +415 -0
- crackerjack/services/quality/__init__.py +11 -0
- crackerjack/services/quality/anomaly_detector.py +392 -0
- crackerjack/services/quality/pattern_cache.py +333 -0
- crackerjack/services/quality/pattern_detector.py +479 -0
- crackerjack/services/quality/qa_orchestrator.py +491 -0
- crackerjack/services/quality/quality_baseline.py +395 -0
- crackerjack/services/quality/quality_baseline_enhanced.py +649 -0
- crackerjack/services/quality/quality_intelligence.py +949 -0
- crackerjack/services/regex_patterns.py +58 -0
- crackerjack/services/regex_utils.py +483 -0
- crackerjack/services/secure_path_utils.py +524 -0
- crackerjack/services/secure_status_formatter.py +450 -0
- crackerjack/services/secure_subprocess.py +635 -0
- crackerjack/services/security.py +239 -0
- crackerjack/services/security_logger.py +495 -0
- crackerjack/services/server_manager.py +411 -0
- crackerjack/services/smart_scheduling.py +167 -0
- crackerjack/services/status_authentication.py +460 -0
- crackerjack/services/status_security_manager.py +315 -0
- crackerjack/services/terminal_utils.py +0 -0
- crackerjack/services/thread_safe_status_collector.py +441 -0
- crackerjack/services/tool_filter.py +368 -0
- crackerjack/services/tool_version_service.py +43 -0
- crackerjack/services/unified_config.py +115 -0
- crackerjack/services/validation_rate_limiter.py +220 -0
- crackerjack/services/vector_store.py +689 -0
- crackerjack/services/version_analyzer.py +461 -0
- crackerjack/services/version_checker.py +223 -0
- crackerjack/services/websocket_resource_limiter.py +438 -0
- crackerjack/services/zuban_lsp_service.py +391 -0
- crackerjack/slash_commands/README.md +11 -0
- crackerjack/slash_commands/__init__.py +59 -0
- crackerjack/slash_commands/init.md +112 -0
- crackerjack/slash_commands/run.md +197 -0
- crackerjack/slash_commands/status.md +127 -0
- crackerjack/tools/README.md +11 -0
- crackerjack/tools/__init__.py +30 -0
- crackerjack/tools/_git_utils.py +105 -0
- crackerjack/tools/check_added_large_files.py +139 -0
- crackerjack/tools/check_ast.py +105 -0
- crackerjack/tools/check_json.py +103 -0
- crackerjack/tools/check_jsonschema.py +297 -0
- crackerjack/tools/check_toml.py +103 -0
- crackerjack/tools/check_yaml.py +110 -0
- crackerjack/tools/codespell_wrapper.py +72 -0
- crackerjack/tools/end_of_file_fixer.py +202 -0
- crackerjack/tools/format_json.py +128 -0
- crackerjack/tools/mdformat_wrapper.py +114 -0
- crackerjack/tools/trailing_whitespace.py +198 -0
- crackerjack/tools/validate_input_validator_patterns.py +236 -0
- crackerjack/tools/validate_regex_patterns.py +188 -0
- crackerjack/ui/README.md +11 -0
- crackerjack/ui/__init__.py +1 -0
- crackerjack/ui/dashboard_renderer.py +28 -0
- crackerjack/ui/templates/README.md +11 -0
- crackerjack/utils/console_utils.py +13 -0
- crackerjack/utils/dependency_guard.py +230 -0
- crackerjack/utils/retry_utils.py +275 -0
- crackerjack/workflows/README.md +590 -0
- crackerjack/workflows/__init__.py +46 -0
- crackerjack/workflows/actions.py +811 -0
- crackerjack/workflows/auto_fix.py +444 -0
- crackerjack/workflows/container_builder.py +499 -0
- crackerjack/workflows/definitions.py +443 -0
- crackerjack/workflows/engine.py +177 -0
- crackerjack/workflows/event_bridge.py +242 -0
- crackerjack-0.45.2.dist-info/METADATA +1678 -0
- crackerjack-0.45.2.dist-info/RECORD +478 -0
- {crackerjack-0.18.2.dist-info → crackerjack-0.45.2.dist-info}/WHEEL +1 -1
- crackerjack-0.45.2.dist-info/entry_points.txt +2 -0
- crackerjack/.gitignore +0 -14
- crackerjack/.libcst.codemod.yaml +0 -18
- crackerjack/.pdm.toml +0 -1
- crackerjack/.pre-commit-config.yaml +0 -91
- crackerjack/.pytest_cache/.gitignore +0 -2
- crackerjack/.pytest_cache/CACHEDIR.TAG +0 -4
- crackerjack/.pytest_cache/README.md +0 -8
- crackerjack/.pytest_cache/v/cache/nodeids +0 -1
- crackerjack/.pytest_cache/v/cache/stepwise +0 -1
- crackerjack/.ruff_cache/.gitignore +0 -1
- crackerjack/.ruff_cache/0.1.11/3256171999636029978 +0 -0
- crackerjack/.ruff_cache/0.1.14/602324811142551221 +0 -0
- crackerjack/.ruff_cache/0.1.4/10355199064880463147 +0 -0
- crackerjack/.ruff_cache/0.1.6/15140459877605758699 +0 -0
- crackerjack/.ruff_cache/0.1.7/1790508110482614856 +0 -0
- crackerjack/.ruff_cache/0.1.9/17041001205004563469 +0 -0
- crackerjack/.ruff_cache/0.11.2/4070660268492669020 +0 -0
- crackerjack/.ruff_cache/0.11.3/9818742842212983150 +0 -0
- crackerjack/.ruff_cache/0.11.4/9818742842212983150 +0 -0
- crackerjack/.ruff_cache/0.11.6/3557596832929915217 +0 -0
- crackerjack/.ruff_cache/0.11.7/10386934055395314831 +0 -0
- crackerjack/.ruff_cache/0.11.7/3557596832929915217 +0 -0
- crackerjack/.ruff_cache/0.11.8/530407680854991027 +0 -0
- crackerjack/.ruff_cache/0.2.0/10047773857155985907 +0 -0
- crackerjack/.ruff_cache/0.2.1/8522267973936635051 +0 -0
- crackerjack/.ruff_cache/0.2.2/18053836298936336950 +0 -0
- crackerjack/.ruff_cache/0.3.0/12548816621480535786 +0 -0
- crackerjack/.ruff_cache/0.3.3/11081883392474770722 +0 -0
- crackerjack/.ruff_cache/0.3.4/676973378459347183 +0 -0
- crackerjack/.ruff_cache/0.3.5/16311176246009842383 +0 -0
- crackerjack/.ruff_cache/0.5.7/1493622539551733492 +0 -0
- crackerjack/.ruff_cache/0.5.7/6231957614044513175 +0 -0
- crackerjack/.ruff_cache/0.5.7/9932762556785938009 +0 -0
- crackerjack/.ruff_cache/0.6.0/11982804814124138945 +0 -0
- crackerjack/.ruff_cache/0.6.0/12055761203849489982 +0 -0
- crackerjack/.ruff_cache/0.6.2/1206147804896221174 +0 -0
- crackerjack/.ruff_cache/0.6.4/1206147804896221174 +0 -0
- crackerjack/.ruff_cache/0.6.5/1206147804896221174 +0 -0
- crackerjack/.ruff_cache/0.6.7/3657366982708166874 +0 -0
- crackerjack/.ruff_cache/0.6.9/285614542852677309 +0 -0
- crackerjack/.ruff_cache/0.7.1/1024065805990144819 +0 -0
- crackerjack/.ruff_cache/0.7.1/285614542852677309 +0 -0
- crackerjack/.ruff_cache/0.7.3/16061516852537040135 +0 -0
- crackerjack/.ruff_cache/0.8.4/16354268377385700367 +0 -0
- crackerjack/.ruff_cache/0.9.10/12813592349865671909 +0 -0
- crackerjack/.ruff_cache/0.9.10/923908772239632759 +0 -0
- crackerjack/.ruff_cache/0.9.3/13948373885254993391 +0 -0
- crackerjack/.ruff_cache/0.9.9/12813592349865671909 +0 -0
- crackerjack/.ruff_cache/0.9.9/8843823720003377982 +0 -0
- crackerjack/.ruff_cache/CACHEDIR.TAG +0 -1
- crackerjack/crackerjack.py +0 -855
- crackerjack/pyproject.toml +0 -214
- crackerjack-0.18.2.dist-info/METADATA +0 -420
- crackerjack-0.18.2.dist-info/RECORD +0 -59
- crackerjack-0.18.2.dist-info/entry_points.txt +0 -4
- {crackerjack-0.18.2.dist-info → crackerjack-0.45.2.dist-info}/licenses/LICENSE +0 -0
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
______________________________________________________________________
|
|
2
|
+
|
|
3
|
+
## description: Run crackerjack with AI-powered auto-fixing using intelligent session integration. Automatically tries enhanced session-mgmt execution first, then gracefully falls back to standard crackerjack execution if unavailable. Perfect for comprehensive code quality enforcement with zero configuration required.
|
|
4
|
+
|
|
5
|
+
# /run
|
|
6
|
+
|
|
7
|
+
Intelligent crackerjack runner that tries session-mgmt:crackerjack-run first with fallback to crackerjack:run for optimal integration with session management systems.
|
|
8
|
+
|
|
9
|
+
## Usage
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
/run [--debug]
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
### Arguments
|
|
16
|
+
|
|
17
|
+
- `--debug`: Run in foreground with debug output visible (for troubleshooting)
|
|
18
|
+
- Shows all crackerjack command output directly to console
|
|
19
|
+
- Runs synchronously instead of in background
|
|
20
|
+
- Useful for debugging issues with hooks, tests, or AI fixes
|
|
21
|
+
- No need for progress monitoring - output is immediate
|
|
22
|
+
|
|
23
|
+
## Description
|
|
24
|
+
|
|
25
|
+
This slash command provides intelligent crackerjack execution with automatic fallback:
|
|
26
|
+
|
|
27
|
+
1. **Primary**: Attempts `session-mgmt:crackerjack-run` for enhanced session integration
|
|
28
|
+
1. **Fallback**: Uses `crackerjack:run` if session-mgmt is unavailable
|
|
29
|
+
|
|
30
|
+
Both execution paths use AI agent mode for autonomous code quality enforcement:
|
|
31
|
+
|
|
32
|
+
- `--ai-fix`: AI auto-fixing mode for structured error output and intelligent fixing
|
|
33
|
+
- `--test`: Run tests with comprehensive test coverage
|
|
34
|
+
- `--verbose`: Show detailed AI decision-making and execution details
|
|
35
|
+
|
|
36
|
+
## 💡 Agent Recommendation
|
|
37
|
+
|
|
38
|
+
**For optimal results, use the `crackerjack-architect` agent alongside `/run`:**
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
# 1. Plan with crackerjack-architect first
|
|
42
|
+
Task tool with subagent_type="crackerjack-architect" for feature planning
|
|
43
|
+
|
|
44
|
+
# 2. Run crackerjack for quality enforcement
|
|
45
|
+
/run
|
|
46
|
+
|
|
47
|
+
# 3. Use crackerjack-architect for any remaining issues
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
**Why?** The crackerjack-architect agent ensures code follows crackerjack patterns from the start, reducing the number of iterations needed for `/run` to achieve full compliance.
|
|
51
|
+
|
|
52
|
+
## What It Does
|
|
53
|
+
|
|
54
|
+
**Smart Execution Strategy:**
|
|
55
|
+
|
|
56
|
+
### 1. 🧠 **Session-Mgmt Integration (Primary)**
|
|
57
|
+
|
|
58
|
+
When `session-mgmt:crackerjack-run` is available:
|
|
59
|
+
|
|
60
|
+
- **Enhanced Context**: Leverages session history for better AI decisions
|
|
61
|
+
- **Progress Continuity**: Builds on previous session learnings
|
|
62
|
+
- **Memory Integration**: Remembers past error patterns and fixes
|
|
63
|
+
- **Quality Trends**: Uses historical quality metrics for optimization
|
|
64
|
+
|
|
65
|
+
### 2. 🔄 **Standard Execution (Fallback)**
|
|
66
|
+
|
|
67
|
+
When session-mgmt is unavailable, falls back to `crackerjack:run`:
|
|
68
|
+
|
|
69
|
+
- **Full Functionality**: Complete AI auto-fixing capabilities
|
|
70
|
+
- **Zero Degradation**: All quality features remain available
|
|
71
|
+
- **Seamless Transition**: User experience unchanged
|
|
72
|
+
|
|
73
|
+
### 3. ⚡ **Iterative AI-Powered Auto-Fixing Process (up to 10 iterations)**
|
|
74
|
+
|
|
75
|
+
Both execution paths follow the same comprehensive workflow:
|
|
76
|
+
|
|
77
|
+
#### Pre-Execution Safety Checks:
|
|
78
|
+
|
|
79
|
+
0. 🔍 **Comprehensive Status Check** (automatic conflict prevention)
|
|
80
|
+
|
|
81
|
+
- Check for active crackerjack jobs in the same project to prevent file conflicts
|
|
82
|
+
- Verify MCP and WebSocket server health status
|
|
83
|
+
- Identify beneficial cleanup opportunities (stale temp files, old debug logs)
|
|
84
|
+
- Auto-start missing services if needed
|
|
85
|
+
- Report resource usage and system health
|
|
86
|
+
|
|
87
|
+
#### Each Iteration Cycle:
|
|
88
|
+
|
|
89
|
+
1. ⚡ **Fast Hooks** (formatting & basic fixes)
|
|
90
|
+
|
|
91
|
+
- Run `trailing-whitespace`, `end-of-file-fixer`, `ruff-format`, `ruff-check`, `gitleaks`
|
|
92
|
+
- If any fail → **Retry fast hooks once** (formatting fixes often resolve downstream issues)
|
|
93
|
+
- Only proceed when fast hooks pass or have been retried
|
|
94
|
+
|
|
95
|
+
1. 🧪 **Full Test Suite**
|
|
96
|
+
|
|
97
|
+
- Run ALL tests, collect ALL test failures (don't stop on first failure)
|
|
98
|
+
- Gather complete list of failing tests with error details
|
|
99
|
+
|
|
100
|
+
1. 🔍 **Comprehensive Hooks** (type checking, security, complexity)
|
|
101
|
+
|
|
102
|
+
- Run `pyright`, `bandit`, `vulture`, `refurb`, `creosote`, `complexipy`
|
|
103
|
+
- Collect ALL hook failures (don't stop on first failure)
|
|
104
|
+
- Gather complete list of quality issues
|
|
105
|
+
|
|
106
|
+
1. 🤖 **AI Analysis & Batch Fixing**
|
|
107
|
+
|
|
108
|
+
- Analyze ALL collected failures (tests + comprehensive hooks)
|
|
109
|
+
- Apply intelligent fixes for ALL issues in one coordinated pass:
|
|
110
|
+
- **Type Errors**: Adds missing annotations, fixes type mismatches
|
|
111
|
+
- **Security Issues**: Removes hardcoded paths, fixes vulnerabilities
|
|
112
|
+
- **Dead Code**: Removes unused imports, variables, functions
|
|
113
|
+
- **Test Failures**: Fixes missing fixtures, import errors, assertions
|
|
114
|
+
- **Code Quality**: Applies refactoring, reduces complexity
|
|
115
|
+
- **Hook Failures**: All formatting, linting, style issues
|
|
116
|
+
|
|
117
|
+
1. 🔄 **Next Full Iteration**: Repeat entire cycle until ALL checks pass or max iterations (10) reached
|
|
118
|
+
|
|
119
|
+
#### Final Result:
|
|
120
|
+
|
|
121
|
+
🎉 **Perfect Code Quality**: All hooks pass, all tests pass, zero manual intervention!
|
|
122
|
+
|
|
123
|
+
## Example
|
|
124
|
+
|
|
125
|
+
When an AI assistant uses this command:
|
|
126
|
+
|
|
127
|
+
```
|
|
128
|
+
User: Can you fix all the code quality issues in this project?
|
|
129
|
+
AI: I'll use the /run command to automatically fix all code quality issues with intelligent session integration.
|
|
130
|
+
|
|
131
|
+
/run
|
|
132
|
+
|
|
133
|
+
[AI first tries: session-mgmt:crackerjack-run]
|
|
134
|
+
✅ Session-mgmt available - using enhanced execution mode
|
|
135
|
+
|
|
136
|
+
[Enhanced execution with session context: python -m crackerjack --ai-fix --test --verbose]
|
|
137
|
+
|
|
138
|
+
The crackerjack AI agent completed successfully after 2 iterations! Here's what was automatically fixed:
|
|
139
|
+
|
|
140
|
+
**Session Context Benefits**:
|
|
141
|
+
- Leveraged previous session learnings about this codebase
|
|
142
|
+
- Applied remembered fix patterns from similar issues
|
|
143
|
+
- Optimized execution based on historical performance data
|
|
144
|
+
|
|
145
|
+
**Iteration 1**: Fixed formatting and imports
|
|
146
|
+
- Reformatted 5 files with proper indentation
|
|
147
|
+
- Organized imports in 3 modules (using cached preferences)
|
|
148
|
+
- Removed trailing whitespace
|
|
149
|
+
|
|
150
|
+
**Iteration 2**: Final quality improvements
|
|
151
|
+
- Added type hints to 4 functions (improved from previous 7 due to session learning)
|
|
152
|
+
- All 42 tests now pass with 47% coverage
|
|
153
|
+
|
|
154
|
+
🎉 **Result**: Perfect code quality achieved with enhanced session integration!
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
## Benefits
|
|
158
|
+
|
|
159
|
+
- **Smart Integration**: Automatically leverages session-mgmt when available
|
|
160
|
+
- **Graceful Fallback**: No functionality loss when session-mgmt unavailable
|
|
161
|
+
- **Enhanced Learning**: Session context improves AI decision quality
|
|
162
|
+
- **Zero Configuration**: AI doesn't need to remember complex integration logic
|
|
163
|
+
- **Optimal Performance**: Uses best available execution method automatically
|
|
164
|
+
- **Consistent Results**: Same high-quality outcome regardless of execution path
|
|
165
|
+
|
|
166
|
+
## Implementation
|
|
167
|
+
|
|
168
|
+
**CRITICAL**: When an AI assistant encounters `/run`, it MUST implement the intelligent fallback strategy using MCP server tools.
|
|
169
|
+
|
|
170
|
+
### Execution Strategy
|
|
171
|
+
|
|
172
|
+
```python
|
|
173
|
+
# 1. Try session-mgmt integration first
|
|
174
|
+
try:
|
|
175
|
+
job_result = session_mgmt_crackerjack_run()
|
|
176
|
+
job_id = job_result["job_id"]
|
|
177
|
+
print("✅ Using session-mgmt enhanced execution")
|
|
178
|
+
except (ConnectionError, ServiceUnavailable, ToolNotFound):
|
|
179
|
+
# 2. Fallback to standard crackerjack execution
|
|
180
|
+
job_result = execute_crackerjack("/crackerjack:run")
|
|
181
|
+
job_id = job_result["job_id"]
|
|
182
|
+
print("⚡ Using standard crackerjack execution")
|
|
183
|
+
|
|
184
|
+
# For debugging, append --debug flag to either execution path:
|
|
185
|
+
# session_mgmt_crackerjack_run("--debug") or execute_crackerjack("/crackerjack:run --debug")
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
### Key Features
|
|
189
|
+
|
|
190
|
+
- **Automatic Detection**: No manual configuration needed
|
|
191
|
+
- **Seamless Fallback**: User unaware of which execution path used
|
|
192
|
+
- **Progress Tracking**: Real-time progress updates via MCP tools for both paths
|
|
193
|
+
- **Enhanced Context**: Session-mgmt path leverages conversation history
|
|
194
|
+
- **Background Execution**: Both paths run in background, return job_id immediately
|
|
195
|
+
- **Debug Support**: --debug flag works with both execution methods
|
|
196
|
+
|
|
197
|
+
**Note**: This command provides the best of both worlds - enhanced session integration when available, with full functionality guaranteed through intelligent fallback.
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
______________________________________________________________________
|
|
2
|
+
|
|
3
|
+
## description: Check comprehensive Crackerjack system status including running jobs, MCP server health, WebSocket connections, and progress monitoring with real-time updates.
|
|
4
|
+
|
|
5
|
+
# /crackerjack:status - Comprehensive System Status
|
|
6
|
+
|
|
7
|
+
Check the comprehensive status of the Crackerjack system including running jobs, MCP server health, WebSocket server status, and progress monitoring. This command provides real-time status from all system components.
|
|
8
|
+
|
|
9
|
+
## Usage
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
/crackerjack:status
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## What This Command Does
|
|
16
|
+
|
|
17
|
+
1. **MCP Server Status** - Shows running processes, health, and resource usage
|
|
18
|
+
1. **WebSocket Server Status** - Displays connection status, port, and active monitoring
|
|
19
|
+
1. **Job Management** - Lists all active, completed, and failed jobs with detailed progress
|
|
20
|
+
1. **Progress Tracking** - Shows iteration counts, stage completion, and error resolution metrics
|
|
21
|
+
1. **System Health** - Comprehensive monitoring of all Crackerjack services and components
|
|
22
|
+
1. **Resource Usage** - Memory, CPU, and temporary file statistics
|
|
23
|
+
|
|
24
|
+
## Example Output
|
|
25
|
+
|
|
26
|
+
The command will show information like:
|
|
27
|
+
|
|
28
|
+
```json
|
|
29
|
+
{
|
|
30
|
+
"services": {
|
|
31
|
+
"mcp_server": {
|
|
32
|
+
"running": true,
|
|
33
|
+
"processes": [
|
|
34
|
+
{
|
|
35
|
+
"pid": 12345,
|
|
36
|
+
"cpu": "0.5%",
|
|
37
|
+
"mem": "0.8%",
|
|
38
|
+
"command": "python -m crackerjack --start-mcp-server"
|
|
39
|
+
}
|
|
40
|
+
]
|
|
41
|
+
},
|
|
42
|
+
"websocket_server": {
|
|
43
|
+
"running": true,
|
|
44
|
+
"port": 8675,
|
|
45
|
+
"processes": [
|
|
46
|
+
{
|
|
47
|
+
"pid": 12346,
|
|
48
|
+
"cpu": "0.2%",
|
|
49
|
+
"mem": "0.6%"
|
|
50
|
+
}
|
|
51
|
+
]
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
"jobs": {
|
|
55
|
+
"active_count": 2,
|
|
56
|
+
"completed_count": 1,
|
|
57
|
+
"failed_count": 0,
|
|
58
|
+
"details": [
|
|
59
|
+
{
|
|
60
|
+
"job_id": "abc123-def456-ghi789",
|
|
61
|
+
"status": "running",
|
|
62
|
+
"iteration": 3,
|
|
63
|
+
"max_iterations": 10,
|
|
64
|
+
"current_stage": "comprehensive_hooks",
|
|
65
|
+
"overall_progress": 30,
|
|
66
|
+
"stage_progress": 75,
|
|
67
|
+
"message": "Running pyright type checking...",
|
|
68
|
+
"error_counts": {
|
|
69
|
+
"hook_errors": 0,
|
|
70
|
+
"test_failures": 2,
|
|
71
|
+
"total": 13
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
]
|
|
75
|
+
},
|
|
76
|
+
"server_stats": {
|
|
77
|
+
"resource_usage": {
|
|
78
|
+
"temp_files_count": 5,
|
|
79
|
+
"progress_dir": "/tmp/crackerjack-mcp-progress"
|
|
80
|
+
},
|
|
81
|
+
"rate_limiting": {
|
|
82
|
+
"requests_per_minute": 60,
|
|
83
|
+
"current_requests": 2,
|
|
84
|
+
"can_execute": true
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
## When to Use
|
|
91
|
+
|
|
92
|
+
- **Before starting work** - Check if any jobs are already running
|
|
93
|
+
- **During development** - Monitor progress of long-running jobs
|
|
94
|
+
- **Troubleshooting** - Verify services are running correctly
|
|
95
|
+
- **Planning** - See completion status before starting new work
|
|
96
|
+
|
|
97
|
+
## Technical Implementation
|
|
98
|
+
|
|
99
|
+
This command uses the `get_comprehensive_status` MCP tool which:
|
|
100
|
+
|
|
101
|
+
- **Process Discovery**: Uses `ps aux` to find running Crackerjack processes
|
|
102
|
+
- **Progress File Analysis**: Reads job progress from `/tmp/crackerjack-mcp-progress/job-*.json` files
|
|
103
|
+
- **WebSocket Health**: Checks port availability and connection status
|
|
104
|
+
- **Resource Monitoring**: Tracks temporary files, memory usage, and rate limiting
|
|
105
|
+
- **State Management**: Integrates with MCP server state for session tracking
|
|
106
|
+
|
|
107
|
+
## Integration
|
|
108
|
+
|
|
109
|
+
This command integrates with:
|
|
110
|
+
|
|
111
|
+
- **WebSocket Progress Server** (localhost:8675)
|
|
112
|
+
- **MCP Server** progress and state files
|
|
113
|
+
- **Service Watchdog** monitoring
|
|
114
|
+
- **TUI Monitor** data sources
|
|
115
|
+
- **Server Manager** process discovery
|
|
116
|
+
|
|
117
|
+
The status information comes from the same sources that power the TUI monitor and web interface, ensuring consistent data across all interfaces.
|
|
118
|
+
|
|
119
|
+
## Usage in Claude Code
|
|
120
|
+
|
|
121
|
+
When using this command in Claude Code, the AI agent will:
|
|
122
|
+
|
|
123
|
+
1. Call the `get_comprehensive_status` MCP tool
|
|
124
|
+
1. Parse the JSON response for relevant information
|
|
125
|
+
1. Present a formatted summary of system health
|
|
126
|
+
1. Highlight any issues requiring attention
|
|
127
|
+
1. Suggest next actions based on current status
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
> Crackerjack Docs: [Main](<../../README.md>) | [Crackerjack Package](<../README.md>) | [Tools](<./README.md>)
|
|
2
|
+
|
|
3
|
+
# Package Tools
|
|
4
|
+
|
|
5
|
+
Internal helper tools used within the package (distinct from top-level `tools/`).
|
|
6
|
+
|
|
7
|
+
## Related
|
|
8
|
+
|
|
9
|
+
- [Crackerjack Package](<../README.md>) - Parent package
|
|
10
|
+
- [MCP](<../mcp/README.md>) - MCP tool implementations
|
|
11
|
+
- [Services](<../services/README.md>) - Service layer using these tools
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"""Native tool implementations for crackerjack (Phase 8).
|
|
2
|
+
|
|
3
|
+
This package contains Python implementations of quality checking tools,
|
|
4
|
+
providing direct invocation without pre-commit wrapper overhead.
|
|
5
|
+
|
|
6
|
+
Native tools replace pre-commit-hooks utilities with equivalent functionality:
|
|
7
|
+
- trailing_whitespace: Remove trailing whitespace
|
|
8
|
+
- end_of_file_fixer: Ensure files end with newline
|
|
9
|
+
- check_yaml: Validate YAML syntax
|
|
10
|
+
- check_toml: Validate TOML syntax
|
|
11
|
+
- check_json: Validate JSON syntax
|
|
12
|
+
- check_ast: Validate Python AST syntax
|
|
13
|
+
- format_json: Format JSON files
|
|
14
|
+
- check_jsonschema: Validate JSON files against schemas
|
|
15
|
+
- check_added_large_files: Warn on large file additions
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
from __future__ import annotations
|
|
19
|
+
|
|
20
|
+
__all__ = [
|
|
21
|
+
"trailing_whitespace",
|
|
22
|
+
"end_of_file_fixer",
|
|
23
|
+
"check_yaml",
|
|
24
|
+
"check_toml",
|
|
25
|
+
"check_json",
|
|
26
|
+
"check_ast",
|
|
27
|
+
"format_json",
|
|
28
|
+
"check_jsonschema",
|
|
29
|
+
"check_added_large_files",
|
|
30
|
+
]
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
"""Git-aware file discovery utilities for native tools.
|
|
2
|
+
|
|
3
|
+
This module provides utilities for discovering files while respecting .gitignore
|
|
4
|
+
patterns. It uses `git ls-files` to automatically handle gitignore compliance,
|
|
5
|
+
making crackerjack behave identically to pre-commit.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from __future__ import annotations
|
|
9
|
+
|
|
10
|
+
import subprocess
|
|
11
|
+
from pathlib import Path
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def get_git_tracked_files(pattern: str | None = None) -> list[Path]:
|
|
15
|
+
"""Get list of files tracked by git, optionally filtered by pattern.
|
|
16
|
+
|
|
17
|
+
This function uses `git ls-files` which automatically respects .gitignore
|
|
18
|
+
patterns. This is the industry-standard approach used by pre-commit and
|
|
19
|
+
ensures only git-tracked files are processed.
|
|
20
|
+
|
|
21
|
+
Args:
|
|
22
|
+
pattern: Optional glob pattern to filter files (e.g., "*.py", "*.yaml")
|
|
23
|
+
If None, returns all tracked files.
|
|
24
|
+
|
|
25
|
+
Returns:
|
|
26
|
+
List of Path objects for git-tracked files matching the pattern.
|
|
27
|
+
Falls back to empty list if not in a git repository.
|
|
28
|
+
|
|
29
|
+
Example:
|
|
30
|
+
>>> # Get all tracked Python files
|
|
31
|
+
>>> python_files = get_git_tracked_files("*.py")
|
|
32
|
+
>>> # Get all tracked YAML files
|
|
33
|
+
>>> yaml_files = get_git_tracked_files("*.yaml")
|
|
34
|
+
"""
|
|
35
|
+
try:
|
|
36
|
+
cmd = ["git", "ls-files"]
|
|
37
|
+
if pattern:
|
|
38
|
+
cmd.append(pattern)
|
|
39
|
+
|
|
40
|
+
result = subprocess.run(
|
|
41
|
+
cmd,
|
|
42
|
+
capture_output=True,
|
|
43
|
+
text=True,
|
|
44
|
+
check=True,
|
|
45
|
+
cwd=Path.cwd(),
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
# Filter to only include files that actually exist on disk
|
|
49
|
+
# (git ls-files can include deleted files still in the index)
|
|
50
|
+
return [
|
|
51
|
+
Path(line.strip())
|
|
52
|
+
for line in result.stdout.splitlines()
|
|
53
|
+
if line.strip() and Path(line.strip()).exists()
|
|
54
|
+
]
|
|
55
|
+
|
|
56
|
+
except subprocess.CalledProcessError:
|
|
57
|
+
# Git command failed (not in a git repo, etc.)
|
|
58
|
+
return []
|
|
59
|
+
except FileNotFoundError:
|
|
60
|
+
# Git not available
|
|
61
|
+
return []
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
def get_files_by_extension(extensions: list[str], use_git: bool = True) -> list[Path]:
|
|
65
|
+
"""Get files with specified extensions, respecting git if available.
|
|
66
|
+
|
|
67
|
+
Args:
|
|
68
|
+
extensions: List of file extensions to match (e.g., [".py", ".yaml"])
|
|
69
|
+
use_git: If True (default), use git ls-files when in a git repo.
|
|
70
|
+
If False, use Path.rglob() for all files.
|
|
71
|
+
|
|
72
|
+
Returns:
|
|
73
|
+
List of Path objects matching the extensions.
|
|
74
|
+
Automatically respects .gitignore when use_git=True.
|
|
75
|
+
|
|
76
|
+
Example:
|
|
77
|
+
>>> # Get Python files (git-aware)
|
|
78
|
+
>>> py_files = get_files_by_extension([".py"])
|
|
79
|
+
>>> # Get YAML files (all files, ignore git)
|
|
80
|
+
>>> yaml_files = get_files_by_extension([".yaml", ".yml"], use_git=False)
|
|
81
|
+
"""
|
|
82
|
+
if not use_git:
|
|
83
|
+
# Fallback to rglob for all files
|
|
84
|
+
files = []
|
|
85
|
+
for ext in extensions:
|
|
86
|
+
files.extend(Path.cwd().rglob(f"*{ext}"))
|
|
87
|
+
return [f for f in files if f.is_file()]
|
|
88
|
+
|
|
89
|
+
# Try git-aware discovery first
|
|
90
|
+
files = []
|
|
91
|
+
for ext in extensions:
|
|
92
|
+
# git ls-files pattern: *.ext
|
|
93
|
+
pattern = f"*{ext}"
|
|
94
|
+
git_files = get_git_tracked_files(pattern)
|
|
95
|
+
if git_files:
|
|
96
|
+
files.extend(git_files)
|
|
97
|
+
|
|
98
|
+
if files:
|
|
99
|
+
return files
|
|
100
|
+
|
|
101
|
+
# Fallback to rglob if git unavailable
|
|
102
|
+
result = []
|
|
103
|
+
for ext in extensions:
|
|
104
|
+
result.extend(Path.cwd().rglob(f"*{ext}"))
|
|
105
|
+
return [f for f in result if f.is_file()]
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
"""Check for large files added to git repository.
|
|
2
|
+
|
|
3
|
+
This tool is a native Python implementation replacing pre-commit's
|
|
4
|
+
check-added-large-files hook. It warns about files exceeding a size threshold.
|
|
5
|
+
|
|
6
|
+
Usage:
|
|
7
|
+
python -m crackerjack.tools.check_added_large_files [files...]
|
|
8
|
+
|
|
9
|
+
Exit Codes:
|
|
10
|
+
0: No large files found
|
|
11
|
+
1: One or more large files detected
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
from __future__ import annotations
|
|
15
|
+
|
|
16
|
+
import argparse
|
|
17
|
+
import sys
|
|
18
|
+
from pathlib import Path
|
|
19
|
+
|
|
20
|
+
from crackerjack.tools._git_utils import get_git_tracked_files
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def get_file_size(file_path: Path) -> int:
|
|
24
|
+
"""Get file size in bytes.
|
|
25
|
+
|
|
26
|
+
Args:
|
|
27
|
+
file_path: Path to file
|
|
28
|
+
|
|
29
|
+
Returns:
|
|
30
|
+
File size in bytes, or 0 if file doesn't exist
|
|
31
|
+
"""
|
|
32
|
+
try:
|
|
33
|
+
return file_path.stat().st_size
|
|
34
|
+
except (FileNotFoundError, OSError):
|
|
35
|
+
return 0
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def format_size(size_bytes: int | float) -> str:
|
|
39
|
+
"""Format file size in human-readable format.
|
|
40
|
+
|
|
41
|
+
Args:
|
|
42
|
+
size_bytes: Size in bytes
|
|
43
|
+
|
|
44
|
+
Returns:
|
|
45
|
+
Human-readable size string (e.g., "1.5 MB")
|
|
46
|
+
"""
|
|
47
|
+
size: float = float(size_bytes)
|
|
48
|
+
for unit in ("B", "KB", "MB", "GB"):
|
|
49
|
+
if size < 1024.0:
|
|
50
|
+
return f"{size:.1f} {unit}"
|
|
51
|
+
size /= 1024.0
|
|
52
|
+
return f"{size:.1f} TB"
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
def main(argv: list[str] | None = None) -> int:
|
|
56
|
+
"""Main entry point for check-added-large-files tool.
|
|
57
|
+
|
|
58
|
+
Args:
|
|
59
|
+
argv: Command-line arguments (defaults to sys.argv[1:])
|
|
60
|
+
|
|
61
|
+
Returns:
|
|
62
|
+
Exit code: 0 if no large files, 1 if large files found
|
|
63
|
+
"""
|
|
64
|
+
parser = argparse.ArgumentParser(
|
|
65
|
+
description="Check for large files in git repository"
|
|
66
|
+
)
|
|
67
|
+
parser.add_argument(
|
|
68
|
+
"files",
|
|
69
|
+
nargs="*",
|
|
70
|
+
type=Path,
|
|
71
|
+
help="Files to check (default: all git-tracked files)",
|
|
72
|
+
)
|
|
73
|
+
parser.add_argument(
|
|
74
|
+
"--maxkb",
|
|
75
|
+
type=int,
|
|
76
|
+
default=1000,
|
|
77
|
+
help="Maximum file size in KB (default: 1000)",
|
|
78
|
+
)
|
|
79
|
+
parser.add_argument(
|
|
80
|
+
"--enforce-all",
|
|
81
|
+
action="store_true",
|
|
82
|
+
help="Check all files, not just newly added ones",
|
|
83
|
+
)
|
|
84
|
+
|
|
85
|
+
# When called from tests, avoid picking up pytest argv
|
|
86
|
+
if argv is None:
|
|
87
|
+
argv = []
|
|
88
|
+
args = parser.parse_args(argv)
|
|
89
|
+
|
|
90
|
+
# Convert KB to bytes
|
|
91
|
+
max_size_bytes = args.maxkb * 1024
|
|
92
|
+
|
|
93
|
+
# Determine which files to check
|
|
94
|
+
if not args.files:
|
|
95
|
+
# Get all git-tracked files, respecting gitignore
|
|
96
|
+
files = get_git_tracked_files()
|
|
97
|
+
if not files:
|
|
98
|
+
# Fallback to all files in current directory if not in git repo
|
|
99
|
+
files = list(Path.cwd().rglob("*"))
|
|
100
|
+
files = [f for f in files if f.is_file()]
|
|
101
|
+
else:
|
|
102
|
+
files = args.files
|
|
103
|
+
|
|
104
|
+
# Filter to existing files only
|
|
105
|
+
files = [f for f in files if f.is_file()]
|
|
106
|
+
|
|
107
|
+
if not files:
|
|
108
|
+
print("No files to check") # noqa: T201
|
|
109
|
+
return 0
|
|
110
|
+
|
|
111
|
+
# Process files
|
|
112
|
+
large_files = []
|
|
113
|
+
for file_path in files:
|
|
114
|
+
size = get_file_size(file_path)
|
|
115
|
+
if size > max_size_bytes:
|
|
116
|
+
large_files.append((file_path, size))
|
|
117
|
+
|
|
118
|
+
# Report results
|
|
119
|
+
if large_files:
|
|
120
|
+
print("Large files detected:", file=sys.stderr) # noqa: T201
|
|
121
|
+
for file_path, size in large_files:
|
|
122
|
+
print(
|
|
123
|
+
f" {file_path}: {format_size(size)} "
|
|
124
|
+
f"(exceeds {format_size(max_size_bytes)})",
|
|
125
|
+
file=sys.stderr,
|
|
126
|
+
) # noqa: T201
|
|
127
|
+
print(
|
|
128
|
+
f"\n{len(large_files)} large file(s) found. "
|
|
129
|
+
f"Consider using Git LFS for large files.",
|
|
130
|
+
file=sys.stderr,
|
|
131
|
+
) # noqa: T201
|
|
132
|
+
return 1
|
|
133
|
+
|
|
134
|
+
print("All files are under size limit") # noqa: T201
|
|
135
|
+
return 0
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
if __name__ == "__main__":
|
|
139
|
+
sys.exit(main())
|