code2llm 0.5.147__tar.gz → 0.5.148__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 (197) hide show
  1. {code2llm-0.5.147/code2llm.egg-info → code2llm-0.5.148}/PKG-INFO +5 -6
  2. {code2llm-0.5.147 → code2llm-0.5.148}/README.md +4 -5
  3. code2llm-0.5.148/VERSION +1 -0
  4. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/__init__.py +1 -1
  5. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/core/refactoring.py +3 -2
  6. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/exporters/map/utils.py +3 -0
  7. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/exporters/mermaid/flow_compact.py +17 -3
  8. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/nlp/__init__.py +1 -1
  9. {code2llm-0.5.147 → code2llm-0.5.148/code2llm.egg-info}/PKG-INFO +5 -6
  10. {code2llm-0.5.147 → code2llm-0.5.148}/pyproject.toml +1 -1
  11. code2llm-0.5.147/VERSION +0 -1
  12. {code2llm-0.5.147 → code2llm-0.5.148}/LICENSE +0 -0
  13. {code2llm-0.5.147 → code2llm-0.5.148}/MANIFEST.in +0 -0
  14. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/__main__.py +0 -0
  15. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/analysis/__init__.py +0 -0
  16. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/analysis/call_graph.py +0 -0
  17. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/analysis/cfg.py +0 -0
  18. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/analysis/coupling.py +0 -0
  19. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/analysis/data_analysis.py +0 -0
  20. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/analysis/dfg.py +0 -0
  21. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/analysis/pipeline_classifier.py +0 -0
  22. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/analysis/pipeline_detector.py +0 -0
  23. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/analysis/pipeline_resolver.py +0 -0
  24. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/analysis/side_effects.py +0 -0
  25. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/analysis/smells.py +0 -0
  26. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/analysis/type_inference.py +0 -0
  27. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/analysis/utils/__init__.py +0 -0
  28. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/analysis/utils/ast_helpers.py +0 -0
  29. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/api.py +0 -0
  30. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/cli.py +0 -0
  31. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/cli_analysis.py +0 -0
  32. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/cli_commands.py +0 -0
  33. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/cli_exports/__init__.py +0 -0
  34. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/cli_exports/code2logic.py +0 -0
  35. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/cli_exports/formats.py +0 -0
  36. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/cli_exports/orchestrator.py +0 -0
  37. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/cli_exports/orchestrator_chunked.py +0 -0
  38. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/cli_exports/orchestrator_constants.py +0 -0
  39. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/cli_exports/orchestrator_handlers.py +0 -0
  40. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/cli_exports/prompt.py +0 -0
  41. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/cli_parser.py +0 -0
  42. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/core/__init__.py +0 -0
  43. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/core/analyzer.py +0 -0
  44. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/core/ast_registry.py +0 -0
  45. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/core/config.py +0 -0
  46. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/core/export_pipeline.py +0 -0
  47. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/core/file_analyzer.py +0 -0
  48. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/core/file_cache.py +0 -0
  49. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/core/file_filter.py +0 -0
  50. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/core/gitignore.py +0 -0
  51. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/core/incremental.py +0 -0
  52. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/core/lang/__init__.py +0 -0
  53. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/core/lang/base.py +0 -0
  54. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/core/lang/cpp.py +0 -0
  55. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/core/lang/csharp.py +0 -0
  56. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/core/lang/generic.py +0 -0
  57. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/core/lang/go_lang.py +0 -0
  58. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/core/lang/java.py +0 -0
  59. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/core/lang/php.py +0 -0
  60. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/core/lang/ruby.py +0 -0
  61. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/core/lang/rust.py +0 -0
  62. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/core/lang/ts_extractors.py +0 -0
  63. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/core/lang/ts_parser.py +0 -0
  64. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/core/lang/typescript.py +0 -0
  65. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/core/large_repo.py +0 -0
  66. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/core/models.py +0 -0
  67. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/core/persistent_cache.py +0 -0
  68. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/core/repo_files.py +0 -0
  69. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/core/streaming/__init__.py +0 -0
  70. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/core/streaming/cache.py +0 -0
  71. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/core/streaming/incremental.py +0 -0
  72. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/core/streaming/prioritizer.py +0 -0
  73. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/core/streaming/scanner.py +0 -0
  74. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/core/streaming/strategies.py +0 -0
  75. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/core/streaming_analyzer.py +0 -0
  76. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/core/toon_size_manager.py +0 -0
  77. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/exporters/__init__.py +0 -0
  78. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/exporters/article_view.py +0 -0
  79. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/exporters/base.py +0 -0
  80. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/exporters/context_exporter.py +0 -0
  81. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/exporters/context_view.py +0 -0
  82. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/exporters/dashboard_data.py +0 -0
  83. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/exporters/dashboard_renderer.py +0 -0
  84. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/exporters/evolution/__init__.py +0 -0
  85. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/exporters/evolution/computation.py +0 -0
  86. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/exporters/evolution/constants.py +0 -0
  87. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/exporters/evolution/exclusion.py +0 -0
  88. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/exporters/evolution/render.py +0 -0
  89. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/exporters/evolution/yaml_export.py +0 -0
  90. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/exporters/evolution_exporter.py +0 -0
  91. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/exporters/flow_constants.py +0 -0
  92. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/exporters/flow_exporter.py +0 -0
  93. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/exporters/flow_renderer.py +0 -0
  94. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/exporters/html_dashboard.py +0 -0
  95. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/exporters/index_generator/__init__.py +0 -0
  96. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/exporters/index_generator/renderer.py +0 -0
  97. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/exporters/index_generator/scanner.py +0 -0
  98. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/exporters/index_generator.py +0 -0
  99. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/exporters/json_exporter.py +0 -0
  100. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/exporters/llm_exporter.py +0 -0
  101. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/exporters/map/__init__.py +0 -0
  102. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/exporters/map/alerts.py +0 -0
  103. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/exporters/map/details.py +0 -0
  104. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/exporters/map/header.py +0 -0
  105. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/exporters/map/module_list.py +0 -0
  106. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/exporters/map/yaml_export.py +0 -0
  107. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/exporters/map_exporter.py +0 -0
  108. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/exporters/mermaid/__init__.py +0 -0
  109. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/exporters/mermaid/calls.py +0 -0
  110. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/exporters/mermaid/classic.py +0 -0
  111. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/exporters/mermaid/compact.py +0 -0
  112. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/exporters/mermaid/flow_detailed.py +0 -0
  113. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/exporters/mermaid/flow_full.py +0 -0
  114. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/exporters/mermaid/utils.py +0 -0
  115. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/exporters/mermaid_exporter.py +0 -0
  116. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/exporters/mermaid_flow_helpers.py +0 -0
  117. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/exporters/project_yaml/__init__.py +0 -0
  118. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/exporters/project_yaml/constants.py +0 -0
  119. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/exporters/project_yaml/core.py +0 -0
  120. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/exporters/project_yaml/evolution.py +0 -0
  121. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/exporters/project_yaml/health.py +0 -0
  122. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/exporters/project_yaml/hotspots.py +0 -0
  123. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/exporters/project_yaml/modules.py +0 -0
  124. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/exporters/project_yaml_exporter.py +0 -0
  125. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/exporters/readme/__init__.py +0 -0
  126. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/exporters/readme/content.py +0 -0
  127. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/exporters/readme/files.py +0 -0
  128. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/exporters/readme/insights.py +0 -0
  129. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/exporters/readme/sections.py +0 -0
  130. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/exporters/readme_exporter.py +0 -0
  131. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/exporters/report_generators.py +0 -0
  132. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/exporters/toon/__init__.py +0 -0
  133. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/exporters/toon/helpers.py +0 -0
  134. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/exporters/toon/metrics.py +0 -0
  135. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/exporters/toon/metrics_core.py +0 -0
  136. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/exporters/toon/metrics_duplicates.py +0 -0
  137. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/exporters/toon/metrics_health.py +0 -0
  138. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/exporters/toon/module_detail.py +0 -0
  139. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/exporters/toon/renderer.py +0 -0
  140. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/exporters/toon.py +0 -0
  141. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/exporters/toon_view.py +0 -0
  142. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/exporters/validate_project.py +0 -0
  143. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/exporters/yaml_exporter.py +0 -0
  144. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/generators/__init__.py +0 -0
  145. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/generators/_utils.py +0 -0
  146. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/generators/llm_flow/__init__.py +0 -0
  147. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/generators/llm_flow/analysis.py +0 -0
  148. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/generators/llm_flow/cli.py +0 -0
  149. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/generators/llm_flow/generator.py +0 -0
  150. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/generators/llm_flow/nodes.py +0 -0
  151. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/generators/llm_flow/parsing.py +0 -0
  152. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/generators/llm_flow/utils.py +0 -0
  153. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/generators/llm_flow.py +0 -0
  154. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/generators/llm_task.py +0 -0
  155. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/generators/mermaid/__init__.py +0 -0
  156. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/generators/mermaid/fix.py +0 -0
  157. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/generators/mermaid/png.py +0 -0
  158. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/generators/mermaid/validation.py +0 -0
  159. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/generators/mermaid.py +0 -0
  160. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/nlp/config.py +0 -0
  161. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/nlp/entity_resolution.py +0 -0
  162. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/nlp/intent_matching.py +0 -0
  163. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/nlp/normalization.py +0 -0
  164. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/nlp/pipeline.py +0 -0
  165. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/parsers/toon_parser.py +0 -0
  166. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/patterns/__init__.py +0 -0
  167. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/patterns/detector.py +0 -0
  168. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/refactor/__init__.py +0 -0
  169. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm/refactor/prompt_engine.py +0 -0
  170. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm.egg-info/SOURCES.txt +0 -0
  171. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm.egg-info/dependency_links.txt +0 -0
  172. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm.egg-info/entry_points.txt +0 -0
  173. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm.egg-info/requires.txt +0 -0
  174. {code2llm-0.5.147 → code2llm-0.5.148}/code2llm.egg-info/top_level.txt +0 -0
  175. {code2llm-0.5.147 → code2llm-0.5.148}/setup.cfg +0 -0
  176. {code2llm-0.5.147 → code2llm-0.5.148}/setup.py +0 -0
  177. {code2llm-0.5.147 → code2llm-0.5.148}/tests/test_advanced_analysis.py +0 -0
  178. {code2llm-0.5.147 → code2llm-0.5.148}/tests/test_analyzer.py +0 -0
  179. {code2llm-0.5.147 → code2llm-0.5.148}/tests/test_cache_invalidation_e2e.py +0 -0
  180. {code2llm-0.5.147 → code2llm-0.5.148}/tests/test_calls_toon_export.py +0 -0
  181. {code2llm-0.5.147 → code2llm-0.5.148}/tests/test_declarative_collection.py +0 -0
  182. {code2llm-0.5.147 → code2llm-0.5.148}/tests/test_deep_analysis.py +0 -0
  183. {code2llm-0.5.147 → code2llm-0.5.148}/tests/test_edge_cases.py +0 -0
  184. {code2llm-0.5.147 → code2llm-0.5.148}/tests/test_file_analyzer_tagging.py +0 -0
  185. {code2llm-0.5.147 → code2llm-0.5.148}/tests/test_flow_exporter.py +0 -0
  186. {code2llm-0.5.147 → code2llm-0.5.148}/tests/test_format_quality.py +0 -0
  187. {code2llm-0.5.147 → code2llm-0.5.148}/tests/test_multilanguage_e2e.py +0 -0
  188. {code2llm-0.5.147 → code2llm-0.5.148}/tests/test_nlp_pipeline.py +0 -0
  189. {code2llm-0.5.147 → code2llm-0.5.148}/tests/test_nonpython_cc_calls.py +0 -0
  190. {code2llm-0.5.147 → code2llm-0.5.148}/tests/test_orchestrator_cache_mtime.py +0 -0
  191. {code2llm-0.5.147 → code2llm-0.5.148}/tests/test_persistent_cache.py +0 -0
  192. {code2llm-0.5.147 → code2llm-0.5.148}/tests/test_pipeline_detector.py +0 -0
  193. {code2llm-0.5.147 → code2llm-0.5.148}/tests/test_project_toon_export.py +0 -0
  194. {code2llm-0.5.147 → code2llm-0.5.148}/tests/test_prompt_engine.py +0 -0
  195. {code2llm-0.5.147 → code2llm-0.5.148}/tests/test_prompt_txt.py +0 -0
  196. {code2llm-0.5.147 → code2llm-0.5.148}/tests/test_refactoring_engine.py +0 -0
  197. {code2llm-0.5.147 → code2llm-0.5.148}/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.147
