benchflow 0.7.7.dev2316__tar.gz → 0.7.8__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 (796) hide show
  1. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/CHANGELOG.md +63 -0
  2. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/PKG-INFO +1 -1
  3. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/pyproject.toml +1 -1
  4. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/__init__.py +2 -0
  5. benchflow-0.7.8/src/benchflow/_utils/config_redaction.py +55 -0
  6. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/_utils/evaluation_results.py +6 -0
  7. benchflow-0.7.8/src/benchflow/_utils/result_paths.py +74 -0
  8. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/_utils/scoring.py +71 -3
  9. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/_utils/yaml_loader.py +2 -0
  10. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/acp/client.py +5 -0
  11. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/acp/runtime.py +32 -5
  12. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/acp/session.py +26 -0
  13. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/agents/credentials.py +50 -1
  14. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/cli/_live_progress.py +3 -6
  15. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/cli/eval_artifacts.py +1 -0
  16. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/cli/main.py +53 -0
  17. benchflow-0.7.8/src/benchflow/cli/rescore.py +116 -0
  18. benchflow-0.7.8/src/benchflow/cli/reviewer_options.py +62 -0
  19. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/contracts/planes.py +1 -0
  20. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/eval_artifacts.py +5 -3
  21. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/eval_lift.py +12 -5
  22. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/eval_plan.py +7 -0
  23. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/eval_sharding.py +16 -1
  24. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/eval_worker.py +2 -0
  25. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/evaluation.py +55 -83
  26. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/metrics.py +16 -19
  27. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/models.py +26 -0
  28. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/review/__init__.py +49 -15
  29. benchflow-0.7.8/src/benchflow/review/automatic.py +226 -0
  30. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/review/config.py +27 -13
  31. benchflow-0.7.8/src/benchflow/review/evidence.py +735 -0
  32. benchflow-0.7.8/src/benchflow/review/evidence_runtime.py +49 -0
  33. benchflow-0.7.8/src/benchflow/review/options.py +83 -0
  34. benchflow-0.7.8/src/benchflow/review/outcome.py +175 -0
  35. benchflow-0.7.8/src/benchflow/review/persistence.py +215 -0
  36. benchflow-0.7.8/src/benchflow/review/preflight.py +53 -0
  37. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/review/prompts.py +18 -3
  38. benchflow-0.7.8/src/benchflow/review/resume.py +174 -0
  39. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/review/runner.py +142 -67
  40. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/review/wrapper.py +80 -12
  41. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/rollout/__init__.py +57 -3
  42. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/rollout/_config.py +8 -1
  43. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/rollout/_results.py +55 -51
  44. benchflow-0.7.8/src/benchflow/rollout/_review.py +112 -0
  45. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/rollout/task_runtime.py +14 -7
  46. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/rollout_planes.py +5 -0
  47. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/runtime.py +11 -0
  48. benchflow-0.7.8/src/benchflow/sandbox/_egress_denylist_proxy.py +914 -0
  49. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/sandbox/agentcore.py +98 -10
  50. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/sandbox/egress_denylist.py +33 -9
  51. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/sandbox/lockdown.py +4 -1
  52. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/sandbox/protocol.py +10 -0
  53. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/sdk.py +3 -0
  54. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/trajectories/_capture.py +19 -13
  55. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/trajectories/_llm_capture.py +5 -1
  56. benchflow-0.7.8/src/benchflow/trajectories/_snapshot.py +39 -0
  57. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/trajectories/export_prime_sft.py +8 -3
  58. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/trajectories/export_trl_sft.py +1 -0
  59. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/trajectories/results.py +17 -1
  60. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/trajectories/types.py +3 -2
  61. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/trajectories/viewer/assets/boot.js +1 -0
  62. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/trajectories/viewer/assets/detail.js +78 -4
  63. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/trajectories/viewer/assets/template.html +14 -0
  64. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/trajectories/viewer/assets/theme.css +30 -0
  65. benchflow-0.7.8/src/benchflow/trajectories/viewer/assets/theme.js +103 -0
  66. benchflow-0.7.8/src/benchflow/trajectories/viewer/assets/vendor/LICENSE.highlight.js +29 -0
  67. benchflow-0.7.8/src/benchflow/trajectories/viewer/assets/vendor/highlight.min.js +1213 -0
  68. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/trajectories/viewer/assets/viewer.css +22 -0
  69. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/trajectories/viewer/models.py +48 -0
  70. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/trajectories/viewer/payload.py +127 -1
  71. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/trajectories/viewer/render.py +10 -1
  72. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/trajectories/viewer/sources.py +9 -0
  73. benchflow-0.7.8/tests/test_acp_buffered_timeout.py +122 -0
  74. benchflow-0.7.8/tests/test_agent_egress_firewall.py +80 -0
  75. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_agentcore_parallel.py +155 -0
  76. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_agentcore_sandbox.py +101 -0
  77. benchflow-0.7.8/tests/test_automatic_review_scoring.py +299 -0
  78. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_cli_live_progress.py +3 -1
  79. benchflow-0.7.8/tests/test_egress_connect_authority.py +417 -0
  80. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_egress_denylist.py +13 -3
  81. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_egress_denylist_integration.py +61 -4
  82. benchflow-0.7.8/tests/test_egress_dynamic_certs.py +115 -0
  83. benchflow-0.7.8/tests/test_redacted_snapshot.py +222 -0
  84. benchflow-0.7.8/tests/test_review_automatic.py +380 -0
  85. benchflow-0.7.8/tests/test_review_evidence.py +591 -0
  86. benchflow-0.7.8/tests/test_review_evidence_runtime.py +107 -0
  87. benchflow-0.7.8/tests/test_review_lifecycle.py +126 -0
  88. benchflow-0.7.8/tests/test_review_resume.py +393 -0
  89. benchflow-0.7.8/tests/test_review_runtime_automatic.py +300 -0
  90. benchflow-0.7.8/tests/test_review_snapshot.py +102 -0
  91. benchflow-0.7.8/tests/test_reviewer_options.py +425 -0
  92. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_task_runtime_primitive.py +38 -0
  93. benchflow-0.7.8/tests/test_tool_call_raw_io.py +175 -0
  94. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/trajectories/test_redaction.py +13 -0
  95. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/trajectories/test_viewer_acp_renderer.py +5 -1
  96. benchflow-0.7.8/tests/trajectories/test_viewer_rubric.py +227 -0
  97. benchflow-0.7.8/tests/trajectories/test_viewer_theme.py +59 -0
  98. benchflow-0.7.7.dev2316/src/benchflow/sandbox/_egress_denylist_proxy.py +0 -520
  99. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/.gitignore +0 -0
  100. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/LICENSE +0 -0
  101. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/README.md +0 -0
  102. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/_dotenv.py +0 -0
  103. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/_paths.py +0 -0
  104. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/_run.py +0 -0
  105. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/_types.py +0 -0
  106. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/_utils/__init__.py +0 -0
  107. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/_utils/benchmark_repos.py +0 -0
  108. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/_utils/build_context_stage.py +0 -0
  109. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/_utils/config.py +0 -0
  110. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/_utils/config_override.py +0 -0
  111. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/_utils/content_address.py +0 -0
  112. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/_utils/dataset_registry.py +0 -0
  113. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/_utils/env_registry.py +0 -0
  114. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/_utils/hf_datasets.py +0 -0
  115. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/_utils/json_safe.py +0 -0
  116. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/_utils/learner_memory.py +0 -0
  117. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/_utils/live_activity.py +0 -0
  118. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/_utils/result_metadata.py +0 -0
  119. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/_utils/reward_events.py +0 -0
  120. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/_utils/source_provenance.py +0 -0
  121. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/_utils/task_authoring/__init__.py +0 -0
  122. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/_utils/task_authoring/_evidence_paths.py +0 -0
  123. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/_utils/task_authoring/acceptance_evidence.py +0 -0
  124. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/_utils/task_authoring/scaffolding.py +0 -0
  125. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/_utils/task_authoring/structural_checks.py +0 -0
  126. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/_utils/text.py +0 -0
  127. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/acp/__init__.py +0 -0
  128. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/acp/container_transport.py +0 -0
  129. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/acp/selection.py +0 -0
  130. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/acp/timeout_cleanup.py +0 -0
  131. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/acp/transport.py +0 -0
  132. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/acp/types.py +0 -0
  133. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/acp/watchdog.py +0 -0
  134. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/adapters/__init__.py +0 -0
  135. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/adapters/_toolathlon.py +0 -0
  136. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/adapters/_toolathlon_container.py +0 -0
  137. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/adapters/_toolathlon_fake_mail.py +0 -0
  138. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/adapters/_toolathlon_poste_users.tsv +0 -0
  139. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/adapters/_toolathlon_services.py +0 -0
  140. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/adapters/harbor.py +0 -0
  141. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/adapters/inbound.py +0 -0
  142. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/adapters/inspect_ai.py +0 -0
  143. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/adapters/ors.py +0 -0
  144. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/adapters/resources/__init__.py +0 -0
  145. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/adapters/resources/mcp_atlas_bridge.py +0 -0
  146. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/adapters/resources/mcp_atlas_judge.py +0 -0
  147. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/adapters/source.py +0 -0
  148. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/agent_router.py +0 -0
  149. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/agent_router_guide.py +0 -0
  150. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/agent_router_parity.py +0 -0
  151. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/agent_router_scaffold.py +0 -0
  152. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/agents/__init__.py +0 -0
  153. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/agents/codex_config.py +0 -0
  154. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/agents/deepagents_acp_shim.py +0 -0
  155. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/agents/env.py +0 -0
  156. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/agents/errors.py +0 -0
  157. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/agents/harvey_lab_acp_shim.py +0 -0
  158. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/agents/install.py +0 -0
  159. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/agents/manifest.py +0 -0
  160. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/agents/openclaw_acp_shim.py +0 -0
  161. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/agents/pi_acp_launcher.py +0 -0
  162. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/agents/protocol.py +0 -0
  163. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/agents/providers.py +0 -0
  164. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/agents/registry.py +0 -0
  165. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/agents/remote_manifests.py +0 -0
  166. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/branch.py +0 -0
  167. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/cli/__init__.py +0 -0
  168. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/cli/_failure_evidence.py +0 -0
  169. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/cli/_hosted_env.py +0 -0
  170. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/cli/_options.py +0 -0
  171. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/cli/_shared.py +0 -0
  172. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/cli/_traj_tui.py +0 -0
  173. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/cli/_traj_upload_ui.py +0 -0
  174. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/cli/adopt.py +0 -0
  175. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/cli/agent.py +0 -0
  176. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/cli/continue_cmd.py +0 -0
  177. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/cli/environment.py +0 -0
  178. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/cli/eval_lift.py +0 -0
  179. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/cli/hub.py +0 -0
  180. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/cli/monitor.py +0 -0
  181. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/cli/review.py +0 -0
  182. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/cli/sandbox.py +0 -0
  183. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/cli/skills.py +0 -0
  184. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/cli/tasks.py +0 -0
  185. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/cli/trace_import.py +0 -0
  186. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/cli/train.py +0 -0
  187. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/cli/traj.py +0 -0
  188. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/continue_run/__init__.py +0 -0
  189. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/continue_run/batch.py +0 -0
  190. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/continue_run/orchestrator.py +0 -0
  191. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/continue_run/replay_proxy.py +0 -0
  192. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/continue_run/run_folder.py +0 -0
  193. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/continue_run/sandbox_proxy.py +0 -0
  194. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/contracts/__init__.py +0 -0
  195. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/contracts/user.py +0 -0
  196. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/demo_task/environment/Dockerfile +0 -0
  197. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/demo_task/instruction.md +0 -0
  198. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/demo_task/task.md +0 -0
  199. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/demo_task/task.toml +0 -0
  200. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/demo_task/tests/test.sh +0 -0
  201. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/diagnostics.py +0 -0
  202. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/environment/__init__.py +0 -0
  203. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/environment/_registry/env0@outage.toml +0 -0
  204. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/environment/_registry/env0@prod.toml +0 -0
  205. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/environment/manifest.py +0 -0
  206. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/environment/manifest_env.py +0 -0
  207. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/environment/protocol.py +0 -0
  208. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/environment/readiness.py +0 -0
  209. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/experimental/__init__.py +0 -0
  210. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/experimental/mcp/__init__.py +0 -0
  211. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/experimental/mcp/hooks.py +0 -0
  212. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/experimental/mcp/reviewer_server.py +0 -0
  213. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/hosted_env.py +0 -0
  214. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/hub/__init__.py +0 -0
  215. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/hub/harbor_registry.py +0 -0
  216. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/integrations/__init__.py +0 -0
  217. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/integrations/trl/__init__.py +0 -0
  218. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/integrations/trl/spec.py +0 -0
  219. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/learner_skills.py +0 -0
  220. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/learner_store.py +0 -0
  221. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/loop_strategies.py +0 -0
  222. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/loop_sweep.py +0 -0
  223. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/monitor.py +0 -0
  224. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/providers/__init__.py +0 -0
  225. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/providers/litellm_bedrock_patch.py +0 -0
  226. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/providers/litellm_bedrock_preflight.py +0 -0
  227. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/providers/litellm_config.py +0 -0
  228. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/providers/litellm_gemini_passthrough_patch.py +0 -0
  229. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/providers/litellm_logging.py +0 -0
  230. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/providers/litellm_runtime.py +0 -0
  231. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/providers/runtime.py +0 -0
  232. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/publish/__init__.py +0 -0
  233. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/publish/_progress.py +0 -0
  234. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/publish/azure_blob.py +0 -0
  235. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/publish/broker.py +0 -0
  236. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/publish/huggingface.py +0 -0
  237. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/publish/redact.py +0 -0
  238. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/publish/traj_capture.py +0 -0
  239. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/publish/traj_report.py +0 -0
  240. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/py.typed +0 -0
  241. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/review/default-rubric.json +0 -0
  242. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/review/scoring.py +0 -0
  243. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/rewards/README.md +0 -0
  244. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/rewards/__init__.py +0 -0
  245. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/rewards/builtins.py +0 -0
  246. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/rewards/events.py +0 -0
  247. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/rewards/file_readers.py +0 -0
  248. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/rewards/llm.py +0 -0
  249. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/rewards/memory_scorer.py +0 -0
  250. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/rewards/node.py +0 -0
  251. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/rewards/protocol.py +0 -0
  252. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/rewards/rubric.py +0 -0
  253. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/rewards/rubric_config.py +0 -0
  254. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/rewards/validation.py +0 -0
  255. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/rollout/_deadline.py +0 -0
  256. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/rollout/_setup.py +0 -0
  257. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/rollout/_skills.py +0 -0
  258. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/rollout/_usage.py +0 -0
  259. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/rollout/_user_loop.py +0 -0
  260. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/rollout/session_factory_runtime.py +0 -0
  261. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/rollout_branch.py +0 -0
  262. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/sandbox/__init__.py +0 -0
  263. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/sandbox/_base.py +0 -0
  264. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/sandbox/_cache_reclaim.py +0 -0
  265. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/sandbox/_compose.py +0 -0
  266. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/sandbox/_compose_files/docker-compose-base.yaml +0 -0
  267. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/sandbox/_compose_files/docker-compose-build.yaml +0 -0
  268. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/sandbox/_compose_files/docker-compose-net-admin.yaml +0 -0
  269. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/sandbox/_compose_files/docker-compose-no-network.yaml +0 -0
  270. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/sandbox/_compose_files/docker-compose-prebuilt.yaml +0 -0
  271. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/sandbox/_sdk_ops.py +0 -0
  272. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/sandbox/agentcore_builder.py +0 -0
  273. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/sandbox/agentcore_image.py +0 -0
  274. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/sandbox/agentcore_provisioning.py +0 -0
  275. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/sandbox/agentcore_reaper.py +0 -0
  276. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/sandbox/agentcore_sealed.py +0 -0
  277. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/sandbox/apple_container.py +0 -0
  278. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/sandbox/daytona.py +0 -0
  279. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/sandbox/daytona_dind.py +0 -0
  280. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/sandbox/daytona_pty.py +0 -0
  281. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/sandbox/daytona_reaper.py +0 -0
  282. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/sandbox/daytona_strategies.py +0 -0
  283. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/sandbox/docker.py +0 -0
  284. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/sandbox/metadata.py +0 -0
  285. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/sandbox/modal_impl.py +0 -0
  286. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/sandbox/process/__init__.py +0 -0
  287. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/sandbox/process/_base.py +0 -0
  288. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/sandbox/process/agentcore.py +0 -0
  289. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/sandbox/process/apple.py +0 -0
  290. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/sandbox/process/daytona.py +0 -0
  291. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/sandbox/process/docker.py +0 -0
  292. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/sandbox/providers.py +0 -0
  293. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/sandbox/services.py +0 -0
  294. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/sandbox/setup.py +0 -0
  295. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/sandbox/snapshot.py +0 -0
  296. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/sandbox/user.py +0 -0
  297. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/scenes.py +0 -0
  298. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/self_gen.py +0 -0
  299. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/skill_eval/__init__.py +0 -0
  300. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/skill_eval/_core.py +0 -0
  301. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/skill_eval/gepa_export.py +0 -0
  302. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/skill_eval/schema.py +0 -0
  303. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/skill_policy.py +0 -0
  304. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/skills.py +0 -0
  305. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/task/__init__.py +0 -0
  306. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/task/_document_evidence.py +0 -0
  307. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/task/_document_normalize.py +0 -0
  308. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/task/_document_parse.py +0 -0
  309. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/task/_document_profiles.py +0 -0
  310. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/task/acceptance_live.py +0 -0
  311. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/task/acceptance_live_model.py +0 -0
  312. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/task/acceptance_live_report.py +0 -0
  313. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/task/acceptance_live_validation.py +0 -0
  314. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/task/config.py +0 -0
  315. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/task/discovery.py +0 -0
  316. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/task/document.py +0 -0
  317. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/task/env.py +0 -0
  318. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/task/export.py +0 -0
  319. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/task/imports.py +0 -0
  320. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/task/output_format.py +0 -0
  321. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/task/package.py +0 -0
  322. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/task/paths.py +0 -0
  323. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/task/prompts.py +0 -0
  324. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/task/runtime_capabilities.py +0 -0
  325. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/task/runtime_view.py +0 -0
  326. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/task/task.py +0 -0
  327. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/task/verifier.py +0 -0
  328. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/task/verifier_core.py +0 -0
  329. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/task/verifier_document.py +0 -0
  330. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/task/verifier_errors.py +0 -0
  331. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/task/verifier_judge_inputs.py +0 -0
  332. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/task/verifier_ors_episode.py +0 -0
  333. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/task/verifier_reward_kit.py +0 -0
  334. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/task/verifier_scan.py +0 -0
  335. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/task/verifier_script_strategy.py +0 -0
  336. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/templates/__init__.py +0 -0
  337. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/templates/judge.py.tmpl +0 -0
  338. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/templates/test.sh.tmpl +0 -0
  339. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/traces/__init__.py +0 -0
  340. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/traces/huggingface.py +0 -0
  341. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/traces/local.py +0 -0
  342. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/traces/models.py +0 -0
  343. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/traces/parsers.py +0 -0
  344. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/traces/task_gen.py +0 -0
  345. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/training/__init__.py +0 -0
  346. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/training/backends/__init__.py +0 -0
  347. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/training/backends/prime_rl.py +0 -0
  348. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/training/run_manifest.py +0 -0
  349. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/trajectories/__init__.py +0 -0
  350. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/trajectories/_export_common.py +0 -0
  351. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/trajectories/call_purpose.py +0 -0
  352. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/trajectories/export.py +0 -0
  353. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/trajectories/export_adp.py +0 -0
  354. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/trajectories/export_atif.py +0 -0
  355. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/trajectories/metrics.py +0 -0
  356. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/trajectories/sessions.py +0 -0
  357. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/trajectories/tree.py +0 -0
  358. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/trajectories/trl_sft_tokenization.py +0 -0
  359. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/trajectories/viewer/__init__.py +0 -0
  360. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/trajectories/viewer/__main__.py +0 -0
  361. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/trajectories/viewer/assets/catalog.js +0 -0
  362. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/trajectories/viewer/assets/fonts/OFL-google-sans-code.txt +0 -0
  363. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/trajectories/viewer/assets/fonts/google-sans-code-400-latin.woff2 +0 -0
  364. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/trajectories/viewer/assets/fonts/google-sans-code-600-latin.woff2 +0 -0
  365. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/trajectories/viewer/assets/viewer.js +0 -0
  366. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/trajectories/viewer/catalog.py +0 -0
  367. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/trajectories/viewer/legacy.py +0 -0
  368. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/trajectories/viewer/server.py +0 -0
  369. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/usage_tracking.py +0 -0
  370. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/__init__.py +0 -0
  371. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/acceptance_live_harness.py +0 -0
  372. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/agents/__init__.py +0 -0
  373. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/agents/test_codex_config.py +0 -0
  374. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/agents/test_manifest_dirscan.py +0 -0
  375. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/agents/test_manifest_loader.py +0 -0
  376. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/agents/test_manifest_parity.py +0 -0
  377. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/agents/test_manifest_wiring.py +0 -0
  378. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/agents/test_namespace_shorthand.py +0 -0
  379. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/agents/test_plugin_entry_points.py +0 -0
  380. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/agents/test_protocol.py +0 -0
  381. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/agents/test_remote_manifest_autoload.py +0 -0
  382. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/conformance/README.md +0 -0
  383. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/conformance/acp_smoke/environment/Dockerfile +0 -0
  384. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/conformance/acp_smoke/environment/docker-compose.yaml +0 -0
  385. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/conformance/acp_smoke/environment/skills/conformance-writer/SKILL.md +0 -0
  386. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/conformance/acp_smoke/instruction.md +0 -0
  387. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/conformance/acp_smoke/solution/solve.sh +0 -0
  388. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/conformance/acp_smoke/task.md +0 -0
  389. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/conformance/acp_smoke/task.toml +0 -0
  390. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/conformance/acp_smoke/tests/test.sh +0 -0
  391. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/conformance/conformance-results.json +0 -0
  392. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/conformance/proof_multi_agent.py +0 -0
  393. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/conformance/proof_snapshot.py +0 -0
  394. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/conformance/run_conformance.py +0 -0
  395. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/conformance/self_gen_smoke_skills/skill-creator/SKILL.md +0 -0
  396. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/conftest.py +0 -0
  397. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/continue_run/__init__.py +0 -0
  398. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/continue_run/_helpers.py +0 -0
  399. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/continue_run/test_batch.py +0 -0
  400. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/continue_run/test_orchestrator.py +0 -0
  401. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/continue_run/test_replay_proxy.py +0 -0
  402. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/continue_run/test_run_folder.py +0 -0
  403. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/environment/__init__.py +0 -0
  404. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/environment/test_chibench_manifest.py +0 -0
  405. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/environment/test_clawsbench_manifest.py +0 -0
  406. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/environment/test_manifest.py +0 -0
  407. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/environment/test_manifest_env.py +0 -0
  408. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/environment/test_protocol.py +0 -0
  409. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/environment/test_readiness.py +0 -0
  410. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/examples/hello-world-task/environment/Dockerfile +0 -0
  411. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/examples/hello-world-task/instruction.md +0 -0
  412. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/examples/hello-world-task/solution/solve.sh +0 -0
  413. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/examples/hello-world-task/task.md +0 -0
  414. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/examples/hello-world-task/task.toml +0 -0
  415. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/examples/hello-world-task/tests/test.sh +0 -0
  416. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/examples/test_claude.sh +0 -0
  417. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/examples/test_codex.sh +0 -0
  418. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/examples/test_codex_custom_provider.sh +0 -0
  419. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/examples/test_gemini.sh +0 -0
  420. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/examples/test_openclaw.sh +0 -0
  421. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/examples/traces/minimal-claude.jsonl +0 -0
  422. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/examples/traces/minimal-opentraces.jsonl +0 -0
  423. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/digest/README.md +0 -0
  424. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/digest/alpha-task/environment/Dockerfile +0 -0
  425. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/digest/alpha-task/instruction.md +0 -0
  426. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/digest/alpha-task/task.toml +0 -0
  427. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/digest/alpha-task/tests/test.sh +0 -0
  428. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/digest/beta-task/data/empty.bin +0 -0
  429. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/digest/beta-task/data/unicode.txt +0 -0
  430. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/digest/beta-task/instruction.md +0 -0
  431. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/digest/beta-task/task.toml +0 -0
  432. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/digest/not-a-task/notes.txt +0 -0
  433. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/mock_acp_agent.py +0 -0
  434. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/mock_acp_agent_interleaved.py +0 -0
  435. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/mock_acp_agent_multi_turn.py +0 -0
  436. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/mock_openai_responses_server.py +0 -0
  437. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/Dockerfile +0 -0
  438. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/data/michigan_stations.txt +0 -0
  439. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/flood-detection/SKILL.md +0 -0
  440. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/nws-flood-thresholds/SKILL.md +0 -0
  441. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/usgs-data-download/SKILL.md +0 -0
  442. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/flood-risk-analysis/instruction.md +0 -0
  443. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/flood-risk-analysis/solution/solve.sh +0 -0
  444. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/flood-risk-analysis/task.toml +0 -0
  445. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/flood-risk-analysis/tests/test.sh +0 -0
  446. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/flood-risk-analysis/tests/test_outputs.py +0 -0
  447. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/Dockerfile +0 -0
  448. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/climate.csv +0 -0
  449. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/hydrology.csv +0 -0
  450. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/land_cover.csv +0 -0
  451. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/water_temperature.csv +0 -0
  452. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/contribution-analysis/SKILL.md +0 -0
  453. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/meteorology-driver-classification/SKILL.md +0 -0
  454. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/pca-decomposition/SKILL.md +0 -0
  455. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/trend-analysis/SKILL.md +0 -0
  456. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/lake-warming-attribution/instruction.md +0 -0
  457. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/lake-warming-attribution/solution/solve.sh +0 -0
  458. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/lake-warming-attribution/task.toml +0 -0
  459. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/lake-warming-attribution/tests/test.sh +0 -0
  460. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/lake-warming-attribution/tests/test_outputs.py +0 -0
  461. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/manifest.json +0 -0
  462. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/Dockerfile +0 -0
  463. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/r2r_simulator.py +0 -0
  464. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/finite-horizon-lqr/SKILL.md +0 -0
  465. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/integral-action-design/SKILL.md +0 -0
  466. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/mpc-horizon-tuning/SKILL.md +0 -0
  467. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/state-space-linearization/SKILL.md +0 -0
  468. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/system_config.json +0 -0
  469. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/r2r-mpc-control/instruction.md +0 -0
  470. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/r2r-mpc-control/solution/solve.sh +0 -0
  471. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/r2r-mpc-control/task.toml +0 -0
  472. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/r2r-mpc-control/tests/test.sh +0 -0
  473. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/r2r-mpc-control/tests/test_outputs.py +0 -0
  474. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/Dockerfile +0 -0
  475. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/generate_training_pcaps.py +0 -0
  476. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/local.rules +0 -0
  477. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/pcap-triage-tshark/SKILL.md +0 -0
  478. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/pcap-triage-tshark/scripts/summarize_http_requests.sh +0 -0
  479. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-offline-evejson/SKILL.md +0 -0
  480. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-offline-evejson/scripts/run_suricata_offline.sh +0 -0
  481. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-rules-basics/SKILL.md +0 -0
  482. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/suricata.yaml +0 -0
  483. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/instruction.md +0 -0
  484. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/solution/solve.sh +0 -0
  485. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/task.toml +0 -0
  486. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/tests/test.sh +0 -0
  487. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/tests/test_outputs.py +0 -0
  488. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/Dockerfile +0 -0
  489. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syz-extract-constants/SKILL.md +0 -0
  490. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syzkaller-build-loop/SKILL.md +0 -0
  491. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syzlang-ioctl-basics/SKILL.md +0 -0
  492. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/instruction.md +0 -0
  493. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/solution/solve.sh +0 -0
  494. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/task.toml +0 -0
  495. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/tests/test.sh +0 -0
  496. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/tests/test_outputs.py +0 -0
  497. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/integration/_consistency.py +0 -0
  498. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/integration/agent_judge.py +0 -0
  499. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/integration/check_adapter_evidence.py +0 -0
  500. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/integration/check_hosted_env_evidence.py +0 -0
  501. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/integration/check_results.py +0 -0
  502. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/integration/check_skillsbench_harbor_parity.py +0 -0
  503. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/integration/check_trace_to_task_evidence.py +0 -0
  504. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/integration/configs/claude-agent-acp.yaml +0 -0
  505. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/integration/configs/codex-acp.yaml +0 -0
  506. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/integration/configs/gemini.yaml +0 -0
  507. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/integration/configs/harvey-lab-harness.yaml +0 -0
  508. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/integration/configs/mimo.yaml +0 -0
  509. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/integration/configs/openclaw.yaml +0 -0
  510. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/integration/configs/opencode.yaml +0 -0
  511. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/integration/configs/openhands.yaml +0 -0
  512. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/integration/configs/pi-acp.yaml +0 -0
  513. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/integration/deepagents_harness.py +0 -0
  514. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/integration/rubric_checks.py +0 -0
  515. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/integration/run.sh +0 -0
  516. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/integration/run_suite.py +0 -0
  517. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/integration/scenarios.py +0 -0
  518. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/integration/suites/release.yaml +0 -0
  519. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_acceptance_evidence.py +0 -0
  520. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_acceptance_live.py +0 -0
  521. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_acceptance_live_execution.py +0 -0
  522. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_acp.py +0 -0
  523. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_acp_capability_advertising.py +0 -0
  524. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_acp_mcp_servers.py +0 -0
  525. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_acp_model_config_dispatch.py +0 -0
  526. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_acp_pinned_protocol_guard.py +0 -0
  527. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_acp_setup_failure_propagation.py +0 -0
  528. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_acp_timeout_evidence.py +0 -0
  529. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_adapter_scripts.py +0 -0
  530. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_adapters.py +0 -0
  531. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_agent_cli.py +0 -0
  532. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_agent_env_resolution.py +0 -0
  533. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_agent_gemini_defaults.py +0 -0
  534. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_agent_idle_timeout_cli.py +0 -0
  535. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_agent_model_decouple.py +0 -0
  536. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_agent_registry.py +0 -0
  537. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_agent_router.py +0 -0
  538. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_agent_router_cli_e2e.py +0 -0
  539. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_agent_router_scaffold.py +0 -0
  540. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_agent_setup.py +0 -0
  541. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_agent_spec.py +0 -0
  542. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_agentcore_builder.py +0 -0
  543. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_agentcore_reaper.py +0 -0
  544. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_agentcore_transport.py +0 -0
  545. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_api_error_capture.py +0 -0
  546. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_apple_container_sandbox.py +0 -0
  547. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_bare_model_provider.py +0 -0
  548. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_base_install_imports.py +0 -0
  549. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_bedrock_thinking.py +0 -0
  550. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_benchflow_experiment_review_validator.py +0 -0
  551. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_benchmark_repos_resolve_repo_path.py +0 -0
  552. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_branch.py +0 -0
  553. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_build_context_stage.py +0 -0
  554. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_build_review_pack.py +0 -0
  555. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_capture_trajectory.py +0 -0
  556. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_check_skillsbench_harbor_parity.py +0 -0
  557. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_clawsbench_slice.py +0 -0
  558. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_cli_adopt_aliases.py +0 -0
  559. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_cli_arg_validation.py +0 -0
  560. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_cli_daytona.py +0 -0
  561. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_cli_docs_drift.py +0 -0
  562. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_cli_edge_case_hardening.py +0 -0
  563. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_cli_hub_env.py +0 -0
  564. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_cli_misc.py +0 -0
  565. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_codex_review.py +0 -0
  566. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_codex_self_write_auth.py +0 -0
  567. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_config_override.py +0 -0
  568. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_config_redaction.py +0 -0
  569. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_connect_as_env.py +0 -0
  570. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_console_error_truncation.py +0 -0
  571. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_console_progress.py +0 -0
  572. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_continuallearningbench_adapter.py +0 -0
  573. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_dataset_registry.py +0 -0
  574. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_daytona_command_polling.py +0 -0
  575. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_daytona_dind_compose_up.py +0 -0
  576. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_daytona_download.py +0 -0
  577. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_daytona_litellm_runtime.py +0 -0
  578. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_daytona_poll_deadline.py +0 -0
  579. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_daytona_reap.py +0 -0
  580. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_deepagents_agent.py +0 -0
  581. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_diagnostics.py +0 -0
  582. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_docker_prune_scoping.py +0 -0
  583. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_docker_uploads.py +0 -0
  584. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_docs_examples.py +0 -0
  585. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_egress_model_gateway.py +0 -0
  586. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_eng50_capabilities.py +0 -0
  587. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_env_registry.py +0 -0
  588. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_env_setup.py +0 -0
  589. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_environment_manifest_controls.py +0 -0
  590. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_eval_artifact_cli.py +0 -0
  591. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_eval_filters_applied.py +0 -0
  592. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_eval_lift.py +0 -0
  593. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_eval_sharding.py +0 -0
  594. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_eval_single_task_summary.py +0 -0
  595. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_eval_source_provenance.py +0 -0
  596. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_eval_worker_retry.py +0 -0
  597. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_eval_zero_task_guard.py +0 -0
  598. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_evaluation_environment_manifest.py +0 -0
  599. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_exclude_tasks.py +0 -0
  600. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_filter_credentialed_cells.py +0 -0
  601. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_harvey_lab_shim.py +0 -0
  602. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_hilbench_adapter.py +0 -0
  603. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_hosted_env.py +0 -0
  604. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_hosted_env_rollout_contract.py +0 -0
  605. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_hosted_search_policy.py +0 -0
  606. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_hub_harbor_registry.py +0 -0
  607. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_inbound_adapter_manifest.py +0 -0
  608. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_inbound_adapters.py +0 -0
  609. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_integration_agent_judge.py +0 -0
  610. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_integration_check_results.py +0 -0
  611. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_integration_consistency.py +0 -0
  612. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_integration_matrix.py +0 -0
  613. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_integration_provider_selection.py +0 -0
  614. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_integration_run_suite.py +0 -0
  615. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_integration_suite.py +0 -0
  616. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_internet_policy.py +0 -0
  617. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_job.py +0 -0
  618. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_job_sequential_shared.py +0 -0
  619. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_job_sequential_shared_resume.py +0 -0
  620. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_judge_robustness.py +0 -0
  621. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_judge_symlink_ingestion.py +0 -0
  622. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_learner_skills.py +0 -0
  623. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_learner_skills_traversal.py +0 -0
  624. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_learner_store.py +0 -0
  625. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_learner_store_persistence.py +0 -0
  626. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_litellm_config.py +0 -0
  627. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_litellm_gemini_passthrough_patch.py +0 -0
  628. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_litellm_hardening.py +0 -0
  629. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_litellm_logging.py +0 -0
  630. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_litellm_model_via_env_generic.py +0 -0
  631. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_litellm_reasoning_passthrough.py +0 -0
  632. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_litellm_runtime.py +0 -0
  633. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_litellm_smoke.py +0 -0
  634. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_live_llm_trajectory.py +0 -0
  635. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_llm_judge.py +0 -0
  636. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_llm_judge_event_tags.py +0 -0
  637. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_llm_judge_verifier.py +0 -0
  638. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_loop_strategies.py +0 -0
  639. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_loop_summary.py +0 -0
  640. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_loop_sweep.py +0 -0
  641. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_memory_scorer.py +0 -0
  642. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_metrics.py +0 -0
  643. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_mle_bench_adapter.py +0 -0
  644. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_mock_openai_responses_server.py +0 -0
  645. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_monitor_scaffold.py +0 -0
  646. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_native_acp_usage.py +0 -0
  647. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_network_denylist_config.py +0 -0
  648. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_no_cross_provider_fallback.py +0 -0
  649. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_notification_order_real.py +0 -0
  650. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_opencode_family_proxy_tracking.py +0 -0
  651. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_oracle.py +0 -0
  652. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_oracle_chokepoint.py +0 -0
  653. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_paths_safe.py +0 -0
  654. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_paths_symlink_helpers.py +0 -0
  655. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_pi_acp_launcher.py +0 -0
  656. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_pi_acp_proxy_routing.py +0 -0
  657. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_process.py +0 -0
  658. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_project_skills_layout.py +0 -0
  659. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_provider_auth_detection.py +0 -0
  660. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_providers.py +0 -0
  661. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_publish_azure_blob.py +0 -0
  662. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_publish_huggingface.py +0 -0
  663. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_reexport.py +0 -0
  664. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_registry_invariants.py +0 -0
  665. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_release_hardening_r5.py +0 -0
  666. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_release_version.py +0 -0
  667. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_release_workflow_wiring.py +0 -0
  668. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_resolve_env_helpers.py +0 -0
  669. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_review_boundaries.py +0 -0
  670. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_review_rubric.py +0 -0
  671. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_review_runtime.py +0 -0
  672. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_reward_lenient.py +0 -0
  673. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_reward_node.py +0 -0
  674. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_reward_range.py +0 -0
  675. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_reward_unified_contract.py +0 -0
  676. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_rewards.py +0 -0
  677. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_rewards_jsonl.py +0 -0
  678. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_rollout_architecture.py +0 -0
  679. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_rollout_branch.py +0 -0
  680. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_rollout_config_path_coercion.py +0 -0
  681. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_rollout_environment.py +0 -0
  682. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_rollout_hard_deadline.py +0 -0
  683. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_rollout_import_no_side_effects.py +0 -0
  684. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_rollout_on_ask_user_wiring.py +0 -0
  685. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_rollout_planes_contract.py +0 -0
  686. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_rollout_probe_sandbox_health.py +0 -0
  687. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_rollout_session_factory_dispatch.py +0 -0
  688. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_rollout_setup_commands.py +0 -0
  689. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_rollout_upload.py +0 -0
  690. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_rubric_checks.py +0 -0
  691. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_rubric_config.py +0 -0
  692. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_runtime.py +0 -0
  693. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_runtime_capabilities.py +0 -0
  694. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_runtime_config_wired.py +0 -0
  695. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_runtime_live_sandbox.py +0 -0
  696. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_sandbox.py +0 -0
  697. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_sandbox_exec_secret_handling.py +0 -0
  698. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_sandbox_hardening.py +0 -0
  699. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_sandbox_isolation_copy_traversal.py +0 -0
  700. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_sandbox_live_process.py +0 -0
  701. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_sandbox_multi_service.py +0 -0
  702. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_sandbox_prebuilt_validation.py +0 -0
  703. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_sandbox_protocol.py +0 -0
  704. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_sandbox_provider_registry_drift.py +0 -0
  705. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_sandbox_setup.py +0 -0
  706. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_sandbox_snapshot_contract.py +0 -0
  707. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_sandbox_upload_symlink.py +0 -0
  708. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_sandbox_verifier_workspace.py +0 -0
  709. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_scene.py +0 -0
  710. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_scene_outbox_trial.py +0 -0
  711. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_scene_parallel_group.py +0 -0
  712. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_scene_result_aggregation.py +0 -0
  713. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_scoring.py +0 -0
  714. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_sdk_internals.py +0 -0
  715. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_sdk_lockdown.py +0 -0
  716. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_sdk_run_alias.py +0 -0
  717. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_sealed_channel_container.py +0 -0
  718. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_self_gen_cli.py +0 -0
  719. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_self_gen_export_error_channel.py +0 -0
  720. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_self_gen_export_failures.py +0 -0
  721. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_self_gen_orchestration.py +0 -0
  722. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_session_factory_runtime.py +0 -0
  723. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_session_request_permission_dispatch.py +0 -0
  724. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_skill_eval.py +0 -0
  725. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_skill_eval_dryrun.py +0 -0
  726. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_skill_eval_integration.py +0 -0
  727. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_skill_eval_sweep.py +0 -0
  728. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_skill_eval_traversal.py +0 -0
  729. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_skill_invocation_artifacts.py +0 -0
  730. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_skill_policy.py +0 -0
  731. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_skills.py +0 -0
  732. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_skills_dir_agent_home_link.py +0 -0
  733. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_skillsbench_conversion_conformance.py +0 -0
  734. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_skillsbench_harbor_run_suite.py +0 -0
  735. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_smoke.py +0 -0
  736. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_smoke_wiring.py +0 -0
  737. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_source_adapters.py +0 -0
  738. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_subscription_auth.py +0 -0
  739. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_task_check_eval_consistency.py +0 -0
  740. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_task_config.py +0 -0
  741. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_task_digest.py +0 -0
  742. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_task_document.py +0 -0
  743. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_task_download.py +0 -0
  744. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_task_export.py +0 -0
  745. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_task_output_format.py +0 -0
  746. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_task_package.py +0 -0
  747. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_tasks.py +0 -0
  748. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_token_usage_normalization.py +0 -0
  749. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_trace_import_cli.py +0 -0
  750. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_trace_task_gen_traversal.py +0 -0
  751. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_trace_to_task_evidence.py +0 -0
  752. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_traces_huggingface.py +0 -0
  753. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_traces_parsers.py +0 -0
  754. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_traces_task_gen.py +0 -0
  755. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_train_cli.py +0 -0
  756. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_train_mode_artifact_emission.py +0 -0
  757. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_train_trl_cli.py +0 -0
  758. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_traj_report.py +0 -0
  759. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_traj_staging_phases.py +0 -0
  760. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_traj_tui.py +0 -0
  761. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_traj_upload_cli.py +0 -0
  762. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_traj_upload_skill.py +0 -0
  763. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_traj_workspace.py +0 -0
  764. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_trajectory_integration.py +0 -0
  765. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_trajectory_streaming.py +0 -0
  766. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_trajectory_upload_layout.py +0 -0
  767. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_trajectory_upload_service.py +0 -0
  768. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_trial_agent_timeout_verify.py +0 -0
  769. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_trial_install_agent_timeout.py +0 -0
  770. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_trial_litellm_runtime.py +0 -0
  771. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_trl_integration.py +0 -0
  772. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_usage_litellm.py +0 -0
  773. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_usage_required.py +0 -0
  774. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_usage_tracking.py +0 -0
  775. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_user.py +0 -0
  776. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_v06_guard_ports.py +0 -0
  777. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_verifier_document.py +0 -0
  778. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_verifier_multi_container.py +0 -0
  779. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_verifier_output.py +0 -0
  780. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_verifier_output_freshness.py +0 -0
  781. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_verifier_strategies.py +0 -0
  782. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_verifier_wedge_retry.py +0 -0
  783. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_verify.py +0 -0
  784. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_viewer_confirm.py +0 -0
  785. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_workflow_action_pinning.py +0 -0
  786. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_yaml_config.py +0 -0
  787. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/trajectories/__init__.py +0 -0
  788. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/trajectories/test_export.py +0 -0
  789. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/trajectories/test_export_adp.py +0 -0
  790. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/trajectories/test_export_atif.py +0 -0
  791. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/trajectories/test_export_common.py +0 -0
  792. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/trajectories/test_export_nan_handling.py +0 -0
  793. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/trajectories/test_export_prime_sft.py +0 -0
  794. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/trajectories/test_step_granularity.py +0 -0
  795. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/trajectories/test_tree.py +0 -0
  796. {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/trajectories/test_viewer_browser.py +0 -0
@@ -2,6 +2,46 @@
2
2
 
3
3
  ## [Unreleased]
4
4
 
5
+ ## 0.7.8 — 2026-09-14
6
+
7
+ ### Added
8
+
9
+ - **Automatic rubric review and scoring.** Tasks with a weighted `rubric.json`
10
+ run a separate reviewer after verification. Passing requires all required
11
+ tests and rubric blockers to pass; the final reward is the weighted quality
12
+ score. Solver evidence and reviewer runs are retained, and `bench eval score`
13
+ can retry an interrupted review without rerunning the solver. (#1126)
14
+ - **Rubric results in the trajectory viewer.** The Rubric tab displays criterion
15
+ judgments, explanations, blocker outcomes, and weighted scores. (#1102)
16
+ - **Viewer themes and syntax highlighting.** Trajectory pages support a dark
17
+ theme and highlighted tool content. (#1098)
18
+
19
+ ### Fixed
20
+
21
+ - **Automatic rubric review works on Daytona when the task workspace is
22
+ `/root`.** Daytona's daemon keeps its session tree in `/root/.daytona` (the
23
+ entrypoint's FIFOs plus every session command's script, log and exit code),
24
+ and evidence capture aborted on the first FIFO, so the rollout ended in a
25
+ scoring error with `rewards: null` although its verifier had run. Capture now
26
+ leaves that tree out as `sandbox_runtime` and records any other socket, FIFO
27
+ or device node as a `special_file` exclusion instead of aborting. Capture
28
+ limits, escaping symlinks and concurrent changes still fail closed. (#1128)
29
+ - **Automatic review supports shell-only task images.** Required Python
30
+ capture tools are provisioned before the solver starts, so a successful
31
+ shell task does not lose its review to a missing interpreter. (#1127)
32
+ - **Denylist enforcement closes CONNECT and HTTP Host bypasses.** TLS identity
33
+ and HTTP authority are checked against the allowed destination on Docker and
34
+ Daytona. (#1122)
35
+ - **IPv6 egress rules are installed when procfs reports zero-size files.**
36
+ Sandbox firewall setup reads the kernel data instead of relying on the
37
+ reported file size. (#1124)
38
+ - **Buffered ACP prompts respect their deadlines.** Timeout handling no longer
39
+ repeats captured provider history. (#1125)
40
+ - **Tool captures retain their content and raw input/output.** ACP trajectories
41
+ preserve observations needed for later review. (#1100)
42
+
43
+ ## 0.7.7 — 2026-09-09
44
+
5
45
  ### Added
6
46
  - **`network_mode: denylist` blocks a list of URLs and hosts for the agent on
7
47
  Docker and Daytona.** The task keeps internet access; `blocked_urls` and
@@ -10,6 +50,29 @@
10
50
  and every refused request lands in `trajectory/egress_denylist.jsonl`.
11
51
  Other backends refuse the mode at preflight. (#1113)
12
52
 
53
+ ### Fixed
54
+
55
+ - **Denylist egress no longer cuts the agent off from its own model.** The
56
+ controller registers the running LiteLLM gateway's exact
57
+ `127.0.0.1:<port>` endpoint with the proxy, so clients that ignore
58
+ `NO_PROXY` (Gemini's Undici `ProxyAgent` tunnels even plain HTTP) still
59
+ reach it; the exception comes from the live gateway, never task metadata or
60
+ agent-supplied environment, and every other private destination stays
61
+ blocked. Reconnects re-register the current port. (#1118)
62
+ - **The denylist is a shared sandbox policy, not a per-harness one.** Every
63
+ supported ACP harness — custom registrations included — gets the same proxy,
64
+ certificates, and UID firewall on primary connections and later roles alike,
65
+ independent of harness name, model id, or provider. (#1118)
66
+ - **`codex-acp` sessions are configured through native ACP settings.** Hosted
67
+ search is switched off via `CODEX_CONFIG.web_search` (the CLI ignores `-c`
68
+ overrides), and Codex runs in `agent-full-access` session mode when
69
+ BenchFlow has already selected a non-root sandbox user, so its bubblewrap
70
+ sandbox is not nested inside Docker or Daytona — BenchFlow's own user,
71
+ filesystem restrictions, proxy, and firewall still apply. (#1118)
72
+ - **`cryptography>=44` is a core dependency.** Denylist egress mints TLS
73
+ certificates on both Docker and Daytona, so the pin moved out of the
74
+ `sandbox-agentcore` extra. (#1118)
75
+
13
76
  ## 0.7.6 — 2026-09-04
14
77
 
15
78
  ### Added
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: benchflow
3
- Version: 0.7.7.dev2316
3
+ Version: 0.7.8
4
4
  Summary: Multi-turn agent benchmarking with ACP — run any agent, any model, any provider.
5
5
  Project-URL: Homepage, https://github.com/benchflow-ai/benchflow
6
6
  Project-URL: Repository, https://github.com/benchflow-ai/benchflow
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "benchflow"
3
- version = "0.7.7.dev2316"
3
+ version = "0.7.8"
4
4
  description = "Multi-turn agent benchmarking with ACP — run any agent, any model, any provider."
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.12"
@@ -62,6 +62,7 @@ from benchflow.monitor import (
62
62
  )
63
63
  from benchflow.review import (
64
64
  PublicationDecision,
65
+ ReviewerConfig,
65
66
  ReviewReport,
66
67
  ReviewRubricError,
67
68
  ReviewScoring,
@@ -172,6 +173,7 @@ __all__ = [
172
173
  "load_rubric_json",
173
174
  "load_rubric_toml",
174
175
  "ReviewReport",
176
+ "ReviewerConfig",
175
177
  "PublicationDecision",
176
178
  "ReviewRubric",
177
179
  "ReviewRubricCriterion",
@@ -0,0 +1,55 @@
1
+ """Dependency-neutral redaction policy for persisted execution configuration.
2
+
3
+ Both solver and reviewer artifacts keep nonsecret execution settings so that
4
+ scoring-only resume preserves the inference protocol without persisting auth.
5
+ """
6
+
7
+ from __future__ import annotations
8
+
9
+ from benchflow.trajectories.types import redact_trajectory_text
10
+
11
+ # Substrings that flag an env var name as secret-bearing for ``config.json``
12
+ # redaction. Matching is case-insensitive (callers ``.upper()`` the key first)
13
+ # and uses substring containment so derived names like ``MY_AUTH_HEADER``,
14
+ # ``SESSION_COOKIE``, or ``GH_TOKEN`` are caught. This stays a denylist (rather
15
+ # than an allowlist of safe keys) because agent env varies per agent — the
16
+ # union of safe keys is not knowable here — but the list now covers the common
17
+ # auth-bearing names that issue #410 called out (COOKIE, AUTHORIZATION, AUTH,
18
+ # BEARER, SESSION) on top of the original KEY/TOKEN/SECRET/PASSWORD/CREDENTIALS.
19
+ _SECRET_ENV_SUBSTRINGS: tuple[str, ...] = (
20
+ "KEY",
21
+ "TOKEN",
22
+ "SECRET",
23
+ "PASSWORD",
24
+ "CREDENTIALS",
25
+ "COOKIE",
26
+ "AUTHORIZATION",
27
+ "AUTH",
28
+ "BEARER",
29
+ "SESSION",
30
+ )
31
+ _SECRET_URL_PATH_MARKERS: tuple[str, ...] = ("/__benchflow/",)
32
+
33
+
34
+ def _is_secret_env_key(name: str) -> bool:
35
+ """Return True if *name* looks like it carries a secret value.
36
+
37
+ Case-insensitive substring match against :data:`_SECRET_ENV_SUBSTRINGS`.
38
+ Used by :func:`_write_config` to drop secret-bearing entries before
39
+ persisting ``agent_env`` to the rollout's ``config.json``.
40
+ """
41
+ upper = name.upper()
42
+ return any(s in upper for s in _SECRET_ENV_SUBSTRINGS)
43
+
44
+
45
+ def _is_secret_env_value(name: str, value: str) -> bool:
46
+ """Return True if a normally public env value embeds a runtime secret."""
47
+ # Inline harness JSON/TOML can contain credentials under a harmless env
48
+ # name. Drop the whole value; redacted placeholders cannot safely replay.
49
+ return any(marker in value for marker in _SECRET_URL_PATH_MARKERS) or (
50
+ redact_trajectory_text(value) != value
51
+ )
52
+
53
+
54
+ def _should_record_env_entry(name: str, value: str) -> bool:
55
+ return not _is_secret_env_key(name) and not _is_secret_env_value(name, value)
@@ -75,6 +75,12 @@ def rollout_result_payload(
75
75
  "task_name": result.task_name,
76
76
  "rollout_name": result.rollout_name,
77
77
  "rewards": result.rewards,
78
+ **({"scoring": result.scoring.to_dict()} if result.scoring is not None else {}),
79
+ **(
80
+ {"purpose": result.purpose, "parent_rollout": result.parent_rollout}
81
+ if result.purpose != "task"
82
+ else {}
83
+ ),
78
84
  "error": result.error,
79
85
  "error_category": result.error_category,
80
86
  "verifier_error": result.verifier_error,
@@ -0,0 +1,74 @@
1
+ """Discover task results without counting nested review/evidence runs."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import json
6
+ import logging
7
+ from pathlib import Path
8
+ from typing import Any
9
+
10
+ logger = logging.getLogger(__name__)
11
+
12
+
13
+ def iter_task_result_paths(root: Path) -> list[Path]:
14
+ """Return result files at trial boundaries, excluding reviewer children.
15
+
16
+ A result below a trial's result or solver checkpoint is an artifact of that
17
+ parent, not an additional trial. In particular, captured files must remain
18
+ excluded while the parent awaits review and has no final result yet. The
19
+ explicit role also covers orphaned reviewer runs. Corrupt task files are
20
+ left to callers' existing error handling.
21
+ """
22
+ paths = sorted(root.rglob("result.json"))
23
+ trial_dirs = {path.parent for path in paths}
24
+ trial_dirs.update(path.parent for path in root.rglob("solver.json"))
25
+ selected: list[Path] = []
26
+ for path in paths:
27
+ if any(parent in trial_dirs for parent in path.parent.parents):
28
+ continue
29
+ try:
30
+ result = json.loads(path.read_text())
31
+ except (OSError, ValueError):
32
+ result = None
33
+ if isinstance(result, dict) and result.get("purpose") == "reviewer":
34
+ continue
35
+ selected.append(path)
36
+ return selected
37
+
38
+
39
+ def load_task_results(root: Path) -> dict[str, dict[str, Any]]:
40
+ """Load one durable result per task, preferring scored then newer trials.
41
+
42
+ Evaluation resume and scoring-only summary refresh must select identical
43
+ records. Malformed files remain logged and skipped as in evaluation resume;
44
+ a malformed reward envelope remains visible as an errored trial.
45
+ """
46
+ best: dict[str, tuple[tuple[bool, float, str], dict[str, Any]]] = {}
47
+ for path in iter_task_result_paths(root):
48
+ try:
49
+ result = json.loads(path.read_text())
50
+ task = result["task_name"]
51
+ rewards = result.get("rewards")
52
+ if (
53
+ rewards is None
54
+ and not result.get("verifier_error")
55
+ and result.get("scoring") is None
56
+ ):
57
+ continue
58
+ if rewards is not None and not isinstance(rewards, dict):
59
+ logger.warning(
60
+ "Malformed rewards field in %s for task %r: "
61
+ "expected dict or null, got %s %r — "
62
+ "treating as no reward (task will count as errored)",
63
+ path,
64
+ task,
65
+ type(rewards).__name__,
66
+ rewards,
67
+ )
68
+ rank = (rewards is not None, path.stat().st_mtime, str(path))
69
+ previous = best.get(task)
70
+ if previous is None or rank >= previous[0]:
71
+ best[task] = (rank, result)
72
+ except (OSError, ValueError, TypeError, KeyError) as exc:
73
+ logger.debug("Skipping corrupt result file %s: %s", path, exc)
74
+ return {task: result for task, (_, result) in best.items()}
@@ -1,6 +1,7 @@
1
1
  """Pure scoring and classification helpers — no external dependencies."""
2
2
 
3
3
  import math
4
+ from collections import Counter
4
5
  from collections.abc import Iterable, Mapping
5
6
  from typing import Any, Literal
6
7
 
@@ -110,6 +111,18 @@ ResultOutcome = Literal["passed", "failed", "errored", "verifier_errored", "unsc
110
111
 
111
112
  def extract_reward(result: Mapping[str, Any]) -> float | None:
112
113
  """Extract the reward value from a result dict, or None if absent."""
114
+ if result.get("scoring") is not None:
115
+ from benchflow.review.outcome import scoring_from_result
116
+
117
+ try:
118
+ scoring = scoring_from_result(result)
119
+ except ValueError:
120
+ return None
121
+ if scoring is None or scoring.status != "complete":
122
+ return None
123
+ rewards = scoring.numeric_rewards()
124
+ assert rewards is not None
125
+ return rewards["reward"]
113
126
  rewards = result.get("rewards")
114
127
  if not isinstance(rewards, dict):
115
128
  return None
@@ -283,10 +296,20 @@ def classify_result(
283
296
  def classify_score_outcome(result: Mapping[str, Any]) -> ScoreOutcome:
284
297
  """Classify a persisted result for score/invariant accounting.
285
298
 
286
- This is the canonical terminal score view. It keeps the four score
287
- buckets disjoint and gives an explicit reward or agent error precedence
288
- over verifier evidence so ``EvaluationResult`` cannot double-count tasks.
299
+ Integrated review uses its explicit gate verdict. Legacy results keep
300
+ reward/agent-error precedence. Malformed or incomplete scoring is never a
301
+ capability failure or an accidental pass from a stale reward.
289
302
  """
303
+ if result.get("scoring") is not None:
304
+ from benchflow.review.outcome import scoring_from_result
305
+
306
+ try:
307
+ scoring = scoring_from_result(result)
308
+ except ValueError:
309
+ scoring = None
310
+ if scoring is not None and scoring.status == "complete":
311
+ return "passed" if scoring.passed else "failed"
312
+ return "errored" if result.get("error") else "verifier_errored"
290
313
  return classify_result(
291
314
  reward=extract_reward(result),
292
315
  error=result.get("error"),
@@ -309,6 +332,8 @@ def classify_audit_outcome(result: Mapping[str, Any]) -> ResultOutcome:
309
332
  """
310
333
  if result.get("verifier_error"):
311
334
  return "verifier_errored"
335
+ if result.get("scoring") is not None:
336
+ return classify_score_outcome(result)
312
337
  reward = extract_reward(result)
313
338
  if reward == 1.0:
314
339
  return "passed"
@@ -386,3 +411,46 @@ def pass_rate_excl_errors(*, passed: int, failed: int) -> float:
386
411
  """Pass rate excluding errored tasks."""
387
412
  completed = passed + failed
388
413
  return passed / completed if completed > 0 else 0.0
414
+
415
+
416
+ def score_summary_fields(results: Iterable[Mapping[str, Any]]) -> dict[str, Any]:
417
+ """Scoring fields shared by initial evaluation and scoring-only resume.
418
+
419
+ Callers retain run configuration, solver usage, timing, and provenance; only
420
+ fields derived from the current terminal scoring evidence are rebuilt.
421
+ """
422
+ rows = list(results)
423
+ counts = count_audit_outcomes(rows)
424
+ error_categories: Counter[str] = Counter()
425
+ verifier_categories: Counter[str] = Counter()
426
+ for row in rows:
427
+ category = row.get("error_category") or classify_error(row.get("error"))
428
+ if category:
429
+ error_categories[category] += 1
430
+ verifier_category = row.get(
431
+ "verifier_error_category"
432
+ ) or classify_verifier_error(row.get("verifier_error"))
433
+ if verifier_category:
434
+ verifier_categories[verifier_category] += 1
435
+ ratio = pass_rate(passed=counts["passed"], total=len(rows))
436
+ scored_ratio = pass_rate_excl_errors(
437
+ passed=counts["passed"], failed=counts["failed"]
438
+ )
439
+ return {
440
+ "total": len(rows),
441
+ "passed": counts["passed"],
442
+ "failed": counts["failed"],
443
+ "errored": counts["errored"],
444
+ "verifier_errored": counts["verifier_errored"],
445
+ "pass": counts["passed"],
446
+ "fail": counts["failed"],
447
+ "error": counts["errored"],
448
+ "idle_timeout": error_categories.get(IDLE_TIMEOUT, 0),
449
+ "error_categories": dict(error_categories) or None,
450
+ "verifier_error_categories": dict(verifier_categories) or None,
451
+ "score": f"{ratio:.1%}",
452
+ "score_ratio": ratio,
453
+ "score_excl_errors": f"{scored_ratio:.1%}",
454
+ "score_excl_errors_ratio": scored_ratio,
455
+ "mean_reward": mean_scored_reward(rows),
456
+ }
@@ -44,6 +44,7 @@ from typing import Any
44
44
  import yaml
45
45
 
46
46
  from benchflow._types import Role, Scene, Turn
47
+ from benchflow.review.options import ReviewerConfig
47
48
  from benchflow.rollout import RolloutConfig
48
49
  from benchflow.skill_policy import SKILL_MODE_NO_SKILL
49
50
  from benchflow.usage_tracking import UsageTrackingConfig
@@ -109,6 +110,7 @@ def rollout_config_from_dict(
109
110
 
110
111
  return RolloutConfig(
111
112
  task_path=tp,
113
+ reviewer=ReviewerConfig.coerce(raw.get("reviewer")),
112
114
  scenes=scenes,
113
115
  environment=raw.get("environment", "docker"),
114
116
  sandbox_user=raw.get("sandbox_user", "agent"),
@@ -1,5 +1,6 @@
1
1
  """ACP client — benchflow acts as the client, agents are ACP servers."""
2
2
 
3
+ import asyncio
3
4
  import logging
4
5
  from collections.abc import Awaitable, Callable
5
6
  from typing import Any
@@ -137,6 +138,10 @@ class ACPClient:
137
138
  async def _read_until_response(self, request_id: int) -> dict[str, Any]:
138
139
  """Read messages, handling notifications, until we get the response we want."""
139
140
  while True:
141
+ # Buffered transports can receive inline, and session capture is
142
+ # synchronous. Give cancellation and watchdog tasks a turn even
143
+ # while the peer's notification backlog remains non-empty.
144
+ await asyncio.sleep(0)
140
145
  msg = await self._transport.receive()
141
146
  logger.debug(
142
147
  f"ACPClient recv: id={msg.get('id')} method={msg.get('method', '')} "
@@ -30,7 +30,7 @@ from benchflow.acp.timeout_cleanup import (
30
30
  cancel_and_drain_prompt_task,
31
31
  cancel_prompt_after_timeout,
32
32
  )
33
- from benchflow.acp.types import McpServerSpec
33
+ from benchflow.acp.types import McpServerSpec, PromptResult
34
34
  from benchflow.acp.watchdog import IdleWatchdog
35
35
  from benchflow.agents.codex_config import apply_codex_launch_config
36
36
  from benchflow.agents.protocol import ACPSessionAdapter
@@ -800,6 +800,28 @@ def _agent_prompt_timeout_error(session, timeout: int) -> AgentPromptTimeoutErro
800
800
  )
801
801
 
802
802
 
803
+ async def _timed_prompt(
804
+ acp_client: ACPClient, prompt: str
805
+ ) -> tuple[PromptResult, float]:
806
+ """Record completion in the prompt task, before a delayed observer runs."""
807
+ result = await acp_client.prompt(prompt)
808
+ return result, asyncio.get_running_loop().time()
809
+
810
+
811
+ def _completed_prompt_result(
812
+ prompt_task: asyncio.Task[tuple[PromptResult, float]],
813
+ session,
814
+ *,
815
+ deadline: float,
816
+ timeout: int,
817
+ ) -> PromptResult:
818
+ """A delayed watchdog must distinguish late completion from late observation."""
819
+ result, completed_at = prompt_task.result()
820
+ if completed_at > deadline:
821
+ raise _agent_prompt_timeout_error(session, timeout)
822
+ return result
823
+
824
+
803
825
  async def _prompt_with_wall_clock_budget(
804
826
  acp_client: ACPClient,
805
827
  session,
@@ -807,12 +829,15 @@ async def _prompt_with_wall_clock_budget(
807
829
  timeout: int,
808
830
  ):
809
831
  """Run a prompt until either it finishes or BenchFlow's budget expires."""
810
- prompt_task = asyncio.create_task(acp_client.prompt(prompt))
832
+ deadline = asyncio.get_running_loop().time() + timeout
833
+ prompt_task = asyncio.create_task(_timed_prompt(acp_client, prompt))
811
834
  cleanup_attempted = False
812
835
  try:
813
836
  done, _pending = await asyncio.wait({prompt_task}, timeout=timeout)
814
837
  if done:
815
- return prompt_task.result()
838
+ return _completed_prompt_result(
839
+ prompt_task, session, deadline=deadline, timeout=timeout
840
+ )
816
841
  cleanup_attempted = True
817
842
  if await cancel_prompt_after_timeout(acp_client, prompt_task):
818
843
  raise _agent_prompt_timeout_error(session, timeout)
@@ -831,7 +856,7 @@ async def _prompt_with_idle_watchdog(
831
856
  idle_timeout: int,
832
857
  ):
833
858
  """Run one ACP prompt with wall-clock and idle-watchdog budgets."""
834
- prompt_task = asyncio.create_task(acp_client.prompt(prompt))
859
+ prompt_task = asyncio.create_task(_timed_prompt(acp_client, prompt))
835
860
  cleanup_attempted = False
836
861
  loop = asyncio.get_running_loop()
837
862
  watchdog = IdleWatchdog.start(
@@ -864,7 +889,9 @@ async def _prompt_with_idle_watchdog(
864
889
  f"Agent prompt exceeded wall-clock budget {timeout}s"
865
890
  )
866
891
 
867
- return prompt_task.result()
892
+ return _completed_prompt_result(
893
+ prompt_task, session, deadline=watchdog.deadline, timeout=timeout
894
+ )
868
895
  finally:
869
896
  # Always cancel + drain the prompt task on exit, including the
870
897
  # external-cancellation path (CancelledError from sleep). Bound the
@@ -162,6 +162,10 @@ class ToolCallRecord:
162
162
  self.kind = kind
163
163
  self.status = ToolCallStatus.PENDING
164
164
  self.content: list[dict] = []
165
+ # ACP ``rawInput`` / ``rawOutput``: the agent's own view of the call.
166
+ # codex-acp puts the command and its output here and nowhere else.
167
+ self.raw_input: object | None = None
168
+ self.raw_output: object | None = None
165
169
  self.started_at = datetime.now()
166
170
  self.finished_at: datetime | None = None
167
171
 
@@ -178,6 +182,13 @@ class ToolCallRecord:
178
182
  ):
179
183
  self.finished_at = datetime.now()
180
184
 
185
+ def absorb_raw_io(self, update: dict) -> None:
186
+ """Keep the latest ``rawInput`` / ``rawOutput`` an update carries."""
187
+ if update.get("rawInput") is not None:
188
+ self.raw_input = update["rawInput"]
189
+ if update.get("rawOutput") is not None:
190
+ self.raw_output = update["rawOutput"]
191
+
181
192
 
182
193
  class ACPSession:
183
194
  """Tracks mutable state for one ACP session.
@@ -417,6 +428,20 @@ class ACPSession:
417
428
  update.get("kind", "other"), update.get("title", "")
418
429
  ),
419
430
  )
431
+ # The opening notification may already carry content (codex-acp
432
+ # sends file-change diffs this way) and raw I/O.
433
+ initial_content = update.get("content")
434
+ if isinstance(initial_content, list) and initial_content:
435
+ record.content.extend(initial_content)
436
+ record.absorb_raw_io(update)
437
+ # An opening call may already be terminal (codex-acp file edits
438
+ # arrive completed with no later update); honor its status so it
439
+ # never lingers in pending_tool_call_ids().
440
+ if update.get("status") is not None:
441
+ try:
442
+ record.update_status(ToolCallStatus(update["status"]))
443
+ except ValueError:
444
+ logger.warning(f"Unknown tool call status: {update.get('status')}")
420
445
  self._record_tool_call(record)
421
446
 
422
447
  elif update_type == "tool_call_update":
@@ -440,6 +465,7 @@ class ACPSession:
440
465
  status = ToolCallStatus.IN_PROGRESS
441
466
  content = update.get("content")
442
467
  record.update_status(status, content)
468
+ record.absorb_raw_io(update)
443
469
  if status in (ToolCallStatus.PENDING, ToolCallStatus.IN_PROGRESS):
444
470
  self._pending_tool_call_update_counts[tc_id] = (
445
471
  self._pending_tool_call_update_counts.get(tc_id, 0) + 1
@@ -19,14 +19,63 @@ Does not own:
19
19
  import json
20
20
  import logging
21
21
  import os
22
+ import posixpath
22
23
  import shlex
23
24
  import tempfile
24
- from pathlib import Path
25
+ from collections.abc import Mapping
26
+ from pathlib import Path, PurePosixPath
25
27
 
26
28
  from benchflow.agents.registry import AGENTS
27
29
 
28
30
  logger = logging.getLogger(__name__)
29
31
 
32
+ # These runtime files can contain API keys or OAuth tokens. Keep this inventory
33
+ # beside the credential writers, including files written by harness launchers
34
+ # rather than upload_credential. Evidence capture records every exclusion.
35
+ CREDENTIAL_EVIDENCE_PATHS = (
36
+ ".codex/auth.json",
37
+ ".claude/.credentials.json",
38
+ ".config/opencode/auth.json",
39
+ ".config/opencode/opencode.json",
40
+ ".local/share/opencode/auth.json",
41
+ ".config/mimocode/mimocode.json",
42
+ "mimocode.json",
43
+ ".openhands/agent_settings.json",
44
+ ".pi/agent/models.json",
45
+ ".pi/agent/auth.json",
46
+ ".openclaw/openclaw.json",
47
+ ".openclaw/agents/main/agent/auth-profiles.json",
48
+ ".gemini/oauth_creds.json",
49
+ ".aws/credentials",
50
+ ".config/gcloud/application_default_credentials.json",
51
+ ".ssh",
52
+ )
53
+
54
+
55
+ def credential_evidence_overrides(
56
+ agent_env: Mapping[str, str], *, workspace: str, cred_home: str
57
+ ) -> tuple[str, ...]:
58
+ """Resolve supported credential/config file overrides in sandbox paths.
59
+
60
+ Values are filenames, not credential JSON. In particular, CODEX_CONFIG is
61
+ inline JSON forwarded to the adapter and must never be treated as a path.
62
+ """
63
+ paths: set[str] = set()
64
+ for variable in (
65
+ "MIMOCODE_CONFIG",
66
+ "OPENCODE_CONFIG",
67
+ "OPENCLAW_CONFIG_PATH",
68
+ "GOOGLE_APPLICATION_CREDENTIALS",
69
+ "AWS_SHARED_CREDENTIALS_FILE",
70
+ ):
71
+ value = agent_env.get(variable)
72
+ if not value:
73
+ continue
74
+ if value.startswith("~/"):
75
+ value = str(PurePosixPath(cred_home) / value[2:])
76
+ paths.add(posixpath.normpath(str(PurePosixPath(workspace) / value)))
77
+ return tuple(sorted(paths))
78
+
30
79
 
31
80
  def _owner_from_home(cred_home: str) -> str | None:
32
81
  """Return sandbox username for /home/<user> credential homes."""
@@ -264,13 +264,10 @@ class LiveEvalProgress:
264
264
  def on_result(self, name: str, result: RunResult) -> None:
265
265
  with self._lock:
266
266
  self._running.pop(name, None)
267
- # Mirror Evaluation._log_and_report exactly: reward==1 -> PASS,
268
- # reward not None -> FAIL, else ERR (no reward reached).
269
- rewards = getattr(result, "rewards", None)
270
- reward = rewards.get("reward") if rewards else None
271
- if reward == 1:
267
+ outcome = result.score_outcome
268
+ if outcome == "passed":
272
269
  self._passed += 1
273
- elif reward is not None:
270
+ elif outcome == "failed":
274
271
  self._failed += 1
275
272
  else:
276
273
  self._errored += 1
@@ -35,6 +35,7 @@ def _redacted_eval_config(eval_config: EvaluationConfig) -> dict:
35
35
  "skills_dir": eval_config.skills_dir,
36
36
  "usage_tracking": eval_config.usage_tracking.to_config_artifact(),
37
37
  "agent_env_keys": sorted(eval_config.agent_env),
38
+ "reviewer": eval_config.reviewer.to_config_artifact(),
38
39
  "include_tasks": sorted(eval_config.include_tasks),
39
40
  "exclude_tasks": sorted(eval_config.exclude_tasks),
40
41
  "source_provenance": eval_config.source_provenance,