sourcecode 1.33.6__tar.gz → 1.33.7__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 (94) hide show
  1. {sourcecode-1.33.6 → sourcecode-1.33.7}/PKG-INFO +2 -2
  2. {sourcecode-1.33.6 → sourcecode-1.33.7}/README.md +1 -1
  3. {sourcecode-1.33.6 → sourcecode-1.33.7}/pyproject.toml +1 -1
  4. {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/__init__.py +1 -1
  5. {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/mcp/server.py +13 -1
  6. {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/prepare_context.py +4 -0
  7. {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/repository_ir.py +8 -2
  8. {sourcecode-1.33.6 → sourcecode-1.33.7}/.github/workflows/build-windows.yml +0 -0
  9. {sourcecode-1.33.6 → sourcecode-1.33.7}/.gitignore +0 -0
  10. {sourcecode-1.33.6 → sourcecode-1.33.7}/.ruff.toml +0 -0
  11. {sourcecode-1.33.6 → sourcecode-1.33.7}/CHANGELOG.md +0 -0
  12. {sourcecode-1.33.6 → sourcecode-1.33.7}/CONTRIBUTING.md +0 -0
  13. {sourcecode-1.33.6 → sourcecode-1.33.7}/LICENSE +0 -0
  14. {sourcecode-1.33.6 → sourcecode-1.33.7}/SECURITY.md +0 -0
  15. {sourcecode-1.33.6 → sourcecode-1.33.7}/raw +0 -0
  16. {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/adaptive_scanner.py +0 -0
  17. {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/architecture_analyzer.py +0 -0
  18. {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/architecture_summary.py +0 -0
  19. {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/ast_extractor.py +0 -0
  20. {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/cache.py +0 -0
  21. {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/cache.tmp_new +0 -0
  22. {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/canonical_ir.py +0 -0
  23. {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/classifier.py +0 -0
  24. {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/cli.py +0 -0
  25. {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/code_notes_analyzer.py +0 -0
  26. {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/confidence_analyzer.py +0 -0
  27. {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/context_scorer.py +0 -0
  28. {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/context_summarizer.py +0 -0
  29. {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/contract_model.py +0 -0
  30. {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/contract_pipeline.py +0 -0
  31. {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/coverage_parser.py +0 -0
  32. {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/dependency_analyzer.py +0 -0
  33. {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/detectors/__init__.py +0 -0
  34. {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/detectors/base.py +0 -0
  35. {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/detectors/csproj_parser.py +0 -0
  36. {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/detectors/dart.py +0 -0
  37. {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/detectors/dotnet.py +0 -0
  38. {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/detectors/elixir.py +0 -0
  39. {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/detectors/go.py +0 -0
  40. {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/detectors/heuristic.py +0 -0
  41. {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/detectors/hybrid.py +0 -0
  42. {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/detectors/java.py +0 -0
  43. {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/detectors/jvm_ext.py +0 -0
  44. {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/detectors/nodejs.py +0 -0
  45. {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/detectors/parsers.py +0 -0
  46. {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/detectors/php.py +0 -0
  47. {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/detectors/project.py +0 -0
  48. {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/detectors/python.py +0 -0
  49. {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/detectors/ruby.py +0 -0
  50. {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/detectors/rust.py +0 -0
  51. {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/detectors/systems.py +0 -0
  52. {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/detectors/terraform.py +0 -0
  53. {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/detectors/tooling.py +0 -0
  54. {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/doc_analyzer.py +0 -0
  55. {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/entrypoint_classifier.py +0 -0
  56. {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/env_analyzer.py +0 -0
  57. {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/file_classifier.py +0 -0
  58. {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/flow_analyzer.py +0 -0
  59. {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/git_analyzer.py +0 -0
  60. {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/graph_analyzer.py +0 -0
  61. {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/license.py +0 -0
  62. {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/mcp/__init__.py +0 -0
  63. {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/mcp/onboarding/__init__.py +0 -0
  64. {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/mcp/onboarding/applier.py +0 -0
  65. {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/mcp/onboarding/backup.py +0 -0
  66. {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/mcp/onboarding/detector.py +0 -0
  67. {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/mcp/onboarding/planner.py +0 -0
  68. {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/mcp/orchestrator.py +0 -0
  69. {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/mcp/runner.py +0 -0
  70. {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/mcp_nudge.py +0 -0
  71. {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/metrics_analyzer.py +0 -0
  72. {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/output_budget.py +0 -0
  73. {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/path_filters.py +0 -0
  74. {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/pr_comment_renderer.py +0 -0
  75. {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/progress.py +0 -0
  76. {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/ranking_engine.py +0 -0
  77. {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/redactor.py +0 -0
  78. {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/relevance_scorer.py +0 -0
  79. {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/repo_classifier.py +0 -0
  80. {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/ris.py +0 -0
  81. {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/runtime_classifier.py +0 -0
  82. {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/scanner.py +0 -0
  83. {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/schema.py +0 -0
  84. {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/semantic_analyzer.py +0 -0
  85. {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/serializer.py +0 -0
  86. {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/summarizer.py +0 -0
  87. {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/telemetry/__init__.py +0 -0
  88. {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/telemetry/config.py +0 -0
  89. {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/telemetry/consent.py +0 -0
  90. {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/telemetry/events.py +0 -0
  91. {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/telemetry/filters.py +0 -0
  92. {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/telemetry/transport.py +0 -0
  93. {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/tree_utils.py +0 -0
  94. {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/workspace.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sourcecode
3
- Version: 1.33.6
3
+ Version: 1.33.7
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.4-blue)
42
+ ![Version](https://img.shields.io/badge/version-1.33.7-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.4-blue)
5
+ ![Version](https://img.shields.io/badge/version-1.33.7-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.6"
7
+ version = "1.33.7"
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.6"
3
+ __version__ = "1.33.7"
@@ -598,6 +598,11 @@ def get_ir_summary(repo_path: str = ".") -> dict:
598
598
  on large repos), use the CLI: sourcecode repo-ir <path> --output ir.json
599
599
  Use get_compact_context or get_agent_context for non-Java repos.
600
600
 
601
+ IR access paths (for full IR via CLI):
602
+ nodes → result["graph"]["nodes"] (list of {fqn, type, ...})
603
+ edges → result["graph"]["edges"] (list of {source, target, type})
604
+ Summary mode omits nodes/edges entirely (graph._omitted explains why).
605
+
601
606
  repo_path: absolute path to the Java repository (default: current working directory).
602
607
  """
603
608
  _raw = repo_path
@@ -608,7 +613,14 @@ def get_ir_summary(repo_path: str = ".") -> dict:
608
613
  _path_err = _check_repo_path(repo_path)
609
614
  if _path_err is not None:
610
615
  return _path_err
611
- return _execute(["repo-ir", repo_path, "--summary-only"])
616
+ result = _execute(["repo-ir", repo_path, "--summary-only"])
617
+ if isinstance(result, dict) and "error" not in result:
618
+ result["_ir_access"] = {
619
+ "nodes_path": "result['graph']['nodes']",
620
+ "edges_path": "result['graph']['edges']",
621
+ "note": "nodes/edges omitted in summary mode — use CLI repo-ir --output ir.json for full graph",
622
+ }
623
+ return result
612
624
  except Exception as exc:
613
625
  return _err(
614
626
  f"Internal error: {type(exc).__name__}: {exc} — repo_path recibido: {_raw}",
@@ -1237,6 +1237,10 @@ class TaskContextBuilder:
1237
1237
  limitations=[], confidence="low",
1238
1238
  error_code="no_diff_source",
1239
1239
  error_message=_no_diff_msg,
1240
+ error_hints=[
1241
+ "Add --since <ref> to specify a base commit.",
1242
+ "Examples: --since origin/main | --since HEAD~3 | --since main",
1243
+ ],
1240
1244
  gaps=[_no_diff_msg],
1241
1245
  ci_decision="no_diff_source",
1242
1246
  scope_source=_pr_scope_source,
@@ -2993,7 +2993,7 @@ def extract_java_endpoints(root: Path) -> "dict[str, Any]":
2993
2993
  # Use security_annotations already extracted by _build_route_surface
2994
2994
  # via the canonical _route_security_from_sym extractor.
2995
2995
  security_info = route.get("security_annotations")
2996
- entry["security"] = security_info # always present; None = no security signal
2996
+ entry["security"] = security_info if security_info is not None else {"policy": "none_detected"}
2997
2997
  if security_info:
2998
2998
  # Backward compat: keep required_permission for custom annotation
2999
2999
  if isinstance(security_info, dict) and security_info.get("policy") == "custom_permission":
@@ -3708,9 +3708,15 @@ def _resolve_target(
3708
3708
  """
3709
3709
  # Normalize: strip .java suffix if given a path
3710
3710
  t = target.strip()
3711
+ _is_path_like = "/" in t or "\\" in t or t.endswith(".java")
3711
3712
  if t.endswith(".java"):
3712
3713
  t = t[:-5]
3713
- # Convert file path separators to class name
3714
+ # When given a file path (e.g. src/main/java/org/foo/Bar), extract the class
3715
+ # name (basename) so suffix matching resolves it to the correct FQN.
3716
+ # Path-to-dot conversion (src.main.java.org.foo.Bar) never matches an IR FQN.
3717
+ if _is_path_like and ("/" in t or "\\" in t):
3718
+ import os.path as _osp
3719
+ t = _osp.basename(t.replace("\\", "/"))
3714
3720
  t_class = t.replace("/", ".").replace("\\", ".")
3715
3721
 
3716
3722
  # 1. Exact match
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes