code2llm 0.5.133__tar.gz → 0.5.134__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.
Files changed (193) hide show
  1. {code2llm-0.5.133/code2llm.egg-info → code2llm-0.5.134}/PKG-INFO +6 -8
  2. {code2llm-0.5.133 → code2llm-0.5.134}/README.md +5 -7
  3. code2llm-0.5.134/VERSION +1 -0
  4. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/__init__.py +1 -1
  5. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/exporters/mermaid_exporter.py +0 -1
  6. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/exporters/yaml_exporter.py +33 -15
  7. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/generators/mermaid.py +6 -2
  8. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/nlp/__init__.py +1 -1
  9. {code2llm-0.5.133 → code2llm-0.5.134/code2llm.egg-info}/PKG-INFO +6 -8
  10. {code2llm-0.5.133 → code2llm-0.5.134}/pyproject.toml +1 -1
  11. code2llm-0.5.133/VERSION +0 -1
  12. {code2llm-0.5.133 → code2llm-0.5.134}/LICENSE +0 -0
  13. {code2llm-0.5.133 → code2llm-0.5.134}/MANIFEST.in +0 -0
  14. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/__main__.py +0 -0
  15. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/analysis/__init__.py +0 -0
  16. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/analysis/call_graph.py +0 -0
  17. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/analysis/cfg.py +0 -0
  18. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/analysis/coupling.py +0 -0
  19. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/analysis/data_analysis.py +0 -0
  20. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/analysis/dfg.py +0 -0
  21. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/analysis/pipeline_classifier.py +0 -0
  22. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/analysis/pipeline_detector.py +0 -0
  23. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/analysis/pipeline_resolver.py +0 -0
  24. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/analysis/side_effects.py +0 -0
  25. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/analysis/smells.py +0 -0
  26. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/analysis/type_inference.py +0 -0
  27. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/analysis/utils/__init__.py +0 -0
  28. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/analysis/utils/ast_helpers.py +0 -0
  29. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/api.py +0 -0
  30. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/cli.py +0 -0
  31. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/cli_analysis.py +0 -0
  32. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/cli_commands.py +0 -0
  33. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/cli_exports/__init__.py +0 -0
  34. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/cli_exports/code2logic.py +0 -0
  35. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/cli_exports/formats.py +0 -0
  36. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/cli_exports/orchestrator.py +0 -0
  37. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/cli_exports/orchestrator_chunked.py +0 -0
  38. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/cli_exports/orchestrator_constants.py +0 -0
  39. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/cli_exports/orchestrator_handlers.py +0 -0
  40. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/cli_exports/prompt.py +0 -0
  41. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/cli_parser.py +0 -0
  42. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/core/__init__.py +0 -0
  43. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/core/analyzer.py +0 -0
  44. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/core/ast_registry.py +0 -0
  45. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/core/config.py +0 -0
  46. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/core/export_pipeline.py +0 -0
  47. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/core/file_analyzer.py +0 -0
  48. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/core/file_cache.py +0 -0
  49. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/core/file_filter.py +0 -0
  50. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/core/gitignore.py +0 -0
  51. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/core/incremental.py +0 -0
  52. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/core/lang/__init__.py +0 -0
  53. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/core/lang/base.py +0 -0
  54. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/core/lang/cpp.py +0 -0
  55. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/core/lang/csharp.py +0 -0
  56. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/core/lang/generic.py +0 -0
  57. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/core/lang/go_lang.py +0 -0
  58. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/core/lang/java.py +0 -0
  59. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/core/lang/php.py +0 -0
  60. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/core/lang/ruby.py +0 -0
  61. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/core/lang/rust.py +0 -0
  62. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/core/lang/ts_extractors.py +0 -0
  63. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/core/lang/ts_parser.py +0 -0
  64. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/core/lang/typescript.py +0 -0
  65. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/core/large_repo.py +0 -0
  66. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/core/models.py +0 -0
  67. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/core/persistent_cache.py +0 -0
  68. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/core/refactoring.py +0 -0
  69. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/core/repo_files.py +0 -0
  70. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/core/streaming/__init__.py +0 -0
  71. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/core/streaming/cache.py +0 -0
  72. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/core/streaming/incremental.py +0 -0
  73. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/core/streaming/prioritizer.py +0 -0
  74. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/core/streaming/scanner.py +0 -0
  75. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/core/streaming/strategies.py +0 -0
  76. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/core/streaming_analyzer.py +0 -0
  77. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/core/toon_size_manager.py +0 -0
  78. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/exporters/__init__.py +0 -0
  79. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/exporters/article_view.py +0 -0
  80. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/exporters/base.py +0 -0
  81. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/exporters/context_exporter.py +0 -0
  82. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/exporters/context_view.py +0 -0
  83. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/exporters/dashboard_data.py +0 -0
  84. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/exporters/dashboard_renderer.py +0 -0
  85. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/exporters/evolution/__init__.py +0 -0
  86. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/exporters/evolution/computation.py +0 -0
  87. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/exporters/evolution/constants.py +0 -0
  88. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/exporters/evolution/exclusion.py +0 -0
  89. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/exporters/evolution/render.py +0 -0
  90. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/exporters/evolution/yaml_export.py +0 -0
  91. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/exporters/evolution_exporter.py +0 -0
  92. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/exporters/flow_constants.py +0 -0
  93. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/exporters/flow_exporter.py +0 -0
  94. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/exporters/flow_renderer.py +0 -0
  95. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/exporters/html_dashboard.py +0 -0
  96. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/exporters/index_generator/__init__.py +0 -0
  97. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/exporters/index_generator/renderer.py +0 -0
  98. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/exporters/index_generator/scanner.py +0 -0
  99. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/exporters/index_generator.py +0 -0
  100. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/exporters/json_exporter.py +0 -0
  101. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/exporters/llm_exporter.py +0 -0
  102. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/exporters/map/__init__.py +0 -0
  103. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/exporters/map/alerts.py +0 -0
  104. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/exporters/map/details.py +0 -0
  105. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/exporters/map/header.py +0 -0
  106. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/exporters/map/module_list.py +0 -0
  107. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/exporters/map/utils.py +0 -0
  108. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/exporters/map/yaml_export.py +0 -0
  109. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/exporters/map_exporter.py +0 -0
  110. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/exporters/mermaid/__init__.py +0 -0
  111. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/exporters/mermaid/calls.py +0 -0
  112. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/exporters/mermaid/classic.py +0 -0
  113. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/exporters/mermaid/compact.py +0 -0
  114. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/exporters/mermaid/flow_compact.py +0 -0
  115. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/exporters/mermaid/flow_detailed.py +0 -0
  116. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/exporters/mermaid/flow_full.py +0 -0
  117. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/exporters/mermaid/utils.py +0 -0
  118. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/exporters/mermaid_flow_helpers.py +0 -0
  119. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/exporters/project_yaml/__init__.py +0 -0
  120. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/exporters/project_yaml/constants.py +0 -0
  121. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/exporters/project_yaml/core.py +0 -0
  122. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/exporters/project_yaml/evolution.py +0 -0
  123. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/exporters/project_yaml/health.py +0 -0
  124. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/exporters/project_yaml/hotspots.py +0 -0
  125. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/exporters/project_yaml/modules.py +0 -0
  126. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/exporters/project_yaml_exporter.py +0 -0
  127. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/exporters/readme/__init__.py +0 -0
  128. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/exporters/readme/content.py +0 -0
  129. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/exporters/readme/files.py +0 -0
  130. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/exporters/readme/insights.py +0 -0
  131. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/exporters/readme/sections.py +0 -0
  132. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/exporters/readme_exporter.py +0 -0
  133. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/exporters/report_generators.py +0 -0
  134. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/exporters/toon/__init__.py +0 -0
  135. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/exporters/toon/helpers.py +0 -0
  136. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/exporters/toon/metrics.py +0 -0
  137. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/exporters/toon/metrics_core.py +0 -0
  138. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/exporters/toon/metrics_duplicates.py +0 -0
  139. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/exporters/toon/metrics_health.py +0 -0
  140. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/exporters/toon/module_detail.py +0 -0
  141. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/exporters/toon/renderer.py +0 -0
  142. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/exporters/toon.py +0 -0
  143. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/exporters/toon_view.py +0 -0
  144. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/exporters/validate_project.py +0 -0
  145. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/generators/__init__.py +0 -0
  146. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/generators/_utils.py +0 -0
  147. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/generators/llm_flow/__init__.py +0 -0
  148. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/generators/llm_flow/analysis.py +0 -0
  149. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/generators/llm_flow/cli.py +0 -0
  150. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/generators/llm_flow/generator.py +0 -0
  151. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/generators/llm_flow/nodes.py +0 -0
  152. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/generators/llm_flow/parsing.py +0 -0
  153. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/generators/llm_flow/utils.py +0 -0
  154. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/generators/llm_flow.py +0 -0
  155. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/generators/llm_task.py +0 -0
  156. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/generators/mermaid/__init__.py +0 -0
  157. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/generators/mermaid/fix.py +0 -0
  158. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/generators/mermaid/png.py +0 -0
  159. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/generators/mermaid/validation.py +0 -0
  160. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/nlp/config.py +0 -0
  161. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/nlp/entity_resolution.py +0 -0
  162. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/nlp/intent_matching.py +0 -0
  163. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/nlp/normalization.py +0 -0
  164. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/nlp/pipeline.py +0 -0
  165. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/parsers/toon_parser.py +0 -0
  166. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/patterns/__init__.py +0 -0
  167. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/patterns/detector.py +0 -0
  168. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/refactor/__init__.py +0 -0
  169. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm/refactor/prompt_engine.py +0 -0
  170. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm.egg-info/SOURCES.txt +0 -0
  171. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm.egg-info/dependency_links.txt +0 -0
  172. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm.egg-info/entry_points.txt +0 -0
  173. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm.egg-info/requires.txt +0 -0
  174. {code2llm-0.5.133 → code2llm-0.5.134}/code2llm.egg-info/top_level.txt +0 -0
  175. {code2llm-0.5.133 → code2llm-0.5.134}/setup.cfg +0 -0
  176. {code2llm-0.5.133 → code2llm-0.5.134}/setup.py +0 -0
  177. {code2llm-0.5.133 → code2llm-0.5.134}/tests/test_advanced_analysis.py +0 -0
  178. {code2llm-0.5.133 → code2llm-0.5.134}/tests/test_analyzer.py +0 -0
  179. {code2llm-0.5.133 → code2llm-0.5.134}/tests/test_calls_toon_export.py +0 -0
  180. {code2llm-0.5.133 → code2llm-0.5.134}/tests/test_deep_analysis.py +0 -0
  181. {code2llm-0.5.133 → code2llm-0.5.134}/tests/test_edge_cases.py +0 -0
  182. {code2llm-0.5.133 → code2llm-0.5.134}/tests/test_flow_exporter.py +0 -0
  183. {code2llm-0.5.133 → code2llm-0.5.134}/tests/test_format_quality.py +0 -0
  184. {code2llm-0.5.133 → code2llm-0.5.134}/tests/test_multilanguage_e2e.py +0 -0
  185. {code2llm-0.5.133 → code2llm-0.5.134}/tests/test_nlp_pipeline.py +0 -0
  186. {code2llm-0.5.133 → code2llm-0.5.134}/tests/test_nonpython_cc_calls.py +0 -0
  187. {code2llm-0.5.133 → code2llm-0.5.134}/tests/test_persistent_cache.py +0 -0
  188. {code2llm-0.5.133 → code2llm-0.5.134}/tests/test_pipeline_detector.py +0 -0
  189. {code2llm-0.5.133 → code2llm-0.5.134}/tests/test_project_toon_export.py +0 -0
  190. {code2llm-0.5.133 → code2llm-0.5.134}/tests/test_prompt_engine.py +0 -0
  191. {code2llm-0.5.133 → code2llm-0.5.134}/tests/test_prompt_txt.py +0 -0
  192. {code2llm-0.5.133 → code2llm-0.5.134}/tests/test_refactoring_engine.py +0 -0
  193. {code2llm-0.5.133 → code2llm-0.5.134}/tests/test_toon_v2.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code2llm
