crackerjack 0.33.12__tar.gz → 0.34.0__tar.gz

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.

Potentially problematic release.


This version of crackerjack might be problematic. Click here for more details.

Files changed (396) hide show
  1. {crackerjack-0.33.12 → crackerjack-0.34.0}/CHANGELOG.md +6 -0
  2. {crackerjack-0.33.12 → crackerjack-0.34.0}/CLAUDE.md +46 -0
  3. {crackerjack-0.33.12 → crackerjack-0.34.0}/PKG-INFO +1 -1
  4. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/cli/options.py +4 -4
  5. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/core/phase_coordinator.py +6 -2
  6. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/core/workflow_orchestrator.py +120 -0
  7. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/dynamic_config.py +83 -3
  8. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/managers/publish_manager.py +87 -3
  9. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/managers/test_manager_backup.py +2 -2
  10. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/services/config.py +10 -2
  11. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/services/performance_benchmarks.py +24 -2
  12. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/services/performance_cache.py +1 -1
  13. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/tools/validate_regex_patterns.py +3 -3
  14. {crackerjack-0.33.12 → crackerjack-0.34.0}/pyproject.toml +1 -1
  15. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/test_async_hook_executor.py +1 -1
  16. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/test_structured_errors.py +2 -2
  17. {crackerjack-0.33.12 → crackerjack-0.34.0}/tools/validate_regex_patterns_standalone.py +3 -3
  18. {crackerjack-0.33.12 → crackerjack-0.34.0}/.github/FUNDING.yml +0 -0
  19. {crackerjack-0.33.12 → crackerjack-0.34.0}/.gitignore +0 -0
  20. {crackerjack-0.33.12 → crackerjack-0.34.0}/.pre-commit-config.yaml +0 -0
  21. {crackerjack-0.33.12 → crackerjack-0.34.0}/AGENTS.md +0 -0
  22. {crackerjack-0.33.12 → crackerjack-0.34.0}/LICENSE +0 -0
  23. {crackerjack-0.33.12 → crackerjack-0.34.0}/QWEN.md +0 -0
  24. {crackerjack-0.33.12 → crackerjack-0.34.0}/README.md +0 -0
  25. {crackerjack-0.33.12 → crackerjack-0.34.0}/RULES.md +0 -0
  26. {crackerjack-0.33.12 → crackerjack-0.34.0}/SECURITY.md +0 -0
  27. {crackerjack-0.33.12 → crackerjack-0.34.0}/ai/AGENT-CAPABILITIES.json +0 -0
  28. {crackerjack-0.33.12 → crackerjack-0.34.0}/ai/AGENT_SELECTION.md +0 -0
  29. {crackerjack-0.33.12 → crackerjack-0.34.0}/ai/AI-REFERENCE.md +0 -0
  30. {crackerjack-0.33.12 → crackerjack-0.34.0}/ai/ERROR-PATTERNS.yaml +0 -0
  31. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/__init__.py +0 -0
  32. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/__main__.py +0 -0
  33. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/adapters/__init__.py +0 -0
  34. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/adapters/lsp_client.py +0 -0
  35. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/adapters/rust_tool_adapter.py +0 -0
  36. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/adapters/rust_tool_manager.py +0 -0
  37. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/adapters/skylos_adapter.py +0 -0
  38. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/adapters/zuban_adapter.py +0 -0
  39. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/agents/__init__.py +0 -0
  40. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/agents/architect_agent.py +0 -0
  41. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/agents/base.py +0 -0
  42. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/agents/coordinator.py +0 -0
  43. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/agents/documentation_agent.py +0 -0
  44. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/agents/dry_agent.py +0 -0
  45. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/agents/formatting_agent.py +0 -0
  46. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/agents/import_optimization_agent.py +0 -0
  47. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/agents/performance_agent.py +0 -0
  48. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/agents/performance_helpers.py +0 -0
  49. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/agents/proactive_agent.py +0 -0
  50. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/agents/refactoring_agent.py +0 -0
  51. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/agents/refactoring_helpers.py +0 -0
  52. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/agents/security_agent.py +0 -0
  53. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/agents/test_creation_agent.py +0 -0
  54. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/agents/test_specialist_agent.py +0 -0
  55. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/agents/tracker.py +0 -0
  56. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/api.py +0 -0
  57. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/cli/__init__.py +0 -0
  58. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/cli/cache_handlers.py +0 -0
  59. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/cli/cache_handlers_enhanced.py +0 -0
  60. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/cli/facade.py +0 -0
  61. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/cli/handlers.py +0 -0
  62. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/cli/interactive.py +0 -0
  63. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/cli/utils.py +0 -0
  64. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/code_cleaner.py +0 -0
  65. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/config/__init__.py +0 -0
  66. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/config/global_lock_config.py +0 -0
  67. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/config/hooks.py +0 -0
  68. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/core/__init__.py +0 -0
  69. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/core/async_workflow_orchestrator.py +0 -0
  70. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/core/autofix_coordinator.py +0 -0
  71. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/core/container.py +0 -0
  72. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/core/enhanced_container.py +0 -0
  73. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/core/file_lifecycle.py +0 -0
  74. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/core/performance.py +0 -0
  75. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/core/performance_monitor.py +0 -0
  76. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/core/proactive_workflow.py +0 -0
  77. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/core/resource_manager.py +0 -0
  78. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/core/service_watchdog.py +0 -0
  79. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/core/session_coordinator.py +0 -0
  80. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/core/timeout_manager.py +0 -0
  81. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/core/websocket_lifecycle.py +0 -0
  82. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/docs/INDEX.md +0 -0
  83. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/docs/generated/api/API_REFERENCE.md +0 -0
  84. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/docs/generated/api/CLI_REFERENCE.md +0 -0
  85. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/docs/generated/api/CROSS_REFERENCES.md +0 -0
  86. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/docs/generated/api/PROTOCOLS.md +0 -0
  87. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/docs/generated/api/SERVICES.md +0 -0
  88. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/documentation/__init__.py +0 -0
  89. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/documentation/ai_templates.py +0 -0
  90. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/documentation/dual_output_generator.py +0 -0
  91. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/documentation/mkdocs_integration.py +0 -0
  92. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/documentation/reference_generator.py +0 -0
  93. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/errors.py +0 -0
  94. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/executors/__init__.py +0 -0
  95. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/executors/async_hook_executor.py +0 -0
  96. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/executors/cached_hook_executor.py +0 -0
  97. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/executors/hook_executor.py +0 -0
  98. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/executors/hook_lock_manager.py +0 -0
  99. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/executors/individual_hook_executor.py +0 -0
  100. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/executors/lsp_aware_hook_executor.py +0 -0
  101. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/executors/tool_proxy.py +0 -0
  102. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/hooks/lsp_hook.py +0 -0
  103. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/intelligence/__init__.py +0 -0
  104. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/intelligence/adaptive_learning.py +0 -0
  105. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/intelligence/agent_orchestrator.py +0 -0
  106. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/intelligence/agent_registry.py +0 -0
  107. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/intelligence/agent_selector.py +0 -0
  108. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/intelligence/integration.py +0 -0
  109. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/interactive.py +0 -0
  110. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/managers/__init__.py +0 -0
  111. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/managers/async_hook_manager.py +0 -0
  112. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/managers/hook_manager.py +0 -0
  113. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/managers/test_command_builder.py +0 -0
  114. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/managers/test_executor.py +0 -0
  115. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/managers/test_manager.py +0 -0
  116. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/managers/test_progress.py +0 -0
  117. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/mcp/__init__.py +0 -0
  118. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/mcp/cache.py +0 -0
  119. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/mcp/client_runner.py +0 -0
  120. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/mcp/context.py +0 -0
  121. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/mcp/dashboard.py +0 -0
  122. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/mcp/enhanced_progress_monitor.py +0 -0
  123. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/mcp/enhanced_progress_monitor.tcss +0 -0
  124. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/mcp/file_monitor.py +0 -0
  125. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/mcp/progress_components.py +0 -0
  126. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/mcp/progress_monitor.py +0 -0
  127. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/mcp/progress_monitor.tcss +0 -0
  128. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/mcp/rate_limiter.py +0 -0
  129. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/mcp/server.py +0 -0
  130. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/mcp/server_core.py +0 -0
  131. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/mcp/service_watchdog.py +0 -0
  132. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/mcp/state.py +0 -0
  133. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/mcp/task_manager.py +0 -0
  134. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/mcp/tools/__init__.py +0 -0
  135. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/mcp/tools/core_tools.py +0 -0
  136. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/mcp/tools/error_analyzer.py +0 -0
  137. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/mcp/tools/execution_tools.py +0 -0
  138. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/mcp/tools/execution_tools_backup.py +0 -0
  139. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/mcp/tools/intelligence_tool_registry.py +0 -0
  140. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/mcp/tools/intelligence_tools.py +0 -0
  141. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/mcp/tools/monitoring_tools.py +0 -0
  142. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/mcp/tools/monitoring_tools.py.backup +0 -0
  143. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/mcp/tools/proactive_tools.py +0 -0
  144. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/mcp/tools/progress_tools.py +0 -0
  145. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/mcp/tools/utility_tools.py +0 -0
  146. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/mcp/tools/workflow_executor.py +0 -0
  147. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/mcp/websocket/__init__.py +0 -0
  148. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/mcp/websocket/app.py +0 -0
  149. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/mcp/websocket/endpoints.py +0 -0
  150. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/mcp/websocket/jobs.py +0 -0
  151. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/mcp/websocket/monitoring_endpoints.py +0 -0
  152. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/mcp/websocket/server.py +0 -0
  153. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/mcp/websocket/websocket_handler.py +0 -0
  154. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/mcp/websocket_server.py +0 -0
  155. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/mixins/__init__.py +0 -0
  156. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/mixins/error_handling.py +0 -0
  157. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/models/__init__.py +0 -0
  158. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/models/config.py +0 -0
  159. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/models/config_adapter.py +0 -0
  160. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/models/protocols.py +0 -0
  161. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/models/resource_protocols.py +0 -0
  162. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/models/task.py +0 -0
  163. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/monitoring/__init__.py +0 -0
  164. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/monitoring/ai_agent_watchdog.py +0 -0
  165. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/monitoring/metrics_collector.py +0 -0
  166. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/monitoring/regression_prevention.py +0 -0
  167. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/monitoring/websocket_server.py +0 -0
  168. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/orchestration/__init__.py +0 -0
  169. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/orchestration/advanced_orchestrator.py +0 -0
  170. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/orchestration/coverage_improvement.py +0 -0
  171. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/orchestration/execution_strategies.py +0 -0
  172. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/orchestration/test_progress_streamer.py +0 -0
  173. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/plugins/__init__.py +0 -0
  174. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/plugins/base.py +0 -0
  175. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/plugins/hooks.py +0 -0
  176. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/plugins/loader.py +0 -0
  177. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/plugins/managers.py +0 -0
  178. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/pyproject.toml +0 -0
  179. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/security/__init__.py +0 -0
  180. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/security/audit.py +0 -0
  181. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/services/__init__.py +0 -0
  182. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/services/anomaly_detector.py +0 -0
  183. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/services/api_extractor.py +0 -0
  184. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/services/backup_service.py +0 -0
  185. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/services/bounded_status_operations.py +0 -0
  186. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/services/cache.py +0 -0
  187. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/services/changelog_automation.py +0 -0
  188. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/services/config_integrity.py +0 -0
  189. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/services/config_merge.py +0 -0
  190. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/services/config_template.py +0 -0
  191. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/services/contextual_ai_assistant.py +0 -0
  192. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/services/coverage_badge_service.py +0 -0
  193. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/services/coverage_ratchet.py +0 -0
  194. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/services/debug.py +0 -0
  195. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/services/dependency_analyzer.py +0 -0
  196. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/services/dependency_monitor.py +0 -0
  197. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/services/documentation_generator.py +0 -0
  198. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/services/documentation_service.py +0 -0
  199. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/services/enhanced_filesystem.py +0 -0
  200. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/services/enterprise_optimizer.py +0 -0
  201. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/services/error_pattern_analyzer.py +0 -0
  202. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/services/file_hasher.py +0 -0
  203. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/services/filesystem.py +0 -0
  204. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/services/git.py +0 -0
  205. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/services/health_metrics.py +0 -0
  206. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/services/heatmap_generator.py +0 -0
  207. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/services/initialization.py +0 -0
  208. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/services/input_validator.py +0 -0
  209. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/services/intelligent_commit.py +0 -0
  210. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/services/log_manager.py +0 -0
  211. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/services/logging.py +0 -0
  212. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/services/lsp_client.py +0 -0
  213. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/services/memory_optimizer.py +0 -0
  214. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/services/metrics.py +0 -0
  215. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/services/parallel_executor.py +0 -0
  216. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/services/pattern_cache.py +0 -0
  217. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/services/pattern_detector.py +0 -0
  218. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/services/performance_monitor.py +0 -0
  219. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/services/predictive_analytics.py +0 -0
  220. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/services/quality_baseline.py +0 -0
  221. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/services/quality_baseline_enhanced.py +0 -0
  222. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/services/quality_intelligence.py +0 -0
  223. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/services/regex_patterns.py +0 -0
  224. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/services/regex_utils.py +0 -0
  225. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/services/secure_path_utils.py +0 -0
  226. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/services/secure_status_formatter.py +0 -0
  227. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/services/secure_subprocess.py +0 -0
  228. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/services/security.py +0 -0
  229. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/services/security_logger.py +0 -0
  230. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/services/server_manager.py +0 -0
  231. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/services/smart_scheduling.py +0 -0
  232. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/services/status_authentication.py +0 -0
  233. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/services/status_security_manager.py +0 -0
  234. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/services/terminal_utils.py +0 -0
  235. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/services/thread_safe_status_collector.py +0 -0
  236. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/services/tool_version_service.py +0 -0
  237. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/services/unified_config.py +0 -0
  238. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/services/validation_rate_limiter.py +0 -0
  239. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/services/version_analyzer.py +0 -0
  240. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/services/version_checker.py +0 -0
  241. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/services/websocket_resource_limiter.py +0 -0
  242. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/services/zuban_lsp_service.py +0 -0
  243. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/slash_commands/__init__.py +0 -0
  244. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/slash_commands/init.md +0 -0
  245. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/slash_commands/run.md +0 -0
  246. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/slash_commands/status.md +0 -0
  247. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/tools/__init__.py +0 -0
  248. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/tools/fix_terminal.sh +0 -0
  249. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/tools/validate_input_validator_patterns.py +0 -0
  250. {crackerjack-0.33.12 → crackerjack-0.34.0}/crackerjack/uv.lock +0 -0
  251. {crackerjack-0.33.12 → crackerjack-0.34.0}/docs/architecture/API_REFERENCE.md +0 -0
  252. {crackerjack-0.33.12 → crackerjack-0.34.0}/docs/architecture/ARCHITECTURE.md +0 -0
  253. {crackerjack-0.33.12 → crackerjack-0.34.0}/docs/archive/CONFIG_MANAGEMENT_REPLACEMENT_PLAN.md +0 -0
  254. {crackerjack-0.33.12 → crackerjack-0.34.0}/docs/archive/CONFIG_MERGE_REMOVAL_PLAN.md +0 -0
  255. {crackerjack-0.33.12 → crackerjack-0.34.0}/docs/archive/DOCUMENTATION_REORGANIZATION_PLAN.md +0 -0
  256. {crackerjack-0.33.12 → crackerjack-0.34.0}/docs/development/IDE-SETUP.md +0 -0
  257. {crackerjack-0.33.12 → crackerjack-0.34.0}/docs/development/RUST_TOOLING_FRAMEWORK.md +0 -0
  258. {crackerjack-0.33.12 → crackerjack-0.34.0}/docs/planning/COMPLEXITY_REFACTORING_PLAN.md +0 -0
  259. {crackerjack-0.33.12 → crackerjack-0.34.0}/docs/planning/COVERAGE_BADGE_IMPLEMENTATION_PLAN.md +0 -0
  260. {crackerjack-0.33.12 → crackerjack-0.34.0}/docs/planning/CURRENT_IMPLEMENTATION_STATUS.md +0 -0
  261. {crackerjack-0.33.12 → crackerjack-0.34.0}/docs/planning/DOCUMENTATION_SYSTEM_ARCHITECTURE.md +0 -0
  262. {crackerjack-0.33.12 → crackerjack-0.34.0}/docs/planning/EXPERIMENTAL-EVALUATION.md +0 -0
  263. {crackerjack-0.33.12 → crackerjack-0.34.0}/docs/planning/FEATURE_IMPLEMENTATION_PLAN.md +0 -0
  264. {crackerjack-0.33.12 → crackerjack-0.34.0}/docs/planning/RESILIENT_HOOK_ARCHITECTURE_IMPLEMENTATION_SUMMARY.md +0 -0
  265. {crackerjack-0.33.12 → crackerjack-0.34.0}/docs/planning/RESILIENT_HOOK_ARCHITECTURE_PLAN.md +0 -0
  266. {crackerjack-0.33.12 → crackerjack-0.34.0}/docs/planning/STAGE_HEADERS_IMPLEMENTATION_PLAN.md +0 -0
  267. {crackerjack-0.33.12 → crackerjack-0.34.0}/docs/planning/TIMEOUT_ARCHITECTURE_SOLUTION.md +0 -0
  268. {crackerjack-0.33.12 → crackerjack-0.34.0}/docs/planning/TYPE_ANNOTATION_FIXING_PLAN.md +0 -0
  269. {crackerjack-0.33.12 → crackerjack-0.34.0}/docs/planning/UVXUSAGE.md +0 -0
  270. {crackerjack-0.33.12 → crackerjack-0.34.0}/docs/planning/ZUBAN_LSP_INTEGRATION_PLAN.md +0 -0
  271. {crackerjack-0.33.12 → crackerjack-0.34.0}/docs/planning/ZUBAN_TOML_PARSING_BUG_ANALYSIS.md +0 -0
  272. {crackerjack-0.33.12 → crackerjack-0.34.0}/docs/security/INPUT_VALIDATOR_SECURITY_AUDIT.md +0 -0
  273. {crackerjack-0.33.12 → crackerjack-0.34.0}/docs/security/SECURITY-AUDIT.md +0 -0
  274. {crackerjack-0.33.12 → crackerjack-0.34.0}/docs/security/SECURITY_AUDIT_REPORT.md +0 -0
  275. {crackerjack-0.33.12 → crackerjack-0.34.0}/docs/security/SECURITY_AUDIT_STATUS_DISCLOSURE.md +0 -0
  276. {crackerjack-0.33.12 → crackerjack-0.34.0}/docs/security/SECURITY_HARDENING_REPORT.md +0 -0
  277. {crackerjack-0.33.12 → crackerjack-0.34.0}/docs/security/SECURITY_SUBPROCESS_HARDENING_REPORT.md +0 -0
  278. {crackerjack-0.33.12 → crackerjack-0.34.0}/docs/systems/BACKUP_SYSTEM.md +0 -0
  279. {crackerjack-0.33.12 → crackerjack-0.34.0}/docs/systems/CACHING_SYSTEM.md +0 -0
  280. {crackerjack-0.33.12 → crackerjack-0.34.0}/docs/systems/DASHBOARD_ARCHITECTURE.md +0 -0
  281. {crackerjack-0.33.12 → crackerjack-0.34.0}/docs/systems/MCP_INTEGRATION.md +0 -0
  282. {crackerjack-0.33.12 → crackerjack-0.34.0}/docs/systems/MONITORING_INTEGRATION.md +0 -0
  283. {crackerjack-0.33.12 → crackerjack-0.34.0}/docs/systems/UNIFIED_MONITORING_ARCHITECTURE.md +0 -0
  284. {crackerjack-0.33.12 → crackerjack-0.34.0}/example.mcp.json +0 -0
  285. {crackerjack-0.33.12 → crackerjack-0.34.0}/excalidraw.log +0 -0
  286. {crackerjack-0.33.12 → crackerjack-0.34.0}/fix_typing_imports.py +0 -0
  287. {crackerjack-0.33.12 → crackerjack-0.34.0}/mypy.ini +0 -0
  288. {crackerjack-0.33.12 → crackerjack-0.34.0}/scripts/__init__.py +0 -0
  289. {crackerjack-0.33.12 → crackerjack-0.34.0}/scripts/integrate_resource_management.py +0 -0
  290. {crackerjack-0.33.12 → crackerjack-0.34.0}/scripts/performance_benchmark.py +0 -0
  291. {crackerjack-0.33.12 → crackerjack-0.34.0}/templates/api_reference.md.template +0 -0
  292. {crackerjack-0.33.12 → crackerjack-0.34.0}/templates/changelog_entry.md.template +0 -0
  293. {crackerjack-0.33.12 → crackerjack-0.34.0}/templates/user_guide.md.template +0 -0
  294. {crackerjack-0.33.12 → crackerjack-0.34.0}/test_docs_site/site/docs/api-reference.md +0 -0
  295. {crackerjack-0.33.12 → crackerjack-0.34.0}/test_docs_site/site/docs/getting-started.md +0 -0
  296. {crackerjack-0.33.12 → crackerjack-0.34.0}/test_docs_site/site/docs/index.md +0 -0
  297. {crackerjack-0.33.12 → crackerjack-0.34.0}/test_docs_site/site/docs/stylesheets/extra.css +0 -0
  298. {crackerjack-0.33.12 → crackerjack-0.34.0}/test_docs_site/site/mkdocs.yml +0 -0
  299. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/__init__.py +0 -0
  300. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/base_test.py +0 -0
  301. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/conftest.py +0 -0
  302. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/coverage.json +0 -0
  303. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/data/__init__.py +0 -0
  304. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/data/comments_sample.txt +0 -0
  305. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/data/docstrings_sample.txt +0 -0
  306. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/data/expected_comments_sample.txt +0 -0
  307. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/data/init.py +0 -0
  308. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/docs/HEALTH_METRICS_TESTING_SUMMARY.md +0 -0
  309. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/docs/TEST_COVERAGE_PLAN.md +0 -0
  310. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/docs/TEST_IMPLEMENTATION_PLAN.md +0 -0
  311. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/run_tests.py +0 -0
  312. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/scripts/__init__.py +0 -0
  313. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/scripts/agent_audit_report.py +0 -0
  314. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/scripts/run_test_suite.py +0 -0
  315. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/test___main__.py +0 -0
  316. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/test_ai_agent_workflow.py +0 -0
  317. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/test_ai_optimized_documentation.py +0 -0
  318. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/test_changelog_generation.py +0 -0
  319. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/test_cli/__init__.py +0 -0
  320. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/test_cli/test_global_lock_options.py +0 -0
  321. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/test_cli_semantic_naming.py +0 -0
  322. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/test_coordinator_performance.py +0 -0
  323. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/test_core_autofix_coordinator.py +0 -0
  324. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/test_core_comprehensive.py +0 -0
  325. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/test_core_coverage.py +0 -0
  326. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/test_core_enhanced_container.py +0 -0
  327. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/test_core_modules.py +0 -0
  328. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/test_core_performance.py +0 -0
  329. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/test_documentation_agent_simple.py +0 -0
  330. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/test_dynamic_config.py +0 -0
  331. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/test_dynamic_config_coverage.py +0 -0
  332. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/test_end_to_end_integration.py +0 -0
  333. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/test_enhanced_filesystem.py +0 -0
  334. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/test_enhanced_filesystem_comprehensive.py +0 -0
  335. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/test_enhanced_filesystem_coverage.py +0 -0
  336. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/test_execution_speed_optimization.py +0 -0
  337. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/test_executors/__init__.py +0 -0
  338. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/test_executors/test_lock_integration.py +0 -0
  339. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/test_fast_hooks_behavior.py +0 -0
  340. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/test_filesystem_coverage.py +0 -0
  341. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/test_final_validation.py +0 -0
  342. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/test_global_lock_config.py +0 -0
  343. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/test_hook_lock_manager.py +0 -0
  344. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/test_hook_manager_simple.py +0 -0
  345. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/test_import_coverage_consolidated.py +0 -0
  346. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/test_input_validation.py +0 -0
  347. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/test_intelligence_system.py +0 -0
  348. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/test_large_modules_coverage.py +0 -0
  349. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/test_main_entry_coverage.py +0 -0
  350. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/test_main_module.py +0 -0
  351. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/test_managers_consolidated.py +0 -0
  352. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/test_mcp_progress_monitor.py +0 -0
  353. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/test_mcp_server.py +0 -0
  354. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/test_models_comprehensive.py +0 -0
  355. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/test_models_config_adapter_coverage.py +0 -0
  356. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/test_models_focused.py +0 -0
  357. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/test_models_task_coverage.py +0 -0
  358. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/test_modernized_code.py +0 -0
  359. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/test_performance_agent_enhanced.py +0 -0
  360. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/test_performance_agent_simple.py +0 -0
  361. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/test_performance_benchmarks_focused.py.bak +0 -0
  362. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/test_phase_coordinator_simple.py +0 -0
  363. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/test_plugins_coverage.py +0 -0
  364. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/test_proactive_agent_system.py +0 -0
  365. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/test_protocol_compliance.py +0 -0
  366. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/test_publish_manager_coverage.py +0 -0
  367. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/test_pytest_features.py +0 -0
  368. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/test_regex_patterns.py +0 -0
  369. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/test_resource_cleanup_integration.py +0 -0
  370. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/test_secure_path_utils.py +0 -0
  371. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/test_secure_status_formatter.py +0 -0
  372. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/test_security_audit.py +0 -0
  373. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/test_security_hardening.py +0 -0
  374. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/test_security_integration.py +0 -0
  375. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/test_services_coverage.py +0 -0
  376. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/test_session_coordinator.py +0 -0
  377. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/test_session_coordinator_coverage.py +0 -0
  378. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/test_simple_tool_version_service.py +0 -0
  379. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/test_simple_workflow.py +0 -0
  380. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/test_stage_workflow_execution_order.py +0 -0
  381. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/test_structured_logging.py +0 -0
  382. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/test_syntax_validation.py +0 -0
  383. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/test_terminal_restoration.py +0 -0
  384. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/test_terminal_state.py +0 -0
  385. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/test_timeout_system.py +0 -0
  386. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/test_unified_api.py +0 -0
  387. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/test_unified_config.py +0 -0
  388. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/test_unified_monitoring_dashboard.py +0 -0
  389. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/test_validate_regex_patterns_tool.py +0 -0
  390. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/test_version_analyzer.py +0 -0
  391. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/test_version_bump_analyzer.py +0 -0
  392. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/test_websocket_endpoints.py +0 -0
  393. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/test_workflow_fast_hooks.py +0 -0
  394. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/test_workflow_integration.py +0 -0
  395. {crackerjack-0.33.12 → crackerjack-0.34.0}/tests/test_workflow_orchestrator.py +0 -0
  396. {crackerjack-0.33.12 → crackerjack-0.34.0}/uv.lock +0 -0
