benchflow 0.6.7.dev1829__tar.gz → 0.6.7.dev1833__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 (702) hide show
  1. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/PKG-INFO +1 -1
  2. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/pyproject.toml +1 -1
  3. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/_utils/evaluation_results.py +1 -0
  4. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/acp/container_transport.py +57 -1
  5. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/acp/runtime.py +27 -10
  6. benchflow-0.6.7.dev1833/src/benchflow/cli/_failure_evidence.py +122 -0
  7. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/cli/_shared.py +47 -18
  8. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/evaluation.py +7 -0
  9. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/sandbox/process/_base.py +36 -0
  10. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/sandbox/process/agentcore.py +18 -24
  11. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/sandbox/process/daytona.py +5 -16
  12. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_acp.py +175 -0
  13. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_cli_live_progress.py +206 -2
  14. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_job.py +4 -0
  15. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/.gitignore +0 -0
  16. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/CHANGELOG.md +0 -0
  17. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/LICENSE +0 -0
  18. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/README.md +0 -0
  19. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/__init__.py +0 -0
  20. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/_dotenv.py +0 -0
  21. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/_paths.py +0 -0
  22. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/_run.py +0 -0
  23. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/_types.py +0 -0
  24. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/_utils/__init__.py +0 -0
  25. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/_utils/benchmark_repos.py +0 -0
  26. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/_utils/build_context_stage.py +0 -0
  27. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/_utils/config.py +0 -0
  28. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/_utils/config_override.py +0 -0
  29. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/_utils/content_address.py +0 -0
  30. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/_utils/dataset_registry.py +0 -0
  31. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/_utils/env_registry.py +0 -0
  32. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/_utils/hf_datasets.py +0 -0
  33. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/_utils/json_safe.py +0 -0
  34. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/_utils/learner_memory.py +0 -0
  35. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/_utils/live_activity.py +0 -0
  36. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/_utils/result_metadata.py +0 -0
  37. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/_utils/reward_events.py +0 -0
  38. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/_utils/scoring.py +0 -0
  39. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/_utils/source_provenance.py +0 -0
  40. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/_utils/task_authoring/__init__.py +0 -0
  41. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/_utils/task_authoring/_evidence_paths.py +0 -0
  42. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/_utils/task_authoring/acceptance_evidence.py +0 -0
  43. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/_utils/task_authoring/scaffolding.py +0 -0
  44. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/_utils/task_authoring/structural_checks.py +0 -0
  45. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/_utils/text.py +0 -0
  46. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/_utils/yaml_loader.py +0 -0
  47. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/acp/__init__.py +0 -0
  48. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/acp/client.py +0 -0
  49. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/acp/selection.py +0 -0
  50. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/acp/session.py +0 -0
  51. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/acp/transport.py +0 -0
  52. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/acp/types.py +0 -0
  53. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/adapters/__init__.py +0 -0
  54. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/adapters/_toolathlon.py +0 -0
  55. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/adapters/_toolathlon_container.py +0 -0
  56. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/adapters/_toolathlon_fake_mail.py +0 -0
  57. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/adapters/_toolathlon_poste_users.tsv +0 -0
  58. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/adapters/_toolathlon_services.py +0 -0
  59. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/adapters/harbor.py +0 -0
  60. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/adapters/inbound.py +0 -0
  61. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/adapters/inspect_ai.py +0 -0
  62. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/adapters/ors.py +0 -0
  63. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/adapters/resources/__init__.py +0 -0
  64. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/adapters/resources/mcp_atlas_bridge.py +0 -0
  65. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/adapters/resources/mcp_atlas_judge.py +0 -0
  66. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/adapters/source.py +0 -0
  67. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/agent_router.py +0 -0
  68. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/agent_router_guide.py +0 -0
  69. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/agent_router_parity.py +0 -0
  70. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/agent_router_scaffold.py +0 -0
  71. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/agents/__init__.py +0 -0
  72. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/agents/codex_config.py +0 -0
  73. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/agents/credentials.py +0 -0
  74. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/agents/deepagents_acp_shim.py +0 -0
  75. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/agents/env.py +0 -0
  76. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/agents/errors.py +0 -0
  77. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/agents/harvey_lab_acp_shim.py +0 -0
  78. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/agents/install.py +0 -0
  79. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/agents/manifest.py +0 -0
  80. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/agents/openclaw_acp_shim.py +0 -0
  81. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/agents/pi_acp_launcher.py +0 -0
  82. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/agents/protocol.py +0 -0
  83. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/agents/providers.py +0 -0
  84. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/agents/registry.py +0 -0
  85. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/agents/remote_manifests.py +0 -0
  86. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/branch.py +0 -0
  87. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/cli/__init__.py +0 -0
  88. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/cli/_hosted_env.py +0 -0
  89. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/cli/_live_progress.py +0 -0
  90. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/cli/_options.py +0 -0
  91. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/cli/adopt.py +0 -0
  92. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/cli/agent.py +0 -0
  93. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/cli/continue_cmd.py +0 -0
  94. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/cli/environment.py +0 -0
  95. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/cli/eval_artifacts.py +0 -0
  96. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/cli/eval_lift.py +0 -0
  97. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/cli/hub.py +0 -0
  98. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/cli/main.py +0 -0
  99. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/cli/monitor.py +0 -0
  100. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/cli/review.py +0 -0
  101. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/cli/sandbox.py +0 -0
  102. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/cli/skills.py +0 -0
  103. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/cli/tasks.py +0 -0
  104. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/cli/trace_import.py +0 -0
  105. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/cli/train.py +0 -0
  106. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/continue_run/__init__.py +0 -0
  107. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/continue_run/batch.py +0 -0
  108. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/continue_run/orchestrator.py +0 -0
  109. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/continue_run/replay_proxy.py +0 -0
  110. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/continue_run/run_folder.py +0 -0
  111. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/continue_run/sandbox_proxy.py +0 -0
  112. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/contracts/__init__.py +0 -0
  113. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/contracts/planes.py +0 -0
  114. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/contracts/user.py +0 -0
  115. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/demo_task/environment/Dockerfile +0 -0
  116. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/demo_task/instruction.md +0 -0
  117. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/demo_task/task.md +0 -0
  118. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/demo_task/task.toml +0 -0
  119. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/demo_task/tests/test.sh +0 -0
  120. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/diagnostics.py +0 -0
  121. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/environment/__init__.py +0 -0
  122. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/environment/manifest.py +0 -0
  123. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/environment/manifest_env.py +0 -0
  124. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/environment/protocol.py +0 -0
  125. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/environment/readiness.py +0 -0
  126. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/eval_artifacts.py +0 -0
  127. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/eval_lift.py +0 -0
  128. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/eval_plan.py +0 -0
  129. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/eval_sharding.py +0 -0
  130. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/eval_worker.py +0 -0
  131. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/experimental/__init__.py +0 -0
  132. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/experimental/mcp/__init__.py +0 -0
  133. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/experimental/mcp/hooks.py +0 -0
  134. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/experimental/mcp/reviewer_server.py +0 -0
  135. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/hosted_env.py +0 -0
  136. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/hub/__init__.py +0 -0
  137. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/hub/harbor_registry.py +0 -0
  138. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/integrations/__init__.py +0 -0
  139. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/integrations/trl/__init__.py +0 -0
  140. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/integrations/trl/spec.py +0 -0
  141. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/learner_skills.py +0 -0
  142. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/learner_store.py +0 -0
  143. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/loop_strategies.py +0 -0
  144. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/loop_sweep.py +0 -0
  145. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/metrics.py +0 -0
  146. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/models.py +0 -0
  147. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/monitor.py +0 -0
  148. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/providers/__init__.py +0 -0
  149. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/providers/litellm_bedrock_patch.py +0 -0
  150. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/providers/litellm_bedrock_preflight.py +0 -0
  151. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/providers/litellm_config.py +0 -0
  152. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/providers/litellm_logging.py +0 -0
  153. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/providers/litellm_runtime.py +0 -0
  154. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/providers/runtime.py +0 -0
  155. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/publish/__init__.py +0 -0
  156. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/publish/huggingface.py +0 -0
  157. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/py.typed +0 -0
  158. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/review/__init__.py +0 -0
  159. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/review/config.py +0 -0
  160. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/review/default-rubric.json +0 -0
  161. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/review/prompts.py +0 -0
  162. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/review/runner.py +0 -0
  163. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/review/wrapper.py +0 -0
  164. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/rewards/README.md +0 -0
  165. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/rewards/__init__.py +0 -0
  166. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/rewards/builtins.py +0 -0
  167. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/rewards/events.py +0 -0
  168. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/rewards/file_readers.py +0 -0
  169. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/rewards/llm.py +0 -0
  170. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/rewards/memory_scorer.py +0 -0
  171. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/rewards/node.py +0 -0
  172. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/rewards/protocol.py +0 -0
  173. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/rewards/rubric.py +0 -0
  174. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/rewards/rubric_config.py +0 -0
  175. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/rewards/validation.py +0 -0
  176. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/rollout/__init__.py +0 -0
  177. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/rollout/_config.py +0 -0
  178. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/rollout/_deadline.py +0 -0
  179. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/rollout/_results.py +0 -0
  180. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/rollout/_setup.py +0 -0
  181. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/rollout/_skills.py +0 -0
  182. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/rollout/_usage.py +0 -0
  183. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/rollout/_user_loop.py +0 -0
  184. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/rollout/session_factory_runtime.py +0 -0
  185. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/rollout/task_runtime.py +0 -0
  186. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/rollout_branch.py +0 -0
  187. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/rollout_planes.py +0 -0
  188. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/runtime.py +0 -0
  189. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/sandbox/__init__.py +0 -0
  190. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/sandbox/_base.py +0 -0
  191. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/sandbox/_cache_reclaim.py +0 -0
  192. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/sandbox/_compose.py +0 -0
  193. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/sandbox/_compose_files/docker-compose-base.yaml +0 -0
  194. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/sandbox/_compose_files/docker-compose-build.yaml +0 -0
  195. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/sandbox/_compose_files/docker-compose-no-network.yaml +0 -0
  196. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/sandbox/_compose_files/docker-compose-prebuilt.yaml +0 -0
  197. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/sandbox/_sdk_ops.py +0 -0
  198. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/sandbox/agentcore.py +0 -0
  199. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/sandbox/agentcore_builder.py +0 -0
  200. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/sandbox/agentcore_image.py +0 -0
  201. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/sandbox/agentcore_provisioning.py +0 -0
  202. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/sandbox/agentcore_reaper.py +0 -0
  203. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/sandbox/agentcore_sealed.py +0 -0
  204. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/sandbox/apple_container.py +0 -0
  205. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/sandbox/daytona.py +0 -0
  206. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/sandbox/daytona_dind.py +0 -0
  207. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/sandbox/daytona_pty.py +0 -0
  208. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/sandbox/daytona_reaper.py +0 -0
  209. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/sandbox/daytona_strategies.py +0 -0
  210. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/sandbox/docker.py +0 -0
  211. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/sandbox/lockdown.py +0 -0
  212. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/sandbox/metadata.py +0 -0
  213. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/sandbox/modal_impl.py +0 -0
  214. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/sandbox/process/__init__.py +0 -0
  215. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/sandbox/process/apple.py +0 -0
  216. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/sandbox/process/docker.py +0 -0
  217. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/sandbox/protocol.py +0 -0
  218. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/sandbox/providers.py +0 -0
  219. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/sandbox/services.py +0 -0
  220. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/sandbox/setup.py +0 -0
  221. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/sandbox/snapshot.py +0 -0
  222. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/sandbox/user.py +0 -0
  223. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/scenes.py +0 -0
  224. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/sdk.py +0 -0
  225. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/self_gen.py +0 -0
  226. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/skill_eval/__init__.py +0 -0
  227. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/skill_eval/_core.py +0 -0
  228. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/skill_eval/gepa_export.py +0 -0
  229. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/skill_eval/schema.py +0 -0
  230. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/skill_policy.py +0 -0
  231. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/skills.py +0 -0
  232. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/task/__init__.py +0 -0
  233. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/task/_document_evidence.py +0 -0
  234. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/task/_document_normalize.py +0 -0
  235. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/task/_document_parse.py +0 -0
  236. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/task/_document_profiles.py +0 -0
  237. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/task/acceptance_live.py +0 -0
  238. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/task/acceptance_live_model.py +0 -0
  239. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/task/acceptance_live_report.py +0 -0
  240. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/task/acceptance_live_validation.py +0 -0
  241. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/task/config.py +0 -0
  242. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/task/discovery.py +0 -0
  243. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/task/document.py +0 -0
  244. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/task/env.py +0 -0
  245. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/task/export.py +0 -0
  246. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/task/imports.py +0 -0
  247. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/task/output_format.py +0 -0
  248. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/task/package.py +0 -0
  249. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/task/paths.py +0 -0
  250. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/task/prompts.py +0 -0
  251. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/task/runtime_capabilities.py +0 -0
  252. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/task/runtime_view.py +0 -0
  253. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/task/task.py +0 -0
  254. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/task/verifier.py +0 -0
  255. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/task/verifier_core.py +0 -0
  256. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/task/verifier_document.py +0 -0
  257. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/task/verifier_errors.py +0 -0
  258. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/task/verifier_judge_inputs.py +0 -0
  259. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/task/verifier_ors_episode.py +0 -0
  260. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/task/verifier_reward_kit.py +0 -0
  261. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/task/verifier_scan.py +0 -0
  262. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/task/verifier_script_strategy.py +0 -0
  263. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/templates/__init__.py +0 -0
  264. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/templates/judge.py.tmpl +0 -0
  265. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/templates/test.sh.tmpl +0 -0
  266. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/traces/__init__.py +0 -0
  267. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/traces/huggingface.py +0 -0
  268. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/traces/local.py +0 -0
  269. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/traces/models.py +0 -0
  270. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/traces/parsers.py +0 -0
  271. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/traces/task_gen.py +0 -0
  272. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/training/__init__.py +0 -0
  273. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/training/backends/__init__.py +0 -0
  274. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/training/backends/prime_rl.py +0 -0
  275. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/training/run_manifest.py +0 -0
  276. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/trajectories/__init__.py +0 -0
  277. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/trajectories/_capture.py +0 -0
  278. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/trajectories/_export_common.py +0 -0
  279. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/trajectories/_llm_capture.py +0 -0
  280. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/trajectories/call_purpose.py +0 -0
  281. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/trajectories/export.py +0 -0
  282. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/trajectories/export_adp.py +0 -0
  283. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/trajectories/export_atif.py +0 -0
  284. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/trajectories/export_prime_sft.py +0 -0
  285. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/trajectories/export_trl_sft.py +0 -0
  286. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/trajectories/metrics.py +0 -0
  287. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/trajectories/results.py +0 -0
  288. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/trajectories/tree.py +0 -0
  289. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/trajectories/trl_sft_tokenization.py +0 -0
  290. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/trajectories/types.py +0 -0
  291. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/trajectories/viewer.py +0 -0
  292. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/usage_tracking.py +0 -0
  293. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/__init__.py +0 -0
  294. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/acceptance_live_harness.py +0 -0
  295. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/agents/__init__.py +0 -0
  296. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/agents/test_manifest_dirscan.py +0 -0
  297. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/agents/test_manifest_loader.py +0 -0
  298. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/agents/test_manifest_parity.py +0 -0
  299. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/agents/test_manifest_wiring.py +0 -0
  300. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/agents/test_namespace_shorthand.py +0 -0
  301. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/agents/test_plugin_entry_points.py +0 -0
  302. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/agents/test_protocol.py +0 -0
  303. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/agents/test_remote_manifest_autoload.py +0 -0
  304. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/conformance/README.md +0 -0
  305. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/conformance/acp_smoke/environment/Dockerfile +0 -0
  306. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/conformance/acp_smoke/environment/docker-compose.yaml +0 -0
  307. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/conformance/acp_smoke/environment/skills/conformance-writer/SKILL.md +0 -0
  308. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/conformance/acp_smoke/instruction.md +0 -0
  309. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/conformance/acp_smoke/solution/solve.sh +0 -0
  310. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/conformance/acp_smoke/task.md +0 -0
  311. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/conformance/acp_smoke/task.toml +0 -0
  312. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/conformance/acp_smoke/tests/test.sh +0 -0
  313. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/conformance/conformance-results.json +0 -0
  314. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/conformance/proof_multi_agent.py +0 -0
  315. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/conformance/proof_snapshot.py +0 -0
  316. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/conformance/run_conformance.py +0 -0
  317. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/conformance/self_gen_smoke_skills/skill-creator/SKILL.md +0 -0
  318. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/conftest.py +0 -0
  319. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/continue_run/__init__.py +0 -0
  320. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/continue_run/_helpers.py +0 -0
  321. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/continue_run/test_batch.py +0 -0
  322. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/continue_run/test_orchestrator.py +0 -0
  323. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/continue_run/test_replay_proxy.py +0 -0
  324. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/continue_run/test_run_folder.py +0 -0
  325. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/environment/__init__.py +0 -0
  326. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/environment/test_chibench_manifest.py +0 -0
  327. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/environment/test_clawsbench_manifest.py +0 -0
  328. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/environment/test_manifest.py +0 -0
  329. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/environment/test_manifest_env.py +0 -0
  330. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/environment/test_protocol.py +0 -0
  331. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/environment/test_readiness.py +0 -0
  332. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/examples/hello-world-task/environment/Dockerfile +0 -0
  333. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/examples/hello-world-task/instruction.md +0 -0
  334. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/examples/hello-world-task/solution/solve.sh +0 -0
  335. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/examples/hello-world-task/task.md +0 -0
  336. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/examples/hello-world-task/task.toml +0 -0
  337. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/examples/hello-world-task/tests/test.sh +0 -0
  338. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/examples/test_claude.sh +0 -0
  339. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/examples/test_codex.sh +0 -0
  340. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/examples/test_codex_custom_provider.sh +0 -0
  341. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/examples/test_gemini.sh +0 -0
  342. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/examples/test_openclaw.sh +0 -0
  343. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/examples/traces/minimal-claude.jsonl +0 -0
  344. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/examples/traces/minimal-opentraces.jsonl +0 -0
  345. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/digest/README.md +0 -0
  346. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/digest/alpha-task/environment/Dockerfile +0 -0
  347. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/digest/alpha-task/instruction.md +0 -0
  348. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/digest/alpha-task/task.toml +0 -0
  349. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/digest/alpha-task/tests/test.sh +0 -0
  350. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/digest/beta-task/data/empty.bin +0 -0
  351. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/digest/beta-task/data/unicode.txt +0 -0
  352. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/digest/beta-task/instruction.md +0 -0
  353. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/digest/beta-task/task.toml +0 -0
  354. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/digest/not-a-task/notes.txt +0 -0
  355. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/mock_acp_agent.py +0 -0
  356. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/mock_acp_agent_interleaved.py +0 -0
  357. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/mock_acp_agent_multi_turn.py +0 -0
  358. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/mock_openai_responses_server.py +0 -0
  359. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/Dockerfile +0 -0
  360. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/data/michigan_stations.txt +0 -0
  361. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/flood-detection/SKILL.md +0 -0
  362. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/nws-flood-thresholds/SKILL.md +0 -0
  363. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/usgs-data-download/SKILL.md +0 -0
  364. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/flood-risk-analysis/instruction.md +0 -0
  365. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/flood-risk-analysis/solution/solve.sh +0 -0
  366. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/flood-risk-analysis/task.toml +0 -0
  367. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/flood-risk-analysis/tests/test.sh +0 -0
  368. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/flood-risk-analysis/tests/test_outputs.py +0 -0
  369. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/Dockerfile +0 -0
  370. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/climate.csv +0 -0
  371. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/hydrology.csv +0 -0
  372. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/land_cover.csv +0 -0
  373. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/water_temperature.csv +0 -0
  374. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/contribution-analysis/SKILL.md +0 -0
  375. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/meteorology-driver-classification/SKILL.md +0 -0
  376. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/pca-decomposition/SKILL.md +0 -0
  377. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/trend-analysis/SKILL.md +0 -0
  378. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/lake-warming-attribution/instruction.md +0 -0
  379. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/lake-warming-attribution/solution/solve.sh +0 -0
  380. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/lake-warming-attribution/task.toml +0 -0
  381. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/lake-warming-attribution/tests/test.sh +0 -0
  382. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/lake-warming-attribution/tests/test_outputs.py +0 -0
  383. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/manifest.json +0 -0
  384. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/Dockerfile +0 -0
  385. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/r2r_simulator.py +0 -0
  386. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/finite-horizon-lqr/SKILL.md +0 -0
  387. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/integral-action-design/SKILL.md +0 -0
  388. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/mpc-horizon-tuning/SKILL.md +0 -0
  389. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/state-space-linearization/SKILL.md +0 -0
  390. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/system_config.json +0 -0
  391. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/r2r-mpc-control/instruction.md +0 -0
  392. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/r2r-mpc-control/solution/solve.sh +0 -0
  393. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/r2r-mpc-control/task.toml +0 -0
  394. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/r2r-mpc-control/tests/test.sh +0 -0
  395. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/r2r-mpc-control/tests/test_outputs.py +0 -0
  396. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/Dockerfile +0 -0
  397. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/generate_training_pcaps.py +0 -0
  398. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/local.rules +0 -0
  399. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/pcap-triage-tshark/SKILL.md +0 -0
  400. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/pcap-triage-tshark/scripts/summarize_http_requests.sh +0 -0
  401. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-offline-evejson/SKILL.md +0 -0
  402. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-offline-evejson/scripts/run_suricata_offline.sh +0 -0
  403. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-rules-basics/SKILL.md +0 -0
  404. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/suricata.yaml +0 -0
  405. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/instruction.md +0 -0
  406. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/solution/solve.sh +0 -0
  407. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/task.toml +0 -0
  408. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/tests/test.sh +0 -0
  409. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/tests/test_outputs.py +0 -0
  410. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/Dockerfile +0 -0
  411. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syz-extract-constants/SKILL.md +0 -0
  412. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syzkaller-build-loop/SKILL.md +0 -0
  413. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syzlang-ioctl-basics/SKILL.md +0 -0
  414. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/instruction.md +0 -0
  415. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/solution/solve.sh +0 -0
  416. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/task.toml +0 -0
  417. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/tests/test.sh +0 -0
  418. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/tests/test_outputs.py +0 -0
  419. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/integration/_consistency.py +0 -0
  420. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/integration/agent_judge.py +0 -0
  421. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/integration/check_adapter_evidence.py +0 -0
  422. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/integration/check_hosted_env_evidence.py +0 -0
  423. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/integration/check_results.py +0 -0
  424. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/integration/check_skillsbench_harbor_parity.py +0 -0
  425. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/integration/check_trace_to_task_evidence.py +0 -0
  426. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/integration/configs/claude-agent-acp.yaml +0 -0
  427. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/integration/configs/codex-acp.yaml +0 -0
  428. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/integration/configs/gemini.yaml +0 -0
  429. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/integration/configs/harvey-lab-harness.yaml +0 -0
  430. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/integration/configs/mimo.yaml +0 -0
  431. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/integration/configs/openclaw.yaml +0 -0
  432. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/integration/configs/opencode.yaml +0 -0
  433. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/integration/configs/openhands.yaml +0 -0
  434. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/integration/configs/pi-acp.yaml +0 -0
  435. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/integration/deepagents_harness.py +0 -0
  436. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/integration/rubric_checks.py +0 -0
  437. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/integration/run.sh +0 -0
  438. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/integration/run_suite.py +0 -0
  439. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/integration/scenarios.py +0 -0
  440. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/integration/suites/release.yaml +0 -0
  441. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_acceptance_evidence.py +0 -0
  442. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_acceptance_live.py +0 -0
  443. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_acceptance_live_execution.py +0 -0
  444. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_acp_capability_advertising.py +0 -0
  445. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_acp_mcp_servers.py +0 -0
  446. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_acp_model_config_dispatch.py +0 -0
  447. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_acp_pinned_protocol_guard.py +0 -0
  448. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_acp_setup_failure_propagation.py +0 -0
  449. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_adapter_scripts.py +0 -0
  450. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_adapters.py +0 -0
  451. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_agent_cli.py +0 -0
  452. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_agent_env_resolution.py +0 -0
  453. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_agent_gemini_defaults.py +0 -0
  454. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_agent_idle_timeout_cli.py +0 -0
  455. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_agent_model_decouple.py +0 -0
  456. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_agent_registry.py +0 -0
  457. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_agent_router.py +0 -0
  458. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_agent_router_cli_e2e.py +0 -0
  459. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_agent_router_scaffold.py +0 -0
  460. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_agent_setup.py +0 -0
  461. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_agent_spec.py +0 -0
  462. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_agentcore_builder.py +0 -0
  463. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_agentcore_parallel.py +0 -0
  464. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_agentcore_reaper.py +0 -0
  465. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_agentcore_sandbox.py +0 -0
  466. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_agentcore_transport.py +0 -0
  467. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_api_error_capture.py +0 -0
  468. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_apple_container_sandbox.py +0 -0
  469. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_bare_model_provider.py +0 -0
  470. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_base_install_imports.py +0 -0
  471. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_bedrock_thinking.py +0 -0
  472. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_benchflow_experiment_review_validator.py +0 -0
  473. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_benchmark_repos_resolve_repo_path.py +0 -0
  474. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_branch.py +0 -0
  475. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_build_context_stage.py +0 -0
  476. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_build_review_pack.py +0 -0
  477. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_capture_trajectory.py +0 -0
  478. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_check_skillsbench_harbor_parity.py +0 -0
  479. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_clawsbench_slice.py +0 -0
  480. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_cli_adopt_aliases.py +0 -0
  481. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_cli_arg_validation.py +0 -0
  482. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_cli_daytona.py +0 -0
  483. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_cli_docs_drift.py +0 -0
  484. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_cli_edge_case_hardening.py +0 -0
  485. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_cli_hub_env.py +0 -0
  486. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_cli_misc.py +0 -0
  487. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_codex_review.py +0 -0
  488. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_codex_self_write_auth.py +0 -0
  489. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_config_override.py +0 -0
  490. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_config_redaction.py +0 -0
  491. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_connect_as_env.py +0 -0
  492. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_console_error_truncation.py +0 -0
  493. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_console_progress.py +0 -0
  494. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_continuallearningbench_adapter.py +0 -0
  495. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_dataset_registry.py +0 -0
  496. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_daytona_command_polling.py +0 -0
  497. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_daytona_dind_compose_up.py +0 -0
  498. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_daytona_download.py +0 -0
  499. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_daytona_litellm_runtime.py +0 -0
  500. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_daytona_poll_deadline.py +0 -0
  501. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_daytona_reap.py +0 -0
  502. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_deepagents_agent.py +0 -0
  503. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_docker_prune_scoping.py +0 -0
  504. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_docker_uploads.py +0 -0
  505. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_docs_examples.py +0 -0
  506. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_eng50_capabilities.py +0 -0
  507. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_env_registry.py +0 -0
  508. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_env_setup.py +0 -0
  509. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_environment_manifest_controls.py +0 -0
  510. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_eval_artifact_cli.py +0 -0
  511. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_eval_filters_applied.py +0 -0
  512. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_eval_lift.py +0 -0
  513. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_eval_sharding.py +0 -0
  514. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_eval_single_task_summary.py +0 -0
  515. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_eval_source_provenance.py +0 -0
  516. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_eval_worker_retry.py +0 -0
  517. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_eval_zero_task_guard.py +0 -0
  518. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_evaluation_environment_manifest.py +0 -0
  519. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_exclude_tasks.py +0 -0
  520. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_filter_credentialed_cells.py +0 -0
  521. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_harvey_lab_shim.py +0 -0
  522. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_hilbench_adapter.py +0 -0
  523. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_hosted_env.py +0 -0
  524. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_hosted_env_rollout_contract.py +0 -0
  525. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_hub_harbor_registry.py +0 -0
  526. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_inbound_adapter_manifest.py +0 -0
  527. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_inbound_adapters.py +0 -0
  528. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_integration_agent_judge.py +0 -0
  529. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_integration_check_results.py +0 -0
  530. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_integration_consistency.py +0 -0
  531. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_integration_matrix.py +0 -0
  532. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_integration_provider_selection.py +0 -0
  533. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_integration_run_suite.py +0 -0
  534. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_integration_suite.py +0 -0
  535. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_internet_policy.py +0 -0
  536. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_job_sequential_shared.py +0 -0
  537. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_job_sequential_shared_resume.py +0 -0
  538. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_judge_robustness.py +0 -0
  539. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_judge_symlink_ingestion.py +0 -0
  540. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_learner_skills.py +0 -0
  541. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_learner_skills_traversal.py +0 -0
  542. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_learner_store.py +0 -0
  543. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_learner_store_persistence.py +0 -0
  544. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_litellm_config.py +0 -0
  545. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_litellm_hardening.py +0 -0
  546. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_litellm_logging.py +0 -0
  547. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_litellm_model_via_env_generic.py +0 -0
  548. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_litellm_reasoning_passthrough.py +0 -0
  549. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_litellm_runtime.py +0 -0
  550. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_litellm_smoke.py +0 -0
  551. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_live_llm_trajectory.py +0 -0
  552. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_llm_judge.py +0 -0
  553. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_llm_judge_event_tags.py +0 -0
  554. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_llm_judge_verifier.py +0 -0
  555. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_loop_strategies.py +0 -0
  556. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_loop_summary.py +0 -0
  557. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_loop_sweep.py +0 -0
  558. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_memory_scorer.py +0 -0
  559. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_metrics.py +0 -0
  560. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_mle_bench_adapter.py +0 -0
  561. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_mock_openai_responses_server.py +0 -0
  562. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_monitor_scaffold.py +0 -0
  563. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_native_acp_usage.py +0 -0
  564. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_no_cross_provider_fallback.py +0 -0
  565. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_notification_order_real.py +0 -0
  566. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_opencode_family_proxy_tracking.py +0 -0
  567. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_oracle.py +0 -0
  568. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_oracle_chokepoint.py +0 -0
  569. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_paths_safe.py +0 -0
  570. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_paths_symlink_helpers.py +0 -0
  571. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_pi_acp_launcher.py +0 -0
  572. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_pi_acp_proxy_routing.py +0 -0
  573. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_process.py +0 -0
  574. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_project_skills_layout.py +0 -0
  575. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_provider_auth_detection.py +0 -0
  576. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_providers.py +0 -0
  577. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_reexport.py +0 -0
  578. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_registry_invariants.py +0 -0
  579. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_release_hardening_r5.py +0 -0
  580. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_release_version.py +0 -0
  581. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_release_workflow_wiring.py +0 -0
  582. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_resolve_env_helpers.py +0 -0
  583. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_review_boundaries.py +0 -0
  584. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_review_rubric.py +0 -0
  585. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_review_runtime.py +0 -0
  586. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_reward_lenient.py +0 -0
  587. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_reward_node.py +0 -0
  588. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_reward_range.py +0 -0
  589. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_reward_unified_contract.py +0 -0
  590. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_rewards.py +0 -0
  591. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_rewards_jsonl.py +0 -0
  592. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_rollout_architecture.py +0 -0
  593. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_rollout_branch.py +0 -0
  594. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_rollout_config_path_coercion.py +0 -0
  595. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_rollout_environment.py +0 -0
  596. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_rollout_hard_deadline.py +0 -0
  597. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_rollout_import_no_side_effects.py +0 -0
  598. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_rollout_on_ask_user_wiring.py +0 -0
  599. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_rollout_planes_contract.py +0 -0
  600. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_rollout_probe_sandbox_health.py +0 -0
  601. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_rollout_session_factory_dispatch.py +0 -0
  602. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_rollout_setup_commands.py +0 -0
  603. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_rollout_upload.py +0 -0
  604. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_rubric_checks.py +0 -0
  605. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_rubric_config.py +0 -0
  606. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_runtime.py +0 -0
  607. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_runtime_capabilities.py +0 -0
  608. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_runtime_config_wired.py +0 -0
  609. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_runtime_live_sandbox.py +0 -0
  610. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_sandbox.py +0 -0
  611. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_sandbox_exec_secret_handling.py +0 -0
  612. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_sandbox_hardening.py +0 -0
  613. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_sandbox_isolation_copy_traversal.py +0 -0
  614. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_sandbox_live_process.py +0 -0
  615. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_sandbox_multi_service.py +0 -0
  616. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_sandbox_prebuilt_validation.py +0 -0
  617. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_sandbox_protocol.py +0 -0
  618. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_sandbox_provider_registry_drift.py +0 -0
  619. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_sandbox_setup.py +0 -0
  620. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_sandbox_snapshot_contract.py +0 -0
  621. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_sandbox_upload_symlink.py +0 -0
  622. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_sandbox_verifier_workspace.py +0 -0
  623. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_scene.py +0 -0
  624. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_scene_outbox_trial.py +0 -0
  625. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_scene_parallel_group.py +0 -0
  626. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_scene_result_aggregation.py +0 -0
  627. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_scoring.py +0 -0
  628. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_sdk_internals.py +0 -0
  629. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_sdk_lockdown.py +0 -0
  630. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_sdk_run_alias.py +0 -0
  631. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_sealed_channel_container.py +0 -0
  632. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_self_gen_cli.py +0 -0
  633. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_self_gen_export_error_channel.py +0 -0
  634. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_self_gen_export_failures.py +0 -0
  635. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_self_gen_orchestration.py +0 -0
  636. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_session_factory_runtime.py +0 -0
  637. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_session_request_permission_dispatch.py +0 -0
  638. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_skill_eval.py +0 -0
  639. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_skill_eval_dryrun.py +0 -0
  640. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_skill_eval_integration.py +0 -0
  641. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_skill_eval_sweep.py +0 -0
  642. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_skill_eval_traversal.py +0 -0
  643. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_skill_invocation_artifacts.py +0 -0
  644. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_skill_policy.py +0 -0
  645. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_skills.py +0 -0
  646. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_skills_dir_agent_home_link.py +0 -0
  647. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_skillsbench_conversion_conformance.py +0 -0
  648. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_skillsbench_harbor_run_suite.py +0 -0
  649. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_smoke.py +0 -0
  650. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_smoke_wiring.py +0 -0
  651. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_source_adapters.py +0 -0
  652. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_subscription_auth.py +0 -0
  653. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_task_check_eval_consistency.py +0 -0
  654. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_task_config.py +0 -0
  655. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_task_digest.py +0 -0
  656. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_task_document.py +0 -0
  657. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_task_download.py +0 -0
  658. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_task_export.py +0 -0
  659. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_task_output_format.py +0 -0
  660. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_task_package.py +0 -0
  661. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_task_runtime_primitive.py +0 -0
  662. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_tasks.py +0 -0
  663. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_token_usage_normalization.py +0 -0
  664. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_trace_import_cli.py +0 -0
  665. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_trace_task_gen_traversal.py +0 -0
  666. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_trace_to_task_evidence.py +0 -0
  667. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_traces_huggingface.py +0 -0
  668. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_traces_parsers.py +0 -0
  669. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_traces_task_gen.py +0 -0
  670. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_train_cli.py +0 -0
  671. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_train_mode_artifact_emission.py +0 -0
  672. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_train_trl_cli.py +0 -0
  673. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_trajectory_integration.py +0 -0
  674. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_trajectory_streaming.py +0 -0
  675. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_trial_agent_timeout_verify.py +0 -0
  676. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_trial_install_agent_timeout.py +0 -0
  677. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_trial_litellm_runtime.py +0 -0
  678. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_trl_integration.py +0 -0
  679. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_usage_litellm.py +0 -0
  680. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_usage_required.py +0 -0
  681. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_usage_tracking.py +0 -0
  682. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_user.py +0 -0
  683. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_v06_guard_ports.py +0 -0
  684. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_verifier_document.py +0 -0
  685. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_verifier_multi_container.py +0 -0
  686. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_verifier_output.py +0 -0
  687. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_verifier_output_freshness.py +0 -0
  688. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_verifier_strategies.py +0 -0
  689. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_verifier_wedge_retry.py +0 -0
  690. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_verify.py +0 -0
  691. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_workflow_action_pinning.py +0 -0
  692. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_yaml_config.py +0 -0
  693. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/trajectories/__init__.py +0 -0
  694. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/trajectories/test_export.py +0 -0
  695. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/trajectories/test_export_adp.py +0 -0
  696. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/trajectories/test_export_atif.py +0 -0
  697. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/trajectories/test_export_common.py +0 -0
  698. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/trajectories/test_export_nan_handling.py +0 -0
  699. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/trajectories/test_export_prime_sft.py +0 -0
  700. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/trajectories/test_redaction.py +0 -0
  701. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/trajectories/test_step_granularity.py +0 -0
  702. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/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.dev1829
3
+ Version: 0.6.7.dev1833
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.dev1829"
3
+ version = "0.6.7.dev1833"
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"
@@ -73,6 +73,7 @@ def rollout_result_payload(
73
73
  )
74
74
  return {
75
75
  "task_name": result.task_name,
76
+ "rollout_name": result.rollout_name,
76
77
  "rewards": result.rewards,
77
78
  "error": result.error,
78
79
  "error_category": result.error_category,
@@ -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(
@@ -0,0 +1,122 @@
1
+ """Verifier-artifact mining for the eval report's failure lines.
2
+
3
+ The one file-touching corner of the CLI's final report block: when a failed
4
+ task's reason would otherwise be the bare ``reward X`` fallback, mine the
5
+ rollout's verifier artifacts for a one-line explanation. Lives in its own
6
+ module so ``cli/_shared.py`` stays the side-effect-free display helpers it
7
+ advertises.
8
+
9
+ Contract (the engine stays file-free — these reads are CLI-side, report-time
10
+ only):
11
+
12
+ - The rollout dir is resolved exactly, from the ``rollout_name`` the engine
13
+ records on every result — never guessed from globs.
14
+ - Evidence sources are tried in order (CTRF report, then test-stdout tail);
15
+ the first that yields a line wins.
16
+ - Every read is bounded (``_ARTIFACT_READ_BYTES`` per file) and nothing here
17
+ raises — any surprise degrades to ``None``, i.e. the bare reward reason.
18
+ """
19
+
20
+ from __future__ import annotations
21
+
22
+ import json
23
+ import re
24
+ from typing import TYPE_CHECKING
25
+
26
+ if TYPE_CHECKING:
27
+ from collections.abc import Callable
28
+ from pathlib import Path
29
+
30
+ # Never read more than this many bytes per file, and evidence is only mined
31
+ # for the <= _MAX_FAILURE_LINES tasks the report block displays.
32
+ _ARTIFACT_READ_BYTES = 64 * 1024
33
+ # Pytest final summary, decoration stripped: "1 failed, 2 passed in 40.86s".
34
+ _PYTEST_SUMMARY_RE = re.compile(r"\d+ failed\b")
35
+
36
+
37
+ def _ctrf_failure_line(ctrf_path: Path) -> str | None:
38
+ """``<test> failed[: <assertion>]`` from the first failed CTRF test.
39
+
40
+ The verifier's pytest run writes a CTRF report (``pytest --ctrf``, see the
41
+ standard path in ``task_authoring/structural_checks.py``). Per test the
42
+ useful failure evidence is the ``E …`` assertion line inside ``trace``;
43
+ ``message`` is only a generic phase description, so it is the fallback.
44
+ """
45
+ if ctrf_path.stat().st_size > _ARTIFACT_READ_BYTES:
46
+ # JSON only parses whole — an oversized report is skipped (not
47
+ # truncated) and the next evidence source gets its turn.
48
+ return None
49
+ data = json.loads(ctrf_path.read_text(encoding="utf-8", errors="replace"))
50
+ tests = (data.get("results") or {}).get("tests") or []
51
+ for test in tests:
52
+ if not isinstance(test, dict) or test.get("status") != "failed":
53
+ continue
54
+ # Full pytest node ids ("tests/test_x.py::test_build") waste the
55
+ # 100-char line budget; keep the test function name.
56
+ name = str(test.get("name") or "test").rsplit("::", 1)[-1]
57
+ trace = test.get("trace")
58
+ if isinstance(trace, str):
59
+ for line in trace.splitlines():
60
+ stripped = line.strip()
61
+ if stripped.startswith("E "):
62
+ assertion = stripped[2:].strip()
63
+ # "<test> failed:" already says it's an assertion — drop
64
+ # the prefix to reclaim line budget for the message.
65
+ assertion = assertion.removeprefix("AssertionError: ")
66
+ return f"{name} failed: {assertion}"
67
+ message = test.get("message")
68
+ if isinstance(message, str) and message.strip():
69
+ return f"{name} failed: {' '.join(message.split())}"
70
+ return f"{name} failed"
71
+ return None
72
+
73
+
74
+ def _stdout_tail_failure_line(stdout_path: Path) -> str | None:
75
+ """Last pytest summary ("N failed, M passed …") — else last ``FAILED …``
76
+ line — from a bounded tail of the verifier's test-stdout capture."""
77
+ with stdout_path.open("rb") as fh:
78
+ fh.seek(0, 2) # SEEK_END
79
+ fh.seek(max(0, fh.tell() - _ARTIFACT_READ_BYTES))
80
+ tail = fh.read(_ARTIFACT_READ_BYTES).decode("utf-8", errors="replace")
81
+ last_failed: str | None = None
82
+ for line in reversed(tail.splitlines()):
83
+ bare = line.strip().strip("=").strip()
84
+ if _PYTEST_SUMMARY_RE.match(bare):
85
+ return bare
86
+ if last_failed is None and line.strip().startswith("FAILED "):
87
+ last_failed = line.strip()
88
+ return last_failed
89
+
90
+
91
+ def artifact_failure_evidence(
92
+ job_dir: Path, rollout_name: str
93
+ ) -> tuple[str, Path] | None:
94
+ """One-liner mined from the rollout's verifier artifacts, or ``None``.
95
+
96
+ Returns the one-liner plus the verifier dir it came from (for the report
97
+ block's single ``(details: …)`` pointer line). Never raises.
98
+ """
99
+ # Local import: RolloutPaths pulls in the task package, which the CLI
100
+ # shouldn't pay for until a failure actually needs artifact evidence.
101
+ from benchflow.task.paths import RolloutPaths
102
+
103
+ rollout_paths = RolloutPaths(rollout_dir=job_dir / rollout_name)
104
+ verifier_dir = rollout_paths.verifier_dir
105
+ attempts: list[tuple[Path, Callable[[Path], str | None]]] = [
106
+ # ctrf.json has no RolloutPaths property — the verifier recovers it by
107
+ # literal name (verifier_core.py, `_recover_main_verifier_outputs`).
108
+ (verifier_dir / "ctrf.json", _ctrf_failure_line),
109
+ (rollout_paths.test_stdout_path, _stdout_tail_failure_line),
110
+ ]
111
+ for path, extract in attempts:
112
+ try:
113
+ if not path.is_file():
114
+ continue
115
+ detail = extract(path)
116
+ except Exception:
117
+ # Unreadable file, bad JSON, permissions … try the next source;
118
+ # the report must never crash over evidence mining.
119
+ continue
120
+ if detail is not None:
121
+ return detail, verifier_dir
122
+ return None
@@ -3,7 +3,9 @@
3
3
  These are the cross-cutting, side-effect-free helpers that several CLI command
4
4
  groups (``cli/main.py`` and the ``cli/<group>.py`` modules) need in common: the
5
5
  shared Rich :data:`console`, the evaluation-result summary/exit helpers, and the
6
- agent ``Requires`` rendering used by ``agents``/``agent`` listings.
6
+ agent ``Requires`` rendering used by ``agents``/``agent`` listings. The one
7
+ file-reading step of the eval report (mining verifier artifacts for failure
8
+ evidence) is delegated to :mod:`._failure_evidence` to keep that claim true.
7
9
 
8
10
  Keeping them here lets each command group import one stable surface instead of
9
11
  re-deriving the formatting, and lets ``cli/main.py`` stay a thin app + eval
@@ -19,6 +21,7 @@ from rich.console import Console
19
21
  from rich.markup import escape
20
22
 
21
23
  from benchflow._utils.text import truncate_end
24
+ from benchflow.cli._failure_evidence import artifact_failure_evidence
22
25
 
23
26
  if TYPE_CHECKING:
24
27
  from pathlib import Path
@@ -109,17 +112,24 @@ _FAILURE_LINE_LIMIT = 100
109
112
  _FAILURE_REASON_METRICS = 3
110
113
 
111
114
 
112
- def _failure_reason(failure: TaskFailure) -> str:
115
+ def _failure_reason(
116
+ failure: TaskFailure, job_dir: Path | None = None
117
+ ) -> tuple[str, Path | None]:
113
118
  """One cheap line explaining why a FAILED (scored, reward != 1) task
114
- failed, from evidence already on the result no file reads.
119
+ failed, plus the verifier dir when artifacts supplied the evidence.
115
120
 
116
121
  Priority: the verifier's own error if set; else the reward plus a compact
117
122
  breakdown of the named metrics in the reward dict (zero/failed metrics
118
- first — they explain the miss); else just the reward.
123
+ first — they explain the miss); else the reward plus a one-liner mined
124
+ from the rollout's verifier artifacts (bounded CLI-side reads resolved via
125
+ the ``rollout_name`` the engine records — the engine stays file-free);
126
+ else just the reward. The returned path is non-``None`` only for the
127
+ artifact tier, so the caller can print one ``(details: …)`` pointer per
128
+ report block.
119
129
  """
120
130
  if failure.verifier_error:
121
131
  # Collapse whitespace: verifier errors are routinely multi-line.
122
- return " ".join(failure.verifier_error.split())
132
+ return " ".join(failure.verifier_error.split()), None
123
133
  rewards = failure.rewards or {}
124
134
  reward = rewards.get("reward")
125
135
  metrics = [
@@ -127,15 +137,22 @@ def _failure_reason(failure: TaskFailure) -> str:
127
137
  for name, value in rewards.items()
128
138
  if name != "reward" and isinstance(value, (bool, int, float))
129
139
  ]
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}"
140
+ if metrics:
141
+ # Zero/failed metrics first (stable within each group), capped so one
142
+ # metric-happy verifier can't flood the line.
143
+ metrics.sort(key=lambda kv: kv[1] != 0)
144
+ shown = ", ".join(
145
+ f"{name} {value}" for name, value in metrics[:_FAILURE_REASON_METRICS]
146
+ )
147
+ return f"reward {reward} — {shown}", None
148
+ # No rollout_name (pre-#957-follow-up result.json, sharded aggregation):
149
+ # nothing to resolve — the bare reward is as honest as it gets.
150
+ if job_dir is not None and failure.rollout_name:
151
+ evidence = artifact_failure_evidence(job_dir, failure.rollout_name)
152
+ if evidence is not None:
153
+ detail, verifier_dir = evidence
154
+ return f"reward {reward} — {detail}", verifier_dir
155
+ return f"reward {reward}", None
139
156
 
140
157
 
141
158
  def _report_eval_result(result: EvaluationResult, job_dir: Path | None = None) -> None:
@@ -145,9 +162,13 @@ def _report_eval_result(result: EvaluationResult, job_dir: Path | None = None) -
145
162
  now the line is green only on a full clean pass, red on a shutout, amber
146
163
  otherwise, and ``errors=N`` is red when non-zero. Each FAILED task gets one
147
164
  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).
165
+ doesn't require opening summary.json; when ``job_dir`` is given, a reason
166
+ that would otherwise be a bare ``reward X`` is upgraded from the rollout's
167
+ verifier artifacts (bounded reads, displayed failures only), with a single
168
+ ``(details: …/verifier)`` pointer line for the block. When ``job_dir`` is
169
+ given, the result/summary paths are printed so testers know where to look
170
+ (the guide repeatedly says "read summary.json" but the CLI never said
171
+ where).
151
172
  """
152
173
  errors = int(getattr(result, "errored", 0) or 0)
153
174
  verifier_errors = int(getattr(result, "verifier_errored", 0) or 0)
@@ -176,15 +197,23 @@ def _report_eval_result(result: EvaluationResult, job_dir: Path | None = None) -
176
197
  # summary.json to learn why. getattr(): sharded aggregation and older
177
198
  # SimpleNamespace-style callers don't carry task_failures.
178
199
  failures = getattr(result, "task_failures", None) or []
200
+ artifact_pointer: Path | None = None
179
201
  for failure in failures[:_MAX_FAILURE_LINES]:
202
+ reason, verifier_dir = _failure_reason(failure, job_dir)
203
+ if artifact_pointer is None and verifier_dir is not None:
204
+ artifact_pointer = verifier_dir
180
205
  line = truncate_end(
181
- f" ✗ {failure.task_name}: {_failure_reason(failure)}",
206
+ f" ✗ {failure.task_name}: {reason}",
182
207
  _FAILURE_LINE_LIMIT,
183
208
  )
184
209
  console.print(f"[dim]{escape(line)}[/dim]")
185
210
  extra = len(failures) - _MAX_FAILURE_LINES
186
211
  if extra > 0:
187
212
  console.print(f"[dim] … and {extra} more[/dim]")
213
+ # One pointer per block (not per line): the first artifact-backed reason's
214
+ # verifier dir, so "where do I look next" needs no summary.json dig either.
215
+ if artifact_pointer is not None:
216
+ console.print(f"[dim] (details: {escape(str(artifact_pointer))})[/dim]")
188
217
  if job_dir is not None:
189
218
  console.print(f"[dim]Artifacts:[/dim] {escape(str(job_dir))}")
190
219
  console.print(f"[dim]Summary: [/dim] {escape(str(job_dir))}/summary.json")
@@ -588,6 +588,10 @@ class TaskFailure:
588
588
  task_name: str
589
589
  rewards: dict[str, Any] | None
590
590
  verifier_error: str | None
591
+ # The task's rollout dir name under the job dir (``<task>__<uuid8>``), so
592
+ # the CLI can find the rollout's verifier artifacts without guessing.
593
+ # None on results persisted before the key existed.
594
+ rollout_name: str | None = None
591
595
 
592
596
 
593
597
  @dataclass
@@ -1801,6 +1805,9 @@ class Evaluation:
1801
1805
  task_name=name,
1802
1806
  rewards=r.get("rewards"),
1803
1807
  verifier_error=r.get("verifier_error"),
1808
+ # `or None`: RolloutResult defaults rollout_name to "" — don't
1809
+ # let that masquerade as a resolvable rollout dir.
1810
+ rollout_name=r.get("rollout_name") or None,
1804
1811
  )
1805
1812
  for name, r in sorted(all_results.items())
1806
1813
  if classify_score_outcome(r) == "failed"
@@ -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
 
@@ -18,6 +18,7 @@ from benchflow.sandbox.process._base import (
18
18
  _ENV_KEY_RE,
19
19
  LiveProcess,
20
20
  SubprocessLiveProcess,
21
+ _timeout_sec_from_env,
21
22
  )
22
23
 
23
24
  logger = logging.getLogger(__name__)
@@ -30,22 +31,10 @@ _DAYTONA_SSH_SERVER_ALIVE_COUNT_MAX = 12
30
31
 
31
32
 
32
33
  def _daytona_pty_readline_timeout_sec() -> float:
33
- value = os.environ.get(_DAYTONA_PTY_READLINE_TIMEOUT_ENV)
34
- if value is None:
35
- return _DAYTONA_PTY_READLINE_TIMEOUT_DEFAULT_SEC
36
- try:
37
- timeout = float(value)
38
- except ValueError:
39
- logger.warning(
40
- "Invalid %s=%r; using default %.0fs",
41
- _DAYTONA_PTY_READLINE_TIMEOUT_ENV,
42
- value,
43
- _DAYTONA_PTY_READLINE_TIMEOUT_DEFAULT_SEC,
44
- )
45
- return _DAYTONA_PTY_READLINE_TIMEOUT_DEFAULT_SEC
46
- if timeout <= 0:
47
- return _DAYTONA_PTY_READLINE_TIMEOUT_DEFAULT_SEC
48
- return timeout
34
+ return _timeout_sec_from_env(
35
+ _DAYTONA_PTY_READLINE_TIMEOUT_ENV,
36
+ _DAYTONA_PTY_READLINE_TIMEOUT_DEFAULT_SEC,
37
+ )
49
38
 
50
39
 
51
40
  async def _cleanup_daytona_remote_env_file(