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,499 @@
1
+ """DI container builder for ACB workflow integration.
2
+
3
+ This module provides WorkflowContainerBuilder which handles the complex task of
4
+ registering all WorkflowPipeline dependencies with ACB's DI container in the
5
+ correct initialization order.
6
+
7
+ The builder follows a level-based registration strategy:
8
+ - Level 1: Primitives (Console, Config, Logger)
9
+ - Level 2: Core Services (MemoryOptimizer, Caches, etc.)
10
+ - Level 3: Filesystem & Git Services
11
+ - Level 4: Managers (HookManager, TestManager, etc.)
12
+ - Level 5: Executors (ParallelHookExecutor, AsyncCommandExecutor)
13
+ - Level 6: Coordinators (SessionCoordinator, PhaseCoordinator)
14
+ - Level 7: Pipeline (WorkflowPipeline)
15
+
16
+ Example:
17
+ ```python
18
+ from crackerjack.workflows.container_builder import WorkflowContainerBuilder
19
+
20
+ # Build container with all services
21
+ builder = WorkflowContainerBuilder(options)
22
+ builder.build()
23
+
24
+ # Verify all services available
25
+ health = builder.health_check()
26
+ if not health["all_available"]:
27
+ print(f"Missing: {health['missing']}")
28
+
29
+ # Get WorkflowPipeline
30
+ from acb.depends import depends
31
+
32
+ pipeline = depends.get_sync(WorkflowPipeline)
33
+ ```
34
+ """
35
+
36
+ from __future__ import annotations
37
+
38
+ import typing as t
39
+ from pathlib import Path
40
+
41
+ from acb.config import Config
42
+ from acb.console import Console
43
+ from acb.depends import depends
44
+
45
+ if t.TYPE_CHECKING:
46
+ from crackerjack.models.protocols import OptionsProtocol
47
+
48
+
49
+ class WorkflowContainerBuilder:
50
+ """Builds and initializes DI container for ACB workflows.
51
+
52
+ Handles dependency registration in correct order, validates all services
53
+ are available, and provides health checks for debugging.
54
+
55
+ Attributes:
56
+ options: CLI options containing configuration
57
+ _console: Console instance (optional override for testing)
58
+ _root_path: Project root path
59
+ _registered: Set of registered service names for tracking
60
+ """
61
+
62
+ def __init__(
63
+ self,
64
+ options: OptionsProtocol,
65
+ console: Console | None = None,
66
+ root_path: Path | None = None,
67
+ ) -> None:
68
+ """Initialize builder with options and optional overrides.
69
+
70
+ Args:
71
+ options: CLI options containing configuration
72
+ console: Optional console override (for testing)
73
+ root_path: Optional root path override (for testing)
74
+ """
75
+ self.options = options
76
+ self._console = console
77
+ self._root_path = root_path or getattr(options, "project_root", Path.cwd())
78
+ self._registered: set[str] = set()
79
+
80
+ def build(self) -> None:
81
+ """Build container by registering all services in dependency order.
82
+
83
+ This method orchestrates the registration of all services required by
84
+ WorkflowPipeline, ensuring proper initialization order.
85
+
86
+ The registration is split into levels to ensure dependencies are
87
+ available before services that need them.
88
+
89
+ Raises:
90
+ RuntimeError: If service registration fails
91
+ """
92
+ self._register_level1_primitives()
93
+ self._register_level2_core_services()
94
+ self._register_level3_filesystem_git()
95
+ self._register_level3_5_publishing_services()
96
+ self._register_level4_managers()
97
+ self._register_level5_executors()
98
+ self._register_level6_coordinators()
99
+ self._register_level7_pipeline()
100
+
101
+ def health_check(self) -> dict[str, t.Any]:
102
+ """Check which services are registered and available.
103
+
104
+ Returns:
105
+ dict with:
106
+ - registered: set of service names that were registered
107
+ - available: dict mapping service names to availability status
108
+ - missing: list of expected but missing services
109
+ - all_available: boolean indicating if all services are available
110
+ """
111
+ from crackerjack.models import protocols
112
+ from crackerjack.services.monitoring.performance_cache import (
113
+ FileSystemCache,
114
+ GitOperationCache,
115
+ )
116
+
117
+ # All expected protocols/services
118
+ expected = [
119
+ # Level 1: Primitives
120
+ ("Console", Console),
121
+ ("Config", Config),
122
+ ("LoggerProtocol", protocols.LoggerProtocol),
123
+ # Level 2: Core Services
124
+ ("MemoryOptimizerProtocol", protocols.MemoryOptimizerProtocol),
125
+ ("PerformanceCacheProtocol", protocols.PerformanceCacheProtocol),
126
+ ("DebugServiceProtocol", protocols.DebugServiceProtocol),
127
+ ("PerformanceMonitorProtocol", protocols.PerformanceMonitorProtocol),
128
+ # Level 3: Filesystem & Git
129
+ ("FileSystemInterface", protocols.FileSystemInterface),
130
+ ("GitInterface", protocols.GitInterface),
131
+ ("GitOperationCache", GitOperationCache),
132
+ ("FileSystemCache", FileSystemCache),
133
+ # Add more as we implement them
134
+ ]
135
+
136
+ available = {}
137
+ for name, protocol_type in expected:
138
+ try:
139
+ service = depends.get_sync(protocol_type)
140
+ available[name] = service is not None
141
+ except Exception:
142
+ available[name] = False
143
+
144
+ missing = [name for name, avail in available.items() if not avail]
145
+
146
+ return {
147
+ "registered": self._registered,
148
+ "available": available,
149
+ "missing": missing,
150
+ "all_available": len(missing) == 0,
151
+ }
152
+
153
+ def _register_level1_primitives(self) -> None:
154
+ """Register Level 1 primitives: Console, Config, Logger, Path.
155
+
156
+ These are the foundation services with no dependencies (except Config
157
+ which uses the current directory by default).
158
+ """
159
+ # Console - Configure width from settings for progress bars
160
+ if not self._console:
161
+ self._console = Console()
162
+ # Set console width from configuration
163
+ from crackerjack.config import get_console_width
164
+
165
+ self._console.width = get_console_width()
166
+ depends.set(Console, self._console)
167
+ self._registered.add("Console")
168
+
169
+ # Path - project root path for dependency injection
170
+ depends.set(Path, self._root_path)
171
+ self._registered.add("Path")
172
+
173
+ # Config - ACB's Config auto-detects root_path from current directory
174
+ config = Config()
175
+ depends.set(Config, config)
176
+ self._registered.add("Config")
177
+
178
+ # Logger
179
+ from crackerjack.models.protocols import LoggerProtocol
180
+ from crackerjack.services.logging import get_logger
181
+
182
+ logger = get_logger(__name__)
183
+ depends.set(LoggerProtocol, logger)
184
+ self._registered.add("LoggerProtocol")
185
+
186
+ def _register_level2_core_services(self) -> None:
187
+ """Register Level 2 core services: MemoryOptimizer, Caches, etc.
188
+
189
+ These services use @depends.inject and will auto-inject their dependencies
190
+ from the container. We just need to create instances and register them.
191
+ """
192
+ from crackerjack.models.protocols import (
193
+ DebugServiceProtocol,
194
+ MemoryOptimizerProtocol,
195
+ PerformanceCacheProtocol,
196
+ PerformanceMonitorProtocol,
197
+ )
198
+
199
+ # Memory Optimizer - uses @depends.inject, takes Logger
200
+ from crackerjack.services.memory_optimizer import MemoryOptimizer
201
+
202
+ memory_optimizer = MemoryOptimizer()
203
+ depends.set(MemoryOptimizerProtocol, memory_optimizer)
204
+ self._registered.add("MemoryOptimizerProtocol")
205
+
206
+ # Performance Cache - in monitoring/
207
+ from crackerjack.services.monitoring.performance_cache import PerformanceCache
208
+
209
+ perf_cache = PerformanceCache()
210
+ depends.set(PerformanceCacheProtocol, perf_cache)
211
+ self._registered.add("PerformanceCacheProtocol")
212
+
213
+ # Debug Service - AIAgentDebugger
214
+ from crackerjack.services.debug import AIAgentDebugger
215
+
216
+ debug_service = AIAgentDebugger()
217
+ depends.set(DebugServiceProtocol, debug_service)
218
+ self._registered.add("DebugServiceProtocol")
219
+
220
+ # Performance Monitor - in monitoring/
221
+ from crackerjack.services.monitoring.performance_monitor import (
222
+ PerformanceMonitor,
223
+ )
224
+
225
+ perf_monitor = PerformanceMonitor()
226
+ depends.set(PerformanceMonitorProtocol, perf_monitor)
227
+ self._registered.add("PerformanceMonitorProtocol")
228
+
229
+ # WorkflowEventBus - event-driven workflow coordination (Phase 7.1)
230
+ from crackerjack.events.workflow_bus import WorkflowEventBus
231
+
232
+ event_bus = WorkflowEventBus()
233
+ depends.set(WorkflowEventBus, event_bus)
234
+ self._registered.add("WorkflowEventBus")
235
+
236
+ # EventBusWebSocketBridge - WebSocket streaming for real-time updates (Phase 7.3)
237
+ from crackerjack.mcp.websocket.event_bridge import EventBusWebSocketBridge
238
+
239
+ ws_bridge = EventBusWebSocketBridge()
240
+ depends.set(EventBusWebSocketBridge, ws_bridge)
241
+ self._registered.add("EventBusWebSocketBridge")
242
+
243
+ def _register_level3_filesystem_git(self) -> None:
244
+ """Register Level 3 filesystem and git services.
245
+
246
+ These depend on Console (Level 1) and caches/logger from previous levels.
247
+ """
248
+ from crackerjack.models.protocols import (
249
+ FileSystemInterface,
250
+ GitInterface,
251
+ LoggerProtocol,
252
+ PerformanceCacheProtocol,
253
+ )
254
+ from crackerjack.services.filesystem import FileSystemService
255
+ from crackerjack.services.git import GitService
256
+ from crackerjack.services.monitoring.performance_cache import (
257
+ FileSystemCache,
258
+ GitOperationCache,
259
+ )
260
+
261
+ # FileSystemService - static methods, no dependencies
262
+ filesystem = FileSystemService()
263
+ depends.set(FileSystemInterface, filesystem)
264
+ self._registered.add("FileSystemInterface")
265
+
266
+ # GitService - uses @depends.inject with Console
267
+ git_service = GitService(pkg_path=self._root_path)
268
+ depends.set(GitInterface, git_service)
269
+ self._registered.add("GitInterface")
270
+
271
+ # Cache services need PerformanceCache (Level 2) and Logger (Level 1)
272
+ perf_cache = depends.get_sync(PerformanceCacheProtocol)
273
+ logger = depends.get_sync(LoggerProtocol)
274
+
275
+ # GitOperationCache
276
+ git_cache = GitOperationCache(cache=perf_cache, logger=logger)
277
+ depends.set(GitOperationCache, git_cache)
278
+ self._registered.add("GitOperationCache")
279
+
280
+ # FileSystemCache
281
+ filesystem_cache = FileSystemCache(cache=perf_cache, logger=logger)
282
+ depends.set(FileSystemCache, filesystem_cache)
283
+ self._registered.add("FileSystemCache")
284
+
285
+ def _register_level3_5_publishing_services(self) -> None:
286
+ """Register Level 3.5 publishing services needed by PublishManager.
287
+
288
+ These services must be registered before Level 4 managers can be instantiated.
289
+ """
290
+ from crackerjack.models.protocols import (
291
+ ChangelogGeneratorProtocol,
292
+ GitServiceProtocol,
293
+ SecurityServiceProtocol,
294
+ VersionAnalyzerProtocol,
295
+ )
296
+ from crackerjack.services.changelog_automation import ChangelogGenerator
297
+ from crackerjack.services.security import SecurityService
298
+ from crackerjack.services.version_analyzer import VersionAnalyzer
299
+
300
+ # SecurityService - no dependencies
301
+ security_service = SecurityService()
302
+ depends.set(SecurityServiceProtocol, security_service)
303
+ self._registered.add("SecurityServiceProtocol")
304
+
305
+ # GitService as GitServiceProtocol - reuse Level 3 instance
306
+ from crackerjack.models.protocols import GitInterface
307
+
308
+ git_service = depends.get_sync(GitInterface)
309
+ depends.set(GitServiceProtocol, git_service)
310
+ self._registered.add("GitServiceProtocol")
311
+
312
+ # ChangelogGenerator - uses @depends.inject (Console, GitServiceProtocol)
313
+ changelog_generator = ChangelogGenerator()
314
+ depends.set(ChangelogGeneratorProtocol, changelog_generator)
315
+ self._registered.add("ChangelogGeneratorProtocol")
316
+
317
+ # VersionAnalyzer - uses @depends.inject (Console, GitService)
318
+ # Note: git_service parameter doesn't use Inject[] type hint, so we pass it manually
319
+ # VersionAnalyzer internally creates ChangelogGenerator()
320
+ version_analyzer = VersionAnalyzer(git_service=git_service)
321
+ depends.set(VersionAnalyzerProtocol, version_analyzer)
322
+ self._registered.add("VersionAnalyzerProtocol")
323
+
324
+ # RegexPatternsProtocol - service wrapper for module functions
325
+ from crackerjack.models.protocols import RegexPatternsProtocol
326
+ from crackerjack.services.regex_patterns import RegexPatternsService
327
+
328
+ regex_patterns_service = RegexPatternsService()
329
+ depends.set(RegexPatternsProtocol, regex_patterns_service)
330
+ self._registered.add("RegexPatternsProtocol")
331
+
332
+ def _register_level4_managers(self) -> None:
333
+ """Register Level 4 managers: HookManager, TestManager, etc.
334
+
335
+ These depend on Level 1-3.5 services.
336
+ """
337
+ from crackerjack.managers.hook_manager import HookManagerImpl
338
+ from crackerjack.models.protocols import HookManager
339
+
340
+ # HookManager - simplest, just needs pkg_path + options
341
+ # Retrieves Console internally via depends.get_sync
342
+ hook_manager = HookManagerImpl(
343
+ pkg_path=self._root_path,
344
+ verbose=getattr(self.options, "verbose", False),
345
+ quiet=getattr(self.options, "quiet", False),
346
+ enable_lsp_optimization=getattr(
347
+ self.options, "enable_lsp_optimization", False
348
+ ),
349
+ enable_tool_proxy=getattr(self.options, "enable_tool_proxy", True),
350
+ )
351
+ depends.set(HookManager, hook_manager)
352
+ self._registered.add("HookManager")
353
+
354
+ # Level 4.5: Register TestManager dependencies
355
+ self._register_level4_5_test_manager_dependencies()
356
+
357
+ # TestCommandBuilder - needed by TestManager
358
+ from crackerjack.managers.test_command_builder import TestCommandBuilder
359
+
360
+ test_command_builder = TestCommandBuilder()
361
+ depends.set(TestCommandBuilder, test_command_builder)
362
+ self._registered.add("TestCommandBuilder")
363
+
364
+ # TestManager - uses @depends.inject (all Level 4.5 dependencies registered)
365
+ from crackerjack.managers.test_manager import TestManager
366
+ from crackerjack.models.protocols import TestManagerProtocol
367
+
368
+ test_manager = TestManager()
369
+ depends.set(TestManagerProtocol, test_manager)
370
+ self._registered.add("TestManagerProtocol")
371
+
372
+ # PublishManager - uses @depends.inject (all Level 3.5 dependencies registered)
373
+ from crackerjack.managers.publish_manager import PublishManagerImpl
374
+ from crackerjack.models.protocols import PublishManager
375
+
376
+ # Instantiate with NO parameters to trigger full DI resolution
377
+ # The @depends.inject decorator will inject all dependencies including console, pkg_path
378
+ publish_manager = PublishManagerImpl()
379
+ depends.set(PublishManager, publish_manager)
380
+ self._registered.add("PublishManager")
381
+
382
+ def _register_level4_5_test_manager_dependencies(self) -> None:
383
+ """Register Level 4.5: TestManager dependencies.
384
+
385
+ These services must be registered before TestManager can be instantiated.
386
+ """
387
+ from crackerjack.models.protocols import (
388
+ CoverageBadgeServiceProtocol,
389
+ CoverageRatchetProtocol,
390
+ )
391
+ from crackerjack.services.coverage_badge_service import CoverageBadgeService
392
+ from crackerjack.services.coverage_ratchet import CoverageRatchetService
393
+ from crackerjack.services.lsp_client import LSPClient
394
+
395
+ # CoverageRatchetService - uses @depends.inject (pkg_path, Console)
396
+ coverage_ratchet = CoverageRatchetService(pkg_path=self._root_path)
397
+ depends.set(CoverageRatchetProtocol, coverage_ratchet)
398
+ self._registered.add("CoverageRatchetProtocol")
399
+
400
+ # CoverageBadgeService - uses @depends.inject (Console, project_root)
401
+ coverage_badge = CoverageBadgeService(project_root=self._root_path)
402
+ depends.set(CoverageBadgeServiceProtocol, coverage_badge)
403
+ self._registered.add("CoverageBadgeServiceProtocol")
404
+
405
+ # LSPClient - uses @depends.inject (Console only)
406
+ lsp_client = LSPClient()
407
+ depends.set(LSPClient, lsp_client)
408
+ self._registered.add("LSPClient")
409
+
410
+ def _register_level5_executors(self) -> None:
411
+ """Register Level 5 executors: ParallelHookExecutor, AsyncCommandExecutor.
412
+
413
+ These depend on Logger (Level 1) and PerformanceCacheProtocol (Level 2).
414
+ """
415
+ from crackerjack.services.parallel_executor import (
416
+ AsyncCommandExecutor,
417
+ ExecutionStrategy,
418
+ ParallelHookExecutor,
419
+ )
420
+
421
+ # ParallelHookExecutor - uses @depends.inject (Logger, PerformanceCache)
422
+ parallel_executor = ParallelHookExecutor(
423
+ max_workers=3,
424
+ timeout_seconds=300,
425
+ strategy=ExecutionStrategy.PARALLEL_SAFE,
426
+ )
427
+ depends.set(ParallelHookExecutor, parallel_executor)
428
+ self._registered.add("ParallelHookExecutor")
429
+
430
+ # AsyncCommandExecutor - uses @depends.inject (Logger, PerformanceCache)
431
+ async_executor = AsyncCommandExecutor(max_workers=4, cache_results=True)
432
+ depends.set(AsyncCommandExecutor, async_executor)
433
+ self._registered.add("AsyncCommandExecutor")
434
+
435
+ def _register_level6_coordinators(self) -> None:
436
+ """Register Level 6 coordinators: SessionCoordinator, PhaseCoordinator.
437
+
438
+ These depend on Level 1-5 services.
439
+ """
440
+ from crackerjack.core.phase_coordinator import PhaseCoordinator
441
+ from crackerjack.core.session_coordinator import SessionCoordinator
442
+ from crackerjack.models.protocols import ConfigMergeServiceProtocol
443
+ from crackerjack.services.config_merge import ConfigMergeService
444
+
445
+ # ConfigMergeService - needed by PhaseCoordinator
446
+ # Uses @depends.inject (Console, FileSystemInterface, GitInterface, Logger)
447
+ config_merge_service = ConfigMergeService()
448
+ depends.set(ConfigMergeServiceProtocol, config_merge_service)
449
+ self._registered.add("ConfigMergeServiceProtocol")
450
+
451
+ # SessionCoordinator - uses @depends.inject (Console, pkg_path)
452
+ session_coordinator = SessionCoordinator(
453
+ pkg_path=self._root_path, web_job_id=None
454
+ )
455
+ depends.set(SessionCoordinator, session_coordinator)
456
+ self._registered.add("SessionCoordinator")
457
+
458
+ # PhaseCoordinator - uses @depends.inject (all Level 1-5 services)
459
+ # Depends on SessionCoordinator (registered above)
460
+ phase_coordinator = PhaseCoordinator(pkg_path=self._root_path)
461
+ depends.set(PhaseCoordinator, phase_coordinator)
462
+ self._registered.add("PhaseCoordinator")
463
+
464
+ def _register_level7_pipeline(self) -> None:
465
+ """Register Level 7 pipeline: WorkflowPhaseExecutor and WorkflowPipeline.
466
+
467
+ This is the top-level service that depends on all previous levels.
468
+ """
469
+ from crackerjack.core.workflow.workflow_phase_executor import (
470
+ WorkflowPhaseExecutor,
471
+ )
472
+ from crackerjack.core.workflow_orchestrator import WorkflowPipeline
473
+
474
+ # Since WorkflowPhaseExecutor has @depends.inject on its __init__ method,
475
+ # Bevy should automatically handle creating instances when WorkflowPipeline
476
+ # requests it via dependency injection. But we still need to make sure
477
+ # Bevy recognizes it as a class it can instantiate using its @depends.inject
478
+ # decorated constructor.
479
+ # For this to work, all of WorkflowPhaseExecutor's dependencies must be in the container:
480
+ # - Console (Level 1) ✓
481
+ # - LoggerProtocol (Level 1) ✓
482
+ # - Path (Level 1) ✓
483
+ # - DebugServiceProtocol (Level 2) ✓
484
+ # - QualityIntelligenceProtocol (Level 2 or 4.5) ✓
485
+ # If all dependencies are available, Bevy's @depends.inject should work automatically.
486
+ # But let's explicitly signal that this type can be handled by Bevy's injection system.
487
+
488
+ # Register the type with Bevy so it knows it can create instances when requested
489
+ # The Bevy system should handle the @depends.inject automatically when this type is requested
490
+ depends.set(WorkflowPhaseExecutor, WorkflowPhaseExecutor)
491
+ self._registered.add("WorkflowPhaseExecutor")
492
+
493
+ # WorkflowPipeline - uses @depends.inject (all Level 1-6 services + WorkflowPhaseExecutor)
494
+ # Auto-wires: Console, Config, PerformanceMonitor, MemoryOptimizer,
495
+ # PerformanceCache, Debugger, Logger, SessionCoordinator, PhaseCoordinator, WorkflowPhaseExecutor
496
+ # Optional: QualityIntelligence, PerformanceBenchmarks
497
+ workflow_pipeline = WorkflowPipeline()
498
+ depends.set(WorkflowPipeline, workflow_pipeline)
499
+ self._registered.add("WorkflowPipeline")