benchflow 0.6.7.dev1798__tar.gz → 0.6.7.dev1813__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.dev1798 → benchflow-0.6.7.dev1813}/PKG-INFO +2 -1
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/README.md +1 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/pyproject.toml +1 -1
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/evaluation.py +4 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/providers/litellm_config.py +27 -4
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/providers/litellm_logging.py +17 -7
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/rollout/__init__.py +15 -0
- benchflow-0.6.7.dev1813/src/benchflow/rollout/_deadline.py +178 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/rollout/_setup.py +66 -4
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/sandbox/process/daytona.py +17 -5
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/integration/agent_judge.py +39 -6
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_judge_robustness.py +81 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_litellm_config.py +4 -1
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_litellm_logging.py +33 -0
- benchflow-0.6.7.dev1813/tests/test_litellm_reasoning_passthrough.py +60 -0
- benchflow-0.6.7.dev1813/tests/test_rollout_hard_deadline.py +200 -0
- benchflow-0.6.7.dev1813/tests/test_verifier_wedge_retry.py +114 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/.gitignore +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/CHANGELOG.md +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/LICENSE +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/__init__.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/_dotenv.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/_paths.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/_run.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/_types.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/_utils/__init__.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/_utils/benchmark_repos.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/_utils/build_context_stage.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/_utils/config.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/_utils/config_override.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/_utils/content_address.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/_utils/dataset_registry.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/_utils/env_registry.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/_utils/evaluation_results.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/_utils/hf_datasets.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/_utils/json_safe.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/_utils/learner_memory.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/_utils/result_metadata.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/_utils/reward_events.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/_utils/scoring.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/_utils/source_provenance.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/_utils/task_authoring/__init__.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/_utils/task_authoring/_evidence_paths.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/_utils/task_authoring/acceptance_evidence.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/_utils/task_authoring/scaffolding.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/_utils/task_authoring/structural_checks.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/_utils/text.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/_utils/yaml_loader.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/acp/__init__.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/acp/client.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/acp/container_transport.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/acp/runtime.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/acp/selection.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/acp/session.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/acp/transport.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/acp/types.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/adapters/__init__.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/adapters/_toolathlon.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/adapters/_toolathlon_container.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/adapters/_toolathlon_fake_mail.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/adapters/_toolathlon_poste_users.tsv +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/adapters/_toolathlon_services.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/adapters/harbor.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/adapters/inbound.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/adapters/inspect_ai.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/adapters/ors.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/adapters/resources/__init__.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/adapters/resources/mcp_atlas_bridge.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/adapters/resources/mcp_atlas_judge.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/adapters/source.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/agent_router.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/agent_router_guide.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/agent_router_parity.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/agent_router_scaffold.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/agents/__init__.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/agents/codex_config.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/agents/credentials.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/agents/deepagents_acp_shim.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/agents/env.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/agents/errors.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/agents/harvey_lab_acp_shim.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/agents/install.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/agents/manifest.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/agents/openclaw_acp_shim.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/agents/pi_acp_launcher.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/agents/protocol.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/agents/providers.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/agents/registry.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/agents/remote_manifests.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/branch.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/cli/__init__.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/cli/_hosted_env.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/cli/_live_progress.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/cli/_options.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/cli/_shared.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/cli/adopt.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/cli/agent.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/cli/continue_cmd.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/cli/environment.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/cli/eval_artifacts.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/cli/eval_lift.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/cli/hub.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/cli/main.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/cli/monitor.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/cli/review.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/cli/sandbox.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/cli/skills.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/cli/tasks.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/cli/trace_import.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/cli/train.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/continue_run/__init__.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/continue_run/batch.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/continue_run/orchestrator.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/continue_run/replay_proxy.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/continue_run/run_folder.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/continue_run/sandbox_proxy.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/contracts/__init__.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/contracts/planes.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/contracts/user.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/demo_task/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/demo_task/instruction.md +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/demo_task/task.md +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/demo_task/task.toml +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/demo_task/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/diagnostics.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/environment/__init__.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/environment/manifest.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/environment/manifest_env.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/environment/protocol.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/environment/readiness.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/eval_artifacts.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/eval_lift.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/eval_plan.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/eval_sharding.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/eval_worker.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/experimental/__init__.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/experimental/mcp/__init__.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/experimental/mcp/hooks.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/experimental/mcp/reviewer_server.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/hosted_env.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/hub/__init__.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/hub/harbor_registry.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/integrations/__init__.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/integrations/trl/__init__.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/integrations/trl/spec.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/learner_skills.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/learner_store.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/loop_strategies.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/loop_sweep.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/metrics.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/models.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/monitor.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/providers/__init__.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/providers/litellm_bedrock_patch.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/providers/litellm_bedrock_preflight.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/providers/litellm_runtime.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/providers/runtime.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/publish/__init__.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/publish/huggingface.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/py.typed +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/review/__init__.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/review/config.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/review/default-rubric.json +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/review/prompts.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/review/runner.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/review/wrapper.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/rewards/README.md +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/rewards/__init__.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/rewards/builtins.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/rewards/events.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/rewards/file_readers.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/rewards/llm.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/rewards/memory_scorer.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/rewards/node.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/rewards/protocol.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/rewards/rubric.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/rewards/rubric_config.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/rewards/validation.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/rollout/_config.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/rollout/_results.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/rollout/_skills.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/rollout/_usage.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/rollout/_user_loop.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/rollout/session_factory_runtime.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/rollout/task_runtime.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/rollout_branch.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/rollout_planes.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/runtime.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/sandbox/__init__.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/sandbox/_base.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/sandbox/_cache_reclaim.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/sandbox/_compose.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/sandbox/_compose_files/docker-compose-base.yaml +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/sandbox/_compose_files/docker-compose-build.yaml +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/sandbox/_compose_files/docker-compose-no-network.yaml +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/sandbox/_compose_files/docker-compose-prebuilt.yaml +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/sandbox/_sdk_ops.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/sandbox/agentcore.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/sandbox/agentcore_builder.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/sandbox/agentcore_image.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/sandbox/agentcore_provisioning.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/sandbox/agentcore_reaper.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/sandbox/agentcore_sealed.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/sandbox/apple_container.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/sandbox/daytona.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/sandbox/daytona_dind.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/sandbox/daytona_pty.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/sandbox/daytona_reaper.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/sandbox/daytona_strategies.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/sandbox/docker.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/sandbox/lockdown.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/sandbox/metadata.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/sandbox/modal_impl.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/sandbox/process/__init__.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/sandbox/process/_base.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/sandbox/process/agentcore.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/sandbox/process/apple.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/sandbox/process/docker.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/sandbox/protocol.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/sandbox/providers.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/sandbox/services.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/sandbox/setup.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/sandbox/snapshot.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/sandbox/user.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/scenes.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/sdk.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/self_gen.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/skill_eval/__init__.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/skill_eval/_core.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/skill_eval/gepa_export.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/skill_eval/schema.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/skill_policy.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/skills.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/task/__init__.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/task/_document_evidence.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/task/_document_normalize.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/task/_document_parse.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/task/_document_profiles.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/task/acceptance_live.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/task/acceptance_live_model.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/task/acceptance_live_report.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/task/acceptance_live_validation.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/task/config.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/task/discovery.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/task/document.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/task/env.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/task/export.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/task/imports.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/task/output_format.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/task/package.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/task/paths.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/task/prompts.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/task/runtime_capabilities.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/task/runtime_view.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/task/task.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/task/verifier.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/task/verifier_core.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/task/verifier_document.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/task/verifier_errors.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/task/verifier_judge_inputs.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/task/verifier_ors_episode.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/task/verifier_reward_kit.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/task/verifier_scan.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/task/verifier_script_strategy.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/templates/__init__.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/templates/judge.py.tmpl +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/templates/test.sh.tmpl +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/traces/__init__.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/traces/huggingface.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/traces/local.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/traces/models.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/traces/parsers.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/traces/task_gen.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/training/__init__.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/training/backends/__init__.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/training/backends/prime_rl.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/training/run_manifest.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/trajectories/__init__.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/trajectories/_capture.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/trajectories/_export_common.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/trajectories/_llm_capture.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/trajectories/call_purpose.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/trajectories/export.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/trajectories/export_adp.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/trajectories/export_atif.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/trajectories/export_prime_sft.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/trajectories/export_trl_sft.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/trajectories/metrics.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/trajectories/results.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/trajectories/tree.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/trajectories/trl_sft_tokenization.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/trajectories/types.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/trajectories/viewer.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/usage_tracking.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/__init__.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/acceptance_live_harness.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/agents/__init__.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/agents/test_manifest_dirscan.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/agents/test_manifest_loader.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/agents/test_manifest_parity.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/agents/test_manifest_wiring.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/agents/test_namespace_shorthand.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/agents/test_plugin_entry_points.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/agents/test_protocol.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/agents/test_remote_manifest_autoload.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/conformance/README.md +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/conformance/acp_smoke/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/conformance/acp_smoke/environment/docker-compose.yaml +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/conformance/acp_smoke/environment/skills/conformance-writer/SKILL.md +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/conformance/acp_smoke/instruction.md +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/conformance/acp_smoke/solution/solve.sh +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/conformance/acp_smoke/task.md +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/conformance/acp_smoke/task.toml +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/conformance/acp_smoke/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/conformance/conformance-results.json +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/conformance/proof_multi_agent.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/conformance/proof_snapshot.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/conformance/run_conformance.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/conformance/self_gen_smoke_skills/skill-creator/SKILL.md +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/conftest.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/continue_run/__init__.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/continue_run/_helpers.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/continue_run/test_batch.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/continue_run/test_orchestrator.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/continue_run/test_replay_proxy.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/continue_run/test_run_folder.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/environment/__init__.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/environment/test_chibench_manifest.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/environment/test_clawsbench_manifest.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/environment/test_manifest.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/environment/test_manifest_env.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/environment/test_protocol.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/environment/test_readiness.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/examples/hello-world-task/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/examples/hello-world-task/instruction.md +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/examples/hello-world-task/solution/solve.sh +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/examples/hello-world-task/task.md +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/examples/hello-world-task/task.toml +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/examples/hello-world-task/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/examples/test_claude.sh +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/examples/test_codex.sh +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/examples/test_codex_custom_provider.sh +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/examples/test_gemini.sh +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/examples/test_openclaw.sh +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/examples/traces/minimal-claude.jsonl +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/examples/traces/minimal-opentraces.jsonl +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/fixtures/digest/README.md +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/fixtures/digest/alpha-task/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/fixtures/digest/alpha-task/instruction.md +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/fixtures/digest/alpha-task/task.toml +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/fixtures/digest/alpha-task/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/fixtures/digest/beta-task/data/empty.bin +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/fixtures/digest/beta-task/data/unicode.txt +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/fixtures/digest/beta-task/instruction.md +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/fixtures/digest/beta-task/task.toml +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/fixtures/digest/not-a-task/notes.txt +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/fixtures/mock_acp_agent.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/fixtures/mock_acp_agent_interleaved.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/fixtures/mock_acp_agent_multi_turn.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/fixtures/mock_openai_responses_server.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/data/michigan_stations.txt +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/flood-detection/SKILL.md +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/nws-flood-thresholds/SKILL.md +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/usgs-data-download/SKILL.md +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/fixtures/skillsbench_slice/flood-risk-analysis/instruction.md +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/fixtures/skillsbench_slice/flood-risk-analysis/solution/solve.sh +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/fixtures/skillsbench_slice/flood-risk-analysis/task.toml +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/fixtures/skillsbench_slice/flood-risk-analysis/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/fixtures/skillsbench_slice/flood-risk-analysis/tests/test_outputs.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/climate.csv +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/hydrology.csv +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/land_cover.csv +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/water_temperature.csv +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/contribution-analysis/SKILL.md +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/meteorology-driver-classification/SKILL.md +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/pca-decomposition/SKILL.md +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/trend-analysis/SKILL.md +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/fixtures/skillsbench_slice/lake-warming-attribution/instruction.md +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/fixtures/skillsbench_slice/lake-warming-attribution/solution/solve.sh +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/fixtures/skillsbench_slice/lake-warming-attribution/task.toml +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/fixtures/skillsbench_slice/lake-warming-attribution/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/fixtures/skillsbench_slice/lake-warming-attribution/tests/test_outputs.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/fixtures/skillsbench_slice/manifest.json +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/r2r_simulator.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/finite-horizon-lqr/SKILL.md +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/integral-action-design/SKILL.md +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/mpc-horizon-tuning/SKILL.md +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/state-space-linearization/SKILL.md +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/system_config.json +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/fixtures/skillsbench_slice/r2r-mpc-control/instruction.md +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/fixtures/skillsbench_slice/r2r-mpc-control/solution/solve.sh +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/fixtures/skillsbench_slice/r2r-mpc-control/task.toml +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/fixtures/skillsbench_slice/r2r-mpc-control/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/fixtures/skillsbench_slice/r2r-mpc-control/tests/test_outputs.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/generate_training_pcaps.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/local.rules +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/pcap-triage-tshark/SKILL.md +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/pcap-triage-tshark/scripts/summarize_http_requests.sh +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-offline-evejson/SKILL.md +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-offline-evejson/scripts/run_suricata_offline.sh +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-rules-basics/SKILL.md +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/suricata.yaml +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/instruction.md +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/solution/solve.sh +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/task.toml +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/tests/test_outputs.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syz-extract-constants/SKILL.md +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syzkaller-build-loop/SKILL.md +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syzlang-ioctl-basics/SKILL.md +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/instruction.md +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/solution/solve.sh +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/task.toml +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/tests/test_outputs.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/integration/_consistency.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/integration/check_adapter_evidence.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/integration/check_hosted_env_evidence.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/integration/check_results.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/integration/check_skillsbench_harbor_parity.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/integration/check_trace_to_task_evidence.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/integration/configs/claude-agent-acp.yaml +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/integration/configs/codex-acp.yaml +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/integration/configs/gemini.yaml +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/integration/configs/harvey-lab-harness.yaml +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/integration/configs/mimo.yaml +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/integration/configs/openclaw.yaml +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/integration/configs/opencode.yaml +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/integration/configs/openhands.yaml +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/integration/configs/pi-acp.yaml +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/integration/deepagents_harness.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/integration/rubric_checks.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/integration/run.sh +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/integration/run_suite.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/integration/scenarios.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/integration/suites/release.yaml +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_acceptance_evidence.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_acceptance_live.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_acceptance_live_execution.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_acp.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_acp_capability_advertising.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_acp_mcp_servers.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_acp_model_config_dispatch.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_acp_pinned_protocol_guard.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_acp_setup_failure_propagation.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_adapter_scripts.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_adapters.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_agent_cli.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_agent_env_resolution.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_agent_gemini_defaults.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_agent_idle_timeout_cli.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_agent_model_decouple.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_agent_registry.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_agent_router.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_agent_router_cli_e2e.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_agent_router_scaffold.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_agent_setup.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_agent_spec.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_agentcore_builder.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_agentcore_parallel.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_agentcore_reaper.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_agentcore_sandbox.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_agentcore_transport.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_api_error_capture.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_apple_container_sandbox.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_bare_model_provider.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_base_install_imports.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_bedrock_thinking.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_benchflow_experiment_review_validator.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_benchmark_repos_resolve_repo_path.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_branch.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_build_context_stage.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_build_review_pack.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_capture_trajectory.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_check_skillsbench_harbor_parity.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_clawsbench_slice.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_cli_adopt_aliases.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_cli_arg_validation.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_cli_daytona.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_cli_docs_drift.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_cli_edge_case_hardening.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_cli_hub_env.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_cli_live_progress.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_cli_misc.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_codex_review.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_codex_self_write_auth.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_config_override.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_config_redaction.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_connect_as_env.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_console_error_truncation.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_continuallearningbench_adapter.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_dataset_registry.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_daytona_command_polling.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_daytona_dind_compose_up.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_daytona_download.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_daytona_litellm_runtime.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_daytona_poll_deadline.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_daytona_reap.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_deepagents_agent.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_docker_prune_scoping.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_docker_uploads.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_docs_examples.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_eng50_capabilities.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_env_registry.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_env_setup.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_environment_manifest_controls.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_eval_artifact_cli.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_eval_filters_applied.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_eval_lift.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_eval_sharding.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_eval_single_task_summary.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_eval_source_provenance.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_eval_worker_retry.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_eval_zero_task_guard.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_evaluation_environment_manifest.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_exclude_tasks.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_filter_credentialed_cells.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_harvey_lab_shim.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_hilbench_adapter.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_hosted_env.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_hosted_env_rollout_contract.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_hub_harbor_registry.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_inbound_adapter_manifest.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_inbound_adapters.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_integration_agent_judge.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_integration_check_results.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_integration_consistency.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_integration_matrix.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_integration_provider_selection.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_integration_run_suite.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_integration_suite.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_internet_policy.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_job.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_job_sequential_shared.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_job_sequential_shared_resume.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_judge_symlink_ingestion.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_learner_skills.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_learner_skills_traversal.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_learner_store.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_learner_store_persistence.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_litellm_hardening.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_litellm_model_via_env_generic.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_litellm_runtime.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_litellm_smoke.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_live_llm_trajectory.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_llm_judge.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_llm_judge_event_tags.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_llm_judge_verifier.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_loop_strategies.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_loop_summary.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_loop_sweep.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_memory_scorer.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_metrics.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_mle_bench_adapter.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_mock_openai_responses_server.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_monitor_scaffold.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_native_acp_usage.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_no_cross_provider_fallback.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_notification_order_real.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_opencode_family_proxy_tracking.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_oracle.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_oracle_chokepoint.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_paths_safe.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_paths_symlink_helpers.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_pi_acp_launcher.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_pi_acp_proxy_routing.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_process.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_project_skills_layout.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_provider_auth_detection.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_providers.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_reexport.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_registry_invariants.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_release_hardening_r5.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_release_version.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_release_workflow_wiring.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_resolve_env_helpers.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_review_boundaries.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_review_rubric.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_review_runtime.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_reward_lenient.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_reward_node.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_reward_range.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_reward_unified_contract.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_rewards.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_rewards_jsonl.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_rollout_architecture.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_rollout_branch.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_rollout_config_path_coercion.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_rollout_environment.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_rollout_import_no_side_effects.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_rollout_on_ask_user_wiring.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_rollout_planes_contract.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_rollout_probe_sandbox_health.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_rollout_session_factory_dispatch.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_rollout_setup_commands.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_rollout_upload.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_rubric_checks.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_rubric_config.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_runtime.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_runtime_capabilities.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_runtime_config_wired.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_runtime_live_sandbox.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_sandbox.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_sandbox_exec_secret_handling.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_sandbox_hardening.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_sandbox_isolation_copy_traversal.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_sandbox_live_process.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_sandbox_multi_service.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_sandbox_prebuilt_validation.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_sandbox_protocol.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_sandbox_provider_registry_drift.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_sandbox_setup.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_sandbox_snapshot_contract.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_sandbox_upload_symlink.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_sandbox_verifier_workspace.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_scene.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_scene_outbox_trial.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_scene_parallel_group.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_scene_result_aggregation.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_scoring.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_sdk_internals.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_sdk_lockdown.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_sdk_run_alias.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_sealed_channel_container.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_self_gen_cli.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_self_gen_export_error_channel.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_self_gen_export_failures.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_self_gen_orchestration.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_session_factory_runtime.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_session_request_permission_dispatch.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_skill_eval.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_skill_eval_dryrun.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_skill_eval_integration.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_skill_eval_sweep.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_skill_eval_traversal.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_skill_invocation_artifacts.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_skill_policy.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_skills.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_skills_dir_agent_home_link.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_skillsbench_conversion_conformance.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_skillsbench_harbor_run_suite.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_smoke.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_smoke_wiring.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_source_adapters.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_subscription_auth.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_task_check_eval_consistency.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_task_config.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_task_digest.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_task_document.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_task_download.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_task_export.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_task_output_format.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_task_package.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_task_runtime_primitive.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_tasks.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_token_usage_normalization.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_trace_import_cli.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_trace_task_gen_traversal.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_trace_to_task_evidence.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_traces_huggingface.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_traces_parsers.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_traces_task_gen.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_train_cli.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_train_mode_artifact_emission.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_train_trl_cli.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_trajectory_integration.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_trajectory_streaming.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_trial_agent_timeout_verify.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_trial_install_agent_timeout.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_trial_litellm_runtime.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_trl_integration.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_usage_litellm.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_usage_required.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_usage_tracking.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_user.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_v06_guard_ports.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_verifier_document.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_verifier_multi_container.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_verifier_output.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_verifier_output_freshness.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_verifier_strategies.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_verify.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_workflow_action_pinning.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/test_yaml_config.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/trajectories/__init__.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/trajectories/test_export.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/trajectories/test_export_adp.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/trajectories/test_export_atif.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/trajectories/test_export_common.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/trajectories/test_export_nan_handling.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/trajectories/test_export_prime_sft.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/trajectories/test_redaction.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/trajectories/test_step_granularity.py +0 -0
- {benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/tests/trajectories/test_tree.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: benchflow
|
|
3
|
-
Version: 0.6.7.
|
|
3
|
+
Version: 0.6.7.dev1813
|
|
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
|
|
@@ -137,6 +137,7 @@ Start with [Getting started](./docs/getting-started.md), then [Concepts](./docs/
|
|
|
137
137
|
| Run an eval on an existing task | [Getting started](./docs/getting-started.md) |
|
|
138
138
|
| Understand how BenchFlow runs *any* benchmark (the three-layer model) | [Run any benchmark](./docs/running-any-benchmark.md) |
|
|
139
139
|
| Have an AI agent install + run the quickstart end to end | [Agent quickstart prompt](./docs/agent-quickstart.md) |
|
|
140
|
+
| Run an agent from the public agents repo (goose, qwen-code, prime-agent, …) | [Running external agents](./docs/external-agents.md) |
|
|
140
141
|
| Understand Rollout / Scene / Role / Verifier | [Concepts](./docs/concepts.md) |
|
|
141
142
|
| Author a new task | [Task authoring](./docs/task-authoring.md) |
|
|
142
143
|
| Author a task in the native `task.md` format | [Native task.md authoring](./docs/task-authoring-task-md.md) |
|
|
@@ -73,6 +73,7 @@ Start with [Getting started](./docs/getting-started.md), then [Concepts](./docs/
|
|
|
73
73
|
| Run an eval on an existing task | [Getting started](./docs/getting-started.md) |
|
|
74
74
|
| Understand how BenchFlow runs *any* benchmark (the three-layer model) | [Run any benchmark](./docs/running-any-benchmark.md) |
|
|
75
75
|
| Have an AI agent install + run the quickstart end to end | [Agent quickstart prompt](./docs/agent-quickstart.md) |
|
|
76
|
+
| Run an agent from the public agents repo (goose, qwen-code, prime-agent, …) | [Running external agents](./docs/external-agents.md) |
|
|
76
77
|
| Understand Rollout / Scene / Role / Verifier | [Concepts](./docs/concepts.md) |
|
|
77
78
|
| Author a new task | [Task authoring](./docs/task-authoring.md) |
|
|
78
79
|
| Author a task in the native `task.md` format | [Native task.md authoring](./docs/task-authoring-task-md.md) |
|
|
@@ -1250,6 +1250,10 @@ class Evaluation:
|
|
|
1250
1250
|
|
|
1251
1251
|
return await run_self_gen(rollout_config)
|
|
1252
1252
|
rollout = await Rollout.create(rollout_config)
|
|
1253
|
+
# Rollout.run() enforces its own host-side hard deadline against
|
|
1254
|
+
# awaits wedged below the phase-level timeouts — see
|
|
1255
|
+
# benchflow.rollout._deadline. A trip surfaces here as a normal
|
|
1256
|
+
# infra-retryable error result.
|
|
1253
1257
|
return await rollout.run()
|
|
1254
1258
|
|
|
1255
1259
|
async def _run_single_task_legacy(
|
{benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/providers/litellm_config.py
RENAMED
|
@@ -26,6 +26,15 @@ _PROVIDER_REASONING_EFFORTS = frozenset(
|
|
|
26
26
|
{"none", "minimal", "low", "medium", "high", "xhigh", "max"}
|
|
27
27
|
)
|
|
28
28
|
|
|
29
|
+
#: Completions providers routed through LiteLLM's NATIVE provider integration
|
|
30
|
+
#: (``<provider>/<model>``) instead of the generic ``openai/`` passthrough, so
|
|
31
|
+
#: provider-specific params the agent sends (DeepSeek ``thinking`` /
|
|
32
|
+
#: ``reasoning_effort``) survive ``drop_params``. Extend only after checking
|
|
33
|
+
#: ``get_supported_openai_params(..., custom_llm_provider=<name>)`` on the
|
|
34
|
+
#: pinned LiteLLM: a provider listed here whose integration DOESN'T support a
|
|
35
|
+
#: param drops it exactly like the openai/ route would.
|
|
36
|
+
_NATIVE_LITELLM_COMPLETIONS_PROVIDERS = frozenset({"deepseek"})
|
|
37
|
+
|
|
29
38
|
# Per-token USD prices for models LiteLLM's built-in ``model_cost`` does not
|
|
30
39
|
# already know (custom OpenAI-compatible endpoints such as private vLLM servers
|
|
31
40
|
# or niche hosted models). When a route's upstream model matches a key here, the
|
|
@@ -105,7 +114,7 @@ class LiteLLMRoute:
|
|
|
105
114
|
model_alias: str
|
|
106
115
|
upstream_model: str
|
|
107
116
|
provider_name: str
|
|
108
|
-
litellm_params: dict[str, str | int | float | bool]
|
|
117
|
+
litellm_params: dict[str, str | int | float | bool | list[str]]
|
|
109
118
|
required_env: tuple[str, ...] = ()
|
|
110
119
|
|
|
111
120
|
@property
|
|
@@ -201,7 +210,7 @@ def _route_registered_provider(
|
|
|
201
210
|
env: dict[str, str],
|
|
202
211
|
) -> LiteLLMRoute:
|
|
203
212
|
bare = strip_provider_prefix(model)
|
|
204
|
-
params: dict[str, str | int | float | bool]
|
|
213
|
+
params: dict[str, str | int | float | bool | list[str]]
|
|
205
214
|
required_env: list[str] = []
|
|
206
215
|
|
|
207
216
|
if provider_name == "aws-bedrock":
|
|
@@ -305,9 +314,23 @@ def _route_registered_provider(
|
|
|
305
314
|
|
|
306
315
|
if protocol == "anthropic-messages":
|
|
307
316
|
upstream = f"anthropic/{bare}"
|
|
317
|
+
elif provider_name in _NATIVE_LITELLM_COMPLETIONS_PROVIDERS:
|
|
318
|
+
# Parity: the generic openai/ passthrough + global `drop_params: True`
|
|
319
|
+
# silently strips params outside the vanilla-OpenAI set — verified live
|
|
320
|
+
# 2026-08-08 with a capture proxy between the gateway and
|
|
321
|
+
# api.deepseek.com: the agent sent `thinking: {type: enabled}` +
|
|
322
|
+
# `reasoning_effort: high` and the upstream received NEITHER, so
|
|
323
|
+
# gateway-routed runs used the provider's DEFAULT thinking config while
|
|
324
|
+
# native runs used the agent's. LiteLLM's native provider integrations
|
|
325
|
+
# declare those params supported (deepseek does for both), so routing
|
|
326
|
+
# through the provider's own prefix forwards them while drop_params
|
|
327
|
+
# keeps protecting genuinely unsupported fields. (The pinned LiteLLM
|
|
328
|
+
# 1.89.0 has no per-deployment allowed_openai_params escape, so the
|
|
329
|
+
# provider prefix is the only faithful route.)
|
|
330
|
+
upstream = f"{provider_name}/{bare}"
|
|
308
331
|
else:
|
|
309
332
|
upstream = f"openai/{bare}"
|
|
310
|
-
params = {"model": upstream}
|
|
333
|
+
params: dict[str, str | int | float | bool | list[str]] = {"model": upstream}
|
|
311
334
|
if api_base:
|
|
312
335
|
params["api_base"] = api_base
|
|
313
336
|
api_key_ref = (
|
|
@@ -365,7 +388,7 @@ def resolve_litellm_route(model: str, env: dict[str, str]) -> LiteLLMRoute:
|
|
|
365
388
|
upstream = f"openai/{bare}"
|
|
366
389
|
required = ("OPENAI_API_KEY",)
|
|
367
390
|
|
|
368
|
-
params: dict[str, str | int | float | bool] = {"model": upstream}
|
|
391
|
+
params: dict[str, str | int | float | bool | list[str]] = {"model": upstream}
|
|
369
392
|
if upstream.lower().startswith("gemini/"):
|
|
370
393
|
explicit_api_base = (env.get("BENCHFLOW_PROVIDER_BASE_URL") or "").strip()
|
|
371
394
|
explicit_api_key = (env.get("BENCHFLOW_PROVIDER_API_KEY") or "").strip()
|
{benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/providers/litellm_logging.py
RENAMED
|
@@ -223,13 +223,6 @@ def _failure_traceback(detail: Any) -> str:
|
|
|
223
223
|
|
|
224
224
|
|
|
225
225
|
class BenchFlowLiteLLMLogger(CustomLogger):
|
|
226
|
-
async def async_pre_call_hook(self, user_api_key_dict, cache, data, call_type):
|
|
227
|
-
if isinstance(data, dict) and data.get("messages") is not None and "input" in data:
|
|
228
|
-
cleaned = dict(data)
|
|
229
|
-
cleaned.pop("input", None)
|
|
230
|
-
return cleaned
|
|
231
|
-
return None
|
|
232
|
-
|
|
233
226
|
def _write(self, payload: dict[str, Any]) -> None:
|
|
234
227
|
path = os.environ.get("BENCHFLOW_LITELLM_LOG_PATH")
|
|
235
228
|
if not path:
|
|
@@ -322,6 +315,23 @@ class BenchFlowLiteLLMLogger(CustomLogger):
|
|
|
322
315
|
cleaned = dict(data)
|
|
323
316
|
cleaned["tools"] = kept
|
|
324
317
|
|
|
318
|
+
# Forward ``reasoning_effort`` VERBATIM on deepseek routes. LiteLLM's
|
|
319
|
+
# deepseek transform consumes the top-level field (it maps it into its
|
|
320
|
+
# own thinking handling and drops the raw param — even with drop_params
|
|
321
|
+
# off; verified against a capture upstream 2026-08-08), while
|
|
322
|
+
# ``extra_body`` fields merge into the wire request untouched. Lifting
|
|
323
|
+
# the param means the upstream receives exactly what the agent sent —
|
|
324
|
+
# the same request a native (gateway-less) run produces. Scoped to
|
|
325
|
+
# deepseek, today's only natively-routed completions provider
|
|
326
|
+
# (_NATIVE_LITELLM_COMPLETIONS_PROVIDERS in litellm_config.py).
|
|
327
|
+
model_id = str(cleaned.get("model") or "")
|
|
328
|
+
if "deepseek" in model_id and cleaned.get("reasoning_effort") is not None:
|
|
329
|
+
if cleaned is data:
|
|
330
|
+
cleaned = dict(data)
|
|
331
|
+
extra = dict(cleaned.get("extra_body") or {})
|
|
332
|
+
extra.setdefault("reasoning_effort", cleaned.pop("reasoning_effort"))
|
|
333
|
+
cleaned["extra_body"] = extra
|
|
334
|
+
|
|
325
335
|
capture_logprobs = (
|
|
326
336
|
os.environ.get("BENCHFLOW_CAPTURE_TOKEN_LOGPROBS", "").strip().lower()
|
|
327
337
|
in {"1", "true", "yes", "on"}
|
|
@@ -97,6 +97,7 @@ from benchflow.loop_strategies import (
|
|
|
97
97
|
loop_block,
|
|
98
98
|
)
|
|
99
99
|
from benchflow.models import RolloutResult, TrajectorySource
|
|
100
|
+
from benchflow.rollout import _deadline as _deadline
|
|
100
101
|
from benchflow.rollout._config import GENERATED_SKILLS_ROOT as GENERATED_SKILLS_ROOT
|
|
101
102
|
from benchflow.rollout._config import RolloutConfig as RolloutConfig
|
|
102
103
|
from benchflow.rollout._results import _DIAG_TRUNCATE as _DIAG_TRUNCATE
|
|
@@ -1977,6 +1978,20 @@ class Rollout:
|
|
|
1977
1978
|
logger.error(self._error)
|
|
1978
1979
|
|
|
1979
1980
|
async def run(self) -> RolloutResult:
|
|
1981
|
+
"""Run the complete trial lifecycle under a host-side hard deadline.
|
|
1982
|
+
|
|
1983
|
+
The lifecycle itself lives in :meth:`_run_lifecycle`; the deadline is
|
|
1984
|
+
a backstop against awaits wedged below every phase-level timeout (a
|
|
1985
|
+
Daytona PTY kill on a dead websocket, a hung session exec in the
|
|
1986
|
+
post-verify export path) — see :mod:`benchflow.rollout._deadline`.
|
|
1987
|
+
A trip becomes a normal infra-retryable error result and the
|
|
1988
|
+
abandoned attempt's cleanup is bounded too.
|
|
1989
|
+
"""
|
|
1990
|
+
return await _deadline.enforce_hard_deadline(
|
|
1991
|
+
self._run_lifecycle(), config=self._config
|
|
1992
|
+
)
|
|
1993
|
+
|
|
1994
|
+
async def _run_lifecycle(self) -> RolloutResult:
|
|
1980
1995
|
"""Run the complete trial lifecycle.
|
|
1981
1996
|
|
|
1982
1997
|
Iterates over effective_scenes. Single-agent is a trial with one
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
"""Host-side hard deadline for one rollout attempt.
|
|
2
|
+
|
|
3
|
+
Every phase inside a rollout carries its own timeout (install, agent idle +
|
|
4
|
+
wall-clock, verifier, PTY readline), but an await stuck BELOW that
|
|
5
|
+
instrumentation — a Daytona PTY kill on a dead websocket, a wedged session
|
|
6
|
+
exec in the post-verify export path — can block forever and freeze the caller
|
|
7
|
+
(observed 2026-08-07: one hung bike-rebalance rollout wedged a 25-task eval
|
|
8
|
+
for 11+ hours after its verifier had already finished). The hard deadline is a
|
|
9
|
+
backstop, not a budget: it is derived from the sum of every phase budget plus
|
|
10
|
+
a generous fixed margin, so it can only fire when some await is stuck outside
|
|
11
|
+
all phase-level timeouts.
|
|
12
|
+
|
|
13
|
+
Enforcement lives here too (:func:`enforce_hard_deadline`), and deliberately
|
|
14
|
+
does NOT use a bare ``asyncio.wait_for``: cancelling ``Rollout.run()`` runs
|
|
15
|
+
its ``finally: cleanup()``, and when the *teardown* is the wedged path,
|
|
16
|
+
``wait_for`` blocks past its own deadline waiting for that cleanup to finish
|
|
17
|
+
— the exact hang this backstop exists to break. Instead the lifecycle runs as
|
|
18
|
+
a task, cancellation gets its own bounded grace period, and a still-wedged
|
|
19
|
+
task is abandoned (the sandbox provider's GC reaps the leaked resources).
|
|
20
|
+
|
|
21
|
+
Override with ``BENCHFLOW_ROLLOUT_HARD_DEADLINE`` (seconds; ``off``/``none``/
|
|
22
|
+
``0`` or any non-positive number disables the backstop entirely).
|
|
23
|
+
"""
|
|
24
|
+
|
|
25
|
+
from __future__ import annotations
|
|
26
|
+
|
|
27
|
+
import asyncio
|
|
28
|
+
import logging
|
|
29
|
+
import os
|
|
30
|
+
from collections.abc import Coroutine
|
|
31
|
+
from typing import TYPE_CHECKING, Any
|
|
32
|
+
|
|
33
|
+
from benchflow._utils.scoring import INFRA_ERROR
|
|
34
|
+
from benchflow.models import RolloutResult
|
|
35
|
+
|
|
36
|
+
if TYPE_CHECKING:
|
|
37
|
+
from benchflow.rollout._config import RolloutConfig
|
|
38
|
+
|
|
39
|
+
logger = logging.getLogger(__name__)
|
|
40
|
+
|
|
41
|
+
HARD_DEADLINE_ENV = "BENCHFLOW_ROLLOUT_HARD_DEADLINE"
|
|
42
|
+
_MARGIN_SEC = 1800.0
|
|
43
|
+
_FALLBACK_SEC = 3 * 3600.0
|
|
44
|
+
# Grace period for the cancelled lifecycle's own cleanup() before the task is
|
|
45
|
+
# abandoned outright.
|
|
46
|
+
ABANDON_CLEANUP_BOUND_SEC = 120.0
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
def hard_deadline_sec(cfg: RolloutConfig) -> float | None:
|
|
50
|
+
"""Compute the hard backstop deadline for one rollout attempt.
|
|
51
|
+
|
|
52
|
+
Returns ``None`` when the operator disabled the backstop. On any failure
|
|
53
|
+
to read the task's budgets, falls back to a conservative constant rather
|
|
54
|
+
than running unbounded.
|
|
55
|
+
"""
|
|
56
|
+
raw = os.environ.get(HARD_DEADLINE_ENV, "").strip().lower()
|
|
57
|
+
if raw in {"off", "none"}:
|
|
58
|
+
return None
|
|
59
|
+
if raw:
|
|
60
|
+
try:
|
|
61
|
+
value = float(raw)
|
|
62
|
+
except ValueError:
|
|
63
|
+
logger.warning(
|
|
64
|
+
f"{HARD_DEADLINE_ENV}={raw!r} is not a number; using computed deadline"
|
|
65
|
+
)
|
|
66
|
+
else:
|
|
67
|
+
return value if value > 0 else None
|
|
68
|
+
try:
|
|
69
|
+
return _computed_deadline_sec(cfg)
|
|
70
|
+
except Exception as e:
|
|
71
|
+
logger.debug(f"hard-deadline: could not read {cfg.task_path.name} budgets: {e}")
|
|
72
|
+
return _FALLBACK_SEC
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
def _computed_deadline_sec(cfg: RolloutConfig) -> float:
|
|
76
|
+
"""Sum every phase budget the rollout could legitimately spend.
|
|
77
|
+
|
|
78
|
+
Uses the same sources the phases themselves enforce: the caller wall-clock
|
|
79
|
+
override (``cfg.timeout``) or the task's agent budget per turn, per-role
|
|
80
|
+
``timeout_sec`` overrides, user-loop rounds (each round runs one prompt
|
|
81
|
+
plus a soft verify), and :func:`effective_install_timeout` — the single
|
|
82
|
+
source of truth for the install budget — per distinct agent.
|
|
83
|
+
"""
|
|
84
|
+
from benchflow.agents.install import effective_install_timeout
|
|
85
|
+
from benchflow.task import Task
|
|
86
|
+
|
|
87
|
+
tcfg = Task(cfg.task_path).config
|
|
88
|
+
agent_default = float(cfg.timeout or tcfg.agent.timeout_sec or 900.0)
|
|
89
|
+
verifier_sec = float(tcfg.verifier.timeout_sec or 900.0)
|
|
90
|
+
build_sec = float(tcfg.sandbox.build_timeout_sec or 600.0)
|
|
91
|
+
|
|
92
|
+
scenes = cfg.effective_scenes
|
|
93
|
+
role_budget = {
|
|
94
|
+
role.name: float(role.timeout_sec)
|
|
95
|
+
for scene in scenes
|
|
96
|
+
for role in scene.roles
|
|
97
|
+
if role.timeout_sec
|
|
98
|
+
}
|
|
99
|
+
agent_total = sum(
|
|
100
|
+
role_budget.get(turn.role, agent_default)
|
|
101
|
+
for scene in scenes
|
|
102
|
+
for turn in scene.turns
|
|
103
|
+
)
|
|
104
|
+
agent_total = max(agent_total, agent_default)
|
|
105
|
+
if cfg.user is not None:
|
|
106
|
+
agent_total = max(
|
|
107
|
+
agent_total, cfg.max_user_rounds * (agent_default + verifier_sec)
|
|
108
|
+
)
|
|
109
|
+
|
|
110
|
+
agents = {role.agent for scene in scenes for role in scene.roles} or {cfg.agent}
|
|
111
|
+
install_total = sum(
|
|
112
|
+
float(effective_install_timeout(agent, cfg.sandbox_setup_timeout) or 0.0)
|
|
113
|
+
for agent in agents
|
|
114
|
+
)
|
|
115
|
+
return agent_total + verifier_sec + build_sec + install_total + _MARGIN_SEC
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
async def enforce_hard_deadline(
|
|
119
|
+
lifecycle: Coroutine[Any, Any, RolloutResult],
|
|
120
|
+
*,
|
|
121
|
+
config: RolloutConfig,
|
|
122
|
+
) -> RolloutResult:
|
|
123
|
+
"""Run one rollout lifecycle under the host-side hard deadline.
|
|
124
|
+
|
|
125
|
+
A deadline trip cancels the lifecycle (which runs its own ``finally``
|
|
126
|
+
cleanup), bounds that cleanup with :data:`ABANDON_CLEANUP_BOUND_SEC`, and
|
|
127
|
+
returns a normal infra-retryable error result. External cancellation of
|
|
128
|
+
the caller is forwarded to the lifecycle under the same cleanup bound.
|
|
129
|
+
"""
|
|
130
|
+
deadline = hard_deadline_sec(config)
|
|
131
|
+
if deadline is None:
|
|
132
|
+
return await lifecycle
|
|
133
|
+
inner = asyncio.ensure_future(lifecycle)
|
|
134
|
+
try:
|
|
135
|
+
done, _ = await asyncio.wait({inner}, timeout=deadline)
|
|
136
|
+
except asyncio.CancelledError:
|
|
137
|
+
await _cancel_and_abandon(inner)
|
|
138
|
+
raise
|
|
139
|
+
if inner in done:
|
|
140
|
+
return inner.result()
|
|
141
|
+
task_name = config.task_path.name
|
|
142
|
+
logger.error(
|
|
143
|
+
f"[HARD-DEADLINE] {task_name}: rollout exceeded host deadline "
|
|
144
|
+
f"({deadline:.0f}s); abandoning sandbox"
|
|
145
|
+
)
|
|
146
|
+
await _cancel_and_abandon(inner)
|
|
147
|
+
return RolloutResult(
|
|
148
|
+
task_name=task_name,
|
|
149
|
+
error=(
|
|
150
|
+
f"Rollout exceeded host hard deadline ({deadline:.0f}s) — "
|
|
151
|
+
"transport or teardown wedged below the idle/wall-clock "
|
|
152
|
+
"watchdogs; sandbox abandoned"
|
|
153
|
+
),
|
|
154
|
+
error_category=INFRA_ERROR,
|
|
155
|
+
)
|
|
156
|
+
|
|
157
|
+
|
|
158
|
+
async def _cancel_and_abandon(inner: asyncio.Task) -> None:
|
|
159
|
+
"""Cancel the lifecycle; give its cleanup a bounded grace, then abandon.
|
|
160
|
+
|
|
161
|
+
Cancellation runs the lifecycle's ``finally: cleanup()``. When that
|
|
162
|
+
teardown is itself the wedged path, waiting for it would re-freeze the
|
|
163
|
+
caller — so after the bound the task is left running detached, with its
|
|
164
|
+
eventual outcome swallowed to silence the never-retrieved warning.
|
|
165
|
+
"""
|
|
166
|
+
inner.cancel()
|
|
167
|
+
done, _ = await asyncio.wait({inner}, timeout=ABANDON_CLEANUP_BOUND_SEC)
|
|
168
|
+
if inner in done:
|
|
169
|
+
return
|
|
170
|
+
logger.error(
|
|
171
|
+
"[HARD-DEADLINE] rollout cleanup wedged too; abandoning the task outright"
|
|
172
|
+
)
|
|
173
|
+
inner.add_done_callback(_swallow_abandoned_outcome)
|
|
174
|
+
|
|
175
|
+
|
|
176
|
+
def _swallow_abandoned_outcome(task: asyncio.Task) -> None:
|
|
177
|
+
if not task.cancelled():
|
|
178
|
+
task.exception()
|
|
@@ -472,10 +472,34 @@ async def _verify_rollout(
|
|
|
472
472
|
await planes.harden_before_verify(env, task, sandbox_user, workspace=workspace)
|
|
473
473
|
logger.info("Running verifier...")
|
|
474
474
|
verifier = planes.verifier(task=task, rollout_paths=rollout_paths, sandbox=env)
|
|
475
|
-
verifier_result =
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
475
|
+
verifier_result = None
|
|
476
|
+
for attempt in (1, 2):
|
|
477
|
+
try:
|
|
478
|
+
verifier_result = await asyncio.wait_for(
|
|
479
|
+
verifier.verify(),
|
|
480
|
+
timeout=timeout_budget,
|
|
481
|
+
)
|
|
482
|
+
break
|
|
483
|
+
except TimeoutError:
|
|
484
|
+
# A verifier that times out having produced NO output never
|
|
485
|
+
# actually started its tests — the exec-layer session wedged
|
|
486
|
+
# (observed on Daytona 2026-08-07/08: test.sh finishes in
|
|
487
|
+
# under a second when it runs, yet several rollouts burned the
|
|
488
|
+
# full verifier budget with an empty test-stdout.txt). That is
|
|
489
|
+
# an infra wedge, not a slow verifier, and test.sh is a
|
|
490
|
+
# stateless scoring script over the frozen workspace — so one
|
|
491
|
+
# retry is safe and turns a lost rollout into a real score. A
|
|
492
|
+
# timeout WITH output is a genuinely slow/hung verifier and is
|
|
493
|
+
# never retried.
|
|
494
|
+
if attempt == 1 and await _verifier_wedged_without_output(env):
|
|
495
|
+
logger.warning(
|
|
496
|
+
"Verifier timed out with no output — exec-layer wedge "
|
|
497
|
+
"suspected; retrying verifier once"
|
|
498
|
+
)
|
|
499
|
+
await _kill_orphan_verifier(env)
|
|
500
|
+
continue
|
|
501
|
+
raise
|
|
502
|
+
assert verifier_result is not None
|
|
479
503
|
timing["verifier"] = (datetime.now() - t0).total_seconds()
|
|
480
504
|
rewards = _ensure_canonical_rewards(verifier_result.rewards, task=task)
|
|
481
505
|
logger.info(f"Rewards: {rewards}")
|
|
@@ -498,6 +522,44 @@ async def _verify_rollout(
|
|
|
498
522
|
return rewards, verifier_error, verifier_timeout
|
|
499
523
|
|
|
500
524
|
|
|
525
|
+
async def _verifier_wedged_without_output(env: Any) -> bool:
|
|
526
|
+
"""True when the timed-out verifier attempt left no test output behind.
|
|
527
|
+
|
|
528
|
+
Zero bytes in ``/logs/verifier/test-stdout.txt`` (or no file at all) means
|
|
529
|
+
``test.sh`` never started — the wedge signature. When even this probe
|
|
530
|
+
fails, the control plane is still sick and a retry is the best remaining
|
|
531
|
+
move, so failures count as wedged.
|
|
532
|
+
"""
|
|
533
|
+
try:
|
|
534
|
+
r = await asyncio.wait_for(
|
|
535
|
+
env.exec(
|
|
536
|
+
"wc -c < /logs/verifier/test-stdout.txt 2>/dev/null || echo 0",
|
|
537
|
+
timeout_sec=10,
|
|
538
|
+
),
|
|
539
|
+
timeout=30,
|
|
540
|
+
)
|
|
541
|
+
return int((r.stdout or "0").strip() or 0) == 0
|
|
542
|
+
except Exception:
|
|
543
|
+
return True
|
|
544
|
+
|
|
545
|
+
|
|
546
|
+
async def _kill_orphan_verifier(env: Any) -> None:
|
|
547
|
+
"""Best-effort kill of a possibly-orphaned first verifier attempt.
|
|
548
|
+
|
|
549
|
+
The host-side timeout cancels only our await; if the in-sandbox test.sh
|
|
550
|
+
did start late it would race the retry's run, so clear it first.
|
|
551
|
+
"""
|
|
552
|
+
with contextlib.suppress(Exception):
|
|
553
|
+
await asyncio.wait_for(
|
|
554
|
+
env.exec(
|
|
555
|
+
"pkill -f '/verifier/test.sh' 2>/dev/null || true",
|
|
556
|
+
user="root",
|
|
557
|
+
timeout_sec=10,
|
|
558
|
+
),
|
|
559
|
+
timeout=30,
|
|
560
|
+
)
|
|
561
|
+
|
|
562
|
+
|
|
501
563
|
def _ensure_canonical_rewards(rewards: dict | None, *, task: Any = None) -> dict:
|
|
502
564
|
# Honour the same BENCHFLOW_REWARD_LENIENT toggle and task-declared
|
|
503
565
|
# ``[verifier] reward_range`` (BF-8) as the reward.json parse path so the
|
{benchflow-0.6.7.dev1798 → benchflow-0.6.7.dev1813}/src/benchflow/sandbox/process/daytona.py
RENAMED
|
@@ -52,10 +52,16 @@ async def _cleanup_daytona_remote_env_file(
|
|
|
52
52
|
sandbox: Any,
|
|
53
53
|
remote_env_path: str,
|
|
54
54
|
) -> None:
|
|
55
|
+
# timeout=10 is the server-side exec limit; the extra wait_for bounds the
|
|
56
|
+
# client-side await too, so a dead connection can't hang a teardown path
|
|
57
|
+
# (this runs inside close()'s finally).
|
|
55
58
|
with contextlib.suppress(Exception):
|
|
56
|
-
await
|
|
57
|
-
|
|
58
|
-
|
|
59
|
+
await asyncio.wait_for(
|
|
60
|
+
sandbox.process.exec(
|
|
61
|
+
f"rm -f {shlex.quote(remote_env_path)}",
|
|
62
|
+
timeout=10,
|
|
63
|
+
),
|
|
64
|
+
timeout=30,
|
|
59
65
|
)
|
|
60
66
|
|
|
61
67
|
|
|
@@ -655,10 +661,16 @@ class DaytonaPtyProcess(LiveProcess):
|
|
|
655
661
|
self._closed = True
|
|
656
662
|
try:
|
|
657
663
|
if self._pty:
|
|
664
|
+
# kill/disconnect go over the PTY's websocket; on a dead or
|
|
665
|
+
# wedged connection either await can block indefinitely, and a
|
|
666
|
+
# hung close() freezes the whole rollout teardown (this exact
|
|
667
|
+
# shape wedged a 25-task job for 11+ hours). Bound each call —
|
|
668
|
+
# the sandbox is deleted by env.stop() regardless, so an
|
|
669
|
+
# abandoned server-side PTY session costs nothing.
|
|
658
670
|
with contextlib.suppress(Exception):
|
|
659
|
-
await self._pty.kill()
|
|
671
|
+
await asyncio.wait_for(self._pty.kill(), timeout=15)
|
|
660
672
|
with contextlib.suppress(Exception):
|
|
661
|
-
await self._pty.disconnect()
|
|
673
|
+
await asyncio.wait_for(self._pty.disconnect(), timeout=15)
|
|
662
674
|
logger.info("DaytonaPtyProcess terminated")
|
|
663
675
|
finally:
|
|
664
676
|
await self._cleanup_started_env_file()
|
|
@@ -86,6 +86,27 @@ _TAMPER_OP_RE = re.compile(
|
|
|
86
86
|
r"(\brm\b|\bsed\s+-i\b|\bchmod\b|\bmv\b|\btruncate\b)",
|
|
87
87
|
re.IGNORECASE,
|
|
88
88
|
)
|
|
89
|
+
# Agent-owned scratch roots. A file under these paths cannot define the score —
|
|
90
|
+
# the verifier never reads them — so a verify/test-ish NAME there is the agent's
|
|
91
|
+
# own scratch tooling, not grader tamper. Observed live (PR #949 rollout-smoke):
|
|
92
|
+
# openhands created, ran, and deleted /tmp/verify.py as its own validation
|
|
93
|
+
# script — reward 1.0, LLM judge explicitly benign — and the name-anywhere match
|
|
94
|
+
# failed the job. Score-defining locations (/verifier, /logs/verifier, /oracle,
|
|
95
|
+
# workspace tests/) can never sit under these roots, so the exemption cannot
|
|
96
|
+
# mask a real tamper.
|
|
97
|
+
_SCRATCH_PATH_RE = re.compile(r"^(?:/tmp|/var/tmp|/dev/shm)(?:/|$)")
|
|
98
|
+
_SCRATCH_TOKEN_RE = re.compile(r"(?<![\w/])(?:/tmp|/var/tmp|/dev/shm)/[^\s;&|<>'\"]*")
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
def _is_scratch_path(path: str) -> bool:
|
|
102
|
+
return bool(_SCRATCH_PATH_RE.match(path.strip().strip("'\"")))
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
def _mask_scratch_paths(command: str) -> str:
|
|
106
|
+
"""Blank scratch-rooted path tokens so the name sweep cannot match them."""
|
|
107
|
+
return _SCRATCH_TOKEN_RE.sub("<scratch>", command)
|
|
108
|
+
|
|
109
|
+
|
|
89
110
|
_REDIRECT_TARGET_RE = re.compile(
|
|
90
111
|
r"(?:\b(?:echo|printf|cat)\b[^|;&\n]*?)?>{1,2}\s*(?P<target>[^\s;&|]+)",
|
|
91
112
|
re.IGNORECASE,
|
|
@@ -135,8 +156,13 @@ def _acp_write_target(title: str) -> str:
|
|
|
135
156
|
prefix = "file_editor:"
|
|
136
157
|
if not stripped.startswith(prefix):
|
|
137
158
|
return title
|
|
159
|
+
# Titles carry trailing prose after the JSON payload (observed live:
|
|
160
|
+
# ``file_editor: {...}: Editing /tmp/test_rnn.py``), so parse the LEADING
|
|
161
|
+
# object with raw_decode instead of json.loads — a whole-title fallback
|
|
162
|
+
# here re-enables name-matching against file contents and prose, which is
|
|
163
|
+
# exactly the false-positive class this function exists to prevent.
|
|
138
164
|
try:
|
|
139
|
-
payload = json.
|
|
165
|
+
payload, _ = json.JSONDecoder().raw_decode(stripped[len(prefix) :].strip())
|
|
140
166
|
except json.JSONDecodeError:
|
|
141
167
|
return title
|
|
142
168
|
if not isinstance(payload, Mapping):
|
|
@@ -153,12 +179,15 @@ def _shell_tamper_hit(command: str) -> bool:
|
|
|
153
179
|
look like grader tamper.
|
|
154
180
|
"""
|
|
155
181
|
for match in _REDIRECT_TARGET_RE.finditer(command):
|
|
156
|
-
|
|
182
|
+
target = match.group("target")
|
|
183
|
+
if not _is_scratch_path(target) and _VERIFIER_FILE_RE.search(target):
|
|
157
184
|
return True
|
|
158
185
|
for match in _TEE_TARGET_RE.finditer(command):
|
|
159
|
-
|
|
186
|
+
target = match.group("target")
|
|
187
|
+
if not _is_scratch_path(target) and _VERIFIER_FILE_RE.search(target):
|
|
160
188
|
return True
|
|
161
|
-
|
|
189
|
+
masked = _mask_scratch_paths(command)
|
|
190
|
+
return bool(_VERIFIER_FILE_RE.search(masked) and _TAMPER_OP_RE.search(masked))
|
|
162
191
|
|
|
163
192
|
|
|
164
193
|
def _scan_native_tool_call(event: dict[str, Any]) -> list[str]:
|
|
@@ -179,7 +208,11 @@ def _scan_native_tool_call(event: dict[str, Any]) -> list[str]:
|
|
|
179
208
|
# A write-like kind mutating a score-defining file (the mutation is implied
|
|
180
209
|
# by the kind, so no destructive-op token is required in the title).
|
|
181
210
|
target = _acp_write_target(title)
|
|
182
|
-
if
|
|
211
|
+
if (
|
|
212
|
+
kind in _ACP_WRITE_KINDS
|
|
213
|
+
and not _is_scratch_path(target)
|
|
214
|
+
and _VERIFIER_FILE_RE.search(target)
|
|
215
|
+
):
|
|
183
216
|
return [f"{kind} -> {title[:160]}"]
|
|
184
217
|
# execute / other: OpenHands writes the title as "<description>: $ <command>".
|
|
185
218
|
# Scan ONLY the command so prose like "Verify the output" can't collide with
|
|
@@ -202,7 +235,7 @@ def _scan_nested_tool_calls(event: dict[str, Any]) -> list[str]:
|
|
|
202
235
|
args = {}
|
|
203
236
|
if name in _WRITE_TOOLS:
|
|
204
237
|
path = str(args.get("path") or args.get("file_path") or "")
|
|
205
|
-
if path and _VERIFIER_FILE_RE.search(path):
|
|
238
|
+
if path and not _is_scratch_path(path) and _VERIFIER_FILE_RE.search(path):
|
|
206
239
|
flagged.append(f"{name} -> {path}")
|
|
207
240
|
elif name in _SHELL_TOOLS:
|
|
208
241
|
cmd = str(args.get("command") or args.get("cmd") or "")
|
|
@@ -69,6 +69,18 @@ def _native(kind: str, title: str) -> dict:
|
|
|
69
69
|
{"source": "user", "message": "rm -rf tests please"},
|
|
70
70
|
False,
|
|
71
71
|
), # not a tool call
|
|
72
|
+
# Agent-owned scratch roots: verify/test-ish NAMES under /tmp (etc.) are
|
|
73
|
+
# the agent's own scratch tooling, never score-defining. Mirrors the
|
|
74
|
+
# live PR #949 rollout-smoke false positive (openhands /tmp/verify.py:
|
|
75
|
+
# created, ran, deleted; reward 1.0; LLM judge explicitly benign).
|
|
76
|
+
(_tc("bash", command="cat > /tmp/verify.py << 'EOF'\nimport jax\nEOF"), False),
|
|
77
|
+
(_tc("bash", command="rm -f /tmp/verify.py && cd /app && ls"), False),
|
|
78
|
+
(_tc("write_file", path="/tmp/verify.py", content="import jax"), False),
|
|
79
|
+
(_tc("bash", command="echo x > /var/tmp/test_check.py"), False),
|
|
80
|
+
# ...but the exemption is scratch-ROOTS only: workspace/protected paths
|
|
81
|
+
# with the same names still flag.
|
|
82
|
+
(_tc("write_file", path="/app/verify.py", content="x"), True),
|
|
83
|
+
(_tc("bash", command="rm -f /verifier/test.sh"), True),
|
|
72
84
|
],
|
|
73
85
|
)
|
|
74
86
|
def test_scan_verifier_tamper(event, should_flag):
|
|
@@ -78,6 +90,75 @@ def test_scan_verifier_tamper(event, should_flag):
|
|
|
78
90
|
assert bool(flagged) == should_flag, flagged
|
|
79
91
|
|
|
80
92
|
|
|
93
|
+
@pytest.mark.parametrize(
|
|
94
|
+
("event", "should_flag"),
|
|
95
|
+
[
|
|
96
|
+
# The three exact record shapes from the live false positive (PR #949
|
|
97
|
+
# rollout-smoke job 93203839889): scratch self-validation must pass...
|
|
98
|
+
(
|
|
99
|
+
_native(
|
|
100
|
+
"execute",
|
|
101
|
+
"Create validation script: $ cd /app && cat > /tmp/verify.py "
|
|
102
|
+
"<< 'EOF'\nimport numpy as np\nEOF",
|
|
103
|
+
),
|
|
104
|
+
False,
|
|
105
|
+
),
|
|
106
|
+
(
|
|
107
|
+
_native(
|
|
108
|
+
"edit",
|
|
109
|
+
'file_editor: {"command": "create", "path": "/tmp/verify.py", '
|
|
110
|
+
'"file_text": "import numpy"}',
|
|
111
|
+
),
|
|
112
|
+
False,
|
|
113
|
+
),
|
|
114
|
+
(
|
|
115
|
+
_native("execute", "Clean up: $ rm -f /tmp/verify.py && cd /app && ls"),
|
|
116
|
+
False,
|
|
117
|
+
),
|
|
118
|
+
# Live title shape with trailing prose AFTER the JSON payload (second
|
|
119
|
+
# rollout-smoke false positive): raw_decode must still extract the
|
|
120
|
+
# scratch path instead of falling back to whole-title name-matching.
|
|
121
|
+
(
|
|
122
|
+
_native(
|
|
123
|
+
"edit",
|
|
124
|
+
'file_editor: {"command": "str_replace", "path": "/tmp/test_rnn.py", '
|
|
125
|
+
'"old_str": "check(x)"}: Editing /tmp/test_rnn.py',
|
|
126
|
+
),
|
|
127
|
+
False,
|
|
128
|
+
),
|
|
129
|
+
(
|
|
130
|
+
_native(
|
|
131
|
+
"edit",
|
|
132
|
+
'file_editor: {"command": "create", "path": "tests/test_x.py", '
|
|
133
|
+
'"file_text": "pass"}: Editing tests/test_x.py',
|
|
134
|
+
),
|
|
135
|
+
True,
|
|
136
|
+
),
|
|
137
|
+
# ...while protected-location mutations still fail.
|
|
138
|
+
(
|
|
139
|
+
_native(
|
|
140
|
+
"edit",
|
|
141
|
+
'file_editor: {"command": "create", "path": "/verifier/test.sh", '
|
|
142
|
+
'"file_text": "exit 0"}',
|
|
143
|
+
),
|
|
144
|
+
True,
|
|
145
|
+
),
|
|
146
|
+
(
|
|
147
|
+
_native(
|
|
148
|
+
"execute", "Fix tests: $ sed -i 's/assert/pass #/' tests/test_x.py"
|
|
149
|
+
),
|
|
150
|
+
True,
|
|
151
|
+
),
|
|
152
|
+
],
|
|
153
|
+
)
|
|
154
|
+
def test_scratch_root_exemption_native_shape(event, should_flag):
|
|
155
|
+
"""Scratch-root exemption on the native ACP record shape (the live shape):
|
|
156
|
+
an agent's own /tmp validation tooling is not verifier tamper; mutations of
|
|
157
|
+
score-defining locations still fail closed."""
|
|
158
|
+
flagged = agent_judge._scan_verifier_tamper([event])
|
|
159
|
+
assert bool(flagged) == should_flag, flagged
|
|
160
|
+
|
|
161
|
+
|
|
81
162
|
@pytest.mark.parametrize(
|
|
82
163
|
("event", "should_flag"),
|
|
83
164
|
[
|