benchflow 0.6.7.dev1843__tar.gz → 0.6.7.dev1845__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 (705) hide show
  1. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/PKG-INFO +1 -1
  2. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/pyproject.toml +1 -1
  3. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/_utils/live_activity.py +7 -4
  4. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/cli/_live_progress.py +19 -9
  5. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/contracts/planes.py +16 -0
  6. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/providers/litellm_runtime.py +56 -1
  7. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/providers/runtime.py +9 -2
  8. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/rollout/__init__.py +60 -2
  9. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_cli_live_progress.py +98 -1
  10. benchflow-0.6.7.dev1845/tests/test_live_llm_trajectory.py +437 -0
  11. benchflow-0.6.7.dev1843/tests/test_live_llm_trajectory.py +0 -238
  12. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/.gitignore +0 -0
  13. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/CHANGELOG.md +0 -0
  14. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/LICENSE +0 -0
  15. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/README.md +0 -0
  16. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/__init__.py +0 -0
  17. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/_dotenv.py +0 -0
  18. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/_paths.py +0 -0
  19. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/_run.py +0 -0
  20. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/_types.py +0 -0
  21. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/_utils/__init__.py +0 -0
  22. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/_utils/benchmark_repos.py +0 -0
  23. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/_utils/build_context_stage.py +0 -0
  24. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/_utils/config.py +0 -0
  25. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/_utils/config_override.py +0 -0
  26. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/_utils/content_address.py +0 -0
  27. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/_utils/dataset_registry.py +0 -0
  28. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/_utils/env_registry.py +0 -0
  29. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/_utils/evaluation_results.py +0 -0
  30. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/_utils/hf_datasets.py +0 -0
  31. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/_utils/json_safe.py +0 -0
  32. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/_utils/learner_memory.py +0 -0
  33. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/_utils/result_metadata.py +0 -0
  34. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/_utils/reward_events.py +0 -0
  35. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/_utils/scoring.py +0 -0
  36. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/_utils/source_provenance.py +0 -0
  37. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/_utils/task_authoring/__init__.py +0 -0
  38. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/_utils/task_authoring/_evidence_paths.py +0 -0
  39. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/_utils/task_authoring/acceptance_evidence.py +0 -0
  40. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/_utils/task_authoring/scaffolding.py +0 -0
  41. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/_utils/task_authoring/structural_checks.py +0 -0
  42. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/_utils/text.py +0 -0
  43. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/_utils/yaml_loader.py +0 -0
  44. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/acp/__init__.py +0 -0
  45. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/acp/client.py +0 -0
  46. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/acp/container_transport.py +0 -0
  47. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/acp/runtime.py +0 -0
  48. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/acp/selection.py +0 -0
  49. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/acp/session.py +0 -0
  50. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/acp/transport.py +0 -0
  51. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/acp/types.py +0 -0
  52. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/adapters/__init__.py +0 -0
  53. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/adapters/_toolathlon.py +0 -0
  54. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/adapters/_toolathlon_container.py +0 -0
  55. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/adapters/_toolathlon_fake_mail.py +0 -0
  56. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/adapters/_toolathlon_poste_users.tsv +0 -0
  57. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/adapters/_toolathlon_services.py +0 -0
  58. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/adapters/harbor.py +0 -0
  59. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/adapters/inbound.py +0 -0
  60. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/adapters/inspect_ai.py +0 -0
  61. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/adapters/ors.py +0 -0
  62. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/adapters/resources/__init__.py +0 -0
  63. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/adapters/resources/mcp_atlas_bridge.py +0 -0
  64. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/adapters/resources/mcp_atlas_judge.py +0 -0
  65. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/adapters/source.py +0 -0
  66. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/agent_router.py +0 -0
  67. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/agent_router_guide.py +0 -0
  68. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/agent_router_parity.py +0 -0
  69. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/agent_router_scaffold.py +0 -0
  70. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/agents/__init__.py +0 -0
  71. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/agents/codex_config.py +0 -0
  72. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/agents/credentials.py +0 -0
  73. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/agents/deepagents_acp_shim.py +0 -0
  74. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/agents/env.py +0 -0
  75. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/agents/errors.py +0 -0
  76. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/agents/harvey_lab_acp_shim.py +0 -0
  77. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/agents/install.py +0 -0
  78. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/agents/manifest.py +0 -0
  79. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/agents/openclaw_acp_shim.py +0 -0
  80. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/agents/pi_acp_launcher.py +0 -0
  81. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/agents/protocol.py +0 -0
  82. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/agents/providers.py +0 -0
  83. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/agents/registry.py +0 -0
  84. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/agents/remote_manifests.py +0 -0
  85. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/branch.py +0 -0
  86. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/cli/__init__.py +0 -0
  87. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/cli/_failure_evidence.py +0 -0
  88. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/cli/_hosted_env.py +0 -0
  89. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/cli/_options.py +0 -0
  90. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/cli/_shared.py +0 -0
  91. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/cli/adopt.py +0 -0
  92. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/cli/agent.py +0 -0
  93. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/cli/continue_cmd.py +0 -0
  94. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/cli/environment.py +0 -0
  95. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/cli/eval_artifacts.py +0 -0
  96. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/cli/eval_lift.py +0 -0
  97. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/cli/hub.py +0 -0
  98. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/cli/main.py +0 -0
  99. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/cli/monitor.py +0 -0
  100. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/cli/review.py +0 -0
  101. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/cli/sandbox.py +0 -0
  102. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/cli/skills.py +0 -0
  103. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/cli/tasks.py +0 -0
  104. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/cli/trace_import.py +0 -0
  105. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/cli/train.py +0 -0
  106. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/continue_run/__init__.py +0 -0
  107. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/continue_run/batch.py +0 -0
  108. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/continue_run/orchestrator.py +0 -0
  109. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/continue_run/replay_proxy.py +0 -0
  110. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/continue_run/run_folder.py +0 -0
  111. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/continue_run/sandbox_proxy.py +0 -0
  112. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/contracts/__init__.py +0 -0
  113. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/contracts/user.py +0 -0
  114. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/demo_task/environment/Dockerfile +0 -0
  115. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/demo_task/instruction.md +0 -0
  116. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/demo_task/task.md +0 -0
  117. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/demo_task/task.toml +0 -0
  118. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/demo_task/tests/test.sh +0 -0
  119. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/diagnostics.py +0 -0
  120. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/environment/__init__.py +0 -0
  121. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/environment/_registry/env0@outage.toml +0 -0
  122. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/environment/_registry/env0@prod.toml +0 -0
  123. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/environment/manifest.py +0 -0
  124. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/environment/manifest_env.py +0 -0
  125. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/environment/protocol.py +0 -0
  126. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/environment/readiness.py +0 -0
  127. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/eval_artifacts.py +0 -0
  128. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/eval_lift.py +0 -0
  129. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/eval_plan.py +0 -0
  130. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/eval_sharding.py +0 -0
  131. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/eval_worker.py +0 -0
  132. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/evaluation.py +0 -0
  133. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/experimental/__init__.py +0 -0
  134. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/experimental/mcp/__init__.py +0 -0
  135. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/experimental/mcp/hooks.py +0 -0
  136. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/experimental/mcp/reviewer_server.py +0 -0
  137. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/hosted_env.py +0 -0
  138. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/hub/__init__.py +0 -0
  139. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/hub/harbor_registry.py +0 -0
  140. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/integrations/__init__.py +0 -0
  141. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/integrations/trl/__init__.py +0 -0
  142. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/integrations/trl/spec.py +0 -0
  143. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/learner_skills.py +0 -0
  144. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/learner_store.py +0 -0
  145. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/loop_strategies.py +0 -0
  146. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/loop_sweep.py +0 -0
  147. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/metrics.py +0 -0
  148. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/models.py +0 -0
  149. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/monitor.py +0 -0
  150. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/providers/__init__.py +0 -0
  151. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/providers/litellm_bedrock_patch.py +0 -0
  152. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/providers/litellm_bedrock_preflight.py +0 -0
  153. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/providers/litellm_config.py +0 -0
  154. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/providers/litellm_logging.py +0 -0
  155. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/publish/__init__.py +0 -0
  156. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/publish/huggingface.py +0 -0
  157. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/py.typed +0 -0
  158. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/review/__init__.py +0 -0
  159. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/review/config.py +0 -0
  160. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/review/default-rubric.json +0 -0
  161. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/review/prompts.py +0 -0
  162. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/review/runner.py +0 -0
  163. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/review/wrapper.py +0 -0
  164. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/rewards/README.md +0 -0
  165. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/rewards/__init__.py +0 -0
  166. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/rewards/builtins.py +0 -0
  167. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/rewards/events.py +0 -0
  168. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/rewards/file_readers.py +0 -0
  169. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/rewards/llm.py +0 -0
  170. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/rewards/memory_scorer.py +0 -0
  171. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/rewards/node.py +0 -0
  172. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/rewards/protocol.py +0 -0
  173. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/rewards/rubric.py +0 -0
  174. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/rewards/rubric_config.py +0 -0
  175. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/rewards/validation.py +0 -0
  176. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/rollout/_config.py +0 -0
  177. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/rollout/_deadline.py +0 -0
  178. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/rollout/_results.py +0 -0
  179. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/rollout/_setup.py +0 -0
  180. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/rollout/_skills.py +0 -0
  181. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/rollout/_usage.py +0 -0
  182. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/rollout/_user_loop.py +0 -0
  183. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/rollout/session_factory_runtime.py +0 -0
  184. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/rollout/task_runtime.py +0 -0
  185. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/rollout_branch.py +0 -0
  186. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/rollout_planes.py +0 -0
  187. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/runtime.py +0 -0
  188. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/sandbox/__init__.py +0 -0
  189. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/sandbox/_base.py +0 -0
  190. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/sandbox/_cache_reclaim.py +0 -0
  191. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/sandbox/_compose.py +0 -0
  192. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/sandbox/_compose_files/docker-compose-base.yaml +0 -0
  193. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/sandbox/_compose_files/docker-compose-build.yaml +0 -0
  194. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/sandbox/_compose_files/docker-compose-no-network.yaml +0 -0
  195. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/sandbox/_compose_files/docker-compose-prebuilt.yaml +0 -0
  196. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/sandbox/_sdk_ops.py +0 -0
  197. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/sandbox/agentcore.py +0 -0
  198. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/sandbox/agentcore_builder.py +0 -0
  199. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/sandbox/agentcore_image.py +0 -0
  200. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/sandbox/agentcore_provisioning.py +0 -0
  201. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/sandbox/agentcore_reaper.py +0 -0
  202. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/sandbox/agentcore_sealed.py +0 -0
  203. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/sandbox/apple_container.py +0 -0
  204. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/sandbox/daytona.py +0 -0
  205. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/sandbox/daytona_dind.py +0 -0
  206. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/sandbox/daytona_pty.py +0 -0
  207. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/sandbox/daytona_reaper.py +0 -0
  208. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/sandbox/daytona_strategies.py +0 -0
  209. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/sandbox/docker.py +0 -0
  210. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/sandbox/lockdown.py +0 -0
  211. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/sandbox/metadata.py +0 -0
  212. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/sandbox/modal_impl.py +0 -0
  213. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/sandbox/process/__init__.py +0 -0
  214. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/sandbox/process/_base.py +0 -0
  215. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/sandbox/process/agentcore.py +0 -0
  216. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/sandbox/process/apple.py +0 -0
  217. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/sandbox/process/daytona.py +0 -0
  218. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/sandbox/process/docker.py +0 -0
  219. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/sandbox/protocol.py +0 -0
  220. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/sandbox/providers.py +0 -0
  221. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/sandbox/services.py +0 -0
  222. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/sandbox/setup.py +0 -0
  223. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/sandbox/snapshot.py +0 -0
  224. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/sandbox/user.py +0 -0
  225. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/scenes.py +0 -0
  226. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/sdk.py +0 -0
  227. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/self_gen.py +0 -0
  228. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/skill_eval/__init__.py +0 -0
  229. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/skill_eval/_core.py +0 -0
  230. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/skill_eval/gepa_export.py +0 -0
  231. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/skill_eval/schema.py +0 -0
  232. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/skill_policy.py +0 -0
  233. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/skills.py +0 -0
  234. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/task/__init__.py +0 -0
  235. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/task/_document_evidence.py +0 -0
  236. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/task/_document_normalize.py +0 -0
  237. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/task/_document_parse.py +0 -0
  238. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/task/_document_profiles.py +0 -0
  239. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/task/acceptance_live.py +0 -0
  240. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/task/acceptance_live_model.py +0 -0
  241. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/task/acceptance_live_report.py +0 -0
  242. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/task/acceptance_live_validation.py +0 -0
  243. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/task/config.py +0 -0
  244. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/task/discovery.py +0 -0
  245. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/task/document.py +0 -0
  246. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/task/env.py +0 -0
  247. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/task/export.py +0 -0
  248. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/task/imports.py +0 -0
  249. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/task/output_format.py +0 -0
  250. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/task/package.py +0 -0
  251. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/task/paths.py +0 -0
  252. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/task/prompts.py +0 -0
  253. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/task/runtime_capabilities.py +0 -0
  254. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/task/runtime_view.py +0 -0
  255. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/task/task.py +0 -0
  256. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/task/verifier.py +0 -0
  257. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/task/verifier_core.py +0 -0
  258. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/task/verifier_document.py +0 -0
  259. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/task/verifier_errors.py +0 -0
  260. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/task/verifier_judge_inputs.py +0 -0
  261. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/task/verifier_ors_episode.py +0 -0
  262. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/task/verifier_reward_kit.py +0 -0
  263. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/task/verifier_scan.py +0 -0
  264. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/task/verifier_script_strategy.py +0 -0
  265. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/templates/__init__.py +0 -0
  266. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/templates/judge.py.tmpl +0 -0
  267. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/templates/test.sh.tmpl +0 -0
  268. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/traces/__init__.py +0 -0
  269. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/traces/huggingface.py +0 -0
  270. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/traces/local.py +0 -0
  271. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/traces/models.py +0 -0
  272. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/traces/parsers.py +0 -0
  273. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/traces/task_gen.py +0 -0
  274. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/training/__init__.py +0 -0
  275. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/training/backends/__init__.py +0 -0
  276. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/training/backends/prime_rl.py +0 -0
  277. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/training/run_manifest.py +0 -0
  278. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/trajectories/__init__.py +0 -0
  279. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/trajectories/_capture.py +0 -0
  280. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/trajectories/_export_common.py +0 -0
  281. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/trajectories/_llm_capture.py +0 -0
  282. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/trajectories/call_purpose.py +0 -0
  283. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/trajectories/export.py +0 -0
  284. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/trajectories/export_adp.py +0 -0
  285. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/trajectories/export_atif.py +0 -0
  286. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/trajectories/export_prime_sft.py +0 -0
  287. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/trajectories/export_trl_sft.py +0 -0
  288. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/trajectories/metrics.py +0 -0
  289. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/trajectories/results.py +0 -0
  290. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/trajectories/tree.py +0 -0
  291. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/trajectories/trl_sft_tokenization.py +0 -0
  292. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/trajectories/types.py +0 -0
  293. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/trajectories/viewer.py +0 -0
  294. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/src/benchflow/usage_tracking.py +0 -0
  295. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/__init__.py +0 -0
  296. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/acceptance_live_harness.py +0 -0
  297. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/agents/__init__.py +0 -0
  298. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/agents/test_manifest_dirscan.py +0 -0
  299. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/agents/test_manifest_loader.py +0 -0
  300. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/agents/test_manifest_parity.py +0 -0
  301. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/agents/test_manifest_wiring.py +0 -0
  302. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/agents/test_namespace_shorthand.py +0 -0
  303. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/agents/test_plugin_entry_points.py +0 -0
  304. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/agents/test_protocol.py +0 -0
  305. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/agents/test_remote_manifest_autoload.py +0 -0
  306. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/conformance/README.md +0 -0
  307. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/conformance/acp_smoke/environment/Dockerfile +0 -0
  308. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/conformance/acp_smoke/environment/docker-compose.yaml +0 -0
  309. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/conformance/acp_smoke/environment/skills/conformance-writer/SKILL.md +0 -0
  310. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/conformance/acp_smoke/instruction.md +0 -0
  311. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/conformance/acp_smoke/solution/solve.sh +0 -0
  312. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/conformance/acp_smoke/task.md +0 -0
  313. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/conformance/acp_smoke/task.toml +0 -0
  314. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/conformance/acp_smoke/tests/test.sh +0 -0
  315. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/conformance/conformance-results.json +0 -0
  316. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/conformance/proof_multi_agent.py +0 -0
  317. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/conformance/proof_snapshot.py +0 -0
  318. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/conformance/run_conformance.py +0 -0
  319. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/conformance/self_gen_smoke_skills/skill-creator/SKILL.md +0 -0
  320. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/conftest.py +0 -0
  321. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/continue_run/__init__.py +0 -0
  322. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/continue_run/_helpers.py +0 -0
  323. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/continue_run/test_batch.py +0 -0
  324. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/continue_run/test_orchestrator.py +0 -0
  325. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/continue_run/test_replay_proxy.py +0 -0
  326. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/continue_run/test_run_folder.py +0 -0
  327. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/environment/__init__.py +0 -0
  328. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/environment/test_chibench_manifest.py +0 -0
  329. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/environment/test_clawsbench_manifest.py +0 -0
  330. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/environment/test_manifest.py +0 -0
  331. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/environment/test_manifest_env.py +0 -0
  332. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/environment/test_protocol.py +0 -0
  333. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/environment/test_readiness.py +0 -0
  334. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/examples/hello-world-task/environment/Dockerfile +0 -0
  335. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/examples/hello-world-task/instruction.md +0 -0
  336. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/examples/hello-world-task/solution/solve.sh +0 -0
  337. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/examples/hello-world-task/task.md +0 -0
  338. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/examples/hello-world-task/task.toml +0 -0
  339. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/examples/hello-world-task/tests/test.sh +0 -0
  340. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/examples/test_claude.sh +0 -0
  341. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/examples/test_codex.sh +0 -0
  342. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/examples/test_codex_custom_provider.sh +0 -0
  343. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/examples/test_gemini.sh +0 -0
  344. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/examples/test_openclaw.sh +0 -0
  345. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/examples/traces/minimal-claude.jsonl +0 -0
  346. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/examples/traces/minimal-opentraces.jsonl +0 -0
  347. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/digest/README.md +0 -0
  348. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/digest/alpha-task/environment/Dockerfile +0 -0
  349. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/digest/alpha-task/instruction.md +0 -0
  350. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/digest/alpha-task/task.toml +0 -0
  351. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/digest/alpha-task/tests/test.sh +0 -0
  352. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/digest/beta-task/data/empty.bin +0 -0
  353. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/digest/beta-task/data/unicode.txt +0 -0
  354. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/digest/beta-task/instruction.md +0 -0
  355. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/digest/beta-task/task.toml +0 -0
  356. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/digest/not-a-task/notes.txt +0 -0
  357. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/mock_acp_agent.py +0 -0
  358. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/mock_acp_agent_interleaved.py +0 -0
  359. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/mock_acp_agent_multi_turn.py +0 -0
  360. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/mock_openai_responses_server.py +0 -0
  361. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/Dockerfile +0 -0
  362. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/data/michigan_stations.txt +0 -0
  363. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/flood-detection/SKILL.md +0 -0
  364. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/nws-flood-thresholds/SKILL.md +0 -0
  365. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/usgs-data-download/SKILL.md +0 -0
  366. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/flood-risk-analysis/instruction.md +0 -0
  367. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/flood-risk-analysis/solution/solve.sh +0 -0
  368. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/flood-risk-analysis/task.toml +0 -0
  369. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/flood-risk-analysis/tests/test.sh +0 -0
  370. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/flood-risk-analysis/tests/test_outputs.py +0 -0
  371. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/Dockerfile +0 -0
  372. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/climate.csv +0 -0
  373. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/hydrology.csv +0 -0
  374. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/land_cover.csv +0 -0
  375. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/water_temperature.csv +0 -0
  376. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/contribution-analysis/SKILL.md +0 -0
  377. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/meteorology-driver-classification/SKILL.md +0 -0
  378. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/pca-decomposition/SKILL.md +0 -0
  379. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/trend-analysis/SKILL.md +0 -0
  380. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/lake-warming-attribution/instruction.md +0 -0
  381. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/lake-warming-attribution/solution/solve.sh +0 -0
  382. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/lake-warming-attribution/task.toml +0 -0
  383. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/lake-warming-attribution/tests/test.sh +0 -0
  384. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/lake-warming-attribution/tests/test_outputs.py +0 -0
  385. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/manifest.json +0 -0
  386. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/Dockerfile +0 -0
  387. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/r2r_simulator.py +0 -0
  388. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/finite-horizon-lqr/SKILL.md +0 -0
  389. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/integral-action-design/SKILL.md +0 -0
  390. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/mpc-horizon-tuning/SKILL.md +0 -0
  391. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/state-space-linearization/SKILL.md +0 -0
  392. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/system_config.json +0 -0
  393. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/r2r-mpc-control/instruction.md +0 -0
  394. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/r2r-mpc-control/solution/solve.sh +0 -0
  395. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/r2r-mpc-control/task.toml +0 -0
  396. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/r2r-mpc-control/tests/test.sh +0 -0
  397. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/r2r-mpc-control/tests/test_outputs.py +0 -0
  398. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/Dockerfile +0 -0
  399. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/generate_training_pcaps.py +0 -0
  400. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/local.rules +0 -0
  401. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/pcap-triage-tshark/SKILL.md +0 -0
  402. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/pcap-triage-tshark/scripts/summarize_http_requests.sh +0 -0
  403. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-offline-evejson/SKILL.md +0 -0
  404. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-offline-evejson/scripts/run_suricata_offline.sh +0 -0
  405. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-rules-basics/SKILL.md +0 -0
  406. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/suricata.yaml +0 -0
  407. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/instruction.md +0 -0
  408. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/solution/solve.sh +0 -0
  409. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/task.toml +0 -0
  410. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/tests/test.sh +0 -0
  411. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/tests/test_outputs.py +0 -0
  412. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/Dockerfile +0 -0
  413. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syz-extract-constants/SKILL.md +0 -0
  414. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syzkaller-build-loop/SKILL.md +0 -0
  415. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syzlang-ioctl-basics/SKILL.md +0 -0
  416. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/instruction.md +0 -0
  417. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/solution/solve.sh +0 -0
  418. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/task.toml +0 -0
  419. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/tests/test.sh +0 -0
  420. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/tests/test_outputs.py +0 -0
  421. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/integration/_consistency.py +0 -0
  422. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/integration/agent_judge.py +0 -0
  423. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/integration/check_adapter_evidence.py +0 -0
  424. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/integration/check_hosted_env_evidence.py +0 -0
  425. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/integration/check_results.py +0 -0
  426. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/integration/check_skillsbench_harbor_parity.py +0 -0
  427. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/integration/check_trace_to_task_evidence.py +0 -0
  428. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/integration/configs/claude-agent-acp.yaml +0 -0
  429. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/integration/configs/codex-acp.yaml +0 -0
  430. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/integration/configs/gemini.yaml +0 -0
  431. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/integration/configs/harvey-lab-harness.yaml +0 -0
  432. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/integration/configs/mimo.yaml +0 -0
  433. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/integration/configs/openclaw.yaml +0 -0
  434. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/integration/configs/opencode.yaml +0 -0
  435. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/integration/configs/openhands.yaml +0 -0
  436. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/integration/configs/pi-acp.yaml +0 -0
  437. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/integration/deepagents_harness.py +0 -0
  438. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/integration/rubric_checks.py +0 -0
  439. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/integration/run.sh +0 -0
  440. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/integration/run_suite.py +0 -0
  441. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/integration/scenarios.py +0 -0
  442. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/integration/suites/release.yaml +0 -0
  443. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_acceptance_evidence.py +0 -0
  444. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_acceptance_live.py +0 -0
  445. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_acceptance_live_execution.py +0 -0
  446. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_acp.py +0 -0
  447. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_acp_capability_advertising.py +0 -0
  448. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_acp_mcp_servers.py +0 -0
  449. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_acp_model_config_dispatch.py +0 -0
  450. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_acp_pinned_protocol_guard.py +0 -0
  451. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_acp_setup_failure_propagation.py +0 -0
  452. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_adapter_scripts.py +0 -0
  453. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_adapters.py +0 -0
  454. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_agent_cli.py +0 -0
  455. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_agent_env_resolution.py +0 -0
  456. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_agent_gemini_defaults.py +0 -0
  457. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_agent_idle_timeout_cli.py +0 -0
  458. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_agent_model_decouple.py +0 -0
  459. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_agent_registry.py +0 -0
  460. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_agent_router.py +0 -0
  461. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_agent_router_cli_e2e.py +0 -0
  462. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_agent_router_scaffold.py +0 -0
  463. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_agent_setup.py +0 -0
  464. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_agent_spec.py +0 -0
  465. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_agentcore_builder.py +0 -0
  466. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_agentcore_parallel.py +0 -0
  467. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_agentcore_reaper.py +0 -0
  468. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_agentcore_sandbox.py +0 -0
  469. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_agentcore_transport.py +0 -0
  470. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_api_error_capture.py +0 -0
  471. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_apple_container_sandbox.py +0 -0
  472. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_bare_model_provider.py +0 -0
  473. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_base_install_imports.py +0 -0
  474. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_bedrock_thinking.py +0 -0
  475. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_benchflow_experiment_review_validator.py +0 -0
  476. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_benchmark_repos_resolve_repo_path.py +0 -0
  477. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_branch.py +0 -0
  478. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_build_context_stage.py +0 -0
  479. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_build_review_pack.py +0 -0
  480. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_capture_trajectory.py +0 -0
  481. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_check_skillsbench_harbor_parity.py +0 -0
  482. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_clawsbench_slice.py +0 -0
  483. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_cli_adopt_aliases.py +0 -0
  484. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_cli_arg_validation.py +0 -0
  485. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_cli_daytona.py +0 -0
  486. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_cli_docs_drift.py +0 -0
  487. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_cli_edge_case_hardening.py +0 -0
  488. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_cli_hub_env.py +0 -0
  489. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_cli_misc.py +0 -0
  490. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_codex_review.py +0 -0
  491. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_codex_self_write_auth.py +0 -0
  492. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_config_override.py +0 -0
  493. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_config_redaction.py +0 -0
  494. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_connect_as_env.py +0 -0
  495. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_console_error_truncation.py +0 -0
  496. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_console_progress.py +0 -0
  497. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_continuallearningbench_adapter.py +0 -0
  498. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_dataset_registry.py +0 -0
  499. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_daytona_command_polling.py +0 -0
  500. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_daytona_dind_compose_up.py +0 -0
  501. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_daytona_download.py +0 -0
  502. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_daytona_litellm_runtime.py +0 -0
  503. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_daytona_poll_deadline.py +0 -0
  504. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_daytona_reap.py +0 -0
  505. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_deepagents_agent.py +0 -0
  506. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_docker_prune_scoping.py +0 -0
  507. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_docker_uploads.py +0 -0
  508. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_docs_examples.py +0 -0
  509. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_eng50_capabilities.py +0 -0
  510. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_env_registry.py +0 -0
  511. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_env_setup.py +0 -0
  512. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_environment_manifest_controls.py +0 -0
  513. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_eval_artifact_cli.py +0 -0
  514. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_eval_filters_applied.py +0 -0
  515. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_eval_lift.py +0 -0
  516. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_eval_sharding.py +0 -0
  517. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_eval_single_task_summary.py +0 -0
  518. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_eval_source_provenance.py +0 -0
  519. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_eval_worker_retry.py +0 -0
  520. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_eval_zero_task_guard.py +0 -0
  521. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_evaluation_environment_manifest.py +0 -0
  522. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_exclude_tasks.py +0 -0
  523. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_filter_credentialed_cells.py +0 -0
  524. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_harvey_lab_shim.py +0 -0
  525. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_hilbench_adapter.py +0 -0
  526. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_hosted_env.py +0 -0
  527. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_hosted_env_rollout_contract.py +0 -0
  528. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_hub_harbor_registry.py +0 -0
  529. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_inbound_adapter_manifest.py +0 -0
  530. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_inbound_adapters.py +0 -0
  531. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_integration_agent_judge.py +0 -0
  532. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_integration_check_results.py +0 -0
  533. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_integration_consistency.py +0 -0
  534. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_integration_matrix.py +0 -0
  535. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_integration_provider_selection.py +0 -0
  536. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_integration_run_suite.py +0 -0
  537. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_integration_suite.py +0 -0
  538. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_internet_policy.py +0 -0
  539. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_job.py +0 -0
  540. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_job_sequential_shared.py +0 -0
  541. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_job_sequential_shared_resume.py +0 -0
  542. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_judge_robustness.py +0 -0
  543. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_judge_symlink_ingestion.py +0 -0
  544. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_learner_skills.py +0 -0
  545. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_learner_skills_traversal.py +0 -0
  546. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_learner_store.py +0 -0
  547. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_learner_store_persistence.py +0 -0
  548. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_litellm_config.py +0 -0
  549. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_litellm_hardening.py +0 -0
  550. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_litellm_logging.py +0 -0
  551. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_litellm_model_via_env_generic.py +0 -0
  552. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_litellm_reasoning_passthrough.py +0 -0
  553. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_litellm_runtime.py +0 -0
  554. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_litellm_smoke.py +0 -0
  555. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_llm_judge.py +0 -0
  556. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_llm_judge_event_tags.py +0 -0
  557. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_llm_judge_verifier.py +0 -0
  558. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_loop_strategies.py +0 -0
  559. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_loop_summary.py +0 -0
  560. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_loop_sweep.py +0 -0
  561. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_memory_scorer.py +0 -0
  562. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_metrics.py +0 -0
  563. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_mle_bench_adapter.py +0 -0
  564. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_mock_openai_responses_server.py +0 -0
  565. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_monitor_scaffold.py +0 -0
  566. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_native_acp_usage.py +0 -0
  567. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_no_cross_provider_fallback.py +0 -0
  568. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_notification_order_real.py +0 -0
  569. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_opencode_family_proxy_tracking.py +0 -0
  570. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_oracle.py +0 -0
  571. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_oracle_chokepoint.py +0 -0
  572. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_paths_safe.py +0 -0
  573. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_paths_symlink_helpers.py +0 -0
  574. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_pi_acp_launcher.py +0 -0
  575. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_pi_acp_proxy_routing.py +0 -0
  576. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_process.py +0 -0
  577. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_project_skills_layout.py +0 -0
  578. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_provider_auth_detection.py +0 -0
  579. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_providers.py +0 -0
  580. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_reexport.py +0 -0
  581. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_registry_invariants.py +0 -0
  582. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_release_hardening_r5.py +0 -0
  583. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_release_version.py +0 -0
  584. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_release_workflow_wiring.py +0 -0
  585. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_resolve_env_helpers.py +0 -0
  586. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_review_boundaries.py +0 -0
  587. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_review_rubric.py +0 -0
  588. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_review_runtime.py +0 -0
  589. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_reward_lenient.py +0 -0
  590. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_reward_node.py +0 -0
  591. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_reward_range.py +0 -0
  592. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_reward_unified_contract.py +0 -0
  593. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_rewards.py +0 -0
  594. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_rewards_jsonl.py +0 -0
  595. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_rollout_architecture.py +0 -0
  596. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_rollout_branch.py +0 -0
  597. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_rollout_config_path_coercion.py +0 -0
  598. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_rollout_environment.py +0 -0
  599. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_rollout_hard_deadline.py +0 -0
  600. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_rollout_import_no_side_effects.py +0 -0
  601. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_rollout_on_ask_user_wiring.py +0 -0
  602. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_rollout_planes_contract.py +0 -0
  603. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_rollout_probe_sandbox_health.py +0 -0
  604. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_rollout_session_factory_dispatch.py +0 -0
  605. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_rollout_setup_commands.py +0 -0
  606. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_rollout_upload.py +0 -0
  607. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_rubric_checks.py +0 -0
  608. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_rubric_config.py +0 -0
  609. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_runtime.py +0 -0
  610. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_runtime_capabilities.py +0 -0
  611. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_runtime_config_wired.py +0 -0
  612. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_runtime_live_sandbox.py +0 -0
  613. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_sandbox.py +0 -0
  614. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_sandbox_exec_secret_handling.py +0 -0
  615. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_sandbox_hardening.py +0 -0
  616. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_sandbox_isolation_copy_traversal.py +0 -0
  617. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_sandbox_live_process.py +0 -0
  618. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_sandbox_multi_service.py +0 -0
  619. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_sandbox_prebuilt_validation.py +0 -0
  620. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_sandbox_protocol.py +0 -0
  621. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_sandbox_provider_registry_drift.py +0 -0
  622. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_sandbox_setup.py +0 -0
  623. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_sandbox_snapshot_contract.py +0 -0
  624. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_sandbox_upload_symlink.py +0 -0
  625. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_sandbox_verifier_workspace.py +0 -0
  626. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_scene.py +0 -0
  627. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_scene_outbox_trial.py +0 -0
  628. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_scene_parallel_group.py +0 -0
  629. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_scene_result_aggregation.py +0 -0
  630. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_scoring.py +0 -0
  631. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_sdk_internals.py +0 -0
  632. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_sdk_lockdown.py +0 -0
  633. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_sdk_run_alias.py +0 -0
  634. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_sealed_channel_container.py +0 -0
  635. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_self_gen_cli.py +0 -0
  636. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_self_gen_export_error_channel.py +0 -0
  637. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_self_gen_export_failures.py +0 -0
  638. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_self_gen_orchestration.py +0 -0
  639. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_session_factory_runtime.py +0 -0
  640. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_session_request_permission_dispatch.py +0 -0
  641. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_skill_eval.py +0 -0
  642. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_skill_eval_dryrun.py +0 -0
  643. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_skill_eval_integration.py +0 -0
  644. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_skill_eval_sweep.py +0 -0
  645. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_skill_eval_traversal.py +0 -0
  646. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_skill_invocation_artifacts.py +0 -0
  647. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_skill_policy.py +0 -0
  648. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_skills.py +0 -0
  649. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_skills_dir_agent_home_link.py +0 -0
  650. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_skillsbench_conversion_conformance.py +0 -0
  651. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_skillsbench_harbor_run_suite.py +0 -0
  652. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_smoke.py +0 -0
  653. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_smoke_wiring.py +0 -0
  654. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_source_adapters.py +0 -0
  655. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_subscription_auth.py +0 -0
  656. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_task_check_eval_consistency.py +0 -0
  657. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_task_config.py +0 -0
  658. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_task_digest.py +0 -0
  659. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_task_document.py +0 -0
  660. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_task_download.py +0 -0
  661. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_task_export.py +0 -0
  662. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_task_output_format.py +0 -0
  663. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_task_package.py +0 -0
  664. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_task_runtime_primitive.py +0 -0
  665. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_tasks.py +0 -0
  666. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_token_usage_normalization.py +0 -0
  667. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_trace_import_cli.py +0 -0
  668. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_trace_task_gen_traversal.py +0 -0
  669. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_trace_to_task_evidence.py +0 -0
  670. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_traces_huggingface.py +0 -0
  671. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_traces_parsers.py +0 -0
  672. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_traces_task_gen.py +0 -0
  673. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_train_cli.py +0 -0
  674. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_train_mode_artifact_emission.py +0 -0
  675. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_train_trl_cli.py +0 -0
  676. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_trajectory_integration.py +0 -0
  677. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_trajectory_streaming.py +0 -0
  678. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_trial_agent_timeout_verify.py +0 -0
  679. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_trial_install_agent_timeout.py +0 -0
  680. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_trial_litellm_runtime.py +0 -0
  681. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_trl_integration.py +0 -0
  682. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_usage_litellm.py +0 -0
  683. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_usage_required.py +0 -0
  684. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_usage_tracking.py +0 -0
  685. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_user.py +0 -0
  686. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_v06_guard_ports.py +0 -0
  687. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_verifier_document.py +0 -0
  688. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_verifier_multi_container.py +0 -0
  689. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_verifier_output.py +0 -0
  690. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_verifier_output_freshness.py +0 -0
  691. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_verifier_strategies.py +0 -0
  692. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_verifier_wedge_retry.py +0 -0
  693. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_verify.py +0 -0
  694. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_workflow_action_pinning.py +0 -0
  695. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/test_yaml_config.py +0 -0
  696. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/trajectories/__init__.py +0 -0
  697. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/trajectories/test_export.py +0 -0
  698. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/trajectories/test_export_adp.py +0 -0
  699. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/trajectories/test_export_atif.py +0 -0
  700. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/trajectories/test_export_common.py +0 -0
  701. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/trajectories/test_export_nan_handling.py +0 -0
  702. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/trajectories/test_export_prime_sft.py +0 -0
  703. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/trajectories/test_redaction.py +0 -0
  704. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/trajectories/test_step_granularity.py +0 -0
  705. {benchflow-0.6.7.dev1843 → benchflow-0.6.7.dev1845}/tests/trajectories/test_tree.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: benchflow
3
- Version: 0.6.7.dev1843
3
+ Version: 0.6.7.dev1845
4
4
  Summary: Multi-turn agent benchmarking with ACP — run any agent, any model, any provider.
5
5
  Project-URL: Homepage, https://github.com/benchflow-ai/benchflow
6
6
  Project-URL: Repository, https://github.com/benchflow-ai/benchflow
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "benchflow"
3
- version = "0.6.7.dev1843"
3
+ version = "0.6.7.dev1845"
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"
@@ -18,10 +18,13 @@ from typing import Any, NamedTuple
18
18
  class SessionCounters(NamedTuple):
19
19
  """The live ACP session counters the console heartbeat logs.
20
20
 
21
- ``total_tokens`` is None until the session has a usage snapshot (i.e.
22
- after a completed prompt). ``distinct_tools`` counts distinct tool
23
- display titles seen this session; None means unknown, which renderers
24
- treat like varied (keep the ``last:`` cell).
21
+ ``total_tokens`` is None until a live usage signal exists: the producer
22
+ (``Rollout.activity_snapshot``) fills it with max(ACP prompt-completion
23
+ snapshot, LiteLLM gateway live-capture total), so it becomes non-None as
24
+ soon as the gateway has mirrored a usage-bearing record — mid-prompt —
25
+ even when no ACP prompt has completed yet. ``distinct_tools`` counts
26
+ distinct tool display titles seen this session; None means unknown, which
27
+ renderers treat like varied (keep the ``last:`` cell).
25
28
  """
26
29
 
27
30
  tool_calls: int
@@ -162,9 +162,12 @@ def _activity_cell(snap: live_activity.ActivitySnapshot | None) -> str:
162
162
  which the Live display otherwise mutes. Until the agent session exists
163
163
  (and after it is closed for the verifier) the cell shows the rollout's
164
164
  lifecycle phase as a label instead, and a registry miss (None) shows the
165
- fallback label, so the row is never blank. Tokens appear only once the
166
- session has a usage snapshot (i.e. after a completed prompt); once they
167
- do, a single-tool agent's cell is ``38 calls · 412.0k tok`` (no ``last:``).
165
+ fallback label, so the row is never blank. Tokens appear as soon as
166
+ either live signal exists the gateway's live callback capture (per
167
+ completed LLM request, i.e. mid-prompt) or the ACP usage snapshot (per
168
+ completed prompt); ``Rollout.activity_snapshot`` reconciles the two as
169
+ max(). Once tokens are present, a single-tool agent's cell is
170
+ ``38 calls · 412.0k tok`` (no ``last:``).
168
171
  """
169
172
  if snap is None:
170
173
  return _PHASE_FALLBACK
@@ -379,12 +382,19 @@ class LiveEvalProgress:
379
382
  parts.append(tbl)
380
383
 
381
384
  # Footer: pass-rate (excl errors) + token/cost economics. Tokens sum
382
- # the completed tasks' trusted telemetry PLUS the running sessions'
383
- # live ACP usage (stepping forward as each prompt completes), so a
384
- # 51-minute agent phase shows its spend while it runs, not only at
385
- # scoring. The total is NOT monotonic across a task's completion
386
- # boundary: scoring swaps the ACP self-report for the gateway
387
- # measurement (which can be lower), and a task completing with
385
+ # the completed tasks' trusted telemetry PLUS the running rollouts'
386
+ # live usage per running task, max(ACP prompt-completion snapshot,
387
+ # gateway live-capture total): the gateway side steps forward per
388
+ # completed LLM *request*, so a single-prompt agent phase shows its
389
+ # spend while the prompt runs, not only at scoring (the ACP side
390
+ # alone stays empty until the prompt completes). Reconciliation
391
+ # (documented at Rollout.activity_snapshot): max() keeps the running
392
+ # figure monotonic whichever signal leads, and degrades to the
393
+ # ACP-only value when the gateway capture is unavailable. The total
394
+ # is still NOT monotonic across a task's completion boundary: scoring
395
+ # swaps the live figure for the trusted gateway import (which can be
396
+ # lower than either live signal — untracked discards, cache
397
+ # accounting, ACP over-report), and a task completing with
388
398
  # untrusted/absent telemetry drops its live contribution entirely —
389
399
  # a sole-task footer can collapse back to "— tokens". Clamping would
390
400
  # falsify the trusted sum, so the dip is intended. Show "—" (not 0 /
@@ -13,6 +13,22 @@ from typing import Any, Protocol, runtime_checkable
13
13
  from benchflow.environment.manifest import EnvironmentManifest
14
14
 
15
15
 
16
+ class LiveUsageGateway(Protocol):
17
+ """A provider gateway process that reports live cumulative token usage.
18
+
19
+ The eval dashboard's mid-prompt token signal reads this accessor through
20
+ the rollout kernel (``Rollout.activity_snapshot`` →
21
+ ``_gateway_live_tokens``), which cannot import the concrete provider
22
+ plane — so the NAME is agreed here, at the contract boundary.
23
+ ``LiteLLMProcess`` asserts static conformance in
24
+ ``benchflow.providers.litellm_runtime``; renaming the accessor on either
25
+ side fails the type checker there instead of silently blanking the
26
+ dashboard signal.
27
+ """
28
+
29
+ def live_usage_tokens(self) -> int | None: ...
30
+
31
+
16
32
  @runtime_checkable
17
33
  class RolloutPlanes(Protocol):
18
34
  """Concrete-plane operations the rollout kernel needs."""
@@ -19,7 +19,7 @@ import tempfile
19
19
  from collections.abc import Awaitable, Callable, Mapping
20
20
  from dataclasses import dataclass
21
21
  from pathlib import Path
22
- from typing import Any, NoReturn, cast
22
+ from typing import TYPE_CHECKING, Any, NoReturn, cast
23
23
  from uuid import uuid4
24
24
 
25
25
  import httpx
@@ -54,6 +54,9 @@ from benchflow.trajectories._llm_capture import LiveLLMTrajectoryWriter
54
54
  from benchflow.trajectories.types import Trajectory
55
55
  from benchflow.usage_tracking import UsageTrackingConfig, usage_unavailable
56
56
 
57
+ if TYPE_CHECKING:
58
+ from benchflow.contracts.planes import LiveUsageGateway
59
+
57
60
  logger = logging.getLogger(__name__)
58
61
 
59
62
  LITELLM_VERSION_SPEC = "litellm[proxy]==1.89.0"
@@ -99,6 +102,10 @@ class LiteLLMProcess:
99
102
  trajectory: Trajectory | None
100
103
  session_id: str
101
104
  agent_name: str
105
+ # Live-capture token counter (class-level defaults so reads are plain
106
+ # attribute access even before start_live_capture ever runs).
107
+ _live_usage_total_tokens: int = 0
108
+ _live_usage_seen: bool = False
102
109
 
103
110
  @property
104
111
  def base_url(self) -> str:
@@ -126,8 +133,30 @@ class LiteLLMProcess:
126
133
  )
127
134
  self._live_callback_offset = 0
128
135
  self._live_callback_remainder = b""
136
+ # Clear ``seen`` BEFORE the total so a racing render-thread read can
137
+ # only observe None (fresh capture) — never a transient "0 tokens".
138
+ self._live_usage_seen = False
139
+ self._live_usage_total_tokens = 0
129
140
  self._live_capture_task = asyncio.create_task(self._live_capture_loop())
130
141
 
142
+ def live_usage_tokens(self) -> int | None:
143
+ """Cumulative provider tokens the live callback capture has mirrored.
144
+
145
+ Read-only, O(1) — safe to call from the dashboard's render thread while
146
+ the capture loop appends on the event loop (two monotonic attribute
147
+ reads; a torn read is at worst one record stale). None until a
148
+ usage-bearing gateway record has been parsed, so callers can tell "no
149
+ signal yet" from a genuine zero. The value updates per completed LLM
150
+ *request* — mid-prompt — which is exactly the granularity the ACP
151
+ per-completed-prompt snapshots lack (a single-prompt rollout otherwise
152
+ shows no tokens until scoring). It may lag the gateway log by the
153
+ capture cadence/backlog and is display-only: trusted usage still comes
154
+ from the full log import at ``stop()``.
155
+ """
156
+ if not self._live_usage_seen:
157
+ return None
158
+ return self._live_usage_total_tokens
159
+
131
160
  async def _read_callback_chunk(self, offset: int, limit: int) -> bytes:
132
161
  raise NotImplementedError
133
162
 
@@ -157,6 +186,19 @@ class LiteLLMProcess:
157
186
  )
158
187
  if parsed.exchanges:
159
188
  trajectory.exchanges.extend(parsed.exchanges)
189
+ # Live token counter for the eval dashboard: accumulate the
190
+ # same canonical per-exchange accounting scoring sums at
191
+ # stop() (Trajectory.total_provider_tokens over the same
192
+ # parser's output), so the live figure converges to the
193
+ # trusted total as the capture catches up. Failure records
194
+ # carry no usage and leave the counter untouched.
195
+ if parsed.has_provider_usage:
196
+ # Total before ``seen``: a racing reader can never
197
+ # observe seen=True with a not-yet-updated total.
198
+ self._live_usage_total_tokens += int(
199
+ parsed.total_provider_tokens
200
+ )
201
+ self._live_usage_seen = True
160
202
  changed = True
161
203
  if len(chunk) < _LIVE_CAPTURE_CHUNK_BYTES:
162
204
  break
@@ -189,6 +231,19 @@ class LiteLLMProcess:
189
231
  writer.reconcile(self.trajectory)
190
232
 
191
233
 
234
+ def _live_usage_gateway_conformance(process: LiteLLMProcess) -> LiveUsageGateway:
235
+ """Static assertion: LiteLLMProcess satisfies the contract the rollout
236
+ kernel's dashboard read binds to (``contracts.planes.LiveUsageGateway``).
237
+
238
+ The kernel cannot import this module (#515 architecture invariant), so
239
+ its ``server.live_usage_tokens()`` call is dynamically typed there; this
240
+ return-type check is what makes a rename of the accessor — on either the
241
+ protocol or the process side — fail ``ty`` instead of silently blanking
242
+ the live token signal. Never called at runtime.
243
+ """
244
+ return process
245
+
246
+
192
247
  class HostLiteLLMProcess(LiteLLMProcess):
193
248
  def __init__(
194
249
  self,
@@ -9,10 +9,13 @@ from __future__ import annotations
9
9
 
10
10
  from dataclasses import dataclass
11
11
  from pathlib import Path
12
- from typing import Any
12
+ from typing import TYPE_CHECKING, Any
13
13
 
14
14
  from benchflow.usage_tracking import UsageTrackingConfig
15
15
 
16
+ if TYPE_CHECKING:
17
+ from benchflow.providers.litellm_runtime import LiteLLMProcess
18
+
16
19
 
17
20
  @dataclass
18
21
  class ProviderRuntime:
@@ -21,7 +24,11 @@ class ProviderRuntime:
21
24
  kind: str
22
25
  agent_base_url: str
23
26
  backend_model: str | None = None
24
- server: Any | None = None
27
+ # Typed (not Any) so cross-module reads of the server's accessors —
28
+ # e.g. the dashboard's live_usage_tokens dig in rollout — are bound by
29
+ # the type checker: a rename on LiteLLMProcess breaks ty, not silently
30
+ # blanks a signal behind a getattr default.
31
+ server: LiteLLMProcess | None = None
25
32
  config_key: str | None = None
26
33
  master_key: str | None = None
27
34
 
@@ -581,6 +581,43 @@ async def _run_environment_healthcheck(env: Any, task: Any) -> None:
581
581
  await asyncio.sleep(delay)
582
582
 
583
583
 
584
+ def _gateway_live_tokens(runtime: Any) -> int | None:
585
+ """Cumulative provider tokens from the LiteLLM gateway's live capture.
586
+
587
+ Piggybacks on the llm_trajectory.jsonl mirror the proxy runtime already
588
+ runs for every rollout (``LiteLLMProcess.start_live_capture``, wired in
589
+ ``connect()`` and cancelled by the proxy's ``stop()`` in cleanup) — this
590
+ read generates no additional sandbox exec traffic, at any concurrency.
591
+
592
+ ``runtime`` stays ``Any`` because the rollout kernel must not import the
593
+ concrete provider plane (``benchflow.providers.runtime``; the #515
594
+ architecture test forbids even a TYPE_CHECKING import, and the planes
595
+ contract is deliberately Any-typed). Rename-safety for the
596
+ ``server.live_usage_tokens`` accessor lives where typing IS allowed: the
597
+ name is agreed in ``contracts.planes.LiveUsageGateway``, LiteLLMProcess
598
+ statically asserts conformance in the providers plane
599
+ (``_live_usage_gateway_conformance`` — a rename on either side fails
600
+ ty), and ``test_gateway_live_tokens_reach_rollout_activity_snapshot``
601
+ pins THIS call site to the real classes end-to-end (a drift here fails
602
+ pytest). The attribute access is direct (no getattr default) so the
603
+ failure mode under a fake without the accessor is the caught exception
604
+ below, not a permanent silent None.
605
+ Best-effort by the dashboard contract: any absence (no runtime, no
606
+ server, the accessor raising, a non-int value) degrades to None —
607
+ #963's ACP-only behavior — never to a render error.
608
+ """
609
+ if runtime is None:
610
+ return None
611
+ try:
612
+ server = runtime.server
613
+ if server is None:
614
+ return None
615
+ tokens = server.live_usage_tokens()
616
+ except Exception:
617
+ return None
618
+ return tokens if isinstance(tokens, int) else None
619
+
620
+
584
621
  class Rollout:
585
622
  """Decomposed trial lifecycle with independently-callable phases."""
586
623
 
@@ -765,17 +802,38 @@ class Rollout:
765
802
  ("creating sandbox…", "verifying…"), so a 90s sandbox create is not
766
803
  indistinguishable from a hang.
767
804
 
805
+ ``total_tokens`` reconciles two cumulative live signals as
806
+ ``max(acp_snapshot, gateway_live)``: the ACP session's self-reported
807
+ usage (updates only when a *prompt* completes — a single-prompt
808
+ rollout stays None for the whole agent phase) and the LiteLLM
809
+ gateway's live callback capture (updates per completed LLM *request*,
810
+ mid-prompt). max() because both inputs are non-decreasing counters, so
811
+ the cell/footer never step down mid-run whichever signal leads —
812
+ gateway-live can exceed the ACP self-report (requests the agent
813
+ discarded, cache accounting) and vice versa (capture lag behind large
814
+ log records) — and a dead gateway signal (None) degrades to exactly
815
+ the ACP-only behavior. The winner is display-only: at completion the
816
+ trusted scoring total replaces it (see the footer contract in
817
+ cli/_live_progress.py for the sanctioned non-monotonic boundary).
818
+
768
819
  Rollout owns the client/session dig so a rename breaks here — in
769
820
  typed, tested code — instead of silently blanking the dashboard cell
770
821
  (see benchflow._utils.live_activity). Session-factory agents have no
771
- ACP client and always report counter-less snapshots.
822
+ ACP client and always report counter-less snapshots (their
823
+ gateway-live tokens are not surfaced — the counters seam is the only
824
+ token carrier).
772
825
  """
773
826
  session = self._acp_client.session if self._acp_client else None
774
827
  if session is None:
775
828
  return ActivitySnapshot(self._phase, None)
776
829
  calls, last_title = session.progress_snapshot()
777
830
  usage = session.latest_usage_totals()
778
- tokens = usage.get("total_tokens") if usage else None
831
+ acp_tokens = usage.get("total_tokens") if usage else None
832
+ gateway_tokens = _gateway_live_tokens(self._usage_runtime)
833
+ if acp_tokens is None and gateway_tokens is None:
834
+ tokens = None
835
+ else:
836
+ tokens = max(acp_tokens or 0, gateway_tokens or 0)
779
837
  return ActivitySnapshot(
780
838
  self._phase,
781
839
  SessionCounters(calls, last_title, tokens, session.distinct_tool_titles),
@@ -265,7 +265,9 @@ def test_rollout_activity_snapshot_reads_acp_session():
265
265
  from benchflow.rollout import Rollout
266
266
 
267
267
  connected = SimpleNamespace(
268
- _acp_client=SimpleNamespace(session=_FakeSession()), _phase="connected"
268
+ _acp_client=SimpleNamespace(session=_FakeSession()),
269
+ _phase="connected",
270
+ _usage_runtime=None,
269
271
  )
270
272
  assert Rollout.activity_snapshot(connected) == ActivitySnapshot(
271
273
  "connected", SessionCounters(38, "file_editor", 1500, 4)
@@ -277,6 +279,101 @@ def test_rollout_activity_snapshot_reads_acp_session():
277
279
  ) == ActivitySnapshot("setup", None)
278
280
 
279
281
 
282
+ class _NoUsageSession(_FakeSession):
283
+ """An ACP session mid-first-prompt: counters exist, usage doesn't yet."""
284
+
285
+ def latest_usage_totals(self):
286
+ return None
287
+
288
+
289
+ def _gateway_server(tokens):
290
+ if isinstance(tokens, Exception):
291
+
292
+ def _boom():
293
+ raise tokens
294
+
295
+ return SimpleNamespace(live_usage_tokens=_boom)
296
+ return SimpleNamespace(live_usage_tokens=lambda: tokens)
297
+
298
+
299
+ def _rollout_ns(session, gateway):
300
+ return SimpleNamespace(
301
+ _acp_client=SimpleNamespace(session=session),
302
+ _phase="connected",
303
+ _usage_runtime=SimpleNamespace(server=_gateway_server(gateway)),
304
+ )
305
+
306
+
307
+ @pytest.mark.parametrize(
308
+ ("session", "gateway", "expected_tokens"),
309
+ [
310
+ # The round-7 failure case: a single-prompt rollout has NO ACP usage
311
+ # snapshot until the prompt completes — the gateway live capture is
312
+ # the only mid-run signal and must carry the counters.
313
+ (_NoUsageSession(), 412_000, 412_000),
314
+ # Both signals: max() — whichever cumulative counter leads wins, so
315
+ # the footer never steps down mid-run (documented at
316
+ # Rollout.activity_snapshot).
317
+ (_FakeSession(), 900, 1500),
318
+ (_FakeSession(), 2_000, 2_000),
319
+ # Gateway signal dead (no usage-bearing record yet / reader raising /
320
+ # garbage): degrade to exactly #963's ACP-only behavior.
321
+ (_FakeSession(), None, 1500),
322
+ (_FakeSession(), RuntimeError("teardown race"), 1500),
323
+ (_FakeSession(), "not-an-int", 1500),
324
+ (_NoUsageSession(), None, None),
325
+ (_NoUsageSession(), RuntimeError("teardown race"), None),
326
+ ],
327
+ )
328
+ def test_rollout_activity_snapshot_reconciles_acp_and_gateway_usage(
329
+ session, gateway, expected_tokens
330
+ ):
331
+ from benchflow.rollout import Rollout
332
+
333
+ snap = Rollout.activity_snapshot(_rollout_ns(session, gateway))
334
+ assert snap.counters is not None
335
+ assert snap.counters.total_tokens == expected_tokens
336
+
337
+
338
+ def test_rollout_activity_snapshot_without_usage_runtime_matches_963():
339
+ # A rollout whose proxy never started (oracle, native-subscription auth)
340
+ # has no _usage_runtime server — the ACP-only path must be untouched.
341
+ from benchflow.rollout import Rollout
342
+
343
+ ns = SimpleNamespace(
344
+ _acp_client=SimpleNamespace(session=_NoUsageSession()),
345
+ _phase="connected",
346
+ _usage_runtime=None,
347
+ )
348
+ snap = Rollout.activity_snapshot(ns)
349
+ assert snap.counters is not None
350
+ assert snap.counters.total_tokens is None
351
+
352
+
353
+ def test_footer_and_cell_render_gateway_live_tokens_mid_prompt():
354
+ # End-to-end through __rich__ with the REAL Rollout.activity_snapshot dig:
355
+ # a single-prompt run mid-prompt (no ACP usage) whose gateway capture has
356
+ # tokens must light BOTH the footer sum and the activity cell — the
357
+ # e2e acceptance criterion, unit-shaped.
358
+ from benchflow.rollout import Rollout
359
+
360
+ session = _NoUsageSession()
361
+ session.distinct_tool_titles = 1 # single-tool agent (prime-agent shape)
362
+ ns = _rollout_ns(session, 412_000)
363
+ rollout = SimpleNamespace(activity_snapshot=lambda: Rollout.activity_snapshot(ns))
364
+ live_activity.register("dialogue-parser", rollout)
365
+ try:
366
+ d = _dash()
367
+ d.on_plan(total=1, done=0, remaining=1)
368
+ d.on_task_start("dialogue-parser")
369
+ text = _rendered(d)
370
+ finally:
371
+ live_activity.unregister("dialogue-parser")
372
+ assert "412.0k tokens" in text # footer live sum
373
+ assert "38 calls · 412.0k tok" in text # constant-tool activity cell
374
+ assert "— tokens" not in text
375
+
376
+
280
377
  def test_dashboard_renders_activity_for_registered_running_task():
281
378
  # End-to-end through __rich__: a registered running task's activity must
282
379
  # appear in the rendered panel — reverting the table wiring fails this.