benchflow 0.7.6.dev2255__tar.gz → 0.7.7__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 (762) hide show
  1. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/CHANGELOG.md +77 -0
  2. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/PKG-INFO +2 -2
  3. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/pyproject.toml +3 -5
  4. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/acp/runtime.py +1 -0
  5. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/agents/codex_config.py +23 -10
  6. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/agents/install.py +14 -8
  7. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/agents/manifest.py +2 -0
  8. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/agents/registry.py +41 -8
  9. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/contracts/planes.py +20 -2
  10. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/contracts/user.py +1 -1
  11. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/evaluation.py +13 -2
  12. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/rollout/__init__.py +59 -2
  13. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/rollout/_setup.py +6 -0
  14. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/rollout/task_runtime.py +5 -0
  15. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/rollout_planes.py +32 -4
  16. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/sandbox/_compose.py +1 -0
  17. benchflow-0.7.7/src/benchflow/sandbox/_compose_files/docker-compose-net-admin.yaml +4 -0
  18. benchflow-0.7.7/src/benchflow/sandbox/_egress_denylist_proxy.py +520 -0
  19. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/sandbox/daytona_dind.py +2 -0
  20. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/sandbox/docker.py +8 -1
  21. benchflow-0.7.7/src/benchflow/sandbox/egress_denylist.py +351 -0
  22. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/sandbox/lockdown.py +35 -8
  23. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/sandbox/providers.py +9 -0
  24. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/task/config.py +109 -6
  25. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/task/runtime_capabilities.py +8 -0
  26. benchflow-0.7.7/tests/agents/test_codex_config.py +117 -0
  27. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/integration/rubric_checks.py +43 -13
  28. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_agent_registry.py +9 -0
  29. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_agent_spec.py +8 -0
  30. benchflow-0.7.7/tests/test_egress_denylist.py +570 -0
  31. benchflow-0.7.7/tests/test_egress_denylist_integration.py +259 -0
  32. benchflow-0.7.7/tests/test_egress_model_gateway.py +146 -0
  33. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_eval_source_provenance.py +3 -1
  34. benchflow-0.7.7/tests/test_hosted_search_policy.py +847 -0
  35. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_internet_policy.py +6 -8
  36. benchflow-0.7.7/tests/test_network_denylist_config.py +305 -0
  37. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_reexport.py +4 -0
  38. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_registry_invariants.py +21 -0
  39. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_rollout_planes_contract.py +21 -3
  40. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_task_runtime_primitive.py +7 -1
  41. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_trial_litellm_runtime.py +3 -1
  42. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_verify.py +3 -1
  43. benchflow-0.7.6.dev2255/tests/agents/test_codex_config.py +0 -63
  44. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/.gitignore +0 -0
  45. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/LICENSE +0 -0
  46. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/README.md +0 -0
  47. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/__init__.py +0 -0
  48. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/_dotenv.py +0 -0
  49. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/_paths.py +0 -0
  50. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/_run.py +0 -0
  51. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/_types.py +0 -0
  52. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/_utils/__init__.py +0 -0
  53. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/_utils/benchmark_repos.py +0 -0
  54. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/_utils/build_context_stage.py +0 -0
  55. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/_utils/config.py +0 -0
  56. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/_utils/config_override.py +0 -0
  57. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/_utils/content_address.py +0 -0
  58. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/_utils/dataset_registry.py +0 -0
  59. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/_utils/env_registry.py +0 -0
  60. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/_utils/evaluation_results.py +0 -0
  61. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/_utils/hf_datasets.py +0 -0
  62. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/_utils/json_safe.py +0 -0
  63. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/_utils/learner_memory.py +0 -0
  64. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/_utils/live_activity.py +0 -0
  65. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/_utils/result_metadata.py +0 -0
  66. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/_utils/reward_events.py +0 -0
  67. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/_utils/scoring.py +0 -0
  68. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/_utils/source_provenance.py +0 -0
  69. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/_utils/task_authoring/__init__.py +0 -0
  70. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/_utils/task_authoring/_evidence_paths.py +0 -0
  71. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/_utils/task_authoring/acceptance_evidence.py +0 -0
  72. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/_utils/task_authoring/scaffolding.py +0 -0
  73. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/_utils/task_authoring/structural_checks.py +0 -0
  74. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/_utils/text.py +0 -0
  75. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/_utils/yaml_loader.py +0 -0
  76. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/acp/__init__.py +0 -0
  77. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/acp/client.py +0 -0
  78. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/acp/container_transport.py +0 -0
  79. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/acp/selection.py +0 -0
  80. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/acp/session.py +0 -0
  81. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/acp/timeout_cleanup.py +0 -0
  82. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/acp/transport.py +0 -0
  83. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/acp/types.py +0 -0
  84. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/acp/watchdog.py +0 -0
  85. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/adapters/__init__.py +0 -0
  86. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/adapters/_toolathlon.py +0 -0
  87. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/adapters/_toolathlon_container.py +0 -0
  88. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/adapters/_toolathlon_fake_mail.py +0 -0
  89. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/adapters/_toolathlon_poste_users.tsv +0 -0
  90. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/adapters/_toolathlon_services.py +0 -0
  91. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/adapters/harbor.py +0 -0
  92. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/adapters/inbound.py +0 -0
  93. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/adapters/inspect_ai.py +0 -0
  94. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/adapters/ors.py +0 -0
  95. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/adapters/resources/__init__.py +0 -0
  96. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/adapters/resources/mcp_atlas_bridge.py +0 -0
  97. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/adapters/resources/mcp_atlas_judge.py +0 -0
  98. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/adapters/source.py +0 -0
  99. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/agent_router.py +0 -0
  100. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/agent_router_guide.py +0 -0
  101. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/agent_router_parity.py +0 -0
  102. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/agent_router_scaffold.py +0 -0
  103. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/agents/__init__.py +0 -0
  104. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/agents/credentials.py +0 -0
  105. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/agents/deepagents_acp_shim.py +0 -0
  106. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/agents/env.py +0 -0
  107. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/agents/errors.py +0 -0
  108. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/agents/harvey_lab_acp_shim.py +0 -0
  109. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/agents/openclaw_acp_shim.py +0 -0
  110. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/agents/pi_acp_launcher.py +0 -0
  111. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/agents/protocol.py +0 -0
  112. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/agents/providers.py +0 -0
  113. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/agents/remote_manifests.py +0 -0
  114. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/branch.py +0 -0
  115. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/cli/__init__.py +0 -0
  116. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/cli/_failure_evidence.py +0 -0
  117. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/cli/_hosted_env.py +0 -0
  118. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/cli/_live_progress.py +0 -0
  119. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/cli/_options.py +0 -0
  120. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/cli/_shared.py +0 -0
  121. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/cli/_traj_tui.py +0 -0
  122. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/cli/_traj_upload_ui.py +0 -0
  123. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/cli/adopt.py +0 -0
  124. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/cli/agent.py +0 -0
  125. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/cli/continue_cmd.py +0 -0
  126. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/cli/environment.py +0 -0
  127. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/cli/eval_artifacts.py +0 -0
  128. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/cli/eval_lift.py +0 -0
  129. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/cli/hub.py +0 -0
  130. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/cli/main.py +0 -0
  131. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/cli/monitor.py +0 -0
  132. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/cli/review.py +0 -0
  133. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/cli/sandbox.py +0 -0
  134. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/cli/skills.py +0 -0
  135. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/cli/tasks.py +0 -0
  136. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/cli/trace_import.py +0 -0
  137. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/cli/train.py +0 -0
  138. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/cli/traj.py +0 -0
  139. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/continue_run/__init__.py +0 -0
  140. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/continue_run/batch.py +0 -0
  141. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/continue_run/orchestrator.py +0 -0
  142. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/continue_run/replay_proxy.py +0 -0
  143. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/continue_run/run_folder.py +0 -0
  144. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/continue_run/sandbox_proxy.py +0 -0
  145. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/contracts/__init__.py +0 -0
  146. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/demo_task/environment/Dockerfile +0 -0
  147. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/demo_task/instruction.md +0 -0
  148. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/demo_task/task.md +0 -0
  149. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/demo_task/task.toml +0 -0
  150. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/demo_task/tests/test.sh +0 -0
  151. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/diagnostics.py +0 -0
  152. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/environment/__init__.py +0 -0
  153. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/environment/_registry/env0@outage.toml +0 -0
  154. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/environment/_registry/env0@prod.toml +0 -0
  155. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/environment/manifest.py +0 -0
  156. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/environment/manifest_env.py +0 -0
  157. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/environment/protocol.py +0 -0
  158. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/environment/readiness.py +0 -0
  159. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/eval_artifacts.py +0 -0
  160. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/eval_lift.py +0 -0
  161. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/eval_plan.py +0 -0
  162. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/eval_sharding.py +0 -0
  163. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/eval_worker.py +0 -0
  164. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/experimental/__init__.py +0 -0
  165. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/experimental/mcp/__init__.py +0 -0
  166. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/experimental/mcp/hooks.py +0 -0
  167. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/experimental/mcp/reviewer_server.py +0 -0
  168. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/hosted_env.py +0 -0
  169. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/hub/__init__.py +0 -0
  170. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/hub/harbor_registry.py +0 -0
  171. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/integrations/__init__.py +0 -0
  172. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/integrations/trl/__init__.py +0 -0
  173. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/integrations/trl/spec.py +0 -0
  174. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/learner_skills.py +0 -0
  175. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/learner_store.py +0 -0
  176. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/loop_strategies.py +0 -0
  177. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/loop_sweep.py +0 -0
  178. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/metrics.py +0 -0
  179. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/models.py +0 -0
  180. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/monitor.py +0 -0
  181. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/providers/__init__.py +0 -0
  182. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/providers/litellm_bedrock_patch.py +0 -0
  183. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/providers/litellm_bedrock_preflight.py +0 -0
  184. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/providers/litellm_config.py +0 -0
  185. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/providers/litellm_gemini_passthrough_patch.py +0 -0
  186. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/providers/litellm_logging.py +0 -0
  187. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/providers/litellm_runtime.py +0 -0
  188. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/providers/runtime.py +0 -0
  189. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/publish/__init__.py +0 -0
  190. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/publish/_progress.py +0 -0
  191. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/publish/azure_blob.py +0 -0
  192. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/publish/broker.py +0 -0
  193. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/publish/huggingface.py +0 -0
  194. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/publish/redact.py +0 -0
  195. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/publish/traj_capture.py +0 -0
  196. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/publish/traj_report.py +0 -0
  197. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/py.typed +0 -0
  198. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/review/__init__.py +0 -0
  199. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/review/config.py +0 -0
  200. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/review/default-rubric.json +0 -0
  201. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/review/prompts.py +0 -0
  202. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/review/runner.py +0 -0
  203. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/review/scoring.py +0 -0
  204. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/review/wrapper.py +0 -0
  205. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/rewards/README.md +0 -0
  206. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/rewards/__init__.py +0 -0
  207. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/rewards/builtins.py +0 -0
  208. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/rewards/events.py +0 -0
  209. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/rewards/file_readers.py +0 -0
  210. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/rewards/llm.py +0 -0
  211. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/rewards/memory_scorer.py +0 -0
  212. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/rewards/node.py +0 -0
  213. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/rewards/protocol.py +0 -0
  214. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/rewards/rubric.py +0 -0
  215. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/rewards/rubric_config.py +0 -0
  216. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/rewards/validation.py +0 -0
  217. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/rollout/_config.py +0 -0
  218. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/rollout/_deadline.py +0 -0
  219. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/rollout/_results.py +0 -0
  220. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/rollout/_skills.py +0 -0
  221. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/rollout/_usage.py +0 -0
  222. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/rollout/_user_loop.py +0 -0
  223. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/rollout/session_factory_runtime.py +0 -0
  224. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/rollout_branch.py +0 -0
  225. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/runtime.py +0 -0
  226. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/sandbox/__init__.py +0 -0
  227. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/sandbox/_base.py +0 -0
  228. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/sandbox/_cache_reclaim.py +0 -0
  229. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/sandbox/_compose_files/docker-compose-base.yaml +0 -0
  230. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/sandbox/_compose_files/docker-compose-build.yaml +0 -0
  231. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/sandbox/_compose_files/docker-compose-no-network.yaml +0 -0
  232. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/sandbox/_compose_files/docker-compose-prebuilt.yaml +0 -0
  233. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/sandbox/_sdk_ops.py +0 -0
  234. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/sandbox/agentcore.py +0 -0
  235. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/sandbox/agentcore_builder.py +0 -0
  236. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/sandbox/agentcore_image.py +0 -0
  237. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/sandbox/agentcore_provisioning.py +0 -0
  238. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/sandbox/agentcore_reaper.py +0 -0
  239. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/sandbox/agentcore_sealed.py +0 -0
  240. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/sandbox/apple_container.py +0 -0
  241. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/sandbox/daytona.py +0 -0
  242. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/sandbox/daytona_pty.py +0 -0
  243. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/sandbox/daytona_reaper.py +0 -0
  244. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/sandbox/daytona_strategies.py +0 -0
  245. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/sandbox/metadata.py +0 -0
  246. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/sandbox/modal_impl.py +0 -0
  247. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/sandbox/process/__init__.py +0 -0
  248. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/sandbox/process/_base.py +0 -0
  249. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/sandbox/process/agentcore.py +0 -0
  250. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/sandbox/process/apple.py +0 -0
  251. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/sandbox/process/daytona.py +0 -0
  252. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/sandbox/process/docker.py +0 -0
  253. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/sandbox/protocol.py +0 -0
  254. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/sandbox/services.py +0 -0
  255. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/sandbox/setup.py +0 -0
  256. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/sandbox/snapshot.py +0 -0
  257. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/sandbox/user.py +0 -0
  258. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/scenes.py +0 -0
  259. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/sdk.py +0 -0
  260. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/self_gen.py +0 -0
  261. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/skill_eval/__init__.py +0 -0
  262. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/skill_eval/_core.py +0 -0
  263. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/skill_eval/gepa_export.py +0 -0
  264. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/skill_eval/schema.py +0 -0
  265. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/skill_policy.py +0 -0
  266. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/skills.py +0 -0
  267. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/task/__init__.py +0 -0
  268. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/task/_document_evidence.py +0 -0
  269. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/task/_document_normalize.py +0 -0
  270. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/task/_document_parse.py +0 -0
  271. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/task/_document_profiles.py +0 -0
  272. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/task/acceptance_live.py +0 -0
  273. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/task/acceptance_live_model.py +0 -0
  274. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/task/acceptance_live_report.py +0 -0
  275. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/task/acceptance_live_validation.py +0 -0
  276. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/task/discovery.py +0 -0
  277. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/task/document.py +0 -0
  278. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/task/env.py +0 -0
  279. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/task/export.py +0 -0
  280. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/task/imports.py +0 -0
  281. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/task/output_format.py +0 -0
  282. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/task/package.py +0 -0
  283. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/task/paths.py +0 -0
  284. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/task/prompts.py +0 -0
  285. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/task/runtime_view.py +0 -0
  286. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/task/task.py +0 -0
  287. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/task/verifier.py +0 -0
  288. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/task/verifier_core.py +0 -0
  289. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/task/verifier_document.py +0 -0
  290. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/task/verifier_errors.py +0 -0
  291. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/task/verifier_judge_inputs.py +0 -0
  292. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/task/verifier_ors_episode.py +0 -0
  293. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/task/verifier_reward_kit.py +0 -0
  294. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/task/verifier_scan.py +0 -0
  295. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/task/verifier_script_strategy.py +0 -0
  296. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/templates/__init__.py +0 -0
  297. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/templates/judge.py.tmpl +0 -0
  298. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/templates/test.sh.tmpl +0 -0
  299. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/traces/__init__.py +0 -0
  300. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/traces/huggingface.py +0 -0
  301. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/traces/local.py +0 -0
  302. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/traces/models.py +0 -0
  303. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/traces/parsers.py +0 -0
  304. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/traces/task_gen.py +0 -0
  305. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/training/__init__.py +0 -0
  306. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/training/backends/__init__.py +0 -0
  307. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/training/backends/prime_rl.py +0 -0
  308. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/training/run_manifest.py +0 -0
  309. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/trajectories/__init__.py +0 -0
  310. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/trajectories/_capture.py +0 -0
  311. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/trajectories/_export_common.py +0 -0
  312. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/trajectories/_llm_capture.py +0 -0
  313. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/trajectories/call_purpose.py +0 -0
  314. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/trajectories/export.py +0 -0
  315. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/trajectories/export_adp.py +0 -0
  316. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/trajectories/export_atif.py +0 -0
  317. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/trajectories/export_prime_sft.py +0 -0
  318. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/trajectories/export_trl_sft.py +0 -0
  319. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/trajectories/metrics.py +0 -0
  320. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/trajectories/results.py +0 -0
  321. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/trajectories/sessions.py +0 -0
  322. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/trajectories/tree.py +0 -0
  323. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/trajectories/trl_sft_tokenization.py +0 -0
  324. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/trajectories/types.py +0 -0
  325. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/trajectories/viewer/__init__.py +0 -0
  326. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/trajectories/viewer/__main__.py +0 -0
  327. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/trajectories/viewer/assets/boot.js +0 -0
  328. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/trajectories/viewer/assets/catalog.js +0 -0
  329. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/trajectories/viewer/assets/detail.js +0 -0
  330. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/trajectories/viewer/assets/fonts/OFL-google-sans-code.txt +0 -0
  331. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/trajectories/viewer/assets/fonts/google-sans-code-400-latin.woff2 +0 -0
  332. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/trajectories/viewer/assets/fonts/google-sans-code-600-latin.woff2 +0 -0
  333. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/trajectories/viewer/assets/template.html +0 -0
  334. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/trajectories/viewer/assets/theme.css +0 -0
  335. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/trajectories/viewer/assets/viewer.css +0 -0
  336. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/trajectories/viewer/assets/viewer.js +0 -0
  337. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/trajectories/viewer/catalog.py +0 -0
  338. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/trajectories/viewer/legacy.py +0 -0
  339. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/trajectories/viewer/models.py +0 -0
  340. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/trajectories/viewer/payload.py +0 -0
  341. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/trajectories/viewer/render.py +0 -0
  342. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/trajectories/viewer/server.py +0 -0
  343. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/trajectories/viewer/sources.py +0 -0
  344. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/usage_tracking.py +0 -0
  345. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/__init__.py +0 -0
  346. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/acceptance_live_harness.py +0 -0
  347. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/agents/__init__.py +0 -0
  348. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/agents/test_manifest_dirscan.py +0 -0
  349. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/agents/test_manifest_loader.py +0 -0
  350. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/agents/test_manifest_parity.py +0 -0
  351. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/agents/test_manifest_wiring.py +0 -0
  352. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/agents/test_namespace_shorthand.py +0 -0
  353. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/agents/test_plugin_entry_points.py +0 -0
  354. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/agents/test_protocol.py +0 -0
  355. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/agents/test_remote_manifest_autoload.py +0 -0
  356. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/conformance/README.md +0 -0
  357. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/conformance/acp_smoke/environment/Dockerfile +0 -0
  358. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/conformance/acp_smoke/environment/docker-compose.yaml +0 -0
  359. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/conformance/acp_smoke/environment/skills/conformance-writer/SKILL.md +0 -0
  360. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/conformance/acp_smoke/instruction.md +0 -0
  361. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/conformance/acp_smoke/solution/solve.sh +0 -0
  362. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/conformance/acp_smoke/task.md +0 -0
  363. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/conformance/acp_smoke/task.toml +0 -0
  364. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/conformance/acp_smoke/tests/test.sh +0 -0
  365. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/conformance/conformance-results.json +0 -0
  366. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/conformance/proof_multi_agent.py +0 -0
  367. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/conformance/proof_snapshot.py +0 -0
  368. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/conformance/run_conformance.py +0 -0
  369. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/conformance/self_gen_smoke_skills/skill-creator/SKILL.md +0 -0
  370. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/conftest.py +0 -0
  371. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/continue_run/__init__.py +0 -0
  372. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/continue_run/_helpers.py +0 -0
  373. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/continue_run/test_batch.py +0 -0
  374. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/continue_run/test_orchestrator.py +0 -0
  375. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/continue_run/test_replay_proxy.py +0 -0
  376. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/continue_run/test_run_folder.py +0 -0
  377. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/environment/__init__.py +0 -0
  378. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/environment/test_chibench_manifest.py +0 -0
  379. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/environment/test_clawsbench_manifest.py +0 -0
  380. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/environment/test_manifest.py +0 -0
  381. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/environment/test_manifest_env.py +0 -0
  382. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/environment/test_protocol.py +0 -0
  383. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/environment/test_readiness.py +0 -0
  384. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/examples/hello-world-task/environment/Dockerfile +0 -0
  385. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/examples/hello-world-task/instruction.md +0 -0
  386. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/examples/hello-world-task/solution/solve.sh +0 -0
  387. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/examples/hello-world-task/task.md +0 -0
  388. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/examples/hello-world-task/task.toml +0 -0
  389. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/examples/hello-world-task/tests/test.sh +0 -0
  390. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/examples/test_claude.sh +0 -0
  391. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/examples/test_codex.sh +0 -0
  392. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/examples/test_codex_custom_provider.sh +0 -0
  393. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/examples/test_gemini.sh +0 -0
  394. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/examples/test_openclaw.sh +0 -0
  395. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/examples/traces/minimal-claude.jsonl +0 -0
  396. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/examples/traces/minimal-opentraces.jsonl +0 -0
  397. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/digest/README.md +0 -0
  398. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/digest/alpha-task/environment/Dockerfile +0 -0
  399. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/digest/alpha-task/instruction.md +0 -0
  400. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/digest/alpha-task/task.toml +0 -0
  401. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/digest/alpha-task/tests/test.sh +0 -0
  402. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/digest/beta-task/data/empty.bin +0 -0
  403. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/digest/beta-task/data/unicode.txt +0 -0
  404. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/digest/beta-task/instruction.md +0 -0
  405. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/digest/beta-task/task.toml +0 -0
  406. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/digest/not-a-task/notes.txt +0 -0
  407. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/mock_acp_agent.py +0 -0
  408. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/mock_acp_agent_interleaved.py +0 -0
  409. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/mock_acp_agent_multi_turn.py +0 -0
  410. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/mock_openai_responses_server.py +0 -0
  411. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/Dockerfile +0 -0
  412. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/data/michigan_stations.txt +0 -0
  413. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/flood-detection/SKILL.md +0 -0
  414. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/nws-flood-thresholds/SKILL.md +0 -0
  415. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/usgs-data-download/SKILL.md +0 -0
  416. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/flood-risk-analysis/instruction.md +0 -0
  417. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/flood-risk-analysis/solution/solve.sh +0 -0
  418. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/flood-risk-analysis/task.toml +0 -0
  419. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/flood-risk-analysis/tests/test.sh +0 -0
  420. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/flood-risk-analysis/tests/test_outputs.py +0 -0
  421. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/Dockerfile +0 -0
  422. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/climate.csv +0 -0
  423. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/hydrology.csv +0 -0
  424. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/land_cover.csv +0 -0
  425. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/water_temperature.csv +0 -0
  426. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/contribution-analysis/SKILL.md +0 -0
  427. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/meteorology-driver-classification/SKILL.md +0 -0
  428. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/pca-decomposition/SKILL.md +0 -0
  429. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/trend-analysis/SKILL.md +0 -0
  430. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/lake-warming-attribution/instruction.md +0 -0
  431. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/lake-warming-attribution/solution/solve.sh +0 -0
  432. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/lake-warming-attribution/task.toml +0 -0
  433. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/lake-warming-attribution/tests/test.sh +0 -0
  434. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/lake-warming-attribution/tests/test_outputs.py +0 -0
  435. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/manifest.json +0 -0
  436. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/Dockerfile +0 -0
  437. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/r2r_simulator.py +0 -0
  438. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/finite-horizon-lqr/SKILL.md +0 -0
  439. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/integral-action-design/SKILL.md +0 -0
  440. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/mpc-horizon-tuning/SKILL.md +0 -0
  441. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/state-space-linearization/SKILL.md +0 -0
  442. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/system_config.json +0 -0
  443. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/r2r-mpc-control/instruction.md +0 -0
  444. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/r2r-mpc-control/solution/solve.sh +0 -0
  445. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/r2r-mpc-control/task.toml +0 -0
  446. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/r2r-mpc-control/tests/test.sh +0 -0
  447. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/r2r-mpc-control/tests/test_outputs.py +0 -0
  448. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/Dockerfile +0 -0
  449. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/generate_training_pcaps.py +0 -0
  450. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/local.rules +0 -0
  451. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/pcap-triage-tshark/SKILL.md +0 -0
  452. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/pcap-triage-tshark/scripts/summarize_http_requests.sh +0 -0
  453. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-offline-evejson/SKILL.md +0 -0
  454. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-offline-evejson/scripts/run_suricata_offline.sh +0 -0
  455. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-rules-basics/SKILL.md +0 -0
  456. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/suricata.yaml +0 -0
  457. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/instruction.md +0 -0
  458. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/solution/solve.sh +0 -0
  459. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/task.toml +0 -0
  460. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/tests/test.sh +0 -0
  461. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/tests/test_outputs.py +0 -0
  462. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/Dockerfile +0 -0
  463. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syz-extract-constants/SKILL.md +0 -0
  464. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syzkaller-build-loop/SKILL.md +0 -0
  465. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syzlang-ioctl-basics/SKILL.md +0 -0
  466. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/instruction.md +0 -0
  467. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/solution/solve.sh +0 -0
  468. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/task.toml +0 -0
  469. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/tests/test.sh +0 -0
  470. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/tests/test_outputs.py +0 -0
  471. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/integration/_consistency.py +0 -0
  472. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/integration/agent_judge.py +0 -0
  473. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/integration/check_adapter_evidence.py +0 -0
  474. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/integration/check_hosted_env_evidence.py +0 -0
  475. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/integration/check_results.py +0 -0
  476. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/integration/check_skillsbench_harbor_parity.py +0 -0
  477. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/integration/check_trace_to_task_evidence.py +0 -0
  478. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/integration/configs/claude-agent-acp.yaml +0 -0
  479. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/integration/configs/codex-acp.yaml +0 -0
  480. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/integration/configs/gemini.yaml +0 -0
  481. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/integration/configs/harvey-lab-harness.yaml +0 -0
  482. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/integration/configs/mimo.yaml +0 -0
  483. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/integration/configs/openclaw.yaml +0 -0
  484. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/integration/configs/opencode.yaml +0 -0
  485. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/integration/configs/openhands.yaml +0 -0
  486. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/integration/configs/pi-acp.yaml +0 -0
  487. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/integration/deepagents_harness.py +0 -0
  488. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/integration/run.sh +0 -0
  489. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/integration/run_suite.py +0 -0
  490. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/integration/scenarios.py +0 -0
  491. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/integration/suites/release.yaml +0 -0
  492. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_acceptance_evidence.py +0 -0
  493. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_acceptance_live.py +0 -0
  494. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_acceptance_live_execution.py +0 -0
  495. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_acp.py +0 -0
  496. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_acp_capability_advertising.py +0 -0
  497. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_acp_mcp_servers.py +0 -0
  498. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_acp_model_config_dispatch.py +0 -0
  499. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_acp_pinned_protocol_guard.py +0 -0
  500. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_acp_setup_failure_propagation.py +0 -0
  501. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_acp_timeout_evidence.py +0 -0
  502. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_adapter_scripts.py +0 -0
  503. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_adapters.py +0 -0
  504. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_agent_cli.py +0 -0
  505. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_agent_env_resolution.py +0 -0
  506. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_agent_gemini_defaults.py +0 -0
  507. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_agent_idle_timeout_cli.py +0 -0
  508. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_agent_model_decouple.py +0 -0
  509. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_agent_router.py +0 -0
  510. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_agent_router_cli_e2e.py +0 -0
  511. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_agent_router_scaffold.py +0 -0
  512. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_agent_setup.py +0 -0
  513. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_agentcore_builder.py +0 -0
  514. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_agentcore_parallel.py +0 -0
  515. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_agentcore_reaper.py +0 -0
  516. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_agentcore_sandbox.py +0 -0
  517. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_agentcore_transport.py +0 -0
  518. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_api_error_capture.py +0 -0
  519. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_apple_container_sandbox.py +0 -0
  520. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_bare_model_provider.py +0 -0
  521. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_base_install_imports.py +0 -0
  522. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_bedrock_thinking.py +0 -0
  523. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_benchflow_experiment_review_validator.py +0 -0
  524. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_benchmark_repos_resolve_repo_path.py +0 -0
  525. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_branch.py +0 -0
  526. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_build_context_stage.py +0 -0
  527. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_build_review_pack.py +0 -0
  528. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_capture_trajectory.py +0 -0
  529. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_check_skillsbench_harbor_parity.py +0 -0
  530. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_clawsbench_slice.py +0 -0
  531. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_cli_adopt_aliases.py +0 -0
  532. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_cli_arg_validation.py +0 -0
  533. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_cli_daytona.py +0 -0
  534. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_cli_docs_drift.py +0 -0
  535. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_cli_edge_case_hardening.py +0 -0
  536. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_cli_hub_env.py +0 -0
  537. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_cli_live_progress.py +0 -0
  538. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_cli_misc.py +0 -0
  539. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_codex_review.py +0 -0
  540. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_codex_self_write_auth.py +0 -0
  541. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_config_override.py +0 -0
  542. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_config_redaction.py +0 -0
  543. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_connect_as_env.py +0 -0
  544. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_console_error_truncation.py +0 -0
  545. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_console_progress.py +0 -0
  546. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_continuallearningbench_adapter.py +0 -0
  547. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_dataset_registry.py +0 -0
  548. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_daytona_command_polling.py +0 -0
  549. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_daytona_dind_compose_up.py +0 -0
  550. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_daytona_download.py +0 -0
  551. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_daytona_litellm_runtime.py +0 -0
  552. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_daytona_poll_deadline.py +0 -0
  553. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_daytona_reap.py +0 -0
  554. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_deepagents_agent.py +0 -0
  555. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_diagnostics.py +0 -0
  556. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_docker_prune_scoping.py +0 -0
  557. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_docker_uploads.py +0 -0
  558. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_docs_examples.py +0 -0
  559. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_eng50_capabilities.py +0 -0
  560. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_env_registry.py +0 -0
  561. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_env_setup.py +0 -0
  562. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_environment_manifest_controls.py +0 -0
  563. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_eval_artifact_cli.py +0 -0
  564. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_eval_filters_applied.py +0 -0
  565. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_eval_lift.py +0 -0
  566. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_eval_sharding.py +0 -0
  567. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_eval_single_task_summary.py +0 -0
  568. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_eval_worker_retry.py +0 -0
  569. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_eval_zero_task_guard.py +0 -0
  570. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_evaluation_environment_manifest.py +0 -0
  571. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_exclude_tasks.py +0 -0
  572. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_filter_credentialed_cells.py +0 -0
  573. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_harvey_lab_shim.py +0 -0
  574. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_hilbench_adapter.py +0 -0
  575. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_hosted_env.py +0 -0
  576. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_hosted_env_rollout_contract.py +0 -0
  577. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_hub_harbor_registry.py +0 -0
  578. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_inbound_adapter_manifest.py +0 -0
  579. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_inbound_adapters.py +0 -0
  580. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_integration_agent_judge.py +0 -0
  581. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_integration_check_results.py +0 -0
  582. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_integration_consistency.py +0 -0
  583. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_integration_matrix.py +0 -0
  584. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_integration_provider_selection.py +0 -0
  585. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_integration_run_suite.py +0 -0
  586. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_integration_suite.py +0 -0
  587. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_job.py +0 -0
  588. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_job_sequential_shared.py +0 -0
  589. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_job_sequential_shared_resume.py +0 -0
  590. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_judge_robustness.py +0 -0
  591. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_judge_symlink_ingestion.py +0 -0
  592. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_learner_skills.py +0 -0
  593. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_learner_skills_traversal.py +0 -0
  594. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_learner_store.py +0 -0
  595. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_learner_store_persistence.py +0 -0
  596. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_litellm_config.py +0 -0
  597. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_litellm_gemini_passthrough_patch.py +0 -0
  598. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_litellm_hardening.py +0 -0
  599. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_litellm_logging.py +0 -0
  600. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_litellm_model_via_env_generic.py +0 -0
  601. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_litellm_reasoning_passthrough.py +0 -0
  602. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_litellm_runtime.py +0 -0
  603. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_litellm_smoke.py +0 -0
  604. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_live_llm_trajectory.py +0 -0
  605. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_llm_judge.py +0 -0
  606. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_llm_judge_event_tags.py +0 -0
  607. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_llm_judge_verifier.py +0 -0
  608. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_loop_strategies.py +0 -0
  609. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_loop_summary.py +0 -0
  610. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_loop_sweep.py +0 -0
  611. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_memory_scorer.py +0 -0
  612. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_metrics.py +0 -0
  613. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_mle_bench_adapter.py +0 -0
  614. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_mock_openai_responses_server.py +0 -0
  615. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_monitor_scaffold.py +0 -0
  616. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_native_acp_usage.py +0 -0
  617. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_no_cross_provider_fallback.py +0 -0
  618. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_notification_order_real.py +0 -0
  619. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_opencode_family_proxy_tracking.py +0 -0
  620. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_oracle.py +0 -0
  621. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_oracle_chokepoint.py +0 -0
  622. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_paths_safe.py +0 -0
  623. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_paths_symlink_helpers.py +0 -0
  624. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_pi_acp_launcher.py +0 -0
  625. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_pi_acp_proxy_routing.py +0 -0
  626. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_process.py +0 -0
  627. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_project_skills_layout.py +0 -0
  628. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_provider_auth_detection.py +0 -0
  629. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_providers.py +0 -0
  630. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_publish_azure_blob.py +0 -0
  631. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_publish_huggingface.py +0 -0
  632. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_release_hardening_r5.py +0 -0
  633. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_release_version.py +0 -0
  634. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_release_workflow_wiring.py +0 -0
  635. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_resolve_env_helpers.py +0 -0
  636. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_review_boundaries.py +0 -0
  637. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_review_rubric.py +0 -0
  638. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_review_runtime.py +0 -0
  639. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_reward_lenient.py +0 -0
  640. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_reward_node.py +0 -0
  641. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_reward_range.py +0 -0
  642. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_reward_unified_contract.py +0 -0
  643. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_rewards.py +0 -0
  644. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_rewards_jsonl.py +0 -0
  645. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_rollout_architecture.py +0 -0
  646. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_rollout_branch.py +0 -0
  647. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_rollout_config_path_coercion.py +0 -0
  648. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_rollout_environment.py +0 -0
  649. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_rollout_hard_deadline.py +0 -0
  650. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_rollout_import_no_side_effects.py +0 -0
  651. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_rollout_on_ask_user_wiring.py +0 -0
  652. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_rollout_probe_sandbox_health.py +0 -0
  653. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_rollout_session_factory_dispatch.py +0 -0
  654. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_rollout_setup_commands.py +0 -0
  655. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_rollout_upload.py +0 -0
  656. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_rubric_checks.py +0 -0
  657. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_rubric_config.py +0 -0
  658. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_runtime.py +0 -0
  659. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_runtime_capabilities.py +0 -0
  660. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_runtime_config_wired.py +0 -0
  661. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_runtime_live_sandbox.py +0 -0
  662. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_sandbox.py +0 -0
  663. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_sandbox_exec_secret_handling.py +0 -0
  664. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_sandbox_hardening.py +0 -0
  665. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_sandbox_isolation_copy_traversal.py +0 -0
  666. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_sandbox_live_process.py +0 -0
  667. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_sandbox_multi_service.py +0 -0
  668. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_sandbox_prebuilt_validation.py +0 -0
  669. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_sandbox_protocol.py +0 -0
  670. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_sandbox_provider_registry_drift.py +0 -0
  671. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_sandbox_setup.py +0 -0
  672. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_sandbox_snapshot_contract.py +0 -0
  673. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_sandbox_upload_symlink.py +0 -0
  674. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_sandbox_verifier_workspace.py +0 -0
  675. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_scene.py +0 -0
  676. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_scene_outbox_trial.py +0 -0
  677. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_scene_parallel_group.py +0 -0
  678. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_scene_result_aggregation.py +0 -0
  679. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_scoring.py +0 -0
  680. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_sdk_internals.py +0 -0
  681. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_sdk_lockdown.py +0 -0
  682. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_sdk_run_alias.py +0 -0
  683. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_sealed_channel_container.py +0 -0
  684. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_self_gen_cli.py +0 -0
  685. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_self_gen_export_error_channel.py +0 -0
  686. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_self_gen_export_failures.py +0 -0
  687. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_self_gen_orchestration.py +0 -0
  688. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_session_factory_runtime.py +0 -0
  689. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_session_request_permission_dispatch.py +0 -0
  690. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_skill_eval.py +0 -0
  691. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_skill_eval_dryrun.py +0 -0
  692. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_skill_eval_integration.py +0 -0
  693. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_skill_eval_sweep.py +0 -0
  694. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_skill_eval_traversal.py +0 -0
  695. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_skill_invocation_artifacts.py +0 -0
  696. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_skill_policy.py +0 -0
  697. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_skills.py +0 -0
  698. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_skills_dir_agent_home_link.py +0 -0
  699. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_skillsbench_conversion_conformance.py +0 -0
  700. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_skillsbench_harbor_run_suite.py +0 -0
  701. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_smoke.py +0 -0
  702. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_smoke_wiring.py +0 -0
  703. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_source_adapters.py +0 -0
  704. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_subscription_auth.py +0 -0
  705. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_task_check_eval_consistency.py +0 -0
  706. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_task_config.py +0 -0
  707. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_task_digest.py +0 -0
  708. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_task_document.py +0 -0
  709. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_task_download.py +0 -0
  710. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_task_export.py +0 -0
  711. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_task_output_format.py +0 -0
  712. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_task_package.py +0 -0
  713. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_tasks.py +0 -0
  714. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_token_usage_normalization.py +0 -0
  715. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_trace_import_cli.py +0 -0
  716. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_trace_task_gen_traversal.py +0 -0
  717. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_trace_to_task_evidence.py +0 -0
  718. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_traces_huggingface.py +0 -0
  719. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_traces_parsers.py +0 -0
  720. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_traces_task_gen.py +0 -0
  721. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_train_cli.py +0 -0
  722. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_train_mode_artifact_emission.py +0 -0
  723. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_train_trl_cli.py +0 -0
  724. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_traj_report.py +0 -0
  725. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_traj_staging_phases.py +0 -0
  726. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_traj_tui.py +0 -0
  727. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_traj_upload_cli.py +0 -0
  728. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_traj_upload_skill.py +0 -0
  729. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_traj_workspace.py +0 -0
  730. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_trajectory_integration.py +0 -0
  731. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_trajectory_streaming.py +0 -0
  732. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_trajectory_upload_layout.py +0 -0
  733. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_trajectory_upload_service.py +0 -0
  734. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_trial_agent_timeout_verify.py +0 -0
  735. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_trial_install_agent_timeout.py +0 -0
  736. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_trl_integration.py +0 -0
  737. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_usage_litellm.py +0 -0
  738. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_usage_required.py +0 -0
  739. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_usage_tracking.py +0 -0
  740. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_user.py +0 -0
  741. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_v06_guard_ports.py +0 -0
  742. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_verifier_document.py +0 -0
  743. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_verifier_multi_container.py +0 -0
  744. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_verifier_output.py +0 -0
  745. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_verifier_output_freshness.py +0 -0
  746. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_verifier_strategies.py +0 -0
  747. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_verifier_wedge_retry.py +0 -0
  748. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_viewer_confirm.py +0 -0
  749. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_workflow_action_pinning.py +0 -0
  750. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_yaml_config.py +0 -0
  751. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/trajectories/__init__.py +0 -0
  752. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/trajectories/test_export.py +0 -0
  753. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/trajectories/test_export_adp.py +0 -0
  754. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/trajectories/test_export_atif.py +0 -0
  755. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/trajectories/test_export_common.py +0 -0
  756. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/trajectories/test_export_nan_handling.py +0 -0
  757. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/trajectories/test_export_prime_sft.py +0 -0
  758. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/trajectories/test_redaction.py +0 -0
  759. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/trajectories/test_step_granularity.py +0 -0
  760. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/trajectories/test_tree.py +0 -0
  761. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/trajectories/test_viewer_acp_renderer.py +0 -0
  762. {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/trajectories/test_viewer_browser.py +0 -0
@@ -2,6 +2,41 @@
2
2
 
3
3
  ## [Unreleased]
4
4
 
5
+ ## 0.7.7 — 2026-09-09
6
+
7
+ ### Added
8
+ - **`network_mode: denylist` blocks a list of URLs and hosts for the agent on
9
+ Docker and Daytona.** The task keeps internet access; `blocked_urls` and
10
+ `blocked_hosts` are enforced by a root-owned loopback proxy behind the
11
+ sandbox-user firewall, hosted search tools are switched off per harness,
12
+ and every refused request lands in `trajectory/egress_denylist.jsonl`.
13
+ Other backends refuse the mode at preflight. (#1113)
14
+
15
+ ### Fixed
16
+
17
+ - **Denylist egress no longer cuts the agent off from its own model.** The
18
+ controller registers the running LiteLLM gateway's exact
19
+ `127.0.0.1:<port>` endpoint with the proxy, so clients that ignore
20
+ `NO_PROXY` (Gemini's Undici `ProxyAgent` tunnels even plain HTTP) still
21
+ reach it; the exception comes from the live gateway, never task metadata or
22
+ agent-supplied environment, and every other private destination stays
23
+ blocked. Reconnects re-register the current port. (#1118)
24
+ - **The denylist is a shared sandbox policy, not a per-harness one.** Every
25
+ supported ACP harness — custom registrations included — gets the same proxy,
26
+ certificates, and UID firewall on primary connections and later roles alike,
27
+ independent of harness name, model id, or provider. (#1118)
28
+ - **`codex-acp` sessions are configured through native ACP settings.** Hosted
29
+ search is switched off via `CODEX_CONFIG.web_search` (the CLI ignores `-c`
30
+ overrides), and Codex runs in `agent-full-access` session mode when
31
+ BenchFlow has already selected a non-root sandbox user, so its bubblewrap
32
+ sandbox is not nested inside Docker or Daytona — BenchFlow's own user,
33
+ filesystem restrictions, proxy, and firewall still apply. (#1118)
34
+ - **`cryptography>=44` is a core dependency.** Denylist egress mints TLS
35
+ certificates on both Docker and Daytona, so the pin moved out of the
36
+ `sandbox-agentcore` extra. (#1118)
37
+
38
+ ## 0.7.6 — 2026-09-04
39
+
5
40
  ### Added
6
41
  - **ACP rollout directories render as an interactive reviewer page.**
7
42
  `bench eval view <rollout>` now assembles a JSON payload (normalized
@@ -42,6 +77,48 @@
42
77
  timestamps.** Steps gain a `+m:ss` offset chip and tool calls a duration
43
78
  chip whenever events carry `ts` / `started_at` / `finished_at` fields;
44
79
  with today's captures (which carry none) nothing changes visually.
80
+ - **Z.ai Coding Plan routing.** Coding Plan subscriptions route through the
81
+ provider layer, with validated generation parameters forwarded and explicit
82
+ provider endpoints preserved by the LiteLLM proxy. (#1074)
83
+ - **`bench eval run` publishes job artifacts and eval results.**
84
+ `--publish-bucket` syncs a job directory to a HuggingFace storage bucket (an
85
+ alternative to `--publish-hf`'s dataset-repo upload), and
86
+ `--eval-results-model/-dataset/-task` opens a community eval-results PR
87
+ (`.eval_results/*.yaml`) on a model's HF repo, scored from the run's mean
88
+ reward. (#1035)
89
+
90
+ ### Fixed
91
+
92
+ - **`claude-fable-5-1` can run: the `claude-agent-acp` pin moves 0.40.0 to
93
+ 0.73.0.** The old pin bundled `@anthropic-ai/claude-agent-sdk` 0.3.160, and
94
+ the model rejects Claude Code older than 2.1.251 with
95
+ `claude_code_version_too_old` (HTTP 400) — so every rollout failed on its
96
+ first API call. The new pin bundles sdk 0.3.257, and the `set_config_option`
97
+ `"model"` / `"effort"` wiring is re-verified against it by
98
+ `tests/test_acp_pinned_protocol_guard.py`. (#1086)
99
+ - **`codex-acp` dispatch modernized.** The shim pin moves to 1.6.0 and
100
+ reasoning effort travels inside the model id (`modelId[effort]`) through
101
+ `session/set_model`, rather than a config option the shim rejects. (#1044)
102
+ - **ACP usage and terminal evidence survive an agent timeout**, instead of
103
+ being dropped with the timed-out turn. (#1080)
104
+ - **A pending tool call can no longer defer the idle watchdog without
105
+ bound** — the deferral is capped. (#1066)
106
+ - **`bench eval` resume re-runs infra-retryable verifier-errored tasks**
107
+ rather than treating the infrastructure failure as a settled result. (#1063)
108
+ - **Sandbox hardening execs draw on the verifier-setup budget**, so hardening
109
+ no longer competes with the agent's own time. (#1062)
110
+ - **`--trials > 1` without `--matrix` is rejected up front.** (#1064)
111
+ - **Healthy native ACP subscription results are preserved.** (#1049)
112
+ - **The agent judge parses native edit targets.** (#1069)
113
+ - **Non-dict rewards no longer break completed-outcome classification.** (#1054)
114
+ - **Codex honors proxy-owned model selection.** (#1076)
115
+ - **Gemini routing corrections.** ACP model ids fixed and wrapped ids
116
+ normalized, Gemma routing supported with pass-through usage captured, every
117
+ Google key alias routed through the proxy, Google Gemini gateway routes
118
+ normalized, and headless runs trust the sandbox workspace.
119
+ - **LiteLLM provisions the Vertex sandbox runtime.** (#985)
120
+ - **OpenClaw caps supported model output tokens.**
121
+ - **RestrictedPython updated to 8.3.**
45
122
 
46
123
  ## 0.7.5 — 2026-08-19
47
124
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: benchflow
3
- Version: 0.7.6.dev2255
3
+ Version: 0.7.7
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
@@ -20,6 +20,7 @@ Classifier: Programming Language :: Python :: 3.13
20
20
  Requires-Python: >=3.12
21
21
  Requires-Dist: agent-client-protocol>=0.10
22
22
  Requires-Dist: anyio>=4.0
23
+ Requires-Dist: cryptography>=44
23
24
  Requires-Dist: google-cloud-aiplatform<2.0,>=1.133.0
24
25
  Requires-Dist: httpx>=0.27.0
25
26
  Requires-Dist: litellm[proxy]==1.91.0
@@ -58,7 +59,6 @@ Requires-Dist: openai>=1.40; extra == 'judge'
58
59
  Provides-Extra: sandbox-agentcore
59
60
  Requires-Dist: bedrock-agentcore>=1.18; extra == 'sandbox-agentcore'
60
61
  Requires-Dist: boto3>=1.43.31; extra == 'sandbox-agentcore'
61
- Requires-Dist: cryptography>=44; extra == 'sandbox-agentcore'
62
62
  Requires-Dist: pathspec>=0.12; extra == 'sandbox-agentcore'
63
63
  Provides-Extra: sandbox-daytona
64
64
  Requires-Dist: daytona>=0.184.0; extra == 'sandbox-daytona'
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "benchflow"
3
- version = "0.7.6.dev2255"
3
+ version = "0.7.7"
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"
@@ -12,6 +12,8 @@ dependencies = [
12
12
  "pydantic>=2.7",
13
13
  "pyyaml>=6.0",
14
14
  "rich>=13.0",
15
+ # Denylist egress mints TLS certificates on both Docker and Daytona.
16
+ "cryptography>=44",
15
17
  # Dataset registry bench_version checks (PEP 440 specifier sets).
16
18
  "packaging>=24",
17
19
  "litellm[proxy]==1.91.0",
@@ -100,10 +102,6 @@ sandbox-agentcore = [
100
102
  # (InvokeAgentRuntimeCommand). The boto3 floor is the first release that
101
103
  # models the bedrock-agentcore/-control services.
102
104
  "bedrock-agentcore>=1.18",
103
- # Used directly by the sealed AgentCore transport (RSA-OAEP key wrap +
104
- # AES-CTR/HMAC). It otherwise arrives only transitively via
105
- # litellm[proxy]; declaring it here keeps the dependency honest.
106
- "cryptography>=44",
107
105
  "boto3>=1.43.31",
108
106
  # Docker-compatible build-context filtering without requiring a daemon.
109
107
  "pathspec>=0.12",
@@ -621,6 +621,7 @@ async def connect_acp(
621
621
  agent_env,
622
622
  model=model,
623
623
  reasoning_effort=reasoning_effort,
624
+ sandboxed=bool(sandbox_user),
624
625
  )
625
626
  agent_env = await _prepare_openhands_direct_execution(
626
627
  env,
@@ -91,11 +91,23 @@ def apply_codex_launch_config(
91
91
  *,
92
92
  model: str | None,
93
93
  reasoning_effort: str | None,
94
+ sandboxed: bool = False,
94
95
  ) -> tuple[dict[str, str], bool]:
95
- """Apply launch-owned effort and report whether config owns model selection."""
96
+ """Configure the adapter's sandbox, web policy and launch-owned model effort."""
96
97
  if agent != "codex-acp":
97
98
  return agent_env, False
98
- config = _parse_codex_config(agent_env.get(CODEX_CONFIG_ENV))
99
+ updated_env = dict(agent_env)
100
+ if sandboxed:
101
+ # BenchFlow's non-root sandbox and UID firewall own isolation. The
102
+ # adapter defaults to workspace-write, whose nested bwrap fails on
103
+ # Docker/Daytona before tools run. CODEX_CONFIG.sandbox_mode does not
104
+ # fix this: codex-acp overrides it with its session's AgentMode.
105
+ updated_env.setdefault("INITIAL_AGENT_MODE", "agent-full-access")
106
+ disable_search = any(
107
+ agent_env.get(key) == "1"
108
+ for key in ("BENCHFLOW_DISALLOW_WEB_TOOLS", "BENCHFLOW_EGRESS_DENYLIST")
109
+ )
110
+ config = _parse_codex_config(agent_env.get(CODEX_CONFIG_ENV), strict=disable_search)
99
111
  provider_model = agent_env.get(_PROVIDER_MODEL_ENV)
100
112
  owns_model = bool(
101
113
  model
@@ -105,14 +117,15 @@ def apply_codex_launch_config(
105
117
  and config is not None
106
118
  and config.get("model") == provider_model
107
119
  )
108
- if not owns_model or not reasoning_effort:
109
- return agent_env, owns_model
110
-
111
- assert config is not None
112
- updated_env = dict(agent_env)
113
- config["model_reasoning_effort"] = reasoning_effort
114
- updated_env[CODEX_CONFIG_ENV] = json.dumps(config, separators=(",", ":"))
115
- return updated_env, True
120
+ if config is not None and (disable_search or (owns_model and reasoning_effort)):
121
+ if disable_search:
122
+ # codex-acp 1.6.0 ignores CLI -c flags; its supported CODEX_CONFIG
123
+ # is forwarded to the Codex app-server's thread configuration.
124
+ config["web_search"] = "disabled"
125
+ if owns_model and reasoning_effort:
126
+ config["model_reasoning_effort"] = reasoning_effort
127
+ updated_env[CODEX_CONFIG_ENV] = json.dumps(config, separators=(",", ":"))
128
+ return (updated_env if updated_env != agent_env else agent_env), owns_model
116
129
 
117
130
 
118
131
  def _apply_codex_default_auth_request(
@@ -99,7 +99,7 @@ def _owner_from_home(home: str) -> str | None:
99
99
 
100
100
 
101
101
  def _policy_home_dirs(agent: str, agent_cfg: AgentConfig) -> list[str]:
102
- """Agent home dirs a no-web setup command may create."""
102
+ """Agent home dirs a web-policy setup command may create."""
103
103
  dirs = set(agent_cfg.home_dirs)
104
104
  for owned_path in agent_cfg.disallow_web_tools_owned_paths:
105
105
  if not owned_path.startswith("$HOME/"):
@@ -265,15 +265,21 @@ async def apply_web_tool_policy(
265
265
  home: str,
266
266
  *,
267
267
  disallow: bool,
268
+ disallow_hosted_search: bool = False,
268
269
  ) -> None:
269
- """Apply an agent-specific hard web-tool disable in the agent home."""
270
- if not disallow or not agent_cfg or not agent_cfg.disallow_web_tools_setup_cmd:
270
+ """Apply the agent's no-web or hosted-search-off setup command in the agent home."""
271
+ if not agent_cfg:
272
+ return
273
+ if disallow:
274
+ policy, setup_cmd = "no-web", agent_cfg.disallow_web_tools_setup_cmd
275
+ elif disallow_hosted_search:
276
+ policy, setup_cmd = "hosted-search", agent_cfg.disallow_hosted_search_setup_cmd
277
+ else:
278
+ return
279
+ if not setup_cmd:
271
280
  return
272
281
 
273
- cmd = (
274
- f"export BENCHFLOW_AGENT_HOME={shlex.quote(home)}; "
275
- f"{agent_cfg.disallow_web_tools_setup_cmd}"
276
- )
282
+ cmd = f"export BENCHFLOW_AGENT_HOME={shlex.quote(home)}; {setup_cmd}"
277
283
  owner = _owner_from_home(home)
278
284
  if owner:
279
285
  q_owner = shlex.quote(owner)
@@ -296,7 +302,7 @@ async def apply_web_tool_policy(
296
302
  if stderr:
297
303
  details.append(f"stderr: {stderr}")
298
304
  raise RuntimeError(
299
- f"Failed to apply no-web policy for {agent}: {'; '.join(details)}"
305
+ f"Failed to apply {policy} policy for {agent}: {'; '.join(details)}"
300
306
  )
301
307
 
302
308
 
@@ -89,6 +89,8 @@ _SHIM_ONLY = frozenset(
89
89
  "disallow_web_tools_setup_cmd",
90
90
  "disallow_web_tools_owned_paths",
91
91
  "disallow_web_tools_launch_suffix",
92
+ "disallow_hosted_search_setup_cmd",
93
+ "disallow_hosted_search_launch_suffix",
92
94
  "task_mcp_transport",
93
95
  "task_mcp_config_path",
94
96
  }
@@ -502,6 +502,12 @@ class AgentConfig:
502
502
  # String appended to launch_cmd when BenchFlow's no-web policy is active.
503
503
  # Use for agents whose supported toggle is a launch/config override.
504
504
  disallow_web_tools_launch_suffix: str = ""
505
+ # Shell snippet that switches off hosted (provider-side) search tools when
506
+ # the denylist egress policy is active; local fetch tools stay on because
507
+ # they go through the egress proxy. Reuses disallow_web_tools_owned_paths.
508
+ disallow_hosted_search_setup_cmd: str = ""
509
+ # String appended to launch_cmd when the denylist egress policy is active.
510
+ disallow_hosted_search_launch_suffix: str = ""
505
511
  # How task-declared MCP servers are delivered to the agent:
506
512
  # "acp" sends them in session/new; "native-config" writes an agent-specific
507
513
  # config file before launch (for agents whose ACP server drops/reformats
@@ -511,6 +517,15 @@ class AgentConfig:
511
517
  task_mcp_config_path: str = ""
512
518
 
513
519
 
520
+ _GEMINI_EXCLUDE_WEB_TOOLS_CMD = _json_settings_merge(
521
+ "$BENCHFLOW_AGENT_HOME/.gemini/settings.json",
522
+ 'd.setdefault("tools",{}).setdefault("exclude",[]);'
523
+ '[d["tools"]["exclude"].append(t) for t in '
524
+ '["google_web_search","web_fetch"] '
525
+ 'if t not in d["tools"]["exclude"]]',
526
+ )
527
+
528
+
514
529
  # Agent registry — all supported agents
515
530
  AGENTS: dict[str, AgentConfig] = {
516
531
  "claude-agent-acp": AgentConfig(
@@ -552,6 +567,12 @@ AGENTS: dict[str, AgentConfig] = {
552
567
  'if t not in d["permissions"]["deny"]]',
553
568
  ),
554
569
  disallow_web_tools_owned_paths=["$HOME/.claude"],
570
+ disallow_hosted_search_setup_cmd=_json_settings_merge(
571
+ "$BENCHFLOW_AGENT_HOME/.claude/settings.json",
572
+ 'd.setdefault("permissions",{}).setdefault("deny",[]);'
573
+ '[d["permissions"]["deny"].append(t) for t in ["WebSearch"] '
574
+ 'if t not in d["permissions"]["deny"]]',
575
+ ),
555
576
  supports_acp_set_model=False,
556
577
  acp_model_config_id="model",
557
578
  acp_effort_config_id="effort",
@@ -649,7 +670,8 @@ AGENTS: dict[str, AgentConfig] = {
649
670
  HostAuthFile("~/.codex/auth.json", "{home}/.codex/auth.json"),
650
671
  ],
651
672
  ),
652
- disallow_web_tools_launch_suffix=" -c tools.web_search=false",
673
+ # codex-acp ignores CLI -c flags. codex_config applies the web policy
674
+ # through CODEX_CONFIG before launching the adapter.
653
675
  ),
654
676
  "gemini": AgentConfig(
655
677
  name="gemini",
@@ -694,14 +716,11 @@ AGENTS: dict[str, AgentConfig] = {
694
716
  ),
695
717
  ],
696
718
  ),
697
- disallow_web_tools_setup_cmd=_json_settings_merge(
698
- "$BENCHFLOW_AGENT_HOME/.gemini/settings.json",
699
- 'd.setdefault("tools",{}).setdefault("exclude",[]);'
700
- '[d["tools"]["exclude"].append(t) for t in '
701
- '["google_web_search","web_fetch"] '
702
- 'if t not in d["tools"]["exclude"]]',
703
- ),
719
+ disallow_web_tools_setup_cmd=_GEMINI_EXCLUDE_WEB_TOOLS_CMD,
704
720
  disallow_web_tools_owned_paths=["$HOME/.gemini"],
721
+ # web_fetch tries the hosted urlContext path before any local fetch, so
722
+ # the egress proxy cannot filter it; the denylist excludes both tools.
723
+ disallow_hosted_search_setup_cmd=_GEMINI_EXCLUDE_WEB_TOOLS_CMD,
705
724
  ),
706
725
  "opencode": AgentConfig(
707
726
  name="opencode",
@@ -730,6 +749,10 @@ AGENTS: dict[str, AgentConfig] = {
730
749
  'd.setdefault("tools",{})["webfetch"]=False',
731
750
  ),
732
751
  disallow_web_tools_owned_paths=["$HOME/.config/opencode"],
752
+ disallow_hosted_search_setup_cmd=_json_settings_merge(
753
+ "$BENCHFLOW_AGENT_HOME/.config/opencode/opencode.json",
754
+ 'd.setdefault("tools",{})["websearch"]=False',
755
+ ),
733
756
  ),
734
757
  "mimo": AgentConfig(
735
758
  name="mimo",
@@ -779,6 +802,10 @@ AGENTS: dict[str, AgentConfig] = {
779
802
  'd.setdefault("tools",{})["webfetch"]=False',
780
803
  ),
781
804
  disallow_web_tools_owned_paths=["$HOME/.config/mimocode"],
805
+ disallow_hosted_search_setup_cmd=_json_settings_merge(
806
+ "$BENCHFLOW_AGENT_HOME/.config/mimocode/mimocode.json",
807
+ 'd.setdefault("tools",{})["websearch"]=False',
808
+ ),
782
809
  ),
783
810
  "harvey-lab-harness": AgentConfig(
784
811
  name="harvey-lab-harness",
@@ -1183,6 +1210,8 @@ def _acpx_wrap(config: AgentConfig) -> AgentConfig:
1183
1210
  disallow_web_tools_setup_cmd=config.disallow_web_tools_setup_cmd,
1184
1211
  disallow_web_tools_owned_paths=config.disallow_web_tools_owned_paths,
1185
1212
  disallow_web_tools_launch_suffix=config.disallow_web_tools_launch_suffix,
1213
+ disallow_hosted_search_setup_cmd=config.disallow_hosted_search_setup_cmd,
1214
+ disallow_hosted_search_launch_suffix=config.disallow_hosted_search_launch_suffix,
1186
1215
  task_mcp_transport=config.task_mcp_transport,
1187
1216
  task_mcp_config_path=config.task_mcp_config_path,
1188
1217
  )
@@ -1377,6 +1406,8 @@ def register_agent(
1377
1406
  disallow_web_tools_setup_cmd: str = "",
1378
1407
  disallow_web_tools_owned_paths: list[str] | None = None,
1379
1408
  disallow_web_tools_launch_suffix: str = "",
1409
+ disallow_hosted_search_setup_cmd: str = "",
1410
+ disallow_hosted_search_launch_suffix: str = "",
1380
1411
  ) -> AgentConfig:
1381
1412
  """Register a custom agent at runtime.
1382
1413
 
@@ -1416,6 +1447,8 @@ def register_agent(
1416
1447
  disallow_web_tools_setup_cmd=disallow_web_tools_setup_cmd,
1417
1448
  disallow_web_tools_owned_paths=disallow_web_tools_owned_paths or [],
1418
1449
  disallow_web_tools_launch_suffix=disallow_web_tools_launch_suffix,
1450
+ disallow_hosted_search_setup_cmd=disallow_hosted_search_setup_cmd,
1451
+ disallow_hosted_search_launch_suffix=disallow_hosted_search_launch_suffix,
1419
1452
  )
1420
1453
  AGENTS[name] = config
1421
1454
  AGENT_INSTALLERS[name] = install_cmd
@@ -8,10 +8,13 @@ the composition edge so the kernel does not import those concrete modules.
8
8
  from __future__ import annotations
9
9
 
10
10
  from pathlib import Path
11
- from typing import Any, Protocol, runtime_checkable
11
+ from typing import TYPE_CHECKING, Any, Protocol, runtime_checkable
12
12
 
13
13
  from benchflow.environment.manifest import EnvironmentManifest
14
14
 
15
+ if TYPE_CHECKING:
16
+ from benchflow.sandbox.egress_denylist import EgressDenylist
17
+
15
18
 
16
19
  class LiveUsageGateway(Protocol):
17
20
  """A provider gateway process that reports live cumulative token usage.
@@ -33,7 +36,13 @@ class LiveUsageGateway(Protocol):
33
36
  class RolloutPlanes(Protocol):
34
37
  """Concrete-plane operations the rollout kernel needs."""
35
38
 
36
- def agent_launch(self, agent: str, *, disallow_web_tools: bool) -> str: ...
39
+ def agent_launch(
40
+ self,
41
+ agent: str,
42
+ *,
43
+ disallow_web_tools: bool,
44
+ disallow_hosted_search: bool = False,
45
+ ) -> str: ...
37
46
  def agent_config(self, agent: str) -> Any: ...
38
47
 
39
48
  def resolve_agent_env(
@@ -102,6 +111,15 @@ class RolloutPlanes(Protocol):
102
111
  async def link_skill_paths(self, *args: Any, **kwargs: Any) -> None: ...
103
112
  async def ensure_litellm_runtime(self, *args: Any, **kwargs: Any) -> Any: ...
104
113
  async def stop_provider_runtime(self, runtime: Any) -> None: ...
114
+ async def start_egress_denylist(
115
+ self,
116
+ env: Any,
117
+ sandbox_user: str | None,
118
+ denylist: EgressDenylist,
119
+ *,
120
+ model_gateway_url: str | None = None,
121
+ ) -> None: ...
122
+ async def stop_egress_denylist(self, env: Any, rollout_dir: Path) -> None: ...
105
123
  def extract_usage(self, runtime: Any) -> dict[str, Any]: ...
106
124
  async def connect_acp(self, *args: Any, **kwargs: Any) -> Any: ...
107
125
  async def execute_prompts(self, *args: Any, **kwargs: Any) -> Any: ...
@@ -62,7 +62,7 @@ class FunctionUser(BaseUser):
62
62
  self,
63
63
  fn: Callable[
64
64
  [int, str, RoundResult | None],
65
- str | None | Awaitable[str | None],
65
+ str | Awaitable[str | None] | None,
66
66
  ],
67
67
  ) -> None:
68
68
  self._fn = fn
@@ -64,6 +64,7 @@ from benchflow._utils.scoring import (
64
64
  classify_verifier_error,
65
65
  count_audit_outcomes,
66
66
  count_score_outcomes,
67
+ extract_reward,
67
68
  mean_scored_reward,
68
69
  pass_rate,
69
70
  pass_rate_excl_errors,
@@ -431,8 +432,7 @@ def _classify_completed_outcomes(
431
432
  """
432
433
  passed = failed = errored = 0
433
434
  for r in completed.values():
434
- rewards = r.get("rewards") if isinstance(r, dict) else None
435
- reward = rewards.get("reward") if rewards else None
435
+ reward = extract_reward(r) if isinstance(r, dict) else None
436
436
  if reward == 1:
437
437
  passed += 1
438
438
  elif reward is not None:
@@ -1107,6 +1107,17 @@ class Evaluation:
1107
1107
  r = json.loads(rfile.read_text())
1108
1108
  task = r["task_name"]
1109
1109
  if r.get("rewards") is not None or r.get("verifier_error"):
1110
+ rewards = r.get("rewards")
1111
+ if rewards is not None and not isinstance(rewards, dict):
1112
+ logger.warning(
1113
+ "Malformed rewards field in %s for task %r: "
1114
+ "expected dict or null, got %s %r — "
1115
+ "treating as no reward (task will count as errored)",
1116
+ rfile,
1117
+ task,
1118
+ type(rewards).__name__,
1119
+ rewards,
1120
+ )
1110
1121
  rank = (
1111
1122
  r.get("rewards") is not None,
1112
1123
  rfile.stat().st_mtime,
@@ -149,6 +149,7 @@ from benchflow.rollout._setup import _start_env_and_upload as _start_env_and_upl
149
149
  from benchflow.rollout._setup import (
150
150
  _task_disallows_internet as _task_disallows_internet,
151
151
  )
152
+ from benchflow.rollout._setup import _task_egress_denylist as _task_egress_denylist
152
153
  from benchflow.rollout._setup import _verify_rollout as _verify_rollout
153
154
  from benchflow.rollout._skills import (
154
155
  _resolve_skill_creator_root as _resolve_skill_creator_root,
@@ -197,6 +198,7 @@ from benchflow.rollout.task_runtime import TaskRuntimeConfig as TaskRuntimeConfi
197
198
  from benchflow.rollout.task_runtime import TaskRuntimeResult as TaskRuntimeResult
198
199
  from benchflow.rollout_branch import ChildRunner
199
200
  from benchflow.rollout_branch import branch as _branch_engine
201
+ from benchflow.sandbox.egress_denylist import EgressDenylist, denylist_agent_env
200
202
  from benchflow.sandbox.metadata import persist_sandbox_info
201
203
  from benchflow.scenes import compile_scenes_to_steps
202
204
  from benchflow.scenes import scene_step_prompt as scene_step_prompt
@@ -658,6 +660,8 @@ class Rollout:
658
660
  self._timing: dict[str, float] = {}
659
661
  self._effective_locked: list[str] = []
660
662
  self._disallow_web_tools: bool = False
663
+ self._egress_denylist: EgressDenylist | None = None
664
+ self._disallow_hosted_search: bool = False
661
665
  self._effective_skills_dir: Path | None = None
662
666
  self._effective_skills_sandbox_dir: str | None = None
663
667
  # Task dir actually deployed: a temp copy (self._task_tmp) when
@@ -952,6 +956,14 @@ class Rollout:
952
956
  self._disallow_web_tools = (
953
957
  _task_disallows_internet(self._task) or cfg.self_gen_no_internet
954
958
  ) and cfg.primary_agent != "oracle"
959
+ self._egress_denylist = (
960
+ None
961
+ if self._disallow_web_tools or cfg.primary_agent == "oracle"
962
+ else _task_egress_denylist(self._task)
963
+ )
964
+ if self._egress_denylist is not None and not cfg.sandbox_user:
965
+ raise ValueError("network_mode='denylist' requires a sandbox_user")
966
+ self._disallow_hosted_search = self._egress_denylist is not None
955
967
  self._agent_env = _apply_web_policy(
956
968
  self._planes.resolve_agent_env(
957
969
  cfg.primary_agent, cfg.primary_model, cfg.agent_env
@@ -973,6 +985,7 @@ class Rollout:
973
985
  self._agent_launch = self._planes.agent_launch(
974
986
  cfg.primary_agent,
975
987
  disallow_web_tools=self._disallow_web_tools,
988
+ disallow_hosted_search=self._disallow_hosted_search,
976
989
  )
977
990
 
978
991
  # Copy task dir to temp when Dockerfile mutations are needed
@@ -1231,6 +1244,7 @@ class Rollout:
1231
1244
  self._agent_cfg,
1232
1245
  cred_home,
1233
1246
  disallow=self._disallow_web_tools,
1247
+ disallow_hosted_search=self._disallow_hosted_search,
1234
1248
  )
1235
1249
  await self._planes.snapshot_build_config(self._env, workspace=self._agent_cwd)
1236
1250
  await self._planes.seed_verifier_workspace(
@@ -1274,11 +1288,22 @@ class Rollout:
1274
1288
  return cfg.session_factory
1275
1289
  return None
1276
1290
 
1291
+ async def _start_egress_denylist(self, denylist: EgressDenylist) -> None:
1292
+ """(Re)start the egress proxy before an ACP connection; a restored sandbox has none running."""
1293
+ runtime = self._usage_runtime
1294
+ await self._planes.start_egress_denylist(
1295
+ self._env,
1296
+ self._config.sandbox_user,
1297
+ denylist,
1298
+ model_gateway_url=runtime.agent_base_url if runtime is not None else None,
1299
+ )
1300
+
1277
1301
  async def connect(self) -> None:
1278
1302
  """Open an ACP connection to the agent. Can be called multiple times."""
1279
1303
  cfg = self._config
1280
1304
  rollout_dir = self._require_rollout_dir()
1281
1305
  t0 = datetime.now()
1306
+ egress_denylist = getattr(self, "_egress_denylist", None)
1282
1307
 
1283
1308
  (
1284
1309
  self._agent_env,
@@ -1295,11 +1320,16 @@ class Rollout:
1295
1320
  sandbox_setup_timeout=cfg.sandbox_setup_timeout,
1296
1321
  required_skill_names=getattr(self, "_required_skill_names", ()),
1297
1322
  live_trajectory_path=rollout_dir / "trajectory" / "llm_trajectory.jsonl",
1298
- force_sandbox_local=getattr(self, "_disallow_web_tools", False),
1323
+ force_sandbox_local=getattr(self, "_disallow_web_tools", False)
1324
+ or egress_denylist is not None,
1299
1325
  )
1326
+ if egress_denylist is not None:
1327
+ self._agent_env = denylist_agent_env(self._agent_env)
1300
1328
  sf_entrypoint = self._session_factory_entrypoint(cfg.primary_agent)
1301
1329
  self._is_session_factory = sf_entrypoint is not None
1302
1330
  if sf_entrypoint is not None:
1331
+ if egress_denylist is not None:
1332
+ raise RuntimeError("network_mode='denylist' requires an ACP agent")
1303
1333
  (
1304
1334
  self._acp_client,
1305
1335
  self._session,
@@ -1317,6 +1347,8 @@ class Rollout:
1317
1347
  agent_cwd=self._agent_cwd,
1318
1348
  )
1319
1349
  else:
1350
+ if egress_denylist is not None:
1351
+ await self._start_egress_denylist(egress_denylist)
1320
1352
  (
1321
1353
  self._acp_client,
1322
1354
  self._session,
@@ -2012,6 +2044,17 @@ class Rollout:
2012
2044
  finally:
2013
2045
  self._usage_runtime = None
2014
2046
 
2047
+ rollout_dir = getattr(self, "_rollout_dir", None)
2048
+ if (
2049
+ getattr(self, "_egress_denylist", None) is not None
2050
+ and self._env is not None
2051
+ and rollout_dir is not None
2052
+ ):
2053
+ try:
2054
+ await self._planes.stop_egress_denylist(self._env, rollout_dir)
2055
+ except Exception as e:
2056
+ logger.warning(f"Egress denylist proxy stop failed: {e}")
2057
+
2015
2058
  self._finalize_usage_metrics()
2016
2059
  self._enforce_required_usage_tracking()
2017
2060
 
@@ -2272,9 +2315,16 @@ class Rollout:
2272
2315
  if disallow_web_tools is None:
2273
2316
  disallow_web_tools = _task_disallows_internet(getattr(self, "_task", None))
2274
2317
  disallow_web_tools = bool(disallow_web_tools and role.agent != "oracle")
2318
+ egress_denylist = (
2319
+ None
2320
+ if disallow_web_tools or role.agent == "oracle"
2321
+ else _task_egress_denylist(getattr(self, "_task", None))
2322
+ )
2323
+ disallow_hosted_search = egress_denylist is not None
2275
2324
  agent_launch = self._planes.agent_launch(
2276
2325
  role.agent,
2277
2326
  disallow_web_tools=disallow_web_tools,
2327
+ disallow_hosted_search=disallow_hosted_search,
2278
2328
  )
2279
2329
  agent_env = _apply_web_policy(
2280
2330
  self._planes.resolve_agent_env(
@@ -2296,8 +2346,10 @@ class Rollout:
2296
2346
  sandbox_setup_timeout=cfg.sandbox_setup_timeout,
2297
2347
  required_skill_names=getattr(self, "_required_skill_names", ()),
2298
2348
  live_trajectory_path=rollout_dir / "trajectory" / "llm_trajectory.jsonl",
2299
- force_sandbox_local=disallow_web_tools,
2349
+ force_sandbox_local=disallow_web_tools or disallow_hosted_search,
2300
2350
  )
2351
+ if egress_denylist is not None:
2352
+ agent_env = denylist_agent_env(agent_env)
2301
2353
 
2302
2354
  role_agent_differs = role.agent != cfg.primary_agent
2303
2355
  needs_role_credentials = (
@@ -2342,6 +2394,7 @@ class Rollout:
2342
2394
  agent_cfg,
2343
2395
  cred_home,
2344
2396
  disallow=disallow_web_tools,
2397
+ disallow_hosted_search=disallow_hosted_search,
2345
2398
  )
2346
2399
 
2347
2400
  self._agent_launch = agent_launch
@@ -2349,6 +2402,8 @@ class Rollout:
2349
2402
  sf_entrypoint = self._session_factory_entrypoint(role.agent)
2350
2403
  self._is_session_factory = sf_entrypoint is not None
2351
2404
  if sf_entrypoint is not None:
2405
+ if egress_denylist is not None:
2406
+ raise RuntimeError("network_mode='denylist' requires an ACP agent")
2352
2407
  (
2353
2408
  self._acp_client,
2354
2409
  self._session,
@@ -2368,6 +2423,8 @@ class Rollout:
2368
2423
  agent_cwd=self._agent_cwd,
2369
2424
  )
2370
2425
  else:
2426
+ if egress_denylist is not None:
2427
+ await self._start_egress_denylist(egress_denylist)
2371
2428
  (
2372
2429
  self._acp_client,
2373
2430
  self._session,
@@ -42,6 +42,7 @@ from benchflow.rewards.validation import (
42
42
  validate_reward_map,
43
43
  )
44
44
  from benchflow.rollout._results import _DIAG_TRUNCATE
45
+ from benchflow.sandbox.egress_denylist import EgressDenylist, egress_denylist_for
45
46
  from benchflow.trajectories.types import redact_acp_trajectory_jsonl
46
47
 
47
48
  logger = logging.getLogger(__name__)
@@ -55,6 +56,11 @@ def _task_disallows_internet(task: Any) -> bool:
55
56
  return getattr(env_config, "allow_internet", True) is False
56
57
 
57
58
 
59
+ def _task_egress_denylist(task: Any) -> EgressDenylist | None:
60
+ """Return the egress denylist the task's sandbox config declares, if any."""
61
+ return egress_denylist_for(getattr(getattr(task, "config", None), "sandbox", None))
62
+
63
+
58
64
  def _read_task_instruction(task_path: Path) -> str:
59
65
  """Read the agent-facing instruction from legacy files or ``task.md``."""
60
66
  document_path = task_path / "task.md"