benchflow 0.7.6.dev2233__tar.gz → 0.7.6.dev2248__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 (750) hide show
  1. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/PKG-INFO +1 -1
  2. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/pyproject.toml +1 -1
  3. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/acp/runtime.py +27 -69
  4. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/acp/session.py +24 -0
  5. benchflow-0.7.6.dev2248/src/benchflow/acp/watchdog.py +249 -0
  6. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/agents/registry.py +5 -1
  7. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/diagnostics.py +20 -1
  8. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/providers/litellm_config.py +3 -0
  9. benchflow-0.7.6.dev2248/src/benchflow/providers/litellm_gemini_passthrough_patch.py +116 -0
  10. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/providers/litellm_runtime.py +29 -3
  11. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_acp.py +254 -9
  12. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_agent_gemini_defaults.py +9 -0
  13. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_litellm_config.py +21 -0
  14. benchflow-0.7.6.dev2248/tests/test_litellm_gemini_passthrough_patch.py +63 -0
  15. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_litellm_hardening.py +9 -0
  16. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_litellm_runtime.py +12 -4
  17. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/.gitignore +0 -0
  18. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/CHANGELOG.md +0 -0
  19. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/LICENSE +0 -0
  20. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/README.md +0 -0
  21. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/__init__.py +0 -0
  22. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/_dotenv.py +0 -0
  23. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/_paths.py +0 -0
  24. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/_run.py +0 -0
  25. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/_types.py +0 -0
  26. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/_utils/__init__.py +0 -0
  27. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/_utils/benchmark_repos.py +0 -0
  28. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/_utils/build_context_stage.py +0 -0
  29. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/_utils/config.py +0 -0
  30. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/_utils/config_override.py +0 -0
  31. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/_utils/content_address.py +0 -0
  32. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/_utils/dataset_registry.py +0 -0
  33. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/_utils/env_registry.py +0 -0
  34. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/_utils/evaluation_results.py +0 -0
  35. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/_utils/hf_datasets.py +0 -0
  36. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/_utils/json_safe.py +0 -0
  37. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/_utils/learner_memory.py +0 -0
  38. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/_utils/live_activity.py +0 -0
  39. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/_utils/result_metadata.py +0 -0
  40. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/_utils/reward_events.py +0 -0
  41. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/_utils/scoring.py +0 -0
  42. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/_utils/source_provenance.py +0 -0
  43. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/_utils/task_authoring/__init__.py +0 -0
  44. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/_utils/task_authoring/_evidence_paths.py +0 -0
  45. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/_utils/task_authoring/acceptance_evidence.py +0 -0
  46. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/_utils/task_authoring/scaffolding.py +0 -0
  47. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/_utils/task_authoring/structural_checks.py +0 -0
  48. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/_utils/text.py +0 -0
  49. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/_utils/yaml_loader.py +0 -0
  50. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/acp/__init__.py +0 -0
  51. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/acp/client.py +0 -0
  52. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/acp/container_transport.py +0 -0
  53. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/acp/selection.py +0 -0
  54. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/acp/transport.py +0 -0
  55. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/acp/types.py +0 -0
  56. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/adapters/__init__.py +0 -0
  57. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/adapters/_toolathlon.py +0 -0
  58. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/adapters/_toolathlon_container.py +0 -0
  59. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/adapters/_toolathlon_fake_mail.py +0 -0
  60. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/adapters/_toolathlon_poste_users.tsv +0 -0
  61. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/adapters/_toolathlon_services.py +0 -0
  62. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/adapters/harbor.py +0 -0
  63. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/adapters/inbound.py +0 -0
  64. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/adapters/inspect_ai.py +0 -0
  65. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/adapters/ors.py +0 -0
  66. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/adapters/resources/__init__.py +0 -0
  67. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/adapters/resources/mcp_atlas_bridge.py +0 -0
  68. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/adapters/resources/mcp_atlas_judge.py +0 -0
  69. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/adapters/source.py +0 -0
  70. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/agent_router.py +0 -0
  71. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/agent_router_guide.py +0 -0
  72. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/agent_router_parity.py +0 -0
  73. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/agent_router_scaffold.py +0 -0
  74. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/agents/__init__.py +0 -0
  75. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/agents/codex_config.py +0 -0
  76. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/agents/credentials.py +0 -0
  77. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/agents/deepagents_acp_shim.py +0 -0
  78. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/agents/env.py +0 -0
  79. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/agents/errors.py +0 -0
  80. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/agents/harvey_lab_acp_shim.py +0 -0
  81. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/agents/install.py +0 -0
  82. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/agents/manifest.py +0 -0
  83. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/agents/openclaw_acp_shim.py +0 -0
  84. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/agents/pi_acp_launcher.py +0 -0
  85. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/agents/protocol.py +0 -0
  86. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/agents/providers.py +0 -0
  87. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/agents/remote_manifests.py +0 -0
  88. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/branch.py +0 -0
  89. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/cli/__init__.py +0 -0
  90. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/cli/_failure_evidence.py +0 -0
  91. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/cli/_hosted_env.py +0 -0
  92. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/cli/_live_progress.py +0 -0
  93. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/cli/_options.py +0 -0
  94. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/cli/_shared.py +0 -0
  95. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/cli/_traj_tui.py +0 -0
  96. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/cli/_traj_upload_ui.py +0 -0
  97. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/cli/adopt.py +0 -0
  98. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/cli/agent.py +0 -0
  99. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/cli/continue_cmd.py +0 -0
  100. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/cli/environment.py +0 -0
  101. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/cli/eval_artifacts.py +0 -0
  102. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/cli/eval_lift.py +0 -0
  103. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/cli/hub.py +0 -0
  104. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/cli/main.py +0 -0
  105. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/cli/monitor.py +0 -0
  106. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/cli/review.py +0 -0
  107. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/cli/sandbox.py +0 -0
  108. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/cli/skills.py +0 -0
  109. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/cli/tasks.py +0 -0
  110. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/cli/trace_import.py +0 -0
  111. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/cli/train.py +0 -0
  112. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/cli/traj.py +0 -0
  113. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/continue_run/__init__.py +0 -0
  114. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/continue_run/batch.py +0 -0
  115. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/continue_run/orchestrator.py +0 -0
  116. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/continue_run/replay_proxy.py +0 -0
  117. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/continue_run/run_folder.py +0 -0
  118. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/continue_run/sandbox_proxy.py +0 -0
  119. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/contracts/__init__.py +0 -0
  120. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/contracts/planes.py +0 -0
  121. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/contracts/user.py +0 -0
  122. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/demo_task/environment/Dockerfile +0 -0
  123. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/demo_task/instruction.md +0 -0
  124. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/demo_task/task.md +0 -0
  125. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/demo_task/task.toml +0 -0
  126. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/demo_task/tests/test.sh +0 -0
  127. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/environment/__init__.py +0 -0
  128. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/environment/_registry/env0@outage.toml +0 -0
  129. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/environment/_registry/env0@prod.toml +0 -0
  130. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/environment/manifest.py +0 -0
  131. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/environment/manifest_env.py +0 -0
  132. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/environment/protocol.py +0 -0
  133. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/environment/readiness.py +0 -0
  134. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/eval_artifacts.py +0 -0
  135. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/eval_lift.py +0 -0
  136. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/eval_plan.py +0 -0
  137. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/eval_sharding.py +0 -0
  138. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/eval_worker.py +0 -0
  139. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/evaluation.py +0 -0
  140. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/experimental/__init__.py +0 -0
  141. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/experimental/mcp/__init__.py +0 -0
  142. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/experimental/mcp/hooks.py +0 -0
  143. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/experimental/mcp/reviewer_server.py +0 -0
  144. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/hosted_env.py +0 -0
  145. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/hub/__init__.py +0 -0
  146. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/hub/harbor_registry.py +0 -0
  147. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/integrations/__init__.py +0 -0
  148. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/integrations/trl/__init__.py +0 -0
  149. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/integrations/trl/spec.py +0 -0
  150. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/learner_skills.py +0 -0
  151. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/learner_store.py +0 -0
  152. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/loop_strategies.py +0 -0
  153. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/loop_sweep.py +0 -0
  154. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/metrics.py +0 -0
  155. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/models.py +0 -0
  156. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/monitor.py +0 -0
  157. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/providers/__init__.py +0 -0
  158. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/providers/litellm_bedrock_patch.py +0 -0
  159. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/providers/litellm_bedrock_preflight.py +0 -0
  160. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/providers/litellm_logging.py +0 -0
  161. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/providers/runtime.py +0 -0
  162. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/publish/__init__.py +0 -0
  163. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/publish/_progress.py +0 -0
  164. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/publish/azure_blob.py +0 -0
  165. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/publish/broker.py +0 -0
  166. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/publish/huggingface.py +0 -0
  167. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/publish/redact.py +0 -0
  168. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/publish/traj_capture.py +0 -0
  169. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/publish/traj_report.py +0 -0
  170. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/py.typed +0 -0
  171. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/review/__init__.py +0 -0
  172. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/review/config.py +0 -0
  173. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/review/default-rubric.json +0 -0
  174. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/review/prompts.py +0 -0
  175. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/review/runner.py +0 -0
  176. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/review/scoring.py +0 -0
  177. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/review/wrapper.py +0 -0
  178. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/rewards/README.md +0 -0
  179. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/rewards/__init__.py +0 -0
  180. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/rewards/builtins.py +0 -0
  181. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/rewards/events.py +0 -0
  182. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/rewards/file_readers.py +0 -0
  183. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/rewards/llm.py +0 -0
  184. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/rewards/memory_scorer.py +0 -0
  185. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/rewards/node.py +0 -0
  186. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/rewards/protocol.py +0 -0
  187. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/rewards/rubric.py +0 -0
  188. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/rewards/rubric_config.py +0 -0
  189. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/rewards/validation.py +0 -0
  190. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/rollout/__init__.py +0 -0
  191. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/rollout/_config.py +0 -0
  192. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/rollout/_deadline.py +0 -0
  193. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/rollout/_results.py +0 -0
  194. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/rollout/_setup.py +0 -0
  195. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/rollout/_skills.py +0 -0
  196. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/rollout/_usage.py +0 -0
  197. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/rollout/_user_loop.py +0 -0
  198. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/rollout/session_factory_runtime.py +0 -0
  199. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/rollout/task_runtime.py +0 -0
  200. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/rollout_branch.py +0 -0
  201. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/rollout_planes.py +0 -0
  202. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/runtime.py +0 -0
  203. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/sandbox/__init__.py +0 -0
  204. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/sandbox/_base.py +0 -0
  205. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/sandbox/_cache_reclaim.py +0 -0
  206. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/sandbox/_compose.py +0 -0
  207. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/sandbox/_compose_files/docker-compose-base.yaml +0 -0
  208. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/sandbox/_compose_files/docker-compose-build.yaml +0 -0
  209. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/sandbox/_compose_files/docker-compose-no-network.yaml +0 -0
  210. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/sandbox/_compose_files/docker-compose-prebuilt.yaml +0 -0
  211. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/sandbox/_sdk_ops.py +0 -0
  212. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/sandbox/agentcore.py +0 -0
  213. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/sandbox/agentcore_builder.py +0 -0
  214. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/sandbox/agentcore_image.py +0 -0
  215. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/sandbox/agentcore_provisioning.py +0 -0
  216. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/sandbox/agentcore_reaper.py +0 -0
  217. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/sandbox/agentcore_sealed.py +0 -0
  218. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/sandbox/apple_container.py +0 -0
  219. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/sandbox/daytona.py +0 -0
  220. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/sandbox/daytona_dind.py +0 -0
  221. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/sandbox/daytona_pty.py +0 -0
  222. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/sandbox/daytona_reaper.py +0 -0
  223. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/sandbox/daytona_strategies.py +0 -0
  224. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/sandbox/docker.py +0 -0
  225. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/sandbox/lockdown.py +0 -0
  226. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/sandbox/metadata.py +0 -0
  227. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/sandbox/modal_impl.py +0 -0
  228. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/sandbox/process/__init__.py +0 -0
  229. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/sandbox/process/_base.py +0 -0
  230. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/sandbox/process/agentcore.py +0 -0
  231. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/sandbox/process/apple.py +0 -0
  232. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/sandbox/process/daytona.py +0 -0
  233. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/sandbox/process/docker.py +0 -0
  234. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/sandbox/protocol.py +0 -0
  235. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/sandbox/providers.py +0 -0
  236. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/sandbox/services.py +0 -0
  237. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/sandbox/setup.py +0 -0
  238. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/sandbox/snapshot.py +0 -0
  239. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/sandbox/user.py +0 -0
  240. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/scenes.py +0 -0
  241. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/sdk.py +0 -0
  242. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/self_gen.py +0 -0
  243. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/skill_eval/__init__.py +0 -0
  244. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/skill_eval/_core.py +0 -0
  245. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/skill_eval/gepa_export.py +0 -0
  246. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/skill_eval/schema.py +0 -0
  247. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/skill_policy.py +0 -0
  248. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/skills.py +0 -0
  249. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/task/__init__.py +0 -0
  250. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/task/_document_evidence.py +0 -0
  251. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/task/_document_normalize.py +0 -0
  252. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/task/_document_parse.py +0 -0
  253. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/task/_document_profiles.py +0 -0
  254. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/task/acceptance_live.py +0 -0
  255. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/task/acceptance_live_model.py +0 -0
  256. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/task/acceptance_live_report.py +0 -0
  257. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/task/acceptance_live_validation.py +0 -0
  258. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/task/config.py +0 -0
  259. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/task/discovery.py +0 -0
  260. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/task/document.py +0 -0
  261. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/task/env.py +0 -0
  262. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/task/export.py +0 -0
  263. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/task/imports.py +0 -0
  264. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/task/output_format.py +0 -0
  265. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/task/package.py +0 -0
  266. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/task/paths.py +0 -0
  267. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/task/prompts.py +0 -0
  268. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/task/runtime_capabilities.py +0 -0
  269. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/task/runtime_view.py +0 -0
  270. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/task/task.py +0 -0
  271. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/task/verifier.py +0 -0
  272. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/task/verifier_core.py +0 -0
  273. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/task/verifier_document.py +0 -0
  274. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/task/verifier_errors.py +0 -0
  275. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/task/verifier_judge_inputs.py +0 -0
  276. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/task/verifier_ors_episode.py +0 -0
  277. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/task/verifier_reward_kit.py +0 -0
  278. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/task/verifier_scan.py +0 -0
  279. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/task/verifier_script_strategy.py +0 -0
  280. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/templates/__init__.py +0 -0
  281. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/templates/judge.py.tmpl +0 -0
  282. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/templates/test.sh.tmpl +0 -0
  283. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/traces/__init__.py +0 -0
  284. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/traces/huggingface.py +0 -0
  285. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/traces/local.py +0 -0
  286. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/traces/models.py +0 -0
  287. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/traces/parsers.py +0 -0
  288. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/traces/task_gen.py +0 -0
  289. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/training/__init__.py +0 -0
  290. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/training/backends/__init__.py +0 -0
  291. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/training/backends/prime_rl.py +0 -0
  292. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/training/run_manifest.py +0 -0
  293. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/trajectories/__init__.py +0 -0
  294. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/trajectories/_capture.py +0 -0
  295. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/trajectories/_export_common.py +0 -0
  296. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/trajectories/_llm_capture.py +0 -0
  297. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/trajectories/call_purpose.py +0 -0
  298. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/trajectories/export.py +0 -0
  299. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/trajectories/export_adp.py +0 -0
  300. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/trajectories/export_atif.py +0 -0
  301. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/trajectories/export_prime_sft.py +0 -0
  302. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/trajectories/export_trl_sft.py +0 -0
  303. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/trajectories/metrics.py +0 -0
  304. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/trajectories/results.py +0 -0
  305. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/trajectories/sessions.py +0 -0
  306. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/trajectories/tree.py +0 -0
  307. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/trajectories/trl_sft_tokenization.py +0 -0
  308. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/trajectories/types.py +0 -0
  309. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/trajectories/viewer/__init__.py +0 -0
  310. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/trajectories/viewer/__main__.py +0 -0
  311. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/trajectories/viewer/assets/boot.js +0 -0
  312. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/trajectories/viewer/assets/catalog.js +0 -0
  313. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/trajectories/viewer/assets/detail.js +0 -0
  314. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/trajectories/viewer/assets/fonts/OFL-google-sans-code.txt +0 -0
  315. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/trajectories/viewer/assets/fonts/google-sans-code-400-latin.woff2 +0 -0
  316. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/trajectories/viewer/assets/fonts/google-sans-code-600-latin.woff2 +0 -0
  317. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/trajectories/viewer/assets/template.html +0 -0
  318. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/trajectories/viewer/assets/theme.css +0 -0
  319. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/trajectories/viewer/assets/viewer.css +0 -0
  320. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/trajectories/viewer/assets/viewer.js +0 -0
  321. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/trajectories/viewer/catalog.py +0 -0
  322. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/trajectories/viewer/legacy.py +0 -0
  323. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/trajectories/viewer/models.py +0 -0
  324. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/trajectories/viewer/payload.py +0 -0
  325. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/trajectories/viewer/render.py +0 -0
  326. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/trajectories/viewer/server.py +0 -0
  327. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/trajectories/viewer/sources.py +0 -0
  328. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/src/benchflow/usage_tracking.py +0 -0
  329. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/__init__.py +0 -0
  330. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/acceptance_live_harness.py +0 -0
  331. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/agents/__init__.py +0 -0
  332. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/agents/test_manifest_dirscan.py +0 -0
  333. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/agents/test_manifest_loader.py +0 -0
  334. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/agents/test_manifest_parity.py +0 -0
  335. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/agents/test_manifest_wiring.py +0 -0
  336. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/agents/test_namespace_shorthand.py +0 -0
  337. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/agents/test_plugin_entry_points.py +0 -0
  338. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/agents/test_protocol.py +0 -0
  339. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/agents/test_remote_manifest_autoload.py +0 -0
  340. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/conformance/README.md +0 -0
  341. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/conformance/acp_smoke/environment/Dockerfile +0 -0
  342. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/conformance/acp_smoke/environment/docker-compose.yaml +0 -0
  343. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/conformance/acp_smoke/environment/skills/conformance-writer/SKILL.md +0 -0
  344. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/conformance/acp_smoke/instruction.md +0 -0
  345. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/conformance/acp_smoke/solution/solve.sh +0 -0
  346. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/conformance/acp_smoke/task.md +0 -0
  347. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/conformance/acp_smoke/task.toml +0 -0
  348. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/conformance/acp_smoke/tests/test.sh +0 -0
  349. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/conformance/conformance-results.json +0 -0
  350. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/conformance/proof_multi_agent.py +0 -0
  351. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/conformance/proof_snapshot.py +0 -0
  352. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/conformance/run_conformance.py +0 -0
  353. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/conformance/self_gen_smoke_skills/skill-creator/SKILL.md +0 -0
  354. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/conftest.py +0 -0
  355. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/continue_run/__init__.py +0 -0
  356. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/continue_run/_helpers.py +0 -0
  357. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/continue_run/test_batch.py +0 -0
  358. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/continue_run/test_orchestrator.py +0 -0
  359. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/continue_run/test_replay_proxy.py +0 -0
  360. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/continue_run/test_run_folder.py +0 -0
  361. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/environment/__init__.py +0 -0
  362. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/environment/test_chibench_manifest.py +0 -0
  363. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/environment/test_clawsbench_manifest.py +0 -0
  364. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/environment/test_manifest.py +0 -0
  365. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/environment/test_manifest_env.py +0 -0
  366. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/environment/test_protocol.py +0 -0
  367. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/environment/test_readiness.py +0 -0
  368. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/examples/hello-world-task/environment/Dockerfile +0 -0
  369. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/examples/hello-world-task/instruction.md +0 -0
  370. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/examples/hello-world-task/solution/solve.sh +0 -0
  371. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/examples/hello-world-task/task.md +0 -0
  372. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/examples/hello-world-task/task.toml +0 -0
  373. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/examples/hello-world-task/tests/test.sh +0 -0
  374. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/examples/test_claude.sh +0 -0
  375. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/examples/test_codex.sh +0 -0
  376. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/examples/test_codex_custom_provider.sh +0 -0
  377. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/examples/test_gemini.sh +0 -0
  378. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/examples/test_openclaw.sh +0 -0
  379. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/examples/traces/minimal-claude.jsonl +0 -0
  380. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/examples/traces/minimal-opentraces.jsonl +0 -0
  381. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/fixtures/digest/README.md +0 -0
  382. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/fixtures/digest/alpha-task/environment/Dockerfile +0 -0
  383. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/fixtures/digest/alpha-task/instruction.md +0 -0
  384. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/fixtures/digest/alpha-task/task.toml +0 -0
  385. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/fixtures/digest/alpha-task/tests/test.sh +0 -0
  386. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/fixtures/digest/beta-task/data/empty.bin +0 -0
  387. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/fixtures/digest/beta-task/data/unicode.txt +0 -0
  388. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/fixtures/digest/beta-task/instruction.md +0 -0
  389. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/fixtures/digest/beta-task/task.toml +0 -0
  390. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/fixtures/digest/not-a-task/notes.txt +0 -0
  391. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/fixtures/mock_acp_agent.py +0 -0
  392. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/fixtures/mock_acp_agent_interleaved.py +0 -0
  393. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/fixtures/mock_acp_agent_multi_turn.py +0 -0
  394. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/fixtures/mock_openai_responses_server.py +0 -0
  395. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/Dockerfile +0 -0
  396. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/data/michigan_stations.txt +0 -0
  397. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/flood-detection/SKILL.md +0 -0
  398. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/nws-flood-thresholds/SKILL.md +0 -0
  399. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/usgs-data-download/SKILL.md +0 -0
  400. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/fixtures/skillsbench_slice/flood-risk-analysis/instruction.md +0 -0
  401. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/fixtures/skillsbench_slice/flood-risk-analysis/solution/solve.sh +0 -0
  402. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/fixtures/skillsbench_slice/flood-risk-analysis/task.toml +0 -0
  403. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/fixtures/skillsbench_slice/flood-risk-analysis/tests/test.sh +0 -0
  404. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/fixtures/skillsbench_slice/flood-risk-analysis/tests/test_outputs.py +0 -0
  405. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/Dockerfile +0 -0
  406. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/climate.csv +0 -0
  407. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/hydrology.csv +0 -0
  408. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/land_cover.csv +0 -0
  409. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/water_temperature.csv +0 -0
  410. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/contribution-analysis/SKILL.md +0 -0
  411. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/meteorology-driver-classification/SKILL.md +0 -0
  412. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/pca-decomposition/SKILL.md +0 -0
  413. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/trend-analysis/SKILL.md +0 -0
  414. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/fixtures/skillsbench_slice/lake-warming-attribution/instruction.md +0 -0
  415. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/fixtures/skillsbench_slice/lake-warming-attribution/solution/solve.sh +0 -0
  416. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/fixtures/skillsbench_slice/lake-warming-attribution/task.toml +0 -0
  417. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/fixtures/skillsbench_slice/lake-warming-attribution/tests/test.sh +0 -0
  418. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/fixtures/skillsbench_slice/lake-warming-attribution/tests/test_outputs.py +0 -0
  419. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/fixtures/skillsbench_slice/manifest.json +0 -0
  420. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/Dockerfile +0 -0
  421. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/r2r_simulator.py +0 -0
  422. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/finite-horizon-lqr/SKILL.md +0 -0
  423. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/integral-action-design/SKILL.md +0 -0
  424. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/mpc-horizon-tuning/SKILL.md +0 -0
  425. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/state-space-linearization/SKILL.md +0 -0
  426. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/system_config.json +0 -0
  427. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/fixtures/skillsbench_slice/r2r-mpc-control/instruction.md +0 -0
  428. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/fixtures/skillsbench_slice/r2r-mpc-control/solution/solve.sh +0 -0
  429. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/fixtures/skillsbench_slice/r2r-mpc-control/task.toml +0 -0
  430. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/fixtures/skillsbench_slice/r2r-mpc-control/tests/test.sh +0 -0
  431. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/fixtures/skillsbench_slice/r2r-mpc-control/tests/test_outputs.py +0 -0
  432. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/Dockerfile +0 -0
  433. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/generate_training_pcaps.py +0 -0
  434. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/local.rules +0 -0
  435. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/pcap-triage-tshark/SKILL.md +0 -0
  436. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/pcap-triage-tshark/scripts/summarize_http_requests.sh +0 -0
  437. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-offline-evejson/SKILL.md +0 -0
  438. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-offline-evejson/scripts/run_suricata_offline.sh +0 -0
  439. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-rules-basics/SKILL.md +0 -0
  440. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/suricata.yaml +0 -0
  441. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/instruction.md +0 -0
  442. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/solution/solve.sh +0 -0
  443. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/task.toml +0 -0
  444. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/tests/test.sh +0 -0
  445. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/tests/test_outputs.py +0 -0
  446. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/Dockerfile +0 -0
  447. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syz-extract-constants/SKILL.md +0 -0
  448. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syzkaller-build-loop/SKILL.md +0 -0
  449. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syzlang-ioctl-basics/SKILL.md +0 -0
  450. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/instruction.md +0 -0
  451. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/solution/solve.sh +0 -0
  452. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/task.toml +0 -0
  453. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/tests/test.sh +0 -0
  454. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/tests/test_outputs.py +0 -0
  455. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/integration/_consistency.py +0 -0
  456. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/integration/agent_judge.py +0 -0
  457. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/integration/check_adapter_evidence.py +0 -0
  458. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/integration/check_hosted_env_evidence.py +0 -0
  459. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/integration/check_results.py +0 -0
  460. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/integration/check_skillsbench_harbor_parity.py +0 -0
  461. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/integration/check_trace_to_task_evidence.py +0 -0
  462. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/integration/configs/claude-agent-acp.yaml +0 -0
  463. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/integration/configs/codex-acp.yaml +0 -0
  464. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/integration/configs/gemini.yaml +0 -0
  465. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/integration/configs/harvey-lab-harness.yaml +0 -0
  466. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/integration/configs/mimo.yaml +0 -0
  467. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/integration/configs/openclaw.yaml +0 -0
  468. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/integration/configs/opencode.yaml +0 -0
  469. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/integration/configs/openhands.yaml +0 -0
  470. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/integration/configs/pi-acp.yaml +0 -0
  471. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/integration/deepagents_harness.py +0 -0
  472. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/integration/rubric_checks.py +0 -0
  473. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/integration/run.sh +0 -0
  474. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/integration/run_suite.py +0 -0
  475. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/integration/scenarios.py +0 -0
  476. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/integration/suites/release.yaml +0 -0
  477. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_acceptance_evidence.py +0 -0
  478. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_acceptance_live.py +0 -0
  479. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_acceptance_live_execution.py +0 -0
  480. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_acp_capability_advertising.py +0 -0
  481. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_acp_mcp_servers.py +0 -0
  482. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_acp_model_config_dispatch.py +0 -0
  483. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_acp_pinned_protocol_guard.py +0 -0
  484. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_acp_setup_failure_propagation.py +0 -0
  485. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_adapter_scripts.py +0 -0
  486. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_adapters.py +0 -0
  487. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_agent_cli.py +0 -0
  488. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_agent_env_resolution.py +0 -0
  489. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_agent_idle_timeout_cli.py +0 -0
  490. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_agent_model_decouple.py +0 -0
  491. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_agent_registry.py +0 -0
  492. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_agent_router.py +0 -0
  493. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_agent_router_cli_e2e.py +0 -0
  494. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_agent_router_scaffold.py +0 -0
  495. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_agent_setup.py +0 -0
  496. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_agent_spec.py +0 -0
  497. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_agentcore_builder.py +0 -0
  498. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_agentcore_parallel.py +0 -0
  499. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_agentcore_reaper.py +0 -0
  500. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_agentcore_sandbox.py +0 -0
  501. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_agentcore_transport.py +0 -0
  502. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_api_error_capture.py +0 -0
  503. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_apple_container_sandbox.py +0 -0
  504. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_bare_model_provider.py +0 -0
  505. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_base_install_imports.py +0 -0
  506. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_bedrock_thinking.py +0 -0
  507. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_benchflow_experiment_review_validator.py +0 -0
  508. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_benchmark_repos_resolve_repo_path.py +0 -0
  509. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_branch.py +0 -0
  510. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_build_context_stage.py +0 -0
  511. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_build_review_pack.py +0 -0
  512. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_capture_trajectory.py +0 -0
  513. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_check_skillsbench_harbor_parity.py +0 -0
  514. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_clawsbench_slice.py +0 -0
  515. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_cli_adopt_aliases.py +0 -0
  516. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_cli_arg_validation.py +0 -0
  517. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_cli_daytona.py +0 -0
  518. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_cli_docs_drift.py +0 -0
  519. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_cli_edge_case_hardening.py +0 -0
  520. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_cli_hub_env.py +0 -0
  521. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_cli_live_progress.py +0 -0
  522. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_cli_misc.py +0 -0
  523. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_codex_review.py +0 -0
  524. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_codex_self_write_auth.py +0 -0
  525. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_config_override.py +0 -0
  526. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_config_redaction.py +0 -0
  527. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_connect_as_env.py +0 -0
  528. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_console_error_truncation.py +0 -0
  529. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_console_progress.py +0 -0
  530. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_continuallearningbench_adapter.py +0 -0
  531. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_dataset_registry.py +0 -0
  532. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_daytona_command_polling.py +0 -0
  533. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_daytona_dind_compose_up.py +0 -0
  534. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_daytona_download.py +0 -0
  535. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_daytona_litellm_runtime.py +0 -0
  536. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_daytona_poll_deadline.py +0 -0
  537. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_daytona_reap.py +0 -0
  538. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_deepagents_agent.py +0 -0
  539. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_diagnostics.py +0 -0
  540. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_docker_prune_scoping.py +0 -0
  541. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_docker_uploads.py +0 -0
  542. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_docs_examples.py +0 -0
  543. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_eng50_capabilities.py +0 -0
  544. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_env_registry.py +0 -0
  545. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_env_setup.py +0 -0
  546. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_environment_manifest_controls.py +0 -0
  547. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_eval_artifact_cli.py +0 -0
  548. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_eval_filters_applied.py +0 -0
  549. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_eval_lift.py +0 -0
  550. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_eval_sharding.py +0 -0
  551. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_eval_single_task_summary.py +0 -0
  552. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_eval_source_provenance.py +0 -0
  553. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_eval_worker_retry.py +0 -0
  554. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_eval_zero_task_guard.py +0 -0
  555. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_evaluation_environment_manifest.py +0 -0
  556. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_exclude_tasks.py +0 -0
  557. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_filter_credentialed_cells.py +0 -0
  558. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_harvey_lab_shim.py +0 -0
  559. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_hilbench_adapter.py +0 -0
  560. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_hosted_env.py +0 -0
  561. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_hosted_env_rollout_contract.py +0 -0
  562. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_hub_harbor_registry.py +0 -0
  563. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_inbound_adapter_manifest.py +0 -0
  564. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_inbound_adapters.py +0 -0
  565. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_integration_agent_judge.py +0 -0
  566. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_integration_check_results.py +0 -0
  567. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_integration_consistency.py +0 -0
  568. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_integration_matrix.py +0 -0
  569. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_integration_provider_selection.py +0 -0
  570. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_integration_run_suite.py +0 -0
  571. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_integration_suite.py +0 -0
  572. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_internet_policy.py +0 -0
  573. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_job.py +0 -0
  574. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_job_sequential_shared.py +0 -0
  575. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_job_sequential_shared_resume.py +0 -0
  576. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_judge_robustness.py +0 -0
  577. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_judge_symlink_ingestion.py +0 -0
  578. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_learner_skills.py +0 -0
  579. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_learner_skills_traversal.py +0 -0
  580. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_learner_store.py +0 -0
  581. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_learner_store_persistence.py +0 -0
  582. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_litellm_logging.py +0 -0
  583. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_litellm_model_via_env_generic.py +0 -0
  584. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_litellm_reasoning_passthrough.py +0 -0
  585. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_litellm_smoke.py +0 -0
  586. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_live_llm_trajectory.py +0 -0
  587. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_llm_judge.py +0 -0
  588. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_llm_judge_event_tags.py +0 -0
  589. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_llm_judge_verifier.py +0 -0
  590. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_loop_strategies.py +0 -0
  591. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_loop_summary.py +0 -0
  592. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_loop_sweep.py +0 -0
  593. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_memory_scorer.py +0 -0
  594. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_metrics.py +0 -0
  595. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_mle_bench_adapter.py +0 -0
  596. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_mock_openai_responses_server.py +0 -0
  597. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_monitor_scaffold.py +0 -0
  598. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_native_acp_usage.py +0 -0
  599. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_no_cross_provider_fallback.py +0 -0
  600. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_notification_order_real.py +0 -0
  601. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_opencode_family_proxy_tracking.py +0 -0
  602. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_oracle.py +0 -0
  603. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_oracle_chokepoint.py +0 -0
  604. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_paths_safe.py +0 -0
  605. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_paths_symlink_helpers.py +0 -0
  606. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_pi_acp_launcher.py +0 -0
  607. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_pi_acp_proxy_routing.py +0 -0
  608. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_process.py +0 -0
  609. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_project_skills_layout.py +0 -0
  610. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_provider_auth_detection.py +0 -0
  611. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_providers.py +0 -0
  612. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_publish_azure_blob.py +0 -0
  613. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_publish_huggingface.py +0 -0
  614. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_reexport.py +0 -0
  615. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_registry_invariants.py +0 -0
  616. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_release_hardening_r5.py +0 -0
  617. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_release_version.py +0 -0
  618. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_release_workflow_wiring.py +0 -0
  619. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_resolve_env_helpers.py +0 -0
  620. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_review_boundaries.py +0 -0
  621. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_review_rubric.py +0 -0
  622. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_review_runtime.py +0 -0
  623. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_reward_lenient.py +0 -0
  624. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_reward_node.py +0 -0
  625. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_reward_range.py +0 -0
  626. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_reward_unified_contract.py +0 -0
  627. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_rewards.py +0 -0
  628. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_rewards_jsonl.py +0 -0
  629. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_rollout_architecture.py +0 -0
  630. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_rollout_branch.py +0 -0
  631. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_rollout_config_path_coercion.py +0 -0
  632. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_rollout_environment.py +0 -0
  633. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_rollout_hard_deadline.py +0 -0
  634. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_rollout_import_no_side_effects.py +0 -0
  635. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_rollout_on_ask_user_wiring.py +0 -0
  636. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_rollout_planes_contract.py +0 -0
  637. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_rollout_probe_sandbox_health.py +0 -0
  638. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_rollout_session_factory_dispatch.py +0 -0
  639. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_rollout_setup_commands.py +0 -0
  640. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_rollout_upload.py +0 -0
  641. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_rubric_checks.py +0 -0
  642. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_rubric_config.py +0 -0
  643. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_runtime.py +0 -0
  644. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_runtime_capabilities.py +0 -0
  645. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_runtime_config_wired.py +0 -0
  646. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_runtime_live_sandbox.py +0 -0
  647. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_sandbox.py +0 -0
  648. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_sandbox_exec_secret_handling.py +0 -0
  649. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_sandbox_hardening.py +0 -0
  650. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_sandbox_isolation_copy_traversal.py +0 -0
  651. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_sandbox_live_process.py +0 -0
  652. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_sandbox_multi_service.py +0 -0
  653. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_sandbox_prebuilt_validation.py +0 -0
  654. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_sandbox_protocol.py +0 -0
  655. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_sandbox_provider_registry_drift.py +0 -0
  656. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_sandbox_setup.py +0 -0
  657. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_sandbox_snapshot_contract.py +0 -0
  658. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_sandbox_upload_symlink.py +0 -0
  659. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_sandbox_verifier_workspace.py +0 -0
  660. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_scene.py +0 -0
  661. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_scene_outbox_trial.py +0 -0
  662. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_scene_parallel_group.py +0 -0
  663. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_scene_result_aggregation.py +0 -0
  664. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_scoring.py +0 -0
  665. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_sdk_internals.py +0 -0
  666. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_sdk_lockdown.py +0 -0
  667. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_sdk_run_alias.py +0 -0
  668. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_sealed_channel_container.py +0 -0
  669. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_self_gen_cli.py +0 -0
  670. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_self_gen_export_error_channel.py +0 -0
  671. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_self_gen_export_failures.py +0 -0
  672. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_self_gen_orchestration.py +0 -0
  673. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_session_factory_runtime.py +0 -0
  674. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_session_request_permission_dispatch.py +0 -0
  675. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_skill_eval.py +0 -0
  676. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_skill_eval_dryrun.py +0 -0
  677. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_skill_eval_integration.py +0 -0
  678. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_skill_eval_sweep.py +0 -0
  679. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_skill_eval_traversal.py +0 -0
  680. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_skill_invocation_artifacts.py +0 -0
  681. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_skill_policy.py +0 -0
  682. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_skills.py +0 -0
  683. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_skills_dir_agent_home_link.py +0 -0
  684. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_skillsbench_conversion_conformance.py +0 -0
  685. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_skillsbench_harbor_run_suite.py +0 -0
  686. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_smoke.py +0 -0
  687. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_smoke_wiring.py +0 -0
  688. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_source_adapters.py +0 -0
  689. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_subscription_auth.py +0 -0
  690. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_task_check_eval_consistency.py +0 -0
  691. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_task_config.py +0 -0
  692. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_task_digest.py +0 -0
  693. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_task_document.py +0 -0
  694. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_task_download.py +0 -0
  695. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_task_export.py +0 -0
  696. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_task_output_format.py +0 -0
  697. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_task_package.py +0 -0
  698. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_task_runtime_primitive.py +0 -0
  699. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_tasks.py +0 -0
  700. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_token_usage_normalization.py +0 -0
  701. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_trace_import_cli.py +0 -0
  702. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_trace_task_gen_traversal.py +0 -0
  703. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_trace_to_task_evidence.py +0 -0
  704. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_traces_huggingface.py +0 -0
  705. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_traces_parsers.py +0 -0
  706. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_traces_task_gen.py +0 -0
  707. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_train_cli.py +0 -0
  708. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_train_mode_artifact_emission.py +0 -0
  709. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_train_trl_cli.py +0 -0
  710. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_traj_report.py +0 -0
  711. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_traj_staging_phases.py +0 -0
  712. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_traj_tui.py +0 -0
  713. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_traj_upload_cli.py +0 -0
  714. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_traj_upload_skill.py +0 -0
  715. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_traj_workspace.py +0 -0
  716. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_trajectory_integration.py +0 -0
  717. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_trajectory_streaming.py +0 -0
  718. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_trajectory_upload_layout.py +0 -0
  719. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_trajectory_upload_service.py +0 -0
  720. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_trial_agent_timeout_verify.py +0 -0
  721. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_trial_install_agent_timeout.py +0 -0
  722. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_trial_litellm_runtime.py +0 -0
  723. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_trl_integration.py +0 -0
  724. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_usage_litellm.py +0 -0
  725. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_usage_required.py +0 -0
  726. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_usage_tracking.py +0 -0
  727. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_user.py +0 -0
  728. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_v06_guard_ports.py +0 -0
  729. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_verifier_document.py +0 -0
  730. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_verifier_multi_container.py +0 -0
  731. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_verifier_output.py +0 -0
  732. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_verifier_output_freshness.py +0 -0
  733. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_verifier_strategies.py +0 -0
  734. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_verifier_wedge_retry.py +0 -0
  735. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_verify.py +0 -0
  736. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_viewer_confirm.py +0 -0
  737. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_workflow_action_pinning.py +0 -0
  738. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/test_yaml_config.py +0 -0
  739. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/trajectories/__init__.py +0 -0
  740. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/trajectories/test_export.py +0 -0
  741. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/trajectories/test_export_adp.py +0 -0
  742. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/trajectories/test_export_atif.py +0 -0
  743. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/trajectories/test_export_common.py +0 -0
  744. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/trajectories/test_export_nan_handling.py +0 -0
  745. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/trajectories/test_export_prime_sft.py +0 -0
  746. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/trajectories/test_redaction.py +0 -0
  747. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/trajectories/test_step_granularity.py +0 -0
  748. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/trajectories/test_tree.py +0 -0
  749. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/tests/trajectories/test_viewer_acp_renderer.py +0 -0
  750. {benchflow-0.7.6.dev2233 → benchflow-0.7.6.dev2248}/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.dev2233
