local-codebase-indexer 0.3.0__tar.gz → 0.3.1__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.
- {local_codebase_indexer-0.3.0/local_codebase_indexer.egg-info → local_codebase_indexer-0.3.1}/PKG-INFO +1 -1
- {local_codebase_indexer-0.3.0 → local_codebase_indexer-0.3.1}/TODO.md +1 -0
- {local_codebase_indexer-0.3.0 → local_codebase_indexer-0.3.1}/local_codebase_indexer/__init__.py +1 -1
- {local_codebase_indexer-0.3.0 → local_codebase_indexer-0.3.1}/local_codebase_indexer/cli.py +17 -0
- {local_codebase_indexer-0.3.0 → local_codebase_indexer-0.3.1}/local_codebase_indexer/core.py +1 -1
- {local_codebase_indexer-0.3.0 → local_codebase_indexer-0.3.1/local_codebase_indexer.egg-info}/PKG-INFO +1 -1
- {local_codebase_indexer-0.3.0 → local_codebase_indexer-0.3.1}/server.json +2 -2
- {local_codebase_indexer-0.3.0 → local_codebase_indexer-0.3.1}/tests/test_indexer.py +27 -0
- {local_codebase_indexer-0.3.0 → local_codebase_indexer-0.3.1}/AGENTS.md +0 -0
- {local_codebase_indexer-0.3.0 → local_codebase_indexer-0.3.1}/CLAUDE.md +0 -0
- {local_codebase_indexer-0.3.0 → local_codebase_indexer-0.3.1}/MANIFEST.in +0 -0
- {local_codebase_indexer-0.3.0 → local_codebase_indexer-0.3.1}/README.md +0 -0
- {local_codebase_indexer-0.3.0 → local_codebase_indexer-0.3.1}/README.zh-CN.md +0 -0
- {local_codebase_indexer-0.3.0 → local_codebase_indexer-0.3.1}/README.zh-TW.md +0 -0
- {local_codebase_indexer-0.3.0 → local_codebase_indexer-0.3.1}/benchmarks/README.md +0 -0
- {local_codebase_indexer-0.3.0 → local_codebase_indexer-0.3.1}/benchmarks/baseline.json +0 -0
- {local_codebase_indexer-0.3.0 → local_codebase_indexer-0.3.1}/benchmarks/corpus/Auth/LoginService.cs +0 -0
- {local_codebase_indexer-0.3.0 → local_codebase_indexer-0.3.1}/benchmarks/corpus/Controllers/LotController.cs +0 -0
- {local_codebase_indexer-0.3.0 → local_codebase_indexer-0.3.1}/benchmarks/corpus/Controllers/ScrapController.cs +0 -0
- {local_codebase_indexer-0.3.0 → local_codebase_indexer-0.3.1}/benchmarks/corpus/Data/MesDbContext.cs +0 -0
- {local_codebase_indexer-0.3.0 → local_codebase_indexer-0.3.1}/benchmarks/corpus/Legacy/frmChangeLine.frm +0 -0
- {local_codebase_indexer-0.3.0 → local_codebase_indexer-0.3.1}/benchmarks/corpus/Models/DrillBreakEvent.cs +0 -0
- {local_codebase_indexer-0.3.0 → local_codebase_indexer-0.3.1}/benchmarks/corpus/Models/Lot.cs +0 -0
- {local_codebase_indexer-0.3.0 → local_codebase_indexer-0.3.1}/benchmarks/corpus/Models/ScrapRecord.cs +0 -0
- {local_codebase_indexer-0.3.0 → local_codebase_indexer-0.3.1}/benchmarks/corpus/Printing/LabelPrinter.cs +0 -0
- {local_codebase_indexer-0.3.0 → local_codebase_indexer-0.3.1}/benchmarks/corpus/Repositories/LotRepository.cs +0 -0
- {local_codebase_indexer-0.3.0 → local_codebase_indexer-0.3.1}/benchmarks/corpus/Repositories/ScrapRepository.cs +0 -0
- {local_codebase_indexer-0.3.0 → local_codebase_indexer-0.3.1}/benchmarks/corpus/Services/IScrapService.cs +0 -0
- {local_codebase_indexer-0.3.0 → local_codebase_indexer-0.3.1}/benchmarks/corpus/Services/InspectionService.cs +0 -0
- {local_codebase_indexer-0.3.0 → local_codebase_indexer-0.3.1}/benchmarks/corpus/Services/LotService.cs +0 -0
- {local_codebase_indexer-0.3.0 → local_codebase_indexer-0.3.1}/benchmarks/corpus/Services/ScrapService.cs +0 -0
- {local_codebase_indexer-0.3.0 → local_codebase_indexer-0.3.1}/benchmarks/corpus/Sql/MES_Lot.sql +0 -0
- {local_codebase_indexer-0.3.0 → local_codebase_indexer-0.3.1}/benchmarks/corpus/Sql/usp_Inspection_Report.sql +0 -0
- {local_codebase_indexer-0.3.0 → local_codebase_indexer-0.3.1}/benchmarks/corpus/Sql/usp_Lot_UpdateStatus.sql +0 -0
- {local_codebase_indexer-0.3.0 → local_codebase_indexer-0.3.1}/benchmarks/corpus/Sql/usp_Scrap_Insert.sql +0 -0
- {local_codebase_indexer-0.3.0 → local_codebase_indexer-0.3.1}/benchmarks/corpus/Utils/DateRangeHelper.cs +0 -0
- {local_codebase_indexer-0.3.0 → local_codebase_indexer-0.3.1}/benchmarks/corpus/Utils/PartNumberDecoder.cs +0 -0
- {local_codebase_indexer-0.3.0 → local_codebase_indexer-0.3.1}/benchmarks/corpus/Web/scrapForm.ts +0 -0
- {local_codebase_indexer-0.3.0 → local_codebase_indexer-0.3.1}/benchmarks/corpus/Web.config +0 -0
- {local_codebase_indexer-0.3.0 → local_codebase_indexer-0.3.1}/benchmarks/corpus/tools/export_report.py +0 -0
- {local_codebase_indexer-0.3.0 → local_codebase_indexer-0.3.1}/benchmarks/queries_stdlib.json +0 -0
- {local_codebase_indexer-0.3.0 → local_codebase_indexer-0.3.1}/benchmarks/queries_synthetic.json +0 -0
- {local_codebase_indexer-0.3.0 → local_codebase_indexer-0.3.1}/benchmarks/run_benchmark.py +0 -0
- {local_codebase_indexer-0.3.0 → local_codebase_indexer-0.3.1}/index.md +0 -0
- {local_codebase_indexer-0.3.0 → local_codebase_indexer-0.3.1}/llms.txt +0 -0
- {local_codebase_indexer-0.3.0 → local_codebase_indexer-0.3.1}/local_codebase_indexer/__main__.py +0 -0
- {local_codebase_indexer-0.3.0 → local_codebase_indexer-0.3.1}/local_codebase_indexer/callgraph.py +0 -0
- {local_codebase_indexer-0.3.0 → local_codebase_indexer-0.3.1}/local_codebase_indexer/cscalls.py +0 -0
- {local_codebase_indexer-0.3.0 → local_codebase_indexer-0.3.1}/local_codebase_indexer/csdata.py +0 -0
- {local_codebase_indexer-0.3.0 → local_codebase_indexer-0.3.1}/local_codebase_indexer/dataflow.py +0 -0
- {local_codebase_indexer-0.3.0 → local_codebase_indexer-0.3.1}/local_codebase_indexer/db.py +0 -0
- {local_codebase_indexer-0.3.0 → local_codebase_indexer-0.3.1}/local_codebase_indexer/embedder.py +0 -0
- {local_codebase_indexer-0.3.0 → local_codebase_indexer-0.3.1}/local_codebase_indexer/langparse.py +0 -0
- {local_codebase_indexer-0.3.0 → local_codebase_indexer-0.3.1}/local_codebase_indexer/mcp_server.py +0 -0
- {local_codebase_indexer-0.3.0 → local_codebase_indexer-0.3.1}/local_codebase_indexer/query.py +0 -0
- {local_codebase_indexer-0.3.0 → local_codebase_indexer-0.3.1}/local_codebase_indexer/scanner.py +0 -0
- {local_codebase_indexer-0.3.0 → local_codebase_indexer-0.3.1}/local_codebase_indexer/sqlaccess.py +0 -0
- {local_codebase_indexer-0.3.0 → local_codebase_indexer-0.3.1}/local_codebase_indexer/synonyms.py +0 -0
- {local_codebase_indexer-0.3.0 → local_codebase_indexer-0.3.1}/local_codebase_indexer.egg-info/SOURCES.txt +0 -0
- {local_codebase_indexer-0.3.0 → local_codebase_indexer-0.3.1}/local_codebase_indexer.egg-info/dependency_links.txt +0 -0
- {local_codebase_indexer-0.3.0 → local_codebase_indexer-0.3.1}/local_codebase_indexer.egg-info/entry_points.txt +0 -0
- {local_codebase_indexer-0.3.0 → local_codebase_indexer-0.3.1}/local_codebase_indexer.egg-info/requires.txt +0 -0
- {local_codebase_indexer-0.3.0 → local_codebase_indexer-0.3.1}/local_codebase_indexer.egg-info/top_level.txt +0 -0
- {local_codebase_indexer-0.3.0 → local_codebase_indexer-0.3.1}/pyproject.toml +0 -0
- {local_codebase_indexer-0.3.0 → local_codebase_indexer-0.3.1}/requirements.txt +0 -0
- {local_codebase_indexer-0.3.0 → local_codebase_indexer-0.3.1}/setup.cfg +0 -0
- {local_codebase_indexer-0.3.0 → local_codebase_indexer-0.3.1}/tests/test_dataaccess.py +0 -0
- {local_codebase_indexer-0.3.0 → local_codebase_indexer-0.3.1}/tests/test_onnx_plumbing.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: local-codebase-indexer
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.1
|
|
4
4
|
Summary: Local codebase indexer and context provider for AI coding assistants: MCP server and CLI with SQL data-access and C# call relations. No cloud, no server.
|
|
5
5
|
Author: sfy257000
|
|
6
6
|
Project-URL: Homepage, https://github.com/sfy257000/local-codebase-indexer
|
|
@@ -4,6 +4,7 @@ Priorities come from the benchmark (`benchmarks/run_benchmark.py`, baseline in `
|
|
|
4
4
|
|
|
5
5
|
## Next
|
|
6
6
|
|
|
7
|
+
0. **Publish to the MCP registry** (not done yet). PyPI 0.3.0 is out and carries the `mcp-name` marker; `server.json` is ready. Run `mcp-publisher login github` then `mcp-publisher publish` from the repo folder, then verify with `curl "https://registry.modelcontextprotocol.io/v0.1/servers?search=local-codebase-indexer"`. Repeat after each release (bump both versions in `server.json`).
|
|
7
8
|
1. **Check a real embedding model on your own machine** (this environment cannot reach Hugging Face, so the ONNX path is only tested with a tiny generated model). Export a model such as `all-MiniLM-L6-v2` (mean pooling) or `bge-small-en-v1.5` (`INDEXER_ONNX_POOLING=cls`, `INDEXER_ONNX_QUERY_PREFIX="Represent this sentence for searching relevant passages: "`), set `INDEXER_ONNX_MODEL`, and run `python benchmarks/run_benchmark.py --compare benchmarks/baseline.json`.
|
|
8
9
|
Evidence: `synonym` Recall@5 is only 0.30 (hashing embedder plus the dictionary, which cannot cover free paraphrase). Whether a real model fixes this is not measured.
|
|
9
10
|
2. **Resolve `FROM a JOIN b ON ..., c`** (a comma list after a JOIN loses `c`), non-sink SQL proc-name literals (`Run("usp_X")`), and EF query tracing (only the table mapping is recorded now).
|
|
@@ -58,8 +58,25 @@ def build_parser() -> argparse.ArgumentParser:
|
|
|
58
58
|
return p
|
|
59
59
|
|
|
60
60
|
|
|
61
|
+
def _fix_stdio(serving: bool) -> None:
|
|
62
|
+
"""MCP speaks UTF-8 JSON; the Windows locale codec (cp950, cp1252) would garble Chinese queries. On a console,
|
|
63
|
+
keep its encoding but never crash on a character it cannot show."""
|
|
64
|
+
for name in ("stdin", "stdout", "stderr"):
|
|
65
|
+
stream = getattr(sys, name, None)
|
|
66
|
+
if stream is None or not hasattr(stream, "reconfigure"):
|
|
67
|
+
continue
|
|
68
|
+
try:
|
|
69
|
+
if serving:
|
|
70
|
+
stream.reconfigure(encoding="utf-8", errors="replace")
|
|
71
|
+
elif name != "stdin":
|
|
72
|
+
stream.reconfigure(errors="replace")
|
|
73
|
+
except (OSError, ValueError):
|
|
74
|
+
pass
|
|
75
|
+
|
|
76
|
+
|
|
61
77
|
def main(argv: list[str] | None = None) -> int:
|
|
62
78
|
args = build_parser().parse_args(argv)
|
|
79
|
+
_fix_stdio(serving=args.cmd == "serve")
|
|
63
80
|
root = os.path.abspath(args.root)
|
|
64
81
|
|
|
65
82
|
if args.cmd == "serve":
|
{local_codebase_indexer-0.3.0 → local_codebase_indexer-0.3.1}/local_codebase_indexer/core.py
RENAMED
|
@@ -61,7 +61,7 @@ def git_info(root: str) -> dict | None:
|
|
|
61
61
|
"""HEAD commit, branch and number of uncommitted paths; None outside a git work tree."""
|
|
62
62
|
def run(*args: str) -> str | None:
|
|
63
63
|
try:
|
|
64
|
-
r = subprocess.run(["git", "-C", root, *args], capture_output=True, text=True, timeout=15)
|
|
64
|
+
r = subprocess.run(["git", "-C", root, *args], capture_output=True, text=True, encoding="utf-8", errors="replace", timeout=15)
|
|
65
65
|
except (OSError, subprocess.SubprocessError):
|
|
66
66
|
return None
|
|
67
67
|
return r.stdout if r.returncode == 0 else None
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: local-codebase-indexer
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.1
|
|
4
4
|
Summary: Local codebase indexer and context provider for AI coding assistants: MCP server and CLI with SQL data-access and C# call relations. No cloud, no server.
|
|
5
5
|
Author: sfy257000
|
|
6
6
|
Project-URL: Homepage, https://github.com/sfy257000/local-codebase-indexer
|
|
@@ -7,12 +7,12 @@
|
|
|
7
7
|
"url": "https://github.com/sfy257000/local-codebase-indexer",
|
|
8
8
|
"source": "github"
|
|
9
9
|
},
|
|
10
|
-
"version": "0.3.
|
|
10
|
+
"version": "0.3.1",
|
|
11
11
|
"packages": [
|
|
12
12
|
{
|
|
13
13
|
"registryType": "pypi",
|
|
14
14
|
"identifier": "local-codebase-indexer",
|
|
15
|
-
"version": "0.3.
|
|
15
|
+
"version": "0.3.1",
|
|
16
16
|
"runtimeHint": "uvx",
|
|
17
17
|
"transport": {
|
|
18
18
|
"type": "stdio"
|
|
@@ -330,3 +330,30 @@ def test_benchmark_corpus_is_valid_and_floor_holds(tmp_path):
|
|
|
330
330
|
cats = json.loads(out.read_text(encoding="utf-8"))["suites"]["synthetic"]["categories"]
|
|
331
331
|
assert cats["exact_identifier"]["recall5"] == 1.0
|
|
332
332
|
assert cats["chinese"]["recall5"] == 1.0
|
|
333
|
+
|
|
334
|
+
|
|
335
|
+
def test_git_output_is_decoded_as_utf8_not_the_locale(tmp_path, monkeypatch):
|
|
336
|
+
"""On Windows the locale codec (cp950) cannot decode git's UTF-8 output and the reader thread crashed."""
|
|
337
|
+
import subprocess
|
|
338
|
+
|
|
339
|
+
import local_codebase_indexer.core as core
|
|
340
|
+
seen = {}
|
|
341
|
+
real = subprocess.run
|
|
342
|
+
|
|
343
|
+
def spy(*a, **kw):
|
|
344
|
+
seen.update(kw)
|
|
345
|
+
return real(*a, **kw)
|
|
346
|
+
|
|
347
|
+
monkeypatch.setattr(subprocess, "run", spy)
|
|
348
|
+
core.git_info(str(tmp_path))
|
|
349
|
+
assert seen.get("encoding") == "utf-8" and seen.get("errors") == "replace"
|
|
350
|
+
|
|
351
|
+
|
|
352
|
+
def test_mcp_serve_reads_utf8_even_when_locale_is_cp950(project):
|
|
353
|
+
q = json.dumps({"jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": {
|
|
354
|
+
"name": "codebase_semantic_search", "arguments": {"query": "批號 LotNo", "limit": 2}}}, ensure_ascii=False)
|
|
355
|
+
env = dict(os.environ, PYTHONIOENCODING="cp950")
|
|
356
|
+
r = subprocess.run([sys.executable, "-m", "local_codebase_indexer", "--root", str(project), "serve"],
|
|
357
|
+
input=(q + "\n").encode("utf-8"), capture_output=True, env=env, cwd=ROOT, timeout=60)
|
|
358
|
+
out = json.loads(r.stdout.decode("utf-8"))
|
|
359
|
+
assert "result" in out and "error" not in out, r.stderr.decode("utf-8", "replace")
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{local_codebase_indexer-0.3.0 → local_codebase_indexer-0.3.1}/benchmarks/corpus/Auth/LoginService.cs
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{local_codebase_indexer-0.3.0 → local_codebase_indexer-0.3.1}/benchmarks/corpus/Data/MesDbContext.cs
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{local_codebase_indexer-0.3.0 → local_codebase_indexer-0.3.1}/benchmarks/corpus/Models/Lot.cs
RENAMED
|
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
|
{local_codebase_indexer-0.3.0 → local_codebase_indexer-0.3.1}/benchmarks/corpus/Sql/MES_Lot.sql
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{local_codebase_indexer-0.3.0 → local_codebase_indexer-0.3.1}/benchmarks/corpus/Web/scrapForm.ts
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{local_codebase_indexer-0.3.0 → local_codebase_indexer-0.3.1}/benchmarks/queries_stdlib.json
RENAMED
|
File without changes
|
{local_codebase_indexer-0.3.0 → local_codebase_indexer-0.3.1}/benchmarks/queries_synthetic.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{local_codebase_indexer-0.3.0 → local_codebase_indexer-0.3.1}/local_codebase_indexer/__main__.py
RENAMED
|
File without changes
|
{local_codebase_indexer-0.3.0 → local_codebase_indexer-0.3.1}/local_codebase_indexer/callgraph.py
RENAMED
|
File without changes
|
{local_codebase_indexer-0.3.0 → local_codebase_indexer-0.3.1}/local_codebase_indexer/cscalls.py
RENAMED
|
File without changes
|
{local_codebase_indexer-0.3.0 → local_codebase_indexer-0.3.1}/local_codebase_indexer/csdata.py
RENAMED
|
File without changes
|
{local_codebase_indexer-0.3.0 → local_codebase_indexer-0.3.1}/local_codebase_indexer/dataflow.py
RENAMED
|
File without changes
|
|
File without changes
|
{local_codebase_indexer-0.3.0 → local_codebase_indexer-0.3.1}/local_codebase_indexer/embedder.py
RENAMED
|
File without changes
|
{local_codebase_indexer-0.3.0 → local_codebase_indexer-0.3.1}/local_codebase_indexer/langparse.py
RENAMED
|
File without changes
|
{local_codebase_indexer-0.3.0 → local_codebase_indexer-0.3.1}/local_codebase_indexer/mcp_server.py
RENAMED
|
File without changes
|
{local_codebase_indexer-0.3.0 → local_codebase_indexer-0.3.1}/local_codebase_indexer/query.py
RENAMED
|
File without changes
|
{local_codebase_indexer-0.3.0 → local_codebase_indexer-0.3.1}/local_codebase_indexer/scanner.py
RENAMED
|
File without changes
|
{local_codebase_indexer-0.3.0 → local_codebase_indexer-0.3.1}/local_codebase_indexer/sqlaccess.py
RENAMED
|
File without changes
|
{local_codebase_indexer-0.3.0 → local_codebase_indexer-0.3.1}/local_codebase_indexer/synonyms.py
RENAMED
|
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
|