crackerjack 0.18.2__py3-none-any.whl → 0.45.2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (533) hide show
  1. crackerjack/README.md +19 -0
  2. crackerjack/__init__.py +96 -2
  3. crackerjack/__main__.py +637 -138
  4. crackerjack/adapters/README.md +18 -0
  5. crackerjack/adapters/__init__.py +39 -0
  6. crackerjack/adapters/_output_paths.py +167 -0
  7. crackerjack/adapters/_qa_adapter_base.py +309 -0
  8. crackerjack/adapters/_tool_adapter_base.py +706 -0
  9. crackerjack/adapters/ai/README.md +65 -0
  10. crackerjack/adapters/ai/__init__.py +5 -0
  11. crackerjack/adapters/ai/claude.py +853 -0
  12. crackerjack/adapters/complexity/README.md +53 -0
  13. crackerjack/adapters/complexity/__init__.py +10 -0
  14. crackerjack/adapters/complexity/complexipy.py +641 -0
  15. crackerjack/adapters/dependency/__init__.py +22 -0
  16. crackerjack/adapters/dependency/pip_audit.py +418 -0
  17. crackerjack/adapters/format/README.md +72 -0
  18. crackerjack/adapters/format/__init__.py +11 -0
  19. crackerjack/adapters/format/mdformat.py +313 -0
  20. crackerjack/adapters/format/ruff.py +516 -0
  21. crackerjack/adapters/lint/README.md +47 -0
  22. crackerjack/adapters/lint/__init__.py +11 -0
  23. crackerjack/adapters/lint/codespell.py +273 -0
  24. crackerjack/adapters/lsp/README.md +49 -0
  25. crackerjack/adapters/lsp/__init__.py +27 -0
  26. crackerjack/adapters/lsp/_base.py +194 -0
  27. crackerjack/adapters/lsp/_client.py +358 -0
  28. crackerjack/adapters/lsp/_manager.py +193 -0
  29. crackerjack/adapters/lsp/skylos.py +283 -0
  30. crackerjack/adapters/lsp/zuban.py +557 -0
  31. crackerjack/adapters/refactor/README.md +59 -0
  32. crackerjack/adapters/refactor/__init__.py +12 -0
  33. crackerjack/adapters/refactor/creosote.py +318 -0
  34. crackerjack/adapters/refactor/refurb.py +406 -0
  35. crackerjack/adapters/refactor/skylos.py +494 -0
  36. crackerjack/adapters/sast/README.md +132 -0
  37. crackerjack/adapters/sast/__init__.py +32 -0
  38. crackerjack/adapters/sast/_base.py +201 -0
  39. crackerjack/adapters/sast/bandit.py +423 -0
  40. crackerjack/adapters/sast/pyscn.py +405 -0
  41. crackerjack/adapters/sast/semgrep.py +241 -0
  42. crackerjack/adapters/security/README.md +111 -0
  43. crackerjack/adapters/security/__init__.py +17 -0
  44. crackerjack/adapters/security/gitleaks.py +339 -0
  45. crackerjack/adapters/type/README.md +52 -0
  46. crackerjack/adapters/type/__init__.py +12 -0
  47. crackerjack/adapters/type/pyrefly.py +402 -0
  48. crackerjack/adapters/type/ty.py +402 -0
  49. crackerjack/adapters/type/zuban.py +522 -0
  50. crackerjack/adapters/utility/README.md +51 -0
  51. crackerjack/adapters/utility/__init__.py +10 -0
  52. crackerjack/adapters/utility/checks.py +884 -0
  53. crackerjack/agents/README.md +264 -0
  54. crackerjack/agents/__init__.py +66 -0
  55. crackerjack/agents/architect_agent.py +238 -0
  56. crackerjack/agents/base.py +167 -0
  57. crackerjack/agents/claude_code_bridge.py +641 -0
  58. crackerjack/agents/coordinator.py +600 -0
  59. crackerjack/agents/documentation_agent.py +520 -0
  60. crackerjack/agents/dry_agent.py +585 -0
  61. crackerjack/agents/enhanced_coordinator.py +279 -0
  62. crackerjack/agents/enhanced_proactive_agent.py +185 -0
  63. crackerjack/agents/error_middleware.py +53 -0
  64. crackerjack/agents/formatting_agent.py +230 -0
  65. crackerjack/agents/helpers/__init__.py +9 -0
  66. crackerjack/agents/helpers/performance/__init__.py +22 -0
  67. crackerjack/agents/helpers/performance/performance_ast_analyzer.py +357 -0
  68. crackerjack/agents/helpers/performance/performance_pattern_detector.py +909 -0
  69. crackerjack/agents/helpers/performance/performance_recommender.py +572 -0
  70. crackerjack/agents/helpers/refactoring/__init__.py +22 -0
  71. crackerjack/agents/helpers/refactoring/code_transformer.py +536 -0
  72. crackerjack/agents/helpers/refactoring/complexity_analyzer.py +344 -0
  73. crackerjack/agents/helpers/refactoring/dead_code_detector.py +437 -0
  74. crackerjack/agents/helpers/test_creation/__init__.py +19 -0
  75. crackerjack/agents/helpers/test_creation/test_ast_analyzer.py +216 -0
  76. crackerjack/agents/helpers/test_creation/test_coverage_analyzer.py +643 -0
  77. crackerjack/agents/helpers/test_creation/test_template_generator.py +1031 -0
  78. crackerjack/agents/import_optimization_agent.py +1181 -0
  79. crackerjack/agents/performance_agent.py +325 -0
  80. crackerjack/agents/performance_helpers.py +205 -0
  81. crackerjack/agents/proactive_agent.py +55 -0
  82. crackerjack/agents/refactoring_agent.py +511 -0
  83. crackerjack/agents/refactoring_helpers.py +247 -0
  84. crackerjack/agents/security_agent.py +793 -0
  85. crackerjack/agents/semantic_agent.py +479 -0
  86. crackerjack/agents/semantic_helpers.py +356 -0
  87. crackerjack/agents/test_creation_agent.py +570 -0
  88. crackerjack/agents/test_specialist_agent.py +526 -0
  89. crackerjack/agents/tracker.py +110 -0
  90. crackerjack/api.py +647 -0
  91. crackerjack/cli/README.md +394 -0
  92. crackerjack/cli/__init__.py +24 -0
  93. crackerjack/cli/cache_handlers.py +209 -0
  94. crackerjack/cli/cache_handlers_enhanced.py +680 -0
  95. crackerjack/cli/facade.py +162 -0
  96. crackerjack/cli/formatting.py +13 -0
  97. crackerjack/cli/handlers/__init__.py +85 -0
  98. crackerjack/cli/handlers/advanced.py +103 -0
  99. crackerjack/cli/handlers/ai_features.py +62 -0
  100. crackerjack/cli/handlers/analytics.py +479 -0
  101. crackerjack/cli/handlers/changelog.py +271 -0
  102. crackerjack/cli/handlers/config_handlers.py +16 -0
  103. crackerjack/cli/handlers/coverage.py +84 -0
  104. crackerjack/cli/handlers/documentation.py +280 -0
  105. crackerjack/cli/handlers/main_handlers.py +497 -0
  106. crackerjack/cli/handlers/monitoring.py +371 -0
  107. crackerjack/cli/handlers.py +700 -0
  108. crackerjack/cli/interactive.py +488 -0
  109. crackerjack/cli/options.py +1216 -0
  110. crackerjack/cli/semantic_handlers.py +292 -0
  111. crackerjack/cli/utils.py +19 -0
  112. crackerjack/cli/version.py +19 -0
  113. crackerjack/code_cleaner.py +1307 -0
  114. crackerjack/config/README.md +472 -0
  115. crackerjack/config/__init__.py +275 -0
  116. crackerjack/config/global_lock_config.py +207 -0
  117. crackerjack/config/hooks.py +390 -0
  118. crackerjack/config/loader.py +239 -0
  119. crackerjack/config/settings.py +141 -0
  120. crackerjack/config/tool_commands.py +331 -0
  121. crackerjack/core/README.md +393 -0
  122. crackerjack/core/__init__.py +0 -0
  123. crackerjack/core/async_workflow_orchestrator.py +738 -0
  124. crackerjack/core/autofix_coordinator.py +282 -0
  125. crackerjack/core/container.py +105 -0
  126. crackerjack/core/enhanced_container.py +583 -0
  127. crackerjack/core/file_lifecycle.py +472 -0
  128. crackerjack/core/performance.py +244 -0
  129. crackerjack/core/performance_monitor.py +357 -0
  130. crackerjack/core/phase_coordinator.py +1227 -0
  131. crackerjack/core/proactive_workflow.py +267 -0
  132. crackerjack/core/resource_manager.py +425 -0
  133. crackerjack/core/retry.py +275 -0
  134. crackerjack/core/service_watchdog.py +601 -0
  135. crackerjack/core/session_coordinator.py +239 -0
  136. crackerjack/core/timeout_manager.py +563 -0
  137. crackerjack/core/websocket_lifecycle.py +410 -0
  138. crackerjack/core/workflow/__init__.py +21 -0
  139. crackerjack/core/workflow/workflow_ai_coordinator.py +863 -0
  140. crackerjack/core/workflow/workflow_event_orchestrator.py +1107 -0
  141. crackerjack/core/workflow/workflow_issue_parser.py +714 -0
  142. crackerjack/core/workflow/workflow_phase_executor.py +1158 -0
  143. crackerjack/core/workflow/workflow_security_gates.py +400 -0
  144. crackerjack/core/workflow_orchestrator.py +2243 -0
  145. crackerjack/data/README.md +11 -0
  146. crackerjack/data/__init__.py +8 -0
  147. crackerjack/data/models.py +79 -0
  148. crackerjack/data/repository.py +210 -0
  149. crackerjack/decorators/README.md +180 -0
  150. crackerjack/decorators/__init__.py +35 -0
  151. crackerjack/decorators/error_handling.py +649 -0
  152. crackerjack/decorators/error_handling_decorators.py +334 -0
  153. crackerjack/decorators/helpers.py +58 -0
  154. crackerjack/decorators/patterns.py +281 -0
  155. crackerjack/decorators/utils.py +58 -0
  156. crackerjack/docs/INDEX.md +11 -0
  157. crackerjack/docs/README.md +11 -0
  158. crackerjack/docs/generated/api/API_REFERENCE.md +10895 -0
  159. crackerjack/docs/generated/api/CLI_REFERENCE.md +109 -0
  160. crackerjack/docs/generated/api/CROSS_REFERENCES.md +1755 -0
  161. crackerjack/docs/generated/api/PROTOCOLS.md +3 -0
  162. crackerjack/docs/generated/api/SERVICES.md +1252 -0
  163. crackerjack/documentation/README.md +11 -0
  164. crackerjack/documentation/__init__.py +31 -0
  165. crackerjack/documentation/ai_templates.py +756 -0
  166. crackerjack/documentation/dual_output_generator.py +767 -0
  167. crackerjack/documentation/mkdocs_integration.py +518 -0
  168. crackerjack/documentation/reference_generator.py +1065 -0
  169. crackerjack/dynamic_config.py +678 -0
  170. crackerjack/errors.py +378 -0
  171. crackerjack/events/README.md +11 -0
  172. crackerjack/events/__init__.py +16 -0
  173. crackerjack/events/telemetry.py +175 -0
  174. crackerjack/events/workflow_bus.py +346 -0
  175. crackerjack/exceptions/README.md +301 -0
  176. crackerjack/exceptions/__init__.py +5 -0
  177. crackerjack/exceptions/config.py +4 -0
  178. crackerjack/exceptions/tool_execution_error.py +245 -0
  179. crackerjack/executors/README.md +591 -0
  180. crackerjack/executors/__init__.py +13 -0
  181. crackerjack/executors/async_hook_executor.py +938 -0
  182. crackerjack/executors/cached_hook_executor.py +316 -0
  183. crackerjack/executors/hook_executor.py +1295 -0
  184. crackerjack/executors/hook_lock_manager.py +708 -0
  185. crackerjack/executors/individual_hook_executor.py +739 -0
  186. crackerjack/executors/lsp_aware_hook_executor.py +349 -0
  187. crackerjack/executors/progress_hook_executor.py +282 -0
  188. crackerjack/executors/tool_proxy.py +433 -0
  189. crackerjack/hooks/README.md +485 -0
  190. crackerjack/hooks/lsp_hook.py +93 -0
  191. crackerjack/intelligence/README.md +557 -0
  192. crackerjack/intelligence/__init__.py +37 -0
  193. crackerjack/intelligence/adaptive_learning.py +693 -0
  194. crackerjack/intelligence/agent_orchestrator.py +485 -0
  195. crackerjack/intelligence/agent_registry.py +377 -0
  196. crackerjack/intelligence/agent_selector.py +439 -0
  197. crackerjack/intelligence/integration.py +250 -0
  198. crackerjack/interactive.py +719 -0
  199. crackerjack/managers/README.md +369 -0
  200. crackerjack/managers/__init__.py +11 -0
  201. crackerjack/managers/async_hook_manager.py +135 -0
  202. crackerjack/managers/hook_manager.py +585 -0
  203. crackerjack/managers/publish_manager.py +631 -0
  204. crackerjack/managers/test_command_builder.py +391 -0
  205. crackerjack/managers/test_executor.py +474 -0
  206. crackerjack/managers/test_manager.py +1357 -0
  207. crackerjack/managers/test_progress.py +187 -0
  208. crackerjack/mcp/README.md +374 -0
  209. crackerjack/mcp/__init__.py +0 -0
  210. crackerjack/mcp/cache.py +352 -0
  211. crackerjack/mcp/client_runner.py +121 -0
  212. crackerjack/mcp/context.py +802 -0
  213. crackerjack/mcp/dashboard.py +657 -0
  214. crackerjack/mcp/enhanced_progress_monitor.py +493 -0
  215. crackerjack/mcp/file_monitor.py +394 -0
  216. crackerjack/mcp/progress_components.py +607 -0
  217. crackerjack/mcp/progress_monitor.py +1016 -0
  218. crackerjack/mcp/rate_limiter.py +336 -0
  219. crackerjack/mcp/server.py +24 -0
  220. crackerjack/mcp/server_core.py +526 -0
  221. crackerjack/mcp/service_watchdog.py +505 -0
  222. crackerjack/mcp/state.py +407 -0
  223. crackerjack/mcp/task_manager.py +259 -0
  224. crackerjack/mcp/tools/README.md +27 -0
  225. crackerjack/mcp/tools/__init__.py +19 -0
  226. crackerjack/mcp/tools/core_tools.py +469 -0
  227. crackerjack/mcp/tools/error_analyzer.py +283 -0
  228. crackerjack/mcp/tools/execution_tools.py +384 -0
  229. crackerjack/mcp/tools/intelligence_tool_registry.py +46 -0
  230. crackerjack/mcp/tools/intelligence_tools.py +264 -0
  231. crackerjack/mcp/tools/monitoring_tools.py +628 -0
  232. crackerjack/mcp/tools/proactive_tools.py +367 -0
  233. crackerjack/mcp/tools/progress_tools.py +222 -0
  234. crackerjack/mcp/tools/semantic_tools.py +584 -0
  235. crackerjack/mcp/tools/utility_tools.py +358 -0
  236. crackerjack/mcp/tools/workflow_executor.py +699 -0
  237. crackerjack/mcp/websocket/README.md +31 -0
  238. crackerjack/mcp/websocket/__init__.py +14 -0
  239. crackerjack/mcp/websocket/app.py +54 -0
  240. crackerjack/mcp/websocket/endpoints.py +492 -0
  241. crackerjack/mcp/websocket/event_bridge.py +188 -0
  242. crackerjack/mcp/websocket/jobs.py +406 -0
  243. crackerjack/mcp/websocket/monitoring/__init__.py +25 -0
  244. crackerjack/mcp/websocket/monitoring/api/__init__.py +19 -0
  245. crackerjack/mcp/websocket/monitoring/api/dependencies.py +141 -0
  246. crackerjack/mcp/websocket/monitoring/api/heatmap.py +154 -0
  247. crackerjack/mcp/websocket/monitoring/api/intelligence.py +199 -0
  248. crackerjack/mcp/websocket/monitoring/api/metrics.py +203 -0
  249. crackerjack/mcp/websocket/monitoring/api/telemetry.py +101 -0
  250. crackerjack/mcp/websocket/monitoring/dashboard.py +18 -0
  251. crackerjack/mcp/websocket/monitoring/factory.py +109 -0
  252. crackerjack/mcp/websocket/monitoring/filters.py +10 -0
  253. crackerjack/mcp/websocket/monitoring/metrics.py +64 -0
  254. crackerjack/mcp/websocket/monitoring/models.py +90 -0
  255. crackerjack/mcp/websocket/monitoring/utils.py +171 -0
  256. crackerjack/mcp/websocket/monitoring/websocket_manager.py +78 -0
  257. crackerjack/mcp/websocket/monitoring/websockets/__init__.py +17 -0
  258. crackerjack/mcp/websocket/monitoring/websockets/dependencies.py +126 -0
  259. crackerjack/mcp/websocket/monitoring/websockets/heatmap.py +176 -0
  260. crackerjack/mcp/websocket/monitoring/websockets/intelligence.py +291 -0
  261. crackerjack/mcp/websocket/monitoring/websockets/metrics.py +291 -0
  262. crackerjack/mcp/websocket/monitoring_endpoints.py +21 -0
  263. crackerjack/mcp/websocket/server.py +174 -0
  264. crackerjack/mcp/websocket/websocket_handler.py +276 -0
  265. crackerjack/mcp/websocket_server.py +10 -0
  266. crackerjack/models/README.md +308 -0
  267. crackerjack/models/__init__.py +40 -0
  268. crackerjack/models/config.py +730 -0
  269. crackerjack/models/config_adapter.py +265 -0
  270. crackerjack/models/protocols.py +1535 -0
  271. crackerjack/models/pydantic_models.py +320 -0
  272. crackerjack/models/qa_config.py +145 -0
  273. crackerjack/models/qa_results.py +134 -0
  274. crackerjack/models/resource_protocols.py +299 -0
  275. crackerjack/models/results.py +35 -0
  276. crackerjack/models/semantic_models.py +258 -0
  277. crackerjack/models/task.py +173 -0
  278. crackerjack/models/test_models.py +60 -0
  279. crackerjack/monitoring/README.md +11 -0
  280. crackerjack/monitoring/__init__.py +0 -0
  281. crackerjack/monitoring/ai_agent_watchdog.py +405 -0
  282. crackerjack/monitoring/metrics_collector.py +427 -0
  283. crackerjack/monitoring/regression_prevention.py +580 -0
  284. crackerjack/monitoring/websocket_server.py +406 -0
  285. crackerjack/orchestration/README.md +340 -0
  286. crackerjack/orchestration/__init__.py +43 -0
  287. crackerjack/orchestration/advanced_orchestrator.py +894 -0
  288. crackerjack/orchestration/cache/README.md +312 -0
  289. crackerjack/orchestration/cache/__init__.py +37 -0
  290. crackerjack/orchestration/cache/memory_cache.py +338 -0
  291. crackerjack/orchestration/cache/tool_proxy_cache.py +340 -0
  292. crackerjack/orchestration/config.py +297 -0
  293. crackerjack/orchestration/coverage_improvement.py +180 -0
  294. crackerjack/orchestration/execution_strategies.py +361 -0
  295. crackerjack/orchestration/hook_orchestrator.py +1398 -0
  296. crackerjack/orchestration/strategies/README.md +401 -0
  297. crackerjack/orchestration/strategies/__init__.py +39 -0
  298. crackerjack/orchestration/strategies/adaptive_strategy.py +630 -0
  299. crackerjack/orchestration/strategies/parallel_strategy.py +237 -0
  300. crackerjack/orchestration/strategies/sequential_strategy.py +299 -0
  301. crackerjack/orchestration/test_progress_streamer.py +647 -0
  302. crackerjack/plugins/README.md +11 -0
  303. crackerjack/plugins/__init__.py +15 -0
  304. crackerjack/plugins/base.py +200 -0
  305. crackerjack/plugins/hooks.py +254 -0
  306. crackerjack/plugins/loader.py +335 -0
  307. crackerjack/plugins/managers.py +264 -0
  308. crackerjack/py313.py +191 -0
  309. crackerjack/security/README.md +11 -0
  310. crackerjack/security/__init__.py +0 -0
  311. crackerjack/security/audit.py +197 -0
  312. crackerjack/services/README.md +374 -0
  313. crackerjack/services/__init__.py +9 -0
  314. crackerjack/services/ai/README.md +295 -0
  315. crackerjack/services/ai/__init__.py +7 -0
  316. crackerjack/services/ai/advanced_optimizer.py +878 -0
  317. crackerjack/services/ai/contextual_ai_assistant.py +542 -0
  318. crackerjack/services/ai/embeddings.py +444 -0
  319. crackerjack/services/ai/intelligent_commit.py +328 -0
  320. crackerjack/services/ai/predictive_analytics.py +510 -0
  321. crackerjack/services/anomaly_detector.py +392 -0
  322. crackerjack/services/api_extractor.py +617 -0
  323. crackerjack/services/backup_service.py +467 -0
  324. crackerjack/services/bounded_status_operations.py +530 -0
  325. crackerjack/services/cache.py +369 -0
  326. crackerjack/services/changelog_automation.py +399 -0
  327. crackerjack/services/command_execution_service.py +305 -0
  328. crackerjack/services/config_integrity.py +132 -0
  329. crackerjack/services/config_merge.py +546 -0
  330. crackerjack/services/config_service.py +198 -0
  331. crackerjack/services/config_template.py +493 -0
  332. crackerjack/services/coverage_badge_service.py +173 -0
  333. crackerjack/services/coverage_ratchet.py +381 -0
  334. crackerjack/services/debug.py +733 -0
  335. crackerjack/services/dependency_analyzer.py +460 -0
  336. crackerjack/services/dependency_monitor.py +622 -0
  337. crackerjack/services/documentation_generator.py +493 -0
  338. crackerjack/services/documentation_service.py +704 -0
  339. crackerjack/services/enhanced_filesystem.py +497 -0
  340. crackerjack/services/enterprise_optimizer.py +865 -0
  341. crackerjack/services/error_pattern_analyzer.py +676 -0
  342. crackerjack/services/file_filter.py +221 -0
  343. crackerjack/services/file_hasher.py +149 -0
  344. crackerjack/services/file_io_service.py +361 -0
  345. crackerjack/services/file_modifier.py +615 -0
  346. crackerjack/services/filesystem.py +381 -0
  347. crackerjack/services/git.py +422 -0
  348. crackerjack/services/health_metrics.py +615 -0
  349. crackerjack/services/heatmap_generator.py +744 -0
  350. crackerjack/services/incremental_executor.py +380 -0
  351. crackerjack/services/initialization.py +823 -0
  352. crackerjack/services/input_validator.py +668 -0
  353. crackerjack/services/intelligent_commit.py +327 -0
  354. crackerjack/services/log_manager.py +289 -0
  355. crackerjack/services/logging.py +228 -0
  356. crackerjack/services/lsp_client.py +628 -0
  357. crackerjack/services/memory_optimizer.py +414 -0
  358. crackerjack/services/metrics.py +587 -0
  359. crackerjack/services/monitoring/README.md +30 -0
  360. crackerjack/services/monitoring/__init__.py +9 -0
  361. crackerjack/services/monitoring/dependency_monitor.py +678 -0
  362. crackerjack/services/monitoring/error_pattern_analyzer.py +676 -0
  363. crackerjack/services/monitoring/health_metrics.py +716 -0
  364. crackerjack/services/monitoring/metrics.py +587 -0
  365. crackerjack/services/monitoring/performance_benchmarks.py +410 -0
  366. crackerjack/services/monitoring/performance_cache.py +388 -0
  367. crackerjack/services/monitoring/performance_monitor.py +569 -0
  368. crackerjack/services/parallel_executor.py +527 -0
  369. crackerjack/services/pattern_cache.py +333 -0
  370. crackerjack/services/pattern_detector.py +478 -0
  371. crackerjack/services/patterns/__init__.py +142 -0
  372. crackerjack/services/patterns/agents.py +107 -0
  373. crackerjack/services/patterns/code/__init__.py +15 -0
  374. crackerjack/services/patterns/code/detection.py +118 -0
  375. crackerjack/services/patterns/code/imports.py +107 -0
  376. crackerjack/services/patterns/code/paths.py +159 -0
  377. crackerjack/services/patterns/code/performance.py +119 -0
  378. crackerjack/services/patterns/code/replacement.py +36 -0
  379. crackerjack/services/patterns/core.py +212 -0
  380. crackerjack/services/patterns/documentation/__init__.py +14 -0
  381. crackerjack/services/patterns/documentation/badges_markdown.py +96 -0
  382. crackerjack/services/patterns/documentation/comments_blocks.py +83 -0
  383. crackerjack/services/patterns/documentation/docstrings.py +89 -0
  384. crackerjack/services/patterns/formatting.py +226 -0
  385. crackerjack/services/patterns/operations.py +339 -0
  386. crackerjack/services/patterns/security/__init__.py +23 -0
  387. crackerjack/services/patterns/security/code_injection.py +122 -0
  388. crackerjack/services/patterns/security/credentials.py +190 -0
  389. crackerjack/services/patterns/security/path_traversal.py +221 -0
  390. crackerjack/services/patterns/security/unsafe_operations.py +216 -0
  391. crackerjack/services/patterns/templates.py +62 -0
  392. crackerjack/services/patterns/testing/__init__.py +18 -0
  393. crackerjack/services/patterns/testing/error_patterns.py +107 -0
  394. crackerjack/services/patterns/testing/pytest_output.py +126 -0
  395. crackerjack/services/patterns/tool_output/__init__.py +16 -0
  396. crackerjack/services/patterns/tool_output/bandit.py +72 -0
  397. crackerjack/services/patterns/tool_output/other.py +97 -0
  398. crackerjack/services/patterns/tool_output/pyright.py +67 -0
  399. crackerjack/services/patterns/tool_output/ruff.py +44 -0
  400. crackerjack/services/patterns/url_sanitization.py +114 -0
  401. crackerjack/services/patterns/utilities.py +42 -0
  402. crackerjack/services/patterns/utils.py +339 -0
  403. crackerjack/services/patterns/validation.py +46 -0
  404. crackerjack/services/patterns/versioning.py +62 -0
  405. crackerjack/services/predictive_analytics.py +523 -0
  406. crackerjack/services/profiler.py +280 -0
  407. crackerjack/services/quality/README.md +415 -0
  408. crackerjack/services/quality/__init__.py +11 -0
  409. crackerjack/services/quality/anomaly_detector.py +392 -0
  410. crackerjack/services/quality/pattern_cache.py +333 -0
  411. crackerjack/services/quality/pattern_detector.py +479 -0
  412. crackerjack/services/quality/qa_orchestrator.py +491 -0
  413. crackerjack/services/quality/quality_baseline.py +395 -0
  414. crackerjack/services/quality/quality_baseline_enhanced.py +649 -0
  415. crackerjack/services/quality/quality_intelligence.py +949 -0
  416. crackerjack/services/regex_patterns.py +58 -0
  417. crackerjack/services/regex_utils.py +483 -0
  418. crackerjack/services/secure_path_utils.py +524 -0
  419. crackerjack/services/secure_status_formatter.py +450 -0
  420. crackerjack/services/secure_subprocess.py +635 -0
  421. crackerjack/services/security.py +239 -0
  422. crackerjack/services/security_logger.py +495 -0
  423. crackerjack/services/server_manager.py +411 -0
  424. crackerjack/services/smart_scheduling.py +167 -0
  425. crackerjack/services/status_authentication.py +460 -0
  426. crackerjack/services/status_security_manager.py +315 -0
  427. crackerjack/services/terminal_utils.py +0 -0
  428. crackerjack/services/thread_safe_status_collector.py +441 -0
  429. crackerjack/services/tool_filter.py +368 -0
  430. crackerjack/services/tool_version_service.py +43 -0
  431. crackerjack/services/unified_config.py +115 -0
  432. crackerjack/services/validation_rate_limiter.py +220 -0
  433. crackerjack/services/vector_store.py +689 -0
  434. crackerjack/services/version_analyzer.py +461 -0
  435. crackerjack/services/version_checker.py +223 -0
  436. crackerjack/services/websocket_resource_limiter.py +438 -0
  437. crackerjack/services/zuban_lsp_service.py +391 -0
  438. crackerjack/slash_commands/README.md +11 -0
  439. crackerjack/slash_commands/__init__.py +59 -0
  440. crackerjack/slash_commands/init.md +112 -0
  441. crackerjack/slash_commands/run.md +197 -0
  442. crackerjack/slash_commands/status.md +127 -0
  443. crackerjack/tools/README.md +11 -0
  444. crackerjack/tools/__init__.py +30 -0
  445. crackerjack/tools/_git_utils.py +105 -0
  446. crackerjack/tools/check_added_large_files.py +139 -0
  447. crackerjack/tools/check_ast.py +105 -0
  448. crackerjack/tools/check_json.py +103 -0
  449. crackerjack/tools/check_jsonschema.py +297 -0
  450. crackerjack/tools/check_toml.py +103 -0
  451. crackerjack/tools/check_yaml.py +110 -0
  452. crackerjack/tools/codespell_wrapper.py +72 -0
  453. crackerjack/tools/end_of_file_fixer.py +202 -0
  454. crackerjack/tools/format_json.py +128 -0
  455. crackerjack/tools/mdformat_wrapper.py +114 -0
  456. crackerjack/tools/trailing_whitespace.py +198 -0
  457. crackerjack/tools/validate_input_validator_patterns.py +236 -0
  458. crackerjack/tools/validate_regex_patterns.py +188 -0
  459. crackerjack/ui/README.md +11 -0
  460. crackerjack/ui/__init__.py +1 -0
  461. crackerjack/ui/dashboard_renderer.py +28 -0
  462. crackerjack/ui/templates/README.md +11 -0
  463. crackerjack/utils/console_utils.py +13 -0
  464. crackerjack/utils/dependency_guard.py +230 -0
  465. crackerjack/utils/retry_utils.py +275 -0
  466. crackerjack/workflows/README.md +590 -0
  467. crackerjack/workflows/__init__.py +46 -0
  468. crackerjack/workflows/actions.py +811 -0
  469. crackerjack/workflows/auto_fix.py +444 -0
  470. crackerjack/workflows/container_builder.py +499 -0
  471. crackerjack/workflows/definitions.py +443 -0
  472. crackerjack/workflows/engine.py +177 -0
  473. crackerjack/workflows/event_bridge.py +242 -0
  474. crackerjack-0.45.2.dist-info/METADATA +1678 -0
  475. crackerjack-0.45.2.dist-info/RECORD +478 -0
  476. {crackerjack-0.18.2.dist-info → crackerjack-0.45.2.dist-info}/WHEEL +1 -1
  477. crackerjack-0.45.2.dist-info/entry_points.txt +2 -0
  478. crackerjack/.gitignore +0 -14
  479. crackerjack/.libcst.codemod.yaml +0 -18
  480. crackerjack/.pdm.toml +0 -1
  481. crackerjack/.pre-commit-config.yaml +0 -91
  482. crackerjack/.pytest_cache/.gitignore +0 -2
  483. crackerjack/.pytest_cache/CACHEDIR.TAG +0 -4
  484. crackerjack/.pytest_cache/README.md +0 -8
  485. crackerjack/.pytest_cache/v/cache/nodeids +0 -1
  486. crackerjack/.pytest_cache/v/cache/stepwise +0 -1
  487. crackerjack/.ruff_cache/.gitignore +0 -1
  488. crackerjack/.ruff_cache/0.1.11/3256171999636029978 +0 -0
  489. crackerjack/.ruff_cache/0.1.14/602324811142551221 +0 -0
  490. crackerjack/.ruff_cache/0.1.4/10355199064880463147 +0 -0
  491. crackerjack/.ruff_cache/0.1.6/15140459877605758699 +0 -0
  492. crackerjack/.ruff_cache/0.1.7/1790508110482614856 +0 -0
  493. crackerjack/.ruff_cache/0.1.9/17041001205004563469 +0 -0
  494. crackerjack/.ruff_cache/0.11.2/4070660268492669020 +0 -0
  495. crackerjack/.ruff_cache/0.11.3/9818742842212983150 +0 -0
  496. crackerjack/.ruff_cache/0.11.4/9818742842212983150 +0 -0
  497. crackerjack/.ruff_cache/0.11.6/3557596832929915217 +0 -0
  498. crackerjack/.ruff_cache/0.11.7/10386934055395314831 +0 -0
  499. crackerjack/.ruff_cache/0.11.7/3557596832929915217 +0 -0
  500. crackerjack/.ruff_cache/0.11.8/530407680854991027 +0 -0
  501. crackerjack/.ruff_cache/0.2.0/10047773857155985907 +0 -0
  502. crackerjack/.ruff_cache/0.2.1/8522267973936635051 +0 -0
  503. crackerjack/.ruff_cache/0.2.2/18053836298936336950 +0 -0
  504. crackerjack/.ruff_cache/0.3.0/12548816621480535786 +0 -0
  505. crackerjack/.ruff_cache/0.3.3/11081883392474770722 +0 -0
  506. crackerjack/.ruff_cache/0.3.4/676973378459347183 +0 -0
  507. crackerjack/.ruff_cache/0.3.5/16311176246009842383 +0 -0
  508. crackerjack/.ruff_cache/0.5.7/1493622539551733492 +0 -0
  509. crackerjack/.ruff_cache/0.5.7/6231957614044513175 +0 -0
  510. crackerjack/.ruff_cache/0.5.7/9932762556785938009 +0 -0
  511. crackerjack/.ruff_cache/0.6.0/11982804814124138945 +0 -0
  512. crackerjack/.ruff_cache/0.6.0/12055761203849489982 +0 -0
  513. crackerjack/.ruff_cache/0.6.2/1206147804896221174 +0 -0
  514. crackerjack/.ruff_cache/0.6.4/1206147804896221174 +0 -0
  515. crackerjack/.ruff_cache/0.6.5/1206147804896221174 +0 -0
  516. crackerjack/.ruff_cache/0.6.7/3657366982708166874 +0 -0
  517. crackerjack/.ruff_cache/0.6.9/285614542852677309 +0 -0
  518. crackerjack/.ruff_cache/0.7.1/1024065805990144819 +0 -0
  519. crackerjack/.ruff_cache/0.7.1/285614542852677309 +0 -0
  520. crackerjack/.ruff_cache/0.7.3/16061516852537040135 +0 -0
  521. crackerjack/.ruff_cache/0.8.4/16354268377385700367 +0 -0
  522. crackerjack/.ruff_cache/0.9.10/12813592349865671909 +0 -0
  523. crackerjack/.ruff_cache/0.9.10/923908772239632759 +0 -0
  524. crackerjack/.ruff_cache/0.9.3/13948373885254993391 +0 -0
  525. crackerjack/.ruff_cache/0.9.9/12813592349865671909 +0 -0
  526. crackerjack/.ruff_cache/0.9.9/8843823720003377982 +0 -0
  527. crackerjack/.ruff_cache/CACHEDIR.TAG +0 -1
  528. crackerjack/crackerjack.py +0 -855
  529. crackerjack/pyproject.toml +0 -214
  530. crackerjack-0.18.2.dist-info/METADATA +0 -420
  531. crackerjack-0.18.2.dist-info/RECORD +0 -59
  532. crackerjack-0.18.2.dist-info/entry_points.txt +0 -4
  533. {crackerjack-0.18.2.dist-info → crackerjack-0.45.2.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,493 @@
1
+ """Service for generating documentation from extracted API data."""
2
+
3
+ import typing as t
4
+ from pathlib import Path
5
+ from string import Template
6
+
7
+ from acb.console import Console
8
+ from acb.depends import Inject, depends
9
+
10
+ from ..models.protocols import DocumentationGeneratorProtocol
11
+
12
+
13
+ class MarkdownTemplateRenderer:
14
+ """Simple template renderer for markdown documentation."""
15
+
16
+ def __init__(self) -> None:
17
+ self.built_in_templates = self._init_builtin_templates()
18
+
19
+ def _init_builtin_templates(self) -> dict[str, Template]:
20
+ """Initialize built-in template strings."""
21
+ return {
22
+ "api_reference": Template(self._get_api_reference_template()),
23
+ "function_doc": Template(self._get_function_doc_template()),
24
+ "class_doc": Template(self._get_class_doc_template()),
25
+ "protocol_doc": Template(self._get_protocol_doc_template()),
26
+ "module_doc": Template(self._get_module_doc_template()),
27
+ }
28
+
29
+ def render_template(self, template_name: str, context: dict[str, t.Any]) -> str:
30
+ """Render a template with the given context."""
31
+ if template_name in self.built_in_templates:
32
+ template = self.built_in_templates[template_name]
33
+ return template.safe_substitute(context)
34
+
35
+ # Try to load external template file
36
+ template_path = Path(f"templates/{template_name}")
37
+ if template_path.exists():
38
+ content = template_path.read_text(encoding="utf-8")
39
+ template = Template(content)
40
+ return template.safe_substitute(context)
41
+
42
+ raise ValueError(f"Template '{template_name}' not found")
43
+
44
+ def _get_api_reference_template(self) -> str:
45
+ """Get the API reference template."""
46
+ return """# API Reference
47
+
48
+ ## Overview
49
+ $overview
50
+
51
+ ## Protocols
52
+ $protocols_section
53
+
54
+ ## Services
55
+ $services_section
56
+
57
+ ## Managers
58
+ $managers_section
59
+
60
+ ## Generated on: $timestamp
61
+ """
62
+
63
+ def _get_function_doc_template(self) -> str:
64
+ """Get the function documentation template."""
65
+ return """### $name
66
+
67
+ $description
68
+
69
+ **Parameters:**
70
+ $parameters
71
+
72
+ **Returns:** $returns
73
+
74
+ **Example:**
75
+ ```python
76
+ $example
77
+ ```
78
+
79
+ """
80
+
81
+ def _get_class_doc_template(self) -> str:
82
+ """Get the class documentation template."""
83
+ return """## $name
84
+
85
+ $description
86
+
87
+ **Base Classes:** $base_classes
88
+
89
+ ### Methods
90
+
91
+ $methods
92
+
93
+ """
94
+
95
+ def _get_protocol_doc_template(self) -> str:
96
+ """Get the protocol documentation template."""
97
+ return """## $name (Protocol)
98
+
99
+ $description
100
+
101
+ **Runtime Checkable:** $runtime_checkable
102
+
103
+ ### Required Methods
104
+
105
+ $methods
106
+
107
+ """
108
+
109
+ def _get_module_doc_template(self) -> str:
110
+ """Get the module documentation template."""
111
+ return """# $module_name
112
+
113
+ $description
114
+
115
+ ## Classes
116
+
117
+ $classes
118
+
119
+ ## Functions
120
+
121
+ $functions
122
+
123
+ """
124
+
125
+
126
+ class DocumentationGeneratorImpl(DocumentationGeneratorProtocol):
127
+ """Implementation of documentation generation from extracted API data."""
128
+
129
+ @depends.inject
130
+ def __init__(self, console: Inject[Console]) -> None:
131
+ self.console = console
132
+ self.renderer = MarkdownTemplateRenderer()
133
+
134
+ def generate_api_reference(self, api_data: dict[str, t.Any]) -> str:
135
+ """Generate complete API reference documentation."""
136
+ overview = self._generate_overview(api_data)
137
+ protocols_section = self._generate_protocols_section(
138
+ api_data.get("protocols", {})
139
+ )
140
+ services_section = self._generate_services_section(api_data.get("services", {}))
141
+ managers_section = self._generate_managers_section(api_data.get("managers", {}))
142
+
143
+ from datetime import datetime
144
+
145
+ timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
146
+
147
+ context = {
148
+ "overview": overview,
149
+ "protocols_section": protocols_section,
150
+ "services_section": services_section,
151
+ "managers_section": managers_section,
152
+ "timestamp": timestamp,
153
+ }
154
+
155
+ return self.renderer.render_template("api_reference", context)
156
+
157
+ def generate_user_guide(self, template_context: dict[str, t.Any]) -> str:
158
+ """Generate user guide documentation."""
159
+ sections: list[str] = []
160
+
161
+ # Generate getting started section
162
+ if "installation" in template_context:
163
+ sections.extend(
164
+ ("## Getting Started\n", template_context["installation"], "\n")
165
+ )
166
+
167
+ # Generate usage examples
168
+ if "examples" in template_context:
169
+ sections.append("## Usage Examples\n")
170
+ for example in template_context["examples"]:
171
+ sections.extend(
172
+ (
173
+ f"### {example.get('title', 'Example')}\n",
174
+ f"{example.get('description', '')}\n",
175
+ )
176
+ )
177
+ if "code" in example:
178
+ sections.append(f"```bash\n{example['code']}\n```\n")
179
+ sections.append("\n")
180
+
181
+ # Generate configuration section
182
+ if "configuration" in template_context:
183
+ sections.extend(
184
+ ("## Configuration\n", template_context["configuration"], "\n")
185
+ )
186
+
187
+ return "".join(sections)
188
+
189
+ def generate_changelog_update(self, version: str, changes: dict[str, t.Any]) -> str:
190
+ """Generate changelog entry for a version."""
191
+ from datetime import datetime
192
+
193
+ today = datetime.now().strftime("%Y-%m-%d")
194
+
195
+ lines = [f"## [{version}] - {today}\n"]
196
+
197
+ # Order sections by importance
198
+ section_order = [
199
+ ("Added", "added"),
200
+ ("Changed", "changed"),
201
+ ("Fixed", "fixed"),
202
+ ("Removed", "removed"),
203
+ ("Security", "security"),
204
+ ("Deprecated", "deprecated"),
205
+ ]
206
+
207
+ for section_title, section_key in section_order:
208
+ if section_key in changes and changes[section_key]:
209
+ lines.append(f"### {section_title}\n")
210
+ for change in changes[section_key]:
211
+ lines.append(f"- {change}\n")
212
+ lines.append("\n")
213
+
214
+ return "".join(lines)
215
+
216
+ def render_template(self, template_path: Path, context: dict[str, t.Any]) -> str:
217
+ """Render a template file with the given context."""
218
+ if not template_path.exists():
219
+ raise FileNotFoundError(f"Template not found: {template_path}")
220
+
221
+ content = template_path.read_text(encoding="utf-8")
222
+ template = Template(content)
223
+ return template.safe_substitute(context)
224
+
225
+ def generate_cross_references(
226
+ self, api_data: dict[str, t.Any]
227
+ ) -> dict[str, list[str]]:
228
+ """Generate cross-reference mappings for API components."""
229
+ cross_refs = {}
230
+
231
+ # Extract all API names
232
+ all_names = set()
233
+
234
+ # Add protocol names
235
+ protocols = api_data.get("protocols", {})
236
+ all_names.update(protocols.keys())
237
+
238
+ # Add class names from modules
239
+ modules = api_data.get("modules", {})
240
+ for module_data in modules.values():
241
+ all_names.update(
242
+ class_info["name"] for class_info in module_data.get("classes", [])
243
+ )
244
+ all_names.update(
245
+ func_info["name"] for func_info in module_data.get("functions", [])
246
+ )
247
+
248
+ # Generate cross-references by finding mentions
249
+ for name in all_names:
250
+ refs = self._find_references_to_name(name, api_data)
251
+ if refs:
252
+ cross_refs[name] = refs
253
+
254
+ return cross_refs
255
+
256
+ def _generate_overview(self, api_data: dict[str, t.Any]) -> str:
257
+ """Generate overview section for API documentation."""
258
+ stats = self._calculate_api_stats(api_data)
259
+
260
+ overview_lines = [
261
+ "This document provides comprehensive API reference for all protocols, services, and managers in the codebase.\n",
262
+ f"**Total Protocols:** {stats['protocols']}\n",
263
+ f"**Total Classes:** {stats['classes']}\n",
264
+ f"**Total Functions:** {stats['functions']}\n",
265
+ f"**Total Modules:** {stats['modules']}\n",
266
+ ]
267
+
268
+ return "".join(overview_lines)
269
+
270
+ def _generate_protocols_section(self, protocols: dict[str, t.Any]) -> str:
271
+ """Generate the protocols section of API documentation."""
272
+ if not protocols:
273
+ return "No protocols found.\n"
274
+
275
+ sections = []
276
+ for protocol_name, protocol_info in protocols.items():
277
+ context = {
278
+ "name": protocol_name,
279
+ "description": protocol_info.get("docstring", {}).get(
280
+ "description", "No description provided."
281
+ ),
282
+ "runtime_checkable": "Yes"
283
+ if protocol_info.get("runtime_checkable", False)
284
+ else "No",
285
+ "methods": self._format_methods(protocol_info.get("methods", [])),
286
+ }
287
+ sections.append(self.renderer.render_template("protocol_doc", context))
288
+
289
+ return "".join(sections)
290
+
291
+ def _generate_services_section(self, services: dict[str, t.Any]) -> str:
292
+ """Generate the services section of API documentation."""
293
+ if not services:
294
+ return "No services found.\n"
295
+
296
+ sections: list[str] = []
297
+ for service_name, service_info in services.items():
298
+ sections.extend(
299
+ (
300
+ f"## {service_name}\n",
301
+ f"**Path:** `{service_info.get('path', 'Unknown')}`\n\n",
302
+ )
303
+ )
304
+
305
+ if service_info.get("protocols_implemented"):
306
+ sections.append("**Implements Protocols:**\n")
307
+ for protocol in service_info["protocols_implemented"]:
308
+ sections.append(f"- {protocol}\n")
309
+ sections.append("\n")
310
+
311
+ # Add classes from this service
312
+ for class_info in service_info.get("classes", []):
313
+ context = {
314
+ "name": class_info["name"],
315
+ "description": class_info.get("docstring", {}).get(
316
+ "description", "No description provided."
317
+ ),
318
+ "base_classes": ", ".join(class_info.get("base_classes", []))
319
+ or "None",
320
+ "methods": self._format_methods(class_info.get("methods", [])),
321
+ }
322
+ sections.append(self.renderer.render_template("class_doc", context))
323
+
324
+ return "".join(sections)
325
+
326
+ def _generate_managers_section(self, managers: dict[str, t.Any]) -> str:
327
+ """Generate the managers section of API documentation."""
328
+ # Similar to services but focused on manager-specific functionality
329
+ return self._generate_services_section(managers) # Reuse services logic for now
330
+
331
+ def _format_methods(self, methods: list[dict[str, t.Any]]) -> str:
332
+ """Format method information for documentation."""
333
+ if not methods:
334
+ return "No methods defined.\n"
335
+
336
+ formatted_methods = []
337
+ for method in methods:
338
+ method_lines = [f"#### `{method['name']}`\n"]
339
+
340
+ # Add description
341
+ description = method.get("docstring", {}).get(
342
+ "description", "No description provided."
343
+ )
344
+ method_lines.append(f"{description}\n")
345
+
346
+ # Add parameters
347
+ parameters = method.get("parameters", [])
348
+ if parameters:
349
+ method_lines.append("**Parameters:**\n")
350
+ for param in parameters:
351
+ param_type = param.get("annotation", "Any")
352
+ param_desc = param.get("description", "No description")
353
+ method_lines.append(
354
+ f"- `{param['name']}` ({param_type}): {param_desc}\n"
355
+ )
356
+
357
+ # Add return type
358
+ return_annotation = method.get("return_annotation", "")
359
+ if return_annotation:
360
+ method_lines.append(f"**Returns:** {return_annotation}\n")
361
+
362
+ method_lines.append("\n")
363
+ formatted_methods.append("".join(method_lines))
364
+
365
+ return "".join(formatted_methods)
366
+
367
+ def _calculate_api_stats(self, api_data: dict[str, t.Any]) -> dict[str, int]:
368
+ """Calculate statistics about the API data."""
369
+ stats = {"protocols": 0, "classes": 0, "functions": 0, "modules": 0}
370
+
371
+ # Count protocols
372
+ protocols = api_data.get("protocols", {})
373
+ stats["protocols"] = len(protocols)
374
+
375
+ # Count modules, classes, and functions
376
+ modules = api_data.get("modules", {})
377
+ stats["modules"] = len(modules)
378
+
379
+ for module_data in modules.values():
380
+ stats["classes"] += len(module_data.get("classes", []))
381
+ stats["functions"] += len(module_data.get("functions", []))
382
+
383
+ return stats
384
+
385
+ def _find_references_to_name(
386
+ self, name: str, api_data: dict[str, t.Any]
387
+ ) -> list[str]:
388
+ """Find all places where an API component is referenced."""
389
+ references = []
390
+
391
+ # Search in protocols
392
+ protocol_refs = self._find_protocol_references(
393
+ name, api_data.get("protocols", {})
394
+ )
395
+ references.extend(protocol_refs)
396
+
397
+ # Search in modules/classes
398
+ module_refs = self._find_module_references(name, api_data.get("modules", {}))
399
+ references.extend(module_refs)
400
+
401
+ return references
402
+
403
+ def _find_protocol_references(
404
+ self, name: str, protocols: dict[str, t.Any]
405
+ ) -> list[str]:
406
+ """Find references in protocol definitions."""
407
+ references = []
408
+
409
+ for protocol_name, protocol_info in protocols.items():
410
+ method_refs = self._find_protocol_method_references(
411
+ name, protocol_name, protocol_info.get("methods", [])
412
+ )
413
+ references.extend(method_refs)
414
+
415
+ return references
416
+
417
+ def _find_protocol_method_references(
418
+ self, name: str, protocol_name: str, methods: list[dict[str, t.Any]]
419
+ ) -> list[str]:
420
+ """Find references in protocol method signatures."""
421
+ references = []
422
+
423
+ for method in methods:
424
+ # Check parameters
425
+ param_refs = self._find_method_parameter_references(
426
+ name,
427
+ f"{protocol_name}.{method['name']}()",
428
+ method.get("parameters", []),
429
+ )
430
+ references.extend(param_refs)
431
+
432
+ # Check return type
433
+ if name in method.get("return_annotation", ""):
434
+ references.append(f"{protocol_name}.{method['name']}() return type")
435
+
436
+ return references
437
+
438
+ def _find_module_references(
439
+ self, name: str, modules: dict[str, t.Any]
440
+ ) -> list[str]:
441
+ """Find references in module class definitions."""
442
+ references = []
443
+
444
+ for module_data in modules.values():
445
+ class_refs = self._find_class_references(
446
+ name, module_data.get("classes", [])
447
+ )
448
+ references.extend(class_refs)
449
+
450
+ return references
451
+
452
+ def _find_class_references(
453
+ self, name: str, classes: list[dict[str, t.Any]]
454
+ ) -> list[str]:
455
+ """Find references in class definitions."""
456
+ references = []
457
+
458
+ for class_info in classes:
459
+ # Check base classes
460
+ if name in class_info.get("base_classes", []):
461
+ references.append(f"{class_info['name']} base class")
462
+
463
+ # Check method signatures
464
+ method_refs = self._find_class_method_references(
465
+ name, class_info["name"], class_info.get("methods", [])
466
+ )
467
+ references.extend(method_refs)
468
+
469
+ return references
470
+
471
+ def _find_class_method_references(
472
+ self, name: str, class_name: str, methods: list[dict[str, t.Any]]
473
+ ) -> list[str]:
474
+ """Find references in class method signatures."""
475
+ references = []
476
+
477
+ for method in methods:
478
+ param_refs = self._find_method_parameter_references(
479
+ name, f"{class_name}.{method['name']}()", method.get("parameters", [])
480
+ )
481
+ references.extend(param_refs)
482
+
483
+ return references
484
+
485
+ def _find_method_parameter_references(
486
+ self, name: str, method_name: str, parameters: list[dict[str, t.Any]]
487
+ ) -> list[str]:
488
+ """Find references in method parameters."""
489
+ return [
490
+ f"{method_name} parameter"
491
+ for param in parameters
492
+ if name in param.get("annotation", "")
493
+ ]