sourcecode 1.33.8__tar.gz → 1.33.9__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 (95) hide show
  1. {sourcecode-1.33.8 → sourcecode-1.33.9}/PKG-INFO +2 -2
  2. {sourcecode-1.33.8 → sourcecode-1.33.9}/README.md +1 -1
  3. {sourcecode-1.33.8 → sourcecode-1.33.9}/pyproject.toml +1 -1
  4. {sourcecode-1.33.8 → sourcecode-1.33.9}/src/sourcecode/__init__.py +1 -1
  5. {sourcecode-1.33.8 → sourcecode-1.33.9}/src/sourcecode/canonical_ir.py +6 -1
  6. {sourcecode-1.33.8 → sourcecode-1.33.9}/src/sourcecode/mcp/server.py +3 -3
  7. {sourcecode-1.33.8 → sourcecode-1.33.9}/src/sourcecode/repository_ir.py +8 -2
  8. {sourcecode-1.33.8 → sourcecode-1.33.9}/.github/workflows/build-windows.yml +0 -0
  9. {sourcecode-1.33.8 → sourcecode-1.33.9}/.gitignore +0 -0
  10. {sourcecode-1.33.8 → sourcecode-1.33.9}/.ruff.toml +0 -0
  11. {sourcecode-1.33.8 → sourcecode-1.33.9}/CHANGELOG.md +0 -0
  12. {sourcecode-1.33.8 → sourcecode-1.33.9}/CONTRIBUTING.md +0 -0
  13. {sourcecode-1.33.8 → sourcecode-1.33.9}/LICENSE +0 -0
  14. {sourcecode-1.33.8 → sourcecode-1.33.9}/SECURITY.md +0 -0
  15. {sourcecode-1.33.8 → sourcecode-1.33.9}/raw +0 -0
  16. {sourcecode-1.33.8 → sourcecode-1.33.9}/src/sourcecode/adaptive_scanner.py +0 -0
  17. {sourcecode-1.33.8 → sourcecode-1.33.9}/src/sourcecode/architecture_analyzer.py +0 -0
  18. {sourcecode-1.33.8 → sourcecode-1.33.9}/src/sourcecode/architecture_summary.py +0 -0
  19. {sourcecode-1.33.8 → sourcecode-1.33.9}/src/sourcecode/ast_extractor.py +0 -0
  20. {sourcecode-1.33.8 → sourcecode-1.33.9}/src/sourcecode/cache.py +0 -0
  21. {sourcecode-1.33.8 → sourcecode-1.33.9}/src/sourcecode/classifier.py +0 -0
  22. {sourcecode-1.33.8 → sourcecode-1.33.9}/src/sourcecode/cli.py +0 -0
  23. {sourcecode-1.33.8 → sourcecode-1.33.9}/src/sourcecode/code_notes_analyzer.py +0 -0
  24. {sourcecode-1.33.8 → sourcecode-1.33.9}/src/sourcecode/confidence_analyzer.py +0 -0
  25. {sourcecode-1.33.8 → sourcecode-1.33.9}/src/sourcecode/context_scorer.py +0 -0
  26. {sourcecode-1.33.8 → sourcecode-1.33.9}/src/sourcecode/context_summarizer.py +0 -0
  27. {sourcecode-1.33.8 → sourcecode-1.33.9}/src/sourcecode/contract_model.py +0 -0
  28. {sourcecode-1.33.8 → sourcecode-1.33.9}/src/sourcecode/contract_pipeline.py +0 -0
  29. {sourcecode-1.33.8 → sourcecode-1.33.9}/src/sourcecode/coverage_parser.py +0 -0
  30. {sourcecode-1.33.8 → sourcecode-1.33.9}/src/sourcecode/dependency_analyzer.py +0 -0
  31. {sourcecode-1.33.8 → sourcecode-1.33.9}/src/sourcecode/detectors/__init__.py +0 -0
  32. {sourcecode-1.33.8 → sourcecode-1.33.9}/src/sourcecode/detectors/base.py +0 -0
  33. {sourcecode-1.33.8 → sourcecode-1.33.9}/src/sourcecode/detectors/csproj_parser.py +0 -0
  34. {sourcecode-1.33.8 → sourcecode-1.33.9}/src/sourcecode/detectors/dart.py +0 -0
  35. {sourcecode-1.33.8 → sourcecode-1.33.9}/src/sourcecode/detectors/dotnet.py +0 -0
  36. {sourcecode-1.33.8 → sourcecode-1.33.9}/src/sourcecode/detectors/elixir.py +0 -0
  37. {sourcecode-1.33.8 → sourcecode-1.33.9}/src/sourcecode/detectors/go.py +0 -0
  38. {sourcecode-1.33.8 → sourcecode-1.33.9}/src/sourcecode/detectors/heuristic.py +0 -0
  39. {sourcecode-1.33.8 → sourcecode-1.33.9}/src/sourcecode/detectors/hybrid.py +0 -0
  40. {sourcecode-1.33.8 → sourcecode-1.33.9}/src/sourcecode/detectors/java.py +0 -0
  41. {sourcecode-1.33.8 → sourcecode-1.33.9}/src/sourcecode/detectors/jvm_ext.py +0 -0
  42. {sourcecode-1.33.8 → sourcecode-1.33.9}/src/sourcecode/detectors/nodejs.py +0 -0
  43. {sourcecode-1.33.8 → sourcecode-1.33.9}/src/sourcecode/detectors/parsers.py +0 -0
  44. {sourcecode-1.33.8 → sourcecode-1.33.9}/src/sourcecode/detectors/php.py +0 -0
  45. {sourcecode-1.33.8 → sourcecode-1.33.9}/src/sourcecode/detectors/project.py +0 -0
  46. {sourcecode-1.33.8 → sourcecode-1.33.9}/src/sourcecode/detectors/python.py +0 -0
  47. {sourcecode-1.33.8 → sourcecode-1.33.9}/src/sourcecode/detectors/ruby.py +0 -0
  48. {sourcecode-1.33.8 → sourcecode-1.33.9}/src/sourcecode/detectors/rust.py +0 -0
  49. {sourcecode-1.33.8 → sourcecode-1.33.9}/src/sourcecode/detectors/systems.py +0 -0
  50. {sourcecode-1.33.8 → sourcecode-1.33.9}/src/sourcecode/detectors/terraform.py +0 -0
  51. {sourcecode-1.33.8 → sourcecode-1.33.9}/src/sourcecode/detectors/tooling.py +0 -0
  52. {sourcecode-1.33.8 → sourcecode-1.33.9}/src/sourcecode/doc_analyzer.py +0 -0
  53. {sourcecode-1.33.8 → sourcecode-1.33.9}/src/sourcecode/entrypoint_classifier.py +0 -0
  54. {sourcecode-1.33.8 → sourcecode-1.33.9}/src/sourcecode/env_analyzer.py +0 -0
  55. {sourcecode-1.33.8 → sourcecode-1.33.9}/src/sourcecode/error_schema.py +0 -0
  56. {sourcecode-1.33.8 → sourcecode-1.33.9}/src/sourcecode/file_classifier.py +0 -0
  57. {sourcecode-1.33.8 → sourcecode-1.33.9}/src/sourcecode/flow_analyzer.py +0 -0
  58. {sourcecode-1.33.8 → sourcecode-1.33.9}/src/sourcecode/git_analyzer.py +0 -0
  59. {sourcecode-1.33.8 → sourcecode-1.33.9}/src/sourcecode/graph_analyzer.py +0 -0
  60. {sourcecode-1.33.8 → sourcecode-1.33.9}/src/sourcecode/license.py +0 -0
  61. {sourcecode-1.33.8 → sourcecode-1.33.9}/src/sourcecode/mcp/__init__.py +0 -0
  62. {sourcecode-1.33.8 → sourcecode-1.33.9}/src/sourcecode/mcp/onboarding/__init__.py +0 -0
  63. {sourcecode-1.33.8 → sourcecode-1.33.9}/src/sourcecode/mcp/onboarding/applier.py +0 -0
  64. {sourcecode-1.33.8 → sourcecode-1.33.9}/src/sourcecode/mcp/onboarding/backup.py +0 -0
  65. {sourcecode-1.33.8 → sourcecode-1.33.9}/src/sourcecode/mcp/onboarding/detector.py +0 -0
  66. {sourcecode-1.33.8 → sourcecode-1.33.9}/src/sourcecode/mcp/onboarding/planner.py +0 -0
  67. {sourcecode-1.33.8 → sourcecode-1.33.9}/src/sourcecode/mcp/orchestrator.py +0 -0
  68. {sourcecode-1.33.8 → sourcecode-1.33.9}/src/sourcecode/mcp/registry.py +0 -0
  69. {sourcecode-1.33.8 → sourcecode-1.33.9}/src/sourcecode/mcp/runner.py +0 -0
  70. {sourcecode-1.33.8 → sourcecode-1.33.9}/src/sourcecode/mcp_nudge.py +0 -0
  71. {sourcecode-1.33.8 → sourcecode-1.33.9}/src/sourcecode/metrics_analyzer.py +0 -0
  72. {sourcecode-1.33.8 → sourcecode-1.33.9}/src/sourcecode/output_budget.py +0 -0
  73. {sourcecode-1.33.8 → sourcecode-1.33.9}/src/sourcecode/path_filters.py +0 -0
  74. {sourcecode-1.33.8 → sourcecode-1.33.9}/src/sourcecode/pr_comment_renderer.py +0 -0
  75. {sourcecode-1.33.8 → sourcecode-1.33.9}/src/sourcecode/prepare_context.py +0 -0
  76. {sourcecode-1.33.8 → sourcecode-1.33.9}/src/sourcecode/progress.py +0 -0
  77. {sourcecode-1.33.8 → sourcecode-1.33.9}/src/sourcecode/ranking_engine.py +0 -0
  78. {sourcecode-1.33.8 → sourcecode-1.33.9}/src/sourcecode/redactor.py +0 -0
  79. {sourcecode-1.33.8 → sourcecode-1.33.9}/src/sourcecode/relevance_scorer.py +0 -0
  80. {sourcecode-1.33.8 → sourcecode-1.33.9}/src/sourcecode/repo_classifier.py +0 -0
  81. {sourcecode-1.33.8 → sourcecode-1.33.9}/src/sourcecode/ris.py +0 -0
  82. {sourcecode-1.33.8 → sourcecode-1.33.9}/src/sourcecode/runtime_classifier.py +0 -0
  83. {sourcecode-1.33.8 → sourcecode-1.33.9}/src/sourcecode/scanner.py +0 -0
  84. {sourcecode-1.33.8 → sourcecode-1.33.9}/src/sourcecode/schema.py +0 -0
  85. {sourcecode-1.33.8 → sourcecode-1.33.9}/src/sourcecode/semantic_analyzer.py +0 -0
  86. {sourcecode-1.33.8 → sourcecode-1.33.9}/src/sourcecode/serializer.py +0 -0
  87. {sourcecode-1.33.8 → sourcecode-1.33.9}/src/sourcecode/summarizer.py +0 -0
  88. {sourcecode-1.33.8 → sourcecode-1.33.9}/src/sourcecode/telemetry/__init__.py +0 -0
  89. {sourcecode-1.33.8 → sourcecode-1.33.9}/src/sourcecode/telemetry/config.py +0 -0
  90. {sourcecode-1.33.8 → sourcecode-1.33.9}/src/sourcecode/telemetry/consent.py +0 -0
  91. {sourcecode-1.33.8 → sourcecode-1.33.9}/src/sourcecode/telemetry/events.py +0 -0
  92. {sourcecode-1.33.8 → sourcecode-1.33.9}/src/sourcecode/telemetry/filters.py +0 -0
  93. {sourcecode-1.33.8 → sourcecode-1.33.9}/src/sourcecode/telemetry/transport.py +0 -0
  94. {sourcecode-1.33.8 → sourcecode-1.33.9}/src/sourcecode/tree_utils.py +0 -0
  95. {sourcecode-1.33.8 → sourcecode-1.33.9}/src/sourcecode/workspace.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sourcecode
