java-codebase-rag 0.5.3__py3-none-any.whl → 0.6.0__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.
- ast_java.py +1 -1
- build_ast_graph.py +142 -90
- graph_enrich.py +3 -3
- java_codebase_rag/_fdlimit.py +48 -0
- java_codebase_rag/cli.py +31 -28
- java_codebase_rag/config.py +28 -8
- java_codebase_rag/installer.py +99 -10
- java_codebase_rag/lance_optimize.py +148 -0
- java_codebase_rag/pipeline.py +63 -9
- {java_codebase_rag-0.5.3.dist-info → java_codebase_rag-0.6.0.dist-info}/METADATA +5 -5
- java_codebase_rag-0.6.0.dist-info/RECORD +33 -0
- {java_codebase_rag-0.5.3.dist-info → java_codebase_rag-0.6.0.dist-info}/top_level.txt +1 -1
- java_index_flow_lancedb.py +22 -4
- java_ontology.py +1 -1
- kuzu_queries.py → ladybug_queries.py +62 -56
- mcp_v2.py +16 -16
- pr_analysis.py +1 -1
- search_lancedb.py +8 -8
- server.py +47 -17
- java_codebase_rag-0.5.3.dist-info/RECORD +0 -31
- {java_codebase_rag-0.5.3.dist-info → java_codebase_rag-0.6.0.dist-info}/WHEEL +0 -0
- {java_codebase_rag-0.5.3.dist-info → java_codebase_rag-0.6.0.dist-info}/entry_points.txt +0 -0
- {java_codebase_rag-0.5.3.dist-info → java_codebase_rag-0.6.0.dist-info}/licenses/LICENSE +0 -0
mcp_v2.py
CHANGED
|
@@ -30,7 +30,7 @@ from sentence_transformers import SentenceTransformer
|
|
|
30
30
|
from index_common import SBERT_MODEL
|
|
31
31
|
from java_codebase_rag.config import resolved_sbert_model_for_process_env
|
|
32
32
|
from java_ontology import EDGE_SCHEMA, ResolveReason
|
|
33
|
-
from
|
|
33
|
+
from ladybug_queries import LadybugGraph, OVERRIDE_AXIS_COMPOSED_EDGE_TYPES
|
|
34
34
|
from mcp_hints import generate_hints, MCP_HINTS_STRUCTURED_FIELD_DESCRIPTION
|
|
35
35
|
from search_lancedb import TABLES, run_search
|
|
36
36
|
|
|
@@ -604,7 +604,7 @@ def _node_kind_from_id(
|
|
|
604
604
|
|
|
605
605
|
|
|
606
606
|
def _resolve_node_kind(
|
|
607
|
-
graph:
|
|
607
|
+
graph: LadybugGraph,
|
|
608
608
|
node_id: str,
|
|
609
609
|
) -> Literal["symbol", "route", "client", "producer", "unresolved_call_site"]:
|
|
610
610
|
try:
|
|
@@ -733,7 +733,7 @@ def _node_ref_from_row(kind: Literal["symbol", "route", "client", "producer"], r
|
|
|
733
733
|
|
|
734
734
|
|
|
735
735
|
def _load_node_record(
|
|
736
|
-
graph:
|
|
736
|
+
graph: LadybugGraph, node_id: str, kind: Literal["symbol", "route", "client", "producer"],
|
|
737
737
|
) -> dict[str, Any] | None:
|
|
738
738
|
if kind == "symbol":
|
|
739
739
|
projection = (
|
|
@@ -807,7 +807,7 @@ def _merge_overrides_edge_summary(
|
|
|
807
807
|
|
|
808
808
|
|
|
809
809
|
def _edge_summary_for_node(
|
|
810
|
-
graph:
|
|
810
|
+
graph: LadybugGraph, node_id: str, *, kind: str, row: dict[str, Any]
|
|
811
811
|
) -> dict[str, dict[str, int]]:
|
|
812
812
|
summary = dict(graph.edge_counts_for(node_id))
|
|
813
813
|
sym_kind = str(row.get("kind") or "")
|
|
@@ -887,7 +887,7 @@ def search_v2(
|
|
|
887
887
|
offset: int = 0,
|
|
888
888
|
path_contains: str | None = None,
|
|
889
889
|
filter: NodeFilter | dict[str, Any] | str | None = None,
|
|
890
|
-
graph:
|
|
890
|
+
graph: LadybugGraph | None = None,
|
|
891
891
|
) -> SearchOutput:
|
|
892
892
|
try:
|
|
893
893
|
raw_filter = _coerce_filter(filter)
|
|
@@ -967,10 +967,10 @@ def find_v2(
|
|
|
967
967
|
filter: NodeFilter | dict[str, Any] | str,
|
|
968
968
|
limit: int = 25,
|
|
969
969
|
offset: int = 0,
|
|
970
|
-
graph:
|
|
970
|
+
graph: LadybugGraph | None = None,
|
|
971
971
|
) -> FindOutput:
|
|
972
972
|
try:
|
|
973
|
-
g = graph or
|
|
973
|
+
g = graph or LadybugGraph.get()
|
|
974
974
|
raw_filter = _coerce_filter(filter)
|
|
975
975
|
if raw_filter is None:
|
|
976
976
|
raw_filter = {}
|
|
@@ -1063,10 +1063,10 @@ _DESCRIBE_UCS_ID_MESSAGE = (
|
|
|
1063
1063
|
def describe_v2(
|
|
1064
1064
|
id: str | None = None,
|
|
1065
1065
|
fqn: str | None = None,
|
|
1066
|
-
graph:
|
|
1066
|
+
graph: LadybugGraph | None = None,
|
|
1067
1067
|
) -> DescribeOutput:
|
|
1068
1068
|
try:
|
|
1069
|
-
g = graph or
|
|
1069
|
+
g = graph or LadybugGraph.get()
|
|
1070
1070
|
has_id = bool(id and str(id).strip())
|
|
1071
1071
|
has_fqn = bool(fqn and str(fqn).strip())
|
|
1072
1072
|
if not has_id and not has_fqn:
|
|
@@ -1171,7 +1171,7 @@ def _resolve_parse_microservice_route(identifier: str) -> tuple[str, str, str] |
|
|
|
1171
1171
|
|
|
1172
1172
|
|
|
1173
1173
|
def _resolve_symbol_candidates(
|
|
1174
|
-
g:
|
|
1174
|
+
g: LadybugGraph,
|
|
1175
1175
|
identifier: str,
|
|
1176
1176
|
) -> list[tuple[NodeRef, ResolveReason, int]]:
|
|
1177
1177
|
out: list[tuple[NodeRef, ResolveReason, int]] = []
|
|
@@ -1213,7 +1213,7 @@ def _resolve_symbol_candidates(
|
|
|
1213
1213
|
|
|
1214
1214
|
|
|
1215
1215
|
def _resolve_route_candidates(
|
|
1216
|
-
g:
|
|
1216
|
+
g: LadybugGraph,
|
|
1217
1217
|
identifier: str,
|
|
1218
1218
|
) -> list[tuple[NodeRef, ResolveReason, int]]:
|
|
1219
1219
|
out: list[tuple[NodeRef, ResolveReason, int]] = []
|
|
@@ -1265,7 +1265,7 @@ def _resolve_route_candidates(
|
|
|
1265
1265
|
|
|
1266
1266
|
|
|
1267
1267
|
def _resolve_client_candidates(
|
|
1268
|
-
g:
|
|
1268
|
+
g: LadybugGraph,
|
|
1269
1269
|
identifier: str,
|
|
1270
1270
|
) -> list[tuple[NodeRef, ResolveReason, int]]:
|
|
1271
1271
|
out: list[tuple[NodeRef, ResolveReason, int]] = []
|
|
@@ -1304,7 +1304,7 @@ def _resolve_client_candidates(
|
|
|
1304
1304
|
|
|
1305
1305
|
|
|
1306
1306
|
def _resolve_producer_candidates(
|
|
1307
|
-
g:
|
|
1307
|
+
g: LadybugGraph,
|
|
1308
1308
|
identifier: str,
|
|
1309
1309
|
) -> list[tuple[NodeRef, ResolveReason, int]]:
|
|
1310
1310
|
out: list[tuple[NodeRef, ResolveReason, int]] = []
|
|
@@ -1462,7 +1462,7 @@ def _resolve_finalize_success(
|
|
|
1462
1462
|
def resolve_v2(
|
|
1463
1463
|
identifier: str,
|
|
1464
1464
|
hint_kind: Literal["symbol", "route", "client", "producer"] | None = None,
|
|
1465
|
-
graph:
|
|
1465
|
+
graph: LadybugGraph | None = None,
|
|
1466
1466
|
) -> ResolveOutput:
|
|
1467
1467
|
try:
|
|
1468
1468
|
trimmed, err = _resolve_validate_identifier(identifier)
|
|
@@ -1481,7 +1481,7 @@ def resolve_v2(
|
|
|
1481
1481
|
if "*" in trimmed or "?" in trimmed:
|
|
1482
1482
|
return _resolve_finalize_success(trimmed, hint_kind, [])
|
|
1483
1483
|
|
|
1484
|
-
g = graph or
|
|
1484
|
+
g = graph or LadybugGraph.get()
|
|
1485
1485
|
raw: list[tuple[NodeRef, ResolveReason, int]] = []
|
|
1486
1486
|
for kind in _resolve_kinds_to_search(hint_kind):
|
|
1487
1487
|
if kind == "symbol":
|
|
@@ -1726,7 +1726,7 @@ def neighbors_v2(
|
|
|
1726
1726
|
declares_composed = [k for k in composed_keys if k in _MEMBER_COMPOSED_EDGE_TYPES]
|
|
1727
1727
|
override_composed = [k for k in composed_keys if k in _OVERRIDE_COMPOSED_EDGE_TYPES]
|
|
1728
1728
|
ordered_composed = declares_composed + override_composed
|
|
1729
|
-
g = graph or
|
|
1729
|
+
g = graph or LadybugGraph.get()
|
|
1730
1730
|
try:
|
|
1731
1731
|
raw_filter = _coerce_filter(filter)
|
|
1732
1732
|
nf = (
|
pr_analysis.py
CHANGED
|
@@ -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
|
|
15
|
+
from ladybug_queries import SymbolHit, find_symbols_in_file_range, _row_to_symbol
|
|
16
16
|
|
|
17
17
|
|
|
18
18
|
@dataclass
|
search_lancedb.py
CHANGED
|
@@ -675,16 +675,16 @@ def _graph_expand_merge(
|
|
|
675
675
|
limit: int,
|
|
676
676
|
extra_predicates: list[str],
|
|
677
677
|
expand_depth: int,
|
|
678
|
-
|
|
678
|
+
ladybug_path: str | None,
|
|
679
679
|
) -> list[dict]:
|
|
680
680
|
"""Expand vector top-k through the Kuzu graph and fuse (RRF) with the original list."""
|
|
681
681
|
# Lazy import so the module works without kuzu installed when graph_expand=False.
|
|
682
682
|
try:
|
|
683
|
-
from
|
|
683
|
+
from ladybug_queries import LadybugGraph
|
|
684
684
|
except Exception:
|
|
685
685
|
return vector_rows
|
|
686
686
|
|
|
687
|
-
if not
|
|
687
|
+
if not LadybugGraph.exists(ladybug_path):
|
|
688
688
|
return vector_rows
|
|
689
689
|
|
|
690
690
|
seed_fqns = sorted({r.get("primary_type_fqn") for r in vector_rows if r.get("primary_type_fqn")})
|
|
@@ -692,7 +692,7 @@ def _graph_expand_merge(
|
|
|
692
692
|
return vector_rows
|
|
693
693
|
|
|
694
694
|
try:
|
|
695
|
-
graph =
|
|
695
|
+
graph = LadybugGraph.get(ladybug_path)
|
|
696
696
|
structural = graph.expand_fqns(seed_fqns, depth=expand_depth)
|
|
697
697
|
method_pairs = graph.expand_methods(
|
|
698
698
|
seed_fqns, depth=expand_depth, exclude_external=True,
|
|
@@ -804,7 +804,7 @@ def run_search(
|
|
|
804
804
|
package_prefix: str | None = None,
|
|
805
805
|
graph_expand: bool = False,
|
|
806
806
|
expand_depth: int = 1,
|
|
807
|
-
|
|
807
|
+
ladybug_path: str | None = None,
|
|
808
808
|
context_neighbors: int = 0,
|
|
809
809
|
role_in: list[str] | None = None,
|
|
810
810
|
exclude_roles: list[str] | None = None,
|
|
@@ -890,7 +890,7 @@ def run_search(
|
|
|
890
890
|
limit=need,
|
|
891
891
|
extra_predicates=extra_java,
|
|
892
892
|
expand_depth=expand_depth,
|
|
893
|
-
|
|
893
|
+
ladybug_path=ladybug_path,
|
|
894
894
|
)
|
|
895
895
|
|
|
896
896
|
window = rows[offset : offset + limit]
|
|
@@ -966,7 +966,7 @@ def main() -> None:
|
|
|
966
966
|
parser.add_argument("--package-prefix", default=None)
|
|
967
967
|
parser.add_argument("--graph-expand", action="store_true")
|
|
968
968
|
parser.add_argument("--expand-depth", type=int, default=1)
|
|
969
|
-
parser.add_argument("--
|
|
969
|
+
parser.add_argument("--ladybug-path", default=None)
|
|
970
970
|
parser.add_argument(
|
|
971
971
|
"--context-neighbors", type=int, default=0,
|
|
972
972
|
help="Attach N adjacent chunks per hit as surrounding context (Java only).",
|
|
@@ -1010,7 +1010,7 @@ def main() -> None:
|
|
|
1010
1010
|
package_prefix=args.package_prefix,
|
|
1011
1011
|
graph_expand=args.graph_expand,
|
|
1012
1012
|
expand_depth=args.expand_depth,
|
|
1013
|
-
|
|
1013
|
+
ladybug_path=args.ladybug_path,
|
|
1014
1014
|
context_neighbors=args.context_neighbors,
|
|
1015
1015
|
)
|
|
1016
1016
|
except Exception as e:
|
server.py
CHANGED
|
@@ -16,23 +16,25 @@ from java_codebase_rag.cli_progress import (
|
|
|
16
16
|
emit_vectors_finish,
|
|
17
17
|
emit_vectors_start,
|
|
18
18
|
)
|
|
19
|
+
from java_codebase_rag._fdlimit import raise_fd_limit
|
|
19
20
|
from java_codebase_rag.config import (
|
|
21
|
+
cocoindex_subprocess_env_defaults,
|
|
20
22
|
discover_project_root,
|
|
21
23
|
emit_legacy_env_hints_if_present,
|
|
22
24
|
resolved_sbert_model_for_process_env,
|
|
23
25
|
resolve_operator_config,
|
|
24
26
|
)
|
|
25
|
-
from
|
|
27
|
+
from ladybug_queries import LadybugGraph, resolve_ladybug_path
|
|
26
28
|
from mcp.server.fastmcp import FastMCP
|
|
27
29
|
from pydantic import BaseModel, Field
|
|
28
30
|
from search_lancedb import TABLES
|
|
29
31
|
|
|
30
32
|
_COCOINDEX_TARGET = "java_index_flow_lancedb.py:JavaCodeIndexLance"
|
|
31
33
|
_INSTRUCTIONS = (
|
|
32
|
-
"Java codebase graph navigator (LanceDB +
|
|
34
|
+
"Java codebase graph navigator (LanceDB + Ladybug). "
|
|
33
35
|
"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), "
|
|
34
36
|
"neighbors (one hop; you MUST pass direction in|out AND edge_types list — no defaults), "
|
|
35
|
-
"resolve (identifier-shaped lookup for symbol/route/client/producer — three statuses one|many
|
|
37
|
+
"resolve (identifier-shaped lookup for symbol/route/client/producer — three statuses one|many/none). "
|
|
36
38
|
"NodeFilter `filter` is a JSON object (preferred); a JSON-encoded string is also accepted as a fallback. "
|
|
37
39
|
"Unknown filter keys and populated fields not applicable to the effective node kind fail with success=false and message. "
|
|
38
40
|
"Edge labels: EXTENDS, IMPLEMENTS, INJECTS, OVERRIDES, DECLARES, DECLARES_CLIENT, DECLARES_PRODUCER, CALLS, EXPOSES, HTTP_CALLS, ASYNC_CALLS; "
|
|
@@ -85,6 +87,7 @@ class RefreshIndexOutput(BaseModel):
|
|
|
85
87
|
graph_stdout: str = ""
|
|
86
88
|
graph_stderr: str = ""
|
|
87
89
|
phases_run: list[Literal["vectors", "graph"]] = Field(default_factory=list)
|
|
90
|
+
optimize_error: str | None = None
|
|
88
91
|
|
|
89
92
|
|
|
90
93
|
class IndexInfoOutput(BaseModel):
|
|
@@ -162,39 +165,40 @@ def _cocoindex_subprocess_env(project_root: Path) -> dict[str, str]:
|
|
|
162
165
|
idx = os.environ.get("JAVA_CODEBASE_RAG_INDEX_DIR", "").strip()
|
|
163
166
|
if idx:
|
|
164
167
|
sub_env["JAVA_CODEBASE_RAG_INDEX_DIR"] = str(Path(idx).expanduser().resolve())
|
|
165
|
-
#
|
|
166
|
-
# See: https://github.com/HumanBean17/java-codebase-rag/issues/
|
|
167
|
-
|
|
168
|
+
# Cap CocoIndex concurrency to avoid EMFILE ("too many open files") under
|
|
169
|
+
# default OS fd limits. See: https://github.com/HumanBean17/java-codebase-rag/issues/306
|
|
170
|
+
for _k, _v in cocoindex_subprocess_env_defaults().items():
|
|
171
|
+
sub_env.setdefault(_k, _v)
|
|
168
172
|
return sub_env
|
|
169
173
|
|
|
170
174
|
|
|
171
175
|
def _graph_enabled() -> bool:
|
|
172
|
-
return
|
|
176
|
+
return LadybugGraph.exists()
|
|
173
177
|
|
|
174
178
|
|
|
175
179
|
def _graph_meta_output() -> GraphMetaOutput:
|
|
176
|
-
if not
|
|
180
|
+
if not LadybugGraph.exists():
|
|
177
181
|
return GraphMetaOutput(
|
|
178
182
|
success=True,
|
|
179
183
|
enabled=False,
|
|
180
|
-
db_path=
|
|
181
|
-
message="
|
|
184
|
+
db_path=resolve_ladybug_path(),
|
|
185
|
+
message="Ladybug graph not present; run java-codebase-rag reprocess or build_ast_graph.py",
|
|
182
186
|
)
|
|
183
187
|
try:
|
|
184
|
-
graph =
|
|
188
|
+
graph = LadybugGraph.get()
|
|
185
189
|
meta = graph.meta()
|
|
186
190
|
except Exception as e:
|
|
187
191
|
return GraphMetaOutput(
|
|
188
192
|
success=False,
|
|
189
193
|
enabled=_graph_enabled(),
|
|
190
|
-
db_path=
|
|
191
|
-
message=f"
|
|
194
|
+
db_path=resolve_ladybug_path(),
|
|
195
|
+
message=f"Ladybug open failed: {e}",
|
|
192
196
|
)
|
|
193
197
|
if "error" in meta:
|
|
194
198
|
return GraphMetaOutput(
|
|
195
199
|
success=False,
|
|
196
200
|
enabled=_graph_enabled(),
|
|
197
|
-
db_path=meta.get("db_path",
|
|
201
|
+
db_path=meta.get("db_path", resolve_ladybug_path()),
|
|
198
202
|
message=str(meta["error"]),
|
|
199
203
|
)
|
|
200
204
|
try:
|
|
@@ -212,7 +216,7 @@ def _graph_meta_output() -> GraphMetaOutput:
|
|
|
212
216
|
return GraphMetaOutput(
|
|
213
217
|
success=True,
|
|
214
218
|
enabled=_graph_enabled(),
|
|
215
|
-
db_path=meta.get("db_path",
|
|
219
|
+
db_path=meta.get("db_path", resolve_ladybug_path()),
|
|
216
220
|
ontology_version=int(meta.get("ontology_version") or 0),
|
|
217
221
|
built_at=int(meta.get("built_at") or 0),
|
|
218
222
|
source_root=str(meta.get("source_root") or ""),
|
|
@@ -326,9 +330,29 @@ async def run_refresh_pipeline(*, quiet: bool = False, verbose: bool = True) ->
|
|
|
326
330
|
graph_code: int | None = None
|
|
327
331
|
graph_out = ""
|
|
328
332
|
graph_err = ""
|
|
333
|
+
optimize_error: str | None = None
|
|
329
334
|
if ok:
|
|
330
335
|
if not quiet:
|
|
331
336
|
print(file=sys.stderr, flush=True)
|
|
337
|
+
# Serialized post-flow Lance optimize: the flow disabled its background
|
|
338
|
+
# optimize, so with cocoindex returned exit 0 there are no concurrent
|
|
339
|
+
# writers — this is the safe window to compact. An optimize failure is
|
|
340
|
+
# surfaced via optimize_error / stderr and must NOT flip the success of
|
|
341
|
+
# a vectors phase that succeeded; the index is still searchable.
|
|
342
|
+
try:
|
|
343
|
+
from java_codebase_rag.lance_optimize import optimize_lance_tables
|
|
344
|
+
|
|
345
|
+
idx_raw = os.environ.get("JAVA_CODEBASE_RAG_INDEX_DIR", "").strip()
|
|
346
|
+
if idx_raw and not idx_raw.startswith(("s3://", "gs://", "az://")):
|
|
347
|
+
idx_dir = Path(idx_raw).expanduser().resolve()
|
|
348
|
+
elif idx_raw:
|
|
349
|
+
idx_dir = Path(idx_raw)
|
|
350
|
+
else:
|
|
351
|
+
idx_dir = (root / ".java-codebase-rag").resolve()
|
|
352
|
+
await optimize_lance_tables(idx_dir, quiet=quiet)
|
|
353
|
+
except Exception as exc:
|
|
354
|
+
optimize_error = f"lance optimize failed: {exc}"
|
|
355
|
+
print(f"java-codebase-rag: {optimize_error}", file=sys.stderr)
|
|
332
356
|
builder = Path(__file__).resolve().parent / "build_ast_graph.py"
|
|
333
357
|
if builder.is_file():
|
|
334
358
|
try:
|
|
@@ -337,8 +361,8 @@ async def run_refresh_pipeline(*, quiet: bool = False, verbose: bool = True) ->
|
|
|
337
361
|
str(builder),
|
|
338
362
|
"--source-root",
|
|
339
363
|
str(root),
|
|
340
|
-
"--
|
|
341
|
-
|
|
364
|
+
"--ladybug-path",
|
|
365
|
+
resolve_ladybug_path(),
|
|
342
366
|
]
|
|
343
367
|
if not quiet:
|
|
344
368
|
graph_args.append("--verbose")
|
|
@@ -365,6 +389,10 @@ async def run_refresh_pipeline(*, quiet: bool = False, verbose: bool = True) ->
|
|
|
365
389
|
message = f"cocoindex exit {proc.returncode}"
|
|
366
390
|
elif graph_code is not None and graph_code != 0:
|
|
367
391
|
message = f"graph builder exit {graph_code}"
|
|
392
|
+
# Surface a post-flow optimize failure in the message too (success is not
|
|
393
|
+
# flipped — the vectors phase succeeded and the index is still usable).
|
|
394
|
+
if optimize_error is not None:
|
|
395
|
+
message = optimize_error if message is None else f"{message}; {optimize_error}"
|
|
368
396
|
return RefreshIndexOutput(
|
|
369
397
|
success=ok and (graph_code is None or graph_code == 0),
|
|
370
398
|
exit_code=proc.returncode,
|
|
@@ -375,6 +403,7 @@ async def run_refresh_pipeline(*, quiet: bool = False, verbose: bool = True) ->
|
|
|
375
403
|
graph_stdout=graph_out[-4000:] if len(graph_out) > 4000 else graph_out,
|
|
376
404
|
graph_stderr=graph_err[-4000:] if len(graph_err) > 4000 else graph_err,
|
|
377
405
|
phases_run=phases_run,
|
|
406
|
+
optimize_error=optimize_error,
|
|
378
407
|
)
|
|
379
408
|
|
|
380
409
|
|
|
@@ -622,6 +651,7 @@ def create_mcp_server() -> FastMCP:
|
|
|
622
651
|
|
|
623
652
|
|
|
624
653
|
def main() -> None:
|
|
654
|
+
raise_fd_limit()
|
|
625
655
|
emit_legacy_env_hints_if_present()
|
|
626
656
|
|
|
627
657
|
# Load YAML config and apply embedding settings to environment
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
ast_java.py,sha256=OKoH7oX6L7AEEd6UY-spK8BPtWYY1T_4esrTC5VtoK8,98881
|
|
2
|
-
brownfield_events.py,sha256=yxXkKDgMb3VPtaiakGzncHM_EGnda8xIue6w90yYp8s,2055
|
|
3
|
-
build_ast_graph.py,sha256=1uqgFK2ebBdEc2QcAYK5vU4afOb95jU3zht5FracCkI,148683
|
|
4
|
-
chunk_heuristics.py,sha256=aQk2NOKxzUdqoUAJUO3G3LE0MN_bYZWNLQ0tkmj5uts,1813
|
|
5
|
-
graph_enrich.py,sha256=m3cksCHLqLHhA0Y-TLodbm09YfSJZjlTDN0Z51DiP2c,63317
|
|
6
|
-
index_common.py,sha256=HT6FKHFJ084eFvd3fR1j8z8gf4eWoPHVW8GXLpw464I,285
|
|
7
|
-
java_index_flow_lancedb.py,sha256=LMmfMSdE2d-ujxuJ2-hss7BhkrUMxHNyZuqsiGITuAI,12057
|
|
8
|
-
java_index_v1_common.py,sha256=nF1KrSqboF_RRvWerG9knRRFmWwsrG_CvhgnsoZ8KqA,1154
|
|
9
|
-
java_ontology.py,sha256=nM-oY8_91rmUudv9hAss1AMus9BFY9s5tTpAWjlCz00,16424
|
|
10
|
-
kuzu_queries.py,sha256=9bQzrU311AOw_BcUp_KSGiZgPVSaLSU7y63XfcT_vqI,90137
|
|
11
|
-
mcp_hints.py,sha256=3swh05LSiWur3tm3-yssndBsLxIxFhy501kBtJI8jJ0,42509
|
|
12
|
-
mcp_v2.py,sha256=JFe62sYzJ2XiE6L3wAH8XG9_Ya2oOeJQ_hkiTmXFnSE,79065
|
|
13
|
-
path_filtering.py,sha256=-oX16SYLWYwX9pcV1fu3vbVTIhY1GzFflT7J1E2tqPY,17122
|
|
14
|
-
pr_analysis.py,sha256=Zaq90xYgMgrReV3vCGcFhOkK61gIRMAAIgs7ev-rJG4,18410
|
|
15
|
-
search_lancedb.py,sha256=-XgtpbJ_3zDLiZ_vGKXjaLpl7RlvgyzUb7oAGoWkXO0,36754
|
|
16
|
-
server.py,sha256=1ZEDkRAOMs0ORncMh9CP2ICCTGEuAe2qmptytQ4QYYU,28862
|
|
17
|
-
java_codebase_rag/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
|
18
|
-
java_codebase_rag/cli.py,sha256=WW-DsskSGr-d0JXBLkj4IdAa2OsAcLz5e54_DWvD9Sk,33872
|
|
19
|
-
java_codebase_rag/cli_format.py,sha256=arU7P9W6Fvm7X_wzR1wJ8EfyxK1rDP_ESEhdA0ub4Mo,2579
|
|
20
|
-
java_codebase_rag/cli_progress.py,sha256=9jCqEagYOXs32SYVA31_sOCrONvYy7cl1CrdBD2Pg44,3168
|
|
21
|
-
java_codebase_rag/config.py,sha256=1BkRQsdY2ohZ8IWmbTG3WHgotVVUIrRTN537A1QAoCQ,15352
|
|
22
|
-
java_codebase_rag/installer.py,sha256=flj330ZPSBrO2iw_yuNFBILHOTVbarMufYwqjZ8JzN0,42778
|
|
23
|
-
java_codebase_rag/pipeline.py,sha256=D9SNdffcmJLoKHnNZLWZzfor1fI4bkkpJkU0KFsqfdA,9722
|
|
24
|
-
java_codebase_rag/install_data/agents/explorer-rag-enhanced.md,sha256=APl9d-No12qZNZLjU7mwNRwxHIgnT3ZtQZiD4clWlyU,14413
|
|
25
|
-
java_codebase_rag/install_data/skills/explore-codebase/SKILL.md,sha256=pIM-Xdwq_fXkhhBJCdb-fA2nes5c_mMPcdUXb7Adyxo,12040
|
|
26
|
-
java_codebase_rag-0.5.3.dist-info/licenses/LICENSE,sha256=gxvtiHtuviR_q8ZAjWw-QTcF3DyPzg6ZY-lQrr8OPpw,1068
|
|
27
|
-
java_codebase_rag-0.5.3.dist-info/METADATA,sha256=iI08-selyGz8kYjgqBsWbt4Z9e7MeQd_aF7kHFPu65Q,16807
|
|
28
|
-
java_codebase_rag-0.5.3.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
|
|
29
|
-
java_codebase_rag-0.5.3.dist-info/entry_points.txt,sha256=mVVQJa0n73OWfhHXYCDoPRrWin_LJhH2Rn0CkJ2iax4,101
|
|
30
|
-
java_codebase_rag-0.5.3.dist-info/top_level.txt,sha256=5aIYoMkvJvvfXvf4iHn2OeSIM7PZXP-0j94eNESnwMw,242
|
|
31
|
-
java_codebase_rag-0.5.3.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|