codingest 0.2.25__tar.gz → 0.2.27__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 (111) hide show
  1. {codingest-0.2.25 → codingest-0.2.27}/Cargo.lock +17 -15
  2. {codingest-0.2.25 → codingest-0.2.27}/Cargo.toml +18 -4
  3. {codingest-0.2.25 → codingest-0.2.27}/PKG-INFO +5 -5
  4. {codingest-0.2.25 → codingest-0.2.27}/README.md +3 -3
  5. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest/Cargo.toml +1 -1
  6. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest/src/methodology.rs +26 -1
  7. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest-cli/Cargo.toml +1 -1
  8. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest-cli/skills/codingest-code-review/SKILL.md +1 -1
  9. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest-cli/skills/codingest-code-review/references/mcp-upgrade.md +1 -1
  10. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest-mcp/Cargo.toml +1 -1
  11. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest-mcp/tests/response_contract.rs +1 -1
  12. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest-py/Cargo.toml +3 -3
  13. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest-py/src/lib.rs +1 -1
  14. {codingest-0.2.25 → codingest-0.2.27}/pyproject.toml +2 -2
  15. {codingest-0.2.25 → codingest-0.2.27}/LICENSE +0 -0
  16. {codingest-0.2.25 → codingest-0.2.27}/codingest/__init__.py +0 -0
  17. {codingest-0.2.25 → codingest-0.2.27}/codingest/__init__.pyi +0 -0
  18. {codingest-0.2.25 → codingest-0.2.27}/codingest/cli.py +0 -0
  19. {codingest-0.2.25 → codingest-0.2.27}/codingest/mcp_server.py +0 -0
  20. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest/assets/code_review/recipes.json +0 -0
  21. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest/assets/code_review/skill.md +0 -0
  22. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest/src/bin/codingest_bench.rs +0 -0
  23. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest/src/bin/codingest_stats.rs +0 -0
  24. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest/src/builder/call_edges.rs +0 -0
  25. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest/src/builder/js_workspace.rs +0 -0
  26. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest/src/builder/load/edge_frames.rs +0 -0
  27. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest/src/builder/load/entity_frames.rs +0 -0
  28. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest/src/builder/load.rs +0 -0
  29. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest/src/builder/mod.rs +0 -0
  30. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest/src/builder/other_edges.rs +0 -0
  31. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest/src/builder/routes/django.rs +0 -0
  32. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest/src/builder/routes/fastapi.rs +0 -0
  33. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest/src/builder/routes/flask.rs +0 -0
  34. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest/src/builder/routes/mod.rs +0 -0
  35. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest/src/builder/semantic_edges.rs +0 -0
  36. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest/src/builder/type_edges.rs +0 -0
  37. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest/src/cross_lang.rs +0 -0
  38. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest/src/docs/mod.rs +0 -0
  39. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest/src/docs/rst.rs +0 -0
  40. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest/src/lib.rs +0 -0
  41. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest/src/manifest/mod.rs +0 -0
  42. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest/src/models.rs +0 -0
  43. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest/src/parsers/agc.rs +0 -0
  44. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest/src/parsers/cpp.rs +0 -0
  45. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest/src/parsers/csharp.rs +0 -0
  46. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest/src/parsers/css.rs +0 -0
  47. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest/src/parsers/dart.rs +0 -0
  48. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest/src/parsers/go.rs +0 -0
  49. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest/src/parsers/html.rs +0 -0
  50. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest/src/parsers/java.rs +0 -0
  51. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest/src/parsers/julia.rs +0 -0
  52. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest/src/parsers/mod.rs +0 -0
  53. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest/src/parsers/php.rs +0 -0
  54. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest/src/parsers/python.rs +0 -0
  55. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest/src/parsers/r.rs +0 -0
  56. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest/src/parsers/registry.rs +0 -0
  57. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest/src/parsers/rust_lang.rs +0 -0
  58. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest/src/parsers/shared.rs +0 -0
  59. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest/src/parsers/swift.rs +0 -0
  60. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest/src/parsers/typescript.rs +0 -0
  61. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest/src/repo.rs +0 -0
  62. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest/src/rev.rs +0 -0
  63. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest/tests/agc_apollo.rs +0 -0
  64. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest/tests/goldens/README.md +0 -0
  65. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest/tests/goldens/agc_basic.sha256 +0 -0
  66. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest/tests/goldens/cpp_extern_c.sha256 +0 -0
  67. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest/tests/goldens/cpp_include.sha256 +0 -0
  68. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest/tests/goldens/cross_ts_py.sha256 +0 -0
  69. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest/tests/goldens/csharp_using_alias.sha256 +0 -0
  70. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest/tests/goldens/dart_import.sha256 +0 -0
  71. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest/tests/goldens/dart_part_of.sha256 +0 -0
  72. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest/tests/goldens/docs_ext_collide.sha256 +0 -0
  73. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest/tests/goldens/docs_mdx.sha256 +0 -0
  74. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest/tests/goldens/dup_minified_assets.sha256 +0 -0
  75. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest/tests/goldens/go_interface.sha256 +0 -0
  76. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest/tests/goldens/html_js_lang_group.sha256 +0 -0
  77. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest/tests/goldens/java_javadoc.sha256 +0 -0
  78. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest/tests/goldens/julia_basic.sha256 +0 -0
  79. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest/tests/goldens/php_group_use.sha256 +0 -0
  80. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest/tests/goldens/py_basic.sha256 +0 -0
  81. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest/tests/goldens/py_import.sha256 +0 -0
  82. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest/tests/goldens/py_inheritance.sha256 +0 -0
  83. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest/tests/goldens/py_nested_defs.sha256 +0 -0
  84. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest/tests/goldens/py_routes_dup.sha256 +0 -0
  85. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest/tests/goldens/py_src_layout.sha256 +0 -0
  86. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest/tests/goldens/r_basic.sha256 +0 -0
  87. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest/tests/goldens/rust_import.sha256 +0 -0
  88. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest/tests/goldens/rust_inline_mod.sha256 +0 -0
  89. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest/tests/goldens/rust_xfile.sha256 +0 -0
  90. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest/tests/goldens/swift_basic.sha256 +0 -0
  91. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest/tests/goldens/ts_callback.sha256 +0 -0
  92. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest/tests/goldens/ts_closure_scope.sha256 +0 -0
  93. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest/tests/goldens/ts_hof_binding.sha256 +0 -0
  94. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest/tests/goldens/ts_monorepo.sha256 +0 -0
  95. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest/tests/goldens/web_served_root.sha256 +0 -0
  96. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest/tests/grammar_kinds.rs +0 -0
  97. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest/tests/parity.rs +0 -0
  98. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest/tests/traversal_semantics.rs +0 -0
  99. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest-cli/skills/codingest-code-review/references/public-repositories.md +0 -0
  100. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest-cli/skills/codingest-code-review/references/queries.md +0 -0
  101. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest-cli/src/code_tree_cli.rs +0 -0
  102. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest-cli/src/lib.rs +0 -0
  103. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest-cli/src/main.rs +0 -0
  104. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest-cli/src/query.rs +0 -0
  105. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest-cli/src/skill.rs +0 -0
  106. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest-cli/src/skill_assets.rs +0 -0
  107. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest-cli/tests/embed_skills.rs +0 -0
  108. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest-cli/tests/exit_codes.rs +0 -0
  109. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest-cli/tests/skill_recipes.rs +0 -0
  110. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest-mcp/src/lib.rs +0 -0
  111. {codingest-0.2.25 → codingest-0.2.27}/crates/codingest-mcp/src/main.rs +0 -0
@@ -302,7 +302,7 @@ dependencies = [
302
302
 
303
303
  [[package]]
304
304
  name = "codingest"
305
- version = "0.2.25"
305
+ version = "0.2.27"
306
306
  dependencies = [
307
307
  "aho-corasick",
308
308
  "base64 0.22.1",
@@ -338,7 +338,7 @@ dependencies = [
338
338
 
339
339
  [[package]]
340
340
  name = "codingest-cli"
341
- version = "0.2.25"
341
+ version = "0.2.27"
342
342
  dependencies = [
343
343
  "anyhow",
344
344
  "clap",
@@ -350,7 +350,7 @@ dependencies = [
350
350
 
351
351
  [[package]]
352
352
  name = "codingest-mcp"
353
- version = "0.2.25"
353
+ version = "0.2.27"
354
354
  dependencies = [
355
355
  "anyhow",
356
356
  "codingest",
@@ -361,7 +361,7 @@ dependencies = [
361
361
 
362
362
  [[package]]
363
363
  name = "codingest-py"
364
- version = "0.2.25"
364
+ version = "0.2.27"
365
365
  dependencies = [
366
366
  "codingest",
367
367
  "codingest-cli",
@@ -1368,14 +1368,15 @@ dependencies = [
1368
1368
 
1369
1369
  [[package]]
1370
1370
  name = "kglite"
1371
- version = "0.17.10"
1371
+ version = "0.19.1"
1372
1372
  source = "registry+https://github.com/rust-lang/crates.io-index"
1373
- checksum = "e14ff39495529815519e61ed78e7cac6aaaa37b5641b79e78693bf7ae0befa98"
1373
+ checksum = "b6120ef067a56359dc7d00d4ab4cc9d04b10893c8ee8400df87822e4887640bc"
1374
1374
  dependencies = [
1375
1375
  "bzip2",
1376
1376
  "chrono",
1377
1377
  "crc32fast",
1378
1378
  "csv",
1379
+ "fixedbitset",
1379
1380
  "flate2",
1380
1381
  "fs2",
1381
1382
  "geo",
@@ -1405,12 +1406,12 @@ dependencies = [
1405
1406
 
1406
1407
  [[package]]
1407
1408
  name = "kglite-mcp-server"
1408
- version = "0.17.10"
1409
+ version = "0.19.1"
1409
1410
  source = "registry+https://github.com/rust-lang/crates.io-index"
1410
- checksum = "4fb67310c835576a085fb0f35c6a7e70bfbe2bde663809d9b1d1bbcc55986b00"
1411
+ checksum = "2d3123b0185fe984975c795edb312f703c4d6435b1430480e16d98cf0f3bbb0f"
1411
1412
  dependencies = [
1412
1413
  "anyhow",
1413
- "base64 0.22.1",
1414
+ "base64 0.23.1",
1414
1415
  "bytes",
1415
1416
  "chrono",
1416
1417
  "clap",
@@ -1428,6 +1429,7 @@ dependencies = [
1428
1429
  "tokio",
1429
1430
  "tokio-util",
1430
1431
  "tracing",
1432
+ "yaml-rust2",
1431
1433
  ]
1432
1434
 
1433
1435
  [[package]]
@@ -3346,27 +3348,27 @@ checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b"
3346
3348
 
3347
3349
  [[package]]
3348
3350
  name = "zstd"
3349
- version = "0.13.3"
3351
+ version = "0.14.0"
3350
3352
  source = "registry+https://github.com/rust-lang/crates.io-index"
3351
- checksum = "e91ee311a569c327171651566e07972200e76fcfe2242a4fa446149a3881c08a"
3353
+ checksum = "bf06bd8162af0734b344780deb55b42a2429ae430870d13fcc12f238e880fe6e"
3352
3354
  dependencies = [
3353
3355
  "zstd-safe",
3354
3356
  ]
3355
3357
 
3356
3358
  [[package]]
3357
3359
  name = "zstd-safe"
3358
- version = "7.2.4"
3360
+ version = "8.0.0"
3359
3361
  source = "registry+https://github.com/rust-lang/crates.io-index"
3360
- checksum = "8f49c4d5f0abb602a93fb8736af2a4f4dd9512e36f7f570d66e65ff867ed3b9d"
3362
+ checksum = "ae42c0555055784c70058d19ba8e275528e8a99a706684868ace5da4e716a4ab"
3361
3363
  dependencies = [
3362
3364
  "zstd-sys",
3363
3365
  ]
3364
3366
 
3365
3367
  [[package]]
3366
3368
  name = "zstd-sys"
3367
- version = "2.0.16+zstd.1.5.7"
3369
+ version = "2.1.0+zstd.1.5.7"
3368
3370
  source = "registry+https://github.com/rust-lang/crates.io-index"
3369
- checksum = "91e19ebc2adc8f83e43039e79776e3fda8ca919132d68a1fed6a5faca2683748"
3371
+ checksum = "0ef0a8027ec3ee71300ab3bcbcd0393f434aa72b91ca6d635a39941deae8eea0"
3370
3372
  dependencies = [
3371
3373
  "cc",
3372
3374
  "pkg-config",
@@ -3,7 +3,7 @@ members = ["crates/codingest", "crates/codingest-cli", "crates/codingest-mcp", "
3
3
  resolver = "2"
4
4
 
5
5
  [workspace.package]
6
- version = "0.2.25"
6
+ version = "0.2.27"
7
7
  edition = "2021"
8
8
  rust-version = "1.88"
9
9
  license = "MIT"
@@ -12,7 +12,21 @@ repository = "https://github.com/kkollsga/codingest"
12
12
  [workspace.dependencies]
13
13
  base64 = "0.22"
14
14
  sha2 = "0.11"
15
- # kglite engine + MCP server — imported as crates.io libraries. The 0.17.10
15
+ # kglite engine + MCP server — imported as crates.io libraries. The 0.19.1
16
+ # floor moves the engine one minor (0.18 -> 0.19); the history below records
17
+ # the preceding 0.18.0 floor and earlier ones. The 0.18.0
18
+ # floor is a minor release whose headline — relationship embeddings and text
19
+ # indexes at parity with nodes — codingest does not consume: the builder
20
+ # writes no embeddings and no text indexes, and every frozen parity golden is
21
+ # byte-identical across the move. It is taken because the Python pairing in
22
+ # pyproject.toml must follow the engine minor (KGLite may change the `.kgl`
23
+ # format across a minor). The one source edit it needed is 0.17.12's: the
24
+ # public `RecipeRecord` gained `tool: Option<String>` (a recipe query served as
25
+ # its own MCP tool), and `methodology::recipe_records` now carries it through
26
+ # from the recipe manifest so a graph-carried record matches the compiled
27
+ # catalogue. 0.17.11–0.17.12 also keep parameter schemas in the
28
+ # `run_recipe_query` catalogue block codingest-mcp serves.
29
+ # The preceding 0.17.10
16
30
  # floor is a pure Cypher-executor fix release: `cargo semver-checks` reports no
17
31
  # API change across 196 checks, and codingest needs no source edit for it. It
18
32
  # moves anyway because both fixes were SILENT wrong answers on the query
@@ -622,8 +636,8 @@ sha2 = "0.11"
622
636
  # and no disk storage. Neither 0.15.7 nor 0.15.8 changes the `kglite::api` we
623
637
  # call, graph output, property encoding, or `.kgl` serialization.
624
638
  # Keep both libraries aligned so the graph and server share one engine release.
625
- kglite = { version = "0.17.10", default-features = false }
626
- kglite-mcp-server = { version = "0.17.10", default-features = false }
639
+ kglite = { version = "0.19.1", default-features = false }
640
+ kglite-mcp-server = { version = "0.19.1", default-features = false }
627
641
 
628
642
  # Dependency debuginfo capped at line tables (kglite coordination, 2026-08-31,
629
643
  # after unbounded debug trees filled the build-cache disk to zero): a
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: codingest
3
- Version: 0.2.25
3
+ Version: 0.2.27
4
4
  Classifier: Development Status :: 3 - Alpha
5
5
  Classifier: Intended Audience :: Developers
6
6
  Classifier: Programming Language :: Python :: 3
@@ -12,7 +12,7 @@ Classifier: Programming Language :: Python :: 3.14
12
12
  Classifier: Programming Language :: Rust
13
13
  Classifier: Topic :: Software Development
14
14
  Classifier: Topic :: Software Development :: Libraries
15
- Requires-Dist: kglite>=0.17.10,<0.18
15
+ Requires-Dist: kglite>=0.19.1,<0.20
16
16
  License-File: LICENSE
17
17
  Summary: Build fast, queryable code graphs for AI agents, MCP code review, and local or GitHub repository analysis.
18
18
  Keywords: ai-agents,mcp,code-review,knowledge-graph,code-analysis,github,tree-sitter,cypher
@@ -194,7 +194,7 @@ codingest skill install # code-review Agent Skill
194
194
  ```
195
195
 
196
196
  The wheel bundles every grammar plus the `codingest` and `codingest-mcp`
197
- commands. KGLite ≥0.17.10 is installed automatically as the query/storage
197
+ commands. KGLite ≥0.19.1 is installed automatically as the query/storage
198
198
  engine; its MCP server and the transitive `mcp-methods` framework power the
199
199
  builder-aware Codingest server. Nothing else needs to be installed.
200
200
 
@@ -207,7 +207,7 @@ Python prerequisites.
207
207
  ```toml
208
208
  [dependencies]
209
209
  codingest = "0.2"
210
- kglite = "0.17.10"
210
+ kglite = "0.19.1"
211
211
  ```
212
212
 
213
213
  ```rust
@@ -279,7 +279,7 @@ diagnostic.
279
279
  ## Dependency policy
280
280
 
281
281
  `kglite` and `kglite-mcp-server` use matching crates.io requirements with a
282
- 0.17.10 minimum and a shared lockfile. This keeps the builder, persistence
282
+ 0.19.1 minimum and a shared lockfile. This keeps the builder, persistence
283
283
  handoff, and embedded MCP server on one compatible engine patch line.
284
284
 
285
285
  ## Parity with the (now-removed) in-tree component
@@ -167,7 +167,7 @@ codingest skill install # code-review Agent Skill
167
167
  ```
168
168
 
169
169
  The wheel bundles every grammar plus the `codingest` and `codingest-mcp`
170
- commands. KGLite ≥0.17.10 is installed automatically as the query/storage
170
+ commands. KGLite ≥0.19.1 is installed automatically as the query/storage
171
171
  engine; its MCP server and the transitive `mcp-methods` framework power the
172
172
  builder-aware Codingest server. Nothing else needs to be installed.
173
173
 
@@ -180,7 +180,7 @@ Python prerequisites.
180
180
  ```toml
181
181
  [dependencies]
182
182
  codingest = "0.2"
183
- kglite = "0.17.10"
183
+ kglite = "0.19.1"
184
184
  ```
185
185
 
186
186
  ```rust
@@ -252,7 +252,7 @@ diagnostic.
252
252
  ## Dependency policy
253
253
 
254
254
  `kglite` and `kglite-mcp-server` use matching crates.io requirements with a
255
- 0.17.10 minimum and a shared lockfile. This keeps the builder, persistence
255
+ 0.19.1 minimum and a shared lockfile. This keeps the builder, persistence
256
256
  handoff, and embedded MCP server on one compatible engine patch line.
257
257
 
258
258
  ## Parity with the (now-removed) in-tree component
@@ -10,7 +10,7 @@ keywords = ["knowledge-graph", "code-analysis", "tree-sitter", "cypher", "kglite
10
10
  categories = ["development-tools", "parser-implementations"]
11
11
 
12
12
  # Requires the kglite 0.15 engine API (`kglite::api::code_entities`); the
13
- # workspace pins the current engine floor (0.17.10).
13
+ # workspace pins the current engine floor (0.19.1).
14
14
 
15
15
  [lib]
16
16
  name = "codingest"
@@ -87,7 +87,10 @@ pub fn recipe_catalog() -> Result<RecipeCatalog, RecipeCatalogError> {
87
87
  /// The catalogue as individual records, in `(recipe, name)` order, for
88
88
  /// writing into a graph with [`attach`].
89
89
  pub fn recipe_records() -> Vec<RecipeRecord> {
90
- let value = recipe_catalog_value();
90
+ records_from_catalog_value(&recipe_catalog_value())
91
+ }
92
+
93
+ fn records_from_catalog_value(value: &Value) -> Vec<RecipeRecord> {
91
94
  let groups = value.as_object().expect("recipes.json root is a mapping");
92
95
  let mut records = BTreeMap::new();
93
96
  for (recipe, group) in groups {
@@ -111,6 +114,9 @@ pub fn recipe_records() -> Vec<RecipeRecord> {
111
114
  parameters: query["parameters"].clone(),
112
115
  cypher: query["cypher"].as_str().unwrap_or_default().to_string(),
113
116
  recipe_description: recipe_description.clone(),
117
+ // Carried through so a graph-carried record serves under
118
+ // the same MCP tool name the manifest catalogue does.
119
+ tool: query["tool"].as_str().map(str::to_string),
114
120
  },
115
121
  );
116
122
  }
@@ -185,6 +191,25 @@ mod tests {
185
191
  }
186
192
  }
187
193
 
194
+ #[test]
195
+ fn a_declared_tool_name_survives_into_the_record() {
196
+ let mut value = recipe_catalog_value();
197
+ value[RECIPE_GROUP]["queries"]["callers_page"]["tool"] = "find_callers".into();
198
+ let records = records_from_catalog_value(&value);
199
+ let tools: Vec<(&str, Option<&str>)> = records
200
+ .iter()
201
+ .map(|record| (record.name.as_str(), record.tool.as_deref()))
202
+ .filter(|(_, tool)| tool.is_some())
203
+ .collect();
204
+ assert_eq!(tools, [("callers_page", Some("find_callers"))]);
205
+ let tagged = records.iter().find(|r| r.name == "callers_page").unwrap();
206
+ recipes::validate(tagged).unwrap_or_else(|error| panic!("{error}"));
207
+ assert!(
208
+ recipe_records().iter().all(|record| record.tool.is_none()),
209
+ "the bundled catalogue declares no tool names"
210
+ );
211
+ }
212
+
188
213
  #[test]
189
214
  fn skill_record_validates_fits_the_body_ceiling_and_carries_no_frontmatter() {
190
215
  let record = skill_record();
@@ -14,7 +14,7 @@ name = "codingest"
14
14
  path = "src/main.rs"
15
15
 
16
16
  [dependencies]
17
- codingest = { version = "0.2.25", path = "../codingest" }
17
+ codingest = { version = "0.2.27", path = "../codingest" }
18
18
  kglite = { workspace = true }
19
19
  anyhow = "1.0.104"
20
20
  clap = { version = "4.6.4", features = ["derive"] }
@@ -14,7 +14,7 @@ git diff, source reading, and literal-text search; it does not replace them.
14
14
  > codingest` also provides the builder-aware `codingest-mcp` server and a
15
15
  > compatible graph engine. Rust-only environments can alternatively use Cargo.
16
16
  > Examples that invoke the external `kglite` CLI require a compatible
17
- > `kglite>=0.17.10,<0.18`; verify `kglite --version` before using its
17
+ > `kglite>=0.19.1,<0.20`; verify `kglite --version` before using its
18
18
  > agent-response features.
19
19
 
20
20
  Inspect the diff and repository guidance first. Identify changed symbols and
@@ -54,7 +54,7 @@ preconditions are still current.
54
54
  ## External CLI agent output is optional
55
55
 
56
56
  The examples below require an external `kglite` CLI satisfying
57
- `>=0.17.10,<0.18`:
57
+ `>=0.19.1,<0.20`:
58
58
 
59
59
  ```console
60
60
  kglite --version
@@ -14,7 +14,7 @@ name = "codingest-mcp"
14
14
  path = "src/main.rs"
15
15
 
16
16
  [dependencies]
17
- codingest = { version = "0.2.25", path = "../codingest" }
17
+ codingest = { version = "0.2.27", path = "../codingest" }
18
18
  kglite-mcp-server = { workspace = true }
19
19
  anyhow = "1.0.104"
20
20
 
@@ -802,7 +802,7 @@ fn graph_overview_schema_refreshes_after_root_switch() {
802
802
  // ── Producer methodology (kglite 0.17.7 `with_skills` / `with_recipes`) ────
803
803
  //
804
804
  // The fixture manifest never mentions `skills:`, which is the shape every
805
- // codingest-mcp deployment ships in. Under kglite 0.17.10 that means the
805
+ // codingest-mcp deployment ships in. Under kglite 0.18.0 that means the
806
806
  // server serves kglite's bundled methodology plus codingest's own layer —
807
807
  // the `code_review` skill and the `code_review/*` recipe catalogue — in every
808
808
  // mode, including this manifest-driven workspace boot.
@@ -42,7 +42,7 @@ doctest = false
42
42
  pyo3 = { version = "0.29" }
43
43
  # The engine-free builder (parsers, call/type/route edges, rev merge, repo
44
44
  # clone, manifest reader). Docs pass gated by this crate's `docs` feature.
45
- codingest = { version = "0.2.25", path = "../codingest", default-features = false }
45
+ codingest = { version = "0.2.27", path = "../codingest", default-features = false }
46
46
  # `.kgl` persistence (`kglite::api::io::save_graph`) for the serialize half of
47
47
  # the build-then-load handoff, plus the `DirGraph` type the builder returns.
48
48
  kglite = { workspace = true }
@@ -53,9 +53,9 @@ tempfile = "3.27.0"
53
53
  # through `_run_cli`, so `pip install codingest` also installs the `codingest`
54
54
  # command without a second wheel or a duplicated builder build. Mirrors
55
55
  # kglite-py's `kglite-cli` bundling.
56
- codingest-cli = { version = "0.2.25", path = "../codingest-cli" }
56
+ codingest-cli = { version = "0.2.27", path = "../codingest-cli" }
57
57
  # Source-building MCP composition. The graph server and generic MCP lifecycle
58
58
  # remain owned by its existing kglite-mcp-server -> mcp-methods Rust dependency
59
59
  # chain; linking this thin library into the extension gives pip users the same
60
60
  # builder-aware server as the standalone `codingest-mcp` binary.
61
- codingest-mcp = { version = "0.2.25", path = "../codingest-mcp" }
61
+ codingest-mcp = { version = "0.2.27", path = "../codingest-mcp" }
@@ -86,7 +86,7 @@ fn load_via_kglite(py: Python<'_>, path: &Path) -> PyResult<Py<PyAny>> {
86
86
  PyRuntimeError::new_err(format!(
87
87
  "codingest.build() returns a kglite.KnowledgeGraph, but importing \
88
88
  `kglite` failed ({e}). Install it: `pip install \
89
- 'kglite>=0.17.10,<0.18'`."
89
+ 'kglite>=0.19.1,<0.20'`."
90
90
  ))
91
91
  })?;
92
92
  let graph = kglite.call_method1("load", (path.to_string_lossy().as_ref(),))?;
@@ -42,9 +42,9 @@ dynamic = ["version"]
42
42
  # minor releases (e.g. the v3->v4 break, which refuses old files outright), so
43
43
  # pip must never be free to pair our writer with a reader from a different
44
44
  # minor. This range therefore mirrors the Cargo semver range for the pin above
45
- # (`version = "0.17.10"` == `>=0.17.10,<0.18.0`) exactly — bump both together.
45
+ # (`version = "0.19.1"` == `>=0.19.1,<0.20.0`) exactly — bump both together.
46
46
  dependencies = [
47
- "kglite>=0.17.10,<0.18",
47
+ "kglite>=0.19.1,<0.20",
48
48
  ]
49
49
 
50
50
  [project.urls]
File without changes
File without changes