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