benchflow 0.6.7.dev1839__tar.gz → 0.6.7.dev1840__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.dev1839 → benchflow-0.6.7.dev1840}/PKG-INFO +1 -1
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/pyproject.toml +1 -1
- benchflow-0.6.7.dev1840/src/benchflow/cli/_failure_evidence.py +167 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/cli/_shared.py +24 -13
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_cli_live_progress.py +131 -11
- benchflow-0.6.7.dev1839/src/benchflow/cli/_failure_evidence.py +0 -122
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/.gitignore +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/CHANGELOG.md +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/LICENSE +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/README.md +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/__init__.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/_dotenv.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/_paths.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/_run.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/_types.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/_utils/__init__.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/_utils/benchmark_repos.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/_utils/build_context_stage.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/_utils/config.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/_utils/config_override.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/_utils/content_address.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/_utils/dataset_registry.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/_utils/env_registry.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/_utils/evaluation_results.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/_utils/hf_datasets.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/_utils/json_safe.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/_utils/learner_memory.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/_utils/live_activity.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/_utils/result_metadata.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/_utils/reward_events.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/_utils/scoring.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/_utils/source_provenance.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/_utils/task_authoring/__init__.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/_utils/task_authoring/_evidence_paths.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/_utils/task_authoring/acceptance_evidence.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/_utils/task_authoring/scaffolding.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/_utils/task_authoring/structural_checks.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/_utils/text.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/_utils/yaml_loader.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/acp/__init__.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/acp/client.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/acp/container_transport.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/acp/runtime.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/acp/selection.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/acp/session.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/acp/transport.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/acp/types.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/adapters/__init__.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/adapters/_toolathlon.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/adapters/_toolathlon_container.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/adapters/_toolathlon_fake_mail.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/adapters/_toolathlon_poste_users.tsv +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/adapters/_toolathlon_services.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/adapters/harbor.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/adapters/inbound.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/adapters/inspect_ai.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/adapters/ors.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/adapters/resources/__init__.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/adapters/resources/mcp_atlas_bridge.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/adapters/resources/mcp_atlas_judge.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/adapters/source.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/agent_router.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/agent_router_guide.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/agent_router_parity.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/agent_router_scaffold.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/agents/__init__.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/agents/codex_config.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/agents/credentials.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/agents/deepagents_acp_shim.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/agents/env.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/agents/errors.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/agents/harvey_lab_acp_shim.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/agents/install.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/agents/manifest.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/agents/openclaw_acp_shim.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/agents/pi_acp_launcher.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/agents/protocol.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/agents/providers.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/agents/registry.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/agents/remote_manifests.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/branch.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/cli/__init__.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/cli/_hosted_env.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/cli/_live_progress.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/cli/_options.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/cli/adopt.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/cli/agent.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/cli/continue_cmd.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/cli/environment.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/cli/eval_artifacts.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/cli/eval_lift.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/cli/hub.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/cli/main.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/cli/monitor.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/cli/review.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/cli/sandbox.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/cli/skills.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/cli/tasks.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/cli/trace_import.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/cli/train.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/continue_run/__init__.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/continue_run/batch.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/continue_run/orchestrator.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/continue_run/replay_proxy.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/continue_run/run_folder.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/continue_run/sandbox_proxy.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/contracts/__init__.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/contracts/planes.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/contracts/user.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/demo_task/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/demo_task/instruction.md +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/demo_task/task.md +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/demo_task/task.toml +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/demo_task/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/diagnostics.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/environment/__init__.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/environment/_registry/env0@outage.toml +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/environment/_registry/env0@prod.toml +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/environment/manifest.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/environment/manifest_env.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/environment/protocol.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/environment/readiness.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/eval_artifacts.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/eval_lift.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/eval_plan.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/eval_sharding.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/eval_worker.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/evaluation.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/experimental/__init__.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/experimental/mcp/__init__.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/experimental/mcp/hooks.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/experimental/mcp/reviewer_server.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/hosted_env.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/hub/__init__.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/hub/harbor_registry.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/integrations/__init__.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/integrations/trl/__init__.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/integrations/trl/spec.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/learner_skills.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/learner_store.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/loop_strategies.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/loop_sweep.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/metrics.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/models.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/monitor.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/providers/__init__.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/providers/litellm_bedrock_patch.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/providers/litellm_bedrock_preflight.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/providers/litellm_config.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/providers/litellm_logging.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/providers/litellm_runtime.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/providers/runtime.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/publish/__init__.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/publish/huggingface.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/py.typed +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/review/__init__.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/review/config.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/review/default-rubric.json +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/review/prompts.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/review/runner.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/review/wrapper.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/rewards/README.md +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/rewards/__init__.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/rewards/builtins.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/rewards/events.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/rewards/file_readers.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/rewards/llm.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/rewards/memory_scorer.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/rewards/node.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/rewards/protocol.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/rewards/rubric.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/rewards/rubric_config.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/rewards/validation.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/rollout/__init__.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/rollout/_config.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/rollout/_deadline.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/rollout/_results.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/rollout/_setup.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/rollout/_skills.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/rollout/_usage.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/rollout/_user_loop.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/rollout/session_factory_runtime.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/rollout/task_runtime.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/rollout_branch.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/rollout_planes.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/runtime.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/sandbox/__init__.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/sandbox/_base.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/sandbox/_cache_reclaim.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/sandbox/_compose.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/sandbox/_compose_files/docker-compose-base.yaml +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/sandbox/_compose_files/docker-compose-build.yaml +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/sandbox/_compose_files/docker-compose-no-network.yaml +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/sandbox/_compose_files/docker-compose-prebuilt.yaml +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/sandbox/_sdk_ops.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/sandbox/agentcore.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/sandbox/agentcore_builder.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/sandbox/agentcore_image.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/sandbox/agentcore_provisioning.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/sandbox/agentcore_reaper.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/sandbox/agentcore_sealed.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/sandbox/apple_container.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/sandbox/daytona.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/sandbox/daytona_dind.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/sandbox/daytona_pty.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/sandbox/daytona_reaper.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/sandbox/daytona_strategies.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/sandbox/docker.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/sandbox/lockdown.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/sandbox/metadata.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/sandbox/modal_impl.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/sandbox/process/__init__.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/sandbox/process/_base.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/sandbox/process/agentcore.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/sandbox/process/apple.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/sandbox/process/daytona.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/sandbox/process/docker.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/sandbox/protocol.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/sandbox/providers.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/sandbox/services.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/sandbox/setup.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/sandbox/snapshot.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/sandbox/user.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/scenes.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/sdk.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/self_gen.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/skill_eval/__init__.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/skill_eval/_core.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/skill_eval/gepa_export.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/skill_eval/schema.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/skill_policy.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/skills.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/task/__init__.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/task/_document_evidence.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/task/_document_normalize.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/task/_document_parse.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/task/_document_profiles.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/task/acceptance_live.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/task/acceptance_live_model.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/task/acceptance_live_report.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/task/acceptance_live_validation.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/task/config.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/task/discovery.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/task/document.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/task/env.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/task/export.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/task/imports.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/task/output_format.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/task/package.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/task/paths.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/task/prompts.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/task/runtime_capabilities.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/task/runtime_view.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/task/task.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/task/verifier.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/task/verifier_core.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/task/verifier_document.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/task/verifier_errors.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/task/verifier_judge_inputs.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/task/verifier_ors_episode.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/task/verifier_reward_kit.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/task/verifier_scan.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/task/verifier_script_strategy.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/templates/__init__.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/templates/judge.py.tmpl +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/templates/test.sh.tmpl +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/traces/__init__.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/traces/huggingface.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/traces/local.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/traces/models.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/traces/parsers.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/traces/task_gen.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/training/__init__.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/training/backends/__init__.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/training/backends/prime_rl.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/training/run_manifest.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/trajectories/__init__.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/trajectories/_capture.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/trajectories/_export_common.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/trajectories/_llm_capture.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/trajectories/call_purpose.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/trajectories/export.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/trajectories/export_adp.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/trajectories/export_atif.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/trajectories/export_prime_sft.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/trajectories/export_trl_sft.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/trajectories/metrics.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/trajectories/results.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/trajectories/tree.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/trajectories/trl_sft_tokenization.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/trajectories/types.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/trajectories/viewer.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/usage_tracking.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/__init__.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/acceptance_live_harness.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/agents/__init__.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/agents/test_manifest_dirscan.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/agents/test_manifest_loader.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/agents/test_manifest_parity.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/agents/test_manifest_wiring.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/agents/test_namespace_shorthand.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/agents/test_plugin_entry_points.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/agents/test_protocol.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/agents/test_remote_manifest_autoload.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/conformance/README.md +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/conformance/acp_smoke/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/conformance/acp_smoke/environment/docker-compose.yaml +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/conformance/acp_smoke/environment/skills/conformance-writer/SKILL.md +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/conformance/acp_smoke/instruction.md +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/conformance/acp_smoke/solution/solve.sh +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/conformance/acp_smoke/task.md +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/conformance/acp_smoke/task.toml +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/conformance/acp_smoke/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/conformance/conformance-results.json +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/conformance/proof_multi_agent.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/conformance/proof_snapshot.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/conformance/run_conformance.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/conformance/self_gen_smoke_skills/skill-creator/SKILL.md +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/conftest.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/continue_run/__init__.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/continue_run/_helpers.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/continue_run/test_batch.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/continue_run/test_orchestrator.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/continue_run/test_replay_proxy.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/continue_run/test_run_folder.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/environment/__init__.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/environment/test_chibench_manifest.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/environment/test_clawsbench_manifest.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/environment/test_manifest.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/environment/test_manifest_env.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/environment/test_protocol.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/environment/test_readiness.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/examples/hello-world-task/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/examples/hello-world-task/instruction.md +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/examples/hello-world-task/solution/solve.sh +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/examples/hello-world-task/task.md +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/examples/hello-world-task/task.toml +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/examples/hello-world-task/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/examples/test_claude.sh +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/examples/test_codex.sh +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/examples/test_codex_custom_provider.sh +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/examples/test_gemini.sh +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/examples/test_openclaw.sh +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/examples/traces/minimal-claude.jsonl +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/examples/traces/minimal-opentraces.jsonl +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/fixtures/digest/README.md +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/fixtures/digest/alpha-task/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/fixtures/digest/alpha-task/instruction.md +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/fixtures/digest/alpha-task/task.toml +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/fixtures/digest/alpha-task/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/fixtures/digest/beta-task/data/empty.bin +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/fixtures/digest/beta-task/data/unicode.txt +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/fixtures/digest/beta-task/instruction.md +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/fixtures/digest/beta-task/task.toml +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/fixtures/digest/not-a-task/notes.txt +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/fixtures/mock_acp_agent.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/fixtures/mock_acp_agent_interleaved.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/fixtures/mock_acp_agent_multi_turn.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/fixtures/mock_openai_responses_server.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/data/michigan_stations.txt +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/flood-detection/SKILL.md +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/nws-flood-thresholds/SKILL.md +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/usgs-data-download/SKILL.md +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/fixtures/skillsbench_slice/flood-risk-analysis/instruction.md +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/fixtures/skillsbench_slice/flood-risk-analysis/solution/solve.sh +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/fixtures/skillsbench_slice/flood-risk-analysis/task.toml +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/fixtures/skillsbench_slice/flood-risk-analysis/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/fixtures/skillsbench_slice/flood-risk-analysis/tests/test_outputs.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/climate.csv +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/hydrology.csv +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/land_cover.csv +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/water_temperature.csv +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/contribution-analysis/SKILL.md +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/meteorology-driver-classification/SKILL.md +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/pca-decomposition/SKILL.md +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/trend-analysis/SKILL.md +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/fixtures/skillsbench_slice/lake-warming-attribution/instruction.md +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/fixtures/skillsbench_slice/lake-warming-attribution/solution/solve.sh +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/fixtures/skillsbench_slice/lake-warming-attribution/task.toml +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/fixtures/skillsbench_slice/lake-warming-attribution/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/fixtures/skillsbench_slice/lake-warming-attribution/tests/test_outputs.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/fixtures/skillsbench_slice/manifest.json +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/r2r_simulator.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/finite-horizon-lqr/SKILL.md +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/integral-action-design/SKILL.md +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/mpc-horizon-tuning/SKILL.md +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/state-space-linearization/SKILL.md +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/system_config.json +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/fixtures/skillsbench_slice/r2r-mpc-control/instruction.md +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/fixtures/skillsbench_slice/r2r-mpc-control/solution/solve.sh +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/fixtures/skillsbench_slice/r2r-mpc-control/task.toml +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/fixtures/skillsbench_slice/r2r-mpc-control/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/fixtures/skillsbench_slice/r2r-mpc-control/tests/test_outputs.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/generate_training_pcaps.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/local.rules +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/pcap-triage-tshark/SKILL.md +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/pcap-triage-tshark/scripts/summarize_http_requests.sh +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-offline-evejson/SKILL.md +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-offline-evejson/scripts/run_suricata_offline.sh +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-rules-basics/SKILL.md +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/suricata.yaml +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/instruction.md +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/solution/solve.sh +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/task.toml +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/tests/test_outputs.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syz-extract-constants/SKILL.md +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syzkaller-build-loop/SKILL.md +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syzlang-ioctl-basics/SKILL.md +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/instruction.md +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/solution/solve.sh +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/task.toml +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/tests/test_outputs.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/integration/_consistency.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/integration/agent_judge.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/integration/check_adapter_evidence.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/integration/check_hosted_env_evidence.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/integration/check_results.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/integration/check_skillsbench_harbor_parity.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/integration/check_trace_to_task_evidence.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/integration/configs/claude-agent-acp.yaml +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/integration/configs/codex-acp.yaml +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/integration/configs/gemini.yaml +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/integration/configs/harvey-lab-harness.yaml +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/integration/configs/mimo.yaml +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/integration/configs/openclaw.yaml +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/integration/configs/opencode.yaml +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/integration/configs/openhands.yaml +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/integration/configs/pi-acp.yaml +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/integration/deepagents_harness.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/integration/rubric_checks.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/integration/run.sh +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/integration/run_suite.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/integration/scenarios.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/integration/suites/release.yaml +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_acceptance_evidence.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_acceptance_live.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_acceptance_live_execution.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_acp.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_acp_capability_advertising.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_acp_mcp_servers.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_acp_model_config_dispatch.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_acp_pinned_protocol_guard.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_acp_setup_failure_propagation.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_adapter_scripts.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_adapters.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_agent_cli.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_agent_env_resolution.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_agent_gemini_defaults.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_agent_idle_timeout_cli.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_agent_model_decouple.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_agent_registry.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_agent_router.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_agent_router_cli_e2e.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_agent_router_scaffold.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_agent_setup.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_agent_spec.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_agentcore_builder.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_agentcore_parallel.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_agentcore_reaper.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_agentcore_sandbox.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_agentcore_transport.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_api_error_capture.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_apple_container_sandbox.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_bare_model_provider.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_base_install_imports.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_bedrock_thinking.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_benchflow_experiment_review_validator.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_benchmark_repos_resolve_repo_path.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_branch.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_build_context_stage.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_build_review_pack.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_capture_trajectory.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_check_skillsbench_harbor_parity.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_clawsbench_slice.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_cli_adopt_aliases.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_cli_arg_validation.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_cli_daytona.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_cli_docs_drift.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_cli_edge_case_hardening.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_cli_hub_env.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_cli_misc.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_codex_review.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_codex_self_write_auth.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_config_override.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_config_redaction.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_connect_as_env.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_console_error_truncation.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_console_progress.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_continuallearningbench_adapter.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_dataset_registry.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_daytona_command_polling.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_daytona_dind_compose_up.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_daytona_download.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_daytona_litellm_runtime.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_daytona_poll_deadline.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_daytona_reap.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_deepagents_agent.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_docker_prune_scoping.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_docker_uploads.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_docs_examples.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_eng50_capabilities.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_env_registry.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_env_setup.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_environment_manifest_controls.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_eval_artifact_cli.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_eval_filters_applied.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_eval_lift.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_eval_sharding.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_eval_single_task_summary.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_eval_source_provenance.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_eval_worker_retry.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_eval_zero_task_guard.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_evaluation_environment_manifest.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_exclude_tasks.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_filter_credentialed_cells.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_harvey_lab_shim.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_hilbench_adapter.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_hosted_env.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_hosted_env_rollout_contract.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_hub_harbor_registry.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_inbound_adapter_manifest.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_inbound_adapters.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_integration_agent_judge.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_integration_check_results.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_integration_consistency.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_integration_matrix.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_integration_provider_selection.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_integration_run_suite.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_integration_suite.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_internet_policy.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_job.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_job_sequential_shared.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_job_sequential_shared_resume.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_judge_robustness.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_judge_symlink_ingestion.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_learner_skills.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_learner_skills_traversal.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_learner_store.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_learner_store_persistence.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_litellm_config.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_litellm_hardening.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_litellm_logging.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_litellm_model_via_env_generic.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_litellm_reasoning_passthrough.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_litellm_runtime.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_litellm_smoke.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_live_llm_trajectory.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_llm_judge.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_llm_judge_event_tags.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_llm_judge_verifier.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_loop_strategies.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_loop_summary.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_loop_sweep.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_memory_scorer.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_metrics.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_mle_bench_adapter.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_mock_openai_responses_server.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_monitor_scaffold.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_native_acp_usage.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_no_cross_provider_fallback.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_notification_order_real.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_opencode_family_proxy_tracking.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_oracle.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_oracle_chokepoint.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_paths_safe.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_paths_symlink_helpers.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_pi_acp_launcher.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_pi_acp_proxy_routing.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_process.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_project_skills_layout.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_provider_auth_detection.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_providers.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_reexport.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_registry_invariants.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_release_hardening_r5.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_release_version.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_release_workflow_wiring.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_resolve_env_helpers.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_review_boundaries.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_review_rubric.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_review_runtime.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_reward_lenient.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_reward_node.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_reward_range.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_reward_unified_contract.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_rewards.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_rewards_jsonl.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_rollout_architecture.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_rollout_branch.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_rollout_config_path_coercion.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_rollout_environment.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_rollout_hard_deadline.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_rollout_import_no_side_effects.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_rollout_on_ask_user_wiring.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_rollout_planes_contract.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_rollout_probe_sandbox_health.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_rollout_session_factory_dispatch.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_rollout_setup_commands.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_rollout_upload.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_rubric_checks.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_rubric_config.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_runtime.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_runtime_capabilities.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_runtime_config_wired.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_runtime_live_sandbox.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_sandbox.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_sandbox_exec_secret_handling.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_sandbox_hardening.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_sandbox_isolation_copy_traversal.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_sandbox_live_process.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_sandbox_multi_service.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_sandbox_prebuilt_validation.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_sandbox_protocol.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_sandbox_provider_registry_drift.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_sandbox_setup.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_sandbox_snapshot_contract.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_sandbox_upload_symlink.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_sandbox_verifier_workspace.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_scene.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_scene_outbox_trial.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_scene_parallel_group.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_scene_result_aggregation.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_scoring.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_sdk_internals.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_sdk_lockdown.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_sdk_run_alias.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_sealed_channel_container.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_self_gen_cli.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_self_gen_export_error_channel.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_self_gen_export_failures.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_self_gen_orchestration.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_session_factory_runtime.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_session_request_permission_dispatch.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_skill_eval.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_skill_eval_dryrun.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_skill_eval_integration.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_skill_eval_sweep.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_skill_eval_traversal.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_skill_invocation_artifacts.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_skill_policy.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_skills.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_skills_dir_agent_home_link.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_skillsbench_conversion_conformance.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_skillsbench_harbor_run_suite.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_smoke.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_smoke_wiring.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_source_adapters.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_subscription_auth.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_task_check_eval_consistency.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_task_config.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_task_digest.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_task_document.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_task_download.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_task_export.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_task_output_format.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_task_package.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_task_runtime_primitive.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_tasks.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_token_usage_normalization.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_trace_import_cli.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_trace_task_gen_traversal.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_trace_to_task_evidence.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_traces_huggingface.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_traces_parsers.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_traces_task_gen.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_train_cli.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_train_mode_artifact_emission.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_train_trl_cli.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_trajectory_integration.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_trajectory_streaming.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_trial_agent_timeout_verify.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_trial_install_agent_timeout.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_trial_litellm_runtime.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_trl_integration.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_usage_litellm.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_usage_required.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_usage_tracking.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_user.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_v06_guard_ports.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_verifier_document.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_verifier_multi_container.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_verifier_output.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_verifier_output_freshness.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_verifier_strategies.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_verifier_wedge_retry.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_verify.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_workflow_action_pinning.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/test_yaml_config.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/trajectories/__init__.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/trajectories/test_export.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/trajectories/test_export_adp.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/trajectories/test_export_atif.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/trajectories/test_export_common.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/trajectories/test_export_nan_handling.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/trajectories/test_export_prime_sft.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/trajectories/test_redaction.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/tests/trajectories/test_step_granularity.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/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.dev1840
|
|
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
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
"""Verifier-artifact mining for the eval report's failure lines.
|
|
2
|
+
|
|
3
|
+
The one file-touching corner of the CLI's final report block: when a failed
|
|
4
|
+
task's reason would otherwise be the bare ``reward X`` fallback, mine the
|
|
5
|
+
rollout's verifier artifacts for a one-line explanation. Lives in its own
|
|
6
|
+
module so ``cli/_shared.py`` stays the side-effect-free display helpers it
|
|
7
|
+
advertises.
|
|
8
|
+
|
|
9
|
+
Contract (the engine stays file-free — these reads are CLI-side, report-time
|
|
10
|
+
only):
|
|
11
|
+
|
|
12
|
+
- The rollout dir is resolved exactly, from the ``rollout_name`` the engine
|
|
13
|
+
records on every result — never guessed from globs.
|
|
14
|
+
- Evidence sources are tried in order (CTRF report, then test-stdout tail);
|
|
15
|
+
the first that yields a line wins.
|
|
16
|
+
- Every read is bounded (``_ARTIFACT_READ_BYTES`` per file) and nothing here
|
|
17
|
+
raises — any surprise degrades to ``None``, i.e. the bare reward reason.
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
from __future__ import annotations
|
|
21
|
+
|
|
22
|
+
import json
|
|
23
|
+
import re
|
|
24
|
+
from typing import TYPE_CHECKING, NamedTuple
|
|
25
|
+
|
|
26
|
+
if TYPE_CHECKING:
|
|
27
|
+
from collections.abc import Callable
|
|
28
|
+
from pathlib import Path
|
|
29
|
+
|
|
30
|
+
# Never read more than this many bytes per file, and evidence is only mined
|
|
31
|
+
# for the <= _MAX_FAILURE_LINES tasks the report block displays.
|
|
32
|
+
_ARTIFACT_READ_BYTES = 64 * 1024
|
|
33
|
+
# Pytest final summary, decoration stripped: "1 failed, 2 passed in 40.86s".
|
|
34
|
+
_PYTEST_SUMMARY_RE = re.compile(r"\d+ failed\b")
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
class FailureLine(NamedTuple):
|
|
38
|
+
"""A failure one-liner in two parts with distinct truncation contracts.
|
|
39
|
+
|
|
40
|
+
``body`` is the free-text evidence (test name plus assertion) and competes
|
|
41
|
+
for the display line's char budget; ``suffix`` is the compact multi-failure
|
|
42
|
+
roll-up count (empty when the evidence covers everything) and must survive
|
|
43
|
+
display truncation. Renderers give ``body`` the full line budget and append
|
|
44
|
+
``suffix`` whole past it — never truncating the concatenation, or a long
|
|
45
|
+
assertion would silently eat the "there is more broken than this" signal.
|
|
46
|
+
"""
|
|
47
|
+
|
|
48
|
+
body: str
|
|
49
|
+
suffix: str = ""
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
def _display_test_name(raw_name: str) -> str:
|
|
53
|
+
"""Test name for display: node-id path segments dropped, param id kept.
|
|
54
|
+
|
|
55
|
+
Full pytest node ids ("tests/test_x.py::test_build[param]") waste the
|
|
56
|
+
100-char line budget; keep the function name plus any ``[param]`` id.
|
|
57
|
+
The split must not touch the bracket part — a param id may itself contain
|
|
58
|
+
``::`` — so only the text before the first ``[`` is segment-split. (When
|
|
59
|
+
the report was written by pytest-json-ctrf — as of 0.5.x — the param id
|
|
60
|
+
is already gone — the plugin stores ``nodeid.split('[')[0]`` as ``name``
|
|
61
|
+
— but other CTRF producers keep the full name, and we must not re-trim
|
|
62
|
+
it.)
|
|
63
|
+
"""
|
|
64
|
+
head, bracket, param = raw_name.partition("[")
|
|
65
|
+
return head.rsplit("::", 1)[-1] + bracket + param
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
def _ctrf_failure_line(ctrf_path: Path) -> FailureLine | None:
|
|
69
|
+
"""``<test> failed[: <assertion>]`` from the first failed CTRF test.
|
|
70
|
+
|
|
71
|
+
The verifier's pytest run writes a CTRF report (``pytest --ctrf``, see the
|
|
72
|
+
standard path in ``task_authoring/structural_checks.py``). Per test the
|
|
73
|
+
useful failure evidence is the ``E …`` assertion line inside ``trace``;
|
|
74
|
+
``message`` is only a generic phase description, so it is the fallback.
|
|
75
|
+
When the report holds more than one failed test, the first failure's line
|
|
76
|
+
carries a count suffix (``(+N more failures; P/T checks passed)``) so the
|
|
77
|
+
console never under-reports how much is broken.
|
|
78
|
+
"""
|
|
79
|
+
if ctrf_path.stat().st_size > _ARTIFACT_READ_BYTES:
|
|
80
|
+
# JSON only parses whole — an oversized report is skipped (not
|
|
81
|
+
# truncated) and the next evidence source gets its turn.
|
|
82
|
+
return None
|
|
83
|
+
data = json.loads(ctrf_path.read_text(encoding="utf-8", errors="replace"))
|
|
84
|
+
raw_tests = (data.get("results") or {}).get("tests") or []
|
|
85
|
+
tests = [test for test in raw_tests if isinstance(test, dict)]
|
|
86
|
+
failed = [test for test in tests if test.get("status") == "failed"]
|
|
87
|
+
if not failed:
|
|
88
|
+
return None
|
|
89
|
+
suffix = ""
|
|
90
|
+
if len(failed) > 1:
|
|
91
|
+
# Counts come from the same rolled-up test list the first-failure pick
|
|
92
|
+
# uses, so the suffix can never disagree with the shown evidence.
|
|
93
|
+
# T is all entries — skips count against the denominator, not as passes.
|
|
94
|
+
extra = len(failed) - 1
|
|
95
|
+
passed = sum(1 for test in tests if test.get("status") == "passed")
|
|
96
|
+
plural = "" if extra == 1 else "s"
|
|
97
|
+
suffix = (
|
|
98
|
+
f" (+{extra} more failure{plural}; {passed}/{len(tests)} checks passed)"
|
|
99
|
+
)
|
|
100
|
+
test = failed[0]
|
|
101
|
+
name = _display_test_name(str(test.get("name") or "test"))
|
|
102
|
+
trace = test.get("trace")
|
|
103
|
+
if isinstance(trace, str):
|
|
104
|
+
for line in trace.splitlines():
|
|
105
|
+
stripped = line.strip()
|
|
106
|
+
if stripped.startswith("E "):
|
|
107
|
+
assertion = stripped[2:].strip()
|
|
108
|
+
# "<test> failed:" already says it's an assertion — drop
|
|
109
|
+
# the prefix to reclaim line budget for the message.
|
|
110
|
+
assertion = assertion.removeprefix("AssertionError: ")
|
|
111
|
+
return FailureLine(f"{name} failed: {assertion}", suffix)
|
|
112
|
+
message = test.get("message")
|
|
113
|
+
if isinstance(message, str) and message.strip():
|
|
114
|
+
return FailureLine(f"{name} failed: {' '.join(message.split())}", suffix)
|
|
115
|
+
return FailureLine(f"{name} failed", suffix)
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
def _stdout_tail_failure_line(stdout_path: Path) -> FailureLine | None:
|
|
119
|
+
"""Last pytest summary ("N failed, M passed …") — else last ``FAILED …``
|
|
120
|
+
line — from a bounded tail of the verifier's test-stdout capture. No count
|
|
121
|
+
suffix: the summary line already carries the full counts itself."""
|
|
122
|
+
with stdout_path.open("rb") as fh:
|
|
123
|
+
fh.seek(0, 2) # SEEK_END
|
|
124
|
+
fh.seek(max(0, fh.tell() - _ARTIFACT_READ_BYTES))
|
|
125
|
+
tail = fh.read(_ARTIFACT_READ_BYTES).decode("utf-8", errors="replace")
|
|
126
|
+
last_failed: str | None = None
|
|
127
|
+
for line in reversed(tail.splitlines()):
|
|
128
|
+
bare = line.strip().strip("=").strip()
|
|
129
|
+
if _PYTEST_SUMMARY_RE.match(bare):
|
|
130
|
+
return FailureLine(bare)
|
|
131
|
+
if last_failed is None and line.strip().startswith("FAILED "):
|
|
132
|
+
last_failed = line.strip()
|
|
133
|
+
return FailureLine(last_failed) if last_failed is not None else None
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
def artifact_failure_evidence(
|
|
137
|
+
job_dir: Path, rollout_name: str
|
|
138
|
+
) -> tuple[FailureLine, Path] | None:
|
|
139
|
+
"""``FailureLine`` mined from the rollout's verifier artifacts, or ``None``.
|
|
140
|
+
|
|
141
|
+
Returns the structured one-liner plus the verifier dir it came from (for
|
|
142
|
+
the report block's single ``(details: …)`` pointer line). Never raises.
|
|
143
|
+
"""
|
|
144
|
+
# Local import: RolloutPaths pulls in the task package, which the CLI
|
|
145
|
+
# shouldn't pay for until a failure actually needs artifact evidence.
|
|
146
|
+
from benchflow.task.paths import RolloutPaths
|
|
147
|
+
|
|
148
|
+
rollout_paths = RolloutPaths(rollout_dir=job_dir / rollout_name)
|
|
149
|
+
verifier_dir = rollout_paths.verifier_dir
|
|
150
|
+
attempts: list[tuple[Path, Callable[[Path], FailureLine | None]]] = [
|
|
151
|
+
# ctrf.json has no RolloutPaths property — the verifier recovers it by
|
|
152
|
+
# literal name (verifier_core.py, `_recover_main_verifier_outputs`).
|
|
153
|
+
(verifier_dir / "ctrf.json", _ctrf_failure_line),
|
|
154
|
+
(rollout_paths.test_stdout_path, _stdout_tail_failure_line),
|
|
155
|
+
]
|
|
156
|
+
for path, extract in attempts:
|
|
157
|
+
try:
|
|
158
|
+
if not path.is_file():
|
|
159
|
+
continue
|
|
160
|
+
detail = extract(path)
|
|
161
|
+
except Exception:
|
|
162
|
+
# Unreadable file, bad JSON, permissions … try the next source;
|
|
163
|
+
# the report must never crash over evidence mining.
|
|
164
|
+
continue
|
|
165
|
+
if detail is not None:
|
|
166
|
+
return detail, verifier_dir
|
|
167
|
+
return None
|
|
@@ -21,7 +21,7 @@ from rich.console import Console
|
|
|
21
21
|
from rich.markup import escape
|
|
22
22
|
|
|
23
23
|
from benchflow._utils.text import truncate_end
|
|
24
|
-
from benchflow.cli._failure_evidence import artifact_failure_evidence
|
|
24
|
+
from benchflow.cli._failure_evidence import FailureLine, artifact_failure_evidence
|
|
25
25
|
|
|
26
26
|
if TYPE_CHECKING:
|
|
27
27
|
from pathlib import Path
|
|
@@ -106,7 +106,8 @@ def _exit_if_evaluation_had_errors(result: object) -> None:
|
|
|
106
106
|
|
|
107
107
|
|
|
108
108
|
# Final-block failure lines: keep the block skimmable on big jobs and each
|
|
109
|
-
# line inside a typical terminal width
|
|
109
|
+
# line inside a typical terminal width — except lines carrying a multi-failure
|
|
110
|
+
# count suffix, which deliberately run ~40 chars past the budget.
|
|
110
111
|
_MAX_FAILURE_LINES = 5
|
|
111
112
|
_FAILURE_LINE_LIMIT = 100
|
|
112
113
|
_FAILURE_REASON_METRICS = 3
|
|
@@ -114,7 +115,7 @@ _FAILURE_REASON_METRICS = 3
|
|
|
114
115
|
|
|
115
116
|
def _failure_reason(
|
|
116
117
|
failure: TaskFailure, job_dir: Path | None = None
|
|
117
|
-
) -> tuple[
|
|
118
|
+
) -> tuple[FailureLine, Path | None]:
|
|
118
119
|
"""One cheap line explaining why a FAILED (scored, reward != 1) task
|
|
119
120
|
failed, plus the verifier dir when artifacts supplied the evidence.
|
|
120
121
|
|
|
@@ -123,13 +124,15 @@ def _failure_reason(
|
|
|
123
124
|
first — they explain the miss); else the reward plus a one-liner mined
|
|
124
125
|
from the rollout's verifier artifacts (bounded CLI-side reads resolved via
|
|
125
126
|
the ``rollout_name`` the engine records — the engine stays file-free);
|
|
126
|
-
else just the reward. The
|
|
127
|
-
|
|
128
|
-
|
|
127
|
+
else just the reward. The reason is a ``FailureLine`` so the artifact
|
|
128
|
+
tier's multi-failure count suffix stays separable from the truncatable
|
|
129
|
+
body (only the artifact tier ever sets it). The returned path is
|
|
130
|
+
non-``None`` only for the artifact tier, so the caller can print one
|
|
131
|
+
``(details: …)`` pointer per report block.
|
|
129
132
|
"""
|
|
130
133
|
if failure.verifier_error:
|
|
131
134
|
# Collapse whitespace: verifier errors are routinely multi-line.
|
|
132
|
-
return " ".join(failure.verifier_error.split()), None
|
|
135
|
+
return FailureLine(" ".join(failure.verifier_error.split())), None
|
|
133
136
|
rewards = failure.rewards or {}
|
|
134
137
|
reward = rewards.get("reward")
|
|
135
138
|
metrics = [
|
|
@@ -144,15 +147,18 @@ def _failure_reason(
|
|
|
144
147
|
shown = ", ".join(
|
|
145
148
|
f"{name} {value}" for name, value in metrics[:_FAILURE_REASON_METRICS]
|
|
146
149
|
)
|
|
147
|
-
return f"reward {reward} — {shown}", None
|
|
150
|
+
return FailureLine(f"reward {reward} — {shown}"), None
|
|
148
151
|
# No rollout_name (pre-#957-follow-up result.json, sharded aggregation):
|
|
149
152
|
# nothing to resolve — the bare reward is as honest as it gets.
|
|
150
153
|
if job_dir is not None and failure.rollout_name:
|
|
151
154
|
evidence = artifact_failure_evidence(job_dir, failure.rollout_name)
|
|
152
155
|
if evidence is not None:
|
|
153
156
|
detail, verifier_dir = evidence
|
|
154
|
-
return
|
|
155
|
-
|
|
157
|
+
return (
|
|
158
|
+
FailureLine(f"reward {reward} — {detail.body}", detail.suffix),
|
|
159
|
+
verifier_dir,
|
|
160
|
+
)
|
|
161
|
+
return FailureLine(f"reward {reward}"), None
|
|
156
162
|
|
|
157
163
|
|
|
158
164
|
def _report_eval_result(result: EvaluationResult, job_dir: Path | None = None) -> None:
|
|
@@ -207,11 +213,16 @@ def _report_eval_result(result: EvaluationResult, job_dir: Path | None = None) -
|
|
|
207
213
|
reason, verifier_dir = _failure_reason(failure, job_dir)
|
|
208
214
|
if artifact_pointer is None and verifier_dir is not None:
|
|
209
215
|
artifact_pointer = verifier_dir
|
|
210
|
-
|
|
211
|
-
|
|
216
|
+
# The char budget governs only the free-text body; the multi-failure
|
|
217
|
+
# count suffix is appended AFTER truncation so a long assertion can
|
|
218
|
+
# never swallow the "more than this is broken" signal. Worst case the
|
|
219
|
+
# line runs ~40 chars past the budget — completeness beats strict
|
|
220
|
+
# width for this one signal.
|
|
221
|
+
body = truncate_end(
|
|
222
|
+
f" ✗ {failure.task_name}: {reason.body}",
|
|
212
223
|
_FAILURE_LINE_LIMIT,
|
|
213
224
|
)
|
|
214
|
-
console.print(f"[dim]{escape(
|
|
225
|
+
console.print(f"[dim]{escape(body + reason.suffix)}[/dim]")
|
|
215
226
|
extra = len(failures) - _MAX_FAILURE_LINES
|
|
216
227
|
if extra > 0:
|
|
217
228
|
console.print(f"[dim] … and {extra} more[/dim]")
|
|
@@ -476,20 +476,11 @@ def _bare_failure(task_name: str, rollout_name: str | None = None):
|
|
|
476
476
|
)
|
|
477
477
|
|
|
478
478
|
|
|
479
|
-
def
|
|
480
|
-
"""Write a
|
|
481
|
-
|
|
482
|
-
``name`` is the failed test's node id; ``None`` writes an all-passed report.
|
|
483
|
-
"""
|
|
479
|
+
def _write_ctrf_tests(verifier_dir, tests: list[dict]) -> None:
|
|
480
|
+
"""Write a CTRF report (pytest-json-ctrf shape) with the given tests."""
|
|
484
481
|
import json
|
|
485
482
|
|
|
486
483
|
verifier_dir.mkdir(parents=True, exist_ok=True)
|
|
487
|
-
tests = [{"name": "tests/test_x.py::test_ok", "status": "passed"}]
|
|
488
|
-
if name is not None:
|
|
489
|
-
test: dict = {"name": name, "status": "failed"}
|
|
490
|
-
if trace is not None:
|
|
491
|
-
test["trace"] = trace
|
|
492
|
-
tests.append(test)
|
|
493
484
|
(verifier_dir / "ctrf.json").write_text(
|
|
494
485
|
json.dumps(
|
|
495
486
|
{
|
|
@@ -500,6 +491,20 @@ def _write_ctrf(verifier_dir, *, name: str | None, trace: str | None = None) ->
|
|
|
500
491
|
)
|
|
501
492
|
|
|
502
493
|
|
|
494
|
+
def _write_ctrf(verifier_dir, *, name: str | None, trace: str | None = None) -> None:
|
|
495
|
+
"""Write a minimal CTRF report.
|
|
496
|
+
|
|
497
|
+
``name`` is the failed test's node id; ``None`` writes an all-passed report.
|
|
498
|
+
"""
|
|
499
|
+
tests = [{"name": "tests/test_x.py::test_ok", "status": "passed"}]
|
|
500
|
+
if name is not None:
|
|
501
|
+
test: dict = {"name": name, "status": "failed"}
|
|
502
|
+
if trace is not None:
|
|
503
|
+
test["trace"] = trace
|
|
504
|
+
tests.append(test)
|
|
505
|
+
_write_ctrf_tests(verifier_dir, tests)
|
|
506
|
+
|
|
507
|
+
|
|
503
508
|
def _write_stdout(verifier_dir, text: str) -> None:
|
|
504
509
|
verifier_dir.mkdir(parents=True, exist_ok=True)
|
|
505
510
|
(verifier_dir / "test-stdout.txt").write_text(text)
|
|
@@ -527,6 +532,121 @@ def test_failure_reason_artifact_tier_reads_ctrf(tmp_path):
|
|
|
527
532
|
"Build failed for py312" in out
|
|
528
533
|
)
|
|
529
534
|
assert f"(details: {tmp_path / 'fix-build__ab12cd34' / 'verifier'})" in out
|
|
535
|
+
# A single failed test needs no roll-up count.
|
|
536
|
+
assert "(+" not in out
|
|
537
|
+
|
|
538
|
+
|
|
539
|
+
def test_ctrf_multi_failure_appends_count_suffix(tmp_path):
|
|
540
|
+
# Dogfood follow-up (skillsbench dialogue-parser, reward 0.667): the CTRF
|
|
541
|
+
# held 2 failed / 4 passed but the console named only the first failure —
|
|
542
|
+
# a reader stopping at the console under-counted what was broken. With >1
|
|
543
|
+
# failed test the line gains a count suffix, and a param id carried by the
|
|
544
|
+
# report's test name is preserved end-to-end. (pytest-json-ctrf, as of
|
|
545
|
+
# 0.5.x, strips the param id at generation time — nodeid.split('[')[0] —
|
|
546
|
+
# so this fixture uses the spec-conformant full name other producers emit.)
|
|
547
|
+
_write_ctrf_tests(
|
|
548
|
+
tmp_path / "dialogue-parser__ab12cd34" / "verifier",
|
|
549
|
+
[
|
|
550
|
+
{"name": "test_outputs.py::test_system_basics", "status": "passed"},
|
|
551
|
+
{"name": "test_outputs.py::test_narrative_content", "status": "passed"},
|
|
552
|
+
{
|
|
553
|
+
"name": "test_outputs.py::test_graph_logic[reachability]",
|
|
554
|
+
"status": "failed",
|
|
555
|
+
"trace": (
|
|
556
|
+
"> assert not unreachable\n"
|
|
557
|
+
"E AssertionError: Unreachable nodes found: "
|
|
558
|
+
"['End']...\n"
|
|
559
|
+
),
|
|
560
|
+
},
|
|
561
|
+
{
|
|
562
|
+
"name": "test_outputs.py::test_visualization_validity",
|
|
563
|
+
"status": "failed",
|
|
564
|
+
},
|
|
565
|
+
{"name": "test_outputs.py::test_content_integrity", "status": "passed"},
|
|
566
|
+
{"name": "test_outputs.py::test_structural_integrity", "status": "passed"},
|
|
567
|
+
],
|
|
568
|
+
)
|
|
569
|
+
from benchflow.evaluation import TaskFailure
|
|
570
|
+
|
|
571
|
+
out = _reported(
|
|
572
|
+
_failed_result(
|
|
573
|
+
[
|
|
574
|
+
TaskFailure(
|
|
575
|
+
task_name="dialogue-parser",
|
|
576
|
+
rewards={"reward": 0.667},
|
|
577
|
+
verifier_error=None,
|
|
578
|
+
rollout_name="dialogue-parser__ab12cd34",
|
|
579
|
+
)
|
|
580
|
+
]
|
|
581
|
+
),
|
|
582
|
+
tmp_path,
|
|
583
|
+
)
|
|
584
|
+
# The body hits the 100-char budget and truncates; the suffix rides after
|
|
585
|
+
# it whole. Counts are report-wide: 1 extra failure, 4 of 6 checks passed.
|
|
586
|
+
assert (
|
|
587
|
+
"✗ dialogue-parser: reward 0.667 — test_graph_logic[reachability] "
|
|
588
|
+
"failed: Unreachable nodes found:… (+1 more failure; 4/6 checks passed)" in out
|
|
589
|
+
)
|
|
590
|
+
|
|
591
|
+
|
|
592
|
+
def test_ctrf_count_suffix_plural_and_param_id_with_colons(tmp_path):
|
|
593
|
+
# 3 failed tests pluralize the suffix, and a param id containing "::" must
|
|
594
|
+
# not be mangled by the node-id segment split (`test_foo[a::b]`, not `b]`).
|
|
595
|
+
_write_ctrf_tests(
|
|
596
|
+
tmp_path / "multi__ab12cd34" / "verifier",
|
|
597
|
+
[
|
|
598
|
+
{"name": "tests/test_x.py::test_foo[a::b]", "status": "failed"},
|
|
599
|
+
{"name": "tests/test_x.py::test_bar", "status": "failed"},
|
|
600
|
+
{"name": "tests/test_x.py::test_baz", "status": "failed"},
|
|
601
|
+
{"name": "tests/test_x.py::test_ok", "status": "passed"},
|
|
602
|
+
],
|
|
603
|
+
)
|
|
604
|
+
out = _reported(
|
|
605
|
+
_failed_result([_bare_failure("multi", "multi__ab12cd34")]), tmp_path
|
|
606
|
+
)
|
|
607
|
+
assert (
|
|
608
|
+
"✗ multi: reward 0.0 — test_foo[a::b] failed "
|
|
609
|
+
"(+2 more failures; 1/4 checks passed)" in out
|
|
610
|
+
)
|
|
611
|
+
|
|
612
|
+
|
|
613
|
+
def test_ctrf_count_suffix_survives_truncation(tmp_path):
|
|
614
|
+
# A long assertion must not push the count suffix off the line: the body
|
|
615
|
+
# alone is truncated to the 100-char budget, then the suffix is appended
|
|
616
|
+
# whole — so the "more than this is broken" signal always survives.
|
|
617
|
+
_write_ctrf_tests(
|
|
618
|
+
tmp_path / "long__ab12cd34" / "verifier",
|
|
619
|
+
[
|
|
620
|
+
{
|
|
621
|
+
"name": "tests/test_x.py::test_long",
|
|
622
|
+
"status": "failed",
|
|
623
|
+
"trace": "E AssertionError: " + "verbose diagnosis " * 20 + "\n",
|
|
624
|
+
},
|
|
625
|
+
{"name": "tests/test_x.py::test_other", "status": "failed"},
|
|
626
|
+
{"name": "tests/test_x.py::test_ok", "status": "passed"},
|
|
627
|
+
],
|
|
628
|
+
)
|
|
629
|
+
out = _reported(_failed_result([_bare_failure("long", "long__ab12cd34")]), tmp_path)
|
|
630
|
+
suffix = " (+1 more failure; 1/3 checks passed)"
|
|
631
|
+
(line,) = [ln for ln in out.splitlines() if "✗ long" in ln]
|
|
632
|
+
assert line.rstrip().endswith(f"…{suffix}")
|
|
633
|
+
assert len(line.rstrip()) <= 100 + len(suffix)
|
|
634
|
+
|
|
635
|
+
|
|
636
|
+
def test_stdout_tail_tier_never_gets_count_suffix(tmp_path):
|
|
637
|
+
# The suffix is a CTRF-tier concept: the stdout tail's pytest summary line
|
|
638
|
+
# already carries the full counts, so nothing is appended there.
|
|
639
|
+
_write_stdout(
|
|
640
|
+
tmp_path / "fix-build__ab12cd34" / "verifier",
|
|
641
|
+
"FAILED tests/test_build.py::test_a - AssertionError: boom\n"
|
|
642
|
+
"FAILED tests/test_build.py::test_b - AssertionError: boom\n"
|
|
643
|
+
"=========== 2 failed, 1 passed in 4.20s ===========\n",
|
|
644
|
+
)
|
|
645
|
+
out = _reported(
|
|
646
|
+
_failed_result([_bare_failure("fix-build", "fix-build__ab12cd34")]), tmp_path
|
|
647
|
+
)
|
|
648
|
+
assert "✗ fix-build: reward 0.0 — 2 failed, 1 passed in 4.20s" in out
|
|
649
|
+
assert "(+" not in out
|
|
530
650
|
|
|
531
651
|
|
|
532
652
|
def test_failure_reason_artifact_tier_requires_rollout_name(tmp_path):
|
|
@@ -1,122 +0,0 @@
|
|
|
1
|
-
"""Verifier-artifact mining for the eval report's failure lines.
|
|
2
|
-
|
|
3
|
-
The one file-touching corner of the CLI's final report block: when a failed
|
|
4
|
-
task's reason would otherwise be the bare ``reward X`` fallback, mine the
|
|
5
|
-
rollout's verifier artifacts for a one-line explanation. Lives in its own
|
|
6
|
-
module so ``cli/_shared.py`` stays the side-effect-free display helpers it
|
|
7
|
-
advertises.
|
|
8
|
-
|
|
9
|
-
Contract (the engine stays file-free — these reads are CLI-side, report-time
|
|
10
|
-
only):
|
|
11
|
-
|
|
12
|
-
- The rollout dir is resolved exactly, from the ``rollout_name`` the engine
|
|
13
|
-
records on every result — never guessed from globs.
|
|
14
|
-
- Evidence sources are tried in order (CTRF report, then test-stdout tail);
|
|
15
|
-
the first that yields a line wins.
|
|
16
|
-
- Every read is bounded (``_ARTIFACT_READ_BYTES`` per file) and nothing here
|
|
17
|
-
raises — any surprise degrades to ``None``, i.e. the bare reward reason.
|
|
18
|
-
"""
|
|
19
|
-
|
|
20
|
-
from __future__ import annotations
|
|
21
|
-
|
|
22
|
-
import json
|
|
23
|
-
import re
|
|
24
|
-
from typing import TYPE_CHECKING
|
|
25
|
-
|
|
26
|
-
if TYPE_CHECKING:
|
|
27
|
-
from collections.abc import Callable
|
|
28
|
-
from pathlib import Path
|
|
29
|
-
|
|
30
|
-
# Never read more than this many bytes per file, and evidence is only mined
|
|
31
|
-
# for the <= _MAX_FAILURE_LINES tasks the report block displays.
|
|
32
|
-
_ARTIFACT_READ_BYTES = 64 * 1024
|
|
33
|
-
# Pytest final summary, decoration stripped: "1 failed, 2 passed in 40.86s".
|
|
34
|
-
_PYTEST_SUMMARY_RE = re.compile(r"\d+ failed\b")
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
def _ctrf_failure_line(ctrf_path: Path) -> str | None:
|
|
38
|
-
"""``<test> failed[: <assertion>]`` from the first failed CTRF test.
|
|
39
|
-
|
|
40
|
-
The verifier's pytest run writes a CTRF report (``pytest --ctrf``, see the
|
|
41
|
-
standard path in ``task_authoring/structural_checks.py``). Per test the
|
|
42
|
-
useful failure evidence is the ``E …`` assertion line inside ``trace``;
|
|
43
|
-
``message`` is only a generic phase description, so it is the fallback.
|
|
44
|
-
"""
|
|
45
|
-
if ctrf_path.stat().st_size > _ARTIFACT_READ_BYTES:
|
|
46
|
-
# JSON only parses whole — an oversized report is skipped (not
|
|
47
|
-
# truncated) and the next evidence source gets its turn.
|
|
48
|
-
return None
|
|
49
|
-
data = json.loads(ctrf_path.read_text(encoding="utf-8", errors="replace"))
|
|
50
|
-
tests = (data.get("results") or {}).get("tests") or []
|
|
51
|
-
for test in tests:
|
|
52
|
-
if not isinstance(test, dict) or test.get("status") != "failed":
|
|
53
|
-
continue
|
|
54
|
-
# Full pytest node ids ("tests/test_x.py::test_build") waste the
|
|
55
|
-
# 100-char line budget; keep the test function name.
|
|
56
|
-
name = str(test.get("name") or "test").rsplit("::", 1)[-1]
|
|
57
|
-
trace = test.get("trace")
|
|
58
|
-
if isinstance(trace, str):
|
|
59
|
-
for line in trace.splitlines():
|
|
60
|
-
stripped = line.strip()
|
|
61
|
-
if stripped.startswith("E "):
|
|
62
|
-
assertion = stripped[2:].strip()
|
|
63
|
-
# "<test> failed:" already says it's an assertion — drop
|
|
64
|
-
# the prefix to reclaim line budget for the message.
|
|
65
|
-
assertion = assertion.removeprefix("AssertionError: ")
|
|
66
|
-
return f"{name} failed: {assertion}"
|
|
67
|
-
message = test.get("message")
|
|
68
|
-
if isinstance(message, str) and message.strip():
|
|
69
|
-
return f"{name} failed: {' '.join(message.split())}"
|
|
70
|
-
return f"{name} failed"
|
|
71
|
-
return None
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
def _stdout_tail_failure_line(stdout_path: Path) -> str | None:
|
|
75
|
-
"""Last pytest summary ("N failed, M passed …") — else last ``FAILED …``
|
|
76
|
-
line — from a bounded tail of the verifier's test-stdout capture."""
|
|
77
|
-
with stdout_path.open("rb") as fh:
|
|
78
|
-
fh.seek(0, 2) # SEEK_END
|
|
79
|
-
fh.seek(max(0, fh.tell() - _ARTIFACT_READ_BYTES))
|
|
80
|
-
tail = fh.read(_ARTIFACT_READ_BYTES).decode("utf-8", errors="replace")
|
|
81
|
-
last_failed: str | None = None
|
|
82
|
-
for line in reversed(tail.splitlines()):
|
|
83
|
-
bare = line.strip().strip("=").strip()
|
|
84
|
-
if _PYTEST_SUMMARY_RE.match(bare):
|
|
85
|
-
return bare
|
|
86
|
-
if last_failed is None and line.strip().startswith("FAILED "):
|
|
87
|
-
last_failed = line.strip()
|
|
88
|
-
return last_failed
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
def artifact_failure_evidence(
|
|
92
|
-
job_dir: Path, rollout_name: str
|
|
93
|
-
) -> tuple[str, Path] | None:
|
|
94
|
-
"""One-liner mined from the rollout's verifier artifacts, or ``None``.
|
|
95
|
-
|
|
96
|
-
Returns the one-liner plus the verifier dir it came from (for the report
|
|
97
|
-
block's single ``(details: …)`` pointer line). Never raises.
|
|
98
|
-
"""
|
|
99
|
-
# Local import: RolloutPaths pulls in the task package, which the CLI
|
|
100
|
-
# shouldn't pay for until a failure actually needs artifact evidence.
|
|
101
|
-
from benchflow.task.paths import RolloutPaths
|
|
102
|
-
|
|
103
|
-
rollout_paths = RolloutPaths(rollout_dir=job_dir / rollout_name)
|
|
104
|
-
verifier_dir = rollout_paths.verifier_dir
|
|
105
|
-
attempts: list[tuple[Path, Callable[[Path], str | None]]] = [
|
|
106
|
-
# ctrf.json has no RolloutPaths property — the verifier recovers it by
|
|
107
|
-
# literal name (verifier_core.py, `_recover_main_verifier_outputs`).
|
|
108
|
-
(verifier_dir / "ctrf.json", _ctrf_failure_line),
|
|
109
|
-
(rollout_paths.test_stdout_path, _stdout_tail_failure_line),
|
|
110
|
-
]
|
|
111
|
-
for path, extract in attempts:
|
|
112
|
-
try:
|
|
113
|
-
if not path.is_file():
|
|
114
|
-
continue
|
|
115
|
-
detail = extract(path)
|
|
116
|
-
except Exception:
|
|
117
|
-
# Unreadable file, bad JSON, permissions … try the next source;
|
|
118
|
-
# the report must never crash over evidence mining.
|
|
119
|
-
continue
|
|
120
|
-
if detail is not None:
|
|
121
|
-
return detail, verifier_dir
|
|
122
|
-
return None
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/_utils/build_context_stage.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/_utils/dataset_registry.py
RENAMED
|
File without changes
|
|
File without changes
|
{benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/_utils/evaluation_results.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/_utils/source_provenance.py
RENAMED
|
File without changes
|
{benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/_utils/task_authoring/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1840}/src/benchflow/acp/container_transport.py
RENAMED
|
File without changes
|
|
File without changes
|