benchflow 0.6.5__tar.gz → 0.6.7.dev1798__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 (696) hide show
  1. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/CHANGELOG.md +93 -0
  2. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/PKG-INFO +15 -9
  3. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/README.md +6 -6
  4. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/pyproject.toml +23 -3
  5. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/__init__.py +14 -0
  6. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/_utils/scoring.py +4 -1
  7. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/_utils/task_authoring/__init__.py +27 -0
  8. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/acp/runtime.py +106 -23
  9. benchflow-0.6.7.dev1798/src/benchflow/acp/selection.py +30 -0
  10. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/agents/install.py +31 -1
  11. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/agents/registry.py +63 -32
  12. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/cli/_shared.py +24 -0
  13. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/cli/continue_cmd.py +3 -9
  14. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/cli/environment.py +6 -1
  15. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/cli/main.py +21 -23
  16. benchflow-0.6.7.dev1798/src/benchflow/cli/review.py +233 -0
  17. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/cli/sandbox.py +78 -15
  18. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/cli/train.py +128 -20
  19. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/continue_run/orchestrator.py +4 -4
  20. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/providers/litellm_logging.py +116 -0
  21. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/providers/litellm_runtime.py +189 -20
  22. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/providers/runtime.py +7 -0
  23. benchflow-0.6.7.dev1798/src/benchflow/review/__init__.py +70 -0
  24. benchflow-0.6.7.dev1798/src/benchflow/review/config.py +250 -0
  25. benchflow-0.6.7.dev1798/src/benchflow/review/default-rubric.json +14 -0
  26. benchflow-0.6.7.dev1798/src/benchflow/review/prompts.py +102 -0
  27. benchflow-0.6.7.dev1798/src/benchflow/review/runner.py +639 -0
  28. benchflow-0.6.7.dev1798/src/benchflow/review/wrapper.py +312 -0
  29. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/rollout/__init__.py +61 -5
  30. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/rollout/_config.py +5 -0
  31. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/rollout/_results.py +5 -0
  32. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/rollout/_setup.py +22 -0
  33. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/rollout/_user_loop.py +5 -0
  34. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/sandbox/_base.py +70 -2
  35. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/sandbox/_compose.py +22 -0
  36. benchflow-0.6.7.dev1798/src/benchflow/sandbox/agentcore.py +973 -0
  37. benchflow-0.6.7.dev1798/src/benchflow/sandbox/agentcore_builder.py +653 -0
  38. benchflow-0.6.7.dev1798/src/benchflow/sandbox/agentcore_image.py +199 -0
  39. benchflow-0.6.7.dev1798/src/benchflow/sandbox/agentcore_provisioning.py +362 -0
  40. benchflow-0.6.7.dev1798/src/benchflow/sandbox/agentcore_reaper.py +173 -0
  41. benchflow-0.6.7.dev1798/src/benchflow/sandbox/agentcore_sealed.py +284 -0
  42. benchflow-0.6.7.dev1798/src/benchflow/sandbox/apple_container.py +620 -0
  43. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/sandbox/daytona.py +84 -19
  44. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/sandbox/daytona_dind.py +54 -1
  45. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/sandbox/daytona_reaper.py +45 -5
  46. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/sandbox/daytona_strategies.py +38 -0
  47. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/sandbox/docker.py +17 -2
  48. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/sandbox/lockdown.py +96 -5
  49. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/sandbox/modal_impl.py +8 -3
  50. benchflow-0.6.7.dev1798/src/benchflow/sandbox/process/__init__.py +39 -0
  51. benchflow-0.6.7.dev1798/src/benchflow/sandbox/process/_base.py +193 -0
  52. benchflow-0.6.7.dev1798/src/benchflow/sandbox/process/agentcore.py +419 -0
  53. benchflow-0.6.7.dev1798/src/benchflow/sandbox/process/apple.py +134 -0
  54. benchflow-0.6.5/src/benchflow/sandbox/process.py → benchflow-0.6.7.dev1798/src/benchflow/sandbox/process/daytona.py +27 -288
  55. benchflow-0.6.7.dev1798/src/benchflow/sandbox/process/docker.py +185 -0
  56. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/sandbox/protocol.py +8 -1
  57. benchflow-0.6.7.dev1798/src/benchflow/sandbox/providers.py +140 -0
  58. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/sandbox/setup.py +29 -0
  59. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/task/config.py +18 -0
  60. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/task/runtime_capabilities.py +43 -1
  61. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/trajectories/_capture.py +169 -0
  62. benchflow-0.6.7.dev1798/src/benchflow/trajectories/_llm_capture.py +46 -0
  63. benchflow-0.6.7.dev1798/src/benchflow/trajectories/call_purpose.py +39 -0
  64. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/trajectories/export_prime_sft.py +4 -0
  65. benchflow-0.6.7.dev1798/src/benchflow/trajectories/export_trl_sft.py +650 -0
  66. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/trajectories/results.py +202 -9
  67. benchflow-0.6.7.dev1798/src/benchflow/trajectories/trl_sft_tokenization.py +257 -0
  68. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/trajectories/types.py +9 -2
  69. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/continue_run/test_orchestrator.py +2 -1
  70. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_acp.py +60 -129
  71. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_acp_model_config_dispatch.py +0 -4
  72. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_acp_setup_failure_propagation.py +86 -20
  73. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_agent_registry.py +143 -5
  74. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_agent_setup.py +96 -3
  75. benchflow-0.6.7.dev1798/tests/test_agentcore_builder.py +818 -0
  76. benchflow-0.6.7.dev1798/tests/test_agentcore_parallel.py +956 -0
  77. benchflow-0.6.7.dev1798/tests/test_agentcore_reaper.py +297 -0
  78. benchflow-0.6.7.dev1798/tests/test_agentcore_sandbox.py +580 -0
  79. benchflow-0.6.7.dev1798/tests/test_agentcore_transport.py +484 -0
  80. benchflow-0.6.7.dev1798/tests/test_apple_container_sandbox.py +578 -0
  81. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_benchflow_experiment_review_validator.py +197 -0
  82. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_capture_trajectory.py +161 -1
  83. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_cli_docs_drift.py +4 -2
  84. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_config_override.py +57 -0
  85. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_daytona_command_polling.py +45 -0
  86. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_daytona_reap.py +73 -0
  87. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_docker_uploads.py +23 -1
  88. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_job.py +7 -0
  89. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_litellm_hardening.py +10 -3
  90. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_litellm_logging.py +345 -0
  91. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_litellm_runtime.py +95 -11
  92. benchflow-0.6.7.dev1798/tests/test_live_llm_trajectory.py +238 -0
  93. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_opencode_family_proxy_tracking.py +12 -2
  94. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_oracle_chokepoint.py +19 -3
  95. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_process.py +175 -1
  96. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_registry_invariants.py +12 -0
  97. benchflow-0.6.7.dev1798/tests/test_release_workflow_wiring.py +329 -0
  98. benchflow-0.6.7.dev1798/tests/test_review_boundaries.py +558 -0
  99. benchflow-0.6.7.dev1798/tests/test_review_rubric.py +438 -0
  100. benchflow-0.6.7.dev1798/tests/test_review_runtime.py +629 -0
  101. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_rollout_on_ask_user_wiring.py +0 -4
  102. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_rollout_upload.py +33 -0
  103. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_runtime_capabilities.py +16 -1
  104. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_runtime_config_wired.py +17 -0
  105. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_sandbox_hardening.py +54 -0
  106. benchflow-0.6.7.dev1798/tests/test_sandbox_live_process.py +224 -0
  107. benchflow-0.6.7.dev1798/tests/test_sandbox_prebuilt_validation.py +157 -0
  108. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_sandbox_provider_registry_drift.py +33 -11
  109. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_sandbox_setup.py +9 -0
  110. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_scene_outbox_trial.py +9 -0
  111. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_sdk_internals.py +41 -0
  112. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_sdk_lockdown.py +99 -2
  113. benchflow-0.6.7.dev1798/tests/test_sealed_channel_container.py +264 -0
  114. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_trace_import_cli.py +3 -1
  115. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_train_mode_artifact_emission.py +376 -0
  116. benchflow-0.6.7.dev1798/tests/test_train_trl_cli.py +586 -0
  117. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_trial_litellm_runtime.py +2 -0
  118. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_verify.py +103 -0
  119. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/trajectories/test_export_prime_sft.py +40 -0
  120. benchflow-0.6.5/src/benchflow/sandbox/providers.py +0 -76
  121. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/.gitignore +0 -0
  122. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/LICENSE +0 -0
  123. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/_dotenv.py +0 -0
  124. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/_paths.py +0 -0
  125. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/_run.py +0 -0
  126. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/_types.py +0 -0
  127. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/_utils/__init__.py +0 -0
  128. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/_utils/benchmark_repos.py +0 -0
  129. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/_utils/build_context_stage.py +0 -0
  130. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/_utils/config.py +0 -0
  131. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/_utils/config_override.py +0 -0
  132. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/_utils/content_address.py +0 -0
  133. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/_utils/dataset_registry.py +0 -0
  134. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/_utils/env_registry.py +0 -0
  135. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/_utils/evaluation_results.py +0 -0
  136. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/_utils/hf_datasets.py +0 -0
  137. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/_utils/json_safe.py +0 -0
  138. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/_utils/learner_memory.py +0 -0
  139. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/_utils/result_metadata.py +0 -0
  140. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/_utils/reward_events.py +0 -0
  141. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/_utils/source_provenance.py +0 -0
  142. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/_utils/task_authoring/_evidence_paths.py +0 -0
  143. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/_utils/task_authoring/acceptance_evidence.py +0 -0
  144. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/_utils/task_authoring/scaffolding.py +0 -0
  145. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/_utils/task_authoring/structural_checks.py +0 -0
  146. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/_utils/text.py +0 -0
  147. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/_utils/yaml_loader.py +0 -0
  148. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/acp/__init__.py +0 -0
  149. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/acp/client.py +0 -0
  150. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/acp/container_transport.py +0 -0
  151. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/acp/session.py +0 -0
  152. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/acp/transport.py +0 -0
  153. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/acp/types.py +0 -0
  154. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/adapters/__init__.py +0 -0
  155. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/adapters/_toolathlon.py +0 -0
  156. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/adapters/_toolathlon_container.py +0 -0
  157. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/adapters/_toolathlon_fake_mail.py +0 -0
  158. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/adapters/_toolathlon_poste_users.tsv +0 -0
  159. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/adapters/_toolathlon_services.py +0 -0
  160. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/adapters/harbor.py +0 -0
  161. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/adapters/inbound.py +0 -0
  162. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/adapters/inspect_ai.py +0 -0
  163. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/adapters/ors.py +0 -0
  164. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/adapters/resources/__init__.py +0 -0
  165. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/adapters/resources/mcp_atlas_bridge.py +0 -0
  166. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/adapters/resources/mcp_atlas_judge.py +0 -0
  167. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/adapters/source.py +0 -0
  168. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/agent_router.py +0 -0
  169. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/agent_router_guide.py +0 -0
  170. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/agent_router_parity.py +0 -0
  171. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/agent_router_scaffold.py +0 -0
  172. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/agents/__init__.py +0 -0
  173. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/agents/codex_config.py +0 -0
  174. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/agents/credentials.py +0 -0
  175. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/agents/deepagents_acp_shim.py +0 -0
  176. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/agents/env.py +0 -0
  177. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/agents/errors.py +0 -0
  178. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/agents/harvey_lab_acp_shim.py +0 -0
  179. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/agents/manifest.py +0 -0
  180. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/agents/openclaw_acp_shim.py +0 -0
  181. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/agents/pi_acp_launcher.py +0 -0
  182. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/agents/protocol.py +0 -0
  183. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/agents/providers.py +0 -0
  184. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/agents/remote_manifests.py +0 -0
  185. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/branch.py +0 -0
  186. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/cli/__init__.py +0 -0
  187. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/cli/_hosted_env.py +0 -0
  188. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/cli/_live_progress.py +0 -0
  189. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/cli/_options.py +0 -0
  190. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/cli/adopt.py +0 -0
  191. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/cli/agent.py +0 -0
  192. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/cli/eval_artifacts.py +0 -0
  193. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/cli/eval_lift.py +0 -0
  194. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/cli/hub.py +0 -0
  195. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/cli/monitor.py +0 -0
  196. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/cli/skills.py +0 -0
  197. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/cli/tasks.py +0 -0
  198. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/cli/trace_import.py +0 -0
  199. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/continue_run/__init__.py +0 -0
  200. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/continue_run/batch.py +0 -0
  201. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/continue_run/replay_proxy.py +0 -0
  202. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/continue_run/run_folder.py +0 -0
  203. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/continue_run/sandbox_proxy.py +0 -0
  204. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/contracts/__init__.py +0 -0
  205. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/contracts/planes.py +0 -0
  206. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/contracts/user.py +0 -0
  207. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/demo_task/environment/Dockerfile +0 -0
  208. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/demo_task/instruction.md +0 -0
  209. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/demo_task/task.md +0 -0
  210. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/demo_task/task.toml +0 -0
  211. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/demo_task/tests/test.sh +0 -0
  212. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/diagnostics.py +0 -0
  213. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/environment/__init__.py +0 -0
  214. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/environment/manifest.py +0 -0
  215. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/environment/manifest_env.py +0 -0
  216. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/environment/protocol.py +0 -0
  217. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/environment/readiness.py +0 -0
  218. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/eval_artifacts.py +0 -0
  219. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/eval_lift.py +0 -0
  220. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/eval_plan.py +0 -0
  221. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/eval_sharding.py +0 -0
  222. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/eval_worker.py +0 -0
  223. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/evaluation.py +0 -0
  224. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/experimental/__init__.py +0 -0
  225. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/experimental/mcp/__init__.py +0 -0
  226. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/experimental/mcp/hooks.py +0 -0
  227. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/experimental/mcp/reviewer_server.py +0 -0
  228. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/hosted_env.py +0 -0
  229. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/hub/__init__.py +0 -0
  230. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/hub/harbor_registry.py +0 -0
  231. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/integrations/__init__.py +0 -0
  232. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/integrations/trl/__init__.py +0 -0
  233. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/integrations/trl/spec.py +0 -0
  234. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/learner_skills.py +0 -0
  235. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/learner_store.py +0 -0
  236. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/loop_strategies.py +0 -0
  237. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/loop_sweep.py +0 -0
  238. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/metrics.py +0 -0
  239. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/models.py +0 -0
  240. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/monitor.py +0 -0
  241. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/providers/__init__.py +0 -0
  242. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/providers/litellm_bedrock_patch.py +0 -0
  243. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/providers/litellm_bedrock_preflight.py +0 -0
  244. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/providers/litellm_config.py +0 -0
  245. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/publish/__init__.py +0 -0
  246. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/publish/huggingface.py +0 -0
  247. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/py.typed +0 -0
  248. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/rewards/README.md +0 -0
  249. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/rewards/__init__.py +0 -0
  250. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/rewards/builtins.py +0 -0
  251. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/rewards/events.py +0 -0
  252. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/rewards/file_readers.py +0 -0
  253. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/rewards/llm.py +0 -0
  254. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/rewards/memory_scorer.py +0 -0
  255. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/rewards/node.py +0 -0
  256. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/rewards/protocol.py +0 -0
  257. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/rewards/rubric.py +0 -0
  258. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/rewards/rubric_config.py +0 -0
  259. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/rewards/validation.py +0 -0
  260. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/rollout/_skills.py +0 -0
  261. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/rollout/_usage.py +0 -0
  262. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/rollout/session_factory_runtime.py +0 -0
  263. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/rollout/task_runtime.py +0 -0
  264. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/rollout_branch.py +0 -0
  265. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/rollout_planes.py +0 -0
  266. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/runtime.py +0 -0
  267. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/sandbox/__init__.py +0 -0
  268. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/sandbox/_cache_reclaim.py +0 -0
  269. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/sandbox/_compose_files/docker-compose-base.yaml +0 -0
  270. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/sandbox/_compose_files/docker-compose-build.yaml +0 -0
  271. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/sandbox/_compose_files/docker-compose-no-network.yaml +0 -0
  272. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/sandbox/_compose_files/docker-compose-prebuilt.yaml +0 -0
  273. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/sandbox/_sdk_ops.py +0 -0
  274. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/sandbox/daytona_pty.py +0 -0
  275. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/sandbox/metadata.py +0 -0
  276. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/sandbox/services.py +0 -0
  277. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/sandbox/snapshot.py +0 -0
  278. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/sandbox/user.py +0 -0
  279. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/scenes.py +0 -0
  280. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/sdk.py +0 -0
  281. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/self_gen.py +0 -0
  282. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/skill_eval/__init__.py +0 -0
  283. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/skill_eval/_core.py +0 -0
  284. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/skill_eval/gepa_export.py +0 -0
  285. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/skill_eval/schema.py +0 -0
  286. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/skill_policy.py +0 -0
  287. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/skills.py +0 -0
  288. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/task/__init__.py +0 -0
  289. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/task/_document_evidence.py +0 -0
  290. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/task/_document_normalize.py +0 -0
  291. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/task/_document_parse.py +0 -0
  292. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/task/_document_profiles.py +0 -0
  293. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/task/acceptance_live.py +0 -0
  294. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/task/acceptance_live_model.py +0 -0
  295. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/task/acceptance_live_report.py +0 -0
  296. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/task/acceptance_live_validation.py +0 -0
  297. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/task/discovery.py +0 -0
  298. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/task/document.py +0 -0
  299. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/task/env.py +0 -0
  300. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/task/export.py +0 -0
  301. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/task/imports.py +0 -0
  302. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/task/output_format.py +0 -0
  303. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/task/package.py +0 -0
  304. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/task/paths.py +0 -0
  305. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/task/prompts.py +0 -0
  306. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/task/runtime_view.py +0 -0
  307. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/task/task.py +0 -0
  308. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/task/verifier.py +0 -0
  309. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/task/verifier_core.py +0 -0
  310. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/task/verifier_document.py +0 -0
  311. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/task/verifier_errors.py +0 -0
  312. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/task/verifier_judge_inputs.py +0 -0
  313. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/task/verifier_ors_episode.py +0 -0
  314. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/task/verifier_reward_kit.py +0 -0
  315. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/task/verifier_scan.py +0 -0
  316. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/task/verifier_script_strategy.py +0 -0
  317. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/templates/__init__.py +0 -0
  318. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/templates/judge.py.tmpl +0 -0
  319. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/templates/test.sh.tmpl +0 -0
  320. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/traces/__init__.py +0 -0
  321. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/traces/huggingface.py +0 -0
  322. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/traces/local.py +0 -0
  323. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/traces/models.py +0 -0
  324. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/traces/parsers.py +0 -0
  325. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/traces/task_gen.py +0 -0
  326. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/training/__init__.py +0 -0
  327. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/training/backends/__init__.py +0 -0
  328. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/training/backends/prime_rl.py +0 -0
  329. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/training/run_manifest.py +0 -0
  330. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/trajectories/__init__.py +0 -0
  331. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/trajectories/_export_common.py +0 -0
  332. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/trajectories/export.py +0 -0
  333. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/trajectories/export_adp.py +0 -0
  334. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/trajectories/export_atif.py +0 -0
  335. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/trajectories/metrics.py +0 -0
  336. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/trajectories/tree.py +0 -0
  337. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/trajectories/viewer.py +0 -0
  338. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/usage_tracking.py +0 -0
  339. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/__init__.py +0 -0
  340. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/acceptance_live_harness.py +0 -0
  341. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/agents/__init__.py +0 -0
  342. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/agents/test_manifest_dirscan.py +0 -0
  343. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/agents/test_manifest_loader.py +0 -0
  344. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/agents/test_manifest_parity.py +0 -0
  345. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/agents/test_manifest_wiring.py +0 -0
  346. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/agents/test_namespace_shorthand.py +0 -0
  347. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/agents/test_plugin_entry_points.py +0 -0
  348. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/agents/test_protocol.py +0 -0
  349. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/agents/test_remote_manifest_autoload.py +0 -0
  350. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/conformance/README.md +0 -0
  351. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/conformance/acp_smoke/environment/Dockerfile +0 -0
  352. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/conformance/acp_smoke/environment/docker-compose.yaml +0 -0
  353. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/conformance/acp_smoke/environment/skills/conformance-writer/SKILL.md +0 -0
  354. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/conformance/acp_smoke/instruction.md +0 -0
  355. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/conformance/acp_smoke/solution/solve.sh +0 -0
  356. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/conformance/acp_smoke/task.md +0 -0
  357. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/conformance/acp_smoke/task.toml +0 -0
  358. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/conformance/acp_smoke/tests/test.sh +0 -0
  359. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/conformance/conformance-results.json +0 -0
  360. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/conformance/proof_multi_agent.py +0 -0
  361. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/conformance/proof_snapshot.py +0 -0
  362. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/conformance/run_conformance.py +0 -0
  363. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/conformance/self_gen_smoke_skills/skill-creator/SKILL.md +0 -0
  364. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/conftest.py +0 -0
  365. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/continue_run/__init__.py +0 -0
  366. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/continue_run/_helpers.py +0 -0
  367. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/continue_run/test_batch.py +0 -0
  368. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/continue_run/test_replay_proxy.py +0 -0
  369. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/continue_run/test_run_folder.py +0 -0
  370. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/environment/__init__.py +0 -0
  371. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/environment/test_chibench_manifest.py +0 -0
  372. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/environment/test_clawsbench_manifest.py +0 -0
  373. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/environment/test_manifest.py +0 -0
  374. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/environment/test_manifest_env.py +0 -0
  375. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/environment/test_protocol.py +0 -0
  376. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/environment/test_readiness.py +0 -0
  377. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/examples/hello-world-task/environment/Dockerfile +0 -0
  378. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/examples/hello-world-task/instruction.md +0 -0
  379. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/examples/hello-world-task/solution/solve.sh +0 -0
  380. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/examples/hello-world-task/task.md +0 -0
  381. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/examples/hello-world-task/task.toml +0 -0
  382. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/examples/hello-world-task/tests/test.sh +0 -0
  383. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/examples/test_claude.sh +0 -0
  384. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/examples/test_codex.sh +0 -0
  385. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/examples/test_codex_custom_provider.sh +0 -0
  386. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/examples/test_gemini.sh +0 -0
  387. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/examples/test_openclaw.sh +0 -0
  388. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/examples/traces/minimal-claude.jsonl +0 -0
  389. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/examples/traces/minimal-opentraces.jsonl +0 -0
  390. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/digest/README.md +0 -0
  391. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/digest/alpha-task/environment/Dockerfile +0 -0
  392. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/digest/alpha-task/instruction.md +0 -0
  393. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/digest/alpha-task/task.toml +0 -0
  394. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/digest/alpha-task/tests/test.sh +0 -0
  395. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/digest/beta-task/data/empty.bin +0 -0
  396. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/digest/beta-task/data/unicode.txt +0 -0
  397. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/digest/beta-task/instruction.md +0 -0
  398. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/digest/beta-task/task.toml +0 -0
  399. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/digest/not-a-task/notes.txt +0 -0
  400. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/mock_acp_agent.py +0 -0
  401. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/mock_acp_agent_interleaved.py +0 -0
  402. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/mock_acp_agent_multi_turn.py +0 -0
  403. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/mock_openai_responses_server.py +0 -0
  404. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/Dockerfile +0 -0
  405. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/data/michigan_stations.txt +0 -0
  406. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/flood-detection/SKILL.md +0 -0
  407. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/nws-flood-thresholds/SKILL.md +0 -0
  408. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/usgs-data-download/SKILL.md +0 -0
  409. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/flood-risk-analysis/instruction.md +0 -0
  410. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/flood-risk-analysis/solution/solve.sh +0 -0
  411. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/flood-risk-analysis/task.toml +0 -0
  412. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/flood-risk-analysis/tests/test.sh +0 -0
  413. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/flood-risk-analysis/tests/test_outputs.py +0 -0
  414. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/Dockerfile +0 -0
  415. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/climate.csv +0 -0
  416. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/hydrology.csv +0 -0
  417. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/land_cover.csv +0 -0
  418. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/water_temperature.csv +0 -0
  419. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/contribution-analysis/SKILL.md +0 -0
  420. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/meteorology-driver-classification/SKILL.md +0 -0
  421. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/pca-decomposition/SKILL.md +0 -0
  422. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/trend-analysis/SKILL.md +0 -0
  423. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/lake-warming-attribution/instruction.md +0 -0
  424. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/lake-warming-attribution/solution/solve.sh +0 -0
  425. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/lake-warming-attribution/task.toml +0 -0
  426. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/lake-warming-attribution/tests/test.sh +0 -0
  427. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/lake-warming-attribution/tests/test_outputs.py +0 -0
  428. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/manifest.json +0 -0
  429. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/Dockerfile +0 -0
  430. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/r2r_simulator.py +0 -0
  431. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/finite-horizon-lqr/SKILL.md +0 -0
  432. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/integral-action-design/SKILL.md +0 -0
  433. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/mpc-horizon-tuning/SKILL.md +0 -0
  434. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/state-space-linearization/SKILL.md +0 -0
  435. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/system_config.json +0 -0
  436. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/r2r-mpc-control/instruction.md +0 -0
  437. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/r2r-mpc-control/solution/solve.sh +0 -0
  438. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/r2r-mpc-control/task.toml +0 -0
  439. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/r2r-mpc-control/tests/test.sh +0 -0
  440. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/r2r-mpc-control/tests/test_outputs.py +0 -0
  441. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/Dockerfile +0 -0
  442. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/generate_training_pcaps.py +0 -0
  443. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/local.rules +0 -0
  444. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/pcap-triage-tshark/SKILL.md +0 -0
  445. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/pcap-triage-tshark/scripts/summarize_http_requests.sh +0 -0
  446. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-offline-evejson/SKILL.md +0 -0
  447. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-offline-evejson/scripts/run_suricata_offline.sh +0 -0
  448. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-rules-basics/SKILL.md +0 -0
  449. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/suricata.yaml +0 -0
  450. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/instruction.md +0 -0
  451. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/solution/solve.sh +0 -0
  452. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/task.toml +0 -0
  453. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/tests/test.sh +0 -0
  454. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/tests/test_outputs.py +0 -0
  455. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/Dockerfile +0 -0
  456. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syz-extract-constants/SKILL.md +0 -0
  457. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syzkaller-build-loop/SKILL.md +0 -0
  458. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syzlang-ioctl-basics/SKILL.md +0 -0
  459. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/instruction.md +0 -0
  460. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/solution/solve.sh +0 -0
  461. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/task.toml +0 -0
  462. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/tests/test.sh +0 -0
  463. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/tests/test_outputs.py +0 -0
  464. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/integration/_consistency.py +0 -0
  465. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/integration/agent_judge.py +0 -0
  466. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/integration/check_adapter_evidence.py +0 -0
  467. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/integration/check_hosted_env_evidence.py +0 -0
  468. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/integration/check_results.py +0 -0
  469. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/integration/check_skillsbench_harbor_parity.py +0 -0
  470. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/integration/check_trace_to_task_evidence.py +0 -0
  471. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/integration/configs/claude-agent-acp.yaml +0 -0
  472. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/integration/configs/codex-acp.yaml +0 -0
  473. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/integration/configs/gemini.yaml +0 -0
  474. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/integration/configs/harvey-lab-harness.yaml +0 -0
  475. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/integration/configs/mimo.yaml +0 -0
  476. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/integration/configs/openclaw.yaml +0 -0
  477. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/integration/configs/opencode.yaml +0 -0
  478. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/integration/configs/openhands.yaml +0 -0
  479. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/integration/configs/pi-acp.yaml +0 -0
  480. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/integration/deepagents_harness.py +0 -0
  481. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/integration/rubric_checks.py +0 -0
  482. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/integration/run.sh +0 -0
  483. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/integration/run_suite.py +0 -0
  484. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/integration/scenarios.py +0 -0
  485. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/integration/suites/release.yaml +0 -0
  486. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_acceptance_evidence.py +0 -0
  487. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_acceptance_live.py +0 -0
  488. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_acceptance_live_execution.py +0 -0
  489. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_acp_capability_advertising.py +0 -0
  490. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_acp_mcp_servers.py +0 -0
  491. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_acp_pinned_protocol_guard.py +0 -0
  492. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_adapter_scripts.py +0 -0
  493. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_adapters.py +0 -0
  494. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_agent_cli.py +0 -0
  495. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_agent_env_resolution.py +0 -0
  496. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_agent_gemini_defaults.py +0 -0
  497. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_agent_idle_timeout_cli.py +0 -0
  498. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_agent_model_decouple.py +0 -0
  499. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_agent_router.py +0 -0
  500. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_agent_router_cli_e2e.py +0 -0
  501. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_agent_router_scaffold.py +0 -0
  502. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_agent_spec.py +0 -0
  503. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_api_error_capture.py +0 -0
  504. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_bare_model_provider.py +0 -0
  505. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_base_install_imports.py +0 -0
  506. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_bedrock_thinking.py +0 -0
  507. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_benchmark_repos_resolve_repo_path.py +0 -0
  508. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_branch.py +0 -0
  509. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_build_context_stage.py +0 -0
  510. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_build_review_pack.py +0 -0
  511. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_check_skillsbench_harbor_parity.py +0 -0
  512. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_clawsbench_slice.py +0 -0
  513. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_cli_adopt_aliases.py +0 -0
  514. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_cli_arg_validation.py +0 -0
  515. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_cli_daytona.py +0 -0
  516. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_cli_edge_case_hardening.py +0 -0
  517. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_cli_hub_env.py +0 -0
  518. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_cli_live_progress.py +0 -0
  519. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_cli_misc.py +0 -0
  520. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_codex_review.py +0 -0
  521. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_codex_self_write_auth.py +0 -0
  522. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_config_redaction.py +0 -0
  523. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_connect_as_env.py +0 -0
  524. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_console_error_truncation.py +0 -0
  525. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_continuallearningbench_adapter.py +0 -0
  526. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_dataset_registry.py +0 -0
  527. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_daytona_dind_compose_up.py +0 -0
  528. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_daytona_download.py +0 -0
  529. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_daytona_litellm_runtime.py +0 -0
  530. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_daytona_poll_deadline.py +0 -0
  531. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_deepagents_agent.py +0 -0
  532. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_docker_prune_scoping.py +0 -0
  533. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_docs_examples.py +0 -0
  534. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_eng50_capabilities.py +0 -0
  535. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_env_registry.py +0 -0
  536. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_env_setup.py +0 -0
  537. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_environment_manifest_controls.py +0 -0
  538. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_eval_artifact_cli.py +0 -0
  539. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_eval_filters_applied.py +0 -0
  540. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_eval_lift.py +0 -0
  541. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_eval_sharding.py +0 -0
  542. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_eval_single_task_summary.py +0 -0
  543. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_eval_source_provenance.py +0 -0
  544. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_eval_worker_retry.py +0 -0
  545. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_eval_zero_task_guard.py +0 -0
  546. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_evaluation_environment_manifest.py +0 -0
  547. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_exclude_tasks.py +0 -0
  548. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_filter_credentialed_cells.py +0 -0
  549. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_harvey_lab_shim.py +0 -0
  550. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_hilbench_adapter.py +0 -0
  551. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_hosted_env.py +0 -0
  552. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_hosted_env_rollout_contract.py +0 -0
  553. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_hub_harbor_registry.py +0 -0
  554. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_inbound_adapter_manifest.py +0 -0
  555. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_inbound_adapters.py +0 -0
  556. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_integration_agent_judge.py +0 -0
  557. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_integration_check_results.py +0 -0
  558. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_integration_consistency.py +0 -0
  559. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_integration_matrix.py +0 -0
  560. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_integration_provider_selection.py +0 -0
  561. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_integration_run_suite.py +0 -0
  562. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_integration_suite.py +0 -0
  563. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_internet_policy.py +0 -0
  564. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_job_sequential_shared.py +0 -0
  565. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_job_sequential_shared_resume.py +0 -0
  566. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_judge_robustness.py +0 -0
  567. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_judge_symlink_ingestion.py +0 -0
  568. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_learner_skills.py +0 -0
  569. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_learner_skills_traversal.py +0 -0
  570. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_learner_store.py +0 -0
  571. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_learner_store_persistence.py +0 -0
  572. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_litellm_config.py +0 -0
  573. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_litellm_model_via_env_generic.py +0 -0
  574. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_litellm_smoke.py +0 -0
  575. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_llm_judge.py +0 -0
  576. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_llm_judge_event_tags.py +0 -0
  577. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_llm_judge_verifier.py +0 -0
  578. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_loop_strategies.py +0 -0
  579. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_loop_summary.py +0 -0
  580. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_loop_sweep.py +0 -0
  581. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_memory_scorer.py +0 -0
  582. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_metrics.py +0 -0
  583. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_mle_bench_adapter.py +0 -0
  584. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_mock_openai_responses_server.py +0 -0
  585. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_monitor_scaffold.py +0 -0
  586. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_native_acp_usage.py +0 -0
  587. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_no_cross_provider_fallback.py +0 -0
  588. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_notification_order_real.py +0 -0
  589. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_oracle.py +0 -0
  590. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_paths_safe.py +0 -0
  591. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_paths_symlink_helpers.py +0 -0
  592. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_pi_acp_launcher.py +0 -0
  593. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_pi_acp_proxy_routing.py +0 -0
  594. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_project_skills_layout.py +0 -0
  595. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_provider_auth_detection.py +0 -0
  596. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_providers.py +0 -0
  597. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_reexport.py +0 -0
  598. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_release_hardening_r5.py +0 -0
  599. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_release_version.py +0 -0
  600. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_resolve_env_helpers.py +0 -0
  601. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_reward_lenient.py +0 -0
  602. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_reward_node.py +0 -0
  603. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_reward_range.py +0 -0
  604. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_reward_unified_contract.py +0 -0
  605. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_rewards.py +0 -0
  606. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_rewards_jsonl.py +0 -0
  607. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_rollout_architecture.py +0 -0
  608. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_rollout_branch.py +0 -0
  609. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_rollout_config_path_coercion.py +0 -0
  610. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_rollout_environment.py +0 -0
  611. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_rollout_import_no_side_effects.py +0 -0
  612. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_rollout_planes_contract.py +0 -0
  613. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_rollout_probe_sandbox_health.py +0 -0
  614. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_rollout_session_factory_dispatch.py +0 -0
  615. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_rollout_setup_commands.py +0 -0
  616. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_rubric_checks.py +0 -0
  617. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_rubric_config.py +0 -0
  618. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_runtime.py +0 -0
  619. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_runtime_live_sandbox.py +0 -0
  620. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_sandbox.py +0 -0
  621. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_sandbox_exec_secret_handling.py +0 -0
  622. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_sandbox_isolation_copy_traversal.py +0 -0
  623. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_sandbox_multi_service.py +0 -0
  624. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_sandbox_protocol.py +0 -0
  625. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_sandbox_snapshot_contract.py +0 -0
  626. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_sandbox_upload_symlink.py +0 -0
  627. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_sandbox_verifier_workspace.py +0 -0
  628. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_scene.py +0 -0
  629. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_scene_parallel_group.py +0 -0
  630. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_scene_result_aggregation.py +0 -0
  631. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_scoring.py +0 -0
  632. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_sdk_run_alias.py +0 -0
  633. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_self_gen_cli.py +0 -0
  634. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_self_gen_export_error_channel.py +0 -0
  635. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_self_gen_export_failures.py +0 -0
  636. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_self_gen_orchestration.py +0 -0
  637. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_session_factory_runtime.py +0 -0
  638. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_session_request_permission_dispatch.py +0 -0
  639. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_skill_eval.py +0 -0
  640. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_skill_eval_dryrun.py +0 -0
  641. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_skill_eval_integration.py +0 -0
  642. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_skill_eval_sweep.py +0 -0
  643. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_skill_eval_traversal.py +0 -0
  644. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_skill_invocation_artifacts.py +0 -0
  645. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_skill_policy.py +0 -0
  646. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_skills.py +0 -0
  647. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_skills_dir_agent_home_link.py +0 -0
  648. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_skillsbench_conversion_conformance.py +0 -0
  649. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_skillsbench_harbor_run_suite.py +0 -0
  650. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_smoke.py +0 -0
  651. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_smoke_wiring.py +0 -0
  652. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_source_adapters.py +0 -0
  653. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_subscription_auth.py +0 -0
  654. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_task_check_eval_consistency.py +0 -0
  655. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_task_config.py +0 -0
  656. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_task_digest.py +0 -0
  657. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_task_document.py +0 -0
  658. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_task_download.py +0 -0
  659. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_task_export.py +0 -0
  660. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_task_output_format.py +0 -0
  661. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_task_package.py +0 -0
  662. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_task_runtime_primitive.py +0 -0
  663. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_tasks.py +0 -0
  664. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_token_usage_normalization.py +0 -0
  665. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_trace_task_gen_traversal.py +0 -0
  666. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_trace_to_task_evidence.py +0 -0
  667. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_traces_huggingface.py +0 -0
  668. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_traces_parsers.py +0 -0
  669. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_traces_task_gen.py +0 -0
  670. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_train_cli.py +0 -0
  671. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_trajectory_integration.py +0 -0
  672. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_trajectory_streaming.py +0 -0
  673. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_trial_agent_timeout_verify.py +0 -0
  674. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_trial_install_agent_timeout.py +0 -0
  675. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_trl_integration.py +0 -0
  676. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_usage_litellm.py +0 -0
  677. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_usage_required.py +0 -0
  678. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_usage_tracking.py +0 -0
  679. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_user.py +0 -0
  680. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_v06_guard_ports.py +0 -0
  681. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_verifier_document.py +0 -0
  682. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_verifier_multi_container.py +0 -0
  683. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_verifier_output.py +0 -0
  684. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_verifier_output_freshness.py +0 -0
  685. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_verifier_strategies.py +0 -0
  686. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_workflow_action_pinning.py +0 -0
  687. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_yaml_config.py +0 -0
  688. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/trajectories/__init__.py +0 -0
  689. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/trajectories/test_export.py +0 -0
  690. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/trajectories/test_export_adp.py +0 -0
  691. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/trajectories/test_export_atif.py +0 -0
  692. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/trajectories/test_export_common.py +0 -0
  693. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/trajectories/test_export_nan_handling.py +0 -0
  694. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/trajectories/test_redaction.py +0 -0
  695. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/trajectories/test_step_granularity.py +0 -0
  696. {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/trajectories/test_tree.py +0 -0
@@ -2,6 +2,99 @@
2
2
 
3
3
  ## [Unreleased]
4
4
 
5
+ ### Fixed
6
+ - Isolated pull-request and post-test integration concurrency groups so a
7
+ credential-free workflow completion cannot cancel an active PR rollout.
8
+
9
+ ## 0.6.6 — 2026-08-04
10
+
11
+ ### Added
12
+ - **Apple Container and Amazon Bedrock AgentCore sandboxes.** Apple Silicon
13
+ users can run supported single-container arm64 tasks through Apple's
14
+ Virtualization.framework, while `--sandbox agentcore` builds task-specific
15
+ AWS runtimes with lease-aware cleanup for supported public-network,
16
+ single-container arm64 tasks. (#936, #937)
17
+ - **Rubric review (`bench review`).** Detached agentic grading of finished
18
+ rollouts against a `rubric.json` — rubric contract **v0.1**: an object with
19
+ a `criteria` list, each entry carrying a `name` (structured-output field), a
20
+ `description` (author documentation, never shown to the reviewer), and
21
+ `guidance` (the grading contract). The document carries no in-file
22
+ version key. One
23
+ reviewer agent per rollout runs as an ordinary rollout of a throwaway
24
+ wrapper task on a digest-pinned multi-architecture base image and no
25
+ task-authored Dockerfile
26
+ (AgentCore still builds a derived runtime image), reads a read-only evidence
27
+ copy of the rollout and, when admitted from a trusted `--tasks-root` with a
28
+ verified digest, its task, and answers every criterion with `pass` / `fail` /
29
+ `not_applicable` plus an explanation. The wrapper's own reward means only
30
+ "the reviewer produced a structurally valid result"; graded outcomes land
31
+ in `review_report.json`. Reviews never modify a reviewed rollout's rewards
32
+ or `result.json`. Rubric resolution: `-r` > the task's own
33
+ `verifier/rubric.json` > a built-in default (`reward_hacking`,
34
+ `task_specification`). `--passing` / `--failing` filter the rollouts under
35
+ review; a job-level prose summary aggregates multi-rollout runs. The
36
+ default reviewer harness is `opencode` (pinned to `1.18.11`).
37
+ Evidence mounts at `/evidence` outside the agent workdir (root-owned,
38
+ unwritable by the reviewer), symlinks are dropped rather than
39
+ dereferenced, task skills, shipped rubrics, and cumulative provider-history
40
+ trajectories are excluded while the canonical ACP trajectory is retained;
41
+ dropped ACP tool observations and generic tool titles are repaired from
42
+ exact-ID events in the trusted provider capture,
43
+ reviewer egress is gateway-scoped via the sandbox lockdown flag, artifact
44
+ consumption is pinned to each invocation's unique runtime leaf, and the
45
+ job summary is a deterministic aggregation.
46
+ - **Sealed AgentCore uploads.** Every AgentCore **upload and staged
47
+ environment** is now encrypted end-to-end: the sandbox generates a
48
+ keypair, only the public key appears in command output, payloads travel
49
+ as AES-256-CTR ciphertext with an HMAC-SHA256 tag over IV and
50
+ ciphertext (verified before decryption), and the decrypted key never
51
+ appears in command text. Fixes provider credentials from
52
+ `launch_config.json` and command environments being recoverable from
53
+ the runtime's CloudWatch command log; the generated wrapper image
54
+ installs `openssl` when missing. Downloads are not sealed: they return
55
+ file contents as base64 through command output, so they must only carry
56
+ non-secret run artifacts.
57
+ - **`RolloutConfig.uploads`.** Generic post-start host→sandbox uploads
58
+ (directory or file → absolute sandbox path), used by rubric review to
59
+ deliver evidence into prebuilt-image sandboxes and available to any caller
60
+ whose task data is not baked into the image.
61
+ - **Native TRL tool-calling SFT export.** `bench train convert --format
62
+ trl-sft` emits conversational prompt/completion rows with a `tools` column,
63
+ excludes OpenCode title/summary helper calls, and accepts rollout trees,
64
+ canonical `results.jsonl`, or existing TRL JSONL. `bench train validate
65
+ --format trl-sft` can render rows with a pinned tokenizer and fail closed on
66
+ missing assistant masks or overlength samples. Tokenizer-aware
67
+ `--context-policy message-window` keeps the harness/task prefix and the
68
+ longest complete recent assistant/tool suffix when exact rows exceed the
69
+ student context window. (#925)
70
+ - **LLM call-purpose provenance.** Captured LLM exchanges retain provider/model
71
+ metadata and classify agent, title, summary, compaction, and helper calls;
72
+ `results.jsonl` carries the metadata on each trajectory step. (#925)
73
+ - **Live trajectory streaming and token logprobs.** Redacted LLM trajectory
74
+ snapshots are written during active rollouts, and training runs can opt into
75
+ sampled-token logprobs with `BENCHFLOW_CAPTURE_TOKEN_LOGPROBS=1`. (#922, #926)
76
+
77
+ ### Changed
78
+ - OpenHands supports requested reasoning effort through its LiteLLM request
79
+ body and now fails closed if completed provider exchanges are missing from
80
+ trainer trajectories. The built-in OpenCode harness is version-pinned for
81
+ reproducibility. (#921, #931)
82
+
83
+ ### Fixed
84
+ - Restored the documented `test` → live `integration-light` → internal-preview
85
+ publication chain for successful `main` pushes, pinned to the exact tested
86
+ commit and fail-closed against untrusted workflow sources.
87
+ - Fixed OpenHands startup outside root-owned workdirs, OpenCode gateway setup
88
+ in non-Python task images, Qwen3.5 TRL SFT tokenization, and incomplete agent
89
+ skill-path validation. (#919, #924, #929, #932)
90
+ - Moved recursive review evidence work and blocking platform probes off the
91
+ async event loop so concurrent reviews and rollouts retain responsive
92
+ scheduling and timeouts.
93
+ - Remove staged Docker and Apple Container credential files when live process
94
+ launch fails before the agent can source and unlink them.
95
+ - Corrected release-facing authentication, sandbox, trajectory-artifact,
96
+ branching, and provider documentation to match the shipped interfaces.
97
+
5
98
  ## 0.6.5 — 2026-07-10
6
99
 
7
100
  ### Added
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: benchflow
3
- Version: 0.6.5
3
+ Version: 0.6.7.dev1798
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
@@ -21,7 +21,7 @@ Requires-Python: >=3.12
21
21
  Requires-Dist: agent-client-protocol>=0.10
22
22
  Requires-Dist: anyio>=4.0
23
23
  Requires-Dist: httpx>=0.27.0
24
- Requires-Dist: litellm[proxy]==1.89.0
24
+ Requires-Dist: litellm[proxy]==1.91.0
25
25
  Requires-Dist: packaging>=24
26
26
  Requires-Dist: pydantic>=2.7
27
27
  Requires-Dist: pyyaml>=6.0
@@ -34,6 +34,7 @@ Provides-Extra: deepagents
34
34
  Requires-Dist: deepagents>=0.6; extra == 'deepagents'
35
35
  Requires-Dist: langchain-openai>=0.2; extra == 'deepagents'
36
36
  Provides-Extra: dev
37
+ Requires-Dist: pathspec>=0.12; extra == 'dev'
37
38
  Requires-Dist: pre-commit>=3.7; extra == 'dev'
38
39
  Requires-Dist: pytest-asyncio>=0.24.0; extra == 'dev'
39
40
  Requires-Dist: pytest>=9.0.3; extra == 'dev'
@@ -43,6 +44,11 @@ Provides-Extra: judge
43
44
  Requires-Dist: anthropic>=0.40; extra == 'judge'
44
45
  Requires-Dist: google-genai>=1.0; extra == 'judge'
45
46
  Requires-Dist: openai>=1.40; extra == 'judge'
47
+ Provides-Extra: sandbox-agentcore
48
+ Requires-Dist: bedrock-agentcore>=1.18; extra == 'sandbox-agentcore'
49
+ Requires-Dist: boto3>=1.43.31; extra == 'sandbox-agentcore'
50
+ Requires-Dist: cryptography>=44; extra == 'sandbox-agentcore'
51
+ Requires-Dist: pathspec>=0.12; extra == 'sandbox-agentcore'
46
52
  Provides-Extra: sandbox-daytona
47
53
  Requires-Dist: daytona>=0.184.0; extra == 'sandbox-daytona'
48
54
  Requires-Dist: tenacity>=8.0; extra == 'sandbox-daytona'
@@ -53,7 +59,7 @@ Provides-Extra: train
53
59
  Requires-Dist: transformers==5.6.2; extra == 'train'
54
60
  Provides-Extra: trl
55
61
  Requires-Dist: datasets>=2.19.0; extra == 'trl'
56
- Requires-Dist: trl>=0.24.0; extra == 'trl'
62
+ Requires-Dist: trl<2,>=1.8.0; extra == 'trl'
57
63
  Description-Content-Type: text/markdown
58
64
 
59
65
  <div align="center">
@@ -77,9 +83,9 @@ BenchFlow is a universal environment framework: it runs AI agents against task e
77
83
  - **Loop strategies** — wrap any agent in a `--loop-strategy` (`verify-retry`, `self-review`); every rollout captures a per-iteration reward + token trajectory, so you can plot capability against cost (can a cheap model + loops match an expensive one at equal token spend?)
78
84
  - **`task.md` tasks** — one file (YAML frontmatter + prompt body) replaces the split `task.toml` + `instruction.md` layout; author with `bench tasks init` / `check` / `migrate` / `export`
79
85
  - **Hosted environments** — run external PrimeIntellect / Verifiers environments through `--source-env`, without converting them to BenchFlow tasks
80
- - **Sandboxes** — Docker locally, Daytona for parallel cloud runs (orphaned sandboxes auto-reaped at eval start), Modal for serverless/GPU-backed task environments
86
+ - **Sandboxes** — Docker locally, Apple Container on Apple Silicon Macs, Daytona for parallel cloud runs (orphaned sandboxes auto-reaped at eval start), Modal for serverless/GPU-backed task environments, and AgentCore for AWS-hosted runtimes
81
87
  - **Hardened verifier** — defaults block BenchJack/Meerkat-style reward-hacking; tasks opt out per-feature
82
- - **Training-ready output** — every scored rollout emits ATIF (`trainer/atif.json`) and ADP (`trainer/adp.jsonl`) trajectory records next to the Verifiers/ORS (OpenReward) reward record
88
+ - **Training-ready output** — scored rollouts emit a Verifiers/ORS reward record and best-effort ATIF (`trainer/atif.json`) / ADP (`trainer/adp.jsonl`) conversions; ATIF is omitted when the trajectory is empty, and conversion errors are reported in the rollout result
83
89
 
84
90
  ## Quickstart
85
91
 
@@ -88,14 +94,14 @@ BenchFlow is a universal environment framework: it runs AI agents against task e
88
94
  uv tool install --python 3.12 --upgrade benchflow
89
95
 
90
96
  # Run a benchmark: any task source, any ACP agent, any sandbox
91
- export GEMINI_API_KEY=... # or claude login / codex --login for subscription auth
97
+ export GEMINI_API_KEY=... # or claude auth login / codex login for subscription auth
92
98
  bench eval run \
93
99
  --source-repo benchflow-ai/skillsbench --source-path tasks \
94
100
  --agent gemini --model gemini-3.1-flash-lite-preview \
95
101
  --sandbox docker
96
102
  ```
97
103
 
98
- Each run writes a per-task `result.json` (rewards + trajectory + token usage) and a job `summary.json` (pass-rate, cost, and — for looped runs — a pass@iteration convergence curve). New here? Start with [Getting started](./docs/getting-started.md), or paste the [agent quickstart prompt](./docs/agent-quickstart.md) into Claude Code / Codex / Gemini CLI and let it drive the whole thing.
104
+ Each run writes a per-task `result.json` (rewards, trajectory summary, and token usage), full events under `trajectory/`, and a job `summary.json` (pass-rate, cost, and — for looped runs — a pass@iteration convergence curve). New here? Start with [Getting started](./docs/getting-started.md), or paste the [agent quickstart prompt](./docs/agent-quickstart.md) into Claude Code / Codex / Gemini CLI and let it drive the whole thing.
99
105
 
100
106
  ## Install
101
107
 
@@ -110,7 +116,7 @@ uv tool install --python 3.12 --upgrade benchflow
110
116
  in the install command so `uv` does not resolve an older Python-compatible
111
117
  package that lacks the CLI entrypoints.
112
118
  - If you see `Executables already exist: bench, benchflow`, re-run with `uv tool install --python 3.12 --upgrade --force benchflow` to replace stale entrypoints from an older install.
113
- - For Daytona or Modal extras, install the relevant optional package, for example `uv tool install --python 3.12 --upgrade 'benchflow[sandbox-daytona]'`.
119
+ - For Daytona, Modal, or AgentCore extras, install the relevant optional package, for example `uv tool install --python 3.12 --upgrade 'benchflow[sandbox-daytona]'`.
114
120
 
115
121
  Internal users wanting the newest preview from `main` install the [internal preview channel](./docs/release.md) (`uv tool install --python 3.12 --prerelease allow --upgrade benchflow`).
116
122
 
@@ -118,7 +124,7 @@ Internal users wanting the newest preview from `main` install the [internal prev
118
124
  `--python 3.12` flag lets it provision a compatible interpreter for the tool
119
125
  install. Set `DAYTONA_API_KEY` for Daytona or configure Modal auth for Modal;
120
126
  export an agent API key (`GEMINI_API_KEY`, `ANTHROPIC_API_KEY`, …) or use
121
- subscription auth (`claude login` / `codex --login`). Provider-prefixed models
127
+ subscription auth (`claude auth login` / `codex login`). Provider-prefixed models
122
128
  may need provider-specific credentials; Azure Foundry uses `AZURE_API_KEY` +
123
129
  `AZURE_API_ENDPOINT`.
124
130
 
@@ -19,9 +19,9 @@ BenchFlow is a universal environment framework: it runs AI agents against task e
19
19
  - **Loop strategies** — wrap any agent in a `--loop-strategy` (`verify-retry`, `self-review`); every rollout captures a per-iteration reward + token trajectory, so you can plot capability against cost (can a cheap model + loops match an expensive one at equal token spend?)
20
20
  - **`task.md` tasks** — one file (YAML frontmatter + prompt body) replaces the split `task.toml` + `instruction.md` layout; author with `bench tasks init` / `check` / `migrate` / `export`
21
21
  - **Hosted environments** — run external PrimeIntellect / Verifiers environments through `--source-env`, without converting them to BenchFlow tasks
22
- - **Sandboxes** — Docker locally, Daytona for parallel cloud runs (orphaned sandboxes auto-reaped at eval start), Modal for serverless/GPU-backed task environments
22
+ - **Sandboxes** — Docker locally, Apple Container on Apple Silicon Macs, Daytona for parallel cloud runs (orphaned sandboxes auto-reaped at eval start), Modal for serverless/GPU-backed task environments, and AgentCore for AWS-hosted runtimes
23
23
  - **Hardened verifier** — defaults block BenchJack/Meerkat-style reward-hacking; tasks opt out per-feature
24
- - **Training-ready output** — every scored rollout emits ATIF (`trainer/atif.json`) and ADP (`trainer/adp.jsonl`) trajectory records next to the Verifiers/ORS (OpenReward) reward record
24
+ - **Training-ready output** — scored rollouts emit a Verifiers/ORS reward record and best-effort ATIF (`trainer/atif.json`) / ADP (`trainer/adp.jsonl`) conversions; ATIF is omitted when the trajectory is empty, and conversion errors are reported in the rollout result
25
25
 
26
26
  ## Quickstart
27
27
 
@@ -30,14 +30,14 @@ BenchFlow is a universal environment framework: it runs AI agents against task e
30
30
  uv tool install --python 3.12 --upgrade benchflow
31
31
 
32
32
  # Run a benchmark: any task source, any ACP agent, any sandbox
33
- export GEMINI_API_KEY=... # or claude login / codex --login for subscription auth
33
+ export GEMINI_API_KEY=... # or claude auth login / codex login for subscription auth
34
34
  bench eval run \
35
35
  --source-repo benchflow-ai/skillsbench --source-path tasks \
36
36
  --agent gemini --model gemini-3.1-flash-lite-preview \
37
37
  --sandbox docker
38
38
  ```
39
39
 
40
- Each run writes a per-task `result.json` (rewards + trajectory + token usage) and a job `summary.json` (pass-rate, cost, and — for looped runs — a pass@iteration convergence curve). New here? Start with [Getting started](./docs/getting-started.md), or paste the [agent quickstart prompt](./docs/agent-quickstart.md) into Claude Code / Codex / Gemini CLI and let it drive the whole thing.
40
+ Each run writes a per-task `result.json` (rewards, trajectory summary, and token usage), full events under `trajectory/`, and a job `summary.json` (pass-rate, cost, and — for looped runs — a pass@iteration convergence curve). New here? Start with [Getting started](./docs/getting-started.md), or paste the [agent quickstart prompt](./docs/agent-quickstart.md) into Claude Code / Codex / Gemini CLI and let it drive the whole thing.
41
41
 
42
42
  ## Install
43
43
 
@@ -52,7 +52,7 @@ uv tool install --python 3.12 --upgrade benchflow
52
52
  in the install command so `uv` does not resolve an older Python-compatible
53
53
  package that lacks the CLI entrypoints.
54
54
  - If you see `Executables already exist: bench, benchflow`, re-run with `uv tool install --python 3.12 --upgrade --force benchflow` to replace stale entrypoints from an older install.
55
- - For Daytona or Modal extras, install the relevant optional package, for example `uv tool install --python 3.12 --upgrade 'benchflow[sandbox-daytona]'`.
55
+ - For Daytona, Modal, or AgentCore extras, install the relevant optional package, for example `uv tool install --python 3.12 --upgrade 'benchflow[sandbox-daytona]'`.
56
56
 
57
57
  Internal users wanting the newest preview from `main` install the [internal preview channel](./docs/release.md) (`uv tool install --python 3.12 --prerelease allow --upgrade benchflow`).
58
58
 
@@ -60,7 +60,7 @@ Internal users wanting the newest preview from `main` install the [internal prev
60
60
  `--python 3.12` flag lets it provision a compatible interpreter for the tool
61
61
  install. Set `DAYTONA_API_KEY` for Daytona or configure Modal auth for Modal;
62
62
  export an agent API key (`GEMINI_API_KEY`, `ANTHROPIC_API_KEY`, …) or use
63
- subscription auth (`claude login` / `codex --login`). Provider-prefixed models
63
+ subscription auth (`claude auth login` / `codex login`). Provider-prefixed models
64
64
  may need provider-specific credentials; Azure Foundry uses `AZURE_API_KEY` +
65
65
  `AZURE_API_ENDPOINT`.
66
66
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "benchflow"
3
- version = "0.6.5"
3
+ version = "0.6.7.dev1798"
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"
@@ -14,7 +14,7 @@ dependencies = [
14
14
  "rich>=13.0",
15
15
  # Dataset registry bench_version checks (PEP 440 specifier sets).
16
16
  "packaging>=24",
17
- "litellm[proxy]==1.89.0",
17
+ "litellm[proxy]==1.91.0",
18
18
  "tomli-w>=1.0",
19
19
  "typer>=0.9",
20
20
  ]
@@ -41,6 +41,9 @@ classifiers = [
41
41
  [project.optional-dependencies]
42
42
  dev = [
43
43
  "pre-commit>=3.7",
44
+ # AgentCore's CodeBuild path must reproduce Docker's ignore rules in tests
45
+ # even when the optional AWS backend is not installed.
46
+ "pathspec>=0.12",
44
47
  "pytest>=9.0.3",
45
48
  "pytest-asyncio>=0.24.0",
46
49
  "ruff>=0.7.0",
@@ -52,7 +55,9 @@ train = [
52
55
  "transformers==5.6.2",
53
56
  ]
54
57
  trl = [
55
- "trl>=0.24.0",
58
+ # Native tool-calling prompt/completion rows, assistant-only masks, and
59
+ # training chat-template patches used by `bench train validate --format trl-sft`.
60
+ "trl>=1.8.0,<2",
56
61
  "datasets>=2.19.0",
57
62
  ]
58
63
  sandbox-daytona = [
@@ -68,6 +73,21 @@ sandbox-modal = [
68
73
  "modal>=0.73",
69
74
  "tenacity>=8.0",
70
75
  ]
76
+ sandbox-agentcore = [
77
+ # Bedrock AgentCore Runtime microVMs. The SDK supplies the interactive
78
+ # shell (`open_shell`) used as the ACP transport; boto3 supplies the
79
+ # control plane (CreateAgentRuntime) and the command plane
80
+ # (InvokeAgentRuntimeCommand). The boto3 floor is the first release that
81
+ # models the bedrock-agentcore/-control services.
82
+ "bedrock-agentcore>=1.18",
83
+ # Used directly by the sealed AgentCore transport (RSA-OAEP key wrap +
84
+ # AES-CTR/HMAC). It otherwise arrives only transitively via
85
+ # litellm[proxy]; declaring it here keeps the dependency honest.
86
+ "cryptography>=44",
87
+ "boto3>=1.43.31",
88
+ # Docker-compatible build-context filtering without requiring a daemon.
89
+ "pathspec>=0.12",
90
+ ]
71
91
  bedrock = [
72
92
  "boto3>=1.40",
73
93
  ]
@@ -60,6 +60,14 @@ from benchflow.monitor import (
60
60
  MonitorNotImplementedError,
61
61
  MonitorResult,
62
62
  )
63
+ from benchflow.review import (
64
+ ReviewReport,
65
+ ReviewRubricError,
66
+ run_reviews,
67
+ )
68
+ from benchflow.review import Rubric as ReviewRubric
69
+ from benchflow.review import RubricCriterion as ReviewRubricCriterion
70
+ from benchflow.review import load_rubric as load_review_rubric
63
71
 
64
72
  # Rewards plane. Reward is the canonical node-based contract
65
73
  # (``score(node) -> VerifyResult``); RewardFunc is the legacy path-based shape
@@ -160,6 +168,12 @@ __all__ = [
160
168
  "load_rubric",
161
169
  "load_rubric_json",
162
170
  "load_rubric_toml",
171
+ "ReviewReport",
172
+ "ReviewRubric",
173
+ "ReviewRubricCriterion",
174
+ "ReviewRubricError",
175
+ "load_review_rubric",
176
+ "run_reviews",
163
177
  "Sandbox",
164
178
  "SandboxExecResult",
165
179
  "SandboxImage",
@@ -216,7 +216,10 @@ def contains_verifier_dep_install_marker(text: str) -> bool:
216
216
 
217
217
 
218
218
  def _looks_like_verifier_infra_error(error: str) -> bool:
219
- return any(
219
+ # Verifier execution uses the same sandbox transport as agent execution.
220
+ # Preserve retry parity for transport failures such as Daytona losing its
221
+ # session command between execution phases.
222
+ return _looks_like_infra_error(error) or any(
220
223
  marker in error
221
224
  for marker in (
222
225
  "failed to add tests directory",
@@ -143,6 +143,32 @@ def task_digest(task_dir: Path) -> str:
143
143
  return f"sha256:{digest.hexdigest()}"
144
144
 
145
145
 
146
+ def _check_review_rubric(verifier_dir: Path, *, verifier_label: str) -> list[str]:
147
+ """Validate a review ``rubric.json`` when the task ships one.
148
+
149
+ Review rubrics are ``{"criteria": [{name, description, guidance}]}``
150
+ JSON documents. A ``rubric.json`` that is not shaped like that (for
151
+ example an llm-judge rubric owned by the verifier-strategy machinery)
152
+ is not checked here.
153
+ """
154
+ from benchflow.review.config import (
155
+ ReviewRubricError,
156
+ is_review_rubric_file,
157
+ load_rubric,
158
+ )
159
+
160
+ candidate = verifier_dir / "rubric.json"
161
+ if not candidate.is_file() or not is_review_rubric_file(candidate):
162
+ # Absent, unreadable, or another rubric dialect (e.g. an llm-judge
163
+ # rubric with id/match_criteria entries) — not ours to validate.
164
+ return []
165
+ try:
166
+ load_rubric(candidate)
167
+ except ReviewRubricError as e:
168
+ return [f"{verifier_label}/rubric.json invalid: {e}"]
169
+ return []
170
+
171
+
146
172
  def check_task(
147
173
  task_dir: Path,
148
174
  *,
@@ -241,6 +267,7 @@ def check_task(
241
267
  verifier_label=verifier_label,
242
268
  )
243
269
  )
270
+ issues.extend(_check_review_rubric(verifier_dir, verifier_label=verifier_label))
244
271
  else:
245
272
  issues.append(
246
273
  "Missing verifier/ directory (or legacy tests/; verifier needs "
@@ -25,6 +25,7 @@ from pathlib import Path
25
25
 
26
26
  from benchflow.acp.client import ACPClient
27
27
  from benchflow.acp.container_transport import ContainerTransport
28
+ from benchflow.acp.selection import selected_acp_transport
28
29
  from benchflow.acp.types import McpServerSpec
29
30
  from benchflow.agents.protocol import ACPSessionAdapter
30
31
  from benchflow.agents.providers import (
@@ -38,9 +39,13 @@ from benchflow.diagnostics import (
38
39
  AgentPromptTimeoutError,
39
40
  IdleTimeoutDiagnostic,
40
41
  IdleTimeoutError,
42
+ TransportClosedDiagnostic,
43
+ TransportClosedError,
44
+ )
45
+ from benchflow.sandbox.lockdown import (
46
+ build_priv_drop_cmd,
47
+ enforce_agent_egress_firewall,
41
48
  )
42
- from benchflow.sandbox.lockdown import build_priv_drop_cmd
43
- from benchflow.sandbox.process import DaytonaProcess, DaytonaPtyProcess, DockerProcess
44
49
  from benchflow.trajectories._capture import _capture_session_trajectory
45
50
 
46
51
  # Re-exported for backwards compatibility — tests and downstream code
@@ -51,6 +56,7 @@ __all__ = [
51
56
  "IdleTimeoutError",
52
57
  "connect_acp",
53
58
  "execute_prompts",
59
+ "selected_acp_transport",
54
60
  ]
55
61
 
56
62
  logger = logging.getLogger(__name__)
@@ -59,6 +65,84 @@ logger = logging.getLogger(__name__)
59
65
  _ACP_CONNECT_MAX_RETRIES = 3
60
66
  _ACP_CONNECT_BASE_DELAY = 2.0
61
67
  _PROMPT_CANCEL_DRAIN_TIMEOUT_SEC = 0.25
68
+ _ACP_HANDSHAKE_TIMEOUT_SEC = 60
69
+ _OPENHANDS_DISABLE_SUBAGENTS_ENV = "BENCHFLOW_OPENHANDS_DISABLE_SUBAGENTS"
70
+
71
+
72
+ async def _prepare_openhands_direct_execution(
73
+ env,
74
+ *,
75
+ agent: str,
76
+ agent_env: dict[str, str],
77
+ ) -> dict[str, str]:
78
+ """Patch OpenHands as root before a sandbox-user privilege drop.
79
+
80
+ OpenHands is installed under ``/root/.local/share/uv/tools`` and exposed to
81
+ the sandbox user through a read-only symlink. Running the opt-in patch from
82
+ the launch command only worked for tasks whose workspace was ``/root``,
83
+ because sandbox-user setup happened to chown that whole directory. Tasks
84
+ rooted elsewhere (for example ``/app``) exited before ACP initialization.
85
+
86
+ Apply the same narrow patch through the environment's root execution plane,
87
+ then disable the duplicate launch-time patch for this process. The caller's
88
+ environment mapping is copied so recorded run provenance still reflects the
89
+ requested opt-in value.
90
+ """
91
+ if agent != "openhands" or agent_env.get(_OPENHANDS_DISABLE_SUBAGENTS_ENV) != "1":
92
+ return agent_env
93
+
94
+ patch_cmd = (
95
+ 'export PATH="$HOME/.local/bin:$PATH"; '
96
+ 'OH_BIN="$(command -v openhands)"; '
97
+ '[ -n "$OH_BIN" ] || { echo "Cannot locate OpenHands executable" >&2; exit 127; }; '
98
+ 'OH_PY="$(dirname "$(readlink -f "$OH_BIN")")/python"; '
99
+ '[ -x "$OH_PY" ] || { '
100
+ 'echo "Cannot locate OpenHands tool interpreter" >&2; exit 127; }; '
101
+ '"$OH_PY" -c \'from pathlib import Path; '
102
+ "import openhands_cli.utils as u; "
103
+ "p=Path(u.__file__); s=p.read_text(); "
104
+ 'old=" Tool(name=task_tool_name),\\n"; '
105
+ 'new=" # BenchFlow: delegation disabled for this run.\\n"; '
106
+ "assert old in s or new in s; "
107
+ "p.write_text(s.replace(old,new,1)) if old in s else None; "
108
+ "assert new in p.read_text()'"
109
+ )
110
+ result = await env.exec(patch_cmd, user="root", timeout_sec=30)
111
+ return_code = getattr(
112
+ result,
113
+ "return_code",
114
+ getattr(result, "exit_code", 1),
115
+ )
116
+ if return_code != 0:
117
+ stdout = (getattr(result, "stdout", "") or "").strip()
118
+ stderr = (getattr(result, "stderr", "") or "").strip()
119
+ detail = stderr or stdout or "no output"
120
+ raise RuntimeError(
121
+ "Failed to prepare OpenHands direct-execution mode as root "
122
+ f"(exit code {return_code}): {detail[:2000]}"
123
+ )
124
+
125
+ launch_env = dict(agent_env)
126
+ launch_env[_OPENHANDS_DISABLE_SUBAGENTS_ENV] = "0"
127
+ logger.info("Prepared OpenHands direct-execution mode before privilege drop")
128
+ return launch_env
129
+
130
+
131
+ async def _wait_for_acp_handshake(awaitable, *, phase: str):
132
+ try:
133
+ return await asyncio.wait_for(awaitable, timeout=_ACP_HANDSHAKE_TIMEOUT_SEC)
134
+ except TimeoutError as e:
135
+ msg = (
136
+ f"ACP {phase} timed out after {_ACP_HANDSHAKE_TIMEOUT_SEC}s "
137
+ "before the first prompt"
138
+ )
139
+ raise TransportClosedError(
140
+ msg,
141
+ TransportClosedDiagnostic(
142
+ raw_message=msg,
143
+ transport_diagnosis=f"acp_{phase}_timeout",
144
+ ),
145
+ ) from e
62
146
 
63
147
 
64
148
  # models.dev provider inference — used when acp_model_format="provider/model"
@@ -453,6 +537,12 @@ async def connect_acp(
453
537
 
454
538
  Retries with exponential backoff on ConnectionError (Daytona SSH storms).
455
539
  """
540
+ agent_env = await _prepare_openhands_direct_execution(
541
+ env,
542
+ agent=agent,
543
+ agent_env=agent_env,
544
+ )
545
+
456
546
  # Resolve agent binary path for non-docker environments
457
547
  if environment != "docker":
458
548
  which_result = await env.exec(
@@ -481,24 +571,13 @@ async def connect_acp(
481
571
  await asyncio.sleep(delay)
482
572
 
483
573
  try:
484
- if environment == "docker":
485
- live_proc = DockerProcess.from_sandbox_env(env)
486
- elif environment == "daytona":
487
- if agent == "gemini":
488
- live_proc = await DaytonaProcess.from_sandbox_env(env)
489
- logger.info("Using SSH transport for Gemini on Daytona")
490
- else:
491
- live_proc = await DaytonaPtyProcess.from_sandbox_env(env)
492
- logger.info("Using PTY transport for Daytona sandbox")
493
- else:
494
- is_dind = hasattr(env, "_strategy") and hasattr(
495
- env._strategy, "_compose_cmd"
496
- )
497
- if is_dind:
498
- live_proc = await DaytonaPtyProcess.from_sandbox_env(env)
499
- logger.info("Using PTY transport for DinD compose task")
500
- else:
501
- live_proc = await DaytonaProcess.from_sandbox_env(env)
574
+ # The sandbox owns its transport: it knows how to reach into
575
+ # itself, so there is no provider-name branch here. Backends with
576
+ # no live-process transport raise an actionable NotImplementedError
577
+ # from BaseSandbox.live_process rather than silently receiving
578
+ # another backend's transport (Modal previously fell through to
579
+ # DaytonaProcess and failed deep inside SSH setup).
580
+ live_proc = await env.live_process(agent=agent)
502
581
 
503
582
  agent_log = rollout_dir / "agent" / f"{agent.replace('-', '_')}.txt"
504
583
  transport = ContainerTransport(
@@ -511,15 +590,18 @@ async def connect_acp(
511
590
  acp_client = ACPClient(transport)
512
591
  await acp_client.connect()
513
592
 
514
- init_result = await asyncio.wait_for(acp_client.initialize(), timeout=60)
593
+ init_result = await _wait_for_acp_handshake(
594
+ acp_client.initialize(),
595
+ phase="initialize",
596
+ )
515
597
  agent_name = (
516
598
  init_result.agent_info.name if init_result.agent_info else agent
517
599
  )
518
600
  logger.info(f"ACP agent: {agent_name}")
519
601
 
520
- session = await asyncio.wait_for(
602
+ session = await _wait_for_acp_handshake(
521
603
  acp_client.session_new(cwd=agent_cwd, mcp_servers=mcp_servers),
522
- timeout=60,
604
+ phase="session_new",
523
605
  )
524
606
  logger.info(f"Session: {session.session_id}")
525
607
  break
@@ -552,6 +634,7 @@ async def connect_acp(
552
634
  agent_env=agent_env,
553
635
  reasoning_effort=reasoning_effort,
554
636
  )
637
+ await enforce_agent_egress_firewall(env, sandbox_user, agent_env)
555
638
  except Exception:
556
639
  with contextlib.suppress(Exception):
557
640
  await acp_client.close()
@@ -0,0 +1,30 @@
1
+ """Pure ACP transport selection helpers shared by runtime and artifacts."""
2
+
3
+ import logging
4
+ import os
5
+
6
+ logger = logging.getLogger(__name__)
7
+
8
+ _DAYTONA_ACP_TRANSPORT_ENV = "BENCHFLOW_DAYTONA_ACP_TRANSPORT"
9
+ _DAYTONA_ACP_TRANSPORTS = {"pty", "ssh"}
10
+
11
+
12
+ def daytona_acp_transport() -> str:
13
+ value = os.environ.get(_DAYTONA_ACP_TRANSPORT_ENV, "pty").strip().lower()
14
+ if value in _DAYTONA_ACP_TRANSPORTS:
15
+ return value
16
+ logger.warning(
17
+ "Invalid %s=%r; using PTY transport",
18
+ _DAYTONA_ACP_TRANSPORT_ENV,
19
+ value,
20
+ )
21
+ return "pty"
22
+
23
+
24
+ def selected_acp_transport(*, agent: str, environment: str) -> str:
25
+ """Return the concrete agent transport selected for artifact provenance."""
26
+ if environment == "docker":
27
+ return "docker-stdio"
28
+ if environment == "daytona":
29
+ return "ssh" if agent == "gemini" else daytona_acp_transport()
30
+ return "provider-default"