codingest 0.2.25__tar.gz → 0.2.26__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.26}/Cargo.lock +8 -8
  2. {codingest-0.2.25 → codingest-0.2.26}/Cargo.toml +16 -4
  3. {codingest-0.2.25 → codingest-0.2.26}/PKG-INFO +5 -5
  4. {codingest-0.2.25 → codingest-0.2.26}/README.md +3 -3
  5. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest/Cargo.toml +1 -1
  6. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest/src/methodology.rs +26 -1
  7. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest-cli/Cargo.toml +1 -1
  8. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest-cli/skills/codingest-code-review/SKILL.md +1 -1
  9. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest-cli/skills/codingest-code-review/references/mcp-upgrade.md +1 -1
  10. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest-mcp/Cargo.toml +1 -1
  11. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest-mcp/tests/response_contract.rs +1 -1
  12. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest-py/Cargo.toml +3 -3
  13. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest-py/src/lib.rs +1 -1
  14. {codingest-0.2.25 → codingest-0.2.26}/pyproject.toml +2 -2
  15. {codingest-0.2.25 → codingest-0.2.26}/LICENSE +0 -0
  16. {codingest-0.2.25 → codingest-0.2.26}/codingest/__init__.py +0 -0
  17. {codingest-0.2.25 → codingest-0.2.26}/codingest/__init__.pyi +0 -0
  18. {codingest-0.2.25 → codingest-0.2.26}/codingest/cli.py +0 -0
  19. {codingest-0.2.25 → codingest-0.2.26}/codingest/mcp_server.py +0 -0
  20. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest/assets/code_review/recipes.json +0 -0
  21. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest/assets/code_review/skill.md +0 -0
  22. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest/src/bin/codingest_bench.rs +0 -0
  23. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest/src/bin/codingest_stats.rs +0 -0
  24. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest/src/builder/call_edges.rs +0 -0
  25. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest/src/builder/js_workspace.rs +0 -0
  26. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest/src/builder/load/edge_frames.rs +0 -0
  27. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest/src/builder/load/entity_frames.rs +0 -0
  28. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest/src/builder/load.rs +0 -0
  29. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest/src/builder/mod.rs +0 -0
  30. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest/src/builder/other_edges.rs +0 -0
  31. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest/src/builder/routes/django.rs +0 -0
  32. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest/src/builder/routes/fastapi.rs +0 -0
  33. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest/src/builder/routes/flask.rs +0 -0
  34. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest/src/builder/routes/mod.rs +0 -0
  35. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest/src/builder/semantic_edges.rs +0 -0
  36. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest/src/builder/type_edges.rs +0 -0
  37. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest/src/cross_lang.rs +0 -0
  38. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest/src/docs/mod.rs +0 -0
  39. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest/src/docs/rst.rs +0 -0
  40. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest/src/lib.rs +0 -0
  41. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest/src/manifest/mod.rs +0 -0
  42. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest/src/models.rs +0 -0
  43. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest/src/parsers/agc.rs +0 -0
  44. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest/src/parsers/cpp.rs +0 -0
  45. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest/src/parsers/csharp.rs +0 -0
  46. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest/src/parsers/css.rs +0 -0
  47. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest/src/parsers/dart.rs +0 -0
  48. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest/src/parsers/go.rs +0 -0
  49. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest/src/parsers/html.rs +0 -0
  50. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest/src/parsers/java.rs +0 -0
  51. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest/src/parsers/julia.rs +0 -0
  52. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest/src/parsers/mod.rs +0 -0
  53. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest/src/parsers/php.rs +0 -0
  54. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest/src/parsers/python.rs +0 -0
  55. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest/src/parsers/r.rs +0 -0
  56. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest/src/parsers/registry.rs +0 -0
  57. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest/src/parsers/rust_lang.rs +0 -0
  58. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest/src/parsers/shared.rs +0 -0
  59. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest/src/parsers/swift.rs +0 -0
  60. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest/src/parsers/typescript.rs +0 -0
  61. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest/src/repo.rs +0 -0
  62. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest/src/rev.rs +0 -0
  63. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest/tests/agc_apollo.rs +0 -0
  64. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest/tests/goldens/README.md +0 -0
  65. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest/tests/goldens/agc_basic.sha256 +0 -0
  66. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest/tests/goldens/cpp_extern_c.sha256 +0 -0
  67. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest/tests/goldens/cpp_include.sha256 +0 -0
  68. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest/tests/goldens/cross_ts_py.sha256 +0 -0
  69. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest/tests/goldens/csharp_using_alias.sha256 +0 -0
  70. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest/tests/goldens/dart_import.sha256 +0 -0
  71. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest/tests/goldens/dart_part_of.sha256 +0 -0
  72. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest/tests/goldens/docs_ext_collide.sha256 +0 -0
  73. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest/tests/goldens/docs_mdx.sha256 +0 -0
  74. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest/tests/goldens/dup_minified_assets.sha256 +0 -0
  75. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest/tests/goldens/go_interface.sha256 +0 -0
  76. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest/tests/goldens/html_js_lang_group.sha256 +0 -0
  77. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest/tests/goldens/java_javadoc.sha256 +0 -0
  78. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest/tests/goldens/julia_basic.sha256 +0 -0
  79. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest/tests/goldens/php_group_use.sha256 +0 -0
  80. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest/tests/goldens/py_basic.sha256 +0 -0
  81. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest/tests/goldens/py_import.sha256 +0 -0
  82. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest/tests/goldens/py_inheritance.sha256 +0 -0
  83. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest/tests/goldens/py_nested_defs.sha256 +0 -0
  84. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest/tests/goldens/py_routes_dup.sha256 +0 -0
  85. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest/tests/goldens/py_src_layout.sha256 +0 -0
  86. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest/tests/goldens/r_basic.sha256 +0 -0
  87. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest/tests/goldens/rust_import.sha256 +0 -0
  88. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest/tests/goldens/rust_inline_mod.sha256 +0 -0
  89. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest/tests/goldens/rust_xfile.sha256 +0 -0
  90. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest/tests/goldens/swift_basic.sha256 +0 -0
  91. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest/tests/goldens/ts_callback.sha256 +0 -0
  92. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest/tests/goldens/ts_closure_scope.sha256 +0 -0
  93. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest/tests/goldens/ts_hof_binding.sha256 +0 -0
  94. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest/tests/goldens/ts_monorepo.sha256 +0 -0
  95. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest/tests/goldens/web_served_root.sha256 +0 -0
  96. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest/tests/grammar_kinds.rs +0 -0
  97. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest/tests/parity.rs +0 -0
  98. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest/tests/traversal_semantics.rs +0 -0
  99. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest-cli/skills/codingest-code-review/references/public-repositories.md +0 -0
  100. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest-cli/skills/codingest-code-review/references/queries.md +0 -0
  101. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest-cli/src/code_tree_cli.rs +0 -0
  102. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest-cli/src/lib.rs +0 -0
  103. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest-cli/src/main.rs +0 -0
  104. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest-cli/src/query.rs +0 -0
  105. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest-cli/src/skill.rs +0 -0
  106. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest-cli/src/skill_assets.rs +0 -0
  107. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest-cli/tests/embed_skills.rs +0 -0
  108. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest-cli/tests/exit_codes.rs +0 -0
  109. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest-cli/tests/skill_recipes.rs +0 -0
  110. {codingest-0.2.25 → codingest-0.2.26}/crates/codingest-mcp/src/lib.rs +0 -0
  111. {codingest-0.2.25 → codingest-0.2.26}/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.26"
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.26"
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.26"
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.26"
365
365
  dependencies = [
366
366
  "codingest",
367
367
  "codingest-cli",
@@ -1368,9 +1368,9 @@ dependencies = [
1368
1368
 
1369
1369
  [[package]]
1370
1370
  name = "kglite"
1371
- version = "0.17.10"
1371
+ version = "0.18.0"
1372
1372
  source = "registry+https://github.com/rust-lang/crates.io-index"
1373
- checksum = "e14ff39495529815519e61ed78e7cac6aaaa37b5641b79e78693bf7ae0befa98"
1373
+ checksum = "e8123ffd360421f86323621abdc48b793c0c6c4094e6927221d8bb6eaa3f182e"
1374
1374
  dependencies = [
1375
1375
  "bzip2",
1376
1376
  "chrono",
@@ -1405,9 +1405,9 @@ dependencies = [
1405
1405
 
1406
1406
  [[package]]
1407
1407
  name = "kglite-mcp-server"
1408
- version = "0.17.10"
1408
+ version = "0.18.0"
1409
1409
  source = "registry+https://github.com/rust-lang/crates.io-index"
1410
- checksum = "4fb67310c835576a085fb0f35c6a7e70bfbe2bde663809d9b1d1bbcc55986b00"
1410
+ checksum = "792f7704a27b404463b18e82f01b17b6fc07cbcd6ef8392b84fdf1e83d17ff4e"
1411
1411
  dependencies = [
1412
1412
  "anyhow",
1413
1413
  "base64 0.22.1",
@@ -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.26"
7
7
  edition = "2021"
8
8
  rust-version = "1.88"
9
9
  license = "MIT"
@@ -12,7 +12,19 @@ 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.18.0
16
+ # floor is a minor release whose headline — relationship embeddings and text
17
+ # indexes at parity with nodes — codingest does not consume: the builder
18
+ # writes no embeddings and no text indexes, and every frozen parity golden is
19
+ # byte-identical across the move. It is taken because the Python pairing in
20
+ # pyproject.toml must follow the engine minor (KGLite may change the `.kgl`
21
+ # format across a minor). The one source edit it needed is 0.17.12's: the
22
+ # public `RecipeRecord` gained `tool: Option<String>` (a recipe query served as
23
+ # its own MCP tool), and `methodology::recipe_records` now carries it through
24
+ # from the recipe manifest so a graph-carried record matches the compiled
25
+ # catalogue. 0.17.11–0.17.12 also keep parameter schemas in the
26
+ # `run_recipe_query` catalogue block codingest-mcp serves.
27
+ # The preceding 0.17.10
16
28
  # floor is a pure Cypher-executor fix release: `cargo semver-checks` reports no
17
29
  # API change across 196 checks, and codingest needs no source edit for it. It
18
30
  # moves anyway because both fixes were SILENT wrong answers on the query
@@ -622,8 +634,8 @@ sha2 = "0.11"
622
634
  # and no disk storage. Neither 0.15.7 nor 0.15.8 changes the `kglite::api` we
623
635
  # call, graph output, property encoding, or `.kgl` serialization.
624
636
  # 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 }
637
+ kglite = { version = "0.18.0", default-features = false }
638
+ kglite-mcp-server = { version = "0.18.0", default-features = false }
627
639
 
628
640
  # Dependency debuginfo capped at line tables (kglite coordination, 2026-08-31,
629
641
  # 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.26
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.18.0,<0.19
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.18.0 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.18.0"
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.18.0 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.18.0 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.18.0"
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.18.0 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.18.0).
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.26", 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.18.0,<0.19`; 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.18.0,<0.19`:
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.26", 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.26", 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.26", 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.26", 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.18.0,<0.19'`."
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.18.0"` == `>=0.18.0,<0.19.0`) exactly — bump both together.
46
46
  dependencies = [
47
- "kglite>=0.17.10,<0.18",
47
+ "kglite>=0.18.0,<0.19",
48
48
  ]
49
49
 
50
50
  [project.urls]
File without changes
File without changes