vsh-python 0.3.1__tar.gz → 0.5.0__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 (74) hide show
  1. {vsh_python-0.3.1 → vsh_python-0.5.0}/Cargo.lock +70 -44
  2. {vsh_python-0.3.1 → vsh_python-0.5.0}/Cargo.toml +15 -14
  3. {vsh_python-0.3.1 → vsh_python-0.5.0}/PKG-INFO +72 -17
  4. {vsh_python-0.3.1 → vsh_python-0.5.0}/README.md +68 -16
  5. {vsh_python-0.3.1 → vsh_python-0.5.0}/THIRD_PARTY_NOTICES.md +2 -2
  6. {vsh_python-0.3.1 → vsh_python-0.5.0}/crates/vbash/Cargo.toml +1 -0
  7. vsh_python-0.5.0/crates/vbash/README.md +220 -0
  8. {vsh_python-0.3.1 → vsh_python-0.5.0}/crates/vbash/examples/native_benchmark.rs +29 -1
  9. vsh_python-0.5.0/crates/vbash/examples/staged_release.monty +11 -0
  10. vsh_python-0.5.0/crates/vbash/examples/staged_release.rs +79 -0
  11. {vsh_python-0.3.1 → vsh_python-0.5.0}/crates/vbash/src/artifact.rs +296 -6
  12. vsh_python-0.5.0/crates/vbash/src/hook.rs +513 -0
  13. {vsh_python-0.3.1 → vsh_python-0.5.0}/crates/vbash/src/lib.rs +13 -5
  14. vsh_python-0.5.0/crates/vbash/src/review.rs +98 -0
  15. {vsh_python-0.3.1 → vsh_python-0.5.0}/crates/vbash/src/runtime.rs +951 -28
  16. {vsh_python-0.3.1 → vsh_python-0.5.0}/crates/vsh/Cargo.toml +2 -1
  17. vsh_python-0.5.0/crates/vsh/README.md +220 -0
  18. {vsh_python-0.3.1 → vsh_python-0.5.0}/crates/vsh-commit/Cargo.toml +1 -0
  19. vsh_python-0.5.0/crates/vsh-commit/README.md +220 -0
  20. {vsh_python-0.3.1 → vsh_python-0.5.0}/crates/vsh-commit/src/tests.rs +4 -0
  21. {vsh_python-0.3.1 → vsh_python-0.5.0}/crates/vsh-monty/Cargo.toml +4 -4
  22. vsh_python-0.5.0/crates/vsh-monty/README.md +220 -0
  23. {vsh_python-0.3.1 → vsh_python-0.5.0}/crates/vsh-monty/src/lib.rs +336 -37
  24. vsh_python-0.5.0/crates/vsh-monty/src/tools.rs +1085 -0
  25. {vsh_python-0.3.1 → vsh_python-0.5.0}/crates/vsh-monty/src/worker.rs +72 -28
  26. {vsh_python-0.3.1 → vsh_python-0.5.0}/crates/vsh-policy/Cargo.toml +1 -0
  27. vsh_python-0.5.0/crates/vsh-policy/README.md +220 -0
  28. vsh_python-0.5.0/crates/vsh-policy/examples/policy_benchmark.rs +58 -0
  29. {vsh_python-0.3.1 → vsh_python-0.5.0}/crates/vsh-policy/src/lib.rs +203 -55
  30. {vsh_python-0.3.1 → vsh_python-0.5.0}/crates/vsh-python/Cargo.toml +2 -1
  31. vsh_python-0.5.0/crates/vsh-python/README.md +220 -0
  32. {vsh_python-0.3.1 → vsh_python-0.5.0}/crates/vsh-python/src/lib.rs +545 -3
  33. {vsh_python-0.3.1 → vsh_python-0.5.0}/crates/vsh-store/Cargo.toml +1 -0
  34. vsh_python-0.5.0/crates/vsh-store/README.md +220 -0
  35. {vsh_python-0.3.1 → vsh_python-0.5.0}/crates/vsh-store/src/lib.rs +1 -1
  36. {vsh_python-0.3.1 → vsh_python-0.5.0}/crates/vsh-store/src/persistent.rs +2 -0
  37. {vsh_python-0.3.1 → vsh_python-0.5.0}/crates/vsh-types/Cargo.toml +1 -0
  38. vsh_python-0.5.0/crates/vsh-types/README.md +220 -0
  39. {vsh_python-0.3.1 → vsh_python-0.5.0}/crates/vsh-types/src/lib.rs +122 -3
  40. {vsh_python-0.3.1 → vsh_python-0.5.0}/crates/vsh-vfs/Cargo.toml +1 -0
  41. vsh_python-0.5.0/crates/vsh-vfs/README.md +220 -0
  42. {vsh_python-0.3.1 → vsh_python-0.5.0}/crates/vsh-vfs/src/lib.rs +123 -20
  43. {vsh_python-0.3.1 → vsh_python-0.5.0}/crates/vsh-worker/Cargo.toml +2 -1
  44. vsh_python-0.5.0/crates/vsh-worker/README.md +220 -0
  45. {vsh_python-0.3.1 → vsh_python-0.5.0}/crates/vsh-worker/src/child.rs +73 -17
  46. {vsh_python-0.3.1 → vsh_python-0.5.0}/crates/vsh-worker/src/main.rs +1 -1
  47. {vsh_python-0.3.1 → vsh_python-0.5.0}/crates/vsh-worker/tests/subprocess.rs +60 -0
  48. {vsh_python-0.3.1 → vsh_python-0.5.0}/pyproject.toml +19 -53
  49. {vsh_python-0.3.1 → vsh_python-0.5.0}/scripts/vsh_build_backend.py +1 -1
  50. {vsh_python-0.3.1 → vsh_python-0.5.0}/src/vsh/__init__.py +24 -0
  51. vsh_python-0.5.0/src/vsh/_judge.py +347 -0
  52. {vsh_python-0.3.1 → vsh_python-0.5.0}/src/vsh/_native.pyi +176 -0
  53. vsh_python-0.5.0/src/vsh/hooks.py +217 -0
  54. {vsh_python-0.3.1 → vsh_python-0.5.0}/src/vsh/mcp/codemode_server.py +7 -15
  55. {vsh_python-0.3.1 → vsh_python-0.5.0}/src/vsh/mcp/prompts.py +4 -0
  56. {vsh_python-0.3.1 → vsh_python-0.5.0}/src/vsh/mcp/surface.py +1 -6
  57. vsh_python-0.5.0/src/vsh/pydantic_ai.py +317 -0
  58. {vsh_python-0.3.1 → vsh_python-0.5.0}/LICENSE +0 -0
  59. {vsh_python-0.3.1 → vsh_python-0.5.0}/crates/vsh/src/lib.rs +0 -0
  60. {vsh_python-0.3.1 → vsh_python-0.5.0}/crates/vsh-commit/src/committer.rs +0 -0
  61. {vsh_python-0.3.1 → vsh_python-0.5.0}/crates/vsh-commit/src/host.rs +0 -0
  62. {vsh_python-0.3.1 → vsh_python-0.5.0}/crates/vsh-commit/src/journal.rs +0 -0
  63. {vsh_python-0.3.1 → vsh_python-0.5.0}/crates/vsh-commit/src/lib.rs +0 -0
  64. {vsh_python-0.3.1 → vsh_python-0.5.0}/crates/vsh-commit/src/plan.rs +0 -0
  65. {vsh_python-0.3.1 → vsh_python-0.5.0}/crates/vsh-store/src/directory.rs +0 -0
  66. {vsh_python-0.3.1 → vsh_python-0.5.0}/crates/vsh-worker/src/lib.rs +0 -0
  67. {vsh_python-0.3.1 → vsh_python-0.5.0}/rust-toolchain.toml +0 -0
  68. {vsh_python-0.3.1 → vsh_python-0.5.0}/src/vsh/__main__.py +0 -0
  69. {vsh_python-0.3.1 → vsh_python-0.5.0}/src/vsh/_version.py +0 -0
  70. {vsh_python-0.3.1 → vsh_python-0.5.0}/src/vsh/cli.py +0 -0
  71. {vsh_python-0.3.1 → vsh_python-0.5.0}/src/vsh/mcp/__init__.py +0 -0
  72. {vsh_python-0.3.1 → vsh_python-0.5.0}/src/vsh/mcp/native_tools.py +0 -0
  73. {vsh_python-0.3.1 → vsh_python-0.5.0}/src/vsh/mcp/server.py +0 -0
  74. {vsh_python-0.3.1 → vsh_python-0.5.0}/src/vsh/py.typed +0 -0
