code2llm 0.5.132__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.
- {code2llm-0.5.132/code2llm.egg-info → code2llm-0.5.134}/PKG-INFO +6 -8
- {code2llm-0.5.132 → code2llm-0.5.134}/README.md +5 -7
- code2llm-0.5.134/VERSION +1 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/__init__.py +1 -1
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/core/analyzer.py +0 -15
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/core/file_filter.py +3 -13
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/core/gitignore.py +0 -11
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/exporters/mermaid_exporter.py +0 -1
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/exporters/yaml_exporter.py +33 -15
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/generators/mermaid.py +6 -2
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/nlp/__init__.py +1 -1
- {code2llm-0.5.132 → code2llm-0.5.134/code2llm.egg-info}/PKG-INFO +6 -8
- {code2llm-0.5.132 → code2llm-0.5.134}/pyproject.toml +1 -1
- code2llm-0.5.132/VERSION +0 -1
- {code2llm-0.5.132 → code2llm-0.5.134}/LICENSE +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/MANIFEST.in +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/__main__.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/analysis/__init__.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/analysis/call_graph.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/analysis/cfg.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/analysis/coupling.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/analysis/data_analysis.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/analysis/dfg.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/analysis/pipeline_classifier.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/analysis/pipeline_detector.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/analysis/pipeline_resolver.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/analysis/side_effects.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/analysis/smells.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/analysis/type_inference.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/analysis/utils/__init__.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/analysis/utils/ast_helpers.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/api.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/cli.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/cli_analysis.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/cli_commands.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/cli_exports/__init__.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/cli_exports/code2logic.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/cli_exports/formats.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/cli_exports/orchestrator.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/cli_exports/orchestrator_chunked.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/cli_exports/orchestrator_constants.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/cli_exports/orchestrator_handlers.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/cli_exports/prompt.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/cli_parser.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/core/__init__.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/core/ast_registry.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/core/config.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/core/export_pipeline.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/core/file_analyzer.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/core/file_cache.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/core/incremental.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/core/lang/__init__.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/core/lang/base.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/core/lang/cpp.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/core/lang/csharp.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/core/lang/generic.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/core/lang/go_lang.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/core/lang/java.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/core/lang/php.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/core/lang/ruby.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/core/lang/rust.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/core/lang/ts_extractors.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/core/lang/ts_parser.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/core/lang/typescript.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/core/large_repo.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/core/models.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/core/persistent_cache.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/core/refactoring.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/core/repo_files.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/core/streaming/__init__.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/core/streaming/cache.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/core/streaming/incremental.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/core/streaming/prioritizer.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/core/streaming/scanner.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/core/streaming/strategies.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/core/streaming_analyzer.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/core/toon_size_manager.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/exporters/__init__.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/exporters/article_view.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/exporters/base.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/exporters/context_exporter.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/exporters/context_view.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/exporters/dashboard_data.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/exporters/dashboard_renderer.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/exporters/evolution/__init__.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/exporters/evolution/computation.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/exporters/evolution/constants.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/exporters/evolution/exclusion.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/exporters/evolution/render.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/exporters/evolution/yaml_export.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/exporters/evolution_exporter.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/exporters/flow_constants.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/exporters/flow_exporter.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/exporters/flow_renderer.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/exporters/html_dashboard.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/exporters/index_generator/__init__.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/exporters/index_generator/renderer.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/exporters/index_generator/scanner.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/exporters/index_generator.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/exporters/json_exporter.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/exporters/llm_exporter.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/exporters/map/__init__.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/exporters/map/alerts.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/exporters/map/details.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/exporters/map/header.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/exporters/map/module_list.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/exporters/map/utils.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/exporters/map/yaml_export.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/exporters/map_exporter.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/exporters/mermaid/__init__.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/exporters/mermaid/calls.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/exporters/mermaid/classic.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/exporters/mermaid/compact.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/exporters/mermaid/flow_compact.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/exporters/mermaid/flow_detailed.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/exporters/mermaid/flow_full.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/exporters/mermaid/utils.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/exporters/mermaid_flow_helpers.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/exporters/project_yaml/__init__.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/exporters/project_yaml/constants.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/exporters/project_yaml/core.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/exporters/project_yaml/evolution.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/exporters/project_yaml/health.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/exporters/project_yaml/hotspots.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/exporters/project_yaml/modules.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/exporters/project_yaml_exporter.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/exporters/readme/__init__.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/exporters/readme/content.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/exporters/readme/files.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/exporters/readme/insights.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/exporters/readme/sections.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/exporters/readme_exporter.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/exporters/report_generators.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/exporters/toon/__init__.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/exporters/toon/helpers.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/exporters/toon/metrics.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/exporters/toon/metrics_core.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/exporters/toon/metrics_duplicates.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/exporters/toon/metrics_health.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/exporters/toon/module_detail.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/exporters/toon/renderer.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/exporters/toon.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/exporters/toon_view.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/exporters/validate_project.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/generators/__init__.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/generators/_utils.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/generators/llm_flow/__init__.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/generators/llm_flow/analysis.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/generators/llm_flow/cli.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/generators/llm_flow/generator.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/generators/llm_flow/nodes.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/generators/llm_flow/parsing.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/generators/llm_flow/utils.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/generators/llm_flow.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/generators/llm_task.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/generators/mermaid/__init__.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/generators/mermaid/fix.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/generators/mermaid/png.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/generators/mermaid/validation.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/nlp/config.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/nlp/entity_resolution.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/nlp/intent_matching.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/nlp/normalization.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/nlp/pipeline.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/parsers/toon_parser.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/patterns/__init__.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/patterns/detector.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/refactor/__init__.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm/refactor/prompt_engine.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm.egg-info/SOURCES.txt +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm.egg-info/dependency_links.txt +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm.egg-info/entry_points.txt +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm.egg-info/requires.txt +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/code2llm.egg-info/top_level.txt +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/setup.cfg +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/setup.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/tests/test_advanced_analysis.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/tests/test_analyzer.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/tests/test_calls_toon_export.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/tests/test_deep_analysis.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/tests/test_edge_cases.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/tests/test_flow_exporter.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/tests/test_format_quality.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/tests/test_multilanguage_e2e.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/tests/test_nlp_pipeline.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/tests/test_nonpython_cc_calls.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/tests/test_persistent_cache.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/tests/test_pipeline_detector.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/tests/test_project_toon_export.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/tests/test_prompt_engine.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/tests/test_prompt_txt.py +0 -0
- {code2llm-0.5.132 → code2llm-0.5.134}/tests/test_refactoring_engine.py +0 -0
- {code2llm-0.5.132 → 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.
|
|
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
|
-
    
|
|
71
|
+
  
|
|
72
72
|
|
|
73
|
-
- 🤖 **LLM usage:** $
|
|
74
|
-
- 👤 **Human dev:** ~$
|
|
73
|
+
- 🤖 **LLM usage:** $153.4641 (195 commits)
|
|
74
|
+
- 👤 **Human dev:** ~$6447 (64.5h @ $100/h, 30min dedup)
|
|
75
75
|
|
|
76
|
-
Generated on 2026-04-
|
|
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
|
-
    
|
|
7
|
+
  
|
|
8
8
|
|
|
9
|
-
- 🤖 **LLM usage:** $
|
|
10
|
-
- 👤 **Human dev:** ~$
|
|
9
|
+
- 🤖 **LLM usage:** $153.4641 (195 commits)
|
|
10
|
+
- 👤 **Human dev:** ~$6447 (64.5h @ $100/h, 30min dedup)
|
|
11
11
|
|
|
12
|
-
Generated on 2026-04-
|
|
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
|
code2llm-0.5.134/VERSION
ADDED
|
@@ -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.
|
|
11
|
+
__version__ = "0.5.134"
|
|
12
12
|
__author__ = "STTS Project"
|
|
13
13
|
|
|
14
14
|
# Core analysis components (lightweight, always needed)
|
|
@@ -43,12 +43,7 @@ class ProjectAnalyzer:
|
|
|
43
43
|
def analyze_project(self, project_path: str) -> AnalysisResult:
|
|
44
44
|
"""Analyze entire project."""
|
|
45
45
|
start_time = time.time()
|
|
46
|
-
print(f"DEBUG analyze_project: input project_path={project_path}")
|
|
47
|
-
print(f"DEBUG analyze_project: self.project_path before={self.project_path}")
|
|
48
46
|
project_path = self._resolve_project_path(project_path)
|
|
49
|
-
print(f"DEBUG analyze_project: project_path after resolve={project_path}")
|
|
50
|
-
print(f"DEBUG analyze_project: self.project_path after={self.project_path}")
|
|
51
|
-
print(f"DEBUG analyze_project: file_filter.project_path={self.file_filter.project_path}")
|
|
52
47
|
files = self._collect_files(project_path)
|
|
53
48
|
|
|
54
49
|
if self.config.verbose:
|
|
@@ -67,9 +62,7 @@ class ProjectAnalyzer:
|
|
|
67
62
|
print(f" ... and {len(files_to_analyze) - 10} more")
|
|
68
63
|
print()
|
|
69
64
|
|
|
70
|
-
print(f"DEBUG analyze_project: files_to_analyze={len(files_to_analyze)}")
|
|
71
65
|
fresh_results = self._run_analysis(files_to_analyze)
|
|
72
|
-
print(f"DEBUG analyze_project: fresh_results={len(fresh_results)}")
|
|
73
66
|
self._store_to_persistent_cache(pcache, files_to_analyze, fresh_results)
|
|
74
67
|
|
|
75
68
|
merged = self._merge_results(cached_results + fresh_results, str(project_path))
|
|
@@ -214,10 +207,6 @@ class ProjectAnalyzer:
|
|
|
214
207
|
if not self.file_filter.should_process(file_str):
|
|
215
208
|
continue
|
|
216
209
|
|
|
217
|
-
# DEBUG
|
|
218
|
-
if 'vendor' in file_str.lower():
|
|
219
|
-
print(f"DEBUG _collect_files: COLLECTED vendor file: {file_str}")
|
|
220
|
-
|
|
221
210
|
# Calculate module name from relative path
|
|
222
211
|
rel = os.path.relpath(file_str, project_str)
|
|
223
212
|
parts = rel.replace('\\', '/').split('/')
|
|
@@ -231,10 +220,6 @@ class ProjectAnalyzer:
|
|
|
231
220
|
|
|
232
221
|
files.append((file_str, module_name))
|
|
233
222
|
|
|
234
|
-
# DEBUG
|
|
235
|
-
vendor_count = len([f for f, m in files if 'vendor' in f.lower()])
|
|
236
|
-
print(f"DEBUG _collect_files: total={len(files)}, vendor={vendor_count}")
|
|
237
|
-
|
|
238
223
|
return files
|
|
239
224
|
|
|
240
225
|
def _analyze_parallel(self, files: List[Tuple[str, str]]) -> List[Dict]:
|
|
@@ -98,20 +98,10 @@ class FastFileFilter:
|
|
|
98
98
|
path_lower = file_path.lower()
|
|
99
99
|
basename_lower = Path(file_path).name.lower()
|
|
100
100
|
|
|
101
|
-
passes_gitignore = self._passes_gitignore(file_path)
|
|
102
|
-
passes_excludes = self._passes_excludes(path_lower, basename_lower)
|
|
103
|
-
passes_includes = self._passes_includes(path_lower)
|
|
104
|
-
|
|
105
|
-
# DEBUG
|
|
106
|
-
if 'vendor' in file_path.lower():
|
|
107
|
-
print(f"DEBUG should_process: {file_path}")
|
|
108
|
-
print(f" passes_gitignore={passes_gitignore}, passes_excludes={passes_excludes}, passes_includes={passes_includes}")
|
|
109
|
-
print(f" _gitignore_parser={self._gitignore_parser}, project_path={self.project_path}")
|
|
110
|
-
|
|
111
101
|
return (
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
102
|
+
self._passes_gitignore(file_path) and
|
|
103
|
+
self._passes_excludes(path_lower, basename_lower) and
|
|
104
|
+
self._passes_includes(path_lower)
|
|
115
105
|
)
|
|
116
106
|
|
|
117
107
|
def _passes_line_count(self, line_count: int) -> bool:
|
|
@@ -110,22 +110,11 @@ class GitIgnoreParser:
|
|
|
110
110
|
except ValueError:
|
|
111
111
|
return False
|
|
112
112
|
|
|
113
|
-
# DEBUG
|
|
114
|
-
if 'vendor' in path_str:
|
|
115
|
-
print(f"DEBUG is_ignored: path_str={path_str}, entries={len(self._entries)}")
|
|
116
|
-
|
|
117
113
|
ignored = False
|
|
118
114
|
for entry in self._entries:
|
|
119
115
|
if entry.regex.search(path_str):
|
|
120
|
-
# DEBUG
|
|
121
|
-
if 'vendor' in path_str:
|
|
122
|
-
print(f"DEBUG is_ignored: MATCHED pattern={entry.regex.pattern}, is_negated={entry.is_negated}")
|
|
123
116
|
ignored = not entry.is_negated
|
|
124
117
|
|
|
125
|
-
# DEBUG
|
|
126
|
-
if 'vendor' in path_str:
|
|
127
|
-
print(f"DEBUG is_ignored: result={ignored}")
|
|
128
|
-
|
|
129
118
|
return ignored
|
|
130
119
|
|
|
131
120
|
|
|
@@ -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,
|
|
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,
|
|
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':
|
|
217
|
+
'calls_in': calls_in,
|
|
205
218
|
}
|
|
206
219
|
|
|
207
|
-
def
|
|
208
|
-
"""
|
|
209
|
-
|
|
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
|
-
|
|
213
|
-
if
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
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
|
-
|
|
249
|
-
|
|
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 =
|
|
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
|
-
|
|
71
|
-
|
|
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()
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: code2llm
|
|
3
|
-
Version: 0.5.
|
|
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
|
-
    
|
|
71
|
+
  
|
|
72
72
|
|
|
73
|
-
- 🤖 **LLM usage:** $
|
|
74
|
-
- 👤 **Human dev:** ~$
|
|
73
|
+
- 🤖 **LLM usage:** $153.4641 (195 commits)
|
|
74
|
+
- 👤 **Human dev:** ~$6447 (64.5h @ $100/h, 30min dedup)
|
|
75
75
|
|
|
76
|
-
Generated on 2026-04-
|
|
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.
|
|
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.132/VERSION
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
0.5.132
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|