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

|
|
225
225
|

|
|
226
226
|
|
|
227
227
|
---
|
|
@@ -255,7 +255,7 @@ pipx install sourcecode
|
|
|
255
255
|
|
|
256
256
|
```bash
|
|
257
257
|
sourcecode version
|
|
258
|
-
# sourcecode 1.
|
|
258
|
+
# sourcecode 1.20.0
|
|
259
259
|
```
|
|
260
260
|
|
|
261
261
|
---
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
**Compressed AI-ready context for Java/Spring enterprise codebases.**
|
|
4
4
|
|
|
5
|
-

|
|
6
6
|

|
|
7
7
|
|
|
8
8
|
---
|
|
@@ -36,7 +36,7 @@ pipx install sourcecode
|
|
|
36
36
|
|
|
37
37
|
```bash
|
|
38
38
|
sourcecode version
|
|
39
|
-
# sourcecode 1.
|
|
39
|
+
# sourcecode 1.20.0
|
|
40
40
|
```
|
|
41
41
|
|
|
42
42
|
---
|
|
@@ -1777,6 +1777,8 @@ def prepare_context_cmd(
|
|
|
1777
1777
|
out["symptom"] = output.symptom
|
|
1778
1778
|
if output.related_notes:
|
|
1779
1779
|
out["related_notes"] = output.related_notes
|
|
1780
|
+
if output.symptom_note:
|
|
1781
|
+
out["symptom_note"] = output.symptom_note
|
|
1780
1782
|
if llm_prompt:
|
|
1781
1783
|
out["llm_prompt"] = builder.render_prompt(output)
|
|
1782
1784
|
|
|
@@ -323,6 +323,7 @@ class TaskOutput:
|
|
|
323
323
|
affected_entry_points: list[str] = field(default_factory=list) # delta task only
|
|
324
324
|
symptom: Optional[str] = None # fix-bug only
|
|
325
325
|
related_notes: list[dict] = field(default_factory=list) # fix-bug + symptom only
|
|
326
|
+
symptom_note: Optional[str] = None # fix-bug: cross-layer synonym note
|
|
326
327
|
|
|
327
328
|
|
|
328
329
|
# ─────────────────────────────────────────────────────────────────────────────
|
|
@@ -382,6 +383,22 @@ _ALL_EXTENSIONS: frozenset[str] = _SOURCE_EXTENSIONS | frozenset({
|
|
|
382
383
|
".md", ".toml", ".yaml", ".yml", ".json", ".xml",
|
|
383
384
|
})
|
|
384
385
|
|
|
386
|
+
# Maps frontend symptom keywords → backend terms likely to contain the root cause.
|
|
387
|
+
# Used to boost service/interceptor files when the symptom is UI-only.
|
|
388
|
+
_FRONTEND_SYMPTOM_MAP: dict[str, list[str]] = {
|
|
389
|
+
"spinner": ["loading", "setloading", "finalize", "httpinterceptor", "interceptor", "service"],
|
|
390
|
+
"loading": ["loading", "setloading", "finalize", "httpinterceptor", "interceptor", "service"],
|
|
391
|
+
"login": ["authcontroller", "securityconfig", "filterconfig", "jwtfilter", "auth", "authentication"],
|
|
392
|
+
"logout": ["authcontroller", "securityconfig", "jwtfilter", "auth", "session"],
|
|
393
|
+
"dropdown": ["getmapping", "findall", "obtenertodos", "listall", "findby"],
|
|
394
|
+
"modal": ["controller", "getmapping", "findby", "search"],
|
|
395
|
+
"popup": ["controller", "getmapping", "findby", "search"],
|
|
396
|
+
"table": ["paginated", "findby", "search", "getmapping", "listall"],
|
|
397
|
+
"grid": ["paginated", "findby", "search", "getmapping"],
|
|
398
|
+
"button": ["postmapping", "putmapping", "deletemapping", "controller", "service"],
|
|
399
|
+
"form": ["postmapping", "putmapping", "controller", "service", "dto"],
|
|
400
|
+
}
|
|
401
|
+
|
|
385
402
|
|
|
386
403
|
class TaskContextBuilder:
|
|
387
404
|
def __init__(self, root: Path) -> None:
|
|
@@ -635,6 +652,7 @@ class TaskContextBuilder:
|
|
|
635
652
|
# ── 6b. Symptom keyword boost + related notes (fix-bug + --symptom) ──
|
|
636
653
|
symptom_keywords: list[str] = []
|
|
637
654
|
related_notes: list[dict] = []
|
|
655
|
+
symptom_note: Optional[str] = None
|
|
638
656
|
if task_name == "fix-bug" and symptom:
|
|
639
657
|
import re as _re
|
|
640
658
|
_camel_expanded = _re.sub(r'([a-z])([A-Z])', r'\1 \2', symptom)
|
|
@@ -708,6 +726,41 @@ class TaskContextBuilder:
|
|
|
708
726
|
))
|
|
709
727
|
relevant_files = sorted(_content_boosted, key=lambda rf: -rf.score)
|
|
710
728
|
|
|
729
|
+
# Cross-layer synonym boost: frontend keywords → backend equivalents
|
|
730
|
+
_synonym_note: Optional[str] = None
|
|
731
|
+
_frontend_kws = [kw for kw in symptom_keywords if kw in _FRONTEND_SYMPTOM_MAP]
|
|
732
|
+
if _frontend_kws:
|
|
733
|
+
_backend_terms: list[str] = []
|
|
734
|
+
for _fkw in _frontend_kws:
|
|
735
|
+
_backend_terms.extend(_FRONTEND_SYMPTOM_MAP[_fkw])
|
|
736
|
+
_backend_terms_set = list(dict.fromkeys(_backend_terms)) # dedup, preserve order
|
|
737
|
+
_synonym_boosted: list[RelevantFile] = []
|
|
738
|
+
for _rf in relevant_files:
|
|
739
|
+
_extra_syn = 0.0
|
|
740
|
+
if Path(_rf.path).suffix.lower() in _src_exts:
|
|
741
|
+
try:
|
|
742
|
+
_lines_syn = (self.root / _rf.path).read_text(
|
|
743
|
+
encoding="utf-8", errors="replace"
|
|
744
|
+
).splitlines()[:300]
|
|
745
|
+
_body_syn = "\n".join(_lines_syn).lower()
|
|
746
|
+
_hits_syn = sum(_body_syn.count(t) for t in _backend_terms_set)
|
|
747
|
+
_extra_syn = min(0.20, _hits_syn * 0.02)
|
|
748
|
+
except OSError:
|
|
749
|
+
pass
|
|
750
|
+
_synonym_boosted.append(RelevantFile(
|
|
751
|
+
path=_rf.path,
|
|
752
|
+
role=_rf.role,
|
|
753
|
+
score=round(min(_rf.score + _extra_syn, 1.0), 2),
|
|
754
|
+
reason=_rf.reason + (f", synonym-match backend (+{_extra_syn:.2f})" if _extra_syn > 0 else ""),
|
|
755
|
+
why=_rf.why,
|
|
756
|
+
))
|
|
757
|
+
relevant_files = sorted(_synonym_boosted, key=lambda rf: -rf.score)
|
|
758
|
+
_synonym_note = (
|
|
759
|
+
f"Frontend concept detected ({', '.join(_frontend_kws)}). "
|
|
760
|
+
"Boosted backend service-layer and interceptor files as likely root cause."
|
|
761
|
+
)
|
|
762
|
+
symptom_note = _synonym_note
|
|
763
|
+
|
|
711
764
|
# ── 7. Test gaps (generate-tests only) ────────────────────────────
|
|
712
765
|
test_gaps: list[str] = []
|
|
713
766
|
if task_name == "generate-tests":
|
|
@@ -788,6 +841,7 @@ class TaskContextBuilder:
|
|
|
788
841
|
affected_entry_points=affected_entry_points,
|
|
789
842
|
symptom=symptom if task_name == "fix-bug" and symptom else None,
|
|
790
843
|
related_notes=related_notes,
|
|
844
|
+
symptom_note=symptom_note,
|
|
791
845
|
)
|
|
792
846
|
|
|
793
847
|
def render_prompt(self, output: TaskOutput) -> str:
|
|
@@ -356,6 +356,7 @@ def _mybatis_pairing(sm: "SourceMap", *, full: bool = False) -> "Optional[dict[s
|
|
|
356
356
|
result["dto_mappers_total"] = _total_dto
|
|
357
357
|
if _total_dto > 10 and not full:
|
|
358
358
|
result["dto_mappers_truncated"] = True
|
|
359
|
+
result["dto_mappers_warning"] = f"Showing 10/{_total_dto} mappers. Use --full to see all."
|
|
359
360
|
return result
|
|
360
361
|
|
|
361
362
|
|
|
@@ -894,6 +895,41 @@ def _serialize_file_metric(m: Any) -> dict[str, Any]:
|
|
|
894
895
|
return d
|
|
895
896
|
|
|
896
897
|
|
|
898
|
+
def _confidence_reasons(sm: SourceMap) -> dict[str, list[str]]:
|
|
899
|
+
"""Actionable reasons explaining low-confidence sections.
|
|
900
|
+
|
|
901
|
+
If a section is 'low' with no derivable reasons, the caller should
|
|
902
|
+
upgrade it to 'high' (the low rating was overly conservative).
|
|
903
|
+
"""
|
|
904
|
+
reasons: dict[str, list[str]] = {}
|
|
905
|
+
|
|
906
|
+
arch = sm.architecture
|
|
907
|
+
if arch and arch.requested and arch.confidence == "low":
|
|
908
|
+
arch_reasons: list[str] = []
|
|
909
|
+
for lim in (arch.limitations or []):
|
|
910
|
+
if lim:
|
|
911
|
+
arch_reasons.append(lim)
|
|
912
|
+
if sm.analysis_gaps:
|
|
913
|
+
for gap in sm.analysis_gaps:
|
|
914
|
+
if gap.area in ("api_contract", "architecture", "documentation"):
|
|
915
|
+
arch_reasons.append(gap.reason)
|
|
916
|
+
else:
|
|
917
|
+
_has_openapi = any(
|
|
918
|
+
p.endswith(("openapi.yaml", "openapi.yml", "openapi.json", "swagger.yaml", "swagger.json"))
|
|
919
|
+
or "swagger" in p.lower() or "springdoc" in p.lower()
|
|
920
|
+
for p in sm.file_paths
|
|
921
|
+
)
|
|
922
|
+
if not _has_openapi:
|
|
923
|
+
arch_reasons.append("No OpenAPI/Swagger spec found — API surface unverifiable")
|
|
924
|
+
if arch.bounded_contexts:
|
|
925
|
+
bc_count = len(arch.bounded_contexts)
|
|
926
|
+
arch_reasons.append(f"bounded_contexts detected: {bc_count}")
|
|
927
|
+
if arch_reasons:
|
|
928
|
+
reasons["architecture"] = arch_reasons
|
|
929
|
+
|
|
930
|
+
return reasons
|
|
931
|
+
|
|
932
|
+
|
|
897
933
|
def _section_confidence(sm: SourceMap) -> dict[str, str]:
|
|
898
934
|
cs = sm.confidence_summary
|
|
899
935
|
dep_conf = "low"
|
|
@@ -1481,9 +1517,16 @@ def agent_view(sm: SourceMap, *, full: bool = False) -> dict[str, Any]:
|
|
|
1481
1517
|
result["architecture"] = _architecture_context(sm)
|
|
1482
1518
|
|
|
1483
1519
|
# ── 3a. File relevance: evidence-backed, high-signal only ────────────────
|
|
1484
|
-
|
|
1520
|
+
_FR_AGENT_CAP = 20
|
|
1521
|
+
_total_paths = len(sm.file_paths)
|
|
1522
|
+
relevant_files = _file_relevance(sm, limit=_FR_AGENT_CAP if not full else _total_paths)
|
|
1485
1523
|
if relevant_files:
|
|
1486
1524
|
result["file_relevance"] = relevant_files
|
|
1525
|
+
if not full and _total_paths > _FR_AGENT_CAP:
|
|
1526
|
+
result["file_relevance_hint"] = (
|
|
1527
|
+
f"Showing top {_FR_AGENT_CAP}/{_total_paths} files by score. "
|
|
1528
|
+
"Use --full to see all."
|
|
1529
|
+
)
|
|
1487
1530
|
|
|
1488
1531
|
# ── 3b. Monorepo package roles (when available), capped ──────────────────
|
|
1489
1532
|
if sm.monorepo_packages:
|
|
@@ -1638,6 +1681,16 @@ def agent_view(sm: SourceMap, *, full: bool = False) -> dict[str, Any]:
|
|
|
1638
1681
|
conf["anomalies"] = cs.anomalies
|
|
1639
1682
|
result["confidence_summary"] = conf
|
|
1640
1683
|
|
|
1684
|
+
# ── 6a. Confidence reasons: explain any low-confidence section ────────────
|
|
1685
|
+
_conf_reasons = _confidence_reasons(sm)
|
|
1686
|
+
if _conf_reasons:
|
|
1687
|
+
result["confidence_reasons"] = _conf_reasons
|
|
1688
|
+
elif (sm.architecture and sm.architecture.requested
|
|
1689
|
+
and sm.architecture.confidence == "low"
|
|
1690
|
+
and "confidence_summary" in result):
|
|
1691
|
+
# No reasons found → low was overly conservative; upgrade to high
|
|
1692
|
+
result["confidence_summary"].setdefault("sections", {})["architecture"] = "high"
|
|
1693
|
+
|
|
1641
1694
|
# ── 7. Analysis gaps ──────────────────────────────────────────────────────
|
|
1642
1695
|
analysis_gaps: list[dict[str, Any]] = []
|
|
1643
1696
|
|
{sourcecode-1.19.0 → sourcecode-1.20.0}/.agents/skills/source-command-gsd-join-discord/SKILL.md
RENAMED
|
File without changes
|
{sourcecode-1.19.0 → sourcecode-1.20.0}/.agents/skills/source-command-gsd-review-backlog/SKILL.md
RENAMED
|
File without changes
|
{sourcecode-1.19.0 → sourcecode-1.20.0}/.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
|
{sourcecode-1.19.0 → sourcecode-1.20.0}/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
|