benchflow 0.6.7.dev1829__tar.gz → 0.6.7.dev1831__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (701) hide show
  1. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/PKG-INFO +1 -1
  2. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/pyproject.toml +1 -1
  3. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/acp/container_transport.py +57 -1
  4. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/acp/runtime.py +27 -10
  5. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/process/_base.py +36 -0
  6. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/process/agentcore.py +18 -24
  7. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/process/daytona.py +5 -16
  8. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_acp.py +175 -0
  9. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/.gitignore +0 -0
  10. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/CHANGELOG.md +0 -0
  11. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/LICENSE +0 -0
  12. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/README.md +0 -0
  13. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/__init__.py +0 -0
  14. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/_dotenv.py +0 -0
  15. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/_paths.py +0 -0
  16. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/_run.py +0 -0
  17. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/_types.py +0 -0
  18. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/__init__.py +0 -0
  19. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/benchmark_repos.py +0 -0
  20. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/build_context_stage.py +0 -0
  21. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/config.py +0 -0
  22. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/config_override.py +0 -0
  23. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/content_address.py +0 -0
  24. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/dataset_registry.py +0 -0
  25. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/env_registry.py +0 -0
  26. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/evaluation_results.py +0 -0
  27. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/hf_datasets.py +0 -0
  28. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/json_safe.py +0 -0
  29. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/learner_memory.py +0 -0
  30. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/live_activity.py +0 -0
  31. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/result_metadata.py +0 -0
  32. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/reward_events.py +0 -0
  33. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/scoring.py +0 -0
  34. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/source_provenance.py +0 -0
  35. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/task_authoring/__init__.py +0 -0
  36. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/task_authoring/_evidence_paths.py +0 -0
  37. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/task_authoring/acceptance_evidence.py +0 -0
  38. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/task_authoring/scaffolding.py +0 -0
  39. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/task_authoring/structural_checks.py +0 -0
  40. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/text.py +0 -0
  41. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/yaml_loader.py +0 -0
  42. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/acp/__init__.py +0 -0
  43. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/acp/client.py +0 -0
  44. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/acp/selection.py +0 -0
  45. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/acp/session.py +0 -0
  46. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/acp/transport.py +0 -0
  47. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/acp/types.py +0 -0
  48. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/adapters/__init__.py +0 -0
  49. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/adapters/_toolathlon.py +0 -0
  50. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/adapters/_toolathlon_container.py +0 -0
  51. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/adapters/_toolathlon_fake_mail.py +0 -0
  52. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/adapters/_toolathlon_poste_users.tsv +0 -0
  53. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/adapters/_toolathlon_services.py +0 -0
  54. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/adapters/harbor.py +0 -0
  55. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/adapters/inbound.py +0 -0
  56. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/adapters/inspect_ai.py +0 -0
  57. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/adapters/ors.py +0 -0
  58. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/adapters/resources/__init__.py +0 -0
  59. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/adapters/resources/mcp_atlas_bridge.py +0 -0
  60. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/adapters/resources/mcp_atlas_judge.py +0 -0
  61. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/adapters/source.py +0 -0
  62. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/agent_router.py +0 -0
  63. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/agent_router_guide.py +0 -0
  64. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/agent_router_parity.py +0 -0
  65. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/agent_router_scaffold.py +0 -0
  66. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/agents/__init__.py +0 -0
  67. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/agents/codex_config.py +0 -0
  68. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/agents/credentials.py +0 -0
  69. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/agents/deepagents_acp_shim.py +0 -0
  70. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/agents/env.py +0 -0
  71. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/agents/errors.py +0 -0
  72. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/agents/harvey_lab_acp_shim.py +0 -0
  73. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/agents/install.py +0 -0
  74. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/agents/manifest.py +0 -0
  75. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/agents/openclaw_acp_shim.py +0 -0
  76. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/agents/pi_acp_launcher.py +0 -0
  77. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/agents/protocol.py +0 -0
  78. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/agents/providers.py +0 -0
  79. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/agents/registry.py +0 -0
  80. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/agents/remote_manifests.py +0 -0
  81. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/branch.py +0 -0
  82. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/cli/__init__.py +0 -0
  83. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/cli/_hosted_env.py +0 -0
  84. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/cli/_live_progress.py +0 -0
  85. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/cli/_options.py +0 -0
  86. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/cli/_shared.py +0 -0
  87. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/cli/adopt.py +0 -0
  88. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/cli/agent.py +0 -0
  89. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/cli/continue_cmd.py +0 -0
  90. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/cli/environment.py +0 -0
  91. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/cli/eval_artifacts.py +0 -0
  92. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/cli/eval_lift.py +0 -0
  93. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/cli/hub.py +0 -0
  94. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/cli/main.py +0 -0
  95. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/cli/monitor.py +0 -0
  96. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/cli/review.py +0 -0
  97. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/cli/sandbox.py +0 -0
  98. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/cli/skills.py +0 -0
  99. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/cli/tasks.py +0 -0
  100. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/cli/trace_import.py +0 -0
  101. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/cli/train.py +0 -0
  102. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/continue_run/__init__.py +0 -0
  103. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/continue_run/batch.py +0 -0
  104. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/continue_run/orchestrator.py +0 -0
  105. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/continue_run/replay_proxy.py +0 -0
  106. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/continue_run/run_folder.py +0 -0
  107. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/continue_run/sandbox_proxy.py +0 -0
  108. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/contracts/__init__.py +0 -0
  109. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/contracts/planes.py +0 -0
  110. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/contracts/user.py +0 -0
  111. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/demo_task/environment/Dockerfile +0 -0
  112. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/demo_task/instruction.md +0 -0
  113. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/demo_task/task.md +0 -0
  114. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/demo_task/task.toml +0 -0
  115. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/demo_task/tests/test.sh +0 -0
  116. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/diagnostics.py +0 -0
  117. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/environment/__init__.py +0 -0
  118. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/environment/manifest.py +0 -0
  119. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/environment/manifest_env.py +0 -0
  120. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/environment/protocol.py +0 -0
  121. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/environment/readiness.py +0 -0
  122. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/eval_artifacts.py +0 -0
  123. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/eval_lift.py +0 -0
  124. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/eval_plan.py +0 -0
  125. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/eval_sharding.py +0 -0
  126. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/eval_worker.py +0 -0
  127. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/evaluation.py +0 -0
  128. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/experimental/__init__.py +0 -0
  129. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/experimental/mcp/__init__.py +0 -0
  130. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/experimental/mcp/hooks.py +0 -0
  131. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/experimental/mcp/reviewer_server.py +0 -0
  132. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/hosted_env.py +0 -0
  133. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/hub/__init__.py +0 -0
  134. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/hub/harbor_registry.py +0 -0
  135. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/integrations/__init__.py +0 -0
  136. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/integrations/trl/__init__.py +0 -0
  137. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/integrations/trl/spec.py +0 -0
  138. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/learner_skills.py +0 -0
  139. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/learner_store.py +0 -0
  140. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/loop_strategies.py +0 -0
  141. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/loop_sweep.py +0 -0
  142. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/metrics.py +0 -0
  143. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/models.py +0 -0
  144. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/monitor.py +0 -0
  145. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/providers/__init__.py +0 -0
  146. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/providers/litellm_bedrock_patch.py +0 -0
  147. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/providers/litellm_bedrock_preflight.py +0 -0
  148. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/providers/litellm_config.py +0 -0
  149. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/providers/litellm_logging.py +0 -0
  150. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/providers/litellm_runtime.py +0 -0
  151. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/providers/runtime.py +0 -0
  152. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/publish/__init__.py +0 -0
  153. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/publish/huggingface.py +0 -0
  154. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/py.typed +0 -0
  155. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/review/__init__.py +0 -0
  156. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/review/config.py +0 -0
  157. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/review/default-rubric.json +0 -0
  158. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/review/prompts.py +0 -0
  159. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/review/runner.py +0 -0
  160. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/review/wrapper.py +0 -0
  161. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/rewards/README.md +0 -0
  162. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/rewards/__init__.py +0 -0
  163. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/rewards/builtins.py +0 -0
  164. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/rewards/events.py +0 -0
  165. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/rewards/file_readers.py +0 -0
  166. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/rewards/llm.py +0 -0
  167. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/rewards/memory_scorer.py +0 -0
  168. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/rewards/node.py +0 -0
  169. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/rewards/protocol.py +0 -0
  170. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/rewards/rubric.py +0 -0
  171. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/rewards/rubric_config.py +0 -0
  172. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/rewards/validation.py +0 -0
  173. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/rollout/__init__.py +0 -0
  174. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/rollout/_config.py +0 -0
  175. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/rollout/_deadline.py +0 -0
  176. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/rollout/_results.py +0 -0
  177. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/rollout/_setup.py +0 -0
  178. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/rollout/_skills.py +0 -0
  179. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/rollout/_usage.py +0 -0
  180. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/rollout/_user_loop.py +0 -0
  181. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/rollout/session_factory_runtime.py +0 -0
  182. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/rollout/task_runtime.py +0 -0
  183. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/rollout_branch.py +0 -0
  184. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/rollout_planes.py +0 -0
  185. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/runtime.py +0 -0
  186. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/__init__.py +0 -0
  187. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/_base.py +0 -0
  188. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/_cache_reclaim.py +0 -0
  189. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/_compose.py +0 -0
  190. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/_compose_files/docker-compose-base.yaml +0 -0
  191. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/_compose_files/docker-compose-build.yaml +0 -0
  192. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/_compose_files/docker-compose-no-network.yaml +0 -0
  193. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/_compose_files/docker-compose-prebuilt.yaml +0 -0
  194. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/_sdk_ops.py +0 -0
  195. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/agentcore.py +0 -0
  196. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/agentcore_builder.py +0 -0
  197. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/agentcore_image.py +0 -0
  198. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/agentcore_provisioning.py +0 -0
  199. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/agentcore_reaper.py +0 -0
  200. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/agentcore_sealed.py +0 -0
  201. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/apple_container.py +0 -0
  202. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/daytona.py +0 -0
  203. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/daytona_dind.py +0 -0
  204. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/daytona_pty.py +0 -0
  205. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/daytona_reaper.py +0 -0
  206. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/daytona_strategies.py +0 -0
  207. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/docker.py +0 -0
  208. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/lockdown.py +0 -0
  209. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/metadata.py +0 -0
  210. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/modal_impl.py +0 -0
  211. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/process/__init__.py +0 -0
  212. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/process/apple.py +0 -0
  213. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/process/docker.py +0 -0
  214. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/protocol.py +0 -0
  215. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/providers.py +0 -0
  216. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/services.py +0 -0
  217. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/setup.py +0 -0
  218. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/snapshot.py +0 -0
  219. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/user.py +0 -0
  220. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/scenes.py +0 -0
  221. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/sdk.py +0 -0
  222. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/self_gen.py +0 -0
  223. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/skill_eval/__init__.py +0 -0
  224. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/skill_eval/_core.py +0 -0
  225. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/skill_eval/gepa_export.py +0 -0
  226. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/skill_eval/schema.py +0 -0
  227. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/skill_policy.py +0 -0
  228. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/skills.py +0 -0
  229. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/task/__init__.py +0 -0
  230. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/task/_document_evidence.py +0 -0
  231. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/task/_document_normalize.py +0 -0
  232. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/task/_document_parse.py +0 -0
  233. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/task/_document_profiles.py +0 -0
  234. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/task/acceptance_live.py +0 -0
  235. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/task/acceptance_live_model.py +0 -0
  236. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/task/acceptance_live_report.py +0 -0
  237. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/task/acceptance_live_validation.py +0 -0
  238. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/task/config.py +0 -0
  239. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/task/discovery.py +0 -0
  240. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/task/document.py +0 -0
  241. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/task/env.py +0 -0
  242. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/task/export.py +0 -0
  243. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/task/imports.py +0 -0
  244. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/task/output_format.py +0 -0
  245. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/task/package.py +0 -0
  246. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/task/paths.py +0 -0
  247. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/task/prompts.py +0 -0
  248. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/task/runtime_capabilities.py +0 -0
  249. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/task/runtime_view.py +0 -0
  250. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/task/task.py +0 -0
  251. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/task/verifier.py +0 -0
  252. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/task/verifier_core.py +0 -0
  253. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/task/verifier_document.py +0 -0
  254. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/task/verifier_errors.py +0 -0
  255. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/task/verifier_judge_inputs.py +0 -0
  256. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/task/verifier_ors_episode.py +0 -0
  257. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/task/verifier_reward_kit.py +0 -0
  258. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/task/verifier_scan.py +0 -0
  259. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/task/verifier_script_strategy.py +0 -0
  260. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/templates/__init__.py +0 -0
  261. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/templates/judge.py.tmpl +0 -0
  262. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/templates/test.sh.tmpl +0 -0
  263. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/traces/__init__.py +0 -0
  264. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/traces/huggingface.py +0 -0
  265. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/traces/local.py +0 -0
  266. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/traces/models.py +0 -0
  267. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/traces/parsers.py +0 -0
  268. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/traces/task_gen.py +0 -0
  269. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/training/__init__.py +0 -0
  270. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/training/backends/__init__.py +0 -0
  271. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/training/backends/prime_rl.py +0 -0
  272. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/training/run_manifest.py +0 -0
  273. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/trajectories/__init__.py +0 -0
  274. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/trajectories/_capture.py +0 -0
  275. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/trajectories/_export_common.py +0 -0
  276. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/trajectories/_llm_capture.py +0 -0
  277. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/trajectories/call_purpose.py +0 -0
  278. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/trajectories/export.py +0 -0
  279. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/trajectories/export_adp.py +0 -0
  280. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/trajectories/export_atif.py +0 -0
  281. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/trajectories/export_prime_sft.py +0 -0
  282. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/trajectories/export_trl_sft.py +0 -0
  283. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/trajectories/metrics.py +0 -0
  284. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/trajectories/results.py +0 -0
  285. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/trajectories/tree.py +0 -0
  286. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/trajectories/trl_sft_tokenization.py +0 -0
  287. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/trajectories/types.py +0 -0
  288. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/trajectories/viewer.py +0 -0
  289. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/usage_tracking.py +0 -0
  290. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/__init__.py +0 -0
  291. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/acceptance_live_harness.py +0 -0
  292. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/agents/__init__.py +0 -0
  293. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/agents/test_manifest_dirscan.py +0 -0
  294. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/agents/test_manifest_loader.py +0 -0
  295. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/agents/test_manifest_parity.py +0 -0
  296. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/agents/test_manifest_wiring.py +0 -0
  297. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/agents/test_namespace_shorthand.py +0 -0
  298. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/agents/test_plugin_entry_points.py +0 -0
  299. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/agents/test_protocol.py +0 -0
  300. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/agents/test_remote_manifest_autoload.py +0 -0
  301. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/conformance/README.md +0 -0
  302. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/conformance/acp_smoke/environment/Dockerfile +0 -0
  303. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/conformance/acp_smoke/environment/docker-compose.yaml +0 -0
  304. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/conformance/acp_smoke/environment/skills/conformance-writer/SKILL.md +0 -0
  305. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/conformance/acp_smoke/instruction.md +0 -0
  306. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/conformance/acp_smoke/solution/solve.sh +0 -0
  307. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/conformance/acp_smoke/task.md +0 -0
  308. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/conformance/acp_smoke/task.toml +0 -0
  309. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/conformance/acp_smoke/tests/test.sh +0 -0
  310. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/conformance/conformance-results.json +0 -0
  311. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/conformance/proof_multi_agent.py +0 -0
  312. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/conformance/proof_snapshot.py +0 -0
  313. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/conformance/run_conformance.py +0 -0
  314. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/conformance/self_gen_smoke_skills/skill-creator/SKILL.md +0 -0
  315. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/conftest.py +0 -0
  316. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/continue_run/__init__.py +0 -0
  317. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/continue_run/_helpers.py +0 -0
  318. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/continue_run/test_batch.py +0 -0
  319. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/continue_run/test_orchestrator.py +0 -0
  320. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/continue_run/test_replay_proxy.py +0 -0
  321. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/continue_run/test_run_folder.py +0 -0
  322. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/environment/__init__.py +0 -0
  323. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/environment/test_chibench_manifest.py +0 -0
  324. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/environment/test_clawsbench_manifest.py +0 -0
  325. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/environment/test_manifest.py +0 -0
  326. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/environment/test_manifest_env.py +0 -0
  327. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/environment/test_protocol.py +0 -0
  328. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/environment/test_readiness.py +0 -0
  329. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/examples/hello-world-task/environment/Dockerfile +0 -0
  330. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/examples/hello-world-task/instruction.md +0 -0
  331. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/examples/hello-world-task/solution/solve.sh +0 -0
  332. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/examples/hello-world-task/task.md +0 -0
  333. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/examples/hello-world-task/task.toml +0 -0
  334. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/examples/hello-world-task/tests/test.sh +0 -0
  335. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/examples/test_claude.sh +0 -0
  336. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/examples/test_codex.sh +0 -0
  337. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/examples/test_codex_custom_provider.sh +0 -0
  338. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/examples/test_gemini.sh +0 -0
  339. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/examples/test_openclaw.sh +0 -0
  340. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/examples/traces/minimal-claude.jsonl +0 -0
  341. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/examples/traces/minimal-opentraces.jsonl +0 -0
  342. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/digest/README.md +0 -0
  343. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/digest/alpha-task/environment/Dockerfile +0 -0
  344. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/digest/alpha-task/instruction.md +0 -0
  345. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/digest/alpha-task/task.toml +0 -0
  346. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/digest/alpha-task/tests/test.sh +0 -0
  347. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/digest/beta-task/data/empty.bin +0 -0
  348. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/digest/beta-task/data/unicode.txt +0 -0
  349. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/digest/beta-task/instruction.md +0 -0
  350. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/digest/beta-task/task.toml +0 -0
  351. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/digest/not-a-task/notes.txt +0 -0
  352. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/mock_acp_agent.py +0 -0
  353. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/mock_acp_agent_interleaved.py +0 -0
  354. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/mock_acp_agent_multi_turn.py +0 -0
  355. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/mock_openai_responses_server.py +0 -0
  356. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/Dockerfile +0 -0
  357. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/data/michigan_stations.txt +0 -0
  358. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/flood-detection/SKILL.md +0 -0
  359. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/nws-flood-thresholds/SKILL.md +0 -0
  360. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/usgs-data-download/SKILL.md +0 -0
  361. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/flood-risk-analysis/instruction.md +0 -0
  362. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/flood-risk-analysis/solution/solve.sh +0 -0
  363. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/flood-risk-analysis/task.toml +0 -0
  364. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/flood-risk-analysis/tests/test.sh +0 -0
  365. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/flood-risk-analysis/tests/test_outputs.py +0 -0
  366. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/Dockerfile +0 -0
  367. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/climate.csv +0 -0
  368. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/hydrology.csv +0 -0
  369. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/land_cover.csv +0 -0
  370. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/water_temperature.csv +0 -0
  371. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/contribution-analysis/SKILL.md +0 -0
  372. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/meteorology-driver-classification/SKILL.md +0 -0
  373. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/pca-decomposition/SKILL.md +0 -0
  374. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/trend-analysis/SKILL.md +0 -0
  375. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/lake-warming-attribution/instruction.md +0 -0
  376. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/lake-warming-attribution/solution/solve.sh +0 -0
  377. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/lake-warming-attribution/task.toml +0 -0
  378. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/lake-warming-attribution/tests/test.sh +0 -0
  379. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/lake-warming-attribution/tests/test_outputs.py +0 -0
  380. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/manifest.json +0 -0
  381. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/Dockerfile +0 -0
  382. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/r2r_simulator.py +0 -0
  383. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/finite-horizon-lqr/SKILL.md +0 -0
  384. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/integral-action-design/SKILL.md +0 -0
  385. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/mpc-horizon-tuning/SKILL.md +0 -0
  386. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/state-space-linearization/SKILL.md +0 -0
  387. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/system_config.json +0 -0
  388. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/r2r-mpc-control/instruction.md +0 -0
  389. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/r2r-mpc-control/solution/solve.sh +0 -0
  390. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/r2r-mpc-control/task.toml +0 -0
  391. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/r2r-mpc-control/tests/test.sh +0 -0
  392. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/r2r-mpc-control/tests/test_outputs.py +0 -0
  393. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/Dockerfile +0 -0
  394. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/generate_training_pcaps.py +0 -0
  395. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/local.rules +0 -0
  396. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/pcap-triage-tshark/SKILL.md +0 -0
  397. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/pcap-triage-tshark/scripts/summarize_http_requests.sh +0 -0
  398. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-offline-evejson/SKILL.md +0 -0
  399. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-offline-evejson/scripts/run_suricata_offline.sh +0 -0
  400. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-rules-basics/SKILL.md +0 -0
  401. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/suricata.yaml +0 -0
  402. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/instruction.md +0 -0
  403. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/solution/solve.sh +0 -0
  404. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/task.toml +0 -0
  405. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/tests/test.sh +0 -0
  406. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/tests/test_outputs.py +0 -0
  407. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/Dockerfile +0 -0
  408. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syz-extract-constants/SKILL.md +0 -0
  409. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syzkaller-build-loop/SKILL.md +0 -0
  410. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syzlang-ioctl-basics/SKILL.md +0 -0
  411. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/instruction.md +0 -0
  412. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/solution/solve.sh +0 -0
  413. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/task.toml +0 -0
  414. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/tests/test.sh +0 -0
  415. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/tests/test_outputs.py +0 -0
  416. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/integration/_consistency.py +0 -0
  417. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/integration/agent_judge.py +0 -0
  418. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/integration/check_adapter_evidence.py +0 -0
  419. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/integration/check_hosted_env_evidence.py +0 -0
  420. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/integration/check_results.py +0 -0
  421. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/integration/check_skillsbench_harbor_parity.py +0 -0
  422. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/integration/check_trace_to_task_evidence.py +0 -0
  423. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/integration/configs/claude-agent-acp.yaml +0 -0
  424. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/integration/configs/codex-acp.yaml +0 -0
  425. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/integration/configs/gemini.yaml +0 -0
  426. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/integration/configs/harvey-lab-harness.yaml +0 -0
  427. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/integration/configs/mimo.yaml +0 -0
  428. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/integration/configs/openclaw.yaml +0 -0
  429. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/integration/configs/opencode.yaml +0 -0
  430. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/integration/configs/openhands.yaml +0 -0
  431. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/integration/configs/pi-acp.yaml +0 -0
  432. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/integration/deepagents_harness.py +0 -0
  433. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/integration/rubric_checks.py +0 -0
  434. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/integration/run.sh +0 -0
  435. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/integration/run_suite.py +0 -0
  436. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/integration/scenarios.py +0 -0
  437. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/integration/suites/release.yaml +0 -0
  438. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_acceptance_evidence.py +0 -0
  439. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_acceptance_live.py +0 -0
  440. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_acceptance_live_execution.py +0 -0
  441. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_acp_capability_advertising.py +0 -0
  442. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_acp_mcp_servers.py +0 -0
  443. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_acp_model_config_dispatch.py +0 -0
  444. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_acp_pinned_protocol_guard.py +0 -0
  445. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_acp_setup_failure_propagation.py +0 -0
  446. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_adapter_scripts.py +0 -0
  447. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_adapters.py +0 -0
  448. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_agent_cli.py +0 -0
  449. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_agent_env_resolution.py +0 -0
  450. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_agent_gemini_defaults.py +0 -0
  451. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_agent_idle_timeout_cli.py +0 -0
  452. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_agent_model_decouple.py +0 -0
  453. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_agent_registry.py +0 -0
  454. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_agent_router.py +0 -0
  455. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_agent_router_cli_e2e.py +0 -0
  456. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_agent_router_scaffold.py +0 -0
  457. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_agent_setup.py +0 -0
  458. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_agent_spec.py +0 -0
  459. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_agentcore_builder.py +0 -0
  460. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_agentcore_parallel.py +0 -0
  461. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_agentcore_reaper.py +0 -0
  462. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_agentcore_sandbox.py +0 -0
  463. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_agentcore_transport.py +0 -0
  464. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_api_error_capture.py +0 -0
  465. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_apple_container_sandbox.py +0 -0
  466. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_bare_model_provider.py +0 -0
  467. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_base_install_imports.py +0 -0
  468. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_bedrock_thinking.py +0 -0
  469. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_benchflow_experiment_review_validator.py +0 -0
  470. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_benchmark_repos_resolve_repo_path.py +0 -0
  471. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_branch.py +0 -0
  472. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_build_context_stage.py +0 -0
  473. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_build_review_pack.py +0 -0
  474. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_capture_trajectory.py +0 -0
  475. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_check_skillsbench_harbor_parity.py +0 -0
  476. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_clawsbench_slice.py +0 -0
  477. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_cli_adopt_aliases.py +0 -0
  478. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_cli_arg_validation.py +0 -0
  479. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_cli_daytona.py +0 -0
  480. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_cli_docs_drift.py +0 -0
  481. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_cli_edge_case_hardening.py +0 -0
  482. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_cli_hub_env.py +0 -0
  483. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_cli_live_progress.py +0 -0
  484. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_cli_misc.py +0 -0
  485. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_codex_review.py +0 -0
  486. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_codex_self_write_auth.py +0 -0
  487. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_config_override.py +0 -0
  488. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_config_redaction.py +0 -0
  489. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_connect_as_env.py +0 -0
  490. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_console_error_truncation.py +0 -0
  491. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_console_progress.py +0 -0
  492. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_continuallearningbench_adapter.py +0 -0
  493. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_dataset_registry.py +0 -0
  494. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_daytona_command_polling.py +0 -0
  495. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_daytona_dind_compose_up.py +0 -0
  496. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_daytona_download.py +0 -0
  497. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_daytona_litellm_runtime.py +0 -0
  498. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_daytona_poll_deadline.py +0 -0
  499. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_daytona_reap.py +0 -0
  500. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_deepagents_agent.py +0 -0
  501. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_docker_prune_scoping.py +0 -0
  502. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_docker_uploads.py +0 -0
  503. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_docs_examples.py +0 -0
  504. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_eng50_capabilities.py +0 -0
  505. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_env_registry.py +0 -0
  506. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_env_setup.py +0 -0
  507. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_environment_manifest_controls.py +0 -0
  508. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_eval_artifact_cli.py +0 -0
  509. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_eval_filters_applied.py +0 -0
  510. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_eval_lift.py +0 -0
  511. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_eval_sharding.py +0 -0
  512. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_eval_single_task_summary.py +0 -0
  513. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_eval_source_provenance.py +0 -0
  514. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_eval_worker_retry.py +0 -0
  515. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_eval_zero_task_guard.py +0 -0
  516. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_evaluation_environment_manifest.py +0 -0
  517. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_exclude_tasks.py +0 -0
  518. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_filter_credentialed_cells.py +0 -0
  519. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_harvey_lab_shim.py +0 -0
  520. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_hilbench_adapter.py +0 -0
  521. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_hosted_env.py +0 -0
  522. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_hosted_env_rollout_contract.py +0 -0
  523. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_hub_harbor_registry.py +0 -0
  524. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_inbound_adapter_manifest.py +0 -0
  525. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_inbound_adapters.py +0 -0
  526. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_integration_agent_judge.py +0 -0
  527. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_integration_check_results.py +0 -0
  528. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_integration_consistency.py +0 -0
  529. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_integration_matrix.py +0 -0
  530. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_integration_provider_selection.py +0 -0
  531. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_integration_run_suite.py +0 -0
  532. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_integration_suite.py +0 -0
  533. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_internet_policy.py +0 -0
  534. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_job.py +0 -0
  535. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_job_sequential_shared.py +0 -0
  536. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_job_sequential_shared_resume.py +0 -0
  537. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_judge_robustness.py +0 -0
  538. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_judge_symlink_ingestion.py +0 -0
  539. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_learner_skills.py +0 -0
  540. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_learner_skills_traversal.py +0 -0
  541. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_learner_store.py +0 -0
  542. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_learner_store_persistence.py +0 -0
  543. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_litellm_config.py +0 -0
  544. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_litellm_hardening.py +0 -0
  545. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_litellm_logging.py +0 -0
  546. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_litellm_model_via_env_generic.py +0 -0
  547. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_litellm_reasoning_passthrough.py +0 -0
  548. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_litellm_runtime.py +0 -0
  549. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_litellm_smoke.py +0 -0
  550. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_live_llm_trajectory.py +0 -0
  551. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_llm_judge.py +0 -0
  552. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_llm_judge_event_tags.py +0 -0
  553. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_llm_judge_verifier.py +0 -0
  554. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_loop_strategies.py +0 -0
  555. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_loop_summary.py +0 -0
  556. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_loop_sweep.py +0 -0
  557. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_memory_scorer.py +0 -0
  558. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_metrics.py +0 -0
  559. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_mle_bench_adapter.py +0 -0
  560. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_mock_openai_responses_server.py +0 -0
  561. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_monitor_scaffold.py +0 -0
  562. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_native_acp_usage.py +0 -0
  563. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_no_cross_provider_fallback.py +0 -0
  564. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_notification_order_real.py +0 -0
  565. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_opencode_family_proxy_tracking.py +0 -0
  566. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_oracle.py +0 -0
  567. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_oracle_chokepoint.py +0 -0
  568. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_paths_safe.py +0 -0
  569. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_paths_symlink_helpers.py +0 -0
  570. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_pi_acp_launcher.py +0 -0
  571. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_pi_acp_proxy_routing.py +0 -0
  572. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_process.py +0 -0
  573. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_project_skills_layout.py +0 -0
  574. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_provider_auth_detection.py +0 -0
  575. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_providers.py +0 -0
  576. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_reexport.py +0 -0
  577. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_registry_invariants.py +0 -0
  578. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_release_hardening_r5.py +0 -0
  579. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_release_version.py +0 -0
  580. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_release_workflow_wiring.py +0 -0
  581. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_resolve_env_helpers.py +0 -0
  582. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_review_boundaries.py +0 -0
  583. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_review_rubric.py +0 -0
  584. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_review_runtime.py +0 -0
  585. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_reward_lenient.py +0 -0
  586. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_reward_node.py +0 -0
  587. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_reward_range.py +0 -0
  588. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_reward_unified_contract.py +0 -0
  589. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_rewards.py +0 -0
  590. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_rewards_jsonl.py +0 -0
  591. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_rollout_architecture.py +0 -0
  592. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_rollout_branch.py +0 -0
  593. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_rollout_config_path_coercion.py +0 -0
  594. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_rollout_environment.py +0 -0
  595. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_rollout_hard_deadline.py +0 -0
  596. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_rollout_import_no_side_effects.py +0 -0
  597. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_rollout_on_ask_user_wiring.py +0 -0
  598. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_rollout_planes_contract.py +0 -0
  599. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_rollout_probe_sandbox_health.py +0 -0
  600. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_rollout_session_factory_dispatch.py +0 -0
  601. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_rollout_setup_commands.py +0 -0
  602. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_rollout_upload.py +0 -0
  603. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_rubric_checks.py +0 -0
  604. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_rubric_config.py +0 -0
  605. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_runtime.py +0 -0
  606. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_runtime_capabilities.py +0 -0
  607. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_runtime_config_wired.py +0 -0
  608. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_runtime_live_sandbox.py +0 -0
  609. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_sandbox.py +0 -0
  610. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_sandbox_exec_secret_handling.py +0 -0
  611. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_sandbox_hardening.py +0 -0
  612. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_sandbox_isolation_copy_traversal.py +0 -0
  613. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_sandbox_live_process.py +0 -0
  614. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_sandbox_multi_service.py +0 -0
  615. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_sandbox_prebuilt_validation.py +0 -0
  616. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_sandbox_protocol.py +0 -0
  617. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_sandbox_provider_registry_drift.py +0 -0
  618. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_sandbox_setup.py +0 -0
  619. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_sandbox_snapshot_contract.py +0 -0
  620. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_sandbox_upload_symlink.py +0 -0
  621. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_sandbox_verifier_workspace.py +0 -0
  622. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_scene.py +0 -0
  623. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_scene_outbox_trial.py +0 -0
  624. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_scene_parallel_group.py +0 -0
  625. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_scene_result_aggregation.py +0 -0
  626. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_scoring.py +0 -0
  627. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_sdk_internals.py +0 -0
  628. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_sdk_lockdown.py +0 -0
  629. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_sdk_run_alias.py +0 -0
  630. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_sealed_channel_container.py +0 -0
  631. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_self_gen_cli.py +0 -0
  632. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_self_gen_export_error_channel.py +0 -0
  633. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_self_gen_export_failures.py +0 -0
  634. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_self_gen_orchestration.py +0 -0
  635. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_session_factory_runtime.py +0 -0
  636. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_session_request_permission_dispatch.py +0 -0
  637. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_skill_eval.py +0 -0
  638. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_skill_eval_dryrun.py +0 -0
  639. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_skill_eval_integration.py +0 -0
  640. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_skill_eval_sweep.py +0 -0
  641. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_skill_eval_traversal.py +0 -0
  642. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_skill_invocation_artifacts.py +0 -0
  643. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_skill_policy.py +0 -0
  644. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_skills.py +0 -0
  645. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_skills_dir_agent_home_link.py +0 -0
  646. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_skillsbench_conversion_conformance.py +0 -0
  647. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_skillsbench_harbor_run_suite.py +0 -0
  648. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_smoke.py +0 -0
  649. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_smoke_wiring.py +0 -0
  650. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_source_adapters.py +0 -0
  651. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_subscription_auth.py +0 -0
  652. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_task_check_eval_consistency.py +0 -0
  653. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_task_config.py +0 -0
  654. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_task_digest.py +0 -0
  655. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_task_document.py +0 -0
  656. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_task_download.py +0 -0
  657. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_task_export.py +0 -0
  658. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_task_output_format.py +0 -0
  659. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_task_package.py +0 -0
  660. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_task_runtime_primitive.py +0 -0
  661. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_tasks.py +0 -0
  662. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_token_usage_normalization.py +0 -0
  663. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_trace_import_cli.py +0 -0
  664. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_trace_task_gen_traversal.py +0 -0
  665. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_trace_to_task_evidence.py +0 -0
  666. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_traces_huggingface.py +0 -0
  667. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_traces_parsers.py +0 -0
  668. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_traces_task_gen.py +0 -0
  669. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_train_cli.py +0 -0
  670. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_train_mode_artifact_emission.py +0 -0
  671. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_train_trl_cli.py +0 -0
  672. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_trajectory_integration.py +0 -0
  673. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_trajectory_streaming.py +0 -0
  674. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_trial_agent_timeout_verify.py +0 -0
  675. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_trial_install_agent_timeout.py +0 -0
  676. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_trial_litellm_runtime.py +0 -0
  677. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_trl_integration.py +0 -0
  678. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_usage_litellm.py +0 -0
  679. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_usage_required.py +0 -0
  680. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_usage_tracking.py +0 -0
  681. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_user.py +0 -0
  682. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_v06_guard_ports.py +0 -0
  683. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_verifier_document.py +0 -0
  684. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_verifier_multi_container.py +0 -0
  685. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_verifier_output.py +0 -0
  686. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_verifier_output_freshness.py +0 -0
  687. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_verifier_strategies.py +0 -0
  688. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_verifier_wedge_retry.py +0 -0
  689. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_verify.py +0 -0
  690. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_workflow_action_pinning.py +0 -0
  691. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_yaml_config.py +0 -0
  692. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/trajectories/__init__.py +0 -0
  693. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/trajectories/test_export.py +0 -0
  694. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/trajectories/test_export_adp.py +0 -0
  695. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/trajectories/test_export_atif.py +0 -0
  696. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/trajectories/test_export_common.py +0 -0
  697. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/trajectories/test_export_nan_handling.py +0 -0
  698. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/trajectories/test_export_prime_sft.py +0 -0
  699. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/trajectories/test_redaction.py +0 -0
  700. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/trajectories/test_step_granularity.py +0 -0
  701. {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/trajectories/test_tree.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: benchflow
3
- Version: 0.6.7.dev1829
3
+ Version: 0.6.7.dev1831
4
4
  Summary: Multi-turn agent benchmarking with ACP — run any agent, any model, any provider.
5
5
  Project-URL: Homepage, https://github.com/benchflow-ai/benchflow
6
6
  Project-URL: Repository, https://github.com/benchflow-ai/benchflow
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "benchflow"
3
- version = "0.6.7.dev1829"
3
+ version = "0.6.7.dev1831"
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"
@@ -6,12 +6,58 @@ from pathlib import Path
6
6
  from typing import Any, TextIO
7
7
 
8
8
  from benchflow.sandbox.process import LiveProcess
9
+ from benchflow.sandbox.process._base import _ANSI_CSI_RE, _ANSI_OSC_RE
9
10
 
10
11
  from .transport import Transport, decode_json_rpc_message
11
12
 
12
13
  logger = logging.getLogger(__name__)
13
14
 
14
15
 
16
+ def _decode_pty_json_rpc_message(text: str) -> dict[str, Any] | None:
17
+ """Decode one JSON-RPC message from a line that may carry PTY noise.
18
+
19
+ Daytona's PTY transport gives the agent a real terminal, so the shell
20
+ prompt (with its CSI/OSC escape sequences) can land on the SAME line as
21
+ the agent's first protocol message — observed on BugSwarm-style images
22
+ as ``\\x1b[?2004h\\x1b]0;root@…\\x07root@…# \\x1b[?2004l{"jsonrpc":…}``.
23
+ Whole-line ``json.loads`` fails on that prefix, the response is treated
24
+ as non-protocol noise, and the handshake "times out" with the completed
25
+ initialize JSON sitting in the captured agent log — at ANY timeout.
26
+
27
+ Recovery is bounded to where the bug lives: :meth:`ContainerTransport.
28
+ receive` calls this lenient path only until the first successfully
29
+ decoded protocol message per connection (prompt glue is by construction
30
+ a pre-first-message PTY phenomenon), and stdio pipes keep the strict
31
+ whole-line contract in :func:`decode_json_rpc_message`.
32
+
33
+ 1. fast path — the plain whole-line decode, unchanged;
34
+ 2. retry from the first ``{`` when it is not at position 0 (drops a
35
+ glued prompt prefix);
36
+ 3. if the line carries ``\\x1b``, strip CSI/OSC sequences (drops escapes
37
+ trailing or embedded around the JSON) and retry from the first ``{``.
38
+
39
+ Every retry still goes through :func:`decode_json_rpc_message`, so the
40
+ JSON-RPC 2.0 envelope check keeps rejecting agent log lines that merely
41
+ contain JSON (e.g. ``INFO {"jsonrpc": …}`` with a bad envelope).
42
+ """
43
+ message = decode_json_rpc_message(text)
44
+ if message is not None:
45
+ return message
46
+ if "{" not in text:
47
+ return None
48
+ brace = text.index("{")
49
+ if brace: # brace == 0 would just repeat the whole-line decode
50
+ message = decode_json_rpc_message(text[brace:])
51
+ if message is not None:
52
+ return message
53
+ if "\x1b" not in text:
54
+ return None
55
+ cleaned = _ANSI_CSI_RE.sub("", _ANSI_OSC_RE.sub("", text))
56
+ if "{" not in cleaned:
57
+ return None
58
+ return decode_json_rpc_message(cleaned[cleaned.index("{") :])
59
+
60
+
15
61
  class ContainerTransport(Transport):
16
62
  """ACP transport that speaks to an agent running inside a sandbox.
17
63
 
@@ -34,6 +80,12 @@ class ContainerTransport(Transport):
34
80
  self._cwd = cwd
35
81
  self._agent_log_path = agent_log_path
36
82
  self._agent_log_file: TextIO | None = None
83
+ # First-message latch: the lenient PTY-noise decode applies only
84
+ # until the first successfully decoded protocol message (prompt glue
85
+ # is a startup phenomenon). Afterwards the strict whole-line decode
86
+ # rules, so an agent echoing valid protocol envelopes into its logs
87
+ # mid-session can never impersonate protocol traffic.
88
+ self._saw_protocol = False
37
89
 
38
90
  async def start(self) -> None:
39
91
  """Start the agent process inside the sandbox."""
@@ -65,8 +117,12 @@ class ContainerTransport(Transport):
65
117
  text = line.decode(errors="replace").strip()
66
118
  if not text:
67
119
  continue
68
- message = decode_json_rpc_message(text)
120
+ if self._saw_protocol:
121
+ message = decode_json_rpc_message(text)
122
+ else:
123
+ message = _decode_pty_json_rpc_message(text)
69
124
  if message is not None:
125
+ self._saw_protocol = True
70
126
  return message
71
127
  # Capture non-protocol output (agent debug logs, errors, warnings).
72
128
  if self._agent_log_path:
@@ -6,10 +6,11 @@ Owns the live agent-side of a run:
6
6
  - execute_prompts: send each prompt through the session, capture the
7
7
  ACP-native trajectory, and report tool-call counts
8
8
 
9
- The one allowed horizontal phase import in this refactor lives here:
10
- ``from benchflow.sandbox.lockdown import build_priv_drop_cmd``. connect_acp wraps
11
- the agent launch command in the sandbox user's privilege-drop prefix
12
- before handing it to the transport. It is a single pure-function call
9
+ The allowed horizontal phase imports in this refactor live here:
10
+ ``from benchflow.sandbox.lockdown import build_priv_drop_cmd`` (connect_acp
11
+ wraps the agent launch command in the sandbox user's privilege-drop prefix
12
+ before handing it to the transport) and the shared timeout-env parser from
13
+ ``benchflow.sandbox.process._base``. Both are single pure-function calls
13
14
  with no shared state — not a coupling of concerns.
14
15
 
15
16
  Does not own:
@@ -46,6 +47,7 @@ from benchflow.sandbox.lockdown import (
46
47
  build_priv_drop_cmd,
47
48
  enforce_agent_egress_firewall,
48
49
  )
50
+ from benchflow.sandbox.process._base import _timeout_sec_from_env
49
51
  from benchflow.trajectories._capture import _capture_session_trajectory
50
52
 
51
53
  # Re-exported for backwards compatibility — tests and downstream code
@@ -65,10 +67,27 @@ logger = logging.getLogger(__name__)
65
67
  _ACP_CONNECT_MAX_RETRIES = 3
66
68
  _ACP_CONNECT_BASE_DELAY = 2.0
67
69
  _PROMPT_CANCEL_DRAIN_TIMEOUT_SEC = 0.25
68
- _ACP_HANDSHAKE_TIMEOUT_SEC = 60
70
+ _ACP_HANDSHAKE_TIMEOUT_ENV = "BENCHFLOW_ACP_HANDSHAKE_TIMEOUT"
71
+ _ACP_HANDSHAKE_TIMEOUT_DEFAULT_SEC = 60.0
69
72
  _OPENHANDS_DISABLE_SUBAGENTS_ENV = "BENCHFLOW_OPENHANDS_DISABLE_SUBAGENTS"
70
73
 
71
74
 
75
+ def _acp_handshake_timeout_sec() -> float:
76
+ """Effective timeout for the pre-prompt ACP handshake, in seconds.
77
+
78
+ Agent startup cost scales with the task image — heavyweight images
79
+ (workspace scanning, kernel prep) can push the ``initialize`` response
80
+ past the 60s default, so operators can override it with
81
+ ``BENCHFLOW_ACP_HANDSHAKE_TIMEOUT`` (seconds). Parsing (use-time read,
82
+ positive-float validation, warn-and-fall-back) is shared with the other
83
+ transport timeout knobs in :mod:`benchflow.sandbox.process._base`.
84
+ """
85
+ return _timeout_sec_from_env(
86
+ _ACP_HANDSHAKE_TIMEOUT_ENV,
87
+ _ACP_HANDSHAKE_TIMEOUT_DEFAULT_SEC,
88
+ )
89
+
90
+
72
91
  async def _prepare_openhands_direct_execution(
73
92
  env,
74
93
  *,
@@ -129,13 +148,11 @@ async def _prepare_openhands_direct_execution(
129
148
 
130
149
 
131
150
  async def _wait_for_acp_handshake(awaitable, *, phase: str):
151
+ timeout_sec = _acp_handshake_timeout_sec()
132
152
  try:
133
- return await asyncio.wait_for(awaitable, timeout=_ACP_HANDSHAKE_TIMEOUT_SEC)
153
+ return await asyncio.wait_for(awaitable, timeout=timeout_sec)
134
154
  except TimeoutError as e:
135
- msg = (
136
- f"ACP {phase} timed out after {_ACP_HANDSHAKE_TIMEOUT_SEC}s "
137
- "before the first prompt"
138
- )
155
+ msg = f"ACP {phase} timed out after {timeout_sec:g}s before the first prompt"
139
156
  raise TransportClosedError(
140
157
  msg,
141
158
  TransportClosedDiagnostic(
@@ -23,6 +23,7 @@ from __future__ import annotations
23
23
  import asyncio
24
24
  import contextlib
25
25
  import logging
26
+ import os
26
27
  import re
27
28
  from abc import ABC, abstractmethod
28
29
 
@@ -33,6 +34,41 @@ _DIAG_TRUNCATE = 2000 # max chars for diagnostic stderr in error messages
33
34
  _BOOTSTRAP_DONE = "__BENCHFLOW_BOOTSTRAP_DONE__"
34
35
  _ENV_KEY_RE = re.compile(r"^[A-Za-z_][A-Za-z0-9_]*$")
35
36
 
37
+ # Terminal control sequences a PTY-backed transport can interleave with
38
+ # protocol output: ECMA-48 CSI (parameter bytes 0x30-0x3F, intermediate
39
+ # bytes 0x20-0x2F, one final byte 0x40-0x7E) and OSC (BEL- or ST-terminated,
40
+ # e.g. the ``\x1b]0;<title>\x07`` window-title update shell prompts emit).
41
+ # One canonical pair — the AgentCore stdout chunker and the ACP container
42
+ # transport must not drift apart on what counts as terminal noise.
43
+ _ANSI_CSI_PATTERN = r"\x1b\[[0-?]*[ -/]*[@-~]"
44
+ _ANSI_OSC_PATTERN = r"\x1b\][^\x07\x1b]*(?:\x07|\x1b\\)"
45
+ _ANSI_CSI_RE = re.compile(_ANSI_CSI_PATTERN)
46
+ _ANSI_OSC_RE = re.compile(_ANSI_OSC_PATTERN)
47
+ _ANSI_CSI_RE_BYTES = re.compile(_ANSI_CSI_PATTERN.encode())
48
+ _ANSI_OSC_RE_BYTES = re.compile(_ANSI_OSC_PATTERN.encode())
49
+
50
+
51
+ def _timeout_sec_from_env(env_var: str, default: float) -> float:
52
+ """Read a positive seconds value from *env_var*, else *default*.
53
+
54
+ The one parser for operator-tunable timeout knobs on this plane (PTY
55
+ readline timeouts, the ACP handshake window). Read at use time so
56
+ long-lived processes and tests see env changes. Unset or empty means
57
+ the default; non-numeric, non-positive, or NaN values warn and fall
58
+ back rather than disabling or breaking the guarded wait.
59
+ """
60
+ raw = os.environ.get(env_var)
61
+ if raw is None or not raw.strip():
62
+ return default
63
+ try:
64
+ value = float(raw)
65
+ except ValueError:
66
+ value = float("nan")
67
+ if not value > 0: # also rejects NaN
68
+ logger.warning("Invalid %s=%r; using default %.0fs", env_var, raw, default)
69
+ return default
70
+ return value
71
+
36
72
 
37
73
  async def drain_oversized_line(reader: asyncio.StreamReader) -> int:
38
74
  """Drain an oversized line from *reader* after a buffer overflow.
@@ -19,12 +19,17 @@ from __future__ import annotations
19
19
  import asyncio
20
20
  import contextlib
21
21
  import logging
22
- import re
23
22
  import shlex
24
23
  import uuid
25
24
  from typing import Any
26
25
 
27
- from benchflow.sandbox.process._base import _ENV_KEY_RE, LiveProcess
26
+ from benchflow.sandbox.process._base import (
27
+ _ANSI_CSI_RE_BYTES,
28
+ _ANSI_OSC_RE_BYTES,
29
+ _ENV_KEY_RE,
30
+ LiveProcess,
31
+ _timeout_sec_from_env,
32
+ )
28
33
 
29
34
  logger = logging.getLogger(__name__)
30
35
 
@@ -38,26 +43,10 @@ _READER_ENDED = object()
38
43
  _START_MARKER_TIMEOUT_SEC = 180
39
44
  _READLINE_TIMEOUT_ENV = "BENCHFLOW_AGENTCORE_READLINE_TIMEOUT"
40
45
  _READLINE_TIMEOUT_DEFAULT_SEC = 900.0
41
- _ANSI_CSI_RE = re.compile(rb"\x1b\[[0-?]*[ -/]*[@-~]")
42
46
 
43
47
 
44
48
  def _readline_timeout_sec() -> float:
45
- import os
46
-
47
- value = os.environ.get(_READLINE_TIMEOUT_ENV)
48
- if value is None:
49
- return _READLINE_TIMEOUT_DEFAULT_SEC
50
- try:
51
- timeout = float(value)
52
- except ValueError:
53
- logger.warning(
54
- "Invalid %s=%r; using default %.0fs",
55
- _READLINE_TIMEOUT_ENV,
56
- value,
57
- _READLINE_TIMEOUT_DEFAULT_SEC,
58
- )
59
- return _READLINE_TIMEOUT_DEFAULT_SEC
60
- return timeout if timeout > 0 else _READLINE_TIMEOUT_DEFAULT_SEC
49
+ return _timeout_sec_from_env(_READLINE_TIMEOUT_ENV, _READLINE_TIMEOUT_DEFAULT_SEC)
61
50
 
62
51
 
63
52
  class AgentCoreProcess(LiveProcess):
@@ -119,9 +108,12 @@ class AgentCoreProcess(LiveProcess):
119
108
  line, self._partial = self._partial.split(b"\n", 1)
120
109
  # Bash/readline emits bracketed-paste CSI sequences when a
121
110
  # command takes over the PTY, including a standalone
122
- # ``ESC[?2004l`` *after* the startup marker. Those bytes
123
- # are terminal state, never ACP JSON-RPC.
124
- line = _ANSI_CSI_RE.sub(b"", line.replace(b"\r", b""))
111
+ # ``ESC[?2004l`` *after* the startup marker, and shell
112
+ # prompts emit OSC window-title updates. Those bytes are
113
+ # terminal state, never ACP JSON-RPC.
114
+ line = line.replace(b"\r", b"")
115
+ line = _ANSI_OSC_RE_BYTES.sub(b"", line)
116
+ line = _ANSI_CSI_RE_BYTES.sub(b"", line)
125
117
  if line:
126
118
  await self._line_buffer.put(line + b"\n")
127
119
  except asyncio.CancelledError:
@@ -308,8 +300,10 @@ class AgentCoreProcess(LiveProcess):
308
300
  # before echo suppression takes effect. Substring matching accepts
309
301
  # that echoed command and releases startup too early, putting the
310
302
  # prompt/command noise into ACP's JSON-RPC stream. The real marker
311
- # is its own line, possibly wrapped in bracketed-paste ANSI codes.
312
- text = _ANSI_CSI_RE.sub(b"", line).decode(errors="replace").strip()
303
+ # is its own line, possibly wrapped in bracketed-paste ANSI codes
304
+ # or an OSC window-title update from the shell prompt.
305
+ cleaned = _ANSI_CSI_RE_BYTES.sub(b"", _ANSI_OSC_RE_BYTES.sub(b"", line))
306
+ text = cleaned.decode(errors="replace").strip()
313
307
  if text == marker:
314
308
  return
315
309
 
@@ -18,6 +18,7 @@ from benchflow.sandbox.process._base import (
18
18
  _ENV_KEY_RE,
19
19
  LiveProcess,
20
20
  SubprocessLiveProcess,
21
+ _timeout_sec_from_env,
21
22
  )
22
23
 
23
24
  logger = logging.getLogger(__name__)
@@ -30,22 +31,10 @@ _DAYTONA_SSH_SERVER_ALIVE_COUNT_MAX = 12
30
31
 
31
32
 
32
33
  def _daytona_pty_readline_timeout_sec() -> float:
33
- value = os.environ.get(_DAYTONA_PTY_READLINE_TIMEOUT_ENV)
34
- if value is None:
35
- return _DAYTONA_PTY_READLINE_TIMEOUT_DEFAULT_SEC
36
- try:
37
- timeout = float(value)
38
- except ValueError:
39
- logger.warning(
40
- "Invalid %s=%r; using default %.0fs",
41
- _DAYTONA_PTY_READLINE_TIMEOUT_ENV,
42
- value,
43
- _DAYTONA_PTY_READLINE_TIMEOUT_DEFAULT_SEC,
44
- )
45
- return _DAYTONA_PTY_READLINE_TIMEOUT_DEFAULT_SEC
46
- if timeout <= 0:
47
- return _DAYTONA_PTY_READLINE_TIMEOUT_DEFAULT_SEC
48
- return timeout
34
+ return _timeout_sec_from_env(
35
+ _DAYTONA_PTY_READLINE_TIMEOUT_ENV,
36
+ _DAYTONA_PTY_READLINE_TIMEOUT_DEFAULT_SEC,
37
+ )
49
38
 
50
39
 
51
40
  async def _cleanup_daytona_remote_env_file(
@@ -613,6 +613,132 @@ class TestTransportProtocolFiltering:
613
613
  )
614
614
 
615
615
 
616
+ class TestContainerTransportPtyNoise:
617
+ """PTY-glued shell noise must not hide a protocol message on the same line.
618
+
619
+ Daytona's PTY transport gives the agent a real terminal; on BugSwarm-style
620
+ images the shell prompt (bracketed-paste CSI + OSC window title) lands on
621
+ the SAME pty line as the agent's initialize response. Whole-line json.loads
622
+ fails, the response is filed as non-protocol noise, and the handshake
623
+ "times out" at ANY window with the completed JSON sitting in the agent log
624
+ (observed 6/6 on fix-build-agentops at both 60s and 300s).
625
+ """
626
+
627
+ # Exact shape captured from the failing run's agent/prime_agent.txt:
628
+ # bracketed-paste on, OSC 0 window title, prompt, bracketed-paste off,
629
+ # then the agent's initialize response glued on the same line.
630
+ PROMPT_GLUED_INIT = (
631
+ b"\x1b[?2004h"
632
+ b"\x1b]0;root@9ec4903f-9479-4754-9039-d1b5a544cb28: /home/github/build\x07"
633
+ b"root@9ec4903f-9479-4754-9039-d1b5a544cb28:/home/github/build# "
634
+ b"\x1b[?2004l"
635
+ b'{"jsonrpc": "2.0", "id": 100001, "result": {"protocolVersion": 1}}\n'
636
+ )
637
+
638
+ @pytest.mark.asyncio
639
+ async def test_prompt_glued_initialize_response_decodes(self, tmp_path) -> None:
640
+ fake_process = AsyncMock()
641
+ fake_process.readline = AsyncMock(return_value=self.PROMPT_GLUED_INIT)
642
+ agent_log = tmp_path / "agent" / "prime_agent.txt"
643
+ transport = ContainerTransport(
644
+ container_process=fake_process,
645
+ command="agent acp",
646
+ agent_log_path=agent_log,
647
+ )
648
+
649
+ await transport.start()
650
+ try:
651
+ msg = await asyncio.wait_for(transport.receive(), timeout=5)
652
+ finally:
653
+ await transport.close()
654
+
655
+ assert msg == {
656
+ "jsonrpc": "2.0",
657
+ "id": 100001,
658
+ "result": {"protocolVersion": 1},
659
+ }
660
+ # Decoded as protocol — nothing should be filed as noise.
661
+ assert not agent_log.exists()
662
+
663
+ def test_json_trailed_by_ansi_escapes_decodes(self) -> None:
664
+ """The CSI/OSC strip path recovers JSON with trailing escape noise."""
665
+ from benchflow.acp.container_transport import _decode_pty_json_rpc_message
666
+
667
+ line = '\x1b[?2004l{"jsonrpc": "2.0", "id": 7, "result": {}}\x1b[K'
668
+ assert _decode_pty_json_rpc_message(line) == {
669
+ "jsonrpc": "2.0",
670
+ "id": 7,
671
+ "result": {},
672
+ }
673
+
674
+ def test_log_line_with_invalid_envelope_still_rejected(self) -> None:
675
+ """A log line that merely contains JSON must stay non-protocol noise."""
676
+ from benchflow.acp.container_transport import _decode_pty_json_rpc_message
677
+
678
+ # Valid JSON after the first "{", but not a valid JSON-RPC envelope
679
+ # (no method, no result/error) — the envelope check must still reject.
680
+ assert (
681
+ _decode_pty_json_rpc_message('INFO {"jsonrpc": "2.0", "note": "boot"}')
682
+ is None
683
+ )
684
+ assert _decode_pty_json_rpc_message("plain log line, no json") is None
685
+
686
+ def test_plain_json_fast_path_unchanged(self) -> None:
687
+ from benchflow.acp.container_transport import _decode_pty_json_rpc_message
688
+
689
+ assert _decode_pty_json_rpc_message(
690
+ '{"jsonrpc": "2.0", "id": 1, "result": {"ok": true}}'
691
+ ) == {"jsonrpc": "2.0", "id": 1, "result": {"ok": True}}
692
+
693
+ def test_valid_envelope_after_log_prefix_decodes_pre_latch(self) -> None:
694
+ """Deliberate edge, documented: pre-latch, a log line that embeds a
695
+ COMPLETE valid JSON-RPC envelope decodes as protocol. That is the
696
+ exact shape of the prompt-glued handshake bug; before the first
697
+ protocol message it cannot be told apart from the real thing.
698
+ """
699
+ from benchflow.acp.container_transport import _decode_pty_json_rpc_message
700
+
701
+ assert _decode_pty_json_rpc_message(
702
+ 'INFO sent {"jsonrpc": "2.0", "id": 3, "result": {}}'
703
+ ) == {"jsonrpc": "2.0", "id": 3, "result": {}}
704
+
705
+ @pytest.mark.asyncio
706
+ async def test_lenient_decode_latches_off_after_first_protocol_message(
707
+ self, tmp_path
708
+ ) -> None:
709
+ """After the first decoded protocol message the strict whole-line
710
+ decode rules: the same prefix-glued valid envelope that decodes
711
+ pre-latch is filed as noise post-latch, so a mid-session agent
712
+ echoing protocol envelopes into its logs cannot impersonate traffic.
713
+ """
714
+ glued_log = b'INFO sent {"jsonrpc": "2.0", "id": 3, "result": {}}\n'
715
+ fake_process = AsyncMock()
716
+ fake_process.readline = AsyncMock(
717
+ side_effect=[
718
+ self.PROMPT_GLUED_INIT, # lenient path decodes; latch sets
719
+ glued_log, # post-latch: strict decode files it as noise
720
+ b'{"jsonrpc": "2.0", "id": 4, "result": {"ok": true}}\n',
721
+ ]
722
+ )
723
+ agent_log = tmp_path / "agent" / "prime_agent.txt"
724
+ transport = ContainerTransport(
725
+ container_process=fake_process,
726
+ command="agent acp",
727
+ agent_log_path=agent_log,
728
+ )
729
+
730
+ await transport.start()
731
+ try:
732
+ first = await asyncio.wait_for(transport.receive(), timeout=5)
733
+ second = await asyncio.wait_for(transport.receive(), timeout=5)
734
+ finally:
735
+ await transport.close()
736
+
737
+ assert first["id"] == 100001
738
+ assert second == {"jsonrpc": "2.0", "id": 4, "result": {"ok": True}}
739
+ assert "INFO sent" in agent_log.read_text()
740
+
741
+
616
742
  class TestACPInterleaving:
617
743
  """Test that _read_until_response handles interleaved notifications and agent requests."""
618
744
 
@@ -914,6 +1040,55 @@ class TestIdleTimeoutDiagnostics:
914
1040
  assert exc_info.value.trajectory[1]["status"] == ToolCallStatus.PENDING.value
915
1041
 
916
1042
 
1043
+ class TestAcpHandshakeTimeout:
1044
+ """The pre-prompt handshake timeout is env-configurable at use time.
1045
+
1046
+ A fixed 60s is wrong for heavyweight task images — agent startup scales
1047
+ with the image (workspace scanning, kernel prep), and on such images the
1048
+ ``initialize`` response deterministically lands after the window. The
1049
+ override is read per call (not cached at import) so long-lived processes
1050
+ and these tests see env changes.
1051
+ """
1052
+
1053
+ def test_default_is_60s_without_env(self, monkeypatch) -> None:
1054
+ from benchflow.acp.runtime import _acp_handshake_timeout_sec
1055
+
1056
+ monkeypatch.delenv("BENCHFLOW_ACP_HANDSHAKE_TIMEOUT", raising=False)
1057
+ assert _acp_handshake_timeout_sec() == 60.0
1058
+
1059
+ def test_env_override_is_honored(self, monkeypatch) -> None:
1060
+ from benchflow.acp.runtime import _acp_handshake_timeout_sec
1061
+
1062
+ monkeypatch.setenv("BENCHFLOW_ACP_HANDSHAKE_TIMEOUT", "300")
1063
+ assert _acp_handshake_timeout_sec() == 300.0
1064
+ # Float values are accepted too.
1065
+ monkeypatch.setenv("BENCHFLOW_ACP_HANDSHAKE_TIMEOUT", "90.5")
1066
+ assert _acp_handshake_timeout_sec() == 90.5
1067
+
1068
+ @pytest.mark.parametrize("garbage", ["banana", "", " ", "-5", "0", "nan"])
1069
+ def test_garbage_or_non_positive_falls_back_to_default(
1070
+ self, monkeypatch, garbage
1071
+ ) -> None:
1072
+ from benchflow.acp.runtime import _acp_handshake_timeout_sec
1073
+
1074
+ monkeypatch.setenv("BENCHFLOW_ACP_HANDSHAKE_TIMEOUT", garbage)
1075
+ assert _acp_handshake_timeout_sec() == 60.0
1076
+
1077
+ @pytest.mark.asyncio
1078
+ async def test_timeout_error_carries_effective_value(self, monkeypatch) -> None:
1079
+ """The TransportClosedError message interpolates the EFFECTIVE timeout."""
1080
+ from benchflow.acp.runtime import _wait_for_acp_handshake
1081
+ from benchflow.diagnostics import TransportClosedError
1082
+
1083
+ monkeypatch.setenv("BENCHFLOW_ACP_HANDSHAKE_TIMEOUT", "0.05")
1084
+
1085
+ with pytest.raises(TransportClosedError) as exc_info:
1086
+ await _wait_for_acp_handshake(asyncio.Future(), phase="initialize")
1087
+
1088
+ assert "timed out after 0.05s before the first prompt" in str(exc_info.value)
1089
+ assert exc_info.value.diagnostic.transport_diagnosis == "acp_initialize_timeout"
1090
+
1091
+
917
1092
  class TestConnectAcpModelSelection:
918
1093
  """Verify connect_acp passes the right model string to set_model."""
919
1094