flowproof 0.3.0__tar.gz → 0.4.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 (89) hide show
  1. {flowproof-0.3.0 → flowproof-0.4.0}/Cargo.lock +79 -7
  2. {flowproof-0.3.0 → flowproof-0.4.0}/Cargo.toml +2 -1
  3. {flowproof-0.3.0 → flowproof-0.4.0}/PKG-INFO +1 -1
  4. {flowproof-0.3.0 → flowproof-0.4.0}/crates/flowproof-adapters/Cargo.toml +13 -2
  5. flowproof-0.4.0/crates/flowproof-adapters/src/agent_proxy.rs +2093 -0
  6. flowproof-0.4.0/crates/flowproof-adapters/src/agent_runner.rs +893 -0
  7. flowproof-0.4.0/crates/flowproof-adapters/src/egress.rs +260 -0
  8. flowproof-0.4.0/crates/flowproof-adapters/src/egress_linux.rs +1042 -0
  9. {flowproof-0.3.0 → flowproof-0.4.0}/crates/flowproof-adapters/src/lib.rs +35 -0
  10. flowproof-0.4.0/crates/flowproof-adapters/src/mcp_core.rs +374 -0
  11. flowproof-0.4.0/crates/flowproof-adapters/src/mcp_http.rs +1592 -0
  12. flowproof-0.4.0/crates/flowproof-adapters/src/mcp_stdio.rs +641 -0
  13. {flowproof-0.3.0 → flowproof-0.4.0}/crates/flowproof-adapters/src/sap_com.rs +15 -3
  14. {flowproof-0.3.0 → flowproof-0.4.0}/crates/flowproof-adapters/src/web.rs +662 -1
  15. {flowproof-0.3.0 → flowproof-0.4.0}/crates/flowproof-agent/Cargo.toml +1 -0
  16. {flowproof-0.3.0 → flowproof-0.4.0}/crates/flowproof-agent/src/agent_steps.rs +18 -0
  17. {flowproof-0.3.0 → flowproof-0.4.0}/crates/flowproof-agent/src/lib.rs +1 -1
  18. {flowproof-0.3.0 → flowproof-0.4.0}/crates/flowproof-agent/src/recorder.rs +656 -1
  19. {flowproof-0.3.0 → flowproof-0.4.0}/crates/flowproof-agent/src/rules.rs +1305 -17
  20. {flowproof-0.3.0 → flowproof-0.4.0}/crates/flowproof-agent/src/spec.rs +986 -9
  21. {flowproof-0.3.0 → flowproof-0.4.0}/crates/flowproof-cli/Cargo.toml +7 -1
  22. flowproof-0.4.0/crates/flowproof-cli/src/agent_flow.rs +2032 -0
  23. flowproof-0.4.0/crates/flowproof-cli/src/capture.rs +542 -0
  24. {flowproof-0.3.0 → flowproof-0.4.0}/crates/flowproof-cli/src/lib.rs +152 -3
  25. flowproof-0.4.0/crates/flowproof-cli/tests/agent_flow_e2e.rs +228 -0
  26. flowproof-0.4.0/crates/flowproof-cli/tests/clock_e2e.rs +52 -0
  27. flowproof-0.4.0/crates/flowproof-cli/tests/egress_e2e.rs +339 -0
  28. flowproof-0.4.0/crates/flowproof-cli/tests/grid_cell_e2e.rs +96 -0
  29. {flowproof-0.3.0 → flowproof-0.4.0}/crates/flowproof-cli/tests/llm_author_e2e.rs +4 -0
  30. flowproof-0.4.0/crates/flowproof-cli/tests/mcp_stdio_e2e.rs +637 -0
  31. {flowproof-0.3.0 → flowproof-0.4.0}/crates/flowproof-cli/tests/notepad_author_e2e.rs +4 -0
  32. flowproof-0.4.0/crates/flowproof-cli/tests/scoped_container_e2e.rs +249 -0
  33. {flowproof-0.3.0 → flowproof-0.4.0}/crates/flowproof-cli/tests/suite_flow_isolation.rs +87 -0
  34. {flowproof-0.3.0 → flowproof-0.4.0}/crates/flowproof-cli/tests/web_e2e.rs +139 -0
  35. {flowproof-0.3.0 → flowproof-0.4.0}/crates/flowproof-driver/src/app.rs +553 -4
  36. {flowproof-0.3.0 → flowproof-0.4.0}/crates/flowproof-driver/src/lib.rs +6 -4
  37. {flowproof-0.3.0 → flowproof-0.4.0}/crates/flowproof-driver/src/mock.rs +102 -0
  38. {flowproof-0.3.0 → flowproof-0.4.0}/crates/flowproof-replay/src/lib.rs +297 -0
  39. {flowproof-0.3.0 → flowproof-0.4.0}/crates/flowproof-replay/tests/replay_calc.rs +1 -0
  40. {flowproof-0.3.0 → flowproof-0.4.0}/crates/flowproof-trace/Cargo.toml +1 -0
  41. {flowproof-0.3.0 → flowproof-0.4.0}/crates/flowproof-trace/schema/trace-v1.schema.json +11 -1
  42. {flowproof-0.3.0 → flowproof-0.4.0}/crates/flowproof-trace/src/cassette.rs +121 -23
  43. {flowproof-0.3.0 → flowproof-0.4.0}/crates/flowproof-trace/src/cassette_diff.rs +2 -0
  44. flowproof-0.4.0/crates/flowproof-trace/src/egress.rs +379 -0
  45. {flowproof-0.3.0 → flowproof-0.4.0}/crates/flowproof-trace/src/format.rs +28 -1
  46. {flowproof-0.3.0 → flowproof-0.4.0}/crates/flowproof-trace/src/lib.rs +2 -0
  47. flowproof-0.4.0/crates/flowproof-trace/src/substitution.rs +435 -0
  48. {flowproof-0.3.0 → flowproof-0.4.0}/crates/flowproof-trace/src/toolcalls.rs +53 -0
  49. {flowproof-0.3.0 → flowproof-0.4.0}/flowproof/__init__.py +1 -1
  50. {flowproof-0.3.0 → flowproof-0.4.0}/pyproject.toml +1 -1
  51. flowproof-0.3.0/crates/flowproof-adapters/src/agent_proxy.rs +0 -550
  52. {flowproof-0.3.0 → flowproof-0.4.0}/README.md +0 -0
  53. {flowproof-0.3.0 → flowproof-0.4.0}/crates/flowproof-adapters/src/vision.rs +0 -0
  54. {flowproof-0.3.0 → flowproof-0.4.0}/crates/flowproof-agent/src/author.rs +0 -0
  55. {flowproof-0.3.0 → flowproof-0.4.0}/crates/flowproof-agent/src/clarify.rs +0 -0
  56. {flowproof-0.3.0 → flowproof-0.4.0}/crates/flowproof-agent/src/heal.rs +0 -0
  57. {flowproof-0.3.0 → flowproof-0.4.0}/crates/flowproof-agent/src/llm.rs +0 -0
  58. {flowproof-0.3.0 → flowproof-0.4.0}/crates/flowproof-cli/src/main.rs +0 -0
  59. {flowproof-0.3.0 → flowproof-0.4.0}/crates/flowproof-cli/tests/api_pipeline.rs +0 -0
  60. {flowproof-0.3.0 → flowproof-0.4.0}/crates/flowproof-cli/tests/calc_e2e.rs +0 -0
  61. {flowproof-0.3.0 → flowproof-0.4.0}/crates/flowproof-cli/tests/examples_resolve.rs +0 -0
  62. {flowproof-0.3.0 → flowproof-0.4.0}/crates/flowproof-cli/tests/notepad_e2e.rs +0 -0
  63. {flowproof-0.3.0 → flowproof-0.4.0}/crates/flowproof-cli/tests/sap_e2e.rs +0 -0
  64. {flowproof-0.3.0 → flowproof-0.4.0}/crates/flowproof-cli/tests/sap_pipeline.rs +0 -0
  65. {flowproof-0.3.0 → flowproof-0.4.0}/crates/flowproof-cli/tests/sap_sim_e2e.rs +0 -0
  66. {flowproof-0.3.0 → flowproof-0.4.0}/crates/flowproof-cli/tests/skip_unless_env.rs +0 -0
  67. {flowproof-0.3.0 → flowproof-0.4.0}/crates/flowproof-cli/tests/suite_env_from.rs +0 -0
  68. {flowproof-0.3.0 → flowproof-0.4.0}/crates/flowproof-cli/tests/suite_missing_trace.rs +0 -0
  69. {flowproof-0.3.0 → flowproof-0.4.0}/crates/flowproof-cli/tests/support/sap_simulator.py +0 -0
  70. {flowproof-0.3.0 → flowproof-0.4.0}/crates/flowproof-cli/tests/vision_pipeline.rs +0 -0
  71. {flowproof-0.3.0 → flowproof-0.4.0}/crates/flowproof-driver/Cargo.toml +0 -0
  72. {flowproof-0.3.0 → flowproof-0.4.0}/crates/flowproof-driver/src/backend.rs +0 -0
  73. {flowproof-0.3.0 → flowproof-0.4.0}/crates/flowproof-driver/src/gdi.rs +0 -0
  74. {flowproof-0.3.0 → flowproof-0.4.0}/crates/flowproof-driver/src/oob.rs +0 -0
  75. {flowproof-0.3.0 → flowproof-0.4.0}/crates/flowproof-driver/src/recording.rs +0 -0
  76. {flowproof-0.3.0 → flowproof-0.4.0}/crates/flowproof-driver/src/redact.rs +0 -0
  77. {flowproof-0.3.0 → flowproof-0.4.0}/crates/flowproof-driver/src/visual.rs +0 -0
  78. {flowproof-0.3.0 → flowproof-0.4.0}/crates/flowproof-driver/src/window.rs +0 -0
  79. {flowproof-0.3.0 → flowproof-0.4.0}/crates/flowproof-python/Cargo.toml +0 -0
  80. {flowproof-0.3.0 → flowproof-0.4.0}/crates/flowproof-python/src/lib.rs +0 -0
  81. {flowproof-0.3.0 → flowproof-0.4.0}/crates/flowproof-replay/Cargo.toml +0 -0
  82. {flowproof-0.3.0 → flowproof-0.4.0}/crates/flowproof-replay/src/report.rs +0 -0
  83. {flowproof-0.3.0 → flowproof-0.4.0}/crates/flowproof-trace/src/secret.rs +0 -0
  84. {flowproof-0.3.0 → flowproof-0.4.0}/crates/flowproof-trace/tests/fixtures/sample.trace.jsonl +0 -0
  85. {flowproof-0.3.0 → flowproof-0.4.0}/crates/flowproof-trace/tests/schema_conformance.rs +0 -0
  86. {flowproof-0.3.0 → flowproof-0.4.0}/flowproof/cli.py +0 -0
  87. {flowproof-0.3.0 → flowproof-0.4.0}/flowproof/flow.py +0 -0
  88. {flowproof-0.3.0 → flowproof-0.4.0}/flowproof/mcp_server.py +0 -0
  89. {flowproof-0.3.0 → flowproof-0.4.0}/flowproof/py.typed +0 -0
