benchflow 0.7.6.dev2231__tar.gz → 0.7.6.dev2235__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 (748) hide show
  1. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/PKG-INFO +1 -1
  2. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/pyproject.toml +1 -1
  3. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/_utils/scoring.py +2 -0
  4. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/acp/runtime.py +15 -68
  5. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/acp/session.py +24 -0
  6. benchflow-0.7.6.dev2235/src/benchflow/acp/watchdog.py +249 -0
  7. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/diagnostics.py +20 -1
  8. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/evaluation.py +37 -8
  9. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_acp.py +226 -0
  10. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_verify.py +106 -2
  11. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/.gitignore +0 -0
  12. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/CHANGELOG.md +0 -0
  13. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/LICENSE +0 -0
  14. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/README.md +0 -0
  15. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/__init__.py +0 -0
  16. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/_dotenv.py +0 -0
  17. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/_paths.py +0 -0
  18. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/_run.py +0 -0
  19. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/_types.py +0 -0
  20. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/_utils/__init__.py +0 -0
  21. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/_utils/benchmark_repos.py +0 -0
  22. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/_utils/build_context_stage.py +0 -0
  23. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/_utils/config.py +0 -0
  24. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/_utils/config_override.py +0 -0
  25. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/_utils/content_address.py +0 -0
  26. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/_utils/dataset_registry.py +0 -0
  27. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/_utils/env_registry.py +0 -0
  28. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/_utils/evaluation_results.py +0 -0
  29. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/_utils/hf_datasets.py +0 -0
  30. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/_utils/json_safe.py +0 -0
  31. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/_utils/learner_memory.py +0 -0
  32. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/_utils/live_activity.py +0 -0
  33. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/_utils/result_metadata.py +0 -0
  34. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/_utils/reward_events.py +0 -0
  35. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/_utils/source_provenance.py +0 -0
  36. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/_utils/task_authoring/__init__.py +0 -0
  37. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/_utils/task_authoring/_evidence_paths.py +0 -0
  38. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/_utils/task_authoring/acceptance_evidence.py +0 -0
  39. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/_utils/task_authoring/scaffolding.py +0 -0
  40. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/_utils/task_authoring/structural_checks.py +0 -0
  41. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/_utils/text.py +0 -0
  42. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/_utils/yaml_loader.py +0 -0
  43. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/acp/__init__.py +0 -0
  44. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/acp/client.py +0 -0
  45. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/acp/container_transport.py +0 -0
  46. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/acp/selection.py +0 -0
  47. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/acp/transport.py +0 -0
  48. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/acp/types.py +0 -0
  49. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/adapters/__init__.py +0 -0
  50. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/adapters/_toolathlon.py +0 -0
  51. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/adapters/_toolathlon_container.py +0 -0
  52. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/adapters/_toolathlon_fake_mail.py +0 -0
  53. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/adapters/_toolathlon_poste_users.tsv +0 -0
  54. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/adapters/_toolathlon_services.py +0 -0
  55. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/adapters/harbor.py +0 -0
  56. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/adapters/inbound.py +0 -0
  57. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/adapters/inspect_ai.py +0 -0
  58. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/adapters/ors.py +0 -0
  59. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/adapters/resources/__init__.py +0 -0
  60. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/adapters/resources/mcp_atlas_bridge.py +0 -0
  61. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/adapters/resources/mcp_atlas_judge.py +0 -0
  62. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/adapters/source.py +0 -0
  63. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/agent_router.py +0 -0
  64. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/agent_router_guide.py +0 -0
  65. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/agent_router_parity.py +0 -0
  66. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/agent_router_scaffold.py +0 -0
  67. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/agents/__init__.py +0 -0
  68. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/agents/codex_config.py +0 -0
  69. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/agents/credentials.py +0 -0
  70. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/agents/deepagents_acp_shim.py +0 -0
  71. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/agents/env.py +0 -0
  72. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/agents/errors.py +0 -0
  73. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/agents/harvey_lab_acp_shim.py +0 -0
  74. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/agents/install.py +0 -0
  75. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/agents/manifest.py +0 -0
  76. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/agents/openclaw_acp_shim.py +0 -0
  77. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/agents/pi_acp_launcher.py +0 -0
  78. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/agents/protocol.py +0 -0
  79. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/agents/providers.py +0 -0
  80. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/agents/registry.py +0 -0
  81. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/agents/remote_manifests.py +0 -0
  82. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/branch.py +0 -0
  83. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/cli/__init__.py +0 -0
  84. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/cli/_failure_evidence.py +0 -0
  85. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/cli/_hosted_env.py +0 -0
  86. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/cli/_live_progress.py +0 -0
  87. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/cli/_options.py +0 -0
  88. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/cli/_shared.py +0 -0
  89. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/cli/_traj_tui.py +0 -0
  90. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/cli/_traj_upload_ui.py +0 -0
  91. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/cli/adopt.py +0 -0
  92. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/cli/agent.py +0 -0
  93. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/cli/continue_cmd.py +0 -0
  94. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/cli/environment.py +0 -0
  95. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/cli/eval_artifacts.py +0 -0
  96. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/cli/eval_lift.py +0 -0
  97. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/cli/hub.py +0 -0
  98. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/cli/main.py +0 -0
  99. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/cli/monitor.py +0 -0
  100. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/cli/review.py +0 -0
  101. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/cli/sandbox.py +0 -0
  102. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/cli/skills.py +0 -0
  103. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/cli/tasks.py +0 -0
  104. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/cli/trace_import.py +0 -0
  105. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/cli/train.py +0 -0
  106. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/cli/traj.py +0 -0
  107. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/continue_run/__init__.py +0 -0
  108. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/continue_run/batch.py +0 -0
  109. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/continue_run/orchestrator.py +0 -0
  110. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/continue_run/replay_proxy.py +0 -0
  111. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/continue_run/run_folder.py +0 -0
  112. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/continue_run/sandbox_proxy.py +0 -0
  113. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/contracts/__init__.py +0 -0
  114. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/contracts/planes.py +0 -0
  115. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/contracts/user.py +0 -0
  116. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/demo_task/environment/Dockerfile +0 -0
  117. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/demo_task/instruction.md +0 -0
  118. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/demo_task/task.md +0 -0
  119. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/demo_task/task.toml +0 -0
  120. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/demo_task/tests/test.sh +0 -0
  121. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/environment/__init__.py +0 -0
  122. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/environment/_registry/env0@outage.toml +0 -0
  123. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/environment/_registry/env0@prod.toml +0 -0
  124. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/environment/manifest.py +0 -0
  125. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/environment/manifest_env.py +0 -0
  126. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/environment/protocol.py +0 -0
  127. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/environment/readiness.py +0 -0
  128. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/eval_artifacts.py +0 -0
  129. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/eval_lift.py +0 -0
  130. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/eval_plan.py +0 -0
  131. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/eval_sharding.py +0 -0
  132. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/eval_worker.py +0 -0
  133. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/experimental/__init__.py +0 -0
  134. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/experimental/mcp/__init__.py +0 -0
  135. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/experimental/mcp/hooks.py +0 -0
  136. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/experimental/mcp/reviewer_server.py +0 -0
  137. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/hosted_env.py +0 -0
  138. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/hub/__init__.py +0 -0
  139. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/hub/harbor_registry.py +0 -0
  140. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/integrations/__init__.py +0 -0
  141. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/integrations/trl/__init__.py +0 -0
  142. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/integrations/trl/spec.py +0 -0
  143. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/learner_skills.py +0 -0
  144. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/learner_store.py +0 -0
  145. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/loop_strategies.py +0 -0
  146. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/loop_sweep.py +0 -0
  147. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/metrics.py +0 -0
  148. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/models.py +0 -0
  149. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/monitor.py +0 -0
  150. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/providers/__init__.py +0 -0
  151. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/providers/litellm_bedrock_patch.py +0 -0
  152. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/providers/litellm_bedrock_preflight.py +0 -0
  153. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/providers/litellm_config.py +0 -0
  154. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/providers/litellm_logging.py +0 -0
  155. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/providers/litellm_runtime.py +0 -0
  156. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/providers/runtime.py +0 -0
  157. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/publish/__init__.py +0 -0
  158. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/publish/_progress.py +0 -0
  159. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/publish/azure_blob.py +0 -0
  160. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/publish/broker.py +0 -0
  161. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/publish/huggingface.py +0 -0
  162. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/publish/redact.py +0 -0
  163. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/publish/traj_capture.py +0 -0
  164. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/publish/traj_report.py +0 -0
  165. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/py.typed +0 -0
  166. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/review/__init__.py +0 -0
  167. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/review/config.py +0 -0
  168. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/review/default-rubric.json +0 -0
  169. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/review/prompts.py +0 -0
  170. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/review/runner.py +0 -0
  171. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/review/scoring.py +0 -0
  172. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/review/wrapper.py +0 -0
  173. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/rewards/README.md +0 -0
  174. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/rewards/__init__.py +0 -0
  175. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/rewards/builtins.py +0 -0
  176. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/rewards/events.py +0 -0
  177. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/rewards/file_readers.py +0 -0
  178. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/rewards/llm.py +0 -0
  179. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/rewards/memory_scorer.py +0 -0
  180. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/rewards/node.py +0 -0
  181. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/rewards/protocol.py +0 -0
  182. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/rewards/rubric.py +0 -0
  183. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/rewards/rubric_config.py +0 -0
  184. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/rewards/validation.py +0 -0
  185. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/rollout/__init__.py +0 -0
  186. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/rollout/_config.py +0 -0
  187. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/rollout/_deadline.py +0 -0
  188. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/rollout/_results.py +0 -0
  189. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/rollout/_setup.py +0 -0
  190. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/rollout/_skills.py +0 -0
  191. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/rollout/_usage.py +0 -0
  192. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/rollout/_user_loop.py +0 -0
  193. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/rollout/session_factory_runtime.py +0 -0
  194. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/rollout/task_runtime.py +0 -0
  195. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/rollout_branch.py +0 -0
  196. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/rollout_planes.py +0 -0
  197. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/runtime.py +0 -0
  198. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/sandbox/__init__.py +0 -0
  199. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/sandbox/_base.py +0 -0
  200. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/sandbox/_cache_reclaim.py +0 -0
  201. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/sandbox/_compose.py +0 -0
  202. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/sandbox/_compose_files/docker-compose-base.yaml +0 -0
  203. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/sandbox/_compose_files/docker-compose-build.yaml +0 -0
  204. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/sandbox/_compose_files/docker-compose-no-network.yaml +0 -0
  205. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/sandbox/_compose_files/docker-compose-prebuilt.yaml +0 -0
  206. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/sandbox/_sdk_ops.py +0 -0
  207. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/sandbox/agentcore.py +0 -0
  208. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/sandbox/agentcore_builder.py +0 -0
  209. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/sandbox/agentcore_image.py +0 -0
  210. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/sandbox/agentcore_provisioning.py +0 -0
  211. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/sandbox/agentcore_reaper.py +0 -0
  212. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/sandbox/agentcore_sealed.py +0 -0
  213. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/sandbox/apple_container.py +0 -0
  214. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/sandbox/daytona.py +0 -0
  215. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/sandbox/daytona_dind.py +0 -0
  216. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/sandbox/daytona_pty.py +0 -0
  217. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/sandbox/daytona_reaper.py +0 -0
  218. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/sandbox/daytona_strategies.py +0 -0
  219. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/sandbox/docker.py +0 -0
  220. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/sandbox/lockdown.py +0 -0
  221. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/sandbox/metadata.py +0 -0
  222. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/sandbox/modal_impl.py +0 -0
  223. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/sandbox/process/__init__.py +0 -0
  224. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/sandbox/process/_base.py +0 -0
  225. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/sandbox/process/agentcore.py +0 -0
  226. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/sandbox/process/apple.py +0 -0
  227. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/sandbox/process/daytona.py +0 -0
  228. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/sandbox/process/docker.py +0 -0
  229. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/sandbox/protocol.py +0 -0
  230. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/sandbox/providers.py +0 -0
  231. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/sandbox/services.py +0 -0
  232. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/sandbox/setup.py +0 -0
  233. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/sandbox/snapshot.py +0 -0
  234. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/sandbox/user.py +0 -0
  235. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/scenes.py +0 -0
  236. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/sdk.py +0 -0
  237. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/self_gen.py +0 -0
  238. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/skill_eval/__init__.py +0 -0
  239. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/skill_eval/_core.py +0 -0
  240. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/skill_eval/gepa_export.py +0 -0
  241. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/skill_eval/schema.py +0 -0
  242. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/skill_policy.py +0 -0
  243. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/skills.py +0 -0
  244. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/task/__init__.py +0 -0
  245. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/task/_document_evidence.py +0 -0
  246. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/task/_document_normalize.py +0 -0
  247. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/task/_document_parse.py +0 -0
  248. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/task/_document_profiles.py +0 -0
  249. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/task/acceptance_live.py +0 -0
  250. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/task/acceptance_live_model.py +0 -0
  251. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/task/acceptance_live_report.py +0 -0
  252. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/task/acceptance_live_validation.py +0 -0
  253. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/task/config.py +0 -0
  254. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/task/discovery.py +0 -0
  255. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/task/document.py +0 -0
  256. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/task/env.py +0 -0
  257. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/task/export.py +0 -0
  258. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/task/imports.py +0 -0
  259. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/task/output_format.py +0 -0
  260. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/task/package.py +0 -0
  261. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/task/paths.py +0 -0
  262. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/task/prompts.py +0 -0
  263. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/task/runtime_capabilities.py +0 -0
  264. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/task/runtime_view.py +0 -0
  265. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/task/task.py +0 -0
  266. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/task/verifier.py +0 -0
  267. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/task/verifier_core.py +0 -0
  268. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/task/verifier_document.py +0 -0
  269. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/task/verifier_errors.py +0 -0
  270. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/task/verifier_judge_inputs.py +0 -0
  271. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/task/verifier_ors_episode.py +0 -0
  272. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/task/verifier_reward_kit.py +0 -0
  273. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/task/verifier_scan.py +0 -0
  274. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/task/verifier_script_strategy.py +0 -0
  275. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/templates/__init__.py +0 -0
  276. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/templates/judge.py.tmpl +0 -0
  277. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/templates/test.sh.tmpl +0 -0
  278. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/traces/__init__.py +0 -0
  279. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/traces/huggingface.py +0 -0
  280. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/traces/local.py +0 -0
  281. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/traces/models.py +0 -0
  282. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/traces/parsers.py +0 -0
  283. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/traces/task_gen.py +0 -0
  284. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/training/__init__.py +0 -0
  285. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/training/backends/__init__.py +0 -0
  286. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/training/backends/prime_rl.py +0 -0
  287. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/training/run_manifest.py +0 -0
  288. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/trajectories/__init__.py +0 -0
  289. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/trajectories/_capture.py +0 -0
  290. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/trajectories/_export_common.py +0 -0
  291. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/trajectories/_llm_capture.py +0 -0
  292. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/trajectories/call_purpose.py +0 -0
  293. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/trajectories/export.py +0 -0
  294. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/trajectories/export_adp.py +0 -0
  295. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/trajectories/export_atif.py +0 -0
  296. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/trajectories/export_prime_sft.py +0 -0
  297. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/trajectories/export_trl_sft.py +0 -0
  298. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/trajectories/metrics.py +0 -0
  299. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/trajectories/results.py +0 -0
  300. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/trajectories/sessions.py +0 -0
  301. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/trajectories/tree.py +0 -0
  302. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/trajectories/trl_sft_tokenization.py +0 -0
  303. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/trajectories/types.py +0 -0
  304. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/trajectories/viewer/__init__.py +0 -0
  305. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/trajectories/viewer/__main__.py +0 -0
  306. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/trajectories/viewer/assets/boot.js +0 -0
  307. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/trajectories/viewer/assets/catalog.js +0 -0
  308. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/trajectories/viewer/assets/detail.js +0 -0
  309. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/trajectories/viewer/assets/fonts/OFL-google-sans-code.txt +0 -0
  310. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/trajectories/viewer/assets/fonts/google-sans-code-400-latin.woff2 +0 -0
  311. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/trajectories/viewer/assets/fonts/google-sans-code-600-latin.woff2 +0 -0
  312. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/trajectories/viewer/assets/template.html +0 -0
  313. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/trajectories/viewer/assets/theme.css +0 -0
  314. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/trajectories/viewer/assets/viewer.css +0 -0
  315. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/trajectories/viewer/assets/viewer.js +0 -0
  316. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/trajectories/viewer/catalog.py +0 -0
  317. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/trajectories/viewer/legacy.py +0 -0
  318. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/trajectories/viewer/models.py +0 -0
  319. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/trajectories/viewer/payload.py +0 -0
  320. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/trajectories/viewer/render.py +0 -0
  321. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/trajectories/viewer/server.py +0 -0
  322. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/trajectories/viewer/sources.py +0 -0
  323. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/src/benchflow/usage_tracking.py +0 -0
  324. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/__init__.py +0 -0
  325. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/acceptance_live_harness.py +0 -0
  326. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/agents/__init__.py +0 -0
  327. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/agents/test_manifest_dirscan.py +0 -0
  328. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/agents/test_manifest_loader.py +0 -0
  329. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/agents/test_manifest_parity.py +0 -0
  330. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/agents/test_manifest_wiring.py +0 -0
  331. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/agents/test_namespace_shorthand.py +0 -0
  332. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/agents/test_plugin_entry_points.py +0 -0
  333. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/agents/test_protocol.py +0 -0
  334. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/agents/test_remote_manifest_autoload.py +0 -0
  335. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/conformance/README.md +0 -0
  336. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/conformance/acp_smoke/environment/Dockerfile +0 -0
  337. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/conformance/acp_smoke/environment/docker-compose.yaml +0 -0
  338. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/conformance/acp_smoke/environment/skills/conformance-writer/SKILL.md +0 -0
  339. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/conformance/acp_smoke/instruction.md +0 -0
  340. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/conformance/acp_smoke/solution/solve.sh +0 -0
  341. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/conformance/acp_smoke/task.md +0 -0
  342. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/conformance/acp_smoke/task.toml +0 -0
  343. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/conformance/acp_smoke/tests/test.sh +0 -0
  344. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/conformance/conformance-results.json +0 -0
  345. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/conformance/proof_multi_agent.py +0 -0
  346. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/conformance/proof_snapshot.py +0 -0
  347. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/conformance/run_conformance.py +0 -0
  348. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/conformance/self_gen_smoke_skills/skill-creator/SKILL.md +0 -0
  349. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/conftest.py +0 -0
  350. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/continue_run/__init__.py +0 -0
  351. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/continue_run/_helpers.py +0 -0
  352. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/continue_run/test_batch.py +0 -0
  353. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/continue_run/test_orchestrator.py +0 -0
  354. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/continue_run/test_replay_proxy.py +0 -0
  355. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/continue_run/test_run_folder.py +0 -0
  356. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/environment/__init__.py +0 -0
  357. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/environment/test_chibench_manifest.py +0 -0
  358. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/environment/test_clawsbench_manifest.py +0 -0
  359. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/environment/test_manifest.py +0 -0
  360. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/environment/test_manifest_env.py +0 -0
  361. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/environment/test_protocol.py +0 -0
  362. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/environment/test_readiness.py +0 -0
  363. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/examples/hello-world-task/environment/Dockerfile +0 -0
  364. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/examples/hello-world-task/instruction.md +0 -0
  365. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/examples/hello-world-task/solution/solve.sh +0 -0
  366. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/examples/hello-world-task/task.md +0 -0
  367. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/examples/hello-world-task/task.toml +0 -0
  368. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/examples/hello-world-task/tests/test.sh +0 -0
  369. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/examples/test_claude.sh +0 -0
  370. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/examples/test_codex.sh +0 -0
  371. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/examples/test_codex_custom_provider.sh +0 -0
  372. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/examples/test_gemini.sh +0 -0
  373. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/examples/test_openclaw.sh +0 -0
  374. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/examples/traces/minimal-claude.jsonl +0 -0
  375. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/examples/traces/minimal-opentraces.jsonl +0 -0
  376. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/fixtures/digest/README.md +0 -0
  377. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/fixtures/digest/alpha-task/environment/Dockerfile +0 -0
  378. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/fixtures/digest/alpha-task/instruction.md +0 -0
  379. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/fixtures/digest/alpha-task/task.toml +0 -0
  380. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/fixtures/digest/alpha-task/tests/test.sh +0 -0
  381. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/fixtures/digest/beta-task/data/empty.bin +0 -0
  382. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/fixtures/digest/beta-task/data/unicode.txt +0 -0
  383. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/fixtures/digest/beta-task/instruction.md +0 -0
  384. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/fixtures/digest/beta-task/task.toml +0 -0
  385. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/fixtures/digest/not-a-task/notes.txt +0 -0
  386. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/fixtures/mock_acp_agent.py +0 -0
  387. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/fixtures/mock_acp_agent_interleaved.py +0 -0
  388. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/fixtures/mock_acp_agent_multi_turn.py +0 -0
  389. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/fixtures/mock_openai_responses_server.py +0 -0
  390. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/Dockerfile +0 -0
  391. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/data/michigan_stations.txt +0 -0
  392. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/flood-detection/SKILL.md +0 -0
  393. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/nws-flood-thresholds/SKILL.md +0 -0
  394. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/usgs-data-download/SKILL.md +0 -0
  395. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/fixtures/skillsbench_slice/flood-risk-analysis/instruction.md +0 -0
  396. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/fixtures/skillsbench_slice/flood-risk-analysis/solution/solve.sh +0 -0
  397. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/fixtures/skillsbench_slice/flood-risk-analysis/task.toml +0 -0
  398. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/fixtures/skillsbench_slice/flood-risk-analysis/tests/test.sh +0 -0
  399. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/fixtures/skillsbench_slice/flood-risk-analysis/tests/test_outputs.py +0 -0
  400. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/Dockerfile +0 -0
  401. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/climate.csv +0 -0
  402. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/hydrology.csv +0 -0
  403. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/land_cover.csv +0 -0
  404. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/water_temperature.csv +0 -0
  405. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/contribution-analysis/SKILL.md +0 -0
  406. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/meteorology-driver-classification/SKILL.md +0 -0
  407. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/pca-decomposition/SKILL.md +0 -0
  408. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/trend-analysis/SKILL.md +0 -0
  409. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/fixtures/skillsbench_slice/lake-warming-attribution/instruction.md +0 -0
  410. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/fixtures/skillsbench_slice/lake-warming-attribution/solution/solve.sh +0 -0
  411. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/fixtures/skillsbench_slice/lake-warming-attribution/task.toml +0 -0
  412. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/fixtures/skillsbench_slice/lake-warming-attribution/tests/test.sh +0 -0
  413. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/fixtures/skillsbench_slice/lake-warming-attribution/tests/test_outputs.py +0 -0
  414. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/fixtures/skillsbench_slice/manifest.json +0 -0
  415. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/Dockerfile +0 -0
  416. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/r2r_simulator.py +0 -0
  417. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/finite-horizon-lqr/SKILL.md +0 -0
  418. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/integral-action-design/SKILL.md +0 -0
  419. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/mpc-horizon-tuning/SKILL.md +0 -0
  420. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/state-space-linearization/SKILL.md +0 -0
  421. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/system_config.json +0 -0
  422. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/fixtures/skillsbench_slice/r2r-mpc-control/instruction.md +0 -0
  423. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/fixtures/skillsbench_slice/r2r-mpc-control/solution/solve.sh +0 -0
  424. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/fixtures/skillsbench_slice/r2r-mpc-control/task.toml +0 -0
  425. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/fixtures/skillsbench_slice/r2r-mpc-control/tests/test.sh +0 -0
  426. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/fixtures/skillsbench_slice/r2r-mpc-control/tests/test_outputs.py +0 -0
  427. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/Dockerfile +0 -0
  428. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/generate_training_pcaps.py +0 -0
  429. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/local.rules +0 -0
  430. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/pcap-triage-tshark/SKILL.md +0 -0
  431. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/pcap-triage-tshark/scripts/summarize_http_requests.sh +0 -0
  432. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-offline-evejson/SKILL.md +0 -0
  433. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-offline-evejson/scripts/run_suricata_offline.sh +0 -0
  434. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-rules-basics/SKILL.md +0 -0
  435. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/suricata.yaml +0 -0
  436. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/instruction.md +0 -0
  437. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/solution/solve.sh +0 -0
  438. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/task.toml +0 -0
  439. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/tests/test.sh +0 -0
  440. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/tests/test_outputs.py +0 -0
  441. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/Dockerfile +0 -0
  442. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syz-extract-constants/SKILL.md +0 -0
  443. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syzkaller-build-loop/SKILL.md +0 -0
  444. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syzlang-ioctl-basics/SKILL.md +0 -0
  445. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/instruction.md +0 -0
  446. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/solution/solve.sh +0 -0
  447. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/task.toml +0 -0
  448. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/tests/test.sh +0 -0
  449. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/tests/test_outputs.py +0 -0
  450. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/integration/_consistency.py +0 -0
  451. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/integration/agent_judge.py +0 -0
  452. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/integration/check_adapter_evidence.py +0 -0
  453. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/integration/check_hosted_env_evidence.py +0 -0
  454. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/integration/check_results.py +0 -0
  455. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/integration/check_skillsbench_harbor_parity.py +0 -0
  456. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/integration/check_trace_to_task_evidence.py +0 -0
  457. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/integration/configs/claude-agent-acp.yaml +0 -0
  458. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/integration/configs/codex-acp.yaml +0 -0
  459. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/integration/configs/gemini.yaml +0 -0
  460. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/integration/configs/harvey-lab-harness.yaml +0 -0
  461. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/integration/configs/mimo.yaml +0 -0
  462. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/integration/configs/openclaw.yaml +0 -0
  463. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/integration/configs/opencode.yaml +0 -0
  464. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/integration/configs/openhands.yaml +0 -0
  465. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/integration/configs/pi-acp.yaml +0 -0
  466. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/integration/deepagents_harness.py +0 -0
  467. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/integration/rubric_checks.py +0 -0
  468. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/integration/run.sh +0 -0
  469. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/integration/run_suite.py +0 -0
  470. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/integration/scenarios.py +0 -0
  471. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/integration/suites/release.yaml +0 -0
  472. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_acceptance_evidence.py +0 -0
  473. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_acceptance_live.py +0 -0
  474. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_acceptance_live_execution.py +0 -0
  475. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_acp_capability_advertising.py +0 -0
  476. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_acp_mcp_servers.py +0 -0
  477. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_acp_model_config_dispatch.py +0 -0
  478. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_acp_pinned_protocol_guard.py +0 -0
  479. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_acp_setup_failure_propagation.py +0 -0
  480. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_adapter_scripts.py +0 -0
  481. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_adapters.py +0 -0
  482. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_agent_cli.py +0 -0
  483. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_agent_env_resolution.py +0 -0
  484. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_agent_gemini_defaults.py +0 -0
  485. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_agent_idle_timeout_cli.py +0 -0
  486. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_agent_model_decouple.py +0 -0
  487. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_agent_registry.py +0 -0
  488. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_agent_router.py +0 -0
  489. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_agent_router_cli_e2e.py +0 -0
  490. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_agent_router_scaffold.py +0 -0
  491. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_agent_setup.py +0 -0
  492. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_agent_spec.py +0 -0
  493. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_agentcore_builder.py +0 -0
  494. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_agentcore_parallel.py +0 -0
  495. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_agentcore_reaper.py +0 -0
  496. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_agentcore_sandbox.py +0 -0
  497. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_agentcore_transport.py +0 -0
  498. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_api_error_capture.py +0 -0
  499. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_apple_container_sandbox.py +0 -0
  500. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_bare_model_provider.py +0 -0
  501. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_base_install_imports.py +0 -0
  502. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_bedrock_thinking.py +0 -0
  503. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_benchflow_experiment_review_validator.py +0 -0
  504. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_benchmark_repos_resolve_repo_path.py +0 -0
  505. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_branch.py +0 -0
  506. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_build_context_stage.py +0 -0
  507. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_build_review_pack.py +0 -0
  508. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_capture_trajectory.py +0 -0
  509. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_check_skillsbench_harbor_parity.py +0 -0
  510. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_clawsbench_slice.py +0 -0
  511. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_cli_adopt_aliases.py +0 -0
  512. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_cli_arg_validation.py +0 -0
  513. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_cli_daytona.py +0 -0
  514. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_cli_docs_drift.py +0 -0
  515. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_cli_edge_case_hardening.py +0 -0
  516. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_cli_hub_env.py +0 -0
  517. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_cli_live_progress.py +0 -0
  518. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_cli_misc.py +0 -0
  519. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_codex_review.py +0 -0
  520. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_codex_self_write_auth.py +0 -0
  521. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_config_override.py +0 -0
  522. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_config_redaction.py +0 -0
  523. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_connect_as_env.py +0 -0
  524. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_console_error_truncation.py +0 -0
  525. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_console_progress.py +0 -0
  526. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_continuallearningbench_adapter.py +0 -0
  527. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_dataset_registry.py +0 -0
  528. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_daytona_command_polling.py +0 -0
  529. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_daytona_dind_compose_up.py +0 -0
  530. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_daytona_download.py +0 -0
  531. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_daytona_litellm_runtime.py +0 -0
  532. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_daytona_poll_deadline.py +0 -0
  533. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_daytona_reap.py +0 -0
  534. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_deepagents_agent.py +0 -0
  535. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_diagnostics.py +0 -0
  536. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_docker_prune_scoping.py +0 -0
  537. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_docker_uploads.py +0 -0
  538. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_docs_examples.py +0 -0
  539. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_eng50_capabilities.py +0 -0
  540. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_env_registry.py +0 -0
  541. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_env_setup.py +0 -0
  542. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_environment_manifest_controls.py +0 -0
  543. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_eval_artifact_cli.py +0 -0
  544. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_eval_filters_applied.py +0 -0
  545. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_eval_lift.py +0 -0
  546. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_eval_sharding.py +0 -0
  547. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_eval_single_task_summary.py +0 -0
  548. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_eval_source_provenance.py +0 -0
  549. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_eval_worker_retry.py +0 -0
  550. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_eval_zero_task_guard.py +0 -0
  551. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_evaluation_environment_manifest.py +0 -0
  552. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_exclude_tasks.py +0 -0
  553. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_filter_credentialed_cells.py +0 -0
  554. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_harvey_lab_shim.py +0 -0
  555. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_hilbench_adapter.py +0 -0
  556. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_hosted_env.py +0 -0
  557. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_hosted_env_rollout_contract.py +0 -0
  558. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_hub_harbor_registry.py +0 -0
  559. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_inbound_adapter_manifest.py +0 -0
  560. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_inbound_adapters.py +0 -0
  561. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_integration_agent_judge.py +0 -0
  562. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_integration_check_results.py +0 -0
  563. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_integration_consistency.py +0 -0
  564. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_integration_matrix.py +0 -0
  565. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_integration_provider_selection.py +0 -0
  566. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_integration_run_suite.py +0 -0
  567. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_integration_suite.py +0 -0
  568. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_internet_policy.py +0 -0
  569. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_job.py +0 -0
  570. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_job_sequential_shared.py +0 -0
  571. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_job_sequential_shared_resume.py +0 -0
  572. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_judge_robustness.py +0 -0
  573. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_judge_symlink_ingestion.py +0 -0
  574. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_learner_skills.py +0 -0
  575. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_learner_skills_traversal.py +0 -0
  576. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_learner_store.py +0 -0
  577. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_learner_store_persistence.py +0 -0
  578. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_litellm_config.py +0 -0
  579. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_litellm_hardening.py +0 -0
  580. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_litellm_logging.py +0 -0
  581. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_litellm_model_via_env_generic.py +0 -0
  582. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_litellm_reasoning_passthrough.py +0 -0
  583. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_litellm_runtime.py +0 -0
  584. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_litellm_smoke.py +0 -0
  585. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_live_llm_trajectory.py +0 -0
  586. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_llm_judge.py +0 -0
  587. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_llm_judge_event_tags.py +0 -0
  588. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_llm_judge_verifier.py +0 -0
  589. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_loop_strategies.py +0 -0
  590. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_loop_summary.py +0 -0
  591. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_loop_sweep.py +0 -0
  592. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_memory_scorer.py +0 -0
  593. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_metrics.py +0 -0
  594. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_mle_bench_adapter.py +0 -0
  595. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_mock_openai_responses_server.py +0 -0
  596. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_monitor_scaffold.py +0 -0
  597. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_native_acp_usage.py +0 -0
  598. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_no_cross_provider_fallback.py +0 -0
  599. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_notification_order_real.py +0 -0
  600. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_opencode_family_proxy_tracking.py +0 -0
  601. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_oracle.py +0 -0
  602. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_oracle_chokepoint.py +0 -0
  603. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_paths_safe.py +0 -0
  604. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_paths_symlink_helpers.py +0 -0
  605. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_pi_acp_launcher.py +0 -0
  606. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_pi_acp_proxy_routing.py +0 -0
  607. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_process.py +0 -0
  608. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_project_skills_layout.py +0 -0
  609. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_provider_auth_detection.py +0 -0
  610. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_providers.py +0 -0
  611. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_publish_azure_blob.py +0 -0
  612. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_publish_huggingface.py +0 -0
  613. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_reexport.py +0 -0
  614. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_registry_invariants.py +0 -0
  615. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_release_hardening_r5.py +0 -0
  616. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_release_version.py +0 -0
  617. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_release_workflow_wiring.py +0 -0
  618. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_resolve_env_helpers.py +0 -0
  619. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_review_boundaries.py +0 -0
  620. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_review_rubric.py +0 -0
  621. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_review_runtime.py +0 -0
  622. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_reward_lenient.py +0 -0
  623. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_reward_node.py +0 -0
  624. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_reward_range.py +0 -0
  625. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_reward_unified_contract.py +0 -0
  626. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_rewards.py +0 -0
  627. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_rewards_jsonl.py +0 -0
  628. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_rollout_architecture.py +0 -0
  629. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_rollout_branch.py +0 -0
  630. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_rollout_config_path_coercion.py +0 -0
  631. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_rollout_environment.py +0 -0
  632. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_rollout_hard_deadline.py +0 -0
  633. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_rollout_import_no_side_effects.py +0 -0
  634. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_rollout_on_ask_user_wiring.py +0 -0
  635. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_rollout_planes_contract.py +0 -0
  636. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_rollout_probe_sandbox_health.py +0 -0
  637. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_rollout_session_factory_dispatch.py +0 -0
  638. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_rollout_setup_commands.py +0 -0
  639. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_rollout_upload.py +0 -0
  640. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_rubric_checks.py +0 -0
  641. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_rubric_config.py +0 -0
  642. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_runtime.py +0 -0
  643. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_runtime_capabilities.py +0 -0
  644. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_runtime_config_wired.py +0 -0
  645. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_runtime_live_sandbox.py +0 -0
  646. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_sandbox.py +0 -0
  647. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_sandbox_exec_secret_handling.py +0 -0
  648. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_sandbox_hardening.py +0 -0
  649. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_sandbox_isolation_copy_traversal.py +0 -0
  650. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_sandbox_live_process.py +0 -0
  651. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_sandbox_multi_service.py +0 -0
  652. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_sandbox_prebuilt_validation.py +0 -0
  653. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_sandbox_protocol.py +0 -0
  654. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_sandbox_provider_registry_drift.py +0 -0
  655. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_sandbox_setup.py +0 -0
  656. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_sandbox_snapshot_contract.py +0 -0
  657. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_sandbox_upload_symlink.py +0 -0
  658. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_sandbox_verifier_workspace.py +0 -0
  659. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_scene.py +0 -0
  660. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_scene_outbox_trial.py +0 -0
  661. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_scene_parallel_group.py +0 -0
  662. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_scene_result_aggregation.py +0 -0
  663. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_scoring.py +0 -0
  664. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_sdk_internals.py +0 -0
  665. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_sdk_lockdown.py +0 -0
  666. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_sdk_run_alias.py +0 -0
  667. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_sealed_channel_container.py +0 -0
  668. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_self_gen_cli.py +0 -0
  669. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_self_gen_export_error_channel.py +0 -0
  670. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_self_gen_export_failures.py +0 -0
  671. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_self_gen_orchestration.py +0 -0
  672. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_session_factory_runtime.py +0 -0
  673. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_session_request_permission_dispatch.py +0 -0
  674. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_skill_eval.py +0 -0
  675. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_skill_eval_dryrun.py +0 -0
  676. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_skill_eval_integration.py +0 -0
  677. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_skill_eval_sweep.py +0 -0
  678. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_skill_eval_traversal.py +0 -0
  679. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_skill_invocation_artifacts.py +0 -0
  680. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_skill_policy.py +0 -0
  681. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_skills.py +0 -0
  682. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_skills_dir_agent_home_link.py +0 -0
  683. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_skillsbench_conversion_conformance.py +0 -0
  684. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_skillsbench_harbor_run_suite.py +0 -0
  685. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_smoke.py +0 -0
  686. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_smoke_wiring.py +0 -0
  687. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_source_adapters.py +0 -0
  688. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_subscription_auth.py +0 -0
  689. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_task_check_eval_consistency.py +0 -0
  690. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_task_config.py +0 -0
  691. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_task_digest.py +0 -0
  692. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_task_document.py +0 -0
  693. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_task_download.py +0 -0
  694. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_task_export.py +0 -0
  695. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_task_output_format.py +0 -0
  696. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_task_package.py +0 -0
  697. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_task_runtime_primitive.py +0 -0
  698. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_tasks.py +0 -0
  699. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_token_usage_normalization.py +0 -0
  700. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_trace_import_cli.py +0 -0
  701. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_trace_task_gen_traversal.py +0 -0
  702. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_trace_to_task_evidence.py +0 -0
  703. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_traces_huggingface.py +0 -0
  704. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_traces_parsers.py +0 -0
  705. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_traces_task_gen.py +0 -0
  706. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_train_cli.py +0 -0
  707. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_train_mode_artifact_emission.py +0 -0
  708. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_train_trl_cli.py +0 -0
  709. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_traj_report.py +0 -0
  710. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_traj_staging_phases.py +0 -0
  711. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_traj_tui.py +0 -0
  712. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_traj_upload_cli.py +0 -0
  713. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_traj_upload_skill.py +0 -0
  714. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_traj_workspace.py +0 -0
  715. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_trajectory_integration.py +0 -0
  716. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_trajectory_streaming.py +0 -0
  717. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_trajectory_upload_layout.py +0 -0
  718. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_trajectory_upload_service.py +0 -0
  719. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_trial_agent_timeout_verify.py +0 -0
  720. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_trial_install_agent_timeout.py +0 -0
  721. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_trial_litellm_runtime.py +0 -0
  722. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_trl_integration.py +0 -0
  723. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_usage_litellm.py +0 -0
  724. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_usage_required.py +0 -0
  725. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_usage_tracking.py +0 -0
  726. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_user.py +0 -0
  727. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_v06_guard_ports.py +0 -0
  728. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_verifier_document.py +0 -0
  729. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_verifier_multi_container.py +0 -0
  730. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_verifier_output.py +0 -0
  731. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_verifier_output_freshness.py +0 -0
  732. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_verifier_strategies.py +0 -0
  733. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_verifier_wedge_retry.py +0 -0
  734. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_viewer_confirm.py +0 -0
  735. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_workflow_action_pinning.py +0 -0
  736. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/test_yaml_config.py +0 -0
  737. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/trajectories/__init__.py +0 -0
  738. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/trajectories/test_export.py +0 -0
  739. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/trajectories/test_export_adp.py +0 -0
  740. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/trajectories/test_export_atif.py +0 -0
  741. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/trajectories/test_export_common.py +0 -0
  742. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/trajectories/test_export_nan_handling.py +0 -0
  743. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/trajectories/test_export_prime_sft.py +0 -0
  744. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/trajectories/test_redaction.py +0 -0
  745. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/trajectories/test_step_granularity.py +0 -0
  746. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/trajectories/test_tree.py +0 -0
  747. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/trajectories/test_viewer_acp_renderer.py +0 -0
  748. {benchflow-0.7.6.dev2231 → benchflow-0.7.6.dev2235}/tests/trajectories/test_viewer_browser.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: benchflow
3
- Version: 0.7.6.dev2231
3
+ Version: 0.7.6.dev2235
4
4
  Summary: Multi-turn agent benchmarking with ACP — run any agent, any model, any provider.
5
5
  Project-URL: Homepage, https://github.com/benchflow-ai/benchflow
6
6
  Project-URL: Repository, https://github.com/benchflow-ai/benchflow
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "benchflow"
3
- version = "0.7.6.dev2231"
3
+ version = "0.7.6.dev2235"
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"
@@ -186,6 +186,8 @@ def _looks_like_infra_error(error: str) -> bool:
186
186
  # Predates the marker above and is kept for strings rebuilt
187
187
  # outside that boundary (e.g. a verifier error re-raised as text).
188
188
  "failed to get session command",
189
+ "failed to execute session command",
190
+ "command timed out after",
189
191
  "sandbox not found",
190
192
  "workspace not found",
191
193
  "api connection",
@@ -21,13 +21,13 @@ Does not own:
21
21
  import asyncio
22
22
  import contextlib
23
23
  import logging
24
- from datetime import UTC, datetime
25
24
  from pathlib import Path
26
25
 
27
26
  from benchflow.acp.client import ACPClient
28
27
  from benchflow.acp.container_transport import ContainerTransport
29
28
  from benchflow.acp.selection import selected_acp_transport
30
29
  from benchflow.acp.types import McpServerSpec
30
+ from benchflow.acp.watchdog import IdleWatchdog
31
31
  from benchflow.agents.protocol import ACPSessionAdapter
32
32
  from benchflow.agents.providers import (
33
33
  find_provider,
@@ -38,7 +38,6 @@ from benchflow.agents.registry import AGENTS, OPENCODE_PROXY_PROVIDER_ID
38
38
  from benchflow.diagnostics import (
39
39
  AgentPromptTimeoutDiagnostic,
40
40
  AgentPromptTimeoutError,
41
- IdleTimeoutDiagnostic,
42
41
  IdleTimeoutError,
43
42
  TransportClosedDiagnostic,
44
43
  TransportClosedError,
@@ -820,81 +819,29 @@ async def _prompt_with_idle_watchdog(
820
819
  timeout: int,
821
820
  idle_timeout: int,
822
821
  ):
823
- """Run acp_client.prompt() with both a wall-clock and an idle watchdog.
824
-
825
- The watchdog polls session.tool_calls every few seconds and aborts if no
826
- progress was made in idle_timeout. This catches agents that hung silently
827
- while the local process is still alive (no output to stdout, no tool calls
828
- appended).
829
- """
830
-
831
- def _activity_count() -> int:
832
- # Match the docstring contract: idle = no tool call AND no message
833
- # AND no thought. Sum all three so streamed text resets the timer.
834
- return (
835
- len(session.tool_calls)
836
- + len(session.message_chunks)
837
- + len(session.thought_chunks)
838
- )
839
-
822
+ """Run one ACP prompt with wall-clock and idle-watchdog budgets."""
840
823
  prompt_task = asyncio.create_task(acp_client.prompt(prompt))
841
- last_progress = asyncio.get_event_loop().time()
842
- last_activity_at = datetime.now(UTC)
843
- last_count = _activity_count()
844
- # poll_interval considers BOTH idle_timeout and wall-clock timeout so that
845
- # short overall budgets don't overshoot (e.g. timeout=30s with default
846
- # poll_interval=30s could overshoot 100%). Cap at 30s, floor at 1s.
847
- poll_interval = max(1, min(30, idle_timeout // 4, max(1, timeout // 4)))
848
- # deadline is loop-INVARIANT (fixed at loop start), NOT re-derived from
849
- # last_progress inside the loop. This is load-bearing: the idle branch below
850
- # resets last_progress while a tool call is in-flight, so re-deriving the
851
- # deadline from it would let an agent that emits a tool_call and then hangs
852
- # forever push the wall-clock backstop out indefinitely. Keep this fixed.
853
- deadline = last_progress + timeout
824
+ loop = asyncio.get_running_loop()
825
+ watchdog = IdleWatchdog.start(
826
+ session,
827
+ idle_timeout_sec=idle_timeout,
828
+ wall_timeout_sec=timeout,
829
+ now=loop.time(),
830
+ )
854
831
 
855
832
  try:
856
833
  while not prompt_task.done():
857
- await asyncio.sleep(poll_interval)
834
+ await asyncio.sleep(watchdog.poll_interval_sec)
858
835
  # Re-check done() after the sleep — the prompt may have completed
859
836
  # during the poll interval. Without this, we'd cancel an already-
860
837
  # completed task and discard a successful result.
861
838
  if prompt_task.done():
862
839
  break
863
- now = asyncio.get_event_loop().time()
864
- cur_count = _activity_count()
865
- if cur_count > last_count:
866
- last_progress = now
867
- last_activity_at = datetime.now(UTC)
868
- last_count = cur_count
869
- # An in-flight tool call means the agent is actively executing a tool
870
- # (e.g. a long build/test/solver shell command), not hung. Those tools
871
- # emit no ACP updates until they return, so a >idle_timeout run would
872
- # otherwise false-fire the watchdog and discard real work. Treat a
873
- # pending tool call as progress and defer to the wall-clock `timeout`
874
- # backstop below for a tool that never returns. A genuine model-side
875
- # hang has no pending tool call (the prior tool already completed via
876
- # tool_call_update), so it still trips the idle path.
877
- elif session.pending_tool_call_ids():
878
- last_progress = now
879
- last_activity_at = datetime.now(UTC)
880
- if now - last_progress >= idle_timeout:
881
- diag = IdleTimeoutDiagnostic(
882
- idle_timeout_sec=idle_timeout,
883
- idle_duration_sec=int(now - last_progress),
884
- wall_clock_elapsed_sec=int(now - (deadline - timeout)),
885
- n_tool_calls=len(session.tool_calls),
886
- n_message_chunks=len(session.message_chunks),
887
- n_thought_chunks=len(session.thought_chunks),
888
- last_activity_at=last_activity_at.isoformat(),
889
- )
890
- raise IdleTimeoutError(
891
- f"Agent idle for {idle_timeout}s with no new tool call, "
892
- f"message, or thought "
893
- f"(last activity {int(now - last_progress)}s ago, "
894
- f"{len(session.tool_calls)} tool calls so far)",
895
- diag,
896
- )
897
- if now > deadline:
840
+ now = loop.time()
841
+ watchdog.observe(session, now=now)
842
+ if watchdog.idle_expired(now):
843
+ raise watchdog.timeout_error(session, now=now)
844
+ if watchdog.wall_clock_expired(now):
898
845
  if await _cancel_and_drain_prompt_task(prompt_task):
899
846
  raise _agent_prompt_timeout_error(session, timeout)
900
847
  raise TimeoutError(
@@ -202,6 +202,11 @@ class ACPSession:
202
202
  self.thought_chunks: list[str] = []
203
203
  self.tool_calls: list[ToolCallRecord] = []
204
204
  self._tool_call_map: dict[str, ToolCallRecord] = {}
205
+ # Total update count is diagnostic. Per-call pending versions let the
206
+ # idle watchdog distinguish relevant streaming progress from repeated
207
+ # terminal updates for another call (PR #1066).
208
+ self.tool_call_update_count: int = 0
209
+ self._pending_tool_call_update_counts: dict[str, int] = {}
205
210
  # Distinct display titles across recorded tool calls, maintained
206
211
  # incrementally at record creation so the eval dashboard can detect
207
212
  # single-tool agents (prime-agent funnels everything through one
@@ -301,6 +306,20 @@ class ACPSession:
301
306
  if record.status in pending_statuses
302
307
  ]
303
308
 
309
+ def pending_tool_call_state(self) -> tuple[tuple[str, int], ...]:
310
+ """Return stable pending-call identities with progress versions."""
311
+ pending_statuses = {ToolCallStatus.PENDING, ToolCallStatus.IN_PROGRESS}
312
+ return tuple(
313
+ sorted(
314
+ (
315
+ record.tool_call_id,
316
+ self._pending_tool_call_update_counts.get(record.tool_call_id, 0),
317
+ )
318
+ for record in self.tool_calls
319
+ if record.status in pending_statuses
320
+ )
321
+ )
322
+
304
323
  def record_agent_timeout(
305
324
  self,
306
325
  *,
@@ -401,6 +420,7 @@ class ACPSession:
401
420
  self._record_tool_call(record)
402
421
 
403
422
  elif update_type == "tool_call_update":
423
+ self.tool_call_update_count += 1
404
424
  tc_id = update.get("toolCallId", "")
405
425
  record = self._tool_call_map.get(tc_id)
406
426
  if not record:
@@ -420,6 +440,10 @@ class ACPSession:
420
440
  status = ToolCallStatus.IN_PROGRESS
421
441
  content = update.get("content")
422
442
  record.update_status(status, content)
443
+ if status in (ToolCallStatus.PENDING, ToolCallStatus.IN_PROGRESS):
444
+ self._pending_tool_call_update_counts[tc_id] = (
445
+ self._pending_tool_call_update_counts.get(tc_id, 0) + 1
446
+ )
423
447
  # Canonicalize legacy OpenHands invoke_skill calls using the same
424
448
  # classifier the rescan path uses. Only upgrade to "skill"; never
425
449
  # downgrade, and never reclassify a tool that already has a real
@@ -0,0 +1,249 @@
1
+ """Idle-watchdog state and pending-tool grace policy for ACP prompts."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from collections.abc import Sized
6
+ from dataclasses import dataclass
7
+ from datetime import UTC, datetime
8
+ from typing import Protocol
9
+
10
+ from benchflow.diagnostics import IdleTimeoutDiagnostic, IdleTimeoutError
11
+
12
+ # A pending tool call defers the idle watchdog for at most this many idle
13
+ # budgets while staying silent. Streaming updates restart the grace for their
14
+ # own pending call; unrelated or terminal updates do not.
15
+ PENDING_GRACE_MULTIPLIER = 3
16
+
17
+
18
+ class WatchdogSession(Protocol):
19
+ """The small ACPSession surface consumed by the idle watchdog."""
20
+
21
+ tool_calls: Sized
22
+ message_chunks: Sized
23
+ thought_chunks: Sized
24
+ tool_call_update_count: int
25
+
26
+ def pending_tool_call_state(self) -> tuple[tuple[str, int], ...]: ...
27
+
28
+
29
+ def _activity_count(session: WatchdogSession) -> int:
30
+ return (
31
+ len(session.tool_calls)
32
+ + len(session.message_chunks)
33
+ + len(session.thought_chunks)
34
+ )
35
+
36
+
37
+ @dataclass
38
+ class IdleWatchdog:
39
+ """Track prompt activity and enforce bounded pending-tool deferral."""
40
+
41
+ idle_timeout_sec: int
42
+ wall_timeout_sec: int
43
+ started_at: float
44
+ last_progress_at: float
45
+ last_activity_at: datetime
46
+ last_activity_count: int
47
+ pending_state: tuple[tuple[str, int], ...]
48
+ pending_last_progress_at: dict[str, float]
49
+ pending_last_update_at: dict[str, datetime]
50
+ pending_set_last_changed_at: datetime | None
51
+
52
+ @classmethod
53
+ def start(
54
+ cls,
55
+ session: WatchdogSession,
56
+ *,
57
+ idle_timeout_sec: int,
58
+ wall_timeout_sec: int,
59
+ now: float,
60
+ wall_now: datetime | None = None,
61
+ ) -> IdleWatchdog:
62
+ """Create a watchdog snapshot at prompt start."""
63
+ observed_at = wall_now or datetime.now(UTC)
64
+ pending_state = session.pending_tool_call_state()
65
+ return cls(
66
+ idle_timeout_sec=idle_timeout_sec,
67
+ wall_timeout_sec=wall_timeout_sec,
68
+ started_at=now,
69
+ last_progress_at=now,
70
+ last_activity_at=observed_at,
71
+ last_activity_count=_activity_count(session),
72
+ pending_state=pending_state,
73
+ pending_last_progress_at={call_id: now for call_id, _ in pending_state},
74
+ pending_last_update_at={},
75
+ pending_set_last_changed_at=observed_at if pending_state else None,
76
+ )
77
+
78
+ @property
79
+ def pending_grace_sec(self) -> int:
80
+ return self.idle_timeout_sec * PENDING_GRACE_MULTIPLIER
81
+
82
+ @property
83
+ def poll_interval_sec(self) -> int:
84
+ return max(
85
+ 1,
86
+ min(
87
+ 30,
88
+ self.idle_timeout_sec // 4,
89
+ max(1, self.wall_timeout_sec // 4),
90
+ ),
91
+ )
92
+
93
+ @property
94
+ def deadline(self) -> float:
95
+ return self.started_at + self.wall_timeout_sec
96
+
97
+ @property
98
+ def pending_ids(self) -> tuple[str, ...]:
99
+ return tuple(call_id for call_id, _version in self.pending_state)
100
+
101
+ @property
102
+ def n_pending_tool_updates(self) -> int:
103
+ return sum(version for _call_id, version in self.pending_state)
104
+
105
+ def observe(
106
+ self,
107
+ session: WatchdogSession,
108
+ *,
109
+ now: float,
110
+ wall_now: datetime | None = None,
111
+ ) -> None:
112
+ """Observe one poll and advance only the relevant grace clocks."""
113
+ observed_at = wall_now or datetime.now(UTC)
114
+ current_state = session.pending_tool_call_state()
115
+ previous_versions = dict(self.pending_state)
116
+ current_ids = tuple(call_id for call_id, _version in current_state)
117
+
118
+ if current_ids != self.pending_ids:
119
+ self.pending_set_last_changed_at = observed_at
120
+
121
+ for call_id, version in current_state:
122
+ if call_id not in previous_versions:
123
+ self.pending_last_progress_at[call_id] = now
124
+ if version > previous_versions.get(call_id, 0):
125
+ self.pending_last_progress_at[call_id] = now
126
+ self.pending_last_update_at[call_id] = observed_at
127
+
128
+ current_id_set = set(current_ids)
129
+ self.pending_last_progress_at = {
130
+ call_id: progress_at
131
+ for call_id, progress_at in self.pending_last_progress_at.items()
132
+ if call_id in current_id_set
133
+ }
134
+ self.pending_last_update_at = {
135
+ call_id: update_at
136
+ for call_id, update_at in self.pending_last_update_at.items()
137
+ if call_id in current_id_set
138
+ }
139
+
140
+ self.pending_state = current_state
141
+ current_activity_count = _activity_count(session)
142
+ if current_activity_count > self.last_activity_count:
143
+ self.last_progress_at = now
144
+ self.last_activity_at = observed_at
145
+ self.last_activity_count = current_activity_count
146
+ elif current_ids and not self.expired_pending_ids(now):
147
+ # Silent tools may legitimately run longer than idle_timeout. The
148
+ # grace, not unrelated session noise, owns this deferral.
149
+ self.last_progress_at = now
150
+ self.last_activity_at = observed_at
151
+
152
+ def expired_pending_ids(self, now: float) -> tuple[str, ...]:
153
+ """Pending calls whose own relevant progress grace has expired."""
154
+ return tuple(
155
+ call_id
156
+ for call_id in self.pending_ids
157
+ if now - self.pending_last_progress_at[call_id] >= self.pending_grace_sec
158
+ )
159
+
160
+ def idle_expired(self, now: float) -> bool:
161
+ return bool(self.expired_pending_ids(now)) or (
162
+ now - self.last_progress_at >= self.idle_timeout_sec
163
+ )
164
+
165
+ def wall_clock_expired(self, now: float) -> bool:
166
+ return now > self.deadline
167
+
168
+ def timeout_error(
169
+ self,
170
+ session: WatchdogSession,
171
+ *,
172
+ now: float,
173
+ wall_now: datetime | None = None,
174
+ ) -> IdleTimeoutError:
175
+ """Build a truthful idle error for generic or pending-grace expiry."""
176
+ fired_at = wall_now or datetime.now(UTC)
177
+ pending_ids = list(self.pending_ids)
178
+ expired_pending_ids = list(self.expired_pending_ids(now))
179
+ pending_versions = dict(self.pending_state)
180
+ n_expired_pending_updates = sum(
181
+ pending_versions[call_id] for call_id in expired_pending_ids
182
+ )
183
+ idle_duration = (
184
+ max(
185
+ now - self.pending_last_progress_at[call_id]
186
+ for call_id in expired_pending_ids
187
+ )
188
+ if expired_pending_ids
189
+ else now - self.last_progress_at
190
+ )
191
+ expired_update_times = [
192
+ self.pending_last_update_at[call_id]
193
+ for call_id in expired_pending_ids
194
+ if call_id in self.pending_last_update_at
195
+ ]
196
+ last_expired_update_at = (
197
+ max(expired_update_times) if expired_update_times else None
198
+ )
199
+ diagnostic = IdleTimeoutDiagnostic(
200
+ idle_timeout_sec=self.idle_timeout_sec,
201
+ idle_duration_sec=int(idle_duration),
202
+ wall_clock_elapsed_sec=int(now - self.started_at),
203
+ n_tool_calls=len(session.tool_calls),
204
+ n_message_chunks=len(session.message_chunks),
205
+ n_thought_chunks=len(session.thought_chunks),
206
+ last_activity_at=self.last_activity_at.isoformat(),
207
+ pending_tool_call_ids=pending_ids,
208
+ expired_pending_tool_call_ids=expired_pending_ids,
209
+ pending_grace_sec=self.pending_grace_sec,
210
+ pending_set_last_changed_at=(
211
+ self.pending_set_last_changed_at.isoformat()
212
+ if self.pending_set_last_changed_at is not None
213
+ else None
214
+ ),
215
+ last_tool_update_at=(
216
+ last_expired_update_at.isoformat()
217
+ if last_expired_update_at is not None
218
+ else None
219
+ ),
220
+ n_tool_call_updates=session.tool_call_update_count,
221
+ n_pending_tool_call_updates=self.n_pending_tool_updates,
222
+ n_expired_pending_tool_call_updates=n_expired_pending_updates,
223
+ )
224
+ if expired_pending_ids:
225
+ set_age = _age(fired_at, self.pending_set_last_changed_at)
226
+ update_age = _age(fired_at, last_expired_update_at)
227
+ return IdleTimeoutError(
228
+ f"Agent idle for {self.idle_timeout_sec}s: "
229
+ f"{len(expired_pending_ids)} pending tool call(s) exceeded the "
230
+ f"{self.pending_grace_sec}s pending grace "
231
+ f"({', '.join(expired_pending_ids)}; pending set last changed "
232
+ f"{set_age}, last pending-call update {update_age}, "
233
+ f"{n_expired_pending_updates} relevant updates seen, "
234
+ f"{len(session.tool_calls)} tool calls so far)",
235
+ diagnostic,
236
+ )
237
+ return IdleTimeoutError(
238
+ f"Agent idle for {self.idle_timeout_sec}s with no new tool call, "
239
+ f"message, or thought "
240
+ f"(last activity {int(now - self.last_progress_at)}s ago, "
241
+ f"{len(session.tool_calls)} tool calls so far)",
242
+ diagnostic,
243
+ )
244
+
245
+
246
+ def _age(now: datetime, then: datetime | None) -> str:
247
+ if then is None:
248
+ return "never"
249
+ return f"{int((now - then).total_seconds())}s ago"
@@ -132,18 +132,37 @@ class IdleTimeoutDiagnostic(Diagnostic):
132
132
  n_message_chunks: int = 0
133
133
  n_thought_chunks: int = 0
134
134
  last_activity_at: str = ""
135
+ # Pending-grace truth (PR #1066): when the fire happened because a
136
+ # pending tool call exhausted the grace window, these say so instead of
137
+ # letting the fields above imply pure silence. Additive — older
138
+ # result.json dicts round-trip through format_issue_from_dict with the
139
+ # defaults below.
140
+ pending_tool_call_ids: list[str] = field(default_factory=list)
141
+ expired_pending_tool_call_ids: list[str] = field(default_factory=list)
142
+ pending_grace_sec: int | None = None
143
+ pending_set_last_changed_at: str | None = None
144
+ last_tool_update_at: str | None = None
145
+ n_tool_call_updates: int = 0
146
+ n_pending_tool_call_updates: int = 0
147
+ n_expired_pending_tool_call_updates: int = 0
135
148
 
136
149
  field: ClassVar[str] = "idle_timeout_info"
137
150
  category: ClassVar[str | None] = "idle_timeout"
138
151
  summary_description: ClassVar[str] = "hit idle timeout"
139
152
 
140
153
  def format_issue(self, task_name: str) -> str:
141
- return (
154
+ line = (
142
155
  f"{task_name}: idle timeout after "
143
156
  f"{self.idle_duration_sec}s idle "
144
157
  f"({self.n_tool_calls} tool calls, "
145
158
  f"{self.wall_clock_elapsed_sec}s wall)"
146
159
  )
160
+ if self.pending_tool_call_ids:
161
+ line += (
162
+ f" — {len(self.pending_tool_call_ids)} pending tool call(s) "
163
+ f"exceeded the {self.pending_grace_sec}s pending grace"
164
+ )
165
+ return line
147
166
 
148
167
 
149
168
  @dataclass
@@ -1084,31 +1084,60 @@ class Evaluation:
1084
1084
  def _get_completed_tasks(self) -> dict[str, dict]:
1085
1085
  """Load tasks that already have results with rewards or verifier errors.
1086
1086
 
1087
+ Scoreless results whose verifier error is infra-retryable (per
1088
+ ``RetryConfig.should_retry_verifier_error``) are not reused: the
1089
+ verifier never scored the frozen workspace, so the task re-runs.
1090
+
1087
1091
  Scoped to the current job directory (``_jobs_dir / _job_name``) to
1088
- prevent cross-job contamination. When multiple result.json files
1089
- exist for the same task (retry artifacts), the newest by mtime wins.
1092
+ prevent cross-job contamination. When multiple result.json files exist
1093
+ for the same task (retry artifacts), a scored result always wins over
1094
+ a scoreless verifier error; otherwise the newest artifact wins.
1090
1095
 
1091
1096
  Guards ENG-160: orphan retry artifacts no longer pollute resume.
1092
1097
  """
1093
1098
  job_dir = self._jobs_dir / self._job_name
1094
1099
  if not job_dir.exists():
1095
1100
  return {}
1096
- # Collect every result keyed by (task_name) → keep newest by mtime.
1097
- best: dict[str, tuple[float, dict]] = {}
1101
+ # A completed score is durable evidence and must not be displaced by a
1102
+ # newer scoreless retry artifact. Within the same scored/unscored tier,
1103
+ # prefer recency and use the path as a deterministic tie-breaker.
1104
+ best: dict[str, tuple[tuple[bool, float, str], dict]] = {}
1098
1105
  for rfile in job_dir.rglob("result.json"):
1099
1106
  try:
1100
1107
  r = json.loads(rfile.read_text())
1101
1108
  task = r["task_name"]
1102
1109
  if r.get("rewards") is not None or r.get("verifier_error"):
1103
- mtime = rfile.stat().st_mtime
1110
+ rank = (
1111
+ r.get("rewards") is not None,
1112
+ rfile.stat().st_mtime,
1113
+ str(rfile),
1114
+ )
1104
1115
  prev = best.get(task)
1105
- if prev is None or (mtime, str(rfile)) >= (prev[0], ""):
1106
- best[task] = (mtime, r)
1116
+ if prev is None or rank >= prev[0]:
1117
+ best[task] = (rank, r)
1107
1118
  except Exception as e:
1108
1119
  logger.debug(f"Skipping corrupt result file {rfile}: {e}")
1109
1120
  completed: dict[str, dict] = {}
1110
- for task, (_mt, r) in best.items():
1121
+ # Re-running an errored task is only safe when rollouts are
1122
+ # independent. A sequential-shared job advances one persisted learner
1123
+ # state in task order, so replaying an earlier task after later tasks
1124
+ # committed their skills would corrupt the learning curve; there the
1125
+ # errored result stays reused, matching the pre-existing behavior.
1126
+ rerun_ok = self._config.job_mode != "sequential-shared"
1127
+ for task, (_rank, r) in best.items():
1111
1128
  if r.get("verifier_error"):
1129
+ # A scoreless result whose verifier error is infra-retryable
1130
+ # (same taxonomy as the within-run retry) records no signal
1131
+ # about the task; reusing it pins a lost score forever.
1132
+ retryable = self._config.retry.should_retry_verifier_error(
1133
+ r["verifier_error"]
1134
+ )
1135
+ if rerun_ok and r.get("rewards") is None and retryable:
1136
+ logger.info(
1137
+ f"Re-running verifier-errored task on resume: {task} "
1138
+ f"({truncate_end(r['verifier_error'], 80)})"
1139
+ )
1140
+ continue
1112
1141
  logger.info(
1113
1142
  f"Reusing completed verifier-errored task on resume: {task} "
1114
1143
  f"({truncate_end(r['verifier_error'], 80)})"