codingest 0.2.2__tar.gz → 0.2.3__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.2 → codingest-0.2.3}/Cargo.lock +30 -8
- {codingest-0.2.2 → codingest-0.2.3}/Cargo.toml +24 -8
- {codingest-0.2.2 → codingest-0.2.3}/PKG-INFO +10 -9
- {codingest-0.2.2 → codingest-0.2.3}/README.md +8 -7
- {codingest-0.2.2 → codingest-0.2.3}/crates/codingest/Cargo.toml +6 -1
- {codingest-0.2.2 → codingest-0.2.3}/crates/codingest/src/bin/codingest_stats.rs +2 -2
- {codingest-0.2.2 → codingest-0.2.3}/crates/codingest/src/builder/load.rs +17 -1
- {codingest-0.2.2 → codingest-0.2.3}/crates/codingest/src/builder/mod.rs +289 -26
- {codingest-0.2.2 → codingest-0.2.3}/crates/codingest/src/builder/other_edges.rs +729 -12
- {codingest-0.2.2 → codingest-0.2.3}/crates/codingest/src/builder/routes/fastapi.rs +19 -9
- {codingest-0.2.2 → codingest-0.2.3}/crates/codingest/src/builder/routes/flask.rs +20 -9
- {codingest-0.2.2 → codingest-0.2.3}/crates/codingest/src/builder/routes/mod.rs +144 -9
- {codingest-0.2.2 → codingest-0.2.3}/crates/codingest/src/cross_lang.rs +2 -2
- {codingest-0.2.2 → codingest-0.2.3}/crates/codingest/src/docs/mod.rs +8 -8
- {codingest-0.2.2 → codingest-0.2.3}/crates/codingest/src/parsers/agc.rs +2 -2
- {codingest-0.2.2 → codingest-0.2.3}/crates/codingest/src/parsers/cpp.rs +40 -5
- {codingest-0.2.2 → codingest-0.2.3}/crates/codingest/src/parsers/csharp.rs +1 -4
- {codingest-0.2.2 → codingest-0.2.3}/crates/codingest/src/parsers/dart.rs +119 -22
- {codingest-0.2.2 → codingest-0.2.3}/crates/codingest/src/parsers/go.rs +5 -2
- {codingest-0.2.2 → codingest-0.2.3}/crates/codingest/src/parsers/java.rs +4 -1
- codingest-0.2.3/crates/codingest/src/parsers/julia.rs +1094 -0
- {codingest-0.2.2 → codingest-0.2.3}/crates/codingest/src/parsers/mod.rs +2 -0
- {codingest-0.2.2 → codingest-0.2.3}/crates/codingest/src/parsers/python.rs +195 -21
- codingest-0.2.3/crates/codingest/src/parsers/r.rs +827 -0
- {codingest-0.2.2 → codingest-0.2.3}/crates/codingest/src/parsers/registry.rs +74 -3
- {codingest-0.2.2 → codingest-0.2.3}/crates/codingest/src/parsers/rust_lang.rs +73 -11
- {codingest-0.2.2 → codingest-0.2.3}/crates/codingest/src/parsers/shared.rs +21 -1
- {codingest-0.2.2 → codingest-0.2.3}/crates/codingest/src/parsers/typescript.rs +1 -4
- {codingest-0.2.2 → codingest-0.2.3}/crates/codingest/src/rev.rs +32 -16
- {codingest-0.2.2 → codingest-0.2.3}/crates/codingest/tests/goldens/README.md +38 -0
- codingest-0.2.3/crates/codingest/tests/goldens/cpp_include.sha256 +1 -0
- codingest-0.2.3/crates/codingest/tests/goldens/cross_ts_py.sha256 +1 -0
- codingest-0.2.3/crates/codingest/tests/goldens/dart_import.sha256 +1 -0
- codingest-0.2.3/crates/codingest/tests/goldens/julia_basic.sha256 +1 -0
- codingest-0.2.3/crates/codingest/tests/goldens/py_import.sha256 +1 -0
- codingest-0.2.3/crates/codingest/tests/goldens/py_nested_defs.sha256 +1 -0
- codingest-0.2.3/crates/codingest/tests/goldens/py_routes_dup.sha256 +1 -0
- codingest-0.2.3/crates/codingest/tests/goldens/r_basic.sha256 +1 -0
- codingest-0.2.3/crates/codingest/tests/goldens/rust_import.sha256 +1 -0
- codingest-0.2.3/crates/codingest/tests/grammar_kinds.rs +180 -0
- {codingest-0.2.2 → codingest-0.2.3}/crates/codingest/tests/parity.rs +82 -4
- {codingest-0.2.2 → codingest-0.2.3}/crates/codingest-cli/Cargo.toml +1 -1
- {codingest-0.2.2 → codingest-0.2.3}/crates/codingest-cli/src/code_tree_cli.rs +25 -0
- {codingest-0.2.2 → codingest-0.2.3}/crates/codingest-cli/tests/exit_codes.rs +34 -0
- {codingest-0.2.2 → codingest-0.2.3}/crates/codingest-mcp/Cargo.toml +1 -1
- {codingest-0.2.2 → codingest-0.2.3}/crates/codingest-py/Cargo.toml +3 -3
- {codingest-0.2.2 → codingest-0.2.3}/crates/codingest-py/src/lib.rs +9 -3
- {codingest-0.2.2 → codingest-0.2.3}/pyproject.toml +2 -2
- codingest-0.2.2/crates/codingest/tests/goldens/cross_ts_py.sha256 +0 -1
- codingest-0.2.2/crates/codingest/tests/goldens/py_nested_defs.sha256 +0 -1
- codingest-0.2.2/crates/codingest/tests/goldens/py_routes_dup.sha256 +0 -1
- {codingest-0.2.2 → codingest-0.2.3}/LICENSE +0 -0
- {codingest-0.2.2 → codingest-0.2.3}/codingest/__init__.py +0 -0
- {codingest-0.2.2 → codingest-0.2.3}/codingest/__init__.pyi +0 -0
- {codingest-0.2.2 → codingest-0.2.3}/codingest/cli.py +0 -0
- {codingest-0.2.2 → codingest-0.2.3}/codingest/mcp_server.py +0 -0
- {codingest-0.2.2 → codingest-0.2.3}/crates/codingest/src/bin/codingest_bench.rs +0 -0
- {codingest-0.2.2 → codingest-0.2.3}/crates/codingest/src/builder/call_edges.rs +0 -0
- {codingest-0.2.2 → codingest-0.2.3}/crates/codingest/src/builder/js_workspace.rs +0 -0
- {codingest-0.2.2 → codingest-0.2.3}/crates/codingest/src/builder/load/edge_frames.rs +0 -0
- {codingest-0.2.2 → codingest-0.2.3}/crates/codingest/src/builder/load/entity_frames.rs +0 -0
- {codingest-0.2.2 → codingest-0.2.3}/crates/codingest/src/builder/routes/django.rs +0 -0
- {codingest-0.2.2 → codingest-0.2.3}/crates/codingest/src/builder/semantic_edges.rs +0 -0
- {codingest-0.2.2 → codingest-0.2.3}/crates/codingest/src/builder/type_edges.rs +0 -0
- {codingest-0.2.2 → codingest-0.2.3}/crates/codingest/src/docs/rst.rs +0 -0
- {codingest-0.2.2 → codingest-0.2.3}/crates/codingest/src/lib.rs +0 -0
- {codingest-0.2.2 → codingest-0.2.3}/crates/codingest/src/manifest/mod.rs +0 -0
- {codingest-0.2.2 → codingest-0.2.3}/crates/codingest/src/models.rs +0 -0
- {codingest-0.2.2 → codingest-0.2.3}/crates/codingest/src/parsers/css.rs +0 -0
- {codingest-0.2.2 → codingest-0.2.3}/crates/codingest/src/parsers/html.rs +0 -0
- {codingest-0.2.2 → codingest-0.2.3}/crates/codingest/src/parsers/php.rs +0 -0
- {codingest-0.2.2 → codingest-0.2.3}/crates/codingest/src/parsers/swift.rs +0 -0
- {codingest-0.2.2 → codingest-0.2.3}/crates/codingest/src/repo.rs +0 -0
- {codingest-0.2.2 → codingest-0.2.3}/crates/codingest/tests/agc_apollo.rs +0 -0
- {codingest-0.2.2 → codingest-0.2.3}/crates/codingest/tests/goldens/agc_basic.sha256 +0 -0
- {codingest-0.2.2 → codingest-0.2.3}/crates/codingest/tests/goldens/docs_ext_collide.sha256 +0 -0
- {codingest-0.2.2 → codingest-0.2.3}/crates/codingest/tests/goldens/docs_mdx.sha256 +0 -0
- {codingest-0.2.2 → codingest-0.2.3}/crates/codingest/tests/goldens/dup_minified_assets.sha256 +0 -0
- {codingest-0.2.2 → codingest-0.2.3}/crates/codingest/tests/goldens/html_js_lang_group.sha256 +0 -0
- {codingest-0.2.2 → codingest-0.2.3}/crates/codingest/tests/goldens/py_basic.sha256 +0 -0
- {codingest-0.2.2 → codingest-0.2.3}/crates/codingest/tests/goldens/py_inheritance.sha256 +0 -0
- {codingest-0.2.2 → codingest-0.2.3}/crates/codingest/tests/goldens/rust_xfile.sha256 +0 -0
- {codingest-0.2.2 → codingest-0.2.3}/crates/codingest/tests/goldens/ts_callback.sha256 +0 -0
- {codingest-0.2.2 → codingest-0.2.3}/crates/codingest/tests/goldens/ts_closure_scope.sha256 +0 -0
- {codingest-0.2.2 → codingest-0.2.3}/crates/codingest/tests/goldens/ts_hof_binding.sha256 +0 -0
- {codingest-0.2.2 → codingest-0.2.3}/crates/codingest/tests/goldens/ts_monorepo.sha256 +0 -0
- {codingest-0.2.2 → codingest-0.2.3}/crates/codingest-cli/skills/codingest-code-review/SKILL.md +0 -0
- {codingest-0.2.2 → codingest-0.2.3}/crates/codingest-cli/skills/codingest-code-review/references/mcp-upgrade.md +0 -0
- {codingest-0.2.2 → codingest-0.2.3}/crates/codingest-cli/skills/codingest-code-review/references/public-repositories.md +0 -0
- {codingest-0.2.2 → codingest-0.2.3}/crates/codingest-cli/skills/codingest-code-review/references/queries.md +0 -0
- {codingest-0.2.2 → codingest-0.2.3}/crates/codingest-cli/src/lib.rs +0 -0
- {codingest-0.2.2 → codingest-0.2.3}/crates/codingest-cli/src/main.rs +0 -0
- {codingest-0.2.2 → codingest-0.2.3}/crates/codingest-cli/src/query.rs +0 -0
- {codingest-0.2.2 → codingest-0.2.3}/crates/codingest-cli/src/skill.rs +0 -0
- {codingest-0.2.2 → codingest-0.2.3}/crates/codingest-cli/src/skill_assets.rs +0 -0
- {codingest-0.2.2 → codingest-0.2.3}/crates/codingest-mcp/src/lib.rs +0 -0
- {codingest-0.2.2 → codingest-0.2.3}/crates/codingest-mcp/src/main.rs +0 -0
|
@@ -308,7 +308,7 @@ dependencies = [
|
|
|
308
308
|
|
|
309
309
|
[[package]]
|
|
310
310
|
name = "codingest"
|
|
311
|
-
version = "0.2.
|
|
311
|
+
version = "0.2.3"
|
|
312
312
|
dependencies = [
|
|
313
313
|
"aho-corasick",
|
|
314
314
|
"base64 0.22.1",
|
|
@@ -330,8 +330,10 @@ dependencies = [
|
|
|
330
330
|
"tree-sitter-html",
|
|
331
331
|
"tree-sitter-java",
|
|
332
332
|
"tree-sitter-javascript",
|
|
333
|
+
"tree-sitter-julia",
|
|
333
334
|
"tree-sitter-php",
|
|
334
335
|
"tree-sitter-python",
|
|
336
|
+
"tree-sitter-r",
|
|
335
337
|
"tree-sitter-rust",
|
|
336
338
|
"tree-sitter-swift",
|
|
337
339
|
"tree-sitter-typescript",
|
|
@@ -340,7 +342,7 @@ dependencies = [
|
|
|
340
342
|
|
|
341
343
|
[[package]]
|
|
342
344
|
name = "codingest-cli"
|
|
343
|
-
version = "0.2.
|
|
345
|
+
version = "0.2.3"
|
|
344
346
|
dependencies = [
|
|
345
347
|
"anyhow",
|
|
346
348
|
"clap",
|
|
@@ -352,7 +354,7 @@ dependencies = [
|
|
|
352
354
|
|
|
353
355
|
[[package]]
|
|
354
356
|
name = "codingest-mcp"
|
|
355
|
-
version = "0.2.
|
|
357
|
+
version = "0.2.3"
|
|
356
358
|
dependencies = [
|
|
357
359
|
"anyhow",
|
|
358
360
|
"codingest",
|
|
@@ -361,7 +363,7 @@ dependencies = [
|
|
|
361
363
|
|
|
362
364
|
[[package]]
|
|
363
365
|
name = "codingest-py"
|
|
364
|
-
version = "0.2.
|
|
366
|
+
version = "0.2.3"
|
|
365
367
|
dependencies = [
|
|
366
368
|
"codingest",
|
|
367
369
|
"codingest-cli",
|
|
@@ -1388,9 +1390,9 @@ dependencies = [
|
|
|
1388
1390
|
|
|
1389
1391
|
[[package]]
|
|
1390
1392
|
name = "kglite"
|
|
1391
|
-
version = "0.
|
|
1393
|
+
version = "0.16.1"
|
|
1392
1394
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1393
|
-
checksum = "
|
|
1395
|
+
checksum = "929b7d190017068c56ffd40e74f3f8eebd5ddf57c5da6f17d33ab4f5aa30bc10"
|
|
1394
1396
|
dependencies = [
|
|
1395
1397
|
"bzip2",
|
|
1396
1398
|
"chrono",
|
|
@@ -1423,9 +1425,9 @@ dependencies = [
|
|
|
1423
1425
|
|
|
1424
1426
|
[[package]]
|
|
1425
1427
|
name = "kglite-mcp-server"
|
|
1426
|
-
version = "0.
|
|
1428
|
+
version = "0.16.1"
|
|
1427
1429
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1428
|
-
checksum = "
|
|
1430
|
+
checksum = "f2dc4bfa9bc451a1d9c18768216a7fe1d8a68f9bab6ed6375365ce75c90c163e"
|
|
1429
1431
|
dependencies = [
|
|
1430
1432
|
"anyhow",
|
|
1431
1433
|
"bytes",
|
|
@@ -2739,6 +2741,16 @@ dependencies = [
|
|
|
2739
2741
|
"tree-sitter-language",
|
|
2740
2742
|
]
|
|
2741
2743
|
|
|
2744
|
+
[[package]]
|
|
2745
|
+
name = "tree-sitter-julia"
|
|
2746
|
+
version = "0.23.1"
|
|
2747
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
2748
|
+
checksum = "4144731a178812ee867619b1e98b3b91e54c1652304b26e5ebe3175b701de323"
|
|
2749
|
+
dependencies = [
|
|
2750
|
+
"cc",
|
|
2751
|
+
"tree-sitter-language",
|
|
2752
|
+
]
|
|
2753
|
+
|
|
2742
2754
|
[[package]]
|
|
2743
2755
|
name = "tree-sitter-language"
|
|
2744
2756
|
version = "0.1.7"
|
|
@@ -2765,6 +2777,16 @@ dependencies = [
|
|
|
2765
2777
|
"tree-sitter-language",
|
|
2766
2778
|
]
|
|
2767
2779
|
|
|
2780
|
+
[[package]]
|
|
2781
|
+
name = "tree-sitter-r"
|
|
2782
|
+
version = "1.3.0"
|
|
2783
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
2784
|
+
checksum = "ffc9954ec870dcad6cffdd302b405306c68cf031ed79a78cd9746f6740d9fe20"
|
|
2785
|
+
dependencies = [
|
|
2786
|
+
"cc",
|
|
2787
|
+
"tree-sitter-language",
|
|
2788
|
+
]
|
|
2789
|
+
|
|
2768
2790
|
[[package]]
|
|
2769
2791
|
name = "tree-sitter-rust"
|
|
2770
2792
|
version = "0.24.2"
|
|
@@ -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.3"
|
|
7
7
|
edition = "2021"
|
|
8
8
|
rust-version = "1.88"
|
|
9
9
|
license = "MIT"
|
|
@@ -12,11 +12,27 @@ 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.
|
|
16
|
-
# floor
|
|
17
|
-
#
|
|
18
|
-
#
|
|
19
|
-
#
|
|
15
|
+
# kglite engine + MCP server — imported as crates.io libraries. The 0.16.1
|
|
16
|
+
# floor picks up the wire-JSON break (kglite_value_to_json emits real JSON for
|
|
17
|
+
# nine variants — our CLI renders through it, so expectations pin the NEW
|
|
18
|
+
# shapes and an older engine would fail them) on top of the 0.16.0
|
|
19
|
+
# base, which is a HARD floor, not a preference: 0.16.0 writes `.kgl` container v6,
|
|
20
|
+
# which kglite 0.15.14 and earlier refuse by version number. Because
|
|
21
|
+
# `codingest.build()` writes the bytes with the Rust engine compiled in here and
|
|
22
|
+
# reads them back through the separately-installed Python `kglite` wheel, the
|
|
23
|
+
# two sides must be on the same side of that break — hence `>=0.16.1,<0.17` in
|
|
24
|
+
# pyproject.toml, and hence a reader on 0.15.x is not "old but workable", it is
|
|
25
|
+
# a hard failure with `FileFormatError`.
|
|
26
|
+
# 0.16.0 also removed `DirGraph::enable_columnar` from the public API (every
|
|
27
|
+
# graph is columnar from its first node now); the two sites that open-coded
|
|
28
|
+
# `prepare_save` + `enable_columnar` before a `.kgl` write moved to the
|
|
29
|
+
# purpose-built `kglite::api::io::prepare_kgl_write`, which also keeps the
|
|
30
|
+
# graph's copy-on-write lineage across that mutation — our `Arc::make_mut`
|
|
31
|
+
# spelling did not.
|
|
32
|
+
# It sits on top of the 0.15.13 floor, which added a planner fix for joins
|
|
33
|
+
# filtered on a type's title/id field (anchored traversals 5.7-327x faster here;
|
|
34
|
+
# see BENCHMARKS.md 0.2.1), and the 0.15.11 floor before it, which brought three
|
|
35
|
+
# things, only one of which changed what we run:
|
|
20
36
|
# * 0.15.10's `add_connections` resolves its edge-property columns once per
|
|
21
37
|
# call instead of once per cell — upstream measured 66.7ms -> 30.4ms
|
|
22
38
|
# (-54%) on 60k edges x 10 property columns. That is exactly the shape of
|
|
@@ -69,8 +85,8 @@ sha2 = "0.11"
|
|
|
69
85
|
# and no disk storage. Neither 0.15.7 nor 0.15.8 changes the `kglite::api` we
|
|
70
86
|
# call, graph output, property encoding, or `.kgl` serialization.
|
|
71
87
|
# Keep both libraries aligned so the graph and server share one engine release.
|
|
72
|
-
kglite = { version = "0.
|
|
73
|
-
kglite-mcp-server = { version = "0.
|
|
88
|
+
kglite = { version = "0.16.1", default-features = false }
|
|
89
|
+
kglite-mcp-server = { version = "0.16.1", default-features = false }
|
|
74
90
|
|
|
75
91
|
# Mirror KGLite's release codegen so the standalone builder has
|
|
76
92
|
# performance parity with the in-tree component (see KGLite
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: codingest
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.3
|
|
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.
|
|
15
|
+
Requires-Dist: kglite>=0.16.1,<0.17
|
|
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
|
|
@@ -53,7 +53,7 @@ graph.cypher("MATCH (f:Function) RETURN f.name LIMIT 10")
|
|
|
53
53
|
```
|
|
54
54
|
|
|
55
55
|
No language servers, databases, or repository-specific build steps are
|
|
56
|
-
required. The native Rust builder bundles parsers for
|
|
56
|
+
required. The native Rust builder bundles parsers for 17 languages and returns
|
|
57
57
|
a real `kglite.KnowledgeGraph`, ready for Cypher queries.
|
|
58
58
|
|
|
59
59
|
## Built for agents and code analysis
|
|
@@ -69,8 +69,9 @@ a real `kglite.KnowledgeGraph`, ready for Cypher queries.
|
|
|
69
69
|
- **Open-source intelligence:** clone and analyse a GitHub repository with one
|
|
70
70
|
Python call, or let an agent manage cached public repositories through MCP.
|
|
71
71
|
- **Polyglot by default:** one graph across Python, Rust, TypeScript,
|
|
72
|
-
JavaScript, Java, Go, C/C++, C#, Swift, PHP, HTML, CSS, Dart,
|
|
73
|
-
assembly
|
|
72
|
+
JavaScript, Java, Go, C/C++, C#, Swift, PHP, HTML, CSS, Dart, Julia, R,
|
|
73
|
+
and AGC assembly — capabilities per language in
|
|
74
|
+
[docs/languages.md](docs/languages.md).
|
|
74
75
|
- **Revision-aware:** analyse a tag, branch, commit, or multiple revisions in
|
|
75
76
|
one graph and query what changed.
|
|
76
77
|
|
|
@@ -191,7 +192,7 @@ codingest skill install # code-review Agent Skill
|
|
|
191
192
|
```
|
|
192
193
|
|
|
193
194
|
The wheel bundles every grammar plus the `codingest` and `codingest-mcp`
|
|
194
|
-
commands. KGLite ≥0.
|
|
195
|
+
commands. KGLite ≥0.16.1 is installed automatically as the query/storage
|
|
195
196
|
engine; its MCP server and the transitive `mcp-methods` framework power the
|
|
196
197
|
builder-aware Codingest server. Nothing else needs to be installed.
|
|
197
198
|
|
|
@@ -203,8 +204,8 @@ Python prerequisites.
|
|
|
203
204
|
|
|
204
205
|
```toml
|
|
205
206
|
[dependencies]
|
|
206
|
-
codingest = "0.
|
|
207
|
-
kglite = "0.
|
|
207
|
+
codingest = "0.2"
|
|
208
|
+
kglite = "0.16.1"
|
|
208
209
|
```
|
|
209
210
|
|
|
210
211
|
```rust
|
|
@@ -276,7 +277,7 @@ diagnostic.
|
|
|
276
277
|
## Dependency policy
|
|
277
278
|
|
|
278
279
|
`kglite` and `kglite-mcp-server` use matching crates.io requirements with a
|
|
279
|
-
0.
|
|
280
|
+
0.16.1 minimum and a shared lockfile. This keeps the builder, persistence
|
|
280
281
|
handoff, and embedded MCP server on one compatible engine patch line.
|
|
281
282
|
|
|
282
283
|
## Parity with the (now-removed) in-tree component
|
|
@@ -26,7 +26,7 @@ graph.cypher("MATCH (f:Function) RETURN f.name LIMIT 10")
|
|
|
26
26
|
```
|
|
27
27
|
|
|
28
28
|
No language servers, databases, or repository-specific build steps are
|
|
29
|
-
required. The native Rust builder bundles parsers for
|
|
29
|
+
required. The native Rust builder bundles parsers for 17 languages and returns
|
|
30
30
|
a real `kglite.KnowledgeGraph`, ready for Cypher queries.
|
|
31
31
|
|
|
32
32
|
## Built for agents and code analysis
|
|
@@ -42,8 +42,9 @@ a real `kglite.KnowledgeGraph`, ready for Cypher queries.
|
|
|
42
42
|
- **Open-source intelligence:** clone and analyse a GitHub repository with one
|
|
43
43
|
Python call, or let an agent manage cached public repositories through MCP.
|
|
44
44
|
- **Polyglot by default:** one graph across Python, Rust, TypeScript,
|
|
45
|
-
JavaScript, Java, Go, C/C++, C#, Swift, PHP, HTML, CSS, Dart,
|
|
46
|
-
assembly
|
|
45
|
+
JavaScript, Java, Go, C/C++, C#, Swift, PHP, HTML, CSS, Dart, Julia, R,
|
|
46
|
+
and AGC assembly — capabilities per language in
|
|
47
|
+
[docs/languages.md](docs/languages.md).
|
|
47
48
|
- **Revision-aware:** analyse a tag, branch, commit, or multiple revisions in
|
|
48
49
|
one graph and query what changed.
|
|
49
50
|
|
|
@@ -164,7 +165,7 @@ codingest skill install # code-review Agent Skill
|
|
|
164
165
|
```
|
|
165
166
|
|
|
166
167
|
The wheel bundles every grammar plus the `codingest` and `codingest-mcp`
|
|
167
|
-
commands. KGLite ≥0.
|
|
168
|
+
commands. KGLite ≥0.16.1 is installed automatically as the query/storage
|
|
168
169
|
engine; its MCP server and the transitive `mcp-methods` framework power the
|
|
169
170
|
builder-aware Codingest server. Nothing else needs to be installed.
|
|
170
171
|
|
|
@@ -176,8 +177,8 @@ Python prerequisites.
|
|
|
176
177
|
|
|
177
178
|
```toml
|
|
178
179
|
[dependencies]
|
|
179
|
-
codingest = "0.
|
|
180
|
-
kglite = "0.
|
|
180
|
+
codingest = "0.2"
|
|
181
|
+
kglite = "0.16.1"
|
|
181
182
|
```
|
|
182
183
|
|
|
183
184
|
```rust
|
|
@@ -249,7 +250,7 @@ diagnostic.
|
|
|
249
250
|
## Dependency policy
|
|
250
251
|
|
|
251
252
|
`kglite` and `kglite-mcp-server` use matching crates.io requirements with a
|
|
252
|
-
0.
|
|
253
|
+
0.16.1 minimum and a shared lockfile. This keeps the builder, persistence
|
|
253
254
|
handoff, and embedded MCP server on one compatible engine patch line.
|
|
254
255
|
|
|
255
256
|
## 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
|
|
13
|
+
# workspace pins the current engine floor (0.16.1).
|
|
14
14
|
|
|
15
15
|
[lib]
|
|
16
16
|
name = "codingest"
|
|
@@ -63,6 +63,11 @@ tree-sitter-php = "0.24.2"
|
|
|
63
63
|
tree-sitter-html = "0.23.2"
|
|
64
64
|
tree-sitter-css = "0.25.0"
|
|
65
65
|
tree-sitter-dart = "0.2.0"
|
|
66
|
+
tree-sitter-r = "1.3.0"
|
|
67
|
+
# 0.23.1 is the newest release (2024-09); it binds via tree-sitter-language
|
|
68
|
+
# 0.1 (runtime-agnostic LanguageFn), so it carries no tree-sitter runtime
|
|
69
|
+
# ceiling and links cleanly against tree-sitter 0.26.
|
|
70
|
+
tree-sitter-julia = "0.23.1"
|
|
66
71
|
toml = "1.1.3"
|
|
67
72
|
walkdir = "2.5.0"
|
|
68
73
|
tempfile = "3.27.0"
|
|
@@ -132,7 +132,7 @@ fn edge_breakdown(graph: &DirGraph) -> BTreeMap<String, usize> {
|
|
|
132
132
|
let Some((s, t)) = graph.graph.edge_endpoints(e) else {
|
|
133
133
|
continue;
|
|
134
134
|
};
|
|
135
|
-
let (Some(sn), Some(tn)) = (graph.
|
|
135
|
+
let (Some(sn), Some(tn)) = (graph.node_view(s), graph.node_view(t)) else {
|
|
136
136
|
continue;
|
|
137
137
|
};
|
|
138
138
|
let key = edge_breakdown_key(
|
|
@@ -577,7 +577,7 @@ mod tests {
|
|
|
577
577
|
return None;
|
|
578
578
|
}
|
|
579
579
|
let (_, t) = graph.graph.edge_endpoints(e)?;
|
|
580
|
-
Some(short_name(&id_string(graph.
|
|
580
|
+
Some(short_name(&id_string(graph.node_view(t)?.id())).to_string())
|
|
581
581
|
})
|
|
582
582
|
.collect();
|
|
583
583
|
assert!(all.len() > 1, "need several distinct callees to prove sort");
|
|
@@ -603,7 +603,7 @@ impl<'a> LoadPipeline<'a> {
|
|
|
603
603
|
// detectors live under `builder/routes/`. Adding a new framework is
|
|
604
604
|
// one new file in that directory plus a line in routes/mod.rs.
|
|
605
605
|
let (route_nodes, route_edges) =
|
|
606
|
-
super::routes::build_routes(&result.functions, &result.constants);
|
|
606
|
+
super::routes::build_routes(&result.files, &result.functions, &result.constants);
|
|
607
607
|
if !route_nodes.is_empty() {
|
|
608
608
|
maintain::add_nodes(
|
|
609
609
|
graph,
|
|
@@ -1481,6 +1481,22 @@ mod tests {
|
|
|
1481
1481
|
assert!(qnames.contains(&"Foo.Bar.V2"));
|
|
1482
1482
|
}
|
|
1483
1483
|
|
|
1484
|
+
/// AGC's registry `module_sep` is `/` and that is LOAD-BEARING, not a
|
|
1485
|
+
/// typo: the AGC parser emits slash-shaped module paths
|
|
1486
|
+
/// (`"Comanche055/MAIN"`, see `parsers::agc::module_path`), and this is
|
|
1487
|
+
/// the string `build_modules` splits. Its *qualified names* are dotted
|
|
1488
|
+
/// (`"Comanche055.FIRST"`), but qnames never pass through the separator
|
|
1489
|
+
/// fields — they only informed the `LangGroup::PythonJava` placement.
|
|
1490
|
+
/// Switching the field to `.` would collapse the hierarchy below into a
|
|
1491
|
+
/// single unparented `Comanche055/MAIN` module.
|
|
1492
|
+
#[test]
|
|
1493
|
+
fn build_modules_splits_agc_paths_on_slash() {
|
|
1494
|
+
let files = vec![file_with_module("agc", "Comanche055/MAIN")];
|
|
1495
|
+
let modules = build_modules(&files);
|
|
1496
|
+
let qnames: Vec<&str> = modules.iter().map(|m| m.qualified_name.as_str()).collect();
|
|
1497
|
+
assert_eq!(qnames, vec!["Comanche055", "Comanche055/MAIN"]);
|
|
1498
|
+
}
|
|
1499
|
+
|
|
1484
1500
|
#[test]
|
|
1485
1501
|
fn is_numeric_segment_detection() {
|
|
1486
1502
|
assert!(is_numeric_segment("0"));
|