benchflow 0.6.7.dev1845__tar.gz → 0.6.8__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 (714) hide show
  1. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/CHANGELOG.md +142 -1
  2. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/PKG-INFO +13 -2
  3. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/README.md +1 -0
  4. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/pyproject.toml +16 -1
  5. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/_utils/config_override.py +3 -2
  6. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/_utils/scoring.py +12 -1
  7. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/_utils/task_authoring/scaffolding.py +2 -2
  8. benchflow-0.6.8/src/benchflow/_utils/text.py +86 -0
  9. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/acp/container_transport.py +5 -0
  10. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/acp/runtime.py +1 -1
  11. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/adapters/_toolathlon.py +1 -1
  12. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/adapters/harbor.py +8 -6
  13. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/adapters/source.py +1 -1
  14. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/agents/openclaw_acp_shim.py +31 -0
  15. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/agents/registry.py +6 -6
  16. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/cli/_live_progress.py +9 -1
  17. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/cli/main.py +2 -0
  18. benchflow-0.6.8/src/benchflow/cli/traj.py +138 -0
  19. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/continue_run/orchestrator.py +2 -1
  20. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/demo_task/task.md +1 -1
  21. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/diagnostics.py +29 -0
  22. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/environment/_registry/env0@outage.toml +7 -8
  23. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/environment/_registry/env0@prod.toml +10 -14
  24. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/experimental/mcp/reviewer_server.py +1 -1
  25. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/providers/litellm_runtime.py +207 -20
  26. benchflow-0.6.8/src/benchflow/publish/azure_blob.py +142 -0
  27. benchflow-0.6.8/src/benchflow/publish/broker.py +193 -0
  28. benchflow-0.6.8/src/benchflow/publish/redact.py +209 -0
  29. benchflow-0.6.8/src/benchflow/publish/traj_capture.py +450 -0
  30. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/review/wrapper.py +1 -1
  31. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/rollout/__init__.py +28 -7
  32. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/rollout/_setup.py +4 -4
  33. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/sandbox/apple_container.py +1 -1
  34. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/sandbox/daytona.py +31 -27
  35. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/sandbox/daytona_pty.py +68 -0
  36. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/sandbox/daytona_strategies.py +3 -0
  37. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/sandbox/process/_base.py +56 -3
  38. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/sandbox/process/apple.py +3 -2
  39. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/sandbox/process/daytona.py +4 -3
  40. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/sandbox/process/docker.py +3 -3
  41. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/sandbox/setup.py +3 -3
  42. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/skill_eval/_core.py +7 -8
  43. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/skill_policy.py +2 -2
  44. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/task/__init__.py +2 -2
  45. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/task/_document_normalize.py +3 -3
  46. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/task/_document_parse.py +81 -6
  47. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/task/_document_profiles.py +2 -2
  48. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/task/acceptance_live_validation.py +2 -2
  49. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/task/config.py +144 -29
  50. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/task/document.py +1 -0
  51. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/task/export.py +22 -2
  52. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/task/imports.py +5 -2
  53. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/task/runtime_capabilities.py +15 -15
  54. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/traces/task_gen.py +1 -1
  55. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/trajectories/types.py +9 -2
  56. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/acceptance_live_harness.py +1 -1
  57. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/conformance/acp_smoke/task.md +1 -1
  58. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/examples/hello-world-task/task.md +1 -1
  59. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_acp.py +69 -2
  60. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_acp_mcp_servers.py +2 -2
  61. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_agentcore_sandbox.py +1 -3
  62. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_bare_model_provider.py +7 -0
  63. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_cli_live_progress.py +69 -0
  64. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_config_override.py +4 -3
  65. benchflow-0.6.8/tests/test_diagnostics.py +151 -0
  66. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_env_setup.py +3 -3
  67. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_environment_manifest_controls.py +4 -4
  68. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_inbound_adapters.py +2 -2
  69. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_internet_policy.py +8 -8
  70. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_job.py +17 -0
  71. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_litellm_runtime.py +41 -0
  72. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_live_llm_trajectory.py +226 -2
  73. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_mle_bench_adapter.py +1 -1
  74. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_process.py +65 -0
  75. benchflow-0.6.8/tests/test_publish_azure_blob.py +686 -0
  76. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_registry_invariants.py +5 -0
  77. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_release_workflow_wiring.py +24 -1
  78. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_rollout_setup_commands.py +3 -3
  79. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_rollout_upload.py +9 -9
  80. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_runtime_capabilities.py +9 -9
  81. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_skill_eval.py +3 -4
  82. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_skill_eval_integration.py +1 -1
  83. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_skill_eval_sweep.py +4 -4
  84. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_skill_policy.py +1 -1
  85. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_source_adapters.py +27 -29
  86. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_task_config.py +133 -19
  87. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_task_document.py +157 -24
  88. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_task_export.py +62 -8
  89. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_task_package.py +6 -6
  90. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_traces_task_gen.py +2 -2
  91. benchflow-0.6.8/tests/test_traj_upload_cli.py +301 -0
  92. benchflow-0.6.8/tests/test_trajectory_upload_service.py +1304 -0
  93. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_verifier_document.py +2 -2
  94. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_verify.py +1 -1
  95. benchflow-0.6.7.dev1845/src/benchflow/_utils/text.py +0 -37
  96. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/.gitignore +0 -0
  97. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/LICENSE +0 -0
  98. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/__init__.py +0 -0
  99. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/_dotenv.py +0 -0
  100. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/_paths.py +0 -0
  101. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/_run.py +0 -0
  102. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/_types.py +0 -0
  103. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/_utils/__init__.py +0 -0
  104. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/_utils/benchmark_repos.py +0 -0
  105. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/_utils/build_context_stage.py +0 -0
  106. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/_utils/config.py +0 -0
  107. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/_utils/content_address.py +0 -0
  108. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/_utils/dataset_registry.py +0 -0
  109. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/_utils/env_registry.py +0 -0
  110. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/_utils/evaluation_results.py +0 -0
  111. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/_utils/hf_datasets.py +0 -0
  112. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/_utils/json_safe.py +0 -0
  113. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/_utils/learner_memory.py +0 -0
  114. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/_utils/live_activity.py +0 -0
  115. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/_utils/result_metadata.py +0 -0
  116. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/_utils/reward_events.py +0 -0
  117. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/_utils/source_provenance.py +0 -0
  118. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/_utils/task_authoring/__init__.py +0 -0
  119. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/_utils/task_authoring/_evidence_paths.py +0 -0
  120. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/_utils/task_authoring/acceptance_evidence.py +0 -0
  121. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/_utils/task_authoring/structural_checks.py +0 -0
  122. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/_utils/yaml_loader.py +0 -0
  123. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/acp/__init__.py +0 -0
  124. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/acp/client.py +0 -0
  125. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/acp/selection.py +0 -0
  126. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/acp/session.py +0 -0
  127. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/acp/transport.py +0 -0
  128. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/acp/types.py +0 -0
  129. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/adapters/__init__.py +0 -0
  130. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/adapters/_toolathlon_container.py +0 -0
  131. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/adapters/_toolathlon_fake_mail.py +0 -0
  132. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/adapters/_toolathlon_poste_users.tsv +0 -0
  133. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/adapters/_toolathlon_services.py +0 -0
  134. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/adapters/inbound.py +0 -0
  135. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/adapters/inspect_ai.py +0 -0
  136. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/adapters/ors.py +0 -0
  137. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/adapters/resources/__init__.py +0 -0
  138. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/adapters/resources/mcp_atlas_bridge.py +0 -0
  139. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/adapters/resources/mcp_atlas_judge.py +0 -0
  140. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/agent_router.py +0 -0
  141. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/agent_router_guide.py +0 -0
  142. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/agent_router_parity.py +0 -0
  143. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/agent_router_scaffold.py +0 -0
  144. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/agents/__init__.py +0 -0
  145. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/agents/codex_config.py +0 -0
  146. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/agents/credentials.py +0 -0
  147. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/agents/deepagents_acp_shim.py +0 -0
  148. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/agents/env.py +0 -0
  149. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/agents/errors.py +0 -0
  150. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/agents/harvey_lab_acp_shim.py +0 -0
  151. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/agents/install.py +0 -0
  152. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/agents/manifest.py +0 -0
  153. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/agents/pi_acp_launcher.py +0 -0
  154. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/agents/protocol.py +0 -0
  155. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/agents/providers.py +0 -0
  156. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/agents/remote_manifests.py +0 -0
  157. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/branch.py +0 -0
  158. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/cli/__init__.py +0 -0
  159. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/cli/_failure_evidence.py +0 -0
  160. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/cli/_hosted_env.py +0 -0
  161. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/cli/_options.py +0 -0
  162. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/cli/_shared.py +0 -0
  163. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/cli/adopt.py +0 -0
  164. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/cli/agent.py +0 -0
  165. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/cli/continue_cmd.py +0 -0
  166. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/cli/environment.py +0 -0
  167. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/cli/eval_artifacts.py +0 -0
  168. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/cli/eval_lift.py +0 -0
  169. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/cli/hub.py +0 -0
  170. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/cli/monitor.py +0 -0
  171. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/cli/review.py +0 -0
  172. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/cli/sandbox.py +0 -0
  173. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/cli/skills.py +0 -0
  174. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/cli/tasks.py +0 -0
  175. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/cli/trace_import.py +0 -0
  176. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/cli/train.py +0 -0
  177. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/continue_run/__init__.py +0 -0
  178. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/continue_run/batch.py +0 -0
  179. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/continue_run/replay_proxy.py +0 -0
  180. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/continue_run/run_folder.py +0 -0
  181. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/continue_run/sandbox_proxy.py +0 -0
  182. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/contracts/__init__.py +0 -0
  183. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/contracts/planes.py +0 -0
  184. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/contracts/user.py +0 -0
  185. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/demo_task/environment/Dockerfile +0 -0
  186. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/demo_task/instruction.md +0 -0
  187. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/demo_task/task.toml +0 -0
  188. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/demo_task/tests/test.sh +0 -0
  189. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/environment/__init__.py +0 -0
  190. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/environment/manifest.py +0 -0
  191. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/environment/manifest_env.py +0 -0
  192. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/environment/protocol.py +0 -0
  193. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/environment/readiness.py +0 -0
  194. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/eval_artifacts.py +0 -0
  195. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/eval_lift.py +0 -0
  196. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/eval_plan.py +0 -0
  197. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/eval_sharding.py +0 -0
  198. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/eval_worker.py +0 -0
  199. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/evaluation.py +0 -0
  200. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/experimental/__init__.py +0 -0
  201. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/experimental/mcp/__init__.py +0 -0
  202. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/experimental/mcp/hooks.py +0 -0
  203. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/hosted_env.py +0 -0
  204. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/hub/__init__.py +0 -0
  205. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/hub/harbor_registry.py +0 -0
  206. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/integrations/__init__.py +0 -0
  207. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/integrations/trl/__init__.py +0 -0
  208. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/integrations/trl/spec.py +0 -0
  209. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/learner_skills.py +0 -0
  210. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/learner_store.py +0 -0
  211. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/loop_strategies.py +0 -0
  212. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/loop_sweep.py +0 -0
  213. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/metrics.py +0 -0
  214. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/models.py +0 -0
  215. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/monitor.py +0 -0
  216. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/providers/__init__.py +0 -0
  217. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/providers/litellm_bedrock_patch.py +0 -0
  218. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/providers/litellm_bedrock_preflight.py +0 -0
  219. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/providers/litellm_config.py +0 -0
  220. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/providers/litellm_logging.py +0 -0
  221. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/providers/runtime.py +0 -0
  222. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/publish/__init__.py +0 -0
  223. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/publish/huggingface.py +0 -0
  224. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/py.typed +0 -0
  225. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/review/__init__.py +0 -0
  226. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/review/config.py +0 -0
  227. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/review/default-rubric.json +0 -0
  228. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/review/prompts.py +0 -0
  229. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/review/runner.py +0 -0
  230. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/rewards/README.md +0 -0
  231. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/rewards/__init__.py +0 -0
  232. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/rewards/builtins.py +0 -0
  233. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/rewards/events.py +0 -0
  234. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/rewards/file_readers.py +0 -0
  235. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/rewards/llm.py +0 -0
  236. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/rewards/memory_scorer.py +0 -0
  237. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/rewards/node.py +0 -0
  238. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/rewards/protocol.py +0 -0
  239. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/rewards/rubric.py +0 -0
  240. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/rewards/rubric_config.py +0 -0
  241. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/rewards/validation.py +0 -0
  242. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/rollout/_config.py +0 -0
  243. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/rollout/_deadline.py +0 -0
  244. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/rollout/_results.py +0 -0
  245. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/rollout/_skills.py +0 -0
  246. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/rollout/_usage.py +0 -0
  247. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/rollout/_user_loop.py +0 -0
  248. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/rollout/session_factory_runtime.py +0 -0
  249. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/rollout/task_runtime.py +0 -0
  250. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/rollout_branch.py +0 -0
  251. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/rollout_planes.py +0 -0
  252. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/runtime.py +0 -0
  253. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/sandbox/__init__.py +0 -0
  254. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/sandbox/_base.py +0 -0
  255. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/sandbox/_cache_reclaim.py +0 -0
  256. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/sandbox/_compose.py +0 -0
  257. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/sandbox/_compose_files/docker-compose-base.yaml +0 -0
  258. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/sandbox/_compose_files/docker-compose-build.yaml +0 -0
  259. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/sandbox/_compose_files/docker-compose-no-network.yaml +0 -0
  260. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/sandbox/_compose_files/docker-compose-prebuilt.yaml +0 -0
  261. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/sandbox/_sdk_ops.py +0 -0
  262. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/sandbox/agentcore.py +0 -0
  263. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/sandbox/agentcore_builder.py +0 -0
  264. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/sandbox/agentcore_image.py +0 -0
  265. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/sandbox/agentcore_provisioning.py +0 -0
  266. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/sandbox/agentcore_reaper.py +0 -0
  267. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/sandbox/agentcore_sealed.py +0 -0
  268. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/sandbox/daytona_dind.py +0 -0
  269. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/sandbox/daytona_reaper.py +0 -0
  270. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/sandbox/docker.py +0 -0
  271. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/sandbox/lockdown.py +0 -0
  272. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/sandbox/metadata.py +0 -0
  273. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/sandbox/modal_impl.py +0 -0
  274. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/sandbox/process/__init__.py +0 -0
  275. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/sandbox/process/agentcore.py +0 -0
  276. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/sandbox/protocol.py +0 -0
  277. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/sandbox/providers.py +0 -0
  278. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/sandbox/services.py +0 -0
  279. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/sandbox/snapshot.py +0 -0
  280. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/sandbox/user.py +0 -0
  281. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/scenes.py +0 -0
  282. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/sdk.py +0 -0
  283. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/self_gen.py +0 -0
  284. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/skill_eval/__init__.py +0 -0
  285. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/skill_eval/gepa_export.py +0 -0
  286. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/skill_eval/schema.py +0 -0
  287. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/skills.py +0 -0
  288. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/task/_document_evidence.py +0 -0
  289. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/task/acceptance_live.py +0 -0
  290. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/task/acceptance_live_model.py +0 -0
  291. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/task/acceptance_live_report.py +0 -0
  292. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/task/discovery.py +0 -0
  293. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/task/env.py +0 -0
  294. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/task/output_format.py +0 -0
  295. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/task/package.py +0 -0
  296. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/task/paths.py +0 -0
  297. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/task/prompts.py +0 -0
  298. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/task/runtime_view.py +0 -0
  299. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/task/task.py +0 -0
  300. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/task/verifier.py +0 -0
  301. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/task/verifier_core.py +0 -0
  302. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/task/verifier_document.py +0 -0
  303. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/task/verifier_errors.py +0 -0
  304. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/task/verifier_judge_inputs.py +0 -0
  305. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/task/verifier_ors_episode.py +0 -0
  306. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/task/verifier_reward_kit.py +0 -0
  307. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/task/verifier_scan.py +0 -0
  308. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/task/verifier_script_strategy.py +0 -0
  309. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/templates/__init__.py +0 -0
  310. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/templates/judge.py.tmpl +0 -0
  311. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/templates/test.sh.tmpl +0 -0
  312. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/traces/__init__.py +0 -0
  313. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/traces/huggingface.py +0 -0
  314. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/traces/local.py +0 -0
  315. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/traces/models.py +0 -0
  316. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/traces/parsers.py +0 -0
  317. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/training/__init__.py +0 -0
  318. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/training/backends/__init__.py +0 -0
  319. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/training/backends/prime_rl.py +0 -0
  320. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/training/run_manifest.py +0 -0
  321. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/trajectories/__init__.py +0 -0
  322. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/trajectories/_capture.py +0 -0
  323. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/trajectories/_export_common.py +0 -0
  324. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/trajectories/_llm_capture.py +0 -0
  325. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/trajectories/call_purpose.py +0 -0
  326. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/trajectories/export.py +0 -0
  327. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/trajectories/export_adp.py +0 -0
  328. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/trajectories/export_atif.py +0 -0
  329. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/trajectories/export_prime_sft.py +0 -0
  330. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/trajectories/export_trl_sft.py +0 -0
  331. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/trajectories/metrics.py +0 -0
  332. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/trajectories/results.py +0 -0
  333. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/trajectories/tree.py +0 -0
  334. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/trajectories/trl_sft_tokenization.py +0 -0
  335. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/trajectories/viewer.py +0 -0
  336. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/usage_tracking.py +0 -0
  337. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/__init__.py +0 -0
  338. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/agents/__init__.py +0 -0
  339. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/agents/test_manifest_dirscan.py +0 -0
  340. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/agents/test_manifest_loader.py +0 -0
  341. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/agents/test_manifest_parity.py +0 -0
  342. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/agents/test_manifest_wiring.py +0 -0
  343. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/agents/test_namespace_shorthand.py +0 -0
  344. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/agents/test_plugin_entry_points.py +0 -0
  345. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/agents/test_protocol.py +0 -0
  346. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/agents/test_remote_manifest_autoload.py +0 -0
  347. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/conformance/README.md +0 -0
  348. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/conformance/acp_smoke/environment/Dockerfile +0 -0
  349. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/conformance/acp_smoke/environment/docker-compose.yaml +0 -0
  350. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/conformance/acp_smoke/environment/skills/conformance-writer/SKILL.md +0 -0
  351. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/conformance/acp_smoke/instruction.md +0 -0
  352. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/conformance/acp_smoke/solution/solve.sh +0 -0
  353. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/conformance/acp_smoke/task.toml +0 -0
  354. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/conformance/acp_smoke/tests/test.sh +0 -0
  355. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/conformance/conformance-results.json +0 -0
  356. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/conformance/proof_multi_agent.py +0 -0
  357. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/conformance/proof_snapshot.py +0 -0
  358. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/conformance/run_conformance.py +0 -0
  359. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/conformance/self_gen_smoke_skills/skill-creator/SKILL.md +0 -0
  360. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/conftest.py +0 -0
  361. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/continue_run/__init__.py +0 -0
  362. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/continue_run/_helpers.py +0 -0
  363. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/continue_run/test_batch.py +0 -0
  364. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/continue_run/test_orchestrator.py +0 -0
  365. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/continue_run/test_replay_proxy.py +0 -0
  366. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/continue_run/test_run_folder.py +0 -0
  367. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/environment/__init__.py +0 -0
  368. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/environment/test_chibench_manifest.py +0 -0
  369. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/environment/test_clawsbench_manifest.py +0 -0
  370. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/environment/test_manifest.py +0 -0
  371. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/environment/test_manifest_env.py +0 -0
  372. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/environment/test_protocol.py +0 -0
  373. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/environment/test_readiness.py +0 -0
  374. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/examples/hello-world-task/environment/Dockerfile +0 -0
  375. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/examples/hello-world-task/instruction.md +0 -0
  376. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/examples/hello-world-task/solution/solve.sh +0 -0
  377. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/examples/hello-world-task/task.toml +0 -0
  378. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/examples/hello-world-task/tests/test.sh +0 -0
  379. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/examples/test_claude.sh +0 -0
  380. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/examples/test_codex.sh +0 -0
  381. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/examples/test_codex_custom_provider.sh +0 -0
  382. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/examples/test_gemini.sh +0 -0
  383. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/examples/test_openclaw.sh +0 -0
  384. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/examples/traces/minimal-claude.jsonl +0 -0
  385. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/examples/traces/minimal-opentraces.jsonl +0 -0
  386. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/digest/README.md +0 -0
  387. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/digest/alpha-task/environment/Dockerfile +0 -0
  388. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/digest/alpha-task/instruction.md +0 -0
  389. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/digest/alpha-task/task.toml +0 -0
  390. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/digest/alpha-task/tests/test.sh +0 -0
  391. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/digest/beta-task/data/empty.bin +0 -0
  392. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/digest/beta-task/data/unicode.txt +0 -0
  393. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/digest/beta-task/instruction.md +0 -0
  394. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/digest/beta-task/task.toml +0 -0
  395. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/digest/not-a-task/notes.txt +0 -0
  396. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/mock_acp_agent.py +0 -0
  397. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/mock_acp_agent_interleaved.py +0 -0
  398. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/mock_acp_agent_multi_turn.py +0 -0
  399. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/mock_openai_responses_server.py +0 -0
  400. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/Dockerfile +0 -0
  401. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/data/michigan_stations.txt +0 -0
  402. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/flood-detection/SKILL.md +0 -0
  403. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/nws-flood-thresholds/SKILL.md +0 -0
  404. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/usgs-data-download/SKILL.md +0 -0
  405. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/flood-risk-analysis/instruction.md +0 -0
  406. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/flood-risk-analysis/solution/solve.sh +0 -0
  407. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/flood-risk-analysis/task.toml +0 -0
  408. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/flood-risk-analysis/tests/test.sh +0 -0
  409. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/flood-risk-analysis/tests/test_outputs.py +0 -0
  410. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/Dockerfile +0 -0
  411. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/climate.csv +0 -0
  412. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/hydrology.csv +0 -0
  413. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/land_cover.csv +0 -0
  414. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/water_temperature.csv +0 -0
  415. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/contribution-analysis/SKILL.md +0 -0
  416. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/meteorology-driver-classification/SKILL.md +0 -0
  417. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/pca-decomposition/SKILL.md +0 -0
  418. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/trend-analysis/SKILL.md +0 -0
  419. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/lake-warming-attribution/instruction.md +0 -0
  420. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/lake-warming-attribution/solution/solve.sh +0 -0
  421. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/lake-warming-attribution/task.toml +0 -0
  422. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/lake-warming-attribution/tests/test.sh +0 -0
  423. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/lake-warming-attribution/tests/test_outputs.py +0 -0
  424. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/manifest.json +0 -0
  425. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/Dockerfile +0 -0
  426. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/r2r_simulator.py +0 -0
  427. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/finite-horizon-lqr/SKILL.md +0 -0
  428. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/integral-action-design/SKILL.md +0 -0
  429. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/mpc-horizon-tuning/SKILL.md +0 -0
  430. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/state-space-linearization/SKILL.md +0 -0
  431. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/system_config.json +0 -0
  432. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/r2r-mpc-control/instruction.md +0 -0
  433. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/r2r-mpc-control/solution/solve.sh +0 -0
  434. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/r2r-mpc-control/task.toml +0 -0
  435. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/r2r-mpc-control/tests/test.sh +0 -0
  436. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/r2r-mpc-control/tests/test_outputs.py +0 -0
  437. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/Dockerfile +0 -0
  438. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/generate_training_pcaps.py +0 -0
  439. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/local.rules +0 -0
  440. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/pcap-triage-tshark/SKILL.md +0 -0
  441. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/pcap-triage-tshark/scripts/summarize_http_requests.sh +0 -0
  442. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-offline-evejson/SKILL.md +0 -0
  443. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-offline-evejson/scripts/run_suricata_offline.sh +0 -0
  444. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-rules-basics/SKILL.md +0 -0
  445. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/suricata.yaml +0 -0
  446. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/instruction.md +0 -0
  447. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/solution/solve.sh +0 -0
  448. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/task.toml +0 -0
  449. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/tests/test.sh +0 -0
  450. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/tests/test_outputs.py +0 -0
  451. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/Dockerfile +0 -0
  452. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syz-extract-constants/SKILL.md +0 -0
  453. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syzkaller-build-loop/SKILL.md +0 -0
  454. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syzlang-ioctl-basics/SKILL.md +0 -0
  455. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/instruction.md +0 -0
  456. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/solution/solve.sh +0 -0
  457. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/task.toml +0 -0
  458. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/tests/test.sh +0 -0
  459. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/tests/test_outputs.py +0 -0
  460. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/integration/_consistency.py +0 -0
  461. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/integration/agent_judge.py +0 -0
  462. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/integration/check_adapter_evidence.py +0 -0
  463. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/integration/check_hosted_env_evidence.py +0 -0
  464. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/integration/check_results.py +0 -0
  465. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/integration/check_skillsbench_harbor_parity.py +0 -0
  466. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/integration/check_trace_to_task_evidence.py +0 -0
  467. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/integration/configs/claude-agent-acp.yaml +0 -0
  468. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/integration/configs/codex-acp.yaml +0 -0
  469. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/integration/configs/gemini.yaml +0 -0
  470. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/integration/configs/harvey-lab-harness.yaml +0 -0
  471. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/integration/configs/mimo.yaml +0 -0
  472. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/integration/configs/openclaw.yaml +0 -0
  473. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/integration/configs/opencode.yaml +0 -0
  474. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/integration/configs/openhands.yaml +0 -0
  475. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/integration/configs/pi-acp.yaml +0 -0
  476. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/integration/deepagents_harness.py +0 -0
  477. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/integration/rubric_checks.py +0 -0
  478. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/integration/run.sh +0 -0
  479. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/integration/run_suite.py +0 -0
  480. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/integration/scenarios.py +0 -0
  481. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/integration/suites/release.yaml +0 -0
  482. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_acceptance_evidence.py +0 -0
  483. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_acceptance_live.py +0 -0
  484. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_acceptance_live_execution.py +0 -0
  485. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_acp_capability_advertising.py +0 -0
  486. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_acp_model_config_dispatch.py +0 -0
  487. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_acp_pinned_protocol_guard.py +0 -0
  488. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_acp_setup_failure_propagation.py +0 -0
  489. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_adapter_scripts.py +0 -0
  490. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_adapters.py +0 -0
  491. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_agent_cli.py +0 -0
  492. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_agent_env_resolution.py +0 -0
  493. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_agent_gemini_defaults.py +0 -0
  494. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_agent_idle_timeout_cli.py +0 -0
  495. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_agent_model_decouple.py +0 -0
  496. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_agent_registry.py +0 -0
  497. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_agent_router.py +0 -0
  498. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_agent_router_cli_e2e.py +0 -0
  499. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_agent_router_scaffold.py +0 -0
  500. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_agent_setup.py +0 -0
  501. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_agent_spec.py +0 -0
  502. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_agentcore_builder.py +0 -0
  503. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_agentcore_parallel.py +0 -0
  504. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_agentcore_reaper.py +0 -0
  505. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_agentcore_transport.py +0 -0
  506. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_api_error_capture.py +0 -0
  507. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_apple_container_sandbox.py +0 -0
  508. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_base_install_imports.py +0 -0
  509. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_bedrock_thinking.py +0 -0
  510. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_benchflow_experiment_review_validator.py +0 -0
  511. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_benchmark_repos_resolve_repo_path.py +0 -0
  512. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_branch.py +0 -0
  513. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_build_context_stage.py +0 -0
  514. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_build_review_pack.py +0 -0
  515. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_capture_trajectory.py +0 -0
  516. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_check_skillsbench_harbor_parity.py +0 -0
  517. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_clawsbench_slice.py +0 -0
  518. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_cli_adopt_aliases.py +0 -0
  519. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_cli_arg_validation.py +0 -0
  520. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_cli_daytona.py +0 -0
  521. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_cli_docs_drift.py +0 -0
  522. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_cli_edge_case_hardening.py +0 -0
  523. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_cli_hub_env.py +0 -0
  524. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_cli_misc.py +0 -0
  525. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_codex_review.py +0 -0
  526. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_codex_self_write_auth.py +0 -0
  527. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_config_redaction.py +0 -0
  528. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_connect_as_env.py +0 -0
  529. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_console_error_truncation.py +0 -0
  530. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_console_progress.py +0 -0
  531. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_continuallearningbench_adapter.py +0 -0
  532. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_dataset_registry.py +0 -0
  533. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_daytona_command_polling.py +0 -0
  534. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_daytona_dind_compose_up.py +0 -0
  535. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_daytona_download.py +0 -0
  536. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_daytona_litellm_runtime.py +0 -0
  537. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_daytona_poll_deadline.py +0 -0
  538. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_daytona_reap.py +0 -0
  539. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_deepagents_agent.py +0 -0
  540. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_docker_prune_scoping.py +0 -0
  541. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_docker_uploads.py +0 -0
  542. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_docs_examples.py +0 -0
  543. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_eng50_capabilities.py +0 -0
  544. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_env_registry.py +0 -0
  545. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_eval_artifact_cli.py +0 -0
  546. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_eval_filters_applied.py +0 -0
  547. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_eval_lift.py +0 -0
  548. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_eval_sharding.py +0 -0
  549. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_eval_single_task_summary.py +0 -0
  550. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_eval_source_provenance.py +0 -0
  551. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_eval_worker_retry.py +0 -0
  552. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_eval_zero_task_guard.py +0 -0
  553. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_evaluation_environment_manifest.py +0 -0
  554. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_exclude_tasks.py +0 -0
  555. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_filter_credentialed_cells.py +0 -0
  556. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_harvey_lab_shim.py +0 -0
  557. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_hilbench_adapter.py +0 -0
  558. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_hosted_env.py +0 -0
  559. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_hosted_env_rollout_contract.py +0 -0
  560. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_hub_harbor_registry.py +0 -0
  561. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_inbound_adapter_manifest.py +0 -0
  562. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_integration_agent_judge.py +0 -0
  563. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_integration_check_results.py +0 -0
  564. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_integration_consistency.py +0 -0
  565. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_integration_matrix.py +0 -0
  566. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_integration_provider_selection.py +0 -0
  567. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_integration_run_suite.py +0 -0
  568. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_integration_suite.py +0 -0
  569. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_job_sequential_shared.py +0 -0
  570. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_job_sequential_shared_resume.py +0 -0
  571. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_judge_robustness.py +0 -0
  572. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_judge_symlink_ingestion.py +0 -0
  573. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_learner_skills.py +0 -0
  574. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_learner_skills_traversal.py +0 -0
  575. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_learner_store.py +0 -0
  576. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_learner_store_persistence.py +0 -0
  577. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_litellm_config.py +0 -0
  578. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_litellm_hardening.py +0 -0
  579. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_litellm_logging.py +0 -0
  580. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_litellm_model_via_env_generic.py +0 -0
  581. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_litellm_reasoning_passthrough.py +0 -0
  582. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_litellm_smoke.py +0 -0
  583. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_llm_judge.py +0 -0
  584. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_llm_judge_event_tags.py +0 -0
  585. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_llm_judge_verifier.py +0 -0
  586. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_loop_strategies.py +0 -0
  587. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_loop_summary.py +0 -0
  588. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_loop_sweep.py +0 -0
  589. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_memory_scorer.py +0 -0
  590. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_metrics.py +0 -0
  591. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_mock_openai_responses_server.py +0 -0
  592. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_monitor_scaffold.py +0 -0
  593. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_native_acp_usage.py +0 -0
  594. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_no_cross_provider_fallback.py +0 -0
  595. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_notification_order_real.py +0 -0
  596. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_opencode_family_proxy_tracking.py +0 -0
  597. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_oracle.py +0 -0
  598. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_oracle_chokepoint.py +0 -0
  599. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_paths_safe.py +0 -0
  600. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_paths_symlink_helpers.py +0 -0
  601. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_pi_acp_launcher.py +0 -0
  602. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_pi_acp_proxy_routing.py +0 -0
  603. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_project_skills_layout.py +0 -0
  604. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_provider_auth_detection.py +0 -0
  605. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_providers.py +0 -0
  606. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_reexport.py +0 -0
  607. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_release_hardening_r5.py +0 -0
  608. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_release_version.py +0 -0
  609. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_resolve_env_helpers.py +0 -0
  610. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_review_boundaries.py +0 -0
  611. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_review_rubric.py +0 -0
  612. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_review_runtime.py +0 -0
  613. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_reward_lenient.py +0 -0
  614. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_reward_node.py +0 -0
  615. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_reward_range.py +0 -0
  616. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_reward_unified_contract.py +0 -0
  617. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_rewards.py +0 -0
  618. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_rewards_jsonl.py +0 -0
  619. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_rollout_architecture.py +0 -0
  620. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_rollout_branch.py +0 -0
  621. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_rollout_config_path_coercion.py +0 -0
  622. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_rollout_environment.py +0 -0
  623. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_rollout_hard_deadline.py +0 -0
  624. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_rollout_import_no_side_effects.py +0 -0
  625. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_rollout_on_ask_user_wiring.py +0 -0
  626. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_rollout_planes_contract.py +0 -0
  627. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_rollout_probe_sandbox_health.py +0 -0
  628. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_rollout_session_factory_dispatch.py +0 -0
  629. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_rubric_checks.py +0 -0
  630. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_rubric_config.py +0 -0
  631. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_runtime.py +0 -0
  632. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_runtime_config_wired.py +0 -0
  633. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_runtime_live_sandbox.py +0 -0
  634. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_sandbox.py +0 -0
  635. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_sandbox_exec_secret_handling.py +0 -0
  636. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_sandbox_hardening.py +0 -0
  637. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_sandbox_isolation_copy_traversal.py +0 -0
  638. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_sandbox_live_process.py +0 -0
  639. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_sandbox_multi_service.py +0 -0
  640. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_sandbox_prebuilt_validation.py +0 -0
  641. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_sandbox_protocol.py +0 -0
  642. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_sandbox_provider_registry_drift.py +0 -0
  643. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_sandbox_setup.py +0 -0
  644. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_sandbox_snapshot_contract.py +0 -0
  645. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_sandbox_upload_symlink.py +0 -0
  646. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_sandbox_verifier_workspace.py +0 -0
  647. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_scene.py +0 -0
  648. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_scene_outbox_trial.py +0 -0
  649. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_scene_parallel_group.py +0 -0
  650. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_scene_result_aggregation.py +0 -0
  651. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_scoring.py +0 -0
  652. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_sdk_internals.py +0 -0
  653. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_sdk_lockdown.py +0 -0
  654. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_sdk_run_alias.py +0 -0
  655. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_sealed_channel_container.py +0 -0
  656. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_self_gen_cli.py +0 -0
  657. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_self_gen_export_error_channel.py +0 -0
  658. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_self_gen_export_failures.py +0 -0
  659. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_self_gen_orchestration.py +0 -0
  660. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_session_factory_runtime.py +0 -0
  661. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_session_request_permission_dispatch.py +0 -0
  662. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_skill_eval_dryrun.py +0 -0
  663. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_skill_eval_traversal.py +0 -0
  664. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_skill_invocation_artifacts.py +0 -0
  665. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_skills.py +0 -0
  666. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_skills_dir_agent_home_link.py +0 -0
  667. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_skillsbench_conversion_conformance.py +0 -0
  668. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_skillsbench_harbor_run_suite.py +0 -0
  669. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_smoke.py +0 -0
  670. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_smoke_wiring.py +0 -0
  671. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_subscription_auth.py +0 -0
  672. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_task_check_eval_consistency.py +0 -0
  673. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_task_digest.py +0 -0
  674. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_task_download.py +0 -0
  675. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_task_output_format.py +0 -0
  676. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_task_runtime_primitive.py +0 -0
  677. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_tasks.py +0 -0
  678. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_token_usage_normalization.py +0 -0
  679. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_trace_import_cli.py +0 -0
  680. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_trace_task_gen_traversal.py +0 -0
  681. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_trace_to_task_evidence.py +0 -0
  682. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_traces_huggingface.py +0 -0
  683. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_traces_parsers.py +0 -0
  684. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_train_cli.py +0 -0
  685. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_train_mode_artifact_emission.py +0 -0
  686. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_train_trl_cli.py +0 -0
  687. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_trajectory_integration.py +0 -0
  688. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_trajectory_streaming.py +0 -0
  689. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_trial_agent_timeout_verify.py +0 -0
  690. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_trial_install_agent_timeout.py +0 -0
  691. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_trial_litellm_runtime.py +0 -0
  692. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_trl_integration.py +0 -0
  693. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_usage_litellm.py +0 -0
  694. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_usage_required.py +0 -0
  695. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_usage_tracking.py +0 -0
  696. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_user.py +0 -0
  697. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_v06_guard_ports.py +0 -0
  698. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_verifier_multi_container.py +0 -0
  699. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_verifier_output.py +0 -0
  700. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_verifier_output_freshness.py +0 -0
  701. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_verifier_strategies.py +0 -0
  702. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_verifier_wedge_retry.py +0 -0
  703. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_workflow_action_pinning.py +0 -0
  704. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_yaml_config.py +0 -0
  705. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/trajectories/__init__.py +0 -0
  706. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/trajectories/test_export.py +0 -0
  707. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/trajectories/test_export_adp.py +0 -0
  708. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/trajectories/test_export_atif.py +0 -0
  709. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/trajectories/test_export_common.py +0 -0
  710. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/trajectories/test_export_nan_handling.py +0 -0
  711. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/trajectories/test_export_prime_sft.py +0 -0
  712. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/trajectories/test_redaction.py +0 -0
  713. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/trajectories/test_step_granularity.py +0 -0
  714. {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/trajectories/test_tree.py +0 -0
@@ -2,6 +2,68 @@
2
2
 
3
3
  ## [Unreleased]
4
4
 
5
+ ## 0.6.8 — 2026-08-15
6
+
7
+ ### Added
8
+ - **Public trajectory contribution.** `bench traj upload PATH` validates and
9
+ structurally redacts trajectory JSONL, creates a content-addressed manifest,
10
+ and uploads through the built-in public broker. Azure Blob quarantine,
11
+ versioning, short-lived create-only user-delegation SAS grants, and an
12
+ event-driven fail-closed validator keep untrusted captures out of the
13
+ community namespace until hashes, sizes, strict JSONL (including duplicate-key
14
+ and non-finite-number rejection), and artifact/manifest secret scans pass.
15
+ Replaying an ingested digest is a no-op; trusted operators can opt into direct
16
+ Azure upload with the `azure` extra and `--direct`.
17
+
18
+ ### Changed
19
+ - **BREAKING (task.md): the `environment:` frontmatter key is renamed to
20
+ `sandbox:`.** The native task-config surface now accepts only `sandbox:`
21
+ (plus `verifier.sandbox:` for the verifier's separate sandbox spec and
22
+ `verifier.sandbox_mode:` for shared/separate selection); `environment:`,
23
+ `verifier.environment:`, and `verifier.environment_mode:` no longer
24
+ validate and fail with an actionable message naming the rename. **The
25
+ one-line fix for existing task.md files is renaming the key.**
26
+ Legacy/Harbor `task.toml` imports are unaffected: the toml loader
27
+ converts `[environment]`, `[verifier.environment]`, and
28
+ `environment_mode` to the `sandbox` spellings (declaring both spellings
29
+ in one file is an error), and `bench tasks export` emits the inverse —
30
+ a stock-Harbor `[environment]`-spelled `task.toml`. All native emitters
31
+ — `model_dump_toml`, `bench tasks migrate`, task scaffolding,
32
+ skill-eval/trace/adapter task generation, rubric-review wrappers — now
33
+ write `sandbox`. Python API: the compat property
34
+ `TaskConfig.environment` is removed (use `TaskConfig.sandbox`),
35
+ `VerifierConfig.environment`/`environment_mode` became
36
+ `sandbox`/`sandbox_mode`, and the `VerifierEnvironmentMode` enum is now
37
+ `VerifierSandboxMode`. The Environment plane
38
+ (`--environment-manifest`, `benchflow.environment.manifest`, the
39
+ eval-config `environment:` docker/daytona selector) is a different
40
+ subsystem and is unchanged.
41
+
42
+ ### Fixed
43
+ - **Coherent integration coverage for code-and-fixture changes.** The
44
+ credential-free fixture job now tests pull-request source together with its
45
+ task fixtures, while the secret-bearing smoke job retains trusted fixtures;
46
+ the release gate requires both results. (#969)
47
+ - **Retryable Daytona transport failures stay retryable.** Transient SDK
48
+ transport errors are stamped while their vendor type is still available,
49
+ empty exception messages retain useful type information, and permanent
50
+ errors remain outside the retry policy. (#970)
51
+ - **Live token counters no longer freeze behind callback-log reads.** Larger,
52
+ bounded ranged reads distinguish EOF from read failure, expose lag, and keep
53
+ terminal phase labels from moving backwards. (#971)
54
+ - **Fresh OpenClaw installs and GPT-5.4 calls use compatible limits.** OpenClaw
55
+ is pinned to a Node-compatible runtime, and raw plus ACP-alias GPT-5.4 model
56
+ IDs clamp output tokens to the provider's 128,000-token limit. (#977, #986)
57
+ - **Anthropic Vertex routes include their required runtime.** The gateway now
58
+ installs the Google Cloud Vertex AI SDK used by LiteLLM's Anthropic Vertex
59
+ path. (#978)
60
+ - **ACP subprocess diagnostics survive normal teardown.** A bounded, redacted
61
+ stderr tail is retained even when stdout remains open; stderr drain failures
62
+ cannot mask the structured transport diagnosis, and repeated process close
63
+ calls are idempotent. (#980)
64
+
65
+ ## 0.6.7 — 2026-08-09
66
+
5
67
  ### Added
6
68
  - **Built-in environment registry.** The committed env-axis pins
7
69
  (`env0@prod`, `env0@outage`) moved from `benchmarks/_environments/` into
@@ -10,13 +72,71 @@
10
72
  `pip install benchflow` with no checkout and no env vars.
11
73
  `$BENCHFLOW_ENV_REGISTRY`, when set, still wins entirely; resolution
12
74
  stays content-addressed (sha256 logged), and unknown names now error
13
- listing the available specs.
75
+ listing the available specs. (#961)
14
76
  - **Console progress heartbeat.** Single-concurrency eval runs print a
15
77
  throttled progress line (`… 6.2min, 12 tool calls (last: …)`) about every
16
78
  45 seconds while the agent works, so a long prompt is distinguishable from
17
79
  a hang. The heartbeat is auto-gated off for multi-concurrency jobs;
18
80
  `bench eval run --quiet` suppresses it, and `BENCHFLOW_PROGRESS=on`/`off`
19
81
  overrides the auto-gate. (#951)
82
+ - **Live per-task activity in the eval dashboard.** Under a TTY the
83
+ running-now table gains an activity column ("38 calls · last:
84
+ file_editor", plus tokens once a usage snapshot exists), polled from the
85
+ ACP session's existing heartbeat counters. The agents-manifest autoload
86
+ also clones quietly — one "Cloning …" summary line instead of raw git
87
+ progress. (#956)
88
+ - **Phase labels and per-task failure reasons.** The activity cell is never
89
+ blank while a row exists: sandbox create, agent install, and verify show
90
+ dim phase labels ("creating sandbox…", "installing agent…",
91
+ "verifying…"). The final block prints one dim "✗ task: reason" line per
92
+ failed task — verifier error first, else a compact reward/metric
93
+ breakdown, else the reward — capped at 5 lines. `--quiet` now silences
94
+ the dashboard as well as the heartbeat. (#957)
95
+ - **Failure reasons mined from verifier artifacts.** When a displayed
96
+ failure would read as a bare "reward X", the CLI reads a small bounded
97
+ artifact from the rollout's own verifier dir — the CTRF report (first
98
+ failed test plus its assertion line) or a tail of `test-stdout.txt` — and
99
+ a dim "(details: …/verifier)" pointer names the artifact directory.
100
+ Artifacts resolve by the recorded rollout name, never by glob. (#959)
101
+ - **Fractional rewards in console summaries.** Per-task lines carry the
102
+ scored reward (`✗ task (reward=0.30, tools=47)`), the Score line renders
103
+ ", mean reward 0.30" alongside the binarized counts, and
104
+ `EvaluationResult` / `summary.json` gain a `mean_reward` field (mean over
105
+ scored rollouts; errors excluded, not zeroed). (#960)
106
+ - **Full failure counts on per-task console lines.** A CTRF report with
107
+ more than one failed test rolls up as " (+N more failure(s); P/T checks
108
+ passed)" after the first failure — the count suffix is never truncated
109
+ away — and parametrized test names keep their `[param]` ids whenever the
110
+ report carries them. (#962)
111
+ - **Live token usage in the dashboard footer.** The footer sums completed
112
+ tasks' trusted telemetry plus every running rollout's live ACP session
113
+ usage, so spend is visible while the run executes (usage lands per
114
+ completed prompt; cost stays scoring-time from the gateway log).
115
+ Single-tool agents' activity cell drops the redundant "last:" suffix in
116
+ favor of "38 calls · 412.0k tok" once tokens are available. (#963)
117
+ - **env0-shaped failure breakdowns.** The failure-reason tiers understand
118
+ metrics nested one level under `metrics` / `details`, pair
119
+ `<name>_found` with `<name>_total` into fractions ("deadlines 1/5",
120
+ lowest-signal first), probe `verifier/reward.json` on disk between the
121
+ CTRF and stdout tiers, and every failure block with on-disk verifier
122
+ artifacts gets one "(details: …)" pointer. (#964)
123
+ - **Mid-prompt live token usage via the gateway's live capture.** The #963
124
+ live tokens stepped forward only when an ACP prompt completed, so a
125
+ single-prompt rollout showed "— tokens" for its whole agent phase. The
126
+ proxy runtime's existing live-capture loop (which already tails the
127
+ sandbox gateway's callback log every second) now also accumulates
128
+ provider tokens into an O(1) counter, and the dashboard reconciles the
129
+ two non-decreasing live signals as max(ACP, gateway) — display-only,
130
+ still replaced by the trusted scoring import at completion, and any
131
+ gateway-side failure degrades to the ACP-only behavior. (#965)
132
+
133
+ - **Compact flow-style arrays in emitted task.md frontmatter.** Short
134
+ scalar-only lists render on one line (`tags: [parsing, nlp]`) instead of
135
+ multiline bullets, so hand-written flow arrays survive `bench tasks
136
+ migrate` / normalize round-trips. The style predicate measures each list
137
+ with the real YAML emitter (so it can never disagree with PyYAML's own
138
+ quoting) and falls back to block style for long, nested, or multiline
139
+ items. Parsing is unchanged — both styles were always accepted. (#967)
20
140
 
21
141
  ### Changed
22
142
  - Migrated the clawsbench `archive-amazon-shipping` task to the native
@@ -51,6 +171,27 @@
51
171
  environment now fails loud when it declares services but none are startable
52
172
  in the image, instead of passing a vacuous readiness gate and dying at the
53
173
  verifier. (#954)
174
+ - Pointed the built-in `env0@prod` / `env0@outage` pins at the org-owned
175
+ `ghcr.io/benchflow-ai/env0:0.2.0` base image. The wheel-shipped pins named a
176
+ personal Docker Hub image while their own comments and the environment docs
177
+ declared the ghcr image authoritative; `base_image` is recorded as rollout
178
+ provenance, so every env0 result carried the wrong base. Verified on Daytona
179
+ (env0 `auth-least-privilege-summary`, 8/8 services ready, reward 1.0).
180
+ - Restored the `env0@outage` perturbation (gmail and slack removed relative
181
+ to `env0@prod`) that the #954 upstream sync had erased by mirroring the
182
+ full service list into both pins, and corrected the pin header's stale
183
+ slack port. (#955)
184
+ - **ACP protocol JSON glued to PTY shell noise now decodes.** On PTY
185
+ transports, an agent's initialize response could arrive on the same line
186
+ as the shell prompt (ANSI/OSC-prefixed), fail the strict whole-line JSON
187
+ parse, and get filed as noise — the handshake then "timed out" at any
188
+ window with the answer sitting in the agent log. The PTY-facing transport
189
+ now retries from the first `{` and once more after an ANSI scrub, but
190
+ only until the first successfully decoded protocol message per
191
+ connection; afterwards the strict contract rules, so log-echoed envelopes
192
+ cannot impersonate protocol traffic mid-session. The pre-prompt handshake
193
+ window is also env-configurable via `BENCHFLOW_ACP_HANDSHAKE_TIMEOUT`
194
+ (seconds; default 60). (#958)
54
195
 
55
196
  ## 0.6.6 — 2026-08-04
56
197
 
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.4
1
+ Metadata-Version: 2.5
2
2
  Name: benchflow
3
- Version: 0.6.7.dev1845
3
+ Version: 0.6.8
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
@@ -20,6 +20,7 @@ Classifier: Programming Language :: Python :: 3.13
20
20
  Requires-Python: >=3.12
21
21
  Requires-Dist: agent-client-protocol>=0.10
22
22
  Requires-Dist: anyio>=4.0
23
+ Requires-Dist: google-cloud-aiplatform<2.0,>=1.133.0
23
24
  Requires-Dist: httpx>=0.27.0
24
25
  Requires-Dist: litellm[proxy]==1.91.0
25
26
  Requires-Dist: packaging>=24
@@ -28,6 +29,15 @@ Requires-Dist: pyyaml>=6.0
28
29
  Requires-Dist: rich>=13.0
29
30
  Requires-Dist: tomli-w>=1.0
30
31
  Requires-Dist: typer>=0.9
32
+ Provides-Extra: azure
33
+ Requires-Dist: azure-identity>=1.16; extra == 'azure'
34
+ Requires-Dist: azure-storage-blob>=12.19; extra == 'azure'
35
+ Provides-Extra: azure-service
36
+ Requires-Dist: azure-data-tables>=12.5; extra == 'azure-service'
37
+ Requires-Dist: azure-identity>=1.16; extra == 'azure-service'
38
+ Requires-Dist: azure-storage-blob>=12.19; extra == 'azure-service'
39
+ Requires-Dist: azure-storage-queue>=12.9; extra == 'azure-service'
40
+ Requires-Dist: uvicorn>=0.30; extra == 'azure-service'
31
41
  Provides-Extra: bedrock
32
42
  Requires-Dist: boto3>=1.40; extra == 'bedrock'
33
43
  Provides-Extra: deepagents
@@ -145,6 +155,7 @@ Start with [Getting started](./docs/getting-started.md), then [Concepts](./docs/
145
155
  | Multi-agent: coder + reviewer, simulated user, BYOS, stateful envs | [Use cases](./docs/use-cases.md) |
146
156
  | Multi-round single-agent (progressive disclosure, oracle access) | [Progressive disclosure](./docs/progressive-disclosure.md) |
147
157
  | Skill evaluation (when the artifact is a skill, not a workspace) | [Skill eval](./docs/skill-eval.md) |
158
+ | Contribute a trajectory capture | [Trajectory upload](./docs/traj-upload.md) |
148
159
  | Understand the security model | [Sandbox hardening](./docs/sandbox-hardening.md) |
149
160
  | Use public vs internal preview SDK releases | [Release channels](./docs/release.md) |
150
161
  | CLI flags + commands | [CLI reference](./docs/reference/cli.md) |
@@ -81,6 +81,7 @@ Start with [Getting started](./docs/getting-started.md), then [Concepts](./docs/
81
81
  | Multi-agent: coder + reviewer, simulated user, BYOS, stateful envs | [Use cases](./docs/use-cases.md) |
82
82
  | Multi-round single-agent (progressive disclosure, oracle access) | [Progressive disclosure](./docs/progressive-disclosure.md) |
83
83
  | Skill evaluation (when the artifact is a skill, not a workspace) | [Skill eval](./docs/skill-eval.md) |
84
+ | Contribute a trajectory capture | [Trajectory upload](./docs/traj-upload.md) |
84
85
  | Understand the security model | [Sandbox hardening](./docs/sandbox-hardening.md) |
85
86
  | Use public vs internal preview SDK releases | [Release channels](./docs/release.md) |
86
87
  | CLI flags + commands | [CLI reference](./docs/reference/cli.md) |
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "benchflow"
3
- version = "0.6.7.dev1845"
3
+ version = "0.6.8"
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"
@@ -15,6 +15,7 @@ dependencies = [
15
15
  # Dataset registry bench_version checks (PEP 440 specifier sets).
16
16
  "packaging>=24",
17
17
  "litellm[proxy]==1.91.0",
18
+ "google-cloud-aiplatform>=1.133.0,<2.0",
18
19
  "tomli-w>=1.0",
19
20
  "typer>=0.9",
20
21
  ]
@@ -39,6 +40,20 @@ classifiers = [
39
40
  ]
40
41
 
41
42
  [project.optional-dependencies]
43
+ azure = [
44
+ # Direct Azure Blob trajectory uploads (bench traj upload --direct).
45
+ # Broker-mode uploads need neither package.
46
+ "azure-storage-blob>=12.19",
47
+ "azure-identity>=1.16",
48
+ ]
49
+ azure-service = [
50
+ # Dependencies baked into the public trajectory broker/validator image.
51
+ "azure-storage-blob>=12.19",
52
+ "azure-identity>=1.16",
53
+ "azure-data-tables>=12.5",
54
+ "azure-storage-queue>=12.9",
55
+ "uvicorn>=0.30",
56
+ ]
42
57
  dev = [
43
58
  "pre-commit>=3.7",
44
59
  # AgentCore's CodeBuild path must reproduce Docker's ignore rules in tests
@@ -144,8 +144,9 @@ def apply_config_override(config: Any, overlay: dict[str, Any] | None) -> Any:
144
144
 
145
145
  # Merge against the FIELD-NAME dump (``by_alias=False``) so overlays use the
146
146
  # canonical field names (``agent``, ``sandbox``, …); ``populate_by_name`` lets
147
- # re-validation accept them. ``by_alias=True`` would force callers to write the
148
- # alias (e.g. ``environment`` for ``sandbox``) — the bug this avoids.
147
+ # re-validation accept them. (``sandbox`` is now the only spelling — the
148
+ # legacy ``environment`` alias was removed in the rename — but ``oracle``
149
+ # still serializes via alias, so the field-name dump stays load-bearing.)
149
150
  merged = deep_merge(config.model_dump(by_alias=False), overlay)
150
151
  patched = TaskConfig.model_validate(merged)
151
152
  logger.debug(
@@ -4,7 +4,10 @@ import math
4
4
  from collections.abc import Iterable, Mapping
5
5
  from typing import Any, Literal
6
6
 
7
- from benchflow.diagnostics import DIAGNOSTIC_REASON_IDLE_TIMEOUT
7
+ from benchflow.diagnostics import (
8
+ DIAGNOSTIC_REASON_IDLE_TIMEOUT,
9
+ TRANSIENT_SANDBOX_TRANSPORT_MARKER,
10
+ )
8
11
 
9
12
  # Error category constants
10
13
  INSTALL_FAILED = "install_failure"
@@ -174,6 +177,14 @@ def _looks_like_infra_error(error: str) -> bool:
174
177
  "connection reset",
175
178
  "connection refused",
176
179
  "broken pipe",
180
+ # Stamped by TransientSandboxTransportError at the sandbox-SDK
181
+ # boundary, where the vendor exception type is still available to
182
+ # judge. One marker covers every provider call — exec, upload,
183
+ # download, stat — instead of one entry per vendor message
184
+ # prefix, which would be endless and silently incomplete.
185
+ TRANSIENT_SANDBOX_TRANSPORT_MARKER,
186
+ # Predates the marker above and is kept for strings rebuilt
187
+ # outside that boundary (e.g. a verifier error re-raised as text).
177
188
  "failed to get session command",
178
189
  "sandbox not found",
179
190
  "workspace not found",
@@ -333,7 +333,7 @@ timeout_sec = 300
333
333
  [verifier]
334
334
  timeout_sec = 120
335
335
 
336
- [environment]
336
+ [sandbox]
337
337
  cpus = 1
338
338
  memory_mb = 2048
339
339
  """)
@@ -412,7 +412,7 @@ agent:
412
412
  timeout_sec: 300
413
413
  verifier:
414
414
  timeout_sec: 120
415
- environment:
415
+ sandbox:
416
416
  cpus: 1
417
417
  memory_mb: 2048
418
418
  ---
@@ -0,0 +1,86 @@
1
+ """Plain-text rendering for console and log lines.
2
+
3
+ Two helpers live here: :func:`truncate_end`, which shortens a message
4
+ without letting a sliced token read as a whole word, and
5
+ :func:`describe_exception`, which renders an exception so the resulting
6
+ line is never detail-free.
7
+
8
+ The eval console renders one line per rollout, e.g.::
9
+
10
+ [ERR] my-task (tools=0) (Docker compose command failed ...)
11
+
12
+ Error messages routinely embed task names and paths, and a bare
13
+ ``msg[:n]`` slice can cut one of those tokens in half — ``environment
14
+ authored-task`` rendered as ``environment auth`` — which reads as a
15
+ different, complete name. ``truncate_end`` is the canonical fix: the cut
16
+ only ever removes the tail, backs up to a word boundary when one exists,
17
+ and is marked with an ellipsis so a shortened message can never
18
+ masquerade as a full one.
19
+ """
20
+
21
+ from __future__ import annotations
22
+
23
+
24
+ def truncate_end(message: str, limit: int) -> str:
25
+ """Shorten ``message`` to at most ``limit`` characters, ending in ``…``.
26
+
27
+ The kept text is always a verbatim prefix of the original (interior
28
+ words are never dropped), backed up to the previous word boundary so
29
+ a sliced token cannot read as a complete word. A single token longer
30
+ than the budget is still cut, with the ellipsis marking the cut.
31
+ Messages within budget are returned unchanged.
32
+ """
33
+ if len(message) <= limit:
34
+ return message
35
+ if limit <= 1:
36
+ return "…" if limit == 1 else ""
37
+ kept = message[: limit - 1]
38
+ if message[limit - 1] != " ":
39
+ head, sep, _partial = kept.rpartition(" ")
40
+ if sep:
41
+ kept = head
42
+ return kept.rstrip() + "…"
43
+
44
+
45
+ def describe_exception(exc: BaseException) -> str:
46
+ """Render ``exc`` as a one-line description that is never detail-free.
47
+
48
+ ``f"{exc}"`` keeps only ``str(exc)``, which for some SDK errors carries
49
+ no information at all. The Daytona SDK wraps every toolbox call as
50
+ ``"<prefix>: " + str(underlying)``, and httpx raises its timeout and
51
+ connection errors with an *empty* message — so a read timeout on
52
+ ``execute_session_command`` stringifies to the bare
53
+ ``"Failed to execute session command: "``, a message whose detail after
54
+ the colon is empty. The exception *class* (``DaytonaTimeoutError`` vs
55
+ ``DaytonaConnectionError``) is then the only surviving evidence of what
56
+ actually went wrong, and plain interpolation discards it.
57
+
58
+ Lead with the class name so "the exec timed out" can never again be
59
+ indistinguishable from "the connection dropped". The trailing
60
+ ``status_code``/``error_code`` fields serve the *other* shape of SDK
61
+ failure — an OpenAPI exception carrying an HTTP response — and are
62
+ absent by construction for the detail-free transport case above, which
63
+ never reaches a response at all.
64
+ """
65
+ name = type(exc).__name__
66
+ message = str(exc).strip()
67
+ # Approximation: this tests the whole message, not specifically the
68
+ # detail after a wrapper prefix — a message that legitimately ends in a
69
+ # colon is annotated too. That is harmless, and the alternative means
70
+ # knowing every vendor's prefix.
71
+ if message.endswith(":"):
72
+ message = f"{message} (no detail)"
73
+ described = f"{name}: {message}" if message else f"{name} (no message)"
74
+ details: list[str] = []
75
+ status_code = getattr(exc, "status_code", None)
76
+ # Both fields are "absent" when falsy, but only ``status_code`` has a
77
+ # meaningful zero-ish value to protect (no HTTP status is 0, yet an
78
+ # explicit 0 should still surface as evidence of a malformed response).
79
+ if status_code is not None:
80
+ details.append(f"status_code={status_code}")
81
+ error_code = getattr(exc, "error_code", None)
82
+ if error_code:
83
+ details.append(f"error_code={error_code}")
84
+ if details:
85
+ described = f"{described} [{', '.join(details)}]"
86
+ return described
@@ -7,6 +7,7 @@ from typing import Any, TextIO
7
7
 
8
8
  from benchflow.sandbox.process import LiveProcess
9
9
  from benchflow.sandbox.process._base import _ANSI_CSI_RE, _ANSI_OSC_RE
10
+ from benchflow.trajectories.types import redact_trajectory_text
10
11
 
11
12
  from .transport import Transport, decode_json_rpc_message
12
13
 
@@ -138,3 +139,7 @@ class ContainerTransport(Transport):
138
139
  self._agent_log_file.close()
139
140
  self._agent_log_file = None
140
141
  await self._cp.close()
142
+ stderr = getattr(self._cp, "stderr_tail", "")
143
+ if isinstance(stderr, str) and stderr and self._agent_log_path:
144
+ with self._agent_log_path.open("a") as agent_log:
145
+ agent_log.write(redact_trajectory_text(stderr))
@@ -549,7 +549,7 @@ async def connect_acp(
549
549
  dormant and the auto-approve policy ran unconditionally (#382 follow-up).
550
550
 
551
551
  ``mcp_servers`` are the task's configured MCP servers (mapped from
552
- ``[[environment.mcp_servers]]``); they are attached to the ACP session at
552
+ ``[[sandbox.mcp_servers]]``); they are attached to the ACP session at
553
553
  ``session/new`` so the agent can reach them. ``None`` attaches none.
554
554
 
555
555
  Retries with exponential backoff on ConnectionError (Daytona SSH storms).
@@ -508,7 +508,7 @@ def _toolathlon_task_toml(
508
508
  "metadata": metadata,
509
509
  "agent": {"timeout_sec": 1800.0},
510
510
  "verifier": {"timeout_sec": 900.0},
511
- "environment": environment,
511
+ "sandbox": environment,
512
512
  }
513
513
 
514
514
 
@@ -15,12 +15,14 @@ BenchFlow-native shape:
15
15
  └── tests/ # test.sh — the verifier
16
16
 
17
17
  This adapter is consequently a thin *normalizer*: it loads the foreign
18
- ``task.toml`` through the native :class:`TaskConfig` validator (which already
19
- handles Harbor's ``[environment]``-keyed sandbox section and the
20
- ``version`` -> ``schema_version`` rename), reads ``instruction.md``, and
21
- records the build/solution/test files under their native relative paths. No
22
- field remapping is needed — Harbor *is* the native format, which is exactly
23
- what makes Terminal-Bench backward-compatible through this edge.
18
+ ``task.toml`` through :func:`~benchflow.task.imports.import_task_config_toml`,
19
+ whose toml import boundary translates Harbor's ``[environment]``-keyed
20
+ sandbox section to the native ``sandbox`` key and handles the ``version`` ->
21
+ ``schema_version`` rename before native :class:`TaskConfig` validation. It
22
+ then reads ``instruction.md`` and records the build/solution/test files under
23
+ their native relative paths. Beyond that spelling translation no field
24
+ remapping is needed — Harbor is structurally the native format, which is
25
+ exactly what makes Terminal-Bench backward-compatible through this edge.
24
26
  """
25
27
 
26
28
  from __future__ import annotations
@@ -243,7 +243,7 @@ def _materialize_mcp_atlas(ctx: _SourceContext, output_dir: Path) -> None:
243
243
  "MCP_ATLAS_JUDGE_MODEL": "${MCP_ATLAS_JUDGE_MODEL:-qwen/qwen-plus}",
244
244
  },
245
245
  },
246
- "environment": {
246
+ "sandbox": {
247
247
  "cpus": 4,
248
248
  "memory_mb": 8192,
249
249
  "storage_mb": 10240,
@@ -49,6 +49,17 @@ _PARAM_MAP = {
49
49
  }
50
50
 
51
51
 
52
+ def _default_max_tokens(model: str) -> int | None:
53
+ # OpenClaw derives an invalid ~172k default for GPT-5.4; ACP sends a
54
+ # BenchFlow-generated LiteLLM alias in normal runs.
55
+ model = model.removeprefix("openai/")
56
+ if model == "gpt-5.4" or (
57
+ model.startswith("benchflow-") and model.endswith("-gpt-5.4")
58
+ ):
59
+ return 128000
60
+ return None
61
+
62
+
52
63
  # ── ACP stdio I/O ─────────────────────────────────────────────────────────────
53
64
 
54
65
 
@@ -671,6 +682,7 @@ def main():
671
682
 
672
683
  elif method == "session/set_model":
673
684
  model = params.get("modelId", "")
685
+ requested_model = model
674
686
  # A provider-resolution / config-write failure here must NOT crash the
675
687
  # shim: an unhandled exception exits rc=1, which benchflow sees as the
676
688
  # ACP transport dying mid-set_model ("Process closed stdout (rc=1)") —
@@ -726,6 +738,25 @@ def main():
726
738
  check=True,
727
739
  timeout=10,
728
740
  )
741
+ max_tokens = _default_max_tokens(requested_model)
742
+ configured_max_tokens = os.environ.get("BENCHFLOW_MODEL_MAX_TOKENS")
743
+ if max_tokens is not None and (
744
+ not configured_max_tokens
745
+ or not configured_max_tokens.isdigit()
746
+ or int(configured_max_tokens) > max_tokens
747
+ ):
748
+ subprocess.run(
749
+ [
750
+ _OPENCLAW_BIN,
751
+ "config",
752
+ "set",
753
+ _PARAM_MAP["BENCHFLOW_MODEL_MAX_TOKENS"],
754
+ str(max_tokens),
755
+ ],
756
+ capture_output=True,
757
+ check=True,
758
+ timeout=10,
759
+ )
729
760
  except Exception as exc:
730
761
  diag = (
731
762
  f"[openclaw-acp-shim] set_model setup failed, continuing: {exc!r}"
@@ -53,6 +53,8 @@ import shlex
53
53
  from dataclasses import dataclass, field
54
54
  from pathlib import Path
55
55
 
56
+ from benchflow._utils.text import describe_exception
57
+
56
58
 
57
59
  def _install_python_script(container_path: str, source: str) -> str:
58
60
  """Shell snippet that ensures python3 and writes `source` to container_path.
@@ -124,9 +126,7 @@ _JS_AGENT_PATH = (
124
126
  f"{_BENCHFLOW_BIN_PREFIX}:{_BENCHFLOW_JS_AGENT_PREFIX}/bin:"
125
127
  f"{_BENCHFLOW_NODE_PREFIX}/bin:$PATH"
126
128
  )
127
- # Node >=22.19 is required by current openclaw (the JS agents install
128
- # @latest); keep this pin at or above that floor or the openclaw ACP
129
- # bootstrap aborts at its runtime version check (BF-10).
129
+ # Node 22.20.0 supports OpenClaw 2026.6.9. Keep their pin pair in sync.
130
130
  _NODE_INSTALL = (
131
131
  "export DEBIAN_FRONTEND=noninteractive; "
132
132
  f"BF_NODE_DIR={_BENCHFLOW_NODE_PREFIX}; "
@@ -583,7 +583,7 @@ AGENTS: dict[str, AgentConfig] = {
583
583
  description="OpenClaw agent via ACP shim — model set at runtime via --model",
584
584
  skill_paths=["$HOME/.claude/skills", "$WORKSPACE/skills"],
585
585
  install_cmd=(
586
- f"{_js_agent_install('openclaw', 'openclaw')} && "
586
+ f"{_js_agent_install('openclaw', 'openclaw@2026.6.9')} && "
587
587
  # Configure: auto-approve tools (no model — set at runtime via ACP set_model)
588
588
  "mkdir -p ~/.openclaw && "
589
589
  'echo \'{"version":1,"defaults":{"allow_all":true}}\''
@@ -1469,7 +1469,7 @@ def _load_agent_plugin_packages() -> None:
1469
1469
  try:
1470
1470
  eps = entry_points(group="benchflow.agents")
1471
1471
  except Exception as exc: # pragma: no cover - metadata backend quirks
1472
- FAILED_AGENT_PLUGINS["<entry-point-scan>"] = f"{type(exc).__name__}: {exc}"
1472
+ FAILED_AGENT_PLUGINS["<entry-point-scan>"] = describe_exception(exc)
1473
1473
  logging.getLogger(__name__).warning(
1474
1474
  "benchflow.agents entry-point scan failed; ALL agent plugins are "
1475
1475
  "disabled: %s",
@@ -1483,7 +1483,7 @@ def _load_agent_plugin_packages() -> None:
1483
1483
  if callable(loaded):
1484
1484
  loaded()
1485
1485
  except Exception as exc:
1486
- FAILED_AGENT_PLUGINS[ep.name] = f"{type(exc).__name__}: {exc}"
1486
+ FAILED_AGENT_PLUGINS[ep.name] = describe_exception(exc)
1487
1487
  logging.getLogger(__name__).warning(
1488
1488
  "benchflow.agents plugin %r failed to load (some or all of its "
1489
1489
  "agents may be unavailable or partially registered): %s",
@@ -135,13 +135,21 @@ def _fmt_tokens(n: int) -> str:
135
135
  # while the session counters are unavailable — before the agent session
136
136
  # exists and after it is torn down — so sandbox create, agent install, and
137
137
  # the verifier read as work, not as a hang.
138
+ #
139
+ # The labels must be monotonic across a run: the row is a progress indicator,
140
+ # so stepping back to an earlier stage reads as the run having restarted.
141
+ # "executed" maps to the agent stage, not the verifier: since verify() marks
142
+ # "verifying" at its own entry, the only stretch that renders under "executed"
143
+ # is the inside of disconnect() (session already dropped, agent process being
144
+ # killed) — labelling that "verifying…" made the row show "verifying…", then
145
+ # "running agent…" (disconnect's "installed"), then "verifying…" again.
138
146
  _PHASE_LABELS = {
139
147
  "created": "creating sandbox…",
140
148
  "setup": "creating sandbox…",
141
149
  "started": "installing agent…",
142
150
  "installed": "running agent…",
143
151
  "connected": "running agent…",
144
- "executed": "verifying…",
152
+ "executed": "running agent…",
145
153
  "verifying": "verifying…",
146
154
  "verified": "cleaning up…",
147
155
  "cleaned": "cleaning up…",
@@ -57,6 +57,7 @@ from benchflow.cli.sandbox import register_sandbox
57
57
  from benchflow.cli.skills import register_skills
58
58
  from benchflow.cli.tasks import register_tasks
59
59
  from benchflow.cli.train import register_train
60
+ from benchflow.cli.traj import register_traj
60
61
  from benchflow.eval_plan import EvalCreateRequest, EvalPlanError, build_eval_plan
61
62
  from benchflow.evaluation import DEFAULT_AGENT, effective_model
62
63
  from benchflow.sandbox.providers import providers_phrase
@@ -1242,6 +1243,7 @@ register_continue(eval_app, alias_app=app)
1242
1243
  register_skills(app)
1243
1244
  register_review(app)
1244
1245
  register_tasks(app)
1246
+ register_traj(app)
1245
1247
  register_train(app)
1246
1248
  register_hub(app)
1247
1249
  register_agent(app)