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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (425) hide show
  1. crackerjack/README.md +19 -0
  2. crackerjack/__init__.py +30 -1
  3. crackerjack/__main__.py +342 -1263
  4. crackerjack/adapters/README.md +18 -0
  5. crackerjack/adapters/__init__.py +27 -5
  6. crackerjack/adapters/_output_paths.py +167 -0
  7. crackerjack/adapters/_qa_adapter_base.py +309 -0
  8. crackerjack/adapters/_tool_adapter_base.py +706 -0
  9. crackerjack/adapters/ai/README.md +65 -0
  10. crackerjack/adapters/ai/__init__.py +5 -0
  11. crackerjack/adapters/ai/claude.py +853 -0
  12. crackerjack/adapters/complexity/README.md +53 -0
  13. crackerjack/adapters/complexity/__init__.py +10 -0
  14. crackerjack/adapters/complexity/complexipy.py +641 -0
  15. crackerjack/adapters/dependency/__init__.py +22 -0
  16. crackerjack/adapters/dependency/pip_audit.py +418 -0
  17. crackerjack/adapters/format/README.md +72 -0
  18. crackerjack/adapters/format/__init__.py +11 -0
  19. crackerjack/adapters/format/mdformat.py +313 -0
  20. crackerjack/adapters/format/ruff.py +516 -0
  21. crackerjack/adapters/lint/README.md +47 -0
  22. crackerjack/adapters/lint/__init__.py +11 -0
  23. crackerjack/adapters/lint/codespell.py +273 -0
  24. crackerjack/adapters/lsp/README.md +49 -0
  25. crackerjack/adapters/lsp/__init__.py +27 -0
  26. crackerjack/adapters/{rust_tool_manager.py → lsp/_manager.py} +3 -3
  27. crackerjack/adapters/{skylos_adapter.py → lsp/skylos.py} +59 -7
  28. crackerjack/adapters/{zuban_adapter.py → lsp/zuban.py} +3 -6
  29. crackerjack/adapters/refactor/README.md +59 -0
  30. crackerjack/adapters/refactor/__init__.py +12 -0
  31. crackerjack/adapters/refactor/creosote.py +318 -0
  32. crackerjack/adapters/refactor/refurb.py +406 -0
  33. crackerjack/adapters/refactor/skylos.py +494 -0
  34. crackerjack/adapters/sast/README.md +132 -0
  35. crackerjack/adapters/sast/__init__.py +32 -0
  36. crackerjack/adapters/sast/_base.py +201 -0
  37. crackerjack/adapters/sast/bandit.py +423 -0
  38. crackerjack/adapters/sast/pyscn.py +405 -0
  39. crackerjack/adapters/sast/semgrep.py +241 -0
  40. crackerjack/adapters/security/README.md +111 -0
  41. crackerjack/adapters/security/__init__.py +17 -0
  42. crackerjack/adapters/security/gitleaks.py +339 -0
  43. crackerjack/adapters/type/README.md +52 -0
  44. crackerjack/adapters/type/__init__.py +12 -0
  45. crackerjack/adapters/type/pyrefly.py +402 -0
  46. crackerjack/adapters/type/ty.py +402 -0
  47. crackerjack/adapters/type/zuban.py +522 -0
  48. crackerjack/adapters/utility/README.md +51 -0
  49. crackerjack/adapters/utility/__init__.py +10 -0
  50. crackerjack/adapters/utility/checks.py +884 -0
  51. crackerjack/agents/README.md +264 -0
  52. crackerjack/agents/__init__.py +40 -12
  53. crackerjack/agents/base.py +1 -0
  54. crackerjack/agents/claude_code_bridge.py +641 -0
  55. crackerjack/agents/coordinator.py +49 -53
  56. crackerjack/agents/dry_agent.py +187 -3
  57. crackerjack/agents/enhanced_coordinator.py +279 -0
  58. crackerjack/agents/enhanced_proactive_agent.py +185 -0
  59. crackerjack/agents/error_middleware.py +53 -0
  60. crackerjack/agents/formatting_agent.py +6 -8
  61. crackerjack/agents/helpers/__init__.py +9 -0
  62. crackerjack/agents/helpers/performance/__init__.py +22 -0
  63. crackerjack/agents/helpers/performance/performance_ast_analyzer.py +357 -0
  64. crackerjack/agents/helpers/performance/performance_pattern_detector.py +909 -0
  65. crackerjack/agents/helpers/performance/performance_recommender.py +572 -0
  66. crackerjack/agents/helpers/refactoring/__init__.py +22 -0
  67. crackerjack/agents/helpers/refactoring/code_transformer.py +536 -0
  68. crackerjack/agents/helpers/refactoring/complexity_analyzer.py +344 -0
  69. crackerjack/agents/helpers/refactoring/dead_code_detector.py +437 -0
  70. crackerjack/agents/helpers/test_creation/__init__.py +19 -0
  71. crackerjack/agents/helpers/test_creation/test_ast_analyzer.py +216 -0
  72. crackerjack/agents/helpers/test_creation/test_coverage_analyzer.py +643 -0
  73. crackerjack/agents/helpers/test_creation/test_template_generator.py +1031 -0
  74. crackerjack/agents/performance_agent.py +121 -1152
  75. crackerjack/agents/refactoring_agent.py +156 -655
  76. crackerjack/agents/semantic_agent.py +479 -0
  77. crackerjack/agents/semantic_helpers.py +356 -0
  78. crackerjack/agents/test_creation_agent.py +19 -1605
  79. crackerjack/api.py +5 -7
  80. crackerjack/cli/README.md +394 -0
  81. crackerjack/cli/__init__.py +1 -1
  82. crackerjack/cli/cache_handlers.py +23 -18
  83. crackerjack/cli/cache_handlers_enhanced.py +1 -4
  84. crackerjack/cli/facade.py +70 -8
  85. crackerjack/cli/formatting.py +13 -0
  86. crackerjack/cli/handlers/__init__.py +85 -0
  87. crackerjack/cli/handlers/advanced.py +103 -0
  88. crackerjack/cli/handlers/ai_features.py +62 -0
  89. crackerjack/cli/handlers/analytics.py +479 -0
  90. crackerjack/cli/handlers/changelog.py +271 -0
  91. crackerjack/cli/handlers/config_handlers.py +16 -0
  92. crackerjack/cli/handlers/coverage.py +84 -0
  93. crackerjack/cli/handlers/documentation.py +280 -0
  94. crackerjack/cli/handlers/main_handlers.py +497 -0
  95. crackerjack/cli/handlers/monitoring.py +371 -0
  96. crackerjack/cli/handlers.py +249 -49
  97. crackerjack/cli/interactive.py +8 -5
  98. crackerjack/cli/options.py +203 -110
  99. crackerjack/cli/semantic_handlers.py +292 -0
  100. crackerjack/cli/version.py +19 -0
  101. crackerjack/code_cleaner.py +60 -24
  102. crackerjack/config/README.md +472 -0
  103. crackerjack/config/__init__.py +256 -0
  104. crackerjack/config/global_lock_config.py +191 -54
  105. crackerjack/config/hooks.py +188 -16
  106. crackerjack/config/loader.py +239 -0
  107. crackerjack/config/settings.py +141 -0
  108. crackerjack/config/tool_commands.py +331 -0
  109. crackerjack/core/README.md +393 -0
  110. crackerjack/core/async_workflow_orchestrator.py +79 -53
  111. crackerjack/core/autofix_coordinator.py +22 -9
  112. crackerjack/core/container.py +10 -9
  113. crackerjack/core/enhanced_container.py +9 -9
  114. crackerjack/core/performance.py +1 -1
  115. crackerjack/core/performance_monitor.py +5 -3
  116. crackerjack/core/phase_coordinator.py +1018 -634
  117. crackerjack/core/proactive_workflow.py +3 -3
  118. crackerjack/core/retry.py +275 -0
  119. crackerjack/core/service_watchdog.py +167 -23
  120. crackerjack/core/session_coordinator.py +187 -382
  121. crackerjack/core/timeout_manager.py +161 -44
  122. crackerjack/core/workflow/__init__.py +21 -0
  123. crackerjack/core/workflow/workflow_ai_coordinator.py +863 -0
  124. crackerjack/core/workflow/workflow_event_orchestrator.py +1107 -0
  125. crackerjack/core/workflow/workflow_issue_parser.py +714 -0
  126. crackerjack/core/workflow/workflow_phase_executor.py +1158 -0
  127. crackerjack/core/workflow/workflow_security_gates.py +400 -0
  128. crackerjack/core/workflow_orchestrator.py +1247 -953
  129. crackerjack/data/README.md +11 -0
  130. crackerjack/data/__init__.py +8 -0
  131. crackerjack/data/models.py +79 -0
  132. crackerjack/data/repository.py +210 -0
  133. crackerjack/decorators/README.md +180 -0
  134. crackerjack/decorators/__init__.py +35 -0
  135. crackerjack/decorators/error_handling.py +649 -0
  136. crackerjack/decorators/error_handling_decorators.py +334 -0
  137. crackerjack/decorators/helpers.py +58 -0
  138. crackerjack/decorators/patterns.py +281 -0
  139. crackerjack/decorators/utils.py +58 -0
  140. crackerjack/docs/README.md +11 -0
  141. crackerjack/docs/generated/api/CLI_REFERENCE.md +1 -1
  142. crackerjack/documentation/README.md +11 -0
  143. crackerjack/documentation/ai_templates.py +1 -1
  144. crackerjack/documentation/dual_output_generator.py +11 -9
  145. crackerjack/documentation/reference_generator.py +104 -59
  146. crackerjack/dynamic_config.py +52 -61
  147. crackerjack/errors.py +1 -1
  148. crackerjack/events/README.md +11 -0
  149. crackerjack/events/__init__.py +16 -0
  150. crackerjack/events/telemetry.py +175 -0
  151. crackerjack/events/workflow_bus.py +346 -0
  152. crackerjack/exceptions/README.md +301 -0
  153. crackerjack/exceptions/__init__.py +5 -0
  154. crackerjack/exceptions/config.py +4 -0
  155. crackerjack/exceptions/tool_execution_error.py +245 -0
  156. crackerjack/executors/README.md +591 -0
  157. crackerjack/executors/__init__.py +2 -0
  158. crackerjack/executors/async_hook_executor.py +539 -77
  159. crackerjack/executors/cached_hook_executor.py +3 -3
  160. crackerjack/executors/hook_executor.py +967 -102
  161. crackerjack/executors/hook_lock_manager.py +31 -22
  162. crackerjack/executors/individual_hook_executor.py +66 -32
  163. crackerjack/executors/lsp_aware_hook_executor.py +136 -57
  164. crackerjack/executors/progress_hook_executor.py +282 -0
  165. crackerjack/executors/tool_proxy.py +23 -7
  166. crackerjack/hooks/README.md +485 -0
  167. crackerjack/hooks/lsp_hook.py +8 -9
  168. crackerjack/intelligence/README.md +557 -0
  169. crackerjack/interactive.py +37 -10
  170. crackerjack/managers/README.md +369 -0
  171. crackerjack/managers/async_hook_manager.py +41 -57
  172. crackerjack/managers/hook_manager.py +449 -79
  173. crackerjack/managers/publish_manager.py +81 -36
  174. crackerjack/managers/test_command_builder.py +290 -12
  175. crackerjack/managers/test_executor.py +93 -8
  176. crackerjack/managers/test_manager.py +1082 -75
  177. crackerjack/managers/test_progress.py +118 -26
  178. crackerjack/mcp/README.md +374 -0
  179. crackerjack/mcp/cache.py +25 -2
  180. crackerjack/mcp/client_runner.py +35 -18
  181. crackerjack/mcp/context.py +9 -9
  182. crackerjack/mcp/dashboard.py +24 -8
  183. crackerjack/mcp/enhanced_progress_monitor.py +34 -23
  184. crackerjack/mcp/file_monitor.py +27 -6
  185. crackerjack/mcp/progress_components.py +45 -34
  186. crackerjack/mcp/progress_monitor.py +6 -9
  187. crackerjack/mcp/rate_limiter.py +11 -7
  188. crackerjack/mcp/server.py +2 -0
  189. crackerjack/mcp/server_core.py +187 -55
  190. crackerjack/mcp/service_watchdog.py +12 -9
  191. crackerjack/mcp/task_manager.py +2 -2
  192. crackerjack/mcp/tools/README.md +27 -0
  193. crackerjack/mcp/tools/__init__.py +2 -0
  194. crackerjack/mcp/tools/core_tools.py +75 -52
  195. crackerjack/mcp/tools/execution_tools.py +87 -31
  196. crackerjack/mcp/tools/intelligence_tools.py +2 -2
  197. crackerjack/mcp/tools/proactive_tools.py +1 -1
  198. crackerjack/mcp/tools/semantic_tools.py +584 -0
  199. crackerjack/mcp/tools/utility_tools.py +180 -132
  200. crackerjack/mcp/tools/workflow_executor.py +87 -46
  201. crackerjack/mcp/websocket/README.md +31 -0
  202. crackerjack/mcp/websocket/app.py +11 -1
  203. crackerjack/mcp/websocket/event_bridge.py +188 -0
  204. crackerjack/mcp/websocket/jobs.py +27 -4
  205. crackerjack/mcp/websocket/monitoring/__init__.py +25 -0
  206. crackerjack/mcp/websocket/monitoring/api/__init__.py +19 -0
  207. crackerjack/mcp/websocket/monitoring/api/dependencies.py +141 -0
  208. crackerjack/mcp/websocket/monitoring/api/heatmap.py +154 -0
  209. crackerjack/mcp/websocket/monitoring/api/intelligence.py +199 -0
  210. crackerjack/mcp/websocket/monitoring/api/metrics.py +203 -0
  211. crackerjack/mcp/websocket/monitoring/api/telemetry.py +101 -0
  212. crackerjack/mcp/websocket/monitoring/dashboard.py +18 -0
  213. crackerjack/mcp/websocket/monitoring/factory.py +109 -0
  214. crackerjack/mcp/websocket/monitoring/filters.py +10 -0
  215. crackerjack/mcp/websocket/monitoring/metrics.py +64 -0
  216. crackerjack/mcp/websocket/monitoring/models.py +90 -0
  217. crackerjack/mcp/websocket/monitoring/utils.py +171 -0
  218. crackerjack/mcp/websocket/monitoring/websocket_manager.py +78 -0
  219. crackerjack/mcp/websocket/monitoring/websockets/__init__.py +17 -0
  220. crackerjack/mcp/websocket/monitoring/websockets/dependencies.py +126 -0
  221. crackerjack/mcp/websocket/monitoring/websockets/heatmap.py +176 -0
  222. crackerjack/mcp/websocket/monitoring/websockets/intelligence.py +291 -0
  223. crackerjack/mcp/websocket/monitoring/websockets/metrics.py +291 -0
  224. crackerjack/mcp/websocket/monitoring_endpoints.py +16 -2930
  225. crackerjack/mcp/websocket/server.py +1 -3
  226. crackerjack/mcp/websocket/websocket_handler.py +107 -6
  227. crackerjack/models/README.md +308 -0
  228. crackerjack/models/__init__.py +10 -1
  229. crackerjack/models/config.py +639 -22
  230. crackerjack/models/config_adapter.py +6 -6
  231. crackerjack/models/protocols.py +1167 -23
  232. crackerjack/models/pydantic_models.py +320 -0
  233. crackerjack/models/qa_config.py +145 -0
  234. crackerjack/models/qa_results.py +134 -0
  235. crackerjack/models/results.py +35 -0
  236. crackerjack/models/semantic_models.py +258 -0
  237. crackerjack/models/task.py +19 -3
  238. crackerjack/models/test_models.py +60 -0
  239. crackerjack/monitoring/README.md +11 -0
  240. crackerjack/monitoring/ai_agent_watchdog.py +5 -4
  241. crackerjack/monitoring/metrics_collector.py +4 -3
  242. crackerjack/monitoring/regression_prevention.py +4 -3
  243. crackerjack/monitoring/websocket_server.py +4 -241
  244. crackerjack/orchestration/README.md +340 -0
  245. crackerjack/orchestration/__init__.py +43 -0
  246. crackerjack/orchestration/advanced_orchestrator.py +20 -67
  247. crackerjack/orchestration/cache/README.md +312 -0
  248. crackerjack/orchestration/cache/__init__.py +37 -0
  249. crackerjack/orchestration/cache/memory_cache.py +338 -0
  250. crackerjack/orchestration/cache/tool_proxy_cache.py +340 -0
  251. crackerjack/orchestration/config.py +297 -0
  252. crackerjack/orchestration/coverage_improvement.py +13 -6
  253. crackerjack/orchestration/execution_strategies.py +6 -6
  254. crackerjack/orchestration/hook_orchestrator.py +1398 -0
  255. crackerjack/orchestration/strategies/README.md +401 -0
  256. crackerjack/orchestration/strategies/__init__.py +39 -0
  257. crackerjack/orchestration/strategies/adaptive_strategy.py +630 -0
  258. crackerjack/orchestration/strategies/parallel_strategy.py +237 -0
  259. crackerjack/orchestration/strategies/sequential_strategy.py +299 -0
  260. crackerjack/orchestration/test_progress_streamer.py +1 -1
  261. crackerjack/plugins/README.md +11 -0
  262. crackerjack/plugins/hooks.py +3 -2
  263. crackerjack/plugins/loader.py +3 -3
  264. crackerjack/plugins/managers.py +1 -1
  265. crackerjack/py313.py +191 -0
  266. crackerjack/security/README.md +11 -0
  267. crackerjack/services/README.md +374 -0
  268. crackerjack/services/__init__.py +8 -21
  269. crackerjack/services/ai/README.md +295 -0
  270. crackerjack/services/ai/__init__.py +7 -0
  271. crackerjack/services/ai/advanced_optimizer.py +878 -0
  272. crackerjack/services/{contextual_ai_assistant.py → ai/contextual_ai_assistant.py} +5 -3
  273. crackerjack/services/ai/embeddings.py +444 -0
  274. crackerjack/services/ai/intelligent_commit.py +328 -0
  275. crackerjack/services/ai/predictive_analytics.py +510 -0
  276. crackerjack/services/api_extractor.py +5 -3
  277. crackerjack/services/bounded_status_operations.py +45 -5
  278. crackerjack/services/cache.py +249 -318
  279. crackerjack/services/changelog_automation.py +7 -3
  280. crackerjack/services/command_execution_service.py +305 -0
  281. crackerjack/services/config_integrity.py +83 -39
  282. crackerjack/services/config_merge.py +9 -6
  283. crackerjack/services/config_service.py +198 -0
  284. crackerjack/services/config_template.py +13 -26
  285. crackerjack/services/coverage_badge_service.py +6 -4
  286. crackerjack/services/coverage_ratchet.py +53 -27
  287. crackerjack/services/debug.py +18 -7
  288. crackerjack/services/dependency_analyzer.py +4 -4
  289. crackerjack/services/dependency_monitor.py +13 -13
  290. crackerjack/services/documentation_generator.py +4 -2
  291. crackerjack/services/documentation_service.py +62 -33
  292. crackerjack/services/enhanced_filesystem.py +81 -27
  293. crackerjack/services/enterprise_optimizer.py +1 -1
  294. crackerjack/services/error_pattern_analyzer.py +10 -10
  295. crackerjack/services/file_filter.py +221 -0
  296. crackerjack/services/file_hasher.py +5 -7
  297. crackerjack/services/file_io_service.py +361 -0
  298. crackerjack/services/file_modifier.py +615 -0
  299. crackerjack/services/filesystem.py +80 -109
  300. crackerjack/services/git.py +99 -5
  301. crackerjack/services/health_metrics.py +4 -6
  302. crackerjack/services/heatmap_generator.py +12 -3
  303. crackerjack/services/incremental_executor.py +380 -0
  304. crackerjack/services/initialization.py +101 -49
  305. crackerjack/services/log_manager.py +2 -2
  306. crackerjack/services/logging.py +120 -68
  307. crackerjack/services/lsp_client.py +12 -12
  308. crackerjack/services/memory_optimizer.py +27 -22
  309. crackerjack/services/monitoring/README.md +30 -0
  310. crackerjack/services/monitoring/__init__.py +9 -0
  311. crackerjack/services/monitoring/dependency_monitor.py +678 -0
  312. crackerjack/services/monitoring/error_pattern_analyzer.py +676 -0
  313. crackerjack/services/monitoring/health_metrics.py +716 -0
  314. crackerjack/services/monitoring/metrics.py +587 -0
  315. crackerjack/services/{performance_benchmarks.py → monitoring/performance_benchmarks.py} +100 -14
  316. crackerjack/services/{performance_cache.py → monitoring/performance_cache.py} +21 -15
  317. crackerjack/services/{performance_monitor.py → monitoring/performance_monitor.py} +10 -6
  318. crackerjack/services/parallel_executor.py +166 -55
  319. crackerjack/services/patterns/__init__.py +142 -0
  320. crackerjack/services/patterns/agents.py +107 -0
  321. crackerjack/services/patterns/code/__init__.py +15 -0
  322. crackerjack/services/patterns/code/detection.py +118 -0
  323. crackerjack/services/patterns/code/imports.py +107 -0
  324. crackerjack/services/patterns/code/paths.py +159 -0
  325. crackerjack/services/patterns/code/performance.py +119 -0
  326. crackerjack/services/patterns/code/replacement.py +36 -0
  327. crackerjack/services/patterns/core.py +212 -0
  328. crackerjack/services/patterns/documentation/__init__.py +14 -0
  329. crackerjack/services/patterns/documentation/badges_markdown.py +96 -0
  330. crackerjack/services/patterns/documentation/comments_blocks.py +83 -0
  331. crackerjack/services/patterns/documentation/docstrings.py +89 -0
  332. crackerjack/services/patterns/formatting.py +226 -0
  333. crackerjack/services/patterns/operations.py +339 -0
  334. crackerjack/services/patterns/security/__init__.py +23 -0
  335. crackerjack/services/patterns/security/code_injection.py +122 -0
  336. crackerjack/services/patterns/security/credentials.py +190 -0
  337. crackerjack/services/patterns/security/path_traversal.py +221 -0
  338. crackerjack/services/patterns/security/unsafe_operations.py +216 -0
  339. crackerjack/services/patterns/templates.py +62 -0
  340. crackerjack/services/patterns/testing/__init__.py +18 -0
  341. crackerjack/services/patterns/testing/error_patterns.py +107 -0
  342. crackerjack/services/patterns/testing/pytest_output.py +126 -0
  343. crackerjack/services/patterns/tool_output/__init__.py +16 -0
  344. crackerjack/services/patterns/tool_output/bandit.py +72 -0
  345. crackerjack/services/patterns/tool_output/other.py +97 -0
  346. crackerjack/services/patterns/tool_output/pyright.py +67 -0
  347. crackerjack/services/patterns/tool_output/ruff.py +44 -0
  348. crackerjack/services/patterns/url_sanitization.py +114 -0
  349. crackerjack/services/patterns/utilities.py +42 -0
  350. crackerjack/services/patterns/utils.py +339 -0
  351. crackerjack/services/patterns/validation.py +46 -0
  352. crackerjack/services/patterns/versioning.py +62 -0
  353. crackerjack/services/predictive_analytics.py +21 -8
  354. crackerjack/services/profiler.py +280 -0
  355. crackerjack/services/quality/README.md +415 -0
  356. crackerjack/services/quality/__init__.py +11 -0
  357. crackerjack/services/quality/anomaly_detector.py +392 -0
  358. crackerjack/services/quality/pattern_cache.py +333 -0
  359. crackerjack/services/quality/pattern_detector.py +479 -0
  360. crackerjack/services/quality/qa_orchestrator.py +491 -0
  361. crackerjack/services/{quality_baseline.py → quality/quality_baseline.py} +163 -2
  362. crackerjack/services/{quality_baseline_enhanced.py → quality/quality_baseline_enhanced.py} +4 -1
  363. crackerjack/services/{quality_intelligence.py → quality/quality_intelligence.py} +180 -16
  364. crackerjack/services/regex_patterns.py +58 -2987
  365. crackerjack/services/regex_utils.py +55 -29
  366. crackerjack/services/secure_status_formatter.py +42 -15
  367. crackerjack/services/secure_subprocess.py +35 -2
  368. crackerjack/services/security.py +16 -8
  369. crackerjack/services/server_manager.py +40 -51
  370. crackerjack/services/smart_scheduling.py +46 -6
  371. crackerjack/services/status_authentication.py +3 -3
  372. crackerjack/services/thread_safe_status_collector.py +1 -0
  373. crackerjack/services/tool_filter.py +368 -0
  374. crackerjack/services/tool_version_service.py +9 -5
  375. crackerjack/services/unified_config.py +43 -351
  376. crackerjack/services/vector_store.py +689 -0
  377. crackerjack/services/version_analyzer.py +6 -4
  378. crackerjack/services/version_checker.py +14 -8
  379. crackerjack/services/zuban_lsp_service.py +5 -4
  380. crackerjack/slash_commands/README.md +11 -0
  381. crackerjack/slash_commands/init.md +2 -12
  382. crackerjack/slash_commands/run.md +84 -50
  383. crackerjack/tools/README.md +11 -0
  384. crackerjack/tools/__init__.py +30 -0
  385. crackerjack/tools/_git_utils.py +105 -0
  386. crackerjack/tools/check_added_large_files.py +139 -0
  387. crackerjack/tools/check_ast.py +105 -0
  388. crackerjack/tools/check_json.py +103 -0
  389. crackerjack/tools/check_jsonschema.py +297 -0
  390. crackerjack/tools/check_toml.py +103 -0
  391. crackerjack/tools/check_yaml.py +110 -0
  392. crackerjack/tools/codespell_wrapper.py +72 -0
  393. crackerjack/tools/end_of_file_fixer.py +202 -0
  394. crackerjack/tools/format_json.py +128 -0
  395. crackerjack/tools/mdformat_wrapper.py +114 -0
  396. crackerjack/tools/trailing_whitespace.py +198 -0
  397. crackerjack/tools/validate_regex_patterns.py +7 -3
  398. crackerjack/ui/README.md +11 -0
  399. crackerjack/ui/dashboard_renderer.py +28 -0
  400. crackerjack/ui/templates/README.md +11 -0
  401. crackerjack/utils/console_utils.py +13 -0
  402. crackerjack/utils/dependency_guard.py +230 -0
  403. crackerjack/utils/retry_utils.py +275 -0
  404. crackerjack/workflows/README.md +590 -0
  405. crackerjack/workflows/__init__.py +46 -0
  406. crackerjack/workflows/actions.py +811 -0
  407. crackerjack/workflows/auto_fix.py +444 -0
  408. crackerjack/workflows/container_builder.py +499 -0
  409. crackerjack/workflows/definitions.py +443 -0
  410. crackerjack/workflows/engine.py +177 -0
  411. crackerjack/workflows/event_bridge.py +242 -0
  412. {crackerjack-0.37.9.dist-info → crackerjack-0.45.2.dist-info}/METADATA +678 -98
  413. crackerjack-0.45.2.dist-info/RECORD +478 -0
  414. {crackerjack-0.37.9.dist-info → crackerjack-0.45.2.dist-info}/WHEEL +1 -1
  415. crackerjack/managers/test_manager_backup.py +0 -1075
  416. crackerjack/mcp/tools/execution_tools_backup.py +0 -1011
  417. crackerjack/mixins/__init__.py +0 -3
  418. crackerjack/mixins/error_handling.py +0 -145
  419. crackerjack/services/config.py +0 -358
  420. crackerjack/ui/server_panels.py +0 -125
  421. crackerjack-0.37.9.dist-info/RECORD +0 -231
  422. /crackerjack/adapters/{rust_tool_adapter.py → lsp/_base.py} +0 -0
  423. /crackerjack/adapters/{lsp_client.py → lsp/_client.py} +0 -0
  424. {crackerjack-0.37.9.dist-info → crackerjack-0.45.2.dist-info}/entry_points.txt +0 -0
  425. {crackerjack-0.37.9.dist-info → crackerjack-0.45.2.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,557 @@
1
+ > Crackerjack Docs: [Main](<../../README.md>) | [CLAUDE.md](../../docs/guides/CLAUDE.md) | Intelligence
2
+
3
+ # Intelligence
4
+
5
+ AI-powered agent orchestration, selection, and adaptive learning for intelligent code quality automation.
6
+
7
+ ## Overview
8
+
9
+ The intelligence package provides the core AI agent system for crackerjack, including agent registry, orchestration, selection, and adaptive learning. This system coordinates 12 specialized AI agents to automatically fix code quality issues with confidence scoring and pattern learning.
10
+
11
+ ## Core Components
12
+
13
+ ### Agent Registry (`agent_registry.py`)
14
+
15
+ Central registry for all AI agents with capability tracking:
16
+
17
+ **Features:**
18
+
19
+ - **Agent Registration** - Register agents with metadata and capabilities
20
+ - **Capability Discovery** - Find agents by capability requirements
21
+ - **Source Tracking** - Track agent origin (built-in, plugin, custom)
22
+ - **Metadata Management** - Store agent descriptions, versions, and configuration
23
+ - **Dynamic Loading** - Load agents on-demand from various sources
24
+
25
+ **Agent Metadata:**
26
+
27
+ ```python
28
+ @dataclass
29
+ class AgentMetadata:
30
+ name: str # Agent identifier
31
+ description: str # Human-readable description
32
+ version: str # Agent version
33
+ capabilities: list[AgentCapability] # What the agent can do
34
+ confidence_threshold: float # Minimum confidence to execute
35
+ source: AgentSource # Where agent came from
36
+ ```
37
+
38
+ **Agent Capabilities:**
39
+
40
+ ```python
41
+ class AgentCapability(Enum):
42
+ REFACTORING = "refactoring" # Code restructuring
43
+ PERFORMANCE = "performance" # Performance optimization
44
+ SECURITY = "security" # Security fixes
45
+ DOCUMENTATION = "documentation" # Documentation updates
46
+ TESTING = "testing" # Test creation/fixes
47
+ DRY = "dry" # Code deduplication
48
+ FORMATTING = "formatting" # Code formatting
49
+ IMPORT_OPTIMIZATION = "import_opt" # Import cleanup
50
+ SEMANTIC_ANALYSIS = "semantic" # Semantic understanding
51
+ ARCHITECTURE = "architecture" # Architecture recommendations
52
+ PROACTIVE_PREVENTION = "proactive" # Proactive issue prevention
53
+ ```
54
+
55
+ **Agent Sources:**
56
+
57
+ ```python
58
+ class AgentSource(Enum):
59
+ BUILTIN = "builtin" # Crackerjack built-in agents
60
+ PLUGIN = "plugin" # Third-party plugins
61
+ CUSTOM = "custom" # User-defined agents
62
+ ```
63
+
64
+ ### Agent Selector (`agent_selector.py`)
65
+
66
+ Intelligent agent selection based on task requirements:
67
+
68
+ **Features:**
69
+
70
+ - **Task Analysis** - Analyzes error context to determine requirements
71
+ - **Capability Matching** - Matches tasks to agent capabilities
72
+ - **Confidence Scoring** - Scores each agent's suitability for task
73
+ - **Multi-Agent Selection** - Can select multiple agents for complex tasks
74
+ - **Fallback Strategy** - Provides fallback agents if primary unavailable
75
+
76
+ **Task Context:**
77
+
78
+ ```python
79
+ @dataclass
80
+ class TaskContext:
81
+ error_type: str # Type of error/issue
82
+ file_path: Path # Affected file
83
+ error_message: str # Full error message
84
+ stack_trace: str | None # Stack trace if available
85
+ code_snippet: str | None # Relevant code snippet
86
+ severity: str # Error severity level
87
+ ```
88
+
89
+ **Agent Scoring:**
90
+
91
+ ```python
92
+ @dataclass
93
+ class AgentScore:
94
+ agent_name: str # Agent identifier
95
+ score: float # Suitability score (0.0-1.0)
96
+ confidence: float # Agent confidence threshold
97
+ reasoning: str # Why this agent was selected
98
+ capabilities_matched: list[str] # Matched capabilities
99
+ ```
100
+
101
+ ### Agent Orchestrator (`agent_orchestrator.py`)
102
+
103
+ Coordinates agent execution with strategy patterns:
104
+
105
+ **Features:**
106
+
107
+ - **Execution Strategies** - Sequential, parallel, or pipeline execution
108
+ - **Result Aggregation** - Combines results from multiple agents
109
+ - **Error Handling** - Graceful degradation on agent failures
110
+ - **Progress Tracking** - Real-time execution progress
111
+ - **Rollback Support** - Can rollback failed agent changes
112
+
113
+ **Execution Strategies:**
114
+
115
+ ```python
116
+ class ExecutionStrategy(Enum):
117
+ SEQUENTIAL = "sequential" # One agent at a time
118
+ PARALLEL = "parallel" # All agents concurrently
119
+ PIPELINE = "pipeline" # Output of one feeds next
120
+ CONDITIONAL = "conditional" # Execute based on conditions
121
+ ```
122
+
123
+ **Execution Request:**
124
+
125
+ ```python
126
+ @dataclass
127
+ class ExecutionRequest:
128
+ task_context: TaskContext # What to fix
129
+ selected_agents: list[str] # Which agents to use
130
+ strategy: ExecutionStrategy # How to execute
131
+ max_concurrent: int = 3 # Max parallel agents
132
+ timeout: int = 300 # Execution timeout
133
+ rollback_on_failure: bool = True # Rollback if failed
134
+ ```
135
+
136
+ **Execution Result:**
137
+
138
+ ```python
139
+ @dataclass
140
+ class ExecutionResult:
141
+ success: bool # Overall success
142
+ agents_executed: list[str] # Agents that ran
143
+ changes_made: list[dict] # Code changes applied
144
+ errors: list[str] # Errors encountered
145
+ execution_time: float # Total execution time
146
+ confidence_scores: dict[str, float] # Agent confidence scores
147
+ ```
148
+
149
+ ### Adaptive Learning (`adaptive_learning.py`)
150
+
151
+ Learns from successful/failed fixes to improve over time:
152
+
153
+ **Features:**
154
+
155
+ - **Pattern Learning** - Learns successful fix patterns
156
+ - **Failure Analysis** - Analyzes why fixes failed
157
+ - **Confidence Adjustment** - Adjusts agent confidence based on history
158
+ - **Pattern Caching** - Caches successful patterns for reuse
159
+ - **Success Rate Tracking** - Tracks per-agent success rates
160
+
161
+ **Learning System:**
162
+
163
+ ```python
164
+ class AdaptiveLearningSystem:
165
+ def record_success(
166
+ self, agent_name: str, task_context: TaskContext, fix_applied: str
167
+ ) -> None:
168
+ """Record successful fix for learning."""
169
+
170
+ def record_failure(
171
+ self, agent_name: str, task_context: TaskContext, error: str
172
+ ) -> None:
173
+ """Record failed fix for analysis."""
174
+
175
+ def get_success_rate(self, agent_name: str) -> float:
176
+ """Get agent success rate."""
177
+
178
+ def recommend_agent(self, task_context: TaskContext) -> tuple[str, float]:
179
+ """Recommend best agent based on learning."""
180
+ ```
181
+
182
+ ### Integration (`integration.py`)
183
+
184
+ Integration layer connecting intelligence system to crackerjack:
185
+
186
+ **Features:**
187
+
188
+ - **Workflow Integration** - Integrates agents with ACB workflows
189
+ - **Error Routing** - Routes errors to appropriate agents
190
+ - **Result Processing** - Processes agent results for display
191
+ - **Configuration Management** - Manages agent system configuration
192
+
193
+ ## The 12 Specialized Agents
194
+
195
+ Crackerjack's intelligence system coordinates 12 specialized agents (defined in `/home/user/crackerjack/crackerjack/agents/`):
196
+
197
+ ### Code Quality Agents
198
+
199
+ 1. **RefactoringAgent** (0.9 confidence)
200
+
201
+ - **Capabilities**: REFACTORING
202
+ - **Focus**: Complexity ≤15, dead code removal, method extraction
203
+ - **Triggers**: Cognitive complexity violations, long methods
204
+
205
+ 1. **DRYAgent** (0.8 confidence)
206
+
207
+ - **Capabilities**: DRY
208
+ - **Focus**: Code duplication detection and elimination
209
+ - **Triggers**: Duplicate code patterns, repeated logic
210
+
211
+ 1. **FormattingAgent** (0.8 confidence)
212
+
213
+ - **Capabilities**: FORMATTING
214
+ - **Focus**: Code style, formatting violations
215
+ - **Triggers**: Ruff format issues, style violations
216
+
217
+ 1. **ImportOptimizationAgent**
218
+
219
+ - **Capabilities**: IMPORT_OPTIMIZATION
220
+ - **Focus**: Import cleanup, unused imports, import organization
221
+ - **Triggers**: Unused imports, import violations
222
+
223
+ ### Performance & Security Agents
224
+
225
+ 5. **PerformanceAgent** (0.85 confidence)
226
+
227
+ - **Capabilities**: PERFORMANCE
228
+ - **Focus**: O(n²) detection, optimization opportunities
229
+ - **Triggers**: Performance anti-patterns, slow code
230
+
231
+ 1. **SecurityAgent** (0.8 confidence)
232
+
233
+ - **Capabilities**: SECURITY
234
+ - **Focus**: Hardcoded paths, unsafe operations, injection vulnerabilities
235
+ - **Triggers**: Bandit violations, security warnings
236
+
237
+ ### Testing & Documentation Agents
238
+
239
+ 7. **TestCreationAgent** (0.8 confidence)
240
+
241
+ - **Capabilities**: TESTING
242
+ - **Focus**: Test failures, fixture creation, test coverage
243
+ - **Triggers**: Test failures, missing tests, low coverage
244
+
245
+ 1. **TestSpecialistAgent** (0.8 confidence)
246
+
247
+ - **Capabilities**: TESTING
248
+ - **Focus**: Advanced testing scenarios, complex fixtures, mocking
249
+ - **Triggers**: Complex test failures, async test issues
250
+
251
+ 1. **DocumentationAgent** (0.8 confidence)
252
+
253
+ - **Capabilities**: DOCUMENTATION
254
+ - **Focus**: Changelog, README consistency, API documentation
255
+ - **Triggers**: Documentation inconsistencies, missing docs
256
+
257
+ ### Advanced Intelligence Agents
258
+
259
+ 10. **SemanticAgent** (0.85 confidence)
260
+
261
+ - **Capabilities**: SEMANTIC_ANALYSIS
262
+ - **Focus**: Semantic analysis, code comprehension, intelligent refactoring
263
+ - **Triggers**: Semantic violations, architectural issues
264
+
265
+ 01. **ArchitectAgent** (0.85 confidence)
266
+
267
+ - **Capabilities**: ARCHITECTURE
268
+ - **Focus**: Architecture patterns, design recommendations, system optimization
269
+ - **Triggers**: Architectural violations, design issues
270
+
271
+ 01. **EnhancedProactiveAgent** (0.9 confidence)
272
+
273
+ - **Capabilities**: PROACTIVE_PREVENTION
274
+ - **Focus**: Proactive prevention, predictive monitoring, preemptive optimization
275
+ - **Triggers**: Quality trends, predicted issues
276
+
277
+ ## Usage Examples
278
+
279
+ ### Agent Registry
280
+
281
+ ```python
282
+ from crackerjack.intelligence import AgentRegistry, AgentCapability, get_agent_registry
283
+
284
+ registry = get_agent_registry()
285
+
286
+ # Find agents by capability
287
+ refactoring_agents = registry.get_agents_by_capability(AgentCapability.REFACTORING)
288
+
289
+ for agent in refactoring_agents:
290
+ print(f"Agent: {agent.name}")
291
+ print(f" Confidence: {agent.confidence_threshold}")
292
+ print(f" Description: {agent.description}")
293
+
294
+ # Get specific agent
295
+ agent = registry.get_agent("refactoring")
296
+ ```
297
+
298
+ ### Agent Selection
299
+
300
+ ```python
301
+ from crackerjack.intelligence import AgentSelector, TaskContext
302
+ from pathlib import Path
303
+
304
+ selector = AgentSelector(registry=registry)
305
+
306
+ # Create task context from error
307
+ task = TaskContext(
308
+ error_type="complexity",
309
+ file_path=Path("src/complex_module.py"),
310
+ error_message="Complexity of 18 exceeds maximum of 15",
311
+ severity="high",
312
+ )
313
+
314
+ # Select best agents for task
315
+ selected = selector.select_agents(task, max_agents=3)
316
+
317
+ for agent_score in selected:
318
+ print(f"Agent: {agent_score.agent_name}")
319
+ print(f" Score: {agent_score.score:.2f}")
320
+ print(f" Reasoning: {agent_score.reasoning}")
321
+ ```
322
+
323
+ ### Agent Orchestration
324
+
325
+ ```python
326
+ from crackerjack.intelligence import (
327
+ AgentOrchestrator,
328
+ ExecutionRequest,
329
+ ExecutionStrategy,
330
+ get_agent_orchestrator,
331
+ )
332
+
333
+ orchestrator = get_agent_orchestrator()
334
+
335
+ # Execute agents with strategy
336
+ request = ExecutionRequest(
337
+ task_context=task,
338
+ selected_agents=["refactoring", "semantic"],
339
+ strategy=ExecutionStrategy.SEQUENTIAL,
340
+ timeout=300,
341
+ rollback_on_failure=True,
342
+ )
343
+
344
+ result = await orchestrator.execute(request)
345
+
346
+ if result.success:
347
+ print(f"✅ Fixed in {result.execution_time:.1f}s")
348
+ print(f"Agents used: {', '.join(result.agents_executed)}")
349
+ print(f"Changes made: {len(result.changes_made)}")
350
+ else:
351
+ print(f"❌ Failed: {', '.join(result.errors)}")
352
+ ```
353
+
354
+ ### Adaptive Learning
355
+
356
+ ```python
357
+ from crackerjack.intelligence import AdaptiveLearningSystem, get_learning_system
358
+
359
+ learning = get_learning_system()
360
+
361
+ # Record successful fix
362
+ learning.record_success(
363
+ agent_name="refactoring",
364
+ task_context=task,
365
+ fix_applied="Extracted method to reduce complexity",
366
+ )
367
+
368
+ # Get success rate
369
+ success_rate = learning.get_success_rate("refactoring")
370
+ print(f"RefactoringAgent success rate: {success_rate:.1%}")
371
+
372
+ # Get recommendation based on learning
373
+ recommended_agent, confidence = learning.recommend_agent(task)
374
+ print(f"Recommended: {recommended_agent} (confidence: {confidence:.2f})")
375
+ ```
376
+
377
+ ### Full AI-Fixing Workflow
378
+
379
+ ```python
380
+ from crackerjack.intelligence import (
381
+ get_agent_registry,
382
+ AgentSelector,
383
+ get_agent_orchestrator,
384
+ get_learning_system,
385
+ ExecutionRequest,
386
+ ExecutionStrategy,
387
+ TaskContext,
388
+ )
389
+ from pathlib import Path
390
+
391
+
392
+ async def ai_fix_error(error_message: str, file_path: Path) -> bool:
393
+ # Setup
394
+ registry = get_agent_registry()
395
+ selector = AgentSelector(registry=registry)
396
+ orchestrator = get_agent_orchestrator()
397
+ learning = get_learning_system()
398
+
399
+ # Create task context
400
+ task = TaskContext(
401
+ error_type="auto_detected",
402
+ file_path=file_path,
403
+ error_message=error_message,
404
+ severity="high",
405
+ )
406
+
407
+ # Select agents
408
+ selected = selector.select_agents(task, max_agents=2)
409
+ agent_names = [score.agent_name for score in selected]
410
+
411
+ # Execute agents
412
+ request = ExecutionRequest(
413
+ task_context=task,
414
+ selected_agents=agent_names,
415
+ strategy=ExecutionStrategy.SEQUENTIAL,
416
+ timeout=300,
417
+ )
418
+
419
+ result = await orchestrator.execute(request)
420
+
421
+ # Record for learning
422
+ if result.success:
423
+ for agent_name in result.agents_executed:
424
+ learning.record_success(
425
+ agent_name=agent_name,
426
+ task_context=task,
427
+ fix_applied=str(result.changes_made),
428
+ )
429
+ else:
430
+ for agent_name in result.agents_executed:
431
+ learning.record_failure(
432
+ agent_name=agent_name, task_context=task, error=str(result.errors)
433
+ )
434
+
435
+ return result.success
436
+ ```
437
+
438
+ ## Configuration
439
+
440
+ Intelligence system configuration through ACB Settings:
441
+
442
+ ```yaml
443
+ # settings/crackerjack.yaml
444
+
445
+ # Agent system
446
+ ai_fix_enabled: true
447
+ ai_debug: false # Debug mode for agent development
448
+ min_agent_confidence: 0.7 # Minimum confidence to execute
449
+
450
+ # Agent selection
451
+ max_agents_per_task: 3
452
+ agent_timeout: 300
453
+ agent_parallel_execution: false
454
+
455
+ # Adaptive learning
456
+ learning_enabled: true
457
+ learning_cache_ttl: 86400 # 24 hours
458
+ success_rate_window: 100 # Last 100 executions
459
+
460
+ # Execution strategy
461
+ default_execution_strategy: "sequential" # sequential, parallel, pipeline
462
+ rollback_on_failure: true
463
+ max_rollback_attempts: 1
464
+
465
+ # Agent-specific configuration
466
+ agent_config:
467
+ refactoring:
468
+ max_complexity: 15
469
+ enable_method_extraction: true
470
+ security:
471
+ check_hardcoded_secrets: true
472
+ check_sql_injection: true
473
+ testing:
474
+ auto_create_fixtures: true
475
+ min_coverage_target: 80
476
+ ```
477
+
478
+ ## Integration with Workflows
479
+
480
+ Intelligence system integrates with ACB workflows for automated fixing:
481
+
482
+ ```python
483
+ from crackerjack.workflows import CrackerjackWorkflowEngine
484
+ from crackerjack.intelligence import get_agent_orchestrator
485
+
486
+ engine = CrackerjackWorkflowEngine()
487
+ orchestrator = get_agent_orchestrator()
488
+
489
+
490
+ # Register AI fixing as workflow action
491
+ @engine.register_action("ai_fix")
492
+ async def ai_fix_action(context):
493
+ errors = context.get("errors", [])
494
+ fixed_count = 0
495
+
496
+ for error in errors:
497
+ task = create_task_from_error(error)
498
+ selected = selector.select_agents(task)
499
+ request = create_execution_request(task, selected)
500
+
501
+ result = await orchestrator.execute(request)
502
+ if result.success:
503
+ fixed_count += 1
504
+
505
+ return {"fixed_count": fixed_count, "total_errors": len(errors)}
506
+ ```
507
+
508
+ ## Best Practices
509
+
510
+ 1. **Set Appropriate Confidence Thresholds** - Don't set too low or agents may make incorrect changes
511
+ 1. **Use Learning System** - Enable adaptive learning to improve agent selection over time
512
+ 1. **Start with High-Confidence Agents** - Begin with RefactoringAgent (0.9) and EnhancedProactiveAgent (0.9)
513
+ 1. **Monitor Success Rates** - Track agent success rates and adjust confidence thresholds
514
+ 1. **Sequential for Safety** - Use sequential execution strategy for safety-critical fixes
515
+ 1. **Enable Rollback** - Always enable rollback for automatic agent execution
516
+ 1. **Batch Similar Issues** - Group similar errors for more efficient agent execution
517
+ 1. **Use Semantic Agent** - Leverage SemanticAgent for complex refactoring scenarios
518
+ 1. **Debug Mode** - Use `--ai-debug` flag when developing or testing agents
519
+ 1. **Review Changes** - Always review agent-generated changes before committing
520
+
521
+ ## Performance Considerations
522
+
523
+ ### Agent Execution Time
524
+
525
+ ```
526
+ Single agent (RefactoringAgent): ~5-15s per fix
527
+ Multiple agents (sequential): ~15-45s per task
528
+ Multiple agents (parallel): ~10-20s per task
529
+ Adaptive learning overhead: ~1-2s per task
530
+ ```
531
+
532
+ ### Learning System Performance
533
+
534
+ ```
535
+ Pattern cache size: ~10-50MB (typical project)
536
+ Learning lookup time: <100ms
537
+ Success rate calculation: <50ms
538
+ Recommendation generation: <200ms
539
+ ```
540
+
541
+ ## Related
542
+
543
+ - [Agents](<../agents/README.md>) - Individual agent implementations
544
+ - [Workflows](<../workflows/README.md>) - Workflow integration
545
+ - [Services/AI](<../services/ai/README.md>) - AI service layer
546
+ - [CLAUDE.md](../../docs/guides/CLAUDE.md) - AI agent system overview
547
+
548
+ ## Future Enhancements
549
+
550
+ - [ ] Agent marketplace for community-contributed agents
551
+ - [ ] Multi-agent collaboration for complex tasks
552
+ - [ ] Real-time agent performance dashboard
553
+ - [ ] Agent A/B testing framework
554
+ - [ ] Transfer learning between projects
555
+ - [ ] Agent ensemble methods for higher accuracy
556
+ - [ ] Custom agent development SDK
557
+ - [ ] Agent explainability improvements
@@ -5,7 +5,8 @@ from enum import Enum, auto
5
5
  from functools import partial
6
6
  from typing import Protocol
7
7
 
8
- from rich.console import Console
8
+ from acb.console import Console
9
+ from acb.depends import depends
9
10
  from rich.panel import Panel
10
11
  from rich.prompt import Confirm
11
12
  from rich.table import Table
@@ -24,7 +25,7 @@ class TaskStatus(Enum):
24
25
 
25
26
 
26
27
  @dataclass
27
- class WorkflowOptions:
28
+ class InteractiveWorkflowOptions:
28
29
  clean: bool = False
29
30
  test: bool = False
30
31
  publish: str | None = None
@@ -34,8 +35,28 @@ class WorkflowOptions:
34
35
  interactive: bool = True
35
36
  dry_run: bool = False
36
37
 
38
+ def __init__(
39
+ self,
40
+ clean: bool = False,
41
+ test: bool = False,
42
+ publish: str | None = None,
43
+ bump: str | None = None,
44
+ commit: bool = False,
45
+ create_pr: bool = False,
46
+ interactive: bool = True,
47
+ dry_run: bool = False,
48
+ ) -> None:
49
+ self.clean = clean
50
+ self.test = test
51
+ self.publish = publish
52
+ self.bump = bump
53
+ self.commit = commit
54
+ self.create_pr = create_pr
55
+ self.interactive = interactive
56
+ self.dry_run = dry_run
57
+
37
58
  @classmethod
38
- def from_args(cls, args: t.Any) -> "WorkflowOptions":
59
+ def from_args(cls, args: t.Any) -> "InteractiveWorkflowOptions":
39
60
  return cls(
40
61
  clean=getattr(args, "clean", False),
41
62
  test=getattr(args, "test", False),
@@ -393,16 +414,16 @@ class WorkflowManager:
393
414
 
394
415
  class InteractiveCLI:
395
416
  def __init__(self, console: Console | None = None) -> None:
396
- self.console = console or Console()
417
+ self.console = console or depends.get_sync(Console)
397
418
  self.workflow = WorkflowManager(self.console)
398
419
  import logging
399
420
 
400
421
  self.logger = logging.getLogger("crackerjack.interactive.cli")
401
422
 
402
- def create_dynamic_workflow(self, options: WorkflowOptions) -> None:
423
+ def create_dynamic_workflow(self, options: InteractiveWorkflowOptions) -> None:
403
424
  builder = WorkflowBuilder(self.console)
404
425
 
405
- workflow_steps = [
426
+ workflow_steps: list[t.Callable[[WorkflowBuilder, str], str]] = [
406
427
  self._add_setup_phase,
407
428
  self._add_config_phase,
408
429
  partial(self._add_cleaning_phase, enabled=options.clean),
@@ -581,7 +602,7 @@ class InteractiveCLI:
581
602
  or last_task
582
603
  )
583
604
 
584
- def run_interactive_workflow(self, options: WorkflowOptions) -> bool:
605
+ def run_interactive_workflow(self, options: InteractiveWorkflowOptions) -> bool:
585
606
  self.logger.info(
586
607
  f"Starting interactive workflow with options: {options.__dict__}",
587
608
  )
@@ -647,6 +668,8 @@ class InteractiveCLI:
647
668
 
648
669
  self.console.print("\n[bold]📊 Workflow Summary[/ bold]")
649
670
 
671
+ from rich.panel import Panel
672
+
650
673
  table = Table(show_header=True, header_style="bold magenta")
651
674
  table.add_column("Status", style="cyan")
652
675
  table.add_column("Count", justify="right")
@@ -663,11 +686,13 @@ class InteractiveCLI:
663
686
  style = status_styles.get(status, "white")
664
687
  table.add_row(f"[{style}]{status.title()}[/{style}]", str(count))
665
688
 
666
- self.console.print(table)
689
+ self.console.print(
690
+ Panel(table, title="Workflow Summary", border_style="magenta")
691
+ )
667
692
 
668
693
 
669
694
  def launch_interactive_cli(version: str, options: t.Any = None) -> None:
670
- console = Console()
695
+ console = depends.get_sync(Console)
671
696
  cli = InteractiveCLI(console)
672
697
 
673
698
  title = Text("Crackerjack", style="bold cyan")
@@ -682,7 +707,9 @@ def launch_interactive_cli(version: str, options: t.Any = None) -> None:
682
707
  console.print()
683
708
 
684
709
  workflow_options = (
685
- WorkflowOptions.from_args(options) if options else WorkflowOptions()
710
+ InteractiveWorkflowOptions.from_args(options)
711
+ if options
712
+ else InteractiveWorkflowOptions()
686
713
  )
687
714
  cli.create_dynamic_workflow(workflow_options)
688
715
  cli.run_interactive_workflow(workflow_options)