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.
Files changed (425) hide show
  1. crackerjack/README.md +19 -0
  2. crackerjack/__init__.py +30 -1
  3. crackerjack/__main__.py +342 -1263
  4. crackerjack/adapters/README.md +18 -0
  5. crackerjack/adapters/__init__.py +27 -5
  6. crackerjack/adapters/_output_paths.py +167 -0
  7. crackerjack/adapters/_qa_adapter_base.py +309 -0
  8. crackerjack/adapters/_tool_adapter_base.py +706 -0
  9. crackerjack/adapters/ai/README.md +65 -0
  10. crackerjack/adapters/ai/__init__.py +5 -0
  11. crackerjack/adapters/ai/claude.py +853 -0
  12. crackerjack/adapters/complexity/README.md +53 -0
  13. crackerjack/adapters/complexity/__init__.py +10 -0
  14. crackerjack/adapters/complexity/complexipy.py +641 -0
  15. crackerjack/adapters/dependency/__init__.py +22 -0
  16. crackerjack/adapters/dependency/pip_audit.py +418 -0
  17. crackerjack/adapters/format/README.md +72 -0
  18. crackerjack/adapters/format/__init__.py +11 -0
  19. crackerjack/adapters/format/mdformat.py +313 -0
  20. crackerjack/adapters/format/ruff.py +516 -0
  21. crackerjack/adapters/lint/README.md +47 -0
  22. crackerjack/adapters/lint/__init__.py +11 -0
  23. crackerjack/adapters/lint/codespell.py +273 -0
  24. crackerjack/adapters/lsp/README.md +49 -0
  25. crackerjack/adapters/lsp/__init__.py +27 -0
  26. crackerjack/adapters/{rust_tool_manager.py → lsp/_manager.py} +3 -3
  27. crackerjack/adapters/{skylos_adapter.py → lsp/skylos.py} +59 -7
  28. crackerjack/adapters/{zuban_adapter.py → lsp/zuban.py} +3 -6
  29. crackerjack/adapters/refactor/README.md +59 -0
  30. crackerjack/adapters/refactor/__init__.py +12 -0
  31. crackerjack/adapters/refactor/creosote.py +318 -0
  32. crackerjack/adapters/refactor/refurb.py +406 -0
  33. crackerjack/adapters/refactor/skylos.py +494 -0
  34. crackerjack/adapters/sast/README.md +132 -0
  35. crackerjack/adapters/sast/__init__.py +32 -0
  36. crackerjack/adapters/sast/_base.py +201 -0
  37. crackerjack/adapters/sast/bandit.py +423 -0
  38. crackerjack/adapters/sast/pyscn.py +405 -0
  39. crackerjack/adapters/sast/semgrep.py +241 -0
  40. crackerjack/adapters/security/README.md +111 -0
  41. crackerjack/adapters/security/__init__.py +17 -0
  42. crackerjack/adapters/security/gitleaks.py +339 -0
  43. crackerjack/adapters/type/README.md +52 -0
  44. crackerjack/adapters/type/__init__.py +12 -0
  45. crackerjack/adapters/type/pyrefly.py +402 -0
  46. crackerjack/adapters/type/ty.py +402 -0
  47. crackerjack/adapters/type/zuban.py +522 -0
  48. crackerjack/adapters/utility/README.md +51 -0
  49. crackerjack/adapters/utility/__init__.py +10 -0
  50. crackerjack/adapters/utility/checks.py +884 -0
  51. crackerjack/agents/README.md +264 -0
  52. crackerjack/agents/__init__.py +40 -12
  53. crackerjack/agents/base.py +1 -0
  54. crackerjack/agents/claude_code_bridge.py +641 -0
  55. crackerjack/agents/coordinator.py +49 -53
  56. crackerjack/agents/dry_agent.py +187 -3
  57. crackerjack/agents/enhanced_coordinator.py +279 -0
  58. crackerjack/agents/enhanced_proactive_agent.py +185 -0
  59. crackerjack/agents/error_middleware.py +53 -0
  60. crackerjack/agents/formatting_agent.py +6 -8
  61. crackerjack/agents/helpers/__init__.py +9 -0
  62. crackerjack/agents/helpers/performance/__init__.py +22 -0
  63. crackerjack/agents/helpers/performance/performance_ast_analyzer.py +357 -0
  64. crackerjack/agents/helpers/performance/performance_pattern_detector.py +909 -0
  65. crackerjack/agents/helpers/performance/performance_recommender.py +572 -0
  66. crackerjack/agents/helpers/refactoring/__init__.py +22 -0
  67. crackerjack/agents/helpers/refactoring/code_transformer.py +536 -0
  68. crackerjack/agents/helpers/refactoring/complexity_analyzer.py +344 -0
  69. crackerjack/agents/helpers/refactoring/dead_code_detector.py +437 -0
  70. crackerjack/agents/helpers/test_creation/__init__.py +19 -0
  71. crackerjack/agents/helpers/test_creation/test_ast_analyzer.py +216 -0
  72. crackerjack/agents/helpers/test_creation/test_coverage_analyzer.py +643 -0
  73. crackerjack/agents/helpers/test_creation/test_template_generator.py +1031 -0
  74. crackerjack/agents/performance_agent.py +121 -1152
  75. crackerjack/agents/refactoring_agent.py +156 -655
  76. crackerjack/agents/semantic_agent.py +479 -0
  77. crackerjack/agents/semantic_helpers.py +356 -0
  78. crackerjack/agents/test_creation_agent.py +19 -1605
  79. crackerjack/api.py +5 -7
  80. crackerjack/cli/README.md +394 -0
  81. crackerjack/cli/__init__.py +1 -1
  82. crackerjack/cli/cache_handlers.py +23 -18
  83. crackerjack/cli/cache_handlers_enhanced.py +1 -4
  84. crackerjack/cli/facade.py +70 -8
  85. crackerjack/cli/formatting.py +13 -0
  86. crackerjack/cli/handlers/__init__.py +85 -0
  87. crackerjack/cli/handlers/advanced.py +103 -0
  88. crackerjack/cli/handlers/ai_features.py +62 -0
  89. crackerjack/cli/handlers/analytics.py +479 -0
  90. crackerjack/cli/handlers/changelog.py +271 -0
  91. crackerjack/cli/handlers/config_handlers.py +16 -0
  92. crackerjack/cli/handlers/coverage.py +84 -0
  93. crackerjack/cli/handlers/documentation.py +280 -0
  94. crackerjack/cli/handlers/main_handlers.py +497 -0
  95. crackerjack/cli/handlers/monitoring.py +371 -0
  96. crackerjack/cli/handlers.py +249 -49
  97. crackerjack/cli/interactive.py +8 -5
  98. crackerjack/cli/options.py +203 -110
  99. crackerjack/cli/semantic_handlers.py +292 -0
  100. crackerjack/cli/version.py +19 -0
  101. crackerjack/code_cleaner.py +60 -24
  102. crackerjack/config/README.md +472 -0
  103. crackerjack/config/__init__.py +256 -0
  104. crackerjack/config/global_lock_config.py +191 -54
  105. crackerjack/config/hooks.py +188 -16
  106. crackerjack/config/loader.py +239 -0
  107. crackerjack/config/settings.py +141 -0
  108. crackerjack/config/tool_commands.py +331 -0
  109. crackerjack/core/README.md +393 -0
  110. crackerjack/core/async_workflow_orchestrator.py +79 -53
  111. crackerjack/core/autofix_coordinator.py +22 -9
  112. crackerjack/core/container.py +10 -9
  113. crackerjack/core/enhanced_container.py +9 -9
  114. crackerjack/core/performance.py +1 -1
  115. crackerjack/core/performance_monitor.py +5 -3
  116. crackerjack/core/phase_coordinator.py +1018 -634
  117. crackerjack/core/proactive_workflow.py +3 -3
  118. crackerjack/core/retry.py +275 -0
  119. crackerjack/core/service_watchdog.py +167 -23
  120. crackerjack/core/session_coordinator.py +187 -382
  121. crackerjack/core/timeout_manager.py +161 -44
  122. crackerjack/core/workflow/__init__.py +21 -0
  123. crackerjack/core/workflow/workflow_ai_coordinator.py +863 -0
  124. crackerjack/core/workflow/workflow_event_orchestrator.py +1107 -0
  125. crackerjack/core/workflow/workflow_issue_parser.py +714 -0
  126. crackerjack/core/workflow/workflow_phase_executor.py +1158 -0
  127. crackerjack/core/workflow/workflow_security_gates.py +400 -0
  128. crackerjack/core/workflow_orchestrator.py +1247 -953
  129. crackerjack/data/README.md +11 -0
  130. crackerjack/data/__init__.py +8 -0
  131. crackerjack/data/models.py +79 -0
  132. crackerjack/data/repository.py +210 -0
  133. crackerjack/decorators/README.md +180 -0
  134. crackerjack/decorators/__init__.py +35 -0
  135. crackerjack/decorators/error_handling.py +649 -0
  136. crackerjack/decorators/error_handling_decorators.py +334 -0
  137. crackerjack/decorators/helpers.py +58 -0
  138. crackerjack/decorators/patterns.py +281 -0
  139. crackerjack/decorators/utils.py +58 -0
  140. crackerjack/docs/README.md +11 -0
  141. crackerjack/docs/generated/api/CLI_REFERENCE.md +1 -1
  142. crackerjack/documentation/README.md +11 -0
  143. crackerjack/documentation/ai_templates.py +1 -1
  144. crackerjack/documentation/dual_output_generator.py +11 -9
  145. crackerjack/documentation/reference_generator.py +104 -59
  146. crackerjack/dynamic_config.py +52 -61
  147. crackerjack/errors.py +1 -1
  148. crackerjack/events/README.md +11 -0
  149. crackerjack/events/__init__.py +16 -0
  150. crackerjack/events/telemetry.py +175 -0
  151. crackerjack/events/workflow_bus.py +346 -0
  152. crackerjack/exceptions/README.md +301 -0
  153. crackerjack/exceptions/__init__.py +5 -0
  154. crackerjack/exceptions/config.py +4 -0
  155. crackerjack/exceptions/tool_execution_error.py +245 -0
  156. crackerjack/executors/README.md +591 -0
  157. crackerjack/executors/__init__.py +2 -0
  158. crackerjack/executors/async_hook_executor.py +539 -77
  159. crackerjack/executors/cached_hook_executor.py +3 -3
  160. crackerjack/executors/hook_executor.py +967 -102
  161. crackerjack/executors/hook_lock_manager.py +31 -22
  162. crackerjack/executors/individual_hook_executor.py +66 -32
  163. crackerjack/executors/lsp_aware_hook_executor.py +136 -57
  164. crackerjack/executors/progress_hook_executor.py +282 -0
  165. crackerjack/executors/tool_proxy.py +23 -7
  166. crackerjack/hooks/README.md +485 -0
  167. crackerjack/hooks/lsp_hook.py +8 -9
  168. crackerjack/intelligence/README.md +557 -0
  169. crackerjack/interactive.py +37 -10
  170. crackerjack/managers/README.md +369 -0
  171. crackerjack/managers/async_hook_manager.py +41 -57
  172. crackerjack/managers/hook_manager.py +449 -79
  173. crackerjack/managers/publish_manager.py +81 -36
  174. crackerjack/managers/test_command_builder.py +290 -12
  175. crackerjack/managers/test_executor.py +93 -8
  176. crackerjack/managers/test_manager.py +1082 -75
  177. crackerjack/managers/test_progress.py +118 -26
  178. crackerjack/mcp/README.md +374 -0
  179. crackerjack/mcp/cache.py +25 -2
  180. crackerjack/mcp/client_runner.py +35 -18
  181. crackerjack/mcp/context.py +9 -9
  182. crackerjack/mcp/dashboard.py +24 -8
  183. crackerjack/mcp/enhanced_progress_monitor.py +34 -23
  184. crackerjack/mcp/file_monitor.py +27 -6
  185. crackerjack/mcp/progress_components.py +45 -34
  186. crackerjack/mcp/progress_monitor.py +6 -9
  187. crackerjack/mcp/rate_limiter.py +11 -7
  188. crackerjack/mcp/server.py +2 -0
  189. crackerjack/mcp/server_core.py +187 -55
  190. crackerjack/mcp/service_watchdog.py +12 -9
  191. crackerjack/mcp/task_manager.py +2 -2
  192. crackerjack/mcp/tools/README.md +27 -0
  193. crackerjack/mcp/tools/__init__.py +2 -0
  194. crackerjack/mcp/tools/core_tools.py +75 -52
  195. crackerjack/mcp/tools/execution_tools.py +87 -31
  196. crackerjack/mcp/tools/intelligence_tools.py +2 -2
  197. crackerjack/mcp/tools/proactive_tools.py +1 -1
  198. crackerjack/mcp/tools/semantic_tools.py +584 -0
  199. crackerjack/mcp/tools/utility_tools.py +180 -132
  200. crackerjack/mcp/tools/workflow_executor.py +87 -46
  201. crackerjack/mcp/websocket/README.md +31 -0
  202. crackerjack/mcp/websocket/app.py +11 -1
  203. crackerjack/mcp/websocket/event_bridge.py +188 -0
  204. crackerjack/mcp/websocket/jobs.py +27 -4
  205. crackerjack/mcp/websocket/monitoring/__init__.py +25 -0
  206. crackerjack/mcp/websocket/monitoring/api/__init__.py +19 -0
  207. crackerjack/mcp/websocket/monitoring/api/dependencies.py +141 -0
  208. crackerjack/mcp/websocket/monitoring/api/heatmap.py +154 -0
  209. crackerjack/mcp/websocket/monitoring/api/intelligence.py +199 -0
  210. crackerjack/mcp/websocket/monitoring/api/metrics.py +203 -0
  211. crackerjack/mcp/websocket/monitoring/api/telemetry.py +101 -0
  212. crackerjack/mcp/websocket/monitoring/dashboard.py +18 -0
  213. crackerjack/mcp/websocket/monitoring/factory.py +109 -0
  214. crackerjack/mcp/websocket/monitoring/filters.py +10 -0
  215. crackerjack/mcp/websocket/monitoring/metrics.py +64 -0
  216. crackerjack/mcp/websocket/monitoring/models.py +90 -0
  217. crackerjack/mcp/websocket/monitoring/utils.py +171 -0
  218. crackerjack/mcp/websocket/monitoring/websocket_manager.py +78 -0
  219. crackerjack/mcp/websocket/monitoring/websockets/__init__.py +17 -0
  220. crackerjack/mcp/websocket/monitoring/websockets/dependencies.py +126 -0
  221. crackerjack/mcp/websocket/monitoring/websockets/heatmap.py +176 -0
  222. crackerjack/mcp/websocket/monitoring/websockets/intelligence.py +291 -0
  223. crackerjack/mcp/websocket/monitoring/websockets/metrics.py +291 -0
  224. crackerjack/mcp/websocket/monitoring_endpoints.py +16 -2930
  225. crackerjack/mcp/websocket/server.py +1 -3
  226. crackerjack/mcp/websocket/websocket_handler.py +107 -6
  227. crackerjack/models/README.md +308 -0
  228. crackerjack/models/__init__.py +10 -1
  229. crackerjack/models/config.py +639 -22
  230. crackerjack/models/config_adapter.py +6 -6
  231. crackerjack/models/protocols.py +1167 -23
  232. crackerjack/models/pydantic_models.py +320 -0
  233. crackerjack/models/qa_config.py +145 -0
  234. crackerjack/models/qa_results.py +134 -0
  235. crackerjack/models/results.py +35 -0
  236. crackerjack/models/semantic_models.py +258 -0
  237. crackerjack/models/task.py +19 -3
  238. crackerjack/models/test_models.py +60 -0
  239. crackerjack/monitoring/README.md +11 -0
  240. crackerjack/monitoring/ai_agent_watchdog.py +5 -4
  241. crackerjack/monitoring/metrics_collector.py +4 -3
  242. crackerjack/monitoring/regression_prevention.py +4 -3
  243. crackerjack/monitoring/websocket_server.py +4 -241
  244. crackerjack/orchestration/README.md +340 -0
  245. crackerjack/orchestration/__init__.py +43 -0
  246. crackerjack/orchestration/advanced_orchestrator.py +20 -67
  247. crackerjack/orchestration/cache/README.md +312 -0
  248. crackerjack/orchestration/cache/__init__.py +37 -0
  249. crackerjack/orchestration/cache/memory_cache.py +338 -0
  250. crackerjack/orchestration/cache/tool_proxy_cache.py +340 -0
  251. crackerjack/orchestration/config.py +297 -0
  252. crackerjack/orchestration/coverage_improvement.py +13 -6
  253. crackerjack/orchestration/execution_strategies.py +6 -6
  254. crackerjack/orchestration/hook_orchestrator.py +1398 -0
  255. crackerjack/orchestration/strategies/README.md +401 -0
  256. crackerjack/orchestration/strategies/__init__.py +39 -0
  257. crackerjack/orchestration/strategies/adaptive_strategy.py +630 -0
  258. crackerjack/orchestration/strategies/parallel_strategy.py +237 -0
  259. crackerjack/orchestration/strategies/sequential_strategy.py +299 -0
  260. crackerjack/orchestration/test_progress_streamer.py +1 -1
  261. crackerjack/plugins/README.md +11 -0
  262. crackerjack/plugins/hooks.py +3 -2
  263. crackerjack/plugins/loader.py +3 -3
  264. crackerjack/plugins/managers.py +1 -1
  265. crackerjack/py313.py +191 -0
  266. crackerjack/security/README.md +11 -0
  267. crackerjack/services/README.md +374 -0
  268. crackerjack/services/__init__.py +8 -21
  269. crackerjack/services/ai/README.md +295 -0
  270. crackerjack/services/ai/__init__.py +7 -0
  271. crackerjack/services/ai/advanced_optimizer.py +878 -0
  272. crackerjack/services/{contextual_ai_assistant.py → ai/contextual_ai_assistant.py} +5 -3
  273. crackerjack/services/ai/embeddings.py +444 -0
  274. crackerjack/services/ai/intelligent_commit.py +328 -0
  275. crackerjack/services/ai/predictive_analytics.py +510 -0
  276. crackerjack/services/api_extractor.py +5 -3
  277. crackerjack/services/bounded_status_operations.py +45 -5
  278. crackerjack/services/cache.py +249 -318
  279. crackerjack/services/changelog_automation.py +7 -3
  280. crackerjack/services/command_execution_service.py +305 -0
  281. crackerjack/services/config_integrity.py +83 -39
  282. crackerjack/services/config_merge.py +9 -6
  283. crackerjack/services/config_service.py +198 -0
  284. crackerjack/services/config_template.py +13 -26
  285. crackerjack/services/coverage_badge_service.py +6 -4
  286. crackerjack/services/coverage_ratchet.py +53 -27
  287. crackerjack/services/debug.py +18 -7
  288. crackerjack/services/dependency_analyzer.py +4 -4
  289. crackerjack/services/dependency_monitor.py +13 -13
  290. crackerjack/services/documentation_generator.py +4 -2
  291. crackerjack/services/documentation_service.py +62 -33
  292. crackerjack/services/enhanced_filesystem.py +81 -27
  293. crackerjack/services/enterprise_optimizer.py +1 -1
  294. crackerjack/services/error_pattern_analyzer.py +10 -10
  295. crackerjack/services/file_filter.py +221 -0
  296. crackerjack/services/file_hasher.py +5 -7
  297. crackerjack/services/file_io_service.py +361 -0
  298. crackerjack/services/file_modifier.py +615 -0
  299. crackerjack/services/filesystem.py +80 -109
  300. crackerjack/services/git.py +99 -5
  301. crackerjack/services/health_metrics.py +4 -6
  302. crackerjack/services/heatmap_generator.py +12 -3
  303. crackerjack/services/incremental_executor.py +380 -0
  304. crackerjack/services/initialization.py +101 -49
  305. crackerjack/services/log_manager.py +2 -2
  306. crackerjack/services/logging.py +120 -68
  307. crackerjack/services/lsp_client.py +12 -12
  308. crackerjack/services/memory_optimizer.py +27 -22
  309. crackerjack/services/monitoring/README.md +30 -0
  310. crackerjack/services/monitoring/__init__.py +9 -0
  311. crackerjack/services/monitoring/dependency_monitor.py +678 -0
  312. crackerjack/services/monitoring/error_pattern_analyzer.py +676 -0
  313. crackerjack/services/monitoring/health_metrics.py +716 -0
  314. crackerjack/services/monitoring/metrics.py +587 -0
  315. crackerjack/services/{performance_benchmarks.py → monitoring/performance_benchmarks.py} +100 -14
  316. crackerjack/services/{performance_cache.py → monitoring/performance_cache.py} +21 -15
  317. crackerjack/services/{performance_monitor.py → monitoring/performance_monitor.py} +10 -6
  318. crackerjack/services/parallel_executor.py +166 -55
  319. crackerjack/services/patterns/__init__.py +142 -0
  320. crackerjack/services/patterns/agents.py +107 -0
  321. crackerjack/services/patterns/code/__init__.py +15 -0
  322. crackerjack/services/patterns/code/detection.py +118 -0
  323. crackerjack/services/patterns/code/imports.py +107 -0
  324. crackerjack/services/patterns/code/paths.py +159 -0
  325. crackerjack/services/patterns/code/performance.py +119 -0
  326. crackerjack/services/patterns/code/replacement.py +36 -0
  327. crackerjack/services/patterns/core.py +212 -0
  328. crackerjack/services/patterns/documentation/__init__.py +14 -0
  329. crackerjack/services/patterns/documentation/badges_markdown.py +96 -0
  330. crackerjack/services/patterns/documentation/comments_blocks.py +83 -0
  331. crackerjack/services/patterns/documentation/docstrings.py +89 -0
  332. crackerjack/services/patterns/formatting.py +226 -0
  333. crackerjack/services/patterns/operations.py +339 -0
  334. crackerjack/services/patterns/security/__init__.py +23 -0
  335. crackerjack/services/patterns/security/code_injection.py +122 -0
  336. crackerjack/services/patterns/security/credentials.py +190 -0
  337. crackerjack/services/patterns/security/path_traversal.py +221 -0
  338. crackerjack/services/patterns/security/unsafe_operations.py +216 -0
  339. crackerjack/services/patterns/templates.py +62 -0
  340. crackerjack/services/patterns/testing/__init__.py +18 -0
  341. crackerjack/services/patterns/testing/error_patterns.py +107 -0
  342. crackerjack/services/patterns/testing/pytest_output.py +126 -0
  343. crackerjack/services/patterns/tool_output/__init__.py +16 -0
  344. crackerjack/services/patterns/tool_output/bandit.py +72 -0
  345. crackerjack/services/patterns/tool_output/other.py +97 -0
  346. crackerjack/services/patterns/tool_output/pyright.py +67 -0
  347. crackerjack/services/patterns/tool_output/ruff.py +44 -0
  348. crackerjack/services/patterns/url_sanitization.py +114 -0
  349. crackerjack/services/patterns/utilities.py +42 -0
  350. crackerjack/services/patterns/utils.py +339 -0
  351. crackerjack/services/patterns/validation.py +46 -0
  352. crackerjack/services/patterns/versioning.py +62 -0
  353. crackerjack/services/predictive_analytics.py +21 -8
  354. crackerjack/services/profiler.py +280 -0
  355. crackerjack/services/quality/README.md +415 -0
  356. crackerjack/services/quality/__init__.py +11 -0
  357. crackerjack/services/quality/anomaly_detector.py +392 -0
  358. crackerjack/services/quality/pattern_cache.py +333 -0
  359. crackerjack/services/quality/pattern_detector.py +479 -0
  360. crackerjack/services/quality/qa_orchestrator.py +491 -0
  361. crackerjack/services/{quality_baseline.py → quality/quality_baseline.py} +163 -2
  362. crackerjack/services/{quality_baseline_enhanced.py → quality/quality_baseline_enhanced.py} +4 -1
  363. crackerjack/services/{quality_intelligence.py → quality/quality_intelligence.py} +180 -16
  364. crackerjack/services/regex_patterns.py +58 -2987
  365. crackerjack/services/regex_utils.py +55 -29
  366. crackerjack/services/secure_status_formatter.py +42 -15
  367. crackerjack/services/secure_subprocess.py +35 -2
  368. crackerjack/services/security.py +16 -8
  369. crackerjack/services/server_manager.py +40 -51
  370. crackerjack/services/smart_scheduling.py +46 -6
  371. crackerjack/services/status_authentication.py +3 -3
  372. crackerjack/services/thread_safe_status_collector.py +1 -0
  373. crackerjack/services/tool_filter.py +368 -0
  374. crackerjack/services/tool_version_service.py +9 -5
  375. crackerjack/services/unified_config.py +43 -351
  376. crackerjack/services/vector_store.py +689 -0
  377. crackerjack/services/version_analyzer.py +6 -4
  378. crackerjack/services/version_checker.py +14 -8
  379. crackerjack/services/zuban_lsp_service.py +5 -4
  380. crackerjack/slash_commands/README.md +11 -0
  381. crackerjack/slash_commands/init.md +2 -12
  382. crackerjack/slash_commands/run.md +84 -50
  383. crackerjack/tools/README.md +11 -0
  384. crackerjack/tools/__init__.py +30 -0
  385. crackerjack/tools/_git_utils.py +105 -0
  386. crackerjack/tools/check_added_large_files.py +139 -0
  387. crackerjack/tools/check_ast.py +105 -0
  388. crackerjack/tools/check_json.py +103 -0
  389. crackerjack/tools/check_jsonschema.py +297 -0
  390. crackerjack/tools/check_toml.py +103 -0
  391. crackerjack/tools/check_yaml.py +110 -0
  392. crackerjack/tools/codespell_wrapper.py +72 -0
  393. crackerjack/tools/end_of_file_fixer.py +202 -0
  394. crackerjack/tools/format_json.py +128 -0
  395. crackerjack/tools/mdformat_wrapper.py +114 -0
  396. crackerjack/tools/trailing_whitespace.py +198 -0
  397. crackerjack/tools/validate_regex_patterns.py +7 -3
  398. crackerjack/ui/README.md +11 -0
  399. crackerjack/ui/dashboard_renderer.py +28 -0
  400. crackerjack/ui/templates/README.md +11 -0
  401. crackerjack/utils/console_utils.py +13 -0
  402. crackerjack/utils/dependency_guard.py +230 -0
  403. crackerjack/utils/retry_utils.py +275 -0
  404. crackerjack/workflows/README.md +590 -0
  405. crackerjack/workflows/__init__.py +46 -0
  406. crackerjack/workflows/actions.py +811 -0
  407. crackerjack/workflows/auto_fix.py +444 -0
  408. crackerjack/workflows/container_builder.py +499 -0
  409. crackerjack/workflows/definitions.py +443 -0
  410. crackerjack/workflows/engine.py +177 -0
  411. crackerjack/workflows/event_bridge.py +242 -0
  412. {crackerjack-0.37.9.dist-info → crackerjack-0.45.2.dist-info}/METADATA +678 -98
  413. crackerjack-0.45.2.dist-info/RECORD +478 -0
  414. {crackerjack-0.37.9.dist-info → crackerjack-0.45.2.dist-info}/WHEEL +1 -1
  415. crackerjack/managers/test_manager_backup.py +0 -1075
  416. crackerjack/mcp/tools/execution_tools_backup.py +0 -1011
  417. crackerjack/mixins/__init__.py +0 -3
  418. crackerjack/mixins/error_handling.py +0 -145
  419. crackerjack/services/config.py +0 -358
  420. crackerjack/ui/server_panels.py +0 -125
  421. crackerjack-0.37.9.dist-info/RECORD +0 -231
  422. /crackerjack/adapters/{rust_tool_adapter.py → lsp/_base.py} +0 -0
  423. /crackerjack/adapters/{lsp_client.py → lsp/_client.py} +0 -0
  424. {crackerjack-0.37.9.dist-info → crackerjack-0.45.2.dist-info}/entry_points.txt +0 -0
  425. {crackerjack-0.37.9.dist-info → crackerjack-0.45.2.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,485 @@
1
+ > Crackerjack Docs: [Main](<../../README.md>) | [CLAUDE.md](../../docs/guides/CLAUDE.md) | Hooks
2
+
3
+ # Hooks
4
+
5
+ Hook integrations and lifecycle extensions that plug into the runtime for intelligent, LSP-aware quality enforcement.
6
+
7
+ ## Overview
8
+
9
+ The hooks system provides intelligent integration with quality tools through both traditional pre-commit hooks and modern LSP-based type checking. Hooks are executed in two stages (fast and comprehensive) with automatic retry logic and parallel execution support.
10
+
11
+ ## Hook System Architecture
12
+
13
+ ### Two-Stage Execution Model
14
+
15
+ Crackerjack uses a two-stage hook execution model for optimal performance:
16
+
17
+ 1. **Fast Hooks** (~5s) - Quick formatters and basic checks with automatic retry
18
+
19
+ - Formatting tools (Ruff, trailing whitespace, end-of-file fixer)
20
+ - Import sorting
21
+ - Basic static analysis
22
+ - **Retry Policy**: Automatically retry once if failed
23
+
24
+ 1. **Comprehensive Hooks** (~30s) - Thorough analysis without retry
25
+
26
+ - Type checking (Zuban/mypy via LSP)
27
+ - Security scanning (Bandit)
28
+ - Complexity analysis
29
+ - Dead code detection (Skylos)
30
+ - **Retry Policy**: Run once, collect all issues
31
+
32
+ ### Hook Lifecycle
33
+
34
+ ```
35
+ ┌─────────────────────────────────────────────────────────────┐
36
+ │ Crackerjack Workflow │
37
+ └─────────────────────────────────────────────────────────────┘
38
+
39
+
40
+ ┌──────────────────────────────────┐
41
+ │ Phase 1: Fast Hooks (~5s) │
42
+ │ • Formatters (Ruff, etc.) │
43
+ │ • Import sorting │
44
+ │ • Retry once on failure │
45
+ └──────────────────────────────────┘
46
+
47
+
48
+ ┌────────────────┐
49
+ │ Formatting Fix? │
50
+ └────────────────┘
51
+ │ │
52
+ Yes No
53
+ │ │
54
+ ▼ ▼
55
+ ┌──────────┐ ┌──────────┐
56
+ │ Retry │ │ Continue │
57
+ │ Fast │ │ │
58
+ │ Hooks │ │ │
59
+ └──────────┘ └──────────┘
60
+ │ │
61
+ └─────┬──────┘
62
+
63
+ ┌──────────────────────────────────┐
64
+ │ Phase 2: Test Suite │
65
+ │ • Collect ALL failures │
66
+ │ • Don't stop on first error │
67
+ │ • Parallel execution (xdist) │
68
+ └──────────────────────────────────┘
69
+
70
+
71
+ ┌──────────────────────────────────┐
72
+ │ Phase 3: Comprehensive Hooks │
73
+ │ • Type checking (LSP) │
74
+ │ • Security scanning │
75
+ │ • Complexity analysis │
76
+ │ • Collect ALL issues │
77
+ └──────────────────────────────────┘
78
+
79
+
80
+ ┌──────────────────┐
81
+ │ All Issues Found? │
82
+ └──────────────────┘
83
+ │ │
84
+ Yes No
85
+ │ │
86
+ ▼ ▼
87
+ ┌──────────┐ ┌──────────┐
88
+ │ AI Batch │ │ Success! │
89
+ │ Fixing │ │ │
90
+ │ (if │ │ │
91
+ │ enabled) │ │ │
92
+ └──────────┘ └──────────┘
93
+ ```
94
+
95
+ ## Hook Implementations
96
+
97
+ ### LSP Hook (`lsp_hook.py`)
98
+
99
+ LSP-aware type checking hook that communicates with running Zuban LSP server:
100
+
101
+ **Features:**
102
+
103
+ - **Fast Type Checking** - Uses running LSP server (no process spawn overhead)
104
+ - **Incremental Analysis** - Checks only modified files when possible
105
+ - **Fallback Support** - Falls back to direct Zuban execution if LSP unavailable
106
+ - **Smart Caching** - Leverages LSP server's incremental compilation cache
107
+
108
+ **Benefits:**
109
+
110
+ - 10-20x faster than spawning separate type checker process
111
+ - Real-time feedback during development
112
+ - Shared analysis state with IDE
113
+ - Reduced memory usage (single server process)
114
+
115
+ **Usage:**
116
+
117
+ ```python
118
+ from crackerjack.hooks.lsp_hook import main as lsp_hook_main
119
+
120
+ # Run LSP-aware type checking
121
+ exit_code = lsp_hook_main(console=console)
122
+ ```
123
+
124
+ ## Hook Definitions
125
+
126
+ Hooks are defined in `/home/user/crackerjack/crackerjack/config/hooks.py`:
127
+
128
+ ### HookDefinition Attributes
129
+
130
+ ```python
131
+ @dataclass
132
+ class HookDefinition:
133
+ name: str # Hook identifier
134
+ command: list[str] # Command to execute
135
+ timeout: int = 60 # Execution timeout (seconds)
136
+ stage: HookStage = FAST # FAST or COMPREHENSIVE
137
+ description: str | None # Human-readable description
138
+ retry_on_failure: bool # Auto-retry if failed
139
+ is_formatting: bool # Is this a formatter?
140
+ manual_stage: bool # Manual pre-commit stage
141
+ config_path: Path | None # Custom config file path
142
+ security_level: SecurityLevel # CRITICAL, HIGH, MEDIUM, LOW
143
+ use_precommit_legacy: bool # Use pre-commit wrapper
144
+ accepts_file_paths: bool # Accepts individual file paths
145
+ ```
146
+
147
+ ### HookStrategy
148
+
149
+ Groups hooks with execution strategy:
150
+
151
+ ```python
152
+ @dataclass
153
+ class HookStrategy:
154
+ name: str # Strategy name
155
+ hooks: list[HookDefinition] # Hooks to execute
156
+ timeout: int = 300 # Total timeout
157
+ retry_policy: RetryPolicy = NONE # Retry behavior
158
+ parallel: bool = False # Parallel execution
159
+ max_workers: int = 3 # Max parallel workers
160
+ ```
161
+
162
+ ### Hook Stages
163
+
164
+ ```python
165
+ class HookStage(Enum):
166
+ FAST = "fast" # Fast hooks (~5s)
167
+ COMPREHENSIVE = "comprehensive" # Comprehensive hooks (~30s)
168
+ ```
169
+
170
+ ### Retry Policies
171
+
172
+ ```python
173
+ class RetryPolicy(Enum):
174
+ NONE = "none" # No retry
175
+ FORMATTING_ONLY = "formatting_only" # Retry formatters only
176
+ ALL_HOOKS = "all_hooks" # Retry all hooks
177
+ ```
178
+
179
+ ### Security Levels
180
+
181
+ ```python
182
+ class SecurityLevel(Enum):
183
+ CRITICAL = "critical" # Security-critical hooks
184
+ HIGH = "high" # High-priority checks
185
+ MEDIUM = "medium" # Standard checks
186
+ LOW = "low" # Low-priority checks
187
+ ```
188
+
189
+ ## Creating Custom Hooks
190
+
191
+ ### Method 1: Add to Hook Definitions
192
+
193
+ ```python
194
+ # In crackerjack/config/hooks.py
195
+ from crackerjack.config.hooks import HookDefinition, HookStage, SecurityLevel
196
+
197
+ CUSTOM_HOOK = HookDefinition(
198
+ name="my-custom-check",
199
+ command=["python", "-m", "my_tool", "check"],
200
+ timeout=120,
201
+ stage=HookStage.COMPREHENSIVE,
202
+ description="Custom quality check",
203
+ retry_on_failure=False,
204
+ security_level=SecurityLevel.MEDIUM,
205
+ use_precommit_legacy=False, # Direct invocation
206
+ accepts_file_paths=True, # Can process individual files
207
+ )
208
+ ```
209
+
210
+ ### Method 2: LSP-Aware Hook
211
+
212
+ For tools with LSP support:
213
+
214
+ ```python
215
+ #!/usr/bin/env python3
216
+ """LSP-aware hook for custom tool."""
217
+
218
+ import sys
219
+ from pathlib import Path
220
+ from acb.console import Console
221
+ from crackerjack.services.lsp_client import LSPClient
222
+
223
+
224
+ def main(console: Console | None = None) -> int:
225
+ console = console or Console()
226
+ files_to_check = sys.argv[1:] if len(sys.argv) > 1 else []
227
+
228
+ lsp_client = LSPClient()
229
+
230
+ if not lsp_client.is_server_running():
231
+ # Fallback to direct tool execution
232
+ return run_tool_directly(files_to_check)
233
+
234
+ # Use LSP server for checking
235
+ diagnostics = lsp_client.get_diagnostics(files_to_check)
236
+
237
+ if diagnostics:
238
+ for diag in diagnostics:
239
+ console.print(f"[red]✗[/red] {diag.file}:{diag.line}: {diag.message}")
240
+ return 1
241
+
242
+ console.print("[green]✓[/green] All checks passed")
243
+ return 0
244
+
245
+
246
+ if __name__ == "__main__":
247
+ sys.exit(main())
248
+ ```
249
+
250
+ ### Method 3: Pre-commit Integration
251
+
252
+ Add to `.pre-commit-config.yaml`:
253
+
254
+ ```yaml
255
+ repos:
256
+ - repo: local
257
+ hooks:
258
+ - id: my-custom-check
259
+ name: My Custom Check
260
+ entry: python -m my_tool check
261
+ language: system
262
+ types: [python]
263
+ pass_filenames: true
264
+ stages: [manual] # For comprehensive stage
265
+ ```
266
+
267
+ ## Hook Execution Patterns
268
+
269
+ ### Sequential Execution
270
+
271
+ ```python
272
+ from crackerjack.executors import HookExecutor
273
+ from acb.depends import depends
274
+
275
+ executor = depends.get(HookExecutor)
276
+
277
+ # Execute hooks sequentially
278
+ result = await executor.execute_strategy(strategy_name="fast_hooks", parallel=False)
279
+ ```
280
+
281
+ ### Parallel Execution
282
+
283
+ ```python
284
+ # Execute compatible hooks in parallel
285
+ result = await executor.execute_strategy(
286
+ strategy_name="comprehensive_hooks", parallel=True, max_workers=4
287
+ )
288
+ ```
289
+
290
+ ### Selective Execution
291
+
292
+ ```python
293
+ # Execute specific hooks
294
+ result = await executor.execute_hooks(
295
+ hooks=["ruff-format", "ruff-check"], stage=HookStage.FAST
296
+ )
297
+ ```
298
+
299
+ ### Incremental Execution (File-Targeted)
300
+
301
+ ```python
302
+ from pathlib import Path
303
+
304
+ # Only check modified files
305
+ modified_files = [Path("src/main.py"), Path("tests/test_main.py")]
306
+
307
+ result = await executor.execute_hooks_on_files(
308
+ hooks=["ruff-check", "mypy"], files=modified_files
309
+ )
310
+ ```
311
+
312
+ ## Configuration
313
+
314
+ Hooks are configured through ACB Settings:
315
+
316
+ ```yaml
317
+ # settings/crackerjack.yaml
318
+
319
+ # Hook execution
320
+ skip_hooks: false # Skip all hooks
321
+ hooks_parallel: true # Parallel hook execution
322
+ max_parallel_hooks: 4 # Max parallel workers
323
+ hook_timeout: 300 # Global hook timeout (seconds)
324
+
325
+ # Fast hooks configuration
326
+ fast_hooks_enabled: true
327
+ fast_hooks_timeout: 60
328
+ fast_hooks_retry: true # Auto-retry on failure
329
+
330
+ # Comprehensive hooks configuration
331
+ comprehensive_hooks_enabled: true
332
+ comprehensive_hooks_timeout: 180
333
+ comprehensive_hooks_retry: false # Don't retry (collect all issues)
334
+
335
+ # LSP integration
336
+ lsp_enabled: true
337
+ lsp_fallback: true # Fallback to direct execution
338
+ lsp_server_startup_timeout: 30
339
+
340
+ # Hook-specific overrides
341
+ hook_overrides:
342
+ ruff-format:
343
+ timeout: 120
344
+ zuban-lsp:
345
+ use_lsp: true
346
+ fallback_command: ["zuban", "check", "src"]
347
+ ```
348
+
349
+ ## Usage Examples
350
+
351
+ ### Basic Hook Execution
352
+
353
+ ```python
354
+ from crackerjack.executors import HookExecutor
355
+ from pathlib import Path
356
+
357
+ # Initialize executor
358
+ executor = HookExecutor(console=console, pkg_path=Path.cwd(), verbose=True)
359
+
360
+ # Run fast hooks
361
+ fast_result = await executor.execute_strategy("fast_hooks")
362
+
363
+ if fast_result.success:
364
+ print("✅ Fast hooks passed")
365
+ else:
366
+ print(f"❌ {fast_result.failed_count} fast hooks failed")
367
+
368
+ # Run comprehensive hooks
369
+ comp_result = await executor.execute_strategy("comprehensive_hooks")
370
+ ```
371
+
372
+ ### LSP-Aware Type Checking
373
+
374
+ ```bash
375
+ # Command-line usage
376
+ python -m crackerjack.hooks.lsp_hook src/main.py tests/test_main.py
377
+
378
+ # Or check all project files
379
+ python -m crackerjack.hooks.lsp_hook
380
+ ```
381
+
382
+ ### Custom Hook Strategy
383
+
384
+ ```python
385
+ from crackerjack.config.hooks import HookStrategy, HookDefinition, RetryPolicy
386
+
387
+ custom_strategy = HookStrategy(
388
+ name="security-audit",
389
+ hooks=[
390
+ HookDefinition(
391
+ name="bandit",
392
+ command=["bandit", "-r", "src"],
393
+ timeout=180,
394
+ security_level=SecurityLevel.CRITICAL,
395
+ ),
396
+ HookDefinition(
397
+ name="safety",
398
+ command=["safety", "check"],
399
+ timeout=60,
400
+ security_level=SecurityLevel.HIGH,
401
+ ),
402
+ ],
403
+ timeout=300,
404
+ retry_policy=RetryPolicy.NONE,
405
+ parallel=True,
406
+ max_workers=2,
407
+ )
408
+
409
+ # Execute custom strategy
410
+ result = await executor.execute_custom_strategy(custom_strategy)
411
+ ```
412
+
413
+ ## Integration with Executors
414
+
415
+ Hooks are executed by specialized executors (see [Executors](<../executors/README.md>)):
416
+
417
+ - **HookExecutor** - Base executor with sequential execution
418
+ - **AsyncHookExecutor** - Asynchronous hook execution
419
+ - **CachedHookExecutor** - Caching for repeated executions
420
+ - **ProgressHookExecutor** - Progress tracking and reporting
421
+ - **LSPAwareHookExecutor** - LSP-aware execution optimization
422
+
423
+ ## Best Practices
424
+
425
+ 1. **Use Two-Stage Model** - Separate fast and comprehensive hooks for optimal workflow
426
+ 1. **Enable LSP** - Use LSP integration for 10-20x faster type checking
427
+ 1. **Retry Formatters** - Enable auto-retry for formatting hooks only
428
+ 1. **Collect All Issues** - Don't fail fast in comprehensive stage
429
+ 1. **Parallel Execution** - Enable parallel execution for independent hooks
430
+ 1. **Set Appropriate Timeouts** - Configure per-hook timeouts based on codebase size
431
+ 1. **Use Incremental Execution** - Target only modified files when possible
432
+ 1. **Security Levels** - Assign appropriate security levels for prioritization
433
+ 1. **Cache Results** - Use CachedHookExecutor for repeated runs
434
+ 1. **Monitor Performance** - Track hook execution times and optimize slow hooks
435
+
436
+ ## Performance Optimization
437
+
438
+ ### LSP vs Direct Execution
439
+
440
+ ```
441
+ Traditional (direct tool invocation):
442
+ Type checking: ~30-60s per run
443
+ Memory: ~500MB per process
444
+ Startup overhead: ~2-5s
445
+
446
+ LSP-aware (persistent server):
447
+ Type checking: ~2-5s per run (10-20x faster)
448
+ Memory: ~500MB shared across all checks
449
+ Startup overhead: ~0s (server already running)
450
+ ```
451
+
452
+ ### Caching Strategy
453
+
454
+ ```python
455
+ from crackerjack.executors import CachedHookExecutor
456
+
457
+ cached_executor = CachedHookExecutor(
458
+ console=console,
459
+ pkg_path=pkg_path,
460
+ cache_ttl=3600, # 1 hour cache
461
+ )
462
+
463
+ # First run: Full execution
464
+ result1 = await cached_executor.execute_strategy("fast_hooks")
465
+
466
+ # Subsequent runs: Cached results for unchanged files
467
+ result2 = await cached_executor.execute_strategy("fast_hooks")
468
+ print(f"Cache hit rate: {result2.cache_hit_rate:.1%}")
469
+ ```
470
+
471
+ ## Related
472
+
473
+ - [Executors](<../executors/README.md>) - Hook execution engines
474
+ - [Config](<../config/README.md>) - Hook configuration and definitions
475
+ - [Workflows](<../workflows/README.md>) - Workflow integration
476
+ - [CLAUDE.md](../../docs/guides/CLAUDE.md) - Two-stage quality process documentation
477
+
478
+ ## Future Enhancements
479
+
480
+ - [ ] DAG-based hook dependency resolution
481
+ - [ ] Real-time hook execution monitoring dashboard
482
+ - [ ] Machine learning for hook execution optimization
483
+ - [ ] Distributed hook execution across multiple machines
484
+ - [ ] Hook execution profiling and bottleneck detection
485
+ - [ ] Custom hook plugin system with discovery
@@ -10,27 +10,26 @@ type checking during pre-commit hooks.
10
10
  import sys
11
11
  from pathlib import Path
12
12
 
13
+ from acb.console import Console
14
+
13
15
  from crackerjack.services.lsp_client import LSPClient
14
- from rich.console import Console
15
16
 
16
17
 
17
- def main() -> int:
18
+ def main(console: Console | None = None) -> int:
18
19
  """Main entry point for LSP hook."""
19
- console = Console()
20
-
20
+ console = console or Console()
21
21
  # Get files to check from command line arguments
22
22
  files_to_check = sys.argv[1:] if len(sys.argv) > 1 else []
23
23
 
24
24
  # If no files specified, check project files
25
25
  if not files_to_check:
26
- files_to_check = _get_project_files(console)
26
+ files_to_check = _get_project_files()
27
27
 
28
28
  if not files_to_check:
29
29
  console.print("🔍 No Python files to check")
30
30
  return 0
31
31
 
32
- # Initialize LSP client
33
- lsp_client = LSPClient(console)
32
+ lsp_client = LSPClient()
34
33
 
35
34
  # Check if LSP server is running
36
35
  if not lsp_client.is_server_running():
@@ -40,10 +39,10 @@ def main() -> int:
40
39
  return _check_files_with_lsp(console, lsp_client, files_to_check)
41
40
 
42
41
 
43
- def _get_project_files(console: Console) -> list[str]:
42
+ def _get_project_files() -> list[str]:
44
43
  """Get project files to check."""
45
44
  project_path = Path.cwd()
46
- lsp_client = LSPClient(console)
45
+ lsp_client = LSPClient()
47
46
  return lsp_client.get_project_files(project_path)
48
47
 
49
48