3
+ Version: 0.7.6.dev2248
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.dev2233"
3
+ version = "0.7.6.dev2248"
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"
@@ -21,24 +21,27 @@ 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,
34
34
  find_provider_for_bare_model,
35
35
  strip_provider_prefix,
36
36
  )
37
- from benchflow.agents.registry import AGENTS, OPENCODE_PROXY_PROVIDER_ID
37
+ from benchflow.agents.registry import (
38
+ ACPX_KEY_PREFIX,
39
+ AGENTS,
40
+ OPENCODE_PROXY_PROVIDER_ID,
41
+ )
38
42
  from benchflow.diagnostics import (
39
43
  AgentPromptTimeoutDiagnostic,
40
44
  AgentPromptTimeoutError,
41
- IdleTimeoutDiagnostic,
42
45
  IdleTimeoutError,
43
46
  TransportClosedDiagnostic,
44
47
  TransportClosedError,
@@ -269,6 +272,13 @@ def _format_acp_model(model: str, agent: str) -> str:
269
272
  models.dev provider prefix when the agent requires it.
270
273
  """
271
274
  bare = strip_provider_prefix(model)
275
+ # Gemini CLI accepts bare Google model IDs. ``google/`` is a models.dev
276
+ # provider prefix rather than a registered BenchFlow provider, so the
277
+ # generic normalizer intentionally leaves it alone.
278
+ if agent.removeprefix(ACPX_KEY_PREFIX) == "gemini" and model.startswith(
279
+ ("google/gemini-", "google/gemma-")
280
+ ):
281
+ bare = model.removeprefix("google/")
272
282
  agent_cfg = AGENTS.get(agent)
273
283
  if agent_cfg and agent_cfg.acp_model_format == "registered-provider/model":
274
284
  # Proxy mode: BenchFlow's LiteLLM proxy serves the model under the alias
@@ -820,81 +830,29 @@ async def _prompt_with_idle_watchdog(
820
830
  timeout: int,
821
831
  idle_timeout: int,
822
832
  ):
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
-
833
+ """Run one ACP prompt with wall-clock and idle-watchdog budgets."""
840
834
  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
835
+ loop = asyncio.get_running_loop()
836
+ watchdog = IdleWatchdog.start(
837
+ session,
838
+ idle_timeout_sec=idle_timeout,
839
+ wall_timeout_sec=timeout,
840
+ now=loop.time(),
841
+ )
854
842
 
855
843
  try:
856
844
  while not prompt_task.done():
857
- await asyncio.sleep(poll_interval)
845
+ await asyncio.sleep(watchdog.poll_interval_sec)
858
846
  # Re-check done() after the sleep — the prompt may have completed
859
847
  # during the poll interval. Without this, we'd cancel an already-
860
848
  # completed task and discard a successful result.
861
849
  if prompt_task.done():
862
850
  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:
851
+ now = loop.time()
852
+ watchdog.observe(session, now=now)
853
+ if watchdog.idle_expired(now):
854
+ raise watchdog.timeout_error(session, now=now)
855
+ if watchdog.wall_clock_expired(now):
898
856
  if await _cancel_and_drain_prompt_task(prompt_task):
899
857
  raise _agent_prompt_timeout_error(session, timeout)
900
858
  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"
@@ -656,7 +656,11 @@ AGENTS: dict[str, AgentConfig] = {
656
656
  description="Google Gemini CLI via ACP",
657
657
  skill_paths=["$HOME/.gemini/skills"],
658
658
  install_cmd=_js_agent_install("gemini", "@google/gemini-cli@0.42.0"),
659
- launch_cmd=_js_agent_launch("gemini", "--acp --yolo"),
659
+ # BenchFlow already isolates the agent inside the task sandbox and
660
+ # deliberately grants tool approval with --yolo. Gemini CLI 0.42 also
661
+ # requires the workspace to be trusted before it will honor that mode;
662
+ # headless ACP runs cannot answer the interactive trust prompt.
663
+ launch_cmd=_js_agent_launch("gemini", "--acp --yolo --skip-trust"),
660
664
  protocol="acp",
661
665
  # The Gemini CLI reads GEMINI_API_KEY natively. GOOGLE_API_KEY is
662
666
  # accepted as an alias: auto_inherit_env mirrors it both ways so users
@@ -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
@@ -375,6 +375,9 @@ def resolve_litellm_route(model: str, env: dict[str, str]) -> LiteLLMRoute:
375
375
  elif lower.startswith("gemini/"):
376
376
  upstream = model
377
377
  required = ("GEMINI_API_KEY",)
378
+ elif lower.startswith(("google/gemini-", "google/gemma-")):
379
+ upstream = f"gemini/{model.split('/', 1)[1]}"
380
+ required = ("GEMINI_API_KEY",)
378
381
  elif "gemini" in lower:
379
382
  upstream = f"gemini/{bare}"
380
383
  required = ("GEMINI_API_KEY",)
@@ -0,0 +1,116 @@
1
+ """Backport Gemini pass-through streaming logging for LiteLLM 1.89/1.91.
2
+
3
+ Those releases classify every native ``generateContent`` URL as Vertex AI and
4
+ send its streamed response through the Vertex logger. That happens to work for
5
+ Gemini model names present in both catalogs, but it rejects Google AI Studio
6
+ Gemma names and drops the entire callback — including token usage and provider
7
+ trajectory evidence. LiteLLM added a dedicated Gemini endpoint type later.
8
+
9
+ The proxy imports this module from ``sitecustomize``. It patches only the old
10
+ vendor shape (no ``EndpointType.GEMINI``) and only Google AI Studio-style model
11
+ paths, leaving Vertex and every other provider untouched.
12
+ """
13
+
14
+ from __future__ import annotations
15
+
16
+ import re
17
+ from typing import Any
18
+ from urllib.parse import urlparse
19
+
20
+ _GOOGLE_AI_STUDIO_GENERATE_PATH_RE = re.compile(
21
+ r"/v1(?:beta)?/models/[^/:]+:(?:streamGenerateContent|generateContent)$"
22
+ )
23
+
24
+
25
+ def _is_google_ai_studio_generate_content(url_route: str) -> bool:
26
+ """Distinguish native AI Studio model paths from Vertex project paths."""
27
+ try:
28
+ path = urlparse(url_route).path
29
+ except Exception:
30
+ return False
31
+ return bool(
32
+ _GOOGLE_AI_STUDIO_GENERATE_PATH_RE.search(path)
33
+ and "/projects/" not in path
34
+ and "/locations/" not in path
35
+ )
36
+
37
+
38
+ def _apply_patch() -> None:
39
+ try:
40
+ from litellm.proxy.pass_through_endpoints.llm_provider_handlers.gemini_passthrough_logging_handler import (
41
+ GeminiPassthroughLoggingHandler,
42
+ )
43
+ from litellm.proxy.pass_through_endpoints.streaming_handler import (
44
+ PassThroughStreamingHandler,
45
+ )
46
+ from litellm.types.passthrough_endpoints.pass_through_endpoints import (
47
+ EndpointType,
48
+ )
49
+ except Exception:
50
+ return
51
+
52
+ # Newer LiteLLM releases have their own Gemini dispatch branch. Do not
53
+ # replace supported vendor behavior after the pinned dependency advances.
54
+ if hasattr(EndpointType, "GEMINI"):
55
+ return
56
+
57
+ original = PassThroughStreamingHandler._build_passthrough_logging_result
58
+ if getattr(original, "__benchflow_gemini_passthrough_patch__", False):
59
+ return
60
+
61
+ def build_passthrough_logging_result(
62
+ *,
63
+ litellm_logging_obj: Any,
64
+ passthrough_success_handler_obj: Any,
65
+ url_route: str,
66
+ request_body: dict[str, Any],
67
+ endpoint_type: Any,
68
+ start_time: Any,
69
+ raw_bytes: list[bytes],
70
+ end_time: Any,
71
+ model: str | None,
72
+ ) -> tuple[Any, dict[str, Any]]:
73
+ if not _is_google_ai_studio_generate_content(url_route):
74
+ return original(
75
+ litellm_logging_obj=litellm_logging_obj,
76
+ passthrough_success_handler_obj=passthrough_success_handler_obj,
77
+ url_route=url_route,
78
+ request_body=request_body,
79
+ endpoint_type=endpoint_type,
80
+ start_time=start_time,
81
+ raw_bytes=raw_bytes,
82
+ end_time=end_time,
83
+ model=model,
84
+ )
85
+
86
+ all_chunks = PassThroughStreamingHandler._convert_raw_bytes_to_str_lines(
87
+ raw_bytes
88
+ )
89
+ result = (
90
+ GeminiPassthroughLoggingHandler._handle_logging_gemini_collected_chunks(
91
+ litellm_logging_obj=litellm_logging_obj,
92
+ passthrough_success_handler_obj=passthrough_success_handler_obj,
93
+ url_route=url_route,
94
+ request_body=request_body,
95
+ endpoint_type=endpoint_type,
96
+ start_time=start_time,
97
+ all_chunks=all_chunks,
98
+ end_time=end_time,
99
+ model=model,
100
+ )
101
+ )
102
+ return result["result"], result["kwargs"]
103
+
104
+ setattr( # noqa: B010 - marker on the monkey-patched vendor function
105
+ build_passthrough_logging_result,
106
+ "__benchflow_gemini_passthrough_patch__",
107
+ True,
108
+ )
109
+ setattr( # noqa: B010 - avoids static narrowing on the vendor API
110
+ PassThroughStreamingHandler,
111
+ "_build_passthrough_logging_result",
112
+ staticmethod(build_passthrough_logging_result),
113
+ )
114
+
115
+
116
+ _apply_patch()