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
@@ -18,7 +18,8 @@ from crackerjack.monitoring.metrics_collector import (
18
18
  MetricsCollector,
19
19
  UnifiedDashboardMetrics,
20
20
  )
21
- from crackerjack.services.cache import CrackerjackCache
21
+ from crackerjack.services.acb_cache_adapter import CrackerjackCache
22
+ from crackerjack.ui.dashboard_renderer import render_monitoring_dashboard
22
23
 
23
24
  logger = logging.getLogger(__name__)
24
25
 
@@ -376,245 +377,7 @@ class CrackerjackMonitoringServer:
376
377
 
377
378
  def _get_dashboard_html(self) -> str:
378
379
  """Generate the dashboard HTML interface."""
379
- html_template = self._get_html_template()
380
- css_styles = self._get_dashboard_css()
381
- javascript_code = self._get_dashboard_javascript()
382
-
383
- return html_template.format(
384
- css_styles=css_styles, javascript_code=javascript_code
385
- )
386
-
387
- def _get_html_template(self) -> str:
388
- """Get the HTML template structure."""
389
- return """<!DOCTYPE html>
390
- <html lang="en">
391
- <head>
392
- <meta charset="UTF-8">
393
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
394
- <title>Crackerjack Monitoring Dashboard</title>
395
- <style>{css_styles}</style>
396
- </head>
397
- <body>
398
- <div class="connection-status disconnected" id="connection-status">Connecting...</div>
399
-
400
- <div class="header">
401
- <h1>🔧 Crackerjack Monitoring Dashboard</h1>
402
- <p>Real-time project monitoring and analytics</p>
403
- </div>
404
-
405
- <div class="dashboard">
406
- <div class="card">
407
- <h3>System Health</h3>
408
- <div class="metric">
409
- <span class="metric-label">CPU Usage</span>
410
- <span class="metric-value" id="cpu">--</span>
411
- </div>
412
- <div class="metric">
413
- <span class="metric-label">Memory</span>
414
- <span class="metric-value" id="memory">--</span>
415
- </div>
416
- <div class="metric">
417
- <span class="metric-label">Uptime</span>
418
- <span class="metric-value" id="uptime">--</span>
419
- </div>
420
- </div>
421
-
422
- <div class="card">
423
- <h3>Quality Metrics</h3>
424
- <div class="metric">
425
- <span class="metric-label">Success Rate</span>
426
- <span class="metric-value" id="success-rate">--</span>
427
- </div>
428
- <div class="metric">
429
- <span class="metric-label">Issues Fixed</span>
430
- <span class="metric-value" id="issues-fixed">--</span>
431
- </div>
432
- <div class="metric">
433
- <span class="metric-label">Test Coverage</span>
434
- <span class="metric-value" id="coverage">--</span>
435
- </div>
436
- </div>
437
-
438
- <div class="card">
439
- <h3>Workflow Status</h3>
440
- <div class="metric">
441
- <span class="metric-label">Jobs Completed</span>
442
- <span class="metric-value" id="jobs-completed">--</span>
443
- </div>
444
- <div class="metric">
445
- <span class="metric-label">Avg Duration</span>
446
- <span class="metric-value" id="avg-duration">--</span>
447
- </div>
448
- <div class="metric">
449
- <span class="metric-label">Throughput</span>
450
- <span class="metric-value" id="throughput">--</span>
451
- </div>
452
- </div>
453
-
454
- <div class="card">
455
- <h3>AI Agents</h3>
456
- <div class="metric">
457
- <span class="metric-label">Active Agents</span>
458
- <span class="metric-value" id="active-agents">--</span>
459
- </div>
460
- <div class="metric">
461
- <span class="metric-label">Total Fixes</span>
462
- <span class="metric-value" id="total-fixes">--</span>
463
- </div>
464
- <div class="metric">
465
- <span class="metric-label">Cache Hit Rate</span>
466
- <span class="metric-value" id="cache-hit-rate">--</span>
467
- </div>
468
- </div>
469
-
470
- <div class="card" style="grid-column: 1/-1;">
471
- <h3>Activity Log</h3>
472
- <div id="logs"></div>
473
- </div>
474
- </div>
475
-
476
- <script>{javascript_code}</script>
477
- </body>
478
- </html>"""
479
-
480
- def _get_dashboard_css(self) -> str:
481
- """Get the CSS styles for the dashboard."""
482
- return """
483
- body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; margin: 0; padding: 20px; background: #1a1a1a; color: #fff; }
484
- .dashboard { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 20px; }
485
- .card { background: #2d2d2d; border-radius: 8px; padding: 20px; border: 1px solid #404040; }
486
- .metric { display: flex; justify-content: space-between; margin: 10px 0; }
487
- .metric-label { color: #aaa; }
488
- .metric-value { color: #fff; font-weight: bold; }
489
- .status-good { color: #4ade80; }
490
- .status-warning { color: #fbbf24; }
491
- .status-error { color: #ef4444; }
492
- .header { text-align: center; margin-bottom: 30px; }
493
- .connection-status { position: fixed; top: 20px; right: 20px; padding: 10px; border-radius: 4px; }
494
- .connected { background: #16a34a; }
495
- .disconnected { background: #dc2626; }
496
- #logs { height: 200px; overflow-y: auto; background: #000; padding: 10px; border-radius: 4px; font-family: monospace; font-size: 12px; }
497
- """
498
-
499
- def _get_dashboard_javascript(self) -> str:
500
- """Get the JavaScript code for the dashboard."""
501
- js_variables = self._get_js_variables()
502
- js_websocket_handlers = self._get_js_websocket_handlers()
503
- js_dashboard_functions = self._get_js_dashboard_functions()
504
- js_initialization = self._get_js_initialization()
505
-
506
- return f"""
507
- {js_variables}
508
- {js_websocket_handlers}
509
- {js_dashboard_functions}
510
- {js_initialization}
511
- """
512
-
513
- def _get_js_variables(self) -> str:
514
- """Get JavaScript variable declarations."""
515
- return """
516
- const wsUrl = `ws://${window.location.host}/ws/metrics`;
517
- let ws = null;
518
- let reconnectInterval = 5000;
519
- """
520
-
521
- def _get_js_websocket_handlers(self) -> str:
522
- """Get JavaScript WebSocket connection handlers."""
523
- return """
524
- function connect() {
525
- ws = new WebSocket(wsUrl);
526
- ws.onopen = handleWebSocketOpen;
527
- ws.onmessage = handleWebSocketMessage;
528
- ws.onclose = handleWebSocketClose;
529
- ws.onerror = handleWebSocketError;
530
- }
531
-
532
- function handleWebSocketOpen() {
533
- document.getElementById('connection-status').textContent = 'Connected';
534
- document.getElementById('connection-status').className = 'connection-status connected';
535
- log('Connected to monitoring server');
536
- }
537
-
538
- function handleWebSocketMessage(event) {
539
- const message = JSON.parse(event.data);
540
- if (message.type === 'metrics_update' || message.type === 'initial_metrics') {
541
- updateDashboard(message.data);
542
- }
543
- }
544
-
545
- function handleWebSocketClose() {
546
- document.getElementById('connection-status').textContent = 'Disconnected';
547
- document.getElementById('connection-status').className = 'connection-status disconnected';
548
- log('Disconnected from monitoring server');
549
- setTimeout(connect, reconnectInterval);
550
- }
551
-
552
- function handleWebSocketError(error) {
553
- log(`WebSocket error: ${error}`);
554
- }
555
- """
556
-
557
- def _get_js_dashboard_functions(self) -> str:
558
- """Get JavaScript dashboard utility functions."""
559
- return """
560
- function updateDashboard(data) {
561
- updateSystemMetrics(data.system);
562
- updateQualityMetrics(data.quality);
563
- updateWorkflowMetrics(data.workflow);
564
- updateAgentMetrics(data.agents);
565
- }
566
-
567
- function updateSystemMetrics(system) {
568
- document.getElementById('cpu').textContent = system.cpu_usage.toFixed(1) + '%';
569
- document.getElementById('memory').textContent = (system.memory_usage_mb / 1024).toFixed(1) + 'GB';
570
- document.getElementById('uptime').textContent = formatUptime(system.uptime_seconds);
571
- }
572
-
573
- function updateQualityMetrics(quality) {
574
- document.getElementById('success-rate').textContent = (quality.success_rate * 100).toFixed(1) + '%';
575
- document.getElementById('issues-fixed').textContent = quality.issues_fixed;
576
- document.getElementById('coverage').textContent = (quality.test_coverage * 100).toFixed(1) + '%';
577
- }
578
-
579
- function updateWorkflowMetrics(workflow) {
580
- document.getElementById('jobs-completed').textContent = workflow.jobs_completed;
581
- document.getElementById('avg-duration').textContent = workflow.average_job_duration.toFixed(1) + 's';
582
- document.getElementById('throughput').textContent = workflow.throughput_per_hour.toFixed(1) + '/h';
583
- }
584
-
585
- function updateAgentMetrics(agents) {
586
- document.getElementById('active-agents').textContent = agents.active_agents;
587
- document.getElementById('total-fixes').textContent = agents.total_fixes_applied;
588
- document.getElementById('cache-hit-rate').textContent = (agents.cache_hit_rate * 100).toFixed(1) + '%';
589
- }
590
-
591
- function formatUptime(seconds) {
592
- if (seconds < 3600) return Math.floor(seconds/60) + 'm';
593
- if (seconds < 86400) return Math.floor(seconds/3600) + 'h';
594
- return Math.floor(seconds/86400) + 'd';
595
- }
596
-
597
- function log(message) {
598
- const logs = document.getElementById('logs');
599
- const timestamp = new Date().toLocaleTimeString();
600
- logs.innerHTML += `<div>[${timestamp}] ${message}</div>`;
601
- logs.scrollTop = logs.scrollHeight;
602
- }
603
- """
604
-
605
- def _get_js_initialization(self) -> str:
606
- """Get JavaScript initialization code."""
607
- return """
608
- // Start connection
609
- connect();
610
-
611
- // Periodic ping to keep connection alive
612
- setInterval(() => {
613
- if (ws && ws.readyState === WebSocket.OPEN) {
614
- ws.send(JSON.stringify({type: 'ping'}));
615
- }
616
- }, 30000);
617
- """
380
+ return render_monitoring_dashboard()
618
381
 
619
382
 
620
383
  # Convenience function for quick server startup
@@ -637,7 +400,7 @@ if __name__ == "__main__":
637
400
  try:
638
401
  await server.start_monitoring()
639
402
  except KeyboardInterrupt:
640
- logger.info("Shutting down monitoring server...")
403
+ logger.info("Shutting down monitoring server")
641
404
  await server.stop_monitoring()
642
405
 
643
406
  asyncio.run(main())
@@ -0,0 +1,340 @@
1
+ > Crackerjack Docs: [Main](<../../README.md>) | [CLAUDE.md](../../docs/guides/CLAUDE.md) | [Orchestration](<./README.md>)
2
+
3
+ # Orchestration
4
+
5
+ Workflow orchestration, execution strategies, caching, and coordination for quality enforcement pipelines.
6
+
7
+ ## Overview
8
+
9
+ The orchestration package provides the core workflow engine that coordinates quality checks, test execution, and AI fixing across the entire crackerjack platform. It includes intelligent caching, adaptive execution strategies, and hook management for optimal performance and reliability.
10
+
11
+ ## Core Components
12
+
13
+ ### Orchestrators
14
+
15
+ - **hook_orchestrator.py**: Main orchestrator for quality hook execution
16
+
17
+ - Direct adapter invocation (no pre-commit wrapper overhead)
18
+ - Dependency resolution and intelligent ordering
19
+ - Adaptive execution strategies (fast, comprehensive, dependency-aware)
20
+ - Graceful degradation with timeout strategies
21
+ - 70% cache hit rate in typical workflows
22
+
23
+ - **advanced_orchestrator.py**: Advanced orchestration with enhanced features
24
+
25
+ - Multi-stage workflow coordination
26
+ - AI agent integration
27
+ - Progress tracking and reporting
28
+ - Error recovery and retry logic
29
+
30
+ ### Execution Strategies
31
+
32
+ - **execution_strategies.py**: Pluggable execution strategies
33
+ - **Fast Strategy**: Quick checks for rapid feedback (~5s)
34
+ - **Comprehensive Strategy**: Full analysis with all tools (~30s)
35
+ - **Dependency-Aware Strategy**: Intelligent ordering based on dependencies
36
+ - **Parallel Strategy**: Maximum concurrency for I/O-bound operations
37
+ - **Sequential Strategy**: One-at-a-time for debugging
38
+
39
+ ### Coverage & Quality
40
+
41
+ - **coverage_improvement.py**: Automated coverage improvement workflows
42
+ - Identifies low-coverage areas
43
+ - Generates test suggestions
44
+ - Tracks coverage ratchet progress
45
+ - Milestone celebration system
46
+
47
+ ### Configuration
48
+
49
+ - **config.py**: Orchestration configuration and settings
50
+ - Hook definitions and metadata
51
+ - Execution timeouts and limits
52
+ - Cache configuration
53
+ - Strategy selection
54
+
55
+ ## Subdirectories
56
+
57
+ ### Cache (`cache/`)
58
+
59
+ Intelligent caching system for hook results:
60
+
61
+ - **ToolProxyCache**: Content-based caching with file hash verification
62
+ - **MemoryCache**: In-memory LRU cache for testing
63
+ - **Cache Adapters**: Pluggable cache backends
64
+
65
+ **Benefits:**
66
+
67
+ - 70% cache hit rate in typical workflows
68
+ - Content-aware invalidation (only re-run when files actually change)
69
+ - Configurable TTL (default 3600s/1 hour)
70
+ - File hash verification prevents stale results
71
+
72
+ See [cache/README.md](<./cache/README.md>) for details.
73
+
74
+ ### Strategies (`strategies/`)
75
+
76
+ Execution strategy implementations:
77
+
78
+ - **Strategy Pattern**: Pluggable execution strategies
79
+ - **Dependency Resolution**: Intelligent hook ordering
80
+ - **Timeout Management**: Graceful degradation on timeouts
81
+ - **Parallelization**: Concurrent execution for independent hooks
82
+
83
+ See [strategies/README.md](<./strategies/README.md>) for details.
84
+
85
+ ## Architecture
86
+
87
+ ### Workflow Execution Flow
88
+
89
+ ```
90
+ User Command → Hook Orchestrator
91
+
92
+ Strategy Selection (Fast/Comprehensive/Dependency-Aware)
93
+
94
+ Dependency Resolution (Topological Sort)
95
+
96
+ Cache Check (Content Hash Lookup)
97
+
98
+ Parallel Execution (Up to 11 concurrent adapters)
99
+
100
+ ToolProxyCache Adapter (Direct API calls, no subprocess)
101
+
102
+ Results Aggregation with real-time output
103
+
104
+ Error Analysis & AI Fixing (if enabled)
105
+ ```
106
+
107
+ ### ACB Integration
108
+
109
+ The orchestration layer has been migrated from pre-commit subprocess calls to direct ACB adapter execution:
110
+
111
+ **Old Approach (Pre-commit):**
112
+
113
+ ```bash
114
+ pre-commit run ruff --all-files # Subprocess overhead
115
+ ```
116
+
117
+ **New Approach (ACB):**
118
+
119
+ ```bash
120
+ python -m crackerjack --fast # Direct Python API, 70% faster
121
+ ```
122
+
123
+ ### Performance Benefits
124
+
125
+ | Metric | Legacy | ACB Orchestration | Improvement |
126
+ |--------|--------|-------------------|-------------|
127
+ | **Fast Hooks** | ~45s | ~48s | Comparable |
128
+ | **Console Output** | Buffered | **Real-time streaming** | UX improvement |
129
+ | **Event Loop** | Sync (blocking) | **Async (non-blocking)** | Responsive |
130
+ | **Cache Hit Rate** | 0% | **70%** | New capability |
131
+ | **Concurrent Adapters** | 1 | **11** | 11x parallelism |
132
+
133
+ ## Usage
134
+
135
+ ### Basic Orchestration
136
+
137
+ ```python
138
+ from crackerjack.orchestration.hook_orchestrator import HookOrchestrator
139
+ from crackerjack.orchestration.execution_strategies import FastStrategy
140
+
141
+ orchestrator = HookOrchestrator(strategy=FastStrategy())
142
+ results = await orchestrator.run_hooks(files=[Path(".")])
143
+
144
+ for result in results:
145
+ if not result.passed:
146
+ print(f"Hook {result.hook_name} failed: {result.message}")
147
+ ```
148
+
149
+ ### Advanced Orchestration
150
+
151
+ ```python
152
+ from crackerjack.orchestration.advanced_orchestrator import AdvancedOrchestrator
153
+
154
+ orchestrator = AdvancedOrchestrator(
155
+ enable_ai_fixing=True,
156
+ max_iterations=10,
157
+ progress_callback=lambda p: print(f"Progress: {p}%"),
158
+ )
159
+
160
+ result = await orchestrator.execute_workflow(
161
+ stages=["fast_hooks", "tests", "comprehensive_hooks"], ai_agent_mode=True
162
+ )
163
+ ```
164
+
165
+ ### Custom Execution Strategy
166
+
167
+ ```python
168
+ from crackerjack.orchestration.execution_strategies import ExecutionStrategy
169
+
170
+
171
+ class CustomStrategy(ExecutionStrategy):
172
+ def should_run_hook(self, hook_name: str) -> bool:
173
+ # Custom logic for hook selection
174
+ return hook_name in ["ruff", "zuban"]
175
+
176
+ def get_concurrency_limit(self) -> int:
177
+ # Custom parallelism
178
+ return 5
179
+
180
+
181
+ orchestrator = HookOrchestrator(strategy=CustomStrategy())
182
+ ```
183
+
184
+ ### Coverage Improvement Workflow
185
+
186
+ ```python
187
+ from crackerjack.orchestration.coverage_improvement import (
188
+ CoverageImprovementOrchestrator,
189
+ )
190
+
191
+ coverage_orch = CoverageImprovementOrchestrator()
192
+
193
+ # Analyze low-coverage areas
194
+ suggestions = await coverage_orch.analyze_coverage(min_coverage=42.0)
195
+
196
+ # Generate tests for uncovered code
197
+ test_code = await coverage_orch.generate_tests(suggestions)
198
+
199
+ # Track progress toward milestone
200
+ milestone = coverage_orch.get_next_milestone(current_coverage=21.6)
201
+ ```
202
+
203
+ ## Configuration
204
+
205
+ ### Hook Definitions
206
+
207
+ Hooks are defined with metadata for orchestration:
208
+
209
+ ```python
210
+ from crackerjack.orchestration.config import HookDefinition, HookStage
211
+
212
+ hook = HookDefinition(
213
+ name="ruff",
214
+ command=["ruff", "check", "--fix"],
215
+ timeout=45,
216
+ stage=HookStage.FAST,
217
+ dependencies=[], # No dependencies
218
+ manual_stage=False, # Automatic execution
219
+ security_level=SecurityLevel.MEDIUM,
220
+ )
221
+ ```
222
+
223
+ ### Execution Strategies Configuration
224
+
225
+ ```yaml
226
+ # settings/crackerjack.yaml
227
+ orchestration:
228
+ default_strategy: "fast"
229
+ max_concurrent_hooks: 11
230
+ hook_timeout: 60
231
+ overall_timeout: 300
232
+ enable_caching: true
233
+ cache_ttl: 3600
234
+ ```
235
+
236
+ ## Orchestration Patterns
237
+
238
+ ### Dependency-Aware Execution
239
+
240
+ Hooks are executed in dependency order:
241
+
242
+ ```python
243
+ # Format before lint (lint depends on format)
244
+ dependencies = {
245
+ "ruff-format": [],
246
+ "ruff-lint": ["ruff-format"],
247
+ "zuban": ["ruff-format", "ruff-lint"],
248
+ }
249
+
250
+ # Executes: ruff-format → ruff-lint → zuban
251
+ ```
252
+
253
+ ### Graceful Degradation
254
+
255
+ Timeout strategies prevent hanging:
256
+
257
+ ```python
258
+ try:
259
+ result = await asyncio.wait_for(hook.execute(), timeout=hook_timeout)
260
+ except asyncio.TimeoutError:
261
+ # Continue with other hooks
262
+ log.warning(f"Hook {hook.name} timed out, continuing...")
263
+ ```
264
+
265
+ ### Intelligent Caching
266
+
267
+ Content-based caching prevents unnecessary re-runs:
268
+
269
+ ```python
270
+ # Cache key: {hook_name}:{config_hash}:{content_hash}
271
+ cache_key = f"ruff:{hash(config)}:{hash_files(files)}"
272
+
273
+ if cached_result := cache.get(cache_key):
274
+ return cached_result # Skip execution
275
+
276
+ result = await hook.execute()
277
+ cache.set(cache_key, result, ttl=3600)
278
+ ```
279
+
280
+ ## Best Practices
281
+
282
+ 1. **Choose Appropriate Strategy**: Use `FastStrategy` for rapid feedback, `ComprehensiveStrategy` for thorough analysis
283
+ 1. **Enable Caching**: Cache dramatically improves performance for repeated runs
284
+ 1. **Set Reasonable Timeouts**: Balance thoroughness with responsiveness
285
+ 1. **Monitor Concurrency**: Adjust concurrency limits based on available resources
286
+ 1. **Use Dependency Ordering**: Ensure hooks run in correct order
287
+ 1. **Handle Timeouts Gracefully**: Don't let one slow hook block everything
288
+ 1. **Track Progress**: Provide feedback for long-running workflows
289
+ 1. **Leverage AI Fixing**: Use AI agents for iterative improvement
290
+
291
+ ## Troubleshooting
292
+
293
+ ### Slow Execution
294
+
295
+ ```python
296
+ # Check cache hit rate
297
+ from crackerjack.orchestration.cache import get_cache_stats
298
+
299
+ stats = get_cache_stats()
300
+ print(f"Cache hit rate: {stats.hit_rate}%")
301
+
302
+ # Reduce concurrency if resource-bound
303
+ orchestrator.max_concurrent_hooks = 5
304
+ ```
305
+
306
+ ### Hook Timeouts
307
+
308
+ ```python
309
+ # Increase timeout for specific hooks
310
+ hook.timeout = 120 # 2 minutes
311
+
312
+ # Or disable timeout for debugging
313
+ hook.timeout = None
314
+ ```
315
+
316
+ ### Cache Invalidation Issues
317
+
318
+ ```python
319
+ # Clear cache if getting stale results
320
+ from crackerjack.orchestration.cache import clear_cache
321
+
322
+ clear_cache()
323
+ ```
324
+
325
+ ## Related
326
+
327
+ - [Managers](<../managers/README.md>) — Managers that use orchestration
328
+ - [Adapters](<../adapters/README.md>) — Adapters orchestrated by hooks
329
+ - [Services](<../services/README.md>) — Services used by orchestration
330
+ - [Agents](<../agents/README.md>) — AI agents coordinated by orchestration
331
+ - [Main README](<../../README.md>) — Workflow overview
332
+
333
+ ## Future Enhancements
334
+
335
+ - [ ] Distributed orchestration across multiple machines
336
+ - [ ] Advanced dependency resolution with conditional execution
337
+ - [ ] Machine learning for optimal strategy selection
338
+ - [ ] Real-time orchestration metrics dashboard
339
+ - [ ] Plugin system for custom orchestrators
340
+ - [ ] Workflow visualization and debugging tools
@@ -0,0 +1,43 @@
1
+ """Hook orchestration layer for ACB integration.
2
+
3
+ This package provides the orchestration layer for managing hook execution,
4
+ dependency resolution, and caching. It bridges the existing pre-commit-based
5
+ system with ACB's component architecture.
6
+
7
+ Key Components:
8
+ - HookOrchestratorAdapter: Main orchestration component
9
+ - Execution strategies: Parallel and sequential execution
10
+ - Cache adapters: Integration with tool_proxy and future cache backends
11
+
12
+ Architecture:
13
+ The orchestrator supports dual execution modes:
14
+ 1. Legacy mode: Delegates to existing HookExecutor (pre-commit CLI)
15
+ 2. ACB mode: Direct adapter execution via depends.get()
16
+
17
+ Migration Path:
18
+ - Phase 3-7: Legacy mode (orchestrator + pre-commit)
19
+ - Phase 8+: ACB mode (orchestrator + direct adapters)
20
+ """
21
+
22
+ from __future__ import annotations
23
+
24
+ __all__ = [
25
+ "HookOrchestratorAdapter",
26
+ "HookOrchestratorSettings",
27
+ ]
28
+
29
+
30
+ # Lazy imports to avoid circular dependencies
31
+ from typing import Any
32
+
33
+
34
+ def __getattr__(name: str) -> Any:
35
+ if name == "HookOrchestratorAdapter":
36
+ from crackerjack.orchestration.hook_orchestrator import HookOrchestratorAdapter
37
+
38
+ return HookOrchestratorAdapter
39
+ elif name == "HookOrchestratorSettings":
40
+ from crackerjack.orchestration.hook_orchestrator import HookOrchestratorSettings
41
+
42
+ return HookOrchestratorSettings
43
+ raise AttributeError(f"module {__name__!r} has no attribute {name!r}")