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.
- {sourcecode-1.33.6 → sourcecode-1.33.7}/PKG-INFO +2 -2
- {sourcecode-1.33.6 → sourcecode-1.33.7}/README.md +1 -1
- {sourcecode-1.33.6 → sourcecode-1.33.7}/pyproject.toml +1 -1
- {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/__init__.py +1 -1
- {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/mcp/server.py +13 -1
- {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/prepare_context.py +4 -0
- {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/repository_ir.py +8 -2
- {sourcecode-1.33.6 → sourcecode-1.33.7}/.github/workflows/build-windows.yml +0 -0
- {sourcecode-1.33.6 → sourcecode-1.33.7}/.gitignore +0 -0
- {sourcecode-1.33.6 → sourcecode-1.33.7}/.ruff.toml +0 -0
- {sourcecode-1.33.6 → sourcecode-1.33.7}/CHANGELOG.md +0 -0
- {sourcecode-1.33.6 → sourcecode-1.33.7}/CONTRIBUTING.md +0 -0
- {sourcecode-1.33.6 → sourcecode-1.33.7}/LICENSE +0 -0
- {sourcecode-1.33.6 → sourcecode-1.33.7}/SECURITY.md +0 -0
- {sourcecode-1.33.6 → sourcecode-1.33.7}/raw +0 -0
- {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/adaptive_scanner.py +0 -0
- {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/architecture_analyzer.py +0 -0
- {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/architecture_summary.py +0 -0
- {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/ast_extractor.py +0 -0
- {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/cache.py +0 -0
- {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/cache.tmp_new +0 -0
- {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/canonical_ir.py +0 -0
- {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/classifier.py +0 -0
- {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/cli.py +0 -0
- {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/code_notes_analyzer.py +0 -0
- {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/confidence_analyzer.py +0 -0
- {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/context_scorer.py +0 -0
- {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/context_summarizer.py +0 -0
- {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/contract_model.py +0 -0
- {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/contract_pipeline.py +0 -0
- {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/coverage_parser.py +0 -0
- {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/dependency_analyzer.py +0 -0
- {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/detectors/__init__.py +0 -0
- {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/detectors/base.py +0 -0
- {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/detectors/csproj_parser.py +0 -0
- {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/detectors/dart.py +0 -0
- {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/detectors/dotnet.py +0 -0
- {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/detectors/elixir.py +0 -0
- {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/detectors/go.py +0 -0
- {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/detectors/heuristic.py +0 -0
- {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/detectors/hybrid.py +0 -0
- {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/detectors/java.py +0 -0
- {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/detectors/jvm_ext.py +0 -0
- {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/detectors/nodejs.py +0 -0
- {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/detectors/parsers.py +0 -0
- {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/detectors/php.py +0 -0
- {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/detectors/project.py +0 -0
- {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/detectors/python.py +0 -0
- {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/detectors/ruby.py +0 -0
- {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/detectors/rust.py +0 -0
- {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/detectors/systems.py +0 -0
- {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/detectors/terraform.py +0 -0
- {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/detectors/tooling.py +0 -0
- {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/doc_analyzer.py +0 -0
- {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/entrypoint_classifier.py +0 -0
- {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/env_analyzer.py +0 -0
- {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/file_classifier.py +0 -0
- {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/flow_analyzer.py +0 -0
- {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/git_analyzer.py +0 -0
- {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/graph_analyzer.py +0 -0
- {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/license.py +0 -0
- {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/mcp/__init__.py +0 -0
- {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/mcp/onboarding/__init__.py +0 -0
- {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/mcp/onboarding/applier.py +0 -0
- {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/mcp/onboarding/backup.py +0 -0
- {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/mcp/onboarding/detector.py +0 -0
- {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/mcp/onboarding/planner.py +0 -0
- {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/mcp/orchestrator.py +0 -0
- {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/mcp/runner.py +0 -0
- {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/mcp_nudge.py +0 -0
- {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/metrics_analyzer.py +0 -0
- {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/output_budget.py +0 -0
- {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/path_filters.py +0 -0
- {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/pr_comment_renderer.py +0 -0
- {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/progress.py +0 -0
- {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/ranking_engine.py +0 -0
- {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/redactor.py +0 -0
- {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/relevance_scorer.py +0 -0
- {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/repo_classifier.py +0 -0
- {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/ris.py +0 -0
- {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/runtime_classifier.py +0 -0
- {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/scanner.py +0 -0
- {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/schema.py +0 -0
- {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/semantic_analyzer.py +0 -0
- {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/serializer.py +0 -0
- {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/summarizer.py +0 -0
- {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/telemetry/__init__.py +0 -0
- {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/telemetry/config.py +0 -0
- {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/telemetry/consent.py +0 -0
- {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/telemetry/events.py +0 -0
- {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/telemetry/filters.py +0 -0
- {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/telemetry/transport.py +0 -0
- {sourcecode-1.33.6 → sourcecode-1.33.7}/src/sourcecode/tree_utils.py +0 -0
- {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.
|
|
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
|
-

|
|
43
43
|

|
|
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
|
-

|
|
6
6
|

|
|
7
7
|
|
|
8
8
|
---
|
|
@@ -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
|
-
|
|
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
|
|
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
|
-
#
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|