benchflow 0.6.7.dev1827__tar.gz → 0.6.7.dev1829__tar.gz

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