benchflow 0.7.8.dev2347__tar.gz → 0.7.9.dev2354__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 (795) hide show
  1. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/CHANGELOG.md +38 -0
  2. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/PKG-INFO +1 -1
  3. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/pyproject.toml +1 -1
  4. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/review/evidence.py +25 -10
  5. benchflow-0.7.9.dev2354/src/benchflow/review/evidence_runtime.py +49 -0
  6. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/rollout/__init__.py +4 -0
  7. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/rollout/_review.py +9 -0
  8. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/sandbox/protocol.py +10 -0
  9. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_review_automatic.py +48 -0
  10. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_review_evidence.py +79 -6
  11. benchflow-0.7.9.dev2354/tests/test_review_evidence_runtime.py +107 -0
  12. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/.gitignore +0 -0
  13. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/LICENSE +0 -0
  14. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/README.md +0 -0
  15. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/__init__.py +0 -0
  16. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/_dotenv.py +0 -0
  17. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/_paths.py +0 -0
  18. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/_run.py +0 -0
  19. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/_types.py +0 -0
  20. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/_utils/__init__.py +0 -0
  21. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/_utils/benchmark_repos.py +0 -0
  22. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/_utils/build_context_stage.py +0 -0
  23. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/_utils/config.py +0 -0
  24. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/_utils/config_override.py +0 -0
  25. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/_utils/config_redaction.py +0 -0
  26. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/_utils/content_address.py +0 -0
  27. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/_utils/dataset_registry.py +0 -0
  28. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/_utils/env_registry.py +0 -0
  29. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/_utils/evaluation_results.py +0 -0
  30. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/_utils/hf_datasets.py +0 -0
  31. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/_utils/json_safe.py +0 -0
  32. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/_utils/learner_memory.py +0 -0
  33. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/_utils/live_activity.py +0 -0
  34. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/_utils/result_metadata.py +0 -0
  35. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/_utils/result_paths.py +0 -0
  36. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/_utils/reward_events.py +0 -0
  37. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/_utils/scoring.py +0 -0
  38. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/_utils/source_provenance.py +0 -0
  39. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/_utils/task_authoring/__init__.py +0 -0
  40. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/_utils/task_authoring/_evidence_paths.py +0 -0
  41. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/_utils/task_authoring/acceptance_evidence.py +0 -0
  42. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/_utils/task_authoring/scaffolding.py +0 -0
  43. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/_utils/task_authoring/structural_checks.py +0 -0
  44. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/_utils/text.py +0 -0
  45. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/_utils/yaml_loader.py +0 -0
  46. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/acp/__init__.py +0 -0
  47. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/acp/client.py +0 -0
  48. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/acp/container_transport.py +0 -0
  49. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/acp/runtime.py +0 -0
  50. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/acp/selection.py +0 -0
  51. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/acp/session.py +0 -0
  52. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/acp/timeout_cleanup.py +0 -0
  53. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/acp/transport.py +0 -0
  54. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/acp/types.py +0 -0
  55. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/acp/watchdog.py +0 -0
  56. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/adapters/__init__.py +0 -0
  57. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/adapters/_toolathlon.py +0 -0
  58. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/adapters/_toolathlon_container.py +0 -0
  59. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/adapters/_toolathlon_fake_mail.py +0 -0
  60. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/adapters/_toolathlon_poste_users.tsv +0 -0
  61. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/adapters/_toolathlon_services.py +0 -0
  62. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/adapters/harbor.py +0 -0
  63. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/adapters/inbound.py +0 -0
  64. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/adapters/inspect_ai.py +0 -0
  65. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/adapters/ors.py +0 -0
  66. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/adapters/resources/__init__.py +0 -0
  67. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/adapters/resources/mcp_atlas_bridge.py +0 -0
  68. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/adapters/resources/mcp_atlas_judge.py +0 -0
  69. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/adapters/source.py +0 -0
  70. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/agent_router.py +0 -0
  71. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/agent_router_guide.py +0 -0
  72. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/agent_router_parity.py +0 -0
  73. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/agent_router_scaffold.py +0 -0
  74. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/agents/__init__.py +0 -0
  75. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/agents/codex_config.py +0 -0
  76. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/agents/credentials.py +0 -0
  77. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/agents/deepagents_acp_shim.py +0 -0
  78. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/agents/env.py +0 -0
  79. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/agents/errors.py +0 -0
  80. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/agents/harvey_lab_acp_shim.py +0 -0
  81. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/agents/install.py +0 -0
  82. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/agents/manifest.py +0 -0
  83. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/agents/openclaw_acp_shim.py +0 -0
  84. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/agents/pi_acp_launcher.py +0 -0
  85. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/agents/protocol.py +0 -0
  86. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/agents/providers.py +0 -0
  87. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/agents/registry.py +0 -0
  88. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/agents/remote_manifests.py +0 -0
  89. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/branch.py +0 -0
  90. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/cli/__init__.py +0 -0
  91. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/cli/_failure_evidence.py +0 -0
  92. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/cli/_hosted_env.py +0 -0
  93. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/cli/_live_progress.py +0 -0
  94. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/cli/_options.py +0 -0
  95. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/cli/_shared.py +0 -0
  96. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/cli/_traj_tui.py +0 -0
  97. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/cli/_traj_upload_ui.py +0 -0
  98. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/cli/adopt.py +0 -0
  99. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/cli/agent.py +0 -0
  100. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/cli/continue_cmd.py +0 -0
  101. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/cli/environment.py +0 -0
  102. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/cli/eval_artifacts.py +0 -0
  103. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/cli/eval_lift.py +0 -0
  104. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/cli/hub.py +0 -0
  105. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/cli/main.py +0 -0
  106. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/cli/monitor.py +0 -0
  107. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/cli/rescore.py +0 -0
  108. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/cli/review.py +0 -0
  109. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/cli/reviewer_options.py +0 -0
  110. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/cli/sandbox.py +0 -0
  111. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/cli/skills.py +0 -0
  112. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/cli/tasks.py +0 -0
  113. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/cli/trace_import.py +0 -0
  114. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/cli/train.py +0 -0
  115. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/cli/traj.py +0 -0
  116. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/continue_run/__init__.py +0 -0
  117. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/continue_run/batch.py +0 -0
  118. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/continue_run/orchestrator.py +0 -0
  119. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/continue_run/replay_proxy.py +0 -0
  120. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/continue_run/run_folder.py +0 -0
  121. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/continue_run/sandbox_proxy.py +0 -0
  122. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/contracts/__init__.py +0 -0
  123. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/contracts/planes.py +0 -0
  124. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/contracts/user.py +0 -0
  125. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/demo_task/environment/Dockerfile +0 -0
  126. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/demo_task/instruction.md +0 -0
  127. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/demo_task/task.md +0 -0
  128. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/demo_task/task.toml +0 -0
  129. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/demo_task/tests/test.sh +0 -0
  130. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/diagnostics.py +0 -0
  131. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/environment/__init__.py +0 -0
  132. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/environment/_registry/env0@outage.toml +0 -0
  133. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/environment/_registry/env0@prod.toml +0 -0
  134. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/environment/manifest.py +0 -0
  135. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/environment/manifest_env.py +0 -0
  136. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/environment/protocol.py +0 -0
  137. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/environment/readiness.py +0 -0
  138. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/eval_artifacts.py +0 -0
  139. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/eval_lift.py +0 -0
  140. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/eval_plan.py +0 -0
  141. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/eval_sharding.py +0 -0
  142. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/eval_worker.py +0 -0
  143. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/evaluation.py +0 -0
  144. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/experimental/__init__.py +0 -0
  145. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/experimental/mcp/__init__.py +0 -0
  146. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/experimental/mcp/hooks.py +0 -0
  147. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/experimental/mcp/reviewer_server.py +0 -0
  148. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/hosted_env.py +0 -0
  149. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/hub/__init__.py +0 -0
  150. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/hub/harbor_registry.py +0 -0
  151. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/integrations/__init__.py +0 -0
  152. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/integrations/trl/__init__.py +0 -0
  153. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/integrations/trl/spec.py +0 -0
  154. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/learner_skills.py +0 -0
  155. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/learner_store.py +0 -0
  156. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/loop_strategies.py +0 -0
  157. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/loop_sweep.py +0 -0
  158. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/metrics.py +0 -0
  159. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/models.py +0 -0
  160. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/monitor.py +0 -0
  161. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/providers/__init__.py +0 -0
  162. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/providers/litellm_bedrock_patch.py +0 -0
  163. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/providers/litellm_bedrock_preflight.py +0 -0
  164. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/providers/litellm_config.py +0 -0
  165. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/providers/litellm_gemini_passthrough_patch.py +0 -0
  166. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/providers/litellm_logging.py +0 -0
  167. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/providers/litellm_runtime.py +0 -0
  168. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/providers/runtime.py +0 -0
  169. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/publish/__init__.py +0 -0
  170. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/publish/_progress.py +0 -0
  171. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/publish/azure_blob.py +0 -0
  172. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/publish/broker.py +0 -0
  173. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/publish/huggingface.py +0 -0
  174. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/publish/redact.py +0 -0
  175. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/publish/traj_capture.py +0 -0
  176. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/publish/traj_report.py +0 -0
  177. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/py.typed +0 -0
  178. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/review/__init__.py +0 -0
  179. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/review/automatic.py +0 -0
  180. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/review/config.py +0 -0
  181. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/review/default-rubric.json +0 -0
  182. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/review/options.py +0 -0
  183. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/review/outcome.py +0 -0
  184. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/review/persistence.py +0 -0
  185. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/review/preflight.py +0 -0
  186. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/review/prompts.py +0 -0
  187. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/review/resume.py +0 -0
  188. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/review/runner.py +0 -0
  189. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/review/scoring.py +0 -0
  190. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/review/wrapper.py +0 -0
  191. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/rewards/README.md +0 -0
  192. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/rewards/__init__.py +0 -0
  193. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/rewards/builtins.py +0 -0
  194. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/rewards/events.py +0 -0
  195. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/rewards/file_readers.py +0 -0
  196. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/rewards/llm.py +0 -0
  197. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/rewards/memory_scorer.py +0 -0
  198. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/rewards/node.py +0 -0
  199. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/rewards/protocol.py +0 -0
  200. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/rewards/rubric.py +0 -0
  201. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/rewards/rubric_config.py +0 -0
  202. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/rewards/validation.py +0 -0
  203. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/rollout/_config.py +0 -0
  204. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/rollout/_deadline.py +0 -0
  205. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/rollout/_results.py +0 -0
  206. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/rollout/_setup.py +0 -0
  207. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/rollout/_skills.py +0 -0
  208. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/rollout/_usage.py +0 -0
  209. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/rollout/_user_loop.py +0 -0
  210. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/rollout/session_factory_runtime.py +0 -0
  211. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/rollout/task_runtime.py +0 -0
  212. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/rollout_branch.py +0 -0
  213. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/rollout_planes.py +0 -0
  214. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/runtime.py +0 -0
  215. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/sandbox/__init__.py +0 -0
  216. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/sandbox/_base.py +0 -0
  217. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/sandbox/_cache_reclaim.py +0 -0
  218. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/sandbox/_compose.py +0 -0
  219. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/sandbox/_compose_files/docker-compose-base.yaml +0 -0
  220. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/sandbox/_compose_files/docker-compose-build.yaml +0 -0
  221. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/sandbox/_compose_files/docker-compose-net-admin.yaml +0 -0
  222. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/sandbox/_compose_files/docker-compose-no-network.yaml +0 -0
  223. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/sandbox/_compose_files/docker-compose-prebuilt.yaml +0 -0
  224. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/sandbox/_egress_denylist_proxy.py +0 -0
  225. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/sandbox/_sdk_ops.py +0 -0
  226. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/sandbox/agentcore.py +0 -0
  227. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/sandbox/agentcore_builder.py +0 -0
  228. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/sandbox/agentcore_image.py +0 -0
  229. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/sandbox/agentcore_provisioning.py +0 -0
  230. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/sandbox/agentcore_reaper.py +0 -0
  231. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/sandbox/agentcore_sealed.py +0 -0
  232. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/sandbox/apple_container.py +0 -0
  233. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/sandbox/daytona.py +0 -0
  234. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/sandbox/daytona_dind.py +0 -0
  235. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/sandbox/daytona_pty.py +0 -0
  236. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/sandbox/daytona_reaper.py +0 -0
  237. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/sandbox/daytona_strategies.py +0 -0
  238. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/sandbox/docker.py +0 -0
  239. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/sandbox/egress_denylist.py +0 -0
  240. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/sandbox/lockdown.py +0 -0
  241. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/sandbox/metadata.py +0 -0
  242. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/sandbox/modal_impl.py +0 -0
  243. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/sandbox/process/__init__.py +0 -0
  244. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/sandbox/process/_base.py +0 -0
  245. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/sandbox/process/agentcore.py +0 -0
  246. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/sandbox/process/apple.py +0 -0
  247. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/sandbox/process/daytona.py +0 -0
  248. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/sandbox/process/docker.py +0 -0
  249. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/sandbox/providers.py +0 -0
  250. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/sandbox/services.py +0 -0
  251. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/sandbox/setup.py +0 -0
  252. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/sandbox/snapshot.py +0 -0
  253. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/sandbox/user.py +0 -0
  254. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/scenes.py +0 -0
  255. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/sdk.py +0 -0
  256. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/self_gen.py +0 -0
  257. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/skill_eval/__init__.py +0 -0
  258. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/skill_eval/_core.py +0 -0
  259. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/skill_eval/gepa_export.py +0 -0
  260. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/skill_eval/schema.py +0 -0
  261. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/skill_policy.py +0 -0
  262. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/skills.py +0 -0
  263. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/task/__init__.py +0 -0
  264. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/task/_document_evidence.py +0 -0
  265. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/task/_document_normalize.py +0 -0
  266. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/task/_document_parse.py +0 -0
  267. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/task/_document_profiles.py +0 -0
  268. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/task/acceptance_live.py +0 -0
  269. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/task/acceptance_live_model.py +0 -0
  270. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/task/acceptance_live_report.py +0 -0
  271. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/task/acceptance_live_validation.py +0 -0
  272. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/task/config.py +0 -0
  273. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/task/discovery.py +0 -0
  274. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/task/document.py +0 -0
  275. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/task/env.py +0 -0
  276. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/task/export.py +0 -0
  277. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/task/imports.py +0 -0
  278. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/task/output_format.py +0 -0
  279. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/task/package.py +0 -0
  280. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/task/paths.py +0 -0
  281. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/task/prompts.py +0 -0
  282. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/task/runtime_capabilities.py +0 -0
  283. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/task/runtime_view.py +0 -0
  284. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/task/task.py +0 -0
  285. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/task/verifier.py +0 -0
  286. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/task/verifier_core.py +0 -0
  287. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/task/verifier_document.py +0 -0
  288. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/task/verifier_errors.py +0 -0
  289. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/task/verifier_judge_inputs.py +0 -0
  290. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/task/verifier_ors_episode.py +0 -0
  291. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/task/verifier_reward_kit.py +0 -0
  292. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/task/verifier_scan.py +0 -0
  293. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/task/verifier_script_strategy.py +0 -0
  294. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/templates/__init__.py +0 -0
  295. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/templates/judge.py.tmpl +0 -0
  296. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/templates/test.sh.tmpl +0 -0
  297. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/traces/__init__.py +0 -0
  298. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/traces/huggingface.py +0 -0
  299. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/traces/local.py +0 -0
  300. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/traces/models.py +0 -0
  301. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/traces/parsers.py +0 -0
  302. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/traces/task_gen.py +0 -0
  303. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/training/__init__.py +0 -0
  304. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/training/backends/__init__.py +0 -0
  305. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/training/backends/prime_rl.py +0 -0
  306. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/training/run_manifest.py +0 -0
  307. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/trajectories/__init__.py +0 -0
  308. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/trajectories/_capture.py +0 -0
  309. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/trajectories/_export_common.py +0 -0
  310. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/trajectories/_llm_capture.py +0 -0
  311. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/trajectories/_snapshot.py +0 -0
  312. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/trajectories/call_purpose.py +0 -0
  313. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/trajectories/export.py +0 -0
  314. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/trajectories/export_adp.py +0 -0
  315. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/trajectories/export_atif.py +0 -0
  316. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/trajectories/export_prime_sft.py +0 -0
  317. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/trajectories/export_trl_sft.py +0 -0
  318. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/trajectories/metrics.py +0 -0
  319. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/trajectories/results.py +0 -0
  320. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/trajectories/sessions.py +0 -0
  321. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/trajectories/tree.py +0 -0
  322. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/trajectories/trl_sft_tokenization.py +0 -0
  323. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/trajectories/types.py +0 -0
  324. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/trajectories/viewer/__init__.py +0 -0
  325. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/trajectories/viewer/__main__.py +0 -0
  326. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/trajectories/viewer/assets/boot.js +0 -0
  327. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/trajectories/viewer/assets/catalog.js +0 -0
  328. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/trajectories/viewer/assets/detail.js +0 -0
  329. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/trajectories/viewer/assets/fonts/OFL-google-sans-code.txt +0 -0
  330. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/trajectories/viewer/assets/fonts/google-sans-code-400-latin.woff2 +0 -0
  331. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/trajectories/viewer/assets/fonts/google-sans-code-600-latin.woff2 +0 -0
  332. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/trajectories/viewer/assets/template.html +0 -0
  333. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/trajectories/viewer/assets/theme.css +0 -0
  334. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/trajectories/viewer/assets/theme.js +0 -0
  335. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/trajectories/viewer/assets/vendor/LICENSE.highlight.js +0 -0
  336. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/trajectories/viewer/assets/vendor/highlight.min.js +0 -0
  337. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/trajectories/viewer/assets/viewer.css +0 -0
  338. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/trajectories/viewer/assets/viewer.js +0 -0
  339. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/trajectories/viewer/catalog.py +0 -0
  340. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/trajectories/viewer/legacy.py +0 -0
  341. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/trajectories/viewer/models.py +0 -0
  342. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/trajectories/viewer/payload.py +0 -0
  343. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/trajectories/viewer/render.py +0 -0
  344. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/trajectories/viewer/server.py +0 -0
  345. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/trajectories/viewer/sources.py +0 -0
  346. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/usage_tracking.py +0 -0
  347. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/__init__.py +0 -0
  348. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/acceptance_live_harness.py +0 -0
  349. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/agents/__init__.py +0 -0
  350. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/agents/test_codex_config.py +0 -0
  351. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/agents/test_manifest_dirscan.py +0 -0
  352. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/agents/test_manifest_loader.py +0 -0
  353. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/agents/test_manifest_parity.py +0 -0
  354. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/agents/test_manifest_wiring.py +0 -0
  355. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/agents/test_namespace_shorthand.py +0 -0
  356. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/agents/test_plugin_entry_points.py +0 -0
  357. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/agents/test_protocol.py +0 -0
  358. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/agents/test_remote_manifest_autoload.py +0 -0
  359. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/conformance/README.md +0 -0
  360. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/conformance/acp_smoke/environment/Dockerfile +0 -0
  361. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/conformance/acp_smoke/environment/docker-compose.yaml +0 -0
  362. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/conformance/acp_smoke/environment/skills/conformance-writer/SKILL.md +0 -0
  363. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/conformance/acp_smoke/instruction.md +0 -0
  364. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/conformance/acp_smoke/solution/solve.sh +0 -0
  365. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/conformance/acp_smoke/task.md +0 -0
  366. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/conformance/acp_smoke/task.toml +0 -0
  367. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/conformance/acp_smoke/tests/test.sh +0 -0
  368. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/conformance/conformance-results.json +0 -0
  369. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/conformance/proof_multi_agent.py +0 -0
  370. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/conformance/proof_snapshot.py +0 -0
  371. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/conformance/run_conformance.py +0 -0
  372. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/conformance/self_gen_smoke_skills/skill-creator/SKILL.md +0 -0
  373. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/conftest.py +0 -0
  374. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/continue_run/__init__.py +0 -0
  375. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/continue_run/_helpers.py +0 -0
  376. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/continue_run/test_batch.py +0 -0
  377. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/continue_run/test_orchestrator.py +0 -0
  378. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/continue_run/test_replay_proxy.py +0 -0
  379. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/continue_run/test_run_folder.py +0 -0
  380. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/environment/__init__.py +0 -0
  381. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/environment/test_chibench_manifest.py +0 -0
  382. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/environment/test_clawsbench_manifest.py +0 -0
  383. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/environment/test_manifest.py +0 -0
  384. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/environment/test_manifest_env.py +0 -0
  385. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/environment/test_protocol.py +0 -0
  386. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/environment/test_readiness.py +0 -0
  387. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/examples/hello-world-task/environment/Dockerfile +0 -0
  388. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/examples/hello-world-task/instruction.md +0 -0
  389. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/examples/hello-world-task/solution/solve.sh +0 -0
  390. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/examples/hello-world-task/task.md +0 -0
  391. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/examples/hello-world-task/task.toml +0 -0
  392. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/examples/hello-world-task/tests/test.sh +0 -0
  393. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/examples/test_claude.sh +0 -0
  394. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/examples/test_codex.sh +0 -0
  395. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/examples/test_codex_custom_provider.sh +0 -0
  396. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/examples/test_gemini.sh +0 -0
  397. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/examples/test_openclaw.sh +0 -0
  398. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/examples/traces/minimal-claude.jsonl +0 -0
  399. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/examples/traces/minimal-opentraces.jsonl +0 -0
  400. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/digest/README.md +0 -0
  401. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/digest/alpha-task/environment/Dockerfile +0 -0
  402. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/digest/alpha-task/instruction.md +0 -0
  403. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/digest/alpha-task/task.toml +0 -0
  404. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/digest/alpha-task/tests/test.sh +0 -0
  405. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/digest/beta-task/data/empty.bin +0 -0
  406. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/digest/beta-task/data/unicode.txt +0 -0
  407. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/digest/beta-task/instruction.md +0 -0
  408. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/digest/beta-task/task.toml +0 -0
  409. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/digest/not-a-task/notes.txt +0 -0
  410. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/mock_acp_agent.py +0 -0
  411. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/mock_acp_agent_interleaved.py +0 -0
  412. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/mock_acp_agent_multi_turn.py +0 -0
  413. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/mock_openai_responses_server.py +0 -0
  414. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/Dockerfile +0 -0
  415. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/data/michigan_stations.txt +0 -0
  416. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/flood-detection/SKILL.md +0 -0
  417. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/nws-flood-thresholds/SKILL.md +0 -0
  418. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/usgs-data-download/SKILL.md +0 -0
  419. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/flood-risk-analysis/instruction.md +0 -0
  420. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/flood-risk-analysis/solution/solve.sh +0 -0
  421. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/flood-risk-analysis/task.toml +0 -0
  422. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/flood-risk-analysis/tests/test.sh +0 -0
  423. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/flood-risk-analysis/tests/test_outputs.py +0 -0
  424. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/Dockerfile +0 -0
  425. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/climate.csv +0 -0
  426. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/hydrology.csv +0 -0
  427. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/land_cover.csv +0 -0
  428. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/water_temperature.csv +0 -0
  429. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/contribution-analysis/SKILL.md +0 -0
  430. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/meteorology-driver-classification/SKILL.md +0 -0
  431. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/pca-decomposition/SKILL.md +0 -0
  432. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/trend-analysis/SKILL.md +0 -0
  433. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/lake-warming-attribution/instruction.md +0 -0
  434. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/lake-warming-attribution/solution/solve.sh +0 -0
  435. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/lake-warming-attribution/task.toml +0 -0
  436. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/lake-warming-attribution/tests/test.sh +0 -0
  437. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/lake-warming-attribution/tests/test_outputs.py +0 -0
  438. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/manifest.json +0 -0
  439. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/Dockerfile +0 -0
  440. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/r2r_simulator.py +0 -0
  441. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/finite-horizon-lqr/SKILL.md +0 -0
  442. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/integral-action-design/SKILL.md +0 -0
  443. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/mpc-horizon-tuning/SKILL.md +0 -0
  444. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/state-space-linearization/SKILL.md +0 -0
  445. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/system_config.json +0 -0
  446. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/r2r-mpc-control/instruction.md +0 -0
  447. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/r2r-mpc-control/solution/solve.sh +0 -0
  448. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/r2r-mpc-control/task.toml +0 -0
  449. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/r2r-mpc-control/tests/test.sh +0 -0
  450. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/r2r-mpc-control/tests/test_outputs.py +0 -0
  451. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/Dockerfile +0 -0
  452. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/generate_training_pcaps.py +0 -0
  453. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/local.rules +0 -0
  454. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/pcap-triage-tshark/SKILL.md +0 -0
  455. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/pcap-triage-tshark/scripts/summarize_http_requests.sh +0 -0
  456. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-offline-evejson/SKILL.md +0 -0
  457. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-offline-evejson/scripts/run_suricata_offline.sh +0 -0
  458. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-rules-basics/SKILL.md +0 -0
  459. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/suricata.yaml +0 -0
  460. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/instruction.md +0 -0
  461. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/solution/solve.sh +0 -0
  462. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/task.toml +0 -0
  463. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/tests/test.sh +0 -0
  464. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/tests/test_outputs.py +0 -0
  465. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/Dockerfile +0 -0
  466. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syz-extract-constants/SKILL.md +0 -0
  467. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syzkaller-build-loop/SKILL.md +0 -0
  468. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syzlang-ioctl-basics/SKILL.md +0 -0
  469. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/instruction.md +0 -0
  470. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/solution/solve.sh +0 -0
  471. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/task.toml +0 -0
  472. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/tests/test.sh +0 -0
  473. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/tests/test_outputs.py +0 -0
  474. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/integration/_consistency.py +0 -0
  475. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/integration/agent_judge.py +0 -0
  476. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/integration/check_adapter_evidence.py +0 -0
  477. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/integration/check_hosted_env_evidence.py +0 -0
  478. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/integration/check_results.py +0 -0
  479. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/integration/check_skillsbench_harbor_parity.py +0 -0
  480. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/integration/check_trace_to_task_evidence.py +0 -0
  481. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/integration/configs/claude-agent-acp.yaml +0 -0
  482. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/integration/configs/codex-acp.yaml +0 -0
  483. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/integration/configs/gemini.yaml +0 -0
  484. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/integration/configs/harvey-lab-harness.yaml +0 -0
  485. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/integration/configs/mimo.yaml +0 -0
  486. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/integration/configs/openclaw.yaml +0 -0
  487. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/integration/configs/opencode.yaml +0 -0
  488. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/integration/configs/openhands.yaml +0 -0
  489. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/integration/configs/pi-acp.yaml +0 -0
  490. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/integration/deepagents_harness.py +0 -0
  491. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/integration/rubric_checks.py +0 -0
  492. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/integration/run.sh +0 -0
  493. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/integration/run_suite.py +0 -0
  494. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/integration/scenarios.py +0 -0
  495. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/integration/suites/release.yaml +0 -0
  496. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_acceptance_evidence.py +0 -0
  497. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_acceptance_live.py +0 -0
  498. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_acceptance_live_execution.py +0 -0
  499. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_acp.py +0 -0
  500. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_acp_buffered_timeout.py +0 -0
  501. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_acp_capability_advertising.py +0 -0
  502. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_acp_mcp_servers.py +0 -0
  503. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_acp_model_config_dispatch.py +0 -0
  504. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_acp_pinned_protocol_guard.py +0 -0
  505. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_acp_setup_failure_propagation.py +0 -0
  506. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_acp_timeout_evidence.py +0 -0
  507. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_adapter_scripts.py +0 -0
  508. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_adapters.py +0 -0
  509. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_agent_cli.py +0 -0
  510. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_agent_egress_firewall.py +0 -0
  511. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_agent_env_resolution.py +0 -0
  512. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_agent_gemini_defaults.py +0 -0
  513. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_agent_idle_timeout_cli.py +0 -0
  514. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_agent_model_decouple.py +0 -0
  515. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_agent_registry.py +0 -0
  516. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_agent_router.py +0 -0
  517. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_agent_router_cli_e2e.py +0 -0
  518. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_agent_router_scaffold.py +0 -0
  519. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_agent_setup.py +0 -0
  520. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_agent_spec.py +0 -0
  521. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_agentcore_builder.py +0 -0
  522. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_agentcore_parallel.py +0 -0
  523. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_agentcore_reaper.py +0 -0
  524. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_agentcore_sandbox.py +0 -0
  525. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_agentcore_transport.py +0 -0
  526. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_api_error_capture.py +0 -0
  527. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_apple_container_sandbox.py +0 -0
  528. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_automatic_review_scoring.py +0 -0
  529. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_bare_model_provider.py +0 -0
  530. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_base_install_imports.py +0 -0
  531. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_bedrock_thinking.py +0 -0
  532. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_benchflow_experiment_review_validator.py +0 -0
  533. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_benchmark_repos_resolve_repo_path.py +0 -0
  534. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_branch.py +0 -0
  535. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_build_context_stage.py +0 -0
  536. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_build_review_pack.py +0 -0
  537. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_capture_trajectory.py +0 -0
  538. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_check_skillsbench_harbor_parity.py +0 -0
  539. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_clawsbench_slice.py +0 -0
  540. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_cli_adopt_aliases.py +0 -0
  541. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_cli_arg_validation.py +0 -0
  542. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_cli_daytona.py +0 -0
  543. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_cli_docs_drift.py +0 -0
  544. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_cli_edge_case_hardening.py +0 -0
  545. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_cli_hub_env.py +0 -0
  546. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_cli_live_progress.py +0 -0
  547. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_cli_misc.py +0 -0
  548. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_codex_review.py +0 -0
  549. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_codex_self_write_auth.py +0 -0
  550. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_config_override.py +0 -0
  551. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_config_redaction.py +0 -0
  552. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_connect_as_env.py +0 -0
  553. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_console_error_truncation.py +0 -0
  554. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_console_progress.py +0 -0
  555. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_continuallearningbench_adapter.py +0 -0
  556. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_dataset_registry.py +0 -0
  557. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_daytona_command_polling.py +0 -0
  558. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_daytona_dind_compose_up.py +0 -0
  559. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_daytona_download.py +0 -0
  560. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_daytona_litellm_runtime.py +0 -0
  561. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_daytona_poll_deadline.py +0 -0
  562. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_daytona_reap.py +0 -0
  563. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_deepagents_agent.py +0 -0
  564. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_diagnostics.py +0 -0
  565. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_docker_prune_scoping.py +0 -0
  566. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_docker_uploads.py +0 -0
  567. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_docs_examples.py +0 -0
  568. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_egress_connect_authority.py +0 -0
  569. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_egress_denylist.py +0 -0
  570. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_egress_denylist_integration.py +0 -0
  571. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_egress_dynamic_certs.py +0 -0
  572. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_egress_model_gateway.py +0 -0
  573. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_eng50_capabilities.py +0 -0
  574. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_env_registry.py +0 -0
  575. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_env_setup.py +0 -0
  576. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_environment_manifest_controls.py +0 -0
  577. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_eval_artifact_cli.py +0 -0
  578. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_eval_filters_applied.py +0 -0
  579. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_eval_lift.py +0 -0
  580. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_eval_sharding.py +0 -0
  581. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_eval_single_task_summary.py +0 -0
  582. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_eval_source_provenance.py +0 -0
  583. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_eval_worker_retry.py +0 -0
  584. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_eval_zero_task_guard.py +0 -0
  585. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_evaluation_environment_manifest.py +0 -0
  586. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_exclude_tasks.py +0 -0
  587. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_filter_credentialed_cells.py +0 -0
  588. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_harvey_lab_shim.py +0 -0
  589. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_hilbench_adapter.py +0 -0
  590. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_hosted_env.py +0 -0
  591. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_hosted_env_rollout_contract.py +0 -0
  592. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_hosted_search_policy.py +0 -0
  593. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_hub_harbor_registry.py +0 -0
  594. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_inbound_adapter_manifest.py +0 -0
  595. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_inbound_adapters.py +0 -0
  596. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_integration_agent_judge.py +0 -0
  597. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_integration_check_results.py +0 -0
  598. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_integration_consistency.py +0 -0
  599. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_integration_matrix.py +0 -0
  600. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_integration_provider_selection.py +0 -0
  601. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_integration_run_suite.py +0 -0
  602. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_integration_suite.py +0 -0
  603. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_internet_policy.py +0 -0
  604. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_job.py +0 -0
  605. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_job_sequential_shared.py +0 -0
  606. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_job_sequential_shared_resume.py +0 -0
  607. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_judge_robustness.py +0 -0
  608. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_judge_symlink_ingestion.py +0 -0
  609. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_learner_skills.py +0 -0
  610. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_learner_skills_traversal.py +0 -0
  611. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_learner_store.py +0 -0
  612. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_learner_store_persistence.py +0 -0
  613. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_litellm_config.py +0 -0
  614. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_litellm_gemini_passthrough_patch.py +0 -0
  615. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_litellm_hardening.py +0 -0
  616. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_litellm_logging.py +0 -0
  617. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_litellm_model_via_env_generic.py +0 -0
  618. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_litellm_reasoning_passthrough.py +0 -0
  619. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_litellm_runtime.py +0 -0
  620. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_litellm_smoke.py +0 -0
  621. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_live_llm_trajectory.py +0 -0
  622. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_llm_judge.py +0 -0
  623. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_llm_judge_event_tags.py +0 -0
  624. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_llm_judge_verifier.py +0 -0
  625. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_loop_strategies.py +0 -0
  626. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_loop_summary.py +0 -0
  627. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_loop_sweep.py +0 -0
  628. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_memory_scorer.py +0 -0
  629. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_metrics.py +0 -0
  630. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_mle_bench_adapter.py +0 -0
  631. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_mock_openai_responses_server.py +0 -0
  632. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_monitor_scaffold.py +0 -0
  633. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_native_acp_usage.py +0 -0
  634. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_network_denylist_config.py +0 -0
  635. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_no_cross_provider_fallback.py +0 -0
  636. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_notification_order_real.py +0 -0
  637. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_opencode_family_proxy_tracking.py +0 -0
  638. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_oracle.py +0 -0
  639. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_oracle_chokepoint.py +0 -0
  640. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_paths_safe.py +0 -0
  641. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_paths_symlink_helpers.py +0 -0
  642. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_pi_acp_launcher.py +0 -0
  643. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_pi_acp_proxy_routing.py +0 -0
  644. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_process.py +0 -0
  645. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_project_skills_layout.py +0 -0
  646. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_provider_auth_detection.py +0 -0
  647. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_providers.py +0 -0
  648. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_publish_azure_blob.py +0 -0
  649. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_publish_huggingface.py +0 -0
  650. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_redacted_snapshot.py +0 -0
  651. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_reexport.py +0 -0
  652. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_registry_invariants.py +0 -0
  653. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_release_hardening_r5.py +0 -0
  654. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_release_version.py +0 -0
  655. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_release_workflow_wiring.py +0 -0
  656. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_resolve_env_helpers.py +0 -0
  657. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_review_boundaries.py +0 -0
  658. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_review_lifecycle.py +0 -0
  659. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_review_resume.py +0 -0
  660. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_review_rubric.py +0 -0
  661. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_review_runtime.py +0 -0
  662. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_review_runtime_automatic.py +0 -0
  663. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_review_snapshot.py +0 -0
  664. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_reviewer_options.py +0 -0
  665. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_reward_lenient.py +0 -0
  666. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_reward_node.py +0 -0
  667. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_reward_range.py +0 -0
  668. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_reward_unified_contract.py +0 -0
  669. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_rewards.py +0 -0
  670. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_rewards_jsonl.py +0 -0
  671. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_rollout_architecture.py +0 -0
  672. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_rollout_branch.py +0 -0
  673. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_rollout_config_path_coercion.py +0 -0
  674. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_rollout_environment.py +0 -0
  675. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_rollout_hard_deadline.py +0 -0
  676. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_rollout_import_no_side_effects.py +0 -0
  677. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_rollout_on_ask_user_wiring.py +0 -0
  678. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_rollout_planes_contract.py +0 -0
  679. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_rollout_probe_sandbox_health.py +0 -0
  680. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_rollout_session_factory_dispatch.py +0 -0
  681. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_rollout_setup_commands.py +0 -0
  682. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_rollout_upload.py +0 -0
  683. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_rubric_checks.py +0 -0
  684. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_rubric_config.py +0 -0
  685. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_runtime.py +0 -0
  686. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_runtime_capabilities.py +0 -0
  687. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_runtime_config_wired.py +0 -0
  688. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_runtime_live_sandbox.py +0 -0
  689. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_sandbox.py +0 -0
  690. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_sandbox_exec_secret_handling.py +0 -0
  691. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_sandbox_hardening.py +0 -0
  692. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_sandbox_isolation_copy_traversal.py +0 -0
  693. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_sandbox_live_process.py +0 -0
  694. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_sandbox_multi_service.py +0 -0
  695. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_sandbox_prebuilt_validation.py +0 -0
  696. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_sandbox_protocol.py +0 -0
  697. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_sandbox_provider_registry_drift.py +0 -0
  698. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_sandbox_setup.py +0 -0
  699. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_sandbox_snapshot_contract.py +0 -0
  700. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_sandbox_upload_symlink.py +0 -0
  701. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_sandbox_verifier_workspace.py +0 -0
  702. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_scene.py +0 -0
  703. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_scene_outbox_trial.py +0 -0
  704. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_scene_parallel_group.py +0 -0
  705. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_scene_result_aggregation.py +0 -0
  706. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_scoring.py +0 -0
  707. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_sdk_internals.py +0 -0
  708. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_sdk_lockdown.py +0 -0
  709. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_sdk_run_alias.py +0 -0
  710. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_sealed_channel_container.py +0 -0
  711. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_self_gen_cli.py +0 -0
  712. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_self_gen_export_error_channel.py +0 -0
  713. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_self_gen_export_failures.py +0 -0
  714. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_self_gen_orchestration.py +0 -0
  715. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_session_factory_runtime.py +0 -0
  716. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_session_request_permission_dispatch.py +0 -0
  717. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_skill_eval.py +0 -0
  718. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_skill_eval_dryrun.py +0 -0
  719. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_skill_eval_integration.py +0 -0
  720. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_skill_eval_sweep.py +0 -0
  721. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_skill_eval_traversal.py +0 -0
  722. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_skill_invocation_artifacts.py +0 -0
  723. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_skill_policy.py +0 -0
  724. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_skills.py +0 -0
  725. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_skills_dir_agent_home_link.py +0 -0
  726. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_skillsbench_conversion_conformance.py +0 -0
  727. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_skillsbench_harbor_run_suite.py +0 -0
  728. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_smoke.py +0 -0
  729. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_smoke_wiring.py +0 -0
  730. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_source_adapters.py +0 -0
  731. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_subscription_auth.py +0 -0
  732. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_task_check_eval_consistency.py +0 -0
  733. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_task_config.py +0 -0
  734. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_task_digest.py +0 -0
  735. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_task_document.py +0 -0
  736. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_task_download.py +0 -0
  737. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_task_export.py +0 -0
  738. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_task_output_format.py +0 -0
  739. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_task_package.py +0 -0
  740. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_task_runtime_primitive.py +0 -0
  741. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_tasks.py +0 -0
  742. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_token_usage_normalization.py +0 -0
  743. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_tool_call_raw_io.py +0 -0
  744. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_trace_import_cli.py +0 -0
  745. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_trace_task_gen_traversal.py +0 -0
  746. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_trace_to_task_evidence.py +0 -0
  747. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_traces_huggingface.py +0 -0
  748. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_traces_parsers.py +0 -0
  749. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_traces_task_gen.py +0 -0
  750. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_train_cli.py +0 -0
  751. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_train_mode_artifact_emission.py +0 -0
  752. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_train_trl_cli.py +0 -0
  753. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_traj_report.py +0 -0
  754. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_traj_staging_phases.py +0 -0
  755. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_traj_tui.py +0 -0
  756. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_traj_upload_cli.py +0 -0
  757. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_traj_upload_skill.py +0 -0
  758. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_traj_workspace.py +0 -0
  759. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_trajectory_integration.py +0 -0
  760. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_trajectory_streaming.py +0 -0
  761. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_trajectory_upload_layout.py +0 -0
  762. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_trajectory_upload_service.py +0 -0
  763. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_trial_agent_timeout_verify.py +0 -0
  764. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_trial_install_agent_timeout.py +0 -0
  765. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_trial_litellm_runtime.py +0 -0
  766. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_trl_integration.py +0 -0
  767. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_usage_litellm.py +0 -0
  768. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_usage_required.py +0 -0
  769. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_usage_tracking.py +0 -0
  770. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_user.py +0 -0
  771. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_v06_guard_ports.py +0 -0
  772. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_verifier_document.py +0 -0
  773. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_verifier_multi_container.py +0 -0
  774. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_verifier_output.py +0 -0
  775. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_verifier_output_freshness.py +0 -0
  776. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_verifier_strategies.py +0 -0
  777. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_verifier_wedge_retry.py +0 -0
  778. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_verify.py +0 -0
  779. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_viewer_confirm.py +0 -0
  780. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_workflow_action_pinning.py +0 -0
  781. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_yaml_config.py +0 -0
  782. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/trajectories/__init__.py +0 -0
  783. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/trajectories/test_export.py +0 -0
  784. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/trajectories/test_export_adp.py +0 -0
  785. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/trajectories/test_export_atif.py +0 -0
  786. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/trajectories/test_export_common.py +0 -0
  787. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/trajectories/test_export_nan_handling.py +0 -0
  788. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/trajectories/test_export_prime_sft.py +0 -0
  789. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/trajectories/test_redaction.py +0 -0
  790. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/trajectories/test_step_granularity.py +0 -0
  791. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/trajectories/test_tree.py +0 -0
  792. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/trajectories/test_viewer_acp_renderer.py +0 -0
  793. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/trajectories/test_viewer_browser.py +0 -0
  794. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/trajectories/test_viewer_rubric.py +0 -0
  795. {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/trajectories/test_viewer_theme.py +0 -0
@@ -2,6 +2,44 @@
2
2
 
3
3
  ## [Unreleased]
4
4
 
5
+ ## 0.7.8 — 2026-09-14
6
+
7
+ ### Added
8
+
9
+ - **Automatic rubric review and scoring.** Tasks with a weighted `rubric.json`
10
+ run a separate reviewer after verification. Passing requires all required
11
+ tests and rubric blockers to pass; the final reward is the weighted quality
12
+ score. Solver evidence and reviewer runs are retained, and `bench eval score`
13
+ can retry an interrupted review without rerunning the solver. (#1126)
14
+ - **Rubric results in the trajectory viewer.** The Rubric tab displays criterion
15
+ judgments, explanations, blocker outcomes, and weighted scores. (#1102)
16
+ - **Viewer themes and syntax highlighting.** Trajectory pages support a dark
17
+ theme and highlighted tool content. (#1098)
18
+
19
+ ### Fixed
20
+
21
+ - **Automatic rubric review works on Daytona when the task workspace is
22
+ `/root`.** Daytona's daemon keeps its session tree in `/root/.daytona` (the
23
+ entrypoint's FIFOs plus every session command's script, log and exit code),
24
+ and evidence capture aborted on the first FIFO, so the rollout ended in a
25
+ scoring error with `rewards: null` although its verifier had run. Capture now
26
+ leaves that tree out as `sandbox_runtime` and records any other socket, FIFO
27
+ or device node as a `special_file` exclusion instead of aborting. Capture
28
+ limits, escaping symlinks and concurrent changes still fail closed. (#1128)
29
+ - **Automatic review supports shell-only task images.** Required Python
30
+ capture tools are provisioned before the solver starts, so a successful
31
+ shell task does not lose its review to a missing interpreter. (#1127)
32
+ - **Denylist enforcement closes CONNECT and HTTP Host bypasses.** TLS identity
33
+ and HTTP authority are checked against the allowed destination on Docker and
34
+ Daytona. (#1122)
35
+ - **IPv6 egress rules are installed when procfs reports zero-size files.**
36
+ Sandbox firewall setup reads the kernel data instead of relying on the
37
+ reported file size. (#1124)
38
+ - **Buffered ACP prompts respect their deadlines.** Timeout handling no longer
39
+ repeats captured provider history. (#1125)
40
+ - **Tool captures retain their content and raw input/output.** ACP trajectories
41
+ preserve observations needed for later review. (#1100)
42
+
5
43
  ## 0.7.7 — 2026-09-09
6
44
 
7
45
  ### Added
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: benchflow
3
- Version: 0.7.8.dev2347
3
+ Version: 0.7.9.dev2354
4
4
  Summary: Multi-turn agent benchmarking with ACP — run any agent, any model, any provider.
5
5
  Project-URL: Homepage, https://github.com/benchflow-ai/benchflow
6
6
  Project-URL: Repository, https://github.com/benchflow-ai/benchflow
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "benchflow"
3
- version = "0.7.8.dev2347"
3
+ version = "0.7.9.dev2354"
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"
@@ -25,7 +25,7 @@ from typing import Literal, Self
25
25
  from pydantic import BaseModel, ConfigDict, Field, model_validator
26
26
 
27
27
  from benchflow.agents.credentials import CREDENTIAL_EVIDENCE_PATHS
28
- from benchflow.sandbox.protocol import Sandbox
28
+ from benchflow.sandbox.protocol import SANDBOX_RUNTIME_STATE_PATHS, Sandbox
29
29
  from benchflow.task.config import ArtifactConfig
30
30
 
31
31
  logger = logging.getLogger(__name__)
@@ -51,7 +51,7 @@ class EvidenceExclusion(BaseModel):
51
51
  model_config = ConfigDict(extra="forbid", frozen=True)
52
52
 
53
53
  original_path: str
54
- reason: Literal["credential", "task_exclude"]
54
+ reason: Literal["credential", "sandbox_runtime", "special_file", "task_exclude"]
55
55
 
56
56
 
57
57
  class ArtifactEvidence(BaseModel):
@@ -94,8 +94,10 @@ class _CaptureReceipt(BaseModel):
94
94
 
95
95
 
96
96
  # Runs in both Docker and Daytona without requiring BenchFlow in the image.
97
- # Enumeration is explicit so sockets, devices, FIFOs and quota overflows fail
98
- # rather than being silently omitted by a tar command.
97
+ # Enumeration is explicit so nothing is silently omitted by a tar command.
98
+ # Sockets, devices and FIFOs hold no bytes to preserve, and provider runtime
99
+ # state is harness-owned, so both are recorded as manifest exclusions; quota
100
+ # overflows, escaping links and concurrent changes still fail the capture.
99
101
  _CAPTURE_SCRIPT = r"""
100
102
  import fnmatch, hashlib, json, os, pathlib, stat, sys, tarfile, tempfile
101
103
  source = pathlib.Path(sys.argv[1]).resolve()
@@ -107,18 +109,26 @@ root = source if source.is_dir() else source.parent
107
109
  max_bytes, max_entries = map(int, sys.argv[2:4])
108
110
  rules = json.loads(sys.argv[4])
109
111
  paths, exclusions, total = [], [], 0
112
+ def record(path, reason):
113
+ exclusions.append({"original_path": path.as_posix(), "reason": reason})
114
+ if len(paths) + len(exclusions) > max_entries:
115
+ raise ValueError("workspace evidence exceeds configured capture limits")
116
+ def component(path, rule):
117
+ return path.endswith("/" + rule) or "/" + rule + "/" in path
110
118
  def excluded(path):
111
119
  absolute = path.as_posix()
112
120
  relative = path.relative_to(root).as_posix()
113
- credential = any(absolute.endswith("/" + rule) or "/" + rule + "/" in absolute for rule in rules["credentials"])
121
+ credential = any(component(absolute, rule) for rule in rules["credentials"])
114
122
  credential |= any(path == pathlib.Path(rule) or path.is_relative_to(rule) for rule in rules["paths"])
115
123
  reason = "credential" if credential else None
124
+ # Relative to the captured root: runtime state below the root is dropped,
125
+ # but a root that itself lies under such a directory is still captured.
126
+ if reason is None and any(component("/" + relative, rule) for rule in rules["sandbox_runtime"]):
127
+ reason = "sandbox_runtime"
116
128
  if reason is None and any(fnmatch.fnmatchcase(relative, rule) or fnmatch.fnmatchcase(path.name, rule) for rule in rules["exclude"]):
117
129
  reason = "task_exclude"
118
130
  if reason:
119
- exclusions.append({"original_path": absolute, "reason": reason})
120
- if len(paths) + len(exclusions) > max_entries:
121
- raise ValueError("workspace evidence exceeds configured capture limits")
131
+ record(path, reason)
122
132
  return True
123
133
  return False
124
134
  def scan_error(error):
@@ -136,7 +146,8 @@ for directory, dirs, files in walk:
136
146
  info = path.lstat()
137
147
  if not any(check(info.st_mode) for check in
138
148
  (stat.S_ISREG, stat.S_ISDIR, stat.S_ISLNK)):
139
- raise ValueError("unsupported workspace entry: " + str(path))
149
+ record(path, "special_file")
150
+ continue
140
151
  if path.is_symlink() and not path.resolve().is_relative_to(root):
141
152
  raise ValueError("workspace symlink escapes evidence: " + str(path))
142
153
  total += info.st_size if stat.S_ISREG(info.st_mode) else 0
@@ -334,7 +345,10 @@ async def capture_workspace(
334
345
 
335
346
  ``destination`` must not exist. It receives ``workspace/`` and
336
347
  ``manifest.json`` together after successful validation. Capture limits are
337
- hard errors: this API never labels a truncated tree complete.
348
+ hard errors: this API never labels a truncated tree complete. Credential
349
+ files, provider runtime state (``SANDBOX_RUNTIME_STATE_PATHS``) and
350
+ sockets, FIFOs or device nodes stay out of the bundle, each recorded in
351
+ ``manifest.exclusions``.
338
352
  """
339
353
  if destination.exists() or destination.is_symlink():
340
354
  raise EvidenceError(f"Evidence destination already exists: {destination}")
@@ -346,6 +360,7 @@ async def capture_workspace(
346
360
  rules = json.dumps(
347
361
  {
348
362
  "credentials": CREDENTIAL_EVIDENCE_PATHS,
363
+ "sandbox_runtime": SANDBOX_RUNTIME_STATE_PATHS,
349
364
  "exclude": list(exclude),
350
365
  "paths": list(excluded_paths),
351
366
  }
@@ -0,0 +1,49 @@
1
+ """Provision the stdlib runtime used for trusted workspace capture."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import shlex
6
+
7
+ from benchflow.review.evidence import EvidenceError
8
+ from benchflow.sandbox.protocol import Sandbox
9
+
10
+ _PYTHON_PROBE = "import sys; raise SystemExit(sys.version_info < (3, 10))"
11
+ _SETUP_SCRIPT = f"""
12
+ set -eu
13
+ if python3 -I -c {shlex.quote(_PYTHON_PROBE)} >/dev/null 2>&1; then
14
+ exit 0
15
+ fi
16
+ if command -v apt-get >/dev/null 2>&1; then
17
+ apt-get update -qq
18
+ DEBIAN_FRONTEND=noninteractive apt-get install -y -qq --no-install-recommends python3
19
+ elif command -v apk >/dev/null 2>&1; then
20
+ apk add --no-cache python3
21
+ elif command -v dnf >/dev/null 2>&1; then
22
+ dnf install -y python3
23
+ elif command -v microdnf >/dev/null 2>&1; then
24
+ microdnf install -y python3
25
+ elif command -v yum >/dev/null 2>&1; then
26
+ yum install -y python3
27
+ else
28
+ echo 'Automatic review requires Python 3.10+ in the task image; no supported package manager is available.' >&2
29
+ exit 1
30
+ fi
31
+ python3 -I -c {shlex.quote(_PYTHON_PROBE)}
32
+ """
33
+
34
+
35
+ async def ensure_evidence_python(env: Sandbox, *, timeout_sec: int = 600) -> None:
36
+ """Prepare capture before the solver runs, including shell-only images.
37
+
38
+ Existing compatible interpreters require no package installation. Failure
39
+ is a setup error, before a solver can spend its budget producing evidence
40
+ that the controller cannot preserve.
41
+ """
42
+ result = await env.exec(
43
+ shlex.join(["sh", "-c", _SETUP_SCRIPT]),
44
+ user="root",
45
+ timeout_sec=timeout_sec,
46
+ )
47
+ if result.return_code != 0:
48
+ details = (result.stderr or result.stdout or "")[-2000:]
49
+ raise EvidenceError(f"Could not prepare workspace capture Python: {details}")
@@ -1189,6 +1189,10 @@ class Rollout:
1189
1189
 
1190
1190
  self._agent_cwd = await _resolve_agent_cwd(self._env, self._task)
1191
1191
 
1192
+ from benchflow.rollout._review import prepare_capture_runtime
1193
+
1194
+ await prepare_capture_runtime(self)
1195
+
1192
1196
  if cfg.primary_agent == "oracle":
1193
1197
  if cfg.sandbox_user:
1194
1198
  await self._planes.setup_sandbox_user(
@@ -10,6 +10,7 @@ from benchflow._utils.text import describe_exception
10
10
  from benchflow.agents.credentials import credential_evidence_overrides
11
11
  from benchflow.review.automatic import finish_review, prepare_review
12
12
  from benchflow.review.evidence import capture_task_evidence
13
+ from benchflow.review.evidence_runtime import ensure_evidence_python
13
14
  from benchflow.review.outcome import scoring_error
14
15
  from benchflow.review.persistence import commit_scoring_result, scoring_lock
15
16
 
@@ -35,6 +36,14 @@ def prepare_terminal_review(rollout: Rollout) -> None:
35
36
  cfg.task_digest = digest
36
37
 
37
38
 
39
+ async def prepare_capture_runtime(rollout: Rollout) -> None:
40
+ """Ensure required capture dependencies exist before solver execution."""
41
+ if rollout._review_plan is not None or rollout._config.purpose == "reviewer":
42
+ await ensure_evidence_python(
43
+ rollout._env, timeout_sec=rollout._config.sandbox_setup_timeout
44
+ )
45
+
46
+
38
47
  async def capture_terminal_workspace(rollout: Rollout) -> None:
39
48
  """Freeze solver or reviewer files before verifier hardening mutates them."""
40
49
  if rollout._review_plan is None and rollout._config.purpose != "reviewer":
@@ -6,6 +6,16 @@ from dataclasses import dataclass, field
6
6
  from pathlib import Path
7
7
  from typing import Protocol, runtime_checkable
8
8
 
9
+ # Directories a provider daemon owns inside the sandbox, matched as path
10
+ # components below a captured root. Daytona keeps ~/.daytona/sessions in the
11
+ # home of the account its daemon runs as (root in task images): the
12
+ # entrypoint's stdin/stdout/stderr FIFOs plus every session command's script,
13
+ # output log and exit code. With a /root workspace that tree sits inside the
14
+ # solver's working directory, changes while any command runs (evidence capture
15
+ # included), and is harness state rather than solver output. Docker keeps exec
16
+ # state outside the container filesystem, so it needs no entry.
17
+ SANDBOX_RUNTIME_STATE_PATHS = (".daytona",)
18
+
9
19
 
10
20
  @dataclass(frozen=True)
11
21
  class ExecResult:
@@ -3,6 +3,7 @@
3
3
  from __future__ import annotations
4
4
 
5
5
  import json
6
+ import os
6
7
  from datetime import datetime
7
8
  from pathlib import Path
8
9
  from types import SimpleNamespace
@@ -14,9 +15,11 @@ import benchflow
14
15
  from benchflow._utils.result_paths import iter_task_result_paths
15
16
  from benchflow._utils.scoring import classify_score_outcome
16
17
  from benchflow.review import automatic, persistence
18
+ from benchflow.review.evidence import EvidenceManifest
17
19
  from benchflow.review.options import ReviewerConfig
18
20
  from benchflow.rollout import _review
19
21
  from benchflow.rollout._results import _build_rollout_result
22
+ from tests.test_review_evidence import LocalTransport
20
23
  from tests.test_review_runtime import (
21
24
  WEIGHTED_RUBRIC,
22
25
  FakeRun,
@@ -308,6 +311,51 @@ async def test_workspace_freezes_before_capture_and_keeps_actual_cwd(
308
311
  assert order == ["disconnect", "stop", "capture"]
309
312
 
310
313
 
314
+ @pytest.mark.asyncio
315
+ async def test_daytona_session_fifos_keep_terminal_evidence_scorable(tmp_path):
316
+ """Guards terminal capture on Daytona /root workspaces after PR #1126.
317
+
318
+ Daytona's entrypoint FIFOs under /root/.daytona made capture fail, which
319
+ set _export_error; finish_review then ended in a scoring error with
320
+ rewards null even though the verifier had run.
321
+ """
322
+ workspace = tmp_path / "root"
323
+ entrypoint = workspace / ".daytona/sessions/entrypoint/entrypoint_command"
324
+ entrypoint.mkdir(parents=True)
325
+ os.mkfifo(entrypoint / "input.pipe")
326
+ (workspace / "paper.pdf").write_bytes(b"%PDF-1.7 solver paper")
327
+ rollout_dir = tmp_path / "rollout"
328
+ rollout_dir.mkdir()
329
+
330
+ async def idle(*_args):
331
+ return None
332
+
333
+ rollout = SimpleNamespace(
334
+ _review_plan=object(),
335
+ _config=SimpleNamespace(purpose="task", sandbox_user=None),
336
+ _env=LocalTransport(),
337
+ _agent_env={},
338
+ _planes=SimpleNamespace(quiesce_agent=idle),
339
+ _task=SimpleNamespace(config=SimpleNamespace(artifacts=[])),
340
+ _agent_cwd=str(workspace),
341
+ disconnect=idle,
342
+ _require_rollout_dir=lambda: rollout_dir,
343
+ )
344
+
345
+ await _review.capture_terminal_workspace(rollout)
346
+
347
+ assert getattr(rollout, "_export_error", None) is None
348
+ manifest = EvidenceManifest.model_validate_json(
349
+ (rollout_dir / "evidence" / "manifest.json").read_text()
350
+ )
351
+ assert [(entry.original_path, entry.reason) for entry in manifest.exclusions] == [
352
+ (str(workspace / ".daytona"), "sandbox_runtime")
353
+ ]
354
+ assert (
355
+ rollout_dir / "evidence" / "workspace" / "paper.pdf"
356
+ ).read_bytes() == b"%PDF-1.7 solver paper"
357
+
358
+
311
359
  def test_reviewer_child_never_recursively_preflights(monkeypatch):
312
360
  """Guards child execution recursion after PR #1126."""
313
361
  prepare = Mock(side_effect=AssertionError("reviewer cannot review itself"))
@@ -11,6 +11,7 @@ import io
11
11
  import os
12
12
  import shlex
13
13
  import shutil
14
+ import socket
14
15
  import sys
15
16
  import tarfile
16
17
  from pathlib import Path
@@ -157,13 +158,83 @@ async def test_external_symlink_never_imports_outside_files(tmp_path):
157
158
 
158
159
 
159
160
  @pytest.mark.asyncio
160
- async def test_fifo_is_rejected_not_silently_omitted(tmp_path):
161
+ @pytest.mark.parametrize("kind", ["fifo", "socket"])
162
+ async def test_special_files_are_recorded_not_silently_omitted(
163
+ tmp_path, monkeypatch, kind
164
+ ):
165
+ """Guards the evidence-capture fix for automatic review from PR #1126.
166
+
167
+ A socket or FIFO holds no bytes to preserve. Aborting on one discarded the
168
+ solver's whole review; it is now an explicit manifest exclusion and the
169
+ rest of the workspace is still captured.
170
+ """
161
171
  source = tmp_path / "source"
162
172
  source.mkdir()
163
- os.mkfifo(source / "results-pipe")
173
+ (source / "answer.txt").write_text("solver output")
174
+ special = source / "results-pipe"
175
+ if kind == "fifo":
176
+ os.mkfifo(special)
177
+ else:
178
+ # AF_UNIX addresses are length-limited; bind relative to the workspace.
179
+ monkeypatch.chdir(source)
180
+ with socket.socket(socket.AF_UNIX) as server:
181
+ server.bind(special.name)
182
+ bundle = tmp_path / "evidence"
164
183
 
165
- with pytest.raises(EvidenceError, match="unsupported workspace entry"):
166
- await capture_workspace(LocalTransport(), str(source), tmp_path / "evidence")
184
+ manifest = await capture_workspace(LocalTransport(), str(source), bundle)
185
+
186
+ assert (bundle / "workspace" / "answer.txt").read_text() == "solver output"
187
+ assert not (bundle / "workspace" / special.name).exists()
188
+ assert [(entry.original_path, entry.reason) for entry in manifest.exclusions] == [
189
+ (str(special), "special_file")
190
+ ]
191
+ validate_workspace(bundle / "workspace", manifest)
192
+
193
+
194
+ @pytest.mark.asyncio
195
+ async def test_daytona_session_state_never_blocks_or_enters_evidence(tmp_path):
196
+ """Guards automatic review on Daytona /root workspaces after PR #1126.
197
+
198
+ Daytona's daemon keeps ~/.daytona/sessions in /root: the entrypoint's
199
+ stdin/stdout/stderr FIFOs plus each session command's script, log and exit
200
+ code (layout observed in a live sandbox). Capture aborted on
201
+ input.pipe, so every such rollout lost its review and final reward.
202
+ """
203
+ source = tmp_path / "root"
204
+ entrypoint = source / ".daytona/sessions/entrypoint/entrypoint_command"
205
+ entrypoint.mkdir(parents=True)
206
+ for pipe in ("input.pipe", "stdout.pipe", "stderr.pipe"):
207
+ os.mkfifo(entrypoint / pipe)
208
+ (entrypoint / "cmd.sh").write_text("sleep infinity\n")
209
+ (entrypoint / "output.log").write_text("")
210
+ command = source / ".daytona/sessions/benchflow-exec/0b5e4c1d"
211
+ command.mkdir(parents=True)
212
+ (command / "cmd.sh").write_text("python3 -c capture\n")
213
+ (command / "exit_code").write_text("0")
214
+ (command / "output.log").write_text("harness output")
215
+ (source / "paper.pdf").write_bytes(b"%PDF-1.7 solver paper")
216
+ (source / "chains").mkdir()
217
+ (source / "chains" / "lcdm.csv").write_text("Om,rdh\n0.30,101.0\n")
218
+ (source / ".daytonarc").write_text("solver file that only resembles provider state")
219
+ (source / "daytona").mkdir()
220
+ (source / "daytona" / "notes.md").write_text("solver notes")
221
+ bundle = tmp_path / "evidence"
222
+
223
+ manifest = await capture_workspace(LocalTransport(), str(source), bundle)
224
+
225
+ assert [(entry.original_path, entry.reason) for entry in manifest.exclusions] == [
226
+ (str(source / ".daytona"), "sandbox_runtime")
227
+ ]
228
+ assert not (bundle / "workspace" / ".daytona").exists()
229
+ assert {entry.path for entry in manifest.entries} == {
230
+ ".daytonarc",
231
+ "chains",
232
+ "chains/lcdm.csv",
233
+ "daytona",
234
+ "daytona/notes.md",
235
+ "paper.pdf",
236
+ }
237
+ validate_workspace(bundle / "workspace", manifest)
167
238
 
168
239
 
169
240
  @pytest.mark.asyncio
@@ -442,10 +513,12 @@ async def test_external_artifact_failure_does_not_publish_partial_task_evidence(
442
513
  source.mkdir()
443
514
  (source / "answer").write_text("fine")
444
515
  unsupported = tmp_path / "unsupported-artifact"
445
- os.mkfifo(unsupported)
516
+ unsupported.mkdir()
517
+ (tmp_path / "outside-secret").write_text("do not export")
518
+ (unsupported / "escape").symlink_to(tmp_path / "outside-secret")
446
519
  bundle = tmp_path / "evidence"
447
520
 
448
- with pytest.raises(EvidenceError, match="unsupported workspace entry"):
521
+ with pytest.raises(EvidenceError, match="symlink escapes"):
449
522
  await capture_task_evidence(
450
523
  LocalTransport(), str(source), bundle, artifacts=[str(unsupported)]
451
524
  )
@@ -0,0 +1,107 @@
1
+ """Guards PR #1127's fix for shell-only capture failures introduced by PR #1126."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import asyncio
6
+ import os
7
+ import shlex
8
+ import shutil
9
+ import sys
10
+ from pathlib import Path
11
+ from unittest.mock import AsyncMock, Mock
12
+
13
+ import pytest
14
+
15
+ from benchflow.review.evidence import EvidenceError, capture_workspace
16
+ from benchflow.review.evidence_runtime import ensure_evidence_python
17
+ from benchflow.rollout import Rollout, RolloutConfig
18
+ from benchflow.sandbox.protocol import ExecResult
19
+
20
+
21
+ class ShellOnlyTransport:
22
+ """Execute real capture code with Python absent from the initial PATH."""
23
+
24
+ def __init__(self, binary_dir: Path):
25
+ self.binary_dir = binary_dir
26
+
27
+ async def exec(self, cmd, *, user="root", timeout_sec=30):
28
+ assert user == "root"
29
+ process = await asyncio.create_subprocess_exec(
30
+ "/bin/sh",
31
+ "-c",
32
+ cmd,
33
+ env={**os.environ, "PATH": str(self.binary_dir)},
34
+ stdout=asyncio.subprocess.PIPE,
35
+ stderr=asyncio.subprocess.PIPE,
36
+ )
37
+ stdout, stderr = await asyncio.wait_for(process.communicate(), timeout_sec)
38
+ return ExecResult(process.returncode, stdout.decode(), stderr.decode())
39
+
40
+ async def download_file(self, src, dst):
41
+ shutil.copyfile(src, dst)
42
+
43
+
44
+ def shell_image(tmp_path, *, has_python=False, package_manager=False):
45
+ binary_dir = tmp_path / "bin"
46
+ binary_dir.mkdir()
47
+ for name in ("sh", "rm"):
48
+ (binary_dir / name).symlink_to(shutil.which(name))
49
+ python = binary_dir / "python3"
50
+ marker = tmp_path / "package-manager-called"
51
+ if has_python:
52
+ python.symlink_to(sys.executable)
53
+ if package_manager:
54
+ manager = binary_dir / "apt-get"
55
+ manager.write_text(
56
+ "#!/bin/sh\n"
57
+ f": > {shlex.quote(str(marker))}\n"
58
+ 'if [ "$1" = install ]; then\n'
59
+ f" /bin/ln -s {shlex.quote(sys.executable)} {shlex.quote(str(python))}\n"
60
+ "fi\n"
61
+ )
62
+ manager.chmod(0o755)
63
+ return ShellOnlyTransport(binary_dir), marker
64
+
65
+
66
+ @pytest.mark.asyncio
67
+ async def test_shell_only_task_can_capture_after_trusted_setup(tmp_path):
68
+ """Guards PR #1127: reproduce missing Python, then capture real evidence."""
69
+ transport, marker = shell_image(tmp_path, package_manager=True)
70
+ source = tmp_path / "workspace"
71
+ source.mkdir()
72
+ (source / "hello.txt").write_text("Hello, world!\n")
73
+ with pytest.raises(EvidenceError, match=r"python3:.*not found"):
74
+ await capture_workspace(transport, str(source), tmp_path / "before")
75
+
76
+ await ensure_evidence_python(transport)
77
+ manifest = await capture_workspace(transport, str(source), tmp_path / "after")
78
+
79
+ assert marker.exists()
80
+ assert [entry.path for entry in manifest.entries] == ["hello.txt"]
81
+ assert (tmp_path / "after/workspace/hello.txt").read_text() == "Hello, world!\n"
82
+
83
+
84
+ @pytest.mark.asyncio
85
+ async def test_existing_python_does_not_install_packages(tmp_path):
86
+ """Guards PR #1127 against changing already compatible task images."""
87
+ transport, marker = shell_image(tmp_path, has_python=True, package_manager=True)
88
+ await ensure_evidence_python(transport)
89
+ assert not marker.exists()
90
+
91
+
92
+ @pytest.mark.asyncio
93
+ async def test_missing_capture_runtime_fails_before_agent_setup(tmp_path, monkeypatch):
94
+ """Guards PR #1127 against spending solver budget before a capture failure."""
95
+ transport, _ = shell_image(tmp_path)
96
+ rollout = Rollout(RolloutConfig(task_path=tmp_path, agent="oracle"))
97
+ rollout._env = transport
98
+ rollout._task = Mock()
99
+ rollout._rollout_dir = tmp_path
100
+ rollout._review_plan = object()
101
+ rollout._planes.setup_sandbox_user = AsyncMock()
102
+ monkeypatch.setattr(
103
+ "benchflow.rollout._resolve_agent_cwd", AsyncMock(return_value="/app")
104
+ )
105
+ with pytest.raises(EvidenceError, match="no supported package manager"):
106
+ await rollout.install_agent()
107
+ rollout._planes.setup_sandbox_user.assert_not_awaited()