java-codebase-rag 0.9.5__py3-none-any.whl → 0.9.7__py3-none-any.whl
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.
- java_codebase_rag/absence/__init__.py +0 -0
- absence_diagnosis.py → java_codebase_rag/absence/absence_diagnosis.py +4 -4
- absence_types.py → java_codebase_rag/absence/absence_types.py +1 -1
- absence_vocab.py → java_codebase_rag/absence/absence_vocab.py +11 -6
- java_codebase_rag/analysis/__init__.py +0 -0
- pr_analysis.py → java_codebase_rag/analysis/pr_analysis.py +1 -1
- resolve_service.py → java_codebase_rag/analysis/resolve_service.py +7 -7
- java_codebase_rag/ast/__init__.py +0 -0
- ast_java.py → java_codebase_rag/ast/ast_java.py +4 -4
- java_codebase_rag/cli.py +12 -12
- java_codebase_rag/graph/__init__.py +0 -0
- build_ast_graph.py → java_codebase_rag/graph/build_ast_graph.py +6 -6
- graph_enrich.py → java_codebase_rag/graph/graph_enrich.py +3 -3
- graph_types.py → java_codebase_rag/graph/graph_types.py +2 -2
- java_ontology.py → java_codebase_rag/graph/java_ontology.py +1 -1
- ladybug_queries.py → java_codebase_rag/graph/ladybug_queries.py +2 -2
- java_codebase_rag/index/__init__.py +0 -0
- java_index_flow_lancedb.py → java_codebase_rag/index/java_index_flow_lancedb.py +4 -4
- java_codebase_rag/install_data/__init__.py +0 -0
- java_codebase_rag/jrag.py +18 -18
- java_codebase_rag/jrag_envelope.py +17 -4
- java_codebase_rag/jrag_hints.py +1 -1
- java_codebase_rag/jrag_render.py +1 -1
- java_codebase_rag/mcp/__init__.py +0 -0
- mcp_hints.py → java_codebase_rag/mcp/mcp_hints.py +1 -1
- mcp_v2.py → java_codebase_rag/mcp/mcp_v2.py +26 -12
- server.py → java_codebase_rag/mcp/server.py +40 -23
- java_codebase_rag/pipeline.py +15 -6
- java_codebase_rag/search/__init__.py +0 -0
- search_lancedb.py → java_codebase_rag/search/search_lancedb.py +4 -4
- search_lexical.py → java_codebase_rag/search/search_lexical.py +3 -3
- {java_codebase_rag-0.9.5.dist-info → java_codebase_rag-0.9.7.dist-info}/METADATA +1 -1
- java_codebase_rag-0.9.7.dist-info/RECORD +57 -0
- {java_codebase_rag-0.9.5.dist-info → java_codebase_rag-0.9.7.dist-info}/entry_points.txt +1 -1
- java_codebase_rag-0.9.7.dist-info/top_level.txt +1 -0
- java_codebase_rag-0.9.5.dist-info/RECORD +0 -49
- java_codebase_rag-0.9.5.dist-info/top_level.txt +0 -24
- /brownfield_events.py → /java_codebase_rag/ast/brownfield_events.py +0 -0
- /chunk_heuristics.py → /java_codebase_rag/ast/chunk_heuristics.py +0 -0
- /path_filtering.py → /java_codebase_rag/graph/path_filtering.py +0 -0
- /java_index_v1_common.py → /java_codebase_rag/index/java_index_v1_common.py +0 -0
- /index_common.py → /java_codebase_rag/search/index_common.py +0 -0
- /search_scoring.py → /java_codebase_rag/search/search_scoring.py +0 -0
- {java_codebase_rag-0.9.5.dist-info → java_codebase_rag-0.9.7.dist-info}/WHEEL +0 -0
- {java_codebase_rag-0.9.5.dist-info → java_codebase_rag-0.9.7.dist-info}/licenses/LICENSE +0 -0
|
File without changes
|
|
@@ -30,7 +30,7 @@ from collections import Counter
|
|
|
30
30
|
from difflib import SequenceMatcher
|
|
31
31
|
from typing import Any, Literal
|
|
32
32
|
|
|
33
|
-
from absence_types import (
|
|
33
|
+
from java_codebase_rag.absence.absence_types import (
|
|
34
34
|
AbsenceDiagnosis,
|
|
35
35
|
AbsenceProof,
|
|
36
36
|
ExternalIdentity,
|
|
@@ -38,9 +38,9 @@ from absence_types import (
|
|
|
38
38
|
FilterRelaxationDim,
|
|
39
39
|
VocabularyContext,
|
|
40
40
|
)
|
|
41
|
-
from absence_vocab import SymbolRecord, VocabularyIndex, _normalize_name
|
|
42
|
-
from graph_types import NodeRef
|
|
43
|
-
from mcp_hints import _IDENTIFIER_FILTER_FIELDS
|
|
41
|
+
from java_codebase_rag.absence.absence_vocab import SymbolRecord, VocabularyIndex, _normalize_name
|
|
42
|
+
from java_codebase_rag.graph.graph_types import NodeRef
|
|
43
|
+
from java_codebase_rag.mcp.mcp_hints import _IDENTIFIER_FILTER_FIELDS
|
|
44
44
|
|
|
45
45
|
log = logging.getLogger(__name__)
|
|
46
46
|
|
|
@@ -204,7 +204,7 @@ class VocabularyIndex:
|
|
|
204
204
|
VocabIndexStale: If sidecar format_version or ontology_version
|
|
205
205
|
doesn't match expected
|
|
206
206
|
"""
|
|
207
|
-
from ast_java import ONTOLOGY_VERSION
|
|
207
|
+
from java_codebase_rag.ast.ast_java import ONTOLOGY_VERSION
|
|
208
208
|
|
|
209
209
|
with open(path, encoding="utf-8") as f:
|
|
210
210
|
data = json.load(f)
|
|
@@ -304,7 +304,7 @@ class VocabularyIndex:
|
|
|
304
304
|
Returns:
|
|
305
305
|
(is_external, reason) tuple
|
|
306
306
|
"""
|
|
307
|
-
from ladybug_queries import _is_external_fqn, _EXTERNAL_PREFIXES
|
|
307
|
+
from java_codebase_rag.graph.ladybug_queries import _is_external_fqn, _EXTERNAL_PREFIXES
|
|
308
308
|
|
|
309
309
|
# First, check if it's an external prefix (highest priority)
|
|
310
310
|
if _is_external_fqn(name):
|
|
@@ -354,7 +354,7 @@ def get_vocabulary_index(graph: Any, cfg: Any) -> VocabularyIndex:
|
|
|
354
354
|
Returns:
|
|
355
355
|
VocabularyIndex (cached or newly built)
|
|
356
356
|
"""
|
|
357
|
-
from ast_java import ONTOLOGY_VERSION
|
|
357
|
+
from java_codebase_rag.ast.ast_java import ONTOLOGY_VERSION
|
|
358
358
|
|
|
359
359
|
# Determine graph db path for cache key
|
|
360
360
|
db_path = graph.db_path if hasattr(graph, 'db_path') else str(cfg.ladybug_path)
|
|
@@ -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
|
-
|
|
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:
|
|
@@ -403,7 +408,7 @@ def reset_cache() -> None:
|
|
|
403
408
|
|
|
404
409
|
def _row_to_symbol_record(row: dict[str, Any]) -> SymbolRecord:
|
|
405
410
|
"""Convert a Ladybug row to a SymbolRecord."""
|
|
406
|
-
from ladybug_queries import _type_part_fqn
|
|
411
|
+
from java_codebase_rag.graph.ladybug_queries import _type_part_fqn
|
|
407
412
|
|
|
408
413
|
fqn = row.get("fqn") or ""
|
|
409
414
|
name = row.get("name") or ""
|
|
File without changes
|
|
@@ -12,7 +12,7 @@ from typing import Any
|
|
|
12
12
|
from unidiff import PatchSet
|
|
13
13
|
from unidiff.errors import UnidiffParseError
|
|
14
14
|
|
|
15
|
-
from ladybug_queries import SymbolHit, find_symbols_in_file_range, _row_to_symbol
|
|
15
|
+
from java_codebase_rag.graph.ladybug_queries import SymbolHit, find_symbols_in_file_range, _row_to_symbol
|
|
16
16
|
|
|
17
17
|
|
|
18
18
|
@dataclass
|
|
@@ -10,10 +10,10 @@ from typing import Any, Literal
|
|
|
10
10
|
|
|
11
11
|
from pydantic import BaseModel, ConfigDict, Field
|
|
12
12
|
|
|
13
|
-
from absence_types import AbsenceDiagnosis
|
|
14
|
-
from absence_diagnosis import diagnose
|
|
15
|
-
from absence_vocab import get_vocabulary_index
|
|
16
|
-
from graph_types import (
|
|
13
|
+
from java_codebase_rag.absence.absence_types import AbsenceDiagnosis
|
|
14
|
+
from java_codebase_rag.absence.absence_diagnosis import diagnose
|
|
15
|
+
from java_codebase_rag.absence.absence_vocab import get_vocabulary_index
|
|
16
|
+
from java_codebase_rag.graph.graph_types import (
|
|
17
17
|
NodeRef,
|
|
18
18
|
StructuredHint,
|
|
19
19
|
_hints_or_skip,
|
|
@@ -21,9 +21,9 @@ from graph_types import (
|
|
|
21
21
|
_to_structured_hints,
|
|
22
22
|
set_hints_enabled,
|
|
23
23
|
)
|
|
24
|
-
from java_ontology import ResolveReason
|
|
25
|
-
from ladybug_queries import LadybugGraph
|
|
26
|
-
from mcp_hints import MCP_HINTS_STRUCTURED_FIELD_DESCRIPTION
|
|
24
|
+
from java_codebase_rag.graph.java_ontology import ResolveReason
|
|
25
|
+
from java_codebase_rag.graph.ladybug_queries import LadybugGraph
|
|
26
|
+
from java_codebase_rag.mcp.mcp_hints import MCP_HINTS_STRUCTURED_FIELD_DESCRIPTION
|
|
27
27
|
|
|
28
28
|
__all__ = [
|
|
29
29
|
"resolve_v2",
|
|
File without changes
|
|
@@ -20,7 +20,7 @@ from typing import Iterable
|
|
|
20
20
|
|
|
21
21
|
import tree_sitter_java as _ts_java
|
|
22
22
|
|
|
23
|
-
from brownfield_events import (
|
|
23
|
+
from java_codebase_rag.ast.brownfield_events import (
|
|
24
24
|
emit_brownfield_exclusivity_shadowing,
|
|
25
25
|
emit_brownfield_method_string_literal,
|
|
26
26
|
)
|
|
@@ -1617,7 +1617,7 @@ def _parse_codebase_http_client_annotation(
|
|
|
1617
1617
|
val, vkind = _annotation_value(pairs["clientKind"], src)
|
|
1618
1618
|
if val and vkind == "enum":
|
|
1619
1619
|
kind_val = str(val)
|
|
1620
|
-
from java_ontology import VALID_CLIENT_KINDS # deferred: java_ontology imports ast_java
|
|
1620
|
+
from java_codebase_rag.graph.java_ontology import VALID_CLIENT_KINDS # deferred: java_ontology imports ast_java
|
|
1621
1621
|
if kind_val in VALID_CLIENT_KINDS:
|
|
1622
1622
|
client_kind = kind_val
|
|
1623
1623
|
else:
|
|
@@ -1697,7 +1697,7 @@ def _parse_codebase_producer_annotation(
|
|
|
1697
1697
|
val, vkind = _annotation_value(kind_node, src)
|
|
1698
1698
|
if val and vkind == "enum":
|
|
1699
1699
|
kind_val = str(val)
|
|
1700
|
-
from java_ontology import VALID_PRODUCER_KINDS # deferred: java_ontology imports ast_java
|
|
1700
|
+
from java_codebase_rag.graph.java_ontology import VALID_PRODUCER_KINDS # deferred: java_ontology imports ast_java
|
|
1701
1701
|
if kind_val in VALID_PRODUCER_KINDS:
|
|
1702
1702
|
client_kind = kind_val
|
|
1703
1703
|
else:
|
|
@@ -1868,7 +1868,7 @@ def _collect_outgoing_calls(
|
|
|
1868
1868
|
file_rel: str,
|
|
1869
1869
|
) -> list[OutgoingCallDecl]:
|
|
1870
1870
|
del project_root
|
|
1871
|
-
from java_ontology import ( # deferred: java_ontology imports ast_java
|
|
1871
|
+
from java_codebase_rag.graph.java_ontology import ( # deferred: java_ontology imports ast_java
|
|
1872
1872
|
CLIENT_KIND_FEIGN_METHOD,
|
|
1873
1873
|
CLIENT_KIND_REST_TEMPLATE,
|
|
1874
1874
|
CLIENT_KIND_WEB_CLIENT,
|
java_codebase_rag/cli.py
CHANGED
|
@@ -36,7 +36,7 @@ from java_codebase_rag.pipeline import (
|
|
|
36
36
|
run_cocoindex_update,
|
|
37
37
|
run_incremental_graph,
|
|
38
38
|
)
|
|
39
|
-
from java_ontology import VALID_UNRESOLVED_CALL_REASONS
|
|
39
|
+
from java_codebase_rag.graph.java_ontology import VALID_UNRESOLVED_CALL_REASONS
|
|
40
40
|
|
|
41
41
|
LADYBUG_INCREMENTAL_TRACKING_ISSUE_URL = "https://github.com/HumanBean17/java-codebase-rag/issues/73"
|
|
42
42
|
|
|
@@ -602,7 +602,7 @@ def _cmd_reprocess(args: argparse.Namespace) -> int:
|
|
|
602
602
|
_emit_reprocess_outcome(payload, selective_tty_mode="graph" if ok else None)
|
|
603
603
|
return _reprocess_exit_code(payload)
|
|
604
604
|
|
|
605
|
-
import server # lazy: pulls sentence_transformers/torch/lancedb/ladybug
|
|
605
|
+
from java_codebase_rag.mcp import server # lazy: pulls sentence_transformers/torch/lancedb/ladybug
|
|
606
606
|
|
|
607
607
|
result = asyncio.run(
|
|
608
608
|
server.run_refresh_pipeline(
|
|
@@ -677,7 +677,7 @@ def _cmd_erase(args: argparse.Namespace) -> int:
|
|
|
677
677
|
# tree_sitter (~54ms), and these filenames are only needed on the erase path.
|
|
678
678
|
# Keeping it out of the top-level import lets `java-codebase-rag --help` (and
|
|
679
679
|
# every other command) stay fast -- see the lazy-import invariant atop this file.
|
|
680
|
-
from build_ast_graph import BUILDER_OWNED_INDEX_FILES
|
|
680
|
+
from java_codebase_rag.graph.build_ast_graph import BUILDER_OWNED_INDEX_FILES
|
|
681
681
|
builder_paths = [cfg.ladybug_path.parent / name for name in BUILDER_OWNED_INDEX_FILES]
|
|
682
682
|
operator_paths = [cfg.index_dir / name for name in OPERATOR_OWNED_INDEX_FILES]
|
|
683
683
|
to_describe: list[Path] = [
|
|
@@ -768,12 +768,12 @@ def _cmd_erase(args: argparse.Namespace) -> int:
|
|
|
768
768
|
|
|
769
769
|
|
|
770
770
|
def _cmd_meta(args: argparse.Namespace) -> int:
|
|
771
|
-
import server # lazy
|
|
771
|
+
from java_codebase_rag.mcp import server # lazy
|
|
772
772
|
|
|
773
773
|
cfg = _resolved_from_ns(args)
|
|
774
774
|
_startup_hints(cfg)
|
|
775
775
|
cfg.apply_to_os_environ()
|
|
776
|
-
from ladybug_queries import LadybugGraph # lazy
|
|
776
|
+
from java_codebase_rag.graph.ladybug_queries import LadybugGraph # lazy
|
|
777
777
|
|
|
778
778
|
LadybugGraph._instance = None
|
|
779
779
|
LadybugGraph._instance_path = None
|
|
@@ -792,7 +792,7 @@ def _cmd_meta(args: argparse.Namespace) -> int:
|
|
|
792
792
|
|
|
793
793
|
|
|
794
794
|
def _cmd_tables(args: argparse.Namespace) -> int:
|
|
795
|
-
import server # lazy
|
|
795
|
+
from java_codebase_rag.mcp import server # lazy
|
|
796
796
|
|
|
797
797
|
cfg = _resolved_from_ns(args)
|
|
798
798
|
_startup_hints(cfg)
|
|
@@ -803,8 +803,8 @@ def _cmd_tables(args: argparse.Namespace) -> int:
|
|
|
803
803
|
|
|
804
804
|
|
|
805
805
|
def _cmd_diagnose_ignore(args: argparse.Namespace) -> int:
|
|
806
|
-
import server # lazy
|
|
807
|
-
from path_filtering import LayeredIgnore # lazy
|
|
806
|
+
from java_codebase_rag.mcp import server # lazy
|
|
807
|
+
from java_codebase_rag.graph.path_filtering import LayeredIgnore # lazy
|
|
808
808
|
|
|
809
809
|
cfg = _resolved_from_ns(args)
|
|
810
810
|
_startup_hints(cfg)
|
|
@@ -833,7 +833,7 @@ def _cmd_unresolved_calls_list(args: argparse.Namespace) -> int:
|
|
|
833
833
|
cfg = _resolved_from_ns(args)
|
|
834
834
|
_startup_hints(cfg)
|
|
835
835
|
cfg.apply_to_os_environ()
|
|
836
|
-
from ladybug_queries import LadybugGraph # lazy
|
|
836
|
+
from java_codebase_rag.graph.ladybug_queries import LadybugGraph # lazy
|
|
837
837
|
|
|
838
838
|
if not LadybugGraph.exists():
|
|
839
839
|
_emit({"success": False, "message": "LadybugDB graph not found"})
|
|
@@ -854,7 +854,7 @@ def _cmd_unresolved_calls_stats(args: argparse.Namespace) -> int:
|
|
|
854
854
|
cfg = _resolved_from_ns(args)
|
|
855
855
|
_startup_hints(cfg)
|
|
856
856
|
cfg.apply_to_os_environ()
|
|
857
|
-
from ladybug_queries import LadybugGraph # lazy
|
|
857
|
+
from java_codebase_rag.graph.ladybug_queries import LadybugGraph # lazy
|
|
858
858
|
|
|
859
859
|
if not LadybugGraph.exists():
|
|
860
860
|
_emit({"success": False, "message": "LadybugDB graph not found"})
|
|
@@ -878,8 +878,8 @@ def _cmd_analyze_pr(args: argparse.Namespace) -> int:
|
|
|
878
878
|
if not diff_text.strip():
|
|
879
879
|
_emit({"success": False, "message": "Diff is empty"})
|
|
880
880
|
return 1
|
|
881
|
-
import pr_analysis # lazy
|
|
882
|
-
from ladybug_queries import LadybugGraph # lazy
|
|
881
|
+
from java_codebase_rag.analysis import pr_analysis # lazy
|
|
882
|
+
from java_codebase_rag.graph.ladybug_queries import LadybugGraph # lazy
|
|
883
883
|
|
|
884
884
|
if not LadybugGraph.exists():
|
|
885
885
|
_emit({"success": False, "message": "LadybugDB graph not found"})
|
|
File without changes
|
|
@@ -41,7 +41,7 @@ from pathlib import Path
|
|
|
41
41
|
import ladybug
|
|
42
42
|
import pyarrow as pa
|
|
43
43
|
|
|
44
|
-
from ast_java import (
|
|
44
|
+
from java_codebase_rag.ast.ast_java import (
|
|
45
45
|
ONTOLOGY_VERSION,
|
|
46
46
|
CallSite,
|
|
47
47
|
JavaFileAst,
|
|
@@ -52,7 +52,7 @@ from ast_java import (
|
|
|
52
52
|
lombok_required_args_annotations,
|
|
53
53
|
parse_java,
|
|
54
54
|
)
|
|
55
|
-
from graph_enrich import (
|
|
55
|
+
from java_codebase_rag.graph.graph_enrich import (
|
|
56
56
|
_load_config_cross_service_resolution,
|
|
57
57
|
classify_java_file,
|
|
58
58
|
collect_annotation_meta_chain,
|
|
@@ -67,8 +67,8 @@ from graph_enrich import (
|
|
|
67
67
|
resolve_routes_for_method,
|
|
68
68
|
symbol_id,
|
|
69
69
|
)
|
|
70
|
-
from path_filtering import LayeredIgnore, iter_java_source_files
|
|
71
|
-
from java_ontology import (
|
|
70
|
+
from java_codebase_rag.graph.path_filtering import LayeredIgnore, iter_java_source_files
|
|
71
|
+
from java_codebase_rag.graph.java_ontology import (
|
|
72
72
|
CLIENT_KIND_FEIGN_METHOD,
|
|
73
73
|
CLIENT_KIND_REST_TEMPLATE,
|
|
74
74
|
VALID_CLIENT_KINDS,
|
|
@@ -4256,8 +4256,8 @@ def _try_build_vocabulary_index(db_path: Path, source_root: Path, verbose: bool)
|
|
|
4256
4256
|
verbose: Whether to emit verbose progress
|
|
4257
4257
|
"""
|
|
4258
4258
|
try:
|
|
4259
|
-
from absence_vocab import VocabularyIndex, VOCAB_INDEX_FILENAME
|
|
4260
|
-
from ladybug_queries import LadybugGraph
|
|
4259
|
+
from java_codebase_rag.absence.absence_vocab import VocabularyIndex, VOCAB_INDEX_FILENAME
|
|
4260
|
+
from java_codebase_rag.graph.ladybug_queries import LadybugGraph
|
|
4261
4261
|
|
|
4262
4262
|
t0 = time.time()
|
|
4263
4263
|
if verbose:
|
|
@@ -25,7 +25,7 @@ from dataclasses import dataclass, field, replace
|
|
|
25
25
|
from functools import lru_cache
|
|
26
26
|
from pathlib import Path
|
|
27
27
|
from typing import Any, TypeVar
|
|
28
|
-
from ast_java import (
|
|
28
|
+
from java_codebase_rag.ast.ast_java import (
|
|
29
29
|
AnnotationRef,
|
|
30
30
|
JavaFileAst,
|
|
31
31
|
MethodDecl,
|
|
@@ -43,7 +43,7 @@ from ast_java import (
|
|
|
43
43
|
_METHOD_ANN_TO_CAPABILITY,
|
|
44
44
|
_TYPE_ANN_TO_CAPABILITY,
|
|
45
45
|
)
|
|
46
|
-
from java_ontology import (
|
|
46
|
+
from java_codebase_rag.graph.java_ontology import (
|
|
47
47
|
CLIENT_KIND_REST_TEMPLATE,
|
|
48
48
|
VALID_CAPABILITIES,
|
|
49
49
|
VALID_CLIENT_KINDS,
|
|
@@ -52,7 +52,7 @@ from java_ontology import (
|
|
|
52
52
|
VALID_ROUTE_FRAMEWORKS,
|
|
53
53
|
VALID_ROUTE_KINDS,
|
|
54
54
|
)
|
|
55
|
-
from path_filtering import LayeredIgnore, iter_java_source_files
|
|
55
|
+
from java_codebase_rag.graph.path_filtering import LayeredIgnore, iter_java_source_files
|
|
56
56
|
|
|
57
57
|
__all__ = [
|
|
58
58
|
"AnnotationDecl",
|
|
@@ -10,8 +10,8 @@ from typing import Any, Literal
|
|
|
10
10
|
|
|
11
11
|
from pydantic import BaseModel
|
|
12
12
|
|
|
13
|
-
from ladybug_queries import LadybugGraph
|
|
14
|
-
from mcp_hints import generate_hints
|
|
13
|
+
from java_codebase_rag.graph.ladybug_queries import LadybugGraph
|
|
14
|
+
from java_codebase_rag.mcp.mcp_hints import generate_hints
|
|
15
15
|
|
|
16
16
|
__all__ = [
|
|
17
17
|
"NodeRef",
|
|
@@ -6,7 +6,7 @@ so the MCP server can serialize them without further mapping.
|
|
|
6
6
|
The Ladybug database is opened read-only and cached per-process. This module is
|
|
7
7
|
intentionally dependency-light: nothing here imports LanceDB or sentence-transformers.
|
|
8
8
|
|
|
9
|
-
Cypher pitfalls (see also ``
|
|
9
|
+
Cypher pitfalls (see also ``CLAUDE.md``): avoid ``label(e) IN $list`` in ``WHERE`` for
|
|
10
10
|
relationship-type filters; use OR of ``label(e) = $param`` with bound parameters.
|
|
11
11
|
Typed unions ``-[e:A|B]-`` require every ``RETURN`` column on ``e`` to exist on all
|
|
12
12
|
listed rel types, or the binder may fail.
|
|
@@ -24,7 +24,7 @@ from typing import Any, Literal
|
|
|
24
24
|
|
|
25
25
|
import ladybug
|
|
26
26
|
|
|
27
|
-
from ast_java import ONTOLOGY_VERSION as _ONTOLOGY_VERSION
|
|
27
|
+
from java_codebase_rag.ast.ast_java import ONTOLOGY_VERSION as _ONTOLOGY_VERSION
|
|
28
28
|
|
|
29
29
|
log = logging.getLogger(__name__)
|
|
30
30
|
|
|
File without changes
|
|
@@ -41,7 +41,7 @@ from cocoindex.resources.file import PatternFilePathMatcher
|
|
|
41
41
|
|
|
42
42
|
from java_codebase_rag.config import resolved_sbert_model_for_process_env
|
|
43
43
|
from java_codebase_rag.lance_optimize import LANCE_TABLE_NAMES
|
|
44
|
-
from java_index_v1_common import (
|
|
44
|
+
from java_codebase_rag.index.java_index_v1_common import (
|
|
45
45
|
JAVA_CHUNK,
|
|
46
46
|
SBERT_MODEL,
|
|
47
47
|
SQL_CHUNK,
|
|
@@ -49,9 +49,9 @@ from java_index_v1_common import (
|
|
|
49
49
|
chunk_key_range,
|
|
50
50
|
position_to_json,
|
|
51
51
|
)
|
|
52
|
-
from path_filtering import LayeredIgnore
|
|
53
|
-
from ast_java import ONTOLOGY_VERSION, parse_java
|
|
54
|
-
from graph_enrich import (
|
|
52
|
+
from java_codebase_rag.graph.path_filtering import LayeredIgnore
|
|
53
|
+
from java_codebase_rag.ast.ast_java import ONTOLOGY_VERSION, parse_java
|
|
54
|
+
from java_codebase_rag.graph.graph_enrich import (
|
|
55
55
|
classify_java_file,
|
|
56
56
|
collect_annotation_meta_chain,
|
|
57
57
|
enrich_chunk,
|
|
File without changes
|
java_codebase_rag/jrag.py
CHANGED
|
@@ -134,7 +134,7 @@ def _apply_auto_scope(args: argparse.Namespace, cfg, graph) -> None:
|
|
|
134
134
|
source_root = cfg.source_root if cfg.source_root else None
|
|
135
135
|
if not source_root:
|
|
136
136
|
return
|
|
137
|
-
from graph_enrich import detect_microservice_from_path
|
|
137
|
+
from java_codebase_rag.graph.graph_enrich import detect_microservice_from_path
|
|
138
138
|
|
|
139
139
|
candidate = detect_microservice_from_path(Path.cwd(), Path(source_root))
|
|
140
140
|
if not candidate:
|
|
@@ -1217,7 +1217,7 @@ def _load_graph(cfg): # type: ignore[no-untyped-def]
|
|
|
1217
1217
|
* ontology-mismatch (``RuntimeError`` from ``LadybugGraph.get``) ->
|
|
1218
1218
|
``_IndexStale`` (caught in ``main`` -> envelope with a rebuild hint).
|
|
1219
1219
|
"""
|
|
1220
|
-
from ladybug_queries import LadybugGraph
|
|
1220
|
+
from java_codebase_rag.graph.ladybug_queries import LadybugGraph
|
|
1221
1221
|
|
|
1222
1222
|
ladybug_path = str(cfg.ladybug_path)
|
|
1223
1223
|
if not LadybugGraph.exists(ladybug_path):
|
|
@@ -1233,8 +1233,8 @@ def _load_graph(cfg): # type: ignore[no-untyped-def]
|
|
|
1233
1233
|
|
|
1234
1234
|
def _cmd_vocab_index(args: argparse.Namespace) -> int:
|
|
1235
1235
|
"""Rebuild the vocabulary index sidecar from the Ladybug graph."""
|
|
1236
|
-
from ast_java import ONTOLOGY_VERSION
|
|
1237
|
-
from absence_vocab import VocabularyIndex, VOCAB_INDEX_FILENAME
|
|
1236
|
+
from java_codebase_rag.ast.ast_java import ONTOLOGY_VERSION
|
|
1237
|
+
from java_codebase_rag.absence.absence_vocab import VocabularyIndex, VOCAB_INDEX_FILENAME
|
|
1238
1238
|
|
|
1239
1239
|
cfg = _resolve_cfg(args)
|
|
1240
1240
|
try:
|
|
@@ -1565,7 +1565,7 @@ def _build_node_filter_or_error(filter_dict: dict):
|
|
|
1565
1565
|
A bad enum (e.g. ``--role FOO``) should be a user-facing validation error,
|
|
1566
1566
|
not an internal crash. Returns ``(node_filter, None)`` on success.
|
|
1567
1567
|
"""
|
|
1568
|
-
import mcp_v2
|
|
1568
|
+
from java_codebase_rag.mcp import mcp_v2
|
|
1569
1569
|
|
|
1570
1570
|
from java_codebase_rag.jrag_envelope import Envelope
|
|
1571
1571
|
from pydantic import ValidationError
|
|
@@ -1591,7 +1591,7 @@ def _cmd_find_filter_mode(
|
|
|
1591
1591
|
limit: int,
|
|
1592
1592
|
) -> int:
|
|
1593
1593
|
"""Find filter mode: build NodeFilter and call find_v2."""
|
|
1594
|
-
import mcp_v2
|
|
1594
|
+
from java_codebase_rag.mcp import mcp_v2
|
|
1595
1595
|
|
|
1596
1596
|
from java_codebase_rag.jrag_envelope import Envelope, next_actions_hook, normalize_enum, to_envelope_rows
|
|
1597
1597
|
from java_codebase_rag.jrag_render import render
|
|
@@ -1674,7 +1674,7 @@ def _cmd_find_filter_mode(
|
|
|
1674
1674
|
|
|
1675
1675
|
|
|
1676
1676
|
def _cmd_inspect(args: argparse.Namespace) -> int:
|
|
1677
|
-
import mcp_v2
|
|
1677
|
+
from java_codebase_rag.mcp import mcp_v2
|
|
1678
1678
|
|
|
1679
1679
|
from java_codebase_rag.jrag_envelope import Envelope, next_actions_hook, resolve_query
|
|
1680
1680
|
from java_codebase_rag.jrag_render import render
|
|
@@ -2574,7 +2574,7 @@ def _cmd_callees(args: argparse.Namespace) -> int:
|
|
|
2574
2574
|
# Producer root -> ASYNC_CALLS out (Producer -> :Route, the kafka_topic
|
|
2575
2575
|
# Route this producer publishes to — NOT a :Producer node).
|
|
2576
2576
|
if node.kind in ("client", "producer"):
|
|
2577
|
-
import mcp_v2
|
|
2577
|
+
from java_codebase_rag.mcp import mcp_v2
|
|
2578
2578
|
|
|
2579
2579
|
edge_types = ["HTTP_CALLS"] if node.kind == "client" else ["ASYNC_CALLS"]
|
|
2580
2580
|
out = mcp_v2.neighbors_v2(
|
|
@@ -2710,7 +2710,7 @@ def _cmd_callees(args: argparse.Namespace) -> int:
|
|
|
2710
2710
|
|
|
2711
2711
|
|
|
2712
2712
|
def _cmd_hierarchy(args: argparse.Namespace) -> int:
|
|
2713
|
-
import mcp_v2
|
|
2713
|
+
from java_codebase_rag.mcp import mcp_v2
|
|
2714
2714
|
|
|
2715
2715
|
cfg, graph, rc = _load_graph_or_error(args)
|
|
2716
2716
|
if rc:
|
|
@@ -2863,7 +2863,7 @@ def _cmd_subclasses(args: argparse.Namespace) -> int:
|
|
|
2863
2863
|
|
|
2864
2864
|
|
|
2865
2865
|
def _cmd_overrides(args: argparse.Namespace) -> int:
|
|
2866
|
-
import mcp_v2
|
|
2866
|
+
from java_codebase_rag.mcp import mcp_v2
|
|
2867
2867
|
|
|
2868
2868
|
cfg, graph, rc = _load_graph_or_error(args)
|
|
2869
2869
|
if rc:
|
|
@@ -2916,7 +2916,7 @@ def _cmd_overrides(args: argparse.Namespace) -> int:
|
|
|
2916
2916
|
|
|
2917
2917
|
|
|
2918
2918
|
def _cmd_overridden_by(args: argparse.Namespace) -> int:
|
|
2919
|
-
import mcp_v2
|
|
2919
|
+
from java_codebase_rag.mcp import mcp_v2
|
|
2920
2920
|
|
|
2921
2921
|
cfg, graph, rc = _load_graph_or_error(args)
|
|
2922
2922
|
if rc:
|
|
@@ -3224,7 +3224,7 @@ def _cmd_flow(args: argparse.Namespace) -> int:
|
|
|
3224
3224
|
|
|
3225
3225
|
|
|
3226
3226
|
def _cmd_dependencies(args: argparse.Namespace) -> int:
|
|
3227
|
-
import mcp_v2
|
|
3227
|
+
from java_codebase_rag.mcp import mcp_v2
|
|
3228
3228
|
|
|
3229
3229
|
cfg, graph, rc = _load_graph_or_error(args)
|
|
3230
3230
|
if rc:
|
|
@@ -3559,7 +3559,7 @@ def _cmd_outline(args: argparse.Namespace) -> int:
|
|
|
3559
3559
|
start_line<1). ``--limit`` caps the entry count (the file's symbol table
|
|
3560
3560
|
is otherwise unbounded); ``truncated`` is set when more entries exist.
|
|
3561
3561
|
"""
|
|
3562
|
-
from ladybug_queries import find_symbols_in_file_range
|
|
3562
|
+
from java_codebase_rag.graph.ladybug_queries import find_symbols_in_file_range
|
|
3563
3563
|
|
|
3564
3564
|
from java_codebase_rag.jrag_envelope import Envelope, mark_truncated, next_actions_hook
|
|
3565
3565
|
from java_codebase_rag.jrag_render import render
|
|
@@ -3629,8 +3629,8 @@ def _cmd_imports(args: argparse.Namespace) -> int:
|
|
|
3629
3629
|
a node per import: resolved graph Symbol when resolve_v2 hits (status=one),
|
|
3630
3630
|
or an unresolved placeholder carrying the raw FQN otherwise.
|
|
3631
3631
|
"""
|
|
3632
|
-
from ast_java import parse_java
|
|
3633
|
-
from resolve_service import resolve_v2
|
|
3632
|
+
from java_codebase_rag.ast.ast_java import parse_java
|
|
3633
|
+
from java_codebase_rag.analysis.resolve_service import resolve_v2
|
|
3634
3634
|
|
|
3635
3635
|
from java_codebase_rag.jrag_envelope import Envelope, next_actions_hook
|
|
3636
3636
|
from java_codebase_rag.jrag_render import render
|
|
@@ -4195,7 +4195,7 @@ def _zero_result_guidance(args: argparse.Namespace, graph) -> str | None:
|
|
|
4195
4195
|
empty (truly no matches for this query), or the probe itself errored
|
|
4196
4196
|
(non-fatal — the empty result still renders).
|
|
4197
4197
|
"""
|
|
4198
|
-
import mcp_v2
|
|
4198
|
+
from java_codebase_rag.mcp import mcp_v2
|
|
4199
4199
|
from collections import Counter
|
|
4200
4200
|
|
|
4201
4201
|
from java_codebase_rag.jrag_envelope import normalize_enum
|
|
@@ -4250,7 +4250,7 @@ def _cmd_search(args: argparse.Namespace) -> int:
|
|
|
4250
4250
|
truncation, and renders. --fuzzy is rejected IN-HANDLER (not argparse-exit)
|
|
4251
4251
|
so the error carries the canonical envelope shape.
|
|
4252
4252
|
"""
|
|
4253
|
-
import mcp_v2
|
|
4253
|
+
from java_codebase_rag.mcp import mcp_v2
|
|
4254
4254
|
|
|
4255
4255
|
from java_codebase_rag.jrag_envelope import Envelope, mark_truncated, next_actions_hook, normalize_enum
|
|
4256
4256
|
from java_codebase_rag.jrag_render import render
|
|
@@ -4375,7 +4375,7 @@ def _cmd_search(args: argparse.Namespace) -> int:
|
|
|
4375
4375
|
# explain renderer from there would crash `jrag search ... --explain` on the
|
|
4376
4376
|
# exact Intel install that runs the lexical path. search_scoring is
|
|
4377
4377
|
# dependency-free and always installed, so the explain import works everywhere.
|
|
4378
|
-
from search_scoring import explain_score_components
|
|
4378
|
+
from java_codebase_rag.search.search_scoring import explain_score_components
|
|
4379
4379
|
comps = d.get("score_components")
|
|
4380
4380
|
d["explain"] = explain_score_components(
|
|
4381
4381
|
comps,
|
|
@@ -16,10 +16,11 @@ 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
|
-
from absence_types import AbsenceDiagnosis
|
|
22
|
-
from graph_types import NodeRef
|
|
22
|
+
from java_codebase_rag.absence.absence_types import AbsenceDiagnosis
|
|
23
|
+
from java_codebase_rag.graph.graph_types import NodeRef
|
|
23
24
|
|
|
24
25
|
__all__ = [
|
|
25
26
|
"Envelope",
|
|
@@ -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
|
|
|
@@ -532,10 +545,10 @@ def resolve_query(
|
|
|
532
545
|
means ``--service`` disambiguates which microservice's route is selected.
|
|
533
546
|
"""
|
|
534
547
|
# Lazy imports — keeps build_parser() / `jrag --help` free of resolve/ladybug.
|
|
535
|
-
from resolve_service import resolve_v2
|
|
548
|
+
from java_codebase_rag.analysis.resolve_service import resolve_v2
|
|
536
549
|
|
|
537
550
|
if graph is None:
|
|
538
|
-
from ladybug_queries import LadybugGraph
|
|
551
|
+
from java_codebase_rag.graph.ladybug_queries import LadybugGraph
|
|
539
552
|
|
|
540
553
|
graph = LadybugGraph.get(str(cfg.ladybug_path))
|
|
541
554
|
|
java_codebase_rag/jrag_hints.py
CHANGED
|
@@ -143,7 +143,7 @@ def next_actions(
|
|
|
143
143
|
# EDGE_SCHEMA is the canonical label set; we use it to skip labels we don't
|
|
144
144
|
# recognize (avoids emitting hints for spurious / future edge types the
|
|
145
145
|
# command map doesn't cover).
|
|
146
|
-
from java_ontology import EDGE_SCHEMA
|
|
146
|
+
from java_codebase_rag.graph.java_ontology import EDGE_SCHEMA
|
|
147
147
|
|
|
148
148
|
# Known virtual labels not in EDGE_SCHEMA (describe-time rollup constructs).
|
|
149
149
|
_VIRTUAL_LABELS = frozenset({"OVERRIDDEN_BY"})
|
java_codebase_rag/jrag_render.py
CHANGED
|
@@ -12,7 +12,7 @@ from __future__ import annotations
|
|
|
12
12
|
|
|
13
13
|
from typing import Any
|
|
14
14
|
|
|
15
|
-
from absence_types import AbsenceDiagnosis
|
|
15
|
+
from java_codebase_rag.absence.absence_types import AbsenceDiagnosis
|
|
16
16
|
from java_codebase_rag.jrag_envelope import Envelope, project_envelope, simple_name
|
|
17
17
|
|
|
18
18
|
__all__ = ["render", "tiered_name", "display_name"]
|
|
File without changes
|
|
@@ -13,7 +13,7 @@ from __future__ import annotations
|
|
|
13
13
|
import json
|
|
14
14
|
from typing import Any, Literal, NamedTuple
|
|
15
15
|
|
|
16
|
-
from java_ontology import EDGE_SCHEMA, FUZZY_STRATEGY_SET
|
|
16
|
+
from java_codebase_rag.graph.java_ontology import EDGE_SCHEMA, FUZZY_STRATEGY_SET
|
|
17
17
|
|
|
18
18
|
# Normative schema description (propose §3.1) — imported by ``mcp_v2`` for Field(description=...).
|
|
19
19
|
MCP_HINTS_STRUCTURED_FIELD_DESCRIPTION = (
|
|
@@ -31,10 +31,10 @@ if TYPE_CHECKING:
|
|
|
31
31
|
# installs ship without torch/lancedb); it is imported lazily in _get_sentence_transformer.
|
|
32
32
|
from sentence_transformers import SentenceTransformer
|
|
33
33
|
|
|
34
|
-
from absence_types import AbsenceDiagnosis
|
|
35
|
-
from absence_diagnosis import diagnose
|
|
36
|
-
from absence_vocab import get_vocabulary_index
|
|
37
|
-
from graph_types import (
|
|
34
|
+
from java_codebase_rag.absence.absence_types import AbsenceDiagnosis
|
|
35
|
+
from java_codebase_rag.absence.absence_diagnosis import diagnose
|
|
36
|
+
from java_codebase_rag.absence.absence_vocab import get_vocabulary_index
|
|
37
|
+
from java_codebase_rag.graph.graph_types import (
|
|
38
38
|
NodeRef,
|
|
39
39
|
StructuredHint,
|
|
40
40
|
_hints_or_skip,
|
|
@@ -43,11 +43,11 @@ from graph_types import (
|
|
|
43
43
|
_to_structured_hints,
|
|
44
44
|
set_hints_enabled,
|
|
45
45
|
)
|
|
46
|
-
from index_common import SBERT_MODEL
|
|
46
|
+
from java_codebase_rag.search.index_common import SBERT_MODEL
|
|
47
47
|
from java_codebase_rag.config import resolved_sbert_model_for_process_env
|
|
48
|
-
from java_ontology import EDGE_SCHEMA
|
|
49
|
-
from ladybug_queries import LadybugGraph, OVERRIDE_AXIS_COMPOSED_EDGE_TYPES
|
|
50
|
-
from mcp_hints import MCP_HINTS_STRUCTURED_FIELD_DESCRIPTION
|
|
48
|
+
from java_codebase_rag.graph.java_ontology import EDGE_SCHEMA
|
|
49
|
+
from java_codebase_rag.graph.ladybug_queries import LadybugGraph, OVERRIDE_AXIS_COMPOSED_EDGE_TYPES
|
|
50
|
+
from java_codebase_rag.mcp.mcp_hints import MCP_HINTS_STRUCTURED_FIELD_DESCRIPTION
|
|
51
51
|
|
|
52
52
|
# The vector stack (lancedb/torch, reached via search_lancedb) is optional — it is absent on
|
|
53
53
|
# graph-only installs (macOS Intel). Import eagerly when available so ``run_search``/``TABLES``
|
|
@@ -55,7 +55,7 @@ from mcp_hints import MCP_HINTS_STRUCTURED_FIELD_DESCRIPTION
|
|
|
55
55
|
# fall back to sentinels on ImportError so importing this module never fails and ``search_v2``
|
|
56
56
|
# can return a clean "vector search unavailable" envelope instead of crashing.
|
|
57
57
|
try:
|
|
58
|
-
from search_lancedb import TABLES, run_search
|
|
58
|
+
from java_codebase_rag.search.search_lancedb import TABLES, run_search
|
|
59
59
|
except ImportError: # graph-only install: no torch/lancedb
|
|
60
60
|
TABLES = {}
|
|
61
61
|
run_search = None
|
|
@@ -924,7 +924,7 @@ def search_v2(
|
|
|
924
924
|
# try -> success=False. It returns [] for sql/yaml (advisory below) and for
|
|
925
925
|
# empty-but-valid results.
|
|
926
926
|
try:
|
|
927
|
-
from search_lexical import run_lexical_search
|
|
927
|
+
from java_codebase_rag.search.search_lexical import run_lexical_search
|
|
928
928
|
except ImportError: # pragma: no cover - search_lexical has no heavy deps
|
|
929
929
|
run_lexical_search = None # type: ignore[assignment]
|
|
930
930
|
if run_lexical_search is None:
|
|
@@ -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, "
|
|
@@ -1711,7 +1725,7 @@ def neighbors_v2(
|
|
|
1711
1725
|
# RETURN anti-pattern, which errors on stricter binders (e.g. Kùzu).
|
|
1712
1726
|
# Run one single-label query per type, RETURNing only that type's
|
|
1713
1727
|
# columns, and merge the rows. `label(e) = $label` scalar equality
|
|
1714
|
-
# (not `label(e) IN [...]`) per the
|
|
1728
|
+
# (not `label(e) IN [...]`) per the CLAUDE.md Cypher note.
|
|
1715
1729
|
rows: list[dict[str, Any]] = []
|
|
1716
1730
|
match_clause = "MATCH (a)-[e]->(b)" if direction == "out" else "MATCH (a)<-[e]-(b)"
|
|
1717
1731
|
for label in flat_labels:
|
|
@@ -1850,7 +1864,7 @@ def neighbors_v2(
|
|
|
1850
1864
|
|
|
1851
1865
|
|
|
1852
1866
|
# Re-export resolve symbols from resolve_service.py (imported here to avoid circular import)
|
|
1853
|
-
from resolve_service import ( # noqa: E402
|
|
1867
|
+
from java_codebase_rag.analysis.resolve_service import ( # noqa: E402
|
|
1854
1868
|
ResolveCandidate,
|
|
1855
1869
|
ResolveOutput,
|
|
1856
1870
|
ResolveStatus,
|
|
@@ -9,13 +9,17 @@ import time
|
|
|
9
9
|
from pathlib import Path
|
|
10
10
|
from typing import Literal
|
|
11
11
|
|
|
12
|
-
import mcp_v2
|
|
13
|
-
import resolve_service
|
|
14
|
-
from index_common import SBERT_MODEL
|
|
12
|
+
from java_codebase_rag.mcp import mcp_v2
|
|
13
|
+
from java_codebase_rag.analysis import resolve_service
|
|
14
|
+
from java_codebase_rag.search.index_common import SBERT_MODEL
|
|
15
15
|
from java_codebase_rag.cli_progress import (
|
|
16
16
|
accumulate_and_relay_subprocess_streams,
|
|
17
17
|
)
|
|
18
|
-
from java_codebase_rag.pipeline import
|
|
18
|
+
from java_codebase_rag.pipeline import (
|
|
19
|
+
VECTORS_SKIPPED_GRAPH_ONLY,
|
|
20
|
+
cocoindex_bin as resolve_cocoindex_bin,
|
|
21
|
+
vector_stack_installed,
|
|
22
|
+
)
|
|
19
23
|
from java_codebase_rag.progress import ProgressEvent
|
|
20
24
|
from java_codebase_rag._fdlimit import raise_fd_limit
|
|
21
25
|
from java_codebase_rag.config import (
|
|
@@ -25,13 +29,20 @@ from java_codebase_rag.config import (
|
|
|
25
29
|
resolved_sbert_model_for_process_env,
|
|
26
30
|
resolve_operator_config,
|
|
27
31
|
)
|
|
28
|
-
from ladybug_queries import LadybugGraph, resolve_ladybug_path
|
|
32
|
+
from java_codebase_rag.graph.ladybug_queries import LadybugGraph, resolve_ladybug_path
|
|
29
33
|
from mcp.server.fastmcp import FastMCP
|
|
30
34
|
from pydantic import BaseModel, Field
|
|
31
35
|
# NOTE: search_lancedb.TABLES is imported lazily in list_code_index_tables_payload() — it
|
|
32
36
|
# pulls lancedb/torch and is unavailable on graph-only installs (macOS Intel).
|
|
33
37
|
|
|
34
38
|
_COCOINDEX_TARGET = "java_index_flow_lancedb.py:JavaCodeIndexLance"
|
|
39
|
+
|
|
40
|
+
# Package-internal locations of the cocoindex flow and the graph builder, both
|
|
41
|
+
# executed by file path (see java_codebase_rag.pipeline). Derived from this
|
|
42
|
+
# file's location so they resolve under editable and wheel installs alike.
|
|
43
|
+
_PKG_DIR = Path(__file__).resolve().parent.parent
|
|
44
|
+
_FLOW_FILE = _PKG_DIR / "index" / "java_index_flow_lancedb.py"
|
|
45
|
+
_BUILDER_FILE = _PKG_DIR / "graph" / "build_ast_graph.py"
|
|
35
46
|
_INSTRUCTIONS = (
|
|
36
47
|
"Java codebase graph navigator over an indexed Java codebase. "
|
|
37
48
|
"Tools: search (NL/code locate), find (structured NodeFilter), describe (one node + edge_summary: stored edge-label counts and optional composed keys for type Symbols and override-axis virtual keys for method Symbols), "
|
|
@@ -114,7 +125,7 @@ class ScopeManager:
|
|
|
114
125
|
self._log_detection()
|
|
115
126
|
|
|
116
127
|
def _detect_scope(self) -> str | None:
|
|
117
|
-
from graph_enrich import detect_microservice_from_path
|
|
128
|
+
from java_codebase_rag.graph.graph_enrich import detect_microservice_from_path
|
|
118
129
|
|
|
119
130
|
candidate = detect_microservice_from_path(Path.cwd(), self.source_root)
|
|
120
131
|
if candidate is None:
|
|
@@ -300,7 +311,7 @@ def _graph_meta_output() -> GraphMetaOutput:
|
|
|
300
311
|
|
|
301
312
|
def list_code_index_tables_payload() -> IndexInfoOutput:
|
|
302
313
|
try:
|
|
303
|
-
from search_lancedb import TABLES
|
|
314
|
+
from java_codebase_rag.search.search_lancedb import TABLES
|
|
304
315
|
|
|
305
316
|
tables = dict(TABLES)
|
|
306
317
|
except ImportError:
|
|
@@ -333,7 +344,7 @@ async def _run_graph_phase(
|
|
|
333
344
|
A missing builder or a spawn failure returns ``started=False`` with the graph
|
|
334
345
|
code carrying the reason (``None`` for missing builder, ``-1`` for spawn error).
|
|
335
346
|
"""
|
|
336
|
-
builder =
|
|
347
|
+
builder = _BUILDER_FILE
|
|
337
348
|
if not builder.is_file():
|
|
338
349
|
return None, "", "", False
|
|
339
350
|
try:
|
|
@@ -415,7 +426,15 @@ async def run_refresh_pipeline(
|
|
|
415
426
|
phases_run=["graph"] if started else [],
|
|
416
427
|
optimize_error=None,
|
|
417
428
|
)
|
|
418
|
-
|
|
429
|
+
# Resolve cocoindex the same way the sync path does (pipeline.cocoindex_bin):
|
|
430
|
+
# next to the interpreter first, then via PATH (``shutil.which``). A console
|
|
431
|
+
# script legitimately lives away from the venv python — e.g. ``pip install
|
|
432
|
+
# --user`` places it in ``~/.local/bin``. Honoring PATH keeps ``reprocess``
|
|
433
|
+
# (no flags) consistent with init/increment/``reprocess --vectors-only``,
|
|
434
|
+
# which all resolve through cocoindex_bin(); previously this path checked
|
|
435
|
+
# only next-to-python and failed with "cocoindex not found next to Python"
|
|
436
|
+
# even though cocoindex was reachable on PATH.
|
|
437
|
+
cocoindex_bin = resolve_cocoindex_bin()
|
|
419
438
|
if not cocoindex_bin.is_file():
|
|
420
439
|
# 127 pre-spawn: emit a terminal failed vectors event so the renderer's
|
|
421
440
|
# task doesn't hang at running (matches the sync pipeline path).
|
|
@@ -423,23 +442,21 @@ async def run_refresh_pipeline(
|
|
|
423
442
|
on_progress(ProgressEvent(kind="vectors", phase=None, pass_=None, done=None, total=None, status="failed", elapsed_s=None))
|
|
424
443
|
return RefreshIndexOutput(
|
|
425
444
|
success=False,
|
|
426
|
-
message=
|
|
445
|
+
message=(
|
|
446
|
+
f"cocoindex not found next to Python ({cocoindex_bin}) or on PATH; "
|
|
447
|
+
"install cocoindex[lancedb] into the same venv or add its bin/ to PATH."
|
|
448
|
+
),
|
|
427
449
|
phases_run=[],
|
|
428
450
|
)
|
|
429
|
-
flow_path =
|
|
430
|
-
bundle_dir = Path(__file__).resolve().parent
|
|
451
|
+
flow_path = _FLOW_FILE
|
|
431
452
|
if not flow_path.is_file():
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
success=False,
|
|
440
|
-
message=f"java_index_flow_lancedb.py not found under {root} nor {bundle_dir}",
|
|
441
|
-
phases_run=[],
|
|
442
|
-
)
|
|
453
|
+
if on_progress is not None:
|
|
454
|
+
on_progress(ProgressEvent(kind="vectors", phase=None, pass_=None, done=None, total=None, status="failed", elapsed_s=None))
|
|
455
|
+
return RefreshIndexOutput(
|
|
456
|
+
success=False,
|
|
457
|
+
message=f"java_index_flow_lancedb.py not found at {flow_path}",
|
|
458
|
+
phases_run=[],
|
|
459
|
+
)
|
|
443
460
|
proc: asyncio.subprocess.Process | None = None
|
|
444
461
|
out_b, err_b = b"", b""
|
|
445
462
|
# DROP the Lance target tables so the update takes the fast INSERT path
|
java_codebase_rag/pipeline.py
CHANGED
|
@@ -29,8 +29,17 @@ VECTORS_SKIPPED_GRAPH_ONLY = (
|
|
|
29
29
|
)
|
|
30
30
|
|
|
31
31
|
|
|
32
|
-
|
|
33
|
-
|
|
32
|
+
# Package-internal locations of the cocoindex flow definition and the graph
|
|
33
|
+
# builder. Both are executed *by file path* — cocoindex loads the flow via a
|
|
34
|
+
# ``file:Class`` target (COCOINDEX_TARGET below) and the builder runs as
|
|
35
|
+
# ``python <path>`` — so we must resolve their paths without importing them
|
|
36
|
+
# (this module deliberately stays free of heavy ML imports at import time).
|
|
37
|
+
# Derived from this file's location so they resolve under both editable and
|
|
38
|
+
# wheel installs.
|
|
39
|
+
_PKG_DIR = Path(__file__).resolve().parent
|
|
40
|
+
_FLOW_DIR = _PKG_DIR / "index"
|
|
41
|
+
_FLOW_FILE = _FLOW_DIR / "java_index_flow_lancedb.py"
|
|
42
|
+
_BUILDER_FILE = _PKG_DIR / "graph" / "build_ast_graph.py"
|
|
34
43
|
|
|
35
44
|
|
|
36
45
|
def cocoindex_bin() -> Path:
|
|
@@ -266,7 +275,7 @@ def _run_cocoindex_update_impl(
|
|
|
266
275
|
stdout="",
|
|
267
276
|
stderr=f"cocoindex not found: {exe}",
|
|
268
277
|
)
|
|
269
|
-
bd =
|
|
278
|
+
bd = _FLOW_DIR
|
|
270
279
|
flow = bd / "java_index_flow_lancedb.py"
|
|
271
280
|
if not flow.is_file():
|
|
272
281
|
if on_progress is not None:
|
|
@@ -343,7 +352,7 @@ def run_cocoindex_drop(env: dict[str, str], *, quiet: bool) -> subprocess.Comple
|
|
|
343
352
|
stdout="",
|
|
344
353
|
stderr=f"cocoindex not found: {exe}",
|
|
345
354
|
)
|
|
346
|
-
bd =
|
|
355
|
+
bd = _FLOW_DIR
|
|
347
356
|
cmd = [str(exe), "drop", COCOINDEX_TARGET, "-f"]
|
|
348
357
|
if quiet:
|
|
349
358
|
cmd.append("-q")
|
|
@@ -366,7 +375,7 @@ def run_build_ast_graph(
|
|
|
366
375
|
on_progress: Callable[[ProgressEvent], None] | None = None,
|
|
367
376
|
on_progress_console: object | None = None,
|
|
368
377
|
) -> subprocess.CompletedProcess[str]:
|
|
369
|
-
builder =
|
|
378
|
+
builder = _BUILDER_FILE
|
|
370
379
|
if not builder.is_file():
|
|
371
380
|
return subprocess.CompletedProcess(
|
|
372
381
|
args=[],
|
|
@@ -424,7 +433,7 @@ def run_incremental_graph(
|
|
|
424
433
|
on_progress_console: object | None = None,
|
|
425
434
|
) -> subprocess.CompletedProcess[str]:
|
|
426
435
|
"""Run incremental graph rebuild by passing --incremental flag to build_ast_graph.py."""
|
|
427
|
-
builder =
|
|
436
|
+
builder = _BUILDER_FILE
|
|
428
437
|
if not builder.is_file():
|
|
429
438
|
return subprocess.CompletedProcess(
|
|
430
439
|
args=[],
|
|
File without changes
|
|
@@ -15,15 +15,15 @@ import lancedb
|
|
|
15
15
|
import numpy as np
|
|
16
16
|
from sentence_transformers import SentenceTransformer
|
|
17
17
|
|
|
18
|
-
from chunk_heuristics import analyze_chunk, looks_like_code_identifier
|
|
19
|
-
from index_common import SBERT_MODEL
|
|
18
|
+
from java_codebase_rag.ast.chunk_heuristics import analyze_chunk, looks_like_code_identifier
|
|
19
|
+
from java_codebase_rag.search.index_common import SBERT_MODEL
|
|
20
20
|
from java_codebase_rag.config import maybe_expand_embedding_model_path, resolved_sbert_model_for_process_env
|
|
21
21
|
|
|
22
22
|
# Scoring & dedup primitives live in `search_scoring` (dependency-free — no
|
|
23
23
|
# lancedb/torch) so the lexical backend `search_lexical` can share them on
|
|
24
24
|
# graph-only (macOS Intel) installs where this module is unimportable. Re-exported
|
|
25
25
|
# here for backward compatibility (`from search_lancedb import _clamp01`, etc.).
|
|
26
|
-
from search_scoring import ( # noqa: F401
|
|
26
|
+
from java_codebase_rag.search.search_scoring import ( # noqa: F401
|
|
27
27
|
DEDUP_OVERFETCH,
|
|
28
28
|
_ACTION_VERB_BONUS,
|
|
29
29
|
_ACTION_VERB_PREFIXES,
|
|
@@ -522,7 +522,7 @@ def _graph_expand_merge(
|
|
|
522
522
|
"""Expand vector top-k through the LadybugDB graph and fuse (RRF) with the original list."""
|
|
523
523
|
# Lazy import so the module works without ladybug installed when graph_expand=False.
|
|
524
524
|
try:
|
|
525
|
-
from ladybug_queries import LadybugGraph
|
|
525
|
+
from java_codebase_rag.graph.ladybug_queries import LadybugGraph
|
|
526
526
|
except Exception:
|
|
527
527
|
return vector_rows
|
|
528
528
|
|
|
@@ -21,8 +21,8 @@ import os
|
|
|
21
21
|
from pathlib import Path
|
|
22
22
|
from typing import TYPE_CHECKING, Any
|
|
23
23
|
|
|
24
|
-
from ladybug_queries import LadybugGraph
|
|
25
|
-
from search_scoring import (
|
|
24
|
+
from java_codebase_rag.graph.ladybug_queries import LadybugGraph
|
|
25
|
+
from java_codebase_rag.search.search_scoring import (
|
|
26
26
|
_ROLE_SCORE_WEIGHTS,
|
|
27
27
|
_TYPE_MATCH_BONUS_CAP,
|
|
28
28
|
_TYPE_MATCH_BONUS_PER_HIT,
|
|
@@ -33,7 +33,7 @@ from search_scoring import (
|
|
|
33
33
|
)
|
|
34
34
|
|
|
35
35
|
if TYPE_CHECKING:
|
|
36
|
-
from mcp_v2 import NodeFilter
|
|
36
|
+
from java_codebase_rag.mcp.mcp_v2 import NodeFilter
|
|
37
37
|
|
|
38
38
|
# Lexical relevance weights. The class/file name is the strongest discovery
|
|
39
39
|
# signal (mirrors the type-name bonus rationale in search_scoring); fqn/package
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
java_codebase_rag/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
|
2
|
+
java_codebase_rag/_fdlimit.py,sha256=vkwjsPbZfxzZ2DZTPWO5DxtuNlLzOADzIq07iYX7GCU,2465
|
|
3
|
+
java_codebase_rag/_stdio.py,sha256=TDNbpt2EP0_Zd622ihdlKwlMfxkKHWOfgLVcU6TcNbo,1458
|
|
4
|
+
java_codebase_rag/_version.py,sha256=Dnoh_a-c13fqPQ-HV9CsSPbFUkihUJl_z5CACW4qDyA,1365
|
|
5
|
+
java_codebase_rag/cli.py,sha256=ttPjHgruxsNm69IAjy_UXNPPi-IYb0WjqKBVz7WHMPQ,45604
|
|
6
|
+
java_codebase_rag/cli_format.py,sha256=CT7-xdwZ0bMCdP68_UOwkvm-mnLluU3LutlM-mDNk60,1839
|
|
7
|
+
java_codebase_rag/cli_progress.py,sha256=q6Wh97yzLGs1B8UFk_WAKivfQu7Y5RnUUE-T2YHWkIs,3237
|
|
8
|
+
java_codebase_rag/config.py,sha256=VPs69os_3co3UPSoBVhpfoVnqDaPJ6Ycbk8A4AyXZOo,30548
|
|
9
|
+
java_codebase_rag/installer.py,sha256=c-_tR1Ct_O3yhmruFRnDoM1Wilz-igD9qdkDPsNqLMI,79934
|
|
10
|
+
java_codebase_rag/jrag.py,sha256=7-erzOy24tp6_iE0zx-3TQ7jqPaM46XQzS-NM-I30EM,199857
|
|
11
|
+
java_codebase_rag/jrag_envelope.py,sha256=I5q7E3DmuJBnDl1iv7bW2NucPJ2YxlmNEtM2dau18Vw,48730
|
|
12
|
+
java_codebase_rag/jrag_hints.py,sha256=aazBRI3pOeyq2IjQuoMzDkA-1cB_tTGbVcguX3BzOiQ,9286
|
|
13
|
+
java_codebase_rag/jrag_render.py,sha256=lRbavEdq395hgZfDoqlKggvilddpJ98f5KNxw-iW-xU,34943
|
|
14
|
+
java_codebase_rag/lance_optimize.py,sha256=HI3aFebP1fenLL6Cav1jMG5kLXSrHLndO_MIJY6qQVo,11977
|
|
15
|
+
java_codebase_rag/pipeline.py,sha256=5xCCjjGE0bpA0q97yKipWAJIAkxDGPvGvhEExSTF4BQ,18891
|
|
16
|
+
java_codebase_rag/progress.py,sha256=2IxdMALDM0wAQCyJrrfZ975zM_85C-4BfHxf4AtYifE,23212
|
|
17
|
+
java_codebase_rag/absence/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
18
|
+
java_codebase_rag/absence/absence_diagnosis.py,sha256=RJNlycQY28fL5h1e7Kupaff-xabLzfzbbXLM-VSReBc,27631
|
|
19
|
+
java_codebase_rag/absence/absence_types.py,sha256=BHOwTVrUAiALFuh4CxX-1hHvxmoG2zYSAcMmJocGZAc,4244
|
|
20
|
+
java_codebase_rag/absence/absence_vocab.py,sha256=t2OYhel70j6ZSlP01xh6kvlvTdygaF6IBEhuTThCiaw,16366
|
|
21
|
+
java_codebase_rag/analysis/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
22
|
+
java_codebase_rag/analysis/pr_analysis.py,sha256=b5VTur9_ffB_SCcZ-O8-cYWXwLc7BP-S02hSeTgz9hs,18418
|
|
23
|
+
java_codebase_rag/analysis/resolve_service.py,sha256=vVnCRXDQlFhQfIZljh4Jk5lL63IXC7lEArRWk0Hcs34,28715
|
|
24
|
+
java_codebase_rag/ast/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
25
|
+
java_codebase_rag/ast/ast_java.py,sha256=8na7Sw7UBOMr6KmcQck1U_AMct2UShOn9Jx5o75Y_j8,99513
|
|
26
|
+
java_codebase_rag/ast/brownfield_events.py,sha256=yxXkKDgMb3VPtaiakGzncHM_EGnda8xIue6w90yYp8s,2055
|
|
27
|
+
java_codebase_rag/ast/chunk_heuristics.py,sha256=aQk2NOKxzUdqoUAJUO3G3LE0MN_bYZWNLQ0tkmj5uts,1813
|
|
28
|
+
java_codebase_rag/graph/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
29
|
+
java_codebase_rag/graph/build_ast_graph.py,sha256=xrTz_iGwRzJWWcS-0mPTCVyhsxuApWCkQnf7LOPnWT4,176547
|
|
30
|
+
java_codebase_rag/graph/graph_enrich.py,sha256=51Q8aE0Mw09SVYBESd3H57IftsOpfkwgJV2ibt0RzwE,72598
|
|
31
|
+
java_codebase_rag/graph/graph_types.py,sha256=pezEpYxws4degBmV6V0MHLyg5x9XhixfPgZ-7fhNrVM,4835
|
|
32
|
+
java_codebase_rag/graph/java_ontology.py,sha256=Fa6iCsrBLPc2lCl-6VR2qHN4Q9Ix8Gps3thQhIEGjrM,17241
|
|
33
|
+
java_codebase_rag/graph/ladybug_queries.py,sha256=E1m3VhCC4FfAefeuar8p-Slo_HldpTl5FybN9DO_CnM,100710
|
|
34
|
+
java_codebase_rag/graph/path_filtering.py,sha256=R--XzI51LXBu5IBKMCnJWbkNr6I5d-SDmltyQQnWco0,17674
|
|
35
|
+
java_codebase_rag/index/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
36
|
+
java_codebase_rag/index/java_index_flow_lancedb.py,sha256=RX3NpWIUfghaxDIUBQvOGedtK7ebsJcqbABkD2z_B3Y,29770
|
|
37
|
+
java_codebase_rag/index/java_index_v1_common.py,sha256=nF1KrSqboF_RRvWerG9knRRFmWwsrG_CvhgnsoZ8KqA,1154
|
|
38
|
+
java_codebase_rag/install_data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
39
|
+
java_codebase_rag/install_data/agents/explorer-rag-cli.md,sha256=bVmmzrBSSamMz7hDIKxL5alAZOXsJ_Km8TQnCcxDad0,10292
|
|
40
|
+
java_codebase_rag/install_data/agents/explorer-rag-enhanced.md,sha256=gZsNFbuK0lSnOIlplbbS_muz2ozokJqvFUv65QM0NDM,10406
|
|
41
|
+
java_codebase_rag/install_data/skills/explore-codebase/SKILL.md,sha256=A-v2dueVnxwBzBlxoRjZ2zOJk8DranLQ1TElwn94h0s,11529
|
|
42
|
+
java_codebase_rag/install_data/skills/explore-codebase-cli/SKILL.md,sha256=K2qwZqk2xPxjPxXtUHvax1Ug2J7nBYeMTIjRznO100g,10059
|
|
43
|
+
java_codebase_rag/mcp/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
44
|
+
java_codebase_rag/mcp/mcp_hints.py,sha256=eJzm_HpfaEKblT4-FW_9bgvDemZYs3E6exGeznflrXM,42536
|
|
45
|
+
java_codebase_rag/mcp/mcp_v2.py,sha256=h5cvUcU4sDBQqoGFjIR5va8Cr_cIElhPzhx4EnDjFfk,77792
|
|
46
|
+
java_codebase_rag/mcp/server.py,sha256=DJGlx8U5SD4Pe6Ro71OeFHi6HsYZ4r4uINn7R7uSKk4,40935
|
|
47
|
+
java_codebase_rag/search/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
48
|
+
java_codebase_rag/search/index_common.py,sha256=HT6FKHFJ084eFvd3fR1j8z8gf4eWoPHVW8GXLpw464I,285
|
|
49
|
+
java_codebase_rag/search/search_lancedb.py,sha256=1A_yDdZSn7MV7ybgErQvgOwLIoCC7ofZ2tfLk8hvWhE,34582
|
|
50
|
+
java_codebase_rag/search/search_lexical.py,sha256=vXiZkOHMozZuq2aLLTttO1OrCt87aSV9TkmNUOC-pZA,14321
|
|
51
|
+
java_codebase_rag/search/search_scoring.py,sha256=SSs2GLvHCB_gsKPo0N-YPGeAVNWx-TsXXPJO2JPsOOY,12321
|
|
52
|
+
java_codebase_rag-0.9.7.dist-info/licenses/LICENSE,sha256=gxvtiHtuviR_q8ZAjWw-QTcF3DyPzg6ZY-lQrr8OPpw,1068
|
|
53
|
+
java_codebase_rag-0.9.7.dist-info/METADATA,sha256=FnWq4FTAO_VFNrrh0vpZ_wZeCuh0jHrUSQsq66xbEnQ,20331
|
|
54
|
+
java_codebase_rag-0.9.7.dist-info/WHEEL,sha256=K260EYznzXsJYBQGqmI8VTxEdiZYNvDZwW9cBh9-_MA,91
|
|
55
|
+
java_codebase_rag-0.9.7.dist-info/entry_points.txt,sha256=pa6yYHbHG7ZZ7G9ZJgYK1Fz6eR9okldPLo7qLY2THuo,190
|
|
56
|
+
java_codebase_rag-0.9.7.dist-info/top_level.txt,sha256=u2i_IKLLOkYyNE32m4TIED0vtKtQDdPEVqRtNuhC1Hk,18
|
|
57
|
+
java_codebase_rag-0.9.7.dist-info/RECORD,,
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
java_codebase_rag
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
absence_diagnosis.py,sha256=EorBpkVM5LRWxaTbmbQ3eo6Ew_V7r6enTgtXfcjqzfw,27533
|
|
2
|
-
absence_types.py,sha256=ukDy1GKgebCYdM0OYJ7a5xoI82M2wd0i0KEJwxQFGlo,4220
|
|
3
|
-
absence_vocab.py,sha256=yySRdonAR8hXv0YpTgvaUV0UzihvbvUuSoIXJa5WBiU,15897
|
|
4
|
-
ast_java.py,sha256=1E5XU5lsc1Ltyv96kSv5VNhRl_KRTsYeHG_qDLgPMcc,99419
|
|
5
|
-
brownfield_events.py,sha256=yxXkKDgMb3VPtaiakGzncHM_EGnda8xIue6w90yYp8s,2055
|
|
6
|
-
build_ast_graph.py,sha256=scaC7TnmmmrjAv3R3qy_30kLb2DH4w7lznLxjDCntOs,176403
|
|
7
|
-
chunk_heuristics.py,sha256=aQk2NOKxzUdqoUAJUO3G3LE0MN_bYZWNLQ0tkmj5uts,1813
|
|
8
|
-
graph_enrich.py,sha256=CYc2K7Zw_CTefaJkL9h6nZmvw3uN8XbIkg4iYQ-ICY0,72528
|
|
9
|
-
graph_types.py,sha256=bf8EEkvWSyRxFQgycTnxxZQwlikLZSU3B-U1Z1cFQtg,4789
|
|
10
|
-
index_common.py,sha256=HT6FKHFJ084eFvd3fR1j8z8gf4eWoPHVW8GXLpw464I,285
|
|
11
|
-
java_index_flow_lancedb.py,sha256=kZh8HgwtGV8Ul_pwdBS7g62hVvKkk8EXTk-qr6NNba8,29676
|
|
12
|
-
java_index_v1_common.py,sha256=nF1KrSqboF_RRvWerG9knRRFmWwsrG_CvhgnsoZ8KqA,1154
|
|
13
|
-
java_ontology.py,sha256=eUGFa96GV_09s2f2sWSMdqYmoxU3-1pyU2iipvcDjG0,17219
|
|
14
|
-
ladybug_queries.py,sha256=SXXNcYxdXCHcQ6SBZdZyqAa-hv5_OFaKsfNx4zVtPgY,100688
|
|
15
|
-
mcp_hints.py,sha256=zp-4cnOmbYD0YovmZiLS2oGcvWcWE7n8jKVz4_xifno,42512
|
|
16
|
-
mcp_v2.py,sha256=Q69-0IOna1XRG06RcEFEsS-YucuBh60sAVIIDKoOnBc,76688
|
|
17
|
-
path_filtering.py,sha256=R--XzI51LXBu5IBKMCnJWbkNr6I5d-SDmltyQQnWco0,17674
|
|
18
|
-
pr_analysis.py,sha256=zrmZZD5yotJtM02Kif6_jgI_oeformOao793akp0N6Y,18394
|
|
19
|
-
resolve_service.py,sha256=EAfWlGQ4U1qKoPCfZ7BZUUy8pm0w9tldga3Krw0_GO4,28543
|
|
20
|
-
search_lancedb.py,sha256=LmratGpyEKcCYohXVTapjGd-rk_kryS93oD43foGZeQ,34486
|
|
21
|
-
search_lexical.py,sha256=6U0SgRH36Qmh3IIPzMi553ztW7MCnCvg5cSlMpxIdu8,14250
|
|
22
|
-
search_scoring.py,sha256=SSs2GLvHCB_gsKPo0N-YPGeAVNWx-TsXXPJO2JPsOOY,12321
|
|
23
|
-
server.py,sha256=SWh7hZshzVuhYqEm6Leq1GS2VP6olml4dz9nrGwf-KM,39889
|
|
24
|
-
java_codebase_rag/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
|
25
|
-
java_codebase_rag/_fdlimit.py,sha256=vkwjsPbZfxzZ2DZTPWO5DxtuNlLzOADzIq07iYX7GCU,2465
|
|
26
|
-
java_codebase_rag/_stdio.py,sha256=TDNbpt2EP0_Zd622ihdlKwlMfxkKHWOfgLVcU6TcNbo,1458
|
|
27
|
-
java_codebase_rag/_version.py,sha256=Dnoh_a-c13fqPQ-HV9CsSPbFUkihUJl_z5CACW4qDyA,1365
|
|
28
|
-
java_codebase_rag/cli.py,sha256=LcNgfOS7r8_vTckuyUbUxI7bhUyYoU_iwzUb37nT5Ts,45296
|
|
29
|
-
java_codebase_rag/cli_format.py,sha256=CT7-xdwZ0bMCdP68_UOwkvm-mnLluU3LutlM-mDNk60,1839
|
|
30
|
-
java_codebase_rag/cli_progress.py,sha256=q6Wh97yzLGs1B8UFk_WAKivfQu7Y5RnUUE-T2YHWkIs,3237
|
|
31
|
-
java_codebase_rag/config.py,sha256=VPs69os_3co3UPSoBVhpfoVnqDaPJ6Ycbk8A4AyXZOo,30548
|
|
32
|
-
java_codebase_rag/installer.py,sha256=c-_tR1Ct_O3yhmruFRnDoM1Wilz-igD9qdkDPsNqLMI,79934
|
|
33
|
-
java_codebase_rag/jrag.py,sha256=XJN1ejEwxLpTrDJW4lyPjdhP21m7ZRv-JZh73aQDc14,199393
|
|
34
|
-
java_codebase_rag/jrag_envelope.py,sha256=cTe-2lk8-Fvmo9_Ps6rN0QtBSw4muSD_UXvm_rkUc48,47984
|
|
35
|
-
java_codebase_rag/jrag_hints.py,sha256=k2PFE4s3lZgBYHMdZcTjx1-w28nfQcBtQEVsSxI_DvE,9262
|
|
36
|
-
java_codebase_rag/jrag_render.py,sha256=MYPyiB7JiQrSw_KHMjCdWg9JuaxpO3Pv_FI4W7bG8sQ,34917
|
|
37
|
-
java_codebase_rag/lance_optimize.py,sha256=HI3aFebP1fenLL6Cav1jMG5kLXSrHLndO_MIJY6qQVo,11977
|
|
38
|
-
java_codebase_rag/pipeline.py,sha256=OCqBVjkGZOCvzmBElKMes6ynYn9dSN9J1bhRFyEceVE,18355
|
|
39
|
-
java_codebase_rag/progress.py,sha256=2IxdMALDM0wAQCyJrrfZ975zM_85C-4BfHxf4AtYifE,23212
|
|
40
|
-
java_codebase_rag/install_data/agents/explorer-rag-cli.md,sha256=bVmmzrBSSamMz7hDIKxL5alAZOXsJ_Km8TQnCcxDad0,10292
|
|
41
|
-
java_codebase_rag/install_data/agents/explorer-rag-enhanced.md,sha256=gZsNFbuK0lSnOIlplbbS_muz2ozokJqvFUv65QM0NDM,10406
|
|
42
|
-
java_codebase_rag/install_data/skills/explore-codebase/SKILL.md,sha256=A-v2dueVnxwBzBlxoRjZ2zOJk8DranLQ1TElwn94h0s,11529
|
|
43
|
-
java_codebase_rag/install_data/skills/explore-codebase-cli/SKILL.md,sha256=K2qwZqk2xPxjPxXtUHvax1Ug2J7nBYeMTIjRznO100g,10059
|
|
44
|
-
java_codebase_rag-0.9.5.dist-info/licenses/LICENSE,sha256=gxvtiHtuviR_q8ZAjWw-QTcF3DyPzg6ZY-lQrr8OPpw,1068
|
|
45
|
-
java_codebase_rag-0.9.5.dist-info/METADATA,sha256=cxCb0ljrq1h-E0nS7d7WI8t8LTQwUpIcYNwZXgUkMjM,20331
|
|
46
|
-
java_codebase_rag-0.9.5.dist-info/WHEEL,sha256=K260EYznzXsJYBQGqmI8VTxEdiZYNvDZwW9cBh9-_MA,91
|
|
47
|
-
java_codebase_rag-0.9.5.dist-info/entry_points.txt,sha256=cj3QTc11UYVQnj9T3orc4daiIGaCYrXP149vKbH2R4U,168
|
|
48
|
-
java_codebase_rag-0.9.5.dist-info/top_level.txt,sha256=gYhQnlcJKpqwIOTwAneruJrkeBzIjoC71LeHMGMZLAY,349
|
|
49
|
-
java_codebase_rag-0.9.5.dist-info/RECORD,,
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
absence_diagnosis
|
|
2
|
-
absence_types
|
|
3
|
-
absence_vocab
|
|
4
|
-
ast_java
|
|
5
|
-
brownfield_events
|
|
6
|
-
build_ast_graph
|
|
7
|
-
chunk_heuristics
|
|
8
|
-
graph_enrich
|
|
9
|
-
graph_types
|
|
10
|
-
index_common
|
|
11
|
-
java_codebase_rag
|
|
12
|
-
java_index_flow_lancedb
|
|
13
|
-
java_index_v1_common
|
|
14
|
-
java_ontology
|
|
15
|
-
ladybug_queries
|
|
16
|
-
mcp_hints
|
|
17
|
-
mcp_v2
|
|
18
|
-
path_filtering
|
|
19
|
-
pr_analysis
|
|
20
|
-
resolve_service
|
|
21
|
-
search_lancedb
|
|
22
|
-
search_lexical
|
|
23
|
-
search_scoring
|
|
24
|
-
server
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|