sourcecode 1.36.3__tar.gz → 1.36.4__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 (118) hide show
  1. {sourcecode-1.36.3 → sourcecode-1.36.4}/PKG-INFO +33 -5
  2. {sourcecode-1.36.3 → sourcecode-1.36.4}/README.md +32 -4
  3. {sourcecode-1.36.3 → sourcecode-1.36.4}/pyproject.toml +1 -1
  4. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/__init__.py +1 -1
  5. {sourcecode-1.36.3 → sourcecode-1.36.4}/.github/workflows/build-windows.yml +0 -0
  6. {sourcecode-1.36.3 → sourcecode-1.36.4}/.gitignore +0 -0
  7. {sourcecode-1.36.3 → sourcecode-1.36.4}/.ruff.toml +0 -0
  8. {sourcecode-1.36.3 → sourcecode-1.36.4}/CHANGELOG.md +0 -0
  9. {sourcecode-1.36.3 → sourcecode-1.36.4}/CONTRIBUTING.md +0 -0
  10. {sourcecode-1.36.3 → sourcecode-1.36.4}/LICENSE +0 -0
  11. {sourcecode-1.36.3 → sourcecode-1.36.4}/SECURITY.md +0 -0
  12. {sourcecode-1.36.3 → sourcecode-1.36.4}/raw +0 -0
  13. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/adaptive_scanner.py +0 -0
  14. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/architecture_analyzer.py +0 -0
  15. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/architecture_summary.py +0 -0
  16. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/ast_extractor.py +0 -0
  17. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/cache.py +0 -0
  18. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/canonical_ir.py +0 -0
  19. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/cir_graphs.py +0 -0
  20. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/classifier.py +0 -0
  21. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/cli.py +0 -0
  22. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/code_notes_analyzer.py +0 -0
  23. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/confidence_analyzer.py +0 -0
  24. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/context_scorer.py +0 -0
  25. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/context_summarizer.py +0 -0
  26. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/contract_model.py +0 -0
  27. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/contract_pipeline.py +0 -0
  28. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/coverage_parser.py +0 -0
  29. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/dependency_analyzer.py +0 -0
  30. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/detectors/__init__.py +0 -0
  31. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/detectors/base.py +0 -0
  32. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/detectors/csproj_parser.py +0 -0
  33. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/detectors/dart.py +0 -0
  34. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/detectors/dotnet.py +0 -0
  35. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/detectors/elixir.py +0 -0
  36. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/detectors/go.py +0 -0
  37. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/detectors/heuristic.py +0 -0
  38. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/detectors/hybrid.py +0 -0
  39. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/detectors/java.py +0 -0
  40. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/detectors/jvm_ext.py +0 -0
  41. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/detectors/nodejs.py +0 -0
  42. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/detectors/parsers.py +0 -0
  43. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/detectors/php.py +0 -0
  44. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/detectors/project.py +0 -0
  45. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/detectors/python.py +0 -0
  46. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/detectors/ruby.py +0 -0
  47. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/detectors/rust.py +0 -0
  48. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/detectors/systems.py +0 -0
  49. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/detectors/terraform.py +0 -0
  50. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/detectors/tooling.py +0 -0
  51. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/doc_analyzer.py +0 -0
  52. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/entrypoint_classifier.py +0 -0
  53. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/env_analyzer.py +0 -0
  54. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/error_schema.py +0 -0
  55. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/explain.py +0 -0
  56. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/file_chunker.py +0 -0
  57. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/file_classifier.py +0 -0
  58. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/flow_analyzer.py +0 -0
  59. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/fqn_utils.py +0 -0
  60. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/git_analyzer.py +0 -0
  61. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/graph_analyzer.py +0 -0
  62. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/license.py +0 -0
  63. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/mcp/__init__.py +0 -0
  64. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/mcp/onboarding/__init__.py +0 -0
  65. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/mcp/onboarding/applier.py +0 -0
  66. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/mcp/onboarding/backup.py +0 -0
  67. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/mcp/onboarding/detector.py +0 -0
  68. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/mcp/onboarding/planner.py +0 -0
  69. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/mcp/orchestrator.py +0 -0
  70. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/mcp/registry.py +0 -0
  71. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/mcp/runner.py +0 -0
  72. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/mcp/server.py +0 -0
  73. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/mcp_nudge.py +0 -0
  74. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/metrics_analyzer.py +0 -0
  75. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/migrate_check.py +0 -0
  76. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/output_budget.py +0 -0
  77. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/path_filters.py +0 -0
  78. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/pr_comment_renderer.py +0 -0
  79. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/pr_impact.py +0 -0
  80. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/prepare_context.py +0 -0
  81. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/progress.py +0 -0
  82. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/ranking_engine.py +0 -0
  83. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/redactor.py +0 -0
  84. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/relevance_scorer.py +0 -0
  85. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/rename_refactor.py +0 -0
  86. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/repo_classifier.py +0 -0
  87. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/repository_ir.py +0 -0
  88. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/ris.py +0 -0
  89. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/runtime_classifier.py +0 -0
  90. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/scanner.py +0 -0
  91. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/schema.py +0 -0
  92. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/security_config.py +0 -0
  93. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/semantic_analyzer.py +0 -0
  94. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/serializer.py +0 -0
  95. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/spring_event_topology.py +0 -0
  96. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/spring_findings.py +0 -0
  97. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/spring_impact.py +0 -0
  98. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/spring_model.py +0 -0
  99. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/spring_security_audit.py +0 -0
  100. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/spring_semantic.py +0 -0
  101. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/spring_tx_analyzer.py +0 -0
  102. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/summarizer.py +0 -0
  103. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/telemetry/__init__.py +0 -0
  104. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/telemetry/config.py +0 -0
  105. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/telemetry/consent.py +0 -0
  106. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/telemetry/events.py +0 -0
  107. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/telemetry/filters.py +0 -0
  108. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/telemetry/transport.py +0 -0
  109. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/tree_utils.py +0 -0
  110. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/version_check.py +0 -0
  111. {sourcecode-1.36.3 → sourcecode-1.36.4}/src/sourcecode/workspace.py +0 -0
  112. {sourcecode-1.36.3 → sourcecode-1.36.4}/supabase/.temp/cli-latest +0 -0
  113. {sourcecode-1.36.3 → sourcecode-1.36.4}/supabase/functions/README.md +0 -0
  114. {sourcecode-1.36.3 → sourcecode-1.36.4}/supabase/functions/get-license/index.ts +0 -0
  115. {sourcecode-1.36.3 → sourcecode-1.36.4}/supabase/functions/lemonsqueezy-webhook/index.ts +0 -0
  116. {sourcecode-1.36.3 → sourcecode-1.36.4}/supabase/functions/telemetry/index.ts +0 -0
  117. {sourcecode-1.36.3 → sourcecode-1.36.4}/supabase/sql/license_event_ordering.sql +0 -0
  118. {sourcecode-1.36.3 → sourcecode-1.36.4}/supabase/sql/telemetry_events.sql +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sourcecode
