code2llm 0.5.140__tar.gz → 0.5.142__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.140/code2llm.egg-info → code2llm-0.5.142}/PKG-INFO +2 -2
- {code2llm-0.5.140 → code2llm-0.5.142}/README.md +1 -1
- code2llm-0.5.142/VERSION +1 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/__init__.py +1 -1
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/cli_exports/orchestrator.py +18 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/nlp/__init__.py +1 -1
- {code2llm-0.5.140 → code2llm-0.5.142/code2llm.egg-info}/PKG-INFO +2 -2
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm.egg-info/SOURCES.txt +1 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/pyproject.toml +1 -1
- code2llm-0.5.142/tests/test_orchestrator_cache_mtime.py +54 -0
- code2llm-0.5.140/VERSION +0 -1
- {code2llm-0.5.140 → code2llm-0.5.142}/LICENSE +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/MANIFEST.in +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/__main__.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/analysis/__init__.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/analysis/call_graph.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/analysis/cfg.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/analysis/coupling.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/analysis/data_analysis.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/analysis/dfg.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/analysis/pipeline_classifier.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/analysis/pipeline_detector.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/analysis/pipeline_resolver.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/analysis/side_effects.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/analysis/smells.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/analysis/type_inference.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/analysis/utils/__init__.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/analysis/utils/ast_helpers.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/api.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/cli.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/cli_analysis.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/cli_commands.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/cli_exports/__init__.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/cli_exports/code2logic.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/cli_exports/formats.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/cli_exports/orchestrator_chunked.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/cli_exports/orchestrator_constants.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/cli_exports/orchestrator_handlers.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/cli_exports/prompt.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/cli_parser.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/core/__init__.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/core/analyzer.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/core/ast_registry.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/core/config.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/core/export_pipeline.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/core/file_analyzer.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/core/file_cache.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/core/file_filter.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/core/gitignore.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/core/incremental.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/core/lang/__init__.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/core/lang/base.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/core/lang/cpp.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/core/lang/csharp.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/core/lang/generic.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/core/lang/go_lang.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/core/lang/java.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/core/lang/php.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/core/lang/ruby.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/core/lang/rust.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/core/lang/ts_extractors.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/core/lang/ts_parser.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/core/lang/typescript.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/core/large_repo.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/core/models.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/core/persistent_cache.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/core/refactoring.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/core/repo_files.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/core/streaming/__init__.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/core/streaming/cache.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/core/streaming/incremental.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/core/streaming/prioritizer.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/core/streaming/scanner.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/core/streaming/strategies.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/core/streaming_analyzer.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/core/toon_size_manager.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/exporters/__init__.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/exporters/article_view.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/exporters/base.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/exporters/context_exporter.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/exporters/context_view.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/exporters/dashboard_data.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/exporters/dashboard_renderer.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/exporters/evolution/__init__.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/exporters/evolution/computation.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/exporters/evolution/constants.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/exporters/evolution/exclusion.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/exporters/evolution/render.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/exporters/evolution/yaml_export.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/exporters/evolution_exporter.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/exporters/flow_constants.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/exporters/flow_exporter.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/exporters/flow_renderer.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/exporters/html_dashboard.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/exporters/index_generator/__init__.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/exporters/index_generator/renderer.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/exporters/index_generator/scanner.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/exporters/index_generator.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/exporters/json_exporter.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/exporters/llm_exporter.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/exporters/map/__init__.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/exporters/map/alerts.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/exporters/map/details.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/exporters/map/header.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/exporters/map/module_list.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/exporters/map/utils.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/exporters/map/yaml_export.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/exporters/map_exporter.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/exporters/mermaid/__init__.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/exporters/mermaid/calls.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/exporters/mermaid/classic.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/exporters/mermaid/compact.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/exporters/mermaid/flow_compact.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/exporters/mermaid/flow_detailed.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/exporters/mermaid/flow_full.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/exporters/mermaid/utils.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/exporters/mermaid_exporter.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/exporters/mermaid_flow_helpers.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/exporters/project_yaml/__init__.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/exporters/project_yaml/constants.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/exporters/project_yaml/core.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/exporters/project_yaml/evolution.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/exporters/project_yaml/health.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/exporters/project_yaml/hotspots.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/exporters/project_yaml/modules.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/exporters/project_yaml_exporter.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/exporters/readme/__init__.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/exporters/readme/content.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/exporters/readme/files.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/exporters/readme/insights.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/exporters/readme/sections.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/exporters/readme_exporter.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/exporters/report_generators.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/exporters/toon/__init__.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/exporters/toon/helpers.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/exporters/toon/metrics.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/exporters/toon/metrics_core.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/exporters/toon/metrics_duplicates.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/exporters/toon/metrics_health.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/exporters/toon/module_detail.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/exporters/toon/renderer.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/exporters/toon.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/exporters/toon_view.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/exporters/validate_project.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/exporters/yaml_exporter.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/generators/__init__.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/generators/_utils.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/generators/llm_flow/__init__.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/generators/llm_flow/analysis.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/generators/llm_flow/cli.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/generators/llm_flow/generator.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/generators/llm_flow/nodes.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/generators/llm_flow/parsing.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/generators/llm_flow/utils.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/generators/llm_flow.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/generators/llm_task.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/generators/mermaid/__init__.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/generators/mermaid/fix.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/generators/mermaid/png.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/generators/mermaid/validation.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/generators/mermaid.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/nlp/config.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/nlp/entity_resolution.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/nlp/intent_matching.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/nlp/normalization.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/nlp/pipeline.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/parsers/toon_parser.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/patterns/__init__.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/patterns/detector.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/refactor/__init__.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm/refactor/prompt_engine.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm.egg-info/dependency_links.txt +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm.egg-info/entry_points.txt +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm.egg-info/requires.txt +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/code2llm.egg-info/top_level.txt +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/setup.cfg +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/setup.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/tests/test_advanced_analysis.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/tests/test_analyzer.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/tests/test_calls_toon_export.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/tests/test_deep_analysis.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/tests/test_edge_cases.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/tests/test_flow_exporter.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/tests/test_format_quality.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/tests/test_multilanguage_e2e.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/tests/test_nlp_pipeline.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/tests/test_nonpython_cc_calls.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/tests/test_persistent_cache.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/tests/test_pipeline_detector.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/tests/test_project_toon_export.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/tests/test_prompt_engine.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/tests/test_prompt_txt.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/tests/test_refactoring_engine.py +0 -0
- {code2llm-0.5.140 → code2llm-0.5.142}/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.142
|
|
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
|
-
    
|
|
71
71
|
  
|
|
72
72
|
|
|
73
73
|
- 🤖 **LLM usage:** $7.5000 (190 commits)
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
|
|
4
4
|
## AI Cost Tracking
|
|
5
5
|
|
|
6
|
-
    
|
|
7
7
|
  
|
|
8
8
|
|
|
9
9
|
- 🤖 **LLM usage:** $7.5000 (190 commits)
|
code2llm-0.5.142/VERSION
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0.5.142
|
|
@@ -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.142"
|
|
12
12
|
__author__ = "STTS Project"
|
|
13
13
|
|
|
14
14
|
# Core analysis components (lightweight, always needed)
|
|
@@ -4,6 +4,7 @@ Refactored to use EXPORT_REGISTRY for core format dispatch.
|
|
|
4
4
|
Maintains backward compatibility with all existing --format values.
|
|
5
5
|
"""
|
|
6
6
|
|
|
7
|
+
import os
|
|
7
8
|
import shutil
|
|
8
9
|
import sys
|
|
9
10
|
from pathlib import Path
|
|
@@ -164,6 +165,23 @@ def _copy_cached_export(cached_dir: Path, output_dir: Path, verbose: bool = Fals
|
|
|
164
165
|
shutil.copytree(item, dest, dirs_exist_ok=True)
|
|
165
166
|
else:
|
|
166
167
|
shutil.copy2(item, dest)
|
|
168
|
+
# Refresh mtime so the user can tell these files were produced by
|
|
169
|
+
# the current run, even though the contents came from cache.
|
|
170
|
+
_touch_recursive(dest)
|
|
171
|
+
|
|
172
|
+
|
|
173
|
+
def _touch_recursive(path: Path) -> None:
|
|
174
|
+
"""Update mtime/atime to now for `path` (and all contents if it is a dir)."""
|
|
175
|
+
try:
|
|
176
|
+
os.utime(path, None)
|
|
177
|
+
except OSError:
|
|
178
|
+
return
|
|
179
|
+
if path.is_dir():
|
|
180
|
+
for sub in path.rglob('*'):
|
|
181
|
+
try:
|
|
182
|
+
os.utime(sub, None)
|
|
183
|
+
except OSError:
|
|
184
|
+
continue
|
|
167
185
|
|
|
168
186
|
|
|
169
187
|
def _copy_to_cache(output_dir: Path, cache_dir: Path, verbose: bool = False) -> None:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: code2llm
|
|
3
|
-
Version: 0.5.
|
|
3
|
+
Version: 0.5.142
|
|
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
|
-
    
|
|
71
71
|
  
|
|
72
72
|
|
|
73
73
|
- 🤖 **LLM usage:** $7.5000 (190 commits)
|
|
@@ -181,6 +181,7 @@ tests/test_format_quality.py
|
|
|
181
181
|
tests/test_multilanguage_e2e.py
|
|
182
182
|
tests/test_nlp_pipeline.py
|
|
183
183
|
tests/test_nonpython_cc_calls.py
|
|
184
|
+
tests/test_orchestrator_cache_mtime.py
|
|
184
185
|
tests/test_persistent_cache.py
|
|
185
186
|
tests/test_pipeline_detector.py
|
|
186
187
|
tests/test_project_toon_export.py
|
|
@@ -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.142"
|
|
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"
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"""Regression test: cache-restored export files must have a fresh mtime.
|
|
2
|
+
|
|
3
|
+
Previously `_copy_cached_export` used `shutil.copy2` which preserves the
|
|
4
|
+
original mtime, making users believe the current `code2llm` run did not
|
|
5
|
+
produce any output (the files looked stale). The orchestrator now
|
|
6
|
+
touches every restored file so its mtime reflects the current run.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
import os
|
|
10
|
+
import time
|
|
11
|
+
from pathlib import Path
|
|
12
|
+
|
|
13
|
+
import pytest
|
|
14
|
+
|
|
15
|
+
from code2llm.cli_exports.orchestrator import _copy_cached_export
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def _write(path: Path, content: str, mtime: float) -> None:
|
|
19
|
+
path.parent.mkdir(parents=True, exist_ok=True)
|
|
20
|
+
path.write_text(content, encoding="utf-8")
|
|
21
|
+
os.utime(path, (mtime, mtime))
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def test_copy_cached_export_refreshes_mtime(tmp_path: Path) -> None:
|
|
25
|
+
cache_dir = tmp_path / "cache"
|
|
26
|
+
output_dir = tmp_path / "out"
|
|
27
|
+
|
|
28
|
+
old_mtime = time.time() - 60 * 60 * 24 # 24h ago
|
|
29
|
+
|
|
30
|
+
_write(cache_dir / "analysis.toon.yaml", "x: 1\n", old_mtime)
|
|
31
|
+
_write(cache_dir / "sub" / "inner.md", "# hi\n", old_mtime)
|
|
32
|
+
|
|
33
|
+
before = time.time() - 1
|
|
34
|
+
_copy_cached_export(cache_dir, output_dir, verbose=False)
|
|
35
|
+
after = time.time() + 1
|
|
36
|
+
|
|
37
|
+
for rel in ("analysis.toon.yaml", "sub/inner.md"):
|
|
38
|
+
dest = output_dir / rel
|
|
39
|
+
assert dest.exists(), f"missing {rel}"
|
|
40
|
+
mtime = dest.stat().st_mtime
|
|
41
|
+
assert before <= mtime <= after, (
|
|
42
|
+
f"{rel} mtime {mtime} not in current run window "
|
|
43
|
+
f"[{before}, {after}] (old_mtime={old_mtime})"
|
|
44
|
+
)
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def test_copy_cached_export_preserves_contents(tmp_path: Path) -> None:
|
|
48
|
+
cache_dir = tmp_path / "cache"
|
|
49
|
+
output_dir = tmp_path / "out"
|
|
50
|
+
|
|
51
|
+
_write(cache_dir / "analysis.toon.yaml", "content: cached\n", time.time() - 10)
|
|
52
|
+
_copy_cached_export(cache_dir, output_dir, verbose=False)
|
|
53
|
+
|
|
54
|
+
assert (output_dir / "analysis.toon.yaml").read_text(encoding="utf-8") == "content: cached\n"
|
code2llm-0.5.140/VERSION
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
0.5.140
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|