@@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [0.34.0] - 2025-09-15
9
+
10
+ ### Changed
11
+
12
+ - Update config, deps, docs
13
+
8
14
  ## [0.33.12] - 2025-09-15
9
15
 
10
16
  ### Changed
@@ -62,6 +62,52 @@ python -m crackerjack --full-release patch # Full release workflow
62
62
 
63
63
  **Usage**: `--ai-fix` enables batch fixing; confidence ≥0.7 uses specific agents
64
64
 
65
+ ## Advanced Services (Enabled by Default)
66
+
67
+ Crackerjack now includes sophisticated intelligence services that enhance the development experience automatically:
68
+
69
+ ### 🧠 Smart Commit Messages (Default)
70
+
71
+ - **AI-Powered Analysis**: Analyzes staged changes using conventional commit patterns
72
+ - **Context-Aware**: Considers file types, change patterns, and scope for descriptive messages
73
+ - **Automatic Detection**: Identifies breaking changes, features, fixes, and refactoring
74
+ - **Fallback Option**: Use `--basic-commit` to disable smart messages when needed
75
+
76
+ ### 📈 Version Intelligence (Integrated)
77
+
78
+ - **Semantic Analysis**: AI recommends version bumps (major/minor/patch) based on commits
79
+ - **Breaking Change Detection**: Automatically identifies API-breaking changes
80
+ - **Conventional Commits**: Analyzes feat/fix/breaking patterns with confidence scoring
81
+ - **Interactive Mode**: Use `--bump interactive` to see AI recommendations during selection
82
+
83
+ ### 📝 Changelog Automation (Default)
84
+
85
+ - **Git History Analysis**: Automatically generates changelog entries from commits
86
+ - **Categorized Entries**: Groups changes by type (Added, Fixed, Changed, etc.)
87
+ - **Version Integration**: Updates changelog during version bumps and publishing
88
+ - **Markdown Generation**: Creates properly formatted CHANGELOG.md entries
89
+
90
+ ### 🎯 Quality Intelligence (Active)
91
+
92
+ - **Anomaly Detection**: ML-based quality trend analysis and early warning system
93
+ - **Pattern Recognition**: Identifies improvement/regression patterns in code quality
94
+ - **Workflow Decisions**: Influences hook selection based on quality history
95
+ - **Predictive Analytics**: Recommends comprehensive vs. fast quality checks intelligently
96
+
97
+ ### ⚡ Performance Benchmarks (Reporting)
98
+
99
+ - **Real-time Metrics**: Tracks workflow execution time and resource usage
100
+ - **Improvement Analysis**: Shows performance gains from optimizations and caching
101
+ - **Memory Optimization**: Reports cache hit ratios and memory efficiency metrics
102
+ - **Historical Trends**: Maintains performance baselines for comparison
103
+
104
+ **Integration Benefits**:
105
+
106
+ - All services work together seamlessly with graceful fallbacks
107
+ - Zero configuration required - intelligent defaults work out of the box
108
+ - Enhanced developer experience with minimal performance impact
109
+ - Comprehensive quality assurance with intelligent automation
110
+
65
111
  ## High-Performance Rust Integration
66
112
 
67
113
  **Ultra-Fast Static Analysis** with seamless Python integration:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: crackerjack
3
- Version: 0.33.12
3
+ Version: 0.34.0
4
4
  Summary: Crackerjack Python project management tool
5
5
  Project-URL: documentation, https://github.com/lesleslie/crackerjack
6
6
  Project-URL: homepage, https://github.com/lesleslie/crackerjack
@@ -110,7 +110,7 @@ class Options(BaseModel):
110
110
  accept_version: bool = False
111
111
 
112
112
  # Intelligent features
113
- smart_commit: bool = False
113
+ smart_commit: bool = True # Default enabled for advanced services integration
114
114
 
115
115
  # Analytics and visualization features
116
116
  heatmap: bool = False
@@ -733,9 +733,9 @@ CLI_OPTIONS = {
733
733
  help="Automatically accept version bump recommendation without confirmation.",
734
734
  ),
735
735
  "smart_commit": typer.Option(
736
- False,
737
- "--smart-commit",
738
- help="Generate intelligent commit messages based on code changes using AI analysis.",
736
+ True, # Now enabled by default for advanced services integration
737
+ "--smart-commit/--basic-commit",
738
+ help="Generate intelligent commit messages using AI analysis (default: enabled). Use --basic-commit for simple messages.",
739
739
  ),
740
740
  "heatmap": typer.Option(
741
741
  False,
@@ -474,8 +474,12 @@ class PhaseCoordinator(ErrorHandlingMixin):
474
474
  changed_files: list[str],
475
475
  options: OptionsProtocol,
476
476
  ) -> str:
477
- # Check if smart commit is enabled
478
- if getattr(options, "smart_commit", False):
477
+ # Smart commit is now enabled by default for all commit operations
478
+ # Use basic commit messages only if explicitly disabled
479
+ use_smart_commit = getattr(options, "smart_commit", True)
480
+ disable_smart_commit = getattr(options, "basic_commit", False)
481
+
482
+ if use_smart_commit and not disable_smart_commit:
479
483
  try:
480
484
  from crackerjack.services.intelligent_commit import (
481
485
  CommitMessageGenerator,
@@ -19,11 +19,16 @@ from crackerjack.services.logging import (
19
19
  setup_structured_logging,
20
20
  )
21
21
  from crackerjack.services.memory_optimizer import get_memory_optimizer, memory_optimized
22
+ from crackerjack.services.performance_benchmarks import PerformanceBenchmarkService
22
23
  from crackerjack.services.performance_cache import get_performance_cache
23
24
  from crackerjack.services.performance_monitor import (
24
25
  get_performance_monitor,
25
26
  phase_monitor,
26
27
  )
28
+ from crackerjack.services.quality_baseline_enhanced import (
29
+ EnhancedQualityBaselineService,
30
+ )
31
+ from crackerjack.services.quality_intelligence import QualityIntelligenceService
27
32
 
28
33
  from .phase_coordinator import PhaseCoordinator
29
34
  from .session_coordinator import SessionCoordinator
@@ -60,6 +65,25 @@ class WorkflowPipeline:
60
65
  self._memory_optimizer = get_memory_optimizer()
61
66
  self._cache = get_performance_cache()
62
67
 
68
+ # Initialize quality intelligence for advanced decision making
69
+ try:
70
+ quality_baseline = EnhancedQualityBaselineService(console, pkg_path)
71
+ self._quality_intelligence = QualityIntelligenceService(
72
+ quality_baseline, console
73
+ )
74
+ except Exception:
75
+ # Fallback gracefully if quality intelligence is not available
76
+ self._quality_intelligence = None
77
+
78
+ # Initialize performance benchmarking for workflow analysis
79
+ try:
80
+ self._performance_benchmarks = PerformanceBenchmarkService(
81
+ console, pkg_path
82
+ )
83
+ except Exception:
84
+ # Fallback gracefully if benchmarking is not available
85
+ self._performance_benchmarks = None
86
+
63
87
  @property
64
88
  def debugger(self) -> AIAgentDebugger | NoOpDebugger:
65
89
  if self._debugger is None:
@@ -297,6 +321,9 @@ class WorkflowPipeline:
297
321
  duration = time.time() - start_time
298
322
  self._log_workflow_completion(success, duration)
299
323
  self._log_workflow_completion_debug(success, duration)
324
+ await self._generate_performance_benchmark_report(
325
+ workflow_id, duration, success
326
+ )
300
327
 
301
328
  return success
302
329
 
@@ -318,6 +345,50 @@ class WorkflowPipeline:
318
345
  duration=duration,
319
346
  )
320
347
 
348
+ async def _generate_performance_benchmark_report(
349
+ self, workflow_id: str, duration: float, success: bool
350
+ ) -> None:
351
+ """Generate and display performance benchmark report for workflow execution."""
352
+ if not self._performance_benchmarks:
353
+ return
354
+
355
+ try:
356
+ # Gather performance metrics from the workflow execution
357
+ {
358
+ "workflow_id": workflow_id,
359
+ "total_duration": duration,
360
+ "success": success,
361
+ "cache_metrics": self._cache.get_stats() if self._cache else {},
362
+ "memory_metrics": self._memory_optimizer.get_stats()
363
+ if hasattr(self._memory_optimizer, "get_stats")
364
+ else {},
365
+ }
366
+
367
+ # Generate benchmark comparison
368
+ benchmark_results = await self._performance_benchmarks.run_benchmark_suite()
369
+
370
+ # Display compact performance summary
371
+ if benchmark_results:
372
+ self.console.print("\n[cyan]📊 Performance Benchmark Summary[/cyan]")
373
+ self.console.print(f"Workflow Duration: [bold]{duration:.2f}s[/bold]")
374
+
375
+ # Show key performance improvements if available
376
+ for result in benchmark_results.results[:3]: # Top 3 results
377
+ if result.time_improvement_percentage > 0:
378
+ self.console.print(
379
+ f"[green]⚡[/green] {result.test_name}: {result.time_improvement_percentage:.1f}% faster"
380
+ )
381
+
382
+ if result.cache_hit_ratio > 0:
383
+ self.console.print(
384
+ f"[blue]🎯[/blue] Cache efficiency: {result.cache_hit_ratio:.0%}"
385
+ )
386
+
387
+ except Exception as e:
388
+ self.console.print(
389
+ f"[dim]⚠️ Performance benchmark failed: {str(e)[:50]}...[/dim]"
390
+ )
391
+
321
392
  if self.debugger.enabled:
322
393
  self.debugger.print_debug_summary()
323
394
 
@@ -391,6 +462,13 @@ class WorkflowPipeline:
391
462
  async def _execute_quality_phase(
392
463
  self, options: OptionsProtocol, workflow_id: str
393
464
  ) -> bool:
465
+ # Use quality intelligence to make informed decisions about quality phase
466
+ if self._quality_intelligence:
467
+ quality_decision = await self._make_quality_intelligence_decision(options)
468
+ self.console.print(
469
+ f"[dim]🧠 Quality Intelligence: {quality_decision}[/dim]"
470
+ )
471
+
394
472
  if hasattr(options, "fast") and options.fast:
395
473
  return await self._run_fast_hooks_phase_monitored(options, workflow_id)
396
474
  if hasattr(options, "comp") and options.comp:
@@ -403,6 +481,48 @@ class WorkflowPipeline:
403
481
  options, workflow_id
404
482
  )
405
483
 
484
+ async def _make_quality_intelligence_decision(
485
+ self, options: OptionsProtocol
486
+ ) -> str:
487
+ """Use quality intelligence to make informed decisions about workflow execution."""
488
+ try:
489
+ if not self._quality_intelligence:
490
+ return "Quality intelligence not available"
491
+
492
+ # Analyze recent quality trends and anomalies
493
+ anomalies = await self._quality_intelligence.detect_anomalies()
494
+ patterns = await self._quality_intelligence.identify_patterns()
495
+
496
+ # Make intelligent recommendations based on current state
497
+ recommendations = []
498
+ if anomalies:
499
+ high_severity_anomalies = [
500
+ a for a in anomalies if a.severity.name in ["CRITICAL", "HIGH"]
501
+ ]
502
+ if high_severity_anomalies:
503
+ recommendations.append(
504
+ "comprehensive analysis recommended due to quality anomalies"
505
+ )
506
+ else:
507
+ recommendations.append("standard quality checks sufficient")
508
+
509
+ if patterns:
510
+ improving_patterns = [
511
+ p for p in patterns if p.trend_direction.name == "IMPROVING"
512
+ ]
513
+ if improving_patterns:
514
+ recommendations.append("quality trending upward")
515
+ else:
516
+ recommendations.append("quality monitoring active")
517
+
518
+ if not recommendations:
519
+ recommendations.append("baseline quality analysis active")
520
+
521
+ return "; ".join(recommendations)
522
+
523
+ except Exception as e:
524
+ return f"Quality intelligence analysis failed: {str(e)[:50]}..."
525
+
406
526
  async def _execute_test_workflow(
407
527
  self, options: OptionsProtocol, workflow_id: str
408
528
  ) -> bool:
@@ -457,8 +457,55 @@ PRE_COMMIT_TEMPLATE = """repos:
457
457
 
458
458
 
459
459
  class DynamicConfigGenerator:
460
- def __init__(self) -> None:
460
+ def __init__(self, package_directory: str | None = None) -> None:
461
461
  self.template = jinja2.Template(PRE_COMMIT_TEMPLATE)
462
+ self.package_directory = package_directory or self._detect_package_directory()
463
+
464
+ def _detect_package_directory(self) -> str:
465
+ """Detect the package directory name for the current project."""
466
+ import os
467
+ from pathlib import Path
468
+
469
+ # Check if we're in the crackerjack project itself
470
+ current_dir = Path(os.getcwd())
471
+ if (current_dir / "crackerjack").exists() and (
472
+ current_dir / "pyproject.toml"
473
+ ).exists():
474
+ # Check if this is actually the crackerjack project
475
+ try:
476
+ import tomllib
477
+
478
+ with (current_dir / "pyproject.toml").open("rb") as f:
479
+ data = tomllib.load(f)
480
+ if data.get("project", {}).get("name") == "crackerjack":
481
+ return "crackerjack"
482
+ except Exception:
483
+ pass
484
+
485
+ # Try to read package name from pyproject.toml
486
+ pyproject_path = current_dir / "pyproject.toml"
487
+ if pyproject_path.exists():
488
+ try:
489
+ import tomllib
490
+
491
+ with pyproject_path.open("rb") as f:
492
+ data = tomllib.load(f)
493
+
494
+ if "project" in data and "name" in data["project"]:
495
+ package_name = str(data["project"]["name"])
496
+ # Check if package directory exists
497
+ if (current_dir / package_name).exists():
498
+ return package_name
499
+ except Exception:
500
+ pass
501
+
502
+ # Fallback to common patterns
503
+ for possible_name in ("src", current_dir.name):
504
+ if (current_dir / possible_name).exists():
505
+ return possible_name
506
+
507
+ # Default fallback
508
+ return "src"
462
509
 
463
510
  def _should_include_hook(
464
511
  self,
@@ -486,10 +533,40 @@ class DynamicConfigGenerator:
486
533
  for category_hooks in HOOKS_REGISTRY.values():
487
534
  for hook in category_hooks:
488
535
  if self._should_include_hook(hook, config, enabled_experimental):
489
- filtered_hooks.append(hook)
536
+ # Create a copy and update package-specific configurations
537
+ updated_hook = self._update_hook_for_package(hook.copy())
538
+ filtered_hooks.append(updated_hook)
490
539
 
491
540
  return filtered_hooks
492
541
 
542
+ def _update_hook_for_package(self, hook: HookMetadata) -> HookMetadata:
543
+ """Update hook configuration to use the detected package directory."""
544
+ # Update skylos hook
545
+ if hook["id"] == "skylos" and hook["args"]:
546
+ hook["args"] = [self.package_directory]
547
+
548
+ # Update zuban hook
549
+ elif hook["id"] == "zuban" and hook["args"]:
550
+ # Replace the hardcoded "./crackerjack" with the dynamic package directory
551
+ updated_args = []
552
+ for arg in hook["args"]:
553
+ if arg == "./crackerjack":
554
+ updated_args.append(f"./{self.package_directory}")
555
+ else:
556
+ updated_args.append(arg)
557
+ hook["args"] = updated_args
558
+
559
+ # Update other hooks that use hardcoded "crackerjack" patterns
560
+ elif hook["files"] and "crackerjack" in hook["files"]:
561
+ hook["files"] = hook["files"].replace("crackerjack", self.package_directory)
562
+
563
+ elif hook["exclude"] and "crackerjack" in hook["exclude"]:
564
+ hook["exclude"] = hook["exclude"].replace(
565
+ "crackerjack", self.package_directory
566
+ )
567
+
568
+ return hook
569
+
493
570
  def group_hooks_by_repo(
494
571
  self,
495
572
  hooks: list[HookMetadata],
@@ -580,8 +657,11 @@ class DynamicConfigGenerator:
580
657
  def generate_config_for_mode(
581
658
  mode: str,
582
659
  enabled_experimental: list[str] | None = None,
660
+ package_directory: str | None = None,
583
661
  ) -> Path:
584
- return DynamicConfigGenerator().create_temp_config(mode, enabled_experimental)
662
+ return DynamicConfigGenerator(package_directory).create_temp_config(
663
+ mode, enabled_experimental
664
+ )
585
665
 
586
666
 
587
667
  def get_available_modes() -> list[str]:
@@ -122,8 +122,18 @@ class PublishManagerImpl:
122
122
  raise ValueError(msg)
123
123
  self.console.print(f"[cyan]📦[/ cyan] Current version: {current_version}")
124
124
 
125
+ # Get intelligent version analysis and recommendation
126
+ recommendation = self._get_version_recommendation()
127
+ if recommendation and version_type not in ["interactive"]:
128
+ self._display_version_analysis(recommendation)
129
+ if version_type == "auto":
130
+ version_type = recommendation.bump_type.value
131
+ self.console.print(
132
+ f"[green]🎯[/green] Using AI-recommended bump type: {version_type}"
133
+ )
134
+
125
135
  if version_type == "interactive":
126
- version_type = self._prompt_for_version_type()
136
+ version_type = self._prompt_for_version_type(recommendation)
127
137
 
128
138
  try:
129
139
  new_version = self._calculate_next_version(current_version, version_type)
@@ -146,14 +156,21 @@ class PublishManagerImpl:
146
156
  self.console.print(f"[red]❌[/ red] Version bump failed: {e}")
147
157
  raise
148
158
 
149
- def _prompt_for_version_type(self) -> str:
159
+ def _prompt_for_version_type(self, recommendation=None) -> str:
150
160
  try:
151
161
  from rich.prompt import Prompt
152
162
 
163
+ default_type = "patch"
164
+ if recommendation:
165
+ default_type = recommendation.bump_type.value
166
+ self.console.print(
167
+ f"[dim]AI recommendation: {default_type} (confidence: {recommendation.confidence:.0%})[/dim]"
168
+ )
169
+
153
170
  return Prompt.ask(
154
171
  "[cyan]📦[/ cyan] Select version bump type",
155
172
  choices=["patch", "minor", "major"],
156
- default="patch",
173
+ default=default_type,
157
174
  )
158
175
  except ImportError:
159
176
  self.console.print(
@@ -161,6 +178,73 @@ class PublishManagerImpl:
161
178
  )
162
179
  return "patch"
163
180
 
181
+ def _get_version_recommendation(self):
182
+ """Get AI-powered version bump recommendation based on git history."""
183
+ try:
184
+ import asyncio
185
+
186
+ from crackerjack.services.git import GitService
187
+ from crackerjack.services.version_analyzer import VersionAnalyzer
188
+
189
+ # Initialize services
190
+ git_service = GitService(self.console, self.pkg_path)
191
+ version_analyzer = VersionAnalyzer(self.console, git_service)
192
+
193
+ # Get recommendation asynchronously
194
+ try:
195
+ # Try to get existing event loop
196
+ loop = asyncio.get_event_loop()
197
+ if loop.is_running():
198
+ # Create a new event loop in a thread if one is already running
199
+ import concurrent.futures
200
+
201
+ with concurrent.futures.ThreadPoolExecutor() as executor:
202
+ future = executor.submit(
203
+ asyncio.run, version_analyzer.recommend_version_bump()
204
+ )
205
+ recommendation = future.result(timeout=10)
206
+ else:
207
+ recommendation = loop.run_until_complete(
208
+ version_analyzer.recommend_version_bump()
209
+ )
210
+ except RuntimeError:
211
+ # No event loop, create one
212
+ recommendation = asyncio.run(version_analyzer.recommend_version_bump())
213
+
214
+ return recommendation
215
+
216
+ except Exception as e:
217
+ self.console.print(f"[yellow]⚠️[/yellow] Version analysis failed: {e}")
218
+ return None
219
+
220
+ def _display_version_analysis(self, recommendation):
221
+ """Display version analysis in a compact format."""
222
+ if not recommendation:
223
+ return
224
+
225
+ self.console.print("\n[cyan]🎯 AI Version Analysis[/cyan]")
226
+ self.console.print(
227
+ f"Recommended: [bold green]{recommendation.recommended_version}[/bold green] "
228
+ f"({recommendation.bump_type.value.upper()}) - {recommendation.confidence:.0%} confidence"
229
+ )
230
+
231
+ if recommendation.reasoning:
232
+ self.console.print(f"[dim]→ {recommendation.reasoning[0]}[/dim]")
233
+
234
+ # Show key changes briefly
235
+ if recommendation.breaking_changes:
236
+ self.console.print(
237
+ f"[red]⚠️[/red] {len(recommendation.breaking_changes)} breaking changes detected"
238
+ )
239
+ elif recommendation.new_features:
240
+ self.console.print(
241
+ f"[green]✨[/green] {len(recommendation.new_features)} new features detected"
242
+ )
243
+ elif recommendation.bug_fixes:
244
+ self.console.print(
245
+ f"[blue]🔧[/blue] {len(recommendation.bug_fixes)} bug fixes detected"
246
+ )
247
+
164
248
  def validate_auth(self) -> bool:
165
249
  auth_methods = self._collect_auth_methods()
166
250
  return self._report_auth_status(auth_methods)
@@ -71,7 +71,7 @@ class TestProgress:
71
71
  border_style="yellow",
72
72
  title_style="bold yellow",
73
73
  expand=True,
74
- min_width=80,
74
+ min_width=74,
75
75
  )
76
76
 
77
77
  table.add_column("Type", style="cyan", ratio=1)
@@ -106,7 +106,7 @@ class TestProgress:
106
106
  border_style="cyan",
107
107
  title_style="bold cyan",
108
108
  expand=True,
109
- min_width=80,
109
+ min_width=74,
110
110
  )
111
111
 
112
112
  table.add_column("Metric", style="cyan", ratio=1)
@@ -12,12 +12,20 @@ class ConfigurationService:
12
12
  def __init__(self, console: Console, pkg_path: Path) -> None:
13
13
  self.console = console
14
14
  self.pkg_path = pkg_path
15
- self.config_generator = DynamicConfigGenerator()
15
+ # Extract package directory name from the pkg_path
16
+ package_directory = pkg_path.name if pkg_path != Path.cwd() else None
17
+ self.config_generator = DynamicConfigGenerator(package_directory)
16
18
 
17
19
  def update_precommit_config(self, options: OptionsProtocol) -> bool:
18
20
  try:
19
21
  mode = self._determine_config_mode(options)
20
- config_temp_path = generate_config_for_mode(mode)
22
+ # Extract package directory name from the pkg_path
23
+ package_directory = (
24
+ self.pkg_path.name if self.pkg_path != Path.cwd() else None
25
+ )
26
+ config_temp_path = generate_config_for_mode(
27
+ mode, package_directory=package_directory
28
+ )
21
29
  if not config_temp_path:
22
30
  self.console.print("[yellow]⚠️ No configuration generated[/ yellow]")
23
31
  return False
@@ -130,7 +130,7 @@ class PerformanceBenchmarker:
130
130
  obj = {
131
131
  "data": f"heavy_data_{i}" * 100,
132
132
  "metadata": {"created": time.time(), "index": i},
133
- "payload": list[t.Any](range(100)),
133
+ "payload": list(range(100)),
134
134
  }
135
135
  heavy_objects.append(obj)
136
136
 
@@ -153,7 +153,7 @@ class PerformanceBenchmarker:
153
153
  return {
154
154
  "data": f"heavy_data_{index}" * 100,
155
155
  "metadata": {"created": time.time(), "index": index},
156
- "payload": list[t.Any](range(100)),
156
+ "payload": list(range(100)),
157
157
  }
158
158
 
159
159
  lazy_obj = LazyLoader(create_heavy_object, f"heavy_object_{i}")
@@ -298,5 +298,27 @@ class PerformanceBenchmarker:
298
298
  self._logger.info(f"Exported benchmark results to {output_path}")
299
299
 
300
300
 
301
+ class PerformanceBenchmarkService:
302
+ """Service wrapper for performance benchmarking in workflow orchestration."""
303
+
304
+ def __init__(self, console, pkg_path):
305
+ self._console = console
306
+ self._pkg_path = pkg_path
307
+ self._benchmarker = PerformanceBenchmarker()
308
+ self._logger = get_logger("crackerjack.benchmark_service")
309
+
310
+ async def run_benchmark_suite(self) -> BenchmarkSuite | None:
311
+ """Run comprehensive benchmark suite and return results."""
312
+ try:
313
+ return await self._benchmarker.run_comprehensive_benchmark()
314
+ except Exception as e:
315
+ self._logger.warning(f"Benchmark suite failed: {e}")
316
+ return None
317
+
318
+ def export_results(self, suite: BenchmarkSuite, output_path: Path) -> None:
319
+ """Export benchmark results to file."""
320
+ self._benchmarker.export_benchmark_results(suite, output_path)
321
+
322
+
301
323
  def get_benchmarker() -> PerformanceBenchmarker:
302
324
  return PerformanceBenchmarker()
@@ -140,7 +140,7 @@ class PerformanceCache:
140
140
  ttl_seconds: int | None = None,
141
141
  invalidation_keys: builtins.set[str] | None = None,
142
142
  ) -> None:
143
- self.set[t.Any](key, value, ttl_seconds, invalidation_keys)
143
+ self.set(key, value, ttl_seconds, invalidation_keys)
144
144
 
145
145
  def invalidate(self, invalidation_key: str) -> int:
146
146
  with self._lock:
@@ -166,15 +166,15 @@ def main(file_paths: list[str]) -> int:
166
166
  if exit_code == 0:
167
167
  print("✅ All regex patterns validated successfully!")
168
168
  else:
169
- print("\n" + "=" * 80)
169
+ print("\n" + "=" * 74)
170
170
  print("REGEX VALIDATION FAILED")
171
- print("=" * 80)
171
+ print("=" * 74)
172
172
  print("To fix these issues: ")
173
173
  print("1. Use patterns from crackerjack.services.regex_patterns")
174
174
  print("2. Add new patterns to SAFE_PATTERNS with comprehensive tests")
175
175
  print("3. Use '# REGEX OK: reason' comment for legitimate exceptions")
176
176
  print("4. Fix \\g<1> replacement syntax (no spaces)")
177
- print("=" * 80)
177
+ print("=" * 74)
178
178
 
179
179
  return exit_code
180
180
 
@@ -6,7 +6,7 @@ build-backend = "hatchling.build"
6
6
 
7
7
  [project]
8
8
  name = "crackerjack"
9
- version = "0.33.12"
9
+ version = "0.34.0"
10
10
  description = "Crackerjack Python project management tool"
11
11
  readme = "README.md"
12
12
  authors = [
@@ -20,7 +20,7 @@ from crackerjack.models.task import HookResult
20
20
  class TestAsyncHookExecutor:
21
21
  @pytest.fixture
22
22
  def console(self):
23
- return Console(force_terminal=False, width=80)
23
+ return Console(force_terminal=False, width=74)
24
24
 
25
25
  @pytest.fixture
26
26
  def pkg_path(self, tmp_path):
@@ -125,7 +125,7 @@ class TestErrorHandlingIntegration:
125
125
  recovery="Try running with - - verbose",
126
126
  )
127
127
  output_io = io.StringIO()
128
- console = Console(file=output_io, width=80)
128
+ console = Console(file=output_io, width=74)
129
129
  with patch("sys.exit"):
130
130
  handle_error(error, console, verbose=True)
131
131
  output = output_io.getvalue()
@@ -144,7 +144,7 @@ class TestErrorHandlingIntegration:
144
144
  recovery="Check command syntax",
145
145
  )
146
146
  output_io = io.StringIO()
147
- console = Console(file=output_io, width=80)
147
+ console = Console(file=output_io, width=74)
148
148
  with patch("sys.exit"):
149
149
  handle_error(error, console, verbose=True, ai_agent=True)
150
150
  output = output_io.getvalue()