3
- Version: 1.36.3
3
+ Version: 1.36.4
4
4
  Summary: Persistent structural context and ultra-fast repeated analysis for AI coding agents
5
5
  License-File: LICENSE
6
6
  Keywords: agents,ai,codebase,context,developer-tools,llm
@@ -40,8 +40,8 @@ Description-Content-Type: text/markdown
40
40
 
41
41
  **Persistent structural context and ultra-fast repeated analysis for AI coding agents.**
42
42
 
43
- ![Version](https://img.shields.io/badge/version-1.36.1-blue)
44
- ![Python](https://img.shields.io/badge/python-3.10%2B-green)
43
+ ![Version](https://img.shields.io/badge/version-1.36.4-blue)
44
+ ![Python](https://img.shields.io/badge/python-3.9%2B-green)
45
45
 
46
46
  ---
47
47
 
@@ -114,7 +114,7 @@ pipx install sourcecode
114
114
 
115
115
  ```bash
116
116
  sourcecode version
117
- # sourcecode 1.36.1
117
+ # sourcecode 1.36.4
118
118
  ```
119
119
 
120
120
  ---
@@ -283,7 +283,7 @@ Specifically:
283
283
  - Architecture pattern detection best for Spring MVC layered apps; SPI/plugin architectures (e.g. Quarkus extension model) may be misclassified
284
284
  - Endpoint recall for JAX-RS subresource locator pattern is ~65%
285
285
  - `impact` on implementation classes (e.g. `OrderServiceImpl`) returns 0 callers in Spring Boot — callers inject the interface via `@Autowired`. Always target the interface. When `direct_callers: []` with `confidence_level: high` for a `@Service` class, re-query the interface.
286
- - `no_security_signal` on endpoints means no method-level annotations found — does **not** mean the endpoint is unsecured. Projects using Spring Security filter chains show 100% `no_security_signal` even when fully secured.
286
+ - `no_security_signal` on endpoints means no recognized method-level annotation found — does **not** mean the endpoint is unsecured. Projects using Spring Security filter chains show 100% `no_security_signal` even when fully secured. Projects using a custom authorization annotation can teach the scanner via [`sourcecode.config.json`](#sourcecodeconfigjson-repo-root).
287
287
  - `spring-audit` and `impact-chain` are **Java/Spring only** — non-Java repos return `spring_detected: false`
288
288
  - Event topology via `--type events` does not resolve Kafka/RabbitMQ/Redis message routes — only Spring ApplicationEvent and `@EventListener` chains
289
289
  - Self-invocation TX bypass (calling `@Transactional` method from the same class without going through the proxy) is not detected
@@ -411,6 +411,8 @@ Detects structural Spring anomalies that survive code review and tests, but caus
411
411
 
412
412
  Returns structured findings with `severity`, `confidence`, `symbol`, `source_file`, `evidence`, `explanation`, and `fix_hint`. JAVA/SPRING ONLY.
413
413
 
414
+ Endpoints guarded by a project-specific authorization annotation are treated as secured (not flagged `SEC-001`) once declared in [`sourcecode.config.json`](#sourcecodeconfigjson-repo-root).
415
+
414
416
  ### `impact-chain` — systemic blast radius with TX/SEC enrichment [free]
415
417
 
416
418
  ```bash
@@ -716,3 +718,29 @@ Or: `export SOURCECODE_TELEMETRY=0`
716
718
  ```bash
717
719
  sourcecode config # show version, config file path, telemetry status
718
720
  ```
721
+
722
+ ### `sourcecode.config.json` (repo root)
723
+
724
+ Optional, per-repo. Loaded from the root of the repo being analyzed. Absent or
725
+ malformed config is ignored — the tool behaves exactly as without it.
726
+
727
+ **Custom security annotations.** Teach `endpoints`, `spring-audit`, and `explain`
728
+ about project-specific authorization annotations (otherwise reported as
729
+ `policy: "none_detected"`):
730
+
731
+ ```json
732
+ {
733
+ "customSecurityAnnotations": [
734
+ {
735
+ "fullyQualifiedName": "com.example.security.M3FiltroSeguridad",
736
+ "shortName": "M3FiltroSeguridad",
737
+ "resourceParam": "nombreRecurso",
738
+ "levelParam": "nivelRequerido"
739
+ }
740
+ ]
741
+ }
742
+ ```
743
+
744
+ `resourceParam` / `levelParam` are optional and name the annotation attributes to
745
+ surface as `resourceName` / `requiredLevel`. Matching endpoints report
746
+ `policy: "custom"` and drop out of the `no_security_signal` count.
@@ -2,8 +2,8 @@
2
2
 
3
3
  **Persistent structural context and ultra-fast repeated analysis for AI coding agents.**
4
4
 
5
- ![Version](https://img.shields.io/badge/version-1.36.1-blue)
6
- ![Python](https://img.shields.io/badge/python-3.10%2B-green)
5
+ ![Version](https://img.shields.io/badge/version-1.36.4-blue)
6
+ ![Python](https://img.shields.io/badge/python-3.9%2B-green)
7
7
 
8
8
  ---
9
9
 
@@ -76,7 +76,7 @@ pipx install sourcecode
76
76
 
77
77
  ```bash
78
78
  sourcecode version
79
- # sourcecode 1.36.1
79
+ # sourcecode 1.36.4
80
80
  ```
81
81
 
82
82
  ---
@@ -245,7 +245,7 @@ Specifically:
245
245
  - Architecture pattern detection best for Spring MVC layered apps; SPI/plugin architectures (e.g. Quarkus extension model) may be misclassified
246
246
  - Endpoint recall for JAX-RS subresource locator pattern is ~65%
247
247
  - `impact` on implementation classes (e.g. `OrderServiceImpl`) returns 0 callers in Spring Boot — callers inject the interface via `@Autowired`. Always target the interface. When `direct_callers: []` with `confidence_level: high` for a `@Service` class, re-query the interface.
248
- - `no_security_signal` on endpoints means no method-level annotations found — does **not** mean the endpoint is unsecured. Projects using Spring Security filter chains show 100% `no_security_signal` even when fully secured.
248
+ - `no_security_signal` on endpoints means no recognized method-level annotation found — does **not** mean the endpoint is unsecured. Projects using Spring Security filter chains show 100% `no_security_signal` even when fully secured. Projects using a custom authorization annotation can teach the scanner via [`sourcecode.config.json`](#sourcecodeconfigjson-repo-root).
249
249
  - `spring-audit` and `impact-chain` are **Java/Spring only** — non-Java repos return `spring_detected: false`
250
250
  - Event topology via `--type events` does not resolve Kafka/RabbitMQ/Redis message routes — only Spring ApplicationEvent and `@EventListener` chains
251
251
  - Self-invocation TX bypass (calling `@Transactional` method from the same class without going through the proxy) is not detected
@@ -373,6 +373,8 @@ Detects structural Spring anomalies that survive code review and tests, but caus
373
373
 
374
374
  Returns structured findings with `severity`, `confidence`, `symbol`, `source_file`, `evidence`, `explanation`, and `fix_hint`. JAVA/SPRING ONLY.
375
375
 
376
+ Endpoints guarded by a project-specific authorization annotation are treated as secured (not flagged `SEC-001`) once declared in [`sourcecode.config.json`](#sourcecodeconfigjson-repo-root).
377
+
376
378
  ### `impact-chain` — systemic blast radius with TX/SEC enrichment [free]
377
379
 
378
380
  ```bash
@@ -678,3 +680,29 @@ Or: `export SOURCECODE_TELEMETRY=0`
678
680
  ```bash
679
681
  sourcecode config # show version, config file path, telemetry status
680
682
  ```
683
+
684
+ ### `sourcecode.config.json` (repo root)
685
+
686
+ Optional, per-repo. Loaded from the root of the repo being analyzed. Absent or
687
+ malformed config is ignored — the tool behaves exactly as without it.
688
+
689
+ **Custom security annotations.** Teach `endpoints`, `spring-audit`, and `explain`
690
+ about project-specific authorization annotations (otherwise reported as
691
+ `policy: "none_detected"`):
692
+
693
+ ```json
694
+ {
695
+ "customSecurityAnnotations": [
696
+ {
697
+ "fullyQualifiedName": "com.example.security.M3FiltroSeguridad",
698
+ "shortName": "M3FiltroSeguridad",
699
+ "resourceParam": "nombreRecurso",
700
+ "levelParam": "nivelRequerido"
701
+ }
702
+ ]
703
+ }
704
+ ```
705
+
706
+ `resourceParam` / `levelParam` are optional and name the annotation attributes to
707
+ surface as `resourceName` / `requiredLevel`. Matching endpoints report
708
+ `policy: "custom"` and drop out of the `no_security_signal` count.
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "sourcecode"
7
- version = "1.36.3"
7
+ version = "1.36.4"
8
8
  description = "Persistent structural context and ultra-fast repeated analysis 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.36.3"
3
+ __version__ = "1.36.4"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes