sourcecode 1.35.11__tar.gz → 1.35.12__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 (103) hide show
  1. {sourcecode-1.35.11 → sourcecode-1.35.12}/PKG-INFO +3 -3
  2. {sourcecode-1.35.11 → sourcecode-1.35.12}/README.md +2 -2
  3. {sourcecode-1.35.11 → sourcecode-1.35.12}/pyproject.toml +1 -1
  4. {sourcecode-1.35.11 → sourcecode-1.35.12}/src/sourcecode/__init__.py +1 -1
  5. {sourcecode-1.35.11 → sourcecode-1.35.12}/src/sourcecode/cli.py +2 -55
  6. {sourcecode-1.35.11 → sourcecode-1.35.12}/src/sourcecode/mcp/registry.py +1 -12
  7. {sourcecode-1.35.11 → sourcecode-1.35.12}/src/sourcecode/spring_security_audit.py +7 -1
  8. {sourcecode-1.35.11 → sourcecode-1.35.12}/src/sourcecode/spring_tx_analyzer.py +3 -1
  9. {sourcecode-1.35.11 → sourcecode-1.35.12}/.github/workflows/build-windows.yml +0 -0
  10. {sourcecode-1.35.11 → sourcecode-1.35.12}/.gitignore +0 -0
  11. {sourcecode-1.35.11 → sourcecode-1.35.12}/.ruff.toml +0 -0
  12. {sourcecode-1.35.11 → sourcecode-1.35.12}/CHANGELOG.md +0 -0
  13. {sourcecode-1.35.11 → sourcecode-1.35.12}/CONTRIBUTING.md +0 -0
  14. {sourcecode-1.35.11 → sourcecode-1.35.12}/LICENSE +0 -0
  15. {sourcecode-1.35.11 → sourcecode-1.35.12}/SECURITY.md +0 -0
  16. {sourcecode-1.35.11 → sourcecode-1.35.12}/raw +0 -0
  17. {sourcecode-1.35.11 → sourcecode-1.35.12}/src/sourcecode/adaptive_scanner.py +0 -0
  18. {sourcecode-1.35.11 → sourcecode-1.35.12}/src/sourcecode/architecture_analyzer.py +0 -0
  19. {sourcecode-1.35.11 → sourcecode-1.35.12}/src/sourcecode/architecture_summary.py +0 -0
  20. {sourcecode-1.35.11 → sourcecode-1.35.12}/src/sourcecode/ast_extractor.py +0 -0
  21. {sourcecode-1.35.11 → sourcecode-1.35.12}/src/sourcecode/cache.py +0 -0
  22. {sourcecode-1.35.11 → sourcecode-1.35.12}/src/sourcecode/canonical_ir.py +0 -0
  23. {sourcecode-1.35.11 → sourcecode-1.35.12}/src/sourcecode/cir_graphs.py +0 -0
  24. {sourcecode-1.35.11 → sourcecode-1.35.12}/src/sourcecode/classifier.py +0 -0
  25. {sourcecode-1.35.11 → sourcecode-1.35.12}/src/sourcecode/code_notes_analyzer.py +0 -0
  26. {sourcecode-1.35.11 → sourcecode-1.35.12}/src/sourcecode/confidence_analyzer.py +0 -0
  27. {sourcecode-1.35.11 → sourcecode-1.35.12}/src/sourcecode/context_scorer.py +0 -0
  28. {sourcecode-1.35.11 → sourcecode-1.35.12}/src/sourcecode/context_summarizer.py +0 -0
  29. {sourcecode-1.35.11 → sourcecode-1.35.12}/src/sourcecode/contract_model.py +0 -0
  30. {sourcecode-1.35.11 → sourcecode-1.35.12}/src/sourcecode/contract_pipeline.py +0 -0
  31. {sourcecode-1.35.11 → sourcecode-1.35.12}/src/sourcecode/coverage_parser.py +0 -0
  32. {sourcecode-1.35.11 → sourcecode-1.35.12}/src/sourcecode/dependency_analyzer.py +0 -0
  33. {sourcecode-1.35.11 → sourcecode-1.35.12}/src/sourcecode/detectors/__init__.py +0 -0
  34. {sourcecode-1.35.11 → sourcecode-1.35.12}/src/sourcecode/detectors/base.py +0 -0
  35. {sourcecode-1.35.11 → sourcecode-1.35.12}/src/sourcecode/detectors/csproj_parser.py +0 -0
  36. {sourcecode-1.35.11 → sourcecode-1.35.12}/src/sourcecode/detectors/dart.py +0 -0
  37. {sourcecode-1.35.11 → sourcecode-1.35.12}/src/sourcecode/detectors/dotnet.py +0 -0
  38. {sourcecode-1.35.11 → sourcecode-1.35.12}/src/sourcecode/detectors/elixir.py +0 -0
  39. {sourcecode-1.35.11 → sourcecode-1.35.12}/src/sourcecode/detectors/go.py +0 -0
  40. {sourcecode-1.35.11 → sourcecode-1.35.12}/src/sourcecode/detectors/heuristic.py +0 -0
  41. {sourcecode-1.35.11 → sourcecode-1.35.12}/src/sourcecode/detectors/hybrid.py +0 -0
  42. {sourcecode-1.35.11 → sourcecode-1.35.12}/src/sourcecode/detectors/java.py +0 -0
  43. {sourcecode-1.35.11 → sourcecode-1.35.12}/src/sourcecode/detectors/jvm_ext.py +0 -0
  44. {sourcecode-1.35.11 → sourcecode-1.35.12}/src/sourcecode/detectors/nodejs.py +0 -0
  45. {sourcecode-1.35.11 → sourcecode-1.35.12}/src/sourcecode/detectors/parsers.py +0 -0
  46. {sourcecode-1.35.11 → sourcecode-1.35.12}/src/sourcecode/detectors/php.py +0 -0
  47. {sourcecode-1.35.11 → sourcecode-1.35.12}/src/sourcecode/detectors/project.py +0 -0
  48. {sourcecode-1.35.11 → sourcecode-1.35.12}/src/sourcecode/detectors/python.py +0 -0
  49. {sourcecode-1.35.11 → sourcecode-1.35.12}/src/sourcecode/detectors/ruby.py +0 -0
  50. {sourcecode-1.35.11 → sourcecode-1.35.12}/src/sourcecode/detectors/rust.py +0 -0
  51. {sourcecode-1.35.11 → sourcecode-1.35.12}/src/sourcecode/detectors/systems.py +0 -0
  52. {sourcecode-1.35.11 → sourcecode-1.35.12}/src/sourcecode/detectors/terraform.py +0 -0
  53. {sourcecode-1.35.11 → sourcecode-1.35.12}/src/sourcecode/detectors/tooling.py +0 -0
  54. {sourcecode-1.35.11 → sourcecode-1.35.12}/src/sourcecode/doc_analyzer.py +0 -0
  55. {sourcecode-1.35.11 → sourcecode-1.35.12}/src/sourcecode/entrypoint_classifier.py +0 -0
  56. {sourcecode-1.35.11 → sourcecode-1.35.12}/src/sourcecode/env_analyzer.py +0 -0
  57. {sourcecode-1.35.11 → sourcecode-1.35.12}/src/sourcecode/error_schema.py +0 -0
  58. {sourcecode-1.35.11 → sourcecode-1.35.12}/src/sourcecode/file_classifier.py +0 -0
  59. {sourcecode-1.35.11 → sourcecode-1.35.12}/src/sourcecode/flow_analyzer.py +0 -0
  60. {sourcecode-1.35.11 → sourcecode-1.35.12}/src/sourcecode/git_analyzer.py +0 -0
  61. {sourcecode-1.35.11 → sourcecode-1.35.12}/src/sourcecode/graph_analyzer.py +0 -0
  62. {sourcecode-1.35.11 → sourcecode-1.35.12}/src/sourcecode/license.py +0 -0
  63. {sourcecode-1.35.11 → sourcecode-1.35.12}/src/sourcecode/mcp/__init__.py +0 -0
  64. {sourcecode-1.35.11 → sourcecode-1.35.12}/src/sourcecode/mcp/onboarding/__init__.py +0 -0
  65. {sourcecode-1.35.11 → sourcecode-1.35.12}/src/sourcecode/mcp/onboarding/applier.py +0 -0
  66. {sourcecode-1.35.11 → sourcecode-1.35.12}/src/sourcecode/mcp/onboarding/backup.py +0 -0
  67. {sourcecode-1.35.11 → sourcecode-1.35.12}/src/sourcecode/mcp/onboarding/detector.py +0 -0
  68. {sourcecode-1.35.11 → sourcecode-1.35.12}/src/sourcecode/mcp/onboarding/planner.py +0 -0
  69. {sourcecode-1.35.11 → sourcecode-1.35.12}/src/sourcecode/mcp/orchestrator.py +0 -0
  70. {sourcecode-1.35.11 → sourcecode-1.35.12}/src/sourcecode/mcp/runner.py +0 -0
  71. {sourcecode-1.35.11 → sourcecode-1.35.12}/src/sourcecode/mcp/server.py +0 -0
  72. {sourcecode-1.35.11 → sourcecode-1.35.12}/src/sourcecode/mcp_nudge.py +0 -0
  73. {sourcecode-1.35.11 → sourcecode-1.35.12}/src/sourcecode/metrics_analyzer.py +0 -0
  74. {sourcecode-1.35.11 → sourcecode-1.35.12}/src/sourcecode/output_budget.py +0 -0
  75. {sourcecode-1.35.11 → sourcecode-1.35.12}/src/sourcecode/path_filters.py +0 -0
  76. {sourcecode-1.35.11 → sourcecode-1.35.12}/src/sourcecode/pr_comment_renderer.py +0 -0
  77. {sourcecode-1.35.11 → sourcecode-1.35.12}/src/sourcecode/prepare_context.py +0 -0
  78. {sourcecode-1.35.11 → sourcecode-1.35.12}/src/sourcecode/progress.py +0 -0
  79. {sourcecode-1.35.11 → sourcecode-1.35.12}/src/sourcecode/ranking_engine.py +0 -0
  80. {sourcecode-1.35.11 → sourcecode-1.35.12}/src/sourcecode/redactor.py +0 -0
  81. {sourcecode-1.35.11 → sourcecode-1.35.12}/src/sourcecode/relevance_scorer.py +0 -0
  82. {sourcecode-1.35.11 → sourcecode-1.35.12}/src/sourcecode/repo_classifier.py +0 -0
  83. {sourcecode-1.35.11 → sourcecode-1.35.12}/src/sourcecode/repository_ir.py +0 -0
  84. {sourcecode-1.35.11 → sourcecode-1.35.12}/src/sourcecode/ris.py +0 -0
  85. {sourcecode-1.35.11 → sourcecode-1.35.12}/src/sourcecode/runtime_classifier.py +0 -0
  86. {sourcecode-1.35.11 → sourcecode-1.35.12}/src/sourcecode/scanner.py +0 -0
  87. {sourcecode-1.35.11 → sourcecode-1.35.12}/src/sourcecode/schema.py +0 -0
  88. {sourcecode-1.35.11 → sourcecode-1.35.12}/src/sourcecode/semantic_analyzer.py +0 -0
  89. {sourcecode-1.35.11 → sourcecode-1.35.12}/src/sourcecode/serializer.py +0 -0
  90. {sourcecode-1.35.11 → sourcecode-1.35.12}/src/sourcecode/spring_event_topology.py +0 -0
  91. {sourcecode-1.35.11 → sourcecode-1.35.12}/src/sourcecode/spring_findings.py +0 -0
  92. {sourcecode-1.35.11 → sourcecode-1.35.12}/src/sourcecode/spring_impact.py +0 -0
  93. {sourcecode-1.35.11 → sourcecode-1.35.12}/src/sourcecode/spring_model.py +0 -0
  94. {sourcecode-1.35.11 → sourcecode-1.35.12}/src/sourcecode/spring_semantic.py +0 -0
  95. {sourcecode-1.35.11 → sourcecode-1.35.12}/src/sourcecode/summarizer.py +0 -0
  96. {sourcecode-1.35.11 → sourcecode-1.35.12}/src/sourcecode/telemetry/__init__.py +0 -0
  97. {sourcecode-1.35.11 → sourcecode-1.35.12}/src/sourcecode/telemetry/config.py +0 -0
  98. {sourcecode-1.35.11 → sourcecode-1.35.12}/src/sourcecode/telemetry/consent.py +0 -0
  99. {sourcecode-1.35.11 → sourcecode-1.35.12}/src/sourcecode/telemetry/events.py +0 -0
  100. {sourcecode-1.35.11 → sourcecode-1.35.12}/src/sourcecode/telemetry/filters.py +0 -0
  101. {sourcecode-1.35.11 → sourcecode-1.35.12}/src/sourcecode/telemetry/transport.py +0 -0
  102. {sourcecode-1.35.11 → sourcecode-1.35.12}/src/sourcecode/tree_utils.py +0 -0
  103. {sourcecode-1.35.11 → sourcecode-1.35.12}/src/sourcecode/workspace.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sourcecode
3
- Version: 1.35.11
3
+ Version: 1.35.12
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.35.10-blue)
42
+ ![Version](https://img.shields.io/badge/version-1.35.12-blue)
43
43
  ![Python](https://img.shields.io/badge/python-3.10%2B-green)
44
44
 
45
45
  ---
@@ -113,7 +113,7 @@ pipx install sourcecode
113
113
 
114
114
  ```bash
115
115
  sourcecode version
116
- # sourcecode 1.35.10
116
+ # sourcecode 1.35.12
117
117
  ```
118
118
 
119
119
  ---
@@ -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.35.10-blue)
5
+ ![Version](https://img.shields.io/badge/version-1.35.12-blue)
6
6
  ![Python](https://img.shields.io/badge/python-3.10%2B-green)
7
7
 
8
8
  ---
@@ -76,7 +76,7 @@ pipx install sourcecode
76
76
 
77
77
  ```bash
78
78
  sourcecode version
79
- # sourcecode 1.35.10
79
+ # sourcecode 1.35.12
80
80
  ```
81
81
 
82
82
  ---
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "sourcecode"
7
- version = "1.35.11"
7
+ version = "1.35.12"
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.35.11"
3
+ __version__ = "1.35.12"
@@ -213,7 +213,7 @@ _HELP = _build_help_text()
213
213
  # not consumed as a repository path.
214
214
  _SUBCOMMANDS: frozenset[str] = frozenset(
215
215
  {
216
- "telemetry", "prepare-context", "version", "config", "analyze",
216
+ "telemetry", "prepare-context", "version", "config",
217
217
  "repo-ir", "mcp", "endpoints", "impact",
218
218
  # Enterprise workflow commands
219
219
  "onboard", "modernize", "fix-bug", "review-pr",
@@ -641,12 +641,6 @@ def main(
641
641
  hidden=True,
642
642
  help="Edge types for --graph-modules, comma-separated: imports,calls,contains,extends.",
643
643
  ),
644
- no_tree: bool = typer.Option(
645
- False,
646
- "--no-tree",
647
- hidden=True,
648
- help="(Removed) No-op. File tree is excluded by default. Use --tree to include it.",
649
- ),
650
644
  tree: bool = typer.Option(
651
645
  False,
652
646
  "--tree",
@@ -766,14 +760,6 @@ def main(
766
760
  help="Limit total exported semantic nodes across all file contracts.",
767
761
  min=1,
768
762
  ),
769
- dependency_depth: int = typer.Option(
770
- 0,
771
- "--dependency-depth",
772
- hidden=True,
773
- help="(Removed) Transitive resolution is not implemented. Pass 0 or omit.",
774
- min=0,
775
- max=5,
776
- ),
777
763
  entrypoints_only: bool = typer.Option(
778
764
  False,
779
765
  "--entrypoints-only",
@@ -797,12 +783,6 @@ def main(
797
783
  hidden=True,
798
784
  help="Include a compact dependency graph in contract output.",
799
785
  ),
800
- compress_types: bool = typer.Option(
801
- False,
802
- "--compress-types",
803
- hidden=True,
804
- help="(Removed) No observable effect when type signatures are not extracted. Omit.",
805
- ),
806
786
  symbol: Optional[str] = typer.Option(
807
787
  None,
808
788
  "--symbol",
@@ -853,6 +833,7 @@ def main(
853
833
  return
854
834
 
855
835
  _t0 = time.monotonic()
836
+ no_tree: bool = False # set True by --agent; --no-tree flag removed
856
837
 
857
838
  # Validate new flag choices
858
839
  _MODE_CHOICES = ("contract", "minimal", "standard", "raw")
@@ -925,22 +906,6 @@ def main(
925
906
  )
926
907
  raise typer.Exit(code=2) # FIX-P2-7: arg validation → exit 2
927
908
 
928
- if dependency_depth > 0:
929
- typer.echo(
930
- f"[warning] --dependency-depth {dependency_depth} has no effect: "
931
- "transitive import resolution is not implemented for npm/yarn/pip projects. "
932
- "Using depth=0 (direct dependencies only).",
933
- err=True,
934
- )
935
- dependency_depth = 0
936
-
937
- if compress_types:
938
- typer.echo(
939
- "[deprecated] --compress-types is removed: type signatures are rarely extracted "
940
- "at default depth. Flag ignored.",
941
- err=True,
942
- )
943
-
944
909
  # Pro gate for --full: removing truncation limits is enterprise-scale functionality.
945
910
  if full:
946
911
  from sourcecode.license import require_feature as _req_full
@@ -2174,11 +2139,9 @@ def main(
2174
2139
  mode=mode,
2175
2140
  rank_by=rank_by, # type: ignore[arg-type]
2176
2141
  max_symbols=max_symbols,
2177
- dependency_depth=dependency_depth,
2178
2142
  entrypoints_only=entrypoints_only,
2179
2143
  changed_only=changed_only,
2180
2144
  symbol=symbol,
2181
- compress_types=compress_types,
2182
2145
  max_importers=max_importers,
2183
2146
  semantic_calls=sm.semantic_calls or None,
2184
2147
  code_notes=sm.code_notes or None,
@@ -4611,22 +4574,6 @@ def cold_start_cmd(
4611
4574
  typer.echo(_out)
4612
4575
 
4613
4576
 
4614
- # ── analyze (legacy alias) ────────────────────────────────────────────────────
4615
-
4616
- @app.command("analyze", hidden=True)
4617
- def analyze_cmd(
4618
- path: Path = typer.Argument(Path("."), help="Repository path to analyze"),
4619
- ) -> None:
4620
- """[deprecated] Use: sourcecode [PATH]"""
4621
- typer.echo(
4622
- "Warning: 'analyze' subcommand is deprecated.\n"
4623
- "Use: sourcecode .\n"
4624
- " sourcecode /path/to/repo",
4625
- err=True,
4626
- )
4627
- raise typer.Exit(code=1)
4628
-
4629
-
4630
4577
  # ── MCP server ────────────────────────────────────────────────────────────────
4631
4578
 
4632
4579
  @mcp_app.command("serve")
@@ -1134,17 +1134,6 @@ repo_path: absolute path to the repository (default: current working directory).
1134
1134
 
1135
1135
  def _internal_specs() -> list[ToolSpec]:
1136
1136
  return [
1137
- _alias_spec(
1138
- "analyze",
1139
- "Hidden legacy CLI alias. Not exposed to MCP.",
1140
- ("analyze",),
1141
- (
1142
- ToolParamSpec("path", "argument", str, required=False, default=".", is_path=True),
1143
- ),
1144
- lambda inputs: ["analyze", str(inputs.get("path", "."))],
1145
- internal=True,
1146
- not_exposed_to_cli=True,
1147
- ),
1148
1137
  _alias_spec(
1149
1138
  "start_session",
1150
1139
  "Internal orchestration helper. Not exposed to MCP.",
@@ -1370,7 +1359,7 @@ def build_tool_specs() -> tuple[ToolSpec, ...]:
1370
1359
  _canonical_spec_for_runtime_command(runtime)
1371
1360
  for runtime in discover_runtime_commands()
1372
1361
  if (runtime.callback is not None or runtime.path == ())
1373
- and (not runtime.hidden or runtime.path == ("analyze",))
1362
+ and not runtime.hidden
1374
1363
  ]
1375
1364
  # Mark canonical tools that should not be served via MCP (validate_registry still checks them)
1376
1365
  canonical = [
@@ -469,9 +469,15 @@ def run_security_audit(
469
469
 
470
470
  elapsed_ms = round((time.monotonic() - t0) * 1000, 1)
471
471
 
472
+ _spring_detected = (
473
+ (model is not None and bool(model.bean_graph.beans))
474
+ or tx_index.stats()["total"] > 0
475
+ or cir.metadata.get("security_model", "unknown") != "unknown"
476
+ )
477
+
472
478
  result = SpringAuditResult(
473
479
  repo_id=getattr(cir, "cir_hash", "")[:16],
474
- spring_detected=True,
480
+ spring_detected=_spring_detected,
475
481
  scope="security",
476
482
  findings=findings,
477
483
  limitations=[
@@ -719,9 +719,11 @@ def run_tx_audit(
719
719
 
720
720
  elapsed_ms = round((time.monotonic() - t0) * 1000, 1)
721
721
 
722
+ _spring_detected = tx_index.stats()["total"] > 0 or bool(model.bean_graph.beans)
723
+
722
724
  result = SpringAuditResult(
723
725
  repo_id=getattr(cir, "cir_hash", "")[:16],
724
- spring_detected=True,
726
+ spring_detected=_spring_detected,
725
727
  scope="tx",
726
728
  findings=findings,
727
729
  limitations=[
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes