java-codebase-rag 0.9.1__py3-none-any.whl → 0.9.2__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/jrag.py CHANGED
@@ -812,11 +812,27 @@ def build_parser() -> argparse.ArgumentParser:
812
812
  "CALLS hops from the route handler. Intra-service is an INDEX-TIME data "
813
813
  "property: CALLS edges are intra-codebase by construction, and the query "
814
814
  "carries no microservice predicate, so the result reflects whatever the "
815
- "fixture indexed (no query-time constraint). --max-hops clamped to 1..8."
815
+ "fixture indexed (no query-time constraint). --depth clamped to 1..8."
816
816
  ),
817
817
  )
818
- flow.add_argument("query", help="Route path (e.g. '/chat/assign'). Resolved with hint_kind=route.")
819
- flow.add_argument("--max-hops", type=int, default=5, dest="max_hops", help="Max CALLS hops (clamped 1..8, default 5).")
818
+ flow.add_argument(
819
+ "query",
820
+ help=(
821
+ "Route path (e.g. '/chat/assign') or Kafka topic name (e.g. "
822
+ "'banking.chat.compliance.review'). Resolved with hint_kind=route; "
823
+ "kafka_topic Routes match on topic."
824
+ ),
825
+ )
826
+ # Primary flag is --depth (consistent with callers/callees/impact/decompose).
827
+ # --max-hops is kept as a hidden back-compat alias (same dest).
828
+ flow.add_argument(
829
+ "--depth", type=int, default=5, dest="depth",
830
+ help="Max CALLS hops (clamped 1..8, default 5).",
831
+ )
832
+ flow.add_argument(
833
+ "--max-hops", type=int, dest="depth",
834
+ default=argparse.SUPPRESS, help=argparse.SUPPRESS,
835
+ )
820
836
  flow.set_defaults(handler=_cmd_flow)
821
837
 
822
838
  # ---- Compose traversals + file inspection (PR-JRAG-3b) ----
@@ -3001,7 +3017,7 @@ def _cmd_flow(args: argparse.Namespace) -> int:
3001
3017
  args, reason="trace_request_flow carries no microservice predicate; intra-codebase is an index-time data property"
3002
3018
  )
3003
3019
 
3004
- max_hops = max(1, min(8, getattr(args, "max_hops", 5)))
3020
+ max_hops = max(1, min(8, getattr(args, "depth", 5)))
3005
3021
  flow_data = graph.trace_request_flow(entry_route_id=node.id, max_hops=max_hops)
3006
3022
 
3007
3023
  root_id = node.id
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: java-codebase-rag
3
- Version: 0.9.1
3
+ Version: 0.9.2
4
4
  Summary: MCP server for semantic + structural search over Java codebases
5
5
  Author: HumanBean17
6
6
  License-Expression: MIT
@@ -7,13 +7,13 @@ graph_types.py,sha256=P6RVdEiqZlaSgTyXepnGbtMoZq0m_MaP2q6M6i7Uxlc,4539
7
7
  index_common.py,sha256=HT6FKHFJ084eFvd3fR1j8z8gf4eWoPHVW8GXLpw464I,285
8
8
  java_index_flow_lancedb.py,sha256=kDkhnRxl-Kz0YNMY27DTk3gwa8H2nWyGDCQC8hxx-jI,28970
9
9
  java_index_v1_common.py,sha256=nF1KrSqboF_RRvWerG9knRRFmWwsrG_CvhgnsoZ8KqA,1154
10
- java_ontology.py,sha256=ooqr8GucOINpzhdEQ3QzVe5A9GfiR0nUTlySDehn9GA,17129
10
+ java_ontology.py,sha256=eUGFa96GV_09s2f2sWSMdqYmoxU3-1pyU2iipvcDjG0,17219
11
11
  ladybug_queries.py,sha256=rVnVEHwWwE4USeX7tICYEl1SSiSxJGnBNe1VX66R3Xk,100531
12
12
  mcp_hints.py,sha256=zp-4cnOmbYD0YovmZiLS2oGcvWcWE7n8jKVz4_xifno,42512
13
13
  mcp_v2.py,sha256=ABNHiZEEwQ76uPF9E5fQWncJ4JmmgtG3vmt5TDxBGVo,68901
14
14
  path_filtering.py,sha256=R--XzI51LXBu5IBKMCnJWbkNr6I5d-SDmltyQQnWco0,17674
15
15
  pr_analysis.py,sha256=zrmZZD5yotJtM02Kif6_jgI_oeformOao793akp0N6Y,18394
16
- resolve_service.py,sha256=tC5FQsGmqhqn0EOexVDlRq5egnzKDTrI7CMzk0nPpG8,25135
16
+ resolve_service.py,sha256=lTHPSn5zgIFjNICiOZc6m_bBJShTn72kShhkofwZdoE,26364
17
17
  search_lancedb.py,sha256=1sGSZ6H8J9hGcKAwHpzB7F0_in3A_sEtOI5LvlZYIRI,43864
18
18
  server.py,sha256=nOK3DOr-i3PJnVmE7neye_tptJumgXfIXPlTIn01MPQ,37065
19
19
  java_codebase_rag/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
@@ -24,7 +24,7 @@ java_codebase_rag/cli_format.py,sha256=CT7-xdwZ0bMCdP68_UOwkvm-mnLluU3LutlM-mDNk
24
24
  java_codebase_rag/cli_progress.py,sha256=q6Wh97yzLGs1B8UFk_WAKivfQu7Y5RnUUE-T2YHWkIs,3237
25
25
  java_codebase_rag/config.py,sha256=1EAlKtQx7LUo-gPoE6BOVLz0YEl1OpWFRABkF06zjgk,26464
26
26
  java_codebase_rag/installer.py,sha256=c-_tR1Ct_O3yhmruFRnDoM1Wilz-igD9qdkDPsNqLMI,79934
27
- java_codebase_rag/jrag.py,sha256=cVUWrKOtkwe2r4u1nknzmrMQMy16bdt1n-dZQpiSFWs,191811
27
+ java_codebase_rag/jrag.py,sha256=KYv1pD_FTdYh0NqEwO_yzqgHiv5PDFcMiL26aA40QwI,192278
28
28
  java_codebase_rag/jrag_envelope.py,sha256=5jD3p2O-p9acAKHqoif5FFoqgP7Q2ziCuKSiPCHoywc,47505
29
29
  java_codebase_rag/jrag_hints.py,sha256=k2PFE4s3lZgBYHMdZcTjx1-w28nfQcBtQEVsSxI_DvE,9262
30
30
  java_codebase_rag/jrag_render.py,sha256=1nUyamL-MOOXDlKvssp-LsBgEtznUnGj_cPteSwuS90,31953
@@ -35,9 +35,9 @@ java_codebase_rag/install_data/agents/explorer-rag-cli.md,sha256=mMij_BIQM4agaYh
35
35
  java_codebase_rag/install_data/agents/explorer-rag-enhanced.md,sha256=gZsNFbuK0lSnOIlplbbS_muz2ozokJqvFUv65QM0NDM,10406
36
36
  java_codebase_rag/install_data/skills/explore-codebase/SKILL.md,sha256=A-v2dueVnxwBzBlxoRjZ2zOJk8DranLQ1TElwn94h0s,11529
37
37
  java_codebase_rag/install_data/skills/explore-codebase-cli/SKILL.md,sha256=V5gIKKGkgk2KlAFf9JqPareQDMt1iQOI7cwhfOqJL1c,11348
38
- java_codebase_rag-0.9.1.dist-info/licenses/LICENSE,sha256=gxvtiHtuviR_q8ZAjWw-QTcF3DyPzg6ZY-lQrr8OPpw,1068
39
- java_codebase_rag-0.9.1.dist-info/METADATA,sha256=v3Zl2nJ80PhrygxQD-aojw6z1CSZ_uRrOdkIWuA65No,20088
40
- java_codebase_rag-0.9.1.dist-info/WHEEL,sha256=K260EYznzXsJYBQGqmI8VTxEdiZYNvDZwW9cBh9-_MA,91
41
- java_codebase_rag-0.9.1.dist-info/entry_points.txt,sha256=cj3QTc11UYVQnj9T3orc4daiIGaCYrXP149vKbH2R4U,168
42
- java_codebase_rag-0.9.1.dist-info/top_level.txt,sha256=8vC-VN3cMwz5vhkSTaeJ1a1bDeqLWEfrTks1CvEvIg0,273
43
- java_codebase_rag-0.9.1.dist-info/RECORD,,
38
+ java_codebase_rag-0.9.2.dist-info/licenses/LICENSE,sha256=gxvtiHtuviR_q8ZAjWw-QTcF3DyPzg6ZY-lQrr8OPpw,1068
39
+ java_codebase_rag-0.9.2.dist-info/METADATA,sha256=3lfDnbvPb-vpc_81VLNobOgdUKncX6ejy3TDUUSj4Vo,20088
40
+ java_codebase_rag-0.9.2.dist-info/WHEEL,sha256=K260EYznzXsJYBQGqmI8VTxEdiZYNvDZwW9cBh9-_MA,91
41
+ java_codebase_rag-0.9.2.dist-info/entry_points.txt,sha256=cj3QTc11UYVQnj9T3orc4daiIGaCYrXP149vKbH2R4U,168
42
+ java_codebase_rag-0.9.2.dist-info/top_level.txt,sha256=8vC-VN3cMwz5vhkSTaeJ1a1bDeqLWEfrTks1CvEvIg0,273
43
+ java_codebase_rag-0.9.2.dist-info/RECORD,,
java_ontology.py CHANGED
@@ -90,6 +90,8 @@ VALID_RESOLVE_REASONS: frozenset[str] = frozenset((
90
90
  "short_name",
91
91
  "route_template",
92
92
  "route_method_path",
93
+ "route_topic",
94
+ "route_topic_prefix",
93
95
  "client_target",
94
96
  "client_target_path",
95
97
  "client_name",
@@ -428,6 +430,8 @@ ResolveReason = Literal[
428
430
  "short_name",
429
431
  "route_template",
430
432
  "route_method_path",
433
+ "route_topic",
434
+ "route_topic_prefix",
431
435
  "client_target",
432
436
  "client_target_path",
433
437
  "client_name",
resolve_service.py CHANGED
@@ -43,11 +43,13 @@ _RESOLVE_REASON_PRIORITY: dict[ResolveReason, int] = {
43
43
  "producer_topic_prefix": 1,
44
44
  "fqn_suffix": 2,
45
45
  "route_template": 2,
46
+ "route_topic": 2,
46
47
  "client_fqn": 2,
47
48
  "short_name": 3,
48
49
  "client_target": 3,
49
50
  "client_name": 3,
50
51
  "producer_topic": 3,
52
+ "route_topic_prefix": 3,
51
53
  }
52
54
 
53
55
  _SYMBOL_RESOLVE_RETURN = (
@@ -295,6 +297,28 @@ def _resolve_route_candidates(
295
297
  path_val = str(row.get("path_template") or row.get("path") or "")
296
298
  out.append((_node_ref_from_row("route", row), "route_template", len(path_val)))
297
299
 
300
+ # Kafka/topic routes carry their name in ``topic`` (``path``/``path_template``
301
+ # are empty), so path-based matching above cannot reach them. Match on
302
+ # ``r.topic`` the same way ``_resolve_producer_candidates`` matches
303
+ # ``p.topic`` — this lets ``flow``/``callers``/``overview`` resolve a
304
+ # ``kafka_topic`` Route by topic name. ``_drop_route_mirrors`` below then
305
+ # discards the no-EXPOSES producer phantom in favour of the server route.
306
+ rows = g._rows( # noqa: SLF001
307
+ f"MATCH (r:Route) WHERE r.topic = $topic{scope} RETURN {_ROUTE_RESOLVE_RETURN} LIMIT $lim",
308
+ {"topic": identifier, "lim": lim, **scope_params},
309
+ )
310
+ for row in rows:
311
+ out.append((_node_ref_from_row("route", row), "route_topic", len(identifier)))
312
+
313
+ if not identifier.startswith("/"):
314
+ rows = g._rows( # noqa: SLF001
315
+ f"MATCH (r:Route) WHERE r.topic STARTS WITH $topic{scope} "
316
+ f"RETURN {_ROUTE_RESOLVE_RETURN} LIMIT $lim",
317
+ {"topic": identifier, "lim": lim, **scope_params},
318
+ )
319
+ for row in rows:
320
+ out.append((_node_ref_from_row("route", row), "route_topic_prefix", len(identifier)))
321
+
298
322
  return _drop_route_mirrors(g, out)
299
323
 
300
324