codingest 0.2.23__tar.gz → 0.2.25__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.
- {codingest-0.2.23 → codingest-0.2.25}/Cargo.lock +29 -10
- {codingest-0.2.23 → codingest-0.2.25}/Cargo.toml +80 -4
- {codingest-0.2.23 → codingest-0.2.25}/PKG-INFO +5 -5
- {codingest-0.2.23 → codingest-0.2.25}/README.md +3 -3
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest/Cargo.toml +1 -1
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest/src/docs/mod.rs +13 -4
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest-cli/Cargo.toml +1 -1
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest-cli/skills/codingest-code-review/SKILL.md +1 -1
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest-cli/skills/codingest-code-review/references/mcp-upgrade.md +1 -1
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest-mcp/Cargo.toml +1 -1
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest-mcp/tests/response_contract.rs +1 -1
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest-py/Cargo.toml +3 -3
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest-py/src/lib.rs +1 -1
- {codingest-0.2.23 → codingest-0.2.25}/pyproject.toml +2 -2
- {codingest-0.2.23 → codingest-0.2.25}/LICENSE +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/codingest/__init__.py +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/codingest/__init__.pyi +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/codingest/cli.py +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/codingest/mcp_server.py +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest/assets/code_review/recipes.json +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest/assets/code_review/skill.md +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest/src/bin/codingest_bench.rs +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest/src/bin/codingest_stats.rs +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest/src/builder/call_edges.rs +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest/src/builder/js_workspace.rs +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest/src/builder/load/edge_frames.rs +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest/src/builder/load/entity_frames.rs +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest/src/builder/load.rs +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest/src/builder/mod.rs +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest/src/builder/other_edges.rs +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest/src/builder/routes/django.rs +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest/src/builder/routes/fastapi.rs +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest/src/builder/routes/flask.rs +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest/src/builder/routes/mod.rs +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest/src/builder/semantic_edges.rs +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest/src/builder/type_edges.rs +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest/src/cross_lang.rs +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest/src/docs/rst.rs +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest/src/lib.rs +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest/src/manifest/mod.rs +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest/src/methodology.rs +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest/src/models.rs +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest/src/parsers/agc.rs +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest/src/parsers/cpp.rs +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest/src/parsers/csharp.rs +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest/src/parsers/css.rs +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest/src/parsers/dart.rs +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest/src/parsers/go.rs +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest/src/parsers/html.rs +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest/src/parsers/java.rs +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest/src/parsers/julia.rs +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest/src/parsers/mod.rs +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest/src/parsers/php.rs +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest/src/parsers/python.rs +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest/src/parsers/r.rs +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest/src/parsers/registry.rs +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest/src/parsers/rust_lang.rs +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest/src/parsers/shared.rs +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest/src/parsers/swift.rs +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest/src/parsers/typescript.rs +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest/src/repo.rs +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest/src/rev.rs +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest/tests/agc_apollo.rs +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest/tests/goldens/README.md +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest/tests/goldens/agc_basic.sha256 +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest/tests/goldens/cpp_extern_c.sha256 +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest/tests/goldens/cpp_include.sha256 +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest/tests/goldens/cross_ts_py.sha256 +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest/tests/goldens/csharp_using_alias.sha256 +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest/tests/goldens/dart_import.sha256 +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest/tests/goldens/dart_part_of.sha256 +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest/tests/goldens/docs_ext_collide.sha256 +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest/tests/goldens/docs_mdx.sha256 +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest/tests/goldens/dup_minified_assets.sha256 +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest/tests/goldens/go_interface.sha256 +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest/tests/goldens/html_js_lang_group.sha256 +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest/tests/goldens/java_javadoc.sha256 +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest/tests/goldens/julia_basic.sha256 +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest/tests/goldens/php_group_use.sha256 +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest/tests/goldens/py_basic.sha256 +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest/tests/goldens/py_import.sha256 +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest/tests/goldens/py_inheritance.sha256 +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest/tests/goldens/py_nested_defs.sha256 +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest/tests/goldens/py_routes_dup.sha256 +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest/tests/goldens/py_src_layout.sha256 +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest/tests/goldens/r_basic.sha256 +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest/tests/goldens/rust_import.sha256 +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest/tests/goldens/rust_inline_mod.sha256 +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest/tests/goldens/rust_xfile.sha256 +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest/tests/goldens/swift_basic.sha256 +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest/tests/goldens/ts_callback.sha256 +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest/tests/goldens/ts_closure_scope.sha256 +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest/tests/goldens/ts_hof_binding.sha256 +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest/tests/goldens/ts_monorepo.sha256 +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest/tests/goldens/web_served_root.sha256 +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest/tests/grammar_kinds.rs +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest/tests/parity.rs +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest/tests/traversal_semantics.rs +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest-cli/skills/codingest-code-review/references/public-repositories.md +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest-cli/skills/codingest-code-review/references/queries.md +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest-cli/src/code_tree_cli.rs +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest-cli/src/lib.rs +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest-cli/src/main.rs +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest-cli/src/query.rs +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest-cli/src/skill.rs +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest-cli/src/skill_assets.rs +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest-cli/tests/embed_skills.rs +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest-cli/tests/exit_codes.rs +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest-cli/tests/skill_recipes.rs +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/crates/codingest-mcp/src/lib.rs +0 -0
- {codingest-0.2.23 → codingest-0.2.25}/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.
|
|
305
|
+
version = "0.2.25"
|
|
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.
|
|
341
|
+
version = "0.2.25"
|
|
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.
|
|
353
|
+
version = "0.2.25"
|
|
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.
|
|
364
|
+
version = "0.2.25"
|
|
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.
|
|
1371
|
+
version = "0.17.10"
|
|
1372
1372
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1373
|
-
checksum = "
|
|
1373
|
+
checksum = "e14ff39495529815519e61ed78e7cac6aaaa37b5641b79e78693bf7ae0befa98"
|
|
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.
|
|
1408
|
+
version = "0.17.10"
|
|
1408
1409
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1409
|
-
checksum = "
|
|
1410
|
+
checksum = "4fb67310c835576a085fb0f35c6a7e70bfbe2bde663809d9b1d1bbcc55986b00"
|
|
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.
|
|
1515
|
+
version = "0.4.12"
|
|
1514
1516
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1515
|
-
checksum = "
|
|
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.
|
|
6
|
+
version = "0.2.25"
|
|
7
7
|
edition = "2021"
|
|
8
8
|
rust-version = "1.88"
|
|
9
9
|
license = "MIT"
|
|
@@ -12,7 +12,83 @@ 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.
|
|
15
|
+
# kglite engine + MCP server — imported as crates.io libraries. The 0.17.10
|
|
16
|
+
# floor is a pure Cypher-executor fix release: `cargo semver-checks` reports no
|
|
17
|
+
# API change across 196 checks, and codingest needs no source edit for it. It
|
|
18
|
+
# moves anyway because both fixes were SILENT wrong answers on the query
|
|
19
|
+
# surface `codingest query` and the embedded `codingest-mcp` server expose —
|
|
20
|
+
# the class of defect a floor exists to keep users off:
|
|
21
|
+
# * a non-aggregating `WITH` is a scope barrier again. It projected the row's
|
|
22
|
+
# values but left the node / edge / path *identity* bindings in place, so a
|
|
23
|
+
# name the projection dropped stayed silently bound: a later `MATCH` on
|
|
24
|
+
# that name anchored the stale node instead of scanning, `count(*)` behind
|
|
25
|
+
# the barrier counted 1 instead of the label, and `CREATE` / `SET` /
|
|
26
|
+
# `MERGE` / `FOREACH` after such a `WITH` acted on nothing with no error.
|
|
27
|
+
# `WITH n AS m` now frees `n`; `WITH *` and a projected `WITH n` keep their
|
|
28
|
+
# bindings as before. An *aggregating* `WITH` rebuilds its rows from the
|
|
29
|
+
# projection and was correct throughout, which is why this survived.
|
|
30
|
+
# * `*` written beside another projection item now expands. Alone it always
|
|
31
|
+
# did; alongside anything else it was projected as an ordinary expression —
|
|
32
|
+
# a column literally named `*` holding `1` — and every value-carrying name
|
|
33
|
+
# in scope was dropped, so `UNWIND [1] AS a WITH *, a + 1 AS b RETURN a, b`
|
|
34
|
+
# answered `{a: null, b: 2}`. Two spellings lost whole rows: `WITH *,
|
|
35
|
+
# count(*) AS c` grouped by that constant, and `WITH DISTINCT *, 1 AS k`
|
|
36
|
+
# deduplicated every row down to one. `RETURN *` now also lists a path
|
|
37
|
+
# variable, and where `*` and an explicit item would project the same name
|
|
38
|
+
# the explicit item wins.
|
|
39
|
+
# Neither reaches codingest's own Cypher. The builder writes graphs and never
|
|
40
|
+
# queries them, and the shipped code-review recipe catalogue and skill
|
|
41
|
+
# examples contain no `WITH` clause and no `*` projection at all
|
|
42
|
+
# (grep-verified across `assets/code_review/recipes.json`, both `skills/`
|
|
43
|
+
# trees, `query.rs` and the CLI/MCP tests). Optimized and unoptimized plans
|
|
44
|
+
# agreed on every old wrong answer, so these were invisible to kglite's
|
|
45
|
+
# optimizer-differential corpus and are now pinned there by absolute goldens.
|
|
46
|
+
# Zero source changes here; every frozen golden byte-identical.
|
|
47
|
+
# The preceding 0.17.9
|
|
48
|
+
# floor covers two same-day releases, 0.17.8 (the Obsidian vault format) and
|
|
49
|
+
# 0.17.9 (the vault structure profile). Both land almost entirely on
|
|
50
|
+
# `dialect="obsidian"`, which codingest never selects — but they rebuilt the
|
|
51
|
+
# `kglite::okf` *type* surface underneath our docs pass, so this is the first
|
|
52
|
+
# kglite bump since 0.16.x that needs a source change:
|
|
53
|
+
# * `okf::BuildOptions` gained `profile` (a `Profile` the parser reads for
|
|
54
|
+
# its conventions) and lost `embed` (a field the loader never read — it
|
|
55
|
+
# embedded nothing in any dialect, so removing it changes no behaviour),
|
|
56
|
+
# and `okf::walk::DiscoveredFile` gained `size` / `mtime`. Our docs pass
|
|
57
|
+
# built both as exhaustive struct literals. `BuildOptions` is now
|
|
58
|
+
# constructed through `BuildOptions::for_dialect(Dialect::Okf)` with only
|
|
59
|
+
# the two fields we deliberately differ on overridden — a `Profile` cannot
|
|
60
|
+
# be a struct literal outside kglite any more, and `for_dialect` is the
|
|
61
|
+
# constructor that keeps a future field at its dialect default instead of
|
|
62
|
+
# failing the build a third time. `size`/`mtime` are `0`/`None`: they feed
|
|
63
|
+
# only `okf::fingerprint` and the vault's attachment nodes, and
|
|
64
|
+
# `parse_concepts` — the one entry point we call — reads neither.
|
|
65
|
+
# * The rest of the breaking set does not reach us: `okf::build` now returns
|
|
66
|
+
# `BuildOutput { graph, report }`, `links::extract_links` and
|
|
67
|
+
# `walk::discover` take the options/profile instead of a `Dialect` /
|
|
68
|
+
# `skip_dirs` slice, `Dialect` gained `Obsidian`, `Link` lost
|
|
69
|
+
# `is_wikilink`, and `ExportOptions` / `ExportReport` gained
|
|
70
|
+
# `edge_tables` / `warnings`. codingest calls none of them (grep: zero
|
|
71
|
+
# hits outside `docs/mod.rs`) — we use `okf::parse_concepts` and nothing
|
|
72
|
+
# else, and we read only `concept_id` / `file_path` / `title` / `body` /
|
|
73
|
+
# `props` off each `ConceptDoc`, never its links.
|
|
74
|
+
# * Behaviour under `Dialect::Okf` is the old behaviour by construction:
|
|
75
|
+
# `Profile::default()` is the OKF-bundle profile with every vault feature
|
|
76
|
+
# (wikilinks, embeds, inline tags, frontmatter edges, aliases, folder
|
|
77
|
+
# notes, attachments, `structure:`) off, which is what the parser hardcoded
|
|
78
|
+
# before. The one 0.17.8 parser fix that is dialect-independent and lands
|
|
79
|
+
# on a value we store is the heading rule: a line starting with `#` is a
|
|
80
|
+
# heading only when one to six `#` are followed by a space, a tab, or the
|
|
81
|
+
# line end, so an inline-tag line like `#project see …` is no longer read
|
|
82
|
+
# as an `# H1`. That feeds our `:Doc` title fallback. The 31 frozen
|
|
83
|
+
# goldens are the gate on it, and they are byte-identical across this move.
|
|
84
|
+
# * kglite-mcp-server: `--vault` mode and the vault-authoring skill are new
|
|
85
|
+
# surface we do not register, and the bundled skill set is now gated by
|
|
86
|
+
# graph shape — the four code-graph skills bundle only where the graph
|
|
87
|
+
# carries `Function` / `Class`, which is exactly a codingest graph, so the
|
|
88
|
+
# skills an agent reaches through `codingest-mcp` are unchanged while a
|
|
89
|
+
# document deployment stops paying for ours. Our producer layer
|
|
90
|
+
# (`ServerExtensions::with_skills` / `with_recipes`) is untouched.
|
|
91
|
+
# The preceding 0.17.7
|
|
16
92
|
# floor adds the producer-level methodology hook codingest asked for on
|
|
17
93
|
# 2026-09-16: `ServerExtensions::with_skills` / `with_recipes` let the binary
|
|
18
94
|
# embedding the server register its own skill layer and Cypher recipe
|
|
@@ -546,8 +622,8 @@ sha2 = "0.11"
|
|
|
546
622
|
# and no disk storage. Neither 0.15.7 nor 0.15.8 changes the `kglite::api` we
|
|
547
623
|
# call, graph output, property encoding, or `.kgl` serialization.
|
|
548
624
|
# Keep both libraries aligned so the graph and server share one engine release.
|
|
549
|
-
kglite = { version = "0.17.
|
|
550
|
-
kglite-mcp-server = { version = "0.17.
|
|
625
|
+
kglite = { version = "0.17.10", default-features = false }
|
|
626
|
+
kglite-mcp-server = { version = "0.17.10", default-features = false }
|
|
551
627
|
|
|
552
628
|
# Dependency debuginfo capped at line tables (kglite coordination, 2026-08-31,
|
|
553
629
|
# 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.
|
|
3
|
+
Version: 0.2.25
|
|
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.
|
|
15
|
+
Requires-Dist: kglite>=0.17.10,<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.
|
|
197
|
+
commands. KGLite ≥0.17.10 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.
|
|
210
|
+
kglite = "0.17.10"
|
|
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.
|
|
282
|
+
0.17.10 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.
|
|
170
|
+
commands. KGLite ≥0.17.10 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.
|
|
183
|
+
kglite = "0.17.10"
|
|
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.
|
|
255
|
+
0.17.10 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.
|
|
13
|
+
# workspace pins the current engine floor (0.17.10).
|
|
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
|
-
|
|
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.
|
|
17
|
+
codingest = { version = "0.2.25", path = "../codingest" }
|
|
18
18
|
kglite = { workspace = true }
|
|
19
19
|
anyhow = "1.0.104"
|
|
20
20
|
clap = { version = "4.6.4", features = ["derive"] }
|
{codingest-0.2.23 → codingest-0.2.25}/crates/codingest-cli/skills/codingest-code-review/SKILL.md
RENAMED
|
@@ -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.
|
|
17
|
+
> `kglite>=0.17.10,<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
|
|
@@ -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.
|
|
805
|
+
// codingest-mcp deployment ships in. Under kglite 0.17.10 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.
|
|
45
|
+
codingest = { version = "0.2.25", 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.
|
|
56
|
+
codingest-cli = { version = "0.2.25", 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.
|
|
61
|
+
codingest-mcp = { version = "0.2.25", 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.
|
|
89
|
+
'kglite>=0.17.10,<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.
|
|
45
|
+
# (`version = "0.17.10"` == `>=0.17.10,<0.18.0`) exactly — bump both together.
|
|
46
46
|
dependencies = [
|
|
47
|
-
"kglite>=0.17.
|
|
47
|
+
"kglite>=0.17.10,<0.18",
|
|
48
48
|
]
|
|
49
49
|
|
|
50
50
|
[project.urls]
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{codingest-0.2.23 → codingest-0.2.25}/crates/codingest/tests/goldens/csharp_using_alias.sha256
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{codingest-0.2.23 → codingest-0.2.25}/crates/codingest/tests/goldens/docs_ext_collide.sha256
RENAMED
|
File without changes
|
|
File without changes
|
{codingest-0.2.23 → codingest-0.2.25}/crates/codingest/tests/goldens/dup_minified_assets.sha256
RENAMED
|
File without changes
|
|
File without changes
|
{codingest-0.2.23 → codingest-0.2.25}/crates/codingest/tests/goldens/html_js_lang_group.sha256
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{codingest-0.2.23 → codingest-0.2.25}/crates/codingest/tests/goldens/ts_closure_scope.sha256
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|