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,97 @@
1
+ """Additional tool output parsing patterns.
2
+
3
+ This module provides regex patterns for parsing output from various development tools
4
+ including mypy (type checking), vulture (dead code detection), and complexipy (complexity analysis).
5
+ """
6
+
7
+ from ..core import ValidatedPattern
8
+
9
+ PATTERNS = {
10
+ "complexipy_complex": ValidatedPattern(
11
+ name="complexipy_complex",
12
+ pattern=r"^(.+?): (\d+): (\d+) - (.+) is too complex \((\d+)\)",
13
+ replacement=r"File: \1, Line: \2, Col: \3, Function: \4, Complexity: \5",
14
+ description="Parse complexipy complexity detection: file: line: col - function "
15
+ "is too complex (score)",
16
+ test_cases=[
17
+ (
18
+ "src/main.py: 42: 1 - process_data is too complex (16)",
19
+ "File: src/main.py, Line: 42, Col: 1, Function: process_data, "
20
+ "Complexity: 16",
21
+ ),
22
+ (
23
+ "crackerjack/core.py: 100: 5 - calculate_metrics is too complex (25)",
24
+ "File: crackerjack/core.py, Line: 100, Col: 5, Function: "
25
+ "calculate_metrics, Complexity: 25",
26
+ ),
27
+ (
28
+ "./utils.py: 200: 1 - complex_function is too complex (18)",
29
+ "File: ./utils.py, Line: 200, Col: 1, Function: complex_function, "
30
+ "Complexity: 18",
31
+ ),
32
+ ],
33
+ ),
34
+ "mypy_error": ValidatedPattern(
35
+ name="mypy_error",
36
+ pattern=r"^(.+?): (\d+): error: (.+)$",
37
+ replacement=r"File: \1, Line: \2, Error: \3",
38
+ description="Parse mypy error output: file: line: error: message",
39
+ test_cases=[
40
+ (
41
+ "src/main.py: 42: error: Incompatible types in assignment",
42
+ "File: src/main.py, Line: 42, Error: Incompatible types in assignment",
43
+ ),
44
+ (
45
+ "crackerjack/core.py: 123: error: Name 'undefined' is not defined",
46
+ "File: crackerjack/core.py, Line: 123, Error: Name 'undefined' is not "
47
+ "defined",
48
+ ),
49
+ (
50
+ "./main.py: 999: error: Argument has incompatible type",
51
+ "File: ./main.py, Line: 999, Error: Argument has incompatible type",
52
+ ),
53
+ ],
54
+ ),
55
+ "mypy_note": ValidatedPattern(
56
+ name="mypy_note",
57
+ pattern=r"^(.+?): (\d+): note: (.+)$",
58
+ replacement=r"File: \1, Line: \2, Note: \3",
59
+ description="Parse mypy note output: file: line: note: message",
60
+ test_cases=[
61
+ (
62
+ "src/main.py: 42: note: See https://mypy.rtfd.io/...",
63
+ "File: src/main.py, Line: 42, Note: See https://mypy.rtfd.io/...",
64
+ ),
65
+ (
66
+ "crackerjack/core.py: 123: note: Consider using a type annotation",
67
+ "File: crackerjack/core.py, Line: 123, Note: Consider using a type "
68
+ "annotation",
69
+ ),
70
+ (
71
+ "./main.py: 999: note: Consider using Optional[...]",
72
+ "File: ./main.py, Line: 999, Note: Consider using Optional[...]",
73
+ ),
74
+ ],
75
+ ),
76
+ "vulture_unused": ValidatedPattern(
77
+ name="vulture_unused",
78
+ pattern=r"^(.+?): (\d+): unused (.+) '(.+)'",
79
+ replacement=r"File: \1, Line: \2, Unused \3: '\4'",
80
+ description="Parse vulture unused code detection: file: line: unused type"
81
+ " 'name'",
82
+ test_cases=[
83
+ (
84
+ "src/main.py: 42: unused function 'helper'",
85
+ "File: src/main.py, Line: 42, Unused function: 'helper'",
86
+ ),
87
+ (
88
+ "crackerjack/core.py: 123: unused variable 'result'",
89
+ "File: crackerjack/core.py, Line: 123, Unused variable: 'result'",
90
+ ),
91
+ (
92
+ "./main.py: 999: unused import 'os'",
93
+ "File: ./main.py, Line: 999, Unused import: 'os'",
94
+ ),
95
+ ],
96
+ ),
97
+ }
@@ -0,0 +1,67 @@
1
+ """Pyright type checker output parsing patterns.
2
+
3
+ This module provides regex patterns for parsing Pyright static type checker output,
4
+ including errors, warnings, and summary information.
5
+ """
6
+
7
+ from ..core import ValidatedPattern
8
+
9
+ PATTERNS = {
10
+ "pyright_error": ValidatedPattern(
11
+ name="pyright_error",
12
+ pattern=r"^(.+?): (\d+): (\d+) - error: (.+)$",
13
+ replacement=r"File: \1, Line: \2, Col: \3, Error: \4",
14
+ description="Parse pyright error output: file: line: col - error: message",
15
+ test_cases=[
16
+ (
17
+ "src/main.py: 42: 10 - error: Type 'str' is not assignable to type "
18
+ "'int'",
19
+ "File: src/main.py, Line: 42, Col: 10, Error: Type 'str' is not "
20
+ "assignable to type 'int'",
21
+ ),
22
+ (
23
+ "crackerjack/core.py: 123: 5 - error: Cannot assign to None",
24
+ "File: crackerjack/core.py, Line: 123, Col: 5, Error: Cannot assign "
25
+ "to None",
26
+ ),
27
+ (
28
+ "./main.py: 999: 50 - error: Missing return statement",
29
+ "File: ./main.py, Line: 999, Col: 50, Error: Missing return statement",
30
+ ),
31
+ ],
32
+ ),
33
+ "pyright_warning": ValidatedPattern(
34
+ name="pyright_warning",
35
+ pattern=r"^(.+?): (\d+): (\d+) - warning: (.+)$",
36
+ replacement=r"File: \1, Line: \2, Col: \3, Warning: \4",
37
+ description="Parse pyright warning output: file: line: col - warning: message",
38
+ test_cases=[
39
+ (
40
+ "src/main.py: 42: 10 - warning: Type 'Any' is not specific enough",
41
+ "File: src/main.py, Line: 42, Col: 10, Warning: Type 'Any' is not "
42
+ "specific enough",
43
+ ),
44
+ (
45
+ "crackerjack/core.py: 123: 5 - warning: Variable is untyped",
46
+ "File: crackerjack/core.py, Line: 123, Col: 5, Warning: Variable is "
47
+ "untyped",
48
+ ),
49
+ (
50
+ "./main.py: 999: 50 - warning: Type could be more specific",
51
+ "File: ./main.py, Line: 999, Col: 50, Warning: Type could be more"
52
+ " specific",
53
+ ),
54
+ ],
55
+ ),
56
+ "pyright_summary": ValidatedPattern(
57
+ name="pyright_summary",
58
+ pattern=r"(\d+) error[s]?, (\d+) warning[s]?",
59
+ replacement=r"\1 errors, \2 warnings",
60
+ description="Parse pyright summary with error and warning counts",
61
+ test_cases=[
62
+ ("5 errors, 3 warnings", "5 errors, 3 warnings"),
63
+ ("1 error, 1 warning", "1 errors, 1 warnings"),
64
+ ("0 errors, 10 warnings found", "0 errors, 10 warnings found"),
65
+ ],
66
+ ),
67
+ }
@@ -0,0 +1,44 @@
1
+ """Ruff linter output parsing patterns.
2
+
3
+ This module provides regex patterns for parsing Ruff static analysis tool output,
4
+ including error messages and summary lines.
5
+ """
6
+
7
+ from ..core import ValidatedPattern
8
+
9
+ PATTERNS = {
10
+ "ruff_check_error": ValidatedPattern(
11
+ name="ruff_check_error",
12
+ pattern=r"^(.+?): (\d+): (\d+): ([A-Z]\d+) (.+)$",
13
+ replacement=r"File: \1, Line: \2, Col: \3, Code: \4, Message: \5",
14
+ description="Parse ruff-check error output: file: line: col: code message",
15
+ test_cases=[
16
+ (
17
+ "src/main.py: 42: 10: E501 Line too long (88 > 79 characters)",
18
+ "File: src/main.py, Line: 42, Col: 10, Code: E501, Message: Line too "
19
+ "long (88 > 79 characters)",
20
+ ),
21
+ (
22
+ "crackerjack/core.py: 123: 5: F401 'os' imported but unused",
23
+ "File: crackerjack/core.py, Line: 123, Col: 5, Code: F401, Message: "
24
+ "'os' imported but unused",
25
+ ),
26
+ (
27
+ "src/main.py: 999: 80: W291 trailing whitespace",
28
+ "File: src/main.py, Line: 999, Col: 80, Code: W291, Message: trailing "
29
+ "whitespace",
30
+ ),
31
+ ],
32
+ ),
33
+ "ruff_check_summary": ValidatedPattern(
34
+ name="ruff_check_summary",
35
+ pattern=r"Found (\d+) error",
36
+ replacement=r"Found \1 error(s)",
37
+ description="Parse ruff-check summary line for error count",
38
+ test_cases=[
39
+ ("Found 5 error", "Found 5 error(s)"),
40
+ ("Found 1 error in 3 files", "Found 1 error(s) in 3 files"),
41
+ ("Found 42 error detected", "Found 42 error(s) detected"),
42
+ ],
43
+ ),
44
+ }
@@ -0,0 +1,114 @@
1
+ """URL sanitization patterns for security."""
2
+
3
+ from .core import ValidatedPattern
4
+
5
+ PATTERNS: dict[str, ValidatedPattern] = {
6
+ "sanitize_localhost_urls": ValidatedPattern(
7
+ name="sanitize_localhost_urls",
8
+ pattern=r"https?: //localhost: \d+[^\s]*",
9
+ replacement="[INTERNAL_URL]",
10
+ description="Sanitize localhost URLs with ports for security",
11
+ global_replace=True,
12
+ test_cases=[
13
+ ("http: //localhost: 8000/api/test", "[INTERNAL_URL]"),
14
+ ("https: //localhost: 3000/dashboard", "[INTERNAL_URL]"),
15
+ (
16
+ "Visit http: //localhost: 8080/admin for details",
17
+ "Visit [INTERNAL_URL] for details",
18
+ ),
19
+ ("https: //example.com/test", "https: //example.com/test"),
20
+ ],
21
+ ),
22
+ "sanitize_127_urls": ValidatedPattern(
23
+ name="sanitize_127_urls",
24
+ pattern=r"https?: //127\.0\.0\.1: \d+[^\s]*",
25
+ replacement="[INTERNAL_URL]",
26
+ description="Sanitize 127.0.0.1 URLs with ports for security",
27
+ global_replace=True,
28
+ test_cases=[
29
+ ("http: //127.0.0.1: 8000/api", "[INTERNAL_URL]"),
30
+ ("https: //127.0.0.1: 3000/test", "[INTERNAL_URL]"),
31
+ ("Connect to http: //127.0.0.1: 5000/status", "Connect to [INTERNAL_URL]"),
32
+ (
33
+ "https: //192.168.1.1: 8080/test",
34
+ "https: //192.168.1.1: 8080/test",
35
+ ),
36
+ ],
37
+ ),
38
+ "sanitize_any_localhost_urls": ValidatedPattern(
39
+ name="sanitize_any_localhost_urls",
40
+ pattern=r"https?: //0\.0\.0\.0: \d+[^\s]*",
41
+ replacement="[INTERNAL_URL]",
42
+ description="Sanitize 0.0.0.0 URLs with ports for security",
43
+ global_replace=True,
44
+ test_cases=[
45
+ ("http: //0.0.0.0: 8000/api", "[INTERNAL_URL]"),
46
+ ("https: //0.0.0.0: 3000/test", "[INTERNAL_URL]"),
47
+ ("https: //1.1.1.1: 8080/test", "https: //1.1.1.1: 8080/test"),
48
+ ],
49
+ ),
50
+ "sanitize_ws_localhost_urls": ValidatedPattern(
51
+ name="sanitize_ws_localhost_urls",
52
+ pattern=r"ws: //localhost: \d+[^\s]*",
53
+ replacement="[INTERNAL_URL]",
54
+ description="Sanitize WebSocket localhost URLs with ports for security",
55
+ global_replace=True,
56
+ test_cases=[
57
+ ("ws: //localhost: 8675/websocket", "[INTERNAL_URL]"),
58
+ ("ws: //localhost: 3000/socket", "[INTERNAL_URL]"),
59
+ ("Connect to ws: //localhost: 8000/ws", "Connect to [INTERNAL_URL]"),
60
+ (
61
+ "wss: //example.com: 443/socket",
62
+ "wss: //example.com: 443/socket",
63
+ ),
64
+ ],
65
+ ),
66
+ "sanitize_ws_127_urls": ValidatedPattern(
67
+ name="sanitize_ws_127_urls",
68
+ pattern=r"ws: //127\.0\.0\.1: \d+[^\s]*",
69
+ replacement="[INTERNAL_URL]",
70
+ description="Sanitize WebSocket 127.0.0.1 URLs with ports for security",
71
+ global_replace=True,
72
+ test_cases=[
73
+ ("ws: //127.0.0.1: 8675/websocket", "[INTERNAL_URL]"),
74
+ ("ws: //127.0.0.1: 3000/socket", "[INTERNAL_URL]"),
75
+ (
76
+ "ws: //192.168.1.1: 8080/socket",
77
+ "ws: //192.168.1.1: 8080/socket",
78
+ ),
79
+ ],
80
+ ),
81
+ "sanitize_simple_localhost_urls": ValidatedPattern(
82
+ name="sanitize_simple_localhost_urls",
83
+ pattern=r"http: //localhost[^\s]*",
84
+ replacement="[INTERNAL_URL]",
85
+ description="Sanitize simple localhost URLs without explicit ports for security",
86
+ global_replace=True,
87
+ test_cases=[
88
+ ("http: //localhost/api/test", "[INTERNAL_URL]"),
89
+ ("http: //localhost/dashboard", "[INTERNAL_URL]"),
90
+ ("Visit http: //localhost/admin", "Visit [INTERNAL_URL]"),
91
+ (
92
+ "https: //localhost: 443/test",
93
+ "https: //localhost: 443/test",
94
+ ),
95
+ ],
96
+ ),
97
+ "sanitize_simple_ws_localhost_urls": ValidatedPattern(
98
+ name="sanitize_simple_ws_localhost_urls",
99
+ pattern=r"ws: //localhost[^\s]*",
100
+ replacement="[INTERNAL_URL]",
101
+ description="Sanitize simple WebSocket localhost URLs without explicit ports"
102
+ " for security",
103
+ global_replace=True,
104
+ test_cases=[
105
+ ("ws: //localhost/websocket", "[INTERNAL_URL]"),
106
+ ("ws: //localhost/socket", "[INTERNAL_URL]"),
107
+ ("Connect to ws: //localhost/ws", "Connect to [INTERNAL_URL]"),
108
+ (
109
+ "wss: //localhost: 443/socket",
110
+ "wss: //localhost: 443/socket",
111
+ ),
112
+ ],
113
+ ),
114
+ }
@@ -0,0 +1,42 @@
1
+ """General utility patterns for extraction and manipulation."""
2
+
3
+ from .core import ValidatedPattern
4
+
5
+ PATTERNS: dict[str, ValidatedPattern] = {
6
+ "extract_coverage_percentage": ValidatedPattern(
7
+ name="extract_coverage_percentage",
8
+ pattern=r"coverage-([\d\.]+)%25",
9
+ replacement="", # Not used for extraction, just validation
10
+ description="Search for coverage percentage in badge URL",
11
+ test_cases=[
12
+ ("coverage-85.0%25", ""), # Will use search() to get group(1)
13
+ ("coverage-75.5%25", ""),
14
+ ("coverage-100.0%25", ""),
15
+ ("no coverage here", "no coverage here"), # No match
16
+ ],
17
+ ),
18
+ "extract_range_size": ValidatedPattern(
19
+ name="extract_range_size",
20
+ pattern=r"range\((\d+)\)",
21
+ replacement=r"\1",
22
+ description="Extract numeric size from range() calls",
23
+ test_cases=[
24
+ ("range(1000)", "1000"),
25
+ ("range(50)", "50"),
26
+ ("for i in range(100): ", "for i in 100: "),
27
+ ("other_func(10)", "other_func(10)"),
28
+ ],
29
+ ),
30
+ "extract_variable_name_from_assignment": ValidatedPattern(
31
+ name="extract_variable_name_from_assignment",
32
+ pattern=r"\s*(\w+)\s*=.*",
33
+ replacement=r"\1",
34
+ description="Extract variable name from assignment statement",
35
+ test_cases=[
36
+ ("password = 'secret'", "password"),
37
+ ("api_key = 'value'", "api_key"),
38
+ (" token =", "token"),
39
+ ("complex_variable_name = value", "complex_variable_name"),
40
+ ],
41
+ ),
42
+ }