code2llm 0.5.118__tar.gz → 0.5.120__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 (142) hide show
  1. {code2llm-0.5.118 → code2llm-0.5.120}/PKG-INFO +2 -2
  2. {code2llm-0.5.118 → code2llm-0.5.120}/README.md +1 -1
  3. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/__init__.py +1 -1
  4. code2llm-0.5.120/code2llm/exporters/index_generator/__init__.py +73 -0
  5. code2llm-0.5.118/code2llm/exporters/index_generator.py → code2llm-0.5.120/code2llm/exporters/index_generator/renderer.py +168 -321
  6. code2llm-0.5.120/code2llm/exporters/index_generator/scanner.py +116 -0
  7. code2llm-0.5.120/code2llm/exporters/index_generator.py +29 -0
  8. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/nlp/__init__.py +1 -1
  9. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm.egg-info/PKG-INFO +2 -2
  10. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm.egg-info/SOURCES.txt +3 -0
  11. {code2llm-0.5.118 → code2llm-0.5.120}/pyproject.toml +1 -1
  12. {code2llm-0.5.118 → code2llm-0.5.120}/setup.py +1 -1
  13. {code2llm-0.5.118 → code2llm-0.5.120}/LICENSE +0 -0
  14. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/__main__.py +0 -0
  15. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/analysis/__init__.py +0 -0
  16. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/analysis/call_graph.py +0 -0
  17. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/analysis/cfg.py +0 -0
  18. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/analysis/coupling.py +0 -0
  19. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/analysis/data_analysis.py +0 -0
  20. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/analysis/dfg.py +0 -0
  21. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/analysis/pipeline_detector.py +0 -0
  22. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/analysis/side_effects.py +0 -0
  23. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/analysis/smells.py +0 -0
  24. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/analysis/type_inference.py +0 -0
  25. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/analysis/utils/__init__.py +0 -0
  26. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/analysis/utils/ast_helpers.py +0 -0
  27. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/api.py +0 -0
  28. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/cli.py +0 -0
  29. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/cli_analysis.py +0 -0
  30. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/cli_commands.py +0 -0
  31. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/cli_exports/__init__.py +0 -0
  32. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/cli_exports/code2logic.py +0 -0
  33. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/cli_exports/formats.py +0 -0
  34. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/cli_exports/orchestrator.py +0 -0
  35. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/cli_exports/prompt.py +0 -0
  36. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/cli_parser.py +0 -0
  37. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/core/__init__.py +0 -0
  38. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/core/analyzer.py +0 -0
  39. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/core/ast_registry.py +0 -0
  40. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/core/config.py +0 -0
  41. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/core/export_pipeline.py +0 -0
  42. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/core/file_analyzer.py +0 -0
  43. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/core/file_cache.py +0 -0
  44. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/core/file_filter.py +0 -0
  45. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/core/gitignore.py +0 -0
  46. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/core/incremental.py +0 -0
  47. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/core/lang/__init__.py +0 -0
  48. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/core/lang/base.py +0 -0
  49. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/core/lang/cpp.py +0 -0
  50. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/core/lang/csharp.py +0 -0
  51. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/core/lang/generic.py +0 -0
  52. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/core/lang/go_lang.py +0 -0
  53. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/core/lang/java.py +0 -0
  54. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/core/lang/php.py +0 -0
  55. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/core/lang/ruby.py +0 -0
  56. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/core/lang/rust.py +0 -0
  57. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/core/lang/ts_extractors.py +0 -0
  58. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/core/lang/ts_parser.py +0 -0
  59. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/core/lang/typescript.py +0 -0
  60. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/core/large_repo.py +0 -0
  61. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/core/models.py +0 -0
  62. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/core/persistent_cache.py +0 -0
  63. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/core/refactoring.py +0 -0
  64. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/core/repo_files.py +0 -0
  65. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/core/streaming/__init__.py +0 -0
  66. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/core/streaming/cache.py +0 -0
  67. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/core/streaming/incremental.py +0 -0
  68. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/core/streaming/prioritizer.py +0 -0
  69. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/core/streaming/scanner.py +0 -0
  70. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/core/streaming/strategies.py +0 -0
  71. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/core/streaming_analyzer.py +0 -0
  72. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/core/toon_size_manager.py +0 -0
  73. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/exporters/__init__.py +0 -0
  74. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/exporters/article_view.py +0 -0
  75. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/exporters/base.py +0 -0
  76. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/exporters/context_exporter.py +0 -0
  77. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/exporters/context_view.py +0 -0
  78. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/exporters/evolution_exporter.py +0 -0
  79. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/exporters/flow_constants.py +0 -0
  80. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/exporters/flow_exporter.py +0 -0
  81. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/exporters/flow_renderer.py +0 -0
  82. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/exporters/html_dashboard.py +0 -0
  83. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/exporters/json_exporter.py +0 -0
  84. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/exporters/llm_exporter.py +0 -0
  85. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/exporters/map_exporter.py +0 -0
  86. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/exporters/mermaid_exporter.py +0 -0
  87. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/exporters/mermaid_flow_helpers.py +0 -0
  88. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/exporters/project_yaml/__init__.py +0 -0
  89. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/exporters/project_yaml/constants.py +0 -0
  90. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/exporters/project_yaml/core.py +0 -0
  91. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/exporters/project_yaml/evolution.py +0 -0
  92. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/exporters/project_yaml/health.py +0 -0
  93. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/exporters/project_yaml/hotspots.py +0 -0
  94. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/exporters/project_yaml/modules.py +0 -0
  95. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/exporters/project_yaml_exporter.py +0 -0
  96. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/exporters/readme_exporter.py +0 -0
  97. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/exporters/report_generators.py +0 -0
  98. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/exporters/toon/__init__.py +0 -0
  99. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/exporters/toon/helpers.py +0 -0
  100. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/exporters/toon/metrics.py +0 -0
  101. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/exporters/toon/module_detail.py +0 -0
  102. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/exporters/toon/renderer.py +0 -0
  103. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/exporters/toon.py +0 -0
  104. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/exporters/toon_view.py +0 -0
  105. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/exporters/validate_project.py +0 -0
  106. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/exporters/yaml_exporter.py +0 -0
  107. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/generators/__init__.py +0 -0
  108. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/generators/_utils.py +0 -0
  109. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/generators/llm_flow.py +0 -0
  110. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/generators/llm_task.py +0 -0
  111. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/generators/mermaid.py +0 -0
  112. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/nlp/config.py +0 -0
  113. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/nlp/entity_resolution.py +0 -0
  114. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/nlp/intent_matching.py +0 -0
  115. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/nlp/normalization.py +0 -0
  116. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/nlp/pipeline.py +0 -0
  117. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/patterns/__init__.py +0 -0
  118. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/patterns/detector.py +0 -0
  119. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/refactor/__init__.py +0 -0
  120. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm/refactor/prompt_engine.py +0 -0
  121. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm.egg-info/dependency_links.txt +0 -0
  122. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm.egg-info/entry_points.txt +0 -0
  123. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm.egg-info/requires.txt +0 -0
  124. {code2llm-0.5.118 → code2llm-0.5.120}/code2llm.egg-info/top_level.txt +0 -0
  125. {code2llm-0.5.118 → code2llm-0.5.120}/setup.cfg +0 -0
  126. {code2llm-0.5.118 → code2llm-0.5.120}/tests/test_advanced_analysis.py +0 -0
  127. {code2llm-0.5.118 → code2llm-0.5.120}/tests/test_analyzer.py +0 -0
  128. {code2llm-0.5.118 → code2llm-0.5.120}/tests/test_calls_toon_export.py +0 -0
  129. {code2llm-0.5.118 → code2llm-0.5.120}/tests/test_deep_analysis.py +0 -0
  130. {code2llm-0.5.118 → code2llm-0.5.120}/tests/test_edge_cases.py +0 -0
  131. {code2llm-0.5.118 → code2llm-0.5.120}/tests/test_flow_exporter.py +0 -0
  132. {code2llm-0.5.118 → code2llm-0.5.120}/tests/test_format_quality.py +0 -0
  133. {code2llm-0.5.118 → code2llm-0.5.120}/tests/test_multilanguage_e2e.py +0 -0
  134. {code2llm-0.5.118 → code2llm-0.5.120}/tests/test_nlp_pipeline.py +0 -0
  135. {code2llm-0.5.118 → code2llm-0.5.120}/tests/test_nonpython_cc_calls.py +0 -0
  136. {code2llm-0.5.118 → code2llm-0.5.120}/tests/test_persistent_cache.py +0 -0
  137. {code2llm-0.5.118 → code2llm-0.5.120}/tests/test_pipeline_detector.py +0 -0
  138. {code2llm-0.5.118 → code2llm-0.5.120}/tests/test_project_toon_export.py +0 -0
  139. {code2llm-0.5.118 → code2llm-0.5.120}/tests/test_prompt_engine.py +0 -0
  140. {code2llm-0.5.118 → code2llm-0.5.120}/tests/test_prompt_txt.py +0 -0
  141. {code2llm-0.5.118 → code2llm-0.5.120}/tests/test_refactoring_engine.py +0 -0
  142. {code2llm-0.5.118 → code2llm-0.5.120}/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.118