@@ -209,6 +209,15 @@ dependencies = [
209
209
  "hybrid-array",
210
210
  ]
211
211
 
212
+ [[package]]
213
+ name = "block2"
214
+ version = "0.6.2"
215
+ source = "registry+https://github.com/rust-lang/crates.io-index"
216
+ checksum = "cdeb9d870516001442e364c5220d3574d2da8dc765554b4a617230d33fa58ef5"
217
+ dependencies = [
218
+ "objc2",
219
+ ]
220
+
212
221
  [[package]]
213
222
  name = "borrow-or-share"
214
223
  version = "0.2.4"
@@ -273,6 +282,12 @@ version = "1.0.4"
273
282
  source = "registry+https://github.com/rust-lang/crates.io-index"
274
283
  checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801"
275
284
 
285
+ [[package]]
286
+ name = "cfg_aliases"
287
+ version = "0.2.2"
288
+ source = "registry+https://github.com/rust-lang/crates.io-index"
289
+ checksum = "f079e83a288787bcd14a6aea84cee5c87a67c5a3e660c30f557a3d24761b3527"
290
+
276
291
  [[package]]
277
292
  name = "chacha20"
278
293
  version = "0.10.1"
@@ -502,6 +517,17 @@ dependencies = [
502
517
  "hybrid-array",
503
518
  ]
