crackerjack 0.37.9__py3-none-any.whl → 0.45.2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- crackerjack/README.md +19 -0
- crackerjack/__init__.py +30 -1
- crackerjack/__main__.py +342 -1263
- crackerjack/adapters/README.md +18 -0
- crackerjack/adapters/__init__.py +27 -5
- crackerjack/adapters/_output_paths.py +167 -0
- crackerjack/adapters/_qa_adapter_base.py +309 -0
- crackerjack/adapters/_tool_adapter_base.py +706 -0
- crackerjack/adapters/ai/README.md +65 -0
- crackerjack/adapters/ai/__init__.py +5 -0
- crackerjack/adapters/ai/claude.py +853 -0
- crackerjack/adapters/complexity/README.md +53 -0
- crackerjack/adapters/complexity/__init__.py +10 -0
- crackerjack/adapters/complexity/complexipy.py +641 -0
- crackerjack/adapters/dependency/__init__.py +22 -0
- crackerjack/adapters/dependency/pip_audit.py +418 -0
- crackerjack/adapters/format/README.md +72 -0
- crackerjack/adapters/format/__init__.py +11 -0
- crackerjack/adapters/format/mdformat.py +313 -0
- crackerjack/adapters/format/ruff.py +516 -0
- crackerjack/adapters/lint/README.md +47 -0
- crackerjack/adapters/lint/__init__.py +11 -0
- crackerjack/adapters/lint/codespell.py +273 -0
- crackerjack/adapters/lsp/README.md +49 -0
- crackerjack/adapters/lsp/__init__.py +27 -0
- crackerjack/adapters/{rust_tool_manager.py → lsp/_manager.py} +3 -3
- crackerjack/adapters/{skylos_adapter.py → lsp/skylos.py} +59 -7
- crackerjack/adapters/{zuban_adapter.py → lsp/zuban.py} +3 -6
- crackerjack/adapters/refactor/README.md +59 -0
- crackerjack/adapters/refactor/__init__.py +12 -0
- crackerjack/adapters/refactor/creosote.py +318 -0
- crackerjack/adapters/refactor/refurb.py +406 -0
- crackerjack/adapters/refactor/skylos.py +494 -0
- crackerjack/adapters/sast/README.md +132 -0
- crackerjack/adapters/sast/__init__.py +32 -0
- crackerjack/adapters/sast/_base.py +201 -0
- crackerjack/adapters/sast/bandit.py +423 -0
- crackerjack/adapters/sast/pyscn.py +405 -0
- crackerjack/adapters/sast/semgrep.py +241 -0
- crackerjack/adapters/security/README.md +111 -0
- crackerjack/adapters/security/__init__.py +17 -0
- crackerjack/adapters/security/gitleaks.py +339 -0
- crackerjack/adapters/type/README.md +52 -0
- crackerjack/adapters/type/__init__.py +12 -0
- crackerjack/adapters/type/pyrefly.py +402 -0
- crackerjack/adapters/type/ty.py +402 -0
- crackerjack/adapters/type/zuban.py +522 -0
- crackerjack/adapters/utility/README.md +51 -0
- crackerjack/adapters/utility/__init__.py +10 -0
- crackerjack/adapters/utility/checks.py +884 -0
- crackerjack/agents/README.md +264 -0
- crackerjack/agents/__init__.py +40 -12
- crackerjack/agents/base.py +1 -0
- crackerjack/agents/claude_code_bridge.py +641 -0
- crackerjack/agents/coordinator.py +49 -53
- crackerjack/agents/dry_agent.py +187 -3
- crackerjack/agents/enhanced_coordinator.py +279 -0
- crackerjack/agents/enhanced_proactive_agent.py +185 -0
- crackerjack/agents/error_middleware.py +53 -0
- crackerjack/agents/formatting_agent.py +6 -8
- crackerjack/agents/helpers/__init__.py +9 -0
- crackerjack/agents/helpers/performance/__init__.py +22 -0
- crackerjack/agents/helpers/performance/performance_ast_analyzer.py +357 -0
- crackerjack/agents/helpers/performance/performance_pattern_detector.py +909 -0
- crackerjack/agents/helpers/performance/performance_recommender.py +572 -0
- crackerjack/agents/helpers/refactoring/__init__.py +22 -0
- crackerjack/agents/helpers/refactoring/code_transformer.py +536 -0
- crackerjack/agents/helpers/refactoring/complexity_analyzer.py +344 -0
- crackerjack/agents/helpers/refactoring/dead_code_detector.py +437 -0
- crackerjack/agents/helpers/test_creation/__init__.py +19 -0
- crackerjack/agents/helpers/test_creation/test_ast_analyzer.py +216 -0
- crackerjack/agents/helpers/test_creation/test_coverage_analyzer.py +643 -0
- crackerjack/agents/helpers/test_creation/test_template_generator.py +1031 -0
- crackerjack/agents/performance_agent.py +121 -1152
- crackerjack/agents/refactoring_agent.py +156 -655
- crackerjack/agents/semantic_agent.py +479 -0
- crackerjack/agents/semantic_helpers.py +356 -0
- crackerjack/agents/test_creation_agent.py +19 -1605
- crackerjack/api.py +5 -7
- crackerjack/cli/README.md +394 -0
- crackerjack/cli/__init__.py +1 -1
- crackerjack/cli/cache_handlers.py +23 -18
- crackerjack/cli/cache_handlers_enhanced.py +1 -4
- crackerjack/cli/facade.py +70 -8
- crackerjack/cli/formatting.py +13 -0
- crackerjack/cli/handlers/__init__.py +85 -0
- crackerjack/cli/handlers/advanced.py +103 -0
- crackerjack/cli/handlers/ai_features.py +62 -0
- crackerjack/cli/handlers/analytics.py +479 -0
- crackerjack/cli/handlers/changelog.py +271 -0
- crackerjack/cli/handlers/config_handlers.py +16 -0
- crackerjack/cli/handlers/coverage.py +84 -0
- crackerjack/cli/handlers/documentation.py +280 -0
- crackerjack/cli/handlers/main_handlers.py +497 -0
- crackerjack/cli/handlers/monitoring.py +371 -0
- crackerjack/cli/handlers.py +249 -49
- crackerjack/cli/interactive.py +8 -5
- crackerjack/cli/options.py +203 -110
- crackerjack/cli/semantic_handlers.py +292 -0
- crackerjack/cli/version.py +19 -0
- crackerjack/code_cleaner.py +60 -24
- crackerjack/config/README.md +472 -0
- crackerjack/config/__init__.py +256 -0
- crackerjack/config/global_lock_config.py +191 -54
- crackerjack/config/hooks.py +188 -16
- crackerjack/config/loader.py +239 -0
- crackerjack/config/settings.py +141 -0
- crackerjack/config/tool_commands.py +331 -0
- crackerjack/core/README.md +393 -0
- crackerjack/core/async_workflow_orchestrator.py +79 -53
- crackerjack/core/autofix_coordinator.py +22 -9
- crackerjack/core/container.py +10 -9
- crackerjack/core/enhanced_container.py +9 -9
- crackerjack/core/performance.py +1 -1
- crackerjack/core/performance_monitor.py +5 -3
- crackerjack/core/phase_coordinator.py +1018 -634
- crackerjack/core/proactive_workflow.py +3 -3
- crackerjack/core/retry.py +275 -0
- crackerjack/core/service_watchdog.py +167 -23
- crackerjack/core/session_coordinator.py +187 -382
- crackerjack/core/timeout_manager.py +161 -44
- crackerjack/core/workflow/__init__.py +21 -0
- crackerjack/core/workflow/workflow_ai_coordinator.py +863 -0
- crackerjack/core/workflow/workflow_event_orchestrator.py +1107 -0
- crackerjack/core/workflow/workflow_issue_parser.py +714 -0
- crackerjack/core/workflow/workflow_phase_executor.py +1158 -0
- crackerjack/core/workflow/workflow_security_gates.py +400 -0
- crackerjack/core/workflow_orchestrator.py +1247 -953
- crackerjack/data/README.md +11 -0
- crackerjack/data/__init__.py +8 -0
- crackerjack/data/models.py +79 -0
- crackerjack/data/repository.py +210 -0
- crackerjack/decorators/README.md +180 -0
- crackerjack/decorators/__init__.py +35 -0
- crackerjack/decorators/error_handling.py +649 -0
- crackerjack/decorators/error_handling_decorators.py +334 -0
- crackerjack/decorators/helpers.py +58 -0
- crackerjack/decorators/patterns.py +281 -0
- crackerjack/decorators/utils.py +58 -0
- crackerjack/docs/README.md +11 -0
- crackerjack/docs/generated/api/CLI_REFERENCE.md +1 -1
- crackerjack/documentation/README.md +11 -0
- crackerjack/documentation/ai_templates.py +1 -1
- crackerjack/documentation/dual_output_generator.py +11 -9
- crackerjack/documentation/reference_generator.py +104 -59
- crackerjack/dynamic_config.py +52 -61
- crackerjack/errors.py +1 -1
- crackerjack/events/README.md +11 -0
- crackerjack/events/__init__.py +16 -0
- crackerjack/events/telemetry.py +175 -0
- crackerjack/events/workflow_bus.py +346 -0
- crackerjack/exceptions/README.md +301 -0
- crackerjack/exceptions/__init__.py +5 -0
- crackerjack/exceptions/config.py +4 -0
- crackerjack/exceptions/tool_execution_error.py +245 -0
- crackerjack/executors/README.md +591 -0
- crackerjack/executors/__init__.py +2 -0
- crackerjack/executors/async_hook_executor.py +539 -77
- crackerjack/executors/cached_hook_executor.py +3 -3
- crackerjack/executors/hook_executor.py +967 -102
- crackerjack/executors/hook_lock_manager.py +31 -22
- crackerjack/executors/individual_hook_executor.py +66 -32
- crackerjack/executors/lsp_aware_hook_executor.py +136 -57
- crackerjack/executors/progress_hook_executor.py +282 -0
- crackerjack/executors/tool_proxy.py +23 -7
- crackerjack/hooks/README.md +485 -0
- crackerjack/hooks/lsp_hook.py +8 -9
- crackerjack/intelligence/README.md +557 -0
- crackerjack/interactive.py +37 -10
- crackerjack/managers/README.md +369 -0
- crackerjack/managers/async_hook_manager.py +41 -57
- crackerjack/managers/hook_manager.py +449 -79
- crackerjack/managers/publish_manager.py +81 -36
- crackerjack/managers/test_command_builder.py +290 -12
- crackerjack/managers/test_executor.py +93 -8
- crackerjack/managers/test_manager.py +1082 -75
- crackerjack/managers/test_progress.py +118 -26
- crackerjack/mcp/README.md +374 -0
- crackerjack/mcp/cache.py +25 -2
- crackerjack/mcp/client_runner.py +35 -18
- crackerjack/mcp/context.py +9 -9
- crackerjack/mcp/dashboard.py +24 -8
- crackerjack/mcp/enhanced_progress_monitor.py +34 -23
- crackerjack/mcp/file_monitor.py +27 -6
- crackerjack/mcp/progress_components.py +45 -34
- crackerjack/mcp/progress_monitor.py +6 -9
- crackerjack/mcp/rate_limiter.py +11 -7
- crackerjack/mcp/server.py +2 -0
- crackerjack/mcp/server_core.py +187 -55
- crackerjack/mcp/service_watchdog.py +12 -9
- crackerjack/mcp/task_manager.py +2 -2
- crackerjack/mcp/tools/README.md +27 -0
- crackerjack/mcp/tools/__init__.py +2 -0
- crackerjack/mcp/tools/core_tools.py +75 -52
- crackerjack/mcp/tools/execution_tools.py +87 -31
- crackerjack/mcp/tools/intelligence_tools.py +2 -2
- crackerjack/mcp/tools/proactive_tools.py +1 -1
- crackerjack/mcp/tools/semantic_tools.py +584 -0
- crackerjack/mcp/tools/utility_tools.py +180 -132
- crackerjack/mcp/tools/workflow_executor.py +87 -46
- crackerjack/mcp/websocket/README.md +31 -0
- crackerjack/mcp/websocket/app.py +11 -1
- crackerjack/mcp/websocket/event_bridge.py +188 -0
- crackerjack/mcp/websocket/jobs.py +27 -4
- crackerjack/mcp/websocket/monitoring/__init__.py +25 -0
- crackerjack/mcp/websocket/monitoring/api/__init__.py +19 -0
- crackerjack/mcp/websocket/monitoring/api/dependencies.py +141 -0
- crackerjack/mcp/websocket/monitoring/api/heatmap.py +154 -0
- crackerjack/mcp/websocket/monitoring/api/intelligence.py +199 -0
- crackerjack/mcp/websocket/monitoring/api/metrics.py +203 -0
- crackerjack/mcp/websocket/monitoring/api/telemetry.py +101 -0
- crackerjack/mcp/websocket/monitoring/dashboard.py +18 -0
- crackerjack/mcp/websocket/monitoring/factory.py +109 -0
- crackerjack/mcp/websocket/monitoring/filters.py +10 -0
- crackerjack/mcp/websocket/monitoring/metrics.py +64 -0
- crackerjack/mcp/websocket/monitoring/models.py +90 -0
- crackerjack/mcp/websocket/monitoring/utils.py +171 -0
- crackerjack/mcp/websocket/monitoring/websocket_manager.py +78 -0
- crackerjack/mcp/websocket/monitoring/websockets/__init__.py +17 -0
- crackerjack/mcp/websocket/monitoring/websockets/dependencies.py +126 -0
- crackerjack/mcp/websocket/monitoring/websockets/heatmap.py +176 -0
- crackerjack/mcp/websocket/monitoring/websockets/intelligence.py +291 -0
- crackerjack/mcp/websocket/monitoring/websockets/metrics.py +291 -0
- crackerjack/mcp/websocket/monitoring_endpoints.py +16 -2930
- crackerjack/mcp/websocket/server.py +1 -3
- crackerjack/mcp/websocket/websocket_handler.py +107 -6
- crackerjack/models/README.md +308 -0
- crackerjack/models/__init__.py +10 -1
- crackerjack/models/config.py +639 -22
- crackerjack/models/config_adapter.py +6 -6
- crackerjack/models/protocols.py +1167 -23
- crackerjack/models/pydantic_models.py +320 -0
- crackerjack/models/qa_config.py +145 -0
- crackerjack/models/qa_results.py +134 -0
- crackerjack/models/results.py +35 -0
- crackerjack/models/semantic_models.py +258 -0
- crackerjack/models/task.py +19 -3
- crackerjack/models/test_models.py +60 -0
- crackerjack/monitoring/README.md +11 -0
- crackerjack/monitoring/ai_agent_watchdog.py +5 -4
- crackerjack/monitoring/metrics_collector.py +4 -3
- crackerjack/monitoring/regression_prevention.py +4 -3
- crackerjack/monitoring/websocket_server.py +4 -241
- crackerjack/orchestration/README.md +340 -0
- crackerjack/orchestration/__init__.py +43 -0
- crackerjack/orchestration/advanced_orchestrator.py +20 -67
- crackerjack/orchestration/cache/README.md +312 -0
- crackerjack/orchestration/cache/__init__.py +37 -0
- crackerjack/orchestration/cache/memory_cache.py +338 -0
- crackerjack/orchestration/cache/tool_proxy_cache.py +340 -0
- crackerjack/orchestration/config.py +297 -0
- crackerjack/orchestration/coverage_improvement.py +13 -6
- crackerjack/orchestration/execution_strategies.py +6 -6
- crackerjack/orchestration/hook_orchestrator.py +1398 -0
- crackerjack/orchestration/strategies/README.md +401 -0
- crackerjack/orchestration/strategies/__init__.py +39 -0
- crackerjack/orchestration/strategies/adaptive_strategy.py +630 -0
- crackerjack/orchestration/strategies/parallel_strategy.py +237 -0
- crackerjack/orchestration/strategies/sequential_strategy.py +299 -0
- crackerjack/orchestration/test_progress_streamer.py +1 -1
- crackerjack/plugins/README.md +11 -0
- crackerjack/plugins/hooks.py +3 -2
- crackerjack/plugins/loader.py +3 -3
- crackerjack/plugins/managers.py +1 -1
- crackerjack/py313.py +191 -0
- crackerjack/security/README.md +11 -0
- crackerjack/services/README.md +374 -0
- crackerjack/services/__init__.py +8 -21
- crackerjack/services/ai/README.md +295 -0
- crackerjack/services/ai/__init__.py +7 -0
- crackerjack/services/ai/advanced_optimizer.py +878 -0
- crackerjack/services/{contextual_ai_assistant.py → ai/contextual_ai_assistant.py} +5 -3
- crackerjack/services/ai/embeddings.py +444 -0
- crackerjack/services/ai/intelligent_commit.py +328 -0
- crackerjack/services/ai/predictive_analytics.py +510 -0
- crackerjack/services/api_extractor.py +5 -3
- crackerjack/services/bounded_status_operations.py +45 -5
- crackerjack/services/cache.py +249 -318
- crackerjack/services/changelog_automation.py +7 -3
- crackerjack/services/command_execution_service.py +305 -0
- crackerjack/services/config_integrity.py +83 -39
- crackerjack/services/config_merge.py +9 -6
- crackerjack/services/config_service.py +198 -0
- crackerjack/services/config_template.py +13 -26
- crackerjack/services/coverage_badge_service.py +6 -4
- crackerjack/services/coverage_ratchet.py +53 -27
- crackerjack/services/debug.py +18 -7
- crackerjack/services/dependency_analyzer.py +4 -4
- crackerjack/services/dependency_monitor.py +13 -13
- crackerjack/services/documentation_generator.py +4 -2
- crackerjack/services/documentation_service.py +62 -33
- crackerjack/services/enhanced_filesystem.py +81 -27
- crackerjack/services/enterprise_optimizer.py +1 -1
- crackerjack/services/error_pattern_analyzer.py +10 -10
- crackerjack/services/file_filter.py +221 -0
- crackerjack/services/file_hasher.py +5 -7
- crackerjack/services/file_io_service.py +361 -0
- crackerjack/services/file_modifier.py +615 -0
- crackerjack/services/filesystem.py +80 -109
- crackerjack/services/git.py +99 -5
- crackerjack/services/health_metrics.py +4 -6
- crackerjack/services/heatmap_generator.py +12 -3
- crackerjack/services/incremental_executor.py +380 -0
- crackerjack/services/initialization.py +101 -49
- crackerjack/services/log_manager.py +2 -2
- crackerjack/services/logging.py +120 -68
- crackerjack/services/lsp_client.py +12 -12
- crackerjack/services/memory_optimizer.py +27 -22
- crackerjack/services/monitoring/README.md +30 -0
- crackerjack/services/monitoring/__init__.py +9 -0
- crackerjack/services/monitoring/dependency_monitor.py +678 -0
- crackerjack/services/monitoring/error_pattern_analyzer.py +676 -0
- crackerjack/services/monitoring/health_metrics.py +716 -0
- crackerjack/services/monitoring/metrics.py +587 -0
- crackerjack/services/{performance_benchmarks.py → monitoring/performance_benchmarks.py} +100 -14
- crackerjack/services/{performance_cache.py → monitoring/performance_cache.py} +21 -15
- crackerjack/services/{performance_monitor.py → monitoring/performance_monitor.py} +10 -6
- crackerjack/services/parallel_executor.py +166 -55
- crackerjack/services/patterns/__init__.py +142 -0
- crackerjack/services/patterns/agents.py +107 -0
- crackerjack/services/patterns/code/__init__.py +15 -0
- crackerjack/services/patterns/code/detection.py +118 -0
- crackerjack/services/patterns/code/imports.py +107 -0
- crackerjack/services/patterns/code/paths.py +159 -0
- crackerjack/services/patterns/code/performance.py +119 -0
- crackerjack/services/patterns/code/replacement.py +36 -0
- crackerjack/services/patterns/core.py +212 -0
- crackerjack/services/patterns/documentation/__init__.py +14 -0
- crackerjack/services/patterns/documentation/badges_markdown.py +96 -0
- crackerjack/services/patterns/documentation/comments_blocks.py +83 -0
- crackerjack/services/patterns/documentation/docstrings.py +89 -0
- crackerjack/services/patterns/formatting.py +226 -0
- crackerjack/services/patterns/operations.py +339 -0
- crackerjack/services/patterns/security/__init__.py +23 -0
- crackerjack/services/patterns/security/code_injection.py +122 -0
- crackerjack/services/patterns/security/credentials.py +190 -0
- crackerjack/services/patterns/security/path_traversal.py +221 -0
- crackerjack/services/patterns/security/unsafe_operations.py +216 -0
- crackerjack/services/patterns/templates.py +62 -0
- crackerjack/services/patterns/testing/__init__.py +18 -0
- crackerjack/services/patterns/testing/error_patterns.py +107 -0
- crackerjack/services/patterns/testing/pytest_output.py +126 -0
- crackerjack/services/patterns/tool_output/__init__.py +16 -0
- crackerjack/services/patterns/tool_output/bandit.py +72 -0
- crackerjack/services/patterns/tool_output/other.py +97 -0
- crackerjack/services/patterns/tool_output/pyright.py +67 -0
- crackerjack/services/patterns/tool_output/ruff.py +44 -0
- crackerjack/services/patterns/url_sanitization.py +114 -0
- crackerjack/services/patterns/utilities.py +42 -0
- crackerjack/services/patterns/utils.py +339 -0
- crackerjack/services/patterns/validation.py +46 -0
- crackerjack/services/patterns/versioning.py +62 -0
- crackerjack/services/predictive_analytics.py +21 -8
- crackerjack/services/profiler.py +280 -0
- crackerjack/services/quality/README.md +415 -0
- crackerjack/services/quality/__init__.py +11 -0
- crackerjack/services/quality/anomaly_detector.py +392 -0
- crackerjack/services/quality/pattern_cache.py +333 -0
- crackerjack/services/quality/pattern_detector.py +479 -0
- crackerjack/services/quality/qa_orchestrator.py +491 -0
- crackerjack/services/{quality_baseline.py → quality/quality_baseline.py} +163 -2
- crackerjack/services/{quality_baseline_enhanced.py → quality/quality_baseline_enhanced.py} +4 -1
- crackerjack/services/{quality_intelligence.py → quality/quality_intelligence.py} +180 -16
- crackerjack/services/regex_patterns.py +58 -2987
- crackerjack/services/regex_utils.py +55 -29
- crackerjack/services/secure_status_formatter.py +42 -15
- crackerjack/services/secure_subprocess.py +35 -2
- crackerjack/services/security.py +16 -8
- crackerjack/services/server_manager.py +40 -51
- crackerjack/services/smart_scheduling.py +46 -6
- crackerjack/services/status_authentication.py +3 -3
- crackerjack/services/thread_safe_status_collector.py +1 -0
- crackerjack/services/tool_filter.py +368 -0
- crackerjack/services/tool_version_service.py +9 -5
- crackerjack/services/unified_config.py +43 -351
- crackerjack/services/vector_store.py +689 -0
- crackerjack/services/version_analyzer.py +6 -4
- crackerjack/services/version_checker.py +14 -8
- crackerjack/services/zuban_lsp_service.py +5 -4
- crackerjack/slash_commands/README.md +11 -0
- crackerjack/slash_commands/init.md +2 -12
- crackerjack/slash_commands/run.md +84 -50
- crackerjack/tools/README.md +11 -0
- crackerjack/tools/__init__.py +30 -0
- crackerjack/tools/_git_utils.py +105 -0
- crackerjack/tools/check_added_large_files.py +139 -0
- crackerjack/tools/check_ast.py +105 -0
- crackerjack/tools/check_json.py +103 -0
- crackerjack/tools/check_jsonschema.py +297 -0
- crackerjack/tools/check_toml.py +103 -0
- crackerjack/tools/check_yaml.py +110 -0
- crackerjack/tools/codespell_wrapper.py +72 -0
- crackerjack/tools/end_of_file_fixer.py +202 -0
- crackerjack/tools/format_json.py +128 -0
- crackerjack/tools/mdformat_wrapper.py +114 -0
- crackerjack/tools/trailing_whitespace.py +198 -0
- crackerjack/tools/validate_regex_patterns.py +7 -3
- crackerjack/ui/README.md +11 -0
- crackerjack/ui/dashboard_renderer.py +28 -0
- crackerjack/ui/templates/README.md +11 -0
- crackerjack/utils/console_utils.py +13 -0
- crackerjack/utils/dependency_guard.py +230 -0
- crackerjack/utils/retry_utils.py +275 -0
- crackerjack/workflows/README.md +590 -0
- crackerjack/workflows/__init__.py +46 -0
- crackerjack/workflows/actions.py +811 -0
- crackerjack/workflows/auto_fix.py +444 -0
- crackerjack/workflows/container_builder.py +499 -0
- crackerjack/workflows/definitions.py +443 -0
- crackerjack/workflows/engine.py +177 -0
- crackerjack/workflows/event_bridge.py +242 -0
- {crackerjack-0.37.9.dist-info → crackerjack-0.45.2.dist-info}/METADATA +678 -98
- crackerjack-0.45.2.dist-info/RECORD +478 -0
- {crackerjack-0.37.9.dist-info → crackerjack-0.45.2.dist-info}/WHEEL +1 -1
- crackerjack/managers/test_manager_backup.py +0 -1075
- crackerjack/mcp/tools/execution_tools_backup.py +0 -1011
- crackerjack/mixins/__init__.py +0 -3
- crackerjack/mixins/error_handling.py +0 -145
- crackerjack/services/config.py +0 -358
- crackerjack/ui/server_panels.py +0 -125
- crackerjack-0.37.9.dist-info/RECORD +0 -231
- /crackerjack/adapters/{rust_tool_adapter.py → lsp/_base.py} +0 -0
- /crackerjack/adapters/{lsp_client.py → lsp/_client.py} +0 -0
- {crackerjack-0.37.9.dist-info → crackerjack-0.45.2.dist-info}/entry_points.txt +0 -0
- {crackerjack-0.37.9.dist-info → crackerjack-0.45.2.dist-info}/licenses/LICENSE +0 -0
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
from pathlib import Path
|
|
2
|
+
|
|
3
|
+
from acb.config import Settings
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class CleaningSettings(Settings):
|
|
7
|
+
clean: bool = True
|
|
8
|
+
update_docs: bool = False
|
|
9
|
+
force_update_docs: bool = False
|
|
10
|
+
compress_docs: bool = False
|
|
11
|
+
auto_compress_docs: bool = False
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class HookSettings(Settings):
|
|
15
|
+
skip_hooks: bool = False
|
|
16
|
+
update_precommit: bool = False
|
|
17
|
+
experimental_hooks: bool = False
|
|
18
|
+
enable_pyrefly: bool = False
|
|
19
|
+
enable_ty: bool = False
|
|
20
|
+
enable_lsp_optimization: bool = False
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class TestSettings(Settings):
|
|
24
|
+
test: bool = False
|
|
25
|
+
benchmark: bool = False
|
|
26
|
+
test_workers: int = 0
|
|
27
|
+
test_timeout: int = 0
|
|
28
|
+
auto_detect_workers: bool = True
|
|
29
|
+
max_workers: int = 8
|
|
30
|
+
min_workers: int = 2
|
|
31
|
+
memory_per_worker_gb: float = 2.0
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
class PublishSettings(Settings):
|
|
35
|
+
publish: str | None = None
|
|
36
|
+
bump: str | None = None
|
|
37
|
+
all: str | None = None
|
|
38
|
+
no_git_tags: bool = False
|
|
39
|
+
skip_version_check: bool = False
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
class GitSettings(Settings):
|
|
43
|
+
commit: bool = False
|
|
44
|
+
create_pr: bool = False
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
class AISettings(Settings):
|
|
48
|
+
ai_agent: bool = False
|
|
49
|
+
start_mcp_server: bool = False
|
|
50
|
+
max_iterations: int = 5
|
|
51
|
+
autofix: bool = True
|
|
52
|
+
ai_agent_autofix: bool = False
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
class ExecutionSettings(Settings):
|
|
56
|
+
interactive: bool = False
|
|
57
|
+
verbose: bool = False
|
|
58
|
+
async_mode: bool = False
|
|
59
|
+
no_config_updates: bool = False
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
class ProgressSettings(Settings):
|
|
63
|
+
enabled: bool = False
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
class CleanupSettings(Settings):
|
|
67
|
+
auto_cleanup: bool = True
|
|
68
|
+
keep_debug_logs: int = 5
|
|
69
|
+
keep_coverage_files: int = 10
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
class AdvancedSettings(Settings):
|
|
73
|
+
enabled: bool = False
|
|
74
|
+
license_key: str | None = None
|
|
75
|
+
organization: str | None = None
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
class ConsoleSettings(Settings):
|
|
79
|
+
"""Console/UI related settings."""
|
|
80
|
+
|
|
81
|
+
width: int = 70
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
class MCPServerSettings(Settings):
|
|
85
|
+
http_port: int = 8676
|
|
86
|
+
http_host: str = "127.0.0.1"
|
|
87
|
+
websocket_port: int = 8675
|
|
88
|
+
http_enabled: bool = False
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
class ZubanLSPSettings(Settings):
|
|
92
|
+
enabled: bool = True
|
|
93
|
+
auto_start: bool = True
|
|
94
|
+
port: int = 8677
|
|
95
|
+
mode: str = "stdio"
|
|
96
|
+
timeout: int = 120
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
class GlobalLockSettings(Settings):
|
|
100
|
+
enabled: bool = True
|
|
101
|
+
timeout_seconds: float = 1800.0
|
|
102
|
+
stale_lock_hours: float = 2.0
|
|
103
|
+
lock_directory: Path = Path.home() / ".crackerjack" / "locks"
|
|
104
|
+
session_heartbeat_interval: float = 30.0
|
|
105
|
+
max_retry_attempts: int = 3
|
|
106
|
+
retry_delay_seconds: float = 5.0
|
|
107
|
+
enable_lock_monitoring: bool = True
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
class CrackerjackSettings(Settings):
|
|
111
|
+
console: ConsoleSettings = ConsoleSettings()
|
|
112
|
+
cleaning: CleaningSettings = CleaningSettings()
|
|
113
|
+
hooks: HookSettings = HookSettings()
|
|
114
|
+
testing: TestSettings = TestSettings()
|
|
115
|
+
publishing: PublishSettings = PublishSettings()
|
|
116
|
+
git: GitSettings = GitSettings()
|
|
117
|
+
ai: AISettings = AISettings()
|
|
118
|
+
execution: ExecutionSettings = ExecutionSettings()
|
|
119
|
+
progress: ProgressSettings = ProgressSettings()
|
|
120
|
+
cleanup: CleanupSettings = CleanupSettings()
|
|
121
|
+
advanced: AdvancedSettings = AdvancedSettings()
|
|
122
|
+
mcp_server: MCPServerSettings = MCPServerSettings()
|
|
123
|
+
zuban_lsp: ZubanLSPSettings = ZubanLSPSettings()
|
|
124
|
+
global_lock: GlobalLockSettings = GlobalLockSettings()
|
|
125
|
+
enable_orchestration: bool = True
|
|
126
|
+
orchestration_mode: str = "acb"
|
|
127
|
+
enable_caching: bool = True
|
|
128
|
+
cache_backend: str = "memory"
|
|
129
|
+
cache_ttl: int = 3600
|
|
130
|
+
cache_max_entries: int = 100
|
|
131
|
+
max_parallel_hooks: int = 4
|
|
132
|
+
default_timeout: int = 1800
|
|
133
|
+
stop_on_critical_failure: bool = True
|
|
134
|
+
enable_dependency_resolution: bool = True
|
|
135
|
+
log_cache_stats: bool = False
|
|
136
|
+
log_execution_timing: bool = False
|
|
137
|
+
enable_strategy_parallelism: bool = True
|
|
138
|
+
enable_adaptive_execution: bool = True
|
|
139
|
+
max_concurrent_strategies: int = 2
|
|
140
|
+
enable_tool_proxy: bool = True
|
|
141
|
+
use_precommit_legacy: bool = True
|
|
@@ -0,0 +1,331 @@
|
|
|
1
|
+
"""Tool command registry for direct tool invocation.
|
|
2
|
+
|
|
3
|
+
This module provides mappings from hook names to direct tool commands,
|
|
4
|
+
replacing the legacy pre-commit wrapper approach.
|
|
5
|
+
|
|
6
|
+
Each command is a list of strings that can be passed directly to subprocess.run().
|
|
7
|
+
Commands use 'uv run' for Python-based tools to leverage dependency management.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
from __future__ import annotations
|
|
11
|
+
|
|
12
|
+
from functools import lru_cache
|
|
13
|
+
from pathlib import Path
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
@lru_cache(maxsize=8)
|
|
17
|
+
def _detect_package_name_cached(pkg_path_str: str) -> str:
|
|
18
|
+
"""Detect the main package name from pyproject.toml or directory structure.
|
|
19
|
+
|
|
20
|
+
Args:
|
|
21
|
+
pkg_path: Path to the project root
|
|
22
|
+
|
|
23
|
+
Returns:
|
|
24
|
+
The detected package name (defaults to 'crackerjack' if detection fails)
|
|
25
|
+
"""
|
|
26
|
+
# Method 1: Try to read from pyproject.toml
|
|
27
|
+
pkg_path = Path(pkg_path_str)
|
|
28
|
+
pyproject_path = pkg_path / "pyproject.toml"
|
|
29
|
+
if pyproject_path.exists():
|
|
30
|
+
from contextlib import suppress
|
|
31
|
+
|
|
32
|
+
with suppress(Exception):
|
|
33
|
+
import tomllib
|
|
34
|
+
|
|
35
|
+
with pyproject_path.open("rb") as f:
|
|
36
|
+
data = tomllib.load(f)
|
|
37
|
+
project_name = data.get("project", {}).get("name")
|
|
38
|
+
if project_name:
|
|
39
|
+
# Convert project name to package name (hyphens to underscores)
|
|
40
|
+
return project_name.replace("-", "_")
|
|
41
|
+
|
|
42
|
+
# Method 2: Look for Python packages in the project root
|
|
43
|
+
for item in pkg_path.iterdir():
|
|
44
|
+
if item.is_dir() and (item / "__init__.py").exists():
|
|
45
|
+
# Skip common non-package directories
|
|
46
|
+
if item.name not in {"tests", "docs", ".venv", "venv", "build", "dist"}:
|
|
47
|
+
return item.name
|
|
48
|
+
|
|
49
|
+
# Method 3: Use the directory name as the package name
|
|
50
|
+
# Convert hyphens to underscores to match Python package naming conventions
|
|
51
|
+
return pkg_path.name.replace("-", "_")
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def _build_tool_commands(package_name: str) -> dict[str, list[str]]:
|
|
55
|
+
"""Build tool command registry with dynamic package name.
|
|
56
|
+
|
|
57
|
+
Args:
|
|
58
|
+
package_name: The name of the package being analyzed
|
|
59
|
+
|
|
60
|
+
Returns:
|
|
61
|
+
Dictionary mapping hook names to command lists
|
|
62
|
+
"""
|
|
63
|
+
return {
|
|
64
|
+
# ========================================================================
|
|
65
|
+
# CUSTOM TOOLS (crackerjack native)
|
|
66
|
+
# ========================================================================
|
|
67
|
+
"validate-regex-patterns": [
|
|
68
|
+
"uv",
|
|
69
|
+
"run",
|
|
70
|
+
"python",
|
|
71
|
+
"-m",
|
|
72
|
+
"crackerjack.tools.validate_regex_patterns",
|
|
73
|
+
],
|
|
74
|
+
"skylos": [
|
|
75
|
+
"uv",
|
|
76
|
+
"run",
|
|
77
|
+
"skylos",
|
|
78
|
+
"--exclude-folder",
|
|
79
|
+
"tests",
|
|
80
|
+
f"./{package_name}",
|
|
81
|
+
],
|
|
82
|
+
"zuban": [
|
|
83
|
+
"uv",
|
|
84
|
+
"run",
|
|
85
|
+
"zuban",
|
|
86
|
+
"mypy", # Use mypy-compatible command as it's more likely to have expected behavior
|
|
87
|
+
"--config-file",
|
|
88
|
+
"mypy.ini", # Required: zuban v0.2.2 can't parse [tool.mypy] from pyproject.toml
|
|
89
|
+
"--no-error-summary", # Suppress summary line (e.g., "Found N errors") to keep issue output clean
|
|
90
|
+
f"./{package_name}",
|
|
91
|
+
],
|
|
92
|
+
# ========================================================================
|
|
93
|
+
# PRE-COMMIT-HOOKS (native implementations in crackerjack.tools)
|
|
94
|
+
# ========================================================================
|
|
95
|
+
"trailing-whitespace": [
|
|
96
|
+
"uv",
|
|
97
|
+
"run",
|
|
98
|
+
"python",
|
|
99
|
+
"-m",
|
|
100
|
+
"crackerjack.tools.trailing_whitespace",
|
|
101
|
+
],
|
|
102
|
+
"end-of-file-fixer": [
|
|
103
|
+
"uv",
|
|
104
|
+
"run",
|
|
105
|
+
"python",
|
|
106
|
+
"-m",
|
|
107
|
+
"crackerjack.tools.end_of_file_fixer",
|
|
108
|
+
],
|
|
109
|
+
"check-yaml": ["uv", "run", "python", "-m", "crackerjack.tools.check_yaml"],
|
|
110
|
+
"check-toml": ["uv", "run", "python", "-m", "crackerjack.tools.check_toml"],
|
|
111
|
+
"check-json": ["uv", "run", "python", "-m", "crackerjack.tools.check_json"],
|
|
112
|
+
"format-json": ["uv", "run", "python", "-m", "crackerjack.tools.format_json"],
|
|
113
|
+
"check-jsonschema": [
|
|
114
|
+
"uv",
|
|
115
|
+
"run",
|
|
116
|
+
"python",
|
|
117
|
+
"-m",
|
|
118
|
+
"crackerjack.tools.check_jsonschema",
|
|
119
|
+
],
|
|
120
|
+
"check-ast": ["uv", "run", "python", "-m", "crackerjack.tools.check_ast"],
|
|
121
|
+
"check-added-large-files": [
|
|
122
|
+
"uv",
|
|
123
|
+
"run",
|
|
124
|
+
"python",
|
|
125
|
+
"-m",
|
|
126
|
+
"crackerjack.tools.check_added_large_files",
|
|
127
|
+
"--maxkb",
|
|
128
|
+
"1000", # 1MB limit for comprehensive frameworks with large lock files
|
|
129
|
+
],
|
|
130
|
+
# ========================================================================
|
|
131
|
+
# THIRD-PARTY TOOLS (direct invocation)
|
|
132
|
+
# ========================================================================
|
|
133
|
+
"uv-lock": ["uv", "lock"],
|
|
134
|
+
"gitleaks": [
|
|
135
|
+
"uv",
|
|
136
|
+
"run",
|
|
137
|
+
"gitleaks",
|
|
138
|
+
"protect",
|
|
139
|
+
"-v",
|
|
140
|
+
],
|
|
141
|
+
"bandit": [
|
|
142
|
+
"uv",
|
|
143
|
+
"run",
|
|
144
|
+
"bandit",
|
|
145
|
+
"-r", # Recursive scanning
|
|
146
|
+
"--format",
|
|
147
|
+
"json", # JSON output for structured parsing
|
|
148
|
+
"--severity-level",
|
|
149
|
+
"low", # Detect all severity levels
|
|
150
|
+
"--confidence-level",
|
|
151
|
+
"low", # Detect all confidence levels
|
|
152
|
+
"-x",
|
|
153
|
+
"tests", # Exclude tests directory
|
|
154
|
+
f"./{package_name}", # Target only the package directory
|
|
155
|
+
],
|
|
156
|
+
"semgrep": [
|
|
157
|
+
"uvx", # Use uvx for isolated semgrep environment
|
|
158
|
+
"--python=3.13", # Explicitly use Python 3.13 for match/case syntax support
|
|
159
|
+
"semgrep",
|
|
160
|
+
"scan",
|
|
161
|
+
"--error", # Exit with non-zero code when findings detected (CRITICAL security level)
|
|
162
|
+
"--json", # JSON output for structured parsing
|
|
163
|
+
"--config",
|
|
164
|
+
"p/security-audit", # Security-focused ruleset (comprehensive)
|
|
165
|
+
"--exclude",
|
|
166
|
+
".pytest_cache",
|
|
167
|
+
"--exclude",
|
|
168
|
+
".ruff_cache",
|
|
169
|
+
"--exclude",
|
|
170
|
+
"__pycache__",
|
|
171
|
+
"--exclude",
|
|
172
|
+
"tests",
|
|
173
|
+
f"./{package_name}", # Target only the package directory
|
|
174
|
+
],
|
|
175
|
+
"codespell": [
|
|
176
|
+
"uv",
|
|
177
|
+
"run",
|
|
178
|
+
"python",
|
|
179
|
+
"-m",
|
|
180
|
+
"crackerjack.tools.codespell_wrapper",
|
|
181
|
+
],
|
|
182
|
+
"ruff-check": [
|
|
183
|
+
"uv",
|
|
184
|
+
"run",
|
|
185
|
+
"python",
|
|
186
|
+
"-m",
|
|
187
|
+
"ruff",
|
|
188
|
+
"check",
|
|
189
|
+
f"./{package_name}",
|
|
190
|
+
],
|
|
191
|
+
"ruff-format": [
|
|
192
|
+
"uv",
|
|
193
|
+
"run",
|
|
194
|
+
"python",
|
|
195
|
+
"-m",
|
|
196
|
+
"ruff",
|
|
197
|
+
"format",
|
|
198
|
+
"--check",
|
|
199
|
+
f"./{package_name}",
|
|
200
|
+
],
|
|
201
|
+
# Mdformat in auto-fix mode for fast hooks (no --check)
|
|
202
|
+
"mdformat": [
|
|
203
|
+
"uv",
|
|
204
|
+
"run",
|
|
205
|
+
"python",
|
|
206
|
+
"-m",
|
|
207
|
+
"crackerjack.tools.mdformat_wrapper",
|
|
208
|
+
],
|
|
209
|
+
# Use explicit project path flag; include venv discovery
|
|
210
|
+
"creosote": [
|
|
211
|
+
"uv",
|
|
212
|
+
"run",
|
|
213
|
+
"creosote",
|
|
214
|
+
"-p",
|
|
215
|
+
package_name,
|
|
216
|
+
"--venv",
|
|
217
|
+
".venv",
|
|
218
|
+
],
|
|
219
|
+
"complexipy": [
|
|
220
|
+
"uv",
|
|
221
|
+
"run",
|
|
222
|
+
"complexipy",
|
|
223
|
+
"--max-complexity-allowed",
|
|
224
|
+
"15",
|
|
225
|
+
package_name,
|
|
226
|
+
],
|
|
227
|
+
"refurb": ["uv", "run", "python", "-m", "refurb", package_name],
|
|
228
|
+
"pip-audit": [
|
|
229
|
+
"uv",
|
|
230
|
+
"run",
|
|
231
|
+
"pip-audit",
|
|
232
|
+
"--format",
|
|
233
|
+
"json", # JSON output for structured parsing
|
|
234
|
+
"--desc", # Include vulnerability descriptions
|
|
235
|
+
"--skip-editable", # Skip editable packages in development
|
|
236
|
+
"--vulnerability-service",
|
|
237
|
+
"osv", # Use OSV database for vulnerability data
|
|
238
|
+
],
|
|
239
|
+
"pyscn": [
|
|
240
|
+
"uv",
|
|
241
|
+
"run",
|
|
242
|
+
"pyscn",
|
|
243
|
+
"check", # Use check subcommand (fast, CI-friendly analysis)
|
|
244
|
+
"--max-complexity",
|
|
245
|
+
"15", # Match crackerjack's complexity threshold
|
|
246
|
+
"--select",
|
|
247
|
+
"complexity,deadcode,deps", # Run complexity, dead code, and dependency checks
|
|
248
|
+
package_name,
|
|
249
|
+
],
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
|
|
253
|
+
@lru_cache(maxsize=8)
|
|
254
|
+
def _build_tool_commands_cached(package_name: str) -> dict[str, tuple[str, ...]]:
|
|
255
|
+
"""Cached variant of tool command map returning immutable tuples.
|
|
256
|
+
|
|
257
|
+
Using tuples ensures cached structures aren’t accidentally mutated, while
|
|
258
|
+
get_tool_command converts back to lists for callers.
|
|
259
|
+
"""
|
|
260
|
+
raw = _build_tool_commands(package_name)
|
|
261
|
+
return {k: tuple(v) for k, v in raw.items()}
|
|
262
|
+
|
|
263
|
+
|
|
264
|
+
# Precompute defaults for the active working directory to avoid hot-path lookups
|
|
265
|
+
_DEFAULT_CWD_STR = str(Path.cwd())
|
|
266
|
+
_DEFAULT_PACKAGE_NAME = _detect_package_name_cached(_DEFAULT_CWD_STR)
|
|
267
|
+
_DEFAULT_COMMANDS = _build_tool_commands_cached(_DEFAULT_PACKAGE_NAME)
|
|
268
|
+
|
|
269
|
+
|
|
270
|
+
def get_tool_command(hook_name: str, pkg_path: Path | None = None) -> list[str]:
|
|
271
|
+
"""Get the direct command for a tool by hook name.
|
|
272
|
+
|
|
273
|
+
Args:
|
|
274
|
+
hook_name: The name of the hook (e.g., "ruff-check", "trailing-whitespace")
|
|
275
|
+
pkg_path: Optional path to the project root (for package name detection)
|
|
276
|
+
|
|
277
|
+
Returns:
|
|
278
|
+
List of command arguments for subprocess execution
|
|
279
|
+
|
|
280
|
+
Raises:
|
|
281
|
+
KeyError: If the hook name is not found in the registry
|
|
282
|
+
"""
|
|
283
|
+
# Detect package name from project root
|
|
284
|
+
if pkg_path is None or str(pkg_path) == _DEFAULT_CWD_STR:
|
|
285
|
+
tool_commands = _DEFAULT_COMMANDS
|
|
286
|
+
else:
|
|
287
|
+
package_name = _detect_package_name_cached(str(pkg_path))
|
|
288
|
+
tool_commands = _build_tool_commands_cached(package_name)
|
|
289
|
+
|
|
290
|
+
if hook_name not in tool_commands:
|
|
291
|
+
msg = f"Unknown hook name: {hook_name}"
|
|
292
|
+
raise KeyError(msg)
|
|
293
|
+
|
|
294
|
+
# Return a fresh list to prevent caller mutation
|
|
295
|
+
return list(tool_commands[hook_name])
|
|
296
|
+
|
|
297
|
+
|
|
298
|
+
def list_available_tools() -> list[str]:
|
|
299
|
+
"""Get list of all available tool names.
|
|
300
|
+
|
|
301
|
+
Returns:
|
|
302
|
+
Sorted list of hook names that can be executed
|
|
303
|
+
"""
|
|
304
|
+
# Build with a dummy package name just to get the keys
|
|
305
|
+
tool_commands = _build_tool_commands_cached("dummy")
|
|
306
|
+
return sorted(tool_commands.keys())
|
|
307
|
+
|
|
308
|
+
|
|
309
|
+
def is_native_tool(hook_name: str) -> bool:
|
|
310
|
+
"""Check if a tool is implemented as a native crackerjack tool.
|
|
311
|
+
|
|
312
|
+
We classify only the built-in Python implementations as native. Wrappers
|
|
313
|
+
around third-party tools (e.g., codespell) are not considered native.
|
|
314
|
+
|
|
315
|
+
Args:
|
|
316
|
+
hook_name: The name of the hook
|
|
317
|
+
|
|
318
|
+
Returns:
|
|
319
|
+
True if the tool is natively implemented in crackerjack.tools, else False
|
|
320
|
+
"""
|
|
321
|
+
NATIVE_TOOLS: set[str] = {
|
|
322
|
+
# Native Python implementations in crackerjack.tools
|
|
323
|
+
"trailing-whitespace",
|
|
324
|
+
"end-of-file-fixer",
|
|
325
|
+
"check-yaml",
|
|
326
|
+
"check-toml",
|
|
327
|
+
"check-added-large-files",
|
|
328
|
+
# Classified as native per tests and docs
|
|
329
|
+
"validate-regex-patterns",
|
|
330
|
+
}
|
|
331
|
+
return hook_name in NATIVE_TOOLS
|