3
+ Version: 0.5.120
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,7 +67,7 @@ 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.118-blue) ![Python](https://img.shields.io/badge/python-3.9+-blue) ![License](https://img.shields.io/badge/license-Apache--2.0-green)
70
+ ![PyPI](https://img.shields.io/badge/pypi-costs-blue) ![Version](https://img.shields.io/badge/version-0.5.120-blue) ![Python](https://img.shields.io/badge/python-3.9+-blue) ![License](https://img.shields.io/badge/license-Apache--2.0-green)
71
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)
72
72
 
73
73
  - 🤖 **LLM usage:** $7.5000 (166 commits)
@@ -3,7 +3,7 @@
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.118-blue) ![Python](https://img.shields.io/badge/python-3.9+-blue) ![License](https://img.shields.io/badge/license-Apache--2.0-green)
6
+ ![PyPI](https://img.shields.io/badge/pypi-costs-blue) ![Version](https://img.shields.io/badge/version-0.5.120-blue) ![Python](https://img.shields.io/badge/python-3.9+-blue) ![License](https://img.shields.io/badge/license-Apache--2.0-green)
7
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)
8
8
 
9
9
  - 🤖 **LLM usage:** $7.5000 (166 commits)
@@ -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.118"
11
+ __version__ = "0.5.120"
12
12
  __author__ = "STTS Project"
13
13
 
14
14
  # Core analysis components (lightweight, always needed)
@@ -0,0 +1,73 @@
1
+ """Index HTML Generator — web-based file browser for all generated outputs.
2
+
3
+ Generates index.html that provides a GitHub Pages-ready interface
4
+ for browsing all generated analysis files (toon, md, yaml, json, etc.)
5
+
6
+ This package provides three components:
7
+ - FileScanner: scans output directory and collects file metadata
8
+ - HTMLRenderer: generates HTML with CSS and JavaScript
9
+ - IndexHTMLGenerator: facade combining scanner and renderer
10
+ """
11
+
12
+ from pathlib import Path
13
+ from typing import Any, Dict, List, Optional
14
+
15
+ from .scanner import FileScanner, get_file_types, get_default_file_info, FILE_TYPES
16
+ from .renderer import HTMLRenderer
17
+
18
+
19
+ class IndexHTMLGenerator:
20
+ """Generate index.html for browsing all generated files.
21
+
22
+ This is a facade class that combines FileScanner and HTMLRenderer
23
+ to provide a simple interface for generating the index file.
24
+ """
25
+
26
+ # Backward compatibility: expose FILE_TYPES at class level
27
+ FILE_TYPES = FILE_TYPES
28
+
29
+ def __init__(self, output_dir: Path):
30
+ self.output_dir = Path(output_dir).resolve()
31
+ self._scanner = FileScanner(self.output_dir)
32
+ self._renderer = HTMLRenderer()
33
+
34
+ def generate(self) -> Path:
35
+ """Generate index.html in the output directory."""
36
+ files = self._scanner.scan()
37
+ html = self._renderer.render(files)
38
+ index_path = self.output_dir / 'index.html'
39
+ with open(index_path, 'w', encoding='utf-8') as f:
40
+ f.write(html)
41
+ return index_path
42
+
43
+ def scan_files(self) -> List[Dict[str, Any]]:
44
+ """Scan and return file metadata without generating HTML."""
45
+ return self._scanner.scan()
46
+
47
+ def render_html(self, files: List[Dict[str, Any]]) -> str:
48
+ """Render HTML from pre-scanned file list."""
49
+ return self._renderer.render(files)
50
+
51
+
52
+ # Convenience function for direct usage
53
+ def generate_index_html(output_dir: Path) -> Path:
54
+ """Generate index.html in the specified directory.
55
+
56
+ Args:
57
+ output_dir: Directory containing generated analysis files
58
+
59
+ Returns:
60
+ Path to the generated index.html file
61
+ """
62
+ return IndexHTMLGenerator(output_dir).generate()
63
+
64
+
65
+ __all__ = [
66
+ 'IndexHTMLGenerator',
67
+ 'FileScanner',
68
+ 'HTMLRenderer',
69
+ 'generate_index_html',
70
+ 'get_file_types',
71
+ 'get_default_file_info',
72
+ 'FILE_TYPES',
73
+ ]