504
519
 
520
+ [[package]]
521
+ name = "ctrlc"
522
+ version = "3.5.2"
523
+ source = "registry+https://github.com/rust-lang/crates.io-index"
524
+ checksum = "e0b1fab2ae45819af2d0731d60f2afe17227ebb1a1538a236da84c93e9a60162"
525
+ dependencies = [
526
+ "dispatch2",
527
+ "nix",
528
+ "windows-sys 0.61.2",
529
+ ]
530
+
505
531
  [[package]]
506
532
  name = "ctutils"
507
533
  version = "0.4.2"
@@ -611,6 +637,18 @@ dependencies = [
611
637
  "ctutils",
612
638
  ]
613
639
 
640
+ [[package]]
641
+ name = "dispatch2"
642
+ version = "0.3.1"
643
+ source = "registry+https://github.com/rust-lang/crates.io-index"
644
+ checksum = "1e0e367e4e7da84520dedcac1901e4da967309406d1e51017ae1abfb97adbd38"
645
+ dependencies = [
646
+ "bitflags 2.13.1",
647
+ "block2",
648
+ "libc",
649
+ "objc2",
650
+ ]
651
+
614
652
  [[package]]
615
653
  name = "displaydoc"
616
654
  version = "0.2.6"
@@ -722,15 +760,17 @@ dependencies = [
722
760
 
723
761
  [[package]]
724
762
  name = "flowproof-adapters"
725
- version = "0.3.0"
763
+ version = "0.4.0"
726
764
  dependencies = [
727
765
  "anyhow",
728
766
  "flowproof-driver",
729
767
  "flowproof-trace",
730
768
  "headless_chrome",
731
769
  "image",
770
+ "libc",
732
771
  "ocrs",
733
772
  "rten",
773
+ "serde",
734
774
  "serde_json",
735
775
  "thiserror 2.0.18",
736
776
  "ureq",
@@ -739,11 +779,12 @@ dependencies = [
739
779
 
740
780
  [[package]]
741
781
  name = "flowproof-agent"
742
- version = "0.3.0"
782
+ version = "0.4.0"
743
783
  dependencies = [
744
784
  "chrono",
745
785
  "flowproof-driver",
746
786
  "flowproof-trace",
787
+ "regex",
747
788
  "serde",
748
789
  "serde_json",
749
790
  "serde_yaml",
@@ -754,10 +795,12 @@ dependencies = [
754
795
 
755
796
  [[package]]
756
797
  name = "flowproof-cli"
757
- version = "0.3.0"
798
+ version = "0.4.0"
758
799
  dependencies = [
759
800
  "ab_glyph",
801
+ "chrono",
760
802
  "clap",
803
+ "ctrlc",
761
804
  "flowproof-adapters",
762
805
  "flowproof-agent",
763
806
  "flowproof-driver",
@@ -765,6 +808,7 @@ dependencies = [
765
808
  "flowproof-trace",
766
809
  "image",
767
810
  "imageproc",
811
+ "serde",
768
812
  "serde_json",
769
813
  "serde_yaml",
770
814
  "tiny_http",
@@ -772,7 +816,7 @@ dependencies = [
772
816
 
773
817
  [[package]]
774
818
  name = "flowproof-driver"
775
- version = "0.3.0"
819
+ version = "0.4.0"
776
820
  dependencies = [
777
821
  "image",
778
822
  "postgres",
@@ -786,7 +830,7 @@ dependencies = [
786
830
 
787
831
  [[package]]
788
832
  name = "flowproof-python"
789
- version = "0.3.0"
833
+ version = "0.4.0"
790
834
  dependencies = [
791
835
  "flowproof-agent",
792
836
  "flowproof-cli",
@@ -798,7 +842,7 @@ dependencies = [
798
842
 
799
843
  [[package]]
800
844
  name = "flowproof-replay"
801
- version = "0.3.0"
845
+ version = "0.4.0"
802
846
  dependencies = [
803
847
  "chrono",
804
848
  "flowproof-agent",
@@ -812,9 +856,10 @@ dependencies = [
812
856
 
813
857
  [[package]]
814
858
  name = "flowproof-trace"
815
- version = "0.3.0"
859
+ version = "0.4.0"
816
860
  dependencies = [
817
861
  "jsonschema",
862
+ "regex",
818
863
  "serde",
819
864
  "serde_json",
820
865
  "thiserror 2.0.18",
@@ -1462,6 +1507,18 @@ dependencies = [
1462
1507
  "typenum",
1463
1508
  ]
1464
1509
 
1510
+ [[package]]
1511
+ name = "nix"
1512
+ version = "0.31.3"
1513
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1514
+ checksum = "cf20d2fde8ff38632c426f1165ed7436270b44f199fc55284c38276f9db47c3d"
1515
+ dependencies = [
1516
+ "bitflags 2.13.1",
1517
+ "cfg-if",
1518
+ "cfg_aliases",
1519
+ "libc",
1520
+ ]
1521
+
1465
1522
  [[package]]
1466
1523
  name = "num"
1467
1524
  version = "0.4.3"
@@ -1557,6 +1614,15 @@ dependencies = [
1557
1614
  "libc",
1558
1615
  ]
1559
1616
 
1617
+ [[package]]
1618
+ name = "objc2"
1619
+ version = "0.6.4"
1620
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1621
+ checksum = "3a12a8ed07aefc768292f076dc3ac8c48f3781c8f2d5851dd3d98950e8c5a89f"
1622
+ dependencies = [
1623
+ "objc2-encode",
1624
+ ]
1625
+
1560
1626
  [[package]]
1561
1627
  name = "objc2-core-foundation"
1562
1628
  version = "0.3.2"
@@ -1566,6 +1632,12 @@ dependencies = [
1566
1632
  "bitflags 2.13.1",
1567
1633
  ]
1568
1634
 
1635
+ [[package]]
1636
+ name = "objc2-encode"
1637
+ version = "4.1.0"
1638
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1639
+ checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33"
1640
+
1569
1641
  [[package]]
1570
1642
  name = "objc2-system-configuration"
1571
1643
  version = "0.3.2"
@@ -3,7 +3,7 @@ resolver = "2"
3
3
  members = ["crates/flowproof-driver", "crates/flowproof-trace", "crates/flowproof-replay", "crates/flowproof-agent", "crates/flowproof-adapters", "crates/flowproof-cli", "crates/flowproof-python"]
4
4
 
5
5
  [workspace.package]
6
- version = "0.3.0"
6
+ version = "0.4.0"
7
7
  edition = "2021"
8
8
  license = "Apache-2.0"
9
9
  repository = "https://github.com/automators-com/flowproof"
@@ -22,6 +22,7 @@ anyhow = "1"
22
22
  chrono = { version = "0.4", default-features = false, features = ["clock"] }
23
23
  clap = { version = "4", features = ["derive"] }
24
24
  serde = { version = "1", features = ["derive"] }
25
+ regex = "1"
25
26
  serde_json = "1"
26
27
  serde_yaml = "0.9"
27
28
  thiserror = "2"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: flowproof
3
- Version: 0.3.0
3
+ Version: 0.4.0
4
4
  Classifier: Development Status :: 2 - Pre-Alpha
5
5
  Classifier: Intended Audience :: Developers
6
6
  Classifier: Programming Language :: Python :: 3
@@ -14,14 +14,16 @@ web = ["dep:headless_chrome"]
14
14
  # Pixels-only (Citrix/RDP) driving: OCR perception via ocrs/rten, model
15
15
  # download via ureq.
16
16
  vision = ["dep:ocrs", "dep:rten", "dep:ureq"]
17
- # Agent-boundary testing: the model-API proxy that serves a cassette.
18
- agent = []
17
+ # Agent-boundary testing: the model-API proxy, and record mode forwarding
18
+ # to a real model over ureq (TLS via platform-verifier, already in-tree).
19
+ agent = ["dep:ureq"]
19
20
 
20
21
  [dependencies]
21
22
  anyhow = { workspace = true }
22
23
  flowproof-driver = { workspace = true }
23
24
  flowproof-trace = { workspace = true }
24
25
  headless_chrome = { version = "1", optional = true }
26
+ serde = { workspace = true }
25
27
  serde_json = "1"
26
28
  image = { version = "0.25.10", default-features = false, features = ["png"] }
27
29
  thiserror = { workspace = true }
@@ -30,6 +32,15 @@ ocrs = { version = "0.12", optional = true }
30
32
  rten = { version = "0.24", optional = true }
31
33
  ureq = { version = "3", features = ["platform-verifier"], optional = true }
32
34
 
35
+ # Egress containment (`app: agent`) is a Linux-only, unprivileged seccomp
36
+ # user-notification supervisor. `libc` is pure Rust (no C library to link),
37
+ # so a non-Linux build never pulls it and a cross `cargo check --target
38
+ # x86_64-unknown-linux-gnu` type-checks the module off a Mac. The BPF filter
39
+ # is hand-built: seccompiler builds classic-BPF filters but its actions do
40
+ # not include SECCOMP_RET_USER_NOTIF, which this design requires.
41
+ [target.'cfg(target_os = "linux")'.dependencies]
42
+ libc = "0.2"
43
+
33
44
  [target.'cfg(windows)'.dependencies]
34
45
  windows = { version = "0.62", features = [
35
46
  "Win32_Foundation",