benchflow 0.6.7.dev1827__tar.gz → 0.6.7.dev1831__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 (701) hide show
  1. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/PKG-INFO +1 -1
  2. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/pyproject.toml +1 -1
  3. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/live_activity.py +34 -5
  4. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/acp/container_transport.py +57 -1
  5. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/acp/runtime.py +27 -10
  6. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/cli/_live_progress.py +34 -9
  7. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/cli/_shared.py +57 -4
  8. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/cli/main.py +6 -2
  9. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/evaluation.py +30 -0
  10. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/rollout/__init__.py +17 -6
  11. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/process/_base.py +36 -0
  12. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/process/agentcore.py +18 -24
  13. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/process/daytona.py +5 -16
  14. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_acp.py +175 -0
  15. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_cli_live_progress.py +198 -13
  16. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_job.py +36 -0
  17. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/.gitignore +0 -0
  18. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/CHANGELOG.md +0 -0
  19. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/LICENSE +0 -0
  20. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/README.md +0 -0
  21. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/__init__.py +0 -0
  22. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/_dotenv.py +0 -0
  23. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/_paths.py +0 -0
  24. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/_run.py +0 -0
  25. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/_types.py +0 -0
  26. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/__init__.py +0 -0
  27. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/benchmark_repos.py +0 -0
  28. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/build_context_stage.py +0 -0
  29. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/config.py +0 -0
  30. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/config_override.py +0 -0
  31. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/content_address.py +0 -0
  32. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/dataset_registry.py +0 -0
  33. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/env_registry.py +0 -0
  34. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/evaluation_results.py +0 -0
  35. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/hf_datasets.py +0 -0
  36. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/json_safe.py +0 -0
  37. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/learner_memory.py +0 -0
  38. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/result_metadata.py +0 -0
  39. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/reward_events.py +0 -0
  40. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/scoring.py +0 -0
  41. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/source_provenance.py +0 -0
  42. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/task_authoring/__init__.py +0 -0
  43. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/task_authoring/_evidence_paths.py +0 -0
  44. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/task_authoring/acceptance_evidence.py +0 -0
  45. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/task_authoring/scaffolding.py +0 -0
  46. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/task_authoring/structural_checks.py +0 -0
  47. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/text.py +0 -0
  48. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/yaml_loader.py +0 -0
  49. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/acp/__init__.py +0 -0
  50. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/acp/client.py +0 -0
  51. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/acp/selection.py +0 -0
  52. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/acp/session.py +0 -0
  53. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/acp/transport.py +0 -0
  54. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/acp/types.py +0 -0
  55. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/adapters/__init__.py +0 -0
  56. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/adapters/_toolathlon.py +0 -0
  57. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/adapters/_toolathlon_container.py +0 -0
  58. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/adapters/_toolathlon_fake_mail.py +0 -0
  59. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/adapters/_toolathlon_poste_users.tsv +0 -0
  60. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/adapters/_toolathlon_services.py +0 -0
  61. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/adapters/harbor.py +0 -0
  62. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/adapters/inbound.py +0 -0
  63. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/adapters/inspect_ai.py +0 -0
  64. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/adapters/ors.py +0 -0
  65. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/adapters/resources/__init__.py +0 -0
  66. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/adapters/resources/mcp_atlas_bridge.py +0 -0
  67. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/adapters/resources/mcp_atlas_judge.py +0 -0
  68. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/adapters/source.py +0 -0
  69. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/agent_router.py +0 -0
  70. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/agent_router_guide.py +0 -0
  71. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/agent_router_parity.py +0 -0
  72. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/agent_router_scaffold.py +0 -0
  73. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/agents/__init__.py +0 -0
  74. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/agents/codex_config.py +0 -0
  75. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/agents/credentials.py +0 -0
  76. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/agents/deepagents_acp_shim.py +0 -0
  77. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/agents/env.py +0 -0
  78. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/agents/errors.py +0 -0
  79. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/agents/harvey_lab_acp_shim.py +0 -0
  80. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/agents/install.py +0 -0
  81. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/agents/manifest.py +0 -0
  82. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/agents/openclaw_acp_shim.py +0 -0
  83. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/agents/pi_acp_launcher.py +0 -0
  84. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/agents/protocol.py +0 -0
  85. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/agents/providers.py +0 -0
  86. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/agents/registry.py +0 -0
  87. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/agents/remote_manifests.py +0 -0
  88. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/branch.py +0 -0
  89. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/cli/__init__.py +0 -0
  90. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/cli/_hosted_env.py +0 -0
  91. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/cli/_options.py +0 -0
  92. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/cli/adopt.py +0 -0
  93. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/cli/agent.py +0 -0
  94. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/cli/continue_cmd.py +0 -0
  95. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/cli/environment.py +0 -0
  96. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/cli/eval_artifacts.py +0 -0
  97. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/cli/eval_lift.py +0 -0
  98. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/cli/hub.py +0 -0
  99. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/cli/monitor.py +0 -0
  100. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/cli/review.py +0 -0
  101. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/cli/sandbox.py +0 -0
  102. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/cli/skills.py +0 -0
  103. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/cli/tasks.py +0 -0
  104. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/cli/trace_import.py +0 -0
  105. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/cli/train.py +0 -0
  106. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/continue_run/__init__.py +0 -0
  107. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/continue_run/batch.py +0 -0
  108. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/continue_run/orchestrator.py +0 -0
  109. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/continue_run/replay_proxy.py +0 -0
  110. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/continue_run/run_folder.py +0 -0
  111. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/continue_run/sandbox_proxy.py +0 -0
  112. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/contracts/__init__.py +0 -0
  113. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/contracts/planes.py +0 -0
  114. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/contracts/user.py +0 -0
  115. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/demo_task/environment/Dockerfile +0 -0
  116. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/demo_task/instruction.md +0 -0
  117. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/demo_task/task.md +0 -0
  118. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/demo_task/task.toml +0 -0
  119. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/demo_task/tests/test.sh +0 -0
  120. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/diagnostics.py +0 -0
  121. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/environment/__init__.py +0 -0
  122. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/environment/manifest.py +0 -0
  123. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/environment/manifest_env.py +0 -0
  124. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/environment/protocol.py +0 -0
  125. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/environment/readiness.py +0 -0
  126. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/eval_artifacts.py +0 -0
  127. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/eval_lift.py +0 -0
  128. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/eval_plan.py +0 -0
  129. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/eval_sharding.py +0 -0
  130. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/eval_worker.py +0 -0
  131. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/experimental/__init__.py +0 -0
  132. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/experimental/mcp/__init__.py +0 -0
  133. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/experimental/mcp/hooks.py +0 -0
  134. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/experimental/mcp/reviewer_server.py +0 -0
  135. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/hosted_env.py +0 -0
  136. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/hub/__init__.py +0 -0
  137. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/hub/harbor_registry.py +0 -0
  138. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/integrations/__init__.py +0 -0
  139. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/integrations/trl/__init__.py +0 -0
  140. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/integrations/trl/spec.py +0 -0
  141. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/learner_skills.py +0 -0
  142. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/learner_store.py +0 -0
  143. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/loop_strategies.py +0 -0
  144. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/loop_sweep.py +0 -0
  145. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/metrics.py +0 -0
  146. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/models.py +0 -0
  147. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/monitor.py +0 -0
  148. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/providers/__init__.py +0 -0
  149. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/providers/litellm_bedrock_patch.py +0 -0
  150. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/providers/litellm_bedrock_preflight.py +0 -0
  151. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/providers/litellm_config.py +0 -0
  152. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/providers/litellm_logging.py +0 -0
  153. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/providers/litellm_runtime.py +0 -0
  154. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/providers/runtime.py +0 -0
  155. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/publish/__init__.py +0 -0
  156. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/publish/huggingface.py +0 -0
  157. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/py.typed +0 -0
  158. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/review/__init__.py +0 -0
  159. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/review/config.py +0 -0
  160. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/review/default-rubric.json +0 -0
  161. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/review/prompts.py +0 -0
  162. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/review/runner.py +0 -0
  163. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/review/wrapper.py +0 -0
  164. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/rewards/README.md +0 -0
  165. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/rewards/__init__.py +0 -0
  166. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/rewards/builtins.py +0 -0
  167. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/rewards/events.py +0 -0
  168. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/rewards/file_readers.py +0 -0
  169. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/rewards/llm.py +0 -0
  170. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/rewards/memory_scorer.py +0 -0
  171. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/rewards/node.py +0 -0
  172. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/rewards/protocol.py +0 -0
  173. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/rewards/rubric.py +0 -0
  174. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/rewards/rubric_config.py +0 -0
  175. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/rewards/validation.py +0 -0
  176. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/rollout/_config.py +0 -0
  177. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/rollout/_deadline.py +0 -0
  178. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/rollout/_results.py +0 -0
  179. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/rollout/_setup.py +0 -0
  180. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/rollout/_skills.py +0 -0
  181. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/rollout/_usage.py +0 -0
  182. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/rollout/_user_loop.py +0 -0
  183. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/rollout/session_factory_runtime.py +0 -0
  184. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/rollout/task_runtime.py +0 -0
  185. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/rollout_branch.py +0 -0
  186. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/rollout_planes.py +0 -0
  187. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/runtime.py +0 -0
  188. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/__init__.py +0 -0
  189. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/_base.py +0 -0
  190. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/_cache_reclaim.py +0 -0
  191. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/_compose.py +0 -0
  192. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/_compose_files/docker-compose-base.yaml +0 -0
  193. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/_compose_files/docker-compose-build.yaml +0 -0
  194. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/_compose_files/docker-compose-no-network.yaml +0 -0
  195. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/_compose_files/docker-compose-prebuilt.yaml +0 -0
  196. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/_sdk_ops.py +0 -0
  197. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/agentcore.py +0 -0
  198. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/agentcore_builder.py +0 -0
  199. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/agentcore_image.py +0 -0
  200. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/agentcore_provisioning.py +0 -0
  201. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/agentcore_reaper.py +0 -0
  202. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/agentcore_sealed.py +0 -0
  203. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/apple_container.py +0 -0
  204. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/daytona.py +0 -0
  205. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/daytona_dind.py +0 -0
  206. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/daytona_pty.py +0 -0
  207. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/daytona_reaper.py +0 -0
  208. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/daytona_strategies.py +0 -0
  209. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/docker.py +0 -0
  210. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/lockdown.py +0 -0
  211. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/metadata.py +0 -0
  212. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/modal_impl.py +0 -0
  213. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/process/__init__.py +0 -0
  214. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/process/apple.py +0 -0
  215. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/process/docker.py +0 -0
  216. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/protocol.py +0 -0
  217. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/providers.py +0 -0
  218. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/services.py +0 -0
  219. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/setup.py +0 -0
  220. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/snapshot.py +0 -0
  221. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/user.py +0 -0
  222. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/scenes.py +0 -0
  223. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/sdk.py +0 -0
  224. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/self_gen.py +0 -0
  225. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/skill_eval/__init__.py +0 -0
  226. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/skill_eval/_core.py +0 -0
  227. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/skill_eval/gepa_export.py +0 -0
  228. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/skill_eval/schema.py +0 -0
  229. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/skill_policy.py +0 -0
  230. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/skills.py +0 -0
  231. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/task/__init__.py +0 -0
  232. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/task/_document_evidence.py +0 -0
  233. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/task/_document_normalize.py +0 -0
  234. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/task/_document_parse.py +0 -0
  235. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/task/_document_profiles.py +0 -0
  236. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/task/acceptance_live.py +0 -0
  237. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/task/acceptance_live_model.py +0 -0
  238. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/task/acceptance_live_report.py +0 -0
  239. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/task/acceptance_live_validation.py +0 -0
  240. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/task/config.py +0 -0
  241. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/task/discovery.py +0 -0
  242. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/task/document.py +0 -0
  243. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/task/env.py +0 -0
  244. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/task/export.py +0 -0
  245. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/task/imports.py +0 -0
  246. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/task/output_format.py +0 -0
  247. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/task/package.py +0 -0
  248. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/task/paths.py +0 -0
  249. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/task/prompts.py +0 -0
  250. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/task/runtime_capabilities.py +0 -0
  251. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/task/runtime_view.py +0 -0
  252. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/task/task.py +0 -0
  253. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/task/verifier.py +0 -0
  254. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/task/verifier_core.py +0 -0
  255. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/task/verifier_document.py +0 -0
  256. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/task/verifier_errors.py +0 -0
  257. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/task/verifier_judge_inputs.py +0 -0
  258. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/task/verifier_ors_episode.py +0 -0
  259. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/task/verifier_reward_kit.py +0 -0
  260. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/task/verifier_scan.py +0 -0
  261. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/task/verifier_script_strategy.py +0 -0
  262. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/templates/__init__.py +0 -0
  263. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/templates/judge.py.tmpl +0 -0
  264. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/templates/test.sh.tmpl +0 -0
  265. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/traces/__init__.py +0 -0
  266. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/traces/huggingface.py +0 -0
  267. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/traces/local.py +0 -0
  268. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/traces/models.py +0 -0
  269. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/traces/parsers.py +0 -0
  270. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/traces/task_gen.py +0 -0
  271. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/training/__init__.py +0 -0
  272. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/training/backends/__init__.py +0 -0
  273. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/training/backends/prime_rl.py +0 -0
  274. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/training/run_manifest.py +0 -0
  275. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/trajectories/__init__.py +0 -0
  276. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/trajectories/_capture.py +0 -0
  277. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/trajectories/_export_common.py +0 -0
  278. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/trajectories/_llm_capture.py +0 -0
  279. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/trajectories/call_purpose.py +0 -0
  280. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/trajectories/export.py +0 -0
  281. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/trajectories/export_adp.py +0 -0
  282. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/trajectories/export_atif.py +0 -0
  283. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/trajectories/export_prime_sft.py +0 -0
  284. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/trajectories/export_trl_sft.py +0 -0
  285. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/trajectories/metrics.py +0 -0
  286. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/trajectories/results.py +0 -0
  287. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/trajectories/tree.py +0 -0
  288. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/trajectories/trl_sft_tokenization.py +0 -0
  289. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/trajectories/types.py +0 -0
  290. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/trajectories/viewer.py +0 -0
  291. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/usage_tracking.py +0 -0
  292. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/__init__.py +0 -0
  293. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/acceptance_live_harness.py +0 -0
  294. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/agents/__init__.py +0 -0
  295. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/agents/test_manifest_dirscan.py +0 -0
  296. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/agents/test_manifest_loader.py +0 -0
  297. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/agents/test_manifest_parity.py +0 -0
  298. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/agents/test_manifest_wiring.py +0 -0
  299. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/agents/test_namespace_shorthand.py +0 -0
  300. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/agents/test_plugin_entry_points.py +0 -0
  301. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/agents/test_protocol.py +0 -0
  302. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/agents/test_remote_manifest_autoload.py +0 -0
  303. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/conformance/README.md +0 -0
  304. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/conformance/acp_smoke/environment/Dockerfile +0 -0
  305. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/conformance/acp_smoke/environment/docker-compose.yaml +0 -0
  306. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/conformance/acp_smoke/environment/skills/conformance-writer/SKILL.md +0 -0
  307. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/conformance/acp_smoke/instruction.md +0 -0
  308. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/conformance/acp_smoke/solution/solve.sh +0 -0
  309. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/conformance/acp_smoke/task.md +0 -0
  310. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/conformance/acp_smoke/task.toml +0 -0
  311. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/conformance/acp_smoke/tests/test.sh +0 -0
  312. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/conformance/conformance-results.json +0 -0
  313. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/conformance/proof_multi_agent.py +0 -0
  314. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/conformance/proof_snapshot.py +0 -0
  315. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/conformance/run_conformance.py +0 -0
  316. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/conformance/self_gen_smoke_skills/skill-creator/SKILL.md +0 -0
  317. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/conftest.py +0 -0
  318. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/continue_run/__init__.py +0 -0
  319. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/continue_run/_helpers.py +0 -0
  320. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/continue_run/test_batch.py +0 -0
  321. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/continue_run/test_orchestrator.py +0 -0
  322. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/continue_run/test_replay_proxy.py +0 -0
  323. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/continue_run/test_run_folder.py +0 -0
  324. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/environment/__init__.py +0 -0
  325. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/environment/test_chibench_manifest.py +0 -0
  326. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/environment/test_clawsbench_manifest.py +0 -0
  327. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/environment/test_manifest.py +0 -0
  328. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/environment/test_manifest_env.py +0 -0
  329. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/environment/test_protocol.py +0 -0
  330. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/environment/test_readiness.py +0 -0
  331. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/examples/hello-world-task/environment/Dockerfile +0 -0
  332. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/examples/hello-world-task/instruction.md +0 -0
  333. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/examples/hello-world-task/solution/solve.sh +0 -0
  334. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/examples/hello-world-task/task.md +0 -0
  335. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/examples/hello-world-task/task.toml +0 -0
  336. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/examples/hello-world-task/tests/test.sh +0 -0
  337. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/examples/test_claude.sh +0 -0
  338. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/examples/test_codex.sh +0 -0
  339. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/examples/test_codex_custom_provider.sh +0 -0
  340. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/examples/test_gemini.sh +0 -0
  341. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/examples/test_openclaw.sh +0 -0
  342. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/examples/traces/minimal-claude.jsonl +0 -0
  343. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/examples/traces/minimal-opentraces.jsonl +0 -0
  344. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/digest/README.md +0 -0
  345. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/digest/alpha-task/environment/Dockerfile +0 -0
  346. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/digest/alpha-task/instruction.md +0 -0
  347. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/digest/alpha-task/task.toml +0 -0
  348. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/digest/alpha-task/tests/test.sh +0 -0
  349. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/digest/beta-task/data/empty.bin +0 -0
  350. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/digest/beta-task/data/unicode.txt +0 -0
  351. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/digest/beta-task/instruction.md +0 -0
  352. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/digest/beta-task/task.toml +0 -0
  353. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/digest/not-a-task/notes.txt +0 -0
  354. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/mock_acp_agent.py +0 -0
  355. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/mock_acp_agent_interleaved.py +0 -0
  356. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/mock_acp_agent_multi_turn.py +0 -0
  357. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/mock_openai_responses_server.py +0 -0
  358. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/Dockerfile +0 -0
  359. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/data/michigan_stations.txt +0 -0
  360. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/flood-detection/SKILL.md +0 -0
  361. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/nws-flood-thresholds/SKILL.md +0 -0
  362. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/usgs-data-download/SKILL.md +0 -0
  363. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/flood-risk-analysis/instruction.md +0 -0
  364. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/flood-risk-analysis/solution/solve.sh +0 -0
  365. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/flood-risk-analysis/task.toml +0 -0
  366. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/flood-risk-analysis/tests/test.sh +0 -0
  367. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/flood-risk-analysis/tests/test_outputs.py +0 -0
  368. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/Dockerfile +0 -0
  369. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/climate.csv +0 -0
  370. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/hydrology.csv +0 -0
  371. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/land_cover.csv +0 -0
  372. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/water_temperature.csv +0 -0
  373. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/contribution-analysis/SKILL.md +0 -0
  374. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/meteorology-driver-classification/SKILL.md +0 -0
  375. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/pca-decomposition/SKILL.md +0 -0
  376. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/trend-analysis/SKILL.md +0 -0
  377. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/lake-warming-attribution/instruction.md +0 -0
  378. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/lake-warming-attribution/solution/solve.sh +0 -0
  379. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/lake-warming-attribution/task.toml +0 -0
  380. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/lake-warming-attribution/tests/test.sh +0 -0
  381. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/lake-warming-attribution/tests/test_outputs.py +0 -0
  382. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/manifest.json +0 -0
  383. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/Dockerfile +0 -0
  384. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/r2r_simulator.py +0 -0
  385. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/finite-horizon-lqr/SKILL.md +0 -0
  386. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/integral-action-design/SKILL.md +0 -0
  387. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/mpc-horizon-tuning/SKILL.md +0 -0
  388. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/state-space-linearization/SKILL.md +0 -0
  389. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/system_config.json +0 -0
  390. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/r2r-mpc-control/instruction.md +0 -0
  391. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/r2r-mpc-control/solution/solve.sh +0 -0
  392. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/r2r-mpc-control/task.toml +0 -0
  393. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/r2r-mpc-control/tests/test.sh +0 -0
  394. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/r2r-mpc-control/tests/test_outputs.py +0 -0
  395. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/Dockerfile +0 -0
  396. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/generate_training_pcaps.py +0 -0
  397. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/local.rules +0 -0
  398. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/pcap-triage-tshark/SKILL.md +0 -0
  399. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/pcap-triage-tshark/scripts/summarize_http_requests.sh +0 -0
  400. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-offline-evejson/SKILL.md +0 -0
  401. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-offline-evejson/scripts/run_suricata_offline.sh +0 -0
  402. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-rules-basics/SKILL.md +0 -0
  403. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/suricata.yaml +0 -0
  404. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/instruction.md +0 -0
  405. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/solution/solve.sh +0 -0
  406. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/task.toml +0 -0
  407. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/tests/test.sh +0 -0
  408. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/tests/test_outputs.py +0 -0
  409. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/Dockerfile +0 -0
  410. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syz-extract-constants/SKILL.md +0 -0
  411. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syzkaller-build-loop/SKILL.md +0 -0
  412. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syzlang-ioctl-basics/SKILL.md +0 -0
  413. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/instruction.md +0 -0
  414. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/solution/solve.sh +0 -0
  415. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/task.toml +0 -0
  416. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/tests/test.sh +0 -0
  417. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/tests/test_outputs.py +0 -0
  418. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/integration/_consistency.py +0 -0
  419. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/integration/agent_judge.py +0 -0
  420. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/integration/check_adapter_evidence.py +0 -0
  421. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/integration/check_hosted_env_evidence.py +0 -0
  422. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/integration/check_results.py +0 -0
  423. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/integration/check_skillsbench_harbor_parity.py +0 -0
  424. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/integration/check_trace_to_task_evidence.py +0 -0
  425. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/integration/configs/claude-agent-acp.yaml +0 -0
  426. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/integration/configs/codex-acp.yaml +0 -0
  427. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/integration/configs/gemini.yaml +0 -0
  428. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/integration/configs/harvey-lab-harness.yaml +0 -0
  429. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/integration/configs/mimo.yaml +0 -0
  430. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/integration/configs/openclaw.yaml +0 -0
  431. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/integration/configs/opencode.yaml +0 -0
  432. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/integration/configs/openhands.yaml +0 -0
  433. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/integration/configs/pi-acp.yaml +0 -0
  434. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/integration/deepagents_harness.py +0 -0
  435. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/integration/rubric_checks.py +0 -0
  436. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/integration/run.sh +0 -0
  437. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/integration/run_suite.py +0 -0
  438. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/integration/scenarios.py +0 -0
  439. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/integration/suites/release.yaml +0 -0
  440. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_acceptance_evidence.py +0 -0
  441. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_acceptance_live.py +0 -0
  442. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_acceptance_live_execution.py +0 -0
  443. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_acp_capability_advertising.py +0 -0
  444. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_acp_mcp_servers.py +0 -0
  445. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_acp_model_config_dispatch.py +0 -0
  446. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_acp_pinned_protocol_guard.py +0 -0
  447. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_acp_setup_failure_propagation.py +0 -0
  448. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_adapter_scripts.py +0 -0
  449. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_adapters.py +0 -0
  450. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_agent_cli.py +0 -0
  451. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_agent_env_resolution.py +0 -0
  452. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_agent_gemini_defaults.py +0 -0
  453. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_agent_idle_timeout_cli.py +0 -0
  454. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_agent_model_decouple.py +0 -0
  455. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_agent_registry.py +0 -0
  456. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_agent_router.py +0 -0
  457. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_agent_router_cli_e2e.py +0 -0
  458. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_agent_router_scaffold.py +0 -0
  459. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_agent_setup.py +0 -0
  460. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_agent_spec.py +0 -0
  461. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_agentcore_builder.py +0 -0
  462. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_agentcore_parallel.py +0 -0
  463. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_agentcore_reaper.py +0 -0
  464. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_agentcore_sandbox.py +0 -0
  465. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_agentcore_transport.py +0 -0
  466. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_api_error_capture.py +0 -0
  467. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_apple_container_sandbox.py +0 -0
  468. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_bare_model_provider.py +0 -0
  469. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_base_install_imports.py +0 -0
  470. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_bedrock_thinking.py +0 -0
  471. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_benchflow_experiment_review_validator.py +0 -0
  472. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_benchmark_repos_resolve_repo_path.py +0 -0
  473. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_branch.py +0 -0
  474. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_build_context_stage.py +0 -0
  475. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_build_review_pack.py +0 -0
  476. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_capture_trajectory.py +0 -0
  477. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_check_skillsbench_harbor_parity.py +0 -0
  478. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_clawsbench_slice.py +0 -0
  479. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_cli_adopt_aliases.py +0 -0
  480. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_cli_arg_validation.py +0 -0
  481. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_cli_daytona.py +0 -0
  482. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_cli_docs_drift.py +0 -0
  483. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_cli_edge_case_hardening.py +0 -0
  484. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_cli_hub_env.py +0 -0
  485. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_cli_misc.py +0 -0
  486. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_codex_review.py +0 -0
  487. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_codex_self_write_auth.py +0 -0
  488. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_config_override.py +0 -0
  489. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_config_redaction.py +0 -0
  490. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_connect_as_env.py +0 -0
  491. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_console_error_truncation.py +0 -0
  492. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_console_progress.py +0 -0
  493. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_continuallearningbench_adapter.py +0 -0
  494. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_dataset_registry.py +0 -0
  495. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_daytona_command_polling.py +0 -0
  496. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_daytona_dind_compose_up.py +0 -0
  497. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_daytona_download.py +0 -0
  498. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_daytona_litellm_runtime.py +0 -0
  499. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_daytona_poll_deadline.py +0 -0
  500. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_daytona_reap.py +0 -0
  501. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_deepagents_agent.py +0 -0
  502. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_docker_prune_scoping.py +0 -0
  503. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_docker_uploads.py +0 -0
  504. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_docs_examples.py +0 -0
  505. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_eng50_capabilities.py +0 -0
  506. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_env_registry.py +0 -0
  507. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_env_setup.py +0 -0
  508. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_environment_manifest_controls.py +0 -0
  509. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_eval_artifact_cli.py +0 -0
  510. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_eval_filters_applied.py +0 -0
  511. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_eval_lift.py +0 -0
  512. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_eval_sharding.py +0 -0
  513. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_eval_single_task_summary.py +0 -0
  514. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_eval_source_provenance.py +0 -0
  515. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_eval_worker_retry.py +0 -0
  516. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_eval_zero_task_guard.py +0 -0
  517. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_evaluation_environment_manifest.py +0 -0
  518. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_exclude_tasks.py +0 -0
  519. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_filter_credentialed_cells.py +0 -0
  520. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_harvey_lab_shim.py +0 -0
  521. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_hilbench_adapter.py +0 -0
  522. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_hosted_env.py +0 -0
  523. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_hosted_env_rollout_contract.py +0 -0
  524. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_hub_harbor_registry.py +0 -0
  525. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_inbound_adapter_manifest.py +0 -0
  526. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_inbound_adapters.py +0 -0
  527. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_integration_agent_judge.py +0 -0
  528. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_integration_check_results.py +0 -0
  529. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_integration_consistency.py +0 -0
  530. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_integration_matrix.py +0 -0
  531. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_integration_provider_selection.py +0 -0
  532. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_integration_run_suite.py +0 -0
  533. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_integration_suite.py +0 -0
  534. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_internet_policy.py +0 -0
  535. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_job_sequential_shared.py +0 -0
  536. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_job_sequential_shared_resume.py +0 -0
  537. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_judge_robustness.py +0 -0
  538. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_judge_symlink_ingestion.py +0 -0
  539. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_learner_skills.py +0 -0
  540. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_learner_skills_traversal.py +0 -0
  541. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_learner_store.py +0 -0
  542. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_learner_store_persistence.py +0 -0
  543. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_litellm_config.py +0 -0
  544. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_litellm_hardening.py +0 -0
  545. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_litellm_logging.py +0 -0
  546. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_litellm_model_via_env_generic.py +0 -0
  547. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_litellm_reasoning_passthrough.py +0 -0
  548. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_litellm_runtime.py +0 -0
  549. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_litellm_smoke.py +0 -0
  550. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_live_llm_trajectory.py +0 -0
  551. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_llm_judge.py +0 -0
  552. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_llm_judge_event_tags.py +0 -0
  553. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_llm_judge_verifier.py +0 -0
  554. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_loop_strategies.py +0 -0
  555. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_loop_summary.py +0 -0
  556. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_loop_sweep.py +0 -0
  557. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_memory_scorer.py +0 -0
  558. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_metrics.py +0 -0
  559. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_mle_bench_adapter.py +0 -0
  560. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_mock_openai_responses_server.py +0 -0
  561. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_monitor_scaffold.py +0 -0
  562. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_native_acp_usage.py +0 -0
  563. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_no_cross_provider_fallback.py +0 -0
  564. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_notification_order_real.py +0 -0
  565. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_opencode_family_proxy_tracking.py +0 -0
  566. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_oracle.py +0 -0
  567. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_oracle_chokepoint.py +0 -0
  568. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_paths_safe.py +0 -0
  569. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_paths_symlink_helpers.py +0 -0
  570. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_pi_acp_launcher.py +0 -0
  571. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_pi_acp_proxy_routing.py +0 -0
  572. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_process.py +0 -0
  573. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_project_skills_layout.py +0 -0
  574. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_provider_auth_detection.py +0 -0
  575. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_providers.py +0 -0
  576. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_reexport.py +0 -0
  577. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_registry_invariants.py +0 -0
  578. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_release_hardening_r5.py +0 -0
  579. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_release_version.py +0 -0
  580. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_release_workflow_wiring.py +0 -0
  581. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_resolve_env_helpers.py +0 -0
  582. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_review_boundaries.py +0 -0
  583. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_review_rubric.py +0 -0
  584. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_review_runtime.py +0 -0
  585. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_reward_lenient.py +0 -0
  586. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_reward_node.py +0 -0
  587. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_reward_range.py +0 -0
  588. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_reward_unified_contract.py +0 -0
  589. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_rewards.py +0 -0
  590. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_rewards_jsonl.py +0 -0
  591. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_rollout_architecture.py +0 -0
  592. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_rollout_branch.py +0 -0
  593. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_rollout_config_path_coercion.py +0 -0
  594. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_rollout_environment.py +0 -0
  595. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_rollout_hard_deadline.py +0 -0
  596. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_rollout_import_no_side_effects.py +0 -0
  597. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_rollout_on_ask_user_wiring.py +0 -0
  598. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_rollout_planes_contract.py +0 -0
  599. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_rollout_probe_sandbox_health.py +0 -0
  600. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_rollout_session_factory_dispatch.py +0 -0
  601. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_rollout_setup_commands.py +0 -0
  602. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_rollout_upload.py +0 -0
  603. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_rubric_checks.py +0 -0
  604. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_rubric_config.py +0 -0
  605. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_runtime.py +0 -0
  606. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_runtime_capabilities.py +0 -0
  607. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_runtime_config_wired.py +0 -0
  608. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_runtime_live_sandbox.py +0 -0
  609. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_sandbox.py +0 -0
  610. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_sandbox_exec_secret_handling.py +0 -0
  611. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_sandbox_hardening.py +0 -0
  612. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_sandbox_isolation_copy_traversal.py +0 -0
  613. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_sandbox_live_process.py +0 -0
  614. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_sandbox_multi_service.py +0 -0
  615. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_sandbox_prebuilt_validation.py +0 -0
  616. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_sandbox_protocol.py +0 -0
  617. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_sandbox_provider_registry_drift.py +0 -0
  618. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_sandbox_setup.py +0 -0
  619. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_sandbox_snapshot_contract.py +0 -0
  620. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_sandbox_upload_symlink.py +0 -0
  621. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_sandbox_verifier_workspace.py +0 -0
  622. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_scene.py +0 -0
  623. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_scene_outbox_trial.py +0 -0
  624. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_scene_parallel_group.py +0 -0
  625. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_scene_result_aggregation.py +0 -0
  626. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_scoring.py +0 -0
  627. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_sdk_internals.py +0 -0
  628. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_sdk_lockdown.py +0 -0
  629. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_sdk_run_alias.py +0 -0
  630. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_sealed_channel_container.py +0 -0
  631. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_self_gen_cli.py +0 -0
  632. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_self_gen_export_error_channel.py +0 -0
  633. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_self_gen_export_failures.py +0 -0
  634. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_self_gen_orchestration.py +0 -0
  635. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_session_factory_runtime.py +0 -0
  636. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_session_request_permission_dispatch.py +0 -0
  637. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_skill_eval.py +0 -0
  638. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_skill_eval_dryrun.py +0 -0
  639. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_skill_eval_integration.py +0 -0
  640. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_skill_eval_sweep.py +0 -0
  641. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_skill_eval_traversal.py +0 -0
  642. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_skill_invocation_artifacts.py +0 -0
  643. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_skill_policy.py +0 -0
  644. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_skills.py +0 -0
  645. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_skills_dir_agent_home_link.py +0 -0
  646. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_skillsbench_conversion_conformance.py +0 -0
  647. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_skillsbench_harbor_run_suite.py +0 -0
  648. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_smoke.py +0 -0
  649. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_smoke_wiring.py +0 -0
  650. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_source_adapters.py +0 -0
  651. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_subscription_auth.py +0 -0
  652. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_task_check_eval_consistency.py +0 -0
  653. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_task_config.py +0 -0
  654. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_task_digest.py +0 -0
  655. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_task_document.py +0 -0
  656. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_task_download.py +0 -0
  657. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_task_export.py +0 -0
  658. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_task_output_format.py +0 -0
  659. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_task_package.py +0 -0
  660. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_task_runtime_primitive.py +0 -0
  661. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_tasks.py +0 -0
  662. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_token_usage_normalization.py +0 -0
  663. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_trace_import_cli.py +0 -0
  664. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_trace_task_gen_traversal.py +0 -0
  665. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_trace_to_task_evidence.py +0 -0
  666. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_traces_huggingface.py +0 -0
  667. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_traces_parsers.py +0 -0
  668. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_traces_task_gen.py +0 -0
  669. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_train_cli.py +0 -0
  670. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_train_mode_artifact_emission.py +0 -0
  671. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_train_trl_cli.py +0 -0
  672. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_trajectory_integration.py +0 -0
  673. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_trajectory_streaming.py +0 -0
  674. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_trial_agent_timeout_verify.py +0 -0
  675. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_trial_install_agent_timeout.py +0 -0
  676. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_trial_litellm_runtime.py +0 -0
  677. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_trl_integration.py +0 -0
  678. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_usage_litellm.py +0 -0
  679. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_usage_required.py +0 -0
  680. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_usage_tracking.py +0 -0
  681. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_user.py +0 -0
  682. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_v06_guard_ports.py +0 -0
  683. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_verifier_document.py +0 -0
  684. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_verifier_multi_container.py +0 -0
  685. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_verifier_output.py +0 -0
  686. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_verifier_output_freshness.py +0 -0
  687. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_verifier_strategies.py +0 -0
  688. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_verifier_wedge_retry.py +0 -0
  689. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_verify.py +0 -0
  690. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_workflow_action_pinning.py +0 -0
  691. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_yaml_config.py +0 -0
  692. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/trajectories/__init__.py +0 -0
  693. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/trajectories/test_export.py +0 -0
  694. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/trajectories/test_export_adp.py +0 -0
  695. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/trajectories/test_export_atif.py +0 -0
  696. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/trajectories/test_export_common.py +0 -0
  697. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/trajectories/test_export_nan_handling.py +0 -0
  698. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/trajectories/test_export_prime_sft.py +0 -0
  699. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/trajectories/test_redaction.py +0 -0
  700. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/trajectories/test_step_granularity.py +0 -0
  701. {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/trajectories/test_tree.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: benchflow
3
- Version: 0.6.7.dev1827
3
+ Version: 0.6.7.dev1831
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.6.7.dev1827"
3
+ version = "0.6.7.dev1831"
4
4
  description = "Multi-turn agent benchmarking with ACP — run any agent, any model, any provider."
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.12"
@@ -12,7 +12,34 @@ never to a render error.
12
12
  from __future__ import annotations
13
13
 
14
14
  import threading
15
- from typing import Any
15
+ from typing import Any, NamedTuple
16
+
17
+
18
+ class SessionCounters(NamedTuple):
19
+ """The live ACP session counters the console heartbeat logs.
20
+
21
+ ``total_tokens`` is None until the session has a usage snapshot (i.e.
22
+ after a completed prompt).
23
+ """
24
+
25
+ tool_calls: int
26
+ last_tool: str
27
+ total_tokens: int | None
28
+
29
+
30
+ class ActivitySnapshot(NamedTuple):
31
+ """One dashboard poll of a live rollout.
32
+
33
+ ``phase`` is the rollout's lifecycle phase (``Rollout._phase``) and is
34
+ always present, so the activity cell can label the long non-agent
35
+ stretches — sandbox create, agent install, verify — instead of blanking
36
+ in a way that is indistinguishable from a hang. ``counters`` is None
37
+ until the agent session exists (session-factory agents never grow one).
38
+ """
39
+
40
+ phase: str
41
+ counters: SessionCounters | None
42
+
16
43
 
17
44
  _lock = threading.Lock()
18
45
  # Task name -> live Rollout. Task basenames are unique keys by engine-wide
@@ -33,11 +60,13 @@ def unregister(task_name: str) -> None:
33
60
  _live.pop(task_name, None)
34
61
 
35
62
 
36
- def activity(task_name: str) -> tuple[int, str, int | None] | None:
37
- """(tool calls, last tool title, total tokens) for a running task.
63
+ def activity(task_name: str) -> ActivitySnapshot | None:
64
+ """The :class:`ActivitySnapshot` for a running task, or None when the
65
+ rollout isn't registered (pre-create, between retries, teardown).
38
66
 
39
- None until the task's agent session exists — including non-ACP
40
- (session-factory) agents, which never grow an ACP client. The dig into
67
+ ``counters`` inside the snapshot is None until the task's agent session
68
+ exists — including non-ACP (session-factory) agents, which never grow an
69
+ ACP client — but ``phase`` is always present. The dig into
41
70
  client/session state lives on ``Rollout.activity_snapshot()`` (typed,
42
71
  owner-side); the except here only guards renders racing rollout teardown.
43
72
  """
@@ -6,12 +6,58 @@ from pathlib import Path
6
6
  from typing import Any, TextIO
7
7
 
8
8
  from benchflow.sandbox.process import LiveProcess
9
+ from benchflow.sandbox.process._base import _ANSI_CSI_RE, _ANSI_OSC_RE
9
10
 
10
11
  from .transport import Transport, decode_json_rpc_message
11
12
 
12
13
  logger = logging.getLogger(__name__)
13
14
 
14
15
 
16
+ def _decode_pty_json_rpc_message(text: str) -> dict[str, Any] | None:
17
+ """Decode one JSON-RPC message from a line that may carry PTY noise.
18
+
19
+ Daytona's PTY transport gives the agent a real terminal, so the shell
20
+ prompt (with its CSI/OSC escape sequences) can land on the SAME line as
21
+ the agent's first protocol message — observed on BugSwarm-style images
22
+ as ``\\x1b[?2004h\\x1b]0;root@…\\x07root@…# \\x1b[?2004l{"jsonrpc":…}``.
23
+ Whole-line ``json.loads`` fails on that prefix, the response is treated
24
+ as non-protocol noise, and the handshake "times out" with the completed
25
+ initialize JSON sitting in the captured agent log — at ANY timeout.
26
+
27
+ Recovery is bounded to where the bug lives: :meth:`ContainerTransport.
28
+ receive` calls this lenient path only until the first successfully
29
+ decoded protocol message per connection (prompt glue is by construction
30
+ a pre-first-message PTY phenomenon), and stdio pipes keep the strict
31
+ whole-line contract in :func:`decode_json_rpc_message`.
32
+
33
+ 1. fast path — the plain whole-line decode, unchanged;
34
+ 2. retry from the first ``{`` when it is not at position 0 (drops a
35
+ glued prompt prefix);
36
+ 3. if the line carries ``\\x1b``, strip CSI/OSC sequences (drops escapes
37
+ trailing or embedded around the JSON) and retry from the first ``{``.
38
+
39
+ Every retry still goes through :func:`decode_json_rpc_message`, so the
40
+ JSON-RPC 2.0 envelope check keeps rejecting agent log lines that merely
41
+ contain JSON (e.g. ``INFO {"jsonrpc": …}`` with a bad envelope).
42
+ """
43
+ message = decode_json_rpc_message(text)
44
+ if message is not None:
45
+ return message
46
+ if "{" not in text:
47
+ return None
48
+ brace = text.index("{")
49
+ if brace: # brace == 0 would just repeat the whole-line decode
50
+ message = decode_json_rpc_message(text[brace:])
51
+ if message is not None:
52
+ return message
53
+ if "\x1b" not in text:
54
+ return None
55
+ cleaned = _ANSI_CSI_RE.sub("", _ANSI_OSC_RE.sub("", text))
56
+ if "{" not in cleaned:
57
+ return None
58
+ return decode_json_rpc_message(cleaned[cleaned.index("{") :])
59
+
60
+
15
61
  class ContainerTransport(Transport):
16
62
  """ACP transport that speaks to an agent running inside a sandbox.
17
63
 
@@ -34,6 +80,12 @@ class ContainerTransport(Transport):
34
80
  self._cwd = cwd
35
81
  self._agent_log_path = agent_log_path
36
82
  self._agent_log_file: TextIO | None = None
83
+ # First-message latch: the lenient PTY-noise decode applies only
84
+ # until the first successfully decoded protocol message (prompt glue
85
+ # is a startup phenomenon). Afterwards the strict whole-line decode
86
+ # rules, so an agent echoing valid protocol envelopes into its logs
87
+ # mid-session can never impersonate protocol traffic.
88
+ self._saw_protocol = False
37
89
 
38
90
  async def start(self) -> None:
39
91
  """Start the agent process inside the sandbox."""
@@ -65,8 +117,12 @@ class ContainerTransport(Transport):
65
117
  text = line.decode(errors="replace").strip()
66
118
  if not text:
67
119
  continue
68
- message = decode_json_rpc_message(text)
120
+ if self._saw_protocol:
121
+ message = decode_json_rpc_message(text)
122
+ else:
123
+ message = _decode_pty_json_rpc_message(text)
69
124
  if message is not None:
125
+ self._saw_protocol = True
70
126
  return message
71
127
  # Capture non-protocol output (agent debug logs, errors, warnings).
72
128
  if self._agent_log_path:
@@ -6,10 +6,11 @@ Owns the live agent-side of a run:
6
6
  - execute_prompts: send each prompt through the session, capture the
7
7
  ACP-native trajectory, and report tool-call counts
8
8
 
9
- The one allowed horizontal phase import in this refactor lives here:
10
- ``from benchflow.sandbox.lockdown import build_priv_drop_cmd``. connect_acp wraps
11
- the agent launch command in the sandbox user's privilege-drop prefix
12
- before handing it to the transport. It is a single pure-function call
9
+ The allowed horizontal phase imports in this refactor live here:
10
+ ``from benchflow.sandbox.lockdown import build_priv_drop_cmd`` (connect_acp
11
+ wraps the agent launch command in the sandbox user's privilege-drop prefix
12
+ before handing it to the transport) and the shared timeout-env parser from
13
+ ``benchflow.sandbox.process._base``. Both are single pure-function calls
13
14
  with no shared state — not a coupling of concerns.
14
15
 
15
16
  Does not own:
@@ -46,6 +47,7 @@ from benchflow.sandbox.lockdown import (
46
47
  build_priv_drop_cmd,
47
48
  enforce_agent_egress_firewall,
48
49
  )
50
+ from benchflow.sandbox.process._base import _timeout_sec_from_env
49
51
  from benchflow.trajectories._capture import _capture_session_trajectory
50
52
 
51
53
  # Re-exported for backwards compatibility — tests and downstream code
@@ -65,10 +67,27 @@ logger = logging.getLogger(__name__)
65
67
  _ACP_CONNECT_MAX_RETRIES = 3
66
68
  _ACP_CONNECT_BASE_DELAY = 2.0
67
69
  _PROMPT_CANCEL_DRAIN_TIMEOUT_SEC = 0.25
68
- _ACP_HANDSHAKE_TIMEOUT_SEC = 60
70
+ _ACP_HANDSHAKE_TIMEOUT_ENV = "BENCHFLOW_ACP_HANDSHAKE_TIMEOUT"
71
+ _ACP_HANDSHAKE_TIMEOUT_DEFAULT_SEC = 60.0
69
72
  _OPENHANDS_DISABLE_SUBAGENTS_ENV = "BENCHFLOW_OPENHANDS_DISABLE_SUBAGENTS"
70
73
 
71
74
 
75
+ def _acp_handshake_timeout_sec() -> float:
76
+ """Effective timeout for the pre-prompt ACP handshake, in seconds.
77
+
78
+ Agent startup cost scales with the task image — heavyweight images
79
+ (workspace scanning, kernel prep) can push the ``initialize`` response
80
+ past the 60s default, so operators can override it with
81
+ ``BENCHFLOW_ACP_HANDSHAKE_TIMEOUT`` (seconds). Parsing (use-time read,
82
+ positive-float validation, warn-and-fall-back) is shared with the other
83
+ transport timeout knobs in :mod:`benchflow.sandbox.process._base`.
84
+ """
85
+ return _timeout_sec_from_env(
86
+ _ACP_HANDSHAKE_TIMEOUT_ENV,
87
+ _ACP_HANDSHAKE_TIMEOUT_DEFAULT_SEC,
88
+ )
89
+
90
+
72
91
  async def _prepare_openhands_direct_execution(
73
92
  env,
74
93
  *,
@@ -129,13 +148,11 @@ async def _prepare_openhands_direct_execution(
129
148
 
130
149
 
131
150
  async def _wait_for_acp_handshake(awaitable, *, phase: str):
151
+ timeout_sec = _acp_handshake_timeout_sec()
132
152
  try:
133
- return await asyncio.wait_for(awaitable, timeout=_ACP_HANDSHAKE_TIMEOUT_SEC)
153
+ return await asyncio.wait_for(awaitable, timeout=timeout_sec)
134
154
  except TimeoutError as e:
135
- msg = (
136
- f"ACP {phase} timed out after {_ACP_HANDSHAKE_TIMEOUT_SEC}s "
137
- "before the first prompt"
138
- )
155
+ msg = f"ACP {phase} timed out after {timeout_sec:g}s before the first prompt"
139
156
  raise TransportClosedError(
140
157
  msg,
141
158
  TransportClosedDiagnostic(
@@ -128,24 +128,49 @@ def _fmt_tokens(n: int) -> str:
128
128
  return str(n)
129
129
 
130
130
 
131
+ # Rollout lifecycle phase (Rollout._phase — the completed phase, except
132
+ # "verifying" which verify() marks at entry) -> what is running now. Shown
133
+ # while the session counters are unavailable — before the agent session
134
+ # exists and after it is torn down — so sandbox create, agent install, and
135
+ # the verifier read as work, not as a hang.
136
+ _PHASE_LABELS = {
137
+ "created": "creating sandbox…",
138
+ "setup": "creating sandbox…",
139
+ "started": "installing agent…",
140
+ "installed": "running agent…",
141
+ "connected": "running agent…",
142
+ "executed": "verifying…",
143
+ "verifying": "verifying…",
144
+ "verified": "cleaning up…",
145
+ "cleaned": "cleaning up…",
146
+ }
147
+ # Unknown phases (e.g. "branched") and pre-register/teardown races: still
148
+ # never blank — a blank cell on a live row reads as a hang.
149
+ _PHASE_FALLBACK = "starting…"
150
+
151
+
131
152
  def _activity_cell(name: str) -> str:
132
153
  """Per-task activity for the "running now" table, e.g.
133
154
  ``38 calls · last: file_editor``.
134
155
 
135
156
  Polls the live rollout's ACP session counters — the same ones the console
136
157
  heartbeat logs, which the Live display otherwise mutes — via the
137
- live-activity registry. Empty until the agent session exists. Tokens appear
138
- only once the session has a usage snapshot (i.e. after a completed prompt).
158
+ live-activity registry. Until the agent session exists (and after it is
159
+ closed for the verifier) the cell shows the rollout's lifecycle phase as a
160
+ label instead, so the row is never blank. Tokens appear only once the
161
+ session has a usage snapshot (i.e. after a completed prompt).
139
162
  """
140
163
  snap = live_activity.activity(name)
141
164
  if snap is None:
142
- return ""
143
- calls, last_title, tokens = snap
144
- cell = f"{calls} calls"
145
- if tokens:
146
- cell += f" · {_fmt_tokens(tokens)} tok"
147
- if last_title:
148
- cell += f" · last: {last_title[:30]}"
165
+ return _PHASE_FALLBACK
166
+ counters = snap.counters
167
+ if counters is None:
168
+ return _PHASE_LABELS.get(snap.phase, _PHASE_FALLBACK)
169
+ cell = f"{counters.tool_calls} calls"
170
+ if counters.total_tokens:
171
+ cell += f" · {_fmt_tokens(counters.total_tokens)} tok"
172
+ if counters.last_tool:
173
+ cell += f" · last: {counters.last_tool[:30]}"
149
174
  return cell
150
175
 
151
176
 
@@ -18,10 +18,12 @@ import typer
18
18
  from rich.console import Console
19
19
  from rich.markup import escape
20
20
 
21
+ from benchflow._utils.text import truncate_end
22
+
21
23
  if TYPE_CHECKING:
22
24
  from pathlib import Path
23
25
 
24
- from benchflow.evaluation import EvaluationResult
26
+ from benchflow.evaluation import EvaluationResult, TaskFailure
25
27
 
26
28
  console = Console()
27
29
 
@@ -100,14 +102,52 @@ def _exit_if_evaluation_had_errors(result: object) -> None:
100
102
  raise typer.Exit(1)
101
103
 
102
104
 
105
+ # Final-block failure lines: keep the block skimmable on big jobs and each
106
+ # line inside a typical terminal width.
107
+ _MAX_FAILURE_LINES = 5
108
+ _FAILURE_LINE_LIMIT = 100
109
+ _FAILURE_REASON_METRICS = 3
110
+
111
+
112
+ def _failure_reason(failure: TaskFailure) -> str:
113
+ """One cheap line explaining why a FAILED (scored, reward != 1) task
114
+ failed, from evidence already on the result — no file reads.
115
+
116
+ Priority: the verifier's own error if set; else the reward plus a compact
117
+ breakdown of the named metrics in the reward dict (zero/failed metrics
118
+ first — they explain the miss); else just the reward.
119
+ """
120
+ if failure.verifier_error:
121
+ # Collapse whitespace: verifier errors are routinely multi-line.
122
+ return " ".join(failure.verifier_error.split())
123
+ rewards = failure.rewards or {}
124
+ reward = rewards.get("reward")
125
+ metrics = [
126
+ (name, value)
127
+ for name, value in rewards.items()
128
+ if name != "reward" and isinstance(value, (bool, int, float))
129
+ ]
130
+ if not metrics:
131
+ return f"reward {reward}"
132
+ # Zero/failed metrics first (stable within each group), capped so one
133
+ # metric-happy verifier can't flood the line.
134
+ metrics.sort(key=lambda kv: kv[1] != 0)
135
+ shown = ", ".join(
136
+ f"{name} {value}" for name, value in metrics[:_FAILURE_REASON_METRICS]
137
+ )
138
+ return f"reward {reward} — {shown}"
139
+
140
+
103
141
  def _report_eval_result(result: EvaluationResult, job_dir: Path | None = None) -> None:
104
142
  """Print the Score/errors summary line, colored by outcome, plus artifacts.
105
143
 
106
144
  A clean pass and a total failure used to look identical (both bold white);
107
145
  now the line is green only on a full clean pass, red on a shutout, amber
108
- otherwise, and ``errors=N`` is red when non-zero. When ``job_dir`` is given,
109
- the result/summary paths are printed so testers know where to look (the
110
- guide repeatedly says "read summary.json" but the CLI never said where).
146
+ otherwise, and ``errors=N`` is red when non-zero. Each FAILED task gets one
147
+ dim ``✗ task: reason`` line (capped at ``_MAX_FAILURE_LINES``) so the "why"
148
+ doesn't require opening summary.json. When ``job_dir`` is given, the
149
+ result/summary paths are printed so testers know where to look (the guide
150
+ repeatedly says "read summary.json" but the CLI never said where).
111
151
  """
112
152
  errors = int(getattr(result, "errored", 0) or 0)
113
153
  verifier_errors = int(getattr(result, "verifier_errored", 0) or 0)
@@ -132,6 +172,19 @@ def _report_eval_result(result: EvaluationResult, job_dir: Path | None = None) -
132
172
  f"\n[{style}]{mark} Score: {result.passed}/{result.total} "
133
173
  f"({result.score:.1%})[/{style}]{err_part}"
134
174
  )
175
+ # One dim reason line per FAILED task, so "0/1" doesn't force a dig into
176
+ # summary.json to learn why. getattr(): sharded aggregation and older
177
+ # SimpleNamespace-style callers don't carry task_failures.
178
+ failures = getattr(result, "task_failures", None) or []
179
+ for failure in failures[:_MAX_FAILURE_LINES]:
180
+ line = truncate_end(
181
+ f" ✗ {failure.task_name}: {_failure_reason(failure)}",
182
+ _FAILURE_LINE_LIMIT,
183
+ )
184
+ console.print(f"[dim]{escape(line)}[/dim]")
185
+ extra = len(failures) - _MAX_FAILURE_LINES
186
+ if extra > 0:
187
+ console.print(f"[dim] … and {extra} more[/dim]")
135
188
  if job_dir is not None:
136
189
  console.print(f"[dim]Artifacts:[/dim] {escape(str(job_dir))}")
137
190
  console.print(f"[dim]Summary: [/dim] {escape(str(job_dir))}/summary.json")
@@ -389,8 +389,9 @@ def eval_run(
389
389
  typer.Option(
390
390
  "--quiet",
391
391
  help=(
392
- "Suppress the per-run console progress heartbeat (the "
393
- "'… Nmin, K tool calls' lines during agent execution)."
392
+ "Suppress live progress output: the Rich dashboard on a TTY "
393
+ "and the per-run console progress heartbeat (the '… Nmin, K "
394
+ "tool calls' lines during agent execution)."
394
395
  ),
395
396
  ),
396
397
  ] = False,
@@ -597,6 +598,9 @@ def eval_run(
597
598
  # Explicit off beats the session layer's auto-gate; see
598
599
  # benchflow.acp.session._console_progress_enabled.
599
600
  os.environ["BENCHFLOW_PROGRESS"] = "off"
601
+ # --quiet silences ALL live progress: the heartbeat lines above and
602
+ # the TTY Rich dashboard (see cli._live_progress.progress_enabled).
603
+ os.environ["BENCHFLOW_NO_PROGRESS"] = "1"
600
604
 
601
605
  request = EvalCreateRequest(
602
606
  config_file=config_file,
@@ -60,6 +60,7 @@ from benchflow._utils.scoring import (
60
60
  VERIFIER_TIMEOUT,
61
61
  api_error_is_transient,
62
62
  classify_error,
63
+ classify_score_outcome,
63
64
  classify_verifier_error,
64
65
  count_audit_outcomes,
65
66
  count_score_outcomes,
@@ -574,6 +575,21 @@ class EvaluationConfig:
574
575
  )
575
576
 
576
577
 
578
+ @dataclass(frozen=True)
579
+ class TaskFailure:
580
+ """Cheap failure evidence for one FAILED (scored, reward != 1) task.
581
+
582
+ Carried on :class:`EvaluationResult` so the CLI's final block can print a
583
+ one-line reason per failed task from data the engine already holds —
584
+ without re-reading result.json files. Errored tasks are excluded (they
585
+ already surface through the error counters and warning replay).
586
+ """
587
+
588
+ task_name: str
589
+ rewards: dict[str, Any] | None
590
+ verifier_error: str | None
591
+
592
+
577
593
  @dataclass
578
594
  class EvaluationResult:
579
595
  """Aggregated results for a job."""
@@ -588,6 +604,7 @@ class EvaluationResult:
588
604
  elapsed_sec: float = 0.0
589
605
  memory_score: float | None = None
590
606
  memory_scores: dict[str, float] = field(default_factory=dict)
607
+ task_failures: list[TaskFailure] = field(default_factory=list)
591
608
 
592
609
  @property
593
610
  def score(self) -> float:
@@ -1776,6 +1793,18 @@ class Evaluation:
1776
1793
  score_counts = count_score_outcomes(all_results.values())
1777
1794
  audit_counts = count_audit_outcomes(all_results.values())
1778
1795
  memory, memory_scores = memory_summary(all_results)
1796
+ # Per-task failure evidence for the CLI's final block — FAILED (scored,
1797
+ # reward != 1) tasks only, from data already in memory. Sorted by name
1798
+ # so the printed lines are deterministic across resume/concurrency.
1799
+ task_failures = [
1800
+ TaskFailure(
1801
+ task_name=name,
1802
+ rewards=r.get("rewards"),
1803
+ verifier_error=r.get("verifier_error"),
1804
+ )
1805
+ for name, r in sorted(all_results.items())
1806
+ if classify_score_outcome(r) == "failed"
1807
+ ]
1779
1808
  job_result = EvaluationResult(
1780
1809
  job_name=self._job_name,
1781
1810
  config=cfg,
@@ -1791,6 +1820,7 @@ class Evaluation:
1791
1820
  elapsed_sec=elapsed,
1792
1821
  memory_score=memory["avg_score"],
1793
1822
  memory_scores=memory_scores,
1823
+ task_failures=task_failures,
1794
1824
  )
1795
1825
 
1796
1826
  assert (
@@ -72,6 +72,7 @@ from benchflow._types import Role, Scene, Turn
72
72
  # / ``_capture_session_trajectory`` / ``default_rollout_planes`` keep affecting
73
73
  # the ``Rollout`` methods that call those names, because those methods stay
74
74
  # defined in this module.
75
+ from benchflow._utils.live_activity import ActivitySnapshot, SessionCounters
75
76
  from benchflow._utils.scoring import classify_error as classify_error
76
77
  from benchflow.acp.types import McpServerSpec
77
78
  from benchflow.agents.credentials import upload_credential
@@ -755,22 +756,26 @@ class Rollout:
755
756
  def acp_client(self) -> Any:
756
757
  return self._acp_client
757
758
 
758
- def activity_snapshot(self) -> tuple[int, str, int | None] | None:
759
- """(tool calls, last tool title, total tokens) for the eval
760
- dashboard's activity cell, or None before the agent session exists.
759
+ def activity_snapshot(self) -> ActivitySnapshot:
760
+ """The eval dashboard's per-task :class:`ActivitySnapshot`: the
761
+ current lifecycle phase plus the live :class:`SessionCounters` (tool
762
+ calls, last tool title, total tokens). ``counters`` is None before
763
+ the agent session exists — the phase then carries the cell
764
+ ("creating sandbox…", "verifying…"), so a 90s sandbox create is not
765
+ indistinguishable from a hang.
761
766
 
762
767
  Rollout owns the client/session dig so a rename breaks here — in
763
768
  typed, tested code — instead of silently blanking the dashboard cell
764
769
  (see benchflow._utils.live_activity). Session-factory agents have no
765
- ACP client and always return None.
770
+ ACP client and always report counter-less snapshots.
766
771
  """
767
772
  session = self._acp_client.session if self._acp_client else None
768
773
  if session is None:
769
- return None
774
+ return ActivitySnapshot(self._phase, None)
770
775
  calls, last_title = session.progress_snapshot()
771
776
  usage = session.latest_usage_totals()
772
777
  tokens = usage.get("total_tokens") if usage else None
773
- return calls, last_title, tokens
778
+ return ActivitySnapshot(self._phase, SessionCounters(calls, last_title, tokens))
774
779
 
775
780
  @property
776
781
  def trajectory(self) -> list[dict]:
@@ -1737,6 +1742,12 @@ class Rollout:
1737
1742
  """Run the verifier and return rewards."""
1738
1743
  cfg = self._config
1739
1744
 
1745
+ # Mark the phase at entry (the other transitions mark completion):
1746
+ # the verifier can run for minutes after disconnect() reset the phase
1747
+ # to "installed", and the dashboard's activity cell reads _phase to
1748
+ # label that stretch "verifying…" instead of going blank.
1749
+ self._phase = "verifying"
1750
+
1740
1751
  if not self._trajectory and cfg.primary_agent != "oracle":
1741
1752
  scraped = await _scrape_agent_trajectory(
1742
1753
  self._env, cfg.primary_agent, cfg.sandbox_user
@@ -23,6 +23,7 @@ from __future__ import annotations
23
23
  import asyncio
24
24
  import contextlib
25
25
  import logging
26
+ import os
26
27
  import re
27
28
  from abc import ABC, abstractmethod
28
29
 
@@ -33,6 +34,41 @@ _DIAG_TRUNCATE = 2000 # max chars for diagnostic stderr in error messages
33
34
  _BOOTSTRAP_DONE = "__BENCHFLOW_BOOTSTRAP_DONE__"
34
35
  _ENV_KEY_RE = re.compile(r"^[A-Za-z_][A-Za-z0-9_]*$")
35
36
 
37
+ # Terminal control sequences a PTY-backed transport can interleave with
38
+ # protocol output: ECMA-48 CSI (parameter bytes 0x30-0x3F, intermediate
39
+ # bytes 0x20-0x2F, one final byte 0x40-0x7E) and OSC (BEL- or ST-terminated,
40
+ # e.g. the ``\x1b]0;<title>\x07`` window-title update shell prompts emit).
41
+ # One canonical pair — the AgentCore stdout chunker and the ACP container
42
+ # transport must not drift apart on what counts as terminal noise.
43
+ _ANSI_CSI_PATTERN = r"\x1b\[[0-?]*[ -/]*[@-~]"
44
+ _ANSI_OSC_PATTERN = r"\x1b\][^\x07\x1b]*(?:\x07|\x1b\\)"
45
+ _ANSI_CSI_RE = re.compile(_ANSI_CSI_PATTERN)
46
+ _ANSI_OSC_RE = re.compile(_ANSI_OSC_PATTERN)
47
+ _ANSI_CSI_RE_BYTES = re.compile(_ANSI_CSI_PATTERN.encode())
48
+ _ANSI_OSC_RE_BYTES = re.compile(_ANSI_OSC_PATTERN.encode())
49
+
50
+
51
+ def _timeout_sec_from_env(env_var: str, default: float) -> float:
52
+ """Read a positive seconds value from *env_var*, else *default*.
53
+
54
+ The one parser for operator-tunable timeout knobs on this plane (PTY
55
+ readline timeouts, the ACP handshake window). Read at use time so
56
+ long-lived processes and tests see env changes. Unset or empty means
57
+ the default; non-numeric, non-positive, or NaN values warn and fall
58
+ back rather than disabling or breaking the guarded wait.
59
+ """
60
+ raw = os.environ.get(env_var)
61
+ if raw is None or not raw.strip():
62
+ return default
63
+ try:
64
+ value = float(raw)
65
+ except ValueError:
66
+ value = float("nan")
67
+ if not value > 0: # also rejects NaN
68
+ logger.warning("Invalid %s=%r; using default %.0fs", env_var, raw, default)
69
+ return default
70
+ return value
71
+
36
72
 
37
73
  async def drain_oversized_line(reader: asyncio.StreamReader) -> int:
38
74
  """Drain an oversized line from *reader* after a buffer overflow.
@@ -19,12 +19,17 @@ from __future__ import annotations
19
19
  import asyncio
20
20
  import contextlib
21
21
  import logging
22
- import re
23
22
  import shlex
24
23
  import uuid
25
24
  from typing import Any
26
25
 
27
- from benchflow.sandbox.process._base import _ENV_KEY_RE, LiveProcess
26
+ from benchflow.sandbox.process._base import (
27
+ _ANSI_CSI_RE_BYTES,
28
+ _ANSI_OSC_RE_BYTES,
29
+ _ENV_KEY_RE,
30
+ LiveProcess,
31
+ _timeout_sec_from_env,
32
+ )
28
33
 
29
34
  logger = logging.getLogger(__name__)
30
35
 
@@ -38,26 +43,10 @@ _READER_ENDED = object()
38
43
  _START_MARKER_TIMEOUT_SEC = 180
39
44
  _READLINE_TIMEOUT_ENV = "BENCHFLOW_AGENTCORE_READLINE_TIMEOUT"
40
45
  _READLINE_TIMEOUT_DEFAULT_SEC = 900.0
41
- _ANSI_CSI_RE = re.compile(rb"\x1b\[[0-?]*[ -/]*[@-~]")
42
46
 
43
47
 
44
48
  def _readline_timeout_sec() -> float:
45
- import os
46
-
47
- value = os.environ.get(_READLINE_TIMEOUT_ENV)
48
- if value is None:
49
- return _READLINE_TIMEOUT_DEFAULT_SEC
50
- try:
51
- timeout = float(value)
52
- except ValueError:
53
- logger.warning(
54
- "Invalid %s=%r; using default %.0fs",
55
- _READLINE_TIMEOUT_ENV,
56
- value,
57
- _READLINE_TIMEOUT_DEFAULT_SEC,
58
- )
59
- return _READLINE_TIMEOUT_DEFAULT_SEC
60
- return timeout if timeout > 0 else _READLINE_TIMEOUT_DEFAULT_SEC
49
+ return _timeout_sec_from_env(_READLINE_TIMEOUT_ENV, _READLINE_TIMEOUT_DEFAULT_SEC)
61
50
 
62
51
 
63
52
  class AgentCoreProcess(LiveProcess):
@@ -119,9 +108,12 @@ class AgentCoreProcess(LiveProcess):
119
108
  line, self._partial = self._partial.split(b"\n", 1)
120
109
  # Bash/readline emits bracketed-paste CSI sequences when a
121
110
  # command takes over the PTY, including a standalone
122
- # ``ESC[?2004l`` *after* the startup marker. Those bytes
123
- # are terminal state, never ACP JSON-RPC.
124
- line = _ANSI_CSI_RE.sub(b"", line.replace(b"\r", b""))
111
+ # ``ESC[?2004l`` *after* the startup marker, and shell
112
+ # prompts emit OSC window-title updates. Those bytes are
113
+ # terminal state, never ACP JSON-RPC.
114
+ line = line.replace(b"\r", b"")
115
+ line = _ANSI_OSC_RE_BYTES.sub(b"", line)
116
+ line = _ANSI_CSI_RE_BYTES.sub(b"", line)
125
117
  if line:
126
118
  await self._line_buffer.put(line + b"\n")
127
119
  except asyncio.CancelledError:
@@ -308,8 +300,10 @@ class AgentCoreProcess(LiveProcess):
308
300
  # before echo suppression takes effect. Substring matching accepts
309
301
  # that echoed command and releases startup too early, putting the
310
302
  # prompt/command noise into ACP's JSON-RPC stream. The real marker
311
- # is its own line, possibly wrapped in bracketed-paste ANSI codes.
312
- text = _ANSI_CSI_RE.sub(b"", line).decode(errors="replace").strip()
303
+ # is its own line, possibly wrapped in bracketed-paste ANSI codes
304
+ # or an OSC window-title update from the shell prompt.
305
+ cleaned = _ANSI_CSI_RE_BYTES.sub(b"", _ANSI_OSC_RE_BYTES.sub(b"", line))
306
+ text = cleaned.decode(errors="replace").strip()
313
307
  if text == marker:
314
308
  return
315
309