crackerjack 0.18.2__py3-none-any.whl → 0.45.2__py3-none-any.whl

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