@@ -245,6 +245,18 @@ version = "1.0.4"
245
245
  source = "registry+https://github.com/rust-lang/crates.io-index"
246
246
  checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801"
247
247
 
248
+ [[package]]
249
+ name = "char_str"
250
+ version = "0.0.2"
251
+ source = "registry+https://github.com/rust-lang/crates.io-index"
252
+ checksum = "576ba56f6ca18ebb069d0d07260407171712aff4dfe15ee3f8982dc16a455bcf"
253
+ dependencies = [
254
+ "castaway",
255
+ "get-size2",
256
+ "itoa",
257
+ "ryu",
258
+ ]
259
+
248
260
  [[package]]
249
261
  name = "chrono"
250
262
  version = "0.4.45"
@@ -276,16 +288,15 @@ checksum = "2550f75b8cfac212855f6b1885455df8eaee8fe8e246b647d69146142e016084"
276
288
 
277
289
  [[package]]
278
290
  name = "compact_str"
279
- version = "0.9.1"
291
+ version = "0.10.0"
280
292
  source = "registry+https://github.com/rust-lang/crates.io-index"
281
- checksum = "9dfdd1c2274d9aa354115b09dc9a901d6c5576818cdf70d14cae2bdb47df00ab"
293
+ checksum = "79fcda08c33bb58b97008b2cdada6622500e949e060f5913361763121abd2416"
282
294
  dependencies = [
283
295
  "castaway",
284
296
  "cfg-if",
285
297
  "itoa",
286
- "rustversion",
287
- "ryu",
288
298
  "static_assertions",
299
+ "zmij",
289
300
  ]
290
301
 
291
302
  [[package]]
@@ -337,6 +348,12 @@ dependencies = [
337
348
  "syn 3.0.4",
338
349
  ]
339
350
 
351
+ [[package]]
352
+ name = "drop_bomb"
353
+ version = "0.1.5"
354
+ source = "registry+https://github.com/rust-lang/crates.io-index"
355
+ checksum = "9bda8e21c04aca2ae33ffc2fd8c23134f3cac46db123ba97bd9d3f3b8a4a85e1"
356
+
340
357
  [[package]]
341
358
  name = "either"
342
359
  version = "1.18.0"
@@ -448,9 +465,9 @@ dependencies = [
448
465
 
449
466
  [[package]]
450
467
  name = "get-size2"
451
- version = "0.10.1"
468
+ version = "0.10.3"
452
469
  source = "registry+https://github.com/rust-lang/crates.io-index"
453
- checksum = "823645bc6404ae2915707777061a47d3a031a9ee0bff51b34ec973df3d8d2990"
470
+ checksum = "b411f34418305908ab15a82ff78958c2a9aee9a272b2a2e663836b20a4e4b9d3"
454
471
  dependencies = [
455
472
  "compact_str",
456
473
  "get-size-derive2",
@@ -832,13 +849,14 @@ checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98"
832
849
 
833
850
  [[package]]
834
851
  name = "monty"
835
- version = "0.0.21"
852
+ version = "0.0.22"
836
853
  source = "registry+https://github.com/rust-lang/crates.io-index"
837
- checksum = "db44565f603ada5dd98bd580623cd9ce299c8b823bd7195c654826fa536b4d48"
854
+ checksum = "a7d13cc6e5bbcadffceadecd5cbe51a765a29451381d6ed760b23933fb714f37"
838
855
  dependencies = [
839
856
  "ahash",
840
857
  "chrono",
841
858
  "fancy-regex",
859
+ "getrandom 0.3.4",
842
860
  "hashbrown 0.16.1",
843
861
  "indexmap",
844
862
  "itertools 0.14.0",
@@ -869,18 +887,18 @@ dependencies = [
869
887
 
870
888
  [[package]]
871
889
  name = "monty-alloc"
872
- version = "0.0.21"
890
+ version = "0.0.22"
873
891
  source = "registry+https://github.com/rust-lang/crates.io-index"
874
- checksum = "c0116e09c9b26d3ff56bdc9678a2a8704a8e868a58b743d1df947f85109258d2"
892
+ checksum = "a0caad99e04b35d032ebd8c51a2c157255035d0a6c106960420c35adb80a9827"
875
893
  dependencies = [
876
894
  "monty-types",
877
895
  ]
878
896
 
879
897
  [[package]]
880
898
  name = "monty-macros"
881
- version = "0.0.21"
899
+ version = "0.0.22"
882
900
  source = "registry+https://github.com/rust-lang/crates.io-index"
883
- checksum = "40ed428288161f63d2bec7929438563fe31390f08e014e58ce20be96d7ef82ee"
901
+ checksum = "017842a9c6539f60ced38edab5b75a3c35223e908e9221c3b5c1a08537e21d2b"
884
902
  dependencies = [
885
903
  "proc-macro2",
886
904
  "quote",
@@ -889,9 +907,9 @@ dependencies = [
889
907
 
890
908
  [[package]]
891
909
  name = "monty-proto"
892
- version = "0.0.21"
910
+ version = "0.0.22"
893
911
  source = "registry+https://github.com/rust-lang/crates.io-index"
894
- checksum = "b8741cb0a667eebd8bf090affd2f5f92bcf1597b9216f7714e9ea6b2ef6ac556"
912
+ checksum = "f08c2cfd327e6fcb45f7e2c4dae9bbe9aa8a2cc99c292798a8a11531b30ebd90"
895
913
  dependencies = [
896
914
  "monty-types",
897
915
  "num-bigint",
@@ -901,9 +919,9 @@ dependencies = [
901
919
 
902
920
  [[package]]
903
921
  name = "monty-types"
904
- version = "0.0.21"
922
+ version = "0.0.22"
905
923
  source = "registry+https://github.com/rust-lang/crates.io-index"
906
- checksum = "00b4b3318107fee36c5eee05c52f16f6565a63aa29d04f8608ebc221e3fe5dd8"
924
+ checksum = "7cde2e299aa36171838b74a67ef7d3fbd116174ccaf2cbdd537a42a9658c024d"
907
925
  dependencies = [
908
926
  "chrono",
909
927
  "monty-macros",
@@ -1234,13 +1252,14 @@ checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4"
1234
1252
 
1235
1253
  [[package]]
1236
1254
  name = "ruff_python_ast"
1237
- version = "0.0.3"
1255
+ version = "0.0.9"
1238
1256
  source = "registry+https://github.com/rust-lang/crates.io-index"
1239
- checksum = "a10ab966362319801f5e85ce5c6aeac69f0cf50936a31e888f5d004e9279f337"
1257
+ checksum = "2ca96e1ff7a76b0235df556968ae10e5f8a00a0efa3061f247ad18365f769c2d"
1240
1258
  dependencies = [
1241
1259
  "aho-corasick",
1242
1260
  "arrayvec",
1243
1261
  "bitflags",
1262
+ "char_str",
1244
1263
  "compact_str",
1245
1264
  "get-size2",
1246
1265
  "is-macro",
@@ -1255,9 +1274,9 @@ dependencies = [
1255
1274
 
1256
1275
  [[package]]
1257
1276
  name = "ruff_python_codegen"
1258
- version = "0.0.3"
1277
+ version = "0.0.9"
1259
1278
  source = "registry+https://github.com/rust-lang/crates.io-index"
1260
- checksum = "1902d82ae0745be9d3d12a1aee4429acff987c768710dc38a6521eab05990ca0"
1279
+ checksum = "d160278f35f69e31610f068ecac420baaee14be8b1defadc4ea464b5c5523b78"
1261
1280
  dependencies = [
1262
1281
  "ruff_python_ast",
1263
1282
  "ruff_python_literal",
@@ -1268,9 +1287,9 @@ dependencies = [
1268
1287
 
1269
1288
  [[package]]
1270
1289
  name = "ruff_python_literal"
1271
- version = "0.0.3"
1290
+ version = "0.0.9"
1272
1291
  source = "registry+https://github.com/rust-lang/crates.io-index"
1273
- checksum = "af3e1f868fa58adc12d1fa3ce1b29c6098aa4b101739d9589cbde9fec239af59"
1292
+ checksum = "66ef25a922a0345c97a9eda5896a8bc9313b937b828596c4c65016e206285663"
1274
1293
  dependencies = [
1275
1294
  "bitflags",
1276
1295
  "icu_properties",
@@ -1280,13 +1299,13 @@ dependencies = [
1280
1299
 
1281
1300
  [[package]]
1282
1301
  name = "ruff_python_parser"
1283
- version = "0.0.3"
1302
+ version = "0.0.9"
1284
1303
  source = "registry+https://github.com/rust-lang/crates.io-index"
1285
- checksum = "4e3b8436fb010636ea79ce545acc3e391296ef4e804f7cef336dd5f9c8a4aa3a"
1304
+ checksum = "1cf63608d433331007574be9d7fa17f3d99fc4b9305abcd9cf47a8033690628d"
1286
1305
  dependencies = [
1287
1306
  "bitflags",
1288
1307
  "bstr",
1289
- "compact_str",
1308
+ "drop_bomb",
1290
1309
  "get-size2",
1291
1310
  "memchr",
1292
1311
  "ruff_python_ast",
@@ -1302,9 +1321,9 @@ dependencies = [
1302
1321
 
1303
1322
  [[package]]
1304
1323
  name = "ruff_python_stdlib"
1305
- version = "0.0.3"
1324
+ version = "0.0.9"
1306
1325
  source = "registry+https://github.com/rust-lang/crates.io-index"
1307
- checksum = "8c8860927bf42efdabb31ccb2ac9b8f98ee43897b45536f8023e217b158e49a4"
1326
+ checksum = "cbd1e8d8e6d805f5a39a38ae2c7db3e885ef598fabeea36443f2a35c07f555bc"
1308
1327
  dependencies = [
1309
1328
  "bitflags",
1310
1329
  "unicode-ident",
@@ -1312,21 +1331,22 @@ dependencies = [
1312
1331
 
1313
1332
  [[package]]
1314
1333
  name = "ruff_python_trivia"
1315
- version = "0.0.3"
1334
+ version = "0.0.9"
1316
1335
  source = "registry+https://github.com/rust-lang/crates.io-index"
1317
- checksum = "969e4a14b2550818efea99b9e2361c714c72e4f1fb94799251d55aed20345189"
1336
+ checksum = "cb21454ef368d9f4f55cc3d42cf262fa61cd4109e3f1c8aeb138d696b74d563d"
1318
1337
  dependencies = [
1319
1338
  "itertools 0.15.0",
1320
1339
  "ruff_source_file",
1321
1340
  "ruff_text_size",
1341
+ "rustc-hash",
1322
1342
  "unicode-ident",
1323
1343
  ]
1324
1344
 
1325
1345
  [[package]]
1326
1346
  name = "ruff_source_file"
1327
- version = "0.0.3"
1347
+ version = "0.0.9"
1328
1348
  source = "registry+https://github.com/rust-lang/crates.io-index"
1329
- checksum = "c194e02d121e4a1744464ce3a982c4c196eb039bbf67532d18c8ce09f8da6381"
1349
+ checksum = "9d7b074f9b29744b641588c521c6943534ca6e7c161b2b1299c01d1cc1b860f3"
1330
1350
  dependencies = [
1331
1351
  "memchr",
1332
1352
  "ruff_text_size",
@@ -1334,9 +1354,9 @@ dependencies = [
1334
1354
 
1335
1355
  [[package]]
1336
1356
  name = "ruff_text_size"
1337
- version = "0.0.3"
1357
+ version = "0.0.9"
1338
1358
  source = "registry+https://github.com/rust-lang/crates.io-index"
1339
- checksum = "c91652ad39be604bc4d5299a5d19feccdd89e255609d89a031e7bb8e0d0aef9f"
1359
+ checksum = "0944e5527042c3e1ef3e79bfed2655fe3ae66433f0112fa38d702e078f549d49"
1340
1360
  dependencies = [
1341
1361
  "get-size2",
1342
1362
  ]
@@ -1666,7 +1686,7 @@ checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be"
1666
1686
 
1667
1687
  [[package]]
1668
1688
  name = "vbash"
1669
- version = "0.3.1"
1689
+ version = "0.5.0"
1670
1690
  dependencies = [
1671
1691
  "vsh",
1672
1692
  ]
@@ -1679,14 +1699,14 @@ checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a"
1679
1699
 
1680
1700
  [[package]]
1681
1701
  name = "vsh"
1682
- version = "0.3.1"
1702
+ version = "0.5.0"
1683
1703
  dependencies = [
1684
1704
  "vsh-runtime",
1685
1705
  ]
1686
1706
 
1687
1707
  [[package]]
1688
1708
  name = "vsh-commit"
1689
- version = "0.3.1"
1709
+ version = "0.5.0"
1690
1710
  dependencies = [
1691
1711
  "blake3",
1692
1712
  "cap-fs-ext",
@@ -1699,7 +1719,7 @@ dependencies = [
1699
1719
 
1700
1720
  [[package]]
1701
1721
  name = "vsh-monty"
1702
- version = "0.3.1"
1722
+ version = "0.5.0"
1703
1723
  dependencies = [
1704
1724
  "get-size2",
1705
1725
  "monty",
@@ -1713,7 +1733,7 @@ dependencies = [
1713
1733
 
1714
1734
  [[package]]
1715
1735
  name = "vsh-monty-worker"
1716
- version = "0.3.1"
1736
+ version = "0.5.0"
1717
1737
  dependencies = [
1718
1738
  "monty",
1719
1739
  "monty-alloc",
@@ -1728,7 +1748,7 @@ dependencies = [
1728
1748
 
1729
1749
  [[package]]
1730
1750
  name = "vsh-policy"
1731
- version = "0.3.1"
1751
+ version = "0.5.0"
1732
1752
  dependencies = [
1733
1753
  "vsh-store",
1734
1754
  "vsh-types",
@@ -1737,7 +1757,7 @@ dependencies = [
1737
1757
 
1738
1758
  [[package]]
1739
1759
  name = "vsh-python"
1740
- version = "0.3.1"
1760
+ version = "0.5.0"
1741
1761
  dependencies = [
1742
1762
  "monty-proto",
1743
1763
  "pyo3",
@@ -1747,7 +1767,7 @@ dependencies = [
1747
1767
 
1748
1768
  [[package]]
1749
1769
  name = "vsh-runtime"
1750
- version = "0.3.1"
1770
+ version = "0.5.0"
1751
1771
  dependencies = [
1752
1772
  "postcard",
1753
1773
  "vsh-commit",
@@ -1760,7 +1780,7 @@ dependencies = [
1760
1780
 
1761
1781
  [[package]]
1762
1782
  name = "vsh-store"
1763
- version = "0.3.1"
1783
+ version = "0.5.0"
1764
1784
  dependencies = [
1765
1785
  "blake3",
1766
1786
  "cap-fs-ext",
@@ -1770,14 +1790,14 @@ dependencies = [
1770
1790
 
1771
1791
  [[package]]
1772
1792
  name = "vsh-types"
1773
- version = "0.3.1"
1793
+ version = "0.5.0"
1774
1794
  dependencies = [
1775
1795
  "blake3",
1776
1796
  ]
1777
1797
 
1778
1798
  [[package]]
1779
1799
  name = "vsh-vfs"
1780
- version = "0.3.1"
1800
+ version = "0.5.0"
1781
1801
  dependencies = [
1782
1802
  "vsh-store",
1783
1803
  "vsh-types",
@@ -2195,3 +2215,9 @@ dependencies = [
2195
2215
  "quote",
2196
2216
  "syn 3.0.4",
2197
2217
  ]
2218
+
2219
+ [[package]]
2220
+ name = "zmij"
2221
+ version = "1.0.23"
2222
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2223
+ checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b"
@@ -3,11 +3,12 @@ resolver = "3"
3
3
  members = ["crates/vsh-types", "crates/vsh-store", "crates/vsh-vfs", "crates/vsh-policy", "crates/vsh-monty", "crates/vsh-commit", "crates/vbash", "crates/vsh", "crates/vsh-python", "crates/vsh-worker"]
4
4
 
5
5
  [workspace.package]
6
- version = "0.3.1"
6
+ version = "0.5.0"
7
7
  edition = "2024"
8
8
  rust-version = "1.95"
9
9
  license = "Apache-2.0"
10
10
  authors = ["Mert <62549656+fswair@users.noreply.github.com>"]
11
+ readme = "README.md"
11
12
  repository = "https://github.com/fswair/vsh"
12
13
  homepage = "https://github.com/fswair/vsh"
13
14
 
@@ -15,21 +16,21 @@ homepage = "https://github.com/fswair/vsh"
15
16
  blake3 = { version = "=1.8.7", default-features = false, features = ["std"] }
16
17
  cap-fs-ext = { version = "=4.0.3", default-features = false, features = ["std"] }
17
18
  cap-std = { version = "=4.0.3", default-features = false }
18
- get-size2 = { version = "=0.10.1", default-features = false }
19
- monty = { version = "=0.0.21", default-features = false }
20
- monty-alloc = { version = "=0.0.21", default-features = false, features = ["exit-code"] }
21
- monty-proto = { version = "=0.0.21", default-features = false }
22
- monty-types = { version = "=0.0.21", default-features = false }
19
+ get-size2 = { version = "=0.10.3", default-features = false }
20
+ monty = { version = "=0.0.22", default-features = false }
21
+ monty-alloc = { version = "=0.0.22", default-features = false, features = ["exit-code"] }
22
+ monty-proto = { version = "=0.0.22", default-features = false }
23
+ monty-types = { version = "=0.0.22", default-features = false }
23
24
  postcard = { version = "=1.1.3", default-features = false, features = ["alloc"] }
24
25
  pyo3 = { version = "=0.29.2", default-features = false }
25
- vsh-monty = { path = "crates/vsh-monty", version = "=0.3.1" }
26
- vsh-commit = { path = "crates/vsh-commit", version = "=0.3.1" }
27
- vsh-policy = { path = "crates/vsh-policy", version = "=0.3.1" }
28
- vsh-types = { path = "crates/vsh-types", version = "=0.3.1" }
29
- vsh-store = { path = "crates/vsh-store", version = "=0.3.1" }
30
- vsh-vfs = { path = "crates/vsh-vfs", version = "=0.3.1" }
31
- vsh-runtime = { path = "crates/vbash", version = "=0.3.1" }
32
- vsh = { path = "crates/vsh", version = "=0.3.1" }
26
+ vsh-monty = { path = "crates/vsh-monty", version = "=0.5.0" }
27
+ vsh-commit = { path = "crates/vsh-commit", version = "=0.5.0" }
28
+ vsh-policy = { path = "crates/vsh-policy", version = "=0.5.0" }
29
+ vsh-types = { path = "crates/vsh-types", version = "=0.5.0" }
30
+ vsh-store = { path = "crates/vsh-store", version = "=0.5.0" }
31
+ vsh-vfs = { path = "crates/vsh-vfs", version = "=0.5.0" }
32
+ vsh-runtime = { path = "crates/vbash", version = "=0.5.0" }
33
+ vsh = { path = "crates/vsh", version = "=0.5.0" }
33
34
 
34
35
  [workspace.lints.rust]
35
36
  elided_lifetimes_in_paths = "deny"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: vsh-python
3
- Version: 0.3.1
3
+ Version: 0.5.0
4
4
  Classifier: Development Status :: 4 - Beta
5
5
  Classifier: Intended Audience :: Developers
6
6
  Classifier: Programming Language :: Python :: 3
@@ -11,6 +11,7 @@ Classifier: Programming Language :: Python :: 3.14
11
11
  Classifier: Programming Language :: Rust
12
12
  Requires-Dist: basedpyright ; extra == 'dev'
13
13
  Requires-Dist: maturin==1.15.0 ; extra == 'dev'
14
+ Requires-Dist: pydantic-ai-slim==2.40.0 ; extra == 'dev'
14
15
  Requires-Dist: pytest ; extra == 'dev'
15
16
  Requires-Dist: pytest-cov ; extra == 'dev'
16
17
  Requires-Dist: ruff ; extra == 'dev'
@@ -18,8 +19,10 @@ Requires-Dist: setuptools==84.0.0 ; extra == 'dev'
18
19
  Requires-Dist: ty ; extra == 'dev'
19
20
  Requires-Dist: zensical==0.0.57 ; extra == 'dev'
20
21
  Requires-Dist: fastmcp==3.4.7 ; extra == 'mcp'
22
+ Requires-Dist: pydantic-ai-slim==2.40.0 ; extra == 'pydantic-ai'
21
23
  Provides-Extra: dev
22
24
  Provides-Extra: mcp
25
+ Provides-Extra: pydantic-ai
23
26
  License-File: LICENSE
24
27
  Summary: VSH is a low-latency transactional filesystem simulator backed by Rust.
25
28
  Keywords: agents,commands,mcp,simulation,workspaces
@@ -38,6 +41,9 @@ VSH is one low-latency transactional filesystem simulator with two SDK surfaces:
38
41
  Both surfaces execute the same Rust pipeline. Python is a thin PyO3 binding; it does
39
42
  not contain a fallback simulator or committer.
40
43
 
44
+ Special thanks to [Artyom Pavlov](https://github.com/newpavlov) for generously
45
+ donating the `vsh` crate name to this project.
46
+
41
47
  ```text
42
48
  Monty program → immutable snapshot → Rust VirtualFs → canonical diff → policy
43
49
  → dependency revalidation → recoverable commit → verified receipt
@@ -54,8 +60,9 @@ Install the wheel:
54
60
  uv add vsh-python
55
61
  ```
56
62
 
57
- Run one complete transaction. `PREVIEW` guarantees that host files are unchanged;
58
- `AUTO` commits only a deterministic native auto-approval.
63
+ Run one complete transaction. `PREVIEW` does not apply changes to user workspace files;
64
+ the host runtime may still persist bounded transaction/storage artifacts. `AUTO`
65
+ commits only a deterministic native auto-approval.
59
66
 
60
67
  ```python
61
68
  from vsh import ReceiptDetail, RunMode, RunRequest, Runtime
@@ -80,11 +87,39 @@ print(receipt.state, receipt.result, receipt.changes)
80
87
  The GIL is released while snapshotting, executing Monty, generating the diff,
81
88
  evaluating policy, revalidating dependencies, and committing.
82
89
 
90
+ ### Pydantic AI
91
+
92
+ Install the exact-pinned optional integration:
93
+
94
+ ```bash
95
+ uv add "vsh-python[pydantic-ai]"
96
+ ```
97
+
98
+ ```python
99
+ from pydantic_ai import Agent
100
+ from vsh.pydantic_ai import VshCapability
101
+
102
+ capability = VshCapability("/path/to/workspace")
103
+ agent = Agent("openai:gpt-5", capabilities=[capability])
104
+ ```
105
+
106
+ The capability contributes the ten native `vsh_*` filesystem operations plus
107
+ `vsh_run` for atomic multi-step work. Every call executes in a virtual snapshot first.
108
+ Policy-controlled changes commit exactly once or return `pending_approval`; no internal
109
+ LLM judge is created implicitly.
110
+
111
+ For explicitly configured model review, attach a
112
+ [`CommitJudge`](https://fswair.github.io/vsh/python/commit-judge/) through
113
+ `hook_handler=judge.hook_handler`. It evaluates canonical changes, before/after
114
+ content, effects and intent together. A valid approval can directly commit pending
115
+ work; native hard-deny and stale checks remain enforced. Review returns actionable
116
+ feedback to the main agent.
117
+
83
118
  ## Rust
84
119
 
85
120
  ```toml
86
121
  [dependencies]
87
- vsh = "=0.3.1"
122
+ vsh = "=0.5.0"
88
123
  ```
89
124
 
90
125
  ```rust,no_run
@@ -108,6 +143,21 @@ Production execution expects the matching `vsh-monty-worker` executable. Python
108
143
  wheels bundle it; native embedders configure its trusted path through
109
144
  `RuntimeConfig::with_worker_path`.
110
145
 
146
+ ## Active-snapshot filesystem functions
147
+
148
+ VSH injects ten bounded `vsh_*` functions into each Monty program: read, write,
149
+ list, make directory, remove, move, copy, glob, literal search and exact text patch.
150
+ They share the same copy-on-write snapshot as `pathlib`, so earlier virtual writes are
151
+ visible to later calls without creating a nested runtime or crossing MCP.
152
+
153
+ ```python
154
+ files = vsh_glob('**/*.toml', path='/workspace/services', max_results=101)
155
+ assert len(files) <= 100, 'split this migration into reviewed batches'
156
+ for path in files:
157
+ assert vsh_patch(path, 'timeout = 5', 'timeout = 15', count=1) == 1
158
+ {'updated': len(files)}
159
+ ```
160
+
111
161
  ## MCP
112
162
 
113
163
  Install the optional adapter and start the stdio server:
@@ -127,6 +177,14 @@ the same live `Runtime` (or MCP server process). The exact artifact is made dura
127
177
  before reservation and commit. Transactions that require independent approval are
128
178
  durable immediately and survive a runtime restart.
129
179
 
180
+ ## Performance
181
+
182
+ On the dated macOS arm64 release-profile matrix, VSH 0.4.0 lowers median latency by
183
+ roughly 25–30% for 10,000-file discovery/glob and 5,050-entry removal workloads. The
184
+ whole benchmark harness reports about 19% less CPU time. Small-call variance remains,
185
+ and sampled process-tree RSS does not establish a repeatable memory reduction. See the
186
+ [protocol, complete results and caveats](https://fswair.github.io/vsh/performance/).
187
+
130
188
  ## Security and dependency policy
131
189
 
132
190
  - External Rust crates are exact-pinned in the workspace manifest and lockfile.
@@ -141,19 +199,16 @@ durable immediately and survive a runtime restart.
141
199
  - Process-local preview retention is fail-closed and bounded by both artifact count and
142
200
  encoded bytes; it cannot become an unbounded parent-process cache.
143
201
 
144
- See [the threat model](docs/rust-rewrite/THREAT_MODEL.md),
145
- [guarantees](docs/rust-rewrite/GUARANTEES.md), and
146
- [dependency record](docs/rust-rewrite/DEPENDENCY_POLICY.md). Upgrade and benchmark
147
- details are in the [migration guide](docs/rust-rewrite/MIGRATION.md) and
148
- [performance record](docs/rust-rewrite/PERFORMANCE.md). Merge coverage scope and floors
149
- are recorded in the [coverage contract](docs/rust-rewrite/COVERAGE.md). The cross-platform build,
150
- validation, provenance, and dual-registry order are in the
151
- [release guide](docs/rust-rewrite/RELEASE.md).
202
+ See the [threat model](https://fswair.github.io/vsh/threat-model/),
203
+ [guarantees](https://fswair.github.io/vsh/guarantees/),
204
+ [dependency policy](https://fswair.github.io/vsh/dependency-policy/), current
205
+ [performance report](https://fswair.github.io/vsh/performance/), and
206
+ [coverage contract](https://fswair.github.io/vsh/coverage/).
152
207
 
153
- ## Compatibility handles
208
+ ## Package names
154
209
 
155
- Existing declarations may continue to install `vbash==0.3.1` from PyPI or depend on
156
- `vbash = "=0.3.1"` from crates.io. Both packages are implementation-free mirrors of
210
+ Existing declarations may install `vbash==0.5.0` from PyPI or depend on
211
+ `vbash = "=0.5.0"` from crates.io. Both names are implementation-free mirrors of
157
212
  the exact matching VSH release. New projects should use `vsh-python` and `vsh`
158
213
  directly; Python code continues to write `import vsh` either way.
159
214
 
@@ -168,8 +223,8 @@ uv run zensical serve
168
223
  uv run zensical build --clean --strict
169
224
  ```
170
225
 
171
- Start at [`docs/index.md`](docs/index.md). The site includes a VSH-specific dark-red
172
- design, automatic light/dark palette selection, and a **Copy as Markdown** action on
226
+ Start at the [VSH documentation](https://fswair.github.io/vsh/). The site includes a
227
+ Venus-inspired palette, automatic light/dark selection, and a **Copy as Markdown** action on
173
228
  every page. It also publishes a compact LLM index at `/llms.txt` and the complete
174
229
  Markdown source corpus at `/llms-full.txt`, with navigation pages first; CI verifies
175
230
  both generated files are current.