benchflow 0.6.7.dev1833__tar.gz → 0.6.7.dev1839__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 (704) hide show
  1. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/CHANGELOG.md +8 -0
  2. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/PKG-INFO +1 -1
  3. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/pyproject.toml +1 -1
  4. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/_utils/env_registry.py +51 -8
  5. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/_utils/scoring.py +21 -0
  6. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/cli/_shared.py +6 -1
  7. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/cli/main.py +5 -4
  8. benchflow-0.6.7.dev1839/src/benchflow/environment/_registry/env0@outage.toml +63 -0
  9. benchflow-0.6.7.dev1839/src/benchflow/environment/_registry/env0@prod.toml +77 -0
  10. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/environment/manifest.py +3 -1
  11. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/evaluation.py +23 -2
  12. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_cli_live_progress.py +36 -0
  13. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_env_registry.py +116 -1
  14. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_job.py +51 -0
  15. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_scoring.py +35 -0
  16. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/.gitignore +0 -0
  17. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/LICENSE +0 -0
  18. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/README.md +0 -0
  19. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/__init__.py +0 -0
  20. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/_dotenv.py +0 -0
  21. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/_paths.py +0 -0
  22. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/_run.py +0 -0
  23. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/_types.py +0 -0
  24. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/_utils/__init__.py +0 -0
  25. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/_utils/benchmark_repos.py +0 -0
  26. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/_utils/build_context_stage.py +0 -0
  27. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/_utils/config.py +0 -0
  28. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/_utils/config_override.py +0 -0
  29. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/_utils/content_address.py +0 -0
  30. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/_utils/dataset_registry.py +0 -0
  31. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/_utils/evaluation_results.py +0 -0
  32. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/_utils/hf_datasets.py +0 -0
  33. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/_utils/json_safe.py +0 -0
  34. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/_utils/learner_memory.py +0 -0
  35. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/_utils/live_activity.py +0 -0
  36. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/_utils/result_metadata.py +0 -0
  37. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/_utils/reward_events.py +0 -0
  38. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/_utils/source_provenance.py +0 -0
  39. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/_utils/task_authoring/__init__.py +0 -0
  40. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/_utils/task_authoring/_evidence_paths.py +0 -0
  41. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/_utils/task_authoring/acceptance_evidence.py +0 -0
  42. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/_utils/task_authoring/scaffolding.py +0 -0
  43. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/_utils/task_authoring/structural_checks.py +0 -0
  44. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/_utils/text.py +0 -0
  45. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/_utils/yaml_loader.py +0 -0
  46. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/acp/__init__.py +0 -0
  47. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/acp/client.py +0 -0
  48. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/acp/container_transport.py +0 -0
  49. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/acp/runtime.py +0 -0
  50. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/acp/selection.py +0 -0
  51. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/acp/session.py +0 -0
  52. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/acp/transport.py +0 -0
  53. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/acp/types.py +0 -0
  54. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/adapters/__init__.py +0 -0
  55. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/adapters/_toolathlon.py +0 -0
  56. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/adapters/_toolathlon_container.py +0 -0
  57. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/adapters/_toolathlon_fake_mail.py +0 -0
  58. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/adapters/_toolathlon_poste_users.tsv +0 -0
  59. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/adapters/_toolathlon_services.py +0 -0
  60. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/adapters/harbor.py +0 -0
  61. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/adapters/inbound.py +0 -0
  62. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/adapters/inspect_ai.py +0 -0
  63. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/adapters/ors.py +0 -0
  64. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/adapters/resources/__init__.py +0 -0
  65. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/adapters/resources/mcp_atlas_bridge.py +0 -0
  66. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/adapters/resources/mcp_atlas_judge.py +0 -0
  67. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/adapters/source.py +0 -0
  68. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/agent_router.py +0 -0
  69. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/agent_router_guide.py +0 -0
  70. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/agent_router_parity.py +0 -0
  71. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/agent_router_scaffold.py +0 -0
  72. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/agents/__init__.py +0 -0
  73. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/agents/codex_config.py +0 -0
  74. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/agents/credentials.py +0 -0
  75. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/agents/deepagents_acp_shim.py +0 -0
  76. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/agents/env.py +0 -0
  77. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/agents/errors.py +0 -0
  78. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/agents/harvey_lab_acp_shim.py +0 -0
  79. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/agents/install.py +0 -0
  80. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/agents/manifest.py +0 -0
  81. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/agents/openclaw_acp_shim.py +0 -0
  82. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/agents/pi_acp_launcher.py +0 -0
  83. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/agents/protocol.py +0 -0
  84. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/agents/providers.py +0 -0
  85. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/agents/registry.py +0 -0
  86. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/agents/remote_manifests.py +0 -0
  87. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/branch.py +0 -0
  88. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/cli/__init__.py +0 -0
  89. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/cli/_failure_evidence.py +0 -0
  90. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/cli/_hosted_env.py +0 -0
  91. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/cli/_live_progress.py +0 -0
  92. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/cli/_options.py +0 -0
  93. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/cli/adopt.py +0 -0
  94. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/cli/agent.py +0 -0
  95. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/cli/continue_cmd.py +0 -0
  96. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/cli/environment.py +0 -0
  97. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/cli/eval_artifacts.py +0 -0
  98. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/cli/eval_lift.py +0 -0
  99. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/cli/hub.py +0 -0
  100. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/cli/monitor.py +0 -0
  101. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/cli/review.py +0 -0
  102. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/cli/sandbox.py +0 -0
  103. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/cli/skills.py +0 -0
  104. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/cli/tasks.py +0 -0
  105. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/cli/trace_import.py +0 -0
  106. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/cli/train.py +0 -0
  107. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/continue_run/__init__.py +0 -0
  108. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/continue_run/batch.py +0 -0
  109. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/continue_run/orchestrator.py +0 -0
  110. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/continue_run/replay_proxy.py +0 -0
  111. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/continue_run/run_folder.py +0 -0
  112. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/continue_run/sandbox_proxy.py +0 -0
  113. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/contracts/__init__.py +0 -0
  114. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/contracts/planes.py +0 -0
  115. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/contracts/user.py +0 -0
  116. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/demo_task/environment/Dockerfile +0 -0
  117. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/demo_task/instruction.md +0 -0
  118. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/demo_task/task.md +0 -0
  119. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/demo_task/task.toml +0 -0
  120. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/demo_task/tests/test.sh +0 -0
  121. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/diagnostics.py +0 -0
  122. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/environment/__init__.py +0 -0
  123. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/environment/manifest_env.py +0 -0
  124. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/environment/protocol.py +0 -0
  125. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/environment/readiness.py +0 -0
  126. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/eval_artifacts.py +0 -0
  127. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/eval_lift.py +0 -0
  128. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/eval_plan.py +0 -0
  129. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/eval_sharding.py +0 -0
  130. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/eval_worker.py +0 -0
  131. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/experimental/__init__.py +0 -0
  132. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/experimental/mcp/__init__.py +0 -0
  133. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/experimental/mcp/hooks.py +0 -0
  134. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/experimental/mcp/reviewer_server.py +0 -0
  135. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/hosted_env.py +0 -0
  136. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/hub/__init__.py +0 -0
  137. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/hub/harbor_registry.py +0 -0
  138. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/integrations/__init__.py +0 -0
  139. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/integrations/trl/__init__.py +0 -0
  140. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/integrations/trl/spec.py +0 -0
  141. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/learner_skills.py +0 -0
  142. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/learner_store.py +0 -0
  143. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/loop_strategies.py +0 -0
  144. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/loop_sweep.py +0 -0
  145. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/metrics.py +0 -0
  146. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/models.py +0 -0
  147. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/monitor.py +0 -0
  148. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/providers/__init__.py +0 -0
  149. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/providers/litellm_bedrock_patch.py +0 -0
  150. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/providers/litellm_bedrock_preflight.py +0 -0
  151. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/providers/litellm_config.py +0 -0
  152. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/providers/litellm_logging.py +0 -0
  153. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/providers/litellm_runtime.py +0 -0
  154. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/providers/runtime.py +0 -0
  155. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/publish/__init__.py +0 -0
  156. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/publish/huggingface.py +0 -0
  157. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/py.typed +0 -0
  158. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/review/__init__.py +0 -0
  159. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/review/config.py +0 -0
  160. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/review/default-rubric.json +0 -0
  161. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/review/prompts.py +0 -0
  162. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/review/runner.py +0 -0
  163. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/review/wrapper.py +0 -0
  164. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/rewards/README.md +0 -0
  165. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/rewards/__init__.py +0 -0
  166. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/rewards/builtins.py +0 -0
  167. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/rewards/events.py +0 -0
  168. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/rewards/file_readers.py +0 -0
  169. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/rewards/llm.py +0 -0
  170. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/rewards/memory_scorer.py +0 -0
  171. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/rewards/node.py +0 -0
  172. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/rewards/protocol.py +0 -0
  173. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/rewards/rubric.py +0 -0
  174. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/rewards/rubric_config.py +0 -0
  175. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/rewards/validation.py +0 -0
  176. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/rollout/__init__.py +0 -0
  177. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/rollout/_config.py +0 -0
  178. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/rollout/_deadline.py +0 -0
  179. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/rollout/_results.py +0 -0
  180. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/rollout/_setup.py +0 -0
  181. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/rollout/_skills.py +0 -0
  182. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/rollout/_usage.py +0 -0
  183. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/rollout/_user_loop.py +0 -0
  184. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/rollout/session_factory_runtime.py +0 -0
  185. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/rollout/task_runtime.py +0 -0
  186. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/rollout_branch.py +0 -0
  187. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/rollout_planes.py +0 -0
  188. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/runtime.py +0 -0
  189. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/sandbox/__init__.py +0 -0
  190. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/sandbox/_base.py +0 -0
  191. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/sandbox/_cache_reclaim.py +0 -0
  192. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/sandbox/_compose.py +0 -0
  193. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/sandbox/_compose_files/docker-compose-base.yaml +0 -0
  194. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/sandbox/_compose_files/docker-compose-build.yaml +0 -0
  195. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/sandbox/_compose_files/docker-compose-no-network.yaml +0 -0
  196. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/sandbox/_compose_files/docker-compose-prebuilt.yaml +0 -0
  197. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/sandbox/_sdk_ops.py +0 -0
  198. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/sandbox/agentcore.py +0 -0
  199. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/sandbox/agentcore_builder.py +0 -0
  200. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/sandbox/agentcore_image.py +0 -0
  201. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/sandbox/agentcore_provisioning.py +0 -0
  202. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/sandbox/agentcore_reaper.py +0 -0
  203. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/sandbox/agentcore_sealed.py +0 -0
  204. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/sandbox/apple_container.py +0 -0
  205. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/sandbox/daytona.py +0 -0
  206. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/sandbox/daytona_dind.py +0 -0
  207. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/sandbox/daytona_pty.py +0 -0
  208. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/sandbox/daytona_reaper.py +0 -0
  209. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/sandbox/daytona_strategies.py +0 -0
  210. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/sandbox/docker.py +0 -0
  211. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/sandbox/lockdown.py +0 -0
  212. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/sandbox/metadata.py +0 -0
  213. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/sandbox/modal_impl.py +0 -0
  214. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/sandbox/process/__init__.py +0 -0
  215. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/sandbox/process/_base.py +0 -0
  216. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/sandbox/process/agentcore.py +0 -0
  217. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/sandbox/process/apple.py +0 -0
  218. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/sandbox/process/daytona.py +0 -0
  219. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/sandbox/process/docker.py +0 -0
  220. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/sandbox/protocol.py +0 -0
  221. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/sandbox/providers.py +0 -0
  222. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/sandbox/services.py +0 -0
  223. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/sandbox/setup.py +0 -0
  224. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/sandbox/snapshot.py +0 -0
  225. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/sandbox/user.py +0 -0
  226. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/scenes.py +0 -0
  227. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/sdk.py +0 -0
  228. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/self_gen.py +0 -0
  229. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/skill_eval/__init__.py +0 -0
  230. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/skill_eval/_core.py +0 -0
  231. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/skill_eval/gepa_export.py +0 -0
  232. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/skill_eval/schema.py +0 -0
  233. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/skill_policy.py +0 -0
  234. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/skills.py +0 -0
  235. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/task/__init__.py +0 -0
  236. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/task/_document_evidence.py +0 -0
  237. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/task/_document_normalize.py +0 -0
  238. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/task/_document_parse.py +0 -0
  239. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/task/_document_profiles.py +0 -0
  240. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/task/acceptance_live.py +0 -0
  241. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/task/acceptance_live_model.py +0 -0
  242. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/task/acceptance_live_report.py +0 -0
  243. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/task/acceptance_live_validation.py +0 -0
  244. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/task/config.py +0 -0
  245. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/task/discovery.py +0 -0
  246. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/task/document.py +0 -0
  247. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/task/env.py +0 -0
  248. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/task/export.py +0 -0
  249. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/task/imports.py +0 -0
  250. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/task/output_format.py +0 -0
  251. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/task/package.py +0 -0
  252. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/task/paths.py +0 -0
  253. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/task/prompts.py +0 -0
  254. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/task/runtime_capabilities.py +0 -0
  255. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/task/runtime_view.py +0 -0
  256. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/task/task.py +0 -0
  257. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/task/verifier.py +0 -0
  258. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/task/verifier_core.py +0 -0
  259. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/task/verifier_document.py +0 -0
  260. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/task/verifier_errors.py +0 -0
  261. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/task/verifier_judge_inputs.py +0 -0
  262. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/task/verifier_ors_episode.py +0 -0
  263. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/task/verifier_reward_kit.py +0 -0
  264. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/task/verifier_scan.py +0 -0
  265. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/task/verifier_script_strategy.py +0 -0
  266. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/templates/__init__.py +0 -0
  267. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/templates/judge.py.tmpl +0 -0
  268. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/templates/test.sh.tmpl +0 -0
  269. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/traces/__init__.py +0 -0
  270. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/traces/huggingface.py +0 -0
  271. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/traces/local.py +0 -0
  272. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/traces/models.py +0 -0
  273. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/traces/parsers.py +0 -0
  274. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/traces/task_gen.py +0 -0
  275. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/training/__init__.py +0 -0
  276. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/training/backends/__init__.py +0 -0
  277. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/training/backends/prime_rl.py +0 -0
  278. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/training/run_manifest.py +0 -0
  279. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/trajectories/__init__.py +0 -0
  280. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/trajectories/_capture.py +0 -0
  281. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/trajectories/_export_common.py +0 -0
  282. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/trajectories/_llm_capture.py +0 -0
  283. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/trajectories/call_purpose.py +0 -0
  284. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/trajectories/export.py +0 -0
  285. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/trajectories/export_adp.py +0 -0
  286. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/trajectories/export_atif.py +0 -0
  287. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/trajectories/export_prime_sft.py +0 -0
  288. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/trajectories/export_trl_sft.py +0 -0
  289. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/trajectories/metrics.py +0 -0
  290. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/trajectories/results.py +0 -0
  291. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/trajectories/tree.py +0 -0
  292. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/trajectories/trl_sft_tokenization.py +0 -0
  293. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/trajectories/types.py +0 -0
  294. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/trajectories/viewer.py +0 -0
  295. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/usage_tracking.py +0 -0
  296. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/__init__.py +0 -0
  297. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/acceptance_live_harness.py +0 -0
  298. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/agents/__init__.py +0 -0
  299. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/agents/test_manifest_dirscan.py +0 -0
  300. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/agents/test_manifest_loader.py +0 -0
  301. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/agents/test_manifest_parity.py +0 -0
  302. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/agents/test_manifest_wiring.py +0 -0
  303. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/agents/test_namespace_shorthand.py +0 -0
  304. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/agents/test_plugin_entry_points.py +0 -0
  305. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/agents/test_protocol.py +0 -0
  306. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/agents/test_remote_manifest_autoload.py +0 -0
  307. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/conformance/README.md +0 -0
  308. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/conformance/acp_smoke/environment/Dockerfile +0 -0
  309. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/conformance/acp_smoke/environment/docker-compose.yaml +0 -0
  310. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/conformance/acp_smoke/environment/skills/conformance-writer/SKILL.md +0 -0
  311. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/conformance/acp_smoke/instruction.md +0 -0
  312. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/conformance/acp_smoke/solution/solve.sh +0 -0
  313. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/conformance/acp_smoke/task.md +0 -0
  314. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/conformance/acp_smoke/task.toml +0 -0
  315. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/conformance/acp_smoke/tests/test.sh +0 -0
  316. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/conformance/conformance-results.json +0 -0
  317. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/conformance/proof_multi_agent.py +0 -0
  318. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/conformance/proof_snapshot.py +0 -0
  319. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/conformance/run_conformance.py +0 -0
  320. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/conformance/self_gen_smoke_skills/skill-creator/SKILL.md +0 -0
  321. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/conftest.py +0 -0
  322. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/continue_run/__init__.py +0 -0
  323. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/continue_run/_helpers.py +0 -0
  324. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/continue_run/test_batch.py +0 -0
  325. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/continue_run/test_orchestrator.py +0 -0
  326. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/continue_run/test_replay_proxy.py +0 -0
  327. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/continue_run/test_run_folder.py +0 -0
  328. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/environment/__init__.py +0 -0
  329. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/environment/test_chibench_manifest.py +0 -0
  330. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/environment/test_clawsbench_manifest.py +0 -0
  331. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/environment/test_manifest.py +0 -0
  332. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/environment/test_manifest_env.py +0 -0
  333. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/environment/test_protocol.py +0 -0
  334. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/environment/test_readiness.py +0 -0
  335. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/examples/hello-world-task/environment/Dockerfile +0 -0
  336. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/examples/hello-world-task/instruction.md +0 -0
  337. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/examples/hello-world-task/solution/solve.sh +0 -0
  338. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/examples/hello-world-task/task.md +0 -0
  339. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/examples/hello-world-task/task.toml +0 -0
  340. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/examples/hello-world-task/tests/test.sh +0 -0
  341. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/examples/test_claude.sh +0 -0
  342. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/examples/test_codex.sh +0 -0
  343. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/examples/test_codex_custom_provider.sh +0 -0
  344. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/examples/test_gemini.sh +0 -0
  345. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/examples/test_openclaw.sh +0 -0
  346. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/examples/traces/minimal-claude.jsonl +0 -0
  347. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/examples/traces/minimal-opentraces.jsonl +0 -0
  348. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/digest/README.md +0 -0
  349. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/digest/alpha-task/environment/Dockerfile +0 -0
  350. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/digest/alpha-task/instruction.md +0 -0
  351. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/digest/alpha-task/task.toml +0 -0
  352. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/digest/alpha-task/tests/test.sh +0 -0
  353. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/digest/beta-task/data/empty.bin +0 -0
  354. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/digest/beta-task/data/unicode.txt +0 -0
  355. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/digest/beta-task/instruction.md +0 -0
  356. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/digest/beta-task/task.toml +0 -0
  357. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/digest/not-a-task/notes.txt +0 -0
  358. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/mock_acp_agent.py +0 -0
  359. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/mock_acp_agent_interleaved.py +0 -0
  360. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/mock_acp_agent_multi_turn.py +0 -0
  361. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/mock_openai_responses_server.py +0 -0
  362. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/Dockerfile +0 -0
  363. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/data/michigan_stations.txt +0 -0
  364. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/flood-detection/SKILL.md +0 -0
  365. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/nws-flood-thresholds/SKILL.md +0 -0
  366. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/usgs-data-download/SKILL.md +0 -0
  367. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/flood-risk-analysis/instruction.md +0 -0
  368. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/flood-risk-analysis/solution/solve.sh +0 -0
  369. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/flood-risk-analysis/task.toml +0 -0
  370. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/flood-risk-analysis/tests/test.sh +0 -0
  371. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/flood-risk-analysis/tests/test_outputs.py +0 -0
  372. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/Dockerfile +0 -0
  373. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/climate.csv +0 -0
  374. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/hydrology.csv +0 -0
  375. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/land_cover.csv +0 -0
  376. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/water_temperature.csv +0 -0
  377. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/contribution-analysis/SKILL.md +0 -0
  378. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/meteorology-driver-classification/SKILL.md +0 -0
  379. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/pca-decomposition/SKILL.md +0 -0
  380. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/trend-analysis/SKILL.md +0 -0
  381. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/lake-warming-attribution/instruction.md +0 -0
  382. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/lake-warming-attribution/solution/solve.sh +0 -0
  383. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/lake-warming-attribution/task.toml +0 -0
  384. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/lake-warming-attribution/tests/test.sh +0 -0
  385. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/lake-warming-attribution/tests/test_outputs.py +0 -0
  386. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/manifest.json +0 -0
  387. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/Dockerfile +0 -0
  388. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/r2r_simulator.py +0 -0
  389. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/finite-horizon-lqr/SKILL.md +0 -0
  390. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/integral-action-design/SKILL.md +0 -0
  391. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/mpc-horizon-tuning/SKILL.md +0 -0
  392. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/state-space-linearization/SKILL.md +0 -0
  393. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/system_config.json +0 -0
  394. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/r2r-mpc-control/instruction.md +0 -0
  395. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/r2r-mpc-control/solution/solve.sh +0 -0
  396. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/r2r-mpc-control/task.toml +0 -0
  397. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/r2r-mpc-control/tests/test.sh +0 -0
  398. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/r2r-mpc-control/tests/test_outputs.py +0 -0
  399. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/Dockerfile +0 -0
  400. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/generate_training_pcaps.py +0 -0
  401. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/local.rules +0 -0
  402. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/pcap-triage-tshark/SKILL.md +0 -0
  403. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/pcap-triage-tshark/scripts/summarize_http_requests.sh +0 -0
  404. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-offline-evejson/SKILL.md +0 -0
  405. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-offline-evejson/scripts/run_suricata_offline.sh +0 -0
  406. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-rules-basics/SKILL.md +0 -0
  407. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/suricata.yaml +0 -0
  408. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/instruction.md +0 -0
  409. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/solution/solve.sh +0 -0
  410. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/task.toml +0 -0
  411. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/tests/test.sh +0 -0
  412. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/tests/test_outputs.py +0 -0
  413. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/Dockerfile +0 -0
  414. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syz-extract-constants/SKILL.md +0 -0
  415. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syzkaller-build-loop/SKILL.md +0 -0
  416. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syzlang-ioctl-basics/SKILL.md +0 -0
  417. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/instruction.md +0 -0
  418. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/solution/solve.sh +0 -0
  419. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/task.toml +0 -0
  420. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/tests/test.sh +0 -0
  421. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/tests/test_outputs.py +0 -0
  422. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/integration/_consistency.py +0 -0
  423. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/integration/agent_judge.py +0 -0
  424. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/integration/check_adapter_evidence.py +0 -0
  425. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/integration/check_hosted_env_evidence.py +0 -0
  426. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/integration/check_results.py +0 -0
  427. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/integration/check_skillsbench_harbor_parity.py +0 -0
  428. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/integration/check_trace_to_task_evidence.py +0 -0
  429. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/integration/configs/claude-agent-acp.yaml +0 -0
  430. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/integration/configs/codex-acp.yaml +0 -0
  431. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/integration/configs/gemini.yaml +0 -0
  432. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/integration/configs/harvey-lab-harness.yaml +0 -0
  433. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/integration/configs/mimo.yaml +0 -0
  434. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/integration/configs/openclaw.yaml +0 -0
  435. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/integration/configs/opencode.yaml +0 -0
  436. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/integration/configs/openhands.yaml +0 -0
  437. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/integration/configs/pi-acp.yaml +0 -0
  438. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/integration/deepagents_harness.py +0 -0
  439. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/integration/rubric_checks.py +0 -0
  440. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/integration/run.sh +0 -0
  441. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/integration/run_suite.py +0 -0
  442. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/integration/scenarios.py +0 -0
  443. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/integration/suites/release.yaml +0 -0
  444. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_acceptance_evidence.py +0 -0
  445. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_acceptance_live.py +0 -0
  446. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_acceptance_live_execution.py +0 -0
  447. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_acp.py +0 -0
  448. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_acp_capability_advertising.py +0 -0
  449. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_acp_mcp_servers.py +0 -0
  450. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_acp_model_config_dispatch.py +0 -0
  451. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_acp_pinned_protocol_guard.py +0 -0
  452. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_acp_setup_failure_propagation.py +0 -0
  453. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_adapter_scripts.py +0 -0
  454. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_adapters.py +0 -0
  455. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_agent_cli.py +0 -0
  456. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_agent_env_resolution.py +0 -0
  457. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_agent_gemini_defaults.py +0 -0
  458. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_agent_idle_timeout_cli.py +0 -0
  459. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_agent_model_decouple.py +0 -0
  460. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_agent_registry.py +0 -0
  461. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_agent_router.py +0 -0
  462. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_agent_router_cli_e2e.py +0 -0
  463. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_agent_router_scaffold.py +0 -0
  464. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_agent_setup.py +0 -0
  465. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_agent_spec.py +0 -0
  466. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_agentcore_builder.py +0 -0
  467. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_agentcore_parallel.py +0 -0
  468. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_agentcore_reaper.py +0 -0
  469. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_agentcore_sandbox.py +0 -0
  470. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_agentcore_transport.py +0 -0
  471. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_api_error_capture.py +0 -0
  472. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_apple_container_sandbox.py +0 -0
  473. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_bare_model_provider.py +0 -0
  474. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_base_install_imports.py +0 -0
  475. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_bedrock_thinking.py +0 -0
  476. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_benchflow_experiment_review_validator.py +0 -0
  477. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_benchmark_repos_resolve_repo_path.py +0 -0
  478. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_branch.py +0 -0
  479. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_build_context_stage.py +0 -0
  480. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_build_review_pack.py +0 -0
  481. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_capture_trajectory.py +0 -0
  482. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_check_skillsbench_harbor_parity.py +0 -0
  483. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_clawsbench_slice.py +0 -0
  484. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_cli_adopt_aliases.py +0 -0
  485. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_cli_arg_validation.py +0 -0
  486. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_cli_daytona.py +0 -0
  487. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_cli_docs_drift.py +0 -0
  488. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_cli_edge_case_hardening.py +0 -0
  489. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_cli_hub_env.py +0 -0
  490. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_cli_misc.py +0 -0
  491. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_codex_review.py +0 -0
  492. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_codex_self_write_auth.py +0 -0
  493. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_config_override.py +0 -0
  494. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_config_redaction.py +0 -0
  495. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_connect_as_env.py +0 -0
  496. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_console_error_truncation.py +0 -0
  497. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_console_progress.py +0 -0
  498. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_continuallearningbench_adapter.py +0 -0
  499. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_dataset_registry.py +0 -0
  500. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_daytona_command_polling.py +0 -0
  501. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_daytona_dind_compose_up.py +0 -0
  502. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_daytona_download.py +0 -0
  503. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_daytona_litellm_runtime.py +0 -0
  504. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_daytona_poll_deadline.py +0 -0
  505. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_daytona_reap.py +0 -0
  506. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_deepagents_agent.py +0 -0
  507. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_docker_prune_scoping.py +0 -0
  508. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_docker_uploads.py +0 -0
  509. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_docs_examples.py +0 -0
  510. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_eng50_capabilities.py +0 -0
  511. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_env_setup.py +0 -0
  512. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_environment_manifest_controls.py +0 -0
  513. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_eval_artifact_cli.py +0 -0
  514. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_eval_filters_applied.py +0 -0
  515. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_eval_lift.py +0 -0
  516. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_eval_sharding.py +0 -0
  517. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_eval_single_task_summary.py +0 -0
  518. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_eval_source_provenance.py +0 -0
  519. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_eval_worker_retry.py +0 -0
  520. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_eval_zero_task_guard.py +0 -0
  521. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_evaluation_environment_manifest.py +0 -0
  522. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_exclude_tasks.py +0 -0
  523. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_filter_credentialed_cells.py +0 -0
  524. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_harvey_lab_shim.py +0 -0
  525. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_hilbench_adapter.py +0 -0
  526. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_hosted_env.py +0 -0
  527. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_hosted_env_rollout_contract.py +0 -0
  528. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_hub_harbor_registry.py +0 -0
  529. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_inbound_adapter_manifest.py +0 -0
  530. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_inbound_adapters.py +0 -0
  531. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_integration_agent_judge.py +0 -0
  532. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_integration_check_results.py +0 -0
  533. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_integration_consistency.py +0 -0
  534. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_integration_matrix.py +0 -0
  535. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_integration_provider_selection.py +0 -0
  536. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_integration_run_suite.py +0 -0
  537. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_integration_suite.py +0 -0
  538. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_internet_policy.py +0 -0
  539. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_job_sequential_shared.py +0 -0
  540. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_job_sequential_shared_resume.py +0 -0
  541. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_judge_robustness.py +0 -0
  542. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_judge_symlink_ingestion.py +0 -0
  543. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_learner_skills.py +0 -0
  544. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_learner_skills_traversal.py +0 -0
  545. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_learner_store.py +0 -0
  546. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_learner_store_persistence.py +0 -0
  547. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_litellm_config.py +0 -0
  548. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_litellm_hardening.py +0 -0
  549. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_litellm_logging.py +0 -0
  550. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_litellm_model_via_env_generic.py +0 -0
  551. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_litellm_reasoning_passthrough.py +0 -0
  552. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_litellm_runtime.py +0 -0
  553. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_litellm_smoke.py +0 -0
  554. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_live_llm_trajectory.py +0 -0
  555. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_llm_judge.py +0 -0
  556. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_llm_judge_event_tags.py +0 -0
  557. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_llm_judge_verifier.py +0 -0
  558. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_loop_strategies.py +0 -0
  559. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_loop_summary.py +0 -0
  560. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_loop_sweep.py +0 -0
  561. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_memory_scorer.py +0 -0
  562. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_metrics.py +0 -0
  563. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_mle_bench_adapter.py +0 -0
  564. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_mock_openai_responses_server.py +0 -0
  565. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_monitor_scaffold.py +0 -0
  566. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_native_acp_usage.py +0 -0
  567. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_no_cross_provider_fallback.py +0 -0
  568. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_notification_order_real.py +0 -0
  569. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_opencode_family_proxy_tracking.py +0 -0
  570. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_oracle.py +0 -0
  571. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_oracle_chokepoint.py +0 -0
  572. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_paths_safe.py +0 -0
  573. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_paths_symlink_helpers.py +0 -0
  574. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_pi_acp_launcher.py +0 -0
  575. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_pi_acp_proxy_routing.py +0 -0
  576. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_process.py +0 -0
  577. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_project_skills_layout.py +0 -0
  578. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_provider_auth_detection.py +0 -0
  579. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_providers.py +0 -0
  580. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_reexport.py +0 -0
  581. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_registry_invariants.py +0 -0
  582. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_release_hardening_r5.py +0 -0
  583. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_release_version.py +0 -0
  584. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_release_workflow_wiring.py +0 -0
  585. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_resolve_env_helpers.py +0 -0
  586. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_review_boundaries.py +0 -0
  587. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_review_rubric.py +0 -0
  588. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_review_runtime.py +0 -0
  589. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_reward_lenient.py +0 -0
  590. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_reward_node.py +0 -0
  591. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_reward_range.py +0 -0
  592. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_reward_unified_contract.py +0 -0
  593. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_rewards.py +0 -0
  594. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_rewards_jsonl.py +0 -0
  595. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_rollout_architecture.py +0 -0
  596. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_rollout_branch.py +0 -0
  597. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_rollout_config_path_coercion.py +0 -0
  598. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_rollout_environment.py +0 -0
  599. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_rollout_hard_deadline.py +0 -0
  600. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_rollout_import_no_side_effects.py +0 -0
  601. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_rollout_on_ask_user_wiring.py +0 -0
  602. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_rollout_planes_contract.py +0 -0
  603. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_rollout_probe_sandbox_health.py +0 -0
  604. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_rollout_session_factory_dispatch.py +0 -0
  605. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_rollout_setup_commands.py +0 -0
  606. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_rollout_upload.py +0 -0
  607. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_rubric_checks.py +0 -0
  608. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_rubric_config.py +0 -0
  609. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_runtime.py +0 -0
  610. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_runtime_capabilities.py +0 -0
  611. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_runtime_config_wired.py +0 -0
  612. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_runtime_live_sandbox.py +0 -0
  613. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_sandbox.py +0 -0
  614. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_sandbox_exec_secret_handling.py +0 -0
  615. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_sandbox_hardening.py +0 -0
  616. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_sandbox_isolation_copy_traversal.py +0 -0
  617. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_sandbox_live_process.py +0 -0
  618. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_sandbox_multi_service.py +0 -0
  619. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_sandbox_prebuilt_validation.py +0 -0
  620. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_sandbox_protocol.py +0 -0
  621. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_sandbox_provider_registry_drift.py +0 -0
  622. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_sandbox_setup.py +0 -0
  623. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_sandbox_snapshot_contract.py +0 -0
  624. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_sandbox_upload_symlink.py +0 -0
  625. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_sandbox_verifier_workspace.py +0 -0
  626. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_scene.py +0 -0
  627. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_scene_outbox_trial.py +0 -0
  628. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_scene_parallel_group.py +0 -0
  629. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_scene_result_aggregation.py +0 -0
  630. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_sdk_internals.py +0 -0
  631. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_sdk_lockdown.py +0 -0
  632. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_sdk_run_alias.py +0 -0
  633. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_sealed_channel_container.py +0 -0
  634. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_self_gen_cli.py +0 -0
  635. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_self_gen_export_error_channel.py +0 -0
  636. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_self_gen_export_failures.py +0 -0
  637. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_self_gen_orchestration.py +0 -0
  638. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_session_factory_runtime.py +0 -0
  639. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_session_request_permission_dispatch.py +0 -0
  640. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_skill_eval.py +0 -0
  641. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_skill_eval_dryrun.py +0 -0
  642. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_skill_eval_integration.py +0 -0
  643. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_skill_eval_sweep.py +0 -0
  644. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_skill_eval_traversal.py +0 -0
  645. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_skill_invocation_artifacts.py +0 -0
  646. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_skill_policy.py +0 -0
  647. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_skills.py +0 -0
  648. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_skills_dir_agent_home_link.py +0 -0
  649. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_skillsbench_conversion_conformance.py +0 -0
  650. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_skillsbench_harbor_run_suite.py +0 -0
  651. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_smoke.py +0 -0
  652. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_smoke_wiring.py +0 -0
  653. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_source_adapters.py +0 -0
  654. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_subscription_auth.py +0 -0
  655. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_task_check_eval_consistency.py +0 -0
  656. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_task_config.py +0 -0
  657. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_task_digest.py +0 -0
  658. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_task_document.py +0 -0
  659. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_task_download.py +0 -0
  660. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_task_export.py +0 -0
  661. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_task_output_format.py +0 -0
  662. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_task_package.py +0 -0
  663. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_task_runtime_primitive.py +0 -0
  664. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_tasks.py +0 -0
  665. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_token_usage_normalization.py +0 -0
  666. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_trace_import_cli.py +0 -0
  667. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_trace_task_gen_traversal.py +0 -0
  668. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_trace_to_task_evidence.py +0 -0
  669. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_traces_huggingface.py +0 -0
  670. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_traces_parsers.py +0 -0
  671. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_traces_task_gen.py +0 -0
  672. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_train_cli.py +0 -0
  673. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_train_mode_artifact_emission.py +0 -0
  674. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_train_trl_cli.py +0 -0
  675. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_trajectory_integration.py +0 -0
  676. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_trajectory_streaming.py +0 -0
  677. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_trial_agent_timeout_verify.py +0 -0
  678. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_trial_install_agent_timeout.py +0 -0
  679. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_trial_litellm_runtime.py +0 -0
  680. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_trl_integration.py +0 -0
  681. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_usage_litellm.py +0 -0
  682. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_usage_required.py +0 -0
  683. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_usage_tracking.py +0 -0
  684. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_user.py +0 -0
  685. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_v06_guard_ports.py +0 -0
  686. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_verifier_document.py +0 -0
  687. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_verifier_multi_container.py +0 -0
  688. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_verifier_output.py +0 -0
  689. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_verifier_output_freshness.py +0 -0
  690. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_verifier_strategies.py +0 -0
  691. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_verifier_wedge_retry.py +0 -0
  692. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_verify.py +0 -0
  693. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_workflow_action_pinning.py +0 -0
  694. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_yaml_config.py +0 -0
  695. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/trajectories/__init__.py +0 -0
  696. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/trajectories/test_export.py +0 -0
  697. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/trajectories/test_export_adp.py +0 -0
  698. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/trajectories/test_export_atif.py +0 -0
  699. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/trajectories/test_export_common.py +0 -0
  700. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/trajectories/test_export_nan_handling.py +0 -0
  701. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/trajectories/test_export_prime_sft.py +0 -0
  702. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/trajectories/test_redaction.py +0 -0
  703. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/trajectories/test_step_granularity.py +0 -0
  704. {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/trajectories/test_tree.py +0 -0
@@ -3,6 +3,14 @@
3
3
  ## [Unreleased]
4
4
 
5
5
  ### Added
6
+ - **Built-in environment registry.** The committed env-axis pins
7
+ (`env0@prod`, `env0@outage`) moved from `benchmarks/_environments/` into
8
+ the package (`benchflow/environment/_registry/`) and ship inside the
9
+ wheel, so `--environment-manifest env0@prod` resolves on a bare
10
+ `pip install benchflow` with no checkout and no env vars.
11
+ `$BENCHFLOW_ENV_REGISTRY`, when set, still wins entirely; resolution
12
+ stays content-addressed (sha256 logged), and unknown names now error
13
+ listing the available specs.
6
14
  - **Console progress heartbeat.** Single-concurrency eval runs print a
7
15
  throttled progress line (`… 6.2min, 12 tool calls (last: …)`) about every
8
16
  45 seconds while the agent works, so a long prompt is distinguishable from
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: benchflow
3
- Version: 0.6.7.dev1833
3
+ Version: 0.6.7.dev1839
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.dev1833"
3
+ version = "0.6.7.dev1839"
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"
@@ -8,11 +8,22 @@ Lee's ``S`` axis in ``I_eval = {T, A, M, S, C, R, τ}`` — from the task, so it
8
8
  swappable per run exactly like ``--agent`` / ``--model`` / ``--sandbox`` already
9
9
  are, instead of being pinned by a relative path baked into the task file.
10
10
 
11
- Registry layout (filesystem; ``$BENCHFLOW_ENV_REGISTRY``)::
11
+ Registry layout (a directory of manifest files)::
12
12
 
13
13
  <registry>/<name>@<version>.toml # a pinned environment version
14
14
  <registry>/<name>.toml # optional default ("latest")
15
15
 
16
+ Which directory is the registry:
17
+
18
+ 1. an explicit ``registry=`` argument (tests, embedders);
19
+ 2. else ``$BENCHFLOW_ENV_REGISTRY`` — when set it wins entirely (no fallback
20
+ into the built-in registry for names it does not contain); an empty value
21
+ counts as unset;
22
+ 3. else the **built-in registry** shipped inside the ``benchflow`` wheel
23
+ (``benchflow/environment/_registry/``), so a bare ``pip install benchflow``
24
+ resolves the committed pins (``env0@prod``, ``env0@outage``) with no
25
+ checkout and no env vars.
26
+
16
27
  Resolution::
17
28
 
18
29
  env0 -> <registry>/env0.toml (default) else newest @version
@@ -80,21 +91,49 @@ def looks_like_env_spec(value: str) -> bool:
80
91
  return bool(_SPEC_RE.match(value))
81
92
 
82
93
 
94
+ def _builtin_registry_dir() -> Path | None:
95
+ """Directory of the pinned manifests shipped inside the ``benchflow`` wheel.
96
+
97
+ ``benchflow/environment/_registry/`` is package data, so a bare
98
+ ``pip install benchflow`` carries the committed pins. Path(__file__)-relative
99
+ like every other package-data lookup in the repo (compose files, default
100
+ rubric, demo task) — zip imports are unsupported package-wide. Returns
101
+ ``None`` when the packaged registry is missing (a stripped install).
102
+ """
103
+ directory = Path(__file__).resolve().parents[1] / "environment" / "_registry"
104
+ return directory if directory.is_dir() else None
105
+
106
+
83
107
  def _registry_dir(registry: str | os.PathLike[str] | None) -> Path:
84
- raw = registry if registry is not None else os.environ.get(ENV_REGISTRY_VAR)
85
- if not raw:
108
+ if registry is not None:
109
+ raw: str | os.PathLike[str] | None = registry
110
+ source = "the registry= argument"
111
+ else:
112
+ raw = os.environ.get(ENV_REGISTRY_VAR)
113
+ source = f"${ENV_REGISTRY_VAR}"
114
+ if not raw: # unset or empty — empty counts as unset
115
+ builtin = _builtin_registry_dir()
116
+ if builtin is not None:
117
+ return builtin
86
118
  raise EnvironmentRegistryError(
87
- f"no environment registry configured; set ${ENV_REGISTRY_VAR} or pass "
88
- "--environment-manifest a manifest file path instead of a name@version spec"
119
+ "no environment registry available: the built-in registry shipped "
120
+ f"with benchflow is missing and ${ENV_REGISTRY_VAR} is unset; set "
121
+ f"${ENV_REGISTRY_VAR} or pass --environment-manifest a manifest "
122
+ "file path instead of a name@version spec"
89
123
  )
90
124
  directory = Path(raw).expanduser()
91
125
  if not directory.is_dir():
92
126
  raise EnvironmentRegistryError(
93
- f"environment registry {directory} is not a directory"
127
+ f"environment registry {directory} (from {source}) is not a directory"
94
128
  )
95
129
  return directory
96
130
 
97
131
 
132
+ def _available_specs(directory: Path) -> list[str]:
133
+ """Sorted stems (``name`` / ``name@version``) present in the registry."""
134
+ return sorted({p.stem for ext in _MANIFEST_EXTS for p in directory.glob(f"*{ext}")})
135
+
136
+
98
137
  def _find_manifest(directory: Path, stem: str) -> Path | None:
99
138
  """Return ``directory/stem.<ext>`` for the first existing manifest extension."""
100
139
  for ext in _MANIFEST_EXTS:
@@ -124,9 +163,11 @@ def resolve_environment(
124
163
  if version is not None:
125
164
  path = _find_manifest(directory, f"{name}@{version}")
126
165
  if path is None:
166
+ available = ", ".join(_available_specs(directory)) or "none"
127
167
  raise EnvironmentRegistryError(
128
168
  f"environment {spec!r} not found in {directory} "
129
- f"(looked for {name}@{version}{{.toml,.yaml,.yml}})"
169
+ f"(looked for {name}@{version}{{.toml,.yaml,.yml}}; "
170
+ f"available: {available})"
130
171
  )
131
172
  else:
132
173
  path = _find_manifest(directory, name)
@@ -137,8 +178,10 @@ def resolve_environment(
137
178
  p for ext in _MANIFEST_EXTS for p in directory.glob(f"{name}@*{ext}")
138
179
  )
139
180
  if not candidates:
181
+ available = ", ".join(_available_specs(directory)) or "none"
140
182
  raise EnvironmentRegistryError(
141
- f"no versions of environment {name!r} found in {directory}"
183
+ f"no versions of environment {name!r} found in {directory} "
184
+ f"(available: {available})"
142
185
  )
143
186
  path = candidates[-1]
144
187
  version = path.stem.split("@", 1)[1]
@@ -1,5 +1,6 @@
1
1
  """Pure scoring and classification helpers — no external dependencies."""
2
2
 
3
+ import math
3
4
  from collections.abc import Iterable, Mapping
4
5
  from typing import Any, Literal
5
6
 
@@ -343,6 +344,26 @@ def count_result_outcomes(results: Iterable[Mapping[str, Any]]) -> dict[str, int
343
344
  return count_audit_outcomes(results)
344
345
 
345
346
 
347
+ def mean_scored_reward(results: Iterable[Mapping[str, Any]]) -> float | None:
348
+ """Mean reward over scored rollouts, or None when nothing scored.
349
+
350
+ A rollout is scored when ``rewards.reward`` is a finite numeric value.
351
+ Bools are excluded — ``classify_result`` treats a persisted ``true`` as a
352
+ pass (``True == 1``), but a bool is not a reward magnitude — and so are
353
+ non-finite values, which the resume path can feed in unvalidated (Python's
354
+ ``json`` round-trips NaN). Errored rollouts (reward None) are excluded,
355
+ not zeroed: a mean diluted by infra errors would misread as capability.
356
+ """
357
+ scored = [
358
+ rw
359
+ for r in results
360
+ if isinstance(rw := extract_reward(r), (int, float))
361
+ and not isinstance(rw, bool)
362
+ and math.isfinite(rw)
363
+ ]
364
+ return sum(scored) / len(scored) if scored else None
365
+
366
+
346
367
  def pass_rate(*, passed: int, total: int) -> float:
347
368
  """Pass rate over all tasks."""
348
369
  return passed / total if total > 0 else 0.0
@@ -189,9 +189,14 @@ def _report_eval_result(result: EvaluationResult, job_dir: Path | None = None) -
189
189
  err_part = f", [red]{detail}[/red]"
190
190
  else:
191
191
  err_part = ", errors=0"
192
+ # Mean reward alongside the binarized counts: pass/fail thresholds at
193
+ # reward==1, so "0/1" alone can't distinguish 0.3 partial credit from a
194
+ # flat 0. getattr(): sharded aggregation and older callers don't carry it.
195
+ mean_reward = getattr(result, "mean_reward", None)
196
+ mean_part = f", mean reward {mean_reward:.2f}" if mean_reward is not None else ""
192
197
  console.print(
193
198
  f"\n[{style}]{mark} Score: {result.passed}/{result.total} "
194
- f"({result.score:.1%})[/{style}]{err_part}"
199
+ f"({result.score:.1%})[/{style}]{mean_part}{err_part}"
195
200
  )
196
201
  # One dim reason line per FAILED task, so "0/1" doesn't force a dig into
197
202
  # summary.json to learn why. getattr(): sharded aggregation and older
@@ -297,10 +297,11 @@ def eval_run(
297
297
  "--environment-manifest",
298
298
  help=(
299
299
  "Environment-plane manifest applied to every rollout: a path to "
300
- "an environment.toml, OR a 'name@version' registry spec resolved "
301
- "via $BENCHFLOW_ENV_REGISTRY (the S axis). The manifest-declared "
302
- "stateful environment is provisioned, gated on readiness, and "
303
- "torn down."
300
+ "an environment.toml, OR a 'name@version' registry spec (the S "
301
+ "axis) resolved via $BENCHFLOW_ENV_REGISTRY when set, else the "
302
+ "built-in registry shipped with benchflow (env0@prod, "
303
+ "env0@outage). The manifest-declared stateful environment is "
304
+ "provisioned, gated on readiness, and torn down."
304
305
  ),
305
306
  ),
306
307
  ] = None,
@@ -0,0 +1,63 @@
1
+ # env0@outage — env-0 with the gmail + slack services removed.
2
+ #
3
+ # A perturbation variant for the "Same state, tool outage" experiment: bind the
4
+ # SAME task to env0@prod vs env0@outage and attribute the reward delta to the
5
+ # environment alone (the S axis). A task that needs slack (port 9005) scores 1.0
6
+ # under env0@prod and fails under env0@outage because the service is absent.
7
+ #
8
+ # Shipped inside the benchflow wheel (benchflow/environment/_registry/), so it
9
+ # resolves on a bare pip install with no $BENCHFLOW_ENV_REGISTRY set:
10
+ #
11
+ # bench eval create --tasks-dir <task> --environment-manifest env0@outage ...
12
+
13
+ [environment]
14
+ name = "env-0"
15
+ base_image = "xdotli/env0-base:latest"
16
+ owns_lifecycle = false
17
+ isolation = "per_task"
18
+
19
+ [environment.task_selection]
20
+ mechanism = "image"
21
+
22
+ [environment.readiness]
23
+ timeout_sec = 60
24
+
25
+ # Services below are copied VERBATIM from the upstream env-0.toml pin
26
+ # (2026-08-09 sync). The previous pin had drifted: bare CLI names
27
+ # (auth/gmail/...) that do not exist in ghcr.io/benchflow-ai/env0:0.2.0
28
+ # images (which ship mock-auth/mock-gmail/... console scripts), plus a
29
+ # phantom slack service and shifted ports — so ManifestEnvironment
30
+ # probed, found ZERO startable services, and readiness passed vacuously
31
+ # while every rollout died at the verifier with connection-refused.
32
+
33
+ [[environment.services]]
34
+ name = "mock-auth"
35
+ command = "mock-auth --db /data/auth.db serve --host 0.0.0.0 --port 9000 --no-mcp"
36
+ port = 9000
37
+
38
+
39
+ [[environment.services]]
40
+ name = "mock-gcal"
41
+ command = "mock-gcal --db /data/gcal.db serve --host 0.0.0.0 --port 9002 --no-mcp"
42
+ port = 9002
43
+
44
+ [[environment.services]]
45
+ name = "mock-gdrive"
46
+ command = "mock-gdrive --db /data/gdrive.db serve --host 0.0.0.0 --port 9003 --no-mcp"
47
+ port = 9003
48
+
49
+ [[environment.services]]
50
+ name = "mock-gdoc"
51
+ command = "mock-gdoc --db /data/gdoc.db serve --host 0.0.0.0 --port 9004 --no-mcp"
52
+ port = 9004
53
+
54
+
55
+ [[environment.services]]
56
+ name = "mock-discord"
57
+ command = "mock-discord --db /data/discord.db serve --host 0.0.0.0 --port 9006 --no-mcp"
58
+ port = 9006
59
+
60
+ [[environment.services]]
61
+ name = "mock-stripe"
62
+ command = "mock-stripe --db /data/stripe.db serve --host 0.0.0.0 --port 9007 --no-mcp"
63
+ port = 9007
@@ -0,0 +1,77 @@
1
+ # env0@prod — pinned, content-addressed Environment-plane manifest for env-0.
2
+ #
3
+ # This is a built-in registry entry, shipped inside the benchflow wheel
4
+ # (benchflow/environment/_registry/) so PR #790's env-axis pin resolves on a
5
+ # bare pip install — no checkout, no env vars:
6
+ #
7
+ # bench eval create --tasks-dir <env0 tasks> --environment-manifest env0@prod ...
8
+ #
9
+ # Set $BENCHFLOW_ENV_REGISTRY to a local directory of name@version.toml files
10
+ # to override the built-in registry entirely.
11
+ #
12
+ # Mirrors benchflow-ai/env0 tasks/_manifests/env-0.toml (the source of truth). env-0's per-task images build
13
+ # FROM the shared base and bake seed data; benchflow's ManifestEnvironment
14
+ # probes each service's CLI and starts only the ones installed in the per-task
15
+ # image, gating the agent on each service's /health.
16
+ #
17
+ # NOTE: xdotli/env0-base:latest is amd64-only — run env0 on Daytona (x86_64).
18
+
19
+ [environment]
20
+ name = "env-0"
21
+ base_image = "xdotli/env0-base:latest"
22
+ owns_lifecycle = false
23
+ isolation = "per_task"
24
+
25
+ [environment.task_selection]
26
+ mechanism = "image"
27
+
28
+ [environment.readiness]
29
+ timeout_sec = 60
30
+
31
+ # Services below are copied VERBATIM from the upstream env-0.toml pin
32
+ # (2026-08-09 sync). The previous pin had drifted: bare CLI names
33
+ # (auth/gmail/...) that do not exist in ghcr.io/benchflow-ai/env0:0.2.0
34
+ # images (which ship mock-auth/mock-gmail/... console scripts), plus a
35
+ # phantom slack service and shifted ports — so ManifestEnvironment
36
+ # probed, found ZERO startable services, and readiness passed vacuously
37
+ # while every rollout died at the verifier with connection-refused.
38
+
39
+ [[environment.services]]
40
+ name = "mock-auth"
41
+ command = "mock-auth --db /data/auth.db serve --host 0.0.0.0 --port 9000 --no-mcp"
42
+ port = 9000
43
+
44
+ [[environment.services]]
45
+ name = "mock-gmail"
46
+ command = "mock-gmail --db /data/gmail.db serve --host 0.0.0.0 --port 9001 --no-mcp"
47
+ port = 9001
48
+
49
+ [[environment.services]]
50
+ name = "mock-gcal"
51
+ command = "mock-gcal --db /data/gcal.db serve --host 0.0.0.0 --port 9002 --no-mcp"
52
+ port = 9002
53
+
54
+ [[environment.services]]
55
+ name = "mock-gdrive"
56
+ command = "mock-gdrive --db /data/gdrive.db serve --host 0.0.0.0 --port 9003 --no-mcp"
57
+ port = 9003
58
+
59
+ [[environment.services]]
60
+ name = "mock-gdoc"
61
+ command = "mock-gdoc --db /data/gdoc.db serve --host 0.0.0.0 --port 9004 --no-mcp"
62
+ port = 9004
63
+
64
+ [[environment.services]]
65
+ name = "mock-slack"
66
+ command = "mock-slack --db /data/slack.db serve --host 0.0.0.0 --port 9005 --no-mcp"
67
+ port = 9005
68
+
69
+ [[environment.services]]
70
+ name = "mock-discord"
71
+ command = "mock-discord --db /data/discord.db serve --host 0.0.0.0 --port 9006 --no-mcp"
72
+ port = 9006
73
+
74
+ [[environment.services]]
75
+ name = "mock-stripe"
76
+ command = "mock-stripe --db /data/stripe.db serve --host 0.0.0.0 --port 9007 --no-mcp"
77
+ port = 9007
@@ -205,7 +205,9 @@ def load_manifest(path: str | Path) -> EnvironmentManifest:
205
205
  """Load and validate an environment manifest.
206
206
 
207
207
  ``path`` is either a TOML file path (the historical behavior) or a registry
208
- spec ``name@version`` resolved via ``$BENCHFLOW_ENV_REGISTRY``. The spec form
208
+ spec ``name@version`` resolved via ``$BENCHFLOW_ENV_REGISTRY`` when set,
209
+ else the built-in registry shipped inside the wheel
210
+ (``benchflow/environment/_registry/``). The spec form
209
211
  lets a run bind its environment (the ``S`` axis) by name at the command line —
210
212
  decoupled from the task and swappable per run, like ``--agent`` / ``--model``
211
213
  / ``--sandbox``. Resolution is content-addressed so the bound world is
@@ -64,6 +64,7 @@ from benchflow._utils.scoring import (
64
64
  classify_verifier_error,
65
65
  count_audit_outcomes,
66
66
  count_score_outcomes,
67
+ mean_scored_reward,
67
68
  pass_rate,
68
69
  pass_rate_excl_errors,
69
70
  )
@@ -609,6 +610,10 @@ class EvaluationResult:
609
610
  memory_score: float | None = None
610
611
  memory_scores: dict[str, float] = field(default_factory=dict)
611
612
  task_failures: list[TaskFailure] = field(default_factory=list)
613
+ # Mean of rewards over scored rollouts (None when nothing scored). The
614
+ # pass/fail counts binarize at reward==1, which erases partial credit —
615
+ # a 0.3 rubric score and a flat 0 both print as FAIL without this.
616
+ mean_reward: float | None = None
612
617
 
613
618
  @property
614
619
  def score(self) -> float:
@@ -1391,7 +1396,16 @@ class Evaluation:
1391
1396
  status = "PASS" if reward == 1 else ("FAIL" if reward is not None else "ERR")
1392
1397
  err_msg = result.error or result.verifier_error
1393
1398
  err = f" ({truncate_end(err_msg, 50)})" if err_msg else ""
1394
- logger.info(f"[{status}] {td.name} (tools={result.n_tool_calls}){err}")
1399
+ # Show the fractional reward on scored lines: pass/fail binarizes at
1400
+ # reward==1, so without it a 0.3 rubric score reads as a flat 0.
1401
+ reward_part = (
1402
+ f"reward={reward:.2f}, "
1403
+ if isinstance(reward, (int, float)) and not isinstance(reward, bool)
1404
+ else ""
1405
+ )
1406
+ logger.info(
1407
+ f"[{status}] {td.name} ({reward_part}tools={result.n_tool_calls}){err}"
1408
+ )
1395
1409
  self._fire_progress(self._on_result, td.name, result)
1396
1410
 
1397
1411
  async def _run_parallel_independent(
@@ -1828,6 +1842,7 @@ class Evaluation:
1828
1842
  memory_score=memory["avg_score"],
1829
1843
  memory_scores=memory_scores,
1830
1844
  task_failures=task_failures,
1845
+ mean_reward=mean_scored_reward(all_results.values()),
1831
1846
  )
1832
1847
 
1833
1848
  assert (
@@ -1885,6 +1900,7 @@ class Evaluation:
1885
1900
  "score_excl_errors_ratio": pass_rate_excl_errors(
1886
1901
  passed=audit_counts["passed"], failed=audit_counts["failed"]
1887
1902
  ),
1903
+ "mean_reward": job_result.mean_reward,
1888
1904
  "elapsed_sec": elapsed,
1889
1905
  "memory_score": job_result.memory_score,
1890
1906
  "memory_score_coverage": (
@@ -1984,9 +2000,14 @@ class Evaluation:
1984
2000
  "This likely indicates a systemic verifier bug, not agent failure."
1985
2001
  )
1986
2002
 
2003
+ mean_part = (
2004
+ f"mean_reward={job_result.mean_reward:.2f}, "
2005
+ if job_result.mean_reward is not None
2006
+ else ""
2007
+ )
1987
2008
  logger.info(
1988
2009
  f"Job complete: {job_result.passed}/{job_result.total} "
1989
- f"({job_result.score:.1%}), errors={job_result.errored}, "
2010
+ f"({job_result.score:.1%}), {mean_part}errors={job_result.errored}, "
1990
2011
  f"idle_timeouts={error_category_counts.get(IDLE_TIMEOUT, 0)}, "
1991
2012
  f"time={elapsed / 60:.1f}min"
1992
2013
  )
@@ -354,6 +354,42 @@ def _failed_result(task_failures):
354
354
  )
355
355
 
356
356
 
357
+ def test_report_eval_result_shows_mean_reward():
358
+ # Partial credit must be visible next to the binarized counts: pass/fail
359
+ # thresholds at reward==1, so "0/1 (0.0%)" alone can't distinguish a 0.3
360
+ # rubric score from a flat 0.
361
+ out = _reported(
362
+ SimpleNamespace(
363
+ passed=0,
364
+ total=1,
365
+ errored=0,
366
+ verifier_errored=0,
367
+ score=0.0,
368
+ job_name="j",
369
+ mean_reward=0.3,
370
+ )
371
+ )
372
+ assert "Score: 0/1" in out
373
+ assert "mean reward 0.30" in out
374
+
375
+
376
+ def test_report_eval_result_omits_mean_reward_when_unavailable():
377
+ # Sharded aggregation and older callers don't carry mean_reward — the line
378
+ # must render without it rather than showing a misleading 0.00.
379
+ out = _reported(
380
+ SimpleNamespace(
381
+ passed=0,
382
+ total=1,
383
+ errored=1,
384
+ verifier_errored=0,
385
+ score=0.0,
386
+ job_name="j",
387
+ )
388
+ )
389
+ assert "Score: 0/1" in out
390
+ assert "mean reward" not in out
391
+
392
+
357
393
  def test_report_eval_result_prints_failure_reason_lines():
358
394
  # Dogfood follow-up: "✗ Score: 0/1" alone forces a dig into summary.json.
359
395
  # Each FAILED task gets one dim reason line — verifier_error first, else a
@@ -80,12 +80,127 @@ def test_resolve_invalid_spec_errors(tmp_path):
80
80
  resolve_environment("bad/spec@x", registry=tmp_path)
81
81
 
82
82
 
83
- def test_resolve_no_registry_configured_errors(tmp_path, monkeypatch):
83
+ def test_resolve_no_registry_available_errors(tmp_path, monkeypatch):
84
+ """Env var unset AND built-in registry missing → actionable error."""
85
+ import benchflow._utils.env_registry as env_registry
86
+
84
87
  monkeypatch.delenv("BENCHFLOW_ENV_REGISTRY", raising=False)
88
+ monkeypatch.setattr(env_registry, "_builtin_registry_dir", lambda: None)
85
89
  with pytest.raises(EnvironmentRegistryError, match="no environment registry"):
86
90
  resolve_environment("env0")
87
91
 
88
92
 
93
+ # ---- built-in registry (shipped inside the wheel) ---------------------------
94
+
95
+
96
+ def test_builtin_registry_resolves_env0_prod_when_env_unset(monkeypatch):
97
+ """The acceptance contract: a bare pip install resolves ``env0@prod`` with
98
+ no ``$BENCHFLOW_ENV_REGISTRY`` set — the pins ship inside the package."""
99
+ monkeypatch.delenv("BENCHFLOW_ENV_REGISTRY", raising=False)
100
+ r = resolve_environment("env0@prod")
101
+ assert (r.name, r.version) == ("env0", "prod")
102
+ assert r.manifest_path.name == "env0@prod.toml"
103
+ assert r.env_hash.startswith("sha256:")
104
+
105
+
106
+ def test_builtin_registry_resolves_env0_outage_when_env_unset(monkeypatch):
107
+ monkeypatch.delenv("BENCHFLOW_ENV_REGISTRY", raising=False)
108
+ r = resolve_environment("env0@outage")
109
+ assert (r.name, r.version) == ("env0", "outage")
110
+
111
+
112
+ def test_builtin_registry_manifests_are_importlib_resources(monkeypatch):
113
+ """The pins are package data: importlib.resources must find them (that is
114
+ what makes them ship in the wheel) and they must parse as manifests."""
115
+ import importlib.resources
116
+
117
+ root = importlib.resources.files("benchflow.environment") / "_registry"
118
+ names = {entry.name for entry in root.iterdir()}
119
+ assert {"env0@prod.toml", "env0@outage.toml"} <= names
120
+
121
+ monkeypatch.delenv("BENCHFLOW_ENV_REGISTRY", raising=False)
122
+ m = load_manifest("env0@prod")
123
+ assert {s.name for s in m.services} >= {"mock-gmail", "mock-slack"}
124
+ outage = load_manifest("env0@outage")
125
+ assert "mock-gmail" not in {s.name for s in outage.services}
126
+
127
+
128
+ def test_env_var_registry_wins_over_builtin(tmp_path, monkeypatch):
129
+ """When set, ``$BENCHFLOW_ENV_REGISTRY`` is the registry — the same spec
130
+ resolves from it, not from the built-in pins."""
131
+ _write_env(tmp_path, "env0@prod", base_image="img:override")
132
+ monkeypatch.setenv("BENCHFLOW_ENV_REGISTRY", str(tmp_path))
133
+ r = resolve_environment("env0@prod")
134
+ assert r.manifest_path.parent == tmp_path
135
+ assert load_manifest("env0@prod").base_image == "img:override"
136
+
137
+
138
+ def test_env_var_registry_wins_entirely_no_builtin_fallback(tmp_path, monkeypatch):
139
+ """A name the env-var registry lacks does NOT fall back to the built-in."""
140
+ monkeypatch.setenv("BENCHFLOW_ENV_REGISTRY", str(tmp_path)) # empty dir
141
+ with pytest.raises(
142
+ EnvironmentRegistryError, match=r"not found in .*available: none"
143
+ ):
144
+ resolve_environment("env0@prod")
145
+
146
+
147
+ def test_explicit_registry_argument_beats_set_env_var(tmp_path, monkeypatch):
148
+ """Resolution order: an explicit ``registry=`` beats a SET env var."""
149
+ env_dir = tmp_path / "from-env"
150
+ arg_dir = tmp_path / "from-arg"
151
+ env_dir.mkdir()
152
+ arg_dir.mkdir()
153
+ _write_env(env_dir, "env0@v1", base_image="img:env")
154
+ _write_env(arg_dir, "env0@v1", base_image="img:arg")
155
+ monkeypatch.setenv("BENCHFLOW_ENV_REGISTRY", str(env_dir))
156
+ r = resolve_environment("env0@v1", registry=arg_dir)
157
+ assert r.manifest_path.parent == arg_dir
158
+
159
+
160
+ def test_empty_env_var_counts_as_unset(monkeypatch):
161
+ """``BENCHFLOW_ENV_REGISTRY=""`` resolves the built-in registry, exactly
162
+ like an unset var (empty counts as unset, pinned by the docstring)."""
163
+ monkeypatch.setenv("BENCHFLOW_ENV_REGISTRY", "")
164
+ r = resolve_environment("env0@prod")
165
+ assert (r.name, r.version) == ("env0", "prod")
166
+
167
+
168
+ def test_env_var_not_a_directory_error_names_the_env_var(tmp_path, monkeypatch):
169
+ monkeypatch.setenv("BENCHFLOW_ENV_REGISTRY", str(tmp_path / "nope"))
170
+ with pytest.raises(
171
+ EnvironmentRegistryError,
172
+ match=r"from \$BENCHFLOW_ENV_REGISTRY.*is not a directory",
173
+ ):
174
+ resolve_environment("env0@prod")
175
+
176
+
177
+ def test_registry_argument_not_a_directory_error_names_the_argument(tmp_path):
178
+ with pytest.raises(
179
+ EnvironmentRegistryError,
180
+ match=r"from the registry= argument.*is not a directory",
181
+ ):
182
+ resolve_environment("env0@prod", registry=tmp_path / "nope")
183
+
184
+
185
+ def test_builtin_unknown_name_error_lists_available(monkeypatch):
186
+ monkeypatch.delenv("BENCHFLOW_ENV_REGISTRY", raising=False)
187
+ with pytest.raises(
188
+ EnvironmentRegistryError, match=r"available:.*env0@outage.*env0@prod"
189
+ ):
190
+ resolve_environment("nope")
191
+
192
+
193
+ def test_builtin_resolution_logs_sha256(monkeypatch, caplog):
194
+ """Content-addressed provenance is preserved: resolving a built-in pin
195
+ logs the manifest's sha256 exactly like a ``$BENCHFLOW_ENV_REGISTRY`` one."""
196
+ import logging
197
+
198
+ monkeypatch.delenv("BENCHFLOW_ENV_REGISTRY", raising=False)
199
+ with caplog.at_level(logging.INFO, logger="benchflow.environment.manifest"):
200
+ load_manifest("env0@prod")
201
+ assert any("sha256:" in rec.getMessage() for rec in caplog.records)
202
+
203
+
89
204
  # ---- load_manifest dispatch (spec vs file) --------------------------------
90
205
 
91
206
 
@@ -656,6 +656,57 @@ class TestJobRunOrchestration:
656
656
  )
657
657
  ]
658
658
 
659
+ @pytest.mark.asyncio
660
+ async def test_run_computes_mean_reward_and_logs_fractional_rewards(
661
+ self, tmp_path, caplog
662
+ ):
663
+ """Partial credit must survive the binarized pass/fail view: run()
664
+ computes mean_reward over scored rollouts (errors excluded, not
665
+ zeroed), the per-task lines carry reward=, error lines don't, and the
666
+ job-complete line carries mean_reward=.
667
+ """
668
+ job = self._make_job(tmp_path, n_tasks=3, concurrency=1)
669
+ outcomes = {
670
+ "task-0": RunResult(task_name="task-0", rewards={"reward": 1.0}),
671
+ "task-1": RunResult(task_name="task-1", rewards={"reward": 0.3}),
672
+ "task-2": RunResult(task_name="task-2", error="agent crashed"),
673
+ }
674
+
675
+ async def fake_run(*, task_path, **kwargs):
676
+ return outcomes[task_path.name]
677
+
678
+ job._sdk = AsyncMock()
679
+ job._sdk.run = AsyncMock(side_effect=fake_run)
680
+
681
+ with caplog.at_level(logging.INFO, logger="benchflow.evaluation"):
682
+ result = await job.run()
683
+
684
+ assert result.mean_reward == pytest.approx(0.65)
685
+ assert "[PASS] task-0 (reward=1.00, tools=0)" in caplog.text
686
+ assert "[FAIL] task-1 (reward=0.30, tools=0)" in caplog.text
687
+ assert "[ERR] task-2 (tools=0)" in caplog.text
688
+ assert "mean_reward=0.65" in caplog.text
689
+ # The machine-readable surface must agree with the console.
690
+ summary = json.loads((job._jobs_dir / "summary.json").read_text())
691
+ assert summary["mean_reward"] == pytest.approx(0.65)
692
+
693
+ @pytest.mark.asyncio
694
+ async def test_run_mean_reward_none_when_nothing_scored(self, tmp_path, caplog):
695
+ """An all-error job has no scored rollouts: mean_reward must be None
696
+ and the job-complete line must omit the field (a fabricated 0.00 would
697
+ read as a real capability result)."""
698
+ job = self._make_job(tmp_path, n_tasks=1, concurrency=1)
699
+ job._sdk = AsyncMock()
700
+ job._sdk.run = AsyncMock(
701
+ return_value=RunResult(task_name="task-0", error="agent crashed")
702
+ )
703
+
704
+ with caplog.at_level(logging.INFO, logger="benchflow.evaluation"):
705
+ result = await job.run()
706
+
707
+ assert result.mean_reward is None
708
+ assert "mean_reward=" not in caplog.text
709
+
659
710
  @pytest.mark.asyncio
660
711
  async def test_error_and_verifier_error_does_not_crash_invariant(self, tmp_path):
661
712
  """A result with BOTH error and verifier_error (rewards=None) must not