3
- Version: 0.5.133
3
+ Version: 0.5.134
4
4
  Summary: High-performance Python code flow analysis with optimized TOON format - CFG, DFG, call graphs, and intelligent code queries
5
5
  Home-page: https://github.com/wronai/stts
6
6
  Author: STTS Project
@@ -67,18 +67,16 @@ Dynamic: requires-python
67
67
 
68
68
  ## AI Cost Tracking
69
69
 
70
- ![PyPI](https://img.shields.io/badge/pypi-costs-blue) ![Version](https://img.shields.io/badge/version-0.5.133-blue) ![Python](https://img.shields.io/badge/python-3.9+-blue) ![License](https://img.shields.io/badge/license-Apache--2.0-green)
71
- ![AI Cost](https://img.shields.io/badge/AI%20Cost-$7.50-orange) ![Human Time](https://img.shields.io/badge/Human%20Time-57.3h-blue) ![Model](https://img.shields.io/badge/Model-openrouter%2Fqwen%2Fqwen3--coder--next-lightgrey)
70
+ ![PyPI](https://img.shields.io/badge/pypi-costs-blue) ![Version](https://img.shields.io/badge/version-0.5.134-blue) ![Python](https://img.shields.io/badge/python-3.9+-blue) ![License](https://img.shields.io/badge/license-Apache--2.0-green)
71
+ ![AI Cost](https://img.shields.io/badge/AI%20Cost-$153.46-orange) ![Human Time](https://img.shields.io/badge/Human%20Time-64.5h-blue) ![Model](https://img.shields.io/badge/Model-openrouter%2Fqwen%2Fqwen3--coder--next-lightgrey)
72
72
 
73
- - 🤖 **LLM usage:** $7.5000 (166 commits)
74
- - 👤 **Human dev:** ~$5731 (57.3h @ $100/h, 30min dedup)
73
+ - 🤖 **LLM usage:** $153.4641 (195 commits)
74
+ - 👤 **Human dev:** ~$6447 (64.5h @ $100/h, 30min dedup)
75
75
 
76
- Generated on 2026-04-19 using [openrouter/qwen/qwen3-coder-next](https://openrouter.ai/qwen/qwen3-coder-next)
76
+ Generated on 2026-04-20 using [openrouter/qwen/qwen3-coder-next](https://openrouter.ai/qwen/qwen3-coder-next)
77
77
 
78
78
  ---
79
79
 
80
-
81
-
82
80
  This directory contains the complete analysis of your project generated by `code2llm`. Each file serves a specific purpose for understanding, refactoring, and documenting your codebase.
83
81
 
84
82
  ## 📁 Generated Files Overview
@@ -3,18 +3,16 @@
3
3
 
4
4
  ## AI Cost Tracking
5
5
 
6
- ![PyPI](https://img.shields.io/badge/pypi-costs-blue) ![Version](https://img.shields.io/badge/version-0.5.133-blue) ![Python](https://img.shields.io/badge/python-3.9+-blue) ![License](https://img.shields.io/badge/license-Apache--2.0-green)
7
- ![AI Cost](https://img.shields.io/badge/AI%20Cost-$7.50-orange) ![Human Time](https://img.shields.io/badge/Human%20Time-57.3h-blue) ![Model](https://img.shields.io/badge/Model-openrouter%2Fqwen%2Fqwen3--coder--next-lightgrey)
6
+ ![PyPI](https://img.shields.io/badge/pypi-costs-blue) ![Version](https://img.shields.io/badge/version-0.5.134-blue) ![Python](https://img.shields.io/badge/python-3.9+-blue) ![License](https://img.shields.io/badge/license-Apache--2.0-green)
7
+ ![AI Cost](https://img.shields.io/badge/AI%20Cost-$153.46-orange) ![Human Time](https://img.shields.io/badge/Human%20Time-64.5h-blue) ![Model](https://img.shields.io/badge/Model-openrouter%2Fqwen%2Fqwen3--coder--next-lightgrey)
8
8
 
9
- - 🤖 **LLM usage:** $7.5000 (166 commits)
10
- - 👤 **Human dev:** ~$5731 (57.3h @ $100/h, 30min dedup)
9
+ - 🤖 **LLM usage:** $153.4641 (195 commits)
10
+ - 👤 **Human dev:** ~$6447 (64.5h @ $100/h, 30min dedup)
11
11
 
12
- Generated on 2026-04-19 using [openrouter/qwen/qwen3-coder-next](https://openrouter.ai/qwen/qwen3-coder-next)
12
+ Generated on 2026-04-20 using [openrouter/qwen/qwen3-coder-next](https://openrouter.ai/qwen/qwen3-coder-next)
13
13
 
14
14
  ---
15
15
 
16
-
17
-
18
16
  This directory contains the complete analysis of your project generated by `code2llm`. Each file serves a specific purpose for understanding, refactoring, and documenting your codebase.
19
17
 
20
18
  ## 📁 Generated Files Overview
@@ -0,0 +1 @@
1
+ 0.5.134
@@ -8,7 +8,7 @@ Includes NLP Processing Pipeline for query normalization, intent matching,
8
8
  and entity resolution with multilingual support.
9
9
  """
10
10
 
11
- __version__ = "0.5.133"
11
+ __version__ = "0.5.134"
12
12
  __author__ = "STTS Project"
13
13
 
14
14
  # Core analysis components (lightweight, always needed)
@@ -72,4 +72,3 @@ class MermaidExporter(BaseExporter):
72
72
  _should_skip_module = staticmethod(_should_skip_module)
73
73
  _is_entry_point = staticmethod(_is_entry_point)
74
74
  _find_critical_path = staticmethod(_find_critical_path)
75
-
@@ -15,6 +15,17 @@ class YAMLExporter(BaseExporter):
15
15
 
16
16
  def __init__(self):
17
17
  self.analyzer = DataAnalyzer()
18
+ self._name_index: Optional[Dict[str, List[str]]] = None
19
+
20
+ def _get_name_index(self, funcs: Dict[str, FunctionInfo]) -> Dict[str, List[str]]:
21
+ """Build index mapping simple names to qualified names for O(1) lookup."""
22
+ if self._name_index is None:
23
+ index: Dict[str, List[str]] = defaultdict(list)
24
+ for qn in funcs:
25
+ simple_name = qn.split('.')[-1]
26
+ index[simple_name].append(qn)
27
+ self._name_index = index
28
+ return self._name_index
18
29
 
19
30
  def export(
20
31
  self,
@@ -126,6 +137,7 @@ class YAMLExporter(BaseExporter):
126
137
  - modules: grouping of functions by module
127
138
  - stats: summary statistics
128
139
  """
140
+ self._name_index = None # Reset cache for fresh analysis
129
141
  connected, edges = self._collect_edges(result, max_calls_per_func, max_edges)
130
142
  nodes = self._build_nodes(result, connected)
131
143
  modules = self._group_by_module(result, connected)
@@ -186,14 +198,15 @@ class YAMLExporter(BaseExporter):
186
198
 
187
199
  def _build_nodes(self, result: AnalysisResult, connected: Set[str]) -> Dict[str, Dict]:
188
200
  """Build node data for all connected functions."""
201
+ calls_in_counts = self._compute_calls_in_counts(result)
189
202
  nodes: Dict[str, Dict] = {}
190
203
  for fn in connected:
191
204
  fi = result.functions.get(fn)
192
205
  if fi:
193
- nodes[fn] = self._create_node(fi, fn, result)
206
+ nodes[fn] = self._create_node(fi, fn, calls_in_counts.get(fn, 0))
194
207
  return nodes
195
208
 
196
- def _create_node(self, fi: FunctionInfo, fn: str, result: AnalysisResult) -> Dict:
209
+ def _create_node(self, fi: FunctionInfo, fn: str, calls_in: int) -> Dict:
197
210
  """Create node dict with function metadata."""
198
211
  return {
199
212
  'name': fi.name,
@@ -201,19 +214,25 @@ class YAMLExporter(BaseExporter):
201
214
  'line': fi.line,
202
215
  'cyclomatic_complexity': self._get_cc(fi),
203
216
  'calls_out': len(fi.calls),
204
- 'calls_in': self._count_calls_in(fn, result),
217
+ 'calls_in': calls_in,
205
218
  }
206
219
 
207
- def _count_calls_in(self, fn: str, result: AnalysisResult) -> int:
208
- """Count how many functions call the given function."""
209
- count = 0
220
+ def _compute_calls_in_counts(self, result: AnalysisResult) -> Dict[str, int]:
221
+ """Pre-compute calls_in counts for all functions in O(n * avg_calls) time."""
222
+ counts: Dict[str, int] = defaultdict(int)
223
+ name_index = self._get_name_index(result.functions)
224
+
210
225
  for f in result.functions.values():
211
226
  for c in f.calls:
212
- resolved = self._resolve_callee(c, result.functions)
213
- if resolved == fn:
214
- count += 1
215
- break
216
- return count
227
+ # Fast resolution using the index
228
+ resolved = c if c in result.functions else None
229
+ if not resolved:
230
+ candidates = name_index.get(c, [])
231
+ if len(candidates) == 1:
232
+ resolved = candidates[0]
233
+ if resolved:
234
+ counts[resolved] += 1
235
+ return counts
217
236
 
218
237
  @staticmethod
219
238
  def _group_by_module(result: AnalysisResult, connected: Set[str]) -> Dict[str, List[str]]:
@@ -245,12 +264,11 @@ class YAMLExporter(BaseExporter):
245
264
 
246
265
  return calls_data
247
266
 
248
- @staticmethod
249
- def _resolve_callee(callee: str, funcs: Dict[str, FunctionInfo]) -> Optional[str]:
250
- """Resolve callee to a known qualified name."""
267
+ def _resolve_callee(self, callee: str, funcs: Dict[str, FunctionInfo]) -> Optional[str]:
268
+ """Resolve callee to a known qualified name using O(1) index lookup."""
251
269
  if callee in funcs:
252
270
  return callee
253
- candidates = [qn for qn in funcs if qn.endswith(f".{callee}")]
271
+ candidates = self._get_name_index(funcs).get(callee, [])
254
272
  if len(candidates) == 1:
255
273
  return candidates[0]
256
274
  return None
@@ -67,8 +67,8 @@ __all__ = [
67
67
  ]
68
68
 
69
69
 
70
- if __name__ == '__main__':
71
- # CLI interface for testing
70
+ def run_cli() -> None:
71
+ """Run the CLI interface for generating PNGs from Mermaid files."""
72
72
  import argparse
73
73
 
74
74
  parser = argparse.ArgumentParser(description='Generate PNG from Mermaid files')
@@ -82,3 +82,7 @@ if __name__ == '__main__':
82
82
 
83
83
  count = generate_pngs(input_path, output_path)
84
84
  print(f"Generated {count} PNG files")
85
+
86
+
87
+ if __name__ == '__main__':
88
+ run_cli()
@@ -4,7 +4,7 @@ Provides query normalization, intent matching, and entity resolution
4
4
  with multilingual support and fuzzy matching.
5
5
  """
6
6
 
7
- __version__ = "0.5.133"
7
+ __version__ = "0.5.134"
8
8
 
9
9
  from .pipeline import NLPPipeline
10
10
  from .normalization import QueryNormalizer
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code2llm
3
- Version: 0.5.133
3
+ Version: 0.5.134
4
4
  Summary: High-performance Python code flow analysis with optimized TOON format - CFG, DFG, call graphs, and intelligent code queries
5
5
  Home-page: https://github.com/wronai/stts
6
6
  Author: STTS Project
@@ -67,18 +67,16 @@ Dynamic: requires-python
67
67
 
68
68
  ## AI Cost Tracking
69
69
 
70
- ![PyPI](https://img.shields.io/badge/pypi-costs-blue) ![Version](https://img.shields.io/badge/version-0.5.133-blue) ![Python](https://img.shields.io/badge/python-3.9+-blue) ![License](https://img.shields.io/badge/license-Apache--2.0-green)
71
- ![AI Cost](https://img.shields.io/badge/AI%20Cost-$7.50-orange) ![Human Time](https://img.shields.io/badge/Human%20Time-57.3h-blue) ![Model](https://img.shields.io/badge/Model-openrouter%2Fqwen%2Fqwen3--coder--next-lightgrey)
70
+ ![PyPI](https://img.shields.io/badge/pypi-costs-blue) ![Version](https://img.shields.io/badge/version-0.5.134-blue) ![Python](https://img.shields.io/badge/python-3.9+-blue) ![License](https://img.shields.io/badge/license-Apache--2.0-green)
71
+ ![AI Cost](https://img.shields.io/badge/AI%20Cost-$153.46-orange) ![Human Time](https://img.shields.io/badge/Human%20Time-64.5h-blue) ![Model](https://img.shields.io/badge/Model-openrouter%2Fqwen%2Fqwen3--coder--next-lightgrey)
72
72
 
73
- - 🤖 **LLM usage:** $7.5000 (166 commits)
74
- - 👤 **Human dev:** ~$5731 (57.3h @ $100/h, 30min dedup)
73
+ - 🤖 **LLM usage:** $153.4641 (195 commits)
74
+ - 👤 **Human dev:** ~$6447 (64.5h @ $100/h, 30min dedup)
75
75
 
76
- Generated on 2026-04-19 using [openrouter/qwen/qwen3-coder-next](https://openrouter.ai/qwen/qwen3-coder-next)
76
+ Generated on 2026-04-20 using [openrouter/qwen/qwen3-coder-next](https://openrouter.ai/qwen/qwen3-coder-next)
77
77
 
78
78
  ---
79
79
 
80
-
81
-
82
80
  This directory contains the complete analysis of your project generated by `code2llm`. Each file serves a specific purpose for understanding, refactoring, and documenting your codebase.
83
81
 
84
82
  ## 📁 Generated Files Overview
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "code2llm"
7
- version = "0.5.133"
7
+ version = "0.5.134"
8
8
  description = "High-performance Python code flow analysis with optimized TOON format - CFG, DFG, call graphs, and intelligent code queries"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.8"
code2llm-0.5.133/VERSION DELETED
@@ -1 +0,0 @@
1
- 0.5.133
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes