benchflow 0.6.8.dev1907__tar.gz → 0.6.9.dev1917__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 (713) hide show
  1. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/CHANGELOG.md +36 -0
  2. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/PKG-INFO +11 -1
  3. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/README.md +1 -0
  4. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/pyproject.toml +15 -1
  5. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/cli/main.py +2 -0
  6. benchflow-0.6.9.dev1917/src/benchflow/cli/traj.py +138 -0
  7. benchflow-0.6.9.dev1917/src/benchflow/publish/azure_blob.py +142 -0
  8. benchflow-0.6.9.dev1917/src/benchflow/publish/broker.py +193 -0
  9. benchflow-0.6.9.dev1917/src/benchflow/publish/redact.py +209 -0
  10. benchflow-0.6.9.dev1917/src/benchflow/publish/traj_capture.py +450 -0
  11. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/sandbox/process/_base.py +22 -14
  12. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/trajectories/types.py +9 -2
  13. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_process.py +34 -0
  14. benchflow-0.6.9.dev1917/tests/test_publish_azure_blob.py +686 -0
  15. benchflow-0.6.9.dev1917/tests/test_traj_upload_cli.py +301 -0
  16. benchflow-0.6.9.dev1917/tests/test_trajectory_upload_service.py +1304 -0
  17. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/.gitignore +0 -0
  18. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/LICENSE +0 -0
  19. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/__init__.py +0 -0
  20. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/_dotenv.py +0 -0
  21. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/_paths.py +0 -0
  22. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/_run.py +0 -0
  23. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/_types.py +0 -0
  24. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/_utils/__init__.py +0 -0
  25. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/_utils/benchmark_repos.py +0 -0
  26. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/_utils/build_context_stage.py +0 -0
  27. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/_utils/config.py +0 -0
  28. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/_utils/config_override.py +0 -0
  29. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/_utils/content_address.py +0 -0
  30. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/_utils/dataset_registry.py +0 -0
  31. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/_utils/env_registry.py +0 -0
  32. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/_utils/evaluation_results.py +0 -0
  33. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/_utils/hf_datasets.py +0 -0
  34. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/_utils/json_safe.py +0 -0
  35. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/_utils/learner_memory.py +0 -0
  36. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/_utils/live_activity.py +0 -0
  37. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/_utils/result_metadata.py +0 -0
  38. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/_utils/reward_events.py +0 -0
  39. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/_utils/scoring.py +0 -0
  40. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/_utils/source_provenance.py +0 -0
  41. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/_utils/task_authoring/__init__.py +0 -0
  42. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/_utils/task_authoring/_evidence_paths.py +0 -0
  43. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/_utils/task_authoring/acceptance_evidence.py +0 -0
  44. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/_utils/task_authoring/scaffolding.py +0 -0
  45. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/_utils/task_authoring/structural_checks.py +0 -0
  46. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/_utils/text.py +0 -0
  47. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/_utils/yaml_loader.py +0 -0
  48. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/acp/__init__.py +0 -0
  49. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/acp/client.py +0 -0
  50. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/acp/container_transport.py +0 -0
  51. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/acp/runtime.py +0 -0
  52. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/acp/selection.py +0 -0
  53. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/acp/session.py +0 -0
  54. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/acp/transport.py +0 -0
  55. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/acp/types.py +0 -0
  56. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/adapters/__init__.py +0 -0
  57. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/adapters/_toolathlon.py +0 -0
  58. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/adapters/_toolathlon_container.py +0 -0
  59. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/adapters/_toolathlon_fake_mail.py +0 -0
  60. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/adapters/_toolathlon_poste_users.tsv +0 -0
  61. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/adapters/_toolathlon_services.py +0 -0
  62. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/adapters/harbor.py +0 -0
  63. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/adapters/inbound.py +0 -0
  64. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/adapters/inspect_ai.py +0 -0
  65. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/adapters/ors.py +0 -0
  66. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/adapters/resources/__init__.py +0 -0
  67. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/adapters/resources/mcp_atlas_bridge.py +0 -0
  68. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/adapters/resources/mcp_atlas_judge.py +0 -0
  69. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/adapters/source.py +0 -0
  70. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/agent_router.py +0 -0
  71. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/agent_router_guide.py +0 -0
  72. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/agent_router_parity.py +0 -0
  73. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/agent_router_scaffold.py +0 -0
  74. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/agents/__init__.py +0 -0
  75. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/agents/codex_config.py +0 -0
  76. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/agents/credentials.py +0 -0
  77. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/agents/deepagents_acp_shim.py +0 -0
  78. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/agents/env.py +0 -0
  79. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/agents/errors.py +0 -0
  80. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/agents/harvey_lab_acp_shim.py +0 -0
  81. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/agents/install.py +0 -0
  82. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/agents/manifest.py +0 -0
  83. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/agents/openclaw_acp_shim.py +0 -0
  84. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/agents/pi_acp_launcher.py +0 -0
  85. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/agents/protocol.py +0 -0
  86. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/agents/providers.py +0 -0
  87. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/agents/registry.py +0 -0
  88. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/agents/remote_manifests.py +0 -0
  89. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/branch.py +0 -0
  90. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/cli/__init__.py +0 -0
  91. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/cli/_failure_evidence.py +0 -0
  92. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/cli/_hosted_env.py +0 -0
  93. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/cli/_live_progress.py +0 -0
  94. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/cli/_options.py +0 -0
  95. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/cli/_shared.py +0 -0
  96. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/cli/adopt.py +0 -0
  97. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/cli/agent.py +0 -0
  98. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/cli/continue_cmd.py +0 -0
  99. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/cli/environment.py +0 -0
  100. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/cli/eval_artifacts.py +0 -0
  101. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/cli/eval_lift.py +0 -0
  102. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/cli/hub.py +0 -0
  103. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/cli/monitor.py +0 -0
  104. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/cli/review.py +0 -0
  105. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/cli/sandbox.py +0 -0
  106. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/cli/skills.py +0 -0
  107. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/cli/tasks.py +0 -0
  108. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/cli/trace_import.py +0 -0
  109. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/cli/train.py +0 -0
  110. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/continue_run/__init__.py +0 -0
  111. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/continue_run/batch.py +0 -0
  112. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/continue_run/orchestrator.py +0 -0
  113. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/continue_run/replay_proxy.py +0 -0
  114. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/continue_run/run_folder.py +0 -0
  115. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/continue_run/sandbox_proxy.py +0 -0
  116. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/contracts/__init__.py +0 -0
  117. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/contracts/planes.py +0 -0
  118. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/contracts/user.py +0 -0
  119. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/demo_task/environment/Dockerfile +0 -0
  120. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/demo_task/instruction.md +0 -0
  121. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/demo_task/task.md +0 -0
  122. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/demo_task/task.toml +0 -0
  123. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/demo_task/tests/test.sh +0 -0
  124. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/diagnostics.py +0 -0
  125. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/environment/__init__.py +0 -0
  126. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/environment/_registry/env0@outage.toml +0 -0
  127. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/environment/_registry/env0@prod.toml +0 -0
  128. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/environment/manifest.py +0 -0
  129. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/environment/manifest_env.py +0 -0
  130. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/environment/protocol.py +0 -0
  131. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/environment/readiness.py +0 -0
  132. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/eval_artifacts.py +0 -0
  133. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/eval_lift.py +0 -0
  134. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/eval_plan.py +0 -0
  135. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/eval_sharding.py +0 -0
  136. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/eval_worker.py +0 -0
  137. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/evaluation.py +0 -0
  138. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/experimental/__init__.py +0 -0
  139. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/experimental/mcp/__init__.py +0 -0
  140. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/experimental/mcp/hooks.py +0 -0
  141. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/experimental/mcp/reviewer_server.py +0 -0
  142. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/hosted_env.py +0 -0
  143. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/hub/__init__.py +0 -0
  144. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/hub/harbor_registry.py +0 -0
  145. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/integrations/__init__.py +0 -0
  146. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/integrations/trl/__init__.py +0 -0
  147. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/integrations/trl/spec.py +0 -0
  148. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/learner_skills.py +0 -0
  149. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/learner_store.py +0 -0
  150. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/loop_strategies.py +0 -0
  151. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/loop_sweep.py +0 -0
  152. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/metrics.py +0 -0
  153. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/models.py +0 -0
  154. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/monitor.py +0 -0
  155. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/providers/__init__.py +0 -0
  156. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/providers/litellm_bedrock_patch.py +0 -0
  157. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/providers/litellm_bedrock_preflight.py +0 -0
  158. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/providers/litellm_config.py +0 -0
  159. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/providers/litellm_logging.py +0 -0
  160. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/providers/litellm_runtime.py +0 -0
  161. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/providers/runtime.py +0 -0
  162. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/publish/__init__.py +0 -0
  163. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/publish/huggingface.py +0 -0
  164. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/py.typed +0 -0
  165. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/review/__init__.py +0 -0
  166. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/review/config.py +0 -0
  167. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/review/default-rubric.json +0 -0
  168. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/review/prompts.py +0 -0
  169. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/review/runner.py +0 -0
  170. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/review/wrapper.py +0 -0
  171. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/rewards/README.md +0 -0
  172. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/rewards/__init__.py +0 -0
  173. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/rewards/builtins.py +0 -0
  174. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/rewards/events.py +0 -0
  175. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/rewards/file_readers.py +0 -0
  176. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/rewards/llm.py +0 -0
  177. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/rewards/memory_scorer.py +0 -0
  178. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/rewards/node.py +0 -0
  179. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/rewards/protocol.py +0 -0
  180. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/rewards/rubric.py +0 -0
  181. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/rewards/rubric_config.py +0 -0
  182. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/rewards/validation.py +0 -0
  183. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/rollout/__init__.py +0 -0
  184. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/rollout/_config.py +0 -0
  185. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/rollout/_deadline.py +0 -0
  186. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/rollout/_results.py +0 -0
  187. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/rollout/_setup.py +0 -0
  188. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/rollout/_skills.py +0 -0
  189. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/rollout/_usage.py +0 -0
  190. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/rollout/_user_loop.py +0 -0
  191. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/rollout/session_factory_runtime.py +0 -0
  192. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/rollout/task_runtime.py +0 -0
  193. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/rollout_branch.py +0 -0
  194. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/rollout_planes.py +0 -0
  195. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/runtime.py +0 -0
  196. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/sandbox/__init__.py +0 -0
  197. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/sandbox/_base.py +0 -0
  198. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/sandbox/_cache_reclaim.py +0 -0
  199. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/sandbox/_compose.py +0 -0
  200. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/sandbox/_compose_files/docker-compose-base.yaml +0 -0
  201. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/sandbox/_compose_files/docker-compose-build.yaml +0 -0
  202. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/sandbox/_compose_files/docker-compose-no-network.yaml +0 -0
  203. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/sandbox/_compose_files/docker-compose-prebuilt.yaml +0 -0
  204. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/sandbox/_sdk_ops.py +0 -0
  205. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/sandbox/agentcore.py +0 -0
  206. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/sandbox/agentcore_builder.py +0 -0
  207. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/sandbox/agentcore_image.py +0 -0
  208. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/sandbox/agentcore_provisioning.py +0 -0
  209. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/sandbox/agentcore_reaper.py +0 -0
  210. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/sandbox/agentcore_sealed.py +0 -0
  211. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/sandbox/apple_container.py +0 -0
  212. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/sandbox/daytona.py +0 -0
  213. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/sandbox/daytona_dind.py +0 -0
  214. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/sandbox/daytona_pty.py +0 -0
  215. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/sandbox/daytona_reaper.py +0 -0
  216. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/sandbox/daytona_strategies.py +0 -0
  217. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/sandbox/docker.py +0 -0
  218. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/sandbox/lockdown.py +0 -0
  219. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/sandbox/metadata.py +0 -0
  220. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/sandbox/modal_impl.py +0 -0
  221. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/sandbox/process/__init__.py +0 -0
  222. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/sandbox/process/agentcore.py +0 -0
  223. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/sandbox/process/apple.py +0 -0
  224. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/sandbox/process/daytona.py +0 -0
  225. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/sandbox/process/docker.py +0 -0
  226. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/sandbox/protocol.py +0 -0
  227. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/sandbox/providers.py +0 -0
  228. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/sandbox/services.py +0 -0
  229. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/sandbox/setup.py +0 -0
  230. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/sandbox/snapshot.py +0 -0
  231. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/sandbox/user.py +0 -0
  232. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/scenes.py +0 -0
  233. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/sdk.py +0 -0
  234. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/self_gen.py +0 -0
  235. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/skill_eval/__init__.py +0 -0
  236. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/skill_eval/_core.py +0 -0
  237. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/skill_eval/gepa_export.py +0 -0
  238. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/skill_eval/schema.py +0 -0
  239. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/skill_policy.py +0 -0
  240. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/skills.py +0 -0
  241. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/task/__init__.py +0 -0
  242. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/task/_document_evidence.py +0 -0
  243. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/task/_document_normalize.py +0 -0
  244. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/task/_document_parse.py +0 -0
  245. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/task/_document_profiles.py +0 -0
  246. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/task/acceptance_live.py +0 -0
  247. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/task/acceptance_live_model.py +0 -0
  248. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/task/acceptance_live_report.py +0 -0
  249. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/task/acceptance_live_validation.py +0 -0
  250. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/task/config.py +0 -0
  251. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/task/discovery.py +0 -0
  252. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/task/document.py +0 -0
  253. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/task/env.py +0 -0
  254. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/task/export.py +0 -0
  255. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/task/imports.py +0 -0
  256. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/task/output_format.py +0 -0
  257. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/task/package.py +0 -0
  258. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/task/paths.py +0 -0
  259. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/task/prompts.py +0 -0
  260. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/task/runtime_capabilities.py +0 -0
  261. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/task/runtime_view.py +0 -0
  262. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/task/task.py +0 -0
  263. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/task/verifier.py +0 -0
  264. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/task/verifier_core.py +0 -0
  265. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/task/verifier_document.py +0 -0
  266. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/task/verifier_errors.py +0 -0
  267. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/task/verifier_judge_inputs.py +0 -0
  268. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/task/verifier_ors_episode.py +0 -0
  269. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/task/verifier_reward_kit.py +0 -0
  270. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/task/verifier_scan.py +0 -0
  271. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/task/verifier_script_strategy.py +0 -0
  272. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/templates/__init__.py +0 -0
  273. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/templates/judge.py.tmpl +0 -0
  274. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/templates/test.sh.tmpl +0 -0
  275. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/traces/__init__.py +0 -0
  276. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/traces/huggingface.py +0 -0
  277. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/traces/local.py +0 -0
  278. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/traces/models.py +0 -0
  279. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/traces/parsers.py +0 -0
  280. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/traces/task_gen.py +0 -0
  281. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/training/__init__.py +0 -0
  282. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/training/backends/__init__.py +0 -0
  283. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/training/backends/prime_rl.py +0 -0
  284. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/training/run_manifest.py +0 -0
  285. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/trajectories/__init__.py +0 -0
  286. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/trajectories/_capture.py +0 -0
  287. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/trajectories/_export_common.py +0 -0
  288. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/trajectories/_llm_capture.py +0 -0
  289. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/trajectories/call_purpose.py +0 -0
  290. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/trajectories/export.py +0 -0
  291. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/trajectories/export_adp.py +0 -0
  292. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/trajectories/export_atif.py +0 -0
  293. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/trajectories/export_prime_sft.py +0 -0
  294. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/trajectories/export_trl_sft.py +0 -0
  295. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/trajectories/metrics.py +0 -0
  296. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/trajectories/results.py +0 -0
  297. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/trajectories/tree.py +0 -0
  298. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/trajectories/trl_sft_tokenization.py +0 -0
  299. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/trajectories/viewer.py +0 -0
  300. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/src/benchflow/usage_tracking.py +0 -0
  301. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/__init__.py +0 -0
  302. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/acceptance_live_harness.py +0 -0
  303. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/agents/__init__.py +0 -0
  304. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/agents/test_manifest_dirscan.py +0 -0
  305. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/agents/test_manifest_loader.py +0 -0
  306. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/agents/test_manifest_parity.py +0 -0
  307. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/agents/test_manifest_wiring.py +0 -0
  308. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/agents/test_namespace_shorthand.py +0 -0
  309. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/agents/test_plugin_entry_points.py +0 -0
  310. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/agents/test_protocol.py +0 -0
  311. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/agents/test_remote_manifest_autoload.py +0 -0
  312. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/conformance/README.md +0 -0
  313. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/conformance/acp_smoke/environment/Dockerfile +0 -0
  314. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/conformance/acp_smoke/environment/docker-compose.yaml +0 -0
  315. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/conformance/acp_smoke/environment/skills/conformance-writer/SKILL.md +0 -0
  316. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/conformance/acp_smoke/instruction.md +0 -0
  317. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/conformance/acp_smoke/solution/solve.sh +0 -0
  318. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/conformance/acp_smoke/task.md +0 -0
  319. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/conformance/acp_smoke/task.toml +0 -0
  320. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/conformance/acp_smoke/tests/test.sh +0 -0
  321. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/conformance/conformance-results.json +0 -0
  322. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/conformance/proof_multi_agent.py +0 -0
  323. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/conformance/proof_snapshot.py +0 -0
  324. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/conformance/run_conformance.py +0 -0
  325. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/conformance/self_gen_smoke_skills/skill-creator/SKILL.md +0 -0
  326. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/conftest.py +0 -0
  327. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/continue_run/__init__.py +0 -0
  328. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/continue_run/_helpers.py +0 -0
  329. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/continue_run/test_batch.py +0 -0
  330. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/continue_run/test_orchestrator.py +0 -0
  331. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/continue_run/test_replay_proxy.py +0 -0
  332. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/continue_run/test_run_folder.py +0 -0
  333. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/environment/__init__.py +0 -0
  334. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/environment/test_chibench_manifest.py +0 -0
  335. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/environment/test_clawsbench_manifest.py +0 -0
  336. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/environment/test_manifest.py +0 -0
  337. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/environment/test_manifest_env.py +0 -0
  338. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/environment/test_protocol.py +0 -0
  339. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/environment/test_readiness.py +0 -0
  340. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/examples/hello-world-task/environment/Dockerfile +0 -0
  341. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/examples/hello-world-task/instruction.md +0 -0
  342. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/examples/hello-world-task/solution/solve.sh +0 -0
  343. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/examples/hello-world-task/task.md +0 -0
  344. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/examples/hello-world-task/task.toml +0 -0
  345. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/examples/hello-world-task/tests/test.sh +0 -0
  346. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/examples/test_claude.sh +0 -0
  347. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/examples/test_codex.sh +0 -0
  348. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/examples/test_codex_custom_provider.sh +0 -0
  349. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/examples/test_gemini.sh +0 -0
  350. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/examples/test_openclaw.sh +0 -0
  351. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/examples/traces/minimal-claude.jsonl +0 -0
  352. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/examples/traces/minimal-opentraces.jsonl +0 -0
  353. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/fixtures/digest/README.md +0 -0
  354. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/fixtures/digest/alpha-task/environment/Dockerfile +0 -0
  355. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/fixtures/digest/alpha-task/instruction.md +0 -0
  356. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/fixtures/digest/alpha-task/task.toml +0 -0
  357. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/fixtures/digest/alpha-task/tests/test.sh +0 -0
  358. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/fixtures/digest/beta-task/data/empty.bin +0 -0
  359. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/fixtures/digest/beta-task/data/unicode.txt +0 -0
  360. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/fixtures/digest/beta-task/instruction.md +0 -0
  361. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/fixtures/digest/beta-task/task.toml +0 -0
  362. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/fixtures/digest/not-a-task/notes.txt +0 -0
  363. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/fixtures/mock_acp_agent.py +0 -0
  364. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/fixtures/mock_acp_agent_interleaved.py +0 -0
  365. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/fixtures/mock_acp_agent_multi_turn.py +0 -0
  366. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/fixtures/mock_openai_responses_server.py +0 -0
  367. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/Dockerfile +0 -0
  368. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/data/michigan_stations.txt +0 -0
  369. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/flood-detection/SKILL.md +0 -0
  370. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/nws-flood-thresholds/SKILL.md +0 -0
  371. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/usgs-data-download/SKILL.md +0 -0
  372. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/fixtures/skillsbench_slice/flood-risk-analysis/instruction.md +0 -0
  373. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/fixtures/skillsbench_slice/flood-risk-analysis/solution/solve.sh +0 -0
  374. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/fixtures/skillsbench_slice/flood-risk-analysis/task.toml +0 -0
  375. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/fixtures/skillsbench_slice/flood-risk-analysis/tests/test.sh +0 -0
  376. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/fixtures/skillsbench_slice/flood-risk-analysis/tests/test_outputs.py +0 -0
  377. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/Dockerfile +0 -0
  378. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/climate.csv +0 -0
  379. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/hydrology.csv +0 -0
  380. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/land_cover.csv +0 -0
  381. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/water_temperature.csv +0 -0
  382. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/contribution-analysis/SKILL.md +0 -0
  383. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/meteorology-driver-classification/SKILL.md +0 -0
  384. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/pca-decomposition/SKILL.md +0 -0
  385. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/trend-analysis/SKILL.md +0 -0
  386. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/fixtures/skillsbench_slice/lake-warming-attribution/instruction.md +0 -0
  387. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/fixtures/skillsbench_slice/lake-warming-attribution/solution/solve.sh +0 -0
  388. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/fixtures/skillsbench_slice/lake-warming-attribution/task.toml +0 -0
  389. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/fixtures/skillsbench_slice/lake-warming-attribution/tests/test.sh +0 -0
  390. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/fixtures/skillsbench_slice/lake-warming-attribution/tests/test_outputs.py +0 -0
  391. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/fixtures/skillsbench_slice/manifest.json +0 -0
  392. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/Dockerfile +0 -0
  393. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/r2r_simulator.py +0 -0
  394. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/finite-horizon-lqr/SKILL.md +0 -0
  395. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/integral-action-design/SKILL.md +0 -0
  396. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/mpc-horizon-tuning/SKILL.md +0 -0
  397. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/state-space-linearization/SKILL.md +0 -0
  398. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/system_config.json +0 -0
  399. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/fixtures/skillsbench_slice/r2r-mpc-control/instruction.md +0 -0
  400. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/fixtures/skillsbench_slice/r2r-mpc-control/solution/solve.sh +0 -0
  401. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/fixtures/skillsbench_slice/r2r-mpc-control/task.toml +0 -0
  402. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/fixtures/skillsbench_slice/r2r-mpc-control/tests/test.sh +0 -0
  403. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/fixtures/skillsbench_slice/r2r-mpc-control/tests/test_outputs.py +0 -0
  404. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/Dockerfile +0 -0
  405. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/generate_training_pcaps.py +0 -0
  406. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/local.rules +0 -0
  407. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/pcap-triage-tshark/SKILL.md +0 -0
  408. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/pcap-triage-tshark/scripts/summarize_http_requests.sh +0 -0
  409. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-offline-evejson/SKILL.md +0 -0
  410. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-offline-evejson/scripts/run_suricata_offline.sh +0 -0
  411. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-rules-basics/SKILL.md +0 -0
  412. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/suricata.yaml +0 -0
  413. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/instruction.md +0 -0
  414. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/solution/solve.sh +0 -0
  415. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/task.toml +0 -0
  416. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/tests/test.sh +0 -0
  417. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/tests/test_outputs.py +0 -0
  418. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/Dockerfile +0 -0
  419. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syz-extract-constants/SKILL.md +0 -0
  420. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syzkaller-build-loop/SKILL.md +0 -0
  421. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syzlang-ioctl-basics/SKILL.md +0 -0
  422. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/instruction.md +0 -0
  423. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/solution/solve.sh +0 -0
  424. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/task.toml +0 -0
  425. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/tests/test.sh +0 -0
  426. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/tests/test_outputs.py +0 -0
  427. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/integration/_consistency.py +0 -0
  428. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/integration/agent_judge.py +0 -0
  429. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/integration/check_adapter_evidence.py +0 -0
  430. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/integration/check_hosted_env_evidence.py +0 -0
  431. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/integration/check_results.py +0 -0
  432. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/integration/check_skillsbench_harbor_parity.py +0 -0
  433. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/integration/check_trace_to_task_evidence.py +0 -0
  434. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/integration/configs/claude-agent-acp.yaml +0 -0
  435. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/integration/configs/codex-acp.yaml +0 -0
  436. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/integration/configs/gemini.yaml +0 -0
  437. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/integration/configs/harvey-lab-harness.yaml +0 -0
  438. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/integration/configs/mimo.yaml +0 -0
  439. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/integration/configs/openclaw.yaml +0 -0
  440. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/integration/configs/opencode.yaml +0 -0
  441. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/integration/configs/openhands.yaml +0 -0
  442. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/integration/configs/pi-acp.yaml +0 -0
  443. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/integration/deepagents_harness.py +0 -0
  444. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/integration/rubric_checks.py +0 -0
  445. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/integration/run.sh +0 -0
  446. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/integration/run_suite.py +0 -0
  447. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/integration/scenarios.py +0 -0
  448. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/integration/suites/release.yaml +0 -0
  449. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_acceptance_evidence.py +0 -0
  450. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_acceptance_live.py +0 -0
  451. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_acceptance_live_execution.py +0 -0
  452. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_acp.py +0 -0
  453. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_acp_capability_advertising.py +0 -0
  454. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_acp_mcp_servers.py +0 -0
  455. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_acp_model_config_dispatch.py +0 -0
  456. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_acp_pinned_protocol_guard.py +0 -0
  457. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_acp_setup_failure_propagation.py +0 -0
  458. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_adapter_scripts.py +0 -0
  459. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_adapters.py +0 -0
  460. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_agent_cli.py +0 -0
  461. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_agent_env_resolution.py +0 -0
  462. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_agent_gemini_defaults.py +0 -0
  463. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_agent_idle_timeout_cli.py +0 -0
  464. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_agent_model_decouple.py +0 -0
  465. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_agent_registry.py +0 -0
  466. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_agent_router.py +0 -0
  467. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_agent_router_cli_e2e.py +0 -0
  468. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_agent_router_scaffold.py +0 -0
  469. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_agent_setup.py +0 -0
  470. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_agent_spec.py +0 -0
  471. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_agentcore_builder.py +0 -0
  472. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_agentcore_parallel.py +0 -0
  473. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_agentcore_reaper.py +0 -0
  474. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_agentcore_sandbox.py +0 -0
  475. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_agentcore_transport.py +0 -0
  476. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_api_error_capture.py +0 -0
  477. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_apple_container_sandbox.py +0 -0
  478. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_bare_model_provider.py +0 -0
  479. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_base_install_imports.py +0 -0
  480. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_bedrock_thinking.py +0 -0
  481. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_benchflow_experiment_review_validator.py +0 -0
  482. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_benchmark_repos_resolve_repo_path.py +0 -0
  483. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_branch.py +0 -0
  484. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_build_context_stage.py +0 -0
  485. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_build_review_pack.py +0 -0
  486. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_capture_trajectory.py +0 -0
  487. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_check_skillsbench_harbor_parity.py +0 -0
  488. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_clawsbench_slice.py +0 -0
  489. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_cli_adopt_aliases.py +0 -0
  490. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_cli_arg_validation.py +0 -0
  491. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_cli_daytona.py +0 -0
  492. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_cli_docs_drift.py +0 -0
  493. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_cli_edge_case_hardening.py +0 -0
  494. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_cli_hub_env.py +0 -0
  495. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_cli_live_progress.py +0 -0
  496. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_cli_misc.py +0 -0
  497. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_codex_review.py +0 -0
  498. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_codex_self_write_auth.py +0 -0
  499. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_config_override.py +0 -0
  500. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_config_redaction.py +0 -0
  501. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_connect_as_env.py +0 -0
  502. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_console_error_truncation.py +0 -0
  503. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_console_progress.py +0 -0
  504. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_continuallearningbench_adapter.py +0 -0
  505. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_dataset_registry.py +0 -0
  506. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_daytona_command_polling.py +0 -0
  507. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_daytona_dind_compose_up.py +0 -0
  508. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_daytona_download.py +0 -0
  509. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_daytona_litellm_runtime.py +0 -0
  510. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_daytona_poll_deadline.py +0 -0
  511. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_daytona_reap.py +0 -0
  512. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_deepagents_agent.py +0 -0
  513. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_diagnostics.py +0 -0
  514. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_docker_prune_scoping.py +0 -0
  515. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_docker_uploads.py +0 -0
  516. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_docs_examples.py +0 -0
  517. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_eng50_capabilities.py +0 -0
  518. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_env_registry.py +0 -0
  519. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_env_setup.py +0 -0
  520. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_environment_manifest_controls.py +0 -0
  521. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_eval_artifact_cli.py +0 -0
  522. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_eval_filters_applied.py +0 -0
  523. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_eval_lift.py +0 -0
  524. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_eval_sharding.py +0 -0
  525. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_eval_single_task_summary.py +0 -0
  526. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_eval_source_provenance.py +0 -0
  527. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_eval_worker_retry.py +0 -0
  528. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_eval_zero_task_guard.py +0 -0
  529. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_evaluation_environment_manifest.py +0 -0
  530. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_exclude_tasks.py +0 -0
  531. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_filter_credentialed_cells.py +0 -0
  532. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_harvey_lab_shim.py +0 -0
  533. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_hilbench_adapter.py +0 -0
  534. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_hosted_env.py +0 -0
  535. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_hosted_env_rollout_contract.py +0 -0
  536. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_hub_harbor_registry.py +0 -0
  537. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_inbound_adapter_manifest.py +0 -0
  538. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_inbound_adapters.py +0 -0
  539. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_integration_agent_judge.py +0 -0
  540. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_integration_check_results.py +0 -0
  541. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_integration_consistency.py +0 -0
  542. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_integration_matrix.py +0 -0
  543. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_integration_provider_selection.py +0 -0
  544. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_integration_run_suite.py +0 -0
  545. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_integration_suite.py +0 -0
  546. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_internet_policy.py +0 -0
  547. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_job.py +0 -0
  548. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_job_sequential_shared.py +0 -0
  549. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_job_sequential_shared_resume.py +0 -0
  550. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_judge_robustness.py +0 -0
  551. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_judge_symlink_ingestion.py +0 -0
  552. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_learner_skills.py +0 -0
  553. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_learner_skills_traversal.py +0 -0
  554. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_learner_store.py +0 -0
  555. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_learner_store_persistence.py +0 -0
  556. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_litellm_config.py +0 -0
  557. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_litellm_hardening.py +0 -0
  558. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_litellm_logging.py +0 -0
  559. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_litellm_model_via_env_generic.py +0 -0
  560. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_litellm_reasoning_passthrough.py +0 -0
  561. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_litellm_runtime.py +0 -0
  562. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_litellm_smoke.py +0 -0
  563. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_live_llm_trajectory.py +0 -0
  564. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_llm_judge.py +0 -0
  565. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_llm_judge_event_tags.py +0 -0
  566. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_llm_judge_verifier.py +0 -0
  567. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_loop_strategies.py +0 -0
  568. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_loop_summary.py +0 -0
  569. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_loop_sweep.py +0 -0
  570. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_memory_scorer.py +0 -0
  571. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_metrics.py +0 -0
  572. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_mle_bench_adapter.py +0 -0
  573. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_mock_openai_responses_server.py +0 -0
  574. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_monitor_scaffold.py +0 -0
  575. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_native_acp_usage.py +0 -0
  576. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_no_cross_provider_fallback.py +0 -0
  577. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_notification_order_real.py +0 -0
  578. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_opencode_family_proxy_tracking.py +0 -0
  579. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_oracle.py +0 -0
  580. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_oracle_chokepoint.py +0 -0
  581. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_paths_safe.py +0 -0
  582. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_paths_symlink_helpers.py +0 -0
  583. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_pi_acp_launcher.py +0 -0
  584. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_pi_acp_proxy_routing.py +0 -0
  585. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_project_skills_layout.py +0 -0
  586. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_provider_auth_detection.py +0 -0
  587. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_providers.py +0 -0
  588. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_reexport.py +0 -0
  589. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_registry_invariants.py +0 -0
  590. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_release_hardening_r5.py +0 -0
  591. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_release_version.py +0 -0
  592. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_release_workflow_wiring.py +0 -0
  593. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_resolve_env_helpers.py +0 -0
  594. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_review_boundaries.py +0 -0
  595. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_review_rubric.py +0 -0
  596. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_review_runtime.py +0 -0
  597. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_reward_lenient.py +0 -0
  598. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_reward_node.py +0 -0
  599. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_reward_range.py +0 -0
  600. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_reward_unified_contract.py +0 -0
  601. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_rewards.py +0 -0
  602. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_rewards_jsonl.py +0 -0
  603. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_rollout_architecture.py +0 -0
  604. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_rollout_branch.py +0 -0
  605. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_rollout_config_path_coercion.py +0 -0
  606. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_rollout_environment.py +0 -0
  607. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_rollout_hard_deadline.py +0 -0
  608. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_rollout_import_no_side_effects.py +0 -0
  609. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_rollout_on_ask_user_wiring.py +0 -0
  610. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_rollout_planes_contract.py +0 -0
  611. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_rollout_probe_sandbox_health.py +0 -0
  612. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_rollout_session_factory_dispatch.py +0 -0
  613. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_rollout_setup_commands.py +0 -0
  614. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_rollout_upload.py +0 -0
  615. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_rubric_checks.py +0 -0
  616. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_rubric_config.py +0 -0
  617. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_runtime.py +0 -0
  618. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_runtime_capabilities.py +0 -0
  619. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_runtime_config_wired.py +0 -0
  620. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_runtime_live_sandbox.py +0 -0
  621. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_sandbox.py +0 -0
  622. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_sandbox_exec_secret_handling.py +0 -0
  623. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_sandbox_hardening.py +0 -0
  624. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_sandbox_isolation_copy_traversal.py +0 -0
  625. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_sandbox_live_process.py +0 -0
  626. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_sandbox_multi_service.py +0 -0
  627. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_sandbox_prebuilt_validation.py +0 -0
  628. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_sandbox_protocol.py +0 -0
  629. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_sandbox_provider_registry_drift.py +0 -0
  630. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_sandbox_setup.py +0 -0
  631. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_sandbox_snapshot_contract.py +0 -0
  632. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_sandbox_upload_symlink.py +0 -0
  633. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_sandbox_verifier_workspace.py +0 -0
  634. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_scene.py +0 -0
  635. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_scene_outbox_trial.py +0 -0
  636. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_scene_parallel_group.py +0 -0
  637. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_scene_result_aggregation.py +0 -0
  638. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_scoring.py +0 -0
  639. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_sdk_internals.py +0 -0
  640. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_sdk_lockdown.py +0 -0
  641. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_sdk_run_alias.py +0 -0
  642. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_sealed_channel_container.py +0 -0
  643. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_self_gen_cli.py +0 -0
  644. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_self_gen_export_error_channel.py +0 -0
  645. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_self_gen_export_failures.py +0 -0
  646. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_self_gen_orchestration.py +0 -0
  647. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_session_factory_runtime.py +0 -0
  648. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_session_request_permission_dispatch.py +0 -0
  649. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_skill_eval.py +0 -0
  650. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_skill_eval_dryrun.py +0 -0
  651. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_skill_eval_integration.py +0 -0
  652. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_skill_eval_sweep.py +0 -0
  653. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_skill_eval_traversal.py +0 -0
  654. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_skill_invocation_artifacts.py +0 -0
  655. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_skill_policy.py +0 -0
  656. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_skills.py +0 -0
  657. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_skills_dir_agent_home_link.py +0 -0
  658. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_skillsbench_conversion_conformance.py +0 -0
  659. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_skillsbench_harbor_run_suite.py +0 -0
  660. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_smoke.py +0 -0
  661. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_smoke_wiring.py +0 -0
  662. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_source_adapters.py +0 -0
  663. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_subscription_auth.py +0 -0
  664. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_task_check_eval_consistency.py +0 -0
  665. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_task_config.py +0 -0
  666. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_task_digest.py +0 -0
  667. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_task_document.py +0 -0
  668. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_task_download.py +0 -0
  669. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_task_export.py +0 -0
  670. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_task_output_format.py +0 -0
  671. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_task_package.py +0 -0
  672. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_task_runtime_primitive.py +0 -0
  673. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_tasks.py +0 -0
  674. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_token_usage_normalization.py +0 -0
  675. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_trace_import_cli.py +0 -0
  676. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_trace_task_gen_traversal.py +0 -0
  677. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_trace_to_task_evidence.py +0 -0
  678. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_traces_huggingface.py +0 -0
  679. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_traces_parsers.py +0 -0
  680. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_traces_task_gen.py +0 -0
  681. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_train_cli.py +0 -0
  682. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_train_mode_artifact_emission.py +0 -0
  683. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_train_trl_cli.py +0 -0
  684. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_trajectory_integration.py +0 -0
  685. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_trajectory_streaming.py +0 -0
  686. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_trial_agent_timeout_verify.py +0 -0
  687. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_trial_install_agent_timeout.py +0 -0
  688. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_trial_litellm_runtime.py +0 -0
  689. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_trl_integration.py +0 -0
  690. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_usage_litellm.py +0 -0
  691. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_usage_required.py +0 -0
  692. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_usage_tracking.py +0 -0
  693. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_user.py +0 -0
  694. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_v06_guard_ports.py +0 -0
  695. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_verifier_document.py +0 -0
  696. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_verifier_multi_container.py +0 -0
  697. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_verifier_output.py +0 -0
  698. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_verifier_output_freshness.py +0 -0
  699. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_verifier_strategies.py +0 -0
  700. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_verifier_wedge_retry.py +0 -0
  701. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_verify.py +0 -0
  702. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_workflow_action_pinning.py +0 -0
  703. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/test_yaml_config.py +0 -0
  704. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/trajectories/__init__.py +0 -0
  705. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/trajectories/test_export.py +0 -0
  706. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/trajectories/test_export_adp.py +0 -0
  707. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/trajectories/test_export_atif.py +0 -0
  708. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/trajectories/test_export_common.py +0 -0
  709. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/trajectories/test_export_nan_handling.py +0 -0
  710. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/trajectories/test_export_prime_sft.py +0 -0
  711. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/trajectories/test_redaction.py +0 -0
  712. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/trajectories/test_step_granularity.py +0 -0
  713. {benchflow-0.6.8.dev1907 → benchflow-0.6.9.dev1917}/tests/trajectories/test_tree.py +0 -0
