benchflow 0.6.7.dev1826__tar.gz → 0.6.7.dev1829__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.dev1826 → benchflow-0.6.7.dev1829}/PKG-INFO +1 -1
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/pyproject.toml +1 -1
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/_utils/benchmark_repos.py +16 -3
- benchflow-0.6.7.dev1829/src/benchflow/_utils/live_activity.py +82 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/acp/session.py +18 -6
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/cli/_live_progress.py +56 -3
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/cli/_shared.py +57 -4
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/cli/main.py +6 -2
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/evaluation.py +44 -5
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/rollout/__init__.py +33 -1
- benchflow-0.6.7.dev1829/tests/test_cli_live_progress.py +444 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_console_progress.py +22 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_job.py +36 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_task_download.py +16 -4
- benchflow-0.6.7.dev1826/tests/test_cli_live_progress.py +0 -180
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/.gitignore +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/CHANGELOG.md +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/LICENSE +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/README.md +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/__init__.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/_dotenv.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/_paths.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/_run.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/_types.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/_utils/__init__.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/_utils/build_context_stage.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/_utils/config.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/_utils/config_override.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/_utils/content_address.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/_utils/dataset_registry.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/_utils/env_registry.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/_utils/evaluation_results.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/_utils/hf_datasets.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/_utils/json_safe.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/_utils/learner_memory.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/_utils/result_metadata.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/_utils/reward_events.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/_utils/scoring.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/_utils/source_provenance.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/_utils/task_authoring/__init__.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/_utils/task_authoring/_evidence_paths.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/_utils/task_authoring/acceptance_evidence.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/_utils/task_authoring/scaffolding.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/_utils/task_authoring/structural_checks.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/_utils/text.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/_utils/yaml_loader.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/acp/__init__.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/acp/client.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/acp/container_transport.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/acp/runtime.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/acp/selection.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/acp/transport.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/acp/types.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/adapters/__init__.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/adapters/_toolathlon.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/adapters/_toolathlon_container.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/adapters/_toolathlon_fake_mail.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/adapters/_toolathlon_poste_users.tsv +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/adapters/_toolathlon_services.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/adapters/harbor.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/adapters/inbound.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/adapters/inspect_ai.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/adapters/ors.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/adapters/resources/__init__.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/adapters/resources/mcp_atlas_bridge.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/adapters/resources/mcp_atlas_judge.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/adapters/source.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/agent_router.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/agent_router_guide.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/agent_router_parity.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/agent_router_scaffold.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/agents/__init__.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/agents/codex_config.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/agents/credentials.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/agents/deepagents_acp_shim.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/agents/env.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/agents/errors.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/agents/harvey_lab_acp_shim.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/agents/install.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/agents/manifest.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/agents/openclaw_acp_shim.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/agents/pi_acp_launcher.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/agents/protocol.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/agents/providers.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/agents/registry.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/agents/remote_manifests.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/branch.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/cli/__init__.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/cli/_hosted_env.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/cli/_options.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/cli/adopt.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/cli/agent.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/cli/continue_cmd.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/cli/environment.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/cli/eval_artifacts.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/cli/eval_lift.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/cli/hub.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/cli/monitor.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/cli/review.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/cli/sandbox.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/cli/skills.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/cli/tasks.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/cli/trace_import.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/cli/train.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/continue_run/__init__.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/continue_run/batch.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/continue_run/orchestrator.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/continue_run/replay_proxy.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/continue_run/run_folder.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/continue_run/sandbox_proxy.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/contracts/__init__.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/contracts/planes.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/contracts/user.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/demo_task/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/demo_task/instruction.md +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/demo_task/task.md +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/demo_task/task.toml +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/demo_task/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/diagnostics.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/environment/__init__.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/environment/manifest.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/environment/manifest_env.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/environment/protocol.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/environment/readiness.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/eval_artifacts.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/eval_lift.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/eval_plan.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/eval_sharding.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/eval_worker.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/experimental/__init__.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/experimental/mcp/__init__.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/experimental/mcp/hooks.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/experimental/mcp/reviewer_server.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/hosted_env.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/hub/__init__.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/hub/harbor_registry.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/integrations/__init__.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/integrations/trl/__init__.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/integrations/trl/spec.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/learner_skills.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/learner_store.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/loop_strategies.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/loop_sweep.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/metrics.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/models.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/monitor.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/providers/__init__.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/providers/litellm_bedrock_patch.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/providers/litellm_bedrock_preflight.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/providers/litellm_config.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/providers/litellm_logging.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/providers/litellm_runtime.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/providers/runtime.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/publish/__init__.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/publish/huggingface.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/py.typed +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/review/__init__.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/review/config.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/review/default-rubric.json +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/review/prompts.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/review/runner.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/review/wrapper.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/rewards/README.md +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/rewards/__init__.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/rewards/builtins.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/rewards/events.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/rewards/file_readers.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/rewards/llm.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/rewards/memory_scorer.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/rewards/node.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/rewards/protocol.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/rewards/rubric.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/rewards/rubric_config.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/rewards/validation.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/rollout/_config.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/rollout/_deadline.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/rollout/_results.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/rollout/_setup.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/rollout/_skills.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/rollout/_usage.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/rollout/_user_loop.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/rollout/session_factory_runtime.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/rollout/task_runtime.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/rollout_branch.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/rollout_planes.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/runtime.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/sandbox/__init__.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/sandbox/_base.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/sandbox/_cache_reclaim.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/sandbox/_compose.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/sandbox/_compose_files/docker-compose-base.yaml +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/sandbox/_compose_files/docker-compose-build.yaml +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/sandbox/_compose_files/docker-compose-no-network.yaml +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/sandbox/_compose_files/docker-compose-prebuilt.yaml +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/sandbox/_sdk_ops.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/sandbox/agentcore.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/sandbox/agentcore_builder.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/sandbox/agentcore_image.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/sandbox/agentcore_provisioning.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/sandbox/agentcore_reaper.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/sandbox/agentcore_sealed.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/sandbox/apple_container.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/sandbox/daytona.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/sandbox/daytona_dind.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/sandbox/daytona_pty.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/sandbox/daytona_reaper.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/sandbox/daytona_strategies.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/sandbox/docker.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/sandbox/lockdown.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/sandbox/metadata.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/sandbox/modal_impl.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/sandbox/process/__init__.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/sandbox/process/_base.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/sandbox/process/agentcore.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/sandbox/process/apple.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/sandbox/process/daytona.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/sandbox/process/docker.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/sandbox/protocol.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/sandbox/providers.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/sandbox/services.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/sandbox/setup.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/sandbox/snapshot.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/sandbox/user.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/scenes.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/sdk.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/self_gen.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/skill_eval/__init__.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/skill_eval/_core.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/skill_eval/gepa_export.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/skill_eval/schema.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/skill_policy.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/skills.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/task/__init__.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/task/_document_evidence.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/task/_document_normalize.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/task/_document_parse.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/task/_document_profiles.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/task/acceptance_live.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/task/acceptance_live_model.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/task/acceptance_live_report.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/task/acceptance_live_validation.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/task/config.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/task/discovery.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/task/document.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/task/env.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/task/export.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/task/imports.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/task/output_format.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/task/package.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/task/paths.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/task/prompts.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/task/runtime_capabilities.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/task/runtime_view.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/task/task.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/task/verifier.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/task/verifier_core.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/task/verifier_document.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/task/verifier_errors.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/task/verifier_judge_inputs.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/task/verifier_ors_episode.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/task/verifier_reward_kit.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/task/verifier_scan.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/task/verifier_script_strategy.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/templates/__init__.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/templates/judge.py.tmpl +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/templates/test.sh.tmpl +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/traces/__init__.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/traces/huggingface.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/traces/local.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/traces/models.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/traces/parsers.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/traces/task_gen.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/training/__init__.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/training/backends/__init__.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/training/backends/prime_rl.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/training/run_manifest.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/trajectories/__init__.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/trajectories/_capture.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/trajectories/_export_common.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/trajectories/_llm_capture.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/trajectories/call_purpose.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/trajectories/export.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/trajectories/export_adp.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/trajectories/export_atif.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/trajectories/export_prime_sft.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/trajectories/export_trl_sft.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/trajectories/metrics.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/trajectories/results.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/trajectories/tree.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/trajectories/trl_sft_tokenization.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/trajectories/types.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/trajectories/viewer.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/src/benchflow/usage_tracking.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/__init__.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/acceptance_live_harness.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/agents/__init__.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/agents/test_manifest_dirscan.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/agents/test_manifest_loader.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/agents/test_manifest_parity.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/agents/test_manifest_wiring.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/agents/test_namespace_shorthand.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/agents/test_plugin_entry_points.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/agents/test_protocol.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/agents/test_remote_manifest_autoload.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/conformance/README.md +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/conformance/acp_smoke/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/conformance/acp_smoke/environment/docker-compose.yaml +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/conformance/acp_smoke/environment/skills/conformance-writer/SKILL.md +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/conformance/acp_smoke/instruction.md +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/conformance/acp_smoke/solution/solve.sh +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/conformance/acp_smoke/task.md +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/conformance/acp_smoke/task.toml +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/conformance/acp_smoke/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/conformance/conformance-results.json +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/conformance/proof_multi_agent.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/conformance/proof_snapshot.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/conformance/run_conformance.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/conformance/self_gen_smoke_skills/skill-creator/SKILL.md +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/conftest.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/continue_run/__init__.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/continue_run/_helpers.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/continue_run/test_batch.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/continue_run/test_orchestrator.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/continue_run/test_replay_proxy.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/continue_run/test_run_folder.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/environment/__init__.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/environment/test_chibench_manifest.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/environment/test_clawsbench_manifest.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/environment/test_manifest.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/environment/test_manifest_env.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/environment/test_protocol.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/environment/test_readiness.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/examples/hello-world-task/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/examples/hello-world-task/instruction.md +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/examples/hello-world-task/solution/solve.sh +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/examples/hello-world-task/task.md +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/examples/hello-world-task/task.toml +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/examples/hello-world-task/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/examples/test_claude.sh +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/examples/test_codex.sh +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/examples/test_codex_custom_provider.sh +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/examples/test_gemini.sh +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/examples/test_openclaw.sh +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/examples/traces/minimal-claude.jsonl +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/examples/traces/minimal-opentraces.jsonl +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/fixtures/digest/README.md +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/fixtures/digest/alpha-task/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/fixtures/digest/alpha-task/instruction.md +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/fixtures/digest/alpha-task/task.toml +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/fixtures/digest/alpha-task/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/fixtures/digest/beta-task/data/empty.bin +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/fixtures/digest/beta-task/data/unicode.txt +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/fixtures/digest/beta-task/instruction.md +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/fixtures/digest/beta-task/task.toml +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/fixtures/digest/not-a-task/notes.txt +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/fixtures/mock_acp_agent.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/fixtures/mock_acp_agent_interleaved.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/fixtures/mock_acp_agent_multi_turn.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/fixtures/mock_openai_responses_server.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/data/michigan_stations.txt +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/flood-detection/SKILL.md +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/nws-flood-thresholds/SKILL.md +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/usgs-data-download/SKILL.md +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/flood-risk-analysis/instruction.md +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/flood-risk-analysis/solution/solve.sh +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/flood-risk-analysis/task.toml +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/flood-risk-analysis/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/flood-risk-analysis/tests/test_outputs.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/climate.csv +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/hydrology.csv +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/land_cover.csv +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/water_temperature.csv +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/contribution-analysis/SKILL.md +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/meteorology-driver-classification/SKILL.md +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/pca-decomposition/SKILL.md +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/trend-analysis/SKILL.md +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/lake-warming-attribution/instruction.md +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/lake-warming-attribution/solution/solve.sh +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/lake-warming-attribution/task.toml +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/lake-warming-attribution/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/lake-warming-attribution/tests/test_outputs.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/manifest.json +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/r2r_simulator.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/finite-horizon-lqr/SKILL.md +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/integral-action-design/SKILL.md +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/mpc-horizon-tuning/SKILL.md +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/state-space-linearization/SKILL.md +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/system_config.json +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/r2r-mpc-control/instruction.md +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/r2r-mpc-control/solution/solve.sh +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/r2r-mpc-control/task.toml +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/r2r-mpc-control/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/r2r-mpc-control/tests/test_outputs.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/generate_training_pcaps.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/local.rules +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/pcap-triage-tshark/SKILL.md +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/pcap-triage-tshark/scripts/summarize_http_requests.sh +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-offline-evejson/SKILL.md +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-offline-evejson/scripts/run_suricata_offline.sh +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-rules-basics/SKILL.md +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/suricata.yaml +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/instruction.md +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/solution/solve.sh +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/task.toml +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/tests/test_outputs.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syz-extract-constants/SKILL.md +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syzkaller-build-loop/SKILL.md +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syzlang-ioctl-basics/SKILL.md +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/instruction.md +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/solution/solve.sh +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/task.toml +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/tests/test_outputs.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/integration/_consistency.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/integration/agent_judge.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/integration/check_adapter_evidence.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/integration/check_hosted_env_evidence.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/integration/check_results.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/integration/check_skillsbench_harbor_parity.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/integration/check_trace_to_task_evidence.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/integration/configs/claude-agent-acp.yaml +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/integration/configs/codex-acp.yaml +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/integration/configs/gemini.yaml +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/integration/configs/harvey-lab-harness.yaml +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/integration/configs/mimo.yaml +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/integration/configs/openclaw.yaml +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/integration/configs/opencode.yaml +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/integration/configs/openhands.yaml +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/integration/configs/pi-acp.yaml +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/integration/deepagents_harness.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/integration/rubric_checks.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/integration/run.sh +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/integration/run_suite.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/integration/scenarios.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/integration/suites/release.yaml +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_acceptance_evidence.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_acceptance_live.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_acceptance_live_execution.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_acp.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_acp_capability_advertising.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_acp_mcp_servers.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_acp_model_config_dispatch.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_acp_pinned_protocol_guard.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_acp_setup_failure_propagation.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_adapter_scripts.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_adapters.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_agent_cli.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_agent_env_resolution.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_agent_gemini_defaults.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_agent_idle_timeout_cli.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_agent_model_decouple.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_agent_registry.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_agent_router.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_agent_router_cli_e2e.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_agent_router_scaffold.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_agent_setup.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_agent_spec.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_agentcore_builder.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_agentcore_parallel.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_agentcore_reaper.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_agentcore_sandbox.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_agentcore_transport.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_api_error_capture.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_apple_container_sandbox.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_bare_model_provider.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_base_install_imports.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_bedrock_thinking.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_benchflow_experiment_review_validator.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_benchmark_repos_resolve_repo_path.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_branch.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_build_context_stage.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_build_review_pack.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_capture_trajectory.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_check_skillsbench_harbor_parity.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_clawsbench_slice.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_cli_adopt_aliases.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_cli_arg_validation.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_cli_daytona.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_cli_docs_drift.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_cli_edge_case_hardening.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_cli_hub_env.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_cli_misc.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_codex_review.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_codex_self_write_auth.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_config_override.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_config_redaction.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_connect_as_env.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_console_error_truncation.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_continuallearningbench_adapter.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_dataset_registry.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_daytona_command_polling.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_daytona_dind_compose_up.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_daytona_download.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_daytona_litellm_runtime.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_daytona_poll_deadline.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_daytona_reap.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_deepagents_agent.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_docker_prune_scoping.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_docker_uploads.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_docs_examples.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_eng50_capabilities.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_env_registry.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_env_setup.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_environment_manifest_controls.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_eval_artifact_cli.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_eval_filters_applied.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_eval_lift.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_eval_sharding.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_eval_single_task_summary.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_eval_source_provenance.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_eval_worker_retry.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_eval_zero_task_guard.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_evaluation_environment_manifest.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_exclude_tasks.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_filter_credentialed_cells.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_harvey_lab_shim.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_hilbench_adapter.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_hosted_env.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_hosted_env_rollout_contract.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_hub_harbor_registry.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_inbound_adapter_manifest.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_inbound_adapters.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_integration_agent_judge.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_integration_check_results.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_integration_consistency.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_integration_matrix.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_integration_provider_selection.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_integration_run_suite.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_integration_suite.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_internet_policy.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_job_sequential_shared.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_job_sequential_shared_resume.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_judge_robustness.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_judge_symlink_ingestion.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_learner_skills.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_learner_skills_traversal.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_learner_store.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_learner_store_persistence.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_litellm_config.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_litellm_hardening.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_litellm_logging.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_litellm_model_via_env_generic.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_litellm_reasoning_passthrough.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_litellm_runtime.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_litellm_smoke.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_live_llm_trajectory.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_llm_judge.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_llm_judge_event_tags.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_llm_judge_verifier.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_loop_strategies.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_loop_summary.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_loop_sweep.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_memory_scorer.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_metrics.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_mle_bench_adapter.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_mock_openai_responses_server.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_monitor_scaffold.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_native_acp_usage.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_no_cross_provider_fallback.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_notification_order_real.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_opencode_family_proxy_tracking.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_oracle.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_oracle_chokepoint.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_paths_safe.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_paths_symlink_helpers.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_pi_acp_launcher.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_pi_acp_proxy_routing.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_process.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_project_skills_layout.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_provider_auth_detection.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_providers.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_reexport.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_registry_invariants.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_release_hardening_r5.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_release_version.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_release_workflow_wiring.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_resolve_env_helpers.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_review_boundaries.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_review_rubric.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_review_runtime.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_reward_lenient.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_reward_node.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_reward_range.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_reward_unified_contract.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_rewards.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_rewards_jsonl.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_rollout_architecture.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_rollout_branch.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_rollout_config_path_coercion.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_rollout_environment.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_rollout_hard_deadline.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_rollout_import_no_side_effects.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_rollout_on_ask_user_wiring.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_rollout_planes_contract.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_rollout_probe_sandbox_health.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_rollout_session_factory_dispatch.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_rollout_setup_commands.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_rollout_upload.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_rubric_checks.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_rubric_config.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_runtime.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_runtime_capabilities.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_runtime_config_wired.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_runtime_live_sandbox.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_sandbox.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_sandbox_exec_secret_handling.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_sandbox_hardening.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_sandbox_isolation_copy_traversal.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_sandbox_live_process.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_sandbox_multi_service.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_sandbox_prebuilt_validation.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_sandbox_protocol.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_sandbox_provider_registry_drift.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_sandbox_setup.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_sandbox_snapshot_contract.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_sandbox_upload_symlink.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_sandbox_verifier_workspace.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_scene.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_scene_outbox_trial.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_scene_parallel_group.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_scene_result_aggregation.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_scoring.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_sdk_internals.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_sdk_lockdown.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_sdk_run_alias.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_sealed_channel_container.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_self_gen_cli.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_self_gen_export_error_channel.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_self_gen_export_failures.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_self_gen_orchestration.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_session_factory_runtime.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_session_request_permission_dispatch.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_skill_eval.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_skill_eval_dryrun.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_skill_eval_integration.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_skill_eval_sweep.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_skill_eval_traversal.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_skill_invocation_artifacts.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_skill_policy.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_skills.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_skills_dir_agent_home_link.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_skillsbench_conversion_conformance.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_skillsbench_harbor_run_suite.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_smoke.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_smoke_wiring.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_source_adapters.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_subscription_auth.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_task_check_eval_consistency.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_task_config.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_task_digest.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_task_document.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_task_export.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_task_output_format.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_task_package.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_task_runtime_primitive.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_tasks.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_token_usage_normalization.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_trace_import_cli.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_trace_task_gen_traversal.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_trace_to_task_evidence.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_traces_huggingface.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_traces_parsers.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_traces_task_gen.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_train_cli.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_train_mode_artifact_emission.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_train_trl_cli.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_trajectory_integration.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_trajectory_streaming.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_trial_agent_timeout_verify.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_trial_install_agent_timeout.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_trial_litellm_runtime.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_trl_integration.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_usage_litellm.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_usage_required.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_usage_tracking.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_user.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_v06_guard_ports.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_verifier_document.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_verifier_multi_container.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_verifier_output.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_verifier_output_freshness.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_verifier_strategies.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_verifier_wedge_retry.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_verify.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_workflow_action_pinning.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/test_yaml_config.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/trajectories/__init__.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/trajectories/test_export.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/trajectories/test_export_adp.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/trajectories/test_export_atif.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/trajectories/test_export_common.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/trajectories/test_export_nan_handling.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/trajectories/test_export_prime_sft.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/trajectories/test_redaction.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/tests/trajectories/test_step_granularity.py +0 -0
- {benchflow-0.6.7.dev1826 → benchflow-0.6.7.dev1829}/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.dev1829
|
|
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
|
|
@@ -95,11 +95,21 @@ def _looks_like_commit_sha(ref: str) -> bool:
|
|
|
95
95
|
|
|
96
96
|
def _checkout_fetched_ref(repo_root: Path, ref: str) -> None:
|
|
97
97
|
subprocess.run(
|
|
98
|
-
[
|
|
98
|
+
[
|
|
99
|
+
"git",
|
|
100
|
+
"-C",
|
|
101
|
+
str(repo_root),
|
|
102
|
+
"fetch",
|
|
103
|
+
"--quiet",
|
|
104
|
+
"--depth",
|
|
105
|
+
"1",
|
|
106
|
+
"origin",
|
|
107
|
+
ref,
|
|
108
|
+
],
|
|
99
109
|
check=True,
|
|
100
110
|
)
|
|
101
111
|
subprocess.run(
|
|
102
|
-
["git", "-C", str(repo_root), "checkout", "--detach", "FETCH_HEAD"],
|
|
112
|
+
["git", "-C", str(repo_root), "checkout", "--quiet", "--detach", "FETCH_HEAD"],
|
|
103
113
|
check=True,
|
|
104
114
|
)
|
|
105
115
|
|
|
@@ -155,7 +165,10 @@ def _clone_repo_unlocked(org: str, repo: str, ref: str | None = None) -> Path:
|
|
|
155
165
|
try:
|
|
156
166
|
if clone_tmp.exists():
|
|
157
167
|
shutil.rmtree(clone_tmp)
|
|
158
|
-
|
|
168
|
+
# --quiet: raw clone progress ("remote: Counting objects: …") on the
|
|
169
|
+
# console pre-dashboard is noise; the "Cloning …" log line above is
|
|
170
|
+
# the one-line summary. Errors still print (git keeps stderr on fail).
|
|
171
|
+
cmd = ["git", "clone", "--quiet", "--depth", "1"]
|
|
159
172
|
if ref and not _looks_like_commit_sha(ref):
|
|
160
173
|
cmd.extend(["--branch", ref])
|
|
161
174
|
cmd.extend([url, str(clone_tmp)])
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"""Process-global registry of live rollouts for the eval dashboard.
|
|
2
|
+
|
|
3
|
+
The Rich dashboard (``cli/_live_progress.py``) renders in the same process as
|
|
4
|
+
the engine's rollouts, so surfacing per-task activity needs no new event
|
|
5
|
+
plumbing: the engine registers each live Rollout under its task name and the
|
|
6
|
+
dashboard polls the rollout's ACP session counters — the exact ones the
|
|
7
|
+
console heartbeat (``ACPSession._maybe_log_progress``) logs — at render time.
|
|
8
|
+
Best-effort by contract: every reader failure degrades to "no activity",
|
|
9
|
+
never to a render error.
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
from __future__ import annotations
|
|
13
|
+
|
|
14
|
+
import threading
|
|
15
|
+
from typing import Any, NamedTuple
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class SessionCounters(NamedTuple):
|
|
19
|
+
"""The live ACP session counters the console heartbeat logs.
|
|
20
|
+
|
|
21
|
+
``total_tokens`` is None until the session has a usage snapshot (i.e.
|
|
22
|
+
after a completed prompt).
|
|
23
|
+
"""
|
|
24
|
+
|
|
25
|
+
tool_calls: int
|
|
26
|
+
last_tool: str
|
|
27
|
+
total_tokens: int | None
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
class ActivitySnapshot(NamedTuple):
|
|
31
|
+
"""One dashboard poll of a live rollout.
|
|
32
|
+
|
|
33
|
+
``phase`` is the rollout's lifecycle phase (``Rollout._phase``) and is
|
|
34
|
+
always present, so the activity cell can label the long non-agent
|
|
35
|
+
stretches — sandbox create, agent install, verify — instead of blanking
|
|
36
|
+
in a way that is indistinguishable from a hang. ``counters`` is None
|
|
37
|
+
until the agent session exists (session-factory agents never grow one).
|
|
38
|
+
"""
|
|
39
|
+
|
|
40
|
+
phase: str
|
|
41
|
+
counters: SessionCounters | None
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
_lock = threading.Lock()
|
|
45
|
+
# Task name -> live Rollout. Task basenames are unique keys by engine-wide
|
|
46
|
+
# invariant: the whole run pipeline (resume filtering, result keying — see
|
|
47
|
+
# Evaluation's `d.name not in completed` plan filter) is keyed by basename,
|
|
48
|
+
# so each name is scheduled at most once at a time.
|
|
49
|
+
_live: dict[str, Any] = {}
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
def register(task_name: str, rollout: Any) -> None:
|
|
53
|
+
"""Expose a live rollout to the dashboard under its task name."""
|
|
54
|
+
with _lock:
|
|
55
|
+
_live[task_name] = rollout
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
def unregister(task_name: str) -> None:
|
|
59
|
+
with _lock:
|
|
60
|
+
_live.pop(task_name, None)
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
def activity(task_name: str) -> ActivitySnapshot | None:
|
|
64
|
+
"""The :class:`ActivitySnapshot` for a running task, or None when the
|
|
65
|
+
rollout isn't registered (pre-create, between retries, teardown).
|
|
66
|
+
|
|
67
|
+
``counters`` inside the snapshot is None until the task's agent session
|
|
68
|
+
exists — including non-ACP (session-factory) agents, which never grow an
|
|
69
|
+
ACP client — but ``phase`` is always present. The dig into
|
|
70
|
+
client/session state lives on ``Rollout.activity_snapshot()`` (typed,
|
|
71
|
+
owner-side); the except here only guards renders racing rollout teardown.
|
|
72
|
+
"""
|
|
73
|
+
with _lock:
|
|
74
|
+
rollout = _live.get(task_name)
|
|
75
|
+
if rollout is None:
|
|
76
|
+
return None
|
|
77
|
+
try:
|
|
78
|
+
return rollout.activity_snapshot()
|
|
79
|
+
except Exception:
|
|
80
|
+
# Dashboard reads race a live rollout; degrading to "no activity" is
|
|
81
|
+
# always preferable to perturbing the render.
|
|
82
|
+
return None
|
|
@@ -221,6 +221,20 @@ class ACPSession:
|
|
|
221
221
|
# which is otherwise easy to miss in a 64-concurrency log.
|
|
222
222
|
logger.error(f"ACPSession on_change callback failed: {e}")
|
|
223
223
|
|
|
224
|
+
def progress_snapshot(self) -> tuple[int, str]:
|
|
225
|
+
"""(tool-call count, last tool title) — the console heartbeat's
|
|
226
|
+
counters, also polled by the live eval dashboard's activity cell.
|
|
227
|
+
|
|
228
|
+
The title is the raw first line (untruncated — display width belongs
|
|
229
|
+
to each render site); ``split`` not ``splitlines`` so a whitespace-only
|
|
230
|
+
title strips to ``""`` instead of raising on an empty line list.
|
|
231
|
+
"""
|
|
232
|
+
title = ""
|
|
233
|
+
if self.tool_calls:
|
|
234
|
+
last = self.tool_calls[-1]
|
|
235
|
+
title = (last.title or last.kind or "").strip().split("\n", 1)[0]
|
|
236
|
+
return len(self.tool_calls), title
|
|
237
|
+
|
|
224
238
|
def _maybe_log_progress(self) -> None:
|
|
225
239
|
if not self._progress_enabled or self._prompt_started_at is None:
|
|
226
240
|
return
|
|
@@ -229,12 +243,10 @@ class ACPSession:
|
|
|
229
243
|
return
|
|
230
244
|
self._last_progress_at = now
|
|
231
245
|
elapsed_min = (now - self._prompt_started_at) / 60.0
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
if title:
|
|
237
|
-
line += f" (last: {title})"
|
|
246
|
+
calls, title = self.progress_snapshot()
|
|
247
|
+
line = f" … {elapsed_min:.1f}min, {calls} tool calls"
|
|
248
|
+
if title:
|
|
249
|
+
line += f" (last: {title[:60]})"
|
|
238
250
|
logger.info(line)
|
|
239
251
|
|
|
240
252
|
def record_user_prompt(self, text: str) -> None:
|
|
@@ -27,6 +27,7 @@ from rich.markup import escape
|
|
|
27
27
|
from rich.table import Table
|
|
28
28
|
from rich.text import Text
|
|
29
29
|
|
|
30
|
+
from benchflow._utils import live_activity
|
|
30
31
|
from benchflow.cli._shared import console
|
|
31
32
|
from benchflow.usage_tracking import is_trusted_usage_source
|
|
32
33
|
|
|
@@ -127,6 +128,52 @@ def _fmt_tokens(n: int) -> str:
|
|
|
127
128
|
return str(n)
|
|
128
129
|
|
|
129
130
|
|
|
131
|
+
# Rollout lifecycle phase (Rollout._phase — the completed phase, except
|
|
132
|
+
# "verifying" which verify() marks at entry) -> what is running now. Shown
|
|
133
|
+
# while the session counters are unavailable — before the agent session
|
|
134
|
+
# exists and after it is torn down — so sandbox create, agent install, and
|
|
135
|
+
# the verifier read as work, not as a hang.
|
|
136
|
+
_PHASE_LABELS = {
|
|
137
|
+
"created": "creating sandbox…",
|
|
138
|
+
"setup": "creating sandbox…",
|
|
139
|
+
"started": "installing agent…",
|
|
140
|
+
"installed": "running agent…",
|
|
141
|
+
"connected": "running agent…",
|
|
142
|
+
"executed": "verifying…",
|
|
143
|
+
"verifying": "verifying…",
|
|
144
|
+
"verified": "cleaning up…",
|
|
145
|
+
"cleaned": "cleaning up…",
|
|
146
|
+
}
|
|
147
|
+
# Unknown phases (e.g. "branched") and pre-register/teardown races: still
|
|
148
|
+
# never blank — a blank cell on a live row reads as a hang.
|
|
149
|
+
_PHASE_FALLBACK = "starting…"
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
def _activity_cell(name: str) -> str:
|
|
153
|
+
"""Per-task activity for the "running now" table, e.g.
|
|
154
|
+
``38 calls · last: file_editor``.
|
|
155
|
+
|
|
156
|
+
Polls the live rollout's ACP session counters — the same ones the console
|
|
157
|
+
heartbeat logs, which the Live display otherwise mutes — via the
|
|
158
|
+
live-activity registry. Until the agent session exists (and after it is
|
|
159
|
+
closed for the verifier) the cell shows the rollout's lifecycle phase as a
|
|
160
|
+
label instead, so the row is never blank. Tokens appear only once the
|
|
161
|
+
session has a usage snapshot (i.e. after a completed prompt).
|
|
162
|
+
"""
|
|
163
|
+
snap = live_activity.activity(name)
|
|
164
|
+
if snap is None:
|
|
165
|
+
return _PHASE_FALLBACK
|
|
166
|
+
counters = snap.counters
|
|
167
|
+
if counters is None:
|
|
168
|
+
return _PHASE_LABELS.get(snap.phase, _PHASE_FALLBACK)
|
|
169
|
+
cell = f"{counters.tool_calls} calls"
|
|
170
|
+
if counters.total_tokens:
|
|
171
|
+
cell += f" · {_fmt_tokens(counters.total_tokens)} tok"
|
|
172
|
+
if counters.last_tool:
|
|
173
|
+
cell += f" · last: {counters.last_tool[:30]}"
|
|
174
|
+
return cell
|
|
175
|
+
|
|
176
|
+
|
|
130
177
|
class LiveEvalProgress:
|
|
131
178
|
"""A live ``Live``-rendered dashboard, driven by the engine's progress hooks.
|
|
132
179
|
|
|
@@ -295,17 +342,23 @@ class LiveEvalProgress:
|
|
|
295
342
|
)
|
|
296
343
|
tbl.add_column("running now", no_wrap=True)
|
|
297
344
|
tbl.add_column("elapsed", justify="right")
|
|
345
|
+
tbl.add_column("activity", no_wrap=True)
|
|
298
346
|
now = time.monotonic()
|
|
299
347
|
for name in sorted(running, key=lambda n: running[n])[:_MAX_RUNNING_ROWS]:
|
|
300
348
|
# Text() so a task name containing Rich markup (`[` is legal in
|
|
301
349
|
# SkillsBench dir names) is rendered literally, not parsed as
|
|
302
350
|
# markup — a MarkupError here escapes __rich__ and aborts the
|
|
303
351
|
# CLI on live-context exit, violating this module's "a render
|
|
304
|
-
# bug can never perturb a run" contract.
|
|
305
|
-
|
|
352
|
+
# bug can never perturb a run" contract. Same for the activity
|
|
353
|
+
# cell, which carries agent-authored tool titles.
|
|
354
|
+
tbl.add_row(
|
|
355
|
+
Text(name),
|
|
356
|
+
_fmt_dur(now - running[name]),
|
|
357
|
+
Text(_activity_cell(name), style="dim"),
|
|
358
|
+
)
|
|
306
359
|
extra = len(running) - _MAX_RUNNING_ROWS
|
|
307
360
|
if extra > 0:
|
|
308
|
-
tbl.add_row(f"… {extra} more", "")
|
|
361
|
+
tbl.add_row(f"… {extra} more", "", "")
|
|
309
362
|
parts.append(tbl)
|
|
310
363
|
|
|
311
364
|
# Footer: pass-rate (excl errors) + token/cost economics. Show "—" (not
|
|
@@ -18,10 +18,12 @@ import typer
|
|
|
18
18
|
from rich.console import Console
|
|
19
19
|
from rich.markup import escape
|
|
20
20
|
|
|
21
|
+
from benchflow._utils.text import truncate_end
|
|
22
|
+
|
|
21
23
|
if TYPE_CHECKING:
|
|
22
24
|
from pathlib import Path
|
|
23
25
|
|
|
24
|
-
from benchflow.evaluation import EvaluationResult
|
|
26
|
+
from benchflow.evaluation import EvaluationResult, TaskFailure
|
|
25
27
|
|
|
26
28
|
console = Console()
|
|
27
29
|
|
|
@@ -100,14 +102,52 @@ def _exit_if_evaluation_had_errors(result: object) -> None:
|
|
|
100
102
|
raise typer.Exit(1)
|
|
101
103
|
|
|
102
104
|
|
|
105
|
+
# Final-block failure lines: keep the block skimmable on big jobs and each
|
|
106
|
+
# line inside a typical terminal width.
|
|
107
|
+
_MAX_FAILURE_LINES = 5
|
|
108
|
+
_FAILURE_LINE_LIMIT = 100
|
|
109
|
+
_FAILURE_REASON_METRICS = 3
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
def _failure_reason(failure: TaskFailure) -> str:
|
|
113
|
+
"""One cheap line explaining why a FAILED (scored, reward != 1) task
|
|
114
|
+
failed, from evidence already on the result — no file reads.
|
|
115
|
+
|
|
116
|
+
Priority: the verifier's own error if set; else the reward plus a compact
|
|
117
|
+
breakdown of the named metrics in the reward dict (zero/failed metrics
|
|
118
|
+
first — they explain the miss); else just the reward.
|
|
119
|
+
"""
|
|
120
|
+
if failure.verifier_error:
|
|
121
|
+
# Collapse whitespace: verifier errors are routinely multi-line.
|
|
122
|
+
return " ".join(failure.verifier_error.split())
|
|
123
|
+
rewards = failure.rewards or {}
|
|
124
|
+
reward = rewards.get("reward")
|
|
125
|
+
metrics = [
|
|
126
|
+
(name, value)
|
|
127
|
+
for name, value in rewards.items()
|
|
128
|
+
if name != "reward" and isinstance(value, (bool, int, float))
|
|
129
|
+
]
|
|
130
|
+
if not metrics:
|
|
131
|
+
return f"reward {reward}"
|
|
132
|
+
# Zero/failed metrics first (stable within each group), capped so one
|
|
133
|
+
# metric-happy verifier can't flood the line.
|
|
134
|
+
metrics.sort(key=lambda kv: kv[1] != 0)
|
|
135
|
+
shown = ", ".join(
|
|
136
|
+
f"{name} {value}" for name, value in metrics[:_FAILURE_REASON_METRICS]
|
|
137
|
+
)
|
|
138
|
+
return f"reward {reward} — {shown}"
|
|
139
|
+
|
|
140
|
+
|
|
103
141
|
def _report_eval_result(result: EvaluationResult, job_dir: Path | None = None) -> None:
|
|
104
142
|
"""Print the Score/errors summary line, colored by outcome, plus artifacts.
|
|
105
143
|
|
|
106
144
|
A clean pass and a total failure used to look identical (both bold white);
|
|
107
145
|
now the line is green only on a full clean pass, red on a shutout, amber
|
|
108
|
-
otherwise, and ``errors=N`` is red when non-zero.
|
|
109
|
-
|
|
110
|
-
|
|
146
|
+
otherwise, and ``errors=N`` is red when non-zero. Each FAILED task gets one
|
|
147
|
+
dim ``✗ task: reason`` line (capped at ``_MAX_FAILURE_LINES``) so the "why"
|
|
148
|
+
doesn't require opening summary.json. When ``job_dir`` is given, the
|
|
149
|
+
result/summary paths are printed so testers know where to look (the guide
|
|
150
|
+
repeatedly says "read summary.json" but the CLI never said where).
|
|
111
151
|
"""
|
|
112
152
|
errors = int(getattr(result, "errored", 0) or 0)
|
|
113
153
|
verifier_errors = int(getattr(result, "verifier_errored", 0) or 0)
|
|
@@ -132,6 +172,19 @@ def _report_eval_result(result: EvaluationResult, job_dir: Path | None = None) -
|
|
|
132
172
|
f"\n[{style}]{mark} Score: {result.passed}/{result.total} "
|
|
133
173
|
f"({result.score:.1%})[/{style}]{err_part}"
|
|
134
174
|
)
|
|
175
|
+
# One dim reason line per FAILED task, so "0/1" doesn't force a dig into
|
|
176
|
+
# summary.json to learn why. getattr(): sharded aggregation and older
|
|
177
|
+
# SimpleNamespace-style callers don't carry task_failures.
|
|
178
|
+
failures = getattr(result, "task_failures", None) or []
|
|
179
|
+
for failure in failures[:_MAX_FAILURE_LINES]:
|
|
180
|
+
line = truncate_end(
|
|
181
|
+
f" ✗ {failure.task_name}: {_failure_reason(failure)}",
|
|
182
|
+
_FAILURE_LINE_LIMIT,
|
|
183
|
+
)
|
|
184
|
+
console.print(f"[dim]{escape(line)}[/dim]")
|
|
185
|
+
extra = len(failures) - _MAX_FAILURE_LINES
|
|
186
|
+
if extra > 0:
|
|
187
|
+
console.print(f"[dim] … and {extra} more[/dim]")
|
|
135
188
|
if job_dir is not None:
|
|
136
189
|
console.print(f"[dim]Artifacts:[/dim] {escape(str(job_dir))}")
|
|
137
190
|
console.print(f"[dim]Summary: [/dim] {escape(str(job_dir))}/summary.json")
|
|
@@ -389,8 +389,9 @@ def eval_run(
|
|
|
389
389
|
typer.Option(
|
|
390
390
|
"--quiet",
|
|
391
391
|
help=(
|
|
392
|
-
"Suppress the
|
|
393
|
-
"'… Nmin, K
|
|
392
|
+
"Suppress live progress output: the Rich dashboard on a TTY "
|
|
393
|
+
"and the per-run console progress heartbeat (the '… Nmin, K "
|
|
394
|
+
"tool calls' lines during agent execution)."
|
|
394
395
|
),
|
|
395
396
|
),
|
|
396
397
|
] = False,
|
|
@@ -597,6 +598,9 @@ def eval_run(
|
|
|
597
598
|
# Explicit off beats the session layer's auto-gate; see
|
|
598
599
|
# benchflow.acp.session._console_progress_enabled.
|
|
599
600
|
os.environ["BENCHFLOW_PROGRESS"] = "off"
|
|
601
|
+
# --quiet silences ALL live progress: the heartbeat lines above and
|
|
602
|
+
# the TTY Rich dashboard (see cli._live_progress.progress_enabled).
|
|
603
|
+
os.environ["BENCHFLOW_NO_PROGRESS"] = "1"
|
|
600
604
|
|
|
601
605
|
request = EvalCreateRequest(
|
|
602
606
|
config_file=config_file,
|
|
@@ -60,6 +60,7 @@ from benchflow._utils.scoring import (
|
|
|
60
60
|
VERIFIER_TIMEOUT,
|
|
61
61
|
api_error_is_transient,
|
|
62
62
|
classify_error,
|
|
63
|
+
classify_score_outcome,
|
|
63
64
|
classify_verifier_error,
|
|
64
65
|
count_audit_outcomes,
|
|
65
66
|
count_score_outcomes,
|
|
@@ -574,6 +575,21 @@ class EvaluationConfig:
|
|
|
574
575
|
)
|
|
575
576
|
|
|
576
577
|
|
|
578
|
+
@dataclass(frozen=True)
|
|
579
|
+
class TaskFailure:
|
|
580
|
+
"""Cheap failure evidence for one FAILED (scored, reward != 1) task.
|
|
581
|
+
|
|
582
|
+
Carried on :class:`EvaluationResult` so the CLI's final block can print a
|
|
583
|
+
one-line reason per failed task from data the engine already holds —
|
|
584
|
+
without re-reading result.json files. Errored tasks are excluded (they
|
|
585
|
+
already surface through the error counters and warning replay).
|
|
586
|
+
"""
|
|
587
|
+
|
|
588
|
+
task_name: str
|
|
589
|
+
rewards: dict[str, Any] | None
|
|
590
|
+
verifier_error: str | None
|
|
591
|
+
|
|
592
|
+
|
|
577
593
|
@dataclass
|
|
578
594
|
class EvaluationResult:
|
|
579
595
|
"""Aggregated results for a job."""
|
|
@@ -588,6 +604,7 @@ class EvaluationResult:
|
|
|
588
604
|
elapsed_sec: float = 0.0
|
|
589
605
|
memory_score: float | None = None
|
|
590
606
|
memory_scores: dict[str, float] = field(default_factory=dict)
|
|
607
|
+
task_failures: list[TaskFailure] = field(default_factory=list)
|
|
591
608
|
|
|
592
609
|
@property
|
|
593
610
|
def score(self) -> float:
|
|
@@ -1250,11 +1267,20 @@ class Evaluation:
|
|
|
1250
1267
|
|
|
1251
1268
|
return await run_self_gen(rollout_config)
|
|
1252
1269
|
rollout = await Rollout.create(rollout_config)
|
|
1253
|
-
#
|
|
1254
|
-
#
|
|
1255
|
-
# benchflow.
|
|
1256
|
-
|
|
1257
|
-
|
|
1270
|
+
# Expose the live rollout to the eval dashboard's activity cell —
|
|
1271
|
+
# a same-process poll of the session's heartbeat counters, see
|
|
1272
|
+
# benchflow._utils.live_activity.
|
|
1273
|
+
from benchflow._utils import live_activity
|
|
1274
|
+
|
|
1275
|
+
live_activity.register(task_dir.name, rollout)
|
|
1276
|
+
try:
|
|
1277
|
+
# Rollout.run() enforces its own host-side hard deadline against
|
|
1278
|
+
# awaits wedged below the phase-level timeouts — see
|
|
1279
|
+
# benchflow.rollout._deadline. A trip surfaces here as a normal
|
|
1280
|
+
# infra-retryable error result.
|
|
1281
|
+
return await rollout.run()
|
|
1282
|
+
finally:
|
|
1283
|
+
live_activity.unregister(task_dir.name)
|
|
1258
1284
|
|
|
1259
1285
|
async def _run_single_task_legacy(
|
|
1260
1286
|
self, task_dir: Path, cfg: EvaluationConfig
|
|
@@ -1767,6 +1793,18 @@ class Evaluation:
|
|
|
1767
1793
|
score_counts = count_score_outcomes(all_results.values())
|
|
1768
1794
|
audit_counts = count_audit_outcomes(all_results.values())
|
|
1769
1795
|
memory, memory_scores = memory_summary(all_results)
|
|
1796
|
+
# Per-task failure evidence for the CLI's final block — FAILED (scored,
|
|
1797
|
+
# reward != 1) tasks only, from data already in memory. Sorted by name
|
|
1798
|
+
# so the printed lines are deterministic across resume/concurrency.
|
|
1799
|
+
task_failures = [
|
|
1800
|
+
TaskFailure(
|
|
1801
|
+
task_name=name,
|
|
1802
|
+
rewards=r.get("rewards"),
|
|
1803
|
+
verifier_error=r.get("verifier_error"),
|
|
1804
|
+
)
|
|
1805
|
+
for name, r in sorted(all_results.items())
|
|
1806
|
+
if classify_score_outcome(r) == "failed"
|
|
1807
|
+
]
|
|
1770
1808
|
job_result = EvaluationResult(
|
|
1771
1809
|
job_name=self._job_name,
|
|
1772
1810
|
config=cfg,
|
|
@@ -1782,6 +1820,7 @@ class Evaluation:
|
|
|
1782
1820
|
elapsed_sec=elapsed,
|
|
1783
1821
|
memory_score=memory["avg_score"],
|
|
1784
1822
|
memory_scores=memory_scores,
|
|
1823
|
+
task_failures=task_failures,
|
|
1785
1824
|
)
|
|
1786
1825
|
|
|
1787
1826
|
assert (
|
|
@@ -72,6 +72,7 @@ from benchflow._types import Role, Scene, Turn
|
|
|
72
72
|
# / ``_capture_session_trajectory`` / ``default_rollout_planes`` keep affecting
|
|
73
73
|
# the ``Rollout`` methods that call those names, because those methods stay
|
|
74
74
|
# defined in this module.
|
|
75
|
+
from benchflow._utils.live_activity import ActivitySnapshot, SessionCounters
|
|
75
76
|
from benchflow._utils.scoring import classify_error as classify_error
|
|
76
77
|
from benchflow.acp.types import McpServerSpec
|
|
77
78
|
from benchflow.agents.credentials import upload_credential
|
|
@@ -755,6 +756,27 @@ class Rollout:
|
|
|
755
756
|
def acp_client(self) -> Any:
|
|
756
757
|
return self._acp_client
|
|
757
758
|
|
|
759
|
+
def activity_snapshot(self) -> ActivitySnapshot:
|
|
760
|
+
"""The eval dashboard's per-task :class:`ActivitySnapshot`: the
|
|
761
|
+
current lifecycle phase plus the live :class:`SessionCounters` (tool
|
|
762
|
+
calls, last tool title, total tokens). ``counters`` is None before
|
|
763
|
+
the agent session exists — the phase then carries the cell
|
|
764
|
+
("creating sandbox…", "verifying…"), so a 90s sandbox create is not
|
|
765
|
+
indistinguishable from a hang.
|
|
766
|
+
|
|
767
|
+
Rollout owns the client/session dig so a rename breaks here — in
|
|
768
|
+
typed, tested code — instead of silently blanking the dashboard cell
|
|
769
|
+
(see benchflow._utils.live_activity). Session-factory agents have no
|
|
770
|
+
ACP client and always report counter-less snapshots.
|
|
771
|
+
"""
|
|
772
|
+
session = self._acp_client.session if self._acp_client else None
|
|
773
|
+
if session is None:
|
|
774
|
+
return ActivitySnapshot(self._phase, None)
|
|
775
|
+
calls, last_title = session.progress_snapshot()
|
|
776
|
+
usage = session.latest_usage_totals()
|
|
777
|
+
tokens = usage.get("total_tokens") if usage else None
|
|
778
|
+
return ActivitySnapshot(self._phase, SessionCounters(calls, last_title, tokens))
|
|
779
|
+
|
|
758
780
|
@property
|
|
759
781
|
def trajectory(self) -> list[dict]:
|
|
760
782
|
return self._trajectory
|
|
@@ -1720,6 +1742,12 @@ class Rollout:
|
|
|
1720
1742
|
"""Run the verifier and return rewards."""
|
|
1721
1743
|
cfg = self._config
|
|
1722
1744
|
|
|
1745
|
+
# Mark the phase at entry (the other transitions mark completion):
|
|
1746
|
+
# the verifier can run for minutes after disconnect() reset the phase
|
|
1747
|
+
# to "installed", and the dashboard's activity cell reads _phase to
|
|
1748
|
+
# label that stretch "verifying…" instead of going blank.
|
|
1749
|
+
self._phase = "verifying"
|
|
1750
|
+
|
|
1723
1751
|
if not self._trajectory and cfg.primary_agent != "oracle":
|
|
1724
1752
|
scraped = await _scrape_agent_trajectory(
|
|
1725
1753
|
self._env, cfg.primary_agent, cfg.sandbox_user
|
|
@@ -2401,7 +2429,11 @@ class Rollout:
|
|
|
2401
2429
|
TrajectoryWriter(
|
|
2402
2430
|
self._rollout_dir / "trajectory" / "acp_trajectory.jsonl"
|
|
2403
2431
|
).write_final(self._trajectory)
|
|
2404
|
-
|
|
2432
|
+
# info, not warning: trajectory repair is evidence-mutation an auditor
|
|
2433
|
+
# should find at default (non-TTY/CI) verbosity, but as a warning it
|
|
2434
|
+
# survived the live dashboard's WARNING+ replay and printed between
|
|
2435
|
+
# teardown and the score line (dogfood 2026-08-09).
|
|
2436
|
+
logger.info(
|
|
2405
2437
|
"Repaired %d lossy ACP tool event(s) from trusted provider capture",
|
|
2406
2438
|
repaired,
|
|
2407
2439
|
)
|