codingest 0.2.31__tar.gz → 0.2.32__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.31 → codingest-0.2.32}/Cargo.lock +145 -31
  2. {codingest-0.2.31 → codingest-0.2.32}/Cargo.toml +9 -4
  3. {codingest-0.2.31 → codingest-0.2.32}/PKG-INFO +5 -5
  4. {codingest-0.2.31 → codingest-0.2.32}/README.md +3 -3
  5. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest/Cargo.toml +1 -1
  6. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest-cli/Cargo.toml +1 -1
  7. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest-cli/skills/codingest-code-review/SKILL.md +1 -1
  8. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest-cli/skills/codingest-code-review/references/mcp-upgrade.md +1 -1
  9. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest-mcp/Cargo.toml +1 -1
  10. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest-mcp/src/lib.rs +24 -0
  11. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest-py/Cargo.toml +3 -3
  12. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest-py/src/lib.rs +1 -1
  13. {codingest-0.2.31 → codingest-0.2.32}/pyproject.toml +2 -2
  14. {codingest-0.2.31 → codingest-0.2.32}/LICENSE +0 -0
  15. {codingest-0.2.31 → codingest-0.2.32}/codingest/__init__.py +0 -0
  16. {codingest-0.2.31 → codingest-0.2.32}/codingest/__init__.pyi +0 -0
  17. {codingest-0.2.31 → codingest-0.2.32}/codingest/cli.py +0 -0
  18. {codingest-0.2.31 → codingest-0.2.32}/codingest/mcp_server.py +0 -0
  19. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest/assets/code_review/recipes.json +0 -0
  20. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest/assets/code_review/skill.md +0 -0
  21. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest/src/bin/codingest_bench.rs +0 -0
  22. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest/src/bin/codingest_stats.rs +0 -0
  23. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest/src/builder/call_edges.rs +0 -0
  24. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest/src/builder/js_workspace.rs +0 -0
  25. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest/src/builder/load/edge_frames.rs +0 -0
  26. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest/src/builder/load/entity_frames.rs +0 -0
  27. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest/src/builder/load.rs +0 -0
  28. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest/src/builder/mod.rs +0 -0
  29. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest/src/builder/other_edges.rs +0 -0
  30. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest/src/builder/routes/django.rs +0 -0
  31. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest/src/builder/routes/fastapi.rs +0 -0
  32. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest/src/builder/routes/flask.rs +0 -0
  33. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest/src/builder/routes/mod.rs +0 -0
  34. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest/src/builder/semantic_edges.rs +0 -0
  35. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest/src/builder/type_edges.rs +0 -0
  36. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest/src/cross_lang.rs +0 -0
  37. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest/src/docs/mod.rs +0 -0
  38. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest/src/docs/rst.rs +0 -0
  39. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest/src/lib.rs +0 -0
  40. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest/src/manifest/mod.rs +0 -0
  41. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest/src/methodology.rs +0 -0
  42. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest/src/models.rs +0 -0
  43. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest/src/parsers/agc.rs +0 -0
  44. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest/src/parsers/cpp.rs +0 -0
  45. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest/src/parsers/csharp.rs +0 -0
  46. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest/src/parsers/css.rs +0 -0
  47. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest/src/parsers/dart.rs +0 -0
  48. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest/src/parsers/go.rs +0 -0
  49. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest/src/parsers/html.rs +0 -0
  50. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest/src/parsers/java.rs +0 -0
  51. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest/src/parsers/julia.rs +0 -0
  52. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest/src/parsers/mod.rs +0 -0
  53. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest/src/parsers/php.rs +0 -0
  54. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest/src/parsers/python.rs +0 -0
  55. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest/src/parsers/r.rs +0 -0
  56. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest/src/parsers/registry.rs +0 -0
  57. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest/src/parsers/rust_lang.rs +0 -0
  58. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest/src/parsers/shared.rs +0 -0
  59. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest/src/parsers/swift.rs +0 -0
  60. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest/src/parsers/typescript.rs +0 -0
  61. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest/src/repo.rs +0 -0
  62. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest/src/rev.rs +0 -0
  63. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest/tests/agc_apollo.rs +0 -0
  64. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest/tests/goldens/README.md +0 -0
  65. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest/tests/goldens/agc_basic.sha256 +0 -0
  66. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest/tests/goldens/cpp_extern_c.sha256 +0 -0
  67. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest/tests/goldens/cpp_include.sha256 +0 -0
  68. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest/tests/goldens/cross_ts_py.sha256 +0 -0
  69. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest/tests/goldens/csharp_using_alias.sha256 +0 -0
  70. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest/tests/goldens/dart_import.sha256 +0 -0
  71. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest/tests/goldens/dart_part_of.sha256 +0 -0
  72. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest/tests/goldens/docs_ext_collide.sha256 +0 -0
  73. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest/tests/goldens/docs_mdx.sha256 +0 -0
  74. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest/tests/goldens/dup_minified_assets.sha256 +0 -0
  75. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest/tests/goldens/go_interface.sha256 +0 -0
  76. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest/tests/goldens/html_js_lang_group.sha256 +0 -0
  77. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest/tests/goldens/java_javadoc.sha256 +0 -0
  78. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest/tests/goldens/julia_basic.sha256 +0 -0
  79. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest/tests/goldens/php_group_use.sha256 +0 -0
  80. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest/tests/goldens/py_basic.sha256 +0 -0
  81. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest/tests/goldens/py_import.sha256 +0 -0
  82. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest/tests/goldens/py_inheritance.sha256 +0 -0
  83. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest/tests/goldens/py_nested_defs.sha256 +0 -0
  84. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest/tests/goldens/py_routes_dup.sha256 +0 -0
  85. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest/tests/goldens/py_src_layout.sha256 +0 -0
  86. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest/tests/goldens/r_basic.sha256 +0 -0
  87. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest/tests/goldens/rust_import.sha256 +0 -0
  88. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest/tests/goldens/rust_inline_mod.sha256 +0 -0
  89. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest/tests/goldens/rust_xfile.sha256 +0 -0
  90. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest/tests/goldens/swift_basic.sha256 +0 -0
  91. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest/tests/goldens/ts_callback.sha256 +0 -0
  92. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest/tests/goldens/ts_closure_scope.sha256 +0 -0
  93. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest/tests/goldens/ts_hof_binding.sha256 +0 -0
  94. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest/tests/goldens/ts_monorepo.sha256 +0 -0
  95. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest/tests/goldens/web_served_root.sha256 +0 -0
  96. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest/tests/grammar_kinds.rs +0 -0
  97. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest/tests/parity.rs +0 -0
  98. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest/tests/traversal_semantics.rs +0 -0
  99. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest-cli/skills/codingest-code-review/references/public-repositories.md +0 -0
  100. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest-cli/skills/codingest-code-review/references/queries.md +0 -0
  101. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest-cli/src/code_tree_cli.rs +0 -0
  102. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest-cli/src/lib.rs +0 -0
  103. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest-cli/src/main.rs +0 -0
  104. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest-cli/src/query.rs +0 -0
  105. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest-cli/src/skill.rs +0 -0
  106. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest-cli/src/skill_assets.rs +0 -0
  107. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest-cli/tests/embed_skills.rs +0 -0
  108. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest-cli/tests/exit_codes.rs +0 -0
  109. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest-cli/tests/skill_recipes.rs +0 -0
  110. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest-mcp/src/main.rs +0 -0
  111. {codingest-0.2.31 → codingest-0.2.32}/crates/codingest-mcp/tests/response_contract.rs +0 -0
@@ -312,7 +312,7 @@ dependencies = [
312
312
 
313
313
  [[package]]
314
314
  name = "codingest"
315
- version = "0.2.31"
315
+ version = "0.2.32"
316
316
  dependencies = [
317
317
  "aho-corasick",
318
318
  "base64 0.22.1",
@@ -348,7 +348,7 @@ dependencies = [
348
348
 
349
349
  [[package]]
350
350
  name = "codingest-cli"
351
- version = "0.2.31"
351
+ version = "0.2.32"
352
352
  dependencies = [
353
353
  "anyhow",
354
354
  "clap",
@@ -360,7 +360,7 @@ dependencies = [
360
360
 
361
361
  [[package]]
362
362
  name = "codingest-mcp"
363
- version = "0.2.31"
363
+ version = "0.2.32"
364
364
  dependencies = [
365
365
  "anyhow",
366
366
  "codingest",
@@ -371,7 +371,7 @@ dependencies = [
371
371
 
372
372
  [[package]]
373
373
  name = "codingest-py"
374
- version = "0.2.31"
374
+ version = "0.2.32"
375
375
  dependencies = [
376
376
  "codingest",
377
377
  "codingest-cli",
@@ -393,6 +393,35 @@ version = "0.10.2"
393
393
  source = "registry+https://github.com/rust-lang/crates.io-index"
394
394
  checksum = "a6ef517f0926dd24a1582492c791b6a4818a4d94e789a334894aa15b0d12f55c"
395
395
 
396
+ [[package]]
397
+ name = "cookie"
398
+ version = "0.18.2"
399
+ source = "registry+https://github.com/rust-lang/crates.io-index"
400
+ checksum = "1a373e3602691c3cdea496d2f0ee5935151e6168fe87739483c463db1b2f2f87"
401
+ dependencies = [
402
+ "percent-encoding",
403
+ "time",
404
+ "version_check",
405
+ ]
406
+
407
+ [[package]]
408
+ name = "cookie_store"
409
+ version = "0.22.1"
410
+ source = "registry+https://github.com/rust-lang/crates.io-index"
411
+ checksum = "15b2c103cf610ec6cae3da84a766285b42fd16aad564758459e6ecf128c75206"
412
+ dependencies = [
413
+ "cookie",
414
+ "document-features",
415
+ "idna",
416
+ "indexmap",
417
+ "log",
418
+ "serde",
419
+ "serde_derive",
420
+ "serde_json",
421
+ "time",
422
+ "url",
423
+ ]
424
+
396
425
  [[package]]
397
426
  name = "core-foundation-sys"
398
427
  version = "0.8.7"
@@ -512,6 +541,12 @@ dependencies = [
512
541
  "syn 3.0.3",
513
542
  ]
514
543
 
544
+ [[package]]
545
+ name = "deranged"
546
+ version = "0.5.9"
547
+ source = "registry+https://github.com/rust-lang/crates.io-index"
548
+ checksum = "9e9de72ce2ad1f90dc62fa25f0f430ef85eb4b0d8fa0be4f30373bc40a21d28e"
549
+
515
550
  [[package]]
516
551
  name = "digest"
517
552
  version = "0.11.3"
@@ -534,6 +569,15 @@ dependencies = [
534
569
  "syn 2.0.119",
535
570
  ]
536
571
 
572
+ [[package]]
573
+ name = "document-features"
574
+ version = "0.2.12"
575
+ source = "registry+https://github.com/rust-lang/crates.io-index"
576
+ checksum = "d4b8a88685455ed29a21542a33abd9cb6510b6b129abadabdcef0f4c55bc8f61"
577
+ dependencies = [
578
+ "litrs",
579
+ ]
580
+
537
581
  [[package]]
538
582
  name = "dyn-clone"
539
583
  version = "1.0.20"
@@ -1378,9 +1422,9 @@ dependencies = [
1378
1422
 
1379
1423
  [[package]]
1380
1424
  name = "kglite"
1381
- version = "0.20.0"
1425
+ version = "0.21.1"
1382
1426
  source = "registry+https://github.com/rust-lang/crates.io-index"
1383
- checksum = "13a84167dedd08a2b0549d7674265e6f6d51b27dce999f87a31b67a175eea9a9"
1427
+ checksum = "8fd362f0e83b6c70f9dd5bb315694f86540a78e4efc3946e7852e5babb514e07"
1384
1428
  dependencies = [
1385
1429
  "bzip2",
1386
1430
  "chrono",
@@ -1409,6 +1453,7 @@ dependencies = [
1409
1453
  "sha2",
1410
1454
  "stacker",
1411
1455
  "tempfile",
1456
+ "thin-vec",
1412
1457
  "walkdir",
1413
1458
  "wkt",
1414
1459
  "yaml-rust2",
@@ -1417,9 +1462,9 @@ dependencies = [
1417
1462
 
1418
1463
  [[package]]
1419
1464
  name = "kglite-mcp-server"
1420
- version = "0.20.0"
1465
+ version = "0.21.1"
1421
1466
  source = "registry+https://github.com/rust-lang/crates.io-index"
1422
- checksum = "27d58119944658f5768617b04b342fe7320e44d571901b47bc3802a80f244ba6"
1467
+ checksum = "088af789bff7cb30e9ad4b47a4b69903dc3481e2176b5e07d2989db172e381aa"
1423
1468
  dependencies = [
1424
1469
  "anyhow",
1425
1470
  "base64 0.23.1",
@@ -1431,6 +1476,7 @@ dependencies = [
1431
1476
  "hyper",
1432
1477
  "hyper-util",
1433
1478
  "kglite",
1479
+ "libc",
1434
1480
  "mcp-methods",
1435
1481
  "regex",
1436
1482
  "rmcp",
@@ -1499,6 +1545,12 @@ version = "0.8.2"
1499
1545
  source = "registry+https://github.com/rust-lang/crates.io-index"
1500
1546
  checksum = "92daf443525c4cce67b150400bc2316076100ce0b3686209eb8cf3c31612e6f0"
1501
1547
 
1548
+ [[package]]
1549
+ name = "litrs"
1550
+ version = "1.0.1"
1551
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1552
+ checksum = "4744e383959f0db86ede514b809b1c53251889093803c05267acc7d4e7030d70"
1553
+
1502
1554
  [[package]]
1503
1555
  name = "lock_api"
1504
1556
  version = "0.4.14"
@@ -1525,18 +1577,20 @@ dependencies = [
1525
1577
 
1526
1578
  [[package]]
1527
1579
  name = "mcp-methods"
1528
- version = "0.4.13"
1580
+ version = "0.5.1"
1529
1581
  source = "registry+https://github.com/rust-lang/crates.io-index"
1530
- checksum = "97eb20dc0d7038ec9ff777df628774b32081dadebe5404aaa100c47d702308e9"
1582
+ checksum = "ca0ab1aa62a995ac646cd85b1cbeb5fbf37293aa87f77cd20378af36acb1a5d7"
1531
1583
  dependencies = [
1532
1584
  "anyhow",
1533
1585
  "clap",
1534
1586
  "fancy-regex",
1587
+ "futures",
1535
1588
  "globset",
1536
1589
  "grep-matcher",
1537
1590
  "grep-regex",
1538
1591
  "grep-searcher",
1539
1592
  "ignore",
1593
+ "libc",
1540
1594
  "notify",
1541
1595
  "notify-debouncer-mini",
1542
1596
  "regex",
@@ -1547,6 +1601,7 @@ dependencies = [
1547
1601
  "serde_yaml",
1548
1602
  "thiserror 2.0.19",
1549
1603
  "tokio",
1604
+ "tokio-util",
1550
1605
  "tracing",
1551
1606
  "tracing-subscriber",
1552
1607
  "ureq",
@@ -1637,6 +1692,12 @@ dependencies = [
1637
1692
  "windows-sys 0.61.2",
1638
1693
  ]
1639
1694
 
1695
+ [[package]]
1696
+ name = "num-conv"
1697
+ version = "0.2.2"
1698
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1699
+ checksum = "521739c6d2bac4aa25192232afe6841231376b2b26d4d9fae5ecf8ca5772e441"
1700
+
1640
1701
  [[package]]
1641
1702
  name = "num-traits"
1642
1703
  version = "0.2.19"
@@ -1756,6 +1817,12 @@ dependencies = [
1756
1817
  "zerovec",
1757
1818
  ]
1758
1819
 
1820
+ [[package]]
1821
+ name = "powerfmt"
1822
+ version = "0.2.1"
1823
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1824
+ checksum = "4a6394b9e965e73d0a289ee54f589087e2c676aedf60885baf52c76b771e4958"
1825
+
1759
1826
  [[package]]
1760
1827
  name = "proc-macro2"
1761
1828
  version = "1.0.107"
@@ -2108,9 +2175,9 @@ dependencies = [
2108
2175
 
2109
2176
  [[package]]
2110
2177
  name = "rustls"
2111
- version = "0.23.42"
2178
+ version = "0.23.46"
2112
2179
  source = "registry+https://github.com/rust-lang/crates.io-index"
2113
- checksum = "3c54fcab019b409d04215d3a17cb438fd7fbf192ee61461f20f4fe18704bc138"
2180
+ checksum = "48e13bd8c0e9365c43cfa5c9e8f9ad49d3c8444926c9aac819e0e4dc503c8fdf"
2114
2181
  dependencies = [
2115
2182
  "log",
2116
2183
  "once_cell",
@@ -2132,9 +2199,9 @@ dependencies = [
2132
2199
 
2133
2200
  [[package]]
2134
2201
  name = "rustls-webpki"
2135
- version = "0.103.13"
2202
+ version = "0.103.16"
2136
2203
  source = "registry+https://github.com/rust-lang/crates.io-index"
2137
- checksum = "61c429a8649f110dddef65e2a5ad240f747e85f7758a6bccc7e5777bd33f756e"
2204
+ checksum = "4443b1b6d39d7c663139942cc4558262562d2c84123bb6282ef177009ca8b281"
2138
2205
  dependencies = [
2139
2206
  "ring",
2140
2207
  "rustls-pki-types",
@@ -2441,6 +2508,12 @@ dependencies = [
2441
2508
  "windows-sys 0.61.2",
2442
2509
  ]
2443
2510
 
2511
+ [[package]]
2512
+ name = "thin-vec"
2513
+ version = "0.2.21"
2514
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2515
+ checksum = "d6a4b9ba8738cb4a4f399d37e266becfd475e75eb73425b87a05a2f2039ba63e"
2516
+
2444
2517
  [[package]]
2445
2518
  name = "thiserror"
2446
2519
  version = "1.0.69"
@@ -2490,6 +2563,36 @@ dependencies = [
2490
2563
  "cfg-if",
2491
2564
  ]
2492
2565
 
2566
+ [[package]]
2567
+ name = "time"
2568
+ version = "0.3.55"
2569
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2570
+ checksum = "cdb87b95ec50ddfa440816d227a17b2ccbdda963a316a727fda0fc4334f7d134"
2571
+ dependencies = [
2572
+ "deranged",
2573
+ "num-conv",
2574
+ "powerfmt",
2575
+ "serde_core",
2576
+ "time-core",
2577
+ "time-macros",
2578
+ ]
2579
+
2580
+ [[package]]
2581
+ name = "time-core"
2582
+ version = "0.1.9"
2583
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2584
+ checksum = "9e1c906769ad99c88eaa54e728060edef082f8e358ff32030cb7c7d315e81109"
2585
+
2586
+ [[package]]
2587
+ name = "time-macros"
2588
+ version = "0.2.32"
2589
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2590
+ checksum = "7e689342a48d2ea927c87ea50cabf8594854bf940e9310208848d680d668ed85"
2591
+ dependencies = [
2592
+ "num-conv",
2593
+ "time-core",
2594
+ ]
2595
+
2493
2596
  [[package]]
2494
2597
  name = "tinystr"
2495
2598
  version = "0.8.3"
@@ -2868,20 +2971,34 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1"
2868
2971
 
2869
2972
  [[package]]
2870
2973
  name = "ureq"
2871
- version = "2.12.1"
2974
+ version = "3.5.0"
2872
2975
  source = "registry+https://github.com/rust-lang/crates.io-index"
2873
- checksum = "02d1a66277ed75f640d608235660df48c8e3c19f3b4edb6a263315626cc3c01d"
2976
+ checksum = "cde93ff05758a36a851a398a772b0b79a82fbe3c186a46f2696baaeaf84c966b"
2874
2977
  dependencies = [
2875
- "base64 0.22.1",
2978
+ "base64 0.23.1",
2979
+ "cookie_store",
2876
2980
  "flate2",
2877
2981
  "log",
2878
- "once_cell",
2982
+ "percent-encoding",
2879
2983
  "rustls",
2880
2984
  "rustls-pki-types",
2881
2985
  "serde",
2882
2986
  "serde_json",
2883
- "url",
2884
- "webpki-roots 0.26.11",
2987
+ "ureq-proto",
2988
+ "utf8-zero",
2989
+ "webpki-roots",
2990
+ ]
2991
+
2992
+ [[package]]
2993
+ name = "ureq-proto"
2994
+ version = "0.6.5"
2995
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2996
+ checksum = "841583fc36089d7d59419568ae157f43a5a03a2e5a81ba87c77d1596ef46e922"
2997
+ dependencies = [
2998
+ "base64 0.23.1",
2999
+ "http",
3000
+ "httparse",
3001
+ "log",
2885
3002
  ]
2886
3003
 
2887
3004
  [[package]]
@@ -2896,6 +3013,12 @@ dependencies = [
2896
3013
  "serde",
2897
3014
  ]
2898
3015
 
3016
+ [[package]]
3017
+ name = "utf8-zero"
3018
+ version = "0.8.1"
3019
+ source = "registry+https://github.com/rust-lang/crates.io-index"
3020
+ checksum = "b8c0a043c9540bae7c578c88f91dda8bd82e59ae27c21baca69c8b191aaf5a6e"
3021
+
2899
3022
  [[package]]
2900
3023
  name = "utf8_iter"
2901
3024
  version = "1.0.4"
@@ -2994,18 +3117,9 @@ dependencies = [
2994
3117
 
2995
3118
  [[package]]
2996
3119
  name = "webpki-roots"
2997
- version = "0.26.11"
2998
- source = "registry+https://github.com/rust-lang/crates.io-index"
2999
- checksum = "521bc38abb08001b01866da9f51eb7c5d647a19260e00054a8c7fd5f9e57f7a9"
3000
- dependencies = [
3001
- "webpki-roots 1.0.9",
3002
- ]
3003
-
3004
- [[package]]
3005
- name = "webpki-roots"
3006
- version = "1.0.9"
3120
+ version = "1.0.11"
3007
3121
  source = "registry+https://github.com/rust-lang/crates.io-index"
3008
- checksum = "7dcd9d09a39985f5344844e66b0c530a33843579125f23e21e9f0f220850f22a"
3122
+ checksum = "f5f280bbb2b287bc8e7de7e3852945a0ff50d1bbcb5ed42b6c7a568c546df171"
3009
3123
  dependencies = [
3010
3124
  "rustls-pki-types",
3011
3125
  ]
@@ -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.31"
6
+ version = "0.2.32"
7
7
  edition = "2021"
8
8
  rust-version = "1.88"
9
9
  license = "MIT"
@@ -12,7 +12,12 @@ 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.20.0
15
+ # kglite engine + MCP server — imported as crates.io libraries. The 0.21.1
16
+ # floor is an engine minor (0.20.0 -> 0.21.1, taking 0.21.0 with it): graphs of
17
+ # 65,536 nodes or more save as `.kgl` v9, which kglite before 0.21.0 refuses, so
18
+ # the Python pin moves in lockstep. Its Rust API breaks (`LoadOptions`
19
+ # non-exhaustive, `KgError`/`GraphBackend` variants, `GraphInfo` fields) reach
20
+ # nothing here. The earlier 0.20.0
16
21
  # floor is an engine minor (0.19.6 -> 0.20.0, taking 0.19.7 with it): `.kgl` v8
17
22
  # files are unreadable by 0.19.x, so the Python pin moves in lockstep. Its new
18
23
  # `Value` variants break exhaustive matches, but codingest matches `Value` only
@@ -652,8 +657,8 @@ sha2 = "0.11"
652
657
  # and no disk storage. Neither 0.15.7 nor 0.15.8 changes the `kglite::api` we
653
658
  # call, graph output, property encoding, or `.kgl` serialization.
654
659
  # Keep both libraries aligned so the graph and server share one engine release.
655
- kglite = { version = "0.20.0", default-features = false }
656
- kglite-mcp-server = { version = "0.20.0", default-features = false }
660
+ kglite = { version = "0.21.1", default-features = false }
661
+ kglite-mcp-server = { version = "0.21.1", default-features = false }
657
662
 
658
663
  # Dependency debuginfo capped at line tables (kglite coordination, 2026-08-31,
659
664
  # 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.31
3
+ Version: 0.2.32
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.20.0,<0.21
15
+ Requires-Dist: kglite>=0.21.1,<0.22
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.20.0 is installed automatically as the query/storage
197
+ commands. KGLite ≥0.21.1 is installed automatically as the query/storage
198
198
  engine; its MCP server and the transitive `mcp-methods` framework power the
199
199
  builder-aware Codingest server. Nothing else needs to be installed.
200
200
 
@@ -207,7 +207,7 @@ Python prerequisites.
207
207
  ```toml
208
208
  [dependencies]
209
209
  codingest = "0.2"
210
- kglite = "0.20.0"
210
+ kglite = "0.21.1"
211
211
  ```
212
212
 
213
213
  ```rust
@@ -279,7 +279,7 @@ diagnostic.
279
279
  ## Dependency policy
280
280
 
281
281
  `kglite` and `kglite-mcp-server` use matching crates.io requirements with a
282
- 0.20.0 minimum and a shared lockfile. This keeps the builder, persistence
282
+ 0.21.1 minimum and a shared lockfile. This keeps the builder, persistence
283
283
  handoff, and embedded MCP server on one compatible engine patch line.
284
284
 
285
285
  ## Parity with the (now-removed) in-tree component
@@ -167,7 +167,7 @@ codingest skill install # code-review Agent Skill
167
167
  ```
168
168
 
169
169
  The wheel bundles every grammar plus the `codingest` and `codingest-mcp`
170
- commands. KGLite ≥0.20.0 is installed automatically as the query/storage
170
+ commands. KGLite ≥0.21.1 is installed automatically as the query/storage
171
171
  engine; its MCP server and the transitive `mcp-methods` framework power the
172
172
  builder-aware Codingest server. Nothing else needs to be installed.
173
173
 
@@ -180,7 +180,7 @@ Python prerequisites.
180
180
  ```toml
181
181
  [dependencies]
182
182
  codingest = "0.2"
183
- kglite = "0.20.0"
183
+ kglite = "0.21.1"
184
184
  ```
185
185
 
186
186
  ```rust
@@ -252,7 +252,7 @@ diagnostic.
252
252
  ## Dependency policy
253
253
 
254
254
  `kglite` and `kglite-mcp-server` use matching crates.io requirements with a
255
- 0.20.0 minimum and a shared lockfile. This keeps the builder, persistence
255
+ 0.21.1 minimum and a shared lockfile. This keeps the builder, persistence
256
256
  handoff, and embedded MCP server on one compatible engine patch line.
257
257
 
258
258
  ## Parity with the (now-removed) in-tree component
@@ -10,7 +10,7 @@ keywords = ["knowledge-graph", "code-analysis", "tree-sitter", "cypher", "kglite
10
10
  categories = ["development-tools", "parser-implementations"]
11
11
 
12
12
  # Requires the kglite 0.15 engine API (`kglite::api::code_entities`); the
13
- # workspace pins the current engine floor (0.20.0).
13
+ # workspace pins the current engine floor (0.21.1).
14
14
 
15
15
  [lib]
16
16
  name = "codingest"
@@ -14,7 +14,7 @@ name = "codingest"
14
14
  path = "src/main.rs"
15
15
 
16
16
  [dependencies]
17
- codingest = { version = "0.2.31", path = "../codingest" }
17
+ codingest = { version = "0.2.32", 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.20.0,<0.21`; verify `kglite --version` before using its
17
+ > `kglite>=0.21.1,<0.22`; 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.20.0,<0.21`:
57
+ `>=0.21.1,<0.22`:
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.31", path = "../codingest" }
17
+ codingest = { version = "0.2.32", path = "../codingest" }
18
18
  kglite-mcp-server = { workspace = true }
19
19
  anyhow = "1.0.104"
20
20
 
@@ -81,6 +81,11 @@ fn server_extensions() -> anyhow::Result<ServerExtensions> {
81
81
  let recipes = codingest::methodology::recipe_catalog()
82
82
  .map_err(|error| anyhow::anyhow!("codingest recipe catalogue is invalid: {error}"))?;
83
83
  Ok(ServerExtensions::default()
84
+ // Names this package in the stale-build notice; a reload then
85
+ // compares codingest's version, not kglite's. kglite learns the
86
+ // installed version by running `<binary> --version`, so `run` must
87
+ // answer that line itself (`version_line`).
88
+ .with_identity("codingest", env!("CARGO_PKG_VERSION"))
84
89
  .with_workspace_graph(hooks)
85
90
  .with_skills([codingest::methodology::skill_record()])
86
91
  .with_recipes(recipes))
@@ -96,13 +101,32 @@ where
96
101
  I: IntoIterator<Item = T>,
97
102
  T: Into<std::ffi::OsString> + Clone,
98
103
  {
104
+ let args: Vec<std::ffi::OsString> = args.into_iter().map(Into::into).collect();
105
+ if args.len() == 2 && (args[1] == "--version" || args[1] == "-V") {
106
+ println!("{}", version_line());
107
+ return Ok(());
108
+ }
99
109
  kglite_mcp_server::run_with_extensions(args, server_extensions()?)
100
110
  }
101
111
 
112
+ /// The line `--version` / `-V` prints; must match the identity declared in
113
+ /// `server_extensions` so the stale-build probe sees one name and version.
114
+ fn version_line() -> String {
115
+ format!("codingest {}", env!("CARGO_PKG_VERSION"))
116
+ }
117
+
102
118
  #[cfg(test)]
103
119
  mod tests {
104
120
  use super::*;
105
121
 
122
+ #[test]
123
+ fn version_line_names_codingest_and_its_package_version() {
124
+ assert_eq!(
125
+ version_line(),
126
+ format!("codingest {}", env!("CARGO_PKG_VERSION"))
127
+ );
128
+ }
129
+
106
130
  #[test]
107
131
  fn graph_source_predicate_includes_code_and_docs_only() {
108
132
  assert!(is_graph_source(Path::new("src/lib.rs")));
@@ -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.31", path = "../codingest", default-features = false }
45
+ codingest = { version = "0.2.32", 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.31", path = "../codingest-cli" }
56
+ codingest-cli = { version = "0.2.32", 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.31", path = "../codingest-mcp" }
61
+ codingest-mcp = { version = "0.2.32", 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.20.0,<0.21'`."
89
+ 'kglite>=0.21.1,<0.22'`."
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.20.0"` == `>=0.20.0,<0.21.0`) exactly — bump both together.
45
+ # (`version = "0.21.1"` == `>=0.21.1,<0.22.0`) exactly — bump both together.
46
46
  dependencies = [
47
- "kglite>=0.20.0,<0.21",
47
+ "kglite>=0.21.1,<0.22",
48
48
  ]
49
49
 
50
50
  [project.urls]
File without changes
File without changes