@@ -2,6 +2,19 @@
2
2
 
3
3
  ## [Unreleased]
4
4
 
5
+ ## 0.6.8 — 2026-08-15
6
+
7
+ ### Added
8
+ - **Public trajectory contribution.** `bench traj upload PATH` validates and
9
+ structurally redacts trajectory JSONL, creates a content-addressed manifest,
10
+ and uploads through the built-in public broker. Azure Blob quarantine,
11
+ versioning, short-lived create-only user-delegation SAS grants, and an
12
+ event-driven fail-closed validator keep untrusted captures out of the
13
+ community namespace until hashes, sizes, strict JSONL (including duplicate-key
14
+ and non-finite-number rejection), and artifact/manifest secret scans pass.
15
+ Replaying an ingested digest is a no-op; trusted operators can opt into direct
16
+ Azure upload with the `azure` extra and `--direct`.
17
+
5
18
  ### Changed
6
19
  - **BREAKING (task.md): the `environment:` frontmatter key is renamed to
7
20
  `sandbox:`.** The native task-config surface now accepts only `sandbox:`
@@ -26,6 +39,29 @@
26
39
  eval-config `environment:` docker/daytona selector) is a different
27
40
  subsystem and is unchanged.
28
41
 
42
+ ### Fixed
43
+ - **Coherent integration coverage for code-and-fixture changes.** The
44
+ credential-free fixture job now tests pull-request source together with its
45
+ task fixtures, while the secret-bearing smoke job retains trusted fixtures;
46
+ the release gate requires both results. (#969)
47
+ - **Retryable Daytona transport failures stay retryable.** Transient SDK
48
+ transport errors are stamped while their vendor type is still available,
49
+ empty exception messages retain useful type information, and permanent
50
+ errors remain outside the retry policy. (#970)
51
+ - **Live token counters no longer freeze behind callback-log reads.** Larger,
52
+ bounded ranged reads distinguish EOF from read failure, expose lag, and keep
53
+ terminal phase labels from moving backwards. (#971)
54
+ - **Fresh OpenClaw installs and GPT-5.4 calls use compatible limits.** OpenClaw
55
+ is pinned to a Node-compatible runtime, and raw plus ACP-alias GPT-5.4 model
56
+ IDs clamp output tokens to the provider's 128,000-token limit. (#977, #986)
57
+ - **Anthropic Vertex routes include their required runtime.** The gateway now
58
+ installs the Google Cloud Vertex AI SDK used by LiteLLM's Anthropic Vertex
59
+ path. (#978)
60
+ - **ACP subprocess diagnostics survive normal teardown.** A bounded, redacted
61
+ stderr tail is retained even when stdout remains open; stderr drain failures
62
+ cannot mask the structured transport diagnosis, and repeated process close
63
+ calls are idempotent. (#980)
64
+
29
65
  ## 0.6.7 — 2026-08-09
30
66
 
31
67
  ### Added
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: benchflow
3
- Version: 0.6.8.dev1907
3
+ Version: 0.6.9.dev1917
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
@@ -29,6 +29,15 @@ Requires-Dist: pyyaml>=6.0
29
29
  Requires-Dist: rich>=13.0
30
30
  Requires-Dist: tomli-w>=1.0
31
31
  Requires-Dist: typer>=0.9
32
+ Provides-Extra: azure
33
+ Requires-Dist: azure-identity>=1.16; extra == 'azure'
34
+ Requires-Dist: azure-storage-blob>=12.19; extra == 'azure'
35
+ Provides-Extra: azure-service
36
+ Requires-Dist: azure-data-tables>=12.5; extra == 'azure-service'
37
+ Requires-Dist: azure-identity>=1.16; extra == 'azure-service'
38
+ Requires-Dist: azure-storage-blob>=12.19; extra == 'azure-service'
39
+ Requires-Dist: azure-storage-queue>=12.9; extra == 'azure-service'
40
+ Requires-Dist: uvicorn>=0.30; extra == 'azure-service'
32
41
  Provides-Extra: bedrock
33
42
  Requires-Dist: boto3>=1.40; extra == 'bedrock'
34
43
  Provides-Extra: deepagents
@@ -146,6 +155,7 @@ Start with [Getting started](./docs/getting-started.md), then [Concepts](./docs/
146
155
  | Multi-agent: coder + reviewer, simulated user, BYOS, stateful envs | [Use cases](./docs/use-cases.md) |
147
156
  | Multi-round single-agent (progressive disclosure, oracle access) | [Progressive disclosure](./docs/progressive-disclosure.md) |
148
157
  | Skill evaluation (when the artifact is a skill, not a workspace) | [Skill eval](./docs/skill-eval.md) |
158
+ | Contribute a trajectory capture | [Trajectory upload](./docs/traj-upload.md) |
149
159
  | Understand the security model | [Sandbox hardening](./docs/sandbox-hardening.md) |
150
160
  | Use public vs internal preview SDK releases | [Release channels](./docs/release.md) |
151
161
  | CLI flags + commands | [CLI reference](./docs/reference/cli.md) |
@@ -81,6 +81,7 @@ Start with [Getting started](./docs/getting-started.md), then [Concepts](./docs/
81
81
  | Multi-agent: coder + reviewer, simulated user, BYOS, stateful envs | [Use cases](./docs/use-cases.md) |
82
82
  | Multi-round single-agent (progressive disclosure, oracle access) | [Progressive disclosure](./docs/progressive-disclosure.md) |
83
83
  | Skill evaluation (when the artifact is a skill, not a workspace) | [Skill eval](./docs/skill-eval.md) |
84
+ | Contribute a trajectory capture | [Trajectory upload](./docs/traj-upload.md) |
84
85
  | Understand the security model | [Sandbox hardening](./docs/sandbox-hardening.md) |
85
86
  | Use public vs internal preview SDK releases | [Release channels](./docs/release.md) |
86
87
  | CLI flags + commands | [CLI reference](./docs/reference/cli.md) |
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "benchflow"
3
- version = "0.6.8.dev1907"
3
+ version = "0.6.9.dev1917"
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"
@@ -40,6 +40,20 @@ classifiers = [
40
40
  ]
41
41
 
42
42
  [project.optional-dependencies]
43
+ azure = [
44
+ # Direct Azure Blob trajectory uploads (bench traj upload --direct).
45
+ # Broker-mode uploads need neither package.
46
+ "azure-storage-blob>=12.19",
47
+ "azure-identity>=1.16",
48
+ ]
49
+ azure-service = [
50
+ # Dependencies baked into the public trajectory broker/validator image.
51
+ "azure-storage-blob>=12.19",
52
+ "azure-identity>=1.16",
53
+ "azure-data-tables>=12.5",
54
+ "azure-storage-queue>=12.9",
55
+ "uvicorn>=0.30",
56
+ ]
43
57
  dev = [
44
58
  "pre-commit>=3.7",
45
59
  # AgentCore's CodeBuild path must reproduce Docker's ignore rules in tests
@@ -57,6 +57,7 @@ from benchflow.cli.sandbox import register_sandbox
57
57
  from benchflow.cli.skills import register_skills
58
58
  from benchflow.cli.tasks import register_tasks
59
59
  from benchflow.cli.train import register_train
60
+ from benchflow.cli.traj import register_traj
60
61
  from benchflow.eval_plan import EvalCreateRequest, EvalPlanError, build_eval_plan
61
62
  from benchflow.evaluation import DEFAULT_AGENT, effective_model
62
63
  from benchflow.sandbox.providers import providers_phrase
@@ -1242,6 +1243,7 @@ register_continue(eval_app, alias_app=app)
1242
1243
  register_skills(app)
1243
1244
  register_review(app)
1244
1245
  register_tasks(app)
1246
+ register_traj(app)
1245
1247
  register_train(app)
1246
1248
  register_hub(app)
1247
1249
  register_agent(app)
@@ -0,0 +1,138 @@
1
+ """``bench traj upload`` — contribute validated trajectory captures."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import os
6
+ from pathlib import Path
7
+ from typing import Annotated
8
+
9
+ import typer
10
+ from rich.markup import escape
11
+
12
+ from benchflow.cli._shared import console, print_error
13
+
14
+ # The environment variable remains an override for development and disaster
15
+ # recovery.
16
+ DEFAULT_TRAJ_BROKER_URL: str | None = (
17
+ "https://tasksminer-traj-broker.nicewave-c3abaecf.westus2.azurecontainerapps.io"
18
+ )
19
+
20
+
21
+ def register_traj(app: typer.Typer) -> None:
22
+ """Attach the trajectory contribution group to the top-level app."""
23
+ traj_app = typer.Typer(help="Trajectory commands.")
24
+ app.add_typer(traj_app, name="traj", rich_help_panel="Core")
25
+
26
+ @traj_app.command("upload")
27
+ def upload(
28
+ path: Annotated[
29
+ Path,
30
+ typer.Argument(help="Trajectory JSONL file, directory, or trial directory"),
31
+ ],
32
+ source_id: Annotated[
33
+ str | None,
34
+ typer.Option("--source-id", help="Stable contributor source identifier"),
35
+ ] = None,
36
+ direct: Annotated[
37
+ bool,
38
+ typer.Option("--direct", help="Upload with local Azure credentials"),
39
+ ] = False,
40
+ container_url: Annotated[
41
+ str | None,
42
+ typer.Option("--container-url", help="Azure container URL for --direct"),
43
+ ] = None,
44
+ dry_run: Annotated[
45
+ bool,
46
+ typer.Option("--dry-run", help="Validate and stage without uploading"),
47
+ ] = False,
48
+ ) -> None:
49
+ """Validate, redact, and upload trajectory JSONL."""
50
+ from benchflow.publish.azure_blob import upload_capture_direct
51
+ from benchflow.publish.broker import upload_capture_via_broker
52
+ from benchflow.publish.traj_capture import (
53
+ default_source_id,
54
+ stage_trajectory_capture,
55
+ )
56
+
57
+ try:
58
+ selected_source_id = source_id or default_source_id(path)
59
+ if direct:
60
+ destination = container_url or os.environ.get(
61
+ "BENCHFLOW_AZURE_CONTAINER_URL"
62
+ )
63
+ if not destination:
64
+ raise ValueError(
65
+ "--direct requires --container-url or "
66
+ "BENCHFLOW_AZURE_CONTAINER_URL"
67
+ )
68
+ else:
69
+ if container_url:
70
+ raise ValueError("--container-url is only valid with --direct")
71
+ destination = (
72
+ os.environ.get("BENCHFLOW_TRAJ_BROKER_URL")
73
+ or DEFAULT_TRAJ_BROKER_URL
74
+ )
75
+ if not destination:
76
+ raise ValueError(
77
+ "no trajectory broker is configured; set "
78
+ "BENCHFLOW_TRAJ_BROKER_URL, or use --direct with "
79
+ "--container-url/BENCHFLOW_AZURE_CONTAINER_URL if you have "
80
+ "Azure credentials"
81
+ )
82
+
83
+ with stage_trajectory_capture(
84
+ path,
85
+ source_id=selected_source_id,
86
+ uploaded_by=os.environ.get("BENCHFLOW_TRAJ_UPLOADED_BY"),
87
+ ) as staged:
88
+ if dry_run:
89
+ _print_dry_run(staged, destination=destination, direct=direct)
90
+ return
91
+ if direct:
92
+ result = upload_capture_direct(
93
+ staged,
94
+ container_url=destination,
95
+ )
96
+ else:
97
+ result = upload_capture_via_broker(
98
+ staged,
99
+ broker_url=destination,
100
+ )
101
+ size = sum(item.size_bytes for item in staged.files)
102
+ if result.uploaded:
103
+ console.print(
104
+ "[green]Uploaded trajectory:[/green] "
105
+ f"{escape(result.url)} "
106
+ f"({len(result.uploaded)} uploaded, {len(result.skipped)} skipped, "
107
+ f"{_format_bytes(size)}, "
108
+ f"{staged.redaction_replacements} redactions)"
109
+ )
110
+ else:
111
+ console.print(
112
+ f"[green]Already uploaded:[/green] {escape(result.url)} (no-op)"
113
+ )
114
+ except ValueError as exc:
115
+ print_error(str(exc))
116
+ raise typer.Exit(1) from None
117
+
118
+
119
+ def _print_dry_run(staged, *, destination: str, direct: bool) -> None:
120
+ mode = "Azure container" if direct else "broker"
121
+ console.print(f"[bold]Dry run[/bold] — {mode}: {escape(destination)}")
122
+ console.print(f"Digest: sha256:{staged.traj_digest}")
123
+ for staged_file in staged.files:
124
+ console.print(
125
+ f" {escape(staged_file.relname)} ({_format_bytes(staged_file.size_bytes)})"
126
+ )
127
+ if staged.ignored:
128
+ console.print(f"Ignored: {escape(', '.join(staged.ignored))}")
129
+ console.print(f"Redactions: {staged.redaction_replacements}")
130
+
131
+
132
+ def _format_bytes(size: int) -> str:
133
+ value = float(size)
134
+ for unit in ("B", "KB", "MB", "GB"):
135
+ if value < 1024 or unit == "GB":
136
+ return f"{value:.1f} {unit}"
137
+ value /= 1024
138
+ raise AssertionError("unreachable")
@@ -0,0 +1,142 @@
1
+ """Direct Azure Blob publishing for staged trajectory captures."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import logging
6
+ from contextlib import contextmanager
7
+ from dataclasses import dataclass
8
+ from typing import Any
9
+ from urllib.parse import urlparse
10
+
11
+ from benchflow import __version__
12
+ from benchflow.publish.traj_capture import StagedCapture
13
+
14
+
15
+ @dataclass(frozen=True)
16
+ class BlobPublishResult:
17
+ account: str
18
+ container: str
19
+ prefix: str
20
+ uploaded: tuple[str, ...]
21
+ skipped: tuple[str, ...]
22
+
23
+ @property
24
+ def url(self) -> str:
25
+ return (
26
+ f"https://{self.account}.blob.core.windows.net/"
27
+ f"{self.container}/{self.prefix}"
28
+ )
29
+
30
+
31
+ def upload_capture_direct(
32
+ staged: StagedCapture,
33
+ *,
34
+ container_url: str,
35
+ credential: Any = None,
36
+ ) -> BlobPublishResult:
37
+ """Create staged files in an Azure container without overwriting blobs."""
38
+ try:
39
+ from azure.core.exceptions import (
40
+ ClientAuthenticationError,
41
+ HttpResponseError,
42
+ ResourceExistsError,
43
+ ResourceNotFoundError,
44
+ )
45
+ from azure.identity import DefaultAzureCredential
46
+ from azure.storage.blob import ContainerClient, ContentSettings
47
+ except ModuleNotFoundError as exc: # pragma: no cover - environment dependent
48
+ raise ValueError(
49
+ "azure-storage-blob and azure-identity are required for --direct; "
50
+ "install with: pip install 'benchflow[azure]'"
51
+ ) from exc
52
+
53
+ with _quiet_azure_request_logging():
54
+ account, container = _parse_container_url(container_url)
55
+ auth = credential if credential is not None else DefaultAzureCredential()
56
+ client = ContainerClient.from_container_url(container_url, credential=auth)
57
+ prefix = f"sources/{staged.source_id}/{staged.traj_digest}/"
58
+ metadata = {
59
+ "source_id": staged.source_id,
60
+ "traj_digest": f"sha256:{staged.traj_digest}",
61
+ "schema_version": str(staged.manifest["schema_version"]),
62
+ "manifest": "manifest.json",
63
+ "benchflow_version": __version__,
64
+ }
65
+ uploaded: list[str] = []
66
+ skipped: list[str] = []
67
+ for staged_file in staged.files:
68
+ blob_name = prefix + staged_file.relname
69
+ try:
70
+ with staged_file.local_path.open("rb") as stream:
71
+ client.upload_blob(
72
+ name=blob_name,
73
+ data=stream,
74
+ overwrite=False,
75
+ content_settings=ContentSettings(
76
+ content_type=staged_file.content_type
77
+ ),
78
+ metadata=metadata,
79
+ )
80
+ except ResourceExistsError:
81
+ skipped.append(blob_name)
82
+ except ResourceNotFoundError as exc:
83
+ raise ValueError(
84
+ f"Azure container not found: {container_url}; create the storage "
85
+ "account and private container before using --direct"
86
+ ) from exc
87
+ except ClientAuthenticationError as exc:
88
+ raise ValueError(
89
+ "Azure authentication failed; run 'az login' (or configure managed "
90
+ "identity) and grant the Blob Data Creator role"
91
+ ) from exc
92
+ except HttpResponseError as exc:
93
+ if getattr(exc, "status_code", None) == 403:
94
+ raise ValueError(
95
+ "Azure upload was forbidden; run 'az login' (or configure "
96
+ "managed identity) and grant the Blob Data Creator role"
97
+ ) from exc
98
+ raise ValueError(
99
+ f"Azure Blob upload failed for {blob_name}: {exc}"
100
+ ) from exc
101
+ else:
102
+ uploaded.append(blob_name)
103
+ return BlobPublishResult(
104
+ account=account,
105
+ container=container,
106
+ prefix=prefix,
107
+ uploaded=tuple(uploaded),
108
+ skipped=tuple(skipped),
109
+ )
110
+
111
+
112
+ @contextmanager
113
+ def _quiet_azure_request_logging():
114
+ """Keep Azure SDK request diagnostics out of the one-line CLI result."""
115
+ azure_logger = logging.getLogger("azure")
116
+ previous_level = azure_logger.level
117
+ azure_logger.setLevel(logging.WARNING)
118
+ try:
119
+ yield
120
+ finally:
121
+ azure_logger.setLevel(previous_level)
122
+
123
+
124
+ def _parse_container_url(container_url: str) -> tuple[str, str]:
125
+ parsed = urlparse(container_url.rstrip("/"))
126
+ host_suffix = ".blob.core.windows.net"
127
+ container = parsed.path.strip("/")
128
+ if (
129
+ parsed.scheme != "https"
130
+ or not parsed.hostname
131
+ or not parsed.hostname.endswith(host_suffix)
132
+ or not container
133
+ or "/" in container
134
+ ):
135
+ raise ValueError(
136
+ "--container-url must look like "
137
+ "https://<account>.blob.core.windows.net/<container>"
138
+ )
139
+ account = parsed.hostname[: -len(host_suffix)]
140
+ if not account:
141
+ raise ValueError("--container-url is missing the storage account name")
142
+ return account, container
@@ -0,0 +1,193 @@
1
+ """Cloud-neutral client for the public trajectory upload broker."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import logging
6
+ from contextlib import contextmanager, nullcontext
7
+ from dataclasses import dataclass
8
+ from typing import Any
9
+ from urllib.parse import urlparse
10
+
11
+ import httpx
12
+
13
+ from benchflow.publish.traj_capture import StagedCapture
14
+
15
+
16
+ @dataclass(frozen=True)
17
+ class BrokerPublishResult:
18
+ base_url: str
19
+ prefix: str
20
+ uploaded: tuple[str, ...]
21
+ skipped: tuple[str, ...]
22
+
23
+ @property
24
+ def url(self) -> str:
25
+ return f"{self.base_url.rstrip('/')}/{self.prefix.lstrip('/')}"
26
+
27
+
28
+ def upload_capture_via_broker(
29
+ staged: StagedCapture,
30
+ *,
31
+ broker_url: str,
32
+ http_client: httpx.Client | None = None,
33
+ ) -> BrokerPublishResult:
34
+ """Request scoped upload URLs and PUT every staged file in server order."""
35
+ endpoint = f"{broker_url.rstrip('/')}/v1/uploads"
36
+ artifacts = staged.manifest["artifacts"]
37
+ request_body = {
38
+ "schema_version": staged.manifest["schema_version"],
39
+ "kind": staged.manifest["kind"],
40
+ "source_id": staged.manifest["source_id"],
41
+ "traj_digest": staged.manifest["traj_digest"],
42
+ "uploaded_by": staged.manifest["uploaded_by"],
43
+ "artifacts": artifacts,
44
+ }
45
+ manager = nullcontext(http_client) if http_client is not None else httpx.Client()
46
+ try:
47
+ with _quiet_httpx_request_logging(), manager as client:
48
+ response = client.post(endpoint, json=request_body, timeout=30)
49
+ if response.status_code == 409:
50
+ return _already_uploaded_result(response, staged, broker_url)
51
+ _raise_for_broker_response(response, operation="upload handshake")
52
+ payload = _response_object(response)
53
+ objects = _validated_objects(payload, staged)
54
+ base_url, prefix = _destination(payload)
55
+
56
+ uploaded: list[str] = []
57
+ skipped: list[str] = []
58
+ for staged_file, upload in zip(staged.files, objects, strict=True):
59
+ object_name = prefix + staged_file.relname
60
+ with staged_file.local_path.open("rb") as stream:
61
+ put_response = client.put(
62
+ upload["put_url"],
63
+ headers=upload["headers"],
64
+ content=stream,
65
+ timeout=300,
66
+ )
67
+ if put_response.status_code in {409, 412}:
68
+ skipped.append(object_name)
69
+ continue
70
+ _raise_for_broker_response(
71
+ put_response,
72
+ operation=f"upload of {staged_file.relname}",
73
+ )
74
+ uploaded.append(object_name)
75
+ except httpx.HTTPError as exc:
76
+ raise ValueError(f"trajectory broker request failed: {exc}") from exc
77
+
78
+ return BrokerPublishResult(
79
+ base_url=base_url,
80
+ prefix=prefix,
81
+ uploaded=tuple(uploaded),
82
+ skipped=tuple(skipped),
83
+ )
84
+
85
+
86
+ @contextmanager
87
+ def _quiet_httpx_request_logging():
88
+ """Keep short-lived signed upload URLs out of the global INFO stream."""
89
+ httpx_logger = logging.getLogger("httpx")
90
+ previous_level = httpx_logger.level
91
+ httpx_logger.setLevel(logging.WARNING)
92
+ try:
93
+ yield
94
+ finally:
95
+ httpx_logger.setLevel(previous_level)
96
+
97
+
98
+ def _already_uploaded_result(
99
+ response: httpx.Response,
100
+ staged: StagedCapture,
101
+ broker_url: str,
102
+ ) -> BrokerPublishResult:
103
+ try:
104
+ payload = _response_object(response)
105
+ base_url, prefix = _destination(payload)
106
+ except ValueError:
107
+ base_url = broker_url.rstrip("/")
108
+ prefix = f"sources/community/{staged.traj_digest}/"
109
+ return BrokerPublishResult(
110
+ base_url=base_url,
111
+ prefix=prefix,
112
+ uploaded=(),
113
+ skipped=tuple(prefix + item.relname for item in staged.files),
114
+ )
115
+
116
+
117
+ def _response_object(response: httpx.Response) -> dict[str, Any]:
118
+ try:
119
+ payload = response.json()
120
+ except ValueError as exc:
121
+ raise ValueError("trajectory broker returned invalid JSON") from exc
122
+ if not isinstance(payload, dict):
123
+ raise ValueError("trajectory broker returned a non-object response")
124
+ return payload
125
+
126
+
127
+ def _validated_objects(
128
+ payload: dict[str, Any], staged: StagedCapture
129
+ ) -> list[dict[str, Any]]:
130
+ objects = payload.get("objects")
131
+ if not isinstance(objects, list) or not all(
132
+ isinstance(item, dict) for item in objects
133
+ ):
134
+ raise ValueError("trajectory broker protocol violation: objects must be a list")
135
+ expected_names = [item.relname for item in staged.files]
136
+ names = [item.get("name") for item in objects]
137
+ if names != expected_names:
138
+ raise ValueError(
139
+ "trajectory broker protocol violation: response objects must match "
140
+ "the staged files in canonical manifest-last order"
141
+ )
142
+ for item in objects:
143
+ put_url = item.get("put_url")
144
+ if not isinstance(put_url, str):
145
+ raise ValueError("trajectory broker protocol violation: missing put_url")
146
+ parsed_url = urlparse(put_url)
147
+ if (
148
+ parsed_url.scheme != "https"
149
+ or not parsed_url.hostname
150
+ or parsed_url.username is not None
151
+ or parsed_url.password is not None
152
+ ):
153
+ raise ValueError(
154
+ "trajectory broker protocol violation: put_url must be an "
155
+ "authenticated HTTPS URL"
156
+ )
157
+ headers = item.get("headers")
158
+ if not isinstance(headers, dict) or not all(
159
+ isinstance(key, str) and isinstance(value, str)
160
+ for key, value in headers.items()
161
+ ):
162
+ raise ValueError(
163
+ "trajectory broker protocol violation: headers must map strings to strings"
164
+ )
165
+ return objects
166
+
167
+
168
+ def _destination(payload: dict[str, Any]) -> tuple[str, str]:
169
+ prefix = payload.get("prefix")
170
+ if not isinstance(prefix, str) or not prefix:
171
+ raise ValueError("trajectory broker protocol violation: missing prefix")
172
+ base_url = payload.get("base_url")
173
+ if isinstance(base_url, str) and base_url.startswith("https://"):
174
+ return base_url, prefix
175
+ bucket = payload.get("bucket")
176
+ if isinstance(bucket, str) and bucket:
177
+ return f"gs://{bucket}", prefix
178
+ raise ValueError("trajectory broker protocol violation: missing destination")
179
+
180
+
181
+ def _raise_for_broker_response(response: httpx.Response, *, operation: str) -> None:
182
+ if response.status_code < 400:
183
+ return
184
+ detail = response.text.strip().replace("\n", " ")[:300]
185
+ if response.status_code == 413:
186
+ raise ValueError(f"trajectory broker rejected an oversized capture: {detail}")
187
+ if response.status_code == 429:
188
+ retry_after = response.headers.get("Retry-After")
189
+ suffix = f"; retry after {retry_after}" if retry_after else ""
190
+ raise ValueError(f"trajectory broker rate limit exceeded{suffix}: {detail}")
191
+ raise ValueError(
192
+ f"trajectory broker {operation} failed with HTTP {response.status_code}: {detail}"
193
+ )