sourcecode 1.30.22__tar.gz → 1.30.24__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.
- {sourcecode-1.30.22 → sourcecode-1.30.24}/PKG-INFO +3 -3
- {sourcecode-1.30.22 → sourcecode-1.30.24}/README.md +2 -2
- {sourcecode-1.30.22 → sourcecode-1.30.24}/pyproject.toml +1 -1
- {sourcecode-1.30.22 → sourcecode-1.30.24}/src/sourcecode/__init__.py +1 -1
- {sourcecode-1.30.22 → sourcecode-1.30.24}/src/sourcecode/prepare_context.py +134 -29
- {sourcecode-1.30.22 → sourcecode-1.30.24}/.agents/skills/source-command-gsd-join-discord/SKILL.md +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/.agents/skills/source-command-gsd-review-backlog/SKILL.md +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/.agents/skills/source-command-gsd-workstreams/SKILL.md +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/.continue-here.md +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/.github/workflows/build-windows.yml +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/.gitignore +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/.ruff.toml +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/CONTRIBUTING.md +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/LICENSE +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/SECURITY.md +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/docs/privacy.md +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/docs/schema.md +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/raw +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/run_cli.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/src/sourcecode/adaptive_scanner.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/src/sourcecode/architecture_analyzer.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/src/sourcecode/architecture_summary.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/src/sourcecode/ast_extractor.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/src/sourcecode/classifier.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/src/sourcecode/cli.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/src/sourcecode/code_notes_analyzer.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/src/sourcecode/confidence_analyzer.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/src/sourcecode/context_scorer.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/src/sourcecode/context_summarizer.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/src/sourcecode/contract_model.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/src/sourcecode/contract_pipeline.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/src/sourcecode/coverage_parser.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/src/sourcecode/dependency_analyzer.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/src/sourcecode/detectors/__init__.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/src/sourcecode/detectors/base.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/src/sourcecode/detectors/csproj_parser.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/src/sourcecode/detectors/dart.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/src/sourcecode/detectors/dotnet.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/src/sourcecode/detectors/elixir.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/src/sourcecode/detectors/go.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/src/sourcecode/detectors/heuristic.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/src/sourcecode/detectors/hybrid.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/src/sourcecode/detectors/java.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/src/sourcecode/detectors/jvm_ext.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/src/sourcecode/detectors/nodejs.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/src/sourcecode/detectors/parsers.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/src/sourcecode/detectors/php.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/src/sourcecode/detectors/project.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/src/sourcecode/detectors/python.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/src/sourcecode/detectors/ruby.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/src/sourcecode/detectors/rust.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/src/sourcecode/detectors/systems.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/src/sourcecode/detectors/terraform.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/src/sourcecode/detectors/tooling.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/src/sourcecode/doc_analyzer.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/src/sourcecode/entrypoint_classifier.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/src/sourcecode/env_analyzer.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/src/sourcecode/file_classifier.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/src/sourcecode/flow_analyzer.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/src/sourcecode/git_analyzer.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/src/sourcecode/graph_analyzer.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/src/sourcecode/metrics_analyzer.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/src/sourcecode/pr_comment_renderer.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/src/sourcecode/progress.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/src/sourcecode/ranking_engine.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/src/sourcecode/redactor.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/src/sourcecode/relevance_scorer.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/src/sourcecode/repo_classifier.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/src/sourcecode/repository_ir.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/src/sourcecode/runtime_classifier.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/src/sourcecode/scanner.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/src/sourcecode/schema.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/src/sourcecode/semantic_analyzer.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/src/sourcecode/serializer.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/src/sourcecode/summarizer.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/src/sourcecode/telemetry/__init__.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/src/sourcecode/telemetry/config.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/src/sourcecode/telemetry/consent.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/src/sourcecode/telemetry/events.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/src/sourcecode/telemetry/filters.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/src/sourcecode/telemetry/transport.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/src/sourcecode/tree_utils.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/src/sourcecode/workspace.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/__init__.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/conftest.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/fixtures/coverage.xml +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/fixtures/fastapi_app/pyproject.toml +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/fixtures/fastapi_app/src/main.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/fixtures/go_service/cmd/api/main.go +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/fixtures/go_service/go.mod +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/fixtures/jacoco.xml +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/fixtures/latin1_sample.java +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/fixtures/latin1_sample_iso.java +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/fixtures/lcov.info +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/fixtures/nextjs_app/app/page.tsx +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/fixtures/nextjs_app/package.json +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/fixtures/nextjs_app/pnpm-lock.yaml +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/fixtures/pnpm_monorepo/apps/web/app/page.tsx +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/fixtures/pnpm_monorepo/apps/web/package.json +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/fixtures/pnpm_monorepo/packages/api/main.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/fixtures/pnpm_monorepo/packages/api/pyproject.toml +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/fixtures/pnpm_monorepo/pnpm-workspace.yaml +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/fixtures/spring_boot_minimal/pom.xml +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/ddd/ausente/application/service/FindAusenteService.java +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/ddd/ausente/domain/entities/Ausente.java +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/ddd/ausente/infrastructure/rest/AusenteRestController.java +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/ddd/autocoberturas/application/service/FindAutocoberturasService.java +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/ddd/autocoberturas/domain/entities/Autocoberturas.java +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/ddd/autocoberturas/infrastructure/rest/AutocoberturasRestController.java +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/ddd/calendarioTrabajador/application/service/FindCalendarioTrabajadorService.java +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/ddd/calendarioTrabajador/domain/entities/CalendarioTrabajador.java +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/ddd/calendarioTrabajador/infrastructure/rest/CalendarioTrabajadorRestController.java +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/ddd/departamento/application/service/FindDepartamentoService.java +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/ddd/departamento/domain/entities/Departamento.java +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/ddd/departamento/infrastructure/rest/DepartamentoRestController.java +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/ddd/empleado/application/service/FindEmpleadoService.java +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/ddd/empleado/domain/entities/Empleado.java +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/ddd/empleado/infrastructure/rest/EmpleadoRestController.java +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/demo/DemoApplication.java +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/demo/config/FilterConfig.java +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/demo/domain/Health.java +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/demo/mapper/HealthMapper.java +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/demo/repository/HealthRepository.java +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/demo/service/HealthService.java +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/demo/web/HealthRestController.java +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/demo/web/NominaRestController.java +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/fixtures/spring_boot_minimal/src/main/resources/application-dev.yml +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/fixtures/spring_boot_minimal/src/main/resources/application.yml +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/fixtures/spring_boot_minimal/src/main/resources/mapper/HealthMapper.xml +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/test_architecture_analyzer.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/test_architecture_summary.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/test_ast_extractor.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/test_block1_reliability.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/test_block2_coverage.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/test_block5_quality.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/test_bug_fixes_v16.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/test_classifier.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/test_cli.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/test_code_notes_analyzer.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/test_context_scorer.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/test_contract_pipeline.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/test_coverage_parser.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/test_cross_consistency.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/test_dependency_analyzer_node_python.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/test_dependency_analyzer_polyglot.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/test_dependency_schema.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/test_detector_dotnet.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/test_detector_go_rust_java.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/test_detector_nodejs.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/test_detector_php_ruby_dart.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/test_detector_python.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/test_detector_universal_managed.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/test_detector_universal_systems.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/test_detectors_base.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/test_doc_analyzer_jsdom.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/test_doc_analyzer_python.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/test_encoding_regression.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/test_graph_analyzer_polyglot.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/test_graph_analyzer_python_node.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/test_graph_schema.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/test_hybrid_inference.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/test_integration.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/test_integration_dependencies.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/test_integration_detection.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/test_integration_docs.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/test_integration_graph_modules.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/test_integration_lqn.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/test_integration_metrics.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/test_integration_multistack.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/test_integration_semantics.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/test_integration_universal.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/test_java_spring_integration.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/test_metrics_analyzer.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/test_output_ux.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/test_packaging.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/test_phase1_improvements.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/test_pipeline_integrity.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/test_real_projects.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/test_redactor.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/test_repository_ir.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/test_scanner.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/test_schema.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/test_schema_normalization.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/test_semantic_analyzer_node.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/test_semantic_analyzer_python.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/test_semantic_import_resolution.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/test_semantic_schema.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/test_signal_hierarchy.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/test_summarizer.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/test_surface_honesty.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/test_task_differentiation.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/test_telemetry.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/test_v131_improvements.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/test_v1_10_regressions.py +0 -0
- {sourcecode-1.30.22 → sourcecode-1.30.24}/tests/test_workspace_analyzer.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: sourcecode
|
|
3
|
-
Version: 1.30.
|
|
3
|
+
Version: 1.30.24
|
|
4
4
|
Summary: Deterministic codebase context for AI coding agents
|
|
5
5
|
License: Apache License
|
|
6
6
|
Version 2.0, January 2004
|
|
@@ -221,7 +221,7 @@ Description-Content-Type: text/markdown
|
|
|
221
221
|
|
|
222
222
|
**Deterministic, behavior-aware codebase context for AI agents and PR review.**
|
|
223
223
|
|
|
224
|
-

|
|
225
225
|

|
|
226
226
|
|
|
227
227
|
---
|
|
@@ -257,7 +257,7 @@ pipx install sourcecode
|
|
|
257
257
|
|
|
258
258
|
```bash
|
|
259
259
|
sourcecode version
|
|
260
|
-
# sourcecode 1.30.
|
|
260
|
+
# sourcecode 1.30.24
|
|
261
261
|
```
|
|
262
262
|
|
|
263
263
|
---
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
**Deterministic, behavior-aware codebase context for AI agents and PR review.**
|
|
4
4
|
|
|
5
|
-

|
|
6
6
|

|
|
7
7
|
|
|
8
8
|
---
|
|
@@ -38,7 +38,7 @@ pipx install sourcecode
|
|
|
38
38
|
|
|
39
39
|
```bash
|
|
40
40
|
sourcecode version
|
|
41
|
-
# sourcecode 1.30.
|
|
41
|
+
# sourcecode 1.30.24
|
|
42
42
|
```
|
|
43
43
|
|
|
44
44
|
---
|
|
@@ -25,6 +25,7 @@ class DiffSourceType(str, Enum):
|
|
|
25
25
|
WORKTREE_STAGED = "WORKTREE_STAGED" # git diff --cached
|
|
26
26
|
GIT_SINCE_REF = "GIT_SINCE_REF" # git diff ref HEAD
|
|
27
27
|
GIT_RANGE = "GIT_RANGE" # git diff refA refB
|
|
28
|
+
HEAD_MINUS_1 = "HEAD_MINUS_1" # git diff HEAD~1 HEAD (auto-fallback when tree clean)
|
|
28
29
|
|
|
29
30
|
|
|
30
31
|
# ─────────────────────────────────────────────────────────────────────────────
|
|
@@ -601,6 +602,83 @@ _FRONTEND_SYMPTOM_MAP: dict[str, list[str]] = {
|
|
|
601
602
|
}
|
|
602
603
|
|
|
603
604
|
|
|
605
|
+
def _build_analysis_scope(
|
|
606
|
+
*,
|
|
607
|
+
task_name: str,
|
|
608
|
+
since: Optional[str],
|
|
609
|
+
delta_baseline: dict,
|
|
610
|
+
pr_scope_source: str,
|
|
611
|
+
pr_uncommitted_files: list,
|
|
612
|
+
) -> dict:
|
|
613
|
+
"""Build analysis_scope metadata from actual git resolution — never hardcoded."""
|
|
614
|
+
if task_name == "review-pr":
|
|
615
|
+
sources = pr_scope_source.split(",") if pr_scope_source else []
|
|
616
|
+
# Derive git_equivalent_command from sources
|
|
617
|
+
cmds: list[str] = []
|
|
618
|
+
if DiffSourceType.GIT_RANGE.value in sources or DiffSourceType.GIT_SINCE_REF.value in sources:
|
|
619
|
+
cmds.append(f"git diff --name-only {since} HEAD")
|
|
620
|
+
if DiffSourceType.HEAD_MINUS_1.value in sources:
|
|
621
|
+
cmds.append("git diff --name-only HEAD~1 HEAD")
|
|
622
|
+
if DiffSourceType.WORKTREE_UNSTAGED.value in sources:
|
|
623
|
+
cmds.append("git diff --name-only")
|
|
624
|
+
if DiffSourceType.WORKTREE_STAGED.value in sources:
|
|
625
|
+
cmds.append("git diff --name-only --cached")
|
|
626
|
+
git_cmd = " + ".join(cmds) if cmds else "git diff --name-only"
|
|
627
|
+
return {
|
|
628
|
+
"sources_used": sources,
|
|
629
|
+
"git_equivalent_command": git_cmd,
|
|
630
|
+
"includes_uncommitted": bool(pr_uncommitted_files),
|
|
631
|
+
"git_resolution": {
|
|
632
|
+
"source_of_truth": "RANGE" if since else (
|
|
633
|
+
"HEAD" if DiffSourceType.HEAD_MINUS_1.value in sources else "WORKTREE"
|
|
634
|
+
),
|
|
635
|
+
"resolved_diff_strategy": pr_scope_source,
|
|
636
|
+
"commit_count_analyzed": 1 if DiffSourceType.HEAD_MINUS_1.value in sources else (
|
|
637
|
+
0 if not since else None
|
|
638
|
+
),
|
|
639
|
+
},
|
|
640
|
+
}
|
|
641
|
+
|
|
642
|
+
# delta
|
|
643
|
+
rpath = delta_baseline.get("resolution_path", "")
|
|
644
|
+
rref = delta_baseline.get("resolved_ref", "HEAD")
|
|
645
|
+
|
|
646
|
+
_COMMITTED_PATHS = {"exact_local_ref", "remote_tracking_ref", "symbolic_ref"}
|
|
647
|
+
if rpath in _COMMITTED_PATHS:
|
|
648
|
+
sources = [DiffSourceType.GIT_SINCE_REF.value]
|
|
649
|
+
git_cmd = f"git diff --name-only {rref} HEAD"
|
|
650
|
+
source_of_truth = "RANGE"
|
|
651
|
+
includes_uncommitted = False
|
|
652
|
+
elif rpath == "head_minus_1_fallback":
|
|
653
|
+
sources = [DiffSourceType.HEAD_MINUS_1.value]
|
|
654
|
+
git_cmd = "git diff --name-only HEAD~1 HEAD"
|
|
655
|
+
source_of_truth = "HEAD"
|
|
656
|
+
includes_uncommitted = False
|
|
657
|
+
elif rpath == "uncommitted_staged":
|
|
658
|
+
sources = [DiffSourceType.WORKTREE_STAGED.value]
|
|
659
|
+
git_cmd = "git diff --name-only --cached"
|
|
660
|
+
source_of_truth = "STAGED"
|
|
661
|
+
includes_uncommitted = True
|
|
662
|
+
else: # uncommitted_unstaged, uncommitted_changes, no_changes_confirmed
|
|
663
|
+
sources = [DiffSourceType.WORKTREE_UNSTAGED.value]
|
|
664
|
+
git_cmd = "git diff --name-only"
|
|
665
|
+
source_of_truth = "WORKTREE"
|
|
666
|
+
includes_uncommitted = True
|
|
667
|
+
|
|
668
|
+
return {
|
|
669
|
+
"sources_used": sources,
|
|
670
|
+
"git_equivalent_command": git_cmd,
|
|
671
|
+
"includes_uncommitted": includes_uncommitted,
|
|
672
|
+
"git_resolution": {
|
|
673
|
+
"source_of_truth": source_of_truth,
|
|
674
|
+
"resolved_diff_strategy": rpath or "unknown",
|
|
675
|
+
"commit_count_analyzed": 1 if rpath == "head_minus_1_fallback" else (
|
|
676
|
+
0 if rpath == "no_changes_confirmed" else None
|
|
677
|
+
),
|
|
678
|
+
},
|
|
679
|
+
}
|
|
680
|
+
|
|
681
|
+
|
|
604
682
|
class TaskContextBuilder:
|
|
605
683
|
def __init__(self, root: Path) -> None:
|
|
606
684
|
self.root = root
|
|
@@ -870,9 +948,11 @@ class TaskContextBuilder:
|
|
|
870
948
|
# For delta task, relevant_files must rank only files changed in the
|
|
871
949
|
# specified git range, not the full repo by generic entrypoint scoring.
|
|
872
950
|
_delta_files: Optional[set[str]] = None
|
|
951
|
+
_delta_baseline: dict = {} # resolution metadata threaded into analysis_scope
|
|
873
952
|
if task_name == "delta":
|
|
874
|
-
|
|
875
|
-
|
|
953
|
+
_baseline = self._resolve_git_baseline(since=since)
|
|
954
|
+
_delta_baseline = _baseline
|
|
955
|
+
if _baseline["error"]:
|
|
876
956
|
# Explicit --since ref couldn't be resolved — hard error, no fallback
|
|
877
957
|
_avail_branches, _suggested = self._get_available_refs(since or "")
|
|
878
958
|
_hints: list[str] = []
|
|
@@ -899,8 +979,11 @@ class TaskContextBuilder:
|
|
|
899
979
|
error_hints=_hints,
|
|
900
980
|
gaps=[f"Cannot compute delta: git ref '{since}' not found."] + _hints,
|
|
901
981
|
ci_decision="git_ref_error",
|
|
982
|
+
resolution_path=_baseline.get("resolution_path"),
|
|
983
|
+
diff_validation_status=_baseline.get("diff_validation_status"),
|
|
902
984
|
)
|
|
903
|
-
|
|
985
|
+
_delta_raw = _baseline["files"]
|
|
986
|
+
if _delta_raw:
|
|
904
987
|
_delta_files = set(_delta_raw)
|
|
905
988
|
|
|
906
989
|
# ── 5d. review-pr: set _delta_files from pre-resolved git scope ──────────
|
|
@@ -1005,8 +1088,12 @@ class TaskContextBuilder:
|
|
|
1005
1088
|
_pr_build_changes: dict = {}
|
|
1006
1089
|
_pr_committed_changes: list[dict] = []
|
|
1007
1090
|
_pr_uncommitted_changes: list[dict] = []
|
|
1008
|
-
|
|
1009
|
-
|
|
1091
|
+
# Only default these for non-review-pr tasks — review-pr already set them
|
|
1092
|
+
# at line 714 via _get_pr_scope_files. Re-initializing here would shadow
|
|
1093
|
+
# those values and make _committed_set/_uncommitted_set always empty.
|
|
1094
|
+
if task_name != "review-pr":
|
|
1095
|
+
_pr_committed_files: list[str] = []
|
|
1096
|
+
_pr_uncommitted_files: list[str] = []
|
|
1010
1097
|
|
|
1011
1098
|
if task_name == "review-pr":
|
|
1012
1099
|
_pr_base_ref = since or "HEAD"
|
|
@@ -1515,7 +1602,11 @@ class TaskContextBuilder:
|
|
|
1515
1602
|
changed_files: list[str] = []
|
|
1516
1603
|
affected_entry_points: list[str] = []
|
|
1517
1604
|
if task_name in ("delta", "review-pr"):
|
|
1518
|
-
|
|
1605
|
+
# For delta: _delta_files already resolved via _resolve_git_baseline — no second git call.
|
|
1606
|
+
# For review-pr: _get_git_changed_files fallback still valid as last resort.
|
|
1607
|
+
changed_files = sorted(_delta_files) if _delta_files else (
|
|
1608
|
+
[] if task_name == "delta" else (self._get_git_changed_files(since=since) or [])
|
|
1609
|
+
)
|
|
1519
1610
|
_ep_set = {ep.path for ep in entry_points}
|
|
1520
1611
|
# include framework-detected entry points AND files classified as
|
|
1521
1612
|
# entrypoint/controller/security by artifact taxonomy
|
|
@@ -1582,21 +1673,16 @@ class TaskContextBuilder:
|
|
|
1582
1673
|
committed_changes=_pr_committed_changes,
|
|
1583
1674
|
uncommitted_changes=_pr_uncommitted_changes,
|
|
1584
1675
|
# transparency: explicit diff scope
|
|
1585
|
-
analysis_scope=
|
|
1586
|
-
|
|
1587
|
-
|
|
1588
|
-
|
|
1589
|
-
|
|
1590
|
-
|
|
1591
|
-
|
|
1592
|
-
|
|
1593
|
-
|
|
1594
|
-
|
|
1595
|
-
"includes_uncommitted": bool(
|
|
1596
|
-
(task_name == "review-pr" and _pr_uncommitted_files) or
|
|
1597
|
-
(task_name == "delta" and not since)
|
|
1598
|
-
),
|
|
1599
|
-
} if task_name in ("delta", "review-pr") else {},
|
|
1676
|
+
analysis_scope=_build_analysis_scope(
|
|
1677
|
+
task_name=task_name,
|
|
1678
|
+
since=since,
|
|
1679
|
+
delta_baseline=_delta_baseline,
|
|
1680
|
+
pr_scope_source=_pr_scope_source,
|
|
1681
|
+
pr_uncommitted_files=_pr_uncommitted_files,
|
|
1682
|
+
) if task_name in ("delta", "review-pr") else {},
|
|
1683
|
+
resolved_since_ref=_delta_baseline.get("resolved_ref") if task_name == "delta" else None,
|
|
1684
|
+
resolution_path=_delta_baseline.get("resolution_path") if task_name == "delta" else None,
|
|
1685
|
+
diff_validation_status=_delta_baseline.get("diff_validation_status") if task_name == "delta" else None,
|
|
1600
1686
|
)
|
|
1601
1687
|
|
|
1602
1688
|
def render_prompt(self, output: TaskOutput) -> str:
|
|
@@ -1915,8 +2001,8 @@ class TaskContextBuilder:
|
|
|
1915
2001
|
|
|
1916
2002
|
DiffSourceType mapping:
|
|
1917
2003
|
since given → committed: GIT_RANGE(since, HEAD)
|
|
1918
|
-
no since →
|
|
1919
|
-
|
|
2004
|
+
no since → uncommitted: WORKTREE_UNSTAGED + WORKTREE_STAGED
|
|
2005
|
+
no since + clean tree → committed: HEAD_MINUS_1 (auto-fallback)
|
|
1920
2006
|
"""
|
|
1921
2007
|
import subprocess
|
|
1922
2008
|
|
|
@@ -1962,6 +2048,17 @@ class TaskContextBuilder:
|
|
|
1962
2048
|
if DiffSourceType.WORKTREE_STAGED.value not in sources:
|
|
1963
2049
|
sources.append(DiffSourceType.WORKTREE_STAGED.value)
|
|
1964
2050
|
|
|
2051
|
+
# ── HEAD~1 fallback — working tree clean, surface last commit ────────
|
|
2052
|
+
# Without --since: if no unstaged/staged changes exist, fall back to the
|
|
2053
|
+
# last committed diff so a clean tree never silently returns no_changes.
|
|
2054
|
+
if since is None and not committed_files and not uncommitted_files:
|
|
2055
|
+
head_ok = _run("git", "rev-parse", "--verify", "HEAD~1")
|
|
2056
|
+
if head_ok is not None: # HEAD~1 exists
|
|
2057
|
+
head_committed = _run("git", "diff", "--name-only", "--relative", "HEAD~1", "HEAD")
|
|
2058
|
+
if head_committed:
|
|
2059
|
+
committed_files = head_committed
|
|
2060
|
+
sources.append(DiffSourceType.HEAD_MINUS_1.value)
|
|
2061
|
+
|
|
1965
2062
|
# ── Drop paths outside self.root ──────────────────────────────────────
|
|
1966
2063
|
def _drop_outside(lst: list[str]) -> list[str]:
|
|
1967
2064
|
return [f for f in lst if not f.startswith("../") and not f.startswith("..\\")]
|
|
@@ -3164,25 +3261,33 @@ class TaskContextBuilder:
|
|
|
3164
3261
|
}
|
|
3165
3262
|
|
|
3166
3263
|
else:
|
|
3167
|
-
# No since:
|
|
3264
|
+
# No since: unstaged → staged → HEAD~1 — never error, clean tree is valid
|
|
3168
3265
|
ok, out = _run("diff", "--name-only", "--relative", timeout=10)
|
|
3169
3266
|
if ok:
|
|
3170
3267
|
files = [line.strip() for line in out.splitlines() if line.strip()]
|
|
3171
3268
|
if files:
|
|
3172
|
-
return _make(files, "HEAD", "
|
|
3269
|
+
return _make(files, "HEAD", "uncommitted_unstaged")
|
|
3270
|
+
|
|
3271
|
+
# Staged (committed to index but not yet to history)
|
|
3272
|
+
ok, out = _run("diff", "--name-only", "--cached", "--relative", timeout=10)
|
|
3273
|
+
if ok:
|
|
3274
|
+
files = [line.strip() for line in out.splitlines() if line.strip()]
|
|
3275
|
+
if files:
|
|
3276
|
+
return _make(files, "HEAD", "uncommitted_staged")
|
|
3173
3277
|
|
|
3174
|
-
# HEAD~1 fallback
|
|
3278
|
+
# HEAD~1 fallback — working tree clean, surface last commit
|
|
3175
3279
|
if _verify("HEAD~1"):
|
|
3176
3280
|
files = _diff("HEAD~1")
|
|
3177
3281
|
if files is not None:
|
|
3178
3282
|
return _make(files or [], "HEAD~1", "head_minus_1_fallback")
|
|
3179
3283
|
|
|
3284
|
+
# Confirmed no changes: first commit or empty repo
|
|
3180
3285
|
return {
|
|
3181
3286
|
"files": [],
|
|
3182
3287
|
"resolved_ref": "HEAD",
|
|
3183
|
-
"resolution_path": "
|
|
3184
|
-
"diff_validation_status": "
|
|
3185
|
-
"error":
|
|
3288
|
+
"resolution_path": "no_changes_confirmed",
|
|
3289
|
+
"diff_validation_status": "valid_empty",
|
|
3290
|
+
"error": False,
|
|
3186
3291
|
}
|
|
3187
3292
|
|
|
3188
3293
|
def _get_uncommitted_changed_files(self) -> list[str]:
|
{sourcecode-1.30.22 → sourcecode-1.30.24}/.agents/skills/source-command-gsd-join-discord/SKILL.md
RENAMED
|
File without changes
|
{sourcecode-1.30.22 → sourcecode-1.30.24}/.agents/skills/source-command-gsd-review-backlog/SKILL.md
RENAMED
|
File without changes
|
{sourcecode-1.30.22 → sourcecode-1.30.24}/.agents/skills/source-command-gsd-workstreams/SKILL.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sourcecode-1.30.22 → sourcecode-1.30.24}/tests/fixtures/pnpm_monorepo/apps/web/app/page.tsx
RENAMED
|
File without changes
|
{sourcecode-1.30.22 → sourcecode-1.30.24}/tests/fixtures/pnpm_monorepo/apps/web/package.json
RENAMED
|
File without changes
|
|
File without changes
|
{sourcecode-1.30.22 → sourcecode-1.30.24}/tests/fixtures/pnpm_monorepo/packages/api/pyproject.toml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|