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
crackerjack/py313.py ADDED
@@ -0,0 +1,191 @@
1
+ import subprocess
2
+ import typing
3
+ from enum import Enum, auto
4
+ from pathlib import Path
5
+ from typing import Any, Self, TypedDict
6
+
7
+
8
+ class CommandRunner[TReturn]:
9
+ def run_command(self, cmd: list[str], **kwargs: Any) -> TReturn:
10
+ raise NotImplementedError("Subclasses must implement run_command")
11
+
12
+
13
+ class CommandResult(TypedDict):
14
+ success: bool
15
+ exit_code: int
16
+ stdout: str
17
+ stderr: str
18
+ command: list[str]
19
+ duration_ms: float
20
+
21
+
22
+ def process_command_output(result: CommandResult) -> tuple[bool, str]:
23
+ match result:
24
+ case {"success": True, "stdout": stdout} if stdout.strip():
25
+ return (True, stdout)
26
+ case {"success": True}:
27
+ return (True, "Command completed successfully with no output")
28
+ case {"success": False, "exit_code": code, "stderr": stderr} if code == 127:
29
+ return (False, f"Command not found: {stderr}")
30
+ case {"success": False, "exit_code": code} if code > 0:
31
+ return (False, f"Command failed with exit code {code}: {result['stderr']}")
32
+ case _:
33
+ pass
34
+ return (False, "Unknown command result pattern")
35
+
36
+
37
+ class HookStatus(Enum):
38
+ SUCCESS = auto()
39
+ FAILURE = auto()
40
+ SKIPPED = auto()
41
+ ERROR = auto()
42
+
43
+
44
+ class HookResult(TypedDict):
45
+ status: HookStatus
46
+ hook_id: str
47
+ output: str
48
+ files: list[str]
49
+
50
+
51
+ def analyze_hook_result(result: HookResult) -> str:
52
+ match result:
53
+ case {"status": HookStatus.SUCCESS, "hook_id": hook_id}:
54
+ return f"✅ Hook {hook_id} passed successfully"
55
+ case {"status": HookStatus.FAILURE, "hook_id": hook_id, "output": output} if (
56
+ "fixable" in output
57
+ ):
58
+ return f"🔧 Hook {hook_id} failed with fixable issues"
59
+ case {"status": HookStatus.FAILURE, "hook_id": hook_id}:
60
+ return f"❌ Hook {hook_id} failed"
61
+ case {"status": HookStatus.SKIPPED, "hook_id": hook_id}:
62
+ return f"⏩ Hook {hook_id} was skipped"
63
+ case {"status": HookStatus.ERROR, "hook_id": hook_id, "output": output}:
64
+ return f"💥 Hook {hook_id} encountered an error: {output}"
65
+ case _:
66
+ pass
67
+ return "Unknown hook result pattern"
68
+
69
+
70
+ class ModernConfigManager:
71
+ def __init__(self, config_path: Path) -> None:
72
+ self.config_path = config_path
73
+ self.config: dict[str, Any] = {}
74
+
75
+ def load(self) -> Self:
76
+ return self
77
+
78
+ def update(self, key: str, value: Any) -> Self:
79
+ self.config[key] = value
80
+ return self
81
+
82
+ def save(self) -> Self:
83
+ return self
84
+
85
+
86
+ def categorize_file(file_path: Path) -> str:
87
+ path_str = str(file_path)
88
+ name = file_path
89
+ match path_str:
90
+ case s if name.suffix == ".py" and "/ tests /" in s:
91
+ return "Python Test File"
92
+ case s if name.suffix == ".py" and "__init__.py" in name.name:
93
+ return "Python Module Init"
94
+ case s if name.suffix == ".py":
95
+ return "Python Source File"
96
+ case s if name.suffix in {".md", ".rst", ".txt"}:
97
+ return "Documentation File"
98
+ case s if name.stem.startswith(".") or name.name in {
99
+ ".gitignore",
100
+ ".pre-commit-config.yaml",
101
+ }:
102
+ return "Configuration File"
103
+ case _:
104
+ pass
105
+ return "Unknown File Type"
106
+
107
+
108
+ def process_hook_results[T: HookResult, R](
109
+ results: list[T],
110
+ success_handler: typing.Callable[[T], R],
111
+ failure_handler: typing.Callable[[T], R],
112
+ ) -> list[R]:
113
+ processed_results: list[R] = []
114
+ for result in results:
115
+ if (
116
+ hasattr(result, "__getitem__") # Check if it supports dict-style access
117
+ and typing.cast(dict[str, typing.Any], result).get("status")
118
+ == HookStatus.SUCCESS
119
+ ):
120
+ processed_results.append(success_handler(result))
121
+ else:
122
+ processed_results.append(failure_handler(result))
123
+ return processed_results
124
+
125
+
126
+ class EnhancedCommandRunner:
127
+ def __init__(self, working_dir: Path | None = None) -> None:
128
+ self.working_dir = working_dir
129
+
130
+ def run(self, cmd: list[str], **kwargs: Any) -> CommandResult:
131
+ import time
132
+
133
+ start_time = time.time()
134
+ try:
135
+ process = subprocess.run(
136
+ cmd,
137
+ check=False,
138
+ capture_output=True,
139
+ text=True,
140
+ cwd=self.working_dir,
141
+ **kwargs,
142
+ )
143
+ duration_ms = (time.time() - start_time) * 1000
144
+ return CommandResult(
145
+ success=process.returncode == 0,
146
+ exit_code=process.returncode,
147
+ stdout=process.stdout,
148
+ stderr=process.stderr,
149
+ command=cmd,
150
+ duration_ms=duration_ms,
151
+ )
152
+ except subprocess.SubprocessError as e:
153
+ duration_ms = (time.time() - start_time) * 1000
154
+ return CommandResult(
155
+ success=False,
156
+ exit_code=-1,
157
+ stdout="",
158
+ stderr=str(e),
159
+ command=cmd,
160
+ duration_ms=duration_ms,
161
+ )
162
+
163
+ def handle_result(self, result: CommandResult) -> tuple[bool, str]:
164
+ return process_command_output(result)
165
+
166
+
167
+ def clean_python_code(code: str) -> str:
168
+ lines = code.splitlines()
169
+ cleaned_lines: list[str] = []
170
+ for line in lines:
171
+ match line.strip():
172
+ case "":
173
+ if not cleaned_lines or cleaned_lines[-1].strip():
174
+ cleaned_lines.append("")
175
+ case s if s.startswith(("import ", "from ")):
176
+ cleaned_lines.append(line)
177
+ case s if s.startswith("#"):
178
+ continue
179
+ case s if "#" in s and (
180
+ not any(
181
+ skip in s for skip in ("# noqa", "# type: ", "# pragma", "# skip")
182
+ )
183
+ ):
184
+ code_part = line.split("#", 1)[0].rstrip()
185
+ if code_part:
186
+ cleaned_lines.append(code_part)
187
+ case s if s.startswith(('"""', "'''")):
188
+ continue
189
+ case _:
190
+ cleaned_lines.append(line)
191
+ return "\n".join(cleaned_lines)
@@ -0,0 +1,11 @@
1
+ > Crackerjack Docs: [Main](<../../README.md>) | [Crackerjack Package](<../README.md>) | [Security](<./README.md>)
2
+
3
+ # Security
4
+
5
+ Security checks, validators, and related utilities.
6
+
7
+ ## Related
8
+
9
+ - [Crackerjack Package](<../README.md>) - Parent package
10
+ - [Agents](<../agents/README.md>) - SecurityAgent for automated security fixes
11
+ - [Services](<../services/README.md>) - Security service implementations
@@ -0,0 +1,374 @@
1
+ > Crackerjack Docs: [Main](<../../README.md>) | [CLAUDE.md](../../docs/guides/CLAUDE.md) | [Services](<./README.md>)
2
+
3
+ # Services
4
+
5
+ Service abstractions and provider integrations for infrastructure, quality, monitoring, and AI capabilities.
6
+
7
+ ## Overview
8
+
9
+ The services package contains 60+ specialized service modules organized into functional categories. Services handle infrastructure concerns (filesystem, git, config), quality enforcement, monitoring, security, and AI integration. Most services follow ACB patterns with dependency injection and lifecycle management.
10
+
11
+ ## Service Categories
12
+
13
+ ### Core Infrastructure
14
+
15
+ **Filesystem & File Operations**
16
+
17
+ - `filesystem.py`: Core filesystem operations with path validation
18
+ - `enhanced_filesystem.py`: Advanced filesystem operations with atomic writes
19
+ - `file_modifier.py`: Safe file modification with backup and rollback
20
+ - `file_filter.py`: File filtering and pattern matching
21
+ - `file_hasher.py`: Content hashing for change detection
22
+ - `backup_service.py`: Automated backup creation and management
23
+
24
+ **Version Control**
25
+
26
+ - `git.py`: Git operations (commit, push, status, branch management)
27
+ - `intelligent_commit.py`: AI-powered commit message generation
28
+ - `changelog_automation.py`: Automatic changelog generation from commits
29
+
30
+ **Configuration Management**
31
+
32
+ - `unified_config.py`: Unified configuration loading and validation
33
+ - `config_merge.py`: Intelligent configuration merging for initialization
34
+ - `config_template.py`: Configuration template management and versioning
35
+ - `config_integrity.py`: Configuration validation and integrity checking
36
+
37
+ **Initialization**
38
+
39
+ - `initialization.py`: Project initialization and setup workflows
40
+
41
+ ### Quality & Testing
42
+
43
+ **Coverage & Testing**
44
+
45
+ - `coverage_ratchet.py`: Coverage ratchet system (never decrease coverage)
46
+ - `coverage_badge_service.py`: Coverage badge generation and updates
47
+ - `incremental_executor.py`: Incremental test execution
48
+ - `parallel_executor.py`: Parallel test execution with pytest-xdist
49
+
50
+ **Quality Enforcement**
51
+
52
+ - `tool_filter.py`: Quality tool filtering and selection
53
+ - `tool_version_service.py`: Tool version management and compatibility
54
+ - `quality/` subdirectory — Quality-specific services
55
+
56
+ ### Security
57
+
58
+ **Input Validation & Security**
59
+
60
+ - `input_validator.py`: Comprehensive input validation framework
61
+ - `validation_rate_limiter.py`: Rate limiting for validation failures
62
+ - `security.py`: Core security utilities and validation
63
+ - `security_logger.py`: Security event logging with severity levels
64
+ - `secure_path_utils.py`: Path traversal prevention and validation
65
+ - `secure_subprocess.py`: Safe subprocess execution without shell injection
66
+
67
+ **Status & Authentication**
68
+
69
+ - `status_security_manager.py`: Security manager for status operations
70
+ - `status_authentication.py`: Authentication for status endpoints
71
+ - `bounded_status_operations.py`: Bounded operations for status queries
72
+ - `thread_safe_status_collector.py`: Thread-safe status data collection
73
+ - `secure_status_formatter.py`: Secure formatting for status output
74
+
75
+ **Resource Management**
76
+
77
+ - `websocket_resource_limiter.py`: WebSocket connection and resource limits
78
+
79
+ ### Monitoring & Metrics
80
+
81
+ **Health & Metrics**
82
+
83
+ - `health_metrics.py`: Health metrics collection and reporting
84
+ - `metrics.py`: General metrics tracking and aggregation
85
+ - `profiler.py`: Performance profiling and analysis
86
+ - `dependency_monitor.py`: Dependency health monitoring
87
+ - `monitoring/` subdirectory — Monitoring-specific services
88
+
89
+ **Debugging & Logging**
90
+
91
+ - `debug.py`: Debug utilities and helpers
92
+ - `logging.py`: Structured logging configuration
93
+ - `log_manager.py`: Log file management and rotation
94
+
95
+ ### Pattern Analysis & Intelligence
96
+
97
+ **Pattern Detection & Analysis**
98
+
99
+ - `regex_patterns.py`: Centralized regex pattern registry (advanced-grade)
100
+ - `regex_utils.py`: Regex utilities and validation
101
+ - `pattern_detector.py`: Code pattern detection and analysis
102
+ - `pattern_cache.py`: Pattern caching for performance
103
+ - `error_pattern_analyzer.py`: Error pattern analysis and categorization
104
+
105
+ **AI & Intelligence**
106
+
107
+ - `anomaly_detector.py`: Anomaly detection in code and metrics
108
+ - `predictive_analytics.py`: Predictive analytics for quality trends
109
+ - `ai/` subdirectory — AI-specific services
110
+ - `vector_store.py`: Vector storage for semantic search
111
+
112
+ **Analysis & Optimization**
113
+
114
+ - `dependency_analyzer.py`: Dependency graph analysis
115
+ - `version_analyzer.py`: Version compatibility analysis
116
+ - `heatmap_generator.py`: Code complexity heatmap generation
117
+ - `memory_optimizer.py`: Memory usage optimization
118
+ - `enterprise_optimizer.py`: Enterprise-level optimization strategies
119
+
120
+ ### Documentation & Code Analysis
121
+
122
+ **Documentation**
123
+
124
+ - `documentation_generator.py`: Automated API documentation generation
125
+ - `documentation_service.py`: Documentation management and updates
126
+
127
+ **Code Intelligence**
128
+
129
+ - `api_extractor.py`: API surface extraction and analysis
130
+ - `smart_scheduling.py`: Intelligent task scheduling
131
+
132
+ ### Language Server Protocol (LSP)
133
+
134
+ **LSP Integration**
135
+
136
+ - `lsp_client.py`: Generic LSP client implementation
137
+ - `zuban_lsp_service.py`: Zuban LSP service integration
138
+ - `server_manager.py`: LSP server lifecycle management
139
+
140
+ ### Utilities
141
+
142
+ **Cache & Performance**
143
+
144
+ - `cache.py`: General-purpose caching
145
+ - `terminal_utils.py`: Terminal and console utilities
146
+ - `version_checker.py`: Version checking and updates
147
+
148
+ ## Architecture
149
+
150
+ ### ACB Compliance Status
151
+
152
+ Based on Phase 2-4 refactoring audit:
153
+
154
+ | Category | Compliance | Status | Notes |
155
+ |----------|-----------|--------|-------|
156
+ | Core Infrastructure | 95% | ✅ Excellent | Phase 3 refactored, consistent constructors |
157
+ | Security Services | 95% | ✅ Excellent | Comprehensive validation and logging |
158
+ | Quality Services | 90% | ✅ Good | Coverage ratchet, testing infrastructure |
159
+ | Monitoring Services | 85% | ✅ Good | Health metrics, profiling |
160
+ | LSP Services | 80% | ✅ Good | Server management, client integration |
161
+ | AI Services | 75% | ⚠️ Mixed | Some legacy patterns remain |
162
+
163
+ ### Dependency Injection Pattern
164
+
165
+ Most services follow ACB dependency injection:
166
+
167
+ ```python
168
+ from acb.depends import depends, Inject
169
+ from crackerjack.models.protocols import Console, CrackerjackCache
170
+
171
+
172
+ @depends.inject
173
+ class FileSystemService:
174
+ def __init__(
175
+ self,
176
+ console: Inject[Console] = None,
177
+ cache: Inject[CrackerjackCache] = None,
178
+ ) -> None:
179
+ self.console = console
180
+ self.cache = cache
181
+
182
+ async def init(self) -> None:
183
+ # Async initialization if needed
184
+ pass
185
+ ```
186
+
187
+ ## Usage Examples
188
+
189
+ ### Filesystem Operations
190
+
191
+ ```python
192
+ from crackerjack.services.filesystem import FileSystemService
193
+
194
+ fs = FileSystemService()
195
+ await fs.init()
196
+
197
+ # Safe file operations
198
+ content = await fs.read_file(Path("config.yaml"))
199
+ await fs.write_file(Path("output.txt"), "data")
200
+ ```
201
+
202
+ ### Git Operations
203
+
204
+ ```python
205
+ from crackerjack.services.git import GitService
206
+
207
+ git = GitService()
208
+ await git.init()
209
+
210
+ # Commit with intelligent message
211
+ await git.commit_changes(
212
+ message="Auto-generated commit message", files=["file1.py", "file2.py"]
213
+ )
214
+ ```
215
+
216
+ ### Coverage Ratchet
217
+
218
+ ```python
219
+ from crackerjack.services.coverage_ratchet import CoverageRatchet
220
+
221
+ ratchet = CoverageRatchet()
222
+ current = 21.6
223
+ baseline = 19.6
224
+
225
+ if ratchet.validate_coverage(current, baseline):
226
+ print("Coverage improved!")
227
+ ```
228
+
229
+ ### Security Validation
230
+
231
+ ```python
232
+ from crackerjack.services.input_validator import get_input_validator
233
+
234
+ validator = get_input_validator()
235
+ result = validator.validate_command_args("safe_command arg1 arg2")
236
+
237
+ if result.valid:
238
+ # Safe to execute
239
+ execute(result.sanitized_value)
240
+ ```
241
+
242
+ ### Pattern Detection
243
+
244
+ ```python
245
+ from crackerjack.services.regex_patterns import SAFE_PATTERNS
246
+
247
+ # Use centralized, validated patterns
248
+ text = SAFE_PATTERNS["fix_hyphenated_names"].apply(text)
249
+ ```
250
+
251
+ ## Service Subdirectories
252
+
253
+ ### AI Services (`ai/`)
254
+
255
+ AI-specific services for code analysis and generation:
256
+
257
+ - Claude integration
258
+ - Code generation
259
+ - Semantic analysis
260
+ - See [ai/README.md](<./ai/README.md>)
261
+
262
+ ### Monitoring Services (`monitoring/`)
263
+
264
+ Health and performance monitoring:
265
+
266
+ - Real-time metrics
267
+ - Performance tracking
268
+ - Resource monitoring
269
+ - See [monitoring/README.md](<./monitoring/README.md>)
270
+
271
+ ### Quality Services (`quality/`)
272
+
273
+ Quality enforcement and tracking:
274
+
275
+ - Quality metrics
276
+ - Standards enforcement
277
+ - Compliance tracking
278
+ - See [quality/README.md](<./quality/README.md>)
279
+
280
+ ### Pattern Services (`patterns/`)
281
+
282
+ Pattern detection and analysis:
283
+
284
+ - Code pattern recognition
285
+ - Anti-pattern detection
286
+ - Pattern libraries
287
+ - See [patterns/README.md](./patterns/README.md) (if exists)
288
+
289
+ ## Configuration
290
+
291
+ Services use ACB Settings for configuration:
292
+
293
+ ```python
294
+ from acb.depends import depends
295
+ from crackerjack.config import CrackerjackSettings
296
+
297
+ settings = depends.get(CrackerjackSettings)
298
+ ```
299
+
300
+ Configuration files:
301
+
302
+ - `settings/crackerjack.yaml` — Base configuration
303
+ - `settings/local.yaml` — Local overrides (gitignored)
304
+
305
+ ## Security Considerations
306
+
307
+ ### Input Validation
308
+
309
+ All user input should be validated through `input_validator.py`:
310
+
311
+ ```python
312
+ from crackerjack.services.input_validator import validate_and_sanitize_string
313
+
314
+ try:
315
+ safe_input = validate_and_sanitize_string(user_input)
316
+ # Use safe_input
317
+ except ExecutionError as e:
318
+ # Handle validation failure
319
+ pass
320
+ ```
321
+
322
+ ### Path Validation
323
+
324
+ Use `secure_path_utils.py` for all path operations:
325
+
326
+ ```python
327
+ from crackerjack.services.secure_path_utils import SecurePathValidator
328
+
329
+ validated_path = SecurePathValidator.validate_file_path(
330
+ user_path, base_directory=project_root
331
+ )
332
+ ```
333
+
334
+ ### Subprocess Security
335
+
336
+ Use `secure_subprocess.py` instead of direct subprocess calls:
337
+
338
+ ```python
339
+ from crackerjack.services.secure_subprocess import SecureSubprocess
340
+
341
+ result = await SecureSubprocess.run_command(
342
+ ["python", "-m", "pytest"], cwd=project_root
343
+ )
344
+ ```
345
+
346
+ ## Best Practices
347
+
348
+ 1. **Use DI**: Always use dependency injection via `@depends.inject`
349
+ 1. **Import Protocols**: Import from `models/protocols.py`, not concrete classes
350
+ 1. **Validate Input**: Use input_validator for all external input
351
+ 1. **Secure Paths**: Use SecurePathValidator for path operations
352
+ 1. **Centralize Patterns**: Use regex_patterns.py instead of raw regex
353
+ 1. **Handle Errors**: Use structured error handling with specific exceptions
354
+ 1. **Log Security Events**: Use security_logger for security-relevant operations
355
+ 1. **Cache Appropriately**: Use cache service for expensive operations
356
+ 1. **Async When Needed**: Use async/await for I/O-bound operations
357
+ 1. **Test Thoroughly**: Add tests for all new services
358
+
359
+ ## Related
360
+
361
+ - [Adapters](<../adapters/README.md>) — Quality tool adapters that use services
362
+ - [Managers](<../managers/README.md>) — Managers that coordinate services
363
+ - [Orchestration](<../orchestration/README.md>) — Orchestration using services
364
+ - [Config](<../config/README.md>) — ACB Settings integration
365
+ - [SECURITY.md](<../../docs/reference/SECURITY.md>) — Security documentation
366
+
367
+ ## Future Enhancements
368
+
369
+ - [ ] Standardize async/sync patterns across all services
370
+ - [ ] Add telemetry and observability
371
+ - [ ] Implement service health checks
372
+ - [ ] Add circuit breaker patterns for external services
373
+ - [ ] Create service benchmarking framework
374
+ - [ ] Develop service plugin system
@@ -1,22 +1,9 @@
1
- from .cache import CacheEntry, CacheStats, CrackerjackCache, FileCache, InMemoryCache
2
- from .config import ConfigurationService
3
- from .file_hasher import FileHasher, SmartFileWatcher
4
- from .filesystem import FileSystemService
5
- from .git import GitService
6
- from .initialization import InitializationService
7
- from .security import SecurityService
1
+ """Services for crackerjack.
8
2
 
9
- __all__ = [
10
- "CacheEntry",
11
- "CacheStats",
12
- "ConfigurationService",
13
- "CrackerjackCache",
14
- "FileCache",
15
- "FileHasher",
16
- "FileSystemService",
17
- "GitService",
18
- "InMemoryCache",
19
- "InitializationService",
20
- "SecurityService",
21
- "SmartFileWatcher",
22
- ]
3
+ This package contains service classes that provide business logic
4
+ and operations that are used across multiple components.
5
+ """
6
+
7
+ from crackerjack.services.file_modifier import SafeFileModifier
8
+
9
+ __all__ = ["SafeFileModifier"]