benchflow 0.6.7.dev1840__tar.gz → 0.6.7.dev1841__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 (704) hide show
  1. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/PKG-INFO +1 -1
  2. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/pyproject.toml +1 -1
  3. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/_utils/live_activity.py +4 -1
  4. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/acp/session.py +55 -9
  5. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/cli/_live_progress.py +55 -15
  6. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/rollout/__init__.py +6 -2
  7. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_cli_live_progress.py +166 -81
  8. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_console_progress.py +50 -0
  9. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/.gitignore +0 -0
  10. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/CHANGELOG.md +0 -0
  11. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/LICENSE +0 -0
  12. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/README.md +0 -0
  13. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/__init__.py +0 -0
  14. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/_dotenv.py +0 -0
  15. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/_paths.py +0 -0
  16. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/_run.py +0 -0
  17. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/_types.py +0 -0
  18. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/_utils/__init__.py +0 -0
  19. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/_utils/benchmark_repos.py +0 -0
  20. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/_utils/build_context_stage.py +0 -0
  21. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/_utils/config.py +0 -0
  22. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/_utils/config_override.py +0 -0
  23. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/_utils/content_address.py +0 -0
  24. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/_utils/dataset_registry.py +0 -0
  25. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/_utils/env_registry.py +0 -0
  26. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/_utils/evaluation_results.py +0 -0
  27. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/_utils/hf_datasets.py +0 -0
  28. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/_utils/json_safe.py +0 -0
  29. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/_utils/learner_memory.py +0 -0
  30. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/_utils/result_metadata.py +0 -0
  31. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/_utils/reward_events.py +0 -0
  32. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/_utils/scoring.py +0 -0
  33. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/_utils/source_provenance.py +0 -0
  34. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/_utils/task_authoring/__init__.py +0 -0
  35. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/_utils/task_authoring/_evidence_paths.py +0 -0
  36. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/_utils/task_authoring/acceptance_evidence.py +0 -0
  37. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/_utils/task_authoring/scaffolding.py +0 -0
  38. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/_utils/task_authoring/structural_checks.py +0 -0
  39. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/_utils/text.py +0 -0
  40. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/_utils/yaml_loader.py +0 -0
  41. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/acp/__init__.py +0 -0
  42. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/acp/client.py +0 -0
  43. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/acp/container_transport.py +0 -0
  44. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/acp/runtime.py +0 -0
  45. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/acp/selection.py +0 -0
  46. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/acp/transport.py +0 -0
  47. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/acp/types.py +0 -0
  48. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/adapters/__init__.py +0 -0
  49. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/adapters/_toolathlon.py +0 -0
  50. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/adapters/_toolathlon_container.py +0 -0
  51. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/adapters/_toolathlon_fake_mail.py +0 -0
  52. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/adapters/_toolathlon_poste_users.tsv +0 -0
  53. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/adapters/_toolathlon_services.py +0 -0
  54. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/adapters/harbor.py +0 -0
  55. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/adapters/inbound.py +0 -0
  56. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/adapters/inspect_ai.py +0 -0
  57. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/adapters/ors.py +0 -0
  58. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/adapters/resources/__init__.py +0 -0
  59. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/adapters/resources/mcp_atlas_bridge.py +0 -0
  60. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/adapters/resources/mcp_atlas_judge.py +0 -0
  61. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/adapters/source.py +0 -0
  62. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/agent_router.py +0 -0
  63. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/agent_router_guide.py +0 -0
  64. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/agent_router_parity.py +0 -0
  65. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/agent_router_scaffold.py +0 -0
  66. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/agents/__init__.py +0 -0
  67. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/agents/codex_config.py +0 -0
  68. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/agents/credentials.py +0 -0
  69. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/agents/deepagents_acp_shim.py +0 -0
  70. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/agents/env.py +0 -0
  71. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/agents/errors.py +0 -0
  72. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/agents/harvey_lab_acp_shim.py +0 -0
  73. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/agents/install.py +0 -0
  74. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/agents/manifest.py +0 -0
  75. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/agents/openclaw_acp_shim.py +0 -0
  76. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/agents/pi_acp_launcher.py +0 -0
  77. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/agents/protocol.py +0 -0
  78. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/agents/providers.py +0 -0
  79. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/agents/registry.py +0 -0
  80. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/agents/remote_manifests.py +0 -0
  81. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/branch.py +0 -0
  82. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/cli/__init__.py +0 -0
  83. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/cli/_failure_evidence.py +0 -0
  84. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/cli/_hosted_env.py +0 -0
  85. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/cli/_options.py +0 -0
  86. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/cli/_shared.py +0 -0
  87. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/cli/adopt.py +0 -0
  88. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/cli/agent.py +0 -0
  89. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/cli/continue_cmd.py +0 -0
  90. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/cli/environment.py +0 -0
  91. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/cli/eval_artifacts.py +0 -0
  92. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/cli/eval_lift.py +0 -0
  93. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/cli/hub.py +0 -0
  94. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/cli/main.py +0 -0
  95. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/cli/monitor.py +0 -0
  96. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/cli/review.py +0 -0
  97. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/cli/sandbox.py +0 -0
  98. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/cli/skills.py +0 -0
  99. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/cli/tasks.py +0 -0
  100. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/cli/trace_import.py +0 -0
  101. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/cli/train.py +0 -0
  102. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/continue_run/__init__.py +0 -0
  103. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/continue_run/batch.py +0 -0
  104. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/continue_run/orchestrator.py +0 -0
  105. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/continue_run/replay_proxy.py +0 -0
  106. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/continue_run/run_folder.py +0 -0
  107. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/continue_run/sandbox_proxy.py +0 -0
  108. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/contracts/__init__.py +0 -0
  109. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/contracts/planes.py +0 -0
  110. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/contracts/user.py +0 -0
  111. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/demo_task/environment/Dockerfile +0 -0
  112. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/demo_task/instruction.md +0 -0
  113. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/demo_task/task.md +0 -0
  114. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/demo_task/task.toml +0 -0
  115. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/demo_task/tests/test.sh +0 -0
  116. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/diagnostics.py +0 -0
  117. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/environment/__init__.py +0 -0
  118. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/environment/_registry/env0@outage.toml +0 -0
  119. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/environment/_registry/env0@prod.toml +0 -0
  120. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/environment/manifest.py +0 -0
  121. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/environment/manifest_env.py +0 -0
  122. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/environment/protocol.py +0 -0
  123. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/environment/readiness.py +0 -0
  124. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/eval_artifacts.py +0 -0
  125. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/eval_lift.py +0 -0
  126. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/eval_plan.py +0 -0
  127. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/eval_sharding.py +0 -0
  128. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/eval_worker.py +0 -0
  129. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/evaluation.py +0 -0
  130. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/experimental/__init__.py +0 -0
  131. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/experimental/mcp/__init__.py +0 -0
  132. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/experimental/mcp/hooks.py +0 -0
  133. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/experimental/mcp/reviewer_server.py +0 -0
  134. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/hosted_env.py +0 -0
  135. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/hub/__init__.py +0 -0
  136. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/hub/harbor_registry.py +0 -0
  137. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/integrations/__init__.py +0 -0
  138. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/integrations/trl/__init__.py +0 -0
  139. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/integrations/trl/spec.py +0 -0
  140. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/learner_skills.py +0 -0
  141. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/learner_store.py +0 -0
  142. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/loop_strategies.py +0 -0
  143. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/loop_sweep.py +0 -0
  144. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/metrics.py +0 -0
  145. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/models.py +0 -0
  146. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/monitor.py +0 -0
  147. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/providers/__init__.py +0 -0
  148. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/providers/litellm_bedrock_patch.py +0 -0
  149. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/providers/litellm_bedrock_preflight.py +0 -0
  150. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/providers/litellm_config.py +0 -0
  151. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/providers/litellm_logging.py +0 -0
  152. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/providers/litellm_runtime.py +0 -0
  153. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/providers/runtime.py +0 -0
  154. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/publish/__init__.py +0 -0
  155. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/publish/huggingface.py +0 -0
  156. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/py.typed +0 -0
  157. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/review/__init__.py +0 -0
  158. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/review/config.py +0 -0
  159. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/review/default-rubric.json +0 -0
  160. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/review/prompts.py +0 -0
  161. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/review/runner.py +0 -0
  162. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/review/wrapper.py +0 -0
  163. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/rewards/README.md +0 -0
  164. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/rewards/__init__.py +0 -0
  165. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/rewards/builtins.py +0 -0
  166. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/rewards/events.py +0 -0
  167. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/rewards/file_readers.py +0 -0
  168. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/rewards/llm.py +0 -0
  169. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/rewards/memory_scorer.py +0 -0
  170. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/rewards/node.py +0 -0
  171. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/rewards/protocol.py +0 -0
  172. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/rewards/rubric.py +0 -0
  173. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/rewards/rubric_config.py +0 -0
  174. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/rewards/validation.py +0 -0
  175. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/rollout/_config.py +0 -0
  176. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/rollout/_deadline.py +0 -0
  177. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/rollout/_results.py +0 -0
  178. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/rollout/_setup.py +0 -0
  179. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/rollout/_skills.py +0 -0
  180. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/rollout/_usage.py +0 -0
  181. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/rollout/_user_loop.py +0 -0
  182. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/rollout/session_factory_runtime.py +0 -0
  183. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/rollout/task_runtime.py +0 -0
  184. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/rollout_branch.py +0 -0
  185. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/rollout_planes.py +0 -0
  186. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/runtime.py +0 -0
  187. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/sandbox/__init__.py +0 -0
  188. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/sandbox/_base.py +0 -0
  189. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/sandbox/_cache_reclaim.py +0 -0
  190. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/sandbox/_compose.py +0 -0
  191. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/sandbox/_compose_files/docker-compose-base.yaml +0 -0
  192. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/sandbox/_compose_files/docker-compose-build.yaml +0 -0
  193. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/sandbox/_compose_files/docker-compose-no-network.yaml +0 -0
  194. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/sandbox/_compose_files/docker-compose-prebuilt.yaml +0 -0
  195. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/sandbox/_sdk_ops.py +0 -0
  196. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/sandbox/agentcore.py +0 -0
  197. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/sandbox/agentcore_builder.py +0 -0
  198. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/sandbox/agentcore_image.py +0 -0
  199. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/sandbox/agentcore_provisioning.py +0 -0
  200. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/sandbox/agentcore_reaper.py +0 -0
  201. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/sandbox/agentcore_sealed.py +0 -0
  202. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/sandbox/apple_container.py +0 -0
  203. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/sandbox/daytona.py +0 -0
  204. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/sandbox/daytona_dind.py +0 -0
  205. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/sandbox/daytona_pty.py +0 -0
  206. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/sandbox/daytona_reaper.py +0 -0
  207. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/sandbox/daytona_strategies.py +0 -0
  208. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/sandbox/docker.py +0 -0
  209. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/sandbox/lockdown.py +0 -0
  210. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/sandbox/metadata.py +0 -0
  211. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/sandbox/modal_impl.py +0 -0
  212. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/sandbox/process/__init__.py +0 -0
  213. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/sandbox/process/_base.py +0 -0
  214. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/sandbox/process/agentcore.py +0 -0
  215. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/sandbox/process/apple.py +0 -0
  216. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/sandbox/process/daytona.py +0 -0
  217. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/sandbox/process/docker.py +0 -0
  218. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/sandbox/protocol.py +0 -0
  219. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/sandbox/providers.py +0 -0
  220. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/sandbox/services.py +0 -0
  221. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/sandbox/setup.py +0 -0
  222. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/sandbox/snapshot.py +0 -0
  223. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/sandbox/user.py +0 -0
  224. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/scenes.py +0 -0
  225. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/sdk.py +0 -0
  226. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/self_gen.py +0 -0
  227. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/skill_eval/__init__.py +0 -0
  228. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/skill_eval/_core.py +0 -0
  229. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/skill_eval/gepa_export.py +0 -0
  230. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/skill_eval/schema.py +0 -0
  231. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/skill_policy.py +0 -0
  232. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/skills.py +0 -0
  233. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/task/__init__.py +0 -0
  234. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/task/_document_evidence.py +0 -0
  235. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/task/_document_normalize.py +0 -0
  236. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/task/_document_parse.py +0 -0
  237. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/task/_document_profiles.py +0 -0
  238. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/task/acceptance_live.py +0 -0
  239. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/task/acceptance_live_model.py +0 -0
  240. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/task/acceptance_live_report.py +0 -0
  241. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/task/acceptance_live_validation.py +0 -0
  242. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/task/config.py +0 -0
  243. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/task/discovery.py +0 -0
  244. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/task/document.py +0 -0
  245. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/task/env.py +0 -0
  246. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/task/export.py +0 -0
  247. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/task/imports.py +0 -0
  248. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/task/output_format.py +0 -0
  249. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/task/package.py +0 -0
  250. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/task/paths.py +0 -0
  251. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/task/prompts.py +0 -0
  252. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/task/runtime_capabilities.py +0 -0
  253. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/task/runtime_view.py +0 -0
  254. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/task/task.py +0 -0
  255. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/task/verifier.py +0 -0
  256. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/task/verifier_core.py +0 -0
  257. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/task/verifier_document.py +0 -0
  258. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/task/verifier_errors.py +0 -0
  259. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/task/verifier_judge_inputs.py +0 -0
  260. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/task/verifier_ors_episode.py +0 -0
  261. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/task/verifier_reward_kit.py +0 -0
  262. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/task/verifier_scan.py +0 -0
  263. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/task/verifier_script_strategy.py +0 -0
  264. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/templates/__init__.py +0 -0
  265. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/templates/judge.py.tmpl +0 -0
  266. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/templates/test.sh.tmpl +0 -0
  267. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/traces/__init__.py +0 -0
  268. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/traces/huggingface.py +0 -0
  269. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/traces/local.py +0 -0
  270. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/traces/models.py +0 -0
  271. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/traces/parsers.py +0 -0
  272. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/traces/task_gen.py +0 -0
  273. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/training/__init__.py +0 -0
  274. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/training/backends/__init__.py +0 -0
  275. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/training/backends/prime_rl.py +0 -0
  276. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/training/run_manifest.py +0 -0
  277. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/trajectories/__init__.py +0 -0
  278. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/trajectories/_capture.py +0 -0
  279. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/trajectories/_export_common.py +0 -0
  280. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/trajectories/_llm_capture.py +0 -0
  281. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/trajectories/call_purpose.py +0 -0
  282. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/trajectories/export.py +0 -0
  283. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/trajectories/export_adp.py +0 -0
  284. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/trajectories/export_atif.py +0 -0
  285. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/trajectories/export_prime_sft.py +0 -0
  286. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/trajectories/export_trl_sft.py +0 -0
  287. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/trajectories/metrics.py +0 -0
  288. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/trajectories/results.py +0 -0
  289. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/trajectories/tree.py +0 -0
  290. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/trajectories/trl_sft_tokenization.py +0 -0
  291. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/trajectories/types.py +0 -0
  292. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/trajectories/viewer.py +0 -0
  293. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/src/benchflow/usage_tracking.py +0 -0
  294. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/__init__.py +0 -0
  295. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/acceptance_live_harness.py +0 -0
  296. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/agents/__init__.py +0 -0
  297. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/agents/test_manifest_dirscan.py +0 -0
  298. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/agents/test_manifest_loader.py +0 -0
  299. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/agents/test_manifest_parity.py +0 -0
  300. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/agents/test_manifest_wiring.py +0 -0
  301. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/agents/test_namespace_shorthand.py +0 -0
  302. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/agents/test_plugin_entry_points.py +0 -0
  303. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/agents/test_protocol.py +0 -0
  304. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/agents/test_remote_manifest_autoload.py +0 -0
  305. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/conformance/README.md +0 -0
  306. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/conformance/acp_smoke/environment/Dockerfile +0 -0
  307. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/conformance/acp_smoke/environment/docker-compose.yaml +0 -0
  308. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/conformance/acp_smoke/environment/skills/conformance-writer/SKILL.md +0 -0
  309. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/conformance/acp_smoke/instruction.md +0 -0
  310. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/conformance/acp_smoke/solution/solve.sh +0 -0
  311. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/conformance/acp_smoke/task.md +0 -0
  312. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/conformance/acp_smoke/task.toml +0 -0
  313. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/conformance/acp_smoke/tests/test.sh +0 -0
  314. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/conformance/conformance-results.json +0 -0
  315. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/conformance/proof_multi_agent.py +0 -0
  316. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/conformance/proof_snapshot.py +0 -0
  317. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/conformance/run_conformance.py +0 -0
  318. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/conformance/self_gen_smoke_skills/skill-creator/SKILL.md +0 -0
  319. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/conftest.py +0 -0
  320. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/continue_run/__init__.py +0 -0
  321. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/continue_run/_helpers.py +0 -0
  322. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/continue_run/test_batch.py +0 -0
  323. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/continue_run/test_orchestrator.py +0 -0
  324. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/continue_run/test_replay_proxy.py +0 -0
  325. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/continue_run/test_run_folder.py +0 -0
  326. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/environment/__init__.py +0 -0
  327. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/environment/test_chibench_manifest.py +0 -0
  328. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/environment/test_clawsbench_manifest.py +0 -0
  329. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/environment/test_manifest.py +0 -0
  330. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/environment/test_manifest_env.py +0 -0
  331. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/environment/test_protocol.py +0 -0
  332. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/environment/test_readiness.py +0 -0
  333. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/examples/hello-world-task/environment/Dockerfile +0 -0
  334. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/examples/hello-world-task/instruction.md +0 -0
  335. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/examples/hello-world-task/solution/solve.sh +0 -0
  336. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/examples/hello-world-task/task.md +0 -0
  337. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/examples/hello-world-task/task.toml +0 -0
  338. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/examples/hello-world-task/tests/test.sh +0 -0
  339. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/examples/test_claude.sh +0 -0
  340. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/examples/test_codex.sh +0 -0
  341. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/examples/test_codex_custom_provider.sh +0 -0
  342. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/examples/test_gemini.sh +0 -0
  343. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/examples/test_openclaw.sh +0 -0
  344. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/examples/traces/minimal-claude.jsonl +0 -0
  345. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/examples/traces/minimal-opentraces.jsonl +0 -0
  346. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/fixtures/digest/README.md +0 -0
  347. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/fixtures/digest/alpha-task/environment/Dockerfile +0 -0
  348. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/fixtures/digest/alpha-task/instruction.md +0 -0
  349. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/fixtures/digest/alpha-task/task.toml +0 -0
  350. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/fixtures/digest/alpha-task/tests/test.sh +0 -0
  351. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/fixtures/digest/beta-task/data/empty.bin +0 -0
  352. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/fixtures/digest/beta-task/data/unicode.txt +0 -0
  353. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/fixtures/digest/beta-task/instruction.md +0 -0
  354. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/fixtures/digest/beta-task/task.toml +0 -0
  355. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/fixtures/digest/not-a-task/notes.txt +0 -0
  356. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/fixtures/mock_acp_agent.py +0 -0
  357. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/fixtures/mock_acp_agent_interleaved.py +0 -0
  358. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/fixtures/mock_acp_agent_multi_turn.py +0 -0
  359. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/fixtures/mock_openai_responses_server.py +0 -0
  360. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/Dockerfile +0 -0
  361. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/data/michigan_stations.txt +0 -0
  362. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/flood-detection/SKILL.md +0 -0
  363. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/nws-flood-thresholds/SKILL.md +0 -0
  364. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/usgs-data-download/SKILL.md +0 -0
  365. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/flood-risk-analysis/instruction.md +0 -0
  366. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/flood-risk-analysis/solution/solve.sh +0 -0
  367. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/flood-risk-analysis/task.toml +0 -0
  368. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/flood-risk-analysis/tests/test.sh +0 -0
  369. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/flood-risk-analysis/tests/test_outputs.py +0 -0
  370. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/Dockerfile +0 -0
  371. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/climate.csv +0 -0
  372. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/hydrology.csv +0 -0
  373. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/land_cover.csv +0 -0
  374. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/water_temperature.csv +0 -0
  375. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/contribution-analysis/SKILL.md +0 -0
  376. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/meteorology-driver-classification/SKILL.md +0 -0
  377. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/pca-decomposition/SKILL.md +0 -0
  378. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/trend-analysis/SKILL.md +0 -0
  379. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/lake-warming-attribution/instruction.md +0 -0
  380. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/lake-warming-attribution/solution/solve.sh +0 -0
  381. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/lake-warming-attribution/task.toml +0 -0
  382. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/lake-warming-attribution/tests/test.sh +0 -0
  383. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/lake-warming-attribution/tests/test_outputs.py +0 -0
  384. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/manifest.json +0 -0
  385. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/Dockerfile +0 -0
  386. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/r2r_simulator.py +0 -0
  387. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/finite-horizon-lqr/SKILL.md +0 -0
  388. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/integral-action-design/SKILL.md +0 -0
  389. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/mpc-horizon-tuning/SKILL.md +0 -0
  390. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/state-space-linearization/SKILL.md +0 -0
  391. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/system_config.json +0 -0
  392. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/r2r-mpc-control/instruction.md +0 -0
  393. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/r2r-mpc-control/solution/solve.sh +0 -0
  394. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/r2r-mpc-control/task.toml +0 -0
  395. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/r2r-mpc-control/tests/test.sh +0 -0
  396. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/r2r-mpc-control/tests/test_outputs.py +0 -0
  397. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/Dockerfile +0 -0
  398. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/generate_training_pcaps.py +0 -0
  399. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/local.rules +0 -0
  400. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/pcap-triage-tshark/SKILL.md +0 -0
  401. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/pcap-triage-tshark/scripts/summarize_http_requests.sh +0 -0
  402. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-offline-evejson/SKILL.md +0 -0
  403. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-offline-evejson/scripts/run_suricata_offline.sh +0 -0
  404. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-rules-basics/SKILL.md +0 -0
  405. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/suricata.yaml +0 -0
  406. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/instruction.md +0 -0
  407. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/solution/solve.sh +0 -0
  408. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/task.toml +0 -0
  409. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/tests/test.sh +0 -0
  410. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/tests/test_outputs.py +0 -0
  411. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/Dockerfile +0 -0
  412. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syz-extract-constants/SKILL.md +0 -0
  413. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syzkaller-build-loop/SKILL.md +0 -0
  414. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syzlang-ioctl-basics/SKILL.md +0 -0
  415. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/instruction.md +0 -0
  416. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/solution/solve.sh +0 -0
  417. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/task.toml +0 -0
  418. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/tests/test.sh +0 -0
  419. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/tests/test_outputs.py +0 -0
  420. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/integration/_consistency.py +0 -0
  421. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/integration/agent_judge.py +0 -0
  422. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/integration/check_adapter_evidence.py +0 -0
  423. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/integration/check_hosted_env_evidence.py +0 -0
  424. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/integration/check_results.py +0 -0
  425. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/integration/check_skillsbench_harbor_parity.py +0 -0
  426. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/integration/check_trace_to_task_evidence.py +0 -0
  427. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/integration/configs/claude-agent-acp.yaml +0 -0
  428. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/integration/configs/codex-acp.yaml +0 -0
  429. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/integration/configs/gemini.yaml +0 -0
  430. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/integration/configs/harvey-lab-harness.yaml +0 -0
  431. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/integration/configs/mimo.yaml +0 -0
  432. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/integration/configs/openclaw.yaml +0 -0
  433. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/integration/configs/opencode.yaml +0 -0
  434. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/integration/configs/openhands.yaml +0 -0
  435. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/integration/configs/pi-acp.yaml +0 -0
  436. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/integration/deepagents_harness.py +0 -0
  437. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/integration/rubric_checks.py +0 -0
  438. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/integration/run.sh +0 -0
  439. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/integration/run_suite.py +0 -0
  440. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/integration/scenarios.py +0 -0
  441. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/integration/suites/release.yaml +0 -0
  442. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_acceptance_evidence.py +0 -0
  443. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_acceptance_live.py +0 -0
  444. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_acceptance_live_execution.py +0 -0
  445. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_acp.py +0 -0
  446. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_acp_capability_advertising.py +0 -0
  447. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_acp_mcp_servers.py +0 -0
  448. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_acp_model_config_dispatch.py +0 -0
  449. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_acp_pinned_protocol_guard.py +0 -0
  450. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_acp_setup_failure_propagation.py +0 -0
  451. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_adapter_scripts.py +0 -0
  452. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_adapters.py +0 -0
  453. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_agent_cli.py +0 -0
  454. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_agent_env_resolution.py +0 -0
  455. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_agent_gemini_defaults.py +0 -0
  456. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_agent_idle_timeout_cli.py +0 -0
  457. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_agent_model_decouple.py +0 -0
  458. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_agent_registry.py +0 -0
  459. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_agent_router.py +0 -0
  460. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_agent_router_cli_e2e.py +0 -0
  461. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_agent_router_scaffold.py +0 -0
  462. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_agent_setup.py +0 -0
  463. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_agent_spec.py +0 -0
  464. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_agentcore_builder.py +0 -0
  465. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_agentcore_parallel.py +0 -0
  466. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_agentcore_reaper.py +0 -0
  467. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_agentcore_sandbox.py +0 -0
  468. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_agentcore_transport.py +0 -0
  469. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_api_error_capture.py +0 -0
  470. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_apple_container_sandbox.py +0 -0
  471. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_bare_model_provider.py +0 -0
  472. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_base_install_imports.py +0 -0
  473. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_bedrock_thinking.py +0 -0
  474. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_benchflow_experiment_review_validator.py +0 -0
  475. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_benchmark_repos_resolve_repo_path.py +0 -0
  476. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_branch.py +0 -0
  477. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_build_context_stage.py +0 -0
  478. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_build_review_pack.py +0 -0
  479. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_capture_trajectory.py +0 -0
  480. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_check_skillsbench_harbor_parity.py +0 -0
  481. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_clawsbench_slice.py +0 -0
  482. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_cli_adopt_aliases.py +0 -0
  483. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_cli_arg_validation.py +0 -0
  484. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_cli_daytona.py +0 -0
  485. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_cli_docs_drift.py +0 -0
  486. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_cli_edge_case_hardening.py +0 -0
  487. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_cli_hub_env.py +0 -0
  488. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_cli_misc.py +0 -0
  489. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_codex_review.py +0 -0
  490. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_codex_self_write_auth.py +0 -0
  491. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_config_override.py +0 -0
  492. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_config_redaction.py +0 -0
  493. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_connect_as_env.py +0 -0
  494. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_console_error_truncation.py +0 -0
  495. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_continuallearningbench_adapter.py +0 -0
  496. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_dataset_registry.py +0 -0
  497. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_daytona_command_polling.py +0 -0
  498. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_daytona_dind_compose_up.py +0 -0
  499. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_daytona_download.py +0 -0
  500. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_daytona_litellm_runtime.py +0 -0
  501. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_daytona_poll_deadline.py +0 -0
  502. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_daytona_reap.py +0 -0
  503. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_deepagents_agent.py +0 -0
  504. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_docker_prune_scoping.py +0 -0
  505. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_docker_uploads.py +0 -0
  506. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_docs_examples.py +0 -0
  507. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_eng50_capabilities.py +0 -0
  508. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_env_registry.py +0 -0
  509. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_env_setup.py +0 -0
  510. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_environment_manifest_controls.py +0 -0
  511. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_eval_artifact_cli.py +0 -0
  512. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_eval_filters_applied.py +0 -0
  513. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_eval_lift.py +0 -0
  514. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_eval_sharding.py +0 -0
  515. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_eval_single_task_summary.py +0 -0
  516. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_eval_source_provenance.py +0 -0
  517. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_eval_worker_retry.py +0 -0
  518. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_eval_zero_task_guard.py +0 -0
  519. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_evaluation_environment_manifest.py +0 -0
  520. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_exclude_tasks.py +0 -0
  521. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_filter_credentialed_cells.py +0 -0
  522. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_harvey_lab_shim.py +0 -0
  523. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_hilbench_adapter.py +0 -0
  524. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_hosted_env.py +0 -0
  525. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_hosted_env_rollout_contract.py +0 -0
  526. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_hub_harbor_registry.py +0 -0
  527. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_inbound_adapter_manifest.py +0 -0
  528. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_inbound_adapters.py +0 -0
  529. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_integration_agent_judge.py +0 -0
  530. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_integration_check_results.py +0 -0
  531. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_integration_consistency.py +0 -0
  532. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_integration_matrix.py +0 -0
  533. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_integration_provider_selection.py +0 -0
  534. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_integration_run_suite.py +0 -0
  535. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_integration_suite.py +0 -0
  536. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_internet_policy.py +0 -0
  537. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_job.py +0 -0
  538. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_job_sequential_shared.py +0 -0
  539. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_job_sequential_shared_resume.py +0 -0
  540. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_judge_robustness.py +0 -0
  541. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_judge_symlink_ingestion.py +0 -0
  542. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_learner_skills.py +0 -0
  543. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_learner_skills_traversal.py +0 -0
  544. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_learner_store.py +0 -0
  545. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_learner_store_persistence.py +0 -0
  546. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_litellm_config.py +0 -0
  547. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_litellm_hardening.py +0 -0
  548. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_litellm_logging.py +0 -0
  549. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_litellm_model_via_env_generic.py +0 -0
  550. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_litellm_reasoning_passthrough.py +0 -0
  551. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_litellm_runtime.py +0 -0
  552. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_litellm_smoke.py +0 -0
  553. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_live_llm_trajectory.py +0 -0
  554. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_llm_judge.py +0 -0
  555. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_llm_judge_event_tags.py +0 -0
  556. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_llm_judge_verifier.py +0 -0
  557. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_loop_strategies.py +0 -0
  558. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_loop_summary.py +0 -0
  559. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_loop_sweep.py +0 -0
  560. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_memory_scorer.py +0 -0
  561. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_metrics.py +0 -0
  562. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_mle_bench_adapter.py +0 -0
  563. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_mock_openai_responses_server.py +0 -0
  564. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_monitor_scaffold.py +0 -0
  565. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_native_acp_usage.py +0 -0
  566. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_no_cross_provider_fallback.py +0 -0
  567. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_notification_order_real.py +0 -0
  568. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_opencode_family_proxy_tracking.py +0 -0
  569. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_oracle.py +0 -0
  570. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_oracle_chokepoint.py +0 -0
  571. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_paths_safe.py +0 -0
  572. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_paths_symlink_helpers.py +0 -0
  573. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_pi_acp_launcher.py +0 -0
  574. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_pi_acp_proxy_routing.py +0 -0
  575. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_process.py +0 -0
  576. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_project_skills_layout.py +0 -0
  577. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_provider_auth_detection.py +0 -0
  578. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_providers.py +0 -0
  579. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_reexport.py +0 -0
  580. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_registry_invariants.py +0 -0
  581. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_release_hardening_r5.py +0 -0
  582. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_release_version.py +0 -0
  583. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_release_workflow_wiring.py +0 -0
  584. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_resolve_env_helpers.py +0 -0
  585. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_review_boundaries.py +0 -0
  586. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_review_rubric.py +0 -0
  587. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_review_runtime.py +0 -0
  588. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_reward_lenient.py +0 -0
  589. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_reward_node.py +0 -0
  590. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_reward_range.py +0 -0
  591. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_reward_unified_contract.py +0 -0
  592. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_rewards.py +0 -0
  593. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_rewards_jsonl.py +0 -0
  594. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_rollout_architecture.py +0 -0
  595. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_rollout_branch.py +0 -0
  596. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_rollout_config_path_coercion.py +0 -0
  597. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_rollout_environment.py +0 -0
  598. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_rollout_hard_deadline.py +0 -0
  599. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_rollout_import_no_side_effects.py +0 -0
  600. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_rollout_on_ask_user_wiring.py +0 -0
  601. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_rollout_planes_contract.py +0 -0
  602. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_rollout_probe_sandbox_health.py +0 -0
  603. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_rollout_session_factory_dispatch.py +0 -0
  604. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_rollout_setup_commands.py +0 -0
  605. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_rollout_upload.py +0 -0
  606. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_rubric_checks.py +0 -0
  607. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_rubric_config.py +0 -0
  608. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_runtime.py +0 -0
  609. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_runtime_capabilities.py +0 -0
  610. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_runtime_config_wired.py +0 -0
  611. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_runtime_live_sandbox.py +0 -0
  612. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_sandbox.py +0 -0
  613. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_sandbox_exec_secret_handling.py +0 -0
  614. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_sandbox_hardening.py +0 -0
  615. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_sandbox_isolation_copy_traversal.py +0 -0
  616. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_sandbox_live_process.py +0 -0
  617. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_sandbox_multi_service.py +0 -0
  618. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_sandbox_prebuilt_validation.py +0 -0
  619. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_sandbox_protocol.py +0 -0
  620. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_sandbox_provider_registry_drift.py +0 -0
  621. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_sandbox_setup.py +0 -0
  622. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_sandbox_snapshot_contract.py +0 -0
  623. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_sandbox_upload_symlink.py +0 -0
  624. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_sandbox_verifier_workspace.py +0 -0
  625. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_scene.py +0 -0
  626. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_scene_outbox_trial.py +0 -0
  627. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_scene_parallel_group.py +0 -0
  628. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_scene_result_aggregation.py +0 -0
  629. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_scoring.py +0 -0
  630. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_sdk_internals.py +0 -0
  631. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_sdk_lockdown.py +0 -0
  632. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_sdk_run_alias.py +0 -0
  633. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_sealed_channel_container.py +0 -0
  634. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_self_gen_cli.py +0 -0
  635. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_self_gen_export_error_channel.py +0 -0
  636. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_self_gen_export_failures.py +0 -0
  637. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_self_gen_orchestration.py +0 -0
  638. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_session_factory_runtime.py +0 -0
  639. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_session_request_permission_dispatch.py +0 -0
  640. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_skill_eval.py +0 -0
  641. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_skill_eval_dryrun.py +0 -0
  642. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_skill_eval_integration.py +0 -0
  643. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_skill_eval_sweep.py +0 -0
  644. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_skill_eval_traversal.py +0 -0
  645. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_skill_invocation_artifacts.py +0 -0
  646. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_skill_policy.py +0 -0
  647. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_skills.py +0 -0
  648. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_skills_dir_agent_home_link.py +0 -0
  649. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_skillsbench_conversion_conformance.py +0 -0
  650. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_skillsbench_harbor_run_suite.py +0 -0
  651. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_smoke.py +0 -0
  652. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_smoke_wiring.py +0 -0
  653. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_source_adapters.py +0 -0
  654. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_subscription_auth.py +0 -0
  655. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_task_check_eval_consistency.py +0 -0
  656. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_task_config.py +0 -0
  657. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_task_digest.py +0 -0
  658. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_task_document.py +0 -0
  659. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_task_download.py +0 -0
  660. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_task_export.py +0 -0
  661. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_task_output_format.py +0 -0
  662. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_task_package.py +0 -0
  663. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_task_runtime_primitive.py +0 -0
  664. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_tasks.py +0 -0
  665. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_token_usage_normalization.py +0 -0
  666. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_trace_import_cli.py +0 -0
  667. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_trace_task_gen_traversal.py +0 -0
  668. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_trace_to_task_evidence.py +0 -0
  669. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_traces_huggingface.py +0 -0
  670. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_traces_parsers.py +0 -0
  671. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_traces_task_gen.py +0 -0
  672. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_train_cli.py +0 -0
  673. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_train_mode_artifact_emission.py +0 -0
  674. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_train_trl_cli.py +0 -0
  675. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_trajectory_integration.py +0 -0
  676. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_trajectory_streaming.py +0 -0
  677. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_trial_agent_timeout_verify.py +0 -0
  678. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_trial_install_agent_timeout.py +0 -0
  679. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_trial_litellm_runtime.py +0 -0
  680. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_trl_integration.py +0 -0
  681. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_usage_litellm.py +0 -0
  682. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_usage_required.py +0 -0
  683. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_usage_tracking.py +0 -0
  684. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_user.py +0 -0
  685. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_v06_guard_ports.py +0 -0
  686. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_verifier_document.py +0 -0
  687. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_verifier_multi_container.py +0 -0
  688. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_verifier_output.py +0 -0
  689. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_verifier_output_freshness.py +0 -0
  690. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_verifier_strategies.py +0 -0
  691. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_verifier_wedge_retry.py +0 -0
  692. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_verify.py +0 -0
  693. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_workflow_action_pinning.py +0 -0
  694. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/test_yaml_config.py +0 -0
  695. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/trajectories/__init__.py +0 -0
  696. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/trajectories/test_export.py +0 -0
  697. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/trajectories/test_export_adp.py +0 -0
  698. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/trajectories/test_export_atif.py +0 -0
  699. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/trajectories/test_export_common.py +0 -0
  700. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/trajectories/test_export_nan_handling.py +0 -0
  701. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/trajectories/test_export_prime_sft.py +0 -0
  702. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/trajectories/test_redaction.py +0 -0
  703. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/tests/trajectories/test_step_granularity.py +0 -0
  704. {benchflow-0.6.7.dev1840 → benchflow-0.6.7.dev1841}/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.dev1840