3
+ Version: 0.5.148
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
@@ -66,17 +66,16 @@ Dynamic: requires-python
66
66
 
67
67
  ## AI Cost Tracking
68
68
 
69
- ![PyPI](https://img.shields.io/badge/pypi-costs-blue) ![Version](https://img.shields.io/badge/version-0.5.147-blue) ![Python](https://img.shields.io/badge/python-3.9+-blue) ![License](https://img.shields.io/badge/license-Apache--2.0-green)
70
- ![AI Cost](https://img.shields.io/badge/AI%20Cost-$7.50-orange) ![Human Time](https://img.shields.io/badge/Human%20Time-72.6h-blue) ![Model](https://img.shields.io/badge/Model-openrouter%2Fqwen%2Fqwen3--coder--next-lightgrey)
69
+ ![PyPI](https://img.shields.io/badge/pypi-costs-blue) ![Version](https://img.shields.io/badge/version-0.5.148-blue) ![Python](https://img.shields.io/badge/python-3.9+-blue) ![License](https://img.shields.io/badge/license-Apache--2.0-green)
70
+ ![AI Cost](https://img.shields.io/badge/AI%20Cost-$7.50-orange) ![Human Time](https://img.shields.io/badge/Human%20Time-73.2h-blue) ![Model](https://img.shields.io/badge/Model-openrouter%2Fqwen%2Fqwen3--coder--next-lightgrey)
71
71
 
72
- - 🤖 **LLM usage:** $7.5000 (199 commits)
73
- - 👤 **Human dev:** ~$7258 (72.6h @ $100/h, 30min dedup)
72
+ - 🤖 **LLM usage:** $7.5000 (200 commits)
73
+ - 👤 **Human dev:** ~$7319 (73.2h @ $100/h, 30min dedup)
74
74
 
75
75
  Generated on 2026-05-06 using [openrouter/qwen/qwen3-coder-next](https://openrouter.ai/qwen/qwen3-coder-next)
76
76
 
77
77
  ---
78
78
 
79
-
80
79
  <!-- generated in 0.00s -->
81
80
 
82
81
  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.
@@ -2,17 +2,16 @@
2
2
 
3
3
  ## AI Cost Tracking
4
4
 
5
- ![PyPI](https://img.shields.io/badge/pypi-costs-blue) ![Version](https://img.shields.io/badge/version-0.5.147-blue) ![Python](https://img.shields.io/badge/python-3.9+-blue) ![License](https://img.shields.io/badge/license-Apache--2.0-green)
6
- ![AI Cost](https://img.shields.io/badge/AI%20Cost-$7.50-orange) ![Human Time](https://img.shields.io/badge/Human%20Time-72.6h-blue) ![Model](https://img.shields.io/badge/Model-openrouter%2Fqwen%2Fqwen3--coder--next-lightgrey)
5
+ ![PyPI](https://img.shields.io/badge/pypi-costs-blue) ![Version](https://img.shields.io/badge/version-0.5.148-blue) ![Python](https://img.shields.io/badge/python-3.9+-blue) ![License](https://img.shields.io/badge/license-Apache--2.0-green)
6
+ ![AI Cost](https://img.shields.io/badge/AI%20Cost-$7.50-orange) ![Human Time](https://img.shields.io/badge/Human%20Time-73.2h-blue) ![Model](https://img.shields.io/badge/Model-openrouter%2Fqwen%2Fqwen3--coder--next-lightgrey)
7
7
 
8
- - 🤖 **LLM usage:** $7.5000 (199 commits)
9
- - 👤 **Human dev:** ~$7258 (72.6h @ $100/h, 30min dedup)
8
+ - 🤖 **LLM usage:** $7.5000 (200 commits)
9
+ - 👤 **Human dev:** ~$7319 (73.2h @ $100/h, 30min dedup)
10
10
 
11
11
  Generated on 2026-05-06 using [openrouter/qwen/qwen3-coder-next](https://openrouter.ai/qwen/qwen3-coder-next)
12
12
 
13
13
  ---
14
14
 
15
-
16
15
  <!-- generated in 0.00s -->
17
16
 
18
17
  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.
@@ -0,0 +1 @@
1
+ 0.5.148
@@ -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.147"
11
+ __version__ = "0.5.148"
12
12
  __author__ = "STTS Project"
13
13
 
14
14
  # Core analysis components (lightweight, always needed)
@@ -82,8 +82,9 @@ class RefactoringAnalyzer:
82
82
  if node_count > 500:
83
83
  if self.config.verbose:
84
84
  print(f" Large graph ({node_count} nodes), using sampled centrality...")
85
- # Sample 20% of nodes, max 500
86
- k = min(int(node_count * 0.2), 500)
85
+ # Sample adaptively: 10% for large, 20% for medium, cap at 200
86
+ ratio = 0.1 if node_count > 2000 else 0.2
87
+ k = min(int(node_count * ratio), 200)
87
88
  import networkx as nx
88
89
  centrality = nx.betweenness_centrality(call_graph, k=k)
89
90
  else:
@@ -1,5 +1,6 @@
1
1
  """Map exporter utilities — path handling, line counting, language detection."""
2
2
 
3
+ from functools import lru_cache
3
4
  from pathlib import Path
4
5
  from typing import Dict, Set
5
6
  from collections import defaultdict
@@ -8,6 +9,7 @@ from code2llm.core.config import LANGUAGE_EXTENSIONS
8
9
  from code2llm.core.models import AnalysisResult
9
10
 
10
11
 
12
+ @lru_cache(maxsize=4096)
11
13
  def rel_path(fpath: str, project_path: str) -> str:
12
14
  """Get relative path from project root."""
13
15
  if not project_path or not fpath:
@@ -21,6 +23,7 @@ def rel_path(fpath: str, project_path: str) -> str:
21
23
  return fpath
22
24
 
23
25
 
26
+ @lru_cache(maxsize=4096)
24
27
  def file_line_count(fpath: str) -> int:
25
28
  """Count lines in a file."""
26
29
  try:
@@ -21,6 +21,21 @@ def should_skip_module(module: str, include_examples: bool = False) -> bool:
21
21
  return any(pat in mod_lower for pat in SKIP_PATTERNS)
22
22
 
23
23
 
24
+ # Pre-computed set of functions that have at least one incoming call
25
+ _called_funcs_cache: Dict[int, Set[str]] = {}
26
+
27
+
28
+ def _get_called_funcs(result: AnalysisResult) -> Set[str]:
29
+ """Build (and cache) the set of all functions called by other functions."""
30
+ rid = id(result)
31
+ if rid not in _called_funcs_cache:
32
+ called: Set[str] = set()
33
+ for fi in result.functions.values():
34
+ called.update(fi.calls)
35
+ _called_funcs_cache[rid] = called
36
+ return _called_funcs_cache[rid]
37
+
38
+
24
39
  def is_entry_point(func_name: str, fi, result: AnalysisResult) -> bool:
25
40
  """Detect if function is an entry point (main, cli, api entry)."""
26
41
  name = fi.name
@@ -36,9 +51,8 @@ def is_entry_point(func_name: str, fi, result: AnalysisResult) -> bool:
36
51
  if func_name.startswith('code2llm.api.'):
37
52
  return True
38
53
  # Entry points have no incoming calls from within the project
39
- has_incoming = any(func_name in (c.calls if hasattr(c, 'calls') else [])
40
- for c in result.functions.values())
41
- if not has_incoming and name not in ('__init__', '__getattr__'):
54
+ called_funcs = _get_called_funcs(result)
55
+ if func_name not in called_funcs and name not in ('__init__', '__getattr__'):
42
56
  return True
43
57
  return False
44
58
 
@@ -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.147"
7
+ __version__ = "0.5.148"
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.147
3
+ Version: 0.5.148
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
@@ -66,17 +66,16 @@ Dynamic: requires-python
66
66
 
67
67
  ## AI Cost Tracking
68
68
 
69
- ![PyPI](https://img.shields.io/badge/pypi-costs-blue) ![Version](https://img.shields.io/badge/version-0.5.147-blue) ![Python](https://img.shields.io/badge/python-3.9+-blue) ![License](https://img.shields.io/badge/license-Apache--2.0-green)
70
- ![AI Cost](https://img.shields.io/badge/AI%20Cost-$7.50-orange) ![Human Time](https://img.shields.io/badge/Human%20Time-72.6h-blue) ![Model](https://img.shields.io/badge/Model-openrouter%2Fqwen%2Fqwen3--coder--next-lightgrey)
69
+ ![PyPI](https://img.shields.io/badge/pypi-costs-blue) ![Version](https://img.shields.io/badge/version-0.5.148-blue) ![Python](https://img.shields.io/badge/python-3.9+-blue) ![License](https://img.shields.io/badge/license-Apache--2.0-green)
70
+ ![AI Cost](https://img.shields.io/badge/AI%20Cost-$7.50-orange) ![Human Time](https://img.shields.io/badge/Human%20Time-73.2h-blue) ![Model](https://img.shields.io/badge/Model-openrouter%2Fqwen%2Fqwen3--coder--next-lightgrey)
71
71
 
72
- - 🤖 **LLM usage:** $7.5000 (199 commits)
73
- - 👤 **Human dev:** ~$7258 (72.6h @ $100/h, 30min dedup)
72
+ - 🤖 **LLM usage:** $7.5000 (200 commits)
73
+ - 👤 **Human dev:** ~$7319 (73.2h @ $100/h, 30min dedup)
74
74
 
75
75
  Generated on 2026-05-06 using [openrouter/qwen/qwen3-coder-next](https://openrouter.ai/qwen/qwen3-coder-next)
76
76
 
77
77
  ---
78
78
 
79
-
80
79
  <!-- generated in 0.00s -->
81
80
 
82
81
  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.
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "code2llm"
7
- version = "0.5.147"
7
+ version = "0.5.148"
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.147/VERSION DELETED
@@ -1 +0,0 @@
1
- 0.5.147
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes