codingest 0.2.23__tar.gz → 0.2.24__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.23 → codingest-0.2.24}/Cargo.lock +29 -10
  2. {codingest-0.2.23 → codingest-0.2.24}/Cargo.toml +48 -4
  3. {codingest-0.2.23 → codingest-0.2.24}/PKG-INFO +5 -5
  4. {codingest-0.2.23 → codingest-0.2.24}/README.md +3 -3
  5. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest/Cargo.toml +1 -1
  6. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest/src/docs/mod.rs +13 -4
  7. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest-cli/Cargo.toml +1 -1
  8. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest-cli/skills/codingest-code-review/SKILL.md +1 -1
  9. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest-cli/skills/codingest-code-review/references/mcp-upgrade.md +1 -1
  10. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest-mcp/Cargo.toml +1 -1
  11. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest-mcp/tests/response_contract.rs +1 -1
  12. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest-py/Cargo.toml +3 -3
  13. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest-py/src/lib.rs +1 -1
  14. {codingest-0.2.23 → codingest-0.2.24}/pyproject.toml +2 -2
  15. {codingest-0.2.23 → codingest-0.2.24}/LICENSE +0 -0
  16. {codingest-0.2.23 → codingest-0.2.24}/codingest/__init__.py +0 -0
  17. {codingest-0.2.23 → codingest-0.2.24}/codingest/__init__.pyi +0 -0
  18. {codingest-0.2.23 → codingest-0.2.24}/codingest/cli.py +0 -0
  19. {codingest-0.2.23 → codingest-0.2.24}/codingest/mcp_server.py +0 -0
  20. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest/assets/code_review/recipes.json +0 -0
  21. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest/assets/code_review/skill.md +0 -0
  22. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest/src/bin/codingest_bench.rs +0 -0
  23. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest/src/bin/codingest_stats.rs +0 -0
  24. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest/src/builder/call_edges.rs +0 -0
  25. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest/src/builder/js_workspace.rs +0 -0
  26. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest/src/builder/load/edge_frames.rs +0 -0
  27. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest/src/builder/load/entity_frames.rs +0 -0
  28. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest/src/builder/load.rs +0 -0
  29. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest/src/builder/mod.rs +0 -0
  30. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest/src/builder/other_edges.rs +0 -0
  31. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest/src/builder/routes/django.rs +0 -0
  32. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest/src/builder/routes/fastapi.rs +0 -0
  33. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest/src/builder/routes/flask.rs +0 -0
  34. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest/src/builder/routes/mod.rs +0 -0
  35. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest/src/builder/semantic_edges.rs +0 -0
  36. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest/src/builder/type_edges.rs +0 -0
  37. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest/src/cross_lang.rs +0 -0
  38. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest/src/docs/rst.rs +0 -0
  39. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest/src/lib.rs +0 -0
  40. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest/src/manifest/mod.rs +0 -0
  41. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest/src/methodology.rs +0 -0
  42. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest/src/models.rs +0 -0
  43. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest/src/parsers/agc.rs +0 -0
  44. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest/src/parsers/cpp.rs +0 -0
  45. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest/src/parsers/csharp.rs +0 -0
  46. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest/src/parsers/css.rs +0 -0
  47. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest/src/parsers/dart.rs +0 -0
  48. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest/src/parsers/go.rs +0 -0
  49. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest/src/parsers/html.rs +0 -0
  50. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest/src/parsers/java.rs +0 -0
  51. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest/src/parsers/julia.rs +0 -0
  52. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest/src/parsers/mod.rs +0 -0
  53. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest/src/parsers/php.rs +0 -0
  54. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest/src/parsers/python.rs +0 -0
  55. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest/src/parsers/r.rs +0 -0
  56. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest/src/parsers/registry.rs +0 -0
  57. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest/src/parsers/rust_lang.rs +0 -0
  58. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest/src/parsers/shared.rs +0 -0
  59. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest/src/parsers/swift.rs +0 -0
  60. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest/src/parsers/typescript.rs +0 -0
  61. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest/src/repo.rs +0 -0
  62. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest/src/rev.rs +0 -0
  63. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest/tests/agc_apollo.rs +0 -0
  64. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest/tests/goldens/README.md +0 -0
  65. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest/tests/goldens/agc_basic.sha256 +0 -0
  66. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest/tests/goldens/cpp_extern_c.sha256 +0 -0
  67. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest/tests/goldens/cpp_include.sha256 +0 -0
  68. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest/tests/goldens/cross_ts_py.sha256 +0 -0
  69. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest/tests/goldens/csharp_using_alias.sha256 +0 -0
  70. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest/tests/goldens/dart_import.sha256 +0 -0
  71. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest/tests/goldens/dart_part_of.sha256 +0 -0
  72. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest/tests/goldens/docs_ext_collide.sha256 +0 -0
  73. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest/tests/goldens/docs_mdx.sha256 +0 -0
  74. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest/tests/goldens/dup_minified_assets.sha256 +0 -0
  75. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest/tests/goldens/go_interface.sha256 +0 -0
  76. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest/tests/goldens/html_js_lang_group.sha256 +0 -0
  77. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest/tests/goldens/java_javadoc.sha256 +0 -0
  78. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest/tests/goldens/julia_basic.sha256 +0 -0
  79. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest/tests/goldens/php_group_use.sha256 +0 -0
  80. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest/tests/goldens/py_basic.sha256 +0 -0
  81. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest/tests/goldens/py_import.sha256 +0 -0
  82. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest/tests/goldens/py_inheritance.sha256 +0 -0
  83. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest/tests/goldens/py_nested_defs.sha256 +0 -0
  84. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest/tests/goldens/py_routes_dup.sha256 +0 -0
  85. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest/tests/goldens/py_src_layout.sha256 +0 -0
  86. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest/tests/goldens/r_basic.sha256 +0 -0
  87. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest/tests/goldens/rust_import.sha256 +0 -0
  88. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest/tests/goldens/rust_inline_mod.sha256 +0 -0
  89. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest/tests/goldens/rust_xfile.sha256 +0 -0
  90. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest/tests/goldens/swift_basic.sha256 +0 -0
  91. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest/tests/goldens/ts_callback.sha256 +0 -0
  92. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest/tests/goldens/ts_closure_scope.sha256 +0 -0
  93. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest/tests/goldens/ts_hof_binding.sha256 +0 -0
  94. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest/tests/goldens/ts_monorepo.sha256 +0 -0
  95. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest/tests/goldens/web_served_root.sha256 +0 -0
  96. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest/tests/grammar_kinds.rs +0 -0
  97. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest/tests/parity.rs +0 -0
  98. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest/tests/traversal_semantics.rs +0 -0
  99. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest-cli/skills/codingest-code-review/references/public-repositories.md +0 -0
  100. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest-cli/skills/codingest-code-review/references/queries.md +0 -0
  101. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest-cli/src/code_tree_cli.rs +0 -0
  102. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest-cli/src/lib.rs +0 -0
  103. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest-cli/src/main.rs +0 -0
  104. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest-cli/src/query.rs +0 -0
  105. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest-cli/src/skill.rs +0 -0
  106. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest-cli/src/skill_assets.rs +0 -0
  107. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest-cli/tests/embed_skills.rs +0 -0
  108. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest-cli/tests/exit_codes.rs +0 -0
  109. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest-cli/tests/skill_recipes.rs +0 -0
  110. {codingest-0.2.23 → codingest-0.2.24}/crates/codingest-mcp/src/lib.rs +0 -0
  111. {codingest-0.2.23 → codingest-0.2.24}/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.23"
