java-codebase-rag 0.9.6__tar.gz → 0.9.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 (62) hide show
  1. {java_codebase_rag-0.9.6/src/java_codebase_rag.egg-info → java_codebase_rag-0.9.7}/PKG-INFO +1 -1
  2. {java_codebase_rag-0.9.6 → java_codebase_rag-0.9.7}/pyproject.toml +1 -1
  3. {java_codebase_rag-0.9.6 → java_codebase_rag-0.9.7}/src/java_codebase_rag/absence/absence_vocab.py +7 -2
  4. {java_codebase_rag-0.9.6 → java_codebase_rag-0.9.7}/src/java_codebase_rag/jrag_envelope.py +13 -0
  5. {java_codebase_rag-0.9.6 → java_codebase_rag-0.9.7}/src/java_codebase_rag/mcp/mcp_v2.py +14 -0
  6. {java_codebase_rag-0.9.6 → java_codebase_rag-0.9.7/src/java_codebase_rag.egg-info}/PKG-INFO +1 -1
  7. {java_codebase_rag-0.9.6 → java_codebase_rag-0.9.7}/LICENSE +0 -0
  8. {java_codebase_rag-0.9.6 → java_codebase_rag-0.9.7}/README.md +0 -0
  9. {java_codebase_rag-0.9.6 → java_codebase_rag-0.9.7}/setup.cfg +0 -0
  10. {java_codebase_rag-0.9.6 → java_codebase_rag-0.9.7}/src/java_codebase_rag/__init__.py +0 -0
  11. {java_codebase_rag-0.9.6 → java_codebase_rag-0.9.7}/src/java_codebase_rag/_fdlimit.py +0 -0
  12. {java_codebase_rag-0.9.6 → java_codebase_rag-0.9.7}/src/java_codebase_rag/_stdio.py +0 -0
  13. {java_codebase_rag-0.9.6 → java_codebase_rag-0.9.7}/src/java_codebase_rag/_version.py +0 -0
  14. {java_codebase_rag-0.9.6 → java_codebase_rag-0.9.7}/src/java_codebase_rag/absence/__init__.py +0 -0
  15. {java_codebase_rag-0.9.6 → java_codebase_rag-0.9.7}/src/java_codebase_rag/absence/absence_diagnosis.py +0 -0
  16. {java_codebase_rag-0.9.6 → java_codebase_rag-0.9.7}/src/java_codebase_rag/absence/absence_types.py +0 -0
  17. {java_codebase_rag-0.9.6 → java_codebase_rag-0.9.7}/src/java_codebase_rag/analysis/__init__.py +0 -0
  18. {java_codebase_rag-0.9.6 → java_codebase_rag-0.9.7}/src/java_codebase_rag/analysis/pr_analysis.py +0 -0
  19. {java_codebase_rag-0.9.6 → java_codebase_rag-0.9.7}/src/java_codebase_rag/analysis/resolve_service.py +0 -0
  20. {java_codebase_rag-0.9.6 → java_codebase_rag-0.9.7}/src/java_codebase_rag/ast/__init__.py +0 -0
  21. {java_codebase_rag-0.9.6 → java_codebase_rag-0.9.7}/src/java_codebase_rag/ast/ast_java.py +0 -0
  22. {java_codebase_rag-0.9.6 → java_codebase_rag-0.9.7}/src/java_codebase_rag/ast/brownfield_events.py +0 -0
  23. {java_codebase_rag-0.9.6 → java_codebase_rag-0.9.7}/src/java_codebase_rag/ast/chunk_heuristics.py +0 -0
  24. {java_codebase_rag-0.9.6 → java_codebase_rag-0.9.7}/src/java_codebase_rag/cli.py +0 -0
  25. {java_codebase_rag-0.9.6 → java_codebase_rag-0.9.7}/src/java_codebase_rag/cli_format.py +0 -0
  26. {java_codebase_rag-0.9.6 → java_codebase_rag-0.9.7}/src/java_codebase_rag/cli_progress.py +0 -0
  27. {java_codebase_rag-0.9.6 → java_codebase_rag-0.9.7}/src/java_codebase_rag/config.py +0 -0
  28. {java_codebase_rag-0.9.6 → java_codebase_rag-0.9.7}/src/java_codebase_rag/graph/__init__.py +0 -0
  29. {java_codebase_rag-0.9.6 → java_codebase_rag-0.9.7}/src/java_codebase_rag/graph/build_ast_graph.py +0 -0
  30. {java_codebase_rag-0.9.6 → java_codebase_rag-0.9.7}/src/java_codebase_rag/graph/graph_enrich.py +0 -0
  31. {java_codebase_rag-0.9.6 → java_codebase_rag-0.9.7}/src/java_codebase_rag/graph/graph_types.py +0 -0
  32. {java_codebase_rag-0.9.6 → java_codebase_rag-0.9.7}/src/java_codebase_rag/graph/java_ontology.py +0 -0
  33. {java_codebase_rag-0.9.6 → java_codebase_rag-0.9.7}/src/java_codebase_rag/graph/ladybug_queries.py +0 -0
  34. {java_codebase_rag-0.9.6 → java_codebase_rag-0.9.7}/src/java_codebase_rag/graph/path_filtering.py +0 -0
  35. {java_codebase_rag-0.9.6 → java_codebase_rag-0.9.7}/src/java_codebase_rag/index/__init__.py +0 -0
  36. {java_codebase_rag-0.9.6 → java_codebase_rag-0.9.7}/src/java_codebase_rag/index/java_index_flow_lancedb.py +0 -0
  37. {java_codebase_rag-0.9.6 → java_codebase_rag-0.9.7}/src/java_codebase_rag/index/java_index_v1_common.py +0 -0
  38. {java_codebase_rag-0.9.6 → java_codebase_rag-0.9.7}/src/java_codebase_rag/install_data/__init__.py +0 -0
  39. {java_codebase_rag-0.9.6 → java_codebase_rag-0.9.7}/src/java_codebase_rag/install_data/agents/explorer-rag-cli.md +0 -0
  40. {java_codebase_rag-0.9.6 → java_codebase_rag-0.9.7}/src/java_codebase_rag/install_data/agents/explorer-rag-enhanced.md +0 -0
  41. {java_codebase_rag-0.9.6 → java_codebase_rag-0.9.7}/src/java_codebase_rag/install_data/skills/explore-codebase/SKILL.md +0 -0
  42. {java_codebase_rag-0.9.6 → java_codebase_rag-0.9.7}/src/java_codebase_rag/install_data/skills/explore-codebase-cli/SKILL.md +0 -0
  43. {java_codebase_rag-0.9.6 → java_codebase_rag-0.9.7}/src/java_codebase_rag/installer.py +0 -0
  44. {java_codebase_rag-0.9.6 → java_codebase_rag-0.9.7}/src/java_codebase_rag/jrag.py +0 -0
  45. {java_codebase_rag-0.9.6 → java_codebase_rag-0.9.7}/src/java_codebase_rag/jrag_hints.py +0 -0
  46. {java_codebase_rag-0.9.6 → java_codebase_rag-0.9.7}/src/java_codebase_rag/jrag_render.py +0 -0
  47. {java_codebase_rag-0.9.6 → java_codebase_rag-0.9.7}/src/java_codebase_rag/lance_optimize.py +0 -0
  48. {java_codebase_rag-0.9.6 → java_codebase_rag-0.9.7}/src/java_codebase_rag/mcp/__init__.py +0 -0
  49. {java_codebase_rag-0.9.6 → java_codebase_rag-0.9.7}/src/java_codebase_rag/mcp/mcp_hints.py +0 -0
  50. {java_codebase_rag-0.9.6 → java_codebase_rag-0.9.7}/src/java_codebase_rag/mcp/server.py +0 -0
  51. {java_codebase_rag-0.9.6 → java_codebase_rag-0.9.7}/src/java_codebase_rag/pipeline.py +0 -0
  52. {java_codebase_rag-0.9.6 → java_codebase_rag-0.9.7}/src/java_codebase_rag/progress.py +0 -0
  53. {java_codebase_rag-0.9.6 → java_codebase_rag-0.9.7}/src/java_codebase_rag/search/__init__.py +0 -0
  54. {java_codebase_rag-0.9.6 → java_codebase_rag-0.9.7}/src/java_codebase_rag/search/index_common.py +0 -0
  55. {java_codebase_rag-0.9.6 → java_codebase_rag-0.9.7}/src/java_codebase_rag/search/search_lancedb.py +0 -0
  56. {java_codebase_rag-0.9.6 → java_codebase_rag-0.9.7}/src/java_codebase_rag/search/search_lexical.py +0 -0
  57. {java_codebase_rag-0.9.6 → java_codebase_rag-0.9.7}/src/java_codebase_rag/search/search_scoring.py +0 -0
  58. {java_codebase_rag-0.9.6 → java_codebase_rag-0.9.7}/src/java_codebase_rag.egg-info/SOURCES.txt +0 -0
  59. {java_codebase_rag-0.9.6 → java_codebase_rag-0.9.7}/src/java_codebase_rag.egg-info/dependency_links.txt +0 -0
  60. {java_codebase_rag-0.9.6 → java_codebase_rag-0.9.7}/src/java_codebase_rag.egg-info/entry_points.txt +0 -0
  61. {java_codebase_rag-0.9.6 → java_codebase_rag-0.9.7}/src/java_codebase_rag.egg-info/requires.txt +0 -0
  62. {java_codebase_rag-0.9.6 → java_codebase_rag-0.9.7}/src/java_codebase_rag.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: java-codebase-rag
3
- Version: 0.9.6
3
+ Version: 0.9.7
4
4
  Summary: MCP server for semantic + structural search over Java codebases
5
5
  Author: HumanBean17
6
6
  License-Expression: MIT
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "java-codebase-rag"
7
- version = "0.9.6"
7
+ version = "0.9.7"
8
8
  description = "MCP server for semantic + structural search over Java codebases"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"
@@ -375,8 +375,13 @@ def get_vocabulary_index(graph: Any, cfg: Any) -> VocabularyIndex:
375
375
  # (JSONDecodeError/KeyError) — all subsumed by Exception; rebuild.
376
376
  log.debug(f"Vocab index missing/stale/corrupt ({e}), rebuilding from graph")
377
377
 
378
- # Build from graph
379
- index = VocabularyIndex.build(graph, q=cfg.absence_ngram_q)
378
+ # Build from graph. Coerce q to int (mirror absence_diagnosis.py's
379
+ # int(getattr(cfg, ...)) pattern): a non-int cfg.absence_ngram_q (e.g. a
380
+ # MagicMock cfg from a leaked test mock, or a YAML string) would otherwise
381
+ # crash _qgrams at `len(text) < q` ('int < MagicMock'). Default 3 = the
382
+ # config default for absence_ngram_q.
383
+ q = int(getattr(cfg, "absence_ngram_q", 3) or 3)
384
+ index = VocabularyIndex.build(graph, q=q)
380
385
 
381
386
  # Save to sidecar (best-effort)
382
387
  try:
@@ -16,6 +16,7 @@ from __future__ import annotations
16
16
  import json
17
17
  import re
18
18
  from dataclasses import dataclass, field
19
+ from pathlib import Path
19
20
  from typing import Any, Literal
20
21
 
21
22
  from java_codebase_rag.absence.absence_types import AbsenceDiagnosis
@@ -274,10 +275,22 @@ def simple_name(node_dict: dict[str, Any]) -> str:
274
275
 
275
276
  ``NodeRef`` carries no ``name`` field; the rendering layer derives a short
276
277
  label from the FQN on demand. Empty/missing FQN returns "".
278
+
279
+ File/package Symbol nodes are the exception: their ``fqn`` is a filesystem
280
+ path (e.g. ``chat-assign/.../AssignConfiguration.java``), so the dot-split
281
+ would yield the file *extension* (``java``) instead of a name. When the fqn
282
+ is a path (contains ``/`` — the indexer POSIX-normalizes via ``.as_posix()``
283
+ so backslashes don't occur) we return the basename. Route fqns
284
+ (``"GET /api/x"``) also contain ``/`` but carry a space, so they're excluded
285
+ here and stay on the dot-split path.
277
286
  """
278
287
  fqn = str(node_dict.get("fqn") or "")
279
288
  if not fqn:
280
289
  return ""
290
+ if "/" in fqn and " " not in fqn:
291
+ base = Path(fqn).name
292
+ if base:
293
+ return base
281
294
  return fqn.rsplit(".", 1)[-1]
282
295
 
283
296
 
@@ -1120,6 +1120,20 @@ def find_v2(
1120
1120
  fetch_cap = int(limit) + int(offset) + 1
1121
1121
  if kind == "symbol":
1122
1122
  where, params = _symbol_where_from_filter(nf)
1123
+ # Exclude structural Symbol nodes. Files and packages are :Symbol-
1124
+ # labeled (kind='file'/'package') but aren't code declarations —
1125
+ # without this, `fqn_contains` matches their filesystem-path fqn
1126
+ # (e.g. 'Assign' in '.../DevAssignmentController.java') and surfaces
1127
+ # them as hits. Mirrors search_lexical.py. Safe to apply
1128
+ # unconditionally: DeclarationSymbolKind (the only values
1129
+ # symbol_kind/symbol_kinds can take) excludes 'file'/'package', so no
1130
+ # filter ever requests them.
1131
+ struct_pred = "(s.kind <> 'file' AND s.kind <> 'package')"
1132
+ where = (
1133
+ f"WHERE {struct_pred}"
1134
+ if not where
1135
+ else where.replace("WHERE ", f"WHERE {struct_pred} AND ", 1)
1136
+ )
1123
1137
  params["lim"] = fetch_cap
1124
1138
  rows = g._rows( # noqa: SLF001
1125
1139
  f"MATCH (s:Symbol) {where} RETURN s.id AS id, s.fqn AS fqn, s.microservice AS microservice, "
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: java-codebase-rag
3
- Version: 0.9.6
3
+ Version: 0.9.7
4
4
  Summary: MCP server for semantic + structural search over Java codebases
5
5
  Author: HumanBean17
6
6
  License-Expression: MIT