3
- Version: 1.33.8
3
+ Version: 1.33.9
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
@@ -39,7 +39,7 @@ Description-Content-Type: text/markdown
39
39
 
40
40
  **Persistent structural context and ultra-fast repeated analysis for AI coding agents.**
41
41
 
42
- ![Version](https://img.shields.io/badge/version-1.33.8-blue)
42
+ ![Version](https://img.shields.io/badge/version-1.33.9-blue)
43
43
  ![Python](https://img.shields.io/badge/python-3.10%2B-green)
44
44
 
45
45
  ---
@@ -2,7 +2,7 @@
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.33.8-blue)
5
+ ![Version](https://img.shields.io/badge/version-1.33.9-blue)
6
6
  ![Python](https://img.shields.io/badge/python-3.10%2B-green)
7
7
 
8
8
  ---
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "sourcecode"
7
- version = "1.33.8"
7
+ version = "1.33.9"
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.33.8"
3
+ __version__ = "1.33.9"
@@ -445,10 +445,15 @@ def project_endpoint_surface(cir: CanonicalRepositoryIR) -> dict:
445
445
  # Backward compat: top-level required_permission for custom annotation
446
446
  if ep.security.policy == "custom_permission":
447
447
  entry["required_permission"] = ep.security.required_permission
448
+ else:
449
+ entry["security"] = {"policy": "none_detected"}
448
450
 
449
451
  endpoints.append(entry)
450
452
 
451
- no_security_signal = sum(1 for e in endpoints if "security" not in e)
453
+ no_security_signal = sum(
454
+ 1 for e in endpoints
455
+ if e.get("security", {}).get("policy") == "none_detected"
456
+ )
452
457
  return {
453
458
  "endpoints": endpoints,
454
459
  "total": len(endpoints),
@@ -524,10 +524,10 @@ def get_endpoints(repo_path: str = ".") -> dict:
524
524
 
525
525
  Maps to: sourcecode endpoints <repo_path>
526
526
  Returns: endpoints list with method, path, controller, handler fields;
527
- security dict when authorization annotations are present
528
- (policy: roles_allowed|permit_all|deny_all|authenticated|...);
527
+ security dict always present (policy: roles_allowed|permit_all|deny_all|
528
+ authenticated|...|none_detected); none_detected = no auth annotation found.
529
529
  total (int), no_security_signal (int), and security_model (str) fields.
530
- no_security_signal counts endpoints with no recognized auth annotation.
530
+ no_security_signal counts endpoints where security.policy == "none_detected".
531
531
  security_model values: "filter_based" (centralized Spring Security config —
532
532
  high no_security_signal is expected and does NOT mean endpoints are unprotected),
533
533
  "annotation_based" (per-endpoint annotations only), "mixed" (both),
@@ -3015,7 +3015,10 @@ def extract_java_endpoints(root: Path) -> "dict[str, Any]":
3015
3015
  # "no_security_signal" = no recognized security annotation at method OR class level.
3016
3016
  # Note: repos may use framework-level security (e.g. Keycloak itself) with no
3017
3017
  # per-endpoint annotations — this count reflects annotation-based coverage only.
3018
- no_security_signal = sum(1 for e in endpoints if not e.get("security"))
3018
+ no_security_signal = sum(
3019
+ 1 for e in endpoints
3020
+ if e.get("security", {}).get("policy") == "none_detected"
3021
+ )
3019
3022
 
3020
3023
  # Detect filter-based security: centralized Spring Security config class.
3021
3024
  # When present, high no_security_signal is expected — security is enforced by
@@ -3034,7 +3037,10 @@ def extract_java_endpoints(root: Path) -> "dict[str, Any]":
3034
3037
  for sym in _class_syms
3035
3038
  )
3036
3039
  )
3037
- _has_annotation_security = any(e.get("security") for e in endpoints)
3040
+ _has_annotation_security = any(
3041
+ e.get("security", {}).get("policy") != "none_detected"
3042
+ for e in endpoints
3043
+ )
3038
3044
  if _filter_based and _has_annotation_security:
3039
3045
  security_model = "mixed"
3040
3046
  elif _filter_based:
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes