crackerjack 0.38.0__tar.gz → 0.38.1__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 (401) hide show
  1. {crackerjack-0.38.0 → crackerjack-0.38.1}/CHANGELOG.md +10 -0
  2. {crackerjack-0.38.0 → crackerjack-0.38.1}/PKG-INFO +3 -2
  3. {crackerjack-0.38.0 → crackerjack-0.38.1}/README.md +2 -1
  4. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/__main__.py +79 -2
  5. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/cli/options.py +2 -2
  6. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/core/workflow_orchestrator.py +6 -4
  7. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/managers/publish_manager.py +3 -3
  8. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/managers/test_manager.py +81 -9
  9. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/mcp/file_monitor.py +12 -2
  10. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/mcp/rate_limiter.py +9 -5
  11. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/mcp/service_watchdog.py +7 -4
  12. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/mcp/tools/intelligence_tools.py +1 -1
  13. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/mcp/tools/proactive_tools.py +1 -1
  14. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/orchestration/execution_strategies.py +3 -3
  15. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/plugins/hooks.py +1 -0
  16. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/plugins/loader.py +1 -1
  17. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/services/dependency_analyzer.py +4 -4
  18. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/services/error_pattern_analyzer.py +4 -4
  19. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/services/parallel_executor.py +2 -2
  20. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/services/performance_benchmarks.py +3 -1
  21. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/services/performance_cache.py +4 -4
  22. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/services/quality_intelligence.py +1 -1
  23. {crackerjack-0.38.0 → crackerjack-0.38.1}/pyproject.toml +1 -1
  24. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/test_large_modules_coverage.py +1 -1
  25. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/test_modernized_code.py +4 -1
  26. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/test_unified_api.py +1 -1
  27. {crackerjack-0.38.0 → crackerjack-0.38.1}/uv.lock +110 -85
  28. {crackerjack-0.38.0 → crackerjack-0.38.1}/.codespell-ignore +0 -0
  29. {crackerjack-0.38.0 → crackerjack-0.38.1}/.codespellrc +0 -0
  30. {crackerjack-0.38.0 → crackerjack-0.38.1}/.github/FUNDING.yml +0 -0
  31. {crackerjack-0.38.0 → crackerjack-0.38.1}/.gitignore +0 -0
  32. {crackerjack-0.38.0 → crackerjack-0.38.1}/.pre-commit-config.yaml +0 -0
  33. {crackerjack-0.38.0 → crackerjack-0.38.1}/AGENTS.md +0 -0
  34. {crackerjack-0.38.0 → crackerjack-0.38.1}/CLAUDE.md +0 -0
  35. {crackerjack-0.38.0 → crackerjack-0.38.1}/LICENSE +0 -0
  36. {crackerjack-0.38.0 → crackerjack-0.38.1}/QWEN.md +0 -0
  37. {crackerjack-0.38.0 → crackerjack-0.38.1}/RULES.md +0 -0
  38. {crackerjack-0.38.0 → crackerjack-0.38.1}/SECURITY.md +0 -0
  39. {crackerjack-0.38.0 → crackerjack-0.38.1}/ai/AGENT-CAPABILITIES.json +0 -0
  40. {crackerjack-0.38.0 → crackerjack-0.38.1}/ai/AGENT_SELECTION.md +0 -0
  41. {crackerjack-0.38.0 → crackerjack-0.38.1}/ai/AI-REFERENCE.md +0 -0
  42. {crackerjack-0.38.0 → crackerjack-0.38.1}/ai/ERROR-PATTERNS.yaml +0 -0
  43. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/__init__.py +0 -0
  44. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/adapters/__init__.py +0 -0
  45. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/adapters/lsp_client.py +0 -0
  46. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/adapters/rust_tool_adapter.py +0 -0
  47. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/adapters/rust_tool_manager.py +0 -0
  48. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/adapters/skylos_adapter.py +0 -0
  49. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/adapters/zuban_adapter.py +0 -0
  50. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/agents/__init__.py +0 -0
  51. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/agents/architect_agent.py +0 -0
  52. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/agents/base.py +0 -0
  53. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/agents/coordinator.py +0 -0
  54. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/agents/documentation_agent.py +0 -0
  55. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/agents/dry_agent.py +0 -0
  56. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/agents/formatting_agent.py +0 -0
  57. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/agents/import_optimization_agent.py +0 -0
  58. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/agents/performance_agent.py +0 -0
  59. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/agents/performance_helpers.py +0 -0
  60. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/agents/proactive_agent.py +0 -0
  61. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/agents/refactoring_agent.py +0 -0
  62. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/agents/refactoring_helpers.py +0 -0
  63. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/agents/security_agent.py +0 -0
  64. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/agents/test_creation_agent.py +0 -0
  65. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/agents/test_specialist_agent.py +0 -0
  66. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/agents/tracker.py +0 -0
  67. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/api.py +0 -0
  68. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/cli/__init__.py +0 -0
  69. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/cli/cache_handlers.py +0 -0
  70. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/cli/cache_handlers_enhanced.py +0 -0
  71. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/cli/facade.py +0 -0
  72. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/cli/handlers.py +0 -0
  73. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/cli/interactive.py +0 -0
  74. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/cli/utils.py +0 -0
  75. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/code_cleaner.py +0 -0
  76. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/config/__init__.py +0 -0
  77. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/config/global_lock_config.py +0 -0
  78. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/config/hooks.py +0 -0
  79. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/core/__init__.py +0 -0
  80. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/core/async_workflow_orchestrator.py +0 -0
  81. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/core/autofix_coordinator.py +0 -0
  82. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/core/container.py +0 -0
  83. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/core/enhanced_container.py +0 -0
  84. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/core/file_lifecycle.py +0 -0
  85. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/core/performance.py +0 -0
  86. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/core/performance_monitor.py +0 -0
  87. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/core/phase_coordinator.py +0 -0
  88. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/core/proactive_workflow.py +0 -0
  89. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/core/resource_manager.py +0 -0
  90. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/core/service_watchdog.py +0 -0
  91. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/core/session_coordinator.py +0 -0
  92. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/core/timeout_manager.py +0 -0
  93. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/core/websocket_lifecycle.py +0 -0
  94. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/docs/INDEX.md +0 -0
  95. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/docs/generated/api/API_REFERENCE.md +0 -0
  96. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/docs/generated/api/CLI_REFERENCE.md +0 -0
  97. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/docs/generated/api/CROSS_REFERENCES.md +0 -0
  98. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/docs/generated/api/PROTOCOLS.md +0 -0
  99. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/docs/generated/api/SERVICES.md +0 -0
  100. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/documentation/__init__.py +0 -0
  101. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/documentation/ai_templates.py +0 -0
  102. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/documentation/dual_output_generator.py +0 -0
  103. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/documentation/mkdocs_integration.py +0 -0
  104. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/documentation/reference_generator.py +0 -0
  105. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/dynamic_config.py +0 -0
  106. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/errors.py +0 -0
  107. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/executors/__init__.py +0 -0
  108. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/executors/async_hook_executor.py +0 -0
  109. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/executors/cached_hook_executor.py +0 -0
  110. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/executors/hook_executor.py +0 -0
  111. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/executors/hook_lock_manager.py +0 -0
  112. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/executors/individual_hook_executor.py +0 -0
  113. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/executors/lsp_aware_hook_executor.py +0 -0
  114. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/executors/tool_proxy.py +0 -0
  115. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/hooks/lsp_hook.py +0 -0
  116. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/intelligence/__init__.py +0 -0
  117. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/intelligence/adaptive_learning.py +0 -0
  118. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/intelligence/agent_orchestrator.py +0 -0
  119. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/intelligence/agent_registry.py +0 -0
  120. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/intelligence/agent_selector.py +0 -0
  121. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/intelligence/integration.py +0 -0
  122. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/interactive.py +0 -0
  123. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/managers/__init__.py +0 -0
  124. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/managers/async_hook_manager.py +0 -0
  125. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/managers/hook_manager.py +0 -0
  126. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/managers/test_command_builder.py +0 -0
  127. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/managers/test_executor.py +0 -0
  128. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/managers/test_manager_backup.py +0 -0
  129. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/managers/test_progress.py +0 -0
  130. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/mcp/__init__.py +0 -0
  131. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/mcp/cache.py +0 -0
  132. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/mcp/client_runner.py +0 -0
  133. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/mcp/context.py +0 -0
  134. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/mcp/dashboard.py +0 -0
  135. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/mcp/enhanced_progress_monitor.py +0 -0
  136. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/mcp/enhanced_progress_monitor.tcss +0 -0
  137. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/mcp/progress_components.py +0 -0
  138. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/mcp/progress_monitor.py +0 -0
  139. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/mcp/progress_monitor.tcss +0 -0
  140. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/mcp/server.py +0 -0
  141. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/mcp/server_core.py +0 -0
  142. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/mcp/state.py +0 -0
  143. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/mcp/task_manager.py +0 -0
  144. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/mcp/tools/__init__.py +0 -0
  145. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/mcp/tools/core_tools.py +0 -0
  146. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/mcp/tools/error_analyzer.py +0 -0
  147. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/mcp/tools/execution_tools.py +0 -0
  148. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/mcp/tools/execution_tools_backup.py +0 -0
  149. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/mcp/tools/intelligence_tool_registry.py +0 -0
  150. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/mcp/tools/monitoring_tools.py +0 -0
  151. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/mcp/tools/monitoring_tools.py.backup +0 -0
  152. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/mcp/tools/progress_tools.py +0 -0
  153. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/mcp/tools/utility_tools.py +0 -0
  154. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/mcp/tools/workflow_executor.py +0 -0
  155. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/mcp/websocket/__init__.py +0 -0
  156. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/mcp/websocket/app.py +0 -0
  157. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/mcp/websocket/endpoints.py +0 -0
  158. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/mcp/websocket/jobs.py +0 -0
  159. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/mcp/websocket/monitoring_endpoints.py +0 -0
  160. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/mcp/websocket/server.py +0 -0
  161. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/mcp/websocket/websocket_handler.py +0 -0
  162. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/mcp/websocket_server.py +0 -0
  163. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/mixins/__init__.py +0 -0
  164. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/mixins/error_handling.py +0 -0
  165. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/models/__init__.py +0 -0
  166. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/models/config.py +0 -0
  167. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/models/config_adapter.py +0 -0
  168. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/models/protocols.py +0 -0
  169. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/models/resource_protocols.py +0 -0
  170. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/models/task.py +0 -0
  171. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/monitoring/__init__.py +0 -0
  172. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/monitoring/ai_agent_watchdog.py +0 -0
  173. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/monitoring/metrics_collector.py +0 -0
  174. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/monitoring/regression_prevention.py +0 -0
  175. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/monitoring/websocket_server.py +0 -0
  176. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/orchestration/__init__.py +0 -0
  177. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/orchestration/advanced_orchestrator.py +0 -0
  178. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/orchestration/coverage_improvement.py +0 -0
  179. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/orchestration/test_progress_streamer.py +0 -0
  180. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/plugins/__init__.py +0 -0
  181. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/plugins/base.py +0 -0
  182. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/plugins/managers.py +0 -0
  183. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/pyproject.toml +0 -0
  184. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/security/__init__.py +0 -0
  185. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/security/audit.py +0 -0
  186. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/services/__init__.py +0 -0
  187. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/services/anomaly_detector.py +0 -0
  188. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/services/api_extractor.py +0 -0
  189. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/services/backup_service.py +0 -0
  190. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/services/bounded_status_operations.py +0 -0
  191. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/services/cache.py +0 -0
  192. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/services/changelog_automation.py +0 -0
  193. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/services/config.py +0 -0
  194. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/services/config_integrity.py +0 -0
  195. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/services/config_merge.py +0 -0
  196. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/services/config_template.py +0 -0
  197. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/services/contextual_ai_assistant.py +0 -0
  198. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/services/coverage_badge_service.py +0 -0
  199. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/services/coverage_ratchet.py +0 -0
  200. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/services/debug.py +0 -0
  201. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/services/dependency_monitor.py +0 -0
  202. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/services/documentation_generator.py +0 -0
  203. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/services/documentation_service.py +0 -0
  204. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/services/enhanced_filesystem.py +0 -0
  205. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/services/enterprise_optimizer.py +0 -0
  206. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/services/file_hasher.py +0 -0
  207. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/services/filesystem.py +0 -0
  208. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/services/git.py +0 -0
  209. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/services/health_metrics.py +0 -0
  210. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/services/heatmap_generator.py +0 -0
  211. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/services/initialization.py +0 -0
  212. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/services/input_validator.py +0 -0
  213. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/services/intelligent_commit.py +0 -0
  214. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/services/log_manager.py +0 -0
  215. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/services/logging.py +0 -0
  216. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/services/lsp_client.py +0 -0
  217. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/services/memory_optimizer.py +0 -0
  218. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/services/metrics.py +0 -0
  219. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/services/pattern_cache.py +0 -0
  220. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/services/pattern_detector.py +0 -0
  221. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/services/performance_monitor.py +0 -0
  222. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/services/predictive_analytics.py +0 -0
  223. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/services/quality_baseline.py +0 -0
  224. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/services/quality_baseline_enhanced.py +0 -0
  225. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/services/regex_patterns.py +0 -0
  226. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/services/regex_utils.py +0 -0
  227. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/services/secure_path_utils.py +0 -0
  228. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/services/secure_status_formatter.py +0 -0
  229. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/services/secure_subprocess.py +0 -0
  230. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/services/security.py +0 -0
  231. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/services/security_logger.py +0 -0
  232. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/services/server_manager.py +0 -0
  233. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/services/smart_scheduling.py +0 -0
  234. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/services/status_authentication.py +0 -0
  235. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/services/status_security_manager.py +0 -0
  236. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/services/terminal_utils.py +0 -0
  237. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/services/thread_safe_status_collector.py +0 -0
  238. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/services/tool_version_service.py +0 -0
  239. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/services/unified_config.py +0 -0
  240. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/services/validation_rate_limiter.py +0 -0
  241. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/services/version_analyzer.py +0 -0
  242. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/services/version_checker.py +0 -0
  243. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/services/websocket_resource_limiter.py +0 -0
  244. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/services/zuban_lsp_service.py +0 -0
  245. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/slash_commands/__init__.py +0 -0
  246. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/slash_commands/init.md +0 -0
  247. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/slash_commands/run.md +0 -0
  248. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/slash_commands/status.md +0 -0
  249. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/tools/__init__.py +0 -0
  250. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/tools/fix_terminal.sh +0 -0
  251. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/tools/validate_input_validator_patterns.py +0 -0
  252. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/tools/validate_regex_patterns.py +0 -0
  253. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/ui/__init__.py +0 -0
  254. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/ui/server_panels.py +0 -0
  255. {crackerjack-0.38.0 → crackerjack-0.38.1}/crackerjack/uv.lock +0 -0
  256. {crackerjack-0.38.0 → crackerjack-0.38.1}/docs/architecture/API_REFERENCE.md +0 -0
  257. {crackerjack-0.38.0 → crackerjack-0.38.1}/docs/architecture/ARCHITECTURE.md +0 -0
  258. {crackerjack-0.38.0 → crackerjack-0.38.1}/docs/archive/CONFIG_MANAGEMENT_REPLACEMENT_PLAN.md +0 -0
  259. {crackerjack-0.38.0 → crackerjack-0.38.1}/docs/archive/CONFIG_MERGE_REMOVAL_PLAN.md +0 -0
  260. {crackerjack-0.38.0 → crackerjack-0.38.1}/docs/archive/DOCUMENTATION_REORGANIZATION_PLAN.md +0 -0
  261. {crackerjack-0.38.0 → crackerjack-0.38.1}/docs/development/IDE-SETUP.md +0 -0
  262. {crackerjack-0.38.0 → crackerjack-0.38.1}/docs/development/RUST_TOOLING_FRAMEWORK.md +0 -0
  263. {crackerjack-0.38.0 → crackerjack-0.38.1}/docs/planning/COMPLEXITY_REFACTORING_PLAN.md +0 -0
  264. {crackerjack-0.38.0 → crackerjack-0.38.1}/docs/planning/COVERAGE_BADGE_IMPLEMENTATION_PLAN.md +0 -0
  265. {crackerjack-0.38.0 → crackerjack-0.38.1}/docs/planning/CURRENT_IMPLEMENTATION_STATUS.md +0 -0
  266. {crackerjack-0.38.0 → crackerjack-0.38.1}/docs/planning/DOCUMENTATION_SYSTEM_ARCHITECTURE.md +0 -0
  267. {crackerjack-0.38.0 → crackerjack-0.38.1}/docs/planning/EXPERIMENTAL-EVALUATION.md +0 -0
  268. {crackerjack-0.38.0 → crackerjack-0.38.1}/docs/planning/FEATURE_IMPLEMENTATION_PLAN.md +0 -0
  269. {crackerjack-0.38.0 → crackerjack-0.38.1}/docs/planning/RESILIENT_HOOK_ARCHITECTURE_IMPLEMENTATION_SUMMARY.md +0 -0
  270. {crackerjack-0.38.0 → crackerjack-0.38.1}/docs/planning/RESILIENT_HOOK_ARCHITECTURE_PLAN.md +0 -0
  271. {crackerjack-0.38.0 → crackerjack-0.38.1}/docs/planning/STAGE_HEADERS_IMPLEMENTATION_PLAN.md +0 -0
  272. {crackerjack-0.38.0 → crackerjack-0.38.1}/docs/planning/TIMEOUT_ARCHITECTURE_SOLUTION.md +0 -0
  273. {crackerjack-0.38.0 → crackerjack-0.38.1}/docs/planning/TYPE_ANNOTATION_FIXING_PLAN.md +0 -0
  274. {crackerjack-0.38.0 → crackerjack-0.38.1}/docs/planning/UVXUSAGE.md +0 -0
  275. {crackerjack-0.38.0 → crackerjack-0.38.1}/docs/planning/ZUBAN_LSP_INTEGRATION_PLAN.md +0 -0
  276. {crackerjack-0.38.0 → crackerjack-0.38.1}/docs/planning/ZUBAN_TOML_PARSING_BUG_ANALYSIS.md +0 -0
  277. {crackerjack-0.38.0 → crackerjack-0.38.1}/docs/security/INPUT_VALIDATOR_SECURITY_AUDIT.md +0 -0
  278. {crackerjack-0.38.0 → crackerjack-0.38.1}/docs/security/SECURITY-AUDIT.md +0 -0
  279. {crackerjack-0.38.0 → crackerjack-0.38.1}/docs/security/SECURITY_AUDIT_REPORT.md +0 -0
  280. {crackerjack-0.38.0 → crackerjack-0.38.1}/docs/security/SECURITY_AUDIT_STATUS_DISCLOSURE.md +0 -0
  281. {crackerjack-0.38.0 → crackerjack-0.38.1}/docs/security/SECURITY_HARDENING_REPORT.md +0 -0
  282. {crackerjack-0.38.0 → crackerjack-0.38.1}/docs/security/SECURITY_SUBPROCESS_HARDENING_REPORT.md +0 -0
  283. {crackerjack-0.38.0 → crackerjack-0.38.1}/docs/systems/BACKUP_SYSTEM.md +0 -0
  284. {crackerjack-0.38.0 → crackerjack-0.38.1}/docs/systems/CACHING_SYSTEM.md +0 -0
  285. {crackerjack-0.38.0 → crackerjack-0.38.1}/docs/systems/DASHBOARD_ARCHITECTURE.md +0 -0
  286. {crackerjack-0.38.0 → crackerjack-0.38.1}/docs/systems/MCP_INTEGRATION.md +0 -0
  287. {crackerjack-0.38.0 → crackerjack-0.38.1}/docs/systems/MONITORING_INTEGRATION.md +0 -0
  288. {crackerjack-0.38.0 → crackerjack-0.38.1}/docs/systems/UNIFIED_MONITORING_ARCHITECTURE.md +0 -0
  289. {crackerjack-0.38.0 → crackerjack-0.38.1}/example.mcp.json +0 -0
  290. {crackerjack-0.38.0 → crackerjack-0.38.1}/excalidraw.log +0 -0
  291. {crackerjack-0.38.0 → crackerjack-0.38.1}/mypy.ini +0 -0
  292. {crackerjack-0.38.0 → crackerjack-0.38.1}/scripts/__init__.py +0 -0
  293. {crackerjack-0.38.0 → crackerjack-0.38.1}/scripts/integrate_resource_management.py +0 -0
  294. {crackerjack-0.38.0 → crackerjack-0.38.1}/scripts/performance_benchmark.py +0 -0
  295. {crackerjack-0.38.0 → crackerjack-0.38.1}/templates/api_reference.md.template +0 -0
  296. {crackerjack-0.38.0 → crackerjack-0.38.1}/templates/changelog_entry.md.template +0 -0
  297. {crackerjack-0.38.0 → crackerjack-0.38.1}/templates/user_guide.md.template +0 -0
  298. {crackerjack-0.38.0 → crackerjack-0.38.1}/test_docs_site/site/docs/api-reference.md +0 -0
  299. {crackerjack-0.38.0 → crackerjack-0.38.1}/test_docs_site/site/docs/getting-started.md +0 -0
  300. {crackerjack-0.38.0 → crackerjack-0.38.1}/test_docs_site/site/docs/index.md +0 -0
  301. {crackerjack-0.38.0 → crackerjack-0.38.1}/test_docs_site/site/docs/stylesheets/extra.css +0 -0
  302. {crackerjack-0.38.0 → crackerjack-0.38.1}/test_docs_site/site/mkdocs.yml +0 -0
  303. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/__init__.py +0 -0
  304. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/base_test.py +0 -0
  305. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/conftest.py +0 -0
  306. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/coverage.json +0 -0
  307. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/data/__init__.py +0 -0
  308. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/data/comments_sample.txt +0 -0
  309. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/data/docstrings_sample.txt +0 -0
  310. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/data/expected_comments_sample.txt +0 -0
  311. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/data/init.py +0 -0
  312. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/docs/HEALTH_METRICS_TESTING_SUMMARY.md +0 -0
  313. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/docs/TEST_COVERAGE_PLAN.md +0 -0
  314. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/docs/TEST_IMPLEMENTATION_PLAN.md +0 -0
  315. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/run_tests.py +0 -0
  316. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/scripts/__init__.py +0 -0
  317. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/scripts/agent_audit_report.py +0 -0
  318. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/scripts/run_test_suite.py +0 -0
  319. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/test___main__.py +0 -0
  320. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/test_ai_agent_workflow.py +0 -0
  321. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/test_ai_optimized_documentation.py +0 -0
  322. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/test_api.py +0 -0
  323. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/test_async_hook_executor.py +0 -0
  324. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/test_changelog_generation.py +0 -0
  325. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/test_cli/__init__.py +0 -0
  326. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/test_cli/test_global_lock_options.py +0 -0
  327. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/test_cli_semantic_naming.py +0 -0
  328. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/test_coordinator_performance.py +0 -0
  329. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/test_core_autofix_coordinator.py +0 -0
  330. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/test_core_comprehensive.py +0 -0
  331. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/test_core_coverage.py +0 -0
  332. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/test_core_enhanced_container.py +0 -0
  333. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/test_core_modules.py +0 -0
  334. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/test_core_performance.py +0 -0
  335. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/test_documentation_agent_simple.py +0 -0
  336. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/test_dynamic_config.py +0 -0
  337. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/test_dynamic_config_coverage.py +0 -0
  338. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/test_end_to_end_integration.py +0 -0
  339. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/test_enhanced_filesystem.py +0 -0
  340. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/test_enhanced_filesystem_comprehensive.py +0 -0
  341. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/test_enhanced_filesystem_coverage.py +0 -0
  342. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/test_execution_speed_optimization.py +0 -0
  343. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/test_executors/__init__.py +0 -0
  344. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/test_executors/test_lock_integration.py +0 -0
  345. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/test_fast_hooks_behavior.py +0 -0
  346. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/test_filesystem_coverage.py +0 -0
  347. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/test_final_validation.py +0 -0
  348. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/test_global_lock_config.py +0 -0
  349. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/test_hook_lock_manager.py +0 -0
  350. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/test_hook_manager_simple.py +0 -0
  351. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/test_import_coverage_consolidated.py +0 -0
  352. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/test_input_validation.py +0 -0
  353. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/test_intelligence_system.py +0 -0
  354. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/test_interactive.py +0 -0
  355. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/test_main_entry_coverage.py +0 -0
  356. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/test_main_module.py +0 -0
  357. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/test_managers_consolidated.py +0 -0
  358. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/test_mcp_progress_monitor.py +0 -0
  359. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/test_mcp_server.py +0 -0
  360. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/test_models_comprehensive.py +0 -0
  361. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/test_models_config_adapter_coverage.py +0 -0
  362. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/test_models_focused.py +0 -0
  363. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/test_models_task_coverage.py +0 -0
  364. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/test_performance_agent_enhanced.py +0 -0
  365. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/test_performance_agent_simple.py +0 -0
  366. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/test_performance_benchmarks_focused.py.bak +0 -0
  367. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/test_phase_coordinator_simple.py +0 -0
  368. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/test_plugins_coverage.py +0 -0
  369. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/test_proactive_agent_system.py +0 -0
  370. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/test_protocol_compliance.py +0 -0
  371. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/test_publish_manager_coverage.py +0 -0
  372. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/test_pytest_features.py +0 -0
  373. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/test_regex_patterns.py +0 -0
  374. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/test_resource_cleanup_integration.py +0 -0
  375. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/test_secure_path_utils.py +0 -0
  376. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/test_secure_status_formatter.py +0 -0
  377. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/test_security_audit.py +0 -0
  378. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/test_security_hardening.py +0 -0
  379. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/test_security_integration.py +0 -0
  380. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/test_services_coverage.py +0 -0
  381. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/test_session_coordinator.py +0 -0
  382. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/test_session_coordinator_coverage.py +0 -0
  383. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/test_simple_tool_version_service.py +0 -0
  384. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/test_simple_workflow.py +0 -0
  385. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/test_stage_workflow_execution_order.py +0 -0
  386. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/test_structured_errors.py +0 -0
  387. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/test_structured_logging.py +0 -0
  388. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/test_syntax_validation.py +0 -0
  389. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/test_terminal_restoration.py +0 -0
  390. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/test_terminal_state.py +0 -0
  391. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/test_timeout_system.py +0 -0
  392. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/test_unified_config.py +0 -0
  393. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/test_unified_monitoring_dashboard.py +0 -0
  394. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/test_validate_regex_patterns_tool.py +0 -0
  395. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/test_version_analyzer.py +0 -0
  396. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/test_version_bump_analyzer.py +0 -0
  397. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/test_websocket_endpoints.py +0 -0
  398. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/test_workflow_fast_hooks.py +0 -0
  399. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/test_workflow_integration.py +0 -0
  400. {crackerjack-0.38.0 → crackerjack-0.38.1}/tests/test_workflow_orchestrator.py +0 -0
  401. {crackerjack-0.38.0 → crackerjack-0.38.1}/tools/validate_regex_patterns_standalone.py +0 -0
@@ -5,6 +5,16 @@ 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.38.1] - 2025-09-18
9
+
10
+ ### Changed
11
+
12
+ - Crackerjack (quality: 76/100) - 2025-09-18 03:07:52
13
+
14
+ ### Fixed
15
+
16
+ - crackerjack: Update 8 files
17
+
8
18
  ## [0.38.0] - 2025-09-17
9
19
 
10
20
  ### Changed
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: crackerjack
3
- Version: 0.38.0
3
+ Version: 0.38.1
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
@@ -67,13 +67,14 @@ Description-Content-Type: text/markdown
67
67
 
68
68
  # Crackerjack: Advanced AI-Driven Python Development Platform
69
69
 
70
+ [![Code style: crackerjack](https://img.shields.io/badge/code%20style-crackerjack-000042)](https://github.com/lesleslie/crackerjack)
70
71
  [![Python: 3.13+](https://img.shields.io/badge/python-3.13%2B-green)](https://www.python.org/downloads/)
71
72
  [![pytest](https://img.shields.io/badge/pytest-coverage%20ratchet-blue)](https://pytest.org)
72
73
  [![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)
73
74
  [![uv](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/uv/main/assets/badge/v0.json)](https://github.com/astral-sh/uv)
74
75
  [![pre-commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit)](https://github.com/pre-commit/pre-commit)
75
76
  [![License](https://img.shields.io/badge/License-BSD%203--Clause-blue.svg)](https://opensource.org/licenses/BSD-3-Clause)
76
- ![Coverage](https://img.shields.io/badge/coverage-37.1%25-red)
77
+ ![Coverage](https://img.shields.io/badge/coverage-37.0%25-red)
77
78
 
78
79
  ## 🎯 Purpose
79
80
 
@@ -1,12 +1,13 @@
1
1
  # Crackerjack: Advanced AI-Driven Python Development Platform
2
2
 
3
+ [![Code style: crackerjack](https://img.shields.io/badge/code%20style-crackerjack-000042)](https://github.com/lesleslie/crackerjack)
3
4
  [![Python: 3.13+](https://img.shields.io/badge/python-3.13%2B-green)](https://www.python.org/downloads/)
4
5
  [![pytest](https://img.shields.io/badge/pytest-coverage%20ratchet-blue)](https://pytest.org)
5
6
  [![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)
6
7
  [![uv](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/uv/main/assets/badge/v0.json)](https://github.com/astral-sh/uv)
7
8
  [![pre-commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit)](https://github.com/pre-commit/pre-commit)
8
9
  [![License](https://img.shields.io/badge/License-BSD%203--Clause-blue.svg)](https://opensource.org/licenses/BSD-3-Clause)
9
- ![Coverage](https://img.shields.io/badge/coverage-37.1%25-red)
10
+ ![Coverage](https://img.shields.io/badge/coverage-37.0%25-red)
10
11
 
11
12
  ## 🎯 Purpose
12
13
 
@@ -11,6 +11,7 @@ from crackerjack.services.git import GitService
11
11
 
12
12
  from .cli import (
13
13
  CLI_OPTIONS,
14
+ BumpOption,
14
15
  create_options,
15
16
  handle_interactive_mode,
16
17
  handle_standard_mode,
@@ -1219,9 +1220,9 @@ def main(
1219
1220
  update_precommit: bool = CLI_OPTIONS["update_precommit"],
1220
1221
  verbose: bool = CLI_OPTIONS["verbose"],
1221
1222
  debug: bool = CLI_OPTIONS["debug"],
1222
- publish: str | None = CLI_OPTIONS["publish"],
1223
+ publish: BumpOption | None = CLI_OPTIONS["publish"],
1223
1224
  all: str | None = CLI_OPTIONS["all"],
1224
- bump: str | None = CLI_OPTIONS["bump"],
1225
+ bump: BumpOption | None = CLI_OPTIONS["bump"],
1225
1226
  strip_code: bool = CLI_OPTIONS["strip_code"],
1226
1227
  run_tests: bool = CLI_OPTIONS["run_tests"],
1227
1228
  benchmark: bool = CLI_OPTIONS["benchmark"],
@@ -1466,6 +1467,10 @@ def _process_all_commands(local_vars: t.Any, console: t.Any, options: t.Any) ->
1466
1467
  ):
1467
1468
  return False
1468
1469
 
1470
+ # Handle coverage status command
1471
+ if not _handle_coverage_status(local_vars["coverage_status"], console, options):
1472
+ return False
1473
+
1469
1474
  # Handle documentation and analysis commands
1470
1475
  return _handle_analysis_commands(local_vars, console, options)
1471
1476
 
@@ -1538,6 +1543,78 @@ def _handle_specialized_analytics(local_vars: t.Any, console: t.Any) -> bool:
1538
1543
  return _handle_enterprise_features(local_vars, console)
1539
1544
 
1540
1545
 
1546
+ def _handle_coverage_status(
1547
+ coverage_status: bool, console: t.Any, options: t.Any
1548
+ ) -> bool:
1549
+ """Handle coverage status display command."""
1550
+ if not coverage_status:
1551
+ return True
1552
+
1553
+ try:
1554
+ from pathlib import Path
1555
+
1556
+ from crackerjack.managers.test_manager import TestManager
1557
+
1558
+ # Use current working directory as package path
1559
+ pkg_path = Path.cwd()
1560
+
1561
+ # Create test manager directly
1562
+ test_manager = TestManager(console, pkg_path)
1563
+
1564
+ console.print("[cyan]📊[/cyan] Coverage Status Report")
1565
+ console.print("=" * 50)
1566
+
1567
+ # Get coverage information
1568
+ coverage_info = test_manager.get_coverage()
1569
+ coverage_percent = coverage_info.get("coverage_percent", 0.0)
1570
+ coverage_source = coverage_info.get("source", "unknown")
1571
+
1572
+ if coverage_percent > 0:
1573
+ console.print(
1574
+ f"[green]Current Coverage:[/green] {coverage_percent:.2f}% (from {coverage_source})"
1575
+ )
1576
+ else:
1577
+ console.print(
1578
+ "[yellow]Current Coverage:[/yellow] No coverage data available"
1579
+ )
1580
+
1581
+ # Show status message if available
1582
+ status_message = coverage_info.get("message")
1583
+ if status_message:
1584
+ console.print(f"[dim]{status_message}[/dim]")
1585
+
1586
+ # Try to get more detailed coverage report
1587
+ coverage_report = test_manager.get_coverage_report()
1588
+ if coverage_report:
1589
+ console.print(f"[cyan]Details:[/cyan] {coverage_report}")
1590
+
1591
+ # Show coverage ratchet status if available
1592
+ try:
1593
+ ratchet_status = test_manager.get_coverage_ratchet_status()
1594
+ if ratchet_status:
1595
+ next_milestone = ratchet_status.get("next_milestone")
1596
+ if next_milestone:
1597
+ console.print(f"[cyan]Next Milestone:[/cyan] {next_milestone:.0f}%")
1598
+
1599
+ milestones = ratchet_status.get("milestones_achieved", [])
1600
+ if milestones:
1601
+ console.print(
1602
+ f"[green]Milestones Achieved:[/green] {len(milestones)}"
1603
+ )
1604
+ except Exception:
1605
+ pass # Ignore ratchet status errors
1606
+
1607
+ console.print()
1608
+ return False # Exit after showing status
1609
+
1610
+ except Exception as e:
1611
+ console.print(f"[red]❌[/red] Failed to get coverage status: {e}")
1612
+ import traceback
1613
+
1614
+ console.print(f"[dim]{traceback.format_exc()}[/dim]")
1615
+ return False
1616
+
1617
+
1541
1618
  def _handle_enterprise_features(local_vars: t.Any, console: t.Any) -> bool:
1542
1619
  """Handle enterprise features."""
1543
1620
  # Handle enterprise optimizer
@@ -934,8 +934,8 @@ def create_options(
934
934
  update_precommit: bool,
935
935
  verbose: bool,
936
936
  debug: bool,
937
- publish: str | None,
938
- bump: str | None,
937
+ publish: BumpOption | None,
938
+ bump: BumpOption | None,
939
939
  benchmark: bool,
940
940
  test_workers: int,
941
941
  test_timeout: int,
@@ -66,6 +66,7 @@ class WorkflowPipeline:
66
66
  self._cache = get_performance_cache()
67
67
 
68
68
  # Initialize quality intelligence for advanced decision making
69
+ self._quality_intelligence: QualityIntelligenceService | None
69
70
  try:
70
71
  quality_baseline = EnhancedQualityBaselineService()
71
72
  self._quality_intelligence = QualityIntelligenceService(quality_baseline)
@@ -74,6 +75,7 @@ class WorkflowPipeline:
74
75
  self._quality_intelligence = None
75
76
 
76
77
  # Initialize performance benchmarking for workflow analysis
78
+ self._performance_benchmarks: PerformanceBenchmarkService | None
77
79
  try:
78
80
  self._performance_benchmarks = PerformanceBenchmarkService(
79
81
  console, pkg_path
@@ -241,7 +243,7 @@ class WorkflowPipeline:
241
243
  self.logger.warning(f"Failed to auto-start Zuban LSP server: {e}")
242
244
 
243
245
  def _get_zuban_lsp_config(
244
- self, options: OptionsProtocol, config: any
246
+ self, options: OptionsProtocol, config: t.Any
245
247
  ) -> tuple[int, str]:
246
248
  """Get Zuban LSP configuration values."""
247
249
  if config:
@@ -384,7 +386,7 @@ class WorkflowPipeline:
384
386
 
385
387
  def _gather_performance_metrics(
386
388
  self, workflow_id: str, duration: float, success: bool
387
- ) -> dict:
389
+ ) -> dict[str, t.Any]:
388
390
  """Gather performance metrics from workflow execution."""
389
391
  return {
390
392
  "workflow_id": workflow_id,
@@ -622,7 +624,7 @@ class WorkflowPipeline:
622
624
  comprehensive_passed,
623
625
  ) = await self._run_main_quality_phases_async(options, workflow_id)
624
626
 
625
- return await self._handle_workflow_completion(
627
+ return await self._handle_ai_workflow_completion(
626
628
  options, iteration, testing_passed, comprehensive_passed, workflow_id
627
629
  )
628
630
 
@@ -650,7 +652,7 @@ class WorkflowPipeline:
650
652
  self._mark_code_cleaning_complete()
651
653
  return True
652
654
 
653
- async def _handle_workflow_completion(
655
+ async def _handle_ai_workflow_completion(
654
656
  self,
655
657
  options: OptionsProtocol,
656
658
  iteration: int,
@@ -156,7 +156,7 @@ class PublishManagerImpl:
156
156
  self.console.print(f"[red]❌[/ red] Version bump failed: {e}")
157
157
  raise
158
158
 
159
- def _prompt_for_version_type(self, recommendation=None) -> str:
159
+ def _prompt_for_version_type(self, recommendation: t.Any = None) -> str:
160
160
  try:
161
161
  from rich.prompt import Prompt
162
162
 
@@ -178,7 +178,7 @@ class PublishManagerImpl:
178
178
  )
179
179
  return "patch"
180
180
 
181
- def _get_version_recommendation(self):
181
+ def _get_version_recommendation(self) -> t.Any:
182
182
  """Get AI-powered version bump recommendation based on git history."""
183
183
  try:
184
184
  import asyncio
@@ -217,7 +217,7 @@ class PublishManagerImpl:
217
217
  self.console.print(f"[yellow]⚠️[/yellow] Version analysis failed: {e}")
218
218
  return None
219
219
 
220
- def _display_version_analysis(self, recommendation):
220
+ def _display_version_analysis(self, recommendation: t.Any) -> None:
221
221
  """Display version analysis in a compact format."""
222
222
  if not recommendation:
223
223
  return
@@ -132,21 +132,54 @@ class TestManager:
132
132
  try:
133
133
  status = self.coverage_ratchet.get_status_report()
134
134
 
135
- if status.get("status") == "not_initialized":
135
+ # Check if we have actual coverage data from coverage.json even if ratchet is not initialized
136
+ coverage_json_path = self.pkg_path / "coverage.json"
137
+ direct_coverage = None
138
+
139
+ if coverage_json_path.exists():
140
+ try:
141
+ import json
142
+
143
+ with coverage_json_path.open() as f:
144
+ data = json.load(f)
145
+ direct_coverage = data.get("totals", {}).get("percent_covered")
146
+ except (json.JSONDecodeError, KeyError):
147
+ pass # Fall back to ratchet data
148
+
149
+ # If ratchet is not initialized but we have direct coverage data, use it
150
+ if (
151
+ not status or status.get("status") == "not_initialized"
152
+ ) and direct_coverage is not None:
153
+ return {
154
+ "status": "coverage_available",
155
+ "coverage_percent": direct_coverage,
156
+ "message": "Coverage data available from coverage.json",
157
+ "source": "coverage.json",
158
+ }
159
+
160
+ # If ratchet is not initialized and no direct coverage, return not initialized
161
+ if not status or status.get("status") == "not_initialized":
136
162
  return {
137
163
  "status": "not_initialized",
138
164
  "coverage_percent": 0.0,
139
165
  "message": "Coverage ratchet not initialized",
140
166
  }
141
167
 
168
+ # Use ratchet data, but prefer direct coverage if available and different
169
+ ratchet_coverage = status.get("current_coverage", 0.0)
170
+ final_coverage = (
171
+ direct_coverage if direct_coverage is not None else ratchet_coverage
172
+ )
173
+
142
174
  return {
143
175
  "status": "active",
144
- "coverage_percent": status.get("current_coverage", 0.0),
176
+ "coverage_percent": final_coverage,
145
177
  "target_coverage": status.get("target_coverage", 100.0),
146
178
  "next_milestone": status.get("next_milestone"),
147
179
  "progress_percent": status.get("progress_percent", 0.0),
148
180
  "last_updated": status.get("last_updated"),
149
181
  "milestones_achieved": status.get("milestones_achieved", []),
182
+ "source": "coverage.json" if direct_coverage is not None else "ratchet",
150
183
  }
151
184
  except Exception as e:
152
185
  return {
@@ -235,25 +268,64 @@ class TestManager:
235
268
  current_coverage = None
236
269
  coverage_json_path = self.pkg_path / "coverage.json"
237
270
 
271
+ # Primary: Try to extract from coverage.json
238
272
  if coverage_json_path.exists():
239
- with coverage_json_path.open() as f:
240
- data = json.load(f)
241
- current_coverage = data.get("totals", {}).get("percent_covered")
273
+ try:
274
+ with coverage_json_path.open() as f:
275
+ data = json.load(f)
276
+ current_coverage = data.get("totals", {}).get("percent_covered")
277
+ if current_coverage is not None:
278
+ self.console.print(
279
+ f"[dim]📊 Coverage extracted from coverage.json: {current_coverage:.2f}%[/dim]"
280
+ )
281
+ except (json.JSONDecodeError, KeyError) as e:
282
+ self.console.print(
283
+ f"[yellow]⚠️[/yellow] Failed to parse coverage.json: {e}"
284
+ )
242
285
 
243
- # Fallback to ratchet result if coverage.json not available
286
+ # Secondary: Try ratchet result if coverage.json failed
244
287
  if current_coverage is None:
245
288
  current_coverage = ratchet_result.get("current_coverage")
289
+ if current_coverage is not None:
290
+ self.console.print(
291
+ f"[dim]📊 Coverage from ratchet result: {current_coverage:.2f}%[/dim]"
292
+ )
246
293
 
247
- # Final fallback to coverage service
294
+ # Tertiary: Try coverage service, but only accept non-zero values
248
295
  if current_coverage is None:
249
296
  coverage_info = self.get_coverage()
250
- current_coverage = coverage_info.get("coverage_percent")
297
+ fallback_coverage = coverage_info.get("coverage_percent")
298
+ # Only use fallback if it's meaningful (>0) or if no coverage.json exists
299
+ if fallback_coverage and (
300
+ fallback_coverage > 0 or not coverage_json_path.exists()
301
+ ):
302
+ current_coverage = fallback_coverage
303
+ self.console.print(
304
+ f"[dim]📊 Coverage from service fallback: {current_coverage:.2f}%[/dim]"
305
+ )
306
+ else:
307
+ self.console.print(
308
+ "[yellow]⚠️[/yellow] Skipping 0.0% fallback when coverage.json exists"
309
+ )
251
310
 
252
- if current_coverage is not None:
311
+ # Only update badge if we have valid coverage data
312
+ if current_coverage is not None and current_coverage >= 0:
253
313
  if self._coverage_badge_service.should_update_badge(current_coverage):
254
314
  self._coverage_badge_service.update_readme_coverage_badge(
255
315
  current_coverage
256
316
  )
317
+ self.console.print(
318
+ f"[green]✅[/green] Badge updated to {current_coverage:.2f}%"
319
+ )
320
+ else:
321
+ self.console.print(
322
+ f"[dim]📊 Badge unchanged (current: {current_coverage:.2f}%)[/dim]"
323
+ )
324
+ else:
325
+ self.console.print(
326
+ "[yellow]⚠️[/yellow] No valid coverage data found for badge update"
327
+ )
328
+
257
329
  except Exception as e:
258
330
  # Don't fail the test process if badge update fails
259
331
  self.console.print(f"[yellow]⚠️[/yellow] Badge update failed: {e}")
@@ -5,10 +5,20 @@ import typing as t
5
5
  from collections.abc import Callable
6
6
  from pathlib import Path
7
7
 
8
+ # Type aliases for watchdog types
9
+ FileSystemEvent: t.Any
10
+ FileSystemEventHandler: t.Any
11
+ Observer: t.Any
12
+ WATCHDOG_AVAILABLE: bool
13
+
8
14
  try:
9
- from watchdog.events import FileSystemEvent, FileSystemEventHandler
10
- from watchdog.observers import Observer
15
+ from watchdog.events import FileSystemEvent as WatchdogFileSystemEvent
16
+ from watchdog.events import FileSystemEventHandler as WatchdogFileSystemEventHandler
17
+ from watchdog.observers import Observer as WatchdogObserver
11
18
 
19
+ FileSystemEvent = WatchdogFileSystemEvent
20
+ FileSystemEventHandler = WatchdogFileSystemEventHandler
21
+ Observer = WatchdogObserver
12
22
  WATCHDOG_AVAILABLE = True
13
23
  except ImportError:
14
24
  # Type stubs for when watchdog is not available
@@ -35,14 +35,18 @@ class RateLimiter:
35
35
  self.requests_per_hour = requests_per_hour
36
36
 
37
37
  self.minute_windows: dict[str, deque[float]] = defaultdict(
38
- lambda: deque(maxlen=requests_per_minute), # type: ignore[misc]
38
+ lambda: deque[float](maxlen=requests_per_minute), # type: ignore[arg-type,misc]
39
39
  )
40
40
  self.hour_windows: dict[str, deque[float]] = defaultdict(
41
- lambda: deque(maxlen=requests_per_hour), # type: ignore[misc]
41
+ lambda: deque[float](maxlen=requests_per_hour), # type: ignore[arg-type,misc]
42
42
  )
43
43
 
44
- self.global_minute_window: deque[float] = deque(maxlen=requests_per_minute * 10)
45
- self.global_hour_window: deque[float] = deque(maxlen=requests_per_hour * 10)
44
+ self.global_minute_window: deque[float] = deque[float](
45
+ maxlen=requests_per_minute * 10
46
+ )
47
+ self.global_hour_window: deque[float] = deque[float](
48
+ maxlen=requests_per_hour * 10
49
+ )
46
50
 
47
51
  self._lock = asyncio.Lock()
48
52
 
@@ -126,7 +130,7 @@ class RateLimiter:
126
130
  self._remove_expired_entries(self.global_minute_window, minute_cutoff)
127
131
  self._remove_expired_entries(self.global_hour_window, hour_cutoff)
128
132
 
129
- def _remove_expired_entries(self, window: deque, cutoff: float) -> None:
133
+ def _remove_expired_entries(self, window: deque[float], cutoff: float) -> None:
130
134
  while window and window[0] < cutoff:
131
135
  window.popleft()
132
136
 
@@ -3,6 +3,7 @@ import socket
3
3
  import subprocess
4
4
  import sys
5
5
  import time
6
+ from contextlib import suppress
6
7
  from typing import Any
7
8
 
8
9
  import aiohttp
@@ -34,7 +35,7 @@ class ServiceConfig:
34
35
  self.max_restarts = max_restarts
35
36
  self.restart_window = restart_window
36
37
 
37
- self.process: subprocess.Popen[bytes] | None = None
38
+ self.process: subprocess.Popen[str] | None = None
38
39
  self.restart_count = 0
39
40
  self.restart_timestamps: list[float] = []
40
41
  self.last_health_check = 0.0
@@ -125,7 +126,7 @@ class ServiceWatchdog:
125
126
  return False
126
127
 
127
128
  async def _launch_service_process(self, service: ServiceConfig) -> bool:
128
- service.process = subprocess.Popen(
129
+ service.process = subprocess.Popen[str](
129
130
  service.command,
130
131
  stdout=subprocess.PIPE,
131
132
  stderr=subprocess.PIPE,
@@ -137,6 +138,8 @@ class ServiceWatchdog:
137
138
  return await self._check_process_startup_success(service)
138
139
 
139
140
  async def _check_process_startup_success(self, service: ServiceConfig) -> bool:
141
+ if service.process is None:
142
+ return False
140
143
  exit_code = service.process.poll()
141
144
  if exit_code is not None:
142
145
  return await self._handle_process_died(service, exit_code)
@@ -147,6 +150,8 @@ class ServiceWatchdog:
147
150
  service: ServiceConfig,
148
151
  exit_code: int,
149
152
  ) -> bool:
153
+ if service.process is None:
154
+ return False
150
155
  stdout, stderr = service.process.communicate()
151
156
  error_msg = f"Process died (exit: {exit_code})"
152
157
  if stderr and stderr.strip():
@@ -441,8 +446,6 @@ class ServiceWatchdog:
441
446
  message: str,
442
447
  ) -> None:
443
448
  if self.event_queue:
444
- from contextlib import suppress
445
-
446
449
  with suppress(Exception):
447
450
  event = {
448
451
  "type": event_type,
@@ -147,7 +147,7 @@ async def get_smart_agent_recommendation(
147
147
  context=task_context,
148
148
  )
149
149
 
150
- response = {
150
+ response: dict[str, t.Any] = {
151
151
  "task_description": task_description,
152
152
  "context_type": context_type,
153
153
  }
@@ -119,7 +119,7 @@ def _create_validation_results(file_path: str) -> dict[str, t.Any]:
119
119
 
120
120
 
121
121
  def _create_pattern_suggestions(problem_context: str) -> dict[str, t.Any]:
122
- pattern_suggestions = {
122
+ pattern_suggestions: dict[str, t.Any] = {
123
123
  "context": problem_context,
124
124
  "recommended_patterns": [],
125
125
  "implementation_guidance": [],
@@ -262,10 +262,10 @@ class OrchestrationPlanner:
262
262
  hook_plans=hook_plans,
263
263
  test_plan=test_plan,
264
264
  ai_plan=ai_plan,
265
- estimated_total_duration=sum(
266
- int(plan["estimated_duration"]) for plan in hook_plans
265
+ estimated_total_duration=float(
266
+ sum(int(float(str(plan["estimated_duration"]))) for plan in hook_plans)
267
267
  )
268
- + test_plan["estimated_duration"],
268
+ + float(test_plan["estimated_duration"]),
269
269
  )
270
270
 
271
271
  def _estimate_strategy_duration(self, strategy: HookStrategy) -> float:
@@ -131,6 +131,7 @@ class CustomHookPlugin(HookPluginBase):
131
131
  try:
132
132
  if hook_def.command is None:
133
133
  return HookResult(
134
+ id=f"hook_{hook_def.name}",
134
135
  name=hook_def.name,
135
136
  status="failed",
136
137
  issues_found=["Hook command is None"],
@@ -132,7 +132,7 @@ class PluginLoader:
132
132
 
133
133
  def _try_factory_function(
134
134
  self,
135
- factory: t.Callable,
135
+ factory: t.Callable[..., t.Any],
136
136
  name: str,
137
137
  ) -> PluginBase | None:
138
138
  try:
@@ -67,10 +67,10 @@ class DependencyEdge:
67
67
  class DependencyGraph:
68
68
  """Complete dependency graph data structure."""
69
69
 
70
- nodes: dict[str, DependencyNode] = field(default_factory=dict[str, t.Any])
70
+ nodes: dict[str, DependencyNode] = field(default_factory=dict)
71
71
  edges: list[DependencyEdge] = field(default_factory=list)
72
- clusters: dict[str, list[str]] = field(default_factory=dict[str, t.Any])
73
- metrics: dict[str, t.Any] = field(default_factory=dict[str, t.Any])
72
+ clusters: dict[str, list[str]] = field(default_factory=dict)
73
+ metrics: dict[str, t.Any] = field(default_factory=dict)
74
74
  generated_at: datetime = field(default_factory=datetime.now)
75
75
 
76
76
  def to_dict(self) -> dict[str, t.Any]:
@@ -193,7 +193,7 @@ class DependencyAnalyzer:
193
193
  edges = self.dependency_graph.edges
194
194
 
195
195
  # Basic metrics
196
- metrics = {
196
+ metrics: dict[str, t.Any] = {
197
197
  "total_nodes": len(nodes),
198
198
  "total_edges": len(edges),
199
199
  "total_clusters": len(self.dependency_graph.clusters),
@@ -157,7 +157,7 @@ class ErrorPatternAnalyzer:
157
157
  error_type = pattern.error_type
158
158
  count = pattern.count
159
159
 
160
- file_error_counts[file_path][error_type] += count
160
+ file_error_counts[file_path][error_type] += float(count)
161
161
  max_value = max(max_value, file_error_counts[file_path][error_type])
162
162
 
163
163
  # Create heat map cells
@@ -175,7 +175,7 @@ class ErrorPatternAnalyzer:
175
175
  for error_type in error_types:
176
176
  count = file_error_counts[file_path].get(error_type, 0)
177
177
  if count > 0:
178
- intensity: float = count / max_value if max_value > 0 else 0
178
+ intensity: float = count / max_value if max_value > 0 else 0.0
179
179
  severity = self._get_severity_for_type(error_type)
180
180
 
181
181
  cells.append(
@@ -313,7 +313,7 @@ class ErrorPatternAnalyzer:
313
313
  self, time_label: str, error_type: str, count: float, max_value: float
314
314
  ) -> HeatMapCell:
315
315
  """Create a single temporal heatmap cell."""
316
- intensity: float = count / max_value if max_value > 0 else 0
316
+ intensity: float = count / max_value if max_value > 0 else 0.0
317
317
  severity = self._get_severity_for_type(error_type)
318
318
 
319
319
  return HeatMapCell(
@@ -405,7 +405,7 @@ class ErrorPatternAnalyzer:
405
405
  self, function_id: str, error_type: str, count: float, max_value: float
406
406
  ) -> HeatMapCell:
407
407
  """Create a single function heatmap cell."""
408
- intensity: float = count / max_value if max_value > 0 else 0
408
+ intensity: float = count / max_value if max_value > 0 else 0.0
409
409
  severity = self._get_severity_for_type(error_type)
410
410
 
411
411
  return HeatMapCell(
@@ -239,7 +239,7 @@ class ParallelHookExecutor:
239
239
  f"Hook {hooks[i].name} failed with exception: {result}"
240
240
  )
241
241
  else:
242
- processed_results.append(result)
242
+ processed_results.append(t.cast(ExecutionResult, result))
243
243
 
244
244
  successful = sum(1 for r in processed_results if r.success)
245
245
  self._logger.info(
@@ -307,7 +307,7 @@ class AsyncCommandExecutor:
307
307
  )
308
308
  processed_results.append(error_result)
309
309
  else:
310
- processed_results.append(result)
310
+ processed_results.append(t.cast(ExecutionResult, result))
311
311
 
312
312
  successful = sum(1 for r in processed_results if r.success)
313
313
  self._logger.info(
@@ -7,6 +7,8 @@ from dataclasses import dataclass, field
7
7
  from datetime import datetime
8
8
  from pathlib import Path
9
9
 
10
+ from rich.console import Console
11
+
10
12
  from crackerjack.services.logging import get_logger
11
13
  from crackerjack.services.memory_optimizer import get_memory_optimizer
12
14
  from crackerjack.services.performance_cache import get_performance_cache
@@ -301,7 +303,7 @@ class PerformanceBenchmarker:
301
303
  class PerformanceBenchmarkService:
302
304
  """Service wrapper for performance benchmarking in workflow orchestration."""
303
305
 
304
- def __init__(self, console, pkg_path):
306
+ def __init__(self, console: Console, pkg_path: Path) -> None:
305
307
  self._console = console
306
308
  self._pkg_path = pkg_path
307
309
  self._benchmarker = PerformanceBenchmarker()