benchflow 0.6.7.dev1833__tar.gz → 0.6.7.dev1839__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.dev1833 → benchflow-0.6.7.dev1839}/CHANGELOG.md +8 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/PKG-INFO +1 -1
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/pyproject.toml +1 -1
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/_utils/env_registry.py +51 -8
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/_utils/scoring.py +21 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/cli/_shared.py +6 -1
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/cli/main.py +5 -4
- benchflow-0.6.7.dev1839/src/benchflow/environment/_registry/env0@outage.toml +63 -0
- benchflow-0.6.7.dev1839/src/benchflow/environment/_registry/env0@prod.toml +77 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/environment/manifest.py +3 -1
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/evaluation.py +23 -2
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_cli_live_progress.py +36 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_env_registry.py +116 -1
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_job.py +51 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_scoring.py +35 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/.gitignore +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/LICENSE +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/README.md +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/__init__.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/_dotenv.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/_paths.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/_run.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/_types.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/_utils/__init__.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/_utils/benchmark_repos.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/_utils/build_context_stage.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/_utils/config.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/_utils/config_override.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/_utils/content_address.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/_utils/dataset_registry.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/_utils/evaluation_results.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/_utils/hf_datasets.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/_utils/json_safe.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/_utils/learner_memory.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/_utils/live_activity.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/_utils/result_metadata.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/_utils/reward_events.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/_utils/source_provenance.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/_utils/task_authoring/__init__.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/_utils/task_authoring/_evidence_paths.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/_utils/task_authoring/acceptance_evidence.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/_utils/task_authoring/scaffolding.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/_utils/task_authoring/structural_checks.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/_utils/text.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/_utils/yaml_loader.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/acp/__init__.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/acp/client.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/acp/container_transport.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/acp/runtime.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/acp/selection.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/acp/session.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/acp/transport.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/acp/types.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/adapters/__init__.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/adapters/_toolathlon.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/adapters/_toolathlon_container.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/adapters/_toolathlon_fake_mail.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/adapters/_toolathlon_poste_users.tsv +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/adapters/_toolathlon_services.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/adapters/harbor.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/adapters/inbound.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/adapters/inspect_ai.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/adapters/ors.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/adapters/resources/__init__.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/adapters/resources/mcp_atlas_bridge.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/adapters/resources/mcp_atlas_judge.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/adapters/source.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/agent_router.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/agent_router_guide.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/agent_router_parity.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/agent_router_scaffold.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/agents/__init__.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/agents/codex_config.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/agents/credentials.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/agents/deepagents_acp_shim.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/agents/env.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/agents/errors.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/agents/harvey_lab_acp_shim.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/agents/install.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/agents/manifest.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/agents/openclaw_acp_shim.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/agents/pi_acp_launcher.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/agents/protocol.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/agents/providers.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/agents/registry.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/agents/remote_manifests.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/branch.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/cli/__init__.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/cli/_failure_evidence.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/cli/_hosted_env.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/cli/_live_progress.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/cli/_options.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/cli/adopt.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/cli/agent.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/cli/continue_cmd.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/cli/environment.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/cli/eval_artifacts.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/cli/eval_lift.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/cli/hub.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/cli/monitor.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/cli/review.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/cli/sandbox.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/cli/skills.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/cli/tasks.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/cli/trace_import.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/cli/train.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/continue_run/__init__.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/continue_run/batch.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/continue_run/orchestrator.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/continue_run/replay_proxy.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/continue_run/run_folder.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/continue_run/sandbox_proxy.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/contracts/__init__.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/contracts/planes.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/contracts/user.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/demo_task/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/demo_task/instruction.md +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/demo_task/task.md +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/demo_task/task.toml +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/demo_task/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/diagnostics.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/environment/__init__.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/environment/manifest_env.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/environment/protocol.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/environment/readiness.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/eval_artifacts.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/eval_lift.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/eval_plan.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/eval_sharding.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/eval_worker.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/experimental/__init__.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/experimental/mcp/__init__.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/experimental/mcp/hooks.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/experimental/mcp/reviewer_server.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/hosted_env.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/hub/__init__.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/hub/harbor_registry.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/integrations/__init__.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/integrations/trl/__init__.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/integrations/trl/spec.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/learner_skills.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/learner_store.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/loop_strategies.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/loop_sweep.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/metrics.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/models.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/monitor.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/providers/__init__.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/providers/litellm_bedrock_patch.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/providers/litellm_bedrock_preflight.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/providers/litellm_config.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/providers/litellm_logging.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/providers/litellm_runtime.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/providers/runtime.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/publish/__init__.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/publish/huggingface.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/py.typed +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/review/__init__.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/review/config.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/review/default-rubric.json +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/review/prompts.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/review/runner.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/review/wrapper.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/rewards/README.md +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/rewards/__init__.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/rewards/builtins.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/rewards/events.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/rewards/file_readers.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/rewards/llm.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/rewards/memory_scorer.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/rewards/node.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/rewards/protocol.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/rewards/rubric.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/rewards/rubric_config.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/rewards/validation.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/rollout/__init__.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/rollout/_config.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/rollout/_deadline.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/rollout/_results.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/rollout/_setup.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/rollout/_skills.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/rollout/_usage.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/rollout/_user_loop.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/rollout/session_factory_runtime.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/rollout/task_runtime.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/rollout_branch.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/rollout_planes.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/runtime.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/sandbox/__init__.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/sandbox/_base.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/sandbox/_cache_reclaim.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/sandbox/_compose.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/sandbox/_compose_files/docker-compose-base.yaml +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/sandbox/_compose_files/docker-compose-build.yaml +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/sandbox/_compose_files/docker-compose-no-network.yaml +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/sandbox/_compose_files/docker-compose-prebuilt.yaml +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/sandbox/_sdk_ops.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/sandbox/agentcore.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/sandbox/agentcore_builder.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/sandbox/agentcore_image.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/sandbox/agentcore_provisioning.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/sandbox/agentcore_reaper.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/sandbox/agentcore_sealed.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/sandbox/apple_container.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/sandbox/daytona.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/sandbox/daytona_dind.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/sandbox/daytona_pty.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/sandbox/daytona_reaper.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/sandbox/daytona_strategies.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/sandbox/docker.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/sandbox/lockdown.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/sandbox/metadata.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/sandbox/modal_impl.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/sandbox/process/__init__.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/sandbox/process/_base.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/sandbox/process/agentcore.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/sandbox/process/apple.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/sandbox/process/daytona.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/sandbox/process/docker.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/sandbox/protocol.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/sandbox/providers.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/sandbox/services.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/sandbox/setup.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/sandbox/snapshot.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/sandbox/user.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/scenes.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/sdk.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/self_gen.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/skill_eval/__init__.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/skill_eval/_core.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/skill_eval/gepa_export.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/skill_eval/schema.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/skill_policy.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/skills.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/task/__init__.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/task/_document_evidence.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/task/_document_normalize.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/task/_document_parse.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/task/_document_profiles.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/task/acceptance_live.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/task/acceptance_live_model.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/task/acceptance_live_report.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/task/acceptance_live_validation.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/task/config.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/task/discovery.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/task/document.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/task/env.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/task/export.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/task/imports.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/task/output_format.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/task/package.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/task/paths.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/task/prompts.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/task/runtime_capabilities.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/task/runtime_view.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/task/task.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/task/verifier.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/task/verifier_core.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/task/verifier_document.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/task/verifier_errors.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/task/verifier_judge_inputs.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/task/verifier_ors_episode.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/task/verifier_reward_kit.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/task/verifier_scan.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/task/verifier_script_strategy.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/templates/__init__.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/templates/judge.py.tmpl +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/templates/test.sh.tmpl +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/traces/__init__.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/traces/huggingface.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/traces/local.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/traces/models.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/traces/parsers.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/traces/task_gen.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/training/__init__.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/training/backends/__init__.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/training/backends/prime_rl.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/training/run_manifest.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/trajectories/__init__.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/trajectories/_capture.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/trajectories/_export_common.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/trajectories/_llm_capture.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/trajectories/call_purpose.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/trajectories/export.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/trajectories/export_adp.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/trajectories/export_atif.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/trajectories/export_prime_sft.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/trajectories/export_trl_sft.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/trajectories/metrics.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/trajectories/results.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/trajectories/tree.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/trajectories/trl_sft_tokenization.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/trajectories/types.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/trajectories/viewer.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/src/benchflow/usage_tracking.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/__init__.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/acceptance_live_harness.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/agents/__init__.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/agents/test_manifest_dirscan.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/agents/test_manifest_loader.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/agents/test_manifest_parity.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/agents/test_manifest_wiring.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/agents/test_namespace_shorthand.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/agents/test_plugin_entry_points.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/agents/test_protocol.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/agents/test_remote_manifest_autoload.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/conformance/README.md +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/conformance/acp_smoke/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/conformance/acp_smoke/environment/docker-compose.yaml +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/conformance/acp_smoke/environment/skills/conformance-writer/SKILL.md +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/conformance/acp_smoke/instruction.md +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/conformance/acp_smoke/solution/solve.sh +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/conformance/acp_smoke/task.md +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/conformance/acp_smoke/task.toml +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/conformance/acp_smoke/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/conformance/conformance-results.json +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/conformance/proof_multi_agent.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/conformance/proof_snapshot.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/conformance/run_conformance.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/conformance/self_gen_smoke_skills/skill-creator/SKILL.md +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/conftest.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/continue_run/__init__.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/continue_run/_helpers.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/continue_run/test_batch.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/continue_run/test_orchestrator.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/continue_run/test_replay_proxy.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/continue_run/test_run_folder.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/environment/__init__.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/environment/test_chibench_manifest.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/environment/test_clawsbench_manifest.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/environment/test_manifest.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/environment/test_manifest_env.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/environment/test_protocol.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/environment/test_readiness.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/examples/hello-world-task/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/examples/hello-world-task/instruction.md +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/examples/hello-world-task/solution/solve.sh +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/examples/hello-world-task/task.md +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/examples/hello-world-task/task.toml +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/examples/hello-world-task/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/examples/test_claude.sh +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/examples/test_codex.sh +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/examples/test_codex_custom_provider.sh +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/examples/test_gemini.sh +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/examples/test_openclaw.sh +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/examples/traces/minimal-claude.jsonl +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/examples/traces/minimal-opentraces.jsonl +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/digest/README.md +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/digest/alpha-task/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/digest/alpha-task/instruction.md +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/digest/alpha-task/task.toml +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/digest/alpha-task/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/digest/beta-task/data/empty.bin +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/digest/beta-task/data/unicode.txt +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/digest/beta-task/instruction.md +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/digest/beta-task/task.toml +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/digest/not-a-task/notes.txt +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/mock_acp_agent.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/mock_acp_agent_interleaved.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/mock_acp_agent_multi_turn.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/mock_openai_responses_server.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/data/michigan_stations.txt +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/flood-detection/SKILL.md +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/nws-flood-thresholds/SKILL.md +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/usgs-data-download/SKILL.md +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/flood-risk-analysis/instruction.md +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/flood-risk-analysis/solution/solve.sh +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/flood-risk-analysis/task.toml +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/flood-risk-analysis/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/flood-risk-analysis/tests/test_outputs.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/climate.csv +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/hydrology.csv +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/land_cover.csv +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/water_temperature.csv +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/contribution-analysis/SKILL.md +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/meteorology-driver-classification/SKILL.md +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/pca-decomposition/SKILL.md +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/trend-analysis/SKILL.md +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/lake-warming-attribution/instruction.md +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/lake-warming-attribution/solution/solve.sh +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/lake-warming-attribution/task.toml +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/lake-warming-attribution/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/lake-warming-attribution/tests/test_outputs.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/manifest.json +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/r2r_simulator.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/finite-horizon-lqr/SKILL.md +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/integral-action-design/SKILL.md +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/mpc-horizon-tuning/SKILL.md +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/state-space-linearization/SKILL.md +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/system_config.json +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/r2r-mpc-control/instruction.md +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/r2r-mpc-control/solution/solve.sh +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/r2r-mpc-control/task.toml +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/r2r-mpc-control/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/r2r-mpc-control/tests/test_outputs.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/generate_training_pcaps.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/local.rules +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/pcap-triage-tshark/SKILL.md +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/pcap-triage-tshark/scripts/summarize_http_requests.sh +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-offline-evejson/SKILL.md +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-offline-evejson/scripts/run_suricata_offline.sh +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-rules-basics/SKILL.md +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/suricata.yaml +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/instruction.md +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/solution/solve.sh +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/task.toml +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/tests/test_outputs.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syz-extract-constants/SKILL.md +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syzkaller-build-loop/SKILL.md +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syzlang-ioctl-basics/SKILL.md +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/instruction.md +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/solution/solve.sh +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/task.toml +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/tests/test_outputs.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/integration/_consistency.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/integration/agent_judge.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/integration/check_adapter_evidence.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/integration/check_hosted_env_evidence.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/integration/check_results.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/integration/check_skillsbench_harbor_parity.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/integration/check_trace_to_task_evidence.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/integration/configs/claude-agent-acp.yaml +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/integration/configs/codex-acp.yaml +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/integration/configs/gemini.yaml +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/integration/configs/harvey-lab-harness.yaml +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/integration/configs/mimo.yaml +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/integration/configs/openclaw.yaml +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/integration/configs/opencode.yaml +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/integration/configs/openhands.yaml +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/integration/configs/pi-acp.yaml +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/integration/deepagents_harness.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/integration/rubric_checks.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/integration/run.sh +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/integration/run_suite.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/integration/scenarios.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/integration/suites/release.yaml +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_acceptance_evidence.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_acceptance_live.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_acceptance_live_execution.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_acp.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_acp_capability_advertising.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_acp_mcp_servers.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_acp_model_config_dispatch.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_acp_pinned_protocol_guard.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_acp_setup_failure_propagation.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_adapter_scripts.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_adapters.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_agent_cli.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_agent_env_resolution.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_agent_gemini_defaults.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_agent_idle_timeout_cli.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_agent_model_decouple.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_agent_registry.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_agent_router.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_agent_router_cli_e2e.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_agent_router_scaffold.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_agent_setup.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_agent_spec.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_agentcore_builder.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_agentcore_parallel.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_agentcore_reaper.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_agentcore_sandbox.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_agentcore_transport.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_api_error_capture.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_apple_container_sandbox.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_bare_model_provider.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_base_install_imports.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_bedrock_thinking.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_benchflow_experiment_review_validator.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_benchmark_repos_resolve_repo_path.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_branch.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_build_context_stage.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_build_review_pack.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_capture_trajectory.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_check_skillsbench_harbor_parity.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_clawsbench_slice.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_cli_adopt_aliases.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_cli_arg_validation.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_cli_daytona.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_cli_docs_drift.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_cli_edge_case_hardening.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_cli_hub_env.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_cli_misc.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_codex_review.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_codex_self_write_auth.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_config_override.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_config_redaction.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_connect_as_env.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_console_error_truncation.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_console_progress.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_continuallearningbench_adapter.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_dataset_registry.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_daytona_command_polling.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_daytona_dind_compose_up.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_daytona_download.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_daytona_litellm_runtime.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_daytona_poll_deadline.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_daytona_reap.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_deepagents_agent.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_docker_prune_scoping.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_docker_uploads.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_docs_examples.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_eng50_capabilities.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_env_setup.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_environment_manifest_controls.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_eval_artifact_cli.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_eval_filters_applied.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_eval_lift.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_eval_sharding.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_eval_single_task_summary.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_eval_source_provenance.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_eval_worker_retry.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_eval_zero_task_guard.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_evaluation_environment_manifest.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_exclude_tasks.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_filter_credentialed_cells.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_harvey_lab_shim.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_hilbench_adapter.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_hosted_env.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_hosted_env_rollout_contract.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_hub_harbor_registry.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_inbound_adapter_manifest.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_inbound_adapters.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_integration_agent_judge.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_integration_check_results.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_integration_consistency.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_integration_matrix.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_integration_provider_selection.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_integration_run_suite.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_integration_suite.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_internet_policy.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_job_sequential_shared.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_job_sequential_shared_resume.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_judge_robustness.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_judge_symlink_ingestion.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_learner_skills.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_learner_skills_traversal.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_learner_store.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_learner_store_persistence.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_litellm_config.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_litellm_hardening.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_litellm_logging.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_litellm_model_via_env_generic.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_litellm_reasoning_passthrough.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_litellm_runtime.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_litellm_smoke.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_live_llm_trajectory.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_llm_judge.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_llm_judge_event_tags.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_llm_judge_verifier.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_loop_strategies.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_loop_summary.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_loop_sweep.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_memory_scorer.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_metrics.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_mle_bench_adapter.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_mock_openai_responses_server.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_monitor_scaffold.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_native_acp_usage.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_no_cross_provider_fallback.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_notification_order_real.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_opencode_family_proxy_tracking.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_oracle.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_oracle_chokepoint.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_paths_safe.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_paths_symlink_helpers.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_pi_acp_launcher.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_pi_acp_proxy_routing.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_process.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_project_skills_layout.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_provider_auth_detection.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_providers.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_reexport.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_registry_invariants.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_release_hardening_r5.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_release_version.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_release_workflow_wiring.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_resolve_env_helpers.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_review_boundaries.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_review_rubric.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_review_runtime.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_reward_lenient.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_reward_node.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_reward_range.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_reward_unified_contract.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_rewards.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_rewards_jsonl.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_rollout_architecture.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_rollout_branch.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_rollout_config_path_coercion.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_rollout_environment.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_rollout_hard_deadline.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_rollout_import_no_side_effects.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_rollout_on_ask_user_wiring.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_rollout_planes_contract.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_rollout_probe_sandbox_health.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_rollout_session_factory_dispatch.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_rollout_setup_commands.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_rollout_upload.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_rubric_checks.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_rubric_config.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_runtime.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_runtime_capabilities.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_runtime_config_wired.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_runtime_live_sandbox.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_sandbox.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_sandbox_exec_secret_handling.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_sandbox_hardening.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_sandbox_isolation_copy_traversal.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_sandbox_live_process.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_sandbox_multi_service.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_sandbox_prebuilt_validation.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_sandbox_protocol.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_sandbox_provider_registry_drift.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_sandbox_setup.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_sandbox_snapshot_contract.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_sandbox_upload_symlink.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_sandbox_verifier_workspace.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_scene.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_scene_outbox_trial.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_scene_parallel_group.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_scene_result_aggregation.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_sdk_internals.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_sdk_lockdown.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_sdk_run_alias.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_sealed_channel_container.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_self_gen_cli.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_self_gen_export_error_channel.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_self_gen_export_failures.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_self_gen_orchestration.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_session_factory_runtime.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_session_request_permission_dispatch.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_skill_eval.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_skill_eval_dryrun.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_skill_eval_integration.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_skill_eval_sweep.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_skill_eval_traversal.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_skill_invocation_artifacts.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_skill_policy.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_skills.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_skills_dir_agent_home_link.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_skillsbench_conversion_conformance.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_skillsbench_harbor_run_suite.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_smoke.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_smoke_wiring.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_source_adapters.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_subscription_auth.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_task_check_eval_consistency.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_task_config.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_task_digest.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_task_document.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_task_download.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_task_export.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_task_output_format.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_task_package.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_task_runtime_primitive.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_tasks.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_token_usage_normalization.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_trace_import_cli.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_trace_task_gen_traversal.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_trace_to_task_evidence.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_traces_huggingface.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_traces_parsers.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_traces_task_gen.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_train_cli.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_train_mode_artifact_emission.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_train_trl_cli.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_trajectory_integration.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_trajectory_streaming.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_trial_agent_timeout_verify.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_trial_install_agent_timeout.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_trial_litellm_runtime.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_trl_integration.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_usage_litellm.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_usage_required.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_usage_tracking.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_user.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_v06_guard_ports.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_verifier_document.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_verifier_multi_container.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_verifier_output.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_verifier_output_freshness.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_verifier_strategies.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_verifier_wedge_retry.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_verify.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_workflow_action_pinning.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/test_yaml_config.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/trajectories/__init__.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/trajectories/test_export.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/trajectories/test_export_adp.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/trajectories/test_export_atif.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/trajectories/test_export_common.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/trajectories/test_export_nan_handling.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/trajectories/test_export_prime_sft.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/trajectories/test_redaction.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/trajectories/test_step_granularity.py +0 -0
- {benchflow-0.6.7.dev1833 → benchflow-0.6.7.dev1839}/tests/trajectories/test_tree.py +0 -0
|
@@ -3,6 +3,14 @@
|
|
|
3
3
|
## [Unreleased]
|
|
4
4
|
|
|
5
5
|
### Added
|
|
6
|
+
- **Built-in environment registry.** The committed env-axis pins
|
|
7
|
+
(`env0@prod`, `env0@outage`) moved from `benchmarks/_environments/` into
|
|
8
|
+
the package (`benchflow/environment/_registry/`) and ship inside the
|
|
9
|
+
wheel, so `--environment-manifest env0@prod` resolves on a bare
|
|
10
|
+
`pip install benchflow` with no checkout and no env vars.
|
|
11
|
+
`$BENCHFLOW_ENV_REGISTRY`, when set, still wins entirely; resolution
|
|
12
|
+
stays content-addressed (sha256 logged), and unknown names now error
|
|
13
|
+
listing the available specs.
|
|
6
14
|
- **Console progress heartbeat.** Single-concurrency eval runs print a
|
|
7
15
|
throttled progress line (`… 6.2min, 12 tool calls (last: …)`) about every
|
|
8
16
|
45 seconds while the agent works, so a long prompt is distinguishable from
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: benchflow
|
|
3
|
-
Version: 0.6.7.
|
|
3
|
+
Version: 0.6.7.dev1839
|
|
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
|
|
@@ -8,11 +8,22 @@ Lee's ``S`` axis in ``I_eval = {T, A, M, S, C, R, τ}`` — from the task, so it
|
|
|
8
8
|
swappable per run exactly like ``--agent`` / ``--model`` / ``--sandbox`` already
|
|
9
9
|
are, instead of being pinned by a relative path baked into the task file.
|
|
10
10
|
|
|
11
|
-
Registry layout (
|
|
11
|
+
Registry layout (a directory of manifest files)::
|
|
12
12
|
|
|
13
13
|
<registry>/<name>@<version>.toml # a pinned environment version
|
|
14
14
|
<registry>/<name>.toml # optional default ("latest")
|
|
15
15
|
|
|
16
|
+
Which directory is the registry:
|
|
17
|
+
|
|
18
|
+
1. an explicit ``registry=`` argument (tests, embedders);
|
|
19
|
+
2. else ``$BENCHFLOW_ENV_REGISTRY`` — when set it wins entirely (no fallback
|
|
20
|
+
into the built-in registry for names it does not contain); an empty value
|
|
21
|
+
counts as unset;
|
|
22
|
+
3. else the **built-in registry** shipped inside the ``benchflow`` wheel
|
|
23
|
+
(``benchflow/environment/_registry/``), so a bare ``pip install benchflow``
|
|
24
|
+
resolves the committed pins (``env0@prod``, ``env0@outage``) with no
|
|
25
|
+
checkout and no env vars.
|
|
26
|
+
|
|
16
27
|
Resolution::
|
|
17
28
|
|
|
18
29
|
env0 -> <registry>/env0.toml (default) else newest @version
|
|
@@ -80,21 +91,49 @@ def looks_like_env_spec(value: str) -> bool:
|
|
|
80
91
|
return bool(_SPEC_RE.match(value))
|
|
81
92
|
|
|
82
93
|
|
|
94
|
+
def _builtin_registry_dir() -> Path | None:
|
|
95
|
+
"""Directory of the pinned manifests shipped inside the ``benchflow`` wheel.
|
|
96
|
+
|
|
97
|
+
``benchflow/environment/_registry/`` is package data, so a bare
|
|
98
|
+
``pip install benchflow`` carries the committed pins. Path(__file__)-relative
|
|
99
|
+
like every other package-data lookup in the repo (compose files, default
|
|
100
|
+
rubric, demo task) — zip imports are unsupported package-wide. Returns
|
|
101
|
+
``None`` when the packaged registry is missing (a stripped install).
|
|
102
|
+
"""
|
|
103
|
+
directory = Path(__file__).resolve().parents[1] / "environment" / "_registry"
|
|
104
|
+
return directory if directory.is_dir() else None
|
|
105
|
+
|
|
106
|
+
|
|
83
107
|
def _registry_dir(registry: str | os.PathLike[str] | None) -> Path:
|
|
84
|
-
|
|
85
|
-
|
|
108
|
+
if registry is not None:
|
|
109
|
+
raw: str | os.PathLike[str] | None = registry
|
|
110
|
+
source = "the registry= argument"
|
|
111
|
+
else:
|
|
112
|
+
raw = os.environ.get(ENV_REGISTRY_VAR)
|
|
113
|
+
source = f"${ENV_REGISTRY_VAR}"
|
|
114
|
+
if not raw: # unset or empty — empty counts as unset
|
|
115
|
+
builtin = _builtin_registry_dir()
|
|
116
|
+
if builtin is not None:
|
|
117
|
+
return builtin
|
|
86
118
|
raise EnvironmentRegistryError(
|
|
87
|
-
|
|
88
|
-
"
|
|
119
|
+
"no environment registry available: the built-in registry shipped "
|
|
120
|
+
f"with benchflow is missing and ${ENV_REGISTRY_VAR} is unset; set "
|
|
121
|
+
f"${ENV_REGISTRY_VAR} or pass --environment-manifest a manifest "
|
|
122
|
+
"file path instead of a name@version spec"
|
|
89
123
|
)
|
|
90
124
|
directory = Path(raw).expanduser()
|
|
91
125
|
if not directory.is_dir():
|
|
92
126
|
raise EnvironmentRegistryError(
|
|
93
|
-
f"environment registry {directory} is not a directory"
|
|
127
|
+
f"environment registry {directory} (from {source}) is not a directory"
|
|
94
128
|
)
|
|
95
129
|
return directory
|
|
96
130
|
|
|
97
131
|
|
|
132
|
+
def _available_specs(directory: Path) -> list[str]:
|
|
133
|
+
"""Sorted stems (``name`` / ``name@version``) present in the registry."""
|
|
134
|
+
return sorted({p.stem for ext in _MANIFEST_EXTS for p in directory.glob(f"*{ext}")})
|
|
135
|
+
|
|
136
|
+
|
|
98
137
|
def _find_manifest(directory: Path, stem: str) -> Path | None:
|
|
99
138
|
"""Return ``directory/stem.<ext>`` for the first existing manifest extension."""
|
|
100
139
|
for ext in _MANIFEST_EXTS:
|
|
@@ -124,9 +163,11 @@ def resolve_environment(
|
|
|
124
163
|
if version is not None:
|
|
125
164
|
path = _find_manifest(directory, f"{name}@{version}")
|
|
126
165
|
if path is None:
|
|
166
|
+
available = ", ".join(_available_specs(directory)) or "none"
|
|
127
167
|
raise EnvironmentRegistryError(
|
|
128
168
|
f"environment {spec!r} not found in {directory} "
|
|
129
|
-
f"(looked for {name}@{version}{{.toml,.yaml,.yml}}
|
|
169
|
+
f"(looked for {name}@{version}{{.toml,.yaml,.yml}}; "
|
|
170
|
+
f"available: {available})"
|
|
130
171
|
)
|
|
131
172
|
else:
|
|
132
173
|
path = _find_manifest(directory, name)
|
|
@@ -137,8 +178,10 @@ def resolve_environment(
|
|
|
137
178
|
p for ext in _MANIFEST_EXTS for p in directory.glob(f"{name}@*{ext}")
|
|
138
179
|
)
|
|
139
180
|
if not candidates:
|
|
181
|
+
available = ", ".join(_available_specs(directory)) or "none"
|
|
140
182
|
raise EnvironmentRegistryError(
|
|
141
|
-
f"no versions of environment {name!r} found in {directory}"
|
|
183
|
+
f"no versions of environment {name!r} found in {directory} "
|
|
184
|
+
f"(available: {available})"
|
|
142
185
|
)
|
|
143
186
|
path = candidates[-1]
|
|
144
187
|
version = path.stem.split("@", 1)[1]
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"""Pure scoring and classification helpers — no external dependencies."""
|
|
2
2
|
|
|
3
|
+
import math
|
|
3
4
|
from collections.abc import Iterable, Mapping
|
|
4
5
|
from typing import Any, Literal
|
|
5
6
|
|
|
@@ -343,6 +344,26 @@ def count_result_outcomes(results: Iterable[Mapping[str, Any]]) -> dict[str, int
|
|
|
343
344
|
return count_audit_outcomes(results)
|
|
344
345
|
|
|
345
346
|
|
|
347
|
+
def mean_scored_reward(results: Iterable[Mapping[str, Any]]) -> float | None:
|
|
348
|
+
"""Mean reward over scored rollouts, or None when nothing scored.
|
|
349
|
+
|
|
350
|
+
A rollout is scored when ``rewards.reward`` is a finite numeric value.
|
|
351
|
+
Bools are excluded — ``classify_result`` treats a persisted ``true`` as a
|
|
352
|
+
pass (``True == 1``), but a bool is not a reward magnitude — and so are
|
|
353
|
+
non-finite values, which the resume path can feed in unvalidated (Python's
|
|
354
|
+
``json`` round-trips NaN). Errored rollouts (reward None) are excluded,
|
|
355
|
+
not zeroed: a mean diluted by infra errors would misread as capability.
|
|
356
|
+
"""
|
|
357
|
+
scored = [
|
|
358
|
+
rw
|
|
359
|
+
for r in results
|
|
360
|
+
if isinstance(rw := extract_reward(r), (int, float))
|
|
361
|
+
and not isinstance(rw, bool)
|
|
362
|
+
and math.isfinite(rw)
|
|
363
|
+
]
|
|
364
|
+
return sum(scored) / len(scored) if scored else None
|
|
365
|
+
|
|
366
|
+
|
|
346
367
|
def pass_rate(*, passed: int, total: int) -> float:
|
|
347
368
|
"""Pass rate over all tasks."""
|
|
348
369
|
return passed / total if total > 0 else 0.0
|
|
@@ -189,9 +189,14 @@ def _report_eval_result(result: EvaluationResult, job_dir: Path | None = None) -
|
|
|
189
189
|
err_part = f", [red]{detail}[/red]"
|
|
190
190
|
else:
|
|
191
191
|
err_part = ", errors=0"
|
|
192
|
+
# Mean reward alongside the binarized counts: pass/fail thresholds at
|
|
193
|
+
# reward==1, so "0/1" alone can't distinguish 0.3 partial credit from a
|
|
194
|
+
# flat 0. getattr(): sharded aggregation and older callers don't carry it.
|
|
195
|
+
mean_reward = getattr(result, "mean_reward", None)
|
|
196
|
+
mean_part = f", mean reward {mean_reward:.2f}" if mean_reward is not None else ""
|
|
192
197
|
console.print(
|
|
193
198
|
f"\n[{style}]{mark} Score: {result.passed}/{result.total} "
|
|
194
|
-
f"({result.score:.1%})[/{style}]{err_part}"
|
|
199
|
+
f"({result.score:.1%})[/{style}]{mean_part}{err_part}"
|
|
195
200
|
)
|
|
196
201
|
# One dim reason line per FAILED task, so "0/1" doesn't force a dig into
|
|
197
202
|
# summary.json to learn why. getattr(): sharded aggregation and older
|
|
@@ -297,10 +297,11 @@ def eval_run(
|
|
|
297
297
|
"--environment-manifest",
|
|
298
298
|
help=(
|
|
299
299
|
"Environment-plane manifest applied to every rollout: a path to "
|
|
300
|
-
"an environment.toml, OR a 'name@version' registry spec
|
|
301
|
-
"via $BENCHFLOW_ENV_REGISTRY
|
|
302
|
-
"
|
|
303
|
-
"
|
|
300
|
+
"an environment.toml, OR a 'name@version' registry spec (the S "
|
|
301
|
+
"axis) resolved via $BENCHFLOW_ENV_REGISTRY when set, else the "
|
|
302
|
+
"built-in registry shipped with benchflow (env0@prod, "
|
|
303
|
+
"env0@outage). The manifest-declared stateful environment is "
|
|
304
|
+
"provisioned, gated on readiness, and torn down."
|
|
304
305
|
),
|
|
305
306
|
),
|
|
306
307
|
] = None,
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# env0@outage — env-0 with the gmail + slack services removed.
|
|
2
|
+
#
|
|
3
|
+
# A perturbation variant for the "Same state, tool outage" experiment: bind the
|
|
4
|
+
# SAME task to env0@prod vs env0@outage and attribute the reward delta to the
|
|
5
|
+
# environment alone (the S axis). A task that needs slack (port 9005) scores 1.0
|
|
6
|
+
# under env0@prod and fails under env0@outage because the service is absent.
|
|
7
|
+
#
|
|
8
|
+
# Shipped inside the benchflow wheel (benchflow/environment/_registry/), so it
|
|
9
|
+
# resolves on a bare pip install with no $BENCHFLOW_ENV_REGISTRY set:
|
|
10
|
+
#
|
|
11
|
+
# bench eval create --tasks-dir <task> --environment-manifest env0@outage ...
|
|
12
|
+
|
|
13
|
+
[environment]
|
|
14
|
+
name = "env-0"
|
|
15
|
+
base_image = "xdotli/env0-base:latest"
|
|
16
|
+
owns_lifecycle = false
|
|
17
|
+
isolation = "per_task"
|
|
18
|
+
|
|
19
|
+
[environment.task_selection]
|
|
20
|
+
mechanism = "image"
|
|
21
|
+
|
|
22
|
+
[environment.readiness]
|
|
23
|
+
timeout_sec = 60
|
|
24
|
+
|
|
25
|
+
# Services below are copied VERBATIM from the upstream env-0.toml pin
|
|
26
|
+
# (2026-08-09 sync). The previous pin had drifted: bare CLI names
|
|
27
|
+
# (auth/gmail/...) that do not exist in ghcr.io/benchflow-ai/env0:0.2.0
|
|
28
|
+
# images (which ship mock-auth/mock-gmail/... console scripts), plus a
|
|
29
|
+
# phantom slack service and shifted ports — so ManifestEnvironment
|
|
30
|
+
# probed, found ZERO startable services, and readiness passed vacuously
|
|
31
|
+
# while every rollout died at the verifier with connection-refused.
|
|
32
|
+
|
|
33
|
+
[[environment.services]]
|
|
34
|
+
name = "mock-auth"
|
|
35
|
+
command = "mock-auth --db /data/auth.db serve --host 0.0.0.0 --port 9000 --no-mcp"
|
|
36
|
+
port = 9000
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
[[environment.services]]
|
|
40
|
+
name = "mock-gcal"
|
|
41
|
+
command = "mock-gcal --db /data/gcal.db serve --host 0.0.0.0 --port 9002 --no-mcp"
|
|
42
|
+
port = 9002
|
|
43
|
+
|
|
44
|
+
[[environment.services]]
|
|
45
|
+
name = "mock-gdrive"
|
|
46
|
+
command = "mock-gdrive --db /data/gdrive.db serve --host 0.0.0.0 --port 9003 --no-mcp"
|
|
47
|
+
port = 9003
|
|
48
|
+
|
|
49
|
+
[[environment.services]]
|
|
50
|
+
name = "mock-gdoc"
|
|
51
|
+
command = "mock-gdoc --db /data/gdoc.db serve --host 0.0.0.0 --port 9004 --no-mcp"
|
|
52
|
+
port = 9004
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
[[environment.services]]
|
|
56
|
+
name = "mock-discord"
|
|
57
|
+
command = "mock-discord --db /data/discord.db serve --host 0.0.0.0 --port 9006 --no-mcp"
|
|
58
|
+
port = 9006
|
|
59
|
+
|
|
60
|
+
[[environment.services]]
|
|
61
|
+
name = "mock-stripe"
|
|
62
|
+
command = "mock-stripe --db /data/stripe.db serve --host 0.0.0.0 --port 9007 --no-mcp"
|
|
63
|
+
port = 9007
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# env0@prod — pinned, content-addressed Environment-plane manifest for env-0.
|
|
2
|
+
#
|
|
3
|
+
# This is a built-in registry entry, shipped inside the benchflow wheel
|
|
4
|
+
# (benchflow/environment/_registry/) so PR #790's env-axis pin resolves on a
|
|
5
|
+
# bare pip install — no checkout, no env vars:
|
|
6
|
+
#
|
|
7
|
+
# bench eval create --tasks-dir <env0 tasks> --environment-manifest env0@prod ...
|
|
8
|
+
#
|
|
9
|
+
# Set $BENCHFLOW_ENV_REGISTRY to a local directory of name@version.toml files
|
|
10
|
+
# to override the built-in registry entirely.
|
|
11
|
+
#
|
|
12
|
+
# Mirrors benchflow-ai/env0 tasks/_manifests/env-0.toml (the source of truth). env-0's per-task images build
|
|
13
|
+
# FROM the shared base and bake seed data; benchflow's ManifestEnvironment
|
|
14
|
+
# probes each service's CLI and starts only the ones installed in the per-task
|
|
15
|
+
# image, gating the agent on each service's /health.
|
|
16
|
+
#
|
|
17
|
+
# NOTE: xdotli/env0-base:latest is amd64-only — run env0 on Daytona (x86_64).
|
|
18
|
+
|
|
19
|
+
[environment]
|
|
20
|
+
name = "env-0"
|
|
21
|
+
base_image = "xdotli/env0-base:latest"
|
|
22
|
+
owns_lifecycle = false
|
|
23
|
+
isolation = "per_task"
|
|
24
|
+
|
|
25
|
+
[environment.task_selection]
|
|
26
|
+
mechanism = "image"
|
|
27
|
+
|
|
28
|
+
[environment.readiness]
|
|
29
|
+
timeout_sec = 60
|
|
30
|
+
|
|
31
|
+
# Services below are copied VERBATIM from the upstream env-0.toml pin
|
|
32
|
+
# (2026-08-09 sync). The previous pin had drifted: bare CLI names
|
|
33
|
+
# (auth/gmail/...) that do not exist in ghcr.io/benchflow-ai/env0:0.2.0
|
|
34
|
+
# images (which ship mock-auth/mock-gmail/... console scripts), plus a
|
|
35
|
+
# phantom slack service and shifted ports — so ManifestEnvironment
|
|
36
|
+
# probed, found ZERO startable services, and readiness passed vacuously
|
|
37
|
+
# while every rollout died at the verifier with connection-refused.
|
|
38
|
+
|
|
39
|
+
[[environment.services]]
|
|
40
|
+
name = "mock-auth"
|
|
41
|
+
command = "mock-auth --db /data/auth.db serve --host 0.0.0.0 --port 9000 --no-mcp"
|
|
42
|
+
port = 9000
|
|
43
|
+
|
|
44
|
+
[[environment.services]]
|
|
45
|
+
name = "mock-gmail"
|
|
46
|
+
command = "mock-gmail --db /data/gmail.db serve --host 0.0.0.0 --port 9001 --no-mcp"
|
|
47
|
+
port = 9001
|
|
48
|
+
|
|
49
|
+
[[environment.services]]
|
|
50
|
+
name = "mock-gcal"
|
|
51
|
+
command = "mock-gcal --db /data/gcal.db serve --host 0.0.0.0 --port 9002 --no-mcp"
|
|
52
|
+
port = 9002
|
|
53
|
+
|
|
54
|
+
[[environment.services]]
|
|
55
|
+
name = "mock-gdrive"
|
|
56
|
+
command = "mock-gdrive --db /data/gdrive.db serve --host 0.0.0.0 --port 9003 --no-mcp"
|
|
57
|
+
port = 9003
|
|
58
|
+
|
|
59
|
+
[[environment.services]]
|
|
60
|
+
name = "mock-gdoc"
|
|
61
|
+
command = "mock-gdoc --db /data/gdoc.db serve --host 0.0.0.0 --port 9004 --no-mcp"
|
|
62
|
+
port = 9004
|
|
63
|
+
|
|
64
|
+
[[environment.services]]
|
|
65
|
+
name = "mock-slack"
|
|
66
|
+
command = "mock-slack --db /data/slack.db serve --host 0.0.0.0 --port 9005 --no-mcp"
|
|
67
|
+
port = 9005
|
|
68
|
+
|
|
69
|
+
[[environment.services]]
|
|
70
|
+
name = "mock-discord"
|
|
71
|
+
command = "mock-discord --db /data/discord.db serve --host 0.0.0.0 --port 9006 --no-mcp"
|
|
72
|
+
port = 9006
|
|
73
|
+
|
|
74
|
+
[[environment.services]]
|
|
75
|
+
name = "mock-stripe"
|
|
76
|
+
command = "mock-stripe --db /data/stripe.db serve --host 0.0.0.0 --port 9007 --no-mcp"
|
|
77
|
+
port = 9007
|
|
@@ -205,7 +205,9 @@ def load_manifest(path: str | Path) -> EnvironmentManifest:
|
|
|
205
205
|
"""Load and validate an environment manifest.
|
|
206
206
|
|
|
207
207
|
``path`` is either a TOML file path (the historical behavior) or a registry
|
|
208
|
-
spec ``name@version`` resolved via ``$BENCHFLOW_ENV_REGISTRY
|
|
208
|
+
spec ``name@version`` resolved via ``$BENCHFLOW_ENV_REGISTRY`` when set,
|
|
209
|
+
else the built-in registry shipped inside the wheel
|
|
210
|
+
(``benchflow/environment/_registry/``). The spec form
|
|
209
211
|
lets a run bind its environment (the ``S`` axis) by name at the command line —
|
|
210
212
|
decoupled from the task and swappable per run, like ``--agent`` / ``--model``
|
|
211
213
|
/ ``--sandbox``. Resolution is content-addressed so the bound world is
|
|
@@ -64,6 +64,7 @@ from benchflow._utils.scoring import (
|
|
|
64
64
|
classify_verifier_error,
|
|
65
65
|
count_audit_outcomes,
|
|
66
66
|
count_score_outcomes,
|
|
67
|
+
mean_scored_reward,
|
|
67
68
|
pass_rate,
|
|
68
69
|
pass_rate_excl_errors,
|
|
69
70
|
)
|
|
@@ -609,6 +610,10 @@ class EvaluationResult:
|
|
|
609
610
|
memory_score: float | None = None
|
|
610
611
|
memory_scores: dict[str, float] = field(default_factory=dict)
|
|
611
612
|
task_failures: list[TaskFailure] = field(default_factory=list)
|
|
613
|
+
# Mean of rewards over scored rollouts (None when nothing scored). The
|
|
614
|
+
# pass/fail counts binarize at reward==1, which erases partial credit —
|
|
615
|
+
# a 0.3 rubric score and a flat 0 both print as FAIL without this.
|
|
616
|
+
mean_reward: float | None = None
|
|
612
617
|
|
|
613
618
|
@property
|
|
614
619
|
def score(self) -> float:
|
|
@@ -1391,7 +1396,16 @@ class Evaluation:
|
|
|
1391
1396
|
status = "PASS" if reward == 1 else ("FAIL" if reward is not None else "ERR")
|
|
1392
1397
|
err_msg = result.error or result.verifier_error
|
|
1393
1398
|
err = f" ({truncate_end(err_msg, 50)})" if err_msg else ""
|
|
1394
|
-
|
|
1399
|
+
# Show the fractional reward on scored lines: pass/fail binarizes at
|
|
1400
|
+
# reward==1, so without it a 0.3 rubric score reads as a flat 0.
|
|
1401
|
+
reward_part = (
|
|
1402
|
+
f"reward={reward:.2f}, "
|
|
1403
|
+
if isinstance(reward, (int, float)) and not isinstance(reward, bool)
|
|
1404
|
+
else ""
|
|
1405
|
+
)
|
|
1406
|
+
logger.info(
|
|
1407
|
+
f"[{status}] {td.name} ({reward_part}tools={result.n_tool_calls}){err}"
|
|
1408
|
+
)
|
|
1395
1409
|
self._fire_progress(self._on_result, td.name, result)
|
|
1396
1410
|
|
|
1397
1411
|
async def _run_parallel_independent(
|
|
@@ -1828,6 +1842,7 @@ class Evaluation:
|
|
|
1828
1842
|
memory_score=memory["avg_score"],
|
|
1829
1843
|
memory_scores=memory_scores,
|
|
1830
1844
|
task_failures=task_failures,
|
|
1845
|
+
mean_reward=mean_scored_reward(all_results.values()),
|
|
1831
1846
|
)
|
|
1832
1847
|
|
|
1833
1848
|
assert (
|
|
@@ -1885,6 +1900,7 @@ class Evaluation:
|
|
|
1885
1900
|
"score_excl_errors_ratio": pass_rate_excl_errors(
|
|
1886
1901
|
passed=audit_counts["passed"], failed=audit_counts["failed"]
|
|
1887
1902
|
),
|
|
1903
|
+
"mean_reward": job_result.mean_reward,
|
|
1888
1904
|
"elapsed_sec": elapsed,
|
|
1889
1905
|
"memory_score": job_result.memory_score,
|
|
1890
1906
|
"memory_score_coverage": (
|
|
@@ -1984,9 +2000,14 @@ class Evaluation:
|
|
|
1984
2000
|
"This likely indicates a systemic verifier bug, not agent failure."
|
|
1985
2001
|
)
|
|
1986
2002
|
|
|
2003
|
+
mean_part = (
|
|
2004
|
+
f"mean_reward={job_result.mean_reward:.2f}, "
|
|
2005
|
+
if job_result.mean_reward is not None
|
|
2006
|
+
else ""
|
|
2007
|
+
)
|
|
1987
2008
|
logger.info(
|
|
1988
2009
|
f"Job complete: {job_result.passed}/{job_result.total} "
|
|
1989
|
-
f"({job_result.score:.1%}), errors={job_result.errored}, "
|
|
2010
|
+
f"({job_result.score:.1%}), {mean_part}errors={job_result.errored}, "
|
|
1990
2011
|
f"idle_timeouts={error_category_counts.get(IDLE_TIMEOUT, 0)}, "
|
|
1991
2012
|
f"time={elapsed / 60:.1f}min"
|
|
1992
2013
|
)
|
|
@@ -354,6 +354,42 @@ def _failed_result(task_failures):
|
|
|
354
354
|
)
|
|
355
355
|
|
|
356
356
|
|
|
357
|
+
def test_report_eval_result_shows_mean_reward():
|
|
358
|
+
# Partial credit must be visible next to the binarized counts: pass/fail
|
|
359
|
+
# thresholds at reward==1, so "0/1 (0.0%)" alone can't distinguish a 0.3
|
|
360
|
+
# rubric score from a flat 0.
|
|
361
|
+
out = _reported(
|
|
362
|
+
SimpleNamespace(
|
|
363
|
+
passed=0,
|
|
364
|
+
total=1,
|
|
365
|
+
errored=0,
|
|
366
|
+
verifier_errored=0,
|
|
367
|
+
score=0.0,
|
|
368
|
+
job_name="j",
|
|
369
|
+
mean_reward=0.3,
|
|
370
|
+
)
|
|
371
|
+
)
|
|
372
|
+
assert "Score: 0/1" in out
|
|
373
|
+
assert "mean reward 0.30" in out
|
|
374
|
+
|
|
375
|
+
|
|
376
|
+
def test_report_eval_result_omits_mean_reward_when_unavailable():
|
|
377
|
+
# Sharded aggregation and older callers don't carry mean_reward — the line
|
|
378
|
+
# must render without it rather than showing a misleading 0.00.
|
|
379
|
+
out = _reported(
|
|
380
|
+
SimpleNamespace(
|
|
381
|
+
passed=0,
|
|
382
|
+
total=1,
|
|
383
|
+
errored=1,
|
|
384
|
+
verifier_errored=0,
|
|
385
|
+
score=0.0,
|
|
386
|
+
job_name="j",
|
|
387
|
+
)
|
|
388
|
+
)
|
|
389
|
+
assert "Score: 0/1" in out
|
|
390
|
+
assert "mean reward" not in out
|
|
391
|
+
|
|
392
|
+
|
|
357
393
|
def test_report_eval_result_prints_failure_reason_lines():
|
|
358
394
|
# Dogfood follow-up: "✗ Score: 0/1" alone forces a dig into summary.json.
|
|
359
395
|
# Each FAILED task gets one dim reason line — verifier_error first, else a
|
|
@@ -80,12 +80,127 @@ def test_resolve_invalid_spec_errors(tmp_path):
|
|
|
80
80
|
resolve_environment("bad/spec@x", registry=tmp_path)
|
|
81
81
|
|
|
82
82
|
|
|
83
|
-
def
|
|
83
|
+
def test_resolve_no_registry_available_errors(tmp_path, monkeypatch):
|
|
84
|
+
"""Env var unset AND built-in registry missing → actionable error."""
|
|
85
|
+
import benchflow._utils.env_registry as env_registry
|
|
86
|
+
|
|
84
87
|
monkeypatch.delenv("BENCHFLOW_ENV_REGISTRY", raising=False)
|
|
88
|
+
monkeypatch.setattr(env_registry, "_builtin_registry_dir", lambda: None)
|
|
85
89
|
with pytest.raises(EnvironmentRegistryError, match="no environment registry"):
|
|
86
90
|
resolve_environment("env0")
|
|
87
91
|
|
|
88
92
|
|
|
93
|
+
# ---- built-in registry (shipped inside the wheel) ---------------------------
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
def test_builtin_registry_resolves_env0_prod_when_env_unset(monkeypatch):
|
|
97
|
+
"""The acceptance contract: a bare pip install resolves ``env0@prod`` with
|
|
98
|
+
no ``$BENCHFLOW_ENV_REGISTRY`` set — the pins ship inside the package."""
|
|
99
|
+
monkeypatch.delenv("BENCHFLOW_ENV_REGISTRY", raising=False)
|
|
100
|
+
r = resolve_environment("env0@prod")
|
|
101
|
+
assert (r.name, r.version) == ("env0", "prod")
|
|
102
|
+
assert r.manifest_path.name == "env0@prod.toml"
|
|
103
|
+
assert r.env_hash.startswith("sha256:")
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
def test_builtin_registry_resolves_env0_outage_when_env_unset(monkeypatch):
|
|
107
|
+
monkeypatch.delenv("BENCHFLOW_ENV_REGISTRY", raising=False)
|
|
108
|
+
r = resolve_environment("env0@outage")
|
|
109
|
+
assert (r.name, r.version) == ("env0", "outage")
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
def test_builtin_registry_manifests_are_importlib_resources(monkeypatch):
|
|
113
|
+
"""The pins are package data: importlib.resources must find them (that is
|
|
114
|
+
what makes them ship in the wheel) and they must parse as manifests."""
|
|
115
|
+
import importlib.resources
|
|
116
|
+
|
|
117
|
+
root = importlib.resources.files("benchflow.environment") / "_registry"
|
|
118
|
+
names = {entry.name for entry in root.iterdir()}
|
|
119
|
+
assert {"env0@prod.toml", "env0@outage.toml"} <= names
|
|
120
|
+
|
|
121
|
+
monkeypatch.delenv("BENCHFLOW_ENV_REGISTRY", raising=False)
|
|
122
|
+
m = load_manifest("env0@prod")
|
|
123
|
+
assert {s.name for s in m.services} >= {"mock-gmail", "mock-slack"}
|
|
124
|
+
outage = load_manifest("env0@outage")
|
|
125
|
+
assert "mock-gmail" not in {s.name for s in outage.services}
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
def test_env_var_registry_wins_over_builtin(tmp_path, monkeypatch):
|
|
129
|
+
"""When set, ``$BENCHFLOW_ENV_REGISTRY`` is the registry — the same spec
|
|
130
|
+
resolves from it, not from the built-in pins."""
|
|
131
|
+
_write_env(tmp_path, "env0@prod", base_image="img:override")
|
|
132
|
+
monkeypatch.setenv("BENCHFLOW_ENV_REGISTRY", str(tmp_path))
|
|
133
|
+
r = resolve_environment("env0@prod")
|
|
134
|
+
assert r.manifest_path.parent == tmp_path
|
|
135
|
+
assert load_manifest("env0@prod").base_image == "img:override"
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
def test_env_var_registry_wins_entirely_no_builtin_fallback(tmp_path, monkeypatch):
|
|
139
|
+
"""A name the env-var registry lacks does NOT fall back to the built-in."""
|
|
140
|
+
monkeypatch.setenv("BENCHFLOW_ENV_REGISTRY", str(tmp_path)) # empty dir
|
|
141
|
+
with pytest.raises(
|
|
142
|
+
EnvironmentRegistryError, match=r"not found in .*available: none"
|
|
143
|
+
):
|
|
144
|
+
resolve_environment("env0@prod")
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
def test_explicit_registry_argument_beats_set_env_var(tmp_path, monkeypatch):
|
|
148
|
+
"""Resolution order: an explicit ``registry=`` beats a SET env var."""
|
|
149
|
+
env_dir = tmp_path / "from-env"
|
|
150
|
+
arg_dir = tmp_path / "from-arg"
|
|
151
|
+
env_dir.mkdir()
|
|
152
|
+
arg_dir.mkdir()
|
|
153
|
+
_write_env(env_dir, "env0@v1", base_image="img:env")
|
|
154
|
+
_write_env(arg_dir, "env0@v1", base_image="img:arg")
|
|
155
|
+
monkeypatch.setenv("BENCHFLOW_ENV_REGISTRY", str(env_dir))
|
|
156
|
+
r = resolve_environment("env0@v1", registry=arg_dir)
|
|
157
|
+
assert r.manifest_path.parent == arg_dir
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
def test_empty_env_var_counts_as_unset(monkeypatch):
|
|
161
|
+
"""``BENCHFLOW_ENV_REGISTRY=""`` resolves the built-in registry, exactly
|
|
162
|
+
like an unset var (empty counts as unset, pinned by the docstring)."""
|
|
163
|
+
monkeypatch.setenv("BENCHFLOW_ENV_REGISTRY", "")
|
|
164
|
+
r = resolve_environment("env0@prod")
|
|
165
|
+
assert (r.name, r.version) == ("env0", "prod")
|
|
166
|
+
|
|
167
|
+
|
|
168
|
+
def test_env_var_not_a_directory_error_names_the_env_var(tmp_path, monkeypatch):
|
|
169
|
+
monkeypatch.setenv("BENCHFLOW_ENV_REGISTRY", str(tmp_path / "nope"))
|
|
170
|
+
with pytest.raises(
|
|
171
|
+
EnvironmentRegistryError,
|
|
172
|
+
match=r"from \$BENCHFLOW_ENV_REGISTRY.*is not a directory",
|
|
173
|
+
):
|
|
174
|
+
resolve_environment("env0@prod")
|
|
175
|
+
|
|
176
|
+
|
|
177
|
+
def test_registry_argument_not_a_directory_error_names_the_argument(tmp_path):
|
|
178
|
+
with pytest.raises(
|
|
179
|
+
EnvironmentRegistryError,
|
|
180
|
+
match=r"from the registry= argument.*is not a directory",
|
|
181
|
+
):
|
|
182
|
+
resolve_environment("env0@prod", registry=tmp_path / "nope")
|
|
183
|
+
|
|
184
|
+
|
|
185
|
+
def test_builtin_unknown_name_error_lists_available(monkeypatch):
|
|
186
|
+
monkeypatch.delenv("BENCHFLOW_ENV_REGISTRY", raising=False)
|
|
187
|
+
with pytest.raises(
|
|
188
|
+
EnvironmentRegistryError, match=r"available:.*env0@outage.*env0@prod"
|
|
189
|
+
):
|
|
190
|
+
resolve_environment("nope")
|
|
191
|
+
|
|
192
|
+
|
|
193
|
+
def test_builtin_resolution_logs_sha256(monkeypatch, caplog):
|
|
194
|
+
"""Content-addressed provenance is preserved: resolving a built-in pin
|
|
195
|
+
logs the manifest's sha256 exactly like a ``$BENCHFLOW_ENV_REGISTRY`` one."""
|
|
196
|
+
import logging
|
|
197
|
+
|
|
198
|
+
monkeypatch.delenv("BENCHFLOW_ENV_REGISTRY", raising=False)
|
|
199
|
+
with caplog.at_level(logging.INFO, logger="benchflow.environment.manifest"):
|
|
200
|
+
load_manifest("env0@prod")
|
|
201
|
+
assert any("sha256:" in rec.getMessage() for rec in caplog.records)
|
|
202
|
+
|
|
203
|
+
|
|
89
204
|
# ---- load_manifest dispatch (spec vs file) --------------------------------
|
|
90
205
|
|
|
91
206
|
|
|
@@ -656,6 +656,57 @@ class TestJobRunOrchestration:
|
|
|
656
656
|
)
|
|
657
657
|
]
|
|
658
658
|
|
|
659
|
+
@pytest.mark.asyncio
|
|
660
|
+
async def test_run_computes_mean_reward_and_logs_fractional_rewards(
|
|
661
|
+
self, tmp_path, caplog
|
|
662
|
+
):
|
|
663
|
+
"""Partial credit must survive the binarized pass/fail view: run()
|
|
664
|
+
computes mean_reward over scored rollouts (errors excluded, not
|
|
665
|
+
zeroed), the per-task lines carry reward=, error lines don't, and the
|
|
666
|
+
job-complete line carries mean_reward=.
|
|
667
|
+
"""
|
|
668
|
+
job = self._make_job(tmp_path, n_tasks=3, concurrency=1)
|
|
669
|
+
outcomes = {
|
|
670
|
+
"task-0": RunResult(task_name="task-0", rewards={"reward": 1.0}),
|
|
671
|
+
"task-1": RunResult(task_name="task-1", rewards={"reward": 0.3}),
|
|
672
|
+
"task-2": RunResult(task_name="task-2", error="agent crashed"),
|
|
673
|
+
}
|
|
674
|
+
|
|
675
|
+
async def fake_run(*, task_path, **kwargs):
|
|
676
|
+
return outcomes[task_path.name]
|
|
677
|
+
|
|
678
|
+
job._sdk = AsyncMock()
|
|
679
|
+
job._sdk.run = AsyncMock(side_effect=fake_run)
|
|
680
|
+
|
|
681
|
+
with caplog.at_level(logging.INFO, logger="benchflow.evaluation"):
|
|
682
|
+
result = await job.run()
|
|
683
|
+
|
|
684
|
+
assert result.mean_reward == pytest.approx(0.65)
|
|
685
|
+
assert "[PASS] task-0 (reward=1.00, tools=0)" in caplog.text
|
|
686
|
+
assert "[FAIL] task-1 (reward=0.30, tools=0)" in caplog.text
|
|
687
|
+
assert "[ERR] task-2 (tools=0)" in caplog.text
|
|
688
|
+
assert "mean_reward=0.65" in caplog.text
|
|
689
|
+
# The machine-readable surface must agree with the console.
|
|
690
|
+
summary = json.loads((job._jobs_dir / "summary.json").read_text())
|
|
691
|
+
assert summary["mean_reward"] == pytest.approx(0.65)
|
|
692
|
+
|
|
693
|
+
@pytest.mark.asyncio
|
|
694
|
+
async def test_run_mean_reward_none_when_nothing_scored(self, tmp_path, caplog):
|
|
695
|
+
"""An all-error job has no scored rollouts: mean_reward must be None
|
|
696
|
+
and the job-complete line must omit the field (a fabricated 0.00 would
|
|
697
|
+
read as a real capability result)."""
|
|
698
|
+
job = self._make_job(tmp_path, n_tasks=1, concurrency=1)
|
|
699
|
+
job._sdk = AsyncMock()
|
|
700
|
+
job._sdk.run = AsyncMock(
|
|
701
|
+
return_value=RunResult(task_name="task-0", error="agent crashed")
|
|
702
|
+
)
|
|
703
|
+
|
|
704
|
+
with caplog.at_level(logging.INFO, logger="benchflow.evaluation"):
|
|
705
|
+
result = await job.run()
|
|
706
|
+
|
|
707
|
+
assert result.mean_reward is None
|
|
708
|
+
assert "mean_reward=" not in caplog.text
|
|
709
|
+
|
|
659
710
|
@pytest.mark.asyncio
|
|
660
711
|
async def test_error_and_verifier_error_does_not_crash_invariant(self, tmp_path):
|
|
661
712
|
"""A result with BOTH error and verifier_error (rewards=None) must not
|