flowproof 0.23.2__tar.gz → 0.23.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {flowproof-0.23.2 → flowproof-0.23.3}/Cargo.lock +7 -7
- {flowproof-0.23.2 → flowproof-0.23.3}/Cargo.toml +1 -1
- {flowproof-0.23.2 → flowproof-0.23.3}/PKG-INFO +1 -1
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-adapters/src/web.rs +7 -1
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-adapters/tests/static_area_e2e.rs +21 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-agent/src/author.rs +60 -8
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-agent/src/llm.rs +17 -13
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-agent/tests/model_client_http.rs +30 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/flowproof/__init__.py +1 -1
- {flowproof-0.23.2 → flowproof-0.23.3}/pyproject.toml +1 -1
- {flowproof-0.23.2 → flowproof-0.23.3}/README.md +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-adapters/Cargo.toml +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-adapters/src/agent_proxy.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-adapters/src/agent_runner.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-adapters/src/egress.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-adapters/src/egress_linux.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-adapters/src/egress_windows/audit.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-adapters/src/egress_windows/capture.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-adapters/src/egress_windows/env_block.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-adapters/src/egress_windows/filters.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-adapters/src/egress_windows/identity.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-adapters/src/egress_windows/logon.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-adapters/src/egress_windows/netevents.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-adapters/src/egress_windows/run.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-adapters/src/egress_windows/spawn.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-adapters/src/egress_windows/wfp.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-adapters/src/egress_windows.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-adapters/src/fiori.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-adapters/src/fs_observe.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-adapters/src/lib.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-adapters/src/mcp_core.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-adapters/src/mcp_http.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-adapters/src/mcp_stdio.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-adapters/src/sap_com.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-adapters/src/vision.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-adapters/tests/a11y_capture.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-adapters/tests/drag_spike.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-adapters/tests/fs_observation_e2e.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-adapters/tests/network_idle_e2e.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-adapters/tests/shared_browser_shutdown_e2e.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-adapters/tests/side_effect_http_e2e.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-adapters/tests/windows_containment_e2e.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-agent/Cargo.toml +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-agent/src/agent_steps.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-agent/src/clarify.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-agent/src/doc_author.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-agent/src/doc_formats/hp_alm.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-agent/src/doc_formats.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-agent/src/draft_assembly.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-agent/src/heal.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-agent/src/lib.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-agent/src/recorder.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-agent/src/repair.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-agent/src/rules.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-agent/src/spec.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-cli/Cargo.toml +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-cli/skills/flowproof-config/SKILL.md +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-cli/src/agent_flow.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-cli/src/capture.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-cli/src/config.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-cli/src/doctor.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-cli/src/lib.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-cli/src/main.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-cli/src/suite.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-cli/src/suite_checkpoint.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-cli/src/suite_inputs.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-cli/src/suite_journal.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-cli/src/update_check.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-cli/tests/a11y_selector_e2e.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-cli/tests/agent_conversation_anthropic_e2e.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-cli/tests/agent_conversation_streaming_e2e.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-cli/tests/agent_flow_e2e.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-cli/tests/agent_url_record_e2e.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-cli/tests/api_pipeline.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-cli/tests/audit_record_e2e.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-cli/tests/calc_e2e.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-cli/tests/clock_e2e.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-cli/tests/config_cli_e2e.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-cli/tests/config_seed_e2e.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-cli/tests/config_skill_e2e.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-cli/tests/cookie_e2e.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-cli/tests/doctor_ai_e2e.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-cli/tests/doctor_e2e.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-cli/tests/documented_flags.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-cli/tests/egress_e2e.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-cli/tests/examples_resolve.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-cli/tests/falsifiability_arg_matchers.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-cli/tests/falsifiability_audit_since.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-cli/tests/falsifiability_call_order.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-cli/tests/falsifiability_capability_regression.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-cli/tests/falsifiability_control_verdict.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-cli/tests/falsifiability_mcp_kill.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-cli/tests/falsifiability_no_tool_call.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-cli/tests/falsifiability_reply_contains.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-cli/tests/falsifiability_side_effect.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-cli/tests/fiori_field_commit_e2e.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-cli/tests/grid_cell_e2e.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-cli/tests/iframe_e2e.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-cli/tests/llm_author_e2e.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-cli/tests/mcp_http_e2e.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-cli/tests/mcp_stdio_e2e.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-cli/tests/notepad_author_e2e.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-cli/tests/notepad_e2e.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-cli/tests/page_title_e2e.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-cli/tests/pinned_random_e2e.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-cli/tests/sap_e2e.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-cli/tests/sap_pipeline.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-cli/tests/sap_sim_e2e.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-cli/tests/scoped_container_e2e.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-cli/tests/select_missing_option_e2e.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-cli/tests/skip_unless_env.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-cli/tests/suite_checkpoint.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-cli/tests/suite_env_from.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-cli/tests/suite_flow_isolation.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-cli/tests/suite_missing_trace.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-cli/tests/suite_policy.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-cli/tests/support/sap_simulator.py +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-cli/tests/visibility_e2e.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-cli/tests/vision_pipeline.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-cli/tests/web_e2e.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-driver/Cargo.toml +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-driver/src/app.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-driver/src/backend.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-driver/src/gdi.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-driver/src/lib.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-driver/src/mock.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-driver/src/oob.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-driver/src/recording.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-driver/src/redact.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-driver/src/surface.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-driver/src/visual.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-driver/src/window.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-python/Cargo.toml +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-python/src/lib.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-replay/Cargo.toml +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-replay/src/lib.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-replay/src/report.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-replay/src/runrecord.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-replay/tests/replay_calc.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-trace/Cargo.toml +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-trace/schema/cassette-v1.schema.json +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-trace/schema/side-effect-v1.schema.json +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-trace/schema/trace-v1.schema.json +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-trace/src/captures.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-trace/src/cassette.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-trace/src/cassette_diff.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-trace/src/egress.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-trace/src/format.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-trace/src/lib.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-trace/src/secret.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-trace/src/secret_scan.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-trace/src/side_effect.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-trace/src/substitution.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-trace/src/toolcalls.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-trace/tests/cassette_conformance.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-trace/tests/fixtures/multi.trace.jsonl +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-trace/tests/fixtures/sample.trace.jsonl +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-trace/tests/schema_conformance.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-trace/tests/side_effect_conformance.rs +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/flowproof/cli.py +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/flowproof/flow.py +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/flowproof/mcp_server.py +0 -0
- {flowproof-0.23.2 → flowproof-0.23.3}/flowproof/py.typed +0 -0
|
@@ -930,7 +930,7 @@ dependencies = [
|
|
|
930
930
|
|
|
931
931
|
[[package]]
|
|
932
932
|
name = "flowproof-adapters"
|
|
933
|
-
version = "0.23.
|
|
933
|
+
version = "0.23.3"
|
|
934
934
|
dependencies = [
|
|
935
935
|
"anyhow",
|
|
936
936
|
"flowproof-driver",
|
|
@@ -949,7 +949,7 @@ dependencies = [
|
|
|
949
949
|
|
|
950
950
|
[[package]]
|
|
951
951
|
name = "flowproof-agent"
|
|
952
|
-
version = "0.23.
|
|
952
|
+
version = "0.23.3"
|
|
953
953
|
dependencies = [
|
|
954
954
|
"chrono",
|
|
955
955
|
"flowproof-driver",
|
|
@@ -967,7 +967,7 @@ dependencies = [
|
|
|
967
967
|
|
|
968
968
|
[[package]]
|
|
969
969
|
name = "flowproof-cli"
|
|
970
|
-
version = "0.23.
|
|
970
|
+
version = "0.23.3"
|
|
971
971
|
dependencies = [
|
|
972
972
|
"ab_glyph",
|
|
973
973
|
"chrono",
|
|
@@ -992,7 +992,7 @@ dependencies = [
|
|
|
992
992
|
|
|
993
993
|
[[package]]
|
|
994
994
|
name = "flowproof-driver"
|
|
995
|
-
version = "0.23.
|
|
995
|
+
version = "0.23.3"
|
|
996
996
|
dependencies = [
|
|
997
997
|
"calamine",
|
|
998
998
|
"flowproof-trace",
|
|
@@ -1008,7 +1008,7 @@ dependencies = [
|
|
|
1008
1008
|
|
|
1009
1009
|
[[package]]
|
|
1010
1010
|
name = "flowproof-python"
|
|
1011
|
-
version = "0.23.
|
|
1011
|
+
version = "0.23.3"
|
|
1012
1012
|
dependencies = [
|
|
1013
1013
|
"flowproof-agent",
|
|
1014
1014
|
"flowproof-cli",
|
|
@@ -1020,7 +1020,7 @@ dependencies = [
|
|
|
1020
1020
|
|
|
1021
1021
|
[[package]]
|
|
1022
1022
|
name = "flowproof-replay"
|
|
1023
|
-
version = "0.23.
|
|
1023
|
+
version = "0.23.3"
|
|
1024
1024
|
dependencies = [
|
|
1025
1025
|
"chrono",
|
|
1026
1026
|
"flowproof-agent",
|
|
@@ -1034,7 +1034,7 @@ dependencies = [
|
|
|
1034
1034
|
|
|
1035
1035
|
[[package]]
|
|
1036
1036
|
name = "flowproof-trace"
|
|
1037
|
-
version = "0.23.
|
|
1037
|
+
version = "0.23.3"
|
|
1038
1038
|
dependencies = [
|
|
1039
1039
|
"jsonschema",
|
|
1040
1040
|
"regex",
|
|
@@ -22,7 +22,7 @@ members = ["crates/flowproof-driver", "crates/flowproof-trace", "crates/flowproo
|
|
|
22
22
|
exclude = ["spike/windows-containment"]
|
|
23
23
|
|
|
24
24
|
[workspace.package]
|
|
25
|
-
version = "0.23.
|
|
25
|
+
version = "0.23.3"
|
|
26
26
|
edition = "2021"
|
|
27
27
|
license = "Apache-2.0"
|
|
28
28
|
repository = "https://github.com/automators-com/flowproof"
|
|
@@ -4691,8 +4691,14 @@ impl AppDriver for WebAppDriver {
|
|
|
4691
4691
|
KeyMod::Meta => ModifierKey::Meta,
|
|
4692
4692
|
})
|
|
4693
4693
|
.collect();
|
|
4694
|
+
// CDP's key table uses the literal space as the key value; models
|
|
4695
|
+
// and human-authored specs commonly use its code/name instead.
|
|
4696
|
+
let browser_key = match key {
|
|
4697
|
+
"Space" | "Spacebar" => " ",
|
|
4698
|
+
_ => key,
|
|
4699
|
+
};
|
|
4694
4700
|
self.tab()?
|
|
4695
|
-
.press_key_with_modifiers(
|
|
4701
|
+
.press_key_with_modifiers(browser_key, (!mods.is_empty()).then_some(mods.as_slice()))
|
|
4696
4702
|
.map_err(|e| web_err(&format!("pressing key '{key}'"), e))?;
|
|
4697
4703
|
Ok(())
|
|
4698
4704
|
}
|
|
@@ -32,6 +32,7 @@ fn serve(html: &'static str) -> String {
|
|
|
32
32
|
}
|
|
33
33
|
|
|
34
34
|
const FIXTURE: &str = r#"<!doctype html><html><body>
|
|
35
|
+
<input id="space-toggle" type="checkbox">
|
|
35
36
|
<div id="app">
|
|
36
37
|
<button id="open" onclick="
|
|
37
38
|
var d = document.createElement('div');
|
|
@@ -69,6 +70,26 @@ fn search_reaches_content_outside_the_app_root() {
|
|
|
69
70
|
.invoke(&UiaSelector::css("#open"))
|
|
70
71
|
.expect("opening the dialog succeeds");
|
|
71
72
|
|
|
73
|
+
// Space aliases must produce real keyboard activation, not text insertion.
|
|
74
|
+
driver
|
|
75
|
+
.invoke(&UiaSelector::css("#space-toggle"))
|
|
76
|
+
.expect("focus checkbox");
|
|
77
|
+
assert!(driver
|
|
78
|
+
.element_exists(&UiaSelector::css("#space-toggle:checked"))
|
|
79
|
+
.expect("checked"));
|
|
80
|
+
for key in ["Space", "Spacebar", " "] {
|
|
81
|
+
driver
|
|
82
|
+
.press_key(key, &[])
|
|
83
|
+
.expect("space key activates checkbox");
|
|
84
|
+
assert!(driver
|
|
85
|
+
.element_exists(&UiaSelector::css("#space-toggle:not(:checked)"))
|
|
86
|
+
.expect("unchecked"));
|
|
87
|
+
driver.press_key(key, &[]).expect("space toggles back");
|
|
88
|
+
assert!(driver
|
|
89
|
+
.element_exists(&UiaSelector::css("#space-toggle:checked"))
|
|
90
|
+
.expect("checked again"));
|
|
91
|
+
}
|
|
92
|
+
|
|
72
93
|
// Native-id (css) reach: the sibling div is appended to <body>, a
|
|
73
94
|
// structural ancestor of neither #app nor anything inside it.
|
|
74
95
|
assert!(
|
|
@@ -67,7 +67,7 @@ action that reaches the goal.
|
|
|
67
67
|
- Respond with ONLY JSON, no prose, no code fences.
|
|
68
68
|
- The JSON action is one of: \"click\", \"click_at\", \"drag\", \"type_text\", \
|
|
69
69
|
\"assert_text\", \"capture_text\", \"capture_count\", \"type_captured\", \
|
|
70
|
-
\"select_option\", \"select_options\", \"scroll\", \"press_key\", \"rule_step\", or \
|
|
70
|
+
\"select_option\", \"select_options\", \"scroll\", \"scroll_into_view\", \"press_key\", \"rule_step\", or \
|
|
71
71
|
\"capture_ambiguity\".
|
|
72
72
|
- UI actions MUST include \"target\": \"<target token of a listed element>\". \
|
|
73
73
|
Clicking and typing require an entry whose \"actionable\" field is true. \
|
|
@@ -77,7 +77,11 @@ type_text also needs \"text\"; assert_text needs \"expected\" and optional \
|
|
|
77
77
|
drag needs \"onto\" with a second listed actionable target. click_at needs \
|
|
78
78
|
\"x_pct\" and \"y_pct\" from 0 through 100. capture_count needs a safe \"name\". \
|
|
79
79
|
select_option needs one \"text\" value; select_options is only for a multi-select \
|
|
80
|
-
and needs a non-empty \"values\" array. scroll needs \"to_px\"
|
|
80
|
+
and needs a non-empty \"values\" array. scroll needs \"to_px\" and means an exact \
|
|
81
|
+
vertical offset inside a scroll container. To reveal a field or cell, use \
|
|
82
|
+
scroll_into_view with that individual target instead; it needs no offset. \
|
|
83
|
+
Never scroll a collection (tag=collection): it represents multiple rows for counting, \
|
|
84
|
+
not a scroll container. For horizontal grids, reveal the desired cell, not a row collection. \
|
|
81
85
|
press_key needs \"key\" and has no target. \
|
|
82
86
|
For another action, use rule_step with \"step\" containing exact \
|
|
83
87
|
deterministic grammar and copy listed target tokens into quoted targets, for \
|
|
@@ -881,12 +885,32 @@ fn ground_one(
|
|
|
881
885
|
.ok_or("select_option needs a non-empty 'text'")?;
|
|
882
886
|
Ok(vec![ResolvedAction::TypeText { target, text }])
|
|
883
887
|
}
|
|
884
|
-
"scroll" =>
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
888
|
+
"scroll" | "scroll_into_view" => {
|
|
889
|
+
let entries: Vec<serde_json::Value> = serde_json::from_str(scene).unwrap_or_default();
|
|
890
|
+
if entries.iter().any(|entry| {
|
|
891
|
+
(entry["target"].as_str() == Some(token)
|
|
892
|
+
|| entry["css"]
|
|
893
|
+
.as_str()
|
|
894
|
+
.is_some_and(|css| token == css || token == format!("css:{css}")))
|
|
895
|
+
&& entry["tag"] == "collection"
|
|
896
|
+
}) {
|
|
897
|
+
return Err("cannot scroll a collection; choose an individual cell with scroll_into_view or a scroll container with scroll".into());
|
|
898
|
+
}
|
|
899
|
+
let to = if authored.action == "scroll_into_view" {
|
|
900
|
+
if authored.to_px.is_some() {
|
|
901
|
+
return Err("scroll_into_view does not accept to_px".into());
|
|
902
|
+
}
|
|
903
|
+
crate::rules::ScrollTo::IntoView
|
|
904
|
+
} else {
|
|
905
|
+
crate::rules::ScrollTo::Offset(
|
|
906
|
+
authored.to_px.ok_or("scroll needs a 'to_px' offset")?,
|
|
907
|
+
)
|
|
908
|
+
};
|
|
909
|
+
Ok(vec![ResolvedAction::Scroll {
|
|
910
|
+
target: Some(target),
|
|
911
|
+
to,
|
|
912
|
+
}])
|
|
913
|
+
}
|
|
890
914
|
"type_captured" => {
|
|
891
915
|
let name = authored
|
|
892
916
|
.capture
|
|
@@ -2329,6 +2353,34 @@ mod tests {
|
|
|
2329
2353
|
}
|
|
2330
2354
|
}
|
|
2331
2355
|
|
|
2356
|
+
#[test]
|
|
2357
|
+
fn collection_scroll_is_rejected_and_reauthored_as_reveal_cell() {
|
|
2358
|
+
let mut client = Scripted {
|
|
2359
|
+
replies: vec![
|
|
2360
|
+
r#"{"action":"scroll","target":"css:#rows tr","to_px":0}"#.into(),
|
|
2361
|
+
r#"{"action":"scroll_into_view","target":"css:#task-1"}"#.into(),
|
|
2362
|
+
],
|
|
2363
|
+
calls: 0,
|
|
2364
|
+
};
|
|
2365
|
+
let result = author_step(
|
|
2366
|
+
&mut client,
|
|
2367
|
+
&AuthorContext {
|
|
2368
|
+
intent: "Bring the first task into view",
|
|
2369
|
+
scene: HUMAN_PRIMITIVE_SCENE,
|
|
2370
|
+
..ctx()
|
|
2371
|
+
},
|
|
2372
|
+
)
|
|
2373
|
+
.expect("collection rejection should reauthor an individual target");
|
|
2374
|
+
assert_eq!(client.calls, 2);
|
|
2375
|
+
assert_eq!(
|
|
2376
|
+
result,
|
|
2377
|
+
ResolvedAction::Scroll {
|
|
2378
|
+
target: Some(Target::css("#task-1")),
|
|
2379
|
+
to: crate::rules::ScrollTo::IntoView,
|
|
2380
|
+
}
|
|
2381
|
+
);
|
|
2382
|
+
}
|
|
2383
|
+
|
|
2332
2384
|
#[test]
|
|
2333
2385
|
fn rule_step_covers_grounded_actions_outside_the_small_json_vocabulary() {
|
|
2334
2386
|
let mut client = Scripted {
|
|
@@ -225,20 +225,24 @@ impl HttpModelClient {
|
|
|
225
225
|
if let Some(key) = &self.config.api_key {
|
|
226
226
|
request = request.header("authorization", format!("Bearer {key}"));
|
|
227
227
|
}
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
228
|
+
let mut body = json!({
|
|
229
|
+
"model": self.model(),
|
|
230
|
+
"messages": [
|
|
231
|
+
{"role": "system", "content": system},
|
|
232
|
+
{"role": "user", "content": user},
|
|
233
|
+
],
|
|
234
|
+
});
|
|
235
|
+
if self.config.kind == BackendKind::OpenAi {
|
|
236
|
+
// Includes reasoning tokens. GPT-5 rejects legacy max_tokens and
|
|
237
|
+
// temperature=0; leave sampling at the model's supported default.
|
|
238
|
+
body["max_completion_tokens"] = json!(16_384);
|
|
239
|
+
} else {
|
|
240
|
+
// Preserve the contract of local OpenAI-compatible servers.
|
|
241
|
+
body["max_tokens"] = json!(OPENAI_COMPATIBLE_MAX_TOKENS);
|
|
242
|
+
body["temperature"] = json!(0);
|
|
243
|
+
}
|
|
232
244
|
let mut response = request
|
|
233
|
-
.send_json(
|
|
234
|
-
"model": self.model(),
|
|
235
|
-
"max_tokens": OPENAI_COMPATIBLE_MAX_TOKENS,
|
|
236
|
-
"temperature": 0,
|
|
237
|
-
"messages": [
|
|
238
|
-
{"role": "system", "content": system},
|
|
239
|
-
{"role": "user", "content": user},
|
|
240
|
-
],
|
|
241
|
-
}))
|
|
245
|
+
.send_json(body)
|
|
242
246
|
.map_err(|e| Self::http_err("openai-compatible", e))?;
|
|
243
247
|
let response: serde_json::Value = Self::json_or_error(
|
|
244
248
|
"openai-compatible",
|
|
@@ -132,3 +132,33 @@ fn an_echoed_key_is_redacted_from_the_error() {
|
|
|
132
132
|
"and the redaction is visible: {text}"
|
|
133
133
|
);
|
|
134
134
|
}
|
|
135
|
+
|
|
136
|
+
#[test]
|
|
137
|
+
fn openai_reasoning_request_and_compatible_server_use_their_own_parameters() {
|
|
138
|
+
for kind in [BackendKind::OpenAi, BackendKind::OpenAiCompatible] {
|
|
139
|
+
let (base, rx) = serve_once(200, r#"{"choices":[{"message":{"content":"ok"}}]}"#);
|
|
140
|
+
let mut client = HttpModelClient::new(BackendConfig {
|
|
141
|
+
kind: kind.clone(),
|
|
142
|
+
base_url: Some(base),
|
|
143
|
+
model: Some("gpt-5".into()),
|
|
144
|
+
api_key: Some("test-key".into()),
|
|
145
|
+
});
|
|
146
|
+
assert_eq!(
|
|
147
|
+
client
|
|
148
|
+
.complete("system", "user")
|
|
149
|
+
.expect("completion succeeds"),
|
|
150
|
+
"ok"
|
|
151
|
+
);
|
|
152
|
+
let sent: serde_json::Value = serde_json::from_str(&rx.recv().expect("request captured"))
|
|
153
|
+
.expect("valid request JSON");
|
|
154
|
+
if kind == BackendKind::OpenAi {
|
|
155
|
+
assert_eq!(sent["max_completion_tokens"], 16384);
|
|
156
|
+
assert!(sent.get("max_tokens").is_none());
|
|
157
|
+
assert!(sent.get("temperature").is_none());
|
|
158
|
+
} else {
|
|
159
|
+
assert_eq!(sent["max_tokens"], 1024);
|
|
160
|
+
assert_eq!(sent["temperature"], 0);
|
|
161
|
+
assert!(sent.get("max_completion_tokens").is_none());
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
@@ -4,7 +4,7 @@ build-backend = "maturin"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "flowproof"
|
|
7
|
-
version = "0.23.
|
|
7
|
+
version = "0.23.3"
|
|
8
8
|
description = "Test that a bot only ever does the job it was given — and never deletes, sends or approves the thing it must not. Record it doing the job once, then replay on every commit with zero LLM calls. For the agents and RPA already running real work in production: web, desktop, SAP, Citrix."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = "Apache-2.0"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-adapters/src/egress_windows/capture.rs
RENAMED
|
File without changes
|
{flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-adapters/src/egress_windows/env_block.rs
RENAMED
|
File without changes
|
{flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-adapters/src/egress_windows/filters.rs
RENAMED
|
File without changes
|
{flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-adapters/src/egress_windows/identity.rs
RENAMED
|
File without changes
|
|
File without changes
|
{flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-adapters/src/egress_windows/netevents.rs
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-adapters/tests/shared_browser_shutdown_e2e.rs
RENAMED
|
File without changes
|
{flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-adapters/tests/side_effect_http_e2e.rs
RENAMED
|
File without changes
|
{flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-adapters/tests/windows_containment_e2e.rs
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-cli/tests/agent_conversation_anthropic_e2e.rs
RENAMED
|
File without changes
|
{flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-cli/tests/agent_conversation_streaming_e2e.rs
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-cli/tests/falsifiability_arg_matchers.rs
RENAMED
|
File without changes
|
{flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-cli/tests/falsifiability_audit_since.rs
RENAMED
|
File without changes
|
{flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-cli/tests/falsifiability_call_order.rs
RENAMED
|
File without changes
|
|
File without changes
|
{flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-cli/tests/falsifiability_control_verdict.rs
RENAMED
|
File without changes
|
|
File without changes
|
{flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-cli/tests/falsifiability_no_tool_call.rs
RENAMED
|
File without changes
|
{flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-cli/tests/falsifiability_reply_contains.rs
RENAMED
|
File without changes
|
{flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-cli/tests/falsifiability_side_effect.rs
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-cli/tests/select_missing_option_e2e.rs
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-trace/schema/side-effect-v1.schema.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-trace/tests/fixtures/multi.trace.jsonl
RENAMED
|
File without changes
|
{flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-trace/tests/fixtures/sample.trace.jsonl
RENAMED
|
File without changes
|
|
File without changes
|
{flowproof-0.23.2 → flowproof-0.23.3}/crates/flowproof-trace/tests/side_effect_conformance.rs
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|