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.
Files changed (189) hide show
  1. {sourcecode-1.19.0 → sourcecode-1.20.0}/PKG-INFO +3 -3
  2. {sourcecode-1.19.0 → sourcecode-1.20.0}/README.md +2 -2
  3. {sourcecode-1.19.0 → sourcecode-1.20.0}/pyproject.toml +1 -1
  4. {sourcecode-1.19.0 → sourcecode-1.20.0}/src/sourcecode/__init__.py +1 -1
  5. {sourcecode-1.19.0 → sourcecode-1.20.0}/src/sourcecode/cli.py +2 -0
  6. {sourcecode-1.19.0 → sourcecode-1.20.0}/src/sourcecode/prepare_context.py +54 -0
  7. {sourcecode-1.19.0 → sourcecode-1.20.0}/src/sourcecode/serializer.py +54 -1
  8. {sourcecode-1.19.0 → sourcecode-1.20.0}/.agents/skills/source-command-gsd-join-discord/SKILL.md +0 -0
  9. {sourcecode-1.19.0 → sourcecode-1.20.0}/.agents/skills/source-command-gsd-review-backlog/SKILL.md +0 -0
  10. {sourcecode-1.19.0 → sourcecode-1.20.0}/.agents/skills/source-command-gsd-workstreams/SKILL.md +0 -0
  11. {sourcecode-1.19.0 → sourcecode-1.20.0}/.continue-here.md +0 -0
  12. {sourcecode-1.19.0 → sourcecode-1.20.0}/.github/workflows/build-windows.yml +0 -0
  13. {sourcecode-1.19.0 → sourcecode-1.20.0}/.gitignore +0 -0
  14. {sourcecode-1.19.0 → sourcecode-1.20.0}/.ruff.toml +0 -0
  15. {sourcecode-1.19.0 → sourcecode-1.20.0}/CONTRIBUTING.md +0 -0
  16. {sourcecode-1.19.0 → sourcecode-1.20.0}/LICENSE +0 -0
  17. {sourcecode-1.19.0 → sourcecode-1.20.0}/SECURITY.md +0 -0
  18. {sourcecode-1.19.0 → sourcecode-1.20.0}/docs/privacy.md +0 -0
  19. {sourcecode-1.19.0 → sourcecode-1.20.0}/docs/schema.md +0 -0
  20. {sourcecode-1.19.0 → sourcecode-1.20.0}/raw +0 -0
  21. {sourcecode-1.19.0 → sourcecode-1.20.0}/run_cli.py +0 -0
  22. {sourcecode-1.19.0 → sourcecode-1.20.0}/src/sourcecode/adaptive_scanner.py +0 -0
  23. {sourcecode-1.19.0 → sourcecode-1.20.0}/src/sourcecode/architecture_analyzer.py +0 -0
  24. {sourcecode-1.19.0 → sourcecode-1.20.0}/src/sourcecode/architecture_summary.py +0 -0
  25. {sourcecode-1.19.0 → sourcecode-1.20.0}/src/sourcecode/ast_extractor.py +0 -0
  26. {sourcecode-1.19.0 → sourcecode-1.20.0}/src/sourcecode/classifier.py +0 -0
  27. {sourcecode-1.19.0 → sourcecode-1.20.0}/src/sourcecode/code_notes_analyzer.py +0 -0
  28. {sourcecode-1.19.0 → sourcecode-1.20.0}/src/sourcecode/confidence_analyzer.py +0 -0
  29. {sourcecode-1.19.0 → sourcecode-1.20.0}/src/sourcecode/context_scorer.py +0 -0
  30. {sourcecode-1.19.0 → sourcecode-1.20.0}/src/sourcecode/context_summarizer.py +0 -0
  31. {sourcecode-1.19.0 → sourcecode-1.20.0}/src/sourcecode/contract_model.py +0 -0
  32. {sourcecode-1.19.0 → sourcecode-1.20.0}/src/sourcecode/contract_pipeline.py +0 -0
  33. {sourcecode-1.19.0 → sourcecode-1.20.0}/src/sourcecode/coverage_parser.py +0 -0
  34. {sourcecode-1.19.0 → sourcecode-1.20.0}/src/sourcecode/dependency_analyzer.py +0 -0
  35. {sourcecode-1.19.0 → sourcecode-1.20.0}/src/sourcecode/detectors/__init__.py +0 -0
  36. {sourcecode-1.19.0 → sourcecode-1.20.0}/src/sourcecode/detectors/base.py +0 -0
  37. {sourcecode-1.19.0 → sourcecode-1.20.0}/src/sourcecode/detectors/csproj_parser.py +0 -0
  38. {sourcecode-1.19.0 → sourcecode-1.20.0}/src/sourcecode/detectors/dart.py +0 -0
  39. {sourcecode-1.19.0 → sourcecode-1.20.0}/src/sourcecode/detectors/dotnet.py +0 -0
  40. {sourcecode-1.19.0 → sourcecode-1.20.0}/src/sourcecode/detectors/elixir.py +0 -0
  41. {sourcecode-1.19.0 → sourcecode-1.20.0}/src/sourcecode/detectors/go.py +0 -0
  42. {sourcecode-1.19.0 → sourcecode-1.20.0}/src/sourcecode/detectors/heuristic.py +0 -0
  43. {sourcecode-1.19.0 → sourcecode-1.20.0}/src/sourcecode/detectors/hybrid.py +0 -0
  44. {sourcecode-1.19.0 → sourcecode-1.20.0}/src/sourcecode/detectors/java.py +0 -0
  45. {sourcecode-1.19.0 → sourcecode-1.20.0}/src/sourcecode/detectors/jvm_ext.py +0 -0
  46. {sourcecode-1.19.0 → sourcecode-1.20.0}/src/sourcecode/detectors/nodejs.py +0 -0
  47. {sourcecode-1.19.0 → sourcecode-1.20.0}/src/sourcecode/detectors/parsers.py +0 -0
  48. {sourcecode-1.19.0 → sourcecode-1.20.0}/src/sourcecode/detectors/php.py +0 -0
  49. {sourcecode-1.19.0 → sourcecode-1.20.0}/src/sourcecode/detectors/project.py +0 -0
  50. {sourcecode-1.19.0 → sourcecode-1.20.0}/src/sourcecode/detectors/python.py +0 -0
  51. {sourcecode-1.19.0 → sourcecode-1.20.0}/src/sourcecode/detectors/ruby.py +0 -0
  52. {sourcecode-1.19.0 → sourcecode-1.20.0}/src/sourcecode/detectors/rust.py +0 -0
  53. {sourcecode-1.19.0 → sourcecode-1.20.0}/src/sourcecode/detectors/systems.py +0 -0
  54. {sourcecode-1.19.0 → sourcecode-1.20.0}/src/sourcecode/detectors/terraform.py +0 -0
  55. {sourcecode-1.19.0 → sourcecode-1.20.0}/src/sourcecode/detectors/tooling.py +0 -0
  56. {sourcecode-1.19.0 → sourcecode-1.20.0}/src/sourcecode/doc_analyzer.py +0 -0
  57. {sourcecode-1.19.0 → sourcecode-1.20.0}/src/sourcecode/entrypoint_classifier.py +0 -0
  58. {sourcecode-1.19.0 → sourcecode-1.20.0}/src/sourcecode/env_analyzer.py +0 -0
  59. {sourcecode-1.19.0 → sourcecode-1.20.0}/src/sourcecode/file_classifier.py +0 -0
  60. {sourcecode-1.19.0 → sourcecode-1.20.0}/src/sourcecode/git_analyzer.py +0 -0
  61. {sourcecode-1.19.0 → sourcecode-1.20.0}/src/sourcecode/graph_analyzer.py +0 -0
  62. {sourcecode-1.19.0 → sourcecode-1.20.0}/src/sourcecode/metrics_analyzer.py +0 -0
  63. {sourcecode-1.19.0 → sourcecode-1.20.0}/src/sourcecode/progress.py +0 -0
  64. {sourcecode-1.19.0 → sourcecode-1.20.0}/src/sourcecode/ranking_engine.py +0 -0
  65. {sourcecode-1.19.0 → sourcecode-1.20.0}/src/sourcecode/redactor.py +0 -0
  66. {sourcecode-1.19.0 → sourcecode-1.20.0}/src/sourcecode/relevance_scorer.py +0 -0
  67. {sourcecode-1.19.0 → sourcecode-1.20.0}/src/sourcecode/repo_classifier.py +0 -0
  68. {sourcecode-1.19.0 → sourcecode-1.20.0}/src/sourcecode/runtime_classifier.py +0 -0
  69. {sourcecode-1.19.0 → sourcecode-1.20.0}/src/sourcecode/scanner.py +0 -0
  70. {sourcecode-1.19.0 → sourcecode-1.20.0}/src/sourcecode/schema.py +0 -0
  71. {sourcecode-1.19.0 → sourcecode-1.20.0}/src/sourcecode/semantic_analyzer.py +0 -0
  72. {sourcecode-1.19.0 → sourcecode-1.20.0}/src/sourcecode/summarizer.py +0 -0
  73. {sourcecode-1.19.0 → sourcecode-1.20.0}/src/sourcecode/telemetry/__init__.py +0 -0
  74. {sourcecode-1.19.0 → sourcecode-1.20.0}/src/sourcecode/telemetry/config.py +0 -0
  75. {sourcecode-1.19.0 → sourcecode-1.20.0}/src/sourcecode/telemetry/consent.py +0 -0
  76. {sourcecode-1.19.0 → sourcecode-1.20.0}/src/sourcecode/telemetry/events.py +0 -0
  77. {sourcecode-1.19.0 → sourcecode-1.20.0}/src/sourcecode/telemetry/filters.py +0 -0
  78. {sourcecode-1.19.0 → sourcecode-1.20.0}/src/sourcecode/telemetry/transport.py +0 -0
  79. {sourcecode-1.19.0 → sourcecode-1.20.0}/src/sourcecode/tree_utils.py +0 -0
  80. {sourcecode-1.19.0 → sourcecode-1.20.0}/src/sourcecode/workspace.py +0 -0
  81. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/__init__.py +0 -0
  82. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/conftest.py +0 -0
  83. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/fixtures/coverage.xml +0 -0
  84. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/fixtures/fastapi_app/pyproject.toml +0 -0
  85. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/fixtures/fastapi_app/src/main.py +0 -0
  86. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/fixtures/go_service/cmd/api/main.go +0 -0
  87. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/fixtures/go_service/go.mod +0 -0
  88. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/fixtures/jacoco.xml +0 -0
  89. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/fixtures/latin1_sample.java +0 -0
  90. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/fixtures/latin1_sample_iso.java +0 -0
  91. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/fixtures/lcov.info +0 -0
  92. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/fixtures/nextjs_app/app/page.tsx +0 -0
  93. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/fixtures/nextjs_app/package.json +0 -0
  94. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/fixtures/nextjs_app/pnpm-lock.yaml +0 -0
  95. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/fixtures/pnpm_monorepo/apps/web/app/page.tsx +0 -0
  96. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/fixtures/pnpm_monorepo/apps/web/package.json +0 -0
  97. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/fixtures/pnpm_monorepo/packages/api/main.py +0 -0
  98. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/fixtures/pnpm_monorepo/packages/api/pyproject.toml +0 -0
  99. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/fixtures/pnpm_monorepo/pnpm-workspace.yaml +0 -0
  100. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/fixtures/spring_boot_minimal/pom.xml +0 -0
  101. {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
  102. {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
  103. {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
  104. {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
  105. {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
  106. {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
  107. {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
  108. {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
  109. {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
  110. {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
  111. {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
  112. {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
  113. {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
  114. {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
  115. {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
  116. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/demo/DemoApplication.java +0 -0
  117. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/demo/config/FilterConfig.java +0 -0
  118. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/demo/domain/Health.java +0 -0
  119. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/demo/mapper/HealthMapper.java +0 -0
  120. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/demo/repository/HealthRepository.java +0 -0
  121. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/demo/service/HealthService.java +0 -0
  122. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/demo/web/HealthRestController.java +0 -0
  123. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/fixtures/spring_boot_minimal/src/main/java/com/example/demo/web/NominaRestController.java +0 -0
  124. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/fixtures/spring_boot_minimal/src/main/resources/application-dev.yml +0 -0
  125. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/fixtures/spring_boot_minimal/src/main/resources/application.yml +0 -0
  126. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/fixtures/spring_boot_minimal/src/main/resources/mapper/HealthMapper.xml +0 -0
  127. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/test_architecture_analyzer.py +0 -0
  128. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/test_architecture_summary.py +0 -0
  129. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/test_ast_extractor.py +0 -0
  130. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/test_block1_reliability.py +0 -0
  131. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/test_block2_coverage.py +0 -0
  132. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/test_block5_quality.py +0 -0
  133. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/test_bug_fixes_v16.py +0 -0
  134. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/test_classifier.py +0 -0
  135. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/test_cli.py +0 -0
  136. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/test_code_notes_analyzer.py +0 -0
  137. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/test_context_scorer.py +0 -0
  138. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/test_contract_pipeline.py +0 -0
  139. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/test_coverage_parser.py +0 -0
  140. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/test_cross_consistency.py +0 -0
  141. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/test_dependency_analyzer_node_python.py +0 -0
  142. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/test_dependency_analyzer_polyglot.py +0 -0
  143. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/test_dependency_schema.py +0 -0
  144. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/test_detector_dotnet.py +0 -0
  145. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/test_detector_go_rust_java.py +0 -0
  146. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/test_detector_nodejs.py +0 -0
  147. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/test_detector_php_ruby_dart.py +0 -0
  148. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/test_detector_python.py +0 -0
  149. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/test_detector_universal_managed.py +0 -0
  150. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/test_detector_universal_systems.py +0 -0
  151. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/test_detectors_base.py +0 -0
  152. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/test_doc_analyzer_jsdom.py +0 -0
  153. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/test_doc_analyzer_python.py +0 -0
  154. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/test_encoding_regression.py +0 -0
  155. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/test_graph_analyzer_polyglot.py +0 -0
  156. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/test_graph_analyzer_python_node.py +0 -0
  157. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/test_graph_schema.py +0 -0
  158. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/test_hybrid_inference.py +0 -0
  159. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/test_integration.py +0 -0
  160. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/test_integration_dependencies.py +0 -0
  161. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/test_integration_detection.py +0 -0
  162. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/test_integration_docs.py +0 -0
  163. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/test_integration_graph_modules.py +0 -0
  164. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/test_integration_lqn.py +0 -0
  165. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/test_integration_metrics.py +0 -0
  166. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/test_integration_multistack.py +0 -0
  167. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/test_integration_semantics.py +0 -0
  168. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/test_integration_universal.py +0 -0
  169. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/test_java_spring_integration.py +0 -0
  170. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/test_metrics_analyzer.py +0 -0
  171. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/test_packaging.py +0 -0
  172. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/test_phase1_improvements.py +0 -0
  173. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/test_pipeline_integrity.py +0 -0
  174. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/test_real_projects.py +0 -0
  175. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/test_redactor.py +0 -0
  176. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/test_scanner.py +0 -0
  177. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/test_schema.py +0 -0
  178. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/test_schema_normalization.py +0 -0
  179. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/test_semantic_analyzer_node.py +0 -0
  180. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/test_semantic_analyzer_python.py +0 -0
  181. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/test_semantic_import_resolution.py +0 -0
  182. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/test_semantic_schema.py +0 -0
  183. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/test_signal_hierarchy.py +0 -0
  184. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/test_summarizer.py +0 -0
  185. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/test_surface_honesty.py +0 -0
  186. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/test_task_differentiation.py +0 -0
  187. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/test_telemetry.py +0 -0
  188. {sourcecode-1.19.0 → sourcecode-1.20.0}/tests/test_v1_10_regressions.py +0 -0
  189. {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.19.0
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
- ![Version](https://img.shields.io/badge/version-1.19.0-blue)
224
+ ![Version](https://img.shields.io/badge/version-1.20.0-blue)
225
225
  ![Python](https://img.shields.io/badge/python-3.10%2B-green)
226
226
 
227
227
  ---
@@ -255,7 +255,7 @@ pipx install sourcecode
255
255
 
256
256
  ```bash
257
257
  sourcecode version
258
- # sourcecode 1.19.0
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
- ![Version](https://img.shields.io/badge/version-1.19.0-blue)
5
+ ![Version](https://img.shields.io/badge/version-1.20.0-blue)
6
6
  ![Python](https://img.shields.io/badge/python-3.10%2B-green)
7
7
 
8
8
  ---
@@ -36,7 +36,7 @@ pipx install sourcecode
36
36
 
37
37
  ```bash
38
38
  sourcecode version
39
- # sourcecode 1.19.0
39
+ # sourcecode 1.20.0
40
40
  ```
41
41
 
42
42
  ---
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "sourcecode"
7
- version = "1.19.0"
7
+ version = "1.20.0"
8
8
  description = "Deterministic codebase context for AI coding agents"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.9"
@@ -1,3 +1,3 @@
1
1
  """sourcecode — Deterministic codebase context maps for AI coding agents."""
2
2
 
3
- __version__ = "1.19.0"
3
+ __version__ = "1.20.0"
@@ -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
- relevant_files = _file_relevance(sm)
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
 
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes