sourcecode 1.33.13__tar.gz → 1.33.14__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.13 → sourcecode-1.33.14}/PKG-INFO +1 -1
- {sourcecode-1.33.13 → sourcecode-1.33.14}/pyproject.toml +1 -1
- {sourcecode-1.33.13 → sourcecode-1.33.14}/src/sourcecode/__init__.py +1 -1
- {sourcecode-1.33.13 → sourcecode-1.33.14}/src/sourcecode/prepare_context.py +25 -0
- {sourcecode-1.33.13 → sourcecode-1.33.14}/.github/workflows/build-windows.yml +0 -0
- {sourcecode-1.33.13 → sourcecode-1.33.14}/.gitignore +0 -0
- {sourcecode-1.33.13 → sourcecode-1.33.14}/.ruff.toml +0 -0
- {sourcecode-1.33.13 → sourcecode-1.33.14}/CHANGELOG.md +0 -0
- {sourcecode-1.33.13 → sourcecode-1.33.14}/CONTRIBUTING.md +0 -0
- {sourcecode-1.33.13 → sourcecode-1.33.14}/LICENSE +0 -0
- {sourcecode-1.33.13 → sourcecode-1.33.14}/README.md +0 -0
- {sourcecode-1.33.13 → sourcecode-1.33.14}/SECURITY.md +0 -0
- {sourcecode-1.33.13 → sourcecode-1.33.14}/raw +0 -0
- {sourcecode-1.33.13 → sourcecode-1.33.14}/src/sourcecode/adaptive_scanner.py +0 -0
- {sourcecode-1.33.13 → sourcecode-1.33.14}/src/sourcecode/architecture_analyzer.py +0 -0
- {sourcecode-1.33.13 → sourcecode-1.33.14}/src/sourcecode/architecture_summary.py +0 -0
- {sourcecode-1.33.13 → sourcecode-1.33.14}/src/sourcecode/ast_extractor.py +0 -0
- {sourcecode-1.33.13 → sourcecode-1.33.14}/src/sourcecode/cache.py +0 -0
- {sourcecode-1.33.13 → sourcecode-1.33.14}/src/sourcecode/canonical_ir.py +0 -0
- {sourcecode-1.33.13 → sourcecode-1.33.14}/src/sourcecode/classifier.py +0 -0
- {sourcecode-1.33.13 → sourcecode-1.33.14}/src/sourcecode/cli.py +0 -0
- {sourcecode-1.33.13 → sourcecode-1.33.14}/src/sourcecode/code_notes_analyzer.py +0 -0
- {sourcecode-1.33.13 → sourcecode-1.33.14}/src/sourcecode/confidence_analyzer.py +0 -0
- {sourcecode-1.33.13 → sourcecode-1.33.14}/src/sourcecode/context_scorer.py +0 -0
- {sourcecode-1.33.13 → sourcecode-1.33.14}/src/sourcecode/context_summarizer.py +0 -0
- {sourcecode-1.33.13 → sourcecode-1.33.14}/src/sourcecode/contract_model.py +0 -0
- {sourcecode-1.33.13 → sourcecode-1.33.14}/src/sourcecode/contract_pipeline.py +0 -0
- {sourcecode-1.33.13 → sourcecode-1.33.14}/src/sourcecode/coverage_parser.py +0 -0
- {sourcecode-1.33.13 → sourcecode-1.33.14}/src/sourcecode/dependency_analyzer.py +0 -0
- {sourcecode-1.33.13 → sourcecode-1.33.14}/src/sourcecode/detectors/__init__.py +0 -0
- {sourcecode-1.33.13 → sourcecode-1.33.14}/src/sourcecode/detectors/base.py +0 -0
- {sourcecode-1.33.13 → sourcecode-1.33.14}/src/sourcecode/detectors/csproj_parser.py +0 -0
- {sourcecode-1.33.13 → sourcecode-1.33.14}/src/sourcecode/detectors/dart.py +0 -0
- {sourcecode-1.33.13 → sourcecode-1.33.14}/src/sourcecode/detectors/dotnet.py +0 -0
- {sourcecode-1.33.13 → sourcecode-1.33.14}/src/sourcecode/detectors/elixir.py +0 -0
- {sourcecode-1.33.13 → sourcecode-1.33.14}/src/sourcecode/detectors/go.py +0 -0
- {sourcecode-1.33.13 → sourcecode-1.33.14}/src/sourcecode/detectors/heuristic.py +0 -0
- {sourcecode-1.33.13 → sourcecode-1.33.14}/src/sourcecode/detectors/hybrid.py +0 -0
- {sourcecode-1.33.13 → sourcecode-1.33.14}/src/sourcecode/detectors/java.py +0 -0
- {sourcecode-1.33.13 → sourcecode-1.33.14}/src/sourcecode/detectors/jvm_ext.py +0 -0
- {sourcecode-1.33.13 → sourcecode-1.33.14}/src/sourcecode/detectors/nodejs.py +0 -0
- {sourcecode-1.33.13 → sourcecode-1.33.14}/src/sourcecode/detectors/parsers.py +0 -0
- {sourcecode-1.33.13 → sourcecode-1.33.14}/src/sourcecode/detectors/php.py +0 -0
- {sourcecode-1.33.13 → sourcecode-1.33.14}/src/sourcecode/detectors/project.py +0 -0
- {sourcecode-1.33.13 → sourcecode-1.33.14}/src/sourcecode/detectors/python.py +0 -0
- {sourcecode-1.33.13 → sourcecode-1.33.14}/src/sourcecode/detectors/ruby.py +0 -0
- {sourcecode-1.33.13 → sourcecode-1.33.14}/src/sourcecode/detectors/rust.py +0 -0
- {sourcecode-1.33.13 → sourcecode-1.33.14}/src/sourcecode/detectors/systems.py +0 -0
- {sourcecode-1.33.13 → sourcecode-1.33.14}/src/sourcecode/detectors/terraform.py +0 -0
- {sourcecode-1.33.13 → sourcecode-1.33.14}/src/sourcecode/detectors/tooling.py +0 -0
- {sourcecode-1.33.13 → sourcecode-1.33.14}/src/sourcecode/doc_analyzer.py +0 -0
- {sourcecode-1.33.13 → sourcecode-1.33.14}/src/sourcecode/entrypoint_classifier.py +0 -0
- {sourcecode-1.33.13 → sourcecode-1.33.14}/src/sourcecode/env_analyzer.py +0 -0
- {sourcecode-1.33.13 → sourcecode-1.33.14}/src/sourcecode/error_schema.py +0 -0
- {sourcecode-1.33.13 → sourcecode-1.33.14}/src/sourcecode/file_classifier.py +0 -0
- {sourcecode-1.33.13 → sourcecode-1.33.14}/src/sourcecode/flow_analyzer.py +0 -0
- {sourcecode-1.33.13 → sourcecode-1.33.14}/src/sourcecode/git_analyzer.py +0 -0
- {sourcecode-1.33.13 → sourcecode-1.33.14}/src/sourcecode/graph_analyzer.py +0 -0
- {sourcecode-1.33.13 → sourcecode-1.33.14}/src/sourcecode/license.py +0 -0
- {sourcecode-1.33.13 → sourcecode-1.33.14}/src/sourcecode/mcp/__init__.py +0 -0
- {sourcecode-1.33.13 → sourcecode-1.33.14}/src/sourcecode/mcp/onboarding/__init__.py +0 -0
- {sourcecode-1.33.13 → sourcecode-1.33.14}/src/sourcecode/mcp/onboarding/applier.py +0 -0
- {sourcecode-1.33.13 → sourcecode-1.33.14}/src/sourcecode/mcp/onboarding/backup.py +0 -0
- {sourcecode-1.33.13 → sourcecode-1.33.14}/src/sourcecode/mcp/onboarding/detector.py +0 -0
- {sourcecode-1.33.13 → sourcecode-1.33.14}/src/sourcecode/mcp/onboarding/planner.py +0 -0
- {sourcecode-1.33.13 → sourcecode-1.33.14}/src/sourcecode/mcp/orchestrator.py +0 -0
- {sourcecode-1.33.13 → sourcecode-1.33.14}/src/sourcecode/mcp/registry.py +0 -0
- {sourcecode-1.33.13 → sourcecode-1.33.14}/src/sourcecode/mcp/runner.py +0 -0
- {sourcecode-1.33.13 → sourcecode-1.33.14}/src/sourcecode/mcp/server.py +0 -0
- {sourcecode-1.33.13 → sourcecode-1.33.14}/src/sourcecode/mcp_nudge.py +0 -0
- {sourcecode-1.33.13 → sourcecode-1.33.14}/src/sourcecode/metrics_analyzer.py +0 -0
- {sourcecode-1.33.13 → sourcecode-1.33.14}/src/sourcecode/output_budget.py +0 -0
- {sourcecode-1.33.13 → sourcecode-1.33.14}/src/sourcecode/path_filters.py +0 -0
- {sourcecode-1.33.13 → sourcecode-1.33.14}/src/sourcecode/pr_comment_renderer.py +0 -0
- {sourcecode-1.33.13 → sourcecode-1.33.14}/src/sourcecode/progress.py +0 -0
- {sourcecode-1.33.13 → sourcecode-1.33.14}/src/sourcecode/ranking_engine.py +0 -0
- {sourcecode-1.33.13 → sourcecode-1.33.14}/src/sourcecode/redactor.py +0 -0
- {sourcecode-1.33.13 → sourcecode-1.33.14}/src/sourcecode/relevance_scorer.py +0 -0
- {sourcecode-1.33.13 → sourcecode-1.33.14}/src/sourcecode/repo_classifier.py +0 -0
- {sourcecode-1.33.13 → sourcecode-1.33.14}/src/sourcecode/repository_ir.py +0 -0
- {sourcecode-1.33.13 → sourcecode-1.33.14}/src/sourcecode/ris.py +0 -0
- {sourcecode-1.33.13 → sourcecode-1.33.14}/src/sourcecode/runtime_classifier.py +0 -0
- {sourcecode-1.33.13 → sourcecode-1.33.14}/src/sourcecode/scanner.py +0 -0
- {sourcecode-1.33.13 → sourcecode-1.33.14}/src/sourcecode/schema.py +0 -0
- {sourcecode-1.33.13 → sourcecode-1.33.14}/src/sourcecode/semantic_analyzer.py +0 -0
- {sourcecode-1.33.13 → sourcecode-1.33.14}/src/sourcecode/serializer.py +0 -0
- {sourcecode-1.33.13 → sourcecode-1.33.14}/src/sourcecode/summarizer.py +0 -0
- {sourcecode-1.33.13 → sourcecode-1.33.14}/src/sourcecode/telemetry/__init__.py +0 -0
- {sourcecode-1.33.13 → sourcecode-1.33.14}/src/sourcecode/telemetry/config.py +0 -0
- {sourcecode-1.33.13 → sourcecode-1.33.14}/src/sourcecode/telemetry/consent.py +0 -0
- {sourcecode-1.33.13 → sourcecode-1.33.14}/src/sourcecode/telemetry/events.py +0 -0
- {sourcecode-1.33.13 → sourcecode-1.33.14}/src/sourcecode/telemetry/filters.py +0 -0
- {sourcecode-1.33.13 → sourcecode-1.33.14}/src/sourcecode/telemetry/transport.py +0 -0
- {sourcecode-1.33.13 → sourcecode-1.33.14}/src/sourcecode/tree_utils.py +0 -0
- {sourcecode-1.33.13 → sourcecode-1.33.14}/src/sourcecode/workspace.py +0 -0
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "sourcecode"
|
|
7
|
-
version = "1.33.
|
|
7
|
+
version = "1.33.14"
|
|
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"
|
|
@@ -1781,7 +1781,12 @@ class TaskContextBuilder:
|
|
|
1781
1781
|
# Pass 4: inject files whose path matches symptom keywords.
|
|
1782
1782
|
# CamelCase-expand the filename stem so "OfflineSessionLoader" matches
|
|
1783
1783
|
# the keyword "offline" even without an explicit directory separator.
|
|
1784
|
+
# Large repos: cap per-keyword injections so a common term like
|
|
1785
|
+
# "authentication" (50+ path matches in an IAM repo) cannot flood the
|
|
1786
|
+
# candidate list and push specific terms like "ldap" out of the budget.
|
|
1784
1787
|
_p4_dirs_of_injected: set[str] = set() # directories of high-score injects
|
|
1788
|
+
_P4_KW_CAP = 15 # max path-injections per keyword in large repos
|
|
1789
|
+
_p4_kw_counts: dict[str, int] = {}
|
|
1785
1790
|
for _p in all_paths:
|
|
1786
1791
|
if _p in _existing_paths:
|
|
1787
1792
|
continue
|
|
@@ -1798,6 +1803,16 @@ class TaskContextBuilder:
|
|
|
1798
1803
|
_matching_kws = [kw for kw in symptom_keywords if kw in _p_search]
|
|
1799
1804
|
if not _matching_kws:
|
|
1800
1805
|
continue
|
|
1806
|
+
# In large repos, skip keywords already at cap; keep file only if at
|
|
1807
|
+
# least one keyword still has quota (multi-kw matches exhaust each
|
|
1808
|
+
# keyword's quota independently so specific terms survive longer).
|
|
1809
|
+
if _is_large_repo:
|
|
1810
|
+
_matching_kws = [
|
|
1811
|
+
kw for kw in _matching_kws
|
|
1812
|
+
if _p4_kw_counts.get(kw, 0) < _P4_KW_CAP
|
|
1813
|
+
]
|
|
1814
|
+
if not _matching_kws:
|
|
1815
|
+
continue
|
|
1801
1816
|
_boost = 0.2 * len(_matching_kws)
|
|
1802
1817
|
_injected_score = round(min(0.5 + _boost, 1.0), 2)
|
|
1803
1818
|
_first_kw = _matching_kws[0]
|
|
@@ -1810,6 +1825,9 @@ class TaskContextBuilder:
|
|
|
1810
1825
|
))
|
|
1811
1826
|
_existing_paths.add(_p)
|
|
1812
1827
|
_sx_direct_path.append(_p)
|
|
1828
|
+
if _is_large_repo:
|
|
1829
|
+
for _kw in _matching_kws:
|
|
1830
|
+
_p4_kw_counts[_kw] = _p4_kw_counts.get(_kw, 0) + 1
|
|
1813
1831
|
if _injected_score >= 0.7:
|
|
1814
1832
|
_p4_dirs_of_injected.add(str(Path(_p).parent))
|
|
1815
1833
|
|
|
@@ -1864,9 +1882,15 @@ class TaskContextBuilder:
|
|
|
1864
1882
|
# architecturally adjacent classes that don't mention symptom keywords
|
|
1865
1883
|
# in their own name (e.g. InfinispanOfflineSessionCacheEntryLifespan…
|
|
1866
1884
|
# siblings in the same infinispan/ package).
|
|
1885
|
+
# Large repos: cap total co-location injections so that a keyword
|
|
1886
|
+
# matching many directories doesn't flood the candidate list.
|
|
1867
1887
|
if _is_large_repo and _p4_dirs_of_injected:
|
|
1868
1888
|
_coloc_existing = {rf.path for rf in relevant_files}
|
|
1889
|
+
_P4C_CAP = 30
|
|
1890
|
+
_coloc_count = 0
|
|
1869
1891
|
for _cp in all_paths:
|
|
1892
|
+
if _coloc_count >= _P4C_CAP:
|
|
1893
|
+
break
|
|
1870
1894
|
if _cp in _coloc_existing:
|
|
1871
1895
|
continue
|
|
1872
1896
|
if Path(_cp).suffix.lower() not in _src_exts:
|
|
@@ -1880,6 +1904,7 @@ class TaskContextBuilder:
|
|
|
1880
1904
|
why="directory proximity injection",
|
|
1881
1905
|
))
|
|
1882
1906
|
_coloc_existing.add(_cp)
|
|
1907
|
+
_coloc_count += 1
|
|
1883
1908
|
|
|
1884
1909
|
# Sort before content scan so top candidates get read first.
|
|
1885
1910
|
# In large repos: prioritise symptom_match files within each score band
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|