benchflow 0.7.2.dev1998__tar.gz → 0.7.3__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 (722) hide show
  1. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/CHANGELOG.md +53 -3
  2. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/PKG-INFO +1 -1
  3. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/pyproject.toml +1 -1
  4. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/cli/traj.py +47 -28
  5. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/publish/broker.py +37 -3
  6. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/trajectories/viewer.py +90 -40
  7. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_cli_edge_case_hardening.py +60 -0
  8. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_traj_upload_cli.py +157 -9
  9. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_trajectory_upload_service.py +126 -5
  10. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/.gitignore +0 -0
  11. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/LICENSE +0 -0
  12. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/README.md +0 -0
  13. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/__init__.py +0 -0
  14. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/_dotenv.py +0 -0
  15. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/_paths.py +0 -0
  16. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/_run.py +0 -0
  17. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/_types.py +0 -0
  18. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/_utils/__init__.py +0 -0
  19. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/_utils/benchmark_repos.py +0 -0
  20. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/_utils/build_context_stage.py +0 -0
  21. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/_utils/config.py +0 -0
  22. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/_utils/config_override.py +0 -0
  23. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/_utils/content_address.py +0 -0
  24. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/_utils/dataset_registry.py +0 -0
  25. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/_utils/env_registry.py +0 -0
  26. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/_utils/evaluation_results.py +0 -0
  27. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/_utils/hf_datasets.py +0 -0
  28. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/_utils/json_safe.py +0 -0
  29. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/_utils/learner_memory.py +0 -0
  30. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/_utils/live_activity.py +0 -0
  31. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/_utils/result_metadata.py +0 -0
  32. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/_utils/reward_events.py +0 -0
  33. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/_utils/scoring.py +0 -0
  34. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/_utils/source_provenance.py +0 -0
  35. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/_utils/task_authoring/__init__.py +0 -0
  36. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/_utils/task_authoring/_evidence_paths.py +0 -0
  37. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/_utils/task_authoring/acceptance_evidence.py +0 -0
  38. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/_utils/task_authoring/scaffolding.py +0 -0
  39. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/_utils/task_authoring/structural_checks.py +0 -0
  40. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/_utils/text.py +0 -0
  41. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/_utils/yaml_loader.py +0 -0
  42. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/acp/__init__.py +0 -0
  43. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/acp/client.py +0 -0
  44. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/acp/container_transport.py +0 -0
  45. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/acp/runtime.py +0 -0
  46. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/acp/selection.py +0 -0
  47. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/acp/session.py +0 -0
  48. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/acp/transport.py +0 -0
  49. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/acp/types.py +0 -0
  50. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/adapters/__init__.py +0 -0
  51. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/adapters/_toolathlon.py +0 -0
  52. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/adapters/_toolathlon_container.py +0 -0
  53. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/adapters/_toolathlon_fake_mail.py +0 -0
  54. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/adapters/_toolathlon_poste_users.tsv +0 -0
  55. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/adapters/_toolathlon_services.py +0 -0
  56. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/adapters/harbor.py +0 -0
  57. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/adapters/inbound.py +0 -0
  58. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/adapters/inspect_ai.py +0 -0
  59. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/adapters/ors.py +0 -0
  60. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/adapters/resources/__init__.py +0 -0
  61. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/adapters/resources/mcp_atlas_bridge.py +0 -0
  62. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/adapters/resources/mcp_atlas_judge.py +0 -0
  63. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/adapters/source.py +0 -0
  64. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/agent_router.py +0 -0
  65. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/agent_router_guide.py +0 -0
  66. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/agent_router_parity.py +0 -0
  67. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/agent_router_scaffold.py +0 -0
  68. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/agents/__init__.py +0 -0
  69. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/agents/codex_config.py +0 -0
  70. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/agents/credentials.py +0 -0
  71. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/agents/deepagents_acp_shim.py +0 -0
  72. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/agents/env.py +0 -0
  73. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/agents/errors.py +0 -0
  74. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/agents/harvey_lab_acp_shim.py +0 -0
  75. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/agents/install.py +0 -0
  76. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/agents/manifest.py +0 -0
  77. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/agents/openclaw_acp_shim.py +0 -0
  78. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/agents/pi_acp_launcher.py +0 -0
  79. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/agents/protocol.py +0 -0
  80. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/agents/providers.py +0 -0
  81. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/agents/registry.py +0 -0
  82. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/agents/remote_manifests.py +0 -0
  83. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/branch.py +0 -0
  84. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/cli/__init__.py +0 -0
  85. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/cli/_failure_evidence.py +0 -0
  86. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/cli/_hosted_env.py +0 -0
  87. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/cli/_live_progress.py +0 -0
  88. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/cli/_options.py +0 -0
  89. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/cli/_shared.py +0 -0
  90. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/cli/_traj_upload_ui.py +0 -0
  91. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/cli/adopt.py +0 -0
  92. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/cli/agent.py +0 -0
  93. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/cli/continue_cmd.py +0 -0
  94. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/cli/environment.py +0 -0
  95. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/cli/eval_artifacts.py +0 -0
  96. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/cli/eval_lift.py +0 -0
  97. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/cli/hub.py +0 -0
  98. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/cli/main.py +0 -0
  99. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/cli/monitor.py +0 -0
  100. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/cli/review.py +0 -0
  101. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/cli/sandbox.py +0 -0
  102. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/cli/skills.py +0 -0
  103. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/cli/tasks.py +0 -0
  104. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/cli/trace_import.py +0 -0
  105. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/cli/train.py +0 -0
  106. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/continue_run/__init__.py +0 -0
  107. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/continue_run/batch.py +0 -0
  108. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/continue_run/orchestrator.py +0 -0
  109. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/continue_run/replay_proxy.py +0 -0
  110. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/continue_run/run_folder.py +0 -0
  111. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/continue_run/sandbox_proxy.py +0 -0
  112. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/contracts/__init__.py +0 -0
  113. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/contracts/planes.py +0 -0
  114. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/contracts/user.py +0 -0
  115. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/demo_task/environment/Dockerfile +0 -0
  116. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/demo_task/instruction.md +0 -0
  117. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/demo_task/task.md +0 -0
  118. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/demo_task/task.toml +0 -0
  119. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/demo_task/tests/test.sh +0 -0
  120. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/diagnostics.py +0 -0
  121. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/environment/__init__.py +0 -0
  122. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/environment/_registry/env0@outage.toml +0 -0
  123. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/environment/_registry/env0@prod.toml +0 -0
  124. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/environment/manifest.py +0 -0
  125. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/environment/manifest_env.py +0 -0
  126. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/environment/protocol.py +0 -0
  127. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/environment/readiness.py +0 -0
  128. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/eval_artifacts.py +0 -0
  129. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/eval_lift.py +0 -0
  130. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/eval_plan.py +0 -0
  131. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/eval_sharding.py +0 -0
  132. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/eval_worker.py +0 -0
  133. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/evaluation.py +0 -0
  134. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/experimental/__init__.py +0 -0
  135. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/experimental/mcp/__init__.py +0 -0
  136. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/experimental/mcp/hooks.py +0 -0
  137. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/experimental/mcp/reviewer_server.py +0 -0
  138. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/hosted_env.py +0 -0
  139. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/hub/__init__.py +0 -0
  140. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/hub/harbor_registry.py +0 -0
  141. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/integrations/__init__.py +0 -0
  142. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/integrations/trl/__init__.py +0 -0
  143. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/integrations/trl/spec.py +0 -0
  144. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/learner_skills.py +0 -0
  145. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/learner_store.py +0 -0
  146. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/loop_strategies.py +0 -0
  147. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/loop_sweep.py +0 -0
  148. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/metrics.py +0 -0
  149. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/models.py +0 -0
  150. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/monitor.py +0 -0
  151. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/providers/__init__.py +0 -0
  152. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/providers/litellm_bedrock_patch.py +0 -0
  153. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/providers/litellm_bedrock_preflight.py +0 -0
  154. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/providers/litellm_config.py +0 -0
  155. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/providers/litellm_logging.py +0 -0
  156. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/providers/litellm_runtime.py +0 -0
  157. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/providers/runtime.py +0 -0
  158. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/publish/__init__.py +0 -0
  159. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/publish/_progress.py +0 -0
  160. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/publish/azure_blob.py +0 -0
  161. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/publish/huggingface.py +0 -0
  162. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/publish/redact.py +0 -0
  163. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/publish/traj_capture.py +0 -0
  164. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/publish/traj_report.py +0 -0
  165. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/py.typed +0 -0
  166. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/review/__init__.py +0 -0
  167. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/review/config.py +0 -0
  168. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/review/default-rubric.json +0 -0
  169. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/review/prompts.py +0 -0
  170. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/review/runner.py +0 -0
  171. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/review/wrapper.py +0 -0
  172. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/rewards/README.md +0 -0
  173. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/rewards/__init__.py +0 -0
  174. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/rewards/builtins.py +0 -0
  175. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/rewards/events.py +0 -0
  176. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/rewards/file_readers.py +0 -0
  177. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/rewards/llm.py +0 -0
  178. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/rewards/memory_scorer.py +0 -0
  179. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/rewards/node.py +0 -0
  180. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/rewards/protocol.py +0 -0
  181. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/rewards/rubric.py +0 -0
  182. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/rewards/rubric_config.py +0 -0
  183. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/rewards/validation.py +0 -0
  184. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/rollout/__init__.py +0 -0
  185. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/rollout/_config.py +0 -0
  186. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/rollout/_deadline.py +0 -0
  187. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/rollout/_results.py +0 -0
  188. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/rollout/_setup.py +0 -0
  189. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/rollout/_skills.py +0 -0
  190. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/rollout/_usage.py +0 -0
  191. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/rollout/_user_loop.py +0 -0
  192. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/rollout/session_factory_runtime.py +0 -0
  193. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/rollout/task_runtime.py +0 -0
  194. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/rollout_branch.py +0 -0
  195. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/rollout_planes.py +0 -0
  196. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/runtime.py +0 -0
  197. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/sandbox/__init__.py +0 -0
  198. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/sandbox/_base.py +0 -0
  199. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/sandbox/_cache_reclaim.py +0 -0
  200. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/sandbox/_compose.py +0 -0
  201. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/sandbox/_compose_files/docker-compose-base.yaml +0 -0
  202. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/sandbox/_compose_files/docker-compose-build.yaml +0 -0
  203. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/sandbox/_compose_files/docker-compose-no-network.yaml +0 -0
  204. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/sandbox/_compose_files/docker-compose-prebuilt.yaml +0 -0
  205. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/sandbox/_sdk_ops.py +0 -0
  206. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/sandbox/agentcore.py +0 -0
  207. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/sandbox/agentcore_builder.py +0 -0
  208. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/sandbox/agentcore_image.py +0 -0
  209. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/sandbox/agentcore_provisioning.py +0 -0
  210. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/sandbox/agentcore_reaper.py +0 -0
  211. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/sandbox/agentcore_sealed.py +0 -0
  212. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/sandbox/apple_container.py +0 -0
  213. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/sandbox/daytona.py +0 -0
  214. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/sandbox/daytona_dind.py +0 -0
  215. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/sandbox/daytona_pty.py +0 -0
  216. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/sandbox/daytona_reaper.py +0 -0
  217. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/sandbox/daytona_strategies.py +0 -0
  218. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/sandbox/docker.py +0 -0
  219. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/sandbox/lockdown.py +0 -0
  220. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/sandbox/metadata.py +0 -0
  221. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/sandbox/modal_impl.py +0 -0
  222. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/sandbox/process/__init__.py +0 -0
  223. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/sandbox/process/_base.py +0 -0
  224. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/sandbox/process/agentcore.py +0 -0
  225. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/sandbox/process/apple.py +0 -0
  226. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/sandbox/process/daytona.py +0 -0
  227. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/sandbox/process/docker.py +0 -0
  228. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/sandbox/protocol.py +0 -0
  229. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/sandbox/providers.py +0 -0
  230. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/sandbox/services.py +0 -0
  231. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/sandbox/setup.py +0 -0
  232. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/sandbox/snapshot.py +0 -0
  233. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/sandbox/user.py +0 -0
  234. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/scenes.py +0 -0
  235. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/sdk.py +0 -0
  236. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/self_gen.py +0 -0
  237. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/skill_eval/__init__.py +0 -0
  238. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/skill_eval/_core.py +0 -0
  239. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/skill_eval/gepa_export.py +0 -0
  240. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/skill_eval/schema.py +0 -0
  241. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/skill_policy.py +0 -0
  242. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/skills.py +0 -0
  243. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/task/__init__.py +0 -0
  244. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/task/_document_evidence.py +0 -0
  245. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/task/_document_normalize.py +0 -0
  246. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/task/_document_parse.py +0 -0
  247. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/task/_document_profiles.py +0 -0
  248. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/task/acceptance_live.py +0 -0
  249. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/task/acceptance_live_model.py +0 -0
  250. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/task/acceptance_live_report.py +0 -0
  251. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/task/acceptance_live_validation.py +0 -0
  252. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/task/config.py +0 -0
  253. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/task/discovery.py +0 -0
  254. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/task/document.py +0 -0
  255. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/task/env.py +0 -0
  256. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/task/export.py +0 -0
  257. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/task/imports.py +0 -0
  258. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/task/output_format.py +0 -0
  259. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/task/package.py +0 -0
  260. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/task/paths.py +0 -0
  261. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/task/prompts.py +0 -0
  262. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/task/runtime_capabilities.py +0 -0
  263. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/task/runtime_view.py +0 -0
  264. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/task/task.py +0 -0
  265. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/task/verifier.py +0 -0
  266. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/task/verifier_core.py +0 -0
  267. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/task/verifier_document.py +0 -0
  268. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/task/verifier_errors.py +0 -0
  269. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/task/verifier_judge_inputs.py +0 -0
  270. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/task/verifier_ors_episode.py +0 -0
  271. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/task/verifier_reward_kit.py +0 -0
  272. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/task/verifier_scan.py +0 -0
  273. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/task/verifier_script_strategy.py +0 -0
  274. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/templates/__init__.py +0 -0
  275. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/templates/judge.py.tmpl +0 -0
  276. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/templates/test.sh.tmpl +0 -0
  277. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/traces/__init__.py +0 -0
  278. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/traces/huggingface.py +0 -0
  279. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/traces/local.py +0 -0
  280. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/traces/models.py +0 -0
  281. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/traces/parsers.py +0 -0
  282. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/traces/task_gen.py +0 -0
  283. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/training/__init__.py +0 -0
  284. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/training/backends/__init__.py +0 -0
  285. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/training/backends/prime_rl.py +0 -0
  286. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/training/run_manifest.py +0 -0
  287. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/trajectories/__init__.py +0 -0
  288. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/trajectories/_capture.py +0 -0
  289. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/trajectories/_export_common.py +0 -0
  290. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/trajectories/_llm_capture.py +0 -0
  291. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/trajectories/call_purpose.py +0 -0
  292. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/trajectories/export.py +0 -0
  293. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/trajectories/export_adp.py +0 -0
  294. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/trajectories/export_atif.py +0 -0
  295. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/trajectories/export_prime_sft.py +0 -0
  296. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/trajectories/export_trl_sft.py +0 -0
  297. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/trajectories/metrics.py +0 -0
  298. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/trajectories/results.py +0 -0
  299. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/trajectories/sessions.py +0 -0
  300. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/trajectories/tree.py +0 -0
  301. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/trajectories/trl_sft_tokenization.py +0 -0
  302. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/trajectories/types.py +0 -0
  303. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/src/benchflow/usage_tracking.py +0 -0
  304. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/__init__.py +0 -0
  305. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/acceptance_live_harness.py +0 -0
  306. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/agents/__init__.py +0 -0
  307. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/agents/test_manifest_dirscan.py +0 -0
  308. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/agents/test_manifest_loader.py +0 -0
  309. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/agents/test_manifest_parity.py +0 -0
  310. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/agents/test_manifest_wiring.py +0 -0
  311. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/agents/test_namespace_shorthand.py +0 -0
  312. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/agents/test_plugin_entry_points.py +0 -0
  313. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/agents/test_protocol.py +0 -0
  314. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/agents/test_remote_manifest_autoload.py +0 -0
  315. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/conformance/README.md +0 -0
  316. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/conformance/acp_smoke/environment/Dockerfile +0 -0
  317. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/conformance/acp_smoke/environment/docker-compose.yaml +0 -0
  318. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/conformance/acp_smoke/environment/skills/conformance-writer/SKILL.md +0 -0
  319. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/conformance/acp_smoke/instruction.md +0 -0
  320. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/conformance/acp_smoke/solution/solve.sh +0 -0
  321. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/conformance/acp_smoke/task.md +0 -0
  322. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/conformance/acp_smoke/task.toml +0 -0
  323. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/conformance/acp_smoke/tests/test.sh +0 -0
  324. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/conformance/conformance-results.json +0 -0
  325. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/conformance/proof_multi_agent.py +0 -0
  326. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/conformance/proof_snapshot.py +0 -0
  327. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/conformance/run_conformance.py +0 -0
  328. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/conformance/self_gen_smoke_skills/skill-creator/SKILL.md +0 -0
  329. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/conftest.py +0 -0
  330. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/continue_run/__init__.py +0 -0
  331. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/continue_run/_helpers.py +0 -0
  332. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/continue_run/test_batch.py +0 -0
  333. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/continue_run/test_orchestrator.py +0 -0
  334. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/continue_run/test_replay_proxy.py +0 -0
  335. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/continue_run/test_run_folder.py +0 -0
  336. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/environment/__init__.py +0 -0
  337. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/environment/test_chibench_manifest.py +0 -0
  338. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/environment/test_clawsbench_manifest.py +0 -0
  339. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/environment/test_manifest.py +0 -0
  340. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/environment/test_manifest_env.py +0 -0
  341. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/environment/test_protocol.py +0 -0
  342. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/environment/test_readiness.py +0 -0
  343. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/examples/hello-world-task/environment/Dockerfile +0 -0
  344. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/examples/hello-world-task/instruction.md +0 -0
  345. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/examples/hello-world-task/solution/solve.sh +0 -0
  346. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/examples/hello-world-task/task.md +0 -0
  347. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/examples/hello-world-task/task.toml +0 -0
  348. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/examples/hello-world-task/tests/test.sh +0 -0
  349. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/examples/test_claude.sh +0 -0
  350. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/examples/test_codex.sh +0 -0
  351. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/examples/test_codex_custom_provider.sh +0 -0
  352. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/examples/test_gemini.sh +0 -0
  353. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/examples/test_openclaw.sh +0 -0
  354. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/examples/traces/minimal-claude.jsonl +0 -0
  355. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/examples/traces/minimal-opentraces.jsonl +0 -0
  356. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/fixtures/digest/README.md +0 -0
  357. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/fixtures/digest/alpha-task/environment/Dockerfile +0 -0
  358. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/fixtures/digest/alpha-task/instruction.md +0 -0
  359. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/fixtures/digest/alpha-task/task.toml +0 -0
  360. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/fixtures/digest/alpha-task/tests/test.sh +0 -0
  361. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/fixtures/digest/beta-task/data/empty.bin +0 -0
  362. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/fixtures/digest/beta-task/data/unicode.txt +0 -0
  363. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/fixtures/digest/beta-task/instruction.md +0 -0
  364. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/fixtures/digest/beta-task/task.toml +0 -0
  365. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/fixtures/digest/not-a-task/notes.txt +0 -0
  366. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/fixtures/mock_acp_agent.py +0 -0
  367. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/fixtures/mock_acp_agent_interleaved.py +0 -0
  368. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/fixtures/mock_acp_agent_multi_turn.py +0 -0
  369. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/fixtures/mock_openai_responses_server.py +0 -0
  370. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/Dockerfile +0 -0
  371. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/data/michigan_stations.txt +0 -0
  372. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/flood-detection/SKILL.md +0 -0
  373. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/nws-flood-thresholds/SKILL.md +0 -0
  374. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/usgs-data-download/SKILL.md +0 -0
  375. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/fixtures/skillsbench_slice/flood-risk-analysis/instruction.md +0 -0
  376. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/fixtures/skillsbench_slice/flood-risk-analysis/solution/solve.sh +0 -0
  377. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/fixtures/skillsbench_slice/flood-risk-analysis/task.toml +0 -0
  378. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/fixtures/skillsbench_slice/flood-risk-analysis/tests/test.sh +0 -0
  379. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/fixtures/skillsbench_slice/flood-risk-analysis/tests/test_outputs.py +0 -0
  380. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/Dockerfile +0 -0
  381. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/climate.csv +0 -0
  382. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/hydrology.csv +0 -0
  383. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/land_cover.csv +0 -0
  384. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/water_temperature.csv +0 -0
  385. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/contribution-analysis/SKILL.md +0 -0
  386. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/meteorology-driver-classification/SKILL.md +0 -0
  387. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/pca-decomposition/SKILL.md +0 -0
  388. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/trend-analysis/SKILL.md +0 -0
  389. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/fixtures/skillsbench_slice/lake-warming-attribution/instruction.md +0 -0
  390. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/fixtures/skillsbench_slice/lake-warming-attribution/solution/solve.sh +0 -0
  391. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/fixtures/skillsbench_slice/lake-warming-attribution/task.toml +0 -0
  392. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/fixtures/skillsbench_slice/lake-warming-attribution/tests/test.sh +0 -0
  393. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/fixtures/skillsbench_slice/lake-warming-attribution/tests/test_outputs.py +0 -0
  394. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/fixtures/skillsbench_slice/manifest.json +0 -0
  395. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/Dockerfile +0 -0
  396. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/r2r_simulator.py +0 -0
  397. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/finite-horizon-lqr/SKILL.md +0 -0
  398. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/integral-action-design/SKILL.md +0 -0
  399. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/mpc-horizon-tuning/SKILL.md +0 -0
  400. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/state-space-linearization/SKILL.md +0 -0
  401. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/system_config.json +0 -0
  402. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/fixtures/skillsbench_slice/r2r-mpc-control/instruction.md +0 -0
  403. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/fixtures/skillsbench_slice/r2r-mpc-control/solution/solve.sh +0 -0
  404. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/fixtures/skillsbench_slice/r2r-mpc-control/task.toml +0 -0
  405. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/fixtures/skillsbench_slice/r2r-mpc-control/tests/test.sh +0 -0
  406. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/fixtures/skillsbench_slice/r2r-mpc-control/tests/test_outputs.py +0 -0
  407. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/Dockerfile +0 -0
  408. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/generate_training_pcaps.py +0 -0
  409. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/local.rules +0 -0
  410. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/pcap-triage-tshark/SKILL.md +0 -0
  411. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/pcap-triage-tshark/scripts/summarize_http_requests.sh +0 -0
  412. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-offline-evejson/SKILL.md +0 -0
  413. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-offline-evejson/scripts/run_suricata_offline.sh +0 -0
  414. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-rules-basics/SKILL.md +0 -0
  415. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/suricata.yaml +0 -0
  416. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/instruction.md +0 -0
  417. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/solution/solve.sh +0 -0
  418. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/task.toml +0 -0
  419. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/tests/test.sh +0 -0
  420. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/tests/test_outputs.py +0 -0
  421. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/Dockerfile +0 -0
  422. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syz-extract-constants/SKILL.md +0 -0
  423. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syzkaller-build-loop/SKILL.md +0 -0
  424. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syzlang-ioctl-basics/SKILL.md +0 -0
  425. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/instruction.md +0 -0
  426. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/solution/solve.sh +0 -0
  427. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/task.toml +0 -0
  428. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/tests/test.sh +0 -0
  429. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/tests/test_outputs.py +0 -0
  430. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/integration/_consistency.py +0 -0
  431. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/integration/agent_judge.py +0 -0
  432. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/integration/check_adapter_evidence.py +0 -0
  433. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/integration/check_hosted_env_evidence.py +0 -0
  434. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/integration/check_results.py +0 -0
  435. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/integration/check_skillsbench_harbor_parity.py +0 -0
  436. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/integration/check_trace_to_task_evidence.py +0 -0
  437. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/integration/configs/claude-agent-acp.yaml +0 -0
  438. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/integration/configs/codex-acp.yaml +0 -0
  439. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/integration/configs/gemini.yaml +0 -0
  440. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/integration/configs/harvey-lab-harness.yaml +0 -0
  441. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/integration/configs/mimo.yaml +0 -0
  442. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/integration/configs/openclaw.yaml +0 -0
  443. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/integration/configs/opencode.yaml +0 -0
  444. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/integration/configs/openhands.yaml +0 -0
  445. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/integration/configs/pi-acp.yaml +0 -0
  446. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/integration/deepagents_harness.py +0 -0
  447. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/integration/rubric_checks.py +0 -0
  448. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/integration/run.sh +0 -0
  449. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/integration/run_suite.py +0 -0
  450. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/integration/scenarios.py +0 -0
  451. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/integration/suites/release.yaml +0 -0
  452. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_acceptance_evidence.py +0 -0
  453. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_acceptance_live.py +0 -0
  454. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_acceptance_live_execution.py +0 -0
  455. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_acp.py +0 -0
  456. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_acp_capability_advertising.py +0 -0
  457. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_acp_mcp_servers.py +0 -0
  458. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_acp_model_config_dispatch.py +0 -0
  459. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_acp_pinned_protocol_guard.py +0 -0
  460. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_acp_setup_failure_propagation.py +0 -0
  461. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_adapter_scripts.py +0 -0
  462. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_adapters.py +0 -0
  463. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_agent_cli.py +0 -0
  464. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_agent_env_resolution.py +0 -0
  465. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_agent_gemini_defaults.py +0 -0
  466. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_agent_idle_timeout_cli.py +0 -0
  467. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_agent_model_decouple.py +0 -0
  468. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_agent_registry.py +0 -0
  469. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_agent_router.py +0 -0
  470. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_agent_router_cli_e2e.py +0 -0
  471. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_agent_router_scaffold.py +0 -0
  472. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_agent_setup.py +0 -0
  473. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_agent_spec.py +0 -0
  474. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_agentcore_builder.py +0 -0
  475. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_agentcore_parallel.py +0 -0
  476. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_agentcore_reaper.py +0 -0
  477. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_agentcore_sandbox.py +0 -0
  478. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_agentcore_transport.py +0 -0
  479. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_api_error_capture.py +0 -0
  480. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_apple_container_sandbox.py +0 -0
  481. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_bare_model_provider.py +0 -0
  482. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_base_install_imports.py +0 -0
  483. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_bedrock_thinking.py +0 -0
  484. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_benchflow_experiment_review_validator.py +0 -0
  485. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_benchmark_repos_resolve_repo_path.py +0 -0
  486. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_branch.py +0 -0
  487. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_build_context_stage.py +0 -0
  488. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_build_review_pack.py +0 -0
  489. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_capture_trajectory.py +0 -0
  490. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_check_skillsbench_harbor_parity.py +0 -0
  491. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_clawsbench_slice.py +0 -0
  492. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_cli_adopt_aliases.py +0 -0
  493. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_cli_arg_validation.py +0 -0
  494. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_cli_daytona.py +0 -0
  495. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_cli_docs_drift.py +0 -0
  496. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_cli_hub_env.py +0 -0
  497. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_cli_live_progress.py +0 -0
  498. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_cli_misc.py +0 -0
  499. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_codex_review.py +0 -0
  500. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_codex_self_write_auth.py +0 -0
  501. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_config_override.py +0 -0
  502. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_config_redaction.py +0 -0
  503. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_connect_as_env.py +0 -0
  504. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_console_error_truncation.py +0 -0
  505. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_console_progress.py +0 -0
  506. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_continuallearningbench_adapter.py +0 -0
  507. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_dataset_registry.py +0 -0
  508. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_daytona_command_polling.py +0 -0
  509. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_daytona_dind_compose_up.py +0 -0
  510. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_daytona_download.py +0 -0
  511. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_daytona_litellm_runtime.py +0 -0
  512. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_daytona_poll_deadline.py +0 -0
  513. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_daytona_reap.py +0 -0
  514. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_deepagents_agent.py +0 -0
  515. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_diagnostics.py +0 -0
  516. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_docker_prune_scoping.py +0 -0
  517. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_docker_uploads.py +0 -0
  518. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_docs_examples.py +0 -0
  519. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_eng50_capabilities.py +0 -0
  520. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_env_registry.py +0 -0
  521. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_env_setup.py +0 -0
  522. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_environment_manifest_controls.py +0 -0
  523. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_eval_artifact_cli.py +0 -0
  524. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_eval_filters_applied.py +0 -0
  525. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_eval_lift.py +0 -0
  526. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_eval_sharding.py +0 -0
  527. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_eval_single_task_summary.py +0 -0
  528. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_eval_source_provenance.py +0 -0
  529. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_eval_worker_retry.py +0 -0
  530. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_eval_zero_task_guard.py +0 -0
  531. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_evaluation_environment_manifest.py +0 -0
  532. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_exclude_tasks.py +0 -0
  533. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_filter_credentialed_cells.py +0 -0
  534. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_harvey_lab_shim.py +0 -0
  535. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_hilbench_adapter.py +0 -0
  536. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_hosted_env.py +0 -0
  537. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_hosted_env_rollout_contract.py +0 -0
  538. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_hub_harbor_registry.py +0 -0
  539. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_inbound_adapter_manifest.py +0 -0
  540. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_inbound_adapters.py +0 -0
  541. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_integration_agent_judge.py +0 -0
  542. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_integration_check_results.py +0 -0
  543. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_integration_consistency.py +0 -0
  544. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_integration_matrix.py +0 -0
  545. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_integration_provider_selection.py +0 -0
  546. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_integration_run_suite.py +0 -0
  547. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_integration_suite.py +0 -0
  548. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_internet_policy.py +0 -0
  549. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_job.py +0 -0
  550. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_job_sequential_shared.py +0 -0
  551. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_job_sequential_shared_resume.py +0 -0
  552. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_judge_robustness.py +0 -0
  553. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_judge_symlink_ingestion.py +0 -0
  554. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_learner_skills.py +0 -0
  555. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_learner_skills_traversal.py +0 -0
  556. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_learner_store.py +0 -0
  557. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_learner_store_persistence.py +0 -0
  558. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_litellm_config.py +0 -0
  559. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_litellm_hardening.py +0 -0
  560. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_litellm_logging.py +0 -0
  561. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_litellm_model_via_env_generic.py +0 -0
  562. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_litellm_reasoning_passthrough.py +0 -0
  563. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_litellm_runtime.py +0 -0
  564. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_litellm_smoke.py +0 -0
  565. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_live_llm_trajectory.py +0 -0
  566. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_llm_judge.py +0 -0
  567. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_llm_judge_event_tags.py +0 -0
  568. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_llm_judge_verifier.py +0 -0
  569. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_loop_strategies.py +0 -0
  570. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_loop_summary.py +0 -0
  571. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_loop_sweep.py +0 -0
  572. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_memory_scorer.py +0 -0
  573. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_metrics.py +0 -0
  574. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_mle_bench_adapter.py +0 -0
  575. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_mock_openai_responses_server.py +0 -0
  576. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_monitor_scaffold.py +0 -0
  577. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_native_acp_usage.py +0 -0
  578. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_no_cross_provider_fallback.py +0 -0
  579. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_notification_order_real.py +0 -0
  580. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_opencode_family_proxy_tracking.py +0 -0
  581. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_oracle.py +0 -0
  582. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_oracle_chokepoint.py +0 -0
  583. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_paths_safe.py +0 -0
  584. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_paths_symlink_helpers.py +0 -0
  585. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_pi_acp_launcher.py +0 -0
  586. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_pi_acp_proxy_routing.py +0 -0
  587. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_process.py +0 -0
  588. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_project_skills_layout.py +0 -0
  589. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_provider_auth_detection.py +0 -0
  590. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_providers.py +0 -0
  591. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_publish_azure_blob.py +0 -0
  592. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_reexport.py +0 -0
  593. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_registry_invariants.py +0 -0
  594. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_release_hardening_r5.py +0 -0
  595. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_release_version.py +0 -0
  596. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_release_workflow_wiring.py +0 -0
  597. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_resolve_env_helpers.py +0 -0
  598. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_review_boundaries.py +0 -0
  599. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_review_rubric.py +0 -0
  600. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_review_runtime.py +0 -0
  601. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_reward_lenient.py +0 -0
  602. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_reward_node.py +0 -0
  603. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_reward_range.py +0 -0
  604. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_reward_unified_contract.py +0 -0
  605. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_rewards.py +0 -0
  606. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_rewards_jsonl.py +0 -0
  607. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_rollout_architecture.py +0 -0
  608. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_rollout_branch.py +0 -0
  609. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_rollout_config_path_coercion.py +0 -0
  610. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_rollout_environment.py +0 -0
  611. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_rollout_hard_deadline.py +0 -0
  612. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_rollout_import_no_side_effects.py +0 -0
  613. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_rollout_on_ask_user_wiring.py +0 -0
  614. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_rollout_planes_contract.py +0 -0
  615. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_rollout_probe_sandbox_health.py +0 -0
  616. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_rollout_session_factory_dispatch.py +0 -0
  617. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_rollout_setup_commands.py +0 -0
  618. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_rollout_upload.py +0 -0
  619. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_rubric_checks.py +0 -0
  620. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_rubric_config.py +0 -0
  621. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_runtime.py +0 -0
  622. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_runtime_capabilities.py +0 -0
  623. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_runtime_config_wired.py +0 -0
  624. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_runtime_live_sandbox.py +0 -0
  625. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_sandbox.py +0 -0
  626. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_sandbox_exec_secret_handling.py +0 -0
  627. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_sandbox_hardening.py +0 -0
  628. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_sandbox_isolation_copy_traversal.py +0 -0
  629. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_sandbox_live_process.py +0 -0
  630. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_sandbox_multi_service.py +0 -0
  631. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_sandbox_prebuilt_validation.py +0 -0
  632. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_sandbox_protocol.py +0 -0
  633. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_sandbox_provider_registry_drift.py +0 -0
  634. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_sandbox_setup.py +0 -0
  635. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_sandbox_snapshot_contract.py +0 -0
  636. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_sandbox_upload_symlink.py +0 -0
  637. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_sandbox_verifier_workspace.py +0 -0
  638. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_scene.py +0 -0
  639. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_scene_outbox_trial.py +0 -0
  640. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_scene_parallel_group.py +0 -0
  641. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_scene_result_aggregation.py +0 -0
  642. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_scoring.py +0 -0
  643. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_sdk_internals.py +0 -0
  644. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_sdk_lockdown.py +0 -0
  645. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_sdk_run_alias.py +0 -0
  646. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_sealed_channel_container.py +0 -0
  647. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_self_gen_cli.py +0 -0
  648. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_self_gen_export_error_channel.py +0 -0
  649. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_self_gen_export_failures.py +0 -0
  650. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_self_gen_orchestration.py +0 -0
  651. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_session_factory_runtime.py +0 -0
  652. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_session_request_permission_dispatch.py +0 -0
  653. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_skill_eval.py +0 -0
  654. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_skill_eval_dryrun.py +0 -0
  655. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_skill_eval_integration.py +0 -0
  656. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_skill_eval_sweep.py +0 -0
  657. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_skill_eval_traversal.py +0 -0
  658. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_skill_invocation_artifacts.py +0 -0
  659. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_skill_policy.py +0 -0
  660. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_skills.py +0 -0
  661. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_skills_dir_agent_home_link.py +0 -0
  662. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_skillsbench_conversion_conformance.py +0 -0
  663. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_skillsbench_harbor_run_suite.py +0 -0
  664. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_smoke.py +0 -0
  665. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_smoke_wiring.py +0 -0
  666. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_source_adapters.py +0 -0
  667. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_subscription_auth.py +0 -0
  668. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_task_check_eval_consistency.py +0 -0
  669. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_task_config.py +0 -0
  670. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_task_digest.py +0 -0
  671. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_task_document.py +0 -0
  672. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_task_download.py +0 -0
  673. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_task_export.py +0 -0
  674. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_task_output_format.py +0 -0
  675. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_task_package.py +0 -0
  676. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_task_runtime_primitive.py +0 -0
  677. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_tasks.py +0 -0
  678. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_token_usage_normalization.py +0 -0
  679. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_trace_import_cli.py +0 -0
  680. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_trace_task_gen_traversal.py +0 -0
  681. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_trace_to_task_evidence.py +0 -0
  682. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_traces_huggingface.py +0 -0
  683. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_traces_parsers.py +0 -0
  684. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_traces_task_gen.py +0 -0
  685. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_train_cli.py +0 -0
  686. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_train_mode_artifact_emission.py +0 -0
  687. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_train_trl_cli.py +0 -0
  688. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_traj_report.py +0 -0
  689. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_traj_staging_phases.py +0 -0
  690. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_traj_upload_skill.py +0 -0
  691. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_trajectory_integration.py +0 -0
  692. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_trajectory_streaming.py +0 -0
  693. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_trajectory_upload_layout.py +0 -0
  694. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_trial_agent_timeout_verify.py +0 -0
  695. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_trial_install_agent_timeout.py +0 -0
  696. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_trial_litellm_runtime.py +0 -0
  697. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_trl_integration.py +0 -0
  698. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_usage_litellm.py +0 -0
  699. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_usage_required.py +0 -0
  700. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_usage_tracking.py +0 -0
  701. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_user.py +0 -0
  702. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_v06_guard_ports.py +0 -0
  703. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_verifier_document.py +0 -0
  704. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_verifier_multi_container.py +0 -0
  705. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_verifier_output.py +0 -0
  706. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_verifier_output_freshness.py +0 -0
  707. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_verifier_strategies.py +0 -0
  708. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_verifier_wedge_retry.py +0 -0
  709. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_verify.py +0 -0
  710. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_viewer_confirm.py +0 -0
  711. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_workflow_action_pinning.py +0 -0
  712. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/test_yaml_config.py +0 -0
  713. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/trajectories/__init__.py +0 -0
  714. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/trajectories/test_export.py +0 -0
  715. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/trajectories/test_export_adp.py +0 -0
  716. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/trajectories/test_export_atif.py +0 -0
  717. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/trajectories/test_export_common.py +0 -0
  718. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/trajectories/test_export_nan_handling.py +0 -0
  719. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/trajectories/test_export_prime_sft.py +0 -0
  720. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/trajectories/test_redaction.py +0 -0
  721. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/trajectories/test_step_granularity.py +0 -0
  722. {benchflow-0.7.2.dev1998 → benchflow-0.7.3}/tests/trajectories/test_tree.py +0 -0
@@ -2,6 +2,27 @@
2
2
 
3
3
  ## [Unreleased]
4
4
 
5
+ ## 0.7.3 — 2026-08-16
6
+
7
+ ### Added
8
+ - **`bench traj upload` waits out short rate-limit responses instead of
9
+ failing.** When the contribution service answers 429 with a short
10
+ `Retry-After`, the handshake now sleeps it out with jitter and retries up
11
+ to three times (two-minute cap per wait), so a crowd of simultaneous
12
+ contributors self-heals instead of surfacing errors. Longer waits still
13
+ fail fast with the actionable retry-after message. (#1027)
14
+
15
+ ### Changed
16
+ - **The contribution service rate-limits per contributor, not per venue.**
17
+ Upload budgets are token buckets keyed on contributor identity with a
18
+ wide per-IP abuse backstop, refill continuously, and answer 429 with
19
+ seconds-until-next-token instead of the remainder of the clock hour, so
20
+ many contributors behind one NAT no longer starve each other. Contended
21
+ bucket updates back off with jitter rather than shedding simultaneous
22
+ crowds. (#1027, #1028)
23
+
24
+ ## 0.7.2 — 2026-08-16
25
+
5
26
  ### Added
6
27
  - **The upload preview itemizes what redaction masked, by kind.** The
7
28
  redactor now categorizes every replacement by the rule that fired — API
@@ -34,13 +55,42 @@
34
55
  - **Trajectory uploads are tagged with the session's repository by
35
56
  default.** Unless `--source-id` is given, `bench traj upload` reads the
36
57
  session's recorded working directory (Claude `cwd` events, Codex
37
- `session_meta`), resolves its git `origin` remote (invocation directory as
38
- fallback), and stores `repo/<owner>/<name>` as the manifest source id,
39
- printing `Repo: owner/name (use --no-repo to omit)`. `--no-repo` opts out
58
+ `session_meta`), resolves its git `origin` remote, and stores
59
+ `repo/<owner>/<name>` as the manifest source id, printing
60
+ `Repo: owner/name (from session cwd /path; use --no-repo to omit)` (the
61
+ local path is terminal output only, never uploaded). `--no-repo` opts out
40
62
  — the `benchflow-traj-upload` skill now surfaces the detected tag during
41
63
  the confirm step so contributors can decline it for private repos — and
42
64
  undetectable repos fall back silently to the path-derived source id.
43
65
 
66
+ ### Fixed
67
+ - **The repo tag derives only from the session's own recorded cwd.** The
68
+ initial repo-tagging implementation (#1015) fell back to the upload
69
+ invocation directory's git remote when the session cwd yielded nothing; a
70
+ collector-side audit showed this mis-attributes provenance — a session
71
+ recorded in a non-repo directory, uploaded from the benchflow checkout,
72
+ was tagged `repo/benchflow-ai/benchflow` (two community-dataset entries
73
+ carry the mis-tag). The fallback is removed: no session cwd, a missing
74
+ directory, or no GitHub remote now mean no repo tag, exactly like
75
+ `--no-repo`.
76
+ - **The trajectory viewer header no longer shows `?` badges on real Claude
77
+ Code sessions.** `bench eval view` on a `~/.claude` session JSONL rendered
78
+ `model: ?`, `session: ?...`, `claude code: ?`, and `total cost: $0.0000`
79
+ because the header only read a `type: system` event that real session
80
+ files don't contain. The header now derives its metadata from what the
81
+ file actually carries (first assistant event's `message.model`, per-event
82
+ `version` / `sessionId`, the filename stem as a session fallback) and
83
+ hides any badge whose value is unknown — including the cost badge when no
84
+ event carries cost data. Presentation only.
85
+ - **Upload progress no longer claims the broker is waking up.** A warm
86
+ retry printed `Uploading… the first request can take a minute while the
87
+ service wakes up` even when the service was already up. The line is now
88
+ `Uploading… this can take up to a minute; retries are safe.`
89
+ - **`bench traj setup --list` no longer wraps session paths mid-token.**
90
+ Each hit prints index/source/time, then the path on its own line, then
91
+ the snippet, via plain `print` so Rich does not split a long JSONL path
92
+ and break copy-paste.
93
+
44
94
  ### Changed
45
95
  - **Trajectory viewer tool calls are color-coded and backgrounds are light.**
46
96
  Each tool kind now gets a muted GitHub-label-style accent on its name pill
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: benchflow
3
- Version: 0.7.2.dev1998
3
+ Version: 0.7.3
4
4
  Summary: Multi-turn agent benchmarking with ACP — run any agent, any model, any provider.
5
5
  Project-URL: Homepage, https://github.com/benchflow-ai/benchflow
6
6
  Project-URL: Repository, https://github.com/benchflow-ai/benchflow
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "benchflow"
3
- version = "0.7.2.dev1998"
3
+ version = "0.7.3"
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"
@@ -292,17 +292,23 @@ def register_traj(app: typer.Typer) -> None:
292
292
  def _run_upload(options: _UploadOptions) -> None:
293
293
  prompted = options.path is None
294
294
  path = options.path or _prompt_for_path()
295
- repo_slug: str | None = None
295
+ detected: _DetectedRepo | None = None
296
296
  if options.source_id is not None:
297
297
  source_id = options.source_id
298
298
  else:
299
299
  if options.repo:
300
- repo_slug = _detect_repo_slug(path)
301
- source_id = f"repo/{repo_slug}" if repo_slug else default_source_id(path)
302
- if repo_slug:
303
- # Contributor-visible metadata: surface the tag so private-repo
304
- # sessions can opt out before anything leaves the machine.
305
- console.print(f"Repo: {repo_slug} (use --no-repo to omit)")
300
+ detected = _detect_repo_slug(path)
301
+ source_id = f"repo/{detected.slug}" if detected else default_source_id(path)
302
+ if detected:
303
+ # Contributor-visible metadata: surface the tag and where it came
304
+ # from so private-repo sessions can opt out before anything leaves
305
+ # the machine. The local path stays terminal-only; the uploaded
306
+ # source id is just repo/<owner>/<name>. Plain print keeps the line
307
+ # one physical line (no Rich wrapping) so the path stays selectable.
308
+ print(
309
+ f"Repo: {detected.slug} "
310
+ f"(from session cwd {detected.session_cwd}; use --no-repo to omit)"
311
+ )
306
312
  destination = _resolve_destination(options)
307
313
 
308
314
  with (
@@ -345,10 +351,9 @@ def _run_upload(options: _UploadOptions) -> None:
345
351
  console.print("[yellow]Upload cancelled.[/yellow]")
346
352
  return
347
353
  if not destination.direct:
348
- console.print(
349
- "Uploading… the first request can take a minute "
350
- "while the service wakes up."
351
- )
354
+ # Honest on both cold and warm runs: the broker may already be
355
+ # up. Don't claim it's waking when a retry is just transferring.
356
+ console.print("Uploading… this can take up to a minute; retries are safe.")
352
357
  with upload_progress(staged.files, console=console) as hooks:
353
358
  result = _publish(staged, destination=destination, hooks=hooks)
354
359
  _print_upload_result(staged, result, direct=destination.direct)
@@ -419,25 +424,35 @@ def _infer_email() -> str:
419
424
  _SESSION_CWD_SCAN_LINES = 50
420
425
 
421
426
 
422
- def _detect_repo_slug(path: Path) -> str | None:
427
+ @dataclass(frozen=True)
428
+ class _DetectedRepo:
429
+ slug: str
430
+ session_cwd: Path
431
+
432
+
433
+ def _detect_repo_slug(path: Path) -> _DetectedRepo | None:
423
434
  """Best-effort ``owner/name`` for the repository the session was about.
424
435
 
425
436
  Reads the working directory the session recorded (Claude events carry a
426
- ``cwd`` field; Codex ``session_meta`` payloads do too), asks that
427
- directory's git for the ``origin`` remote, and falls back to the
428
- invocation directory. Every failure is silent repo tagging must never
429
- break an upload and local-path remotes never produce a tag, so no
430
- local absolute path can leak into the manifest.
437
+ ``cwd`` field; Codex ``session_meta`` payloads do too) and asks that
438
+ directory's git for the ``origin`` remote. The trajectory's own recorded
439
+ cwd is the ONLY provenance source: there is deliberately no fallback to
440
+ the upload invocation directory, which mis-attributed sessions recorded
441
+ outside a repo to whatever checkout the contributor happened to upload
442
+ from. No session cwd, a missing directory, or no GitHub remote all mean
443
+ no tag. Every failure is silent — repo tagging must never break an
444
+ upload — and local-path remotes never produce a tag, so no local
445
+ absolute path can leak into the manifest.
431
446
  """
432
- for candidate in (_session_cwd(path), Path.cwd()):
433
- if candidate is None or not candidate.is_dir():
434
- continue
435
- remote = _command_stdout(
436
- "git", "-C", str(candidate), "remote", "get-url", "origin"
437
- )
438
- slug = _repo_slug_from_remote(remote) if remote else None
439
- if slug:
440
- return slug
447
+ session_cwd = _session_cwd(path)
448
+ if session_cwd is None or not session_cwd.is_dir():
449
+ return None
450
+ remote = _command_stdout(
451
+ "git", "-C", str(session_cwd), "remote", "get-url", "origin"
452
+ )
453
+ slug = _repo_slug_from_remote(remote) if remote else None
454
+ if slug:
455
+ return _DetectedRepo(slug=slug, session_cwd=session_cwd)
441
456
  return None
442
457
 
443
458
 
@@ -701,11 +716,15 @@ def _print_session_hits() -> None:
701
716
 
702
717
  hits = list_recent_sessions()
703
718
  if not hits:
704
- console.print("No recent Claude Code, Codex, or trial sessions found.")
719
+ print("No recent Claude Code, Codex, or trial sessions found.")
705
720
  return
706
721
  for index, hit in enumerate(hits, start=1):
707
722
  snippet = hit.snippet or "(no prompt yet)"
708
- console.print(f"{index}. [{hit.source}] {hit.when} {hit.path}\n {snippet}")
723
+ # Plain print + path on its own line: Rich wrapping used to split
724
+ # long session paths mid-token and make them unselectable.
725
+ print(f"{index}. [{hit.source}] {hit.when}")
726
+ print(f" {hit.path}")
727
+ print(f" {snippet}")
709
728
 
710
729
 
711
730
  def _interactive_view() -> None:
@@ -3,6 +3,8 @@
3
3
  from __future__ import annotations
4
4
 
5
5
  import logging
6
+ import random
7
+ import time
6
8
  from collections.abc import Callable
7
9
  from contextlib import contextmanager, nullcontext
8
10
  from dataclasses import dataclass
@@ -18,6 +20,11 @@ from benchflow.publish.traj_capture import StagedCapture, StagedFile
18
20
  # the first SAS grant. Retries are safe; keep this under two minutes.
19
21
  HANDSHAKE_TIMEOUT_SEC = 90.0
20
22
  PUT_TIMEOUT_SEC = 300.0
23
+ # The broker's token buckets answer 429 with an honest, usually-short
24
+ # Retry-After. Waiting it out inline turns a crowd burst into a smooth queue;
25
+ # anything longer than this cap is surfaced to the contributor instead.
26
+ HANDSHAKE_RETRY_LIMIT = 3
27
+ HANDSHAKE_RETRY_MAX_WAIT_SEC = 120.0
21
28
 
22
29
 
23
30
  @dataclass(frozen=True)
@@ -57,9 +64,7 @@ def upload_capture_via_broker(
57
64
  manager = nullcontext(http_client) if http_client is not None else httpx.Client()
58
65
  try:
59
66
  with _quiet_httpx_request_logging(), manager as client:
60
- response = client.post(
61
- endpoint, json=request_body, timeout=HANDSHAKE_TIMEOUT_SEC
62
- )
67
+ response = _post_handshake(client, endpoint, request_body)
63
68
  if response.status_code == 409:
64
69
  return _already_uploaded_result(response, staged, broker_url)
65
70
  _raise_for_broker_response(response, operation="upload handshake")
@@ -107,6 +112,35 @@ def upload_capture_via_broker(
107
112
  )
108
113
 
109
114
 
115
+ def _post_handshake(
116
+ client: httpx.Client, endpoint: str, request_body: dict[str, Any]
117
+ ) -> httpx.Response:
118
+ """POST the handshake, waiting out short broker 429s instead of failing."""
119
+ response = client.post(endpoint, json=request_body, timeout=HANDSHAKE_TIMEOUT_SEC)
120
+ for _retry in range(HANDSHAKE_RETRY_LIMIT):
121
+ if response.status_code != 429:
122
+ return response
123
+ retry_after = _retry_after_seconds(response)
124
+ if retry_after is None or retry_after > HANDSHAKE_RETRY_MAX_WAIT_SEC:
125
+ return response
126
+ time.sleep(retry_after + random.uniform(0.0, 1.0))
127
+ response = client.post(
128
+ endpoint, json=request_body, timeout=HANDSHAKE_TIMEOUT_SEC
129
+ )
130
+ return response
131
+
132
+
133
+ def _retry_after_seconds(response: httpx.Response) -> float | None:
134
+ value = response.headers.get("Retry-After")
135
+ if value is None:
136
+ return None
137
+ try:
138
+ seconds = float(value.strip())
139
+ except ValueError:
140
+ return None
141
+ return seconds if seconds >= 0 else None
142
+
143
+
110
144
  def _is_create_only_conflict(response: httpx.Response) -> bool:
111
145
  """Treat create-only blob conflicts as an idempotent skip.
112
146
 
@@ -431,26 +431,18 @@ def render_rollout(rollout_dir: Path, prompts: list[str] | None = None) -> str:
431
431
  while len(prompts) < len(turn_files):
432
432
  prompts.append("")
433
433
 
434
- first_events = _parse_jsonl(turn_files[0].read_text())
435
- sys_event = next((e for e in first_events if e.get("type") == "system"), {})
436
- total_cost = 0
437
- total_turns_count = 0
438
-
434
+ all_events: list[dict] = []
439
435
  all_blocks = []
440
436
  for i, tf in enumerate(turn_files):
441
437
  events = _parse_jsonl(tf.read_text())
438
+ all_events.extend(events)
442
439
  all_blocks.append(render_turn(events, i + 1, prompts[i]))
443
- for e in events:
444
- if e.get("type") == "result":
445
- total_cost += e.get("total_cost_usd", 0)
446
- total_turns_count += e.get("num_turns", 0)
447
-
448
- # `or "?"` (not just a .get default): a present-but-null value in the
449
- # stream-json (e.g. "session_id": null) bypasses the default and would crash
450
- # html.escape() / the [:16] slice below with a raw TypeError.
451
- session_id = str(sys_event.get("session_id") or "?")
452
- model = str(sys_event.get("model") or "?")
453
- version = str(sys_event.get("claude_code_version") or "?")
440
+
441
+ badges = _stream_header_badges(all_events)
442
+ badges.append(("turns", str(len(turn_files))))
443
+ total_cost = _result_cost(all_events)
444
+ if total_cost is not None:
445
+ badges.append(("total cost", f"${total_cost:.4f}"))
454
446
 
455
447
  return f"""<!DOCTYPE html>
456
448
  <html>
@@ -464,14 +456,7 @@ def render_rollout(rollout_dir: Path, prompts: list[str] | None = None) -> str:
464
456
  <div class="header">
465
457
  {_WORDMARK_HTML}
466
458
  <h1>{html.escape(rollout_dir.name)}</h1>
467
- <div class="meta">
468
- <span>model: {html.escape(model)}</span>
469
- <span>session: {html.escape(session_id[:16])}...</span>
470
- <span>claude code: {html.escape(version)}</span>
471
- <span>turns: {len(turn_files)}</span>
472
- <span>total cost: ${total_cost:.4f}</span>
473
- </div>
474
- </div>
459
+ {_meta_badges_html(badges)}</div>
475
460
  {_join_with_divider(all_blocks)}
476
461
  </body>
477
462
  </html>"""
@@ -672,18 +657,89 @@ def render_jsonl_file(path: Path) -> str:
672
657
  body = render_turn(events, 1, "")
673
658
  if not body.strip():
674
659
  return _NO_TRAJECTORIES_HTML
675
- return _stream_json_page(path.name, events, [body])
660
+ return _stream_json_page(path.name, events, [body], session_fallback=path.stem)
661
+
662
+
663
+ def _stream_header_badges(
664
+ events: list[dict], *, session_fallback: str | None = None
665
+ ) -> list[tuple[str, str]]:
666
+ """Header badges derivable from what the stream actually contains.
667
+
668
+ ``claude -p`` stream-json carries a ``type: system`` init event
669
+ (``session_id`` / ``model`` / ``claude_code_version``); real ``~/.claude``
670
+ session files don't — their metadata lives per event (``sessionId``,
671
+ ``version``) and on assistant events (``message.model``). Pull from
672
+ whichever is present and omit anything unknown: a header of ``?`` badges
673
+ at the approve moment reads as a broken viewer, not as missing data.
674
+ Truthiness (not ``.get`` defaults) also swallows present-but-null values
675
+ like ``"session_id": null``, which previously needed an explicit guard to
676
+ avoid a TypeError.
677
+ """
678
+ sys_event = next((e for e in events if e.get("type") == "system"), {})
676
679
 
680
+ def _first(values) -> object | None:
681
+ return next((value for value in values if value), None)
677
682
 
678
- def _stream_json_page(title: str, events: list[dict], turn_blocks: list[str]) -> str:
679
- sys_event = next((e for e in events if e.get("type") == "system"), {})
680
- total_cost = 0.0
683
+ model = sys_event.get("model") or _first(
684
+ event["message"].get("model")
685
+ for event in events
686
+ if event.get("type") == "assistant" and isinstance(event.get("message"), dict)
687
+ )
688
+ session_id = (
689
+ sys_event.get("session_id")
690
+ or _first(event.get("sessionId") for event in events)
691
+ or session_fallback
692
+ )
693
+ version = sys_event.get("claude_code_version") or _first(
694
+ event.get("version") for event in events
695
+ )
696
+
697
+ badges: list[tuple[str, str]] = []
698
+ if model:
699
+ badges.append(("model", str(model)))
700
+ if session_id:
701
+ sid = str(session_id)
702
+ badges.append(("session", sid[:16] + ("..." if len(sid) > 16 else "")))
703
+ if version:
704
+ badges.append(("claude code", str(version)))
705
+ return badges
706
+
707
+
708
+ def _result_cost(events: list[dict]) -> float | None:
709
+ """Total cost summed from result events, or ``None`` when no event
710
+ carries cost data — so the header can hide the badge instead of
711
+ asserting a fictional ``$0.0000``."""
712
+ total = 0.0
713
+ seen = False
681
714
  for event in events:
682
- if event.get("type") == "result":
683
- total_cost += float(event.get("total_cost_usd") or 0)
684
- session_id = str(sys_event.get("session_id") or "?")
685
- model = str(sys_event.get("model") or "?")
686
- version = str(sys_event.get("claude_code_version") or "?")
715
+ if event.get("type") == "result" and event.get("total_cost_usd") is not None:
716
+ total += float(event.get("total_cost_usd") or 0)
717
+ seen = True
718
+ return total if seen else None
719
+
720
+
721
+ def _meta_badges_html(badges: list[tuple[str, str]]) -> str:
722
+ """The header's ``.meta`` badge row; empty string when nothing is known."""
723
+ if not badges:
724
+ return ""
725
+ spans = "\n".join(
726
+ f"<span>{html.escape(label)}: {html.escape(value)}</span>"
727
+ for label, value in badges
728
+ )
729
+ return f'<div class="meta">\n{spans}\n</div>\n'
730
+
731
+
732
+ def _stream_json_page(
733
+ title: str,
734
+ events: list[dict],
735
+ turn_blocks: list[str],
736
+ *,
737
+ session_fallback: str | None = None,
738
+ ) -> str:
739
+ badges = _stream_header_badges(events, session_fallback=session_fallback)
740
+ total_cost = _result_cost(events)
741
+ if total_cost is not None:
742
+ badges.append(("total cost", f"${total_cost:.4f}"))
687
743
  return f"""<!DOCTYPE html>
688
744
  <html>
689
745
  <head>
@@ -696,13 +752,7 @@ def _stream_json_page(title: str, events: list[dict], turn_blocks: list[str]) ->
696
752
  <div class="header">
697
753
  {_WORDMARK_HTML}
698
754
  <h1>{html.escape(title)}</h1>
699
- <div class="meta">
700
- <span>model: {html.escape(model)}</span>
701
- <span>session: {html.escape(session_id[:16])}...</span>
702
- <span>claude code: {html.escape(version)}</span>
703
- <span>total cost: ${total_cost:.4f}</span>
704
- </div>
705
- </div>
755
+ {_meta_badges_html(badges)}</div>
706
756
  {_join_with_divider(turn_blocks)}
707
757
  </body>
708
758
  </html>"""
@@ -732,6 +732,66 @@ def test_render_jsonl_file_claude_and_codex_sessions(tmp_path):
732
732
  assert "looking now" in codex_html
733
733
 
734
734
 
735
+ def test_viewer_header_reads_real_session_metadata_and_hides_unknown_badges(
736
+ tmp_path,
737
+ ):
738
+ """Guards the viewer-header fix from the collector-side audit (follow-up
739
+ to PR #1021's approve flow): real ``~/.claude`` session JSONL carries no
740
+ ``type: system`` event, so the header rendered ``model: ?``,
741
+ ``session: ?...``, ``claude code: ?``, and ``total cost: $0.0000`` right
742
+ at the approve moment. The header must derive model from the first
743
+ assistant event's ``message.model``, session/version from the per-event
744
+ ``sessionId``/``version`` fields, and hide any badge — including the cost
745
+ badge — whose value the file does not contain."""
746
+ from benchflow.trajectories.viewer import render_jsonl_file
747
+
748
+ session = tmp_path / "real-session.jsonl"
749
+ session.write_text(
750
+ json.dumps(
751
+ {
752
+ "type": "user",
753
+ "sessionId": "f684cfbe-1051-4d94-92ad-f8b558dd98cd",
754
+ "version": "2.1.233",
755
+ "cwd": "/private/tmp/bio-dogfood",
756
+ "message": {"role": "user", "content": "run the analysis"},
757
+ }
758
+ )
759
+ + "\n"
760
+ + json.dumps(
761
+ {
762
+ "type": "assistant",
763
+ "sessionId": "f684cfbe-1051-4d94-92ad-f8b558dd98cd",
764
+ "version": "2.1.233",
765
+ "message": {
766
+ "role": "assistant",
767
+ "model": "claude-opus-5",
768
+ "content": [{"type": "text", "text": "on it"}],
769
+ },
770
+ }
771
+ )
772
+ + "\n"
773
+ )
774
+ html_out = render_jsonl_file(session)
775
+ assert "model: claude-opus-5" in html_out
776
+ assert "session: f684cfbe-1051-4d..." in html_out
777
+ assert "claude code: 2.1.233" in html_out
778
+ assert ": ?" not in html_out # no unknown badge ever renders a "?"
779
+ assert "total cost" not in html_out # no cost data → no $0.0000 badge
780
+
781
+ # A session with no metadata at all: only the filename-stem session badge
782
+ # remains; nothing renders as "?" or as a fictional zero cost.
783
+ bare = tmp_path / "bare.jsonl"
784
+ bare.write_text(
785
+ json.dumps({"type": "user", "message": {"content": "review me"}}) + "\n"
786
+ )
787
+ bare_html = render_jsonl_file(bare)
788
+ assert "session: bare" in bare_html
789
+ assert "model:" not in bare_html
790
+ assert "claude code:" not in bare_html
791
+ assert "total cost" not in bare_html
792
+ assert ": ?" not in bare_html
793
+
794
+
735
795
  def test_serve_jsonl_does_not_write_sidecar(tmp_path, monkeypatch):
736
796
  """Guards skill-first traj review: viewing ~/.claude sessions must not write HTML beside them."""
737
797
  from benchflow.trajectories.viewer import serve