3
+ Version: 0.6.7.dev1841
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.dev1840"
3
+ version = "0.6.7.dev1841"
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"
@@ -19,12 +19,15 @@ class SessionCounters(NamedTuple):
19
19
  """The live ACP session counters the console heartbeat logs.
20
20
 
21
21
  ``total_tokens`` is None until the session has a usage snapshot (i.e.
22
- after a completed prompt).
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).
23
25
  """
24
26
 
25
27
  tool_calls: int
26
28
  last_tool: str
27
29
  total_tokens: int | None
30
+ distinct_tools: int | None = None
28
31
 
29
32
 
30
33
  class ActivitySnapshot(NamedTuple):
@@ -138,6 +138,17 @@ def _canonical_tool_kind(kind: object, title: object = "") -> str:
138
138
  return raw_kind
139
139
 
140
140
 
141
+ def _tool_display_title(title: str, kind: str) -> str:
142
+ """A tool call's display title: first line of ``title``, else ``kind``.
143
+
144
+ ``split`` not ``splitlines`` so a whitespace-only title strips to ``""``
145
+ instead of raising on an empty line list. Shared by the heartbeat/dashboard
146
+ snapshot and the distinct-title tracker so "distinct" means exactly
147
+ "renders differently".
148
+ """
149
+ return (title or kind or "").strip().split("\n", 1)[0]
150
+
151
+
141
152
  class ToolCallRecord:
142
153
  """Record of a single tool call within a session.
143
154
 
@@ -191,6 +202,12 @@ class ACPSession:
191
202
  self.thought_chunks: list[str] = []
192
203
  self.tool_calls: list[ToolCallRecord] = []
193
204
  self._tool_call_map: dict[str, ToolCallRecord] = {}
205
+ # Distinct display titles across recorded tool calls, maintained
206
+ # incrementally at record creation so the eval dashboard can detect
207
+ # single-tool agents (prime-agent funnels everything through one
208
+ # IPython tool — a constant "last: IPython cell" carries no
209
+ # information) in O(1) at render time.
210
+ self._seen_tool_titles: set[str] = set()
194
211
  self.stop_reason: StopReason | None = None
195
212
  self.usage_snapshots: list[ACPUsageSnapshot] = []
196
213
  self.created_at = datetime.now()
@@ -226,15 +243,24 @@ class ACPSession:
226
243
  counters, also polled by the live eval dashboard's activity cell.
227
244
 
228
245
  The title is the raw first line (untruncated — display width belongs
229
- to each render site); ``split`` not ``splitlines`` so a whitespace-only
230
- title strips to ``""`` instead of raising on an empty line list.
246
+ to each render site; see :func:`_tool_display_title`).
231
247
  """
232
248
  title = ""
233
249
  if self.tool_calls:
234
250
  last = self.tool_calls[-1]
235
- title = (last.title or last.kind or "").strip().split("\n", 1)[0]
251
+ title = _tool_display_title(last.title, last.kind)
236
252
  return len(self.tool_calls), title
237
253
 
254
+ @property
255
+ def distinct_tool_titles(self) -> int:
256
+ """Count of distinct display titles across recorded tool calls.
257
+
258
+ O(1) read for the eval dashboard: ``1`` with several calls means a
259
+ single-tool agent, whose activity cell drops the constant ``last:``
260
+ suffix in favour of the token count.
261
+ """
262
+ return len(self._seen_tool_titles)
263
+
238
264
  def _maybe_log_progress(self) -> None:
239
265
  if not self._progress_enabled or self._prompt_started_at is None:
240
266
  return
@@ -324,6 +350,22 @@ class ACPSession:
324
350
  self.events.append(current)
325
351
  self._pending_text.clear()
326
352
 
353
+ def _record_tool_call(self, record: ToolCallRecord) -> None:
354
+ """Register a newly created tool-call record in every live structure.
355
+
356
+ Single bookkeeping site for the two creation paths in
357
+ :meth:`handle_update` (``tool_call``, and the ``tool_call_update``
358
+ fallback for unseen ids), so the distinct-title tracker can never
359
+ drift from the record list. ``title`` itself is never rewritten after
360
+ creation, but an empty-title record's display title follows ``kind``,
361
+ which the legacy-skill upgrade can rewrite — that site re-registers
362
+ the new display title (over-counting fails safe).
363
+ """
364
+ self.tool_calls.append(record)
365
+ self._tool_call_map[record.tool_call_id] = record
366
+ self._seen_tool_titles.add(_tool_display_title(record.title, record.kind))
367
+ self.events.append({"type": "tool_call", "record": record})
368
+
327
369
  _RECOGNIZED_UPDATE_TYPES = frozenset(
328
370
  {
329
371
  "tool_call",
@@ -356,9 +398,7 @@ class ACPSession:
356
398
  update.get("kind", "other"), update.get("title", "")
357
399
  ),
358
400
  )
359
- self.tool_calls.append(record)
360
- self._tool_call_map[record.tool_call_id] = record
361
- self.events.append({"type": "tool_call", "record": record})
401
+ self._record_tool_call(record)
362
402
 
363
403
  elif update_type == "tool_call_update":
364
404
  tc_id = update.get("toolCallId", "")
@@ -372,9 +412,7 @@ class ACPSession:
372
412
  update.get("kind", "tool"), update.get("title", "")
373
413
  ),
374
414
  )
375
- self.tool_calls.append(record)
376
- self._tool_call_map[tc_id] = record
377
- self.events.append({"type": "tool_call", "record": record})
415
+ self._record_tool_call(record)
378
416
  try:
379
417
  status = ToolCallStatus(update.get("status", "in_progress"))
380
418
  except ValueError:
@@ -390,6 +428,14 @@ class ACPSession:
390
428
  record.kind, record.title, record.content
391
429
  ):
392
430
  record.kind = "skill"
431
+ # An empty-title record's DISPLAY title falls back to kind, so
432
+ # this upgrade can change what renders. Re-register the new
433
+ # display title: the set may now over-count (creation-time
434
+ # fallback + "skill"), which fails safe — the cell keeps the
435
+ # last: suffix instead of falsely claiming a single tool.
436
+ self._seen_tool_titles.add(
437
+ _tool_display_title(record.title, record.kind)
438
+ )
393
439
 
394
440
  elif update_type == "agent_message_chunk":
395
441
  content = update.get("content", {})
@@ -3,7 +3,9 @@
3
3
  Renders a single Rich :class:`~rich.live.Live` panel — a progress bar with ETA,
4
4
  queued/running/passed/failed/errored counts, a "running now" table, and running
5
5
  token / cost / pass-rate totals — fed by the :class:`~benchflow.evaluation.Evaluation`
6
- engine's ``on_plan`` / ``on_task_start`` / ``on_result`` hooks.
6
+ engine's ``on_plan`` / ``on_task_start`` / ``on_result`` hooks, plus render-time
7
+ polls of the live-activity registry for the running tasks' in-flight session
8
+ counters (activity cells and the footer's live token sum).
7
9
 
8
10
  TTY-only by contract: the CLI keeps its plain ``logger.info`` lines when stdout
9
11
  isn't a terminal (CI, pipes, parity files), so machine-readable output is never
@@ -149,18 +151,21 @@ _PHASE_LABELS = {
149
151
  _PHASE_FALLBACK = "starting…"
150
152
 
151
153
 
152
- def _activity_cell(name: str) -> str:
154
+ def _activity_cell(snap: live_activity.ActivitySnapshot | None) -> str:
153
155
  """Per-task activity for the "running now" table, e.g.
154
156
  ``38 calls · last: file_editor``.
155
157
 
156
- Polls the live rollout's ACP session counters — the same ones the console
157
- heartbeat logs, which the Live display otherwise mutes — via the
158
- live-activity registry. Until the agent session exists (and after it is
159
- closed for the verifier) the cell shows the rollout's lifecycle phase as a
160
- label instead, so the row is never blank. Tokens appear only once the
161
- session has a usage snapshot (i.e. after a completed prompt).
158
+ Pure formatter over one polled :class:`~benchflow._utils.live_activity.
159
+ ActivitySnapshot` ``__rich__`` polls the registry exactly once per
160
+ running task per frame and shares the snapshots with the footer's live
161
+ token sum. The counters are the same ones the console heartbeat logs,
162
+ which the Live display otherwise mutes. Until the agent session exists
163
+ (and after it is closed for the verifier) the cell shows the rollout's
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:``).
162
168
  """
163
- snap = live_activity.activity(name)
164
169
  if snap is None:
165
170
  return _PHASE_FALLBACK
166
171
  counters = snap.counters
@@ -169,7 +174,12 @@ def _activity_cell(name: str) -> str:
169
174
  cell = f"{counters.tool_calls} calls"
170
175
  if counters.total_tokens:
171
176
  cell += f" · {_fmt_tokens(counters.total_tokens)} tok"
172
- if counters.last_tool:
177
+ # A single-tool agent (prime-agent funnels every call through one IPython
178
+ # tool) makes "last: <name>" a constant: once tokens carry the signal,
179
+ # drop it. Varied tool names — and unknown distinct counts (0), and a
180
+ # first lone call, where the name is still news — keep the last: suffix.
181
+ constant_tool = counters.tool_calls > 1 and counters.distinct_tools == 1
182
+ if counters.last_tool and not (constant_tool and counters.total_tokens):
173
183
  cell += f" · last: {counters.last_tool[:30]}"
174
184
  return cell
175
185
 
@@ -335,6 +345,13 @@ class LiveEvalProgress:
335
345
 
336
346
  parts: list[RenderableType] = [header, bar, counts]
337
347
 
348
+ # ONE registry poll per running task per frame (each poll an O(1)
349
+ # counter read; see live_activity), shared by the running-now cells
350
+ # and the footer's live token sum — displayed rows are never polled
351
+ # twice, and cell vs footer can't read different snapshots within a
352
+ # frame.
353
+ snaps = {name: live_activity.activity(name) for name in running}
354
+
338
355
  # "Running now" — cap rows so short terminals don't overflow.
339
356
  if running:
340
357
  tbl = Table(
@@ -354,16 +371,34 @@ class LiveEvalProgress:
354
371
  tbl.add_row(
355
372
  Text(name),
356
373
  _fmt_dur(now - running[name]),
357
- Text(_activity_cell(name), style="dim"),
374
+ Text(_activity_cell(snaps.get(name)), style="dim"),
358
375
  )
359
376
  extra = len(running) - _MAX_RUNNING_ROWS
360
377
  if extra > 0:
361
378
  tbl.add_row(f"… {extra} more", "", "")
362
379
  parts.append(tbl)
363
380
 
364
- # Footer: pass-rate (excl errors) + token/cost economics. Show "—" (not
365
- # 0 / $0.00) when no trusted telemetry, so a coverage-0 run reads broken,
366
- # not free matching the summary.json contract.
381
+ # 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
388
+ # untrusted/absent telemetry drops its live contribution entirely —
389
+ # a sole-task footer can collapse back to "— tokens". Clamping would
390
+ # falsify the trusted sum, so the dip is intended. Show "—" (not 0 /
391
+ # $0.00) when neither signal exists, so a coverage-0 run reads
392
+ # broken, not free — matching the summary.json contract. Cost stays
393
+ # completed-tasks-only: $ comes from the sandbox LiteLLM gateway log
394
+ # imported at scoring time (BenchFlow computes no prices of its own),
395
+ # so there is no live $ to show.
396
+ live_tokens = sum(
397
+ snap.counters.total_tokens or 0
398
+ for snap in snaps.values()
399
+ if snap is not None and snap.counters is not None
400
+ )
401
+
367
402
  footer = Text()
368
403
  scored = passed + failed
369
404
  if scored:
@@ -371,7 +406,12 @@ class LiveEvalProgress:
371
406
  else:
372
407
  footer.append("pass-rate —", style="dim")
373
408
  footer.append(" · ")
374
- footer.append(f"{_fmt_tokens(tokens)} tokens" if covered else "— tokens", "dim")
409
+ footer.append(
410
+ f"{_fmt_tokens(tokens + live_tokens)} tokens"
411
+ if covered or live_tokens
412
+ else "— tokens",
413
+ "dim",
414
+ )
375
415
  footer.append(" · ")
376
416
  footer.append(f"${cost:.2f}" if covered else "$—", style="dim")
377
417
  if completed:
@@ -759,7 +759,8 @@ class Rollout:
759
759
  def activity_snapshot(self) -> ActivitySnapshot:
760
760
  """The eval dashboard's per-task :class:`ActivitySnapshot`: the
761
761
  current lifecycle phase plus the live :class:`SessionCounters` (tool
762
- calls, last tool title, total tokens). ``counters`` is None before
762
+ calls, last tool title, total tokens, distinct tool titles).
763
+ ``counters`` is None before
763
764
  the agent session exists — the phase then carries the cell
764
765
  ("creating sandbox…", "verifying…"), so a 90s sandbox create is not
765
766
  indistinguishable from a hang.
@@ -775,7 +776,10 @@ class Rollout:
775
776
  calls, last_title = session.progress_snapshot()
776
777
  usage = session.latest_usage_totals()
777
778
  tokens = usage.get("total_tokens") if usage else None
778
- return ActivitySnapshot(self._phase, SessionCounters(calls, last_title, tokens))
779
+ return ActivitySnapshot(
780
+ self._phase,
781
+ SessionCounters(calls, last_title, tokens, session.distinct_tool_titles),
782
+ )
779
783
 
780
784
  @property
781
785
  def trajectory(self) -> list[dict]:
@@ -10,10 +10,14 @@ import contextlib
10
10
  import logging
11
11
  from types import SimpleNamespace
12
12
 
13
+ import pytest
13
14
  from rich.console import Console
14
15
 
16
+ from benchflow._utils import live_activity
17
+ from benchflow._utils.live_activity import ActivitySnapshot, SessionCounters
15
18
  from benchflow.cli._live_progress import (
16
19
  LiveEvalProgress,
20
+ _activity_cell,
17
21
  progress_enabled,
18
22
  quiet_root_logging,
19
23
  )
@@ -34,6 +38,36 @@ def _dash() -> LiveEvalProgress:
34
38
  )
35
39
 
36
40
 
41
+ @contextlib.contextmanager
42
+ def _registered_rollouts(rollouts: dict):
43
+ """Register fake rollouts and guarantee unregistration.
44
+
45
+ Values are the ActivitySnapshot to serve — or an Exception instance to
46
+ raise from ``activity_snapshot()`` (a teardown-racing rollout).
47
+ """
48
+
49
+ def _fake(snap):
50
+ if isinstance(snap, Exception):
51
+
52
+ def _boom():
53
+ raise snap
54
+
55
+ return SimpleNamespace(activity_snapshot=_boom)
56
+ return SimpleNamespace(activity_snapshot=lambda: snap)
57
+
58
+ for name, snap in rollouts.items():
59
+ live_activity.register(name, _fake(snap))
60
+ try:
61
+ yield
62
+ finally:
63
+ for name in rollouts:
64
+ live_activity.unregister(name)
65
+
66
+
67
+ def _counters_snap(tokens, *, calls=3, last="file_editor", distinct=2):
68
+ return ActivitySnapshot("connected", SessionCounters(calls, last, tokens, distinct))
69
+
70
+
37
71
  def test_counts_classify_like_the_engine():
38
72
  d = _dash()
39
73
  d.on_plan(total=4, done=0, remaining=4)
@@ -93,7 +127,85 @@ def test_trusted_telemetry_accumulates():
93
127
  assert d._covered == 2
94
128
 
95
129
 
130
+ def _rendered(d: LiveEvalProgress) -> str:
131
+ import io
132
+
133
+ out = Console(file=io.StringIO(), width=200)
134
+ out.print(d.__rich__())
135
+ return out.file.getvalue()
136
+
137
+
138
+ def test_footer_sums_live_running_usage_with_completed():
139
+ # Mid-run spend visibility (51-min single-task dogfood: footer read
140
+ # "— tokens · $—" for the whole agent phase): the footer must sum the
141
+ # completed tasks' trusted telemetry PLUS every running session's live
142
+ # usage. Cost stays completed-only — $ exists only in the scoring-time
143
+ # LiteLLM gateway import.
144
+ with _registered_rollouts(
145
+ {"task-a": _counters_snap(1_000_000), "task-b": _counters_snap(500_000)}
146
+ ):
147
+ d = _dash()
148
+ d.on_plan(total=3, done=0, remaining=3)
149
+ for name in ("task-a", "task-b", "task-c"):
150
+ d.on_task_start(name)
151
+ d.on_result(
152
+ "task-c", _result(1.0, tokens=2_500_000, cost=0.02, src="provider_response")
153
+ )
154
+ text = _rendered(d)
155
+ assert "4.00M tokens" in text
156
+ assert "$0.02" in text
157
+
158
+
159
+ def test_footer_shows_live_usage_before_any_completion():
160
+ # The single-task common case: no task has finished, but the running
161
+ # session has per-completed-prompt usage — real tokens render, and $
162
+ # stays "—" (no live price signal exists).
163
+ with _registered_rollouts({"task-a": _counters_snap(750_000)}):
164
+ d = _dash()
165
+ d.on_plan(total=1, done=0, remaining=1)
166
+ d.on_task_start("task-a")
167
+ text = _rendered(d)
168
+ assert "750.0k tokens" in text
169
+ assert "$—" in text
170
+ assert "— tokens" not in text
171
+
172
+
173
+ def test_footer_degrades_to_dash_without_any_usage_signal():
174
+ # No completed telemetry and no live counters (counter-less snapshot, a
175
+ # teardown-racing rollout whose snapshot raises, an unregistered task):
176
+ # the footer keeps the "—" contract — a coverage-0 run reads broken, not
177
+ # free — and never raises.
178
+ with _registered_rollouts(
179
+ {
180
+ "warming": ActivitySnapshot("setup", None),
181
+ "racing": RuntimeError("teardown race"),
182
+ }
183
+ ):
184
+ d = _dash()
185
+ d.on_plan(total=3, done=0, remaining=3)
186
+ for name in ("warming", "racing", "unregistered"):
187
+ d.on_task_start(name)
188
+ text = _rendered(d)
189
+ assert "— tokens" in text
190
+ assert "$—" in text
191
+
192
+
193
+ def test_footer_live_usage_ignores_sessions_without_usage():
194
+ # A running session before its first completed prompt reports
195
+ # total_tokens=None — it must contribute 0, not poison the sum.
196
+ with _registered_rollouts(
197
+ {"task-a": _counters_snap(None), "task-b": _counters_snap(250_000)}
198
+ ):
199
+ d = _dash()
200
+ d.on_plan(total=2, done=0, remaining=2)
201
+ d.on_task_start("task-a")
202
+ d.on_task_start("task-b")
203
+ assert "250.0k tokens" in _rendered(d)
204
+
205
+
96
206
  class _FakeSession:
207
+ distinct_tool_titles = 4
208
+
97
209
  def progress_snapshot(self):
98
210
  return 38, "file_editor"
99
211
 
@@ -101,29 +213,49 @@ class _FakeSession:
101
213
  return {"total_tokens": 1500}
102
214
 
103
215
 
104
- def test_activity_cell_polls_live_session_counters():
105
- # Per-task activity in the running-now table (fresh-user dogfood
106
- # 2026-08-09): the heartbeat's counters must reach the dashboard, since
107
- # the Live mutes the logged heartbeat line itself.
108
- from benchflow._utils import live_activity
109
- from benchflow._utils.live_activity import ActivitySnapshot, SessionCounters
110
- from benchflow.cli._live_progress import _activity_cell
111
-
112
- live_activity.register(
113
- "edit-pdf",
114
- SimpleNamespace(
115
- activity_snapshot=lambda: ActivitySnapshot(
116
- "connected", SessionCounters(38, "file_editor", 1500)
117
- )
216
+ def test_activity_cell_formats_counters_and_registry_miss():
217
+ # Pure formatter over one polled snapshot __rich__ polls the registry
218
+ # once per running task per frame and shares snapshots between the cells
219
+ # and the footer sum. distinct_tools=None (unknown, e.g. an old-style
220
+ # producer) must degrade to the full last:-suffixed cell, never mislabel.
221
+ snap = ActivitySnapshot("connected", SessionCounters(38, "file_editor", 1500))
222
+ assert _activity_cell(snap) == "38 calls · 1.5k tok · last: file_editor"
223
+ # Registry misses (pre-register, teardown races) hand the formatter None —
224
+ # a live row's cell must never be blank, and never raise.
225
+ assert _activity_cell(None) == "starting…"
226
+
227
+
228
+ @pytest.mark.parametrize(
229
+ ("counters", "expected"),
230
+ [
231
+ # Single-tool agents (prime-agent funnels everything through one
232
+ # IPython tool): "last: IPython cell" is a constant across all N
233
+ # calls — once tokens are available they carry the information.
234
+ (
235
+ SessionCounters(38, "IPython cell", 412_000, 1),
236
+ "38 calls · 412.0k tok",
118
237
  ),
119
- )
120
- try:
121
- assert _activity_cell("edit-pdf") == "38 calls · 1.5k tok · last: file_editor"
122
- finally:
123
- live_activity.unregister("edit-pdf")
124
- # Unregistered tasks (pre-register, teardown races) degrade to the
125
- # fallback label a live row's cell must never be blank, and never raise.
126
- assert _activity_cell("edit-pdf") == "starting…"
238
+ # Varied tool names: last: still carries information.
239
+ (
240
+ SessionCounters(38, "file_editor", 412_000, 5),
241
+ "38 calls · 412.0k tok · last: file_editor",
242
+ ),
243
+ # Constant tool but no tokens yet (first prompt still running): the
244
+ # name, shown once, is still the only signal it stays.
245
+ (
246
+ SessionCounters(5, "IPython cell", None, 1),
247
+ "5 calls · last: IPython cell",
248
+ ),
249
+ # A lone first call is trivially "constant" but the name is still
250
+ # news; the drop only pays off once repetition makes it redundant.
251
+ (
252
+ SessionCounters(1, "IPython cell", 90_000, 1),
253
+ "1 calls · 90.0k tok · last: IPython cell",
254
+ ),
255
+ ],
256
+ )
257
+ def test_activity_cell_constant_vs_varied_tools(counters, expected):
258
+ assert _activity_cell(ActivitySnapshot("connected", counters)) == expected
127
259
 
128
260
 
129
261
  def test_rollout_activity_snapshot_reads_acp_session():
@@ -136,7 +268,7 @@ def test_rollout_activity_snapshot_reads_acp_session():
136
268
  _acp_client=SimpleNamespace(session=_FakeSession()), _phase="connected"
137
269
  )
138
270
  assert Rollout.activity_snapshot(connected) == ActivitySnapshot(
139
- "connected", SessionCounters(38, "file_editor", 1500)
271
+ "connected", SessionCounters(38, "file_editor", 1500, 4)
140
272
  )
141
273
  # Pre-connect (and session-factory) rollouts have no client: counters are
142
274
  # None but the lifecycle phase still rides out so the cell can label it.
@@ -148,83 +280,36 @@ def test_rollout_activity_snapshot_reads_acp_session():
148
280
  def test_dashboard_renders_activity_for_registered_running_task():
149
281
  # End-to-end through __rich__: a registered running task's activity must
150
282
  # appear in the rendered panel — reverting the table wiring fails this.
151
- import io
152
-
153
- from benchflow._utils import live_activity
154
- from benchflow._utils.live_activity import ActivitySnapshot, SessionCounters
155
-
156
- live_activity.register(
157
- "edit-pdf",
158
- SimpleNamespace(
159
- activity_snapshot=lambda: ActivitySnapshot(
160
- "connected", SessionCounters(38, "file_editor", None)
161
- )
162
- ),
163
- )
164
- try:
283
+ with _registered_rollouts(
284
+ {"edit-pdf": _counters_snap(None, calls=38, last="file_editor")}
285
+ ):
165
286
  d = _dash()
166
287
  d.on_plan(total=1, done=0, remaining=1)
167
288
  d.on_task_start("edit-pdf")
168
- out = Console(file=io.StringIO(), width=120)
169
- out.print(d.__rich__())
170
- text = out.file.getvalue()
289
+ text = _rendered(d)
171
290
  assert "38 calls" in text
172
291
  assert "file_editor" in text
173
- finally:
174
- live_activity.unregister("edit-pdf")
175
292
 
176
293
 
177
294
  def test_activity_cell_shows_phase_label_before_session_exists():
178
295
  # Fresh-user dogfood follow-up: ~1.5min of sandbox create / agent install
179
296
  # (and the whole verifier) used to render a blank cell — indistinguishable
180
297
  # from a hang. Counter-less snapshots must surface the lifecycle phase.
181
- from benchflow._utils import live_activity
182
- from benchflow._utils.live_activity import ActivitySnapshot
183
- from benchflow.cli._live_progress import _activity_cell
184
-
185
- phase = "setup"
186
- live_activity.register(
187
- "warming-up",
188
- SimpleNamespace(activity_snapshot=lambda: ActivitySnapshot(phase, None)),
189
- )
190
- try:
191
- assert _activity_cell("warming-up") == "creating sandbox…"
192
- phase = "started"
193
- assert _activity_cell("warming-up") == "installing agent…"
194
- phase = "verifying"
195
- assert _activity_cell("warming-up") == "verifying…"
196
- # Unknown phases (e.g. "branched") still never blank the cell.
197
- phase = "branched"
198
- assert _activity_cell("warming-up") == "starting…"
199
- d = _dash()
200
- d.on_plan(total=1, done=0, remaining=1)
201
- d.on_task_start("warming-up")
202
- d.__rich__() # builds the running-now table row; must not raise
203
- finally:
204
- live_activity.unregister("warming-up")
298
+ assert _activity_cell(ActivitySnapshot("setup", None)) == "creating sandbox…"
299
+ assert _activity_cell(ActivitySnapshot("started", None)) == "installing agent…"
300
+ assert _activity_cell(ActivitySnapshot("verifying", None)) == "verifying…"
301
+ # Unknown phases (e.g. "branched") still never blank the cell.
302
+ assert _activity_cell(ActivitySnapshot("branched", None)) == "starting…"
205
303
 
206
304
 
207
305
  def test_dashboard_renders_phase_label_for_counterless_task():
208
306
  # End-to-end through __rich__: the phase label must reach the rendered
209
307
  # panel, not just the cell helper — reverting the table wiring fails this.
210
- import io
211
-
212
- from benchflow._utils import live_activity
213
- from benchflow._utils.live_activity import ActivitySnapshot
214
-
215
- live_activity.register(
216
- "edit-pdf",
217
- SimpleNamespace(activity_snapshot=lambda: ActivitySnapshot("started", None)),
218
- )
219
- try:
308
+ with _registered_rollouts({"edit-pdf": ActivitySnapshot("started", None)}):
220
309
  d = _dash()
221
310
  d.on_plan(total=1, done=0, remaining=1)
222
311
  d.on_task_start("edit-pdf")
223
- out = Console(file=io.StringIO(), width=120)
224
- out.print(d.__rich__())
225
- assert "installing agent…" in out.file.getvalue()
226
- finally:
227
- live_activity.unregister("edit-pdf")
312
+ assert "installing agent…" in _rendered(d)
228
313
 
229
314
 
230
315
  def test_rollout_verify_marks_verifying_phase():
@@ -97,6 +97,56 @@ def test_progress_snapshot_whitespace_only_title(monkeypatch):
97
97
  assert s.progress_snapshot() == (1, "")
98
98
 
99
99
 
100
+ def test_distinct_tool_titles_constant_vs_varied(monkeypatch):
101
+ """Incremental distinct-title counter behind the dashboard's single-tool
102
+ detection (prime-agent: N identical "IPython cell" calls)."""
103
+ monkeypatch.setenv("BENCHFLOW_PROGRESS", "off")
104
+ s = ACPSession("sid")
105
+ assert s.distinct_tool_titles == 0
106
+ _drive_tool_call(s, "tc1")
107
+ _drive_tool_call(s, "tc2")
108
+ assert s.distinct_tool_titles == 1 # same title twice stays constant
109
+ # The tool_call_update fallback path (unseen id) also records the title.
110
+ s.handle_update(
111
+ {
112
+ "sessionUpdate": "tool_call_update",
113
+ "toolCallId": "tc3",
114
+ "title": "file_editor",
115
+ "kind": "edit",
116
+ "status": "in_progress",
117
+ }
118
+ )
119
+ assert s.distinct_tool_titles == 2
120
+
121
+
122
+ def test_distinct_tool_titles_normalize_like_the_display(monkeypatch):
123
+ """Distinct means "renders differently": multi-line titles compare by
124
+ first line (what the cell shows), and empty titles fall back to kind —
125
+ the same normalization progress_snapshot uses."""
126
+ monkeypatch.setenv("BENCHFLOW_PROGRESS", "off")
127
+ s = ACPSession("sid")
128
+ for call_id, title in (("a", "IPython cell\nx = 1"), ("b", "IPython cell\ny = 2")):
129
+ s.handle_update(
130
+ {
131
+ "sessionUpdate": "tool_call",
132
+ "toolCallId": call_id,
133
+ "title": title,
134
+ "kind": "execute",
135
+ }
136
+ )
137
+ assert s.distinct_tool_titles == 1
138
+ for call_id in ("c", "d"):
139
+ s.handle_update(
140
+ {
141
+ "sessionUpdate": "tool_call",
142
+ "toolCallId": call_id,
143
+ "title": "",
144
+ "kind": "execute",
145
+ }
146
+ )
147
+ assert s.distinct_tool_titles == 2 # "IPython cell" + kind-fallback "execute"
148
+
149
+
100
150
  def test_heartbeat_silent_outside_prompt(monkeypatch, caplog):
101
151
  """No heartbeat before the first prompt or after mark_prompt_end."""
102
152
  monkeypatch.setenv("BENCHFLOW_PROGRESS", "on")