flowproof 0.5.0__tar.gz → 0.6.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.
- {flowproof-0.5.0 → flowproof-0.6.0}/Cargo.lock +7 -7
- {flowproof-0.5.0 → flowproof-0.6.0}/Cargo.toml +1 -1
- {flowproof-0.5.0 → flowproof-0.6.0}/PKG-INFO +1 -1
- {flowproof-0.5.0 → flowproof-0.6.0}/crates/flowproof-adapters/src/agent_proxy.rs +44 -6
- {flowproof-0.5.0 → flowproof-0.6.0}/crates/flowproof-adapters/src/web.rs +528 -11
- {flowproof-0.5.0 → flowproof-0.6.0}/crates/flowproof-agent/src/author.rs +1 -0
- {flowproof-0.5.0 → flowproof-0.6.0}/crates/flowproof-agent/src/recorder.rs +626 -32
- {flowproof-0.5.0 → flowproof-0.6.0}/crates/flowproof-agent/src/rules.rs +1410 -52
- {flowproof-0.5.0 → flowproof-0.6.0}/crates/flowproof-agent/src/spec.rs +44 -0
- {flowproof-0.5.0 → flowproof-0.6.0}/crates/flowproof-cli/src/agent_flow.rs +163 -1
- {flowproof-0.5.0 → flowproof-0.6.0}/crates/flowproof-cli/src/lib.rs +169 -4
- flowproof-0.6.0/crates/flowproof-cli/tests/api_pipeline.rs +883 -0
- flowproof-0.6.0/crates/flowproof-cli/tests/cookie_e2e.rs +176 -0
- flowproof-0.6.0/crates/flowproof-cli/tests/iframe_e2e.rs +158 -0
- flowproof-0.6.0/crates/flowproof-cli/tests/page_title_e2e.rs +117 -0
- {flowproof-0.5.0 → flowproof-0.6.0}/crates/flowproof-cli/tests/suite_flow_isolation.rs +11 -1
- {flowproof-0.5.0 → flowproof-0.6.0}/crates/flowproof-cli/tests/web_e2e.rs +773 -20
- {flowproof-0.5.0 → flowproof-0.6.0}/crates/flowproof-driver/src/app.rs +370 -0
- {flowproof-0.5.0 → flowproof-0.6.0}/crates/flowproof-driver/src/lib.rs +8 -6
- {flowproof-0.5.0 → flowproof-0.6.0}/crates/flowproof-driver/src/mock.rs +22 -0
- flowproof-0.6.0/crates/flowproof-driver/src/oob.rs +744 -0
- {flowproof-0.5.0 → flowproof-0.6.0}/crates/flowproof-replay/src/lib.rs +476 -6
- {flowproof-0.5.0 → flowproof-0.6.0}/crates/flowproof-replay/src/runrecord.rs +10 -0
- {flowproof-0.5.0 → flowproof-0.6.0}/crates/flowproof-replay/tests/replay_calc.rs +3 -1
- {flowproof-0.5.0 → flowproof-0.6.0}/crates/flowproof-trace/schema/trace-v1.schema.json +55 -0
- {flowproof-0.5.0 → flowproof-0.6.0}/crates/flowproof-trace/src/format.rs +47 -0
- {flowproof-0.5.0 → flowproof-0.6.0}/crates/flowproof-trace/src/toolcalls.rs +7 -2
- {flowproof-0.5.0 → flowproof-0.6.0}/flowproof/__init__.py +1 -1
- {flowproof-0.5.0 → flowproof-0.6.0}/pyproject.toml +1 -1
- flowproof-0.5.0/crates/flowproof-cli/tests/api_pipeline.rs +0 -389
- flowproof-0.5.0/crates/flowproof-driver/src/oob.rs +0 -242
- {flowproof-0.5.0 → flowproof-0.6.0}/README.md +0 -0
- {flowproof-0.5.0 → flowproof-0.6.0}/crates/flowproof-adapters/Cargo.toml +0 -0
- {flowproof-0.5.0 → flowproof-0.6.0}/crates/flowproof-adapters/src/agent_runner.rs +0 -0
- {flowproof-0.5.0 → flowproof-0.6.0}/crates/flowproof-adapters/src/egress.rs +0 -0
- {flowproof-0.5.0 → flowproof-0.6.0}/crates/flowproof-adapters/src/egress_linux.rs +0 -0
- {flowproof-0.5.0 → flowproof-0.6.0}/crates/flowproof-adapters/src/lib.rs +0 -0
- {flowproof-0.5.0 → flowproof-0.6.0}/crates/flowproof-adapters/src/mcp_core.rs +0 -0
- {flowproof-0.5.0 → flowproof-0.6.0}/crates/flowproof-adapters/src/mcp_http.rs +0 -0
- {flowproof-0.5.0 → flowproof-0.6.0}/crates/flowproof-adapters/src/mcp_stdio.rs +0 -0
- {flowproof-0.5.0 → flowproof-0.6.0}/crates/flowproof-adapters/src/sap_com.rs +0 -0
- {flowproof-0.5.0 → flowproof-0.6.0}/crates/flowproof-adapters/src/vision.rs +0 -0
- {flowproof-0.5.0 → flowproof-0.6.0}/crates/flowproof-agent/Cargo.toml +0 -0
- {flowproof-0.5.0 → flowproof-0.6.0}/crates/flowproof-agent/src/agent_steps.rs +0 -0
- {flowproof-0.5.0 → flowproof-0.6.0}/crates/flowproof-agent/src/clarify.rs +0 -0
- {flowproof-0.5.0 → flowproof-0.6.0}/crates/flowproof-agent/src/heal.rs +0 -0
- {flowproof-0.5.0 → flowproof-0.6.0}/crates/flowproof-agent/src/lib.rs +0 -0
- {flowproof-0.5.0 → flowproof-0.6.0}/crates/flowproof-agent/src/llm.rs +0 -0
- {flowproof-0.5.0 → flowproof-0.6.0}/crates/flowproof-cli/Cargo.toml +0 -0
- {flowproof-0.5.0 → flowproof-0.6.0}/crates/flowproof-cli/src/capture.rs +0 -0
- {flowproof-0.5.0 → flowproof-0.6.0}/crates/flowproof-cli/src/main.rs +0 -0
- {flowproof-0.5.0 → flowproof-0.6.0}/crates/flowproof-cli/tests/agent_flow_e2e.rs +0 -0
- {flowproof-0.5.0 → flowproof-0.6.0}/crates/flowproof-cli/tests/audit_record_e2e.rs +0 -0
- {flowproof-0.5.0 → flowproof-0.6.0}/crates/flowproof-cli/tests/calc_e2e.rs +0 -0
- {flowproof-0.5.0 → flowproof-0.6.0}/crates/flowproof-cli/tests/clock_e2e.rs +0 -0
- {flowproof-0.5.0 → flowproof-0.6.0}/crates/flowproof-cli/tests/egress_e2e.rs +0 -0
- {flowproof-0.5.0 → flowproof-0.6.0}/crates/flowproof-cli/tests/examples_resolve.rs +0 -0
- {flowproof-0.5.0 → flowproof-0.6.0}/crates/flowproof-cli/tests/grid_cell_e2e.rs +0 -0
- {flowproof-0.5.0 → flowproof-0.6.0}/crates/flowproof-cli/tests/llm_author_e2e.rs +0 -0
- {flowproof-0.5.0 → flowproof-0.6.0}/crates/flowproof-cli/tests/mcp_stdio_e2e.rs +0 -0
- {flowproof-0.5.0 → flowproof-0.6.0}/crates/flowproof-cli/tests/notepad_author_e2e.rs +0 -0
- {flowproof-0.5.0 → flowproof-0.6.0}/crates/flowproof-cli/tests/notepad_e2e.rs +0 -0
- {flowproof-0.5.0 → flowproof-0.6.0}/crates/flowproof-cli/tests/sap_e2e.rs +0 -0
- {flowproof-0.5.0 → flowproof-0.6.0}/crates/flowproof-cli/tests/sap_pipeline.rs +0 -0
- {flowproof-0.5.0 → flowproof-0.6.0}/crates/flowproof-cli/tests/sap_sim_e2e.rs +0 -0
- {flowproof-0.5.0 → flowproof-0.6.0}/crates/flowproof-cli/tests/scoped_container_e2e.rs +0 -0
- {flowproof-0.5.0 → flowproof-0.6.0}/crates/flowproof-cli/tests/skip_unless_env.rs +0 -0
- {flowproof-0.5.0 → flowproof-0.6.0}/crates/flowproof-cli/tests/suite_env_from.rs +0 -0
- {flowproof-0.5.0 → flowproof-0.6.0}/crates/flowproof-cli/tests/suite_missing_trace.rs +0 -0
- {flowproof-0.5.0 → flowproof-0.6.0}/crates/flowproof-cli/tests/support/sap_simulator.py +0 -0
- {flowproof-0.5.0 → flowproof-0.6.0}/crates/flowproof-cli/tests/vision_pipeline.rs +0 -0
- {flowproof-0.5.0 → flowproof-0.6.0}/crates/flowproof-driver/Cargo.toml +0 -0
- {flowproof-0.5.0 → flowproof-0.6.0}/crates/flowproof-driver/src/backend.rs +0 -0
- {flowproof-0.5.0 → flowproof-0.6.0}/crates/flowproof-driver/src/gdi.rs +0 -0
- {flowproof-0.5.0 → flowproof-0.6.0}/crates/flowproof-driver/src/recording.rs +0 -0
- {flowproof-0.5.0 → flowproof-0.6.0}/crates/flowproof-driver/src/redact.rs +0 -0
- {flowproof-0.5.0 → flowproof-0.6.0}/crates/flowproof-driver/src/visual.rs +0 -0
- {flowproof-0.5.0 → flowproof-0.6.0}/crates/flowproof-driver/src/window.rs +0 -0
- {flowproof-0.5.0 → flowproof-0.6.0}/crates/flowproof-python/Cargo.toml +0 -0
- {flowproof-0.5.0 → flowproof-0.6.0}/crates/flowproof-python/src/lib.rs +0 -0
- {flowproof-0.5.0 → flowproof-0.6.0}/crates/flowproof-replay/Cargo.toml +0 -0
- {flowproof-0.5.0 → flowproof-0.6.0}/crates/flowproof-replay/src/report.rs +0 -0
- {flowproof-0.5.0 → flowproof-0.6.0}/crates/flowproof-trace/Cargo.toml +0 -0
- {flowproof-0.5.0 → flowproof-0.6.0}/crates/flowproof-trace/src/cassette.rs +0 -0
- {flowproof-0.5.0 → flowproof-0.6.0}/crates/flowproof-trace/src/cassette_diff.rs +0 -0
- {flowproof-0.5.0 → flowproof-0.6.0}/crates/flowproof-trace/src/egress.rs +0 -0
- {flowproof-0.5.0 → flowproof-0.6.0}/crates/flowproof-trace/src/lib.rs +0 -0
- {flowproof-0.5.0 → flowproof-0.6.0}/crates/flowproof-trace/src/secret.rs +0 -0
- {flowproof-0.5.0 → flowproof-0.6.0}/crates/flowproof-trace/src/secret_scan.rs +0 -0
- {flowproof-0.5.0 → flowproof-0.6.0}/crates/flowproof-trace/src/substitution.rs +0 -0
- {flowproof-0.5.0 → flowproof-0.6.0}/crates/flowproof-trace/tests/fixtures/sample.trace.jsonl +0 -0
- {flowproof-0.5.0 → flowproof-0.6.0}/crates/flowproof-trace/tests/schema_conformance.rs +0 -0
- {flowproof-0.5.0 → flowproof-0.6.0}/flowproof/cli.py +0 -0
- {flowproof-0.5.0 → flowproof-0.6.0}/flowproof/flow.py +0 -0
- {flowproof-0.5.0 → flowproof-0.6.0}/flowproof/mcp_server.py +0 -0
- {flowproof-0.5.0 → flowproof-0.6.0}/flowproof/py.typed +0 -0
|
@@ -760,7 +760,7 @@ dependencies = [
|
|
|
760
760
|
|
|
761
761
|
[[package]]
|
|
762
762
|
name = "flowproof-adapters"
|
|
763
|
-
version = "0.
|
|
763
|
+
version = "0.6.0"
|
|
764
764
|
dependencies = [
|
|
765
765
|
"anyhow",
|
|
766
766
|
"flowproof-driver",
|
|
@@ -779,7 +779,7 @@ dependencies = [
|
|
|
779
779
|
|
|
780
780
|
[[package]]
|
|
781
781
|
name = "flowproof-agent"
|
|
782
|
-
version = "0.
|
|
782
|
+
version = "0.6.0"
|
|
783
783
|
dependencies = [
|
|
784
784
|
"chrono",
|
|
785
785
|
"flowproof-driver",
|
|
@@ -795,7 +795,7 @@ dependencies = [
|
|
|
795
795
|
|
|
796
796
|
[[package]]
|
|
797
797
|
name = "flowproof-cli"
|
|
798
|
-
version = "0.
|
|
798
|
+
version = "0.6.0"
|
|
799
799
|
dependencies = [
|
|
800
800
|
"ab_glyph",
|
|
801
801
|
"chrono",
|
|
@@ -816,7 +816,7 @@ dependencies = [
|
|
|
816
816
|
|
|
817
817
|
[[package]]
|
|
818
818
|
name = "flowproof-driver"
|
|
819
|
-
version = "0.
|
|
819
|
+
version = "0.6.0"
|
|
820
820
|
dependencies = [
|
|
821
821
|
"image",
|
|
822
822
|
"postgres",
|
|
@@ -830,7 +830,7 @@ dependencies = [
|
|
|
830
830
|
|
|
831
831
|
[[package]]
|
|
832
832
|
name = "flowproof-python"
|
|
833
|
-
version = "0.
|
|
833
|
+
version = "0.6.0"
|
|
834
834
|
dependencies = [
|
|
835
835
|
"flowproof-agent",
|
|
836
836
|
"flowproof-cli",
|
|
@@ -842,7 +842,7 @@ dependencies = [
|
|
|
842
842
|
|
|
843
843
|
[[package]]
|
|
844
844
|
name = "flowproof-replay"
|
|
845
|
-
version = "0.
|
|
845
|
+
version = "0.6.0"
|
|
846
846
|
dependencies = [
|
|
847
847
|
"chrono",
|
|
848
848
|
"flowproof-agent",
|
|
@@ -856,7 +856,7 @@ dependencies = [
|
|
|
856
856
|
|
|
857
857
|
[[package]]
|
|
858
858
|
name = "flowproof-trace"
|
|
859
|
-
version = "0.
|
|
859
|
+
version = "0.6.0"
|
|
860
860
|
dependencies = [
|
|
861
861
|
"jsonschema",
|
|
862
862
|
"regex",
|
|
@@ -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.
|
|
6
|
+
version = "0.6.0"
|
|
7
7
|
edition = "2021"
|
|
8
8
|
license = "Apache-2.0"
|
|
9
9
|
repository = "https://github.com/automators-com/flowproof"
|
|
@@ -1916,15 +1916,52 @@ mod tests {
|
|
|
1916
1916
|
|
|
1917
1917
|
/// A local fake model, so record mode can be exercised without a real
|
|
1918
1918
|
/// API or any tokens - the same bet the SAP simulator makes.
|
|
1919
|
+
/// Read an HTTP/1.1 request to the END of its declared body.
|
|
1920
|
+
///
|
|
1921
|
+
/// A single `read` is not enough and the difference is not cosmetic: a
|
|
1922
|
+
/// POST body can arrive across several TCP segments, and responding then
|
|
1923
|
+
/// closing with bytes still unread makes the stack RST the client. ureq
|
|
1924
|
+
/// surfaces that reset as a send failure, the proxy turns it into a 502,
|
|
1925
|
+
/// and the test fails an `assert_eq!(status, 200)` that has nothing to
|
|
1926
|
+
/// do with what it meant to prove. It is timing-dependent, so it shows up
|
|
1927
|
+
/// on the Windows runner and almost never locally.
|
|
1928
|
+
///
|
|
1929
|
+
/// `agent_flow_e2e.rs` already carries this helper for the same reason;
|
|
1930
|
+
/// these in-crate fakes never got it.
|
|
1931
|
+
fn read_http_request(stream: &mut std::net::TcpStream) -> String {
|
|
1932
|
+
use std::io::{BufRead, Read};
|
|
1933
|
+
let mut reader = std::io::BufReader::new(stream);
|
|
1934
|
+
let mut head = String::new();
|
|
1935
|
+
let mut length = 0usize;
|
|
1936
|
+
loop {
|
|
1937
|
+
let mut line = String::new();
|
|
1938
|
+
if reader.read_line(&mut line).unwrap_or(0) == 0 {
|
|
1939
|
+
break;
|
|
1940
|
+
}
|
|
1941
|
+
if let Some(v) = line.to_ascii_lowercase().strip_prefix("content-length:") {
|
|
1942
|
+
length = v.trim().parse().unwrap_or(0);
|
|
1943
|
+
}
|
|
1944
|
+
let done = line == "\r\n" || line == "\n";
|
|
1945
|
+
head.push_str(&line);
|
|
1946
|
+
if done {
|
|
1947
|
+
break;
|
|
1948
|
+
}
|
|
1949
|
+
}
|
|
1950
|
+
let mut body = vec![0u8; length];
|
|
1951
|
+
if length > 0 {
|
|
1952
|
+
let _ = reader.read_exact(&mut body);
|
|
1953
|
+
}
|
|
1954
|
+
head + &String::from_utf8_lossy(&body)
|
|
1955
|
+
}
|
|
1956
|
+
|
|
1919
1957
|
fn fake_model(reply: serde_json::Value) -> String {
|
|
1920
|
-
use std::io::
|
|
1958
|
+
use std::io::Write;
|
|
1921
1959
|
let listener = std::net::TcpListener::bind("127.0.0.1:0").expect("bind");
|
|
1922
1960
|
let port = listener.local_addr().expect("addr").port();
|
|
1923
1961
|
std::thread::spawn(move || {
|
|
1924
1962
|
for stream in listener.incoming() {
|
|
1925
1963
|
let Ok(mut stream) = stream else { continue };
|
|
1926
|
-
let
|
|
1927
|
-
let _ = stream.read(&mut buf);
|
|
1964
|
+
let _ = read_http_request(&mut stream);
|
|
1928
1965
|
let body = reply.to_string();
|
|
1929
1966
|
let _ = stream.write_all(
|
|
1930
1967
|
format!(
|
|
@@ -2004,9 +2041,10 @@ mod tests {
|
|
|
2004
2041
|
std::thread::spawn(move || {
|
|
2005
2042
|
if let Some(stream) = listener.incoming().next() {
|
|
2006
2043
|
let mut stream = stream.expect("accept");
|
|
2007
|
-
|
|
2008
|
-
|
|
2009
|
-
|
|
2044
|
+
// Drained in full for the reset reason above, and because
|
|
2045
|
+
// this fake READS the request: a header split across
|
|
2046
|
+
// segments would otherwise read as "(none)".
|
|
2047
|
+
let req = read_http_request(&mut stream);
|
|
2010
2048
|
let seen = req
|
|
2011
2049
|
.lines()
|
|
2012
2050
|
.find(|l| l.to_ascii_lowercase().starts_with("authorization:"))
|