flowproof 0.23.1__tar.gz → 0.23.2__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 (163) hide show
  1. {flowproof-0.23.1 → flowproof-0.23.2}/Cargo.lock +7 -7
  2. {flowproof-0.23.1 → flowproof-0.23.2}/Cargo.toml +1 -1
  3. {flowproof-0.23.1 → flowproof-0.23.2}/PKG-INFO +1 -1
  4. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-adapters/src/web.rs +46 -4
  5. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-cli/tests/web_e2e.rs +15 -2
  6. {flowproof-0.23.1 → flowproof-0.23.2}/flowproof/__init__.py +1 -1
  7. {flowproof-0.23.1 → flowproof-0.23.2}/pyproject.toml +1 -1
  8. {flowproof-0.23.1 → flowproof-0.23.2}/README.md +0 -0
  9. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-adapters/Cargo.toml +0 -0
  10. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-adapters/src/agent_proxy.rs +0 -0
  11. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-adapters/src/agent_runner.rs +0 -0
  12. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-adapters/src/egress.rs +0 -0
  13. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-adapters/src/egress_linux.rs +0 -0
  14. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-adapters/src/egress_windows/audit.rs +0 -0
  15. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-adapters/src/egress_windows/capture.rs +0 -0
  16. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-adapters/src/egress_windows/env_block.rs +0 -0
  17. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-adapters/src/egress_windows/filters.rs +0 -0
  18. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-adapters/src/egress_windows/identity.rs +0 -0
  19. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-adapters/src/egress_windows/logon.rs +0 -0
  20. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-adapters/src/egress_windows/netevents.rs +0 -0
  21. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-adapters/src/egress_windows/run.rs +0 -0
  22. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-adapters/src/egress_windows/spawn.rs +0 -0
  23. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-adapters/src/egress_windows/wfp.rs +0 -0
  24. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-adapters/src/egress_windows.rs +0 -0
  25. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-adapters/src/fiori.rs +0 -0
  26. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-adapters/src/fs_observe.rs +0 -0
  27. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-adapters/src/lib.rs +0 -0
  28. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-adapters/src/mcp_core.rs +0 -0
  29. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-adapters/src/mcp_http.rs +0 -0
  30. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-adapters/src/mcp_stdio.rs +0 -0
  31. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-adapters/src/sap_com.rs +0 -0
  32. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-adapters/src/vision.rs +0 -0
  33. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-adapters/tests/a11y_capture.rs +0 -0
  34. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-adapters/tests/drag_spike.rs +0 -0
  35. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-adapters/tests/fs_observation_e2e.rs +0 -0
  36. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-adapters/tests/network_idle_e2e.rs +0 -0
  37. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-adapters/tests/shared_browser_shutdown_e2e.rs +0 -0
  38. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-adapters/tests/side_effect_http_e2e.rs +0 -0
  39. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-adapters/tests/static_area_e2e.rs +0 -0
  40. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-adapters/tests/windows_containment_e2e.rs +0 -0
  41. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-agent/Cargo.toml +0 -0
  42. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-agent/src/agent_steps.rs +0 -0
  43. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-agent/src/author.rs +0 -0
  44. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-agent/src/clarify.rs +0 -0
  45. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-agent/src/doc_author.rs +0 -0
  46. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-agent/src/doc_formats/hp_alm.rs +0 -0
  47. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-agent/src/doc_formats.rs +0 -0
  48. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-agent/src/draft_assembly.rs +0 -0
  49. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-agent/src/heal.rs +0 -0
  50. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-agent/src/lib.rs +0 -0
  51. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-agent/src/llm.rs +0 -0
  52. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-agent/src/recorder.rs +0 -0
  53. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-agent/src/repair.rs +0 -0
  54. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-agent/src/rules.rs +0 -0
  55. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-agent/src/spec.rs +0 -0
  56. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-agent/tests/model_client_http.rs +0 -0
  57. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-cli/Cargo.toml +0 -0
  58. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-cli/skills/flowproof-config/SKILL.md +0 -0
  59. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-cli/src/agent_flow.rs +0 -0
  60. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-cli/src/capture.rs +0 -0
  61. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-cli/src/config.rs +0 -0
  62. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-cli/src/doctor.rs +0 -0
  63. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-cli/src/lib.rs +0 -0
  64. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-cli/src/main.rs +0 -0
  65. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-cli/src/suite.rs +0 -0
  66. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-cli/src/suite_checkpoint.rs +0 -0
  67. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-cli/src/suite_inputs.rs +0 -0
  68. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-cli/src/suite_journal.rs +0 -0
  69. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-cli/src/update_check.rs +0 -0
  70. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-cli/tests/a11y_selector_e2e.rs +0 -0
  71. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-cli/tests/agent_conversation_anthropic_e2e.rs +0 -0
  72. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-cli/tests/agent_conversation_streaming_e2e.rs +0 -0
  73. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-cli/tests/agent_flow_e2e.rs +0 -0
  74. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-cli/tests/agent_url_record_e2e.rs +0 -0
  75. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-cli/tests/api_pipeline.rs +0 -0
  76. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-cli/tests/audit_record_e2e.rs +0 -0
  77. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-cli/tests/calc_e2e.rs +0 -0
  78. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-cli/tests/clock_e2e.rs +0 -0
  79. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-cli/tests/config_cli_e2e.rs +0 -0
  80. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-cli/tests/config_seed_e2e.rs +0 -0
  81. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-cli/tests/config_skill_e2e.rs +0 -0
  82. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-cli/tests/cookie_e2e.rs +0 -0
  83. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-cli/tests/doctor_ai_e2e.rs +0 -0
  84. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-cli/tests/doctor_e2e.rs +0 -0
  85. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-cli/tests/documented_flags.rs +0 -0
  86. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-cli/tests/egress_e2e.rs +0 -0
  87. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-cli/tests/examples_resolve.rs +0 -0
  88. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-cli/tests/falsifiability_arg_matchers.rs +0 -0
  89. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-cli/tests/falsifiability_audit_since.rs +0 -0
  90. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-cli/tests/falsifiability_call_order.rs +0 -0
  91. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-cli/tests/falsifiability_capability_regression.rs +0 -0
  92. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-cli/tests/falsifiability_control_verdict.rs +0 -0
  93. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-cli/tests/falsifiability_mcp_kill.rs +0 -0
  94. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-cli/tests/falsifiability_no_tool_call.rs +0 -0
  95. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-cli/tests/falsifiability_reply_contains.rs +0 -0
  96. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-cli/tests/falsifiability_side_effect.rs +0 -0
  97. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-cli/tests/fiori_field_commit_e2e.rs +0 -0
  98. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-cli/tests/grid_cell_e2e.rs +0 -0
  99. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-cli/tests/iframe_e2e.rs +0 -0
  100. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-cli/tests/llm_author_e2e.rs +0 -0
  101. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-cli/tests/mcp_http_e2e.rs +0 -0
  102. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-cli/tests/mcp_stdio_e2e.rs +0 -0
  103. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-cli/tests/notepad_author_e2e.rs +0 -0
  104. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-cli/tests/notepad_e2e.rs +0 -0
  105. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-cli/tests/page_title_e2e.rs +0 -0
  106. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-cli/tests/pinned_random_e2e.rs +0 -0
  107. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-cli/tests/sap_e2e.rs +0 -0
  108. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-cli/tests/sap_pipeline.rs +0 -0
  109. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-cli/tests/sap_sim_e2e.rs +0 -0
  110. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-cli/tests/scoped_container_e2e.rs +0 -0
  111. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-cli/tests/select_missing_option_e2e.rs +0 -0
  112. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-cli/tests/skip_unless_env.rs +0 -0
  113. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-cli/tests/suite_checkpoint.rs +0 -0
  114. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-cli/tests/suite_env_from.rs +0 -0
  115. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-cli/tests/suite_flow_isolation.rs +0 -0
  116. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-cli/tests/suite_missing_trace.rs +0 -0
  117. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-cli/tests/suite_policy.rs +0 -0
  118. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-cli/tests/support/sap_simulator.py +0 -0
  119. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-cli/tests/visibility_e2e.rs +0 -0
  120. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-cli/tests/vision_pipeline.rs +0 -0
  121. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-driver/Cargo.toml +0 -0
  122. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-driver/src/app.rs +0 -0
  123. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-driver/src/backend.rs +0 -0
  124. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-driver/src/gdi.rs +0 -0
  125. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-driver/src/lib.rs +0 -0
  126. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-driver/src/mock.rs +0 -0
  127. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-driver/src/oob.rs +0 -0
  128. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-driver/src/recording.rs +0 -0
  129. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-driver/src/redact.rs +0 -0
  130. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-driver/src/surface.rs +0 -0
  131. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-driver/src/visual.rs +0 -0
  132. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-driver/src/window.rs +0 -0
  133. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-python/Cargo.toml +0 -0
  134. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-python/src/lib.rs +0 -0
  135. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-replay/Cargo.toml +0 -0
  136. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-replay/src/lib.rs +0 -0
  137. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-replay/src/report.rs +0 -0
  138. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-replay/src/runrecord.rs +0 -0
  139. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-replay/tests/replay_calc.rs +0 -0
  140. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-trace/Cargo.toml +0 -0
  141. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-trace/schema/cassette-v1.schema.json +0 -0
  142. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-trace/schema/side-effect-v1.schema.json +0 -0
  143. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-trace/schema/trace-v1.schema.json +0 -0
  144. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-trace/src/captures.rs +0 -0
  145. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-trace/src/cassette.rs +0 -0
  146. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-trace/src/cassette_diff.rs +0 -0
  147. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-trace/src/egress.rs +0 -0
  148. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-trace/src/format.rs +0 -0
  149. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-trace/src/lib.rs +0 -0
  150. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-trace/src/secret.rs +0 -0
  151. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-trace/src/secret_scan.rs +0 -0
  152. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-trace/src/side_effect.rs +0 -0
  153. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-trace/src/substitution.rs +0 -0
  154. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-trace/src/toolcalls.rs +0 -0
  155. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-trace/tests/cassette_conformance.rs +0 -0
  156. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-trace/tests/fixtures/multi.trace.jsonl +0 -0
  157. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-trace/tests/fixtures/sample.trace.jsonl +0 -0
  158. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-trace/tests/schema_conformance.rs +0 -0
  159. {flowproof-0.23.1 → flowproof-0.23.2}/crates/flowproof-trace/tests/side_effect_conformance.rs +0 -0
  160. {flowproof-0.23.1 → flowproof-0.23.2}/flowproof/cli.py +0 -0
  161. {flowproof-0.23.1 → flowproof-0.23.2}/flowproof/flow.py +0 -0
  162. {flowproof-0.23.1 → flowproof-0.23.2}/flowproof/mcp_server.py +0 -0
  163. {flowproof-0.23.1 → flowproof-0.23.2}/flowproof/py.typed +0 -0
@@ -930,7 +930,7 @@ dependencies = [
930
930
 
931
931
  [[package]]
932
932
  name = "flowproof-adapters"
933
- version = "0.23.1"
933
+ version = "0.23.2"
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.1"
952
+ version = "0.23.2"
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.1"
970
+ version = "0.23.2"
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.1"
995
+ version = "0.23.2"
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.1"
1011
+ version = "0.23.2"
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.1"
1023
+ version = "0.23.2"
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.1"
1037
+ version = "0.23.2"
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.1"
25
+ version = "0.23.2"
26
26
  edition = "2021"
27
27
  license = "Apache-2.0"
28
28
  repository = "https://github.com/automators-com/flowproof"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: flowproof
3
- Version: 0.23.1
3
+ Version: 0.23.2
4
4
  Classifier: Development Status :: 3 - Alpha
5
5
  Classifier: Intended Audience :: Developers
6
6
  Classifier: Programming Language :: Python :: 3
@@ -133,6 +133,15 @@ fn scroll_element_into_view(element: &headless_chrome::Element<'_>) -> anyhow::R
133
133
  anyhow::bail!("SAP grid cell did not enter the viewport after scrolling")
134
134
  }
135
135
 
136
+ /// Element::click performs its own native scroll, even after an actionability
137
+ /// check. Keep all click paths (including the click before typing) on the same
138
+ /// scrollbar-aware path as double-click and explicit scrolling.
139
+ fn click_element(element: &headless_chrome::Element<'_>) -> anyhow::Result<()> {
140
+ scroll_element_into_view(element)?;
141
+ element.parent.click_point(element.get_midpoint()?)?;
142
+ Ok(())
143
+ }
144
+
136
145
  /// Read a checkbox-like control's state from an element that may be the
137
146
  /// control itself OR a wrapper around it. Covers the three shapes real apps
138
147
  /// use: a native `input[type=checkbox|radio]`, an ARIA widget carrying
@@ -3188,7 +3197,7 @@ impl AppDriver for WebAppDriver {
3188
3197
  // and clicking a zero-sized input does nothing - so the helper
3189
3198
  // hands back whichever ancestor is actually clickable.
3190
3199
  self.with_element(&locator, &format!("clicking [{selector}]"), |element| {
3191
- element.click().map(|_| ())
3200
+ click_element(element)
3192
3201
  })?;
3193
3202
  }
3194
3203
  // Verify it took: a click that lands on a disabled or intercepted
@@ -3586,11 +3595,34 @@ impl AppDriver for WebAppDriver {
3586
3595
  match to {
3587
3596
  // Bring an in-DOM element into the viewport.
3588
3597
  ScrollTo::IntoView => {
3598
+ let sap = self
3599
+ .tab()?
3600
+ .evaluate(
3601
+ "!!document.querySelector('#webguiPage0, #webguiform0')",
3602
+ false,
3603
+ )
3604
+ .map_err(|e| web_err("checking the scroll surface", e))?
3605
+ .value
3606
+ .and_then(|v| v.as_bool())
3607
+ .unwrap_or(false);
3608
+ if sap {
3609
+ self.scene()?;
3610
+ }
3611
+ self.with_element(
3612
+ &locator,
3613
+ "scrolling the target",
3614
+ scroll_element_into_view,
3615
+ )?;
3616
+ // SAP may replace the table after scrolling/validation.
3617
+ // Settle that response and inspect a freshly resolved
3618
+ // element, not the detached pre-scroll handle.
3619
+ if sap {
3620
+ self.scene()?;
3621
+ }
3589
3622
  let value = self.with_element(
3590
3623
  &locator,
3591
3624
  &format!("scrolling [{sel}] into view"),
3592
3625
  |element| {
3593
- scroll_element_into_view(element)?;
3594
3626
  element.call_js_fn(
3595
3627
  r#"function() {
3596
3628
  const r = this.getBoundingClientRect();
@@ -3872,7 +3904,7 @@ impl AppDriver for WebAppDriver {
3872
3904
  }
3873
3905
  let locator = Self::locator(selector)?;
3874
3906
  self.with_element(&locator, &format!("clicking [{selector}]"), |element| {
3875
- element.click().map(|_| ())
3907
+ click_element(element)
3876
3908
  })
3877
3909
  }
3878
3910
 
@@ -4354,6 +4386,12 @@ impl AppDriver for WebAppDriver {
4354
4386
  value, then by visible text; nothing was selected"
4355
4387
  )));
4356
4388
  }
4389
+ if status == "sap_input" {
4390
+ // Focusing a WebGUI editor can replace it asynchronously. Finish
4391
+ // that transition before selecting/typing, then resolve it again.
4392
+ self.with_element(&locator, "focusing the SAP editor", click_element)?;
4393
+ self.scene()?;
4394
+ }
4357
4395
  self.with_element(&locator, &format!("typing into [{selector}]"), |element| {
4358
4396
  // Select what the field holds before the keystrokes land: typing
4359
4397
  // over a selection replaces, so the field ends up reading `text`
@@ -4369,7 +4407,11 @@ impl AppDriver for WebAppDriver {
4369
4407
  // `type_into`, which clicks again and would collapse the
4370
4408
  // selection back to a caret - the keystrokes would append, which
4371
4409
  // is the accident this contract removes.
4372
- element.click()?;
4410
+ if status == "sap_input" {
4411
+ element.call_js_fn("function() { this.focus(); }", vec![], false)?;
4412
+ } else {
4413
+ click_element(element)?;
4414
+ }
4373
4415
  element
4374
4416
  .call_js_fn(
4375
4417
  r#"function() {
@@ -3112,6 +3112,7 @@ fn top_level_sap_fields_commit_before_recording_and_replay_continue() {
3112
3112
  onkeydown="if(event.key==='Enter') document.getElementById('command').textContent='Command invoked'">
3113
3113
  <div id="command"></div>
3114
3114
  <label for="plant">Plant</label><input id="plant" value="OLD"
3115
+ onfocus="if(!window.replaced){window.replaced=true;setTimeout(()=>{const fresh=this.cloneNode(true);fresh.value='OLD';this.replaceWith(fresh);fresh.focus()},25)}"
3115
3116
  onkeydown="if(event.key==='Enter') document.getElementById('validation').textContent='Plant validated'"
3116
3117
  onblur="document.getElementById('accepted').textContent='Committed plant: '+this.value">
3117
3118
  <div id="validation"></div>
@@ -3214,7 +3215,9 @@ fn sap_grid_scrolls_through_its_scrollbar_and_edits_both_ends() {
3214
3215
  <div id="items_hscroll-bar" style="position:relative;width:240px;height:20px;background:#ddd">
3215
3216
  <div id="items_hscroll-hdl" style="position:absolute;left:0;top:0;width:48px;height:20px;background:#777"></div>
3216
3217
  </div><button>Next</button>
3218
+ <button onclick="replaceAfterScroll=true">Refresh on next scroll</button>
3217
3219
  </div><script>
3220
+ let replaceAfterScroll=false;
3218
3221
  const pane=document.getElementById('items-mrss-cont-none'),thumb=document.getElementById('items_hscroll-hdl');
3219
3222
  let start=null,offset=0;
3220
3223
  thumb.onmousedown=e=>{start={x:e.clientX,offset};e.preventDefault()};
@@ -3225,12 +3228,18 @@ fn sap_grid_scrolls_through_its_scrollbar_and_edits_both_ends() {
3225
3228
  document.getElementById('shift').style.left=(-offset)+'px';
3226
3229
  document.getElementById('header').style.left=(-offset)+'px';
3227
3230
  });
3228
- window.addEventListener('mouseup',()=>start=null);
3231
+ window.addEventListener('mouseup',()=>{
3232
+ const dragged=!!start;start=null;
3233
+ if(dragged && replaceAfterScroll){
3234
+ replaceAfterScroll=false;
3235
+ setTimeout(()=>pane.replaceWith(pane.cloneNode(true)),10);
3236
+ }
3237
+ });
3229
3238
  function edit(cell,id,label){
3230
3239
  // Native scrollIntoView moves the clipped body, not the grid's model.
3231
3240
  // Such a click cannot activate the intended editor.
3232
3241
  if(pane.scrollLeft!==0)return;
3233
- if(!document.getElementById(id))cell.innerHTML='<label for="'+id+'">'+label+'</label><input id="'+id+'" style="width:80px">';
3242
+ if(!document.getElementById(id))cell.innerHTML='<label for="'+id+'">'+label+'</label><input id="'+id+'" style="width:200px" oninput="if(pane.scrollLeft!==0)this.value=String()">';
3234
3243
  }
3235
3244
  </script>"#).expect("parse or write browser fixture");
3236
3245
  let spec = FlowSpec::parse(&format!(
@@ -3244,7 +3253,11 @@ steps:
3244
3253
  - Double-click "css:#material-cell"
3245
3254
  - Type 3306 into the "Material" field
3246
3255
  - assert: the "Material" field contains 3306
3256
+ - Click "Plant"
3247
3257
  - assert: the "Plant" field contains 1010
3258
+ - Click "Refresh on next scroll"
3259
+ - Scroll "css:#material-cell" into view
3260
+ - assert: the "Material" field contains 3306
3248
3261
  "#,
3249
3262
  page.display()
3250
3263
  ))
@@ -24,7 +24,7 @@ from flowproof.flow import (
24
24
  run,
25
25
  )
26
26
 
27
- __version__ = "0.23.1"
27
+ __version__ = "0.23.2"
28
28
 
29
29
  __all__ = [
30
30
  "ClarificationNeeded",
@@ -4,7 +4,7 @@ build-backend = "maturin"
4
4
 
5
5
  [project]
6
6
  name = "flowproof"
7
- version = "0.23.1"
7
+ version = "0.23.2"
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