305
+ version = "0.2.24"
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.23"
341
+ version = "0.2.24"
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.23"
353
+ version = "0.2.24"
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.23"
364
+ version = "0.2.24"
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.7"
1371
+ version = "0.17.9"
1372
1372
  source = "registry+https://github.com/rust-lang/crates.io-index"
1373
- checksum = "e59bdace8eb48e7db04cdc5c066956f494bbcc6fdddb661b4f09764a49428c4e"
1373
+ checksum = "84cc52c7ac2e3901aaf1b23311ee329b7509c9dd483cc6e59ed70b079ec9c78e"
1374
1374
  dependencies = [
1375
1375
  "bzip2",
1376
1376
  "chrono",
@@ -1386,6 +1386,7 @@ dependencies = [
1386
1386
  "memmap2",
1387
1387
  "petgraph",
1388
1388
  "postcard",
1389
+ "pulldown-cmark",
1389
1390
  "rayon",
1390
1391
  "regex",
1391
1392
  "rstar 0.13.0",
@@ -1404,11 +1405,12 @@ dependencies = [
1404
1405
 
1405
1406
  [[package]]
1406
1407
  name = "kglite-mcp-server"
1407
- version = "0.17.7"
1408
+ version = "0.17.9"
1408
1409
  source = "registry+https://github.com/rust-lang/crates.io-index"
1409
- checksum = "57a37838e2d50d16363c4dc28d7d9a791d9f7edd374660ddbece6578f5c7601b"
1410
+ checksum = "ffd62a6af8cb4f07b89375612a04c4a71adf525d5054597c466824586a49360a"
1410
1411
  dependencies = [
1411
1412
  "anyhow",
1413
+ "base64 0.22.1",
1412
1414
  "bytes",
1413
1415
  "chrono",
1414
1416
  "clap",
@@ -1510,9 +1512,9 @@ dependencies = [
1510
1512
 
1511
1513
  [[package]]
1512
1514
  name = "mcp-methods"
1513
- version = "0.4.11"
1515
+ version = "0.4.12"
1514
1516
  source = "registry+https://github.com/rust-lang/crates.io-index"
1515
- checksum = "31c5a17334897b67053e843235be8c66610d0c6684c845bea30e70ecff9dd204"
1517
+ checksum = "5bcc5fdac2ffd82893fbc640b569785bdc63ead7f3c6c3d695685b692ddf2d1a"
1516
1518
  dependencies = [
1517
1519
  "anyhow",
1518
1520
  "clap",
@@ -1742,6 +1744,17 @@ dependencies = [
1742
1744
  "cc",
1743
1745
  ]
1744
1746
 
1747
+ [[package]]
1748
+ name = "pulldown-cmark"
1749
+ version = "0.13.4"
1750
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1751
+ checksum = "e9f068eba8e7071c5f9511831b44f32c740d5adf574e990f946ddb53db2f314e"
1752
+ dependencies = [
1753
+ "bitflags",
1754
+ "memchr",
1755
+ "unicase",
1756
+ ]
1757
+
1745
1758
  [[package]]
1746
1759
  name = "pyo3"
1747
1760
  version = "0.29.0"
@@ -2792,6 +2805,12 @@ version = "1.20.1"
2792
2805
  source = "registry+https://github.com/rust-lang/crates.io-index"
2793
2806
  checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20"
2794
2807
 
2808
+ [[package]]
2809
+ name = "unicase"
2810
+ version = "2.9.0"
2811
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2812
+ checksum = "dbc4bc3a9f746d862c45cb89d705aa10f187bb96c76001afab07a0d35ce60142"
2813
+
2795
2814
  [[package]]
2796
2815
  name = "unicode-ident"
2797
2816
  version = "1.0.24"
@@ -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.23"
6
+ version = "0.2.24"
7
7
  edition = "2021"
8
8
  rust-version = "1.88"
9
9
  license = "MIT"
@@ -12,7 +12,51 @@ 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.7
15
+ # kglite engine + MCP server — imported as crates.io libraries. The 0.17.9
16
+ # floor covers two same-day releases, 0.17.8 (the Obsidian vault format) and
17
+ # 0.17.9 (the vault structure profile). Both land almost entirely on
18
+ # `dialect="obsidian"`, which codingest never selects — but they rebuilt the
19
+ # `kglite::okf` *type* surface underneath our docs pass, so this is the first
20
+ # kglite bump since 0.16.x that needs a source change:
21
+ # * `okf::BuildOptions` gained `profile` (a `Profile` the parser reads for
22
+ # its conventions) and lost `embed` (a field the loader never read — it
23
+ # embedded nothing in any dialect, so removing it changes no behaviour),
24
+ # and `okf::walk::DiscoveredFile` gained `size` / `mtime`. Our docs pass
25
+ # built both as exhaustive struct literals. `BuildOptions` is now
26
+ # constructed through `BuildOptions::for_dialect(Dialect::Okf)` with only
27
+ # the two fields we deliberately differ on overridden — a `Profile` cannot
28
+ # be a struct literal outside kglite any more, and `for_dialect` is the
29
+ # constructor that keeps a future field at its dialect default instead of
30
+ # failing the build a third time. `size`/`mtime` are `0`/`None`: they feed
31
+ # only `okf::fingerprint` and the vault's attachment nodes, and
32
+ # `parse_concepts` — the one entry point we call — reads neither.
33
+ # * The rest of the breaking set does not reach us: `okf::build` now returns
34
+ # `BuildOutput { graph, report }`, `links::extract_links` and
35
+ # `walk::discover` take the options/profile instead of a `Dialect` /
36
+ # `skip_dirs` slice, `Dialect` gained `Obsidian`, `Link` lost
37
+ # `is_wikilink`, and `ExportOptions` / `ExportReport` gained
38
+ # `edge_tables` / `warnings`. codingest calls none of them (grep: zero
39
+ # hits outside `docs/mod.rs`) — we use `okf::parse_concepts` and nothing
40
+ # else, and we read only `concept_id` / `file_path` / `title` / `body` /
41
+ # `props` off each `ConceptDoc`, never its links.
42
+ # * Behaviour under `Dialect::Okf` is the old behaviour by construction:
43
+ # `Profile::default()` is the OKF-bundle profile with every vault feature
44
+ # (wikilinks, embeds, inline tags, frontmatter edges, aliases, folder
45
+ # notes, attachments, `structure:`) off, which is what the parser hardcoded
46
+ # before. The one 0.17.8 parser fix that is dialect-independent and lands
47
+ # on a value we store is the heading rule: a line starting with `#` is a
48
+ # heading only when one to six `#` are followed by a space, a tab, or the
49
+ # line end, so an inline-tag line like `#project see …` is no longer read
50
+ # as an `# H1`. That feeds our `:Doc` title fallback. The 31 frozen
51
+ # goldens are the gate on it, and they are byte-identical across this move.
52
+ # * kglite-mcp-server: `--vault` mode and the vault-authoring skill are new
53
+ # surface we do not register, and the bundled skill set is now gated by
54
+ # graph shape — the four code-graph skills bundle only where the graph
55
+ # carries `Function` / `Class`, which is exactly a codingest graph, so the
56
+ # skills an agent reaches through `codingest-mcp` are unchanged while a
57
+ # document deployment stops paying for ours. Our producer layer
58
+ # (`ServerExtensions::with_skills` / `with_recipes`) is untouched.
59
+ # The preceding 0.17.7
16
60
  # floor adds the producer-level methodology hook codingest asked for on
17
61
  # 2026-09-16: `ServerExtensions::with_skills` / `with_recipes` let the binary
18
62
  # embedding the server register its own skill layer and Cypher recipe
@@ -546,8 +590,8 @@ sha2 = "0.11"
546
590
  # and no disk storage. Neither 0.15.7 nor 0.15.8 changes the `kglite::api` we
547
591
  # call, graph output, property encoding, or `.kgl` serialization.
548
592
  # Keep both libraries aligned so the graph and server share one engine release.
549
- kglite = { version = "0.17.7", default-features = false }
550
- kglite-mcp-server = { version = "0.17.7", default-features = false }
593
+ kglite = { version = "0.17.9", default-features = false }
594
+ kglite-mcp-server = { version = "0.17.9", default-features = false }
551
595
 
552
596
  # Dependency debuginfo capped at line tables (kglite coordination, 2026-08-31,
553
597
  # 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.23
3
+ Version: 0.2.24
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.7,<0.18
15
+ Requires-Dist: kglite>=0.17.9,<0.18
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.7 is installed automatically as the query/storage
197
+ commands. KGLite ≥0.17.9 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.7"
210
+ kglite = "0.17.9"
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.7 minimum and a shared lockfile. This keeps the builder, persistence
282
+ 0.17.9 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.7 is installed automatically as the query/storage
170
+ commands. KGLite ≥0.17.9 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.7"
183
+ kglite = "0.17.9"
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.7 minimum and a shared lockfile. This keeps the builder, persistence
255
+ 0.17.9 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.7).
13
+ # workspace pins the current engine floor (0.17.9).
14
14
 
15
15
  [lib]
16
16
  name = "codingest"
@@ -249,20 +249,29 @@ fn discover_and_parse(root: &Path) -> Result<Vec<DocEntry>, String> {
249
249
  // computes titles from frontmatter / first heading, honors `kg_skip`,
250
250
  // flattens frontmatter). We bypass `okf::walk` so `.rst` shares one traversal and so
251
251
  // `index.md` is kept (the docs pass builds no Folder hierarchy).
252
+ // `for_dialect` rather than a struct literal: it carries the dialect's
253
+ // `Profile` (the conventions the parser reads — id scheme, reserved keys,
254
+ // wikilinks, collection encoding), which a literal cannot construct from
255
+ // outside kglite and which a bare `dialect:` assignment would leave at the
256
+ // wrong dialect's defaults. Only the two fields the docs pass deliberately
257
+ // differs on are overridden: every `.md` is admitted (a repo's docs carry
258
+ // no frontmatter) and the body is stored (the `:Doc` node's prose).
252
259
  let md_opts = okf::BuildOptions {
253
- dialect: okf::Dialect::Okf,
254
260
  require_frontmatter: false,
255
- respect_skip: true,
256
- skip_dirs: Vec::new(),
257
261
  with_body: true,
258
- embed: false,
262
+ ..okf::BuildOptions::for_dialect(okf::Dialect::Okf)
259
263
  };
264
+ // `size` / `mtime` feed only `okf::fingerprint` and the attachment nodes,
265
+ // neither of which the docs pass reaches — `parse_concepts` reads nothing
266
+ // but the two paths — so the walk does not stat a second time to fill them.
260
267
  let md_files: Vec<okf::walk::DiscoveredFile> = found
261
268
  .iter()
262
269
  .filter(|d| d.format == DocFormat::Markdown)
263
270
  .map(|d| okf::walk::DiscoveredFile {
264
271
  rel_path: d.rel_path.clone(),
265
272
  abs_path: d.abs_path.clone(),
273
+ size: 0,
274
+ mtime: None,
266
275
  })
267
276
  .collect();
268
277
  let mut docs: Vec<DocEntry> = okf::parse_concepts(&md_files, &md_opts)
@@ -14,7 +14,7 @@ name = "codingest"
14
14
  path = "src/main.rs"
15
15
 
16
16
  [dependencies]
17
- codingest = { version = "0.2.23", path = "../codingest" }
17
+ codingest = { version = "0.2.24", 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.7,<0.18`; verify `kglite --version` before using its
17
+ > `kglite>=0.17.9,<0.18`; 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.7,<0.18`:
57
+ `>=0.17.9,<0.18`:
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.23", path = "../codingest" }
17
+ codingest = { version = "0.2.24", 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.7 that means the
805
+ // codingest-mcp deployment ships in. Under kglite 0.17.9 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.23", path = "../codingest", default-features = false }
45
+ codingest = { version = "0.2.24", 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.23", path = "../codingest-cli" }
56
+ codingest-cli = { version = "0.2.24", 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.23", path = "../codingest-mcp" }
61
+ codingest-mcp = { version = "0.2.24", 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.7,<0.18'`."
89
+ 'kglite>=0.17.9,<0.18'`."
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.7"` == `>=0.17.7,<0.18.0`) exactly — bump both together.
45
+ # (`version = "0.17.9"` == `>=0.17.9,<0.18.0`) exactly — bump both together.
46
46
  dependencies = [
47
- "kglite>=0.17.7,<0.18",
47
+ "kglite>=0.17.9,<0.18",
48
48
  ]
49
49
 
50
50
  [project.urls]
File without changes
File without changes