benchflow 0.6.7.dev1827__tar.gz → 0.6.7.dev1831__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.
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/PKG-INFO +1 -1
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/pyproject.toml +1 -1
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/live_activity.py +34 -5
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/acp/container_transport.py +57 -1
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/acp/runtime.py +27 -10
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/cli/_live_progress.py +34 -9
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/cli/_shared.py +57 -4
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/cli/main.py +6 -2
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/evaluation.py +30 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/rollout/__init__.py +17 -6
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/process/_base.py +36 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/process/agentcore.py +18 -24
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/process/daytona.py +5 -16
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_acp.py +175 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_cli_live_progress.py +198 -13
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_job.py +36 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/.gitignore +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/CHANGELOG.md +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/LICENSE +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/README.md +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/__init__.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/_dotenv.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/_paths.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/_run.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/_types.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/__init__.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/benchmark_repos.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/build_context_stage.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/config.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/config_override.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/content_address.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/dataset_registry.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/env_registry.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/evaluation_results.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/hf_datasets.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/json_safe.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/learner_memory.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/result_metadata.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/reward_events.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/scoring.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/source_provenance.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/task_authoring/__init__.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/task_authoring/_evidence_paths.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/task_authoring/acceptance_evidence.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/task_authoring/scaffolding.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/task_authoring/structural_checks.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/text.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/yaml_loader.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/acp/__init__.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/acp/client.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/acp/selection.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/acp/session.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/acp/transport.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/acp/types.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/adapters/__init__.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/adapters/_toolathlon.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/adapters/_toolathlon_container.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/adapters/_toolathlon_fake_mail.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/adapters/_toolathlon_poste_users.tsv +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/adapters/_toolathlon_services.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/adapters/harbor.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/adapters/inbound.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/adapters/inspect_ai.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/adapters/ors.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/adapters/resources/__init__.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/adapters/resources/mcp_atlas_bridge.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/adapters/resources/mcp_atlas_judge.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/adapters/source.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/agent_router.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/agent_router_guide.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/agent_router_parity.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/agent_router_scaffold.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/agents/__init__.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/agents/codex_config.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/agents/credentials.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/agents/deepagents_acp_shim.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/agents/env.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/agents/errors.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/agents/harvey_lab_acp_shim.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/agents/install.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/agents/manifest.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/agents/openclaw_acp_shim.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/agents/pi_acp_launcher.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/agents/protocol.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/agents/providers.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/agents/registry.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/agents/remote_manifests.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/branch.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/cli/__init__.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/cli/_hosted_env.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/cli/_options.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/cli/adopt.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/cli/agent.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/cli/continue_cmd.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/cli/environment.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/cli/eval_artifacts.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/cli/eval_lift.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/cli/hub.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/cli/monitor.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/cli/review.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/cli/sandbox.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/cli/skills.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/cli/tasks.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/cli/trace_import.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/cli/train.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/continue_run/__init__.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/continue_run/batch.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/continue_run/orchestrator.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/continue_run/replay_proxy.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/continue_run/run_folder.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/continue_run/sandbox_proxy.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/contracts/__init__.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/contracts/planes.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/contracts/user.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/demo_task/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/demo_task/instruction.md +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/demo_task/task.md +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/demo_task/task.toml +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/demo_task/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/diagnostics.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/environment/__init__.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/environment/manifest.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/environment/manifest_env.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/environment/protocol.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/environment/readiness.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/eval_artifacts.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/eval_lift.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/eval_plan.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/eval_sharding.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/eval_worker.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/experimental/__init__.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/experimental/mcp/__init__.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/experimental/mcp/hooks.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/experimental/mcp/reviewer_server.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/hosted_env.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/hub/__init__.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/hub/harbor_registry.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/integrations/__init__.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/integrations/trl/__init__.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/integrations/trl/spec.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/learner_skills.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/learner_store.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/loop_strategies.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/loop_sweep.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/metrics.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/models.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/monitor.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/providers/__init__.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/providers/litellm_bedrock_patch.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/providers/litellm_bedrock_preflight.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/providers/litellm_config.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/providers/litellm_logging.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/providers/litellm_runtime.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/providers/runtime.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/publish/__init__.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/publish/huggingface.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/py.typed +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/review/__init__.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/review/config.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/review/default-rubric.json +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/review/prompts.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/review/runner.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/review/wrapper.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/rewards/README.md +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/rewards/__init__.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/rewards/builtins.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/rewards/events.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/rewards/file_readers.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/rewards/llm.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/rewards/memory_scorer.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/rewards/node.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/rewards/protocol.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/rewards/rubric.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/rewards/rubric_config.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/rewards/validation.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/rollout/_config.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/rollout/_deadline.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/rollout/_results.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/rollout/_setup.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/rollout/_skills.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/rollout/_usage.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/rollout/_user_loop.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/rollout/session_factory_runtime.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/rollout/task_runtime.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/rollout_branch.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/rollout_planes.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/runtime.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/__init__.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/_base.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/_cache_reclaim.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/_compose.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/_compose_files/docker-compose-base.yaml +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/_compose_files/docker-compose-build.yaml +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/_compose_files/docker-compose-no-network.yaml +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/_compose_files/docker-compose-prebuilt.yaml +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/_sdk_ops.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/agentcore.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/agentcore_builder.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/agentcore_image.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/agentcore_provisioning.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/agentcore_reaper.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/agentcore_sealed.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/apple_container.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/daytona.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/daytona_dind.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/daytona_pty.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/daytona_reaper.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/daytona_strategies.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/docker.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/lockdown.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/metadata.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/modal_impl.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/process/__init__.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/process/apple.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/process/docker.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/protocol.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/providers.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/services.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/setup.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/snapshot.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/user.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/scenes.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/sdk.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/self_gen.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/skill_eval/__init__.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/skill_eval/_core.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/skill_eval/gepa_export.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/skill_eval/schema.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/skill_policy.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/skills.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/task/__init__.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/task/_document_evidence.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/task/_document_normalize.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/task/_document_parse.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/task/_document_profiles.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/task/acceptance_live.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/task/acceptance_live_model.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/task/acceptance_live_report.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/task/acceptance_live_validation.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/task/config.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/task/discovery.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/task/document.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/task/env.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/task/export.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/task/imports.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/task/output_format.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/task/package.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/task/paths.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/task/prompts.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/task/runtime_capabilities.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/task/runtime_view.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/task/task.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/task/verifier.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/task/verifier_core.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/task/verifier_document.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/task/verifier_errors.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/task/verifier_judge_inputs.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/task/verifier_ors_episode.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/task/verifier_reward_kit.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/task/verifier_scan.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/task/verifier_script_strategy.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/templates/__init__.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/templates/judge.py.tmpl +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/templates/test.sh.tmpl +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/traces/__init__.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/traces/huggingface.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/traces/local.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/traces/models.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/traces/parsers.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/traces/task_gen.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/training/__init__.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/training/backends/__init__.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/training/backends/prime_rl.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/training/run_manifest.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/trajectories/__init__.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/trajectories/_capture.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/trajectories/_export_common.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/trajectories/_llm_capture.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/trajectories/call_purpose.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/trajectories/export.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/trajectories/export_adp.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/trajectories/export_atif.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/trajectories/export_prime_sft.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/trajectories/export_trl_sft.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/trajectories/metrics.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/trajectories/results.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/trajectories/tree.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/trajectories/trl_sft_tokenization.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/trajectories/types.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/trajectories/viewer.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/usage_tracking.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/__init__.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/acceptance_live_harness.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/agents/__init__.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/agents/test_manifest_dirscan.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/agents/test_manifest_loader.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/agents/test_manifest_parity.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/agents/test_manifest_wiring.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/agents/test_namespace_shorthand.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/agents/test_plugin_entry_points.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/agents/test_protocol.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/agents/test_remote_manifest_autoload.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/conformance/README.md +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/conformance/acp_smoke/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/conformance/acp_smoke/environment/docker-compose.yaml +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/conformance/acp_smoke/environment/skills/conformance-writer/SKILL.md +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/conformance/acp_smoke/instruction.md +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/conformance/acp_smoke/solution/solve.sh +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/conformance/acp_smoke/task.md +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/conformance/acp_smoke/task.toml +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/conformance/acp_smoke/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/conformance/conformance-results.json +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/conformance/proof_multi_agent.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/conformance/proof_snapshot.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/conformance/run_conformance.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/conformance/self_gen_smoke_skills/skill-creator/SKILL.md +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/conftest.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/continue_run/__init__.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/continue_run/_helpers.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/continue_run/test_batch.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/continue_run/test_orchestrator.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/continue_run/test_replay_proxy.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/continue_run/test_run_folder.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/environment/__init__.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/environment/test_chibench_manifest.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/environment/test_clawsbench_manifest.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/environment/test_manifest.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/environment/test_manifest_env.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/environment/test_protocol.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/environment/test_readiness.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/examples/hello-world-task/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/examples/hello-world-task/instruction.md +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/examples/hello-world-task/solution/solve.sh +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/examples/hello-world-task/task.md +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/examples/hello-world-task/task.toml +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/examples/hello-world-task/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/examples/test_claude.sh +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/examples/test_codex.sh +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/examples/test_codex_custom_provider.sh +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/examples/test_gemini.sh +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/examples/test_openclaw.sh +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/examples/traces/minimal-claude.jsonl +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/examples/traces/minimal-opentraces.jsonl +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/digest/README.md +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/digest/alpha-task/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/digest/alpha-task/instruction.md +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/digest/alpha-task/task.toml +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/digest/alpha-task/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/digest/beta-task/data/empty.bin +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/digest/beta-task/data/unicode.txt +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/digest/beta-task/instruction.md +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/digest/beta-task/task.toml +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/digest/not-a-task/notes.txt +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/mock_acp_agent.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/mock_acp_agent_interleaved.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/mock_acp_agent_multi_turn.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/mock_openai_responses_server.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/data/michigan_stations.txt +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/flood-detection/SKILL.md +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/nws-flood-thresholds/SKILL.md +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/usgs-data-download/SKILL.md +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/flood-risk-analysis/instruction.md +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/flood-risk-analysis/solution/solve.sh +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/flood-risk-analysis/task.toml +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/flood-risk-analysis/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/flood-risk-analysis/tests/test_outputs.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/climate.csv +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/hydrology.csv +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/land_cover.csv +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/water_temperature.csv +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/contribution-analysis/SKILL.md +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/meteorology-driver-classification/SKILL.md +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/pca-decomposition/SKILL.md +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/trend-analysis/SKILL.md +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/lake-warming-attribution/instruction.md +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/lake-warming-attribution/solution/solve.sh +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/lake-warming-attribution/task.toml +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/lake-warming-attribution/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/lake-warming-attribution/tests/test_outputs.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/manifest.json +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/r2r_simulator.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/finite-horizon-lqr/SKILL.md +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/integral-action-design/SKILL.md +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/mpc-horizon-tuning/SKILL.md +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/state-space-linearization/SKILL.md +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/system_config.json +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/r2r-mpc-control/instruction.md +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/r2r-mpc-control/solution/solve.sh +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/r2r-mpc-control/task.toml +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/r2r-mpc-control/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/r2r-mpc-control/tests/test_outputs.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/generate_training_pcaps.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/local.rules +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/pcap-triage-tshark/SKILL.md +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/pcap-triage-tshark/scripts/summarize_http_requests.sh +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-offline-evejson/SKILL.md +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-offline-evejson/scripts/run_suricata_offline.sh +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-rules-basics/SKILL.md +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/suricata.yaml +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/instruction.md +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/solution/solve.sh +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/task.toml +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/tests/test_outputs.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syz-extract-constants/SKILL.md +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syzkaller-build-loop/SKILL.md +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syzlang-ioctl-basics/SKILL.md +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/instruction.md +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/solution/solve.sh +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/task.toml +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/tests/test_outputs.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/integration/_consistency.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/integration/agent_judge.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/integration/check_adapter_evidence.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/integration/check_hosted_env_evidence.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/integration/check_results.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/integration/check_skillsbench_harbor_parity.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/integration/check_trace_to_task_evidence.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/integration/configs/claude-agent-acp.yaml +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/integration/configs/codex-acp.yaml +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/integration/configs/gemini.yaml +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/integration/configs/harvey-lab-harness.yaml +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/integration/configs/mimo.yaml +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/integration/configs/openclaw.yaml +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/integration/configs/opencode.yaml +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/integration/configs/openhands.yaml +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/integration/configs/pi-acp.yaml +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/integration/deepagents_harness.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/integration/rubric_checks.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/integration/run.sh +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/integration/run_suite.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/integration/scenarios.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/integration/suites/release.yaml +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_acceptance_evidence.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_acceptance_live.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_acceptance_live_execution.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_acp_capability_advertising.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_acp_mcp_servers.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_acp_model_config_dispatch.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_acp_pinned_protocol_guard.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_acp_setup_failure_propagation.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_adapter_scripts.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_adapters.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_agent_cli.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_agent_env_resolution.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_agent_gemini_defaults.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_agent_idle_timeout_cli.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_agent_model_decouple.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_agent_registry.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_agent_router.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_agent_router_cli_e2e.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_agent_router_scaffold.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_agent_setup.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_agent_spec.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_agentcore_builder.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_agentcore_parallel.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_agentcore_reaper.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_agentcore_sandbox.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_agentcore_transport.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_api_error_capture.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_apple_container_sandbox.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_bare_model_provider.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_base_install_imports.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_bedrock_thinking.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_benchflow_experiment_review_validator.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_benchmark_repos_resolve_repo_path.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_branch.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_build_context_stage.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_build_review_pack.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_capture_trajectory.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_check_skillsbench_harbor_parity.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_clawsbench_slice.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_cli_adopt_aliases.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_cli_arg_validation.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_cli_daytona.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_cli_docs_drift.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_cli_edge_case_hardening.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_cli_hub_env.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_cli_misc.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_codex_review.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_codex_self_write_auth.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_config_override.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_config_redaction.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_connect_as_env.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_console_error_truncation.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_console_progress.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_continuallearningbench_adapter.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_dataset_registry.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_daytona_command_polling.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_daytona_dind_compose_up.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_daytona_download.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_daytona_litellm_runtime.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_daytona_poll_deadline.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_daytona_reap.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_deepagents_agent.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_docker_prune_scoping.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_docker_uploads.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_docs_examples.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_eng50_capabilities.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_env_registry.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_env_setup.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_environment_manifest_controls.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_eval_artifact_cli.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_eval_filters_applied.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_eval_lift.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_eval_sharding.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_eval_single_task_summary.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_eval_source_provenance.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_eval_worker_retry.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_eval_zero_task_guard.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_evaluation_environment_manifest.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_exclude_tasks.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_filter_credentialed_cells.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_harvey_lab_shim.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_hilbench_adapter.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_hosted_env.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_hosted_env_rollout_contract.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_hub_harbor_registry.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_inbound_adapter_manifest.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_inbound_adapters.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_integration_agent_judge.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_integration_check_results.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_integration_consistency.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_integration_matrix.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_integration_provider_selection.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_integration_run_suite.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_integration_suite.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_internet_policy.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_job_sequential_shared.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_job_sequential_shared_resume.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_judge_robustness.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_judge_symlink_ingestion.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_learner_skills.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_learner_skills_traversal.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_learner_store.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_learner_store_persistence.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_litellm_config.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_litellm_hardening.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_litellm_logging.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_litellm_model_via_env_generic.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_litellm_reasoning_passthrough.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_litellm_runtime.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_litellm_smoke.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_live_llm_trajectory.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_llm_judge.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_llm_judge_event_tags.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_llm_judge_verifier.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_loop_strategies.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_loop_summary.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_loop_sweep.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_memory_scorer.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_metrics.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_mle_bench_adapter.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_mock_openai_responses_server.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_monitor_scaffold.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_native_acp_usage.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_no_cross_provider_fallback.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_notification_order_real.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_opencode_family_proxy_tracking.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_oracle.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_oracle_chokepoint.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_paths_safe.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_paths_symlink_helpers.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_pi_acp_launcher.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_pi_acp_proxy_routing.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_process.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_project_skills_layout.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_provider_auth_detection.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_providers.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_reexport.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_registry_invariants.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_release_hardening_r5.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_release_version.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_release_workflow_wiring.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_resolve_env_helpers.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_review_boundaries.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_review_rubric.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_review_runtime.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_reward_lenient.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_reward_node.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_reward_range.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_reward_unified_contract.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_rewards.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_rewards_jsonl.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_rollout_architecture.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_rollout_branch.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_rollout_config_path_coercion.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_rollout_environment.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_rollout_hard_deadline.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_rollout_import_no_side_effects.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_rollout_on_ask_user_wiring.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_rollout_planes_contract.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_rollout_probe_sandbox_health.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_rollout_session_factory_dispatch.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_rollout_setup_commands.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_rollout_upload.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_rubric_checks.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_rubric_config.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_runtime.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_runtime_capabilities.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_runtime_config_wired.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_runtime_live_sandbox.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_sandbox.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_sandbox_exec_secret_handling.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_sandbox_hardening.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_sandbox_isolation_copy_traversal.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_sandbox_live_process.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_sandbox_multi_service.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_sandbox_prebuilt_validation.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_sandbox_protocol.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_sandbox_provider_registry_drift.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_sandbox_setup.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_sandbox_snapshot_contract.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_sandbox_upload_symlink.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_sandbox_verifier_workspace.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_scene.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_scene_outbox_trial.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_scene_parallel_group.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_scene_result_aggregation.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_scoring.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_sdk_internals.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_sdk_lockdown.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_sdk_run_alias.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_sealed_channel_container.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_self_gen_cli.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_self_gen_export_error_channel.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_self_gen_export_failures.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_self_gen_orchestration.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_session_factory_runtime.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_session_request_permission_dispatch.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_skill_eval.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_skill_eval_dryrun.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_skill_eval_integration.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_skill_eval_sweep.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_skill_eval_traversal.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_skill_invocation_artifacts.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_skill_policy.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_skills.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_skills_dir_agent_home_link.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_skillsbench_conversion_conformance.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_skillsbench_harbor_run_suite.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_smoke.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_smoke_wiring.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_source_adapters.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_subscription_auth.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_task_check_eval_consistency.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_task_config.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_task_digest.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_task_document.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_task_download.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_task_export.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_task_output_format.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_task_package.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_task_runtime_primitive.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_tasks.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_token_usage_normalization.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_trace_import_cli.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_trace_task_gen_traversal.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_trace_to_task_evidence.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_traces_huggingface.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_traces_parsers.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_traces_task_gen.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_train_cli.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_train_mode_artifact_emission.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_train_trl_cli.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_trajectory_integration.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_trajectory_streaming.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_trial_agent_timeout_verify.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_trial_install_agent_timeout.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_trial_litellm_runtime.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_trl_integration.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_usage_litellm.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_usage_required.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_usage_tracking.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_user.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_v06_guard_ports.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_verifier_document.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_verifier_multi_container.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_verifier_output.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_verifier_output_freshness.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_verifier_strategies.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_verifier_wedge_retry.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_verify.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_workflow_action_pinning.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/test_yaml_config.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/trajectories/__init__.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/trajectories/test_export.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/trajectories/test_export_adp.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/trajectories/test_export_atif.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/trajectories/test_export_common.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/trajectories/test_export_nan_handling.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/trajectories/test_export_prime_sft.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/trajectories/test_redaction.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/trajectories/test_step_granularity.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/tests/trajectories/test_tree.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: benchflow
|
|
3
|
-
Version: 0.6.7.
|
|
3
|
+
Version: 0.6.7.dev1831
|
|
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
|
|
@@ -12,7 +12,34 @@ never to a render error.
|
|
|
12
12
|
from __future__ import annotations
|
|
13
13
|
|
|
14
14
|
import threading
|
|
15
|
-
from typing import Any
|
|
15
|
+
from typing import Any, NamedTuple
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class SessionCounters(NamedTuple):
|
|
19
|
+
"""The live ACP session counters the console heartbeat logs.
|
|
20
|
+
|
|
21
|
+
``total_tokens`` is None until the session has a usage snapshot (i.e.
|
|
22
|
+
after a completed prompt).
|
|
23
|
+
"""
|
|
24
|
+
|
|
25
|
+
tool_calls: int
|
|
26
|
+
last_tool: str
|
|
27
|
+
total_tokens: int | None
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
class ActivitySnapshot(NamedTuple):
|
|
31
|
+
"""One dashboard poll of a live rollout.
|
|
32
|
+
|
|
33
|
+
``phase`` is the rollout's lifecycle phase (``Rollout._phase``) and is
|
|
34
|
+
always present, so the activity cell can label the long non-agent
|
|
35
|
+
stretches — sandbox create, agent install, verify — instead of blanking
|
|
36
|
+
in a way that is indistinguishable from a hang. ``counters`` is None
|
|
37
|
+
until the agent session exists (session-factory agents never grow one).
|
|
38
|
+
"""
|
|
39
|
+
|
|
40
|
+
phase: str
|
|
41
|
+
counters: SessionCounters | None
|
|
42
|
+
|
|
16
43
|
|
|
17
44
|
_lock = threading.Lock()
|
|
18
45
|
# Task name -> live Rollout. Task basenames are unique keys by engine-wide
|
|
@@ -33,11 +60,13 @@ def unregister(task_name: str) -> None:
|
|
|
33
60
|
_live.pop(task_name, None)
|
|
34
61
|
|
|
35
62
|
|
|
36
|
-
def activity(task_name: str) ->
|
|
37
|
-
"""
|
|
63
|
+
def activity(task_name: str) -> ActivitySnapshot | None:
|
|
64
|
+
"""The :class:`ActivitySnapshot` for a running task, or None when the
|
|
65
|
+
rollout isn't registered (pre-create, between retries, teardown).
|
|
38
66
|
|
|
39
|
-
None until the task's agent session
|
|
40
|
-
(session-factory) agents, which never grow an
|
|
67
|
+
``counters`` inside the snapshot is None until the task's agent session
|
|
68
|
+
exists — including non-ACP (session-factory) agents, which never grow an
|
|
69
|
+
ACP client — but ``phase`` is always present. The dig into
|
|
41
70
|
client/session state lives on ``Rollout.activity_snapshot()`` (typed,
|
|
42
71
|
owner-side); the except here only guards renders racing rollout teardown.
|
|
43
72
|
"""
|
{benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/acp/container_transport.py
RENAMED
|
@@ -6,12 +6,58 @@ from pathlib import Path
|
|
|
6
6
|
from typing import Any, TextIO
|
|
7
7
|
|
|
8
8
|
from benchflow.sandbox.process import LiveProcess
|
|
9
|
+
from benchflow.sandbox.process._base import _ANSI_CSI_RE, _ANSI_OSC_RE
|
|
9
10
|
|
|
10
11
|
from .transport import Transport, decode_json_rpc_message
|
|
11
12
|
|
|
12
13
|
logger = logging.getLogger(__name__)
|
|
13
14
|
|
|
14
15
|
|
|
16
|
+
def _decode_pty_json_rpc_message(text: str) -> dict[str, Any] | None:
|
|
17
|
+
"""Decode one JSON-RPC message from a line that may carry PTY noise.
|
|
18
|
+
|
|
19
|
+
Daytona's PTY transport gives the agent a real terminal, so the shell
|
|
20
|
+
prompt (with its CSI/OSC escape sequences) can land on the SAME line as
|
|
21
|
+
the agent's first protocol message — observed on BugSwarm-style images
|
|
22
|
+
as ``\\x1b[?2004h\\x1b]0;root@…\\x07root@…# \\x1b[?2004l{"jsonrpc":…}``.
|
|
23
|
+
Whole-line ``json.loads`` fails on that prefix, the response is treated
|
|
24
|
+
as non-protocol noise, and the handshake "times out" with the completed
|
|
25
|
+
initialize JSON sitting in the captured agent log — at ANY timeout.
|
|
26
|
+
|
|
27
|
+
Recovery is bounded to where the bug lives: :meth:`ContainerTransport.
|
|
28
|
+
receive` calls this lenient path only until the first successfully
|
|
29
|
+
decoded protocol message per connection (prompt glue is by construction
|
|
30
|
+
a pre-first-message PTY phenomenon), and stdio pipes keep the strict
|
|
31
|
+
whole-line contract in :func:`decode_json_rpc_message`.
|
|
32
|
+
|
|
33
|
+
1. fast path — the plain whole-line decode, unchanged;
|
|
34
|
+
2. retry from the first ``{`` when it is not at position 0 (drops a
|
|
35
|
+
glued prompt prefix);
|
|
36
|
+
3. if the line carries ``\\x1b``, strip CSI/OSC sequences (drops escapes
|
|
37
|
+
trailing or embedded around the JSON) and retry from the first ``{``.
|
|
38
|
+
|
|
39
|
+
Every retry still goes through :func:`decode_json_rpc_message`, so the
|
|
40
|
+
JSON-RPC 2.0 envelope check keeps rejecting agent log lines that merely
|
|
41
|
+
contain JSON (e.g. ``INFO {"jsonrpc": …}`` with a bad envelope).
|
|
42
|
+
"""
|
|
43
|
+
message = decode_json_rpc_message(text)
|
|
44
|
+
if message is not None:
|
|
45
|
+
return message
|
|
46
|
+
if "{" not in text:
|
|
47
|
+
return None
|
|
48
|
+
brace = text.index("{")
|
|
49
|
+
if brace: # brace == 0 would just repeat the whole-line decode
|
|
50
|
+
message = decode_json_rpc_message(text[brace:])
|
|
51
|
+
if message is not None:
|
|
52
|
+
return message
|
|
53
|
+
if "\x1b" not in text:
|
|
54
|
+
return None
|
|
55
|
+
cleaned = _ANSI_CSI_RE.sub("", _ANSI_OSC_RE.sub("", text))
|
|
56
|
+
if "{" not in cleaned:
|
|
57
|
+
return None
|
|
58
|
+
return decode_json_rpc_message(cleaned[cleaned.index("{") :])
|
|
59
|
+
|
|
60
|
+
|
|
15
61
|
class ContainerTransport(Transport):
|
|
16
62
|
"""ACP transport that speaks to an agent running inside a sandbox.
|
|
17
63
|
|
|
@@ -34,6 +80,12 @@ class ContainerTransport(Transport):
|
|
|
34
80
|
self._cwd = cwd
|
|
35
81
|
self._agent_log_path = agent_log_path
|
|
36
82
|
self._agent_log_file: TextIO | None = None
|
|
83
|
+
# First-message latch: the lenient PTY-noise decode applies only
|
|
84
|
+
# until the first successfully decoded protocol message (prompt glue
|
|
85
|
+
# is a startup phenomenon). Afterwards the strict whole-line decode
|
|
86
|
+
# rules, so an agent echoing valid protocol envelopes into its logs
|
|
87
|
+
# mid-session can never impersonate protocol traffic.
|
|
88
|
+
self._saw_protocol = False
|
|
37
89
|
|
|
38
90
|
async def start(self) -> None:
|
|
39
91
|
"""Start the agent process inside the sandbox."""
|
|
@@ -65,8 +117,12 @@ class ContainerTransport(Transport):
|
|
|
65
117
|
text = line.decode(errors="replace").strip()
|
|
66
118
|
if not text:
|
|
67
119
|
continue
|
|
68
|
-
|
|
120
|
+
if self._saw_protocol:
|
|
121
|
+
message = decode_json_rpc_message(text)
|
|
122
|
+
else:
|
|
123
|
+
message = _decode_pty_json_rpc_message(text)
|
|
69
124
|
if message is not None:
|
|
125
|
+
self._saw_protocol = True
|
|
70
126
|
return message
|
|
71
127
|
# Capture non-protocol output (agent debug logs, errors, warnings).
|
|
72
128
|
if self._agent_log_path:
|
|
@@ -6,10 +6,11 @@ Owns the live agent-side of a run:
|
|
|
6
6
|
- execute_prompts: send each prompt through the session, capture the
|
|
7
7
|
ACP-native trajectory, and report tool-call counts
|
|
8
8
|
|
|
9
|
-
The
|
|
10
|
-
``from benchflow.sandbox.lockdown import build_priv_drop_cmd
|
|
11
|
-
the agent launch command in the sandbox user's privilege-drop prefix
|
|
12
|
-
before handing it to the transport
|
|
9
|
+
The allowed horizontal phase imports in this refactor live here:
|
|
10
|
+
``from benchflow.sandbox.lockdown import build_priv_drop_cmd`` (connect_acp
|
|
11
|
+
wraps the agent launch command in the sandbox user's privilege-drop prefix
|
|
12
|
+
before handing it to the transport) and the shared timeout-env parser from
|
|
13
|
+
``benchflow.sandbox.process._base``. Both are single pure-function calls
|
|
13
14
|
with no shared state — not a coupling of concerns.
|
|
14
15
|
|
|
15
16
|
Does not own:
|
|
@@ -46,6 +47,7 @@ from benchflow.sandbox.lockdown import (
|
|
|
46
47
|
build_priv_drop_cmd,
|
|
47
48
|
enforce_agent_egress_firewall,
|
|
48
49
|
)
|
|
50
|
+
from benchflow.sandbox.process._base import _timeout_sec_from_env
|
|
49
51
|
from benchflow.trajectories._capture import _capture_session_trajectory
|
|
50
52
|
|
|
51
53
|
# Re-exported for backwards compatibility — tests and downstream code
|
|
@@ -65,10 +67,27 @@ logger = logging.getLogger(__name__)
|
|
|
65
67
|
_ACP_CONNECT_MAX_RETRIES = 3
|
|
66
68
|
_ACP_CONNECT_BASE_DELAY = 2.0
|
|
67
69
|
_PROMPT_CANCEL_DRAIN_TIMEOUT_SEC = 0.25
|
|
68
|
-
|
|
70
|
+
_ACP_HANDSHAKE_TIMEOUT_ENV = "BENCHFLOW_ACP_HANDSHAKE_TIMEOUT"
|
|
71
|
+
_ACP_HANDSHAKE_TIMEOUT_DEFAULT_SEC = 60.0
|
|
69
72
|
_OPENHANDS_DISABLE_SUBAGENTS_ENV = "BENCHFLOW_OPENHANDS_DISABLE_SUBAGENTS"
|
|
70
73
|
|
|
71
74
|
|
|
75
|
+
def _acp_handshake_timeout_sec() -> float:
|
|
76
|
+
"""Effective timeout for the pre-prompt ACP handshake, in seconds.
|
|
77
|
+
|
|
78
|
+
Agent startup cost scales with the task image — heavyweight images
|
|
79
|
+
(workspace scanning, kernel prep) can push the ``initialize`` response
|
|
80
|
+
past the 60s default, so operators can override it with
|
|
81
|
+
``BENCHFLOW_ACP_HANDSHAKE_TIMEOUT`` (seconds). Parsing (use-time read,
|
|
82
|
+
positive-float validation, warn-and-fall-back) is shared with the other
|
|
83
|
+
transport timeout knobs in :mod:`benchflow.sandbox.process._base`.
|
|
84
|
+
"""
|
|
85
|
+
return _timeout_sec_from_env(
|
|
86
|
+
_ACP_HANDSHAKE_TIMEOUT_ENV,
|
|
87
|
+
_ACP_HANDSHAKE_TIMEOUT_DEFAULT_SEC,
|
|
88
|
+
)
|
|
89
|
+
|
|
90
|
+
|
|
72
91
|
async def _prepare_openhands_direct_execution(
|
|
73
92
|
env,
|
|
74
93
|
*,
|
|
@@ -129,13 +148,11 @@ async def _prepare_openhands_direct_execution(
|
|
|
129
148
|
|
|
130
149
|
|
|
131
150
|
async def _wait_for_acp_handshake(awaitable, *, phase: str):
|
|
151
|
+
timeout_sec = _acp_handshake_timeout_sec()
|
|
132
152
|
try:
|
|
133
|
-
return await asyncio.wait_for(awaitable, timeout=
|
|
153
|
+
return await asyncio.wait_for(awaitable, timeout=timeout_sec)
|
|
134
154
|
except TimeoutError as e:
|
|
135
|
-
msg =
|
|
136
|
-
f"ACP {phase} timed out after {_ACP_HANDSHAKE_TIMEOUT_SEC}s "
|
|
137
|
-
"before the first prompt"
|
|
138
|
-
)
|
|
155
|
+
msg = f"ACP {phase} timed out after {timeout_sec:g}s before the first prompt"
|
|
139
156
|
raise TransportClosedError(
|
|
140
157
|
msg,
|
|
141
158
|
TransportClosedDiagnostic(
|
|
@@ -128,24 +128,49 @@ def _fmt_tokens(n: int) -> str:
|
|
|
128
128
|
return str(n)
|
|
129
129
|
|
|
130
130
|
|
|
131
|
+
# Rollout lifecycle phase (Rollout._phase — the completed phase, except
|
|
132
|
+
# "verifying" which verify() marks at entry) -> what is running now. Shown
|
|
133
|
+
# while the session counters are unavailable — before the agent session
|
|
134
|
+
# exists and after it is torn down — so sandbox create, agent install, and
|
|
135
|
+
# the verifier read as work, not as a hang.
|
|
136
|
+
_PHASE_LABELS = {
|
|
137
|
+
"created": "creating sandbox…",
|
|
138
|
+
"setup": "creating sandbox…",
|
|
139
|
+
"started": "installing agent…",
|
|
140
|
+
"installed": "running agent…",
|
|
141
|
+
"connected": "running agent…",
|
|
142
|
+
"executed": "verifying…",
|
|
143
|
+
"verifying": "verifying…",
|
|
144
|
+
"verified": "cleaning up…",
|
|
145
|
+
"cleaned": "cleaning up…",
|
|
146
|
+
}
|
|
147
|
+
# Unknown phases (e.g. "branched") and pre-register/teardown races: still
|
|
148
|
+
# never blank — a blank cell on a live row reads as a hang.
|
|
149
|
+
_PHASE_FALLBACK = "starting…"
|
|
150
|
+
|
|
151
|
+
|
|
131
152
|
def _activity_cell(name: str) -> str:
|
|
132
153
|
"""Per-task activity for the "running now" table, e.g.
|
|
133
154
|
``38 calls · last: file_editor``.
|
|
134
155
|
|
|
135
156
|
Polls the live rollout's ACP session counters — the same ones the console
|
|
136
157
|
heartbeat logs, which the Live display otherwise mutes — via the
|
|
137
|
-
live-activity registry.
|
|
138
|
-
|
|
158
|
+
live-activity registry. Until the agent session exists (and after it is
|
|
159
|
+
closed for the verifier) the cell shows the rollout's lifecycle phase as a
|
|
160
|
+
label instead, so the row is never blank. Tokens appear only once the
|
|
161
|
+
session has a usage snapshot (i.e. after a completed prompt).
|
|
139
162
|
"""
|
|
140
163
|
snap = live_activity.activity(name)
|
|
141
164
|
if snap is None:
|
|
142
|
-
return
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
if
|
|
148
|
-
cell += f" ·
|
|
165
|
+
return _PHASE_FALLBACK
|
|
166
|
+
counters = snap.counters
|
|
167
|
+
if counters is None:
|
|
168
|
+
return _PHASE_LABELS.get(snap.phase, _PHASE_FALLBACK)
|
|
169
|
+
cell = f"{counters.tool_calls} calls"
|
|
170
|
+
if counters.total_tokens:
|
|
171
|
+
cell += f" · {_fmt_tokens(counters.total_tokens)} tok"
|
|
172
|
+
if counters.last_tool:
|
|
173
|
+
cell += f" · last: {counters.last_tool[:30]}"
|
|
149
174
|
return cell
|
|
150
175
|
|
|
151
176
|
|
|
@@ -18,10 +18,12 @@ import typer
|
|
|
18
18
|
from rich.console import Console
|
|
19
19
|
from rich.markup import escape
|
|
20
20
|
|
|
21
|
+
from benchflow._utils.text import truncate_end
|
|
22
|
+
|
|
21
23
|
if TYPE_CHECKING:
|
|
22
24
|
from pathlib import Path
|
|
23
25
|
|
|
24
|
-
from benchflow.evaluation import EvaluationResult
|
|
26
|
+
from benchflow.evaluation import EvaluationResult, TaskFailure
|
|
25
27
|
|
|
26
28
|
console = Console()
|
|
27
29
|
|
|
@@ -100,14 +102,52 @@ def _exit_if_evaluation_had_errors(result: object) -> None:
|
|
|
100
102
|
raise typer.Exit(1)
|
|
101
103
|
|
|
102
104
|
|
|
105
|
+
# Final-block failure lines: keep the block skimmable on big jobs and each
|
|
106
|
+
# line inside a typical terminal width.
|
|
107
|
+
_MAX_FAILURE_LINES = 5
|
|
108
|
+
_FAILURE_LINE_LIMIT = 100
|
|
109
|
+
_FAILURE_REASON_METRICS = 3
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
def _failure_reason(failure: TaskFailure) -> str:
|
|
113
|
+
"""One cheap line explaining why a FAILED (scored, reward != 1) task
|
|
114
|
+
failed, from evidence already on the result — no file reads.
|
|
115
|
+
|
|
116
|
+
Priority: the verifier's own error if set; else the reward plus a compact
|
|
117
|
+
breakdown of the named metrics in the reward dict (zero/failed metrics
|
|
118
|
+
first — they explain the miss); else just the reward.
|
|
119
|
+
"""
|
|
120
|
+
if failure.verifier_error:
|
|
121
|
+
# Collapse whitespace: verifier errors are routinely multi-line.
|
|
122
|
+
return " ".join(failure.verifier_error.split())
|
|
123
|
+
rewards = failure.rewards or {}
|
|
124
|
+
reward = rewards.get("reward")
|
|
125
|
+
metrics = [
|
|
126
|
+
(name, value)
|
|
127
|
+
for name, value in rewards.items()
|
|
128
|
+
if name != "reward" and isinstance(value, (bool, int, float))
|
|
129
|
+
]
|
|
130
|
+
if not metrics:
|
|
131
|
+
return f"reward {reward}"
|
|
132
|
+
# Zero/failed metrics first (stable within each group), capped so one
|
|
133
|
+
# metric-happy verifier can't flood the line.
|
|
134
|
+
metrics.sort(key=lambda kv: kv[1] != 0)
|
|
135
|
+
shown = ", ".join(
|
|
136
|
+
f"{name} {value}" for name, value in metrics[:_FAILURE_REASON_METRICS]
|
|
137
|
+
)
|
|
138
|
+
return f"reward {reward} — {shown}"
|
|
139
|
+
|
|
140
|
+
|
|
103
141
|
def _report_eval_result(result: EvaluationResult, job_dir: Path | None = None) -> None:
|
|
104
142
|
"""Print the Score/errors summary line, colored by outcome, plus artifacts.
|
|
105
143
|
|
|
106
144
|
A clean pass and a total failure used to look identical (both bold white);
|
|
107
145
|
now the line is green only on a full clean pass, red on a shutout, amber
|
|
108
|
-
otherwise, and ``errors=N`` is red when non-zero.
|
|
109
|
-
|
|
110
|
-
|
|
146
|
+
otherwise, and ``errors=N`` is red when non-zero. Each FAILED task gets one
|
|
147
|
+
dim ``✗ task: reason`` line (capped at ``_MAX_FAILURE_LINES``) so the "why"
|
|
148
|
+
doesn't require opening summary.json. When ``job_dir`` is given, the
|
|
149
|
+
result/summary paths are printed so testers know where to look (the guide
|
|
150
|
+
repeatedly says "read summary.json" but the CLI never said where).
|
|
111
151
|
"""
|
|
112
152
|
errors = int(getattr(result, "errored", 0) or 0)
|
|
113
153
|
verifier_errors = int(getattr(result, "verifier_errored", 0) or 0)
|
|
@@ -132,6 +172,19 @@ def _report_eval_result(result: EvaluationResult, job_dir: Path | None = None) -
|
|
|
132
172
|
f"\n[{style}]{mark} Score: {result.passed}/{result.total} "
|
|
133
173
|
f"({result.score:.1%})[/{style}]{err_part}"
|
|
134
174
|
)
|
|
175
|
+
# One dim reason line per FAILED task, so "0/1" doesn't force a dig into
|
|
176
|
+
# summary.json to learn why. getattr(): sharded aggregation and older
|
|
177
|
+
# SimpleNamespace-style callers don't carry task_failures.
|
|
178
|
+
failures = getattr(result, "task_failures", None) or []
|
|
179
|
+
for failure in failures[:_MAX_FAILURE_LINES]:
|
|
180
|
+
line = truncate_end(
|
|
181
|
+
f" ✗ {failure.task_name}: {_failure_reason(failure)}",
|
|
182
|
+
_FAILURE_LINE_LIMIT,
|
|
183
|
+
)
|
|
184
|
+
console.print(f"[dim]{escape(line)}[/dim]")
|
|
185
|
+
extra = len(failures) - _MAX_FAILURE_LINES
|
|
186
|
+
if extra > 0:
|
|
187
|
+
console.print(f"[dim] … and {extra} more[/dim]")
|
|
135
188
|
if job_dir is not None:
|
|
136
189
|
console.print(f"[dim]Artifacts:[/dim] {escape(str(job_dir))}")
|
|
137
190
|
console.print(f"[dim]Summary: [/dim] {escape(str(job_dir))}/summary.json")
|
|
@@ -389,8 +389,9 @@ def eval_run(
|
|
|
389
389
|
typer.Option(
|
|
390
390
|
"--quiet",
|
|
391
391
|
help=(
|
|
392
|
-
"Suppress the
|
|
393
|
-
"'… Nmin, K
|
|
392
|
+
"Suppress live progress output: the Rich dashboard on a TTY "
|
|
393
|
+
"and the per-run console progress heartbeat (the '… Nmin, K "
|
|
394
|
+
"tool calls' lines during agent execution)."
|
|
394
395
|
),
|
|
395
396
|
),
|
|
396
397
|
] = False,
|
|
@@ -597,6 +598,9 @@ def eval_run(
|
|
|
597
598
|
# Explicit off beats the session layer's auto-gate; see
|
|
598
599
|
# benchflow.acp.session._console_progress_enabled.
|
|
599
600
|
os.environ["BENCHFLOW_PROGRESS"] = "off"
|
|
601
|
+
# --quiet silences ALL live progress: the heartbeat lines above and
|
|
602
|
+
# the TTY Rich dashboard (see cli._live_progress.progress_enabled).
|
|
603
|
+
os.environ["BENCHFLOW_NO_PROGRESS"] = "1"
|
|
600
604
|
|
|
601
605
|
request = EvalCreateRequest(
|
|
602
606
|
config_file=config_file,
|
|
@@ -60,6 +60,7 @@ from benchflow._utils.scoring import (
|
|
|
60
60
|
VERIFIER_TIMEOUT,
|
|
61
61
|
api_error_is_transient,
|
|
62
62
|
classify_error,
|
|
63
|
+
classify_score_outcome,
|
|
63
64
|
classify_verifier_error,
|
|
64
65
|
count_audit_outcomes,
|
|
65
66
|
count_score_outcomes,
|
|
@@ -574,6 +575,21 @@ class EvaluationConfig:
|
|
|
574
575
|
)
|
|
575
576
|
|
|
576
577
|
|
|
578
|
+
@dataclass(frozen=True)
|
|
579
|
+
class TaskFailure:
|
|
580
|
+
"""Cheap failure evidence for one FAILED (scored, reward != 1) task.
|
|
581
|
+
|
|
582
|
+
Carried on :class:`EvaluationResult` so the CLI's final block can print a
|
|
583
|
+
one-line reason per failed task from data the engine already holds —
|
|
584
|
+
without re-reading result.json files. Errored tasks are excluded (they
|
|
585
|
+
already surface through the error counters and warning replay).
|
|
586
|
+
"""
|
|
587
|
+
|
|
588
|
+
task_name: str
|
|
589
|
+
rewards: dict[str, Any] | None
|
|
590
|
+
verifier_error: str | None
|
|
591
|
+
|
|
592
|
+
|
|
577
593
|
@dataclass
|
|
578
594
|
class EvaluationResult:
|
|
579
595
|
"""Aggregated results for a job."""
|
|
@@ -588,6 +604,7 @@ class EvaluationResult:
|
|
|
588
604
|
elapsed_sec: float = 0.0
|
|
589
605
|
memory_score: float | None = None
|
|
590
606
|
memory_scores: dict[str, float] = field(default_factory=dict)
|
|
607
|
+
task_failures: list[TaskFailure] = field(default_factory=list)
|
|
591
608
|
|
|
592
609
|
@property
|
|
593
610
|
def score(self) -> float:
|
|
@@ -1776,6 +1793,18 @@ class Evaluation:
|
|
|
1776
1793
|
score_counts = count_score_outcomes(all_results.values())
|
|
1777
1794
|
audit_counts = count_audit_outcomes(all_results.values())
|
|
1778
1795
|
memory, memory_scores = memory_summary(all_results)
|
|
1796
|
+
# Per-task failure evidence for the CLI's final block — FAILED (scored,
|
|
1797
|
+
# reward != 1) tasks only, from data already in memory. Sorted by name
|
|
1798
|
+
# so the printed lines are deterministic across resume/concurrency.
|
|
1799
|
+
task_failures = [
|
|
1800
|
+
TaskFailure(
|
|
1801
|
+
task_name=name,
|
|
1802
|
+
rewards=r.get("rewards"),
|
|
1803
|
+
verifier_error=r.get("verifier_error"),
|
|
1804
|
+
)
|
|
1805
|
+
for name, r in sorted(all_results.items())
|
|
1806
|
+
if classify_score_outcome(r) == "failed"
|
|
1807
|
+
]
|
|
1779
1808
|
job_result = EvaluationResult(
|
|
1780
1809
|
job_name=self._job_name,
|
|
1781
1810
|
config=cfg,
|
|
@@ -1791,6 +1820,7 @@ class Evaluation:
|
|
|
1791
1820
|
elapsed_sec=elapsed,
|
|
1792
1821
|
memory_score=memory["avg_score"],
|
|
1793
1822
|
memory_scores=memory_scores,
|
|
1823
|
+
task_failures=task_failures,
|
|
1794
1824
|
)
|
|
1795
1825
|
|
|
1796
1826
|
assert (
|
|
@@ -72,6 +72,7 @@ from benchflow._types import Role, Scene, Turn
|
|
|
72
72
|
# / ``_capture_session_trajectory`` / ``default_rollout_planes`` keep affecting
|
|
73
73
|
# the ``Rollout`` methods that call those names, because those methods stay
|
|
74
74
|
# defined in this module.
|
|
75
|
+
from benchflow._utils.live_activity import ActivitySnapshot, SessionCounters
|
|
75
76
|
from benchflow._utils.scoring import classify_error as classify_error
|
|
76
77
|
from benchflow.acp.types import McpServerSpec
|
|
77
78
|
from benchflow.agents.credentials import upload_credential
|
|
@@ -755,22 +756,26 @@ class Rollout:
|
|
|
755
756
|
def acp_client(self) -> Any:
|
|
756
757
|
return self._acp_client
|
|
757
758
|
|
|
758
|
-
def activity_snapshot(self) ->
|
|
759
|
-
"""
|
|
760
|
-
|
|
759
|
+
def activity_snapshot(self) -> ActivitySnapshot:
|
|
760
|
+
"""The eval dashboard's per-task :class:`ActivitySnapshot`: the
|
|
761
|
+
current lifecycle phase plus the live :class:`SessionCounters` (tool
|
|
762
|
+
calls, last tool title, total tokens). ``counters`` is None before
|
|
763
|
+
the agent session exists — the phase then carries the cell
|
|
764
|
+
("creating sandbox…", "verifying…"), so a 90s sandbox create is not
|
|
765
|
+
indistinguishable from a hang.
|
|
761
766
|
|
|
762
767
|
Rollout owns the client/session dig so a rename breaks here — in
|
|
763
768
|
typed, tested code — instead of silently blanking the dashboard cell
|
|
764
769
|
(see benchflow._utils.live_activity). Session-factory agents have no
|
|
765
|
-
ACP client and always
|
|
770
|
+
ACP client and always report counter-less snapshots.
|
|
766
771
|
"""
|
|
767
772
|
session = self._acp_client.session if self._acp_client else None
|
|
768
773
|
if session is None:
|
|
769
|
-
return None
|
|
774
|
+
return ActivitySnapshot(self._phase, None)
|
|
770
775
|
calls, last_title = session.progress_snapshot()
|
|
771
776
|
usage = session.latest_usage_totals()
|
|
772
777
|
tokens = usage.get("total_tokens") if usage else None
|
|
773
|
-
return calls, last_title, tokens
|
|
778
|
+
return ActivitySnapshot(self._phase, SessionCounters(calls, last_title, tokens))
|
|
774
779
|
|
|
775
780
|
@property
|
|
776
781
|
def trajectory(self) -> list[dict]:
|
|
@@ -1737,6 +1742,12 @@ class Rollout:
|
|
|
1737
1742
|
"""Run the verifier and return rewards."""
|
|
1738
1743
|
cfg = self._config
|
|
1739
1744
|
|
|
1745
|
+
# Mark the phase at entry (the other transitions mark completion):
|
|
1746
|
+
# the verifier can run for minutes after disconnect() reset the phase
|
|
1747
|
+
# to "installed", and the dashboard's activity cell reads _phase to
|
|
1748
|
+
# label that stretch "verifying…" instead of going blank.
|
|
1749
|
+
self._phase = "verifying"
|
|
1750
|
+
|
|
1740
1751
|
if not self._trajectory and cfg.primary_agent != "oracle":
|
|
1741
1752
|
scraped = await _scrape_agent_trajectory(
|
|
1742
1753
|
self._env, cfg.primary_agent, cfg.sandbox_user
|
|
@@ -23,6 +23,7 @@ from __future__ import annotations
|
|
|
23
23
|
import asyncio
|
|
24
24
|
import contextlib
|
|
25
25
|
import logging
|
|
26
|
+
import os
|
|
26
27
|
import re
|
|
27
28
|
from abc import ABC, abstractmethod
|
|
28
29
|
|
|
@@ -33,6 +34,41 @@ _DIAG_TRUNCATE = 2000 # max chars for diagnostic stderr in error messages
|
|
|
33
34
|
_BOOTSTRAP_DONE = "__BENCHFLOW_BOOTSTRAP_DONE__"
|
|
34
35
|
_ENV_KEY_RE = re.compile(r"^[A-Za-z_][A-Za-z0-9_]*$")
|
|
35
36
|
|
|
37
|
+
# Terminal control sequences a PTY-backed transport can interleave with
|
|
38
|
+
# protocol output: ECMA-48 CSI (parameter bytes 0x30-0x3F, intermediate
|
|
39
|
+
# bytes 0x20-0x2F, one final byte 0x40-0x7E) and OSC (BEL- or ST-terminated,
|
|
40
|
+
# e.g. the ``\x1b]0;<title>\x07`` window-title update shell prompts emit).
|
|
41
|
+
# One canonical pair — the AgentCore stdout chunker and the ACP container
|
|
42
|
+
# transport must not drift apart on what counts as terminal noise.
|
|
43
|
+
_ANSI_CSI_PATTERN = r"\x1b\[[0-?]*[ -/]*[@-~]"
|
|
44
|
+
_ANSI_OSC_PATTERN = r"\x1b\][^\x07\x1b]*(?:\x07|\x1b\\)"
|
|
45
|
+
_ANSI_CSI_RE = re.compile(_ANSI_CSI_PATTERN)
|
|
46
|
+
_ANSI_OSC_RE = re.compile(_ANSI_OSC_PATTERN)
|
|
47
|
+
_ANSI_CSI_RE_BYTES = re.compile(_ANSI_CSI_PATTERN.encode())
|
|
48
|
+
_ANSI_OSC_RE_BYTES = re.compile(_ANSI_OSC_PATTERN.encode())
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
def _timeout_sec_from_env(env_var: str, default: float) -> float:
|
|
52
|
+
"""Read a positive seconds value from *env_var*, else *default*.
|
|
53
|
+
|
|
54
|
+
The one parser for operator-tunable timeout knobs on this plane (PTY
|
|
55
|
+
readline timeouts, the ACP handshake window). Read at use time so
|
|
56
|
+
long-lived processes and tests see env changes. Unset or empty means
|
|
57
|
+
the default; non-numeric, non-positive, or NaN values warn and fall
|
|
58
|
+
back rather than disabling or breaking the guarded wait.
|
|
59
|
+
"""
|
|
60
|
+
raw = os.environ.get(env_var)
|
|
61
|
+
if raw is None or not raw.strip():
|
|
62
|
+
return default
|
|
63
|
+
try:
|
|
64
|
+
value = float(raw)
|
|
65
|
+
except ValueError:
|
|
66
|
+
value = float("nan")
|
|
67
|
+
if not value > 0: # also rejects NaN
|
|
68
|
+
logger.warning("Invalid %s=%r; using default %.0fs", env_var, raw, default)
|
|
69
|
+
return default
|
|
70
|
+
return value
|
|
71
|
+
|
|
36
72
|
|
|
37
73
|
async def drain_oversized_line(reader: asyncio.StreamReader) -> int:
|
|
38
74
|
"""Drain an oversized line from *reader* after a buffer overflow.
|
{benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/process/agentcore.py
RENAMED
|
@@ -19,12 +19,17 @@ from __future__ import annotations
|
|
|
19
19
|
import asyncio
|
|
20
20
|
import contextlib
|
|
21
21
|
import logging
|
|
22
|
-
import re
|
|
23
22
|
import shlex
|
|
24
23
|
import uuid
|
|
25
24
|
from typing import Any
|
|
26
25
|
|
|
27
|
-
from benchflow.sandbox.process._base import
|
|
26
|
+
from benchflow.sandbox.process._base import (
|
|
27
|
+
_ANSI_CSI_RE_BYTES,
|
|
28
|
+
_ANSI_OSC_RE_BYTES,
|
|
29
|
+
_ENV_KEY_RE,
|
|
30
|
+
LiveProcess,
|
|
31
|
+
_timeout_sec_from_env,
|
|
32
|
+
)
|
|
28
33
|
|
|
29
34
|
logger = logging.getLogger(__name__)
|
|
30
35
|
|
|
@@ -38,26 +43,10 @@ _READER_ENDED = object()
|
|
|
38
43
|
_START_MARKER_TIMEOUT_SEC = 180
|
|
39
44
|
_READLINE_TIMEOUT_ENV = "BENCHFLOW_AGENTCORE_READLINE_TIMEOUT"
|
|
40
45
|
_READLINE_TIMEOUT_DEFAULT_SEC = 900.0
|
|
41
|
-
_ANSI_CSI_RE = re.compile(rb"\x1b\[[0-?]*[ -/]*[@-~]")
|
|
42
46
|
|
|
43
47
|
|
|
44
48
|
def _readline_timeout_sec() -> float:
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
value = os.environ.get(_READLINE_TIMEOUT_ENV)
|
|
48
|
-
if value is None:
|
|
49
|
-
return _READLINE_TIMEOUT_DEFAULT_SEC
|
|
50
|
-
try:
|
|
51
|
-
timeout = float(value)
|
|
52
|
-
except ValueError:
|
|
53
|
-
logger.warning(
|
|
54
|
-
"Invalid %s=%r; using default %.0fs",
|
|
55
|
-
_READLINE_TIMEOUT_ENV,
|
|
56
|
-
value,
|
|
57
|
-
_READLINE_TIMEOUT_DEFAULT_SEC,
|
|
58
|
-
)
|
|
59
|
-
return _READLINE_TIMEOUT_DEFAULT_SEC
|
|
60
|
-
return timeout if timeout > 0 else _READLINE_TIMEOUT_DEFAULT_SEC
|
|
49
|
+
return _timeout_sec_from_env(_READLINE_TIMEOUT_ENV, _READLINE_TIMEOUT_DEFAULT_SEC)
|
|
61
50
|
|
|
62
51
|
|
|
63
52
|
class AgentCoreProcess(LiveProcess):
|
|
@@ -119,9 +108,12 @@ class AgentCoreProcess(LiveProcess):
|
|
|
119
108
|
line, self._partial = self._partial.split(b"\n", 1)
|
|
120
109
|
# Bash/readline emits bracketed-paste CSI sequences when a
|
|
121
110
|
# command takes over the PTY, including a standalone
|
|
122
|
-
# ``ESC[?2004l`` *after* the startup marker
|
|
123
|
-
#
|
|
124
|
-
|
|
111
|
+
# ``ESC[?2004l`` *after* the startup marker, and shell
|
|
112
|
+
# prompts emit OSC window-title updates. Those bytes are
|
|
113
|
+
# terminal state, never ACP JSON-RPC.
|
|
114
|
+
line = line.replace(b"\r", b"")
|
|
115
|
+
line = _ANSI_OSC_RE_BYTES.sub(b"", line)
|
|
116
|
+
line = _ANSI_CSI_RE_BYTES.sub(b"", line)
|
|
125
117
|
if line:
|
|
126
118
|
await self._line_buffer.put(line + b"\n")
|
|
127
119
|
except asyncio.CancelledError:
|
|
@@ -308,8 +300,10 @@ class AgentCoreProcess(LiveProcess):
|
|
|
308
300
|
# before echo suppression takes effect. Substring matching accepts
|
|
309
301
|
# that echoed command and releases startup too early, putting the
|
|
310
302
|
# prompt/command noise into ACP's JSON-RPC stream. The real marker
|
|
311
|
-
# is its own line, possibly wrapped in bracketed-paste ANSI codes
|
|
312
|
-
|
|
303
|
+
# is its own line, possibly wrapped in bracketed-paste ANSI codes
|
|
304
|
+
# or an OSC window-title update from the shell prompt.
|
|
305
|
+
cleaned = _ANSI_CSI_RE_BYTES.sub(b"", _ANSI_OSC_RE_BYTES.sub(b"", line))
|
|
306
|
+
text = cleaned.decode(errors="replace").strip()
|
|
313
307
|
if text == marker:
|
|
314
308
|
return
|
|
315
309
|
|