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,394 @@
1
+ > Crackerjack Docs: [Main](<../../README.md>) | [CLAUDE.md](../../docs/guides/CLAUDE.md) | [CLI](<./README.md>)
2
+
3
+ # CLI
4
+
5
+ Command-line interface handlers and option processing for the Crackerjack CLI using Click and Typer frameworks.
6
+
7
+ ## Overview
8
+
9
+ The CLI package provides the primary user interface for Crackerjack, handling command-line arguments, option validation, and routing to appropriate backend handlers. It follows a modular handler-based architecture with 90% ACB compliance, using protocol-based dependency injection for most components.
10
+
11
+ ## Architecture
12
+
13
+ ### Entry Point Flow
14
+
15
+ ```
16
+ python -m crackerjack [options]
17
+ ↓
18
+ __main__.py
19
+ ↓
20
+ options.py (Option parsing & validation)
21
+ ↓
22
+ handlers/ (Specialized command handlers)
23
+ ↓
24
+ Managers/Orchestration (Backend coordination)
25
+ ```
26
+
27
+ ### Core Components
28
+
29
+ - **options.py**: CLI option definitions, validation, and parsing using Pydantic models
30
+ - **handlers.py**: Main command handlers for quality workflows
31
+ - **facade.py**: CLI facade for simplified command routing
32
+ - **interactive.py**: Interactive mode for guided workflows
33
+ - **utils.py**: CLI utility functions
34
+
35
+ ### Handler Modules
36
+
37
+ **handlers/** — Specialized command handlers by feature:
38
+
39
+ - **main_handlers.py**: Core quality workflow execution (fast, comprehensive, tests)
40
+ - **analytics.py**: Coverage analytics, metrics, and reporting
41
+ - **monitoring.py**: Health monitoring, watchdog, and status checks
42
+ - **documentation.py**: Documentation generation and changelog automation
43
+ - **changelog.py**: Changelog management and versioning
44
+ - **coverage.py**: Coverage ratchet and improvement workflows
45
+ - **ai_features.py**: AI agent integration and auto-fixing
46
+ - **advanced.py**: Advanced features and experimental workflows
47
+ - **config_handlers.py**: Configuration management and initialization
48
+
49
+ ### Cache Handlers
50
+
51
+ - **cache_handlers.py**: Basic cache management operations
52
+ - **cache_handlers_enhanced.py**: Advanced cache operations with pattern analysis
53
+ - **semantic_handlers.py**: Semantic search and code comprehension handlers
54
+
55
+ ## Command Categories
56
+
57
+ ### Quality Workflows
58
+
59
+ ```bash
60
+ # Fast hooks (~5s)
61
+ python -m crackerjack --fast
62
+
63
+ # Comprehensive hooks (~30s)
64
+ python -m crackerjack --comp
65
+
66
+ # Full quality + tests
67
+ python -m crackerjack --run-tests
68
+
69
+ # AI-powered auto-fixing
70
+ python -m crackerjack --ai-fix --run-tests
71
+ ```
72
+
73
+ ### Publishing & Versioning
74
+
75
+ ```bash
76
+ # Interactive versioning
77
+ python -m crackerjack --publish interactive
78
+
79
+ # Automated bump
80
+ python -m crackerjack --publish patch # or minor, major, auto
81
+
82
+ # Full release workflow
83
+ python -m crackerjack --all patch
84
+ ```
85
+
86
+ ### MCP Server Management
87
+
88
+ ```bash
89
+ # Start MCP server
90
+ python -m crackerjack --start-mcp-server
91
+
92
+ # Restart server
93
+ python -m crackerjack --restart-mcp-server
94
+
95
+ # Health monitoring
96
+ python -m crackerjack --watchdog
97
+ ```
98
+
99
+ ### Coverage & Analytics
100
+
101
+ ```bash
102
+ # Coverage report
103
+ python -m crackerjack --coverage-report
104
+
105
+ # Analytics dashboard
106
+ python -m crackerjack --analytics
107
+
108
+ # Benchmark performance
109
+ python -m crackerjack --benchmark
110
+ ```
111
+
112
+ ### Development Modes
113
+
114
+ ```bash
115
+ # Fast iteration (skip comprehensive hooks)
116
+ python -m crackerjack --fast-iteration
117
+
118
+ # Run specific tool only
119
+ python -m crackerjack --tool ruff
120
+
121
+ # Changed files only
122
+ python -m crackerjack --changed-only
123
+
124
+ # Debug mode
125
+ python -m crackerjack --debug --verbose
126
+ ```
127
+
128
+ ## Option Processing
129
+
130
+ ### Option Validation
131
+
132
+ The `Options` Pydantic model provides type-safe option parsing with validation:
133
+
134
+ ```python
135
+ from crackerjack.cli.options import Options, BumpOption
136
+
137
+ # Parse and validate options
138
+ options = Options(run_tests=True, ai_fix=True, test_workers=4, publish=BumpOption.patch)
139
+ ```
140
+
141
+ ### Bump Options
142
+
143
+ Versioning options with enum validation:
144
+
145
+ - **patch**: 1.0.0 → 1.0.1 (bug fixes)
146
+ - **minor**: 1.0.0 → 1.1.0 (new features)
147
+ - **major**: 1.0.0 → 2.0.0 (breaking changes)
148
+ - **interactive**: Guided version selection
149
+ - **auto**: AI-powered version recommendation
150
+
151
+ ### Test Workers
152
+
153
+ Parallel test execution configuration:
154
+
155
+ ```bash
156
+ --test-workers 0 # Auto-detect (default, recommended)
157
+ --test-workers 4 # Explicit worker count
158
+ --test-workers 1 # Sequential execution (debugging)
159
+ --test-workers -2 # Fractional (half cores)
160
+ ```
161
+
162
+ ## Handler Architecture
163
+
164
+ ### Protocol-Based Dependency Injection
165
+
166
+ Most handlers use ACB dependency injection (90% compliance):
167
+
168
+ ```python
169
+ from acb.depends import depends, Inject
170
+ from crackerjack.models.protocols import Console, CrackerjackCache
171
+
172
+
173
+ @depends.inject
174
+ def handle_quality_check(
175
+ console: Inject[Console] = None,
176
+ cache: Inject[CrackerjackCache] = None,
177
+ ) -> None:
178
+ console.print("[green]Running quality checks...[/green]")
179
+ # ... handler logic
180
+ ```
181
+
182
+ ### Handler Routing
183
+
184
+ Handlers are organized by feature domain for maintainability:
185
+
186
+ ```python
187
+ # Main quality workflows
188
+ from crackerjack.cli.handlers.main_handlers import (
189
+ handle_fast_hooks,
190
+ handle_comprehensive_hooks,
191
+ handle_tests,
192
+ )
193
+
194
+ # Analytics and reporting
195
+ from crackerjack.cli.handlers.analytics import (
196
+ handle_coverage_report,
197
+ handle_analytics_dashboard,
198
+ )
199
+
200
+ # MCP server management
201
+ from crackerjack.cli.handlers.monitoring import (
202
+ handle_start_mcp_server,
203
+ handle_watchdog,
204
+ )
205
+ ```
206
+
207
+ ## Interactive Mode
208
+
209
+ Guided workflows with prompts and validation:
210
+
211
+ ```bash
212
+ python -m crackerjack --interactive
213
+ ```
214
+
215
+ **Features:**
216
+
217
+ - Step-by-step guidance
218
+ - Option validation with helpful errors
219
+ - Confirmation prompts for destructive actions
220
+ - Progress indicators for long operations
221
+
222
+ ## Facade Pattern
223
+
224
+ The `CrackerjackCLIFacade` provides simplified command routing:
225
+
226
+ ```python
227
+ from crackerjack.cli.facade import CrackerjackCLIFacade
228
+
229
+ facade = CrackerjackCLIFacade()
230
+ result = await facade.run_quality_workflow(fast=True, ai_fix=True, verbose=True)
231
+ ```
232
+
233
+ **Note:** Facade needs DI integration (currently manual instantiation).
234
+
235
+ ## Usage Examples
236
+
237
+ ### Adding a New CLI Option
238
+
239
+ ```python
240
+ # 1. Add to Options model (options.py)
241
+ class Options(BaseModel):
242
+ my_new_option: bool = False
243
+
244
+
245
+ # 2. Add Click/Typer parameter (__main__.py)
246
+ @click.option("--my-new-option", is_flag=True, help="Enable new feature")
247
+ # 3. Create handler (handlers/my_feature.py)
248
+ @depends.inject
249
+ def handle_my_feature(console: Inject[Console] = None) -> None:
250
+ console.print("[cyan]Running new feature...[/cyan]")
251
+
252
+
253
+ # 4. Route in main (__main__.py)
254
+ if options.my_new_option:
255
+ handle_my_feature()
256
+ ```
257
+
258
+ ### Adding a New Handler Module
259
+
260
+ ```python
261
+ # handlers/my_handlers.py
262
+ from acb.depends import depends, Inject
263
+ from crackerjack.models.protocols import Console
264
+
265
+
266
+ @depends.inject
267
+ async def handle_my_command(
268
+ arg1: str,
269
+ console: Inject[Console] = None,
270
+ ) -> bool:
271
+ """Handler for my custom command."""
272
+ console.print(f"Processing: {arg1}")
273
+ # ... implementation
274
+ return True
275
+ ```
276
+
277
+ ## Best Practices
278
+
279
+ 1. **Use Protocol-Based DI**: Import from `models/protocols.py`, not concrete classes
280
+ 1. **Validate Options Early**: Use Pydantic validators in the `Options` model
281
+ 1. **Keep Handlers Focused**: Single responsibility per handler
282
+ 1. **Provide User Feedback**: Use rich console for progress and status
283
+ 1. **Handle Errors Gracefully**: Catch exceptions and provide helpful error messages
284
+ 1. **Support --verbose**: Add verbose logging for troubleshooting
285
+ 1. **Document Options**: Clear help text for all CLI options
286
+ 1. **Test Interactive Flows**: Verify prompts and validation work correctly
287
+
288
+ ## Anti-Patterns to Avoid
289
+
290
+ ```python
291
+ # āŒ Direct console instantiation
292
+ from rich.console import Console
293
+ console = Console()
294
+
295
+ # āœ… Use dependency injection
296
+ @depends.inject
297
+ def handler(console: Inject[Console] = None):
298
+ console.print("...")
299
+
300
+
301
+ # āŒ Complex logic in option parsing
302
+ @click.option("--complex")
303
+ def command(complex):
304
+ if complex:
305
+ # 50 lines of logic here
306
+
307
+ # āœ… Delegate to handlers
308
+ @click.option("--complex")
309
+ def command(complex):
310
+ if complex:
311
+ handle_complex_workflow()
312
+
313
+
314
+ # āŒ Silent failures
315
+ def handler():
316
+ try:
317
+ risky_operation()
318
+ except Exception:
319
+ pass # Don't do this!
320
+
321
+ # āœ… Inform the user
322
+ def handler():
323
+ try:
324
+ risky_operation()
325
+ except Exception as e:
326
+ console.print(f"[red]Error: {e}[/red]")
327
+ raise
328
+ ```
329
+
330
+ ## Configuration
331
+
332
+ CLI behavior can be customized via `settings/crackerjack.yaml`:
333
+
334
+ ```yaml
335
+ # CLI defaults
336
+ verbose: false
337
+ interactive: false
338
+ test_workers: 0 # Auto-detect
339
+ debug: false
340
+ ai_debug: false
341
+
342
+ # Feature flags
343
+ experimental_hooks: false
344
+ async_mode: true
345
+ ```
346
+
347
+ ## Troubleshooting
348
+
349
+ ### Option Parsing Issues
350
+
351
+ ```bash
352
+ # Enable debug mode for detailed output
353
+ python -m crackerjack --debug --verbose
354
+
355
+ # Check option values
356
+ python -m crackerjack --help
357
+ ```
358
+
359
+ ### Handler Failures
360
+
361
+ ```bash
362
+ # Use verbose mode for detailed logs
363
+ python -m crackerjack --verbose --run-tests
364
+
365
+ # Enable AI debugging for agent issues
366
+ python -m crackerjack --ai-debug --ai-fix
367
+ ```
368
+
369
+ ### Test Worker Configuration
370
+
371
+ ```bash
372
+ # Sequential execution for debugging flaky tests
373
+ python -m crackerjack --run-tests --test-workers 1
374
+
375
+ # Disable auto-detection globally
376
+ export CRACKERJACK_DISABLE_AUTO_WORKERS=1
377
+ ```
378
+
379
+ ## Related
380
+
381
+ - [Managers](<../managers/README.md>) — Backend managers called by CLI handlers
382
+ - [Orchestration](<../orchestration/README.md>) — Workflow orchestration layer
383
+ - [Options](<./options.py>) — Full list of CLI options
384
+ - [Main README](<../../README.md>) — Command examples and workflows
385
+ - [CLAUDE.md](../../docs/guides/CLAUDE.md) — Essential commands reference
386
+
387
+ ## Future Enhancements
388
+
389
+ - [ ] Complete DI integration for CrackerjackCLIFacade
390
+ - [ ] Plugin system for custom commands
391
+ - [ ] Command auto-completion (shell integration)
392
+ - [ ] Configuration profiles (dev, ci, production)
393
+ - [ ] Command aliasing and shortcuts
394
+ - [ ] Enhanced interactive mode with TUI
@@ -0,0 +1,24 @@
1
+ from .handlers import (
2
+ handle_interactive_mode,
3
+ handle_monitor_mode,
4
+ handle_orchestrated_mode,
5
+ handle_standard_mode,
6
+ handle_watchdog_mode,
7
+ setup_ai_agent_env,
8
+ )
9
+ from .options import CLI_OPTIONS, BumpOption, Options, create_options
10
+ from .version import get_package_version
11
+
12
+ __all__ = [
13
+ "CLI_OPTIONS",
14
+ "BumpOption",
15
+ "Options",
16
+ "create_options",
17
+ "get_package_version",
18
+ "handle_interactive_mode",
19
+ "handle_monitor_mode",
20
+ "handle_orchestrated_mode",
21
+ "handle_standard_mode",
22
+ "handle_watchdog_mode",
23
+ "setup_ai_agent_env",
24
+ ]
@@ -0,0 +1,209 @@
1
+ import typing as t
2
+
3
+ from acb.console import Console
4
+ from acb.depends import Inject, depends
5
+ from rich.panel import Panel
6
+ from rich.table import Table
7
+ from rich.text import Text
8
+
9
+ from crackerjack.services.cache import CrackerjackCache
10
+
11
+
12
+ @depends.inject # type: ignore[misc]
13
+ def handle_clear_cache(console: Inject[Console]) -> None:
14
+ """Clear all caches and display results."""
15
+ try:
16
+ cache = CrackerjackCache()
17
+
18
+ # Clear memory caches and get cleanup stats
19
+ cleanup_results = cache.cleanup_all()
20
+
21
+ # Note:CrackerjackCache uses memory-only caching (no disk cache to clear)
22
+
23
+ # Calculate total items cleared
24
+ total_cleared = sum(cleanup_results.values())
25
+
26
+ # Create results table
27
+ table = Table(
28
+ title="Cache Cleared", show_header=True, header_style="bold green"
29
+ )
30
+ table.add_column("Cache Type", style="cyan", no_wrap=True)
31
+ table.add_column("Items Cleared", justify="right", style="yellow")
32
+
33
+ for cache_type, count in cleanup_results.items():
34
+ table.add_row(cache_type.replace("_", " ").title(), str(count))
35
+
36
+ table.add_row("", "", end_section=True)
37
+ table.add_row("Total", str(total_cleared), style="bold green")
38
+
39
+ console.print()
40
+ console.print(Panel(table, title="Cache Cleared", border_style="green"))
41
+ console.print(f"\nāœ… Successfully cleared {total_cleared} cache entries")
42
+
43
+ except Exception as e:
44
+ console.print(f"\nāŒ Error clearing cache: {e}", style="bold red")
45
+
46
+
47
+ @depends.inject # type: ignore[misc]
48
+ def handle_cache_stats(console: Inject[Console]) -> None:
49
+ """Display detailed cache statistics."""
50
+ try:
51
+ cache = CrackerjackCache()
52
+ stats = cache.get_cache_stats()
53
+
54
+ main_table = _create_cache_stats_table()
55
+ totals = _populate_cache_stats_table(main_table, stats)
56
+ _add_cache_totals_row(main_table, totals)
57
+
58
+ console.print()
59
+ console.print(Panel(main_table, border_style="blue"))
60
+
61
+ _display_performance_insights(totals)
62
+ _display_cache_directory_info(cache)
63
+
64
+ except Exception as e:
65
+ console.print(f"\nāŒ Error retrieving cache stats: {e}", style="bold red")
66
+
67
+
68
+ def _create_cache_stats_table() -> Table:
69
+ """Create and configure the main cache statistics table."""
70
+ table = Table(title="Cache Statistics", show_header=True, header_style="bold blue")
71
+ table.add_column("Cache Layer", style="cyan", no_wrap=True)
72
+ table.add_column("Hit Rate %", justify="right", style="green")
73
+ table.add_column("Hits", justify="right", style="yellow")
74
+ table.add_column("Misses", justify="right", style="red")
75
+ table.add_column("Entries", justify="right", style="magenta")
76
+ table.add_column("Size (MB)", justify="right", style="blue")
77
+ return table
78
+
79
+
80
+ def _populate_cache_stats_table(
81
+ table: Table, stats: dict[str, t.Any]
82
+ ) -> dict[str, t.Any]:
83
+ """Populate table with cache statistics and return totals."""
84
+ totals = {"hits": 0, "misses": 0, "entries": 0, "size": 0.0}
85
+
86
+ for cache_name, cache_stats in stats.items():
87
+ hit_rate = cache_stats.get("hit_rate_percent", 0.0)
88
+ hits = cache_stats.get("hits", 0)
89
+ misses = cache_stats.get("misses", 0)
90
+ entries = cache_stats.get("total_entries", 0)
91
+ size_mb = cache_stats.get("total_size_mb", 0.0)
92
+
93
+ hit_rate_style = _get_hit_rate_style(hit_rate)
94
+
95
+ table.add_row(
96
+ cache_name.replace("_", " ").title(),
97
+ Text(f"{hit_rate:.1f}", style=hit_rate_style),
98
+ str(hits),
99
+ str(misses),
100
+ str(entries),
101
+ f"{size_mb:.2f}",
102
+ )
103
+
104
+ totals["hits"] += hits
105
+ totals["misses"] += misses
106
+ totals["entries"] += entries
107
+ totals["size"] += size_mb
108
+
109
+ return totals
110
+
111
+
112
+ def _get_hit_rate_style(hit_rate: float) -> str:
113
+ """Get color style for hit rate based on performance."""
114
+ return "green" if hit_rate > 70 else "yellow" if hit_rate > 40 else "red"
115
+
116
+
117
+ def _add_cache_totals_row(table: Table, totals: dict[str, t.Any]) -> None:
118
+ """Add totals row to cache statistics table."""
119
+ overall_hit_rate = (
120
+ (totals["hits"] / (totals["hits"] + totals["misses"]) * 100)
121
+ if (totals["hits"] + totals["misses"]) > 0
122
+ else 0
123
+ )
124
+ overall_style = _get_hit_rate_style(overall_hit_rate)
125
+
126
+ table.add_row("", "", "", "", "", "", end_section=True)
127
+ table.add_row(
128
+ "Overall",
129
+ Text(f"{overall_hit_rate:.1f}", style=f"bold {overall_style}"),
130
+ str(totals["hits"]),
131
+ str(totals["misses"]),
132
+ str(totals["entries"]),
133
+ f"{totals['size']:.2f}",
134
+ style="bold",
135
+ )
136
+
137
+
138
+ @depends.inject # type: ignore[misc]
139
+ def _display_performance_insights(
140
+ totals: dict[str, t.Any], console: Inject[Console]
141
+ ) -> None:
142
+ """Display performance insights panel based on cache statistics."""
143
+ overall_hit_rate = (
144
+ (totals["hits"] / (totals["hits"] + totals["misses"]) * 100)
145
+ if (totals["hits"] + totals["misses"]) > 0
146
+ else 0
147
+ )
148
+
149
+ insights = _generate_performance_insights(overall_hit_rate, totals["size"])
150
+
151
+ if insights:
152
+ insights_text = "\n".join(insights)
153
+ insights_panel = Panel(
154
+ insights_text,
155
+ title="Performance Insights",
156
+ border_style="blue",
157
+ padding=(1, 2),
158
+ )
159
+ console.print()
160
+ console.print(insights_panel)
161
+
162
+
163
+ def _generate_performance_insights(hit_rate: float, total_size: float) -> list[str]:
164
+ """Generate performance insights based on cache metrics."""
165
+ insights = []
166
+
167
+ if hit_rate > 80:
168
+ insights.append("šŸš€ Excellent cache performance!")
169
+ elif hit_rate > 60:
170
+ insights.append("āœ… Good cache performance")
171
+ elif hit_rate > 30:
172
+ insights.append("āš ļø Moderate cache performance - consider cache warming")
173
+ else:
174
+ insights.append("āŒ Poor cache performance - check cache configuration")
175
+
176
+ if total_size > 100:
177
+ insights.append(f"šŸ’¾ Large cache size ({total_size:.1f}MB) - consider cleanup")
178
+
179
+ return insights
180
+
181
+
182
+ @depends.inject # type: ignore[misc]
183
+ def _display_cache_directory_info(
184
+ cache: CrackerjackCache, console: Inject[Console]
185
+ ) -> None:
186
+ """Display cache directory information."""
187
+ if not (cache.enable_disk_cache and cache.cache_dir):
188
+ return
189
+
190
+ cache_dir_info = f"šŸ“ Cache Directory: {cache.cache_dir}"
191
+ if cache.cache_dir.exists():
192
+ disk_files = len(list(cache.cache_dir.rglob("*.cache")))
193
+ cache_dir_info += f" ({disk_files} files)"
194
+
195
+ console.print()
196
+ console.print(cache_dir_info)
197
+
198
+
199
+ def _handle_cache_commands(clear_cache: bool, cache_stats: bool) -> bool:
200
+ """Handle cache management commands. Returns True if a cache command was executed."""
201
+ if clear_cache:
202
+ handle_clear_cache()
203
+ return True
204
+
205
+ if cache_stats:
206
+ handle_cache_stats()
207
+ return True
208
+
209
+ return False