sourcecode 1.33.16__tar.gz → 1.33.18__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.16 → sourcecode-1.33.18}/PKG-INFO +2 -2
- {sourcecode-1.33.16 → sourcecode-1.33.18}/README.md +1 -1
- {sourcecode-1.33.16 → sourcecode-1.33.18}/pyproject.toml +1 -1
- {sourcecode-1.33.16 → sourcecode-1.33.18}/src/sourcecode/__init__.py +1 -1
- {sourcecode-1.33.16 → sourcecode-1.33.18}/src/sourcecode/cli.py +5 -2
- {sourcecode-1.33.16 → sourcecode-1.33.18}/src/sourcecode/mcp/runner.py +5 -4
- {sourcecode-1.33.16 → sourcecode-1.33.18}/src/sourcecode/ris.py +5 -4
- {sourcecode-1.33.16 → sourcecode-1.33.18}/.github/workflows/build-windows.yml +0 -0
- {sourcecode-1.33.16 → sourcecode-1.33.18}/.gitignore +0 -0
- {sourcecode-1.33.16 → sourcecode-1.33.18}/.ruff.toml +0 -0
- {sourcecode-1.33.16 → sourcecode-1.33.18}/CHANGELOG.md +0 -0
- {sourcecode-1.33.16 → sourcecode-1.33.18}/CONTRIBUTING.md +0 -0
- {sourcecode-1.33.16 → sourcecode-1.33.18}/LICENSE +0 -0
- {sourcecode-1.33.16 → sourcecode-1.33.18}/SECURITY.md +0 -0
- {sourcecode-1.33.16 → sourcecode-1.33.18}/raw +0 -0
- {sourcecode-1.33.16 → sourcecode-1.33.18}/src/sourcecode/adaptive_scanner.py +0 -0
- {sourcecode-1.33.16 → sourcecode-1.33.18}/src/sourcecode/architecture_analyzer.py +0 -0
- {sourcecode-1.33.16 → sourcecode-1.33.18}/src/sourcecode/architecture_summary.py +0 -0
- {sourcecode-1.33.16 → sourcecode-1.33.18}/src/sourcecode/ast_extractor.py +0 -0
- {sourcecode-1.33.16 → sourcecode-1.33.18}/src/sourcecode/cache.py +0 -0
- {sourcecode-1.33.16 → sourcecode-1.33.18}/src/sourcecode/canonical_ir.py +0 -0
- {sourcecode-1.33.16 → sourcecode-1.33.18}/src/sourcecode/classifier.py +0 -0
- {sourcecode-1.33.16 → sourcecode-1.33.18}/src/sourcecode/code_notes_analyzer.py +0 -0
- {sourcecode-1.33.16 → sourcecode-1.33.18}/src/sourcecode/confidence_analyzer.py +0 -0
- {sourcecode-1.33.16 → sourcecode-1.33.18}/src/sourcecode/context_scorer.py +0 -0
- {sourcecode-1.33.16 → sourcecode-1.33.18}/src/sourcecode/context_summarizer.py +0 -0
- {sourcecode-1.33.16 → sourcecode-1.33.18}/src/sourcecode/contract_model.py +0 -0
- {sourcecode-1.33.16 → sourcecode-1.33.18}/src/sourcecode/contract_pipeline.py +0 -0
- {sourcecode-1.33.16 → sourcecode-1.33.18}/src/sourcecode/coverage_parser.py +0 -0
- {sourcecode-1.33.16 → sourcecode-1.33.18}/src/sourcecode/dependency_analyzer.py +0 -0
- {sourcecode-1.33.16 → sourcecode-1.33.18}/src/sourcecode/detectors/__init__.py +0 -0
- {sourcecode-1.33.16 → sourcecode-1.33.18}/src/sourcecode/detectors/base.py +0 -0
- {sourcecode-1.33.16 → sourcecode-1.33.18}/src/sourcecode/detectors/csproj_parser.py +0 -0
- {sourcecode-1.33.16 → sourcecode-1.33.18}/src/sourcecode/detectors/dart.py +0 -0
- {sourcecode-1.33.16 → sourcecode-1.33.18}/src/sourcecode/detectors/dotnet.py +0 -0
- {sourcecode-1.33.16 → sourcecode-1.33.18}/src/sourcecode/detectors/elixir.py +0 -0
- {sourcecode-1.33.16 → sourcecode-1.33.18}/src/sourcecode/detectors/go.py +0 -0
- {sourcecode-1.33.16 → sourcecode-1.33.18}/src/sourcecode/detectors/heuristic.py +0 -0
- {sourcecode-1.33.16 → sourcecode-1.33.18}/src/sourcecode/detectors/hybrid.py +0 -0
- {sourcecode-1.33.16 → sourcecode-1.33.18}/src/sourcecode/detectors/java.py +0 -0
- {sourcecode-1.33.16 → sourcecode-1.33.18}/src/sourcecode/detectors/jvm_ext.py +0 -0
- {sourcecode-1.33.16 → sourcecode-1.33.18}/src/sourcecode/detectors/nodejs.py +0 -0
- {sourcecode-1.33.16 → sourcecode-1.33.18}/src/sourcecode/detectors/parsers.py +0 -0
- {sourcecode-1.33.16 → sourcecode-1.33.18}/src/sourcecode/detectors/php.py +0 -0
- {sourcecode-1.33.16 → sourcecode-1.33.18}/src/sourcecode/detectors/project.py +0 -0
- {sourcecode-1.33.16 → sourcecode-1.33.18}/src/sourcecode/detectors/python.py +0 -0
- {sourcecode-1.33.16 → sourcecode-1.33.18}/src/sourcecode/detectors/ruby.py +0 -0
- {sourcecode-1.33.16 → sourcecode-1.33.18}/src/sourcecode/detectors/rust.py +0 -0
- {sourcecode-1.33.16 → sourcecode-1.33.18}/src/sourcecode/detectors/systems.py +0 -0
- {sourcecode-1.33.16 → sourcecode-1.33.18}/src/sourcecode/detectors/terraform.py +0 -0
- {sourcecode-1.33.16 → sourcecode-1.33.18}/src/sourcecode/detectors/tooling.py +0 -0
- {sourcecode-1.33.16 → sourcecode-1.33.18}/src/sourcecode/doc_analyzer.py +0 -0
- {sourcecode-1.33.16 → sourcecode-1.33.18}/src/sourcecode/entrypoint_classifier.py +0 -0
- {sourcecode-1.33.16 → sourcecode-1.33.18}/src/sourcecode/env_analyzer.py +0 -0
- {sourcecode-1.33.16 → sourcecode-1.33.18}/src/sourcecode/error_schema.py +0 -0
- {sourcecode-1.33.16 → sourcecode-1.33.18}/src/sourcecode/file_classifier.py +0 -0
- {sourcecode-1.33.16 → sourcecode-1.33.18}/src/sourcecode/flow_analyzer.py +0 -0
- {sourcecode-1.33.16 → sourcecode-1.33.18}/src/sourcecode/git_analyzer.py +0 -0
- {sourcecode-1.33.16 → sourcecode-1.33.18}/src/sourcecode/graph_analyzer.py +0 -0
- {sourcecode-1.33.16 → sourcecode-1.33.18}/src/sourcecode/license.py +0 -0
- {sourcecode-1.33.16 → sourcecode-1.33.18}/src/sourcecode/mcp/__init__.py +0 -0
- {sourcecode-1.33.16 → sourcecode-1.33.18}/src/sourcecode/mcp/onboarding/__init__.py +0 -0
- {sourcecode-1.33.16 → sourcecode-1.33.18}/src/sourcecode/mcp/onboarding/applier.py +0 -0
- {sourcecode-1.33.16 → sourcecode-1.33.18}/src/sourcecode/mcp/onboarding/backup.py +0 -0
- {sourcecode-1.33.16 → sourcecode-1.33.18}/src/sourcecode/mcp/onboarding/detector.py +0 -0
- {sourcecode-1.33.16 → sourcecode-1.33.18}/src/sourcecode/mcp/onboarding/planner.py +0 -0
- {sourcecode-1.33.16 → sourcecode-1.33.18}/src/sourcecode/mcp/orchestrator.py +0 -0
- {sourcecode-1.33.16 → sourcecode-1.33.18}/src/sourcecode/mcp/registry.py +0 -0
- {sourcecode-1.33.16 → sourcecode-1.33.18}/src/sourcecode/mcp/server.py +0 -0
- {sourcecode-1.33.16 → sourcecode-1.33.18}/src/sourcecode/mcp_nudge.py +0 -0
- {sourcecode-1.33.16 → sourcecode-1.33.18}/src/sourcecode/metrics_analyzer.py +0 -0
- {sourcecode-1.33.16 → sourcecode-1.33.18}/src/sourcecode/output_budget.py +0 -0
- {sourcecode-1.33.16 → sourcecode-1.33.18}/src/sourcecode/path_filters.py +0 -0
- {sourcecode-1.33.16 → sourcecode-1.33.18}/src/sourcecode/pr_comment_renderer.py +0 -0
- {sourcecode-1.33.16 → sourcecode-1.33.18}/src/sourcecode/prepare_context.py +0 -0
- {sourcecode-1.33.16 → sourcecode-1.33.18}/src/sourcecode/progress.py +0 -0
- {sourcecode-1.33.16 → sourcecode-1.33.18}/src/sourcecode/ranking_engine.py +0 -0
- {sourcecode-1.33.16 → sourcecode-1.33.18}/src/sourcecode/redactor.py +0 -0
- {sourcecode-1.33.16 → sourcecode-1.33.18}/src/sourcecode/relevance_scorer.py +0 -0
- {sourcecode-1.33.16 → sourcecode-1.33.18}/src/sourcecode/repo_classifier.py +0 -0
- {sourcecode-1.33.16 → sourcecode-1.33.18}/src/sourcecode/repository_ir.py +0 -0
- {sourcecode-1.33.16 → sourcecode-1.33.18}/src/sourcecode/runtime_classifier.py +0 -0
- {sourcecode-1.33.16 → sourcecode-1.33.18}/src/sourcecode/scanner.py +0 -0
- {sourcecode-1.33.16 → sourcecode-1.33.18}/src/sourcecode/schema.py +0 -0
- {sourcecode-1.33.16 → sourcecode-1.33.18}/src/sourcecode/semantic_analyzer.py +0 -0
- {sourcecode-1.33.16 → sourcecode-1.33.18}/src/sourcecode/serializer.py +0 -0
- {sourcecode-1.33.16 → sourcecode-1.33.18}/src/sourcecode/summarizer.py +0 -0
- {sourcecode-1.33.16 → sourcecode-1.33.18}/src/sourcecode/telemetry/__init__.py +0 -0
- {sourcecode-1.33.16 → sourcecode-1.33.18}/src/sourcecode/telemetry/config.py +0 -0
- {sourcecode-1.33.16 → sourcecode-1.33.18}/src/sourcecode/telemetry/consent.py +0 -0
- {sourcecode-1.33.16 → sourcecode-1.33.18}/src/sourcecode/telemetry/events.py +0 -0
- {sourcecode-1.33.16 → sourcecode-1.33.18}/src/sourcecode/telemetry/filters.py +0 -0
- {sourcecode-1.33.16 → sourcecode-1.33.18}/src/sourcecode/telemetry/transport.py +0 -0
- {sourcecode-1.33.16 → sourcecode-1.33.18}/src/sourcecode/tree_utils.py +0 -0
- {sourcecode-1.33.16 → sourcecode-1.33.18}/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.18
|
|
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
|
---
|
|
@@ -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.18"
|
|
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"
|
|
@@ -1266,7 +1266,7 @@ def main(
|
|
|
1266
1266
|
_view_key = ""
|
|
1267
1267
|
_core_hash = ""
|
|
1268
1268
|
|
|
1269
|
-
if _cache_hit_content is not None:
|
|
1269
|
+
if _cache_hit_content is not None and not changed_only:
|
|
1270
1270
|
from sourcecode.serializer import write_output
|
|
1271
1271
|
if format == "json":
|
|
1272
1272
|
try:
|
|
@@ -1948,7 +1948,10 @@ def main(
|
|
|
1948
1948
|
if _uc:
|
|
1949
1949
|
# Include untracked (new files not yet staged) so new source files
|
|
1950
1950
|
# are analyzed under --changed-only, not silently treated as "clean".
|
|
1951
|
-
|
|
1951
|
+
# Exclude directory entries (trailing "/") — e.g. untracked tool
|
|
1952
|
+
# cache dirs like ".sourcecode-cache/" are dirs not source files.
|
|
1953
|
+
_uc_files = {p for p in _uc.untracked if not p.endswith("/")}
|
|
1954
|
+
_allowed_changed_files = set(_uc.staged) | set(_uc.unstaged) | _uc_files
|
|
1952
1955
|
if not _allowed_changed_files:
|
|
1953
1956
|
# Git is available and confirms no uncommitted changes.
|
|
1954
1957
|
# Do NOT fall back to a full scan — that would silently produce
|
|
@@ -39,11 +39,12 @@ def run_command(args: list[str]) -> Any:
|
|
|
39
39
|
Returns parsed JSON dict when output is valid JSON, else the raw string.
|
|
40
40
|
Raises CommandError on non-zero exit so MCP can preserve structured payloads.
|
|
41
41
|
"""
|
|
42
|
-
from sourcecode.cli import
|
|
42
|
+
from sourcecode.cli import app
|
|
43
43
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
44
|
+
# Pass raw args to invoke — the _cmd_main hook inside cli.py handles path
|
|
45
|
+
# extraction via _preprocess_args. Pre-processing here would strip the path
|
|
46
|
+
# from args, then _cmd_main would re-process the stripped list and lose it.
|
|
47
|
+
result = _runner.invoke(app, list(args))
|
|
47
48
|
|
|
48
49
|
if result.exit_code != 0:
|
|
49
50
|
stdout_raw = getattr(result, "output", "")
|
|
@@ -350,14 +350,15 @@ def _current_git_head(repo_root: Path) -> str:
|
|
|
350
350
|
|
|
351
351
|
|
|
352
352
|
def _has_uncommitted_changes(repo_root: Path) -> bool:
|
|
353
|
-
"""Return True if working tree has staged or unstaged changes.
|
|
353
|
+
"""Return True if working tree has staged or unstaged changes to tracked files.
|
|
354
354
|
|
|
355
|
-
Uses ``git status --porcelain
|
|
356
|
-
|
|
355
|
+
Uses ``git status --porcelain --untracked-files=no`` so that untracked
|
|
356
|
+
files (e.g. legacy .sourcecode-cache/ directories) do not produce false
|
|
357
|
+
positives. Returns False on any error (non-git dirs, etc.).
|
|
357
358
|
"""
|
|
358
359
|
try:
|
|
359
360
|
result = subprocess.run(
|
|
360
|
-
["git", "-C", str(repo_root), "status", "--porcelain"],
|
|
361
|
+
["git", "-C", str(repo_root), "status", "--porcelain", "--untracked-files=no"],
|
|
361
362
|
capture_output=True,
|
|
362
363
|
text=True,
|
|
363
364
|
timeout